@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 +1 @@
1
- {"version":3,"file":"koobiq-components-core.mjs","sources":["../../../packages/components/core/keycodes/keycodes.ts","../../../packages/components/core/a11y/key-manager/list-key-manager.ts","../../../packages/components/core/a11y/key-manager/activedescendant-key-manager.ts","../../../packages/components/core/a11y/key-manager/focus-key-manager.ts","../../../packages/components/core/animation/animation.ts","../../../packages/components/core/animation/fade-animations.ts","../../../packages/components/core/animation/select-animations.ts","../../../packages/components/core/common-behaviors/autofill.ts","../../../packages/components/core/common-behaviors/checkable.ts","../../../packages/components/core/common-behaviors/clipboard.ts","../../../packages/components/core/common-behaviors/color.ts","../../../packages/components/core/common-behaviors/disabled.ts","../../../packages/components/core/common-behaviors/error-state.ts","../../../packages/components/core/utils/dom.ts","../../../packages/components/core/utils/utils.ts","../../../packages/components/core/common-behaviors/hover.ts","../../../packages/components/core/common-behaviors/read-state.ts","../../../packages/components/core/common-behaviors/tabindex.ts","../../../packages/components/core/common-behaviors/index.ts","../../../packages/components/core/datetime/date-adapter.ts","../../../packages/components/core/datetime/date-formats.ts","../../../packages/components/core/datetime/timezone.ts","../../../packages/components/core/error/error-state-matcher.ts","../../../packages/components/core/tokens/window.ts","../../../packages/components/core/form-field/text-ruler.ts","../../../packages/components/core/form-field/field-sizing-content.ts","../../../packages/components/core/form-field/form-field-ref.ts","../../../packages/components/core/form-field/text-field-selection.ts","../../../packages/components/core/locales/en-US.ts","../../../packages/components/core/locales/es-LA.ts","../../../packages/components/core/locales/formatters.ts","../../../packages/components/core/locales/pt-BR.ts","../../../packages/components/core/locales/ru-RU.ts","../../../packages/components/core/locales/tk-TM.ts","../../../packages/components/core/locales/locale-service.ts","../../../packages/components/core/locales/a11y.ts","../../../packages/components/core/locales/locale-service.module.ts","../../../packages/components/core/formatters/date/formatter.ts","../../../packages/components/core/formatters/date/formatter.pipe.ts","../../../packages/components/core/formatters/filesize/config.ts","../../../packages/components/core/formatters/number/formatter.ts","../../../packages/components/core/formatters/filesize/size.ts","../../../packages/components/core/formatters/filesize/formatter.ts","../../../packages/components/core/formatters/index.ts","../../../packages/components/core/forms/forms.directive.ts","../../../packages/components/core/forms/forms-module.ts","../../../packages/components/core/forms/validators.ts","../../../packages/components/core/search/search-base.ts","../../../packages/components/core/highlight/highlight-base.ts","../../../packages/components/core/highlight/highlight-background.pipe.ts","../../../packages/components/core/highlight/highlight.pipe.ts","../../../packages/components/core/highlight/index.ts","../../../packages/components/core/line/line.ts","../../../packages/components/core/navbar/rectangle-item.ts","../../../packages/components/core/option/action.ts","../../../packages/components/core/option/action-container.ts","../../../packages/components/core/option/optgroup.ts","../../../packages/components/core/option/optgroup.html","../../../packages/components/core/selection/constants.ts","../../../packages/components/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../packages/components/core/selection/pseudo-checkbox/pseudo-checkbox.partial.html","../../../packages/components/core/selection/pseudo-checkbox/pseudo-checkbox.module.ts","../../../packages/components/core/selection/select-all.ts","../../../packages/components/core/title/title-text-ref.ts","../../../packages/components/core/option/option.ts","../../../packages/components/core/option/option.html","../../../packages/components/core/option/option-module.ts","../../../packages/components/core/overflow-shadow/overflow-shadow.ts","../../../packages/components/core/overlay/auto-hide-scroll-strategy.ts","../../../packages/components/core/overlay/overlay-position-map.ts","../../../packages/components/core/overlay/panel-height.ts","../../../packages/components/core/overlay/panel-width.ts","../../../packages/components/core/overlay/safe-area.ts","../../../packages/components/core/overlay/shadow-dom-overlay-container.ts","../../../packages/components/core/pop-up/constants.ts","../../../packages/components/core/pop-up/focus-trap-strategy.ts","../../../packages/components/core/pop-up/pop-up.ts","../../../packages/components/core/pop-up/pop-up-styles.ts","../../../packages/components/core/pop-up/pop-up-trigger.ts","../../../packages/components/core/select/constants.ts","../../../packages/components/core/select/common.ts","../../../packages/components/core/select/compare-with.ts","../../../packages/components/core/select/errors.ts","../../../packages/components/core/select/events.ts","../../../packages/components/core/services/measure-scrollbar.service.ts","../../../packages/components/core/services/theme.service.ts","../../../packages/components/core/testing/event-objects.ts","../../../packages/components/core/testing/dispatch-events.ts","../../../packages/components/core/testing/element-focus.ts","../../../packages/components/core/testing/mock-ng-zone.ts","../../../packages/components/core/testing/type-in-element.ts","../../../packages/components/core/testing/wrapped-error-message.ts","../../../packages/components/core/validation/validation.ts","../../../packages/components/core/version.ts","../../../packages/components/core/koobiq-components-core.ts"],"sourcesContent":["import { _getEventTarget } from '@angular/cdk/platform';\n\nexport const MAC_ENTER = 3;\nexport const BACKSPACE = 8;\nexport const TAB = 9;\nexport const NUM_CENTER = 12;\nexport const ENTER = 13;\nexport const SHIFT = 16;\nexport const CONTROL = 17;\nexport const ALT = 18;\nexport const PAUSE = 19;\nexport const CAPS_LOCK = 20;\nexport const ESCAPE = 27;\nexport const SPACE = 32;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const END = 35;\nexport const HOME = 36;\nexport const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const PLUS_SIGN = 43;\nexport const PRINT_SCREEN = 44;\nexport const INSERT = 45;\nexport const DELETE = 46;\nexport const ZERO = 48;\nexport const ONE = 49;\nexport const TWO = 50;\nexport const THREE = 51;\nexport const FOUR = 52;\nexport const FIVE = 53;\nexport const SIX = 54;\nexport const SEVEN = 55;\nexport const EIGHT = 56;\nexport const NINE = 57;\nexport const FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\nexport const FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\nexport const QUESTION_MARK = 63;\nexport const AT_SIGN = 64;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\nexport const META = 91; // WIN_KEY_LEFT\nexport const MAC_WK_CMD_LEFT = 91;\nexport const MAC_WK_CMD_RIGHT = 93;\nexport const CONTEXT_MENU = 93;\nexport const NUMPAD_ZERO = 96;\nexport const NUMPAD_ONE = 97;\nexport const NUMPAD_TWO = 98;\nexport const NUMPAD_THREE = 99;\nexport const NUMPAD_FOUR = 100;\nexport const NUMPAD_FIVE = 101;\nexport const NUMPAD_SIX = 102;\nexport const NUMPAD_SEVEN = 103;\nexport const NUMPAD_EIGHT = 104;\nexport const NUMPAD_NINE = 105;\nexport const NUMPAD_MULTIPLY = 106;\nexport const NUMPAD_PLUS = 107;\nexport const NUMPAD_MINUS = 109;\nexport const NUMPAD_PERIOD = 110;\nexport const NUMPAD_DIVIDE = 111;\nexport const F1 = 112;\nexport const F2 = 113;\nexport const F3 = 114;\nexport const F4 = 115;\nexport const F5 = 116;\nexport const F6 = 117;\nexport const F7 = 118;\nexport const F8 = 119;\nexport const F9 = 120;\nexport const F10 = 121;\nexport const F11 = 122;\nexport const F12 = 123;\nexport const NUM_LOCK = 144;\nexport const SCROLL_LOCK = 145;\nexport const FIRST_MEDIA = 166;\nexport const FF_MINUS = 173;\nexport const MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\nexport const VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\nexport const VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\nexport const FF_MUTE = 181;\nexport const FF_VOLUME_DOWN = 182;\nexport const LAST_MEDIA = 183;\nexport const FF_VOLUME_UP = 183;\nexport const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\nexport const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\nexport const COMMA = 188;\nexport const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\nexport const PERIOD = 190;\nexport const SLASH = 191;\nexport const APOSTROPHE = 192;\nexport const TILDE = 192;\nexport const OPEN_SQUARE_BRACKET = 219;\nexport const BACKSLASH = 220;\nexport const CLOSE_SQUARE_BRACKET = 221;\nexport const SINGLE_QUOTE = 222;\nexport const MAC_META = 224;\n\ntype ModifierKey = 'altKey' | 'shiftKey' | 'ctrlKey' | 'metaKey';\n\nexport function hasModifierKey(event: KeyboardEvent | MouseEvent, ...modifiers: ModifierKey[]): boolean {\n if (modifiers.length) {\n return modifiers.some((modifier) => event[modifier]);\n }\n\n return event.altKey || event.shiftKey || event.ctrlKey || event.metaKey;\n}\n\nexport function isControl(event: KeyboardEvent): boolean {\n const keyCode = event.keyCode;\n\n switch (keyCode) {\n case SHIFT:\n case CONTROL:\n case ALT:\n return true;\n default:\n return event.metaKey;\n }\n}\n\nexport function isNumberKey({ keyCode }: KeyboardEvent): boolean {\n return keyCode >= ZERO && keyCode <= NINE;\n}\n\nexport function isNumpadKey({ keyCode }: KeyboardEvent): boolean {\n return keyCode >= NUMPAD_ZERO && keyCode <= NUMPAD_NINE;\n}\nexport function isLetterKey({ keyCode }: KeyboardEvent): boolean {\n return keyCode >= A && keyCode <= Z;\n}\n\nexport function isFunctionKey({ keyCode }: KeyboardEvent): boolean {\n return keyCode >= F1 && keyCode <= F12;\n}\n\nexport function isVerticalMovement({ keyCode }: KeyboardEvent): boolean {\n return [UP_ARROW, DOWN_ARROW, PAGE_DOWN, PAGE_UP, HOME, END].includes(keyCode);\n}\n\nexport function isHorizontalMovement({ keyCode }: KeyboardEvent): boolean {\n return [LEFT_ARROW, RIGHT_ARROW, BACKSPACE, DELETE].includes(keyCode);\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return (event.ctrlKey || event.metaKey) && event.keyCode === A;\n}\n\nexport function isCopy(event: KeyboardEvent): boolean {\n return (event.ctrlKey || event.metaKey) && event.keyCode === C;\n}\n\nexport function isInput(event: Event): boolean {\n const target = _getEventTarget<HTMLElement>(event);\n\n return !!target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA');\n}\n\nexport function isLeftBracket(event: KeyboardEvent): boolean {\n return event.code === 'BracketLeft';\n}\n\nexport function isRightBracket(event: KeyboardEvent): boolean {\n return event.code === 'BracketRight';\n}\n\nexport function isDigit({ keyCode }: KeyboardEvent): boolean {\n return [ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE].includes(keyCode);\n}\n","import { QueryList } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, filter, map, tap } from 'rxjs/operators';\nimport { A, DOWN_ARROW, END, HOME, LEFT_ARROW, NINE, RIGHT_ARROW, TAB, UP_ARROW, Z, ZERO } from '../../keycodes';\n\n// This interface is for items that can be passed to a ListKeyManager.\nexport interface ListKeyManagerOption {\n // Whether the option is disabled.\n disabled?: boolean;\n\n // Gets the label for this option.\n getLabel?(): string;\n}\n\n/** Modifier keys handled by the ListKeyManager. */\nexport type ListKeyManagerModifierKey = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey';\n\n/**\n * This class manages keyboard events for selectable lists. If you pass it a query list\n * of items, it will set the active item correctly when arrow events occur.\n */\nexport class ListKeyManager<T extends ListKeyManagerOption> {\n /**\n * Stream that emits any time the TAB key is pressed, so components can react\n * when focus is shifted off of the list.\n */\n tabOut: Subject<void> = new Subject<void>();\n\n /** Stream that emits whenever the active item of the list manager changes. */\n change = new Subject<number>();\n\n previousActiveItemIndex = -1;\n\n // Index of the currently active item.\n get activeItemIndex(): number {\n return this._activeItemIndex;\n }\n\n private _activeItemIndex = -1;\n\n // The active item.\n get activeItem(): T | null {\n return this._activeItem;\n }\n\n private _activeItem: T | null = null;\n\n private wrap: boolean = false;\n private letterKeyStream = new Subject<string>();\n private typeaheadSubscription = Subscription.EMPTY;\n private vertical = true;\n private horizontal: 'ltr' | 'rtl' | null;\n\n private scrollSize: number = 0;\n\n // Buffer for the letters that the user has pressed when the typeahead option is turned on.\n private pressedLetters: string[] = [];\n\n private homeAndEnd = false;\n\n private allowedModifierKeys: ListKeyManagerModifierKey[] = [];\n\n constructor(private _items: QueryList<T>) {\n if (_items instanceof QueryList) {\n _items.changes.subscribe((newItems: QueryList<T>) => {\n if (this._activeItem) {\n const itemArray = newItems.toArray();\n const newIndex = itemArray.indexOf(this._activeItem);\n\n if (newIndex > -1 && newIndex !== this._activeItemIndex) {\n this._activeItemIndex = newIndex;\n }\n }\n });\n }\n }\n\n /** Gets whether the user is currently typing into the manager using the typeahead feature. */\n isTyping(): boolean {\n return this.pressedLetters.length > 0;\n }\n\n withScrollSize(scrollSize: number): this {\n this.scrollSize = scrollSize;\n\n return this;\n }\n\n /**\n * Modifier keys which are allowed to be held down and whose default actions will be prevented\n * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys.\n */\n withAllowedModifierKeys(keys: ListKeyManagerModifierKey[]): this {\n this.allowedModifierKeys = keys;\n\n return this;\n }\n\n /**\n * Turns on wrapping mode, which ensures that the active item will wrap to\n * the other end of list when there are no more items in the given direction.\n */\n\n withWrap(shouldWrap = true): this {\n this.wrap = shouldWrap;\n\n return this;\n }\n\n /**\n * Sets the predicate function that determines which items should be skipped by the\n * list key manager.\n * @param predicate Function that determines whether the given item should be skipped.\n */\n skipPredicate(predicate: (item: T) => boolean): this {\n this.skipPredicateFn = predicate;\n\n return this;\n }\n\n /**\n * Configures whether the key manager should be able to move the selection vertically.\n * @param enabled Whether vertical selection should be enabled.\n */\n withVerticalOrientation(enabled: boolean = true): this {\n this.vertical = enabled;\n\n return this;\n }\n\n /**\n * Configures the key manager to move the selection horizontally.\n * Passing in `null` will disable horizontal movement.\n * @param direction Direction in which the selection can be moved.\n */\n withHorizontalOrientation(direction: 'ltr' | 'rtl' | null): this {\n this.horizontal = direction;\n\n return this;\n }\n\n /**\n * Turns on typeahead mode which allows users to set the active item by typing.\n * @param searchLetterIndex letter index for incremental search, if is -1 search is disabled\n * @param debounceInterval Time to wait after the last keystroke before setting the active item.\n */\n withTypeAhead(debounceInterval: number = 200, searchLetterIndex: number = 0): this {\n if (this._items.length && this._items.some((item) => typeof item.getLabel !== 'function')) {\n throw Error('ListKeyManager items in typeahead mode must implement the `getLabel` method.');\n }\n\n this.typeaheadSubscription.unsubscribe();\n\n // Debounce the presses of non-navigational keys, collect the ones that correspond to letters and convert those\n // letters back into a string. Afterwards find the first item that starts with that string and select it.\n this.typeaheadSubscription = this.letterKeyStream\n .pipe(\n tap((keyCode) => this.pressedLetters.push(keyCode)),\n debounceTime(debounceInterval),\n filter(() => this.pressedLetters.length > 0),\n map(() => this.pressedLetters.join(''))\n )\n .subscribe((inputString) => {\n if (searchLetterIndex === -1) {\n this.pressedLetters = [];\n\n return;\n }\n\n const items = this._items.toArray();\n\n // Start at 1 because we want to start searching at the item immediately\n // following the current active item.\n for (let i = 1; i < items.length + 1; i++) {\n const index = (this._activeItemIndex + i) % items.length;\n const item = items[index];\n\n if (\n !item.disabled &&\n item.getLabel!().toUpperCase().trim().indexOf(inputString) === searchLetterIndex\n ) {\n this.setActiveItem(index);\n break;\n }\n }\n\n this.pressedLetters = [];\n });\n\n return this;\n }\n\n /**\n * Configures the key manager to activate the first and last items\n * respectively when the Home or End key is pressed.\n * @param enabled Whether pressing the Home or End key activates the first/last item.\n */\n withHomeAndEnd(enabled: boolean = true): this {\n this.homeAndEnd = enabled;\n\n return this;\n }\n\n /**\n * Sets the active item to the item at the index specified.\n * @param index The index of the item to be set as active or item The item to be set as active.\n */\n setActiveItem(index: number | T): void;\n\n /**\n * Sets the active item to the item at the index specified.\n * @param item The index of the item to be set as active.\n */\n setActiveItem(item: any): void {\n this.previousActiveItemIndex = this._activeItemIndex;\n\n this.updateActiveItem(item);\n\n // By index, not by identity as in the CDK: autocomplete and tree-select take any `change` while\n // their panel is closed for keyboard navigation, and a re-rendered list keeps its index.\n if (this._activeItemIndex !== this.previousActiveItemIndex) {\n this.change.next(this._activeItemIndex);\n }\n }\n\n /**\n * Sets the active item depending on the key event passed in.\n * @param event Keyboard event to be used for determining which element should be active.\n */\n onKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n const modifiers: ListKeyManagerModifierKey[] = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'];\n const isModifierAllowed = modifiers.every((modifier) => {\n return !event[modifier] || this.allowedModifierKeys.indexOf(modifier) > -1;\n });\n\n switch (keyCode) {\n case TAB:\n this.tabOut.next();\n\n return;\n\n case DOWN_ARROW:\n if (this.vertical) {\n this.setNextItemActive();\n break;\n } else {\n return;\n }\n\n case UP_ARROW:\n if (this.vertical) {\n this.setPreviousItemActive();\n break;\n } else {\n return;\n }\n\n case RIGHT_ARROW:\n if (this.horizontal === 'ltr') {\n this.setNextItemActive();\n break;\n } else if (this.horizontal === 'rtl') {\n this.setPreviousItemActive();\n break;\n } else {\n return;\n }\n\n case LEFT_ARROW:\n if (this.horizontal === 'ltr') {\n this.setPreviousItemActive();\n break;\n } else if (this.horizontal === 'rtl') {\n this.setNextItemActive();\n break;\n } else {\n return;\n }\n\n case HOME:\n if (this.homeAndEnd && isModifierAllowed) {\n this.setFirstItemActive();\n break;\n } else {\n return;\n }\n\n case END:\n if (this.homeAndEnd && isModifierAllowed) {\n this.setLastItemActive();\n break;\n } else {\n return;\n }\n\n default:\n // Attempt to use the `event.key` which also maps it to the user's keyboard language,\n // otherwise fall back to resolving alphanumeric characters via the keyCode.\n if (event.key && event.key.length === 1) {\n this.letterKeyStream.next(event.key.toLocaleUpperCase());\n } else if ((keyCode >= A && keyCode <= Z) || (keyCode >= ZERO && keyCode <= NINE)) {\n this.letterKeyStream.next(String.fromCharCode(keyCode));\n }\n\n // Note that we return here, in order to avoid preventing\n // the default action of non-navigational keys.\n return;\n }\n\n this.pressedLetters = [];\n event.preventDefault();\n }\n\n // Sets the active item to the first enabled item in the list.\n setFirstItemActive(): void {\n this.setActiveItemByIndex(0, 1);\n }\n\n // Sets the active item to the last enabled item in the list.\n setLastItemActive(): void {\n this.setActiveItemByIndex(this._items.length - 1, -1);\n }\n\n // Sets the active item to the next enabled item in the list.\n setNextItemActive(): void {\n if (this._activeItemIndex < 0) {\n this.setFirstItemActive();\n } else {\n this.setActiveItemByDelta(1);\n }\n }\n\n // Sets the active item to a previous enabled item in the list.\n setPreviousItemActive(): void {\n if (this._activeItemIndex < 0 && this.wrap) {\n this.setLastItemActive();\n } else {\n this.setActiveItemByDelta(-1);\n }\n }\n\n setNextPageItemActive(delta: number = this.scrollSize): void {\n const nextItemIndex = this._activeItemIndex + delta;\n\n if (nextItemIndex >= this._items.length) {\n this.setLastItemActive();\n } else {\n this.setActiveItemByDelta(delta);\n }\n }\n\n setPreviousPageItemActive(delta: number = this.scrollSize): void {\n const nextItemIndex = this._activeItemIndex - delta;\n\n if (nextItemIndex <= 0) {\n this.setFirstItemActive();\n } else {\n this.setActiveItemByDelta(-delta);\n }\n }\n\n /**\n * Allows setting the active without any other effects.\n * @param index Index of the item to be set as active.\n */\n updateActiveItem(index: number): void;\n\n /**\n * Allows setting the active item without any other effects.\n * @param item Item to be set as active or index Index of the item to be set as active..\n */\n updateActiveItem(item: number | T): void;\n\n updateActiveItem(item: any): void {\n const itemArray = this._items.toArray();\n const index = typeof item === 'number' ? item : itemArray.indexOf(item);\n const activeItem = itemArray[index];\n\n // Explicitly against null/undefined: any other falsy value is a legitimate item.\n this._activeItem = activeItem ?? null;\n this._activeItemIndex = index;\n }\n\n /**\n * Predicate function that can be used to check whether an item should be skipped\n * by the key manager. By default, disabled items are skipped.\n */\n private skipPredicateFn = (item: T) => item.disabled;\n\n /**\n * This method sets the active item, given a list of items and the delta between the\n * currently active item and the new active item. It will calculate differently\n * depending on whether wrap mode is turned on.\n */\n private setActiveItemByDelta(delta: number): void {\n if (this.wrap) {\n this.setActiveInWrapMode(delta);\n } else {\n this.setActiveInDefaultMode(delta);\n }\n }\n\n /**\n * Sets the active item properly given \"wrap\" mode. In other words, it will continue to move\n * down the list until it finds an item that is not disabled, and it will wrap if it\n * encounters either end of the list.\n */\n private setActiveInWrapMode(delta: number): void {\n const items = this.getItemsArray();\n\n for (let i = 1; i <= items.length; i++) {\n const index = (this._activeItemIndex + delta * i + items.length) % items.length;\n const item = items[index];\n\n if (!this.skipPredicateFn(item)) {\n this.setActiveItem(index);\n\n return;\n }\n }\n }\n\n /**\n * Sets the active item properly given the default mode. In other words, it will\n * continue to move down the list until it finds an item that is not disabled. If\n * it encounters either end of the list, it will stop and not wrap.\n */\n private setActiveInDefaultMode(delta: number): void {\n this.setActiveItemByIndex(this._activeItemIndex + delta, delta);\n }\n\n /**\n * Sets the active item to the first enabled item starting at the index specified. If the\n * item is disabled, it will move in the fallbackDelta direction until it either\n * finds an enabled item or encounters the end of the list.\n */\n private setActiveItemByIndex(index: number, fallbackDelta: number): void {\n const items = this.getItemsArray();\n\n if (!items[index]) {\n return;\n }\n\n let curIndex = index;\n\n while (this.skipPredicateFn(items[curIndex])) {\n curIndex += fallbackDelta;\n\n if (!items[curIndex]) {\n return;\n }\n }\n\n this.setActiveItem(curIndex);\n }\n\n /** Returns the items as an array. */\n private getItemsArray(): T[] {\n return this._items instanceof QueryList ? this._items.toArray() : this._items;\n }\n}\n","import { ListKeyManager, ListKeyManagerOption } from './list-key-manager';\n\n/**\n * This is the interface for highlightable items (used by the ActiveDescendantKeyManager).\n * Each item must know how to style itself as active or inactive and whether or not it is\n * currently disabled.\n */\nexport interface Highlightable extends ListKeyManagerOption {\n // Applies the styles for an active item to this item.\n setActiveStyles(): void;\n\n // Applies the styles for an inactive item to this item.\n setInactiveStyles(): void;\n}\n\nexport class ActiveDescendantKeyManager<T> extends ListKeyManager<Highlightable & T> {\n /**\n * Sets the active item to the item at the specified index and adds the\n * active styles to the newly active item. Also removes active styles\n * from the previously active item.\n * @param index Index of the item to be set as active.\n */\n setActiveItem(index: number): void;\n\n /**\n * Sets the active item to the item to the specified one and adds the\n * active styles to the it. Also removes active styles from the\n * previously active item.\n * @param item Item to be set as active.\n */\n setActiveItem(item: T): void;\n\n /**\n * This method sets the active item to the item at the specified index.\n * It also adds active styles to the newly active item and removes active\n * styles from the previously active item.\n */\n setActiveItem(index: any): void {\n if (this.activeItem) {\n this.activeItem.setInactiveStyles();\n }\n\n super.setActiveItem(index);\n\n if (this.activeItem) {\n this.activeItem.setActiveStyles();\n }\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { ListKeyManager, ListKeyManagerOption } from './list-key-manager';\n\n/**\n * This is the interface for focusable items (used by the FocusKeyManager).\n * Each item must know how to focus itself, whether or not it is currently disabled\n * and be able to supply it's label.\n */\nexport interface IFocusableOption extends ListKeyManagerOption {\n // Focuses the `FocusableOption`. */\n focus(origin?: FocusOrigin): void;\n}\n\nexport class FocusKeyManager<T> extends ListKeyManager<IFocusableOption & T> {\n private origin: FocusOrigin = 'program';\n\n /**\n * Sets the active item or index to the item that is specified and focuses it.\n * @param item Item to be set as active.\n */\n setActiveItem(item: number | T): void;\n\n setActiveItem(item: any): void {\n super.setActiveItem(item);\n\n if (this.activeItem) {\n this.activeItem.focus(this.origin);\n }\n }\n\n /**\n * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls.\n * @param origin Focus origin to be used when focusing items.\n */\n setFocusOrigin(origin: FocusOrigin): this {\n this.origin = origin;\n\n return this;\n }\n\n getFocusOrigin(): FocusOrigin {\n return this.origin;\n }\n}\n","/**\n * Koobiq components animation curves\n *\n * @docs-private\n */\nexport enum KbqAnimationCurves {\n StandardCurve = 'cubic-bezier(0.4,0.0,0.2,1)',\n DecelerationCurve = 'cubic-bezier(0.0,0.0,0.2,1)',\n AccelerationCurve = 'cubic-bezier(0.4,0.0,1,1)',\n SharpCurve = 'cubic-bezier(0.4,0.0,0.6,1)',\n EaseInOut = 'ease-in-out',\n EaseInOutQuad = 'cubic-bezier(0.455,0.03,0.515,0.955)'\n}\n\n/**\n * Koobiq components animation durations\n *\n * @docs-private\n */\nexport enum KbqAnimationDurations {\n Long = '300ms',\n Complex = '250ms',\n Entering = '150ms',\n Exiting = '125ms',\n Rapid = '100ms',\n Instant = '50ms'\n}\n","import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\n\nexport const fadeAnimation: AnimationTriggerMetadata = trigger('fadeAnimation', [\n state('void', style({ opacity: 0 })),\n state('true', style({ opacity: 1 })),\n state('false', style({ opacity: 0 })),\n transition('* => true', animate('150ms cubic-bezier(0.0, 0.0, 0.2, 1)')),\n transition('* => void', animate('150ms cubic-bezier(0.4, 0.0, 1, 1)'))\n]);\n","import { animate, AnimationTriggerMetadata, group, state, style, transition, trigger } from '@angular/animations';\n\n/**\n * The following are all the animations for the kbq-select component, with each\n * const containing the metadata for one animation.\n *\n */\nexport const kbqSelectAnimations: {\n readonly transformPanel: AnimationTriggerMetadata;\n readonly fadeInContent: AnimationTriggerMetadata;\n} = {\n /**\n * This animation transforms the select's overlay panel on and off the page.\n *\n * When the panel is attached to the DOM, it expands its width by the amount of padding, scales it\n * up to 100% on the Y axis, fades in its border, and translates slightly up and to the\n * side to ensure the option text correctly overlaps the trigger text.\n *\n * When the panel is removed from the DOM, it simply fades out linearly.\n */\n transformPanel: trigger('transformPanel', [\n state(\n 'void',\n style({\n transform: 'scaleY(0)',\n minWidth: '100%',\n opacity: 0\n })\n ),\n transition(\n 'void => *',\n group([\n animate('0ms cubic-bezier(0.25, 0.8, 0.25, 1)')\n ])\n ),\n transition('* => void', [\n animate('0ms 0ms linear', style({ opacity: 0 }))\n ])\n ]),\n\n /**\n * This animation fades in the background color and text content of the\n * select's options. It is time delayed to occur 100ms after the overlay\n * panel has transformed in.\n */\n fadeInContent: trigger('fadeInContent', [\n state('showing', style({ opacity: 1 })),\n transition('void => showing', [\n style({ opacity: 0 }),\n animate('0ms 0ms cubic-bezier(0.55, 0, 0.55, 0.2)')\n ])\n ])\n};\n\nexport const transformPanel = kbqSelectAnimations.transformPanel;\n\nexport const fadeInContent = kbqSelectAnimations.fadeInContent;\n","import { AutofillMonitor } from '@angular/cdk/text-field';\nimport { DestroyRef, ElementRef, inject, Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Tracks whether the current control's value was filled in by the browser, as a signal.\n *\n * Call it from an injection context on a directive whose host is the element the browser actually\n * fills — a text `<input>` or a `<textarea>`. Every `KbqFormFieldControl` that can be autofilled\n * exposes the result as its `autofilled` member.\n *\n * This is a hook for application code, not the mechanism behind the autofill styling. The styling\n * keys on `:autofill` in CSS, which matches in the same style pass the browser fills the field;\n * detection here goes through a zero-length keyframe animation and an `animationstart` listener, so\n * it lands a frame or two later — too late to paint with, and early enough for anything a component\n * wants to do about it.\n *\n * `monitor()` returns EMPTY off the browser platform, so this needs no `Platform` guard.\n */\nexport const kbqInjectAutofilled = (): Signal<boolean> => {\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n const autofillMonitor = inject(AutofillMonitor);\n const destroyRef = inject(DestroyRef);\n const autofilled = signal(false);\n\n autofillMonitor\n .monitor(elementRef)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe(({ isAutofilled }) => autofilled.set(isAutofilled));\n\n // `stopMonitoring()` is the load-bearing teardown, not a duplicate of `takeUntilDestroyed()`\n // above: `AutofillMonitor` is `providedIn: 'root'`, so dropping only the subscription would\n // leave the element registered with the app-lifetime service and its marker classes on the DOM\n // node.\n destroyRef.onDestroy(() => autofillMonitor.stopMonitoring(elementRef));\n\n return autofilled.asReadonly();\n};\n","import { computed, Directive, forwardRef, InjectionToken, model, Provider, signal } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KbqCheckedState } from './checkbox';\n\n/**\n * Provider Expression that allows `KbqCheckable` to register as a `ControlValueAccessor`, so any host\n * applying it via `hostDirectives` gets `[(ngModel)]`/`formControl` support without wiring up its own.\n * @docs-private\n */\nexport const KBQ_CHECKABLE_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqCheckable),\n multi: true\n};\n\n/**\n * Click action shared by checkable controls (checkbox, toggle, and custom checkbox-like primitives).\n * noop: Do not toggle checked or indeterminate.\n * check: Only toggle checked status, ignore indeterminate.\n * check-indeterminate: Toggle checked status, set indeterminate to false. Default behavior.\n * undefined: Same as `check-indeterminate`.\n */\nexport type KbqCheckableClickAction = 'noop' | 'check' | 'check-indeterminate' | undefined;\n\n/** Injection token that can be used to specify the default click behavior for checkable controls. */\nexport const KBQ_CHECKABLE_CLICK_ACTION = new InjectionToken<KbqCheckableClickAction>('kbq-checkable-click-action');\n\n/**\n * Represents the different states that require custom transitions between them.\n * @docs-private\n */\nexport enum TransitionCheckState {\n /** The initial state of the component before any user interaction. */\n Init = 'init',\n /** The state representing the component when it's becoming checked. */\n Checked = 'checked',\n /** The state representing the component when it's becoming unchecked. */\n Unchecked = 'unchecked',\n /** The state representing the component when it's becoming indeterminate. */\n Indeterminate = 'indeterminate'\n}\n\n/** Result of resolving a click on a checkable control's native input. See {@link KbqCheckable.resolveClick}. */\nexport interface KbqCheckableClickResult {\n /** Whether `checked` should be toggled and a `change` event emitted. */\n readonly shouldToggle: boolean;\n /** Whether `indeterminate` should be cleared and an `indeterminateChange` event emitted. */\n readonly shouldClearIndeterminate: boolean;\n}\n\n/**\n * Shared behavior for checkbox-like controls: checked/disabled/indeterminate/tabIndex state, the click-to-toggle\n * algorithm, ARIA-checked computation, and `ControlValueAccessor` change plumbing.\n *\n * Meant to be applied via `hostDirectives` by components that render their own native `<input type=\"checkbox\">`\n * and markup (e.g. `KbqCheckbox`, `KbqToggleComponent`, or custom checkbox-like primitives). Hosts stay\n * responsible for their own public inputs/outputs, `FocusMonitor` wiring, and emitting their own typed\n * `change` event - this directive only centralizes the state and decisions behind them.\n */\n@Directive({\n selector: '[kbqCheckable]',\n providers: [KBQ_CHECKABLE_CONTROL_VALUE_ACCESSOR],\n exportAs: 'kbqCheckable'\n})\nexport class KbqCheckable implements ControlValueAccessor {\n private controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /**\n * Called when the control is blurred. Needed to properly implement `ControlValueAccessor`.\n * @docs-private\n */\n onTouched: () => any = () => {};\n\n /** @docs-private */\n readonly currentCheckState = signal<TransitionCheckState>(TransitionCheckState.Init);\n\n readonly checked = model(false);\n\n readonly disabled = model(false);\n\n readonly indeterminate = model(false);\n\n /** Raw tab index as set by the caller, ignoring `disabled`. Use `effectiveTabIndex` to read the applied value. */\n readonly tabIndex = model(0);\n\n /** The tab index actually applied to the native input: forced to `-1` while disabled. */\n readonly effectiveTabIndex = computed(() => (this.disabled() ? -1 : this.tabIndex()));\n\n /** Returns the ARIA-checked value: `'true'`, `'false'`, or `'mixed'` when indeterminate. */\n getAriaChecked(): KbqCheckedState {\n return this.checked() ? 'true' : this.indeterminate() ? 'mixed' : 'false';\n }\n\n /** Toggles the `checked` state and notifies the registered `ControlValueAccessor` change handler. */\n toggle(): void {\n this.checked.update((value) => !value);\n this.notifyFormValueChange(this.checked());\n }\n\n /**\n * Resolves what a click on the native input should do, based on the current state and `clickAction`.\n * Pure - does not mutate state. Callers apply `checked`/`indeterminate` themselves and own emitting\n * their own change events, so timing/order stays identical to a hand-written click handler.\n */\n resolveClick(clickAction: KbqCheckableClickAction): KbqCheckableClickResult {\n if (this.disabled() || clickAction === 'noop') {\n return { shouldToggle: false, shouldClearIndeterminate: false };\n }\n\n return {\n shouldToggle: true,\n shouldClearIndeterminate: this.indeterminate() && clickAction !== 'check'\n };\n }\n\n /** Resets the native input to match the current `checked`/`indeterminate` state (used for the `noop` click action). */\n resetNativeInput(nativeInput: HTMLInputElement): void {\n nativeInput.checked = this.checked();\n nativeInput.indeterminate = this.indeterminate();\n }\n\n /** Transitions the animation state, ignoring no-op transitions. @docs-private */\n transitionCheckState(newState: TransitionCheckState): void {\n if (this.currentCheckState() === newState) return;\n\n this.currentCheckState.set(newState);\n }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: any): void {\n this.checked.set(!!value);\n }\n\n /** Stores the `ControlValueAccessor` change handler to be notified by `notifyFormValueChange`. */\n registerOnChange(fn: (value: any) => void): void {\n this.controlValueAccessorChangeFn = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /** Notifies the registered `ControlValueAccessor` change handler. */\n notifyFormValueChange(value: boolean): void {\n this.controlValueAccessorChangeFn(value);\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[kbqNormalizeWhitespace]',\n host: {\n '(copy)': 'onCopy($event)'\n }\n})\nexport class KbqNormalizeWhitespace {\n /** @docs-private */\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Replace thin-space with space on copy event\n */\n onCopy($event: ClipboardEvent) {\n const value =\n (this.elementRef.nativeElement as HTMLInputElement).value || this.elementRef.nativeElement.textContent;\n\n if ($event.type === 'copy' && value) {\n $event.preventDefault();\n $event.clipboardData?.setData('text', value?.replace(/\\u2009/g, ' '));\n }\n }\n}\n","import { Directive, ElementRef, inject, Input, isDevMode } from '@angular/core';\nimport { AbstractConstructor, Constructor } from './constructor';\n\nexport interface CanColor {\n color: KbqComponentColors | ThemePalette | string;\n}\n\n/** @docs-private */\nexport type CanColorCtor = Constructor<CanColor> & AbstractConstructor<CanColor>;\n\nexport interface HasElementRef {\n elementRef: ElementRef;\n}\n\nexport enum ThemePalette {\n Primary = 'primary',\n Secondary = 'secondary',\n Error = 'error',\n Info = 'info',\n Warning = 'warning',\n Success = 'success',\n\n Default = 'secondary',\n Empty = ''\n}\n\nexport enum KbqComponentColors {\n Theme = 'theme',\n ThemeFade = 'theme-fade',\n Contrast = 'contrast',\n ContrastFade = 'contrast-fade',\n\n Error = 'error',\n Warning = 'warning',\n Success = 'success',\n\n Default = 'contrast',\n Empty = 'empty'\n}\n\n/** Mixin to augment a directive with a `color` property. */\nexport function mixinColor<T extends AbstractConstructor<HasElementRef>>(\n base: T,\n defaultColor?: KbqComponentColors | ThemePalette\n): CanColorCtor & T;\n\nexport function mixinColor<T extends Constructor<HasElementRef>>(\n base: T,\n defaultColor: KbqComponentColors | ThemePalette = KbqComponentColors.Empty\n): CanColorCtor & T {\n return class extends base {\n get color(): KbqComponentColors | ThemePalette {\n return this._color;\n }\n set color(value: KbqComponentColors | ThemePalette) {\n const colorPalette = value || defaultColor;\n\n if (colorPalette !== this._color) {\n if (this._color) {\n this.elementRef.nativeElement.classList.remove(`kbq-${this._color}`);\n }\n\n if (colorPalette) {\n this.elementRef.nativeElement.classList.add(`kbq-${colorPalette}`);\n }\n\n this._color = colorPalette;\n }\n }\n\n private _color: KbqComponentColors | ThemePalette;\n\n constructor(...args: any[]) {\n super(...args);\n\n this.color = defaultColor;\n\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn('mixinColor deprecated and will be deleted in next major release');\n }\n }\n };\n}\n\n@Directive()\nexport class KbqColorDirective {\n /** @docs-private */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @docs-private */\n protected defaultColor: KbqComponentColors | ThemePalette | string;\n\n /** current class name of color */\n get colorClassName(): KbqComponentColors | ThemePalette | string {\n return `kbq-${this._color}`;\n }\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get color(): KbqComponentColors | ThemePalette | string {\n return this._color;\n }\n\n set color(value: KbqComponentColors | ThemePalette | string) {\n const color = value || this.defaultColor;\n\n if (color !== this._color) {\n if (this._color) {\n this.elementRef.nativeElement.classList.remove(`kbq-${this._color}`);\n }\n\n if (color) {\n this.elementRef.nativeElement.classList.add(`kbq-${color}`);\n }\n\n this._color = color;\n }\n }\n\n protected _color: KbqComponentColors | ThemePalette | string;\n\n constructor() {\n this.color = KbqComponentColors.Empty;\n }\n\n /** this color will be used as a default value. For example [color]=\"'' | false | undefined | null\". */\n setDefaultColor(color: KbqComponentColors | ThemePalette | string) {\n this.defaultColor = color;\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { isDevMode } from '@angular/core';\nimport { AbstractConstructor, Constructor } from './constructor';\n\nexport interface CanDisable {\n disabled: boolean;\n}\n\n/** @docs-private */\nexport type CanDisableCtor = Constructor<CanDisable> & AbstractConstructor<CanDisable>;\n\n/** Mixin to augment a directive with a `disabled` property. */\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport function mixinDisabled<T extends AbstractConstructor<{}>>(base: T): CanDisableCtor & T;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport function mixinDisabled<T extends Constructor<{}>>(base: T): CanDisableCtor & T {\n return class extends base {\n get disabled() {\n return this._disabled;\n }\n\n set disabled(value: any) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _disabled: boolean = false;\n\n constructor(...args: any[]) {\n super(...args);\n\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn('mixinDisabled deprecated and will be deleted in next major release');\n }\n }\n };\n}\n","import { isDevMode } from '@angular/core';\nimport { AbstractControl, FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { ErrorStateMatcher } from '../error/error-state-matcher';\nimport { AbstractConstructor, Constructor } from './constructor';\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n /** Whether the component is in an error state. */\n errorState: boolean;\n /** An object used to control the error state of the component. */\n errorStateMatcher: ErrorStateMatcher;\n /** Updates the error state based on the provided error state matcher. */\n updateErrorState(): void;\n}\n\n/** @docs-private */\nexport type CanUpdateErrorStateCtor = Constructor<CanUpdateErrorState>;\n\n/** @docs-private */\nexport interface HasErrorState {\n parentFormGroup: FormGroupDirective | null;\n parentForm: NgForm | null;\n defaultErrorStateMatcher: ErrorStateMatcher;\n\n ngControl: NgControl | null;\n stateChanges: Subject<void>;\n}\n\n/**\n * Mixin to augment a directive with updateErrorState method.\n * For component with `errorState` and need to update `errorState`.\n */\nexport function mixinErrorState<T extends AbstractConstructor<HasErrorState>>(base: T): CanUpdateErrorStateCtor & T;\nexport function mixinErrorState<T extends Constructor<HasErrorState>>(base: T): CanUpdateErrorStateCtor & T {\n return class extends base {\n /** Whether the component is in an error state. */\n errorState: boolean = false;\n\n errorStateMatcher: ErrorStateMatcher;\n\n constructor(...args: any[]) {\n super(...args);\n\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn('mixinErrorState deprecated and will be deleted in next major release');\n }\n }\n\n updateErrorState() {\n const oldState = this.errorState;\n const parent = this.parentFormGroup || this.parentForm;\n const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n const newState = matcher.isErrorState(control, parent);\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n };\n}\n\n/**\n * Class that tracks the error state of a component.\n * @docs-private\n */\nexport class KbqErrorStateTracker implements CanUpdateErrorState {\n /** Whether the tracker is currently in an error state. */\n errorState = false;\n\n /** User-defined matcher for the error state. */\n errorStateMatcher: ErrorStateMatcher;\n\n constructor(\n private defaultMatcher: ErrorStateMatcher | null,\n public ngControl: NgControl | null,\n private parentFormGroup: FormGroupDirective | null,\n private parentForm: NgForm | null,\n private stateChanges: Subject<void>\n ) {}\n\n /** Updates the error state based on the provided error state matcher. */\n updateErrorState() {\n const oldState = this.errorState;\n const parent = this.parentFormGroup || this.parentForm;\n const matcher = this.errorStateMatcher || this.defaultMatcher;\n const control = this.ngControl ? (this.ngControl.control as AbstractControl) : null;\n const newState = matcher?.isErrorState(control, parent) ?? false;\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n}\n","import { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { ElementRef, inject } from '@angular/core';\n\n/**\n * Injects the native element for the current component.\n */\nexport const kbqInjectNativeElement = <T extends Element = HTMLElement>(): T => {\n return inject<ElementRef<T>>(ElementRef<T>).nativeElement;\n};\n\n/**\n * Focuses `element` and scrolls it into view by the shortest distance, leaving a visible one alone.\n *\n * The reveal is explicit because the one `focus()` performs implicitly is not portable: WebKit defers it\n * to a later rendering update, where it lands after — and undoes — any scrolling the reader did in the\n * meantime. Letting the element reveal itself keeps every consumer working, whatever it uses as a scroll\n * container, and the browser resolves that container rather than the caller guessing at it.\n *\n * Pass `skipReveal` when the pointer caused the focus: the element is already under the cursor, so\n * revealing it would shift the list out from under it.\n */\nexport const kbqFocusAndReveal = (element: HTMLElement, skipReveal = false): void => {\n if (typeof element.focus !== 'function') return;\n\n // A focus listener calling back into `focus` must not scroll a second time. Read through shadow\n // roots, where `document.activeElement` reports the host instead of the element that holds focus.\n const wasFocused = _getFocusedElementPierceShadowDom() === element;\n\n element.focus({ preventScroll: true });\n\n if (skipReveal || wasFocused) return;\n\n element.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n};\n\n/** Axis a scroll-overflow check applies to. */\nexport type KbqScrollAxis = 'horizontal' | 'vertical';\n\n/**\n * Largest disagreement (px) between an element's box metrics and the scroll offset the browser actually\n * hands out.\n *\n * `scrollWidth`/`clientWidth` are rounded to whole CSS pixels (up to 1px of error) while the scroll offset\n * snaps to the device-pixel grid, whose step is `1 / devicePixelRatio` CSS px — so the bound is\n * `1 + 1 / devicePixelRatio` and widens as the page is zoomed out, rather than being a constant. At 50% zoom\n * on a 1× display it is already 3px, which is why a fixed tolerance leaks the bug back in at low zoom.\n *\n * The view is resolved from the element rather than a global, so the helper stays usable on the server.\n */\nexport const kbqGetScrollOverflowTolerance = (element: Element): number => {\n return 1 + 1 / (element.ownerDocument.defaultView?.devicePixelRatio || 1);\n};\n\n/**\n * Whether `element` has scroll overflow along `axis` larger than the measurement error of the metrics it is\n * derived from — i.e. whether there is a scroll range the user can actually reach.\n */\nexport const kbqHasScrollOverflow = (element: Element, axis: KbqScrollAxis = 'horizontal'): boolean => {\n const overflow =\n axis === 'horizontal' ? element.scrollWidth - element.clientWidth : element.scrollHeight - element.clientHeight;\n\n return overflow > kbqGetScrollOverflowTolerance(element);\n};\n\n/**\n * Rendered height of an element, or `0` when it has no box.\n *\n * `getClientRects()` returns an empty list for elements that are not laid out and is missing entirely\n * from the server DOM, so both the method and the first rect are read defensively rather than going\n * through `getBoundingClientRect()`, whose zeroes are indistinguishable from a genuinely collapsed\n * element.\n */\nexport const kbqGetElementHeight = (element: Element): number => {\n return element.getClientRects?.()?.[0]?.height ?? 0;\n};\n","export function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/** Whether the value is undefined. */\nexport const isUndefined = (value: unknown): value is undefined => {\n return value === undefined;\n};\n\n/** Whether the value is null. */\nexport const isNull = (value: unknown): value is null => {\n return value === null;\n};\n\n/** Whether the value is HTMLElement. */\nexport const isHtmlElement = (value: unknown): value is HTMLElement => {\n return value instanceof HTMLElement;\n};\n\n/** Whether the value is Element. */\nexport const isElement = (value: unknown): value is Element => value instanceof Element;\n\n/** Whether the value is HTMLElement or null. */\nexport const isHtmlElementOrNull = (value: unknown): value is HTMLElement | null => {\n return isHtmlElement(value) || isNull(value);\n};\n\nexport const getNodesWithoutComments = (nodes: NodeList): Node[] => {\n const COMMENT_NODE = 8;\n\n return Array.from(nodes).filter((node) => node.nodeType !== COMMENT_NODE);\n};\n\nexport const leftIconClassName = 'kbq-icon_left';\nexport const rightIconClassName = 'kbq-icon_right';\n\n/** Whether the current platform is a Mac. */\nexport function isMac(): boolean {\n // eslint-disable-next-line no-restricted-globals\n return /^mac/i.test(navigator?.platform);\n}\n\n/** Converts an enumeration (enum) type into a string literal type containing\n * all possible string representations of the values. */\nexport type KbqEnumValues<T extends string | number> = `${T}`;\n","import { Directive } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map, merge } from 'rxjs';\nimport { kbqInjectNativeElement } from '../utils';\n\n/**\n * Directive that adds a `kbq-hovered` class to an element, based on its hover state.\n *\n * @docs-private\n */\n@Directive({\n selector: '[kbqHover]',\n host: {\n class: 'kbq-hover',\n '[class.kbq-hovered]': 'hovered()'\n },\n exportAs: 'kbqHover'\n})\nexport class KbqHover {\n private readonly element = kbqInjectNativeElement();\n\n /**\n * Whether the element is hovered.\n */\n readonly hovered = toSignal(\n merge(\n fromEvent<MouseEvent>(this.element, 'mouseenter'),\n fromEvent<MouseEvent>(this.element, 'mouseleave')\n ).pipe(map(({ type }) => type === 'mouseenter')),\n { initialValue: false }\n );\n}\n","import { ChangeDetectorRef, Directive, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Directive({\n host: {\n '(mouseenter)': 'mouseenterHandler()',\n '(mouseleave)': 'mouseleaveHandler()',\n '(click)': 'read.next(true)'\n }\n})\nexport class KbqReadStateDirective {\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n timestamp: number;\n timeToRead: number = 500;\n\n readonly read = new BehaviorSubject<boolean>(false);\n\n mouseenterHandler() {\n this.timestamp = new Date().getTime();\n }\n\n mouseleaveHandler() {\n if (new Date().getTime() - this.timestamp > this.timeToRead) {\n this.read.next(true);\n }\n\n this.changeDetectorRef.markForCheck();\n }\n}\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { isDevMode } from '@angular/core';\nimport { AbstractConstructor, Constructor } from './constructor';\nimport { CanDisable } from './disabled';\n\nexport interface HasTabIndex {\n tabIndex: number;\n}\n\nexport type HasTabIndexCtor = Constructor<HasTabIndex> & AbstractConstructor<HasTabIndex>;\n\n/** Mixin to augment a directive with a `tabIndex` property. */\nexport function mixinTabIndex<T extends AbstractConstructor<CanDisable>>(\n base: T,\n defaultTabIndex?: number\n): HasTabIndexCtor & T;\n\nexport function mixinTabIndex<T extends Constructor<CanDisable>>(base: T, defaultTabIndex = 0): HasTabIndexCtor & T {\n return class extends base implements HasTabIndex {\n defaultTabIndex = defaultTabIndex;\n\n get tabIndex(): number {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: number) {\n // If the specified tabIndex value is null or undefined, fall back to the default value.\n\n this._tabIndex = value != null ? coerceNumberProperty(value) : this.defaultTabIndex;\n }\n\n private _tabIndex: number = defaultTabIndex;\n\n constructor(...args: any[]) {\n super(...args);\n\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn('mixinTabIndex deprecated and will be deleted in next major release');\n }\n }\n };\n}\n","import { InjectionToken } from '@angular/core';\n\nexport * from './autofill';\nexport * from './checkable';\nexport * from './checkbox';\nexport * from './clipboard';\nexport { CanColor, CanColorCtor, KbqColorDirective, KbqComponentColors, mixinColor, ThemePalette } from './color';\nexport { CanDisable, CanDisableCtor, mixinDisabled } from './disabled';\nexport { CanUpdateErrorState, CanUpdateErrorStateCtor, KbqErrorStateTracker, mixinErrorState } from './error-state';\nexport * from './flex';\nexport * from './hover';\nexport * from './orientation';\nexport * from './read-state';\nexport { KbqDefaultSizes } from './size';\nexport { HasTabIndex, HasTabIndexCtor, mixinTabIndex } from './tabindex';\n\nexport const KBQ_PARENT_ANIMATION_COMPONENT = new InjectionToken<any>('kbq-parent-animation-component');\n","import { inject, InjectionToken, LOCALE_ID } from '@angular/core';\nimport { DateAdapter as BaseDateAdapter } from '@koobiq/date-adapter';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const KBQ_DATE_LOCALE = new InjectionToken<string>('KBQ_DATE_LOCALE', {\n providedIn: 'root',\n factory: KBQ_DATE_LOCALE_FACTORY\n});\n\n/** @docs-private */\nexport function KBQ_DATE_LOCALE_FACTORY(): string {\n return inject(LOCALE_ID);\n}\n\nexport abstract class DateAdapter<D> extends BaseDateAdapter<D> {\n /** A stream that emits when the locale changes. */\n abstract get localeChanges(): Observable<any>;\n\n protected abstract _localeChanges: BehaviorSubject<string>;\n}\n","import { InjectionToken } from '@angular/core';\nimport { DateFormats } from '@koobiq/date-adapter';\n\nexport const KBQ_DATE_FORMATS = new InjectionToken<DateFormats>('kbq-date-formats');\nexport type KbqDateFormats = DateFormats;\n","import { inject, Injectable, InjectionToken, isDevMode, Provider, signal, Signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/**\n * Time zone the library renders dates in.\n *\n * Accepts an IANA name (`'Europe/Moscow'`), a fixed offset — in minutes east of UTC (`180`) or as a\n * string (`'+03:00'`, `'UTC+3'`, `'03:00:00'`) — `'utc'`, or `'system'` for the zone of the host the code\n * runs on.\n *\n * The `string & {}` arm keeps IANA names open while still offering the special values as completions.\n */\nexport type KbqTimezoneLike = 'system' | 'utc' | number | (string & {});\n\n/**\n * InjectionToken for the time zone every date the library formats is rendered in.\n *\n * Read once, by the {@link KbqDateTimezoneService} constructor, out of the injector that created the\n * service — call {@link KbqDateTimezoneService.setTimezone} to change the zone afterwards. Defaults to\n * `'system'`, the zone of the host the code runs on.\n */\nexport const KBQ_DATE_TIMEZONE = new InjectionToken<KbqTimezoneLike>('KBQ_DATE_TIMEZONE');\n\nconst MINUTES_PER_HOUR = 60;\nconst SECONDS_PER_MINUTE = 60;\n\n/** The largest offset any zone has ever had; anything beyond it is a typo, not a zone. */\nconst MAX_OFFSET_HOURS = 14;\nconst MAX_OFFSET_MINUTES = MAX_OFFSET_HOURS * MINUTES_PER_HOUR;\n\n/** `UTC`/`GMT` with no offset — a valid input on its own, and what `Intl` reports for zero-offset zones. */\nconst UTC_ALIAS_PATTERN = /^(?:utc|gmt)$/i;\n\n/**\n * A fixed offset written with separators, with or without a `UTC`/`GMT` prefix and with or without a\n * sign: `+03:00`, `UTC+3`, `GMT+05:30`, `03:00:00`. The seconds group matches both the `timeZoneName`\n * `Intl` reports in the `longOffset` style for pre-standard-time instants (`GMT-00:44:30`) and the form\n * `KbqTimezoneZone.offset` is written in.\n */\nconst FIXED_OFFSET_PATTERN = /^(?:utc|gmt)?([+-])?(\\d{1,2})(?::([0-5]\\d)(?::([0-5]\\d))?)?$/i;\n\n/** The same offset written without separators: `-0530`. Kept apart so `+123` fails instead of backtracking. */\nconst COMPACT_OFFSET_PATTERN = /^(?:utc|gmt)?([+-])?(\\d{2})([0-5]\\d)$/i;\n\n/** Offset in minutes east of UTC of a fixed-offset specifier, or `null` when the value is not one. */\nconst parseFixedOffset = (value: string): number | null => {\n if (UTC_ALIAS_PATTERN.test(value)) return 0;\n\n const match = COMPACT_OFFSET_PATTERN.exec(value) ?? FIXED_OFFSET_PATTERN.exec(value);\n\n if (!match) return null;\n\n const [, sign, hours, minutes = '0', seconds = '0'] = match;\n\n if (Number(hours) > MAX_OFFSET_HOURS) return null;\n\n const magnitude = Number(hours) * MINUTES_PER_HOUR + Number(minutes) + Number(seconds) / SECONDS_PER_MINUTE;\n\n // Rounded because both date libraries expect whole minutes; only pre-1900 zones have a seconds part.\n return (sign === '-' ? -1 : 1) * Math.round(magnitude);\n};\n\n/**\n * One `Intl.DateTimeFormat` per IANA zone: building it is the expensive part of resolving an offset, and\n * an application uses a handful of zones at most. A `null` entry marks a name `Intl` rejected, so an\n * invalid zone is reported once instead of throwing on every date.\n *\n * Bounded because the zone can come from unvalidated input — a cookie on the server, a picker in the\n * browser — and this map outlives every request in the process.\n */\nconst MAX_CACHED_FORMATTERS = 32;\nconst offsetFormatters = new Map<string, Intl.DateTimeFormat | null>();\n\nconst getOffsetFormatter = (timeZone: string): Intl.DateTimeFormat | null => {\n if (!offsetFormatters.has(timeZone)) {\n if (offsetFormatters.size >= MAX_CACHED_FORMATTERS) {\n offsetFormatters.delete(offsetFormatters.keys().next().value!);\n }\n\n try {\n offsetFormatters.set(timeZone, new Intl.DateTimeFormat('en-US', { timeZone, timeZoneName: 'longOffset' }));\n } catch {\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn(`Unknown time zone \"${timeZone}\", dates are left in the host time zone.`);\n }\n\n offsetFormatters.set(timeZone, null);\n }\n }\n\n return offsetFormatters.get(timeZone)!;\n};\n\n/**\n * Offset of `timezone` at `timestamp`, in minutes east of UTC. `null` means \"leave the date in the host\n * zone\" — either because `timezone` is `'system'`, or because it is a name no `Intl` implementation knows.\n *\n * Takes the instant because an IANA zone has no single offset: `'Europe/Berlin'` is +60 in January and\n * +120 in July, and one list of dates can span the change.\n */\nexport const kbqResolveTimezoneOffset = (timezone: KbqTimezoneLike, timestamp: number): number | null => {\n if (timezone === 'system') return null;\n\n // Bounded and rounded like the string form: a numeric offset comes from the same unvalidated places,\n // and neither date library reads a fractional minute or a 99-hour offset as anything sensible.\n if (typeof timezone === 'number') {\n return Number.isFinite(timezone) && Math.abs(timezone) <= MAX_OFFSET_MINUTES ? Math.round(timezone) : null;\n }\n\n const fixedOffset = parseFixedOffset(timezone);\n\n if (fixedOffset !== null) return fixedOffset;\n\n // An invalid date has no offset to resolve, and `Intl` throws rather than saying so.\n if (!Number.isFinite(timestamp)) return null;\n\n const timeZoneName = getOffsetFormatter(timezone)\n ?.formatToParts(new Date(timestamp))\n .find(({ type }) => type === 'timeZoneName')?.value;\n\n return timeZoneName ? parseFixedOffset(timeZoneName) : null;\n};\n\n/**\n * Holds the time zone every date the library creates, parses and formats is rendered in.\n *\n * Provided in root, so {@link KBQ_DATE_TIMEZONE} in the application providers configures the whole\n * application. To scope a zone to one subtree, list {@link kbqDateTimezoneProvider} in that component's\n * `providers` together with the date adapter and the `DateFormatter`: the adapter captures the service of\n * the injector that created it, and keeps using it.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqDateTimezoneService {\n /** Active time zone. */\n readonly timezone: Signal<KbqTimezoneLike>;\n\n /**\n * Emits when the active time zone changes.\n *\n * The counterpart of `DateAdapter.localeChanges`, for the surfaces that render a date once instead of\n * through an impure pipe — the date inputs and the calendar.\n */\n readonly changes: Observable<KbqTimezoneLike>;\n\n private readonly _timezone = signal<KbqTimezoneLike>(inject(KBQ_DATE_TIMEZONE, { optional: true }) ?? 'system');\n private readonly _changes = new Subject<KbqTimezoneLike>();\n\n constructor() {\n this.timezone = this._timezone.asReadonly();\n this.changes = this._changes.asObservable();\n }\n\n /** Activates a time zone. */\n setTimezone(timezone: KbqTimezoneLike): void {\n this._timezone.set(timezone);\n this._changes.next(timezone);\n }\n\n /**\n * Offset of the active zone at `timestamp`, in minutes east of UTC, or `null` when dates are left in\n * the host zone.\n */\n offsetAt(timestamp: number): number | null {\n return kbqResolveTimezoneOffset(this._timezone(), timestamp);\n }\n}\n\n/**\n * Utility provider for the time zone dates are rendered in.\n *\n * Provides {@link KbqDateTimezoneService} alongside the token, so listing it in a component's `providers`\n * scopes the zone to that subtree instead of resolving the root service and silently doing nothing.\n *\n * @see KBQ_DATE_TIMEZONE\n */\nexport const kbqDateTimezoneProvider = (timezone: KbqTimezoneLike): Provider[] => [\n KbqDateTimezoneService,\n { provide: KBQ_DATE_TIMEZONE, useValue: timezone }\n];\n","import { Injectable, isDevMode, Provider, Type } from '@angular/core';\nimport { AbstractControl, FormGroupDirective, NgForm } from '@angular/forms';\n\n/** Utility provider for `ErrorStateMatcher`. */\nexport const kbqErrorStateMatcherProvider = (\n errorStateMatcher: Type<ErrorStateMatcher> | ErrorStateMatcher\n): Provider => {\n if (errorStateMatcher instanceof Type) {\n return {\n provide: ErrorStateMatcher,\n useClass: errorStateMatcher\n };\n }\n\n return {\n provide: ErrorStateMatcher,\n useValue: errorStateMatcher\n };\n};\n\n/**\n * Error state matcher that matches when a control is invalid and form is submitted.\n * Requires use FormGroupDirective or NgForm.\n */\n@Injectable()\nexport class ShowOnFormSubmitErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return !!(control?.invalid && form?.submitted);\n }\n}\n\n/**\n * Error state matcher with split behavior based on error's type:\n * - `required` errors are shown only after the form is submitted.\n * - All other errors are shown as soon as the control is invalid and touched.\n */\n@Injectable()\nexport class ShowRequiredOnSubmitErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return control?.hasError('required')\n ? !!(control?.invalid && form?.submitted)\n : !!(control?.invalid && control.touched);\n }\n}\n\n/** Error state matcher that matches when a control is invalid and dirty or form is submitted. */\n@Injectable()\nexport class ShowOnControlDirtyErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return !!(control?.invalid && (control.dirty || form?.submitted));\n }\n}\n\n/**\n * Provider that defines how form controls behave with regards to displaying error messages.\n * Error state matcher that matches when a control is invalid and touched or form is submitted.\n */\n@Injectable({ providedIn: 'root' })\nexport class ErrorStateMatcher {\n isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return !!(control?.invalid && (control.touched || form?.submitted));\n }\n}\n\n/**\n * Resolves which controls a group-level error concerns.\n *\n * Called with one error of a group at a time. Return the names of the controls the error applies to, relative\n * to the group holding it — `AbstractControl.get` paths such as `'passwords.confirm'` are supported — or\n * `null` for errors this scope does not know.\n *\n * It is called from change detection, so keep it cheap and allocation-free.\n */\nexport type CrossFieldErrorScope = (errorKey: string, errorValue: unknown) => readonly string[] | null;\n\n/**\n * Error state matcher that also shows an error set on a `FormGroup` on the controls that error concerns,\n * which the default matcher cannot: it is handed the field's own `FormControl` and never looks further.\n *\n * `scope` maps an error to those controls, so no error shape is imposed on validators. The error is revealed\n * once every one of them is touched, or the form is submitted — override `shouldReveal` to change that.\n *\n * ## Usage:\n *\n * ```typescript\n * providers: [\n * kbqErrorStateMatcherProvider(\n * new ShowOnCrossFieldErrorStateMatcher((key) =>\n * key === 'passwordsMismatch' ? ['newPassword', 'confirmPassword'] : null\n * )\n * )\n * ]\n * ```\n *\n * Always pass an instance, as above — never the bare class (or a subclass) to `kbqErrorStateMatcherProvider`.\n * `scope` has no injection token, so Angular cannot construct this class on its own; passing the class throws\n * `NG0204` the first time anything injects `ErrorStateMatcher`.\n *\n * ## Combining with another matcher\n *\n * Cross-field display timing is this class's one job; timing for a control's own, non-cross-field errors is\n * not, so it is delegated to `own` (default: the plain `ErrorStateMatcher`) rather than hard-coded — pass any\n * other matcher to combine its timing with cross-field support, instead of subclassing:\n *\n * ```typescript\n * new ShowOnCrossFieldErrorStateMatcher(\n * (key) => (key === 'passwordsMismatch' ? ['newPassword', 'confirmPassword'] : null),\n * new ShowRequiredOnSubmitErrorStateMatcher()\n * )\n * ```\n */\nexport class ShowOnCrossFieldErrorStateMatcher extends ErrorStateMatcher {\n // Keyed by the group holding the error, not flattened into one global set — otherwise a typo warned about\n // on one form would silently suppress the same warning for an unrelated group that happens to reuse the\n // control name.\n private readonly warned = new WeakMap<AbstractControl, Set<string>>();\n\n constructor(\n private readonly scope: CrossFieldErrorScope,\n private readonly own: ErrorStateMatcher = new ErrorStateMatcher()\n ) {\n super();\n }\n\n override isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return this.own.isErrorState(control, form) || this.isCrossFieldErrorState(control, form);\n }\n\n /**\n * Whether the controls a cross-field error concerns have been interacted with enough to show it.\n *\n * Consulted only while the form has not been submitted — a submit always reveals. A disabled control\n * counts as satisfied, since it can never be touched by the user. Override to change the rule: when one\n * end of a range is prefilled and the user is never expected to visit it, waiting for all of them hides\n * the error until submit, and `controls.some(...)` is the better cue.\n */\n protected shouldReveal(controls: AbstractControl[]): boolean {\n return controls.every(({ touched, disabled }) => touched || disabled);\n }\n\n private isCrossFieldErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n // A disabled control is never shown as invalid, matching the default `ErrorStateMatcher` (its own\n // `invalid` is always `false` while disabled). Without this, a control satisfying `shouldReveal` only\n // because it's disabled would end up flagged by the very rule that's supposed to skip past it.\n if (!control?.enabled) {\n return false;\n }\n\n // The rule may sit on any ancestor, not only the immediate parent. A group's own `errors` never holds\n // its children's, so each level contributes exactly its own cross-field errors.\n for (let group = control.parent; group; group = group.parent) {\n if (this.isRevealedOn(group, control, form)) {\n return true;\n }\n }\n\n return false;\n }\n\n private isRevealedOn(\n group: AbstractControl,\n control: AbstractControl,\n form: FormGroupDirective | NgForm | null\n ): boolean {\n if (!group.errors) {\n return false;\n }\n\n for (const [key, value] of Object.entries(group.errors)) {\n const names = this.scope(key, value);\n\n if (!names?.length) {\n continue;\n }\n\n // A cheap first pass: resolve every name once, without allocating, just to learn whether `control`\n // is even named by this rule and whether every name resolved. Most rules don't concern a given\n // control, so the `involved` array below is worth building only once we know it might matter.\n let containsControl = false;\n let allResolved = true;\n\n for (const name of names) {\n const resolved = this.resolve(group, name);\n\n containsControl ||= resolved === control;\n allResolved &&= !!resolved;\n }\n\n if (!containsControl) {\n continue;\n }\n\n if (form?.submitted) {\n return true;\n }\n\n // A name that failed to resolve leaves no way to know whether the control it would have named is\n // touched, so \"every named control is touched\" can't be honestly claimed from the rest — fall\n // back to submit-only for this rule instead of revealing early on the controls that did resolve.\n if (allResolved) {\n // Resolving names to controls, rather than the control back to its name, keeps this\n // proportional to the size of the rule instead of the size of the form, and gets path and\n // `FormArray` index support from `get` for free.\n const involved = names\n .map((name) => this.resolve(group, name))\n .filter((item): item is AbstractControl => !!item);\n\n if (this.shouldReveal(involved)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n private resolve(group: AbstractControl, name: string): AbstractControl | null {\n const resolved = group.get(name);\n\n if (!resolved && isDevMode()) {\n const warnedNames = this.warned.get(group) ?? new Set<string>();\n\n if (!warnedNames.has(name)) {\n warnedNames.add(name);\n this.warned.set(group, warnedNames);\n\n // eslint-disable-next-line no-console\n console.warn(\n `ShowOnCrossFieldErrorStateMatcher: the scope named the control \"${name}\", which the group ` +\n `holding the error does not have. The error will not be shown on it.`\n );\n }\n }\n\n return resolved;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, InjectionToken } from '@angular/core';\n\n/**\n * An abstraction over the global `window` object.\n */\nexport const KBQ_WINDOW = new InjectionToken<Window>('[KBQ_WINDOW]', {\n factory: (): Window => {\n const _window =\n inject(DOCUMENT).defaultView ||\n // Backward compatibility for older Angular versions\n // https://github.com/angular/universal/blob/main/docs/gotchas.md#strategy-3-shims\n // eslint-disable-next-line no-restricted-globals\n window;\n\n if (!_window) {\n throw new Error('[KBQ_WINDOW] window is not available.');\n }\n\n return _window;\n }\n});\n","/**\n * Properties that affect the rendered width of the text and have to be mirrored onto the ruler.\n *\n * `font-variant` is deliberately absent: the shorthand does not round-trip through the computed style\n * once a field sets more than one of its longhands, so the longhands are copied instead.\n */\nconst RULER_INHERITED_PROPERTIES = [\n 'font',\n 'fontFamily',\n 'fontFeatureSettings',\n 'fontKerning',\n 'fontOpticalSizing',\n 'fontSize',\n 'fontSizeAdjust',\n 'fontStretch',\n 'fontStyle',\n 'fontSynthesis',\n 'fontVariantCaps',\n 'fontVariantEastAsian',\n 'fontVariantLigatures',\n 'fontVariantNumeric',\n 'fontVariationSettings',\n 'fontWeight',\n 'letterSpacing',\n 'textIndent',\n 'textTransform'\n] as const satisfies Array<keyof CSSStyleDeclaration>;\n\nconst RULER_PROPERTIES = {\n all: 'initial',\n position: 'absolute',\n top: '0px',\n left: '0px',\n width: '0px',\n height: '0px',\n visibility: 'hidden',\n overflow: 'scroll',\n whiteSpace: 'pre',\n pointerEvents: 'none'\n} as const satisfies Partial<CSSStyleDeclaration>;\n\n/**\n * Builds a hidden element that renders text with the typography of the element `computedStyle` was taken\n * from. Append it to the document, measure through {@link kbqMeasureRulerText}, and remove it.\n *\n * @docs-private\n */\nexport const kbqCreateTextRuler = (document: Document, computedStyle: CSSStyleDeclaration): HTMLSpanElement => {\n const ruler: HTMLSpanElement = document.createElement('span');\n\n Object.assign(ruler.style, RULER_PROPERTIES);\n RULER_INHERITED_PROPERTIES.forEach((property) => {\n ruler.style[property] = computedStyle[property];\n });\n\n return ruler;\n};\n\n/**\n * Width of `text` in pixels, in the same coordinate space as `clientWidth` and `scrollLeft`.\n *\n * `scrollWidth`, not `getBoundingClientRect()`: the latter reports the transformed box, which disagrees\n * with the untransformed layout metrics it would be compared against under a scaled ancestor.\n *\n * @docs-private\n */\nexport const kbqMeasureRulerText = (ruler: HTMLSpanElement, text: string): number => {\n ruler.textContent = text;\n\n return ruler.scrollWidth;\n};\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport { afterNextRender, DestroyRef, Directive, inject, Renderer2 } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, merge } from 'rxjs';\nimport { KBQ_WINDOW } from '../tokens';\nimport { kbqInjectNativeElement } from '../utils';\nimport { kbqCreateTextRuler, kbqMeasureRulerText } from './text-ruler';\n\n/**\n * Properties that should be added to the width when `box-sizing: border-box` is applied.\n */\nconst BOX_SIZING_BORDER_BOX_WIDTH_PROPERTIES = [\n 'paddingLeft',\n 'paddingRight',\n 'borderLeftWidth',\n 'borderRightWidth'\n] as const satisfies Array<keyof CSSStyleDeclaration>;\n\nconst FIELD_RESIZE_EVENTS = ['input', 'change', 'focus', 'blur'] as const;\n\n/**\n * Emulates [`field-sizing: content`](https://developer.mozilla.org/en-US/docs/Web/CSS/field-sizing) CSS property for\n * browsers that do not support it natively.\n *\n * @docs-private\n */\n@Directive({\n selector: '[kbqFieldSizingContent]',\n host: {\n class: 'kbq-field-sizing-content'\n },\n exportAs: 'kbqFieldSizingContent'\n})\nexport class KbqFieldSizingContent {\n private readonly element = kbqInjectNativeElement<HTMLInputElement>();\n private readonly renderer = inject(Renderer2);\n private readonly window = inject(KBQ_WINDOW);\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n afterNextRender(() => this.emulate());\n }\n\n private emulate(): void {\n if (CSS.supports('field-sizing', 'content')) {\n this.renderer.setStyle(this.element, 'fieldSizing', 'content');\n\n return;\n }\n\n merge(...FIELD_RESIZE_EVENTS.map((event) => fromEvent(this.element, event)))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.setupWidth());\n\n this.setupWidth();\n }\n\n private setupWidth(): void {\n const computedStyle = this.window.getComputedStyle(this.element);\n const ruler = kbqCreateTextRuler(this.document, computedStyle);\n const text = this.element.value || this.element.placeholder || '';\n\n this.renderer.appendChild(this.document.body, ruler);\n\n // We should add space to prevent text truncation in Safari/Firefox\n const width = this.calculateWidth(kbqMeasureRulerText(ruler, text && `${text} `), computedStyle);\n\n this.renderer.setStyle(this.element, 'width', coerceCssPixelValue(width));\n this.renderer.removeChild(this.document.body, ruler);\n }\n\n private calculateWidth(textWidth: number, computedStyle: CSSStyleDeclaration): number {\n if (computedStyle.boxSizing === 'border-box') {\n return BOX_SIZING_BORDER_BOX_WIDTH_PROPERTIES.reduce(\n (width, property) => width + (parseFloat(computedStyle[property]) || 0),\n textWidth\n );\n }\n\n return textWidth;\n }\n}\n","import { ElementRef, InjectionToken, ModelSignal } from '@angular/core';\n\n/**\n * Internal contract for `KbqFormField` used by code that cannot import the form-field\n * class directly because of a circular dependency (e.g. `core/select/common.ts`).\n *\n * @deprecated Use KbqFormField from `@koobiq/components/form-field`.\n *\n * @docs-private\n */\nexport interface KbqFormFieldRef {\n /** @see KbqFormField.control */\n control: any;\n canCleanerClearByEsc: boolean;\n /** Use when KbqFormField is in an overlay container. */\n inOverlay: ModelSignal<boolean>;\n focus(): void;\n}\n\n/**\n * Injection token that can be used to inject an instances of `KbqFormField`. It serves\n * as alternative token to the actual `KbqFormField` class which would cause unnecessary\n * retention of the `KbqFormField` class and its component metadata.\n *\n * @deprecated Use `KBQ_FORM_FIELD` from `@koobiq/components/form-field`.\n *\n * @docs-private\n */\nexport const KBQ_FORM_FIELD_REF = new InjectionToken<KbqFormFieldRef>('KbqFormFieldRef');\n\n/**\n * Contract for an ancestor that wants to override where overlays opened by a nested\n * `KbqFormField`'s control (e.g. a select's dropdown, a datepicker's calendar) are\n * anchored, instead of the form-field's own container.\n */\nexport interface KbqConnectedOverlayOriginProvider {\n /**\n * Element the overlay should be positioned and sized against, or `undefined` to fall\n * back to the form-field's own container.\n */\n getConnectedOverlayOrigin(): ElementRef | undefined;\n}\n\n/**\n * Injection token for `KbqConnectedOverlayOriginProvider`. Provide it on an ancestor\n * component to redirect where a nested `KbqFormField`'s control positions its overlay.\n */\nexport const KBQ_CONNECTED_OVERLAY_ORIGIN = new InjectionToken<KbqConnectedOverlayOriginProvider>(\n 'KbqConnectedOverlayOrigin'\n);\n","import { kbqCreateTextRuler, kbqMeasureRulerText } from './text-ruler';\n\n/**\n * Scrolls a text field horizontally so that its current selection is visible.\n *\n * Browsers scroll a field to the caret only for edits the user makes: a selection set from script leaves\n * the field at whatever offset the last keystroke produced. A masked field re-renders its value and moves\n * the caret between value parts on every keystroke, so without this the field keeps the offset of the part\n * that was edited before and clips the one being edited now.\n *\n * Leaves the field alone when it is not focused, when it renders something other than its value, and in\n * right-to-left text, where the browser's own caret following is already correct.\n */\nexport const kbqRevealSelection = (element: HTMLInputElement): void => {\n const document = element.ownerDocument;\n const window = document.defaultView;\n\n // A field the user has left is the browser's to scroll: it resets the offset on blur, and a write\n // landing after that would park the field mid-value until it is focused again.\n if (!window || document.activeElement !== element) {\n return;\n }\n\n // A password field renders bullets, which are not the widths of the characters behind them.\n if (element.type === 'password') {\n return;\n }\n\n const maxScrollLeft = element.scrollWidth - element.clientWidth;\n\n // The value fits, so any offset the field is left at is an artifact of an earlier, longer value.\n if (maxScrollLeft <= 0) {\n element.scrollLeft = 0;\n\n return;\n }\n\n const computedStyle = window.getComputedStyle(element);\n\n // Every offset below is measured from the left edge, while an RTL field scrolls into negative\n // `scrollLeft`. Mirroring that needs the visual order of a bidi line rather than a prefix of the\n // value, so the browser's own caret following is left in place instead of being overwritten.\n if (computedStyle.direction === 'rtl') {\n return;\n }\n\n const { value, selectionStart, selectionEnd, clientWidth } = element;\n const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\n const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\n const ruler = kbqCreateTextRuler(document, computedStyle);\n\n document.body.appendChild(ruler);\n\n // `scrollLeft` is measured from the start of the padding box, the text starts one `padding-left` in.\n const start = paddingLeft + kbqMeasureRulerText(ruler, value.slice(0, selectionStart ?? 0));\n // A caret is the common case on the typing path, and measuring it twice costs a second layout.\n const end =\n selectionEnd === selectionStart\n ? start\n : paddingLeft + kbqMeasureRulerText(ruler, value.slice(0, selectionEnd ?? 0));\n\n ruler.remove();\n\n // The smallest offset that still shows the selection, so that as much as possible of what precedes it\n // stays on screen. Deriving the offset from the selection alone, instead of nudging the current one,\n // keeps the result independent of where the last keystroke happened to leave the field.\n const minimumRevealingEnd = Math.max(end + paddingRight - clientWidth, 0);\n // A selection wider than the field cannot be shown whole; its start is the half worth keeping.\n const maximumKeepingStart = Math.max(start - paddingLeft, 0);\n\n element.scrollLeft = Math.min(minimumRevealingEnd, maximumKeepingStart, maxScrollLeft);\n};\n\n/**\n * Selects the `[start, end]` range of a text field and keeps it visible.\n *\n * @see {@link kbqRevealSelection}\n */\nexport const kbqSetSelectionRange = (element: HTMLInputElement, start: number, end: number): void => {\n element.setSelectionRange(start, end);\n\n kbqRevealSelection(element);\n};\n","import {\n KbqA11yLocaleConfiguration,\n KbqActionsPanelLocaleConfiguration,\n KbqClampedTextLocaleConfig,\n KbqCodeBlockLocaleConfiguration,\n KbqFileUploadLocaleConfig,\n KbqSelectLocaleConfiguration,\n KbqTimeRangeLocaleConfig\n} from './types';\n\nexport const enUSLocaleData = {\n a11y: {\n close: 'Close',\n save: 'Save',\n saving: 'Saving',\n saveFailed: 'Couldn’t save',\n cancel: 'Cancel',\n removeAll: 'Remove all',\n expandBreadcrumbs: 'Show hidden breadcrumbs',\n previousMonth: 'Previous month',\n currentDate: 'Current date',\n nextMonth: 'Next month',\n clear: 'Clear',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n resizeColumns: 'Resize columns'\n } satisfies KbqA11yLocaleConfiguration,\n select: { hiddenItemsText: '+{{ number }}', selectAll: 'Select all' } satisfies KbqSelectLocaleConfiguration,\n datepicker: {\n placeholder: 'yyyy-mm-dd',\n dateInput: 'yyyy-MM-dd'\n },\n timepicker: {\n placeholder: {\n full: 'hh:mm:ss',\n short: 'hh:mm'\n }\n },\n fileUpload: {\n single: {\n captionText: 'Drag file here or {{ browseLink }}',\n captionTextOnlyFolder: 'Drag here or {{ browseLinkFolder }}',\n captionTextWithFolder: 'Drag here or {{ browseLink }} or {{ browseLinkFolderMixed }}',\n browseLink: 'choose',\n browseLinkFolder: 'choose folder',\n browseLinkFolderMixed: 'folder'\n },\n multiple: {\n captionText: 'or {{ browseLink }}',\n captionTextOnlyFolder: 'or {{ browseLinkFolder }}',\n captionTextWithFolder: 'or {{ browseLink }} or {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Drag more or {{ browseLink }}',\n captionTextForCompactSize: 'Drag files or {{ browseLink }}',\n browseLink: 'choose files',\n browseLinkFolder: 'choose folder',\n browseLinkFolderMixed: 'folder',\n title: 'Drag here'\n }\n } satisfies KbqFileUploadLocaleConfig,\n codeBlock: {\n softWrapOnTooltip: 'Enable word wrap',\n softWrapOffTooltip: 'Disable word wrap',\n downloadTooltip: 'Download',\n copiedTooltip: '✓ Copied',\n copyTooltip: 'Copy',\n viewAllText: 'Show all',\n viewLessText: 'Show less',\n openExternalSystemTooltip: 'Open in the external system'\n } satisfies KbqCodeBlockLocaleConfiguration,\n timezone: {\n searchPlaceholder: 'City or time zone'\n },\n actionsPanel: {\n closeTooltip: 'Deselect'\n } satisfies KbqActionsPanelLocaleConfiguration,\n filterBar: {\n reset: {\n buttonName: 'Reset'\n },\n search: {\n tooltip: 'Search',\n placeholder: 'Search'\n },\n filters: {\n defaultName: 'Filters',\n saveNewFilterTooltip: 'Save the new filter',\n searchPlaceholder: 'Search',\n searchEmptyResult: 'Nothing found',\n saveAsNewFilter: 'Save as new filter',\n saveChanges: 'Save changes',\n saveAsNew: 'Save as new',\n change: 'Edit',\n resetChanges: 'Reset',\n remove: 'Delete',\n name: 'Name',\n error: 'The search with such name already exists',\n errorHint: 'Could not save the filter. Try again or contact the administrator.',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n actionsTooltip: 'Filter actions'\n },\n add: {\n tooltip: 'Add filter',\n addedAnnouncement: '{{ name }} filter added'\n },\n refresher: {\n refresh: 'Refresh',\n settings: 'Refresh settings'\n },\n pipe: {\n clearButtonTooltip: 'Clear',\n removeButtonTooltip: 'Delete',\n applyButton: 'Apply',\n emptySearchResult: 'Nothing found',\n selectAll: 'Select all'\n },\n datePipe: {\n customPeriod: 'Custom period',\n customPeriodFrom: 'from',\n customPeriodTo: 'to',\n customPeriodErrorHint: 'The period cannot start later than it ends',\n customPeriodMinIntervalErrorHint: 'The period cannot be shorter than {{ value }}',\n customPeriodMaxIntervalErrorHint: 'The period cannot be longer than {{ value }}',\n backToPeriodSelection: 'Back'\n }\n },\n clampedText: {\n openText: 'Expand',\n closeText: 'Collapse',\n showMoreText: 'Show {exceededItemCount} more',\n moreText: 'more'\n } satisfies KbqClampedTextLocaleConfig,\n navbarIc: {\n toggle: {\n pinButton: 'Leave expanded',\n collapseButton: 'Collapse'\n }\n },\n navbar: {\n toggle: {\n expand: 'Expand',\n collapse: 'Collapse'\n }\n },\n searchExpandable: {\n tooltip: 'Search',\n placeholder: 'Search'\n },\n appSwitcher: {\n searchPlaceholder: 'Search',\n searchEmptyResult: 'Nothing found',\n sitesHeader: 'Other sites'\n },\n timeRange: {\n title: {\n for: 'for',\n placeholder: 'Select period'\n },\n editor: {\n from: 'from',\n to: 'to',\n apply: 'Apply',\n cancel: 'Cancel',\n rangeLabel: 'Period',\n outOfBoundsError: 'Allowed period: {{ value }}',\n allTime: 'for all time',\n currentQuarter: 'for the current quarter',\n currentYear: 'for the current year',\n allTimeOption: 'All time',\n currentQuarterOption: 'Current quarter',\n currentYearOption: 'Current year'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {# year}\n other {last # years}\n }`,\n MONTHS: `{months, plural,\n one {last month}\n other {last # months}\n }`,\n WEEKS: `{weeks, plural,\n one {last week}\n other {last # weeks}\n }`,\n DAYS: `{days, plural,\n one {last day}\n other {last # days}\n }`,\n HOURS: `{hours, plural,\n one {last hour}\n other {last # hours}\n }`,\n MINUTES: `{minutes, plural,\n one {last minute}\n other {last # minutes}\n }`,\n SECONDS: `{seconds, plural,\n one {last second}\n other {last # seconds}\n }`,\n YEARS_FRACTION: `{years} years`,\n MONTHS_FRACTION: `{months} months`\n },\n option: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {Last year}\n other {Last # years}\n }`,\n MONTHS: `{months, plural,\n one {Last month}\n other {Last # months}\n }`,\n WEEKS: `{weeks, plural,\n one {Last week}\n other {Last # weeks}\n }`,\n DAYS: `{days, plural,\n one {Last day}\n other {Last # days}\n }`,\n HOURS: `{hours, plural,\n one {Last hour}\n other {Last # hours}\n }`,\n MINUTES: `{minutes, plural,\n one {Last minute}\n other {Last # minutes}\n }`,\n SECONDS: `{seconds, plural,\n one {Last second}\n other {Last # seconds}\n }`,\n YEARS_FRACTION: `{years} years`,\n MONTHS_FRACTION: `{months} months`\n }\n }\n } satisfies KbqTimeRangeLocaleConfig,\n notificationCenter: {\n notifications: 'Notifications',\n remove: 'Remove',\n doNotDisturb: 'Do not disturb',\n showPopUpNotifications: 'Show pop-up notifications',\n noNotifications: 'No notifications',\n failedToLoadNotifications: 'Failed to load notifications',\n repeat: 'Repeat',\n loadingMore: 'Loading more notifications'\n }\n};\n","import {\n KbqA11yLocaleConfiguration,\n KbqActionsPanelLocaleConfiguration,\n KbqClampedTextLocaleConfig,\n KbqCodeBlockLocaleConfiguration,\n KbqFileUploadLocaleConfig,\n KbqSelectLocaleConfiguration,\n KbqTimeRangeLocaleConfig\n} from './types';\n\nexport const esLALocaleData = {\n a11y: {\n close: 'Cerrar',\n save: 'Guardar',\n saving: 'Guardando',\n saveFailed: 'No se pudo guardar',\n cancel: 'Cancelar',\n removeAll: 'Eliminar todo',\n expandBreadcrumbs: 'Mostrar elementos ocultos',\n previousMonth: 'Mes anterior',\n currentDate: 'Fecha actual',\n nextMonth: 'Mes siguiente',\n clear: 'Borrar',\n showPassword: 'Mostrar la contraseña',\n hidePassword: 'Ocultar la contraseña',\n resizeColumns: 'Redimensionar columnas'\n } satisfies KbqA11yLocaleConfiguration,\n select: {\n hiddenItemsText: '+{{ number }}',\n selectAll: 'Seleccionar todo'\n } satisfies KbqSelectLocaleConfiguration,\n datepicker: {\n placeholder: 'dd/mm/aaaa'\n },\n timepicker: {\n placeholder: {\n full: 'hh:mm:ss',\n short: 'hh:mm'\n }\n },\n fileUpload: {\n single: {\n captionText: 'Arrastre el archivo aquí o {{ browseLink }}',\n captionTextOnlyFolder: 'Arrastre el archivo aquí o {{ browseLinkFolder }}',\n captionTextWithFolder: 'Arrastre el archivo aquí o {{ browseLink }} o {{ browseLinkFolderMixed }}',\n browseLink: 'elija',\n browseLinkFolder: 'carpeta',\n browseLinkFolderMixed: 'carpeta'\n },\n multiple: {\n captionText: 'Arrastre aquí o {{ browseLink }}',\n captionTextOnlyFolder: 'Arrastre aquí o {{ browseLinkFolder }}',\n captionTextWithFolder: 'Arrastre aquí o {{ browseLink }} o {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Arrastre más archivos aquí o {{ browseLink }}',\n captionTextForCompactSize: 'Arrastre archivos o {{ browseLink }}',\n browseLink: 'elija',\n browseLinkFolder: 'carpeta',\n browseLinkFolderMixed: 'carpeta',\n title: 'Cargue los archivos'\n }\n } satisfies KbqFileUploadLocaleConfig,\n codeBlock: {\n softWrapOnTooltip: 'Activar el ajuste de texto',\n softWrapOffTooltip: 'Desactivar el ajuste de texto',\n downloadTooltip: 'Descargar',\n copiedTooltip: '✓ Copiado',\n copyTooltip: 'Copiar',\n viewAllText: 'Mostrar todo',\n viewLessText: 'Mostrar menos',\n openExternalSystemTooltip: 'Abrir en el sistema externo'\n } satisfies KbqCodeBlockLocaleConfiguration,\n timezone: {\n searchPlaceholder: 'Ciudad o zona horaria'\n },\n actionsPanel: {\n closeTooltip: 'Desmarque'\n } satisfies KbqActionsPanelLocaleConfiguration,\n filterBar: {\n reset: {\n buttonName: 'Restablecer'\n },\n search: {\n tooltip: 'Búsqueda',\n placeholder: 'Búsqueda'\n },\n filters: {\n defaultName: 'Filtros',\n saveNewFilterTooltip: 'Guardar el filtro nuevo',\n searchPlaceholder: 'Búsqueda',\n searchEmptyResult: 'No se encontró nada',\n saveAsNewFilter: 'Guardar como filtro nuevo',\n saveChanges: 'Guardar cambios',\n saveAsNew: 'Guardar como nuevo',\n change: 'Editar',\n resetChanges: 'Restablecer',\n remove: 'Eliminar',\n name: 'Nombre',\n error: 'Ya existe una búsqueda con ese nombre',\n errorHint: 'No se pudo guardar el filtro. Intente de nuevo o comuníquese con el administrador.',\n saveButton: 'Guardar',\n cancelButton: 'Cancelar',\n actionsTooltip: 'Acciones de filtro'\n },\n add: {\n tooltip: 'Agregar filtro',\n addedAnnouncement: 'Filtro {{ name }} agregado'\n },\n refresher: {\n refresh: 'Actualizar',\n settings: 'Configuración de actualización'\n },\n pipe: {\n clearButtonTooltip: 'Borrar',\n removeButtonTooltip: 'Eliminar',\n applyButton: 'Aplicar',\n emptySearchResult: 'No se encontró nada',\n selectAll: 'Seleccionar todo'\n },\n datePipe: {\n customPeriod: 'Personalizar período',\n customPeriodFrom: 'desde',\n customPeriodTo: 'hasta',\n customPeriodErrorHint: 'El inicio del período no puede estar después del fin',\n customPeriodMinIntervalErrorHint: 'El período no puede ser más corto que {{ value }}',\n customPeriodMaxIntervalErrorHint: 'El período no puede ser más largo que {{ value }}',\n backToPeriodSelection: 'Atrás'\n }\n },\n clampedText: {\n openText: 'Expandir',\n closeText: 'Contraer',\n showMoreText: 'Mostrar {exceededItemCount} más',\n moreText: 'más'\n } satisfies KbqClampedTextLocaleConfig,\n navbarIc: {\n toggle: {\n pinButton: 'Expandir el menú',\n collapseButton: 'Colapsar'\n }\n },\n navbar: {\n toggle: {\n expand: 'Expandir',\n collapse: 'Colapsar'\n }\n },\n searchExpandable: {\n tooltip: 'Búsqueda',\n placeholder: 'Búsqueda'\n },\n appSwitcher: {\n searchPlaceholder: 'Búsqueda',\n searchEmptyResult: 'No se encontró nada',\n sitesHeader: 'Otros sitios'\n },\n timeRange: {\n title: {\n for: 'para',\n placeholder: 'Seleccione el período'\n },\n editor: {\n from: 'de',\n to: 'a',\n apply: 'Aplicar',\n cancel: 'Cancelar',\n rangeLabel: 'Período',\n outOfBoundsError: 'Período permitido: {{ value }}',\n allTime: 'por todo el tiempo',\n currentQuarter: 'por el trimestre actual',\n currentYear: 'por el año actual',\n allTimeOption: 'Todo el tiempo',\n currentQuarterOption: 'Trimestre actual',\n currentYearOption: 'Año actual'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ', ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {# año}\n other {últimos # años}\n }`,\n MONTHS: `{months, plural,\n one {último mes}\n other {últimos # meses}\n }`,\n WEEKS: `{weeks, plural,\n one {última semana}\n other {últimas # semanas}\n }`,\n DAYS: `{days, plural,\n one {último día}\n other {últimos # días}\n }`,\n HOURS: `{hours, plural,\n one {última hora}\n other {últimas # horas}\n }`,\n MINUTES: `{minutes, plural,\n one {último minuto}\n other {últimos # minutos}\n }`,\n SECONDS: `{seconds, plural,\n one {último segundo}\n other {últimos # segundos}\n }`,\n YEARS_FRACTION: `{years} años`,\n MONTHS_FRACTION: `{months} meses`\n },\n option: {\n SEPARATOR: ', ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {Último año}\n other {Últimos # años}\n }`,\n MONTHS: `{months, plural,\n one {Último mes}\n other {Últimos # meses}\n }`,\n WEEKS: `{weeks, plural,\n one {Última semana}\n other {Últimas # semanas}\n }`,\n DAYS: `{days, plural,\n one {Último día}\n other {Últimos # días}\n }`,\n HOURS: `{hours, plural,\n one {Última hora}\n other {Últimas # horas}\n }`,\n MINUTES: `{minutes, plural,\n one {Último minuto}\n other {Últimos # minutos}\n }`,\n SECONDS: `{seconds, plural,\n one {Último segundo}\n other {Últimos # segundos}\n }`,\n YEARS_FRACTION: `{years} años`,\n MONTHS_FRACTION: `{months} meses`\n }\n }\n } satisfies KbqTimeRangeLocaleConfig,\n notificationCenter: {\n notifications: 'Notificaciones',\n remove: 'Eliminar',\n doNotDisturb: 'No molestar',\n showPopUpNotifications: 'Mostrar notificaciones emergentes',\n noNotifications: 'Sin notificaciones',\n failedToLoadNotifications: 'Error al cargar las notificaciones',\n repeat: 'Repetir',\n loadingMore: 'Cargando más notificaciones'\n }\n};\n","import { KbqSizeUnitsConfig } from '../formatters';\nimport { KbqNumberFormatOptions, KbqNumberInputLocaleConfig, KbqNumberRoundingLocaleConfig } from './types';\n\nexport const enUSFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: '',\n groupSeparator: '.',\n thousand: 'K',\n million: 'M',\n billion: 'B',\n trillion: 'T'\n } satisfies KbqNumberRoundingLocaleConfig\n }\n },\n input: {\n number: {\n groupSeparator: [','],\n fractionSeparator: '.'\n } satisfies KbqNumberInputLocaleConfig\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['B', 'KB', 'MB', 'GB', 'TB'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['B', 'KiB', 'MiB', 'GiB', 'TiB'],\n base: 2,\n power: 10\n }\n }\n } satisfies KbqSizeUnitsConfig\n};\n\nexport const esLAFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: '',\n groupSeparator: ',',\n thousand: 'K',\n million: 'M',\n billion: 'MRD',\n trillion: 'B'\n } satisfies KbqNumberRoundingLocaleConfig,\n decimal: {\n viewGroupSeparator: '\\u2009'\n } satisfies KbqNumberFormatOptions\n }\n },\n input: {\n number: {\n // nbsp is generated automatically and used by default in spec\n groupSeparator: [' ', ' ', '\\u2009'],\n fractionSeparator: ',',\n viewGroupSeparator: '\\u2009'\n } satisfies KbqNumberInputLocaleConfig\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['B', 'KB', 'MB', 'GB', 'TB'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['B', 'KiB', 'MiB', 'GiB', 'TiB'],\n base: 2,\n power: 10\n }\n }\n }\n};\n\nexport const ptBRFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: ' ',\n groupSeparator: ',',\n thousand: 'mil',\n million: 'mi',\n billion: 'bi',\n trillion: 'tri'\n } satisfies KbqNumberRoundingLocaleConfig\n }\n },\n input: {\n number: {\n groupSeparator: ['.'],\n fractionSeparator: ','\n } satisfies KbqNumberInputLocaleConfig\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['B', 'KB', 'MB', 'GB', 'TB'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['B', 'KiB', 'MiB', 'GiB', 'TiB'],\n base: 2,\n power: 10\n }\n }\n }\n};\n\nexport const ruRUFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: ' ',\n groupSeparator: ',',\n thousand: 'К',\n million: 'М',\n // Latin `B` (U+0042) according to UX Guidelines.\n billion: 'B',\n trillion: 'Т'\n } satisfies KbqNumberRoundingLocaleConfig,\n decimal: {\n viewGroupSeparator: '\\u2009'\n } satisfies KbqNumberFormatOptions\n }\n },\n input: {\n number: {\n // nbsp is generated automatically and used by default in spec\n groupSeparator: [' ', ' ', '\\u2009'],\n fractionSeparator: ',',\n startFormattingFrom: 4,\n viewGroupSeparator: '\\u2009'\n } satisfies KbqNumberInputLocaleConfig\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['Б', 'КБ', 'МБ', 'ГБ', 'ТБ'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['Б', 'КиБ', 'МиБ', 'ГиБ', 'ТиБ'],\n base: 2,\n power: 10\n }\n }\n }\n};\n\nexport const tkTMFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: ' ',\n groupSeparator: '',\n thousand: 'M',\n million: 'Mn',\n billion: 'Mr',\n trillion: 'Tn'\n } satisfies KbqNumberRoundingLocaleConfig\n }\n },\n input: {\n number: {\n groupSeparator: [' ', ' ', '\\u2009'],\n fractionSeparator: ',',\n viewGroupSeparator: '\\u2009'\n } satisfies KbqNumberInputLocaleConfig\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['B', 'KB', 'MB', 'GB', 'TB'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['B', 'KiB', 'MiB', 'GiB', 'TiB'],\n base: 2,\n power: 10\n }\n }\n }\n};\n","import {\n KbqA11yLocaleConfiguration,\n KbqActionsPanelLocaleConfiguration,\n KbqClampedTextLocaleConfig,\n KbqCodeBlockLocaleConfiguration,\n KbqFileUploadLocaleConfig,\n KbqSelectLocaleConfiguration,\n KbqTimeRangeLocaleConfig\n} from './types';\n\nexport const ptBRLocaleData = {\n a11y: {\n close: 'Fechar',\n save: 'Salvar',\n saving: 'Salvando',\n saveFailed: 'Não foi possível salvar',\n cancel: 'Cancelar',\n removeAll: 'Remover tudo',\n expandBreadcrumbs: 'Mostrar itens ocultos',\n previousMonth: 'Mês anterior',\n currentDate: 'Data atual',\n nextMonth: 'Próximo mês',\n clear: 'Apagar',\n showPassword: 'Mostrar a senha',\n hidePassword: 'Ocultar a senha',\n resizeColumns: 'Redimensionar colunas'\n } satisfies KbqA11yLocaleConfiguration,\n select: {\n hiddenItemsText: '+{{ number }}',\n selectAll: 'Selecionar tudo'\n } satisfies KbqSelectLocaleConfiguration,\n datepicker: {\n placeholder: 'dd/mm/yyyy'\n },\n timepicker: {\n placeholder: {\n full: 'hh:mm:ss',\n short: 'hh:mm'\n }\n },\n fileUpload: {\n single: {\n captionText: 'Arrastar o arquivo aqui ou {{ browseLink }}',\n captionTextOnlyFolder: 'Arrastar o arquivo aqui ou {{ browseLinkFolder }}',\n captionTextWithFolder: 'Arrastar o arquivo aqui ou {{ browseLink }} ou {{ browseLinkFolderMixed }}',\n browseLink: 'escolher',\n browseLinkFolder: 'pasta',\n browseLinkFolderMixed: 'pasta'\n },\n multiple: {\n captionText: 'Arrastar aqui ou {{ browseLink }}',\n captionTextOnlyFolder: 'Arrastar aqui ou {{ browseLinkFolder }}',\n captionTextWithFolder: 'Arrastar aqui ou {{ browseLink }} ou {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Arrastar mais arquivos aqui ou {{ browseLink }}',\n captionTextForCompactSize: 'Arrastar arquivos ou {{ browseLink }}',\n browseLink: 'escolher',\n browseLinkFolder: 'pasta',\n browseLinkFolderMixed: 'pasta',\n title: 'Carregar arquivos'\n }\n } satisfies KbqFileUploadLocaleConfig,\n codeBlock: {\n softWrapOnTooltip: 'Ativar quebra de linha',\n softWrapOffTooltip: 'Desativar quebra de linha',\n downloadTooltip: 'Baixar',\n copiedTooltip: '✓ Copiado',\n copyTooltip: 'Copiar',\n viewAllText: 'Mostrar todos',\n viewLessText: 'Mostrar menos',\n openExternalSystemTooltip: 'Abrir em sistema externo'\n } satisfies KbqCodeBlockLocaleConfiguration,\n timezone: {\n searchPlaceholder: 'Cidade ou fuso horário'\n },\n actionsPanel: {\n closeTooltip: 'Desmarcar'\n } satisfies KbqActionsPanelLocaleConfiguration,\n filterBar: {\n reset: {\n buttonName: 'Reconfigurar'\n },\n search: {\n tooltip: 'Buscar',\n placeholder: 'Buscar'\n },\n filters: {\n defaultName: 'Filtros',\n saveNewFilterTooltip: 'Salve o filtro novo',\n searchPlaceholder: 'Buscar',\n searchEmptyResult: 'Nada encontrado',\n saveAsNewFilter: 'Salve o filtro novo',\n saveChanges: 'Salve as mudanças',\n saveAsNew: 'Salve como novo',\n change: 'Editar',\n resetChanges: 'Reconfigurar',\n remove: 'Deletar',\n name: 'Nome',\n error: 'A busca com esse nome já existe',\n errorHint: 'O filtro não pôde ser salvo. Tente de novo ou entre em contato com o administrador.',\n saveButton: 'Salvar',\n cancelButton: 'Cancelar',\n actionsTooltip: 'Ações do filtro'\n },\n add: {\n tooltip: 'Adicionar filtros',\n addedAnnouncement: 'Filtro {{ name }} adicionado'\n },\n refresher: {\n refresh: 'Atualizar',\n settings: 'Configurações de atualização'\n },\n pipe: {\n clearButtonTooltip: 'Apagar',\n removeButtonTooltip: 'Deletar',\n applyButton: 'Aplicar',\n emptySearchResult: 'Nada encontrado',\n selectAll: 'Selecionar todos'\n },\n datePipe: {\n customPeriod: 'Selecionar período',\n customPeriodFrom: 'de',\n customPeriodTo: 'até',\n customPeriodErrorHint: 'O período não pode começar depois de quando acaba',\n customPeriodMinIntervalErrorHint: 'O período não pode ser menor que {{ value }}',\n customPeriodMaxIntervalErrorHint: 'O período não pode ser maior que {{ value }}',\n backToPeriodSelection: 'Voltar'\n }\n },\n clampedText: {\n openText: 'Expandir',\n closeText: 'Recolher',\n showMoreText: 'Mostrar mais {exceededItemCount}',\n moreText: 'mais'\n } satisfies KbqClampedTextLocaleConfig,\n navbarIc: {\n toggle: {\n pinButton: 'Deixar expandido',\n collapseButton: 'Recolher'\n }\n },\n navbar: {\n toggle: {\n expand: 'Expandir',\n collapse: 'Colapso'\n }\n },\n searchExpandable: {\n tooltip: 'Pesquisar',\n placeholder: 'Pesquisar'\n },\n appSwitcher: {\n searchPlaceholder: 'Pesquisar',\n searchEmptyResult: 'Nada encontrado',\n sitesHeader: 'Outros sites'\n },\n timeRange: {\n title: {\n for: 'para',\n placeholder: 'Selecione o período'\n },\n editor: {\n from: 'de',\n to: 'até',\n apply: 'Aplicar',\n cancel: 'Cancelar',\n rangeLabel: 'Período',\n outOfBoundsError: 'Período permitido: {{ value }}',\n allTime: 'por todo o tempo',\n currentQuarter: 'pelo trimestre atual',\n currentYear: 'pelo ano atual',\n allTimeOption: 'Todo o tempo',\n currentQuarterOption: 'Trimestre atual',\n currentYearOption: 'Ano atual'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ' e ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {# ano}\n other {últimos # anos}\n }`,\n MONTHS: `{months, plural,\n one {último mês}\n other {últimos # meses}\n }`,\n WEEKS: `{weeks, plural,\n one {última semana}\n other {últimas # semanas}\n }`,\n DAYS: `{days, plural,\n one {último dia}\n other {últimos # dias}\n }`,\n HOURS: `{hours, plural,\n one {última hora}\n other {últimas # horas}\n }`,\n MINUTES: `{minutes, plural,\n one {último minuto}\n other {últimos # minutos}\n }`,\n SECONDS: `{seconds, plural,\n one {último segundo}\n other {últimos # segundos}\n }`,\n YEARS_FRACTION: `{years} anos`,\n MONTHS_FRACTION: `{months} meses`\n },\n option: {\n SEPARATOR: ' e ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {Último ano}\n other {Últimos # anos}\n }`,\n MONTHS: `{months, plural,\n one {Último mês}\n other {Últimos # meses}\n }`,\n WEEKS: `{weeks, plural,\n one {Última semana}\n other {Últimas # semanas}\n }`,\n DAYS: `{days, plural,\n one {Último dia}\n other {Últimos # dias}\n }`,\n HOURS: `{hours, plural,\n one {Última hora}\n other {Últimas # horas}\n }`,\n MINUTES: `{minutes, plural,\n one {Último minuto}\n other {Últimos # minutos}\n }`,\n SECONDS: `{seconds, plural,\n one {Último segundo}\n other {Últimos # segundos}\n }`,\n YEARS_FRACTION: `{years} anos`,\n MONTHS_FRACTION: `{months} meses`\n }\n }\n } satisfies KbqTimeRangeLocaleConfig,\n notificationCenter: {\n notifications: 'Notificações',\n remove: 'Remover',\n doNotDisturb: 'Não perturbe',\n showPopUpNotifications: 'Mostrar notificações pop-up',\n noNotifications: 'Sem notificações',\n failedToLoadNotifications: 'Falha ao carregar notificações',\n repeat: 'Repetir',\n loadingMore: 'Carregando mais notificações'\n }\n};\n","import {\n KbqA11yLocaleConfiguration,\n KbqActionsPanelLocaleConfiguration,\n KbqClampedTextLocaleConfig,\n KbqCodeBlockLocaleConfiguration,\n KbqFileUploadLocaleConfig,\n KbqSelectLocaleConfiguration,\n KbqTimeRangeLocaleConfig\n} from './types';\n\nexport const ruRULocaleData = {\n a11y: {\n close: 'Закрыть',\n save: 'Сохранить',\n saving: 'Сохранение',\n saveFailed: 'Не удалось сохранить',\n cancel: 'Отменить',\n removeAll: 'Удалить все',\n expandBreadcrumbs: 'Показать скрытые элементы',\n previousMonth: 'Предыдущий месяц',\n currentDate: 'Текущая дата',\n nextMonth: 'Следующий месяц',\n clear: 'Очистить',\n showPassword: 'Показать пароль',\n hidePassword: 'Скрыть пароль',\n resizeColumns: 'Изменить ширину колонок'\n } satisfies KbqA11yLocaleConfiguration,\n select: { hiddenItemsText: '+{{ number }}', selectAll: 'Выбрать все' } satisfies KbqSelectLocaleConfiguration,\n datepicker: {\n placeholder: 'дд.мм.гггг',\n dateInput: 'dd.MM.yyyy'\n },\n timepicker: {\n placeholder: {\n full: 'чч:мм:сс',\n short: 'чч:мм'\n }\n },\n fileUpload: {\n single: {\n captionText: 'Перетащите сюда или {{ browseLink }}',\n captionTextOnlyFolder: 'Перетащите сюда или {{ browseLinkFolder }}',\n captionTextWithFolder: 'Перетащите сюда или {{ browseLink }} или {{ browseLinkFolderMixed }}',\n browseLink: 'выберите файл',\n browseLinkFolder: 'выберите папку',\n browseLinkFolderMixed: 'папку'\n },\n multiple: {\n captionText: 'или {{ browseLink }}',\n captionTextOnlyFolder: 'или {{ browseLinkFolder }}',\n captionTextWithFolder: 'или {{ browseLink }} или {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Перетащите еще или {{ browseLink }}',\n captionTextForCompactSize: 'Перетащите сюда или {{ browseLink }}',\n browseLink: 'выберите файлы',\n browseLinkFolder: 'выберите папку',\n browseLinkFolderMixed: 'папку',\n title: 'Перетащите сюда'\n }\n } satisfies KbqFileUploadLocaleConfig,\n codeBlock: {\n softWrapOnTooltip: 'Включить перенос по словам',\n softWrapOffTooltip: 'Выключить перенос по словам',\n downloadTooltip: 'Скачать',\n copiedTooltip: '✓ Скопировано',\n copyTooltip: 'Скопировать',\n viewAllText: 'Показать все',\n viewLessText: 'Свернуть',\n openExternalSystemTooltip: 'Открыть во внешней системе'\n } satisfies KbqCodeBlockLocaleConfiguration,\n timezone: {\n searchPlaceholder: 'Город или часовой пояс'\n },\n actionsPanel: {\n closeTooltip: 'Отменить выбор'\n } satisfies KbqActionsPanelLocaleConfiguration,\n filterBar: {\n reset: {\n buttonName: 'Сбросить'\n },\n search: {\n tooltip: 'Поиск',\n placeholder: 'Поиск'\n },\n filters: {\n defaultName: 'Фильтры',\n saveNewFilterTooltip: 'Сохранить новый фильтр',\n searchPlaceholder: 'Поиск',\n searchEmptyResult: 'Ничего не найдено',\n saveAsNewFilter: 'Сохранить как новый фильтр',\n saveChanges: 'Сохранить изменения',\n saveAsNew: 'Сохранить как новый',\n change: 'Изменить',\n resetChanges: 'Сбросить изменения',\n remove: 'Удалить',\n name: 'Название',\n error: 'Поиск с таким названием уже существует',\n errorHint: 'Не удалось сохранить фильтр. Попробуйте снова или сообщите администратору.',\n saveButton: 'Сохранить',\n cancelButton: 'Отмена',\n actionsTooltip: 'Действия с фильтром'\n },\n add: {\n tooltip: 'Добавить фильтр',\n addedAnnouncement: 'Фильтр {{ name }} добавлен'\n },\n refresher: {\n refresh: 'Обновить',\n settings: 'Настройки обновления'\n },\n pipe: {\n clearButtonTooltip: 'Очистить',\n removeButtonTooltip: 'Удалить',\n applyButton: 'Применить',\n emptySearchResult: 'Ничего не найдено',\n selectAll: 'Выбрать все'\n },\n datePipe: {\n customPeriod: 'Произвольный период',\n customPeriodFrom: 'с',\n customPeriodTo: 'по',\n customPeriodErrorHint: 'Начало периода не может быть позже окончания',\n customPeriodMinIntervalErrorHint: 'Период не может быть короче {{ value }}',\n customPeriodMaxIntervalErrorHint: 'Период не может быть длиннее {{ value }}',\n backToPeriodSelection: 'Назад'\n }\n },\n clampedText: {\n openText: 'Развернуть',\n closeText: 'Свернуть',\n showMoreText: 'Показать еще {exceededItemCount}',\n moreText: 'еще'\n } satisfies KbqClampedTextLocaleConfig,\n navbarIc: {\n toggle: {\n pinButton: 'Оставить развернутым',\n collapseButton: 'Свернуть'\n }\n },\n navbar: {\n toggle: {\n expand: 'Развернуть',\n collapse: 'Свернуть'\n }\n },\n searchExpandable: {\n tooltip: 'Поиск',\n placeholder: 'Поиск'\n },\n appSwitcher: {\n searchPlaceholder: 'Поиск',\n searchEmptyResult: 'Ничего не найдено',\n sitesHeader: 'Другие площадки'\n },\n timeRange: {\n title: {\n for: 'за',\n placeholder: 'Выберите период'\n },\n editor: {\n from: 'с',\n to: 'по',\n apply: 'Применить',\n cancel: 'Отмена',\n rangeLabel: 'Период',\n outOfBoundsError: 'Допустимый период: {{ value }}',\n allTime: 'за все время',\n currentQuarter: 'за текущий квартал',\n currentYear: 'за текущий год',\n allTimeOption: 'Все время',\n currentQuarterOption: 'Текущий квартал',\n currentYearOption: 'Текущий год'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: 'и',\n YEARS: `{years, plural,\n one {# год}\n few {последние # года}\n other {последние # лет}\n }`,\n MONTHS: `{months, plural,\n one {последний месяц}\n few {последние # месяца}\n other {последние # месяцев}\n }`,\n WEEKS: `{weeks, plural,\n one {последнюю неделю}\n few {последние # недели}\n other {последние # недель}\n }`,\n DAYS: `{days, plural,\n one {последний день}\n few {последние # дня}\n other {последние # дней}\n }`,\n HOURS: `{hours, plural,\n one {последний час}\n few {последние # часа}\n other {последние # часов}\n }`,\n MINUTES: `{minutes, plural,\n one {последнюю минуту}\n few {последние # минуты}\n other {последние # минут}\n }`,\n SECONDS: `{seconds, plural,\n one {последнюю секунду}\n few {последние # секунды}\n other {последние # секунд}\n }`,\n YEARS_FRACTION: `{years} лет`,\n MONTHS_FRACTION: `{months} месяцев`\n },\n option: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: 'и',\n YEARS: `{years, plural,\n one {Последний год}\n few {Последние # года}\n other {Последние # лет}\n }`,\n MONTHS: `{months, plural,\n one {Последний месяц}\n few {Последние # месяца}\n other {Последние # месяцев}\n }`,\n WEEKS: `{weeks, plural,\n one {Последняя неделя}\n few {Последние # недели}\n other {Последние # недель}\n }`,\n DAYS: `{days, plural,\n one {Последний день}\n few {Последние # дня}\n other {Последние # дней}\n }`,\n HOURS: `{hours, plural,\n one {Последний час}\n few {Последние # часа}\n other {Последние # часов}\n }`,\n MINUTES: `{minutes, plural,\n one {Последняя минута}\n few {Последние # минуты}\n other {Последние # минут}\n }`,\n SECONDS: `{seconds, plural,\n one {Последняя секунда}\n few {Последние # секунды}\n other {Последние # секунд}\n }`,\n YEARS_FRACTION: `{years} лет`,\n MONTHS_FRACTION: `{months} месяцев`\n }\n }\n } satisfies KbqTimeRangeLocaleConfig,\n notificationCenter: {\n notifications: 'Уведомления',\n remove: 'Удалить',\n doNotDisturb: 'Не беспокоить',\n showPopUpNotifications: 'Показывать всплывающие уведомления',\n noNotifications: 'Нет уведомлений',\n failedToLoadNotifications: 'Не удалось загрузить уведомления',\n repeat: 'Повторить',\n loadingMore: 'Загрузка уведомлений'\n }\n};\n","import {\n KbqA11yLocaleConfiguration,\n KbqActionsPanelLocaleConfiguration,\n KbqClampedTextLocaleConfig,\n KbqCodeBlockLocaleConfiguration,\n KbqFileUploadLocaleConfig,\n KbqSelectLocaleConfiguration,\n KbqTimeRangeLocaleConfig\n} from './types';\n\nexport const tkTMLocaleData = {\n a11y: {\n close: 'Ýap',\n save: 'Ýazdyr',\n saving: 'Ýazdyrylýar',\n saveFailed: 'Ýazdyryp bolmady',\n cancel: 'Ýatyr',\n removeAll: 'Ählisini aýyr',\n expandBreadcrumbs: 'Gizlenen elementleri görkez',\n previousMonth: 'Öňki aý',\n currentDate: 'Şu günki sene',\n nextMonth: 'Indiki aý',\n clear: 'Arassala',\n showPassword: 'Paroly görkez',\n hidePassword: 'Paroly gizle',\n resizeColumns: 'Sütünleriň giňligini üýtget'\n } satisfies KbqA11yLocaleConfiguration,\n select: {\n hiddenItemsText: '+{{ number }}',\n selectAll: 'Ählisini saýla'\n } satisfies KbqSelectLocaleConfiguration,\n datepicker: {\n placeholder: 'gg.aa.ýý.',\n dateInput: 'gg.aa.ýý.'\n },\n timepicker: {\n placeholder: {\n full: 'ss:mm:seksek',\n short: 'ss:mm'\n }\n },\n fileUpload: {\n single: {\n captionText: 'Faýly geçiriň ýa-da {{ browseLink }}',\n captionTextOnlyFolder: 'Faýly geçiriň ýa-da {{ browseLinkFolder }}',\n captionTextWithFolder: 'Faýly geçiriň ýa-da {{ browseLink }} ýa-da {{ browseLinkFolderMixed }}',\n browseLink: 'saýlaň',\n browseLinkFolder: 'bukja',\n browseLinkFolderMixed: 'bukja'\n },\n multiple: {\n captionText: 'Şu ýere geçiriň ýa-da {{ browseLink }}',\n captionTextOnlyFolder: 'Şu ýere geçiriň ýa-da {{ browseLinkFolder }}',\n captionTextWithFolder: 'Şu ýere geçiriň ýa-da {{ browseLink }} ýa-da {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Ýene geçiriň ýa-da {{ browseLink }}',\n captionTextForCompactSize: 'Faýllary geçiriň ýa-da {{ browseLink }}',\n browseLink: 'saýlaň',\n browseLinkFolder: 'bukja',\n browseLinkFolderMixed: 'bukja',\n title: 'Faýl ýükläň'\n }\n } satisfies KbqFileUploadLocaleConfig,\n codeBlock: {\n softWrapOnTooltip: 'Sözler boýunça geçirmäni işjeňleşdirmek',\n softWrapOffTooltip: 'Sözler boýunça geçirmäni öçürmek',\n downloadTooltip: 'Ýüklemek',\n copiedTooltip: '✓ Göçürildi',\n copyTooltip: 'Göçürmek',\n viewAllText: 'Hemmesini görkezmek',\n viewLessText: 'Ýygyrmak',\n openExternalSystemTooltip: 'Daşarky ulgamda açmak'\n } satisfies KbqCodeBlockLocaleConfiguration,\n timezone: {\n searchPlaceholder: 'Şäher ýa-da sagat guşagy'\n },\n actionsPanel: {\n closeTooltip: 'Saýlawy ýatyr'\n } satisfies KbqActionsPanelLocaleConfiguration,\n filterBar: {\n reset: {\n buttonName: 'Täzeden düz'\n },\n search: {\n tooltip: 'Gözleg',\n placeholder: 'Gözleg'\n },\n filters: {\n defaultName: 'Filtrler',\n saveNewFilterTooltip: 'Täze filtri ýazdyr',\n searchPlaceholder: 'Gözleg',\n searchEmptyResult: 'Hiç zat tapylmady',\n saveAsNewFilter: 'Täze filtr hökmünde ýazdyr',\n saveChanges: 'Üýtgetmeleri ýazdyr',\n saveAsNew: 'Täze hökmünde ýazdyr',\n change: 'Düzet',\n resetChanges: 'Täzeden düz',\n remove: 'Poz',\n name: 'At',\n error: 'Şeýle atly gözleg eýýäm bar',\n errorHint: 'Filtri ýazdyryp bolmady. Täzeden synanyň ýa-da administratora ýüz tutuň.',\n saveButton: 'Ýazdyr',\n cancelButton: 'Ýatyr',\n actionsTooltip: 'Filtr amallary'\n },\n add: {\n tooltip: 'Filtr goş',\n addedAnnouncement: '{{ name }} filtri goşuldy'\n },\n refresher: {\n refresh: 'Täzele',\n settings: 'Täzeleme sazlamalary'\n },\n pipe: {\n clearButtonTooltip: 'Arassala',\n removeButtonTooltip: 'Ýokla',\n applyButton: 'Ulan',\n emptySearchResult: 'Hiç zat tapylmady',\n selectAll: 'Ählisini saýla'\n },\n datePipe: {\n customPeriod: 'Laýyk döwür',\n customPeriodFrom: 'başy',\n customPeriodTo: 'soňy',\n customPeriodErrorHint: 'Döwür gutarýan wagtyndan soň başlap bilmeýär',\n customPeriodMinIntervalErrorHint: 'Döwür azyndan {{ value }} bolmaly',\n customPeriodMaxIntervalErrorHint: 'Döwür köpi bilen {{ value }} bolmaly',\n backToPeriodSelection: 'Yzyna'\n }\n },\n clampedText: {\n openText: 'Giňelt',\n closeText: 'Ýap',\n showMoreText: 'Ýene {exceededItemCount} görkeziň',\n moreText: 'has köp'\n } satisfies KbqClampedTextLocaleConfig,\n navbarIc: {\n toggle: {\n pinButton: 'Rugsat giňeldildi',\n collapseButton: 'Apseykylmak'\n }\n },\n navbar: {\n toggle: {\n expand: 'Giňeltmek',\n collapse: 'Ýykmak'\n }\n },\n searchExpandable: {\n tooltip: 'Gözleg',\n placeholder: 'Gözleg'\n },\n appSwitcher: {\n searchPlaceholder: 'Gözleg',\n searchEmptyResult: 'Hiç zat tapylmady',\n sitesHeader: 'Beýleki saýtlar'\n },\n timeRange: {\n title: {\n for: 'soňky',\n placeholder: 'Möhleti saýla'\n },\n editor: {\n from: 'şundan',\n to: 'şuňa',\n apply: 'Ulanmak',\n cancel: 'Ýatyrmak',\n rangeLabel: 'Döwür',\n outOfBoundsError: 'Rugsat berlen döwür: {{ value }}',\n allTime: 'hemme döwür üçin',\n currentQuarter: 'şu çärýek üçin',\n currentYear: 'şu ýyl üçin',\n allTimeOption: 'Hemme döwür',\n currentQuarterOption: 'Şu çärýek',\n currentYearOption: 'Şu ýyl'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {# ýyl}\n other {# ýyl}\n }`,\n MONTHS: `{months, plural,\n one {aý}\n other {# aý}\n }`,\n WEEKS: `{weeks, plural,\n one {hepde}\n other {# hepde}\n }`,\n DAYS: `{days, plural,\n one {gün}\n other {# gün}\n }`,\n HOURS: `{hours, plural,\n one {sagat}\n other {# sagat}\n }`,\n MINUTES: `{minutes, plural,\n one {minut}\n other {# minut}\n }`,\n SECONDS: `{seconds, plural,\n one {sekunt}\n other {# sekunt}\n }`,\n YEARS_FRACTION: `{years} ýyl`,\n MONTHS_FRACTION: `{months} aý`\n },\n option: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {Ýyl}\n other {# ýyl}\n }`,\n MONTHS: `{months, plural,\n one {Aý}\n other {# aý}\n }`,\n WEEKS: `{weeks, plural,\n one {Hepde}\n other {# hepde}\n }`,\n DAYS: `{days, plural,\n one {Gün}\n other {# gün}\n }`,\n HOURS: `{hours, plural,\n one {Sagat}\n other {# sagat}\n }`,\n MINUTES: `{minutes, plural,\n one {Minut}\n other {# minut}\n }`,\n SECONDS: `{seconds, plural,\n one {Sekunt}\n other {# sekunt}\n }`,\n YEARS_FRACTION: `{years} ýyl`,\n MONTHS_FRACTION: `{months} aý`\n }\n }\n } satisfies KbqTimeRangeLocaleConfig,\n notificationCenter: {\n notifications: 'Duýduryşlar',\n remove: 'Aýyr',\n doNotDisturb: 'Alada etme',\n showPopUpNotifications: 'Açylýan bildirişleri görkeziň',\n noNotifications: 'Duýduryş ýok',\n failedToLoadNotifications: 'Duýduryşlary ýükläp bilmedi',\n repeat: 'Gaýtalama',\n loadingMore: 'Duýduryşlar ýüklenýär'\n }\n};\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, InjectionToken, Provider } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { enUSLocaleData } from './en-US';\nimport { esLALocaleData } from './es-LA';\nimport {\n enUSFormattersData,\n esLAFormattersData,\n ptBRFormattersData,\n ruRUFormattersData,\n tkTMFormattersData\n} from './formatters';\nimport { ptBRLocaleData } from './pt-BR';\nimport { ruRULocaleData } from './ru-RU';\nimport { tkTMLocaleData } from './tk-TM';\nimport { KbqNumberInputLocaleConfig } from './types';\n\nexport const KBQ_LOCALE_ID = new InjectionToken<string>('KbqLocaleId');\n\nexport const KBQ_DEFAULT_LOCALE_ID = 'ru-RU';\n\nexport function KBQ_DEFAULT_LOCALE_DATA_FACTORY() {\n return {\n items: [\n { id: 'en-US', name: 'English' },\n { id: 'es-LA', name: 'Español' },\n { id: 'pt-BR', name: 'Português' },\n { id: 'ru-RU', name: 'Русский' },\n { id: 'tk-TM', name: 'Türkmen' }\n ],\n 'en-US': { ...enUSLocaleData, ...enUSFormattersData },\n 'es-LA': { ...esLALocaleData, ...esLAFormattersData },\n 'pt-BR': { ...ptBRLocaleData, ...ptBRFormattersData },\n 'ru-RU': { ...ruRULocaleData, ...ruRUFormattersData },\n 'tk-TM': { ...tkTMLocaleData, ...tkTMFormattersData }\n };\n}\nexport const KBQ_LOCALE_DATA = new InjectionToken<any>('KBQ_LOCALE_DATA', {\n providedIn: 'root',\n factory: KBQ_DEFAULT_LOCALE_DATA_FACTORY\n});\n\nexport const KBQ_LOCALE_SERVICE = new InjectionToken<KbqLocaleService>('KBQ_LOCALE_SERVICE');\n\n/**\n * Attribute name to be used to set the locale in the html element.\n *\n * @default 'lang'\n *\n * @docs-private\n */\nexport const KBQ_LOCALE_SERVICE_LANG_ATTR_NAME = new InjectionToken<string>('KBQ_LOCALE_SERVICE_LANG_ATTR_NAME', {\n factory: () => 'lang'\n});\n\n/**\n * Utility provider to configure the attribute name to be used to set the locale in the html element.\n *\n * @see KBQ_LOCALE_SERVICE_LANG_ATTR_NAME\n *\n * @docs-private\n */\nexport const kbqLocaleServiceLangAttrNameProvider = (attrName: string): Provider => ({\n provide: KBQ_LOCALE_SERVICE_LANG_ATTR_NAME,\n useValue: attrName\n});\n\n@Injectable({ providedIn: 'root' })\nexport class KbqLocaleService {\n readonly changes: BehaviorSubject<string>;\n readonly locales: any = {};\n\n private readonly document = inject(DOCUMENT);\n\n id: string;\n current;\n\n private readonly langAttrName = inject(KBQ_LOCALE_SERVICE_LANG_ATTR_NAME);\n\n constructor() {\n const id = inject(KBQ_LOCALE_ID, { optional: true });\n const localeData = inject(KBQ_LOCALE_DATA, { optional: true });\n\n this.locales = localeData;\n\n this.id = id || KBQ_DEFAULT_LOCALE_ID;\n this.current = this.locales[this.id];\n\n this.changes = new BehaviorSubject(this.id);\n }\n\n setLocale(id: string) {\n this.id = id;\n this.current = this.locales[this.id];\n\n this.document.documentElement.setAttribute(this.langAttrName, this.id);\n\n this.changes.next(this.id);\n }\n\n addLocale(id: string, localeData) {\n this.id = id;\n this.changes.next(this.id);\n\n this.locales[this.id] = localeData;\n }\n\n getParams(componentName: string) {\n return this.current[componentName];\n }\n}\n\n// todo code below need refactor or delete in DS-3603\n/** @docs-private */\nexport const KBQ_DEFAULT_PRECISION_SEPARATOR = '.';\n\n/** @docs-private */\nexport function numberByParts(\n value: string,\n customConfig: Pick<KbqNumberInputLocaleConfig, 'fractionSeparator' | 'groupSeparator'>\n): { integer: string; fraction: string } {\n const { groupSeparator, fractionSeparator } = customConfig;\n const result = { integer: '', fraction: '' };\n let parsedValue = value;\n\n // normalize only when '.', ',' are used as fractionSeparators\n if (groupSeparator.includes(' ') && fractionSeparator === ',') {\n parsedValue = parsedValue.replace(/\\./g, ',');\n }\n\n const isNegative = parsedValue.startsWith('-');\n const numberByParts = parsedValue.split(fractionSeparator).filter(Boolean);\n\n if (numberByParts.length > 1) {\n result.fraction = numberByParts.pop() || '';\n result.integer = numberByParts\n .join()\n .replace(groupSeparator.join(''), '')\n .replace(fractionSeparator, '')\n .replace(/\\D/g, '');\n } else {\n result.integer = numberByParts.join().replace(groupSeparator[0], '').replace(/\\D/g, '');\n }\n\n if (isNegative) result.integer = `-${result.integer}`;\n\n return result;\n}\n\n/**\n * Function that returns a string representation of a number without localized separators\n */\nexport function normalizeNumber(\n value: string | null | undefined,\n customConfig: Pick<KbqNumberInputLocaleConfig, 'fractionSeparator' | 'groupSeparator'>\n): string {\n if (value === null || value === undefined) return '';\n\n const { groupSeparator, fractionSeparator } = customConfig;\n const groupSeparatorRegexp = new RegExp(`[${groupSeparator.join('')}]`, 'g');\n const fractionSeparatorRegexp = new RegExp(`\\\\${fractionSeparator}`, 'g');\n\n return value\n .toString()\n .replace(groupSeparatorRegexp, '')\n .replace(fractionSeparatorRegexp, KBQ_DEFAULT_PRECISION_SEPARATOR);\n}\n\n/**\n * Function that parse string and return a number. The string can be in any locale.\n */\nexport function checkAndNormalizeLocalizedNumber(num: string | null | undefined, locale?: string): number | null {\n if (num === null || num === undefined) return null;\n\n const locales = KBQ_DEFAULT_LOCALE_DATA_FACTORY();\n\n if (locale && locales[locale]) {\n const config = locales[locale].input.number;\n let normalized: number;\n\n if (!/\\d/g.test(num)) return +num;\n\n const { integer, fraction } = numberByParts(num, config);\n\n if (fraction) {\n normalized = +[integer, fraction].join('.');\n } else {\n normalized = +normalizeNumber(integer, config);\n }\n\n if (!Number.isNaN(normalized)) {\n return normalized;\n }\n }\n\n /* if some locale input config satisfies pasted number, try to normalise with selected locale config */\n let numberOutput: number | null = null;\n\n for (const config of locales.items.map(({ id }) => locales[id].input.number)) {\n const normalized = +normalizeNumber(num, config);\n\n if (!Number.isNaN(normalized)) {\n numberOutput = normalized;\n break;\n }\n }\n\n return numberOutput;\n}\n\n// todo code above need refactor or delete in DS-3603\n","import { inject, InjectionToken, Provider, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map, of } from 'rxjs';\nimport { KBQ_LOCALE_SERVICE } from './locale-service';\nimport { ruRULocaleData } from './ru-RU';\nimport { KbqA11yLocaleConfiguration } from './types';\n\n/** Localization configuration for the accessible names of the icon-only buttons the library renders itself. */\nexport const KBQ_A11Y_LOCALE_CONFIGURATION = new InjectionToken<KbqA11yLocaleConfiguration>(\n 'KBQ_A11Y_LOCALE_CONFIGURATION',\n { factory: () => ruRULocaleData.a11y }\n);\n\n/** Utility provider for `KBQ_A11Y_LOCALE_CONFIGURATION`. */\nexport const kbqA11yLocaleConfigurationProvider = (configuration: KbqA11yLocaleConfiguration): Provider => ({\n provide: KBQ_A11Y_LOCALE_CONFIGURATION,\n useValue: configuration\n});\n\n/**\n * Reactive accessible names for the icon-only buttons the library renders itself.\n *\n * Follows `KbqLocaleService` when one is provided, and otherwise stays on whatever\n * `KBQ_A11Y_LOCALE_CONFIGURATION` resolves to.\n *\n * @docs-private\n */\nexport function kbqInjectA11yLocaleConfiguration(): Signal<KbqA11yLocaleConfiguration> {\n const localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n const initialValue = inject(KBQ_A11Y_LOCALE_CONFIGURATION);\n const configuration = localeService\n ? localeService.changes.pipe(\n map<string, KbqA11yLocaleConfiguration>(\n () => localeService.getParams('a11y') satisfies KbqA11yLocaleConfiguration\n )\n )\n : of(initialValue);\n\n return toSignal(configuration, { initialValue });\n}\n","import { NgModule } from '@angular/core';\nimport { KBQ_LOCALE_SERVICE, KbqLocaleService } from './locale-service';\n\n@NgModule({\n providers: [\n { provide: KBQ_LOCALE_SERVICE, useClass: KbqLocaleService }\n ]\n})\nexport class KbqLocaleServiceModule {}\n","import { inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter } from '@koobiq/date-adapter';\nimport { DateFormatter as BaseDateFormatter } from '@koobiq/date-formatter';\nimport { KBQ_DATE_LOCALE, DateAdapter as KbqDateAdapter } from '../../datetime';\nimport { KBQ_LOCALE_SERVICE, KbqLocaleService } from '../../locales';\n\n@Injectable()\nexport class DateFormatter<D> extends BaseDateFormatter<D> {\n override readonly adapter: DateAdapter<D>;\n\n protected localeService = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n constructor() {\n const adapter = inject<DateAdapter<D>>(KbqDateAdapter);\n const locale = inject(KBQ_DATE_LOCALE);\n\n super(adapter, locale);\n this.adapter = adapter;\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe((locale) => this.setLocale(locale));\n }\n}\n","import { ChangeDetectorRef, effect, inject, Pipe, PipeTransform } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DurationUnit } from '@koobiq/date-adapter';\nimport { DateTimeOptions } from '@koobiq/date-formatter';\nimport { DateAdapter, KbqDateTimezoneService, KbqTimezoneLike } from '../../datetime';\nimport { KBQ_LOCALE_SERVICE } from '../../locales';\nimport { DateFormatter } from './formatter';\n\n/**\n * Identity comparison with a one-level element-wise fallback for arrays, so an input rebuilt on every\n * change detection cycle — a `[from, to]` tuple returned from a getter or a `computed()`, a `units`\n * array built in a method — still hits the cache of the impure pipes below. Array literals written\n * directly in a template are already memoized by Angular (`ɵɵpureFunction`); this covers the rest.\n *\n * Compares array elements by reference, like the `a === b` fallback it wraps — it has no notion of two\n * dates being \"equal\". Mutating a date already passed to a pipe in place (`Date#setHours`, a Moment\n * instance updated without cloning, …) keeps the same reference, so a `[from, to]` tuple rebuilt around\n * that mutated instance still reads as unchanged and the cached, now-stale string is returned. Replace\n * pipe inputs instead of mutating them — the same requirement Angular's OnPush change detection already\n * places on any object bound to an OnPush view.\n */\nconst shallowEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n\n return a.every((item, index) => item === b[index]);\n};\n\n/**\n * Deserializes a pipe input into a date, treating a missing value and an unparseable one alike as\n * \"no date\" — `DateAdapter.deserialize()` returns `null` for the former but a truthy *invalid* date\n * for the latter, so a plain truthiness check is not enough.\n */\nconst toValidDate = <D>(adapter: DateAdapter<D>, value: unknown): D | null => {\n const date = adapter.deserialize(value);\n\n return date != null && adapter.isValid(date) ? date : null;\n};\n\n/**\n * A `[from, to]` tuple with both bounds required; `null` when either is missing or invalid.\n *\n * Takes the tuple itself as possibly missing, not just its bounds: a pipe input that has not been\n * populated yet is `null`/`undefined` rather than `[null, null]`, and destructuring that throws.\n */\nconst toClosedRange = <D>(adapter: DateAdapter<D>, value: D[] | string[] | null | undefined): [D, D] | null => {\n const [from, to] = value ?? [];\n const startDate = toValidDate(adapter, from);\n const endDate = toValidDate(adapter, to);\n\n return startDate && endDate ? [startDate, endDate] : null;\n};\n\n/**\n * A `[from, to]` tuple where one bound may be open; `null` only when neither bound is a valid date.\n *\n * The range formatters switch to the opened-range template on their own when a bound is missing, but\n * throw when both are — and a throwing pipe aborts the rendering of the whole view.\n */\nconst toOpenedRange = <D>(\n adapter: DateAdapter<D>,\n value: D[] | string[] | null | undefined\n): [D | null, D | null] | null => {\n const [from, to] = value ?? [];\n const startDate = toValidDate(adapter, from);\n const endDate = toValidDate(adapter, to);\n\n return startDate || endDate ? [startDate, endDate] : null;\n};\n\n/**\n * A `[from, to]` tuple the duration formatters accept: both bounds required and chronologically\n * ordered. `DateFormatter.duration*` throws on anything else.\n */\nconst toDurationRange = <D>(adapter: DateAdapter<D>, value: D[] | string[] | null | undefined): [D, D] | null => {\n const range = toClosedRange(adapter, value);\n\n return range && adapter.compareDateTime(range[0], range[1]) <= 0 ? range : null;\n};\n\nexport class BaseFormatterPipe<D> {\n protected readonly adapter: DateAdapter<D> = inject(DateAdapter<D>);\n protected readonly formatter: DateFormatter<D> = inject(DateFormatter<D>);\n}\n\n/**\n * Base class for impure date-formatter pipes that recompute their result whenever the active locale\n * changes via `KbqLocaleService`, or the active time zone via `KbqDateTimezoneService`.\n *\n * The base class owns:\n * - a subscription to `KbqLocaleService.changes` and an `effect` on the active time zone, each of which\n * invalidates the cache and marks the host for check (the same approach the built-in `AsyncPipe` uses);\n * - caching by `(value, args, localeId, timezone)`, so the impure `transform()` only does\n * real work when an input, the active locale or the active time zone actually changed — see\n * `shallowEqual` for how the comparison works and its limits.\n *\n * Subclasses implement `format()`, which receives the raw pipe input(s) — a\n * single value for absolute/relative pipes, or a `[from, to]` tuple for range\n * pipes — deserializes via `this.adapter` and calls the matching\n * `DateFormatter` method.\n *\n * @docs-private\n */\nexport abstract class BaseLocaleAwareFormatterPipe<\n D,\n Value = D | string | null | undefined,\n Args extends unknown[] = unknown[]\n> extends BaseFormatterPipe<D> {\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly timezoneService = inject(KbqDateTimezoneService);\n\n private cachedValue: Value | null = null;\n private cachedArgs: Args = [] as unknown as Args;\n private cachedLocaleId: string | null = null;\n private cachedTimezone: KbqTimezoneLike | null = null;\n private cachedResult = '';\n private hasCache = false;\n\n constructor() {\n super();\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(() => {\n this.hasCache = false;\n this.changeDetectorRef.markForCheck();\n });\n\n // Only wakes an OnPush host up; the cache is invalidated by comparing the zone in `transform()`,\n // so the run this effect makes on creation costs nothing.\n effect(() => {\n this.timezoneService.timezone();\n\n this.changeDetectorRef.markForCheck();\n });\n }\n\n transform(value: Value, ...args: Args): string {\n const currentLocaleId = this.localeService?.id ?? null;\n const currentTimezone = this.timezoneService.timezone();\n\n if (\n this.hasCache &&\n shallowEqual(value, this.cachedValue) &&\n currentLocaleId === this.cachedLocaleId &&\n currentTimezone === this.cachedTimezone &&\n this.argsEqual(args)\n ) {\n return this.cachedResult;\n }\n\n this.cachedResult = this.format(value, ...args);\n this.cachedValue = value;\n this.cachedArgs = args;\n this.cachedLocaleId = currentLocaleId;\n this.cachedTimezone = currentTimezone;\n this.hasCache = true;\n\n return this.cachedResult;\n }\n\n protected abstract format(value: Value, ...args: Args): string;\n\n private argsEqual(args: Args): boolean {\n if (args.length !== this.cachedArgs.length) return false;\n\n for (let i = 0; i < args.length; i++) {\n if (!shallowEqual(args[i], this.cachedArgs[i])) return false;\n }\n\n return true;\n }\n}\n\n@Pipe({\n name: 'absoluteLongDate'\n})\nexport class AbsoluteDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, currYear?: boolean): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteLongDate(date, currYear) : '';\n }\n}\n\n@Pipe({\n name: 'absoluteLongDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class AbsoluteDateFormatterImpurePipe<D> extends AbsoluteDateFormatterPipe<D> {\n transform(value: D | string | null | undefined, currYear?: boolean): string {\n return super.transform(value, currYear);\n }\n}\n\n@Pipe({\n name: 'absoluteLongDateTime'\n})\nexport class AbsoluteDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteLongDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'absoluteLongDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class AbsoluteDateTimeFormatterImpurePipe<D> extends AbsoluteDateTimeFormatterPipe<D> {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n@Pipe({\n name: 'absoluteShortDate'\n})\nexport class AbsoluteDateShortFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, currYear?: boolean): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteShortDate(date, currYear) : '';\n }\n}\n\n@Pipe({\n name: 'absoluteShortDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class AbsoluteDateShortFormatterImpurePipe<D> extends AbsoluteDateShortFormatterPipe<D> {\n transform(value: D | string | null | undefined, currYear?: boolean): string {\n return super.transform(value, currYear);\n }\n}\n\n@Pipe({\n name: 'absoluteShortDateTime'\n})\nexport class AbsoluteShortDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteShortDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'absoluteShortDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class AbsoluteShortDateTimeFormatterImpurePipe<D> extends AbsoluteShortDateTimeFormatterPipe<D> {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n@Pipe({\n name: 'relativeLongDate'\n})\nexport class RelativeDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeLongDate(date) : '';\n }\n}\n\n@Pipe({\n name: 'relativeLongDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RelativeDateFormatterImpurePipe<D> extends RelativeDateFormatterPipe<D> {\n transform(value: D | string | null | undefined): string {\n return super.transform(value);\n }\n}\n\n@Pipe({\n name: 'relativeLongDateTime'\n})\nexport class RelativeDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeLongDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'relativeLongDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RelativeDateTimeFormatterImpurePipe<D> extends RelativeDateTimeFormatterPipe<D> {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n@Pipe({\n name: 'relativeShortDate'\n})\nexport class RelativeShortDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeShortDate(date) : '';\n }\n}\n\n@Pipe({\n name: 'relativeShortDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RelativeShortDateFormatterImpurePipe<D> extends RelativeShortDateFormatterPipe<D> {\n transform(value: D | string | null | undefined): string {\n return super.transform(value);\n }\n}\n\n@Pipe({\n name: 'relativeShortDateTime'\n})\nexport class RelativeShortDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeShortDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'relativeShortDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RelativeShortDateTimeFormatterImpurePipe<D> extends RelativeShortDateTimeFormatterPipe<D> {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n@Pipe({\n name: 'rangeLongDate'\n})\nexport class RangeDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeLongDate(range[0], range[1]);\n }\n}\n\n@Pipe({\n name: 'rangeLongDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeDateFormatterImpurePipe<D> extends RangeDateFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined): string {\n return super.transform(value);\n }\n}\n\n@Pipe({\n name: 'rangeShortDate'\n})\nexport class RangeShortDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeShortDate(range[0], range[1] ?? undefined);\n }\n}\n\n@Pipe({\n name: 'rangeShortDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeShortDateFormatterImpurePipe<D> extends RangeShortDateFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined): string {\n return super.transform(value);\n }\n}\n\n@Pipe({\n name: 'rangeLongDateTime'\n})\nexport class RangeDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeLongDateTime(range[0], range[1] ?? undefined, options);\n }\n}\n\n@Pipe({\n name: 'rangeLongDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeDateTimeFormatterImpurePipe<D> extends RangeDateTimeFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n@Pipe({\n name: 'rangeMiddleDateTime'\n})\nexport class RangeMiddleDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n // Unlike the other range formats, the middle one has no opened-range template — both bounds required.\n const range = toClosedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeMiddleDateTime(range[0], range[1], options);\n }\n}\n\n@Pipe({\n name: 'rangeMiddleDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeMiddleDateTimeFormatterImpurePipe<D> extends RangeMiddleDateTimeFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n@Pipe({\n name: 'rangeShortDateTime'\n})\nexport class RangeShortDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeShortDateTime(range[0], range[1], options);\n }\n}\n\n@Pipe({\n name: 'rangeShortDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeShortDateTimeFormatterImpurePipe<D> extends RangeShortDateTimeFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n@Pipe({\n name: 'durationShortest'\n})\nexport class DurationShortestFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationShortest(range[0], range[1], options?.seconds, options?.milliseconds);\n }\n}\n\n@Pipe({\n name: 'durationShortestImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class DurationShortestFormatterImpurePipe<D> extends DurationShortestFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n@Pipe({\n name: 'durationLong'\n})\nexport class DurationLongFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationLong(range[0], range[1], units, fraction);\n }\n}\n\n@Pipe({\n name: 'durationLongImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class DurationLongFormatterImpurePipe<D> extends DurationLongFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n return super.transform(value, units, fraction);\n }\n}\n\n@Pipe({\n name: 'durationShort'\n})\nexport class DurationShortFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationShort(range[0], range[1], units, fraction);\n }\n}\n\n@Pipe({\n name: 'durationShortImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class DurationShortFormatterImpurePipe<D> extends DurationShortFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n return super.transform(value, units, fraction);\n }\n}\n\n// Impure pipes that recompute on `KbqLocaleService` locale changes and on `KbqDateTimezoneService` time\n// zone changes (see `BaseLocaleAwareFormatterPipe`). Prefer these `kbq`-prefixed pipes when either can\n// change at runtime; the pure pipes above are kept for static usages and backward compatibility.\n\n@Pipe({\n name: 'kbqAbsoluteLongDate',\n pure: false\n})\nexport class KbqAbsoluteLongDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [currYear?: boolean]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, currYear?: boolean): string {\n return super.transform(value, currYear);\n }\n\n protected format(value: D | string | null | undefined, currYear?: boolean): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteLongDate(date, currYear) : '';\n }\n}\n\n@Pipe({\n name: 'kbqAbsoluteShortDate',\n pure: false\n})\nexport class KbqAbsoluteShortDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [currYear?: boolean]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, currYear?: boolean): string {\n return super.transform(value, currYear);\n }\n\n protected format(value: D | string | null | undefined, currYear?: boolean): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteShortDate(date, currYear) : '';\n }\n}\n\n@Pipe({\n name: 'kbqAbsoluteLongDateTime',\n pure: false\n})\nexport class KbqAbsoluteLongDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteLongDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'kbqAbsoluteShortDateTime',\n pure: false\n})\nexport class KbqAbsoluteShortDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteShortDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRelativeLongDate',\n pure: false\n})\nexport class KbqRelativeLongDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, []>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined): string {\n return super.transform(value);\n }\n\n protected format(value: D | string | null | undefined): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeLongDate(date) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRelativeShortDate',\n pure: false\n})\nexport class KbqRelativeShortDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, []>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined): string {\n return super.transform(value);\n }\n\n protected format(value: D | string | null | undefined): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeShortDate(date) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRelativeLongDateTime',\n pure: false\n})\nexport class KbqRelativeLongDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeLongDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRelativeShortDateTime',\n pure: false\n})\nexport class KbqRelativeShortDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeShortDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRangeLongDate',\n pure: false\n})\nexport class KbqRangeLongDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, []>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined): string {\n return super.transform(value);\n }\n\n protected format(value: D[] | string[] | null | undefined): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeLongDate(range[0], range[1]);\n }\n}\n\n@Pipe({\n name: 'kbqRangeShortDate',\n pure: false\n})\nexport class KbqRangeShortDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, []>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined): string {\n return super.transform(value);\n }\n\n protected format(value: D[] | string[] | null | undefined): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeShortDate(range[0], range[1] ?? undefined);\n }\n}\n\n@Pipe({\n name: 'kbqRangeLongDateTime',\n pure: false\n})\nexport class KbqRangeLongDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeLongDateTime(range[0], range[1] ?? undefined, options);\n }\n}\n\n@Pipe({\n name: 'kbqRangeMiddleDateTime',\n pure: false\n})\nexport class KbqRangeMiddleDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n // Unlike the other range formats, the middle one has no opened-range template — both bounds required.\n const range = toClosedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeMiddleDateTime(range[0], range[1], options);\n }\n}\n\n@Pipe({\n name: 'kbqRangeShortDateTime',\n pure: false\n})\nexport class KbqRangeShortDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeShortDateTime(range[0], range[1], options);\n }\n}\n\n/**\n * Formats the duration between two dates as a digital-clock value, e.g. `48:02:25`.\n *\n * Takes a `[from, to]` tuple, like the range pipes. `options.seconds` defaults to `true` and\n * `options.milliseconds` to `false`; `options.currYear` is not used by this format.\n *\n * Renders an empty string when the tuple itself or one of its bounds is missing or invalid, or when\n * `from` is later than `to`.\n *\n * @example\n * ```html\n * {{ [startedAt, finishedAt] | kbqDurationShortest }}\n * {{ [startedAt, finishedAt] | kbqDurationShortest: { seconds: false } }}\n * ```\n */\n@Pipe({\n name: 'kbqDurationShortest',\n pure: false\n})\nexport class KbqDurationShortestPipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationShortest(range[0], range[1], options?.seconds, options?.milliseconds);\n }\n}\n\n/**\n * Formats the duration between two dates in the long text format, e.g. `2 дня и 4 часа`.\n *\n * Takes a `[from, to]` tuple, like the range pipes. `units` restricts the units to show (the\n * formatter picks them automatically when omitted), `fraction` adds a fractional part for years\n * and months.\n *\n * Renders an empty string when the tuple itself or one of its bounds is missing or invalid, or when\n * `from` is later than `to`.\n *\n * @example\n * ```html\n * {{ [startedAt, finishedAt] | kbqDurationLong }}\n * {{ [startedAt, finishedAt] | kbqDurationLong: ['hours', 'minutes'] }}\n * {{ [startedAt, finishedAt] | kbqDurationLong: ['years'] : true }}\n * ```\n */\n@Pipe({\n name: 'kbqDurationLong',\n pure: false\n})\nexport class KbqDurationLongPipe<D>\n extends BaseLocaleAwareFormatterPipe<\n D,\n D[] | string[] | null | undefined,\n [units?: DurationUnit[], fraction?: boolean]\n >\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n return super.transform(value, units, fraction);\n }\n\n protected format(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationLong(range[0], range[1], units, fraction);\n }\n}\n\n/**\n * Formats the duration between two dates in the short text format, e.g. `2 д 4 ч`.\n *\n * Takes a `[from, to]` tuple, like the range pipes. `units` restricts the units to show (the\n * formatter picks them automatically when omitted), `fraction` adds a fractional part for years\n * and months.\n *\n * Renders an empty string when the tuple itself or one of its bounds is missing or invalid, or when\n * `from` is later than `to`.\n *\n * @example\n * ```html\n * {{ [startedAt, finishedAt] | kbqDurationShort }}\n * {{ [startedAt, finishedAt] | kbqDurationShort: ['seconds', 'milliseconds'] }}\n * ```\n */\n@Pipe({\n name: 'kbqDurationShort',\n pure: false\n})\nexport class KbqDurationShortPipe<D>\n extends BaseLocaleAwareFormatterPipe<\n D,\n D[] | string[] | null | undefined,\n [units?: DurationUnit[], fraction?: boolean]\n >\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n return super.transform(value, units, fraction);\n }\n\n protected format(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationShort(range[0], range[1], units, fraction);\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { enUSFormattersData } from '../../locales';\n\n/**\n * Available unit systems for file size formatting.\n * - SI (Metric): 1 KB = 1000 bytes\n * - IEC (Binary): 1 KiB = 1024 bytes\n */\nexport enum KbqMeasurementSystem {\n SI = 'SI',\n IEC = 'IEC'\n}\n\n/** Unit systems as union type */\nexport type KbqMeasurementSystemType = keyof typeof KbqMeasurementSystem;\n\nexport interface KbqUnitSystem {\n abbreviations: string[];\n base: number;\n power: number;\n}\n\n/**\n * Configuration for file size formatting options.\n * Defines the default unit system, precision, and available unit systems.\n */\nexport interface KbqSizeUnitsConfig {\n /**\n * Default unit system to use (e.g., 'SI' or 'IEC').\n * @see KbqMeasurementSystem\n */\n defaultUnitSystem: KbqMeasurementSystemType;\n /**\n * Default number of decimal places to display in formatted output.\n * @example\n * `2` → \"1.23 KB\"\n */\n defaultPrecision: number;\n /** @see KbqMeasurementSystem */\n unitSystems: {\n [KbqMeasurementSystem.SI]: KbqUnitSystem;\n [KbqMeasurementSystem.IEC]: KbqUnitSystem;\n };\n}\n\nexport const KBQ_SIZE_UNITS_DEFAULT_CONFIG: KbqSizeUnitsConfig = enUSFormattersData.sizeUnits;\n\n/**\n * Configuration for converting sizes in different unit systems.\n */\nexport const KBQ_SIZE_UNITS_CONFIG = new InjectionToken<KbqSizeUnitsConfig>('KbqSizeUnitsConfig');\n\n/** Utility provider for `KBQ_SIZE_UNITS_CONFIG`. */\nexport const kbqFilesizeFormatterConfigurationProvider = (configuration: Partial<KbqSizeUnitsConfig>): Provider => ({\n provide: KBQ_SIZE_UNITS_CONFIG,\n useValue: { ...KBQ_SIZE_UNITS_DEFAULT_CONFIG, ...configuration }\n});\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { Injectable, InjectionToken, Pipe, PipeTransform, inject } from '@angular/core';\nimport {\n KBQ_DEFAULT_LOCALE_ID,\n KBQ_LOCALE_ID,\n KBQ_LOCALE_SERVICE,\n KbqLocaleService,\n KbqNumberFormatOptions,\n KbqNumberRoundingLocaleConfig\n} from '../../locales';\n\nexport const KBQ_NUMBER_FORMATTER_OPTIONS = new InjectionToken<ParsedDigitsInfo>('KbqNumberFormatterOptions');\n\nexport const KBQ_NUMBER_FORMATTER_DEFAULT_OPTIONS: ParsedDigitsInfo = {\n useGrouping: true,\n minimumIntegerDigits: 1,\n minimumFractionDigits: 0,\n maximumFractionDigits: 3\n};\n\n/** Formats a number value according to locale and formatting options */\nexport function formatNumberWithLocale(\n value: unknown,\n formatter: Intl.NumberFormat,\n options?: KbqNumberFormatOptions\n): string {\n const num = strToNumber(value);\n\n if (!options?.viewGroupSeparator) return formatter.format(num);\n\n const numberFormatParts = formatter.formatToParts(num);\n\n for (const numberFormatPart of numberFormatParts) {\n if (numberFormatPart.type === 'group') {\n numberFormatPart.value = options.viewGroupSeparator;\n }\n }\n\n return numberFormatParts.map(({ value }) => value).join('');\n}\n\n/**\n * Special contract between `KbqDecimalPipe` and `KbqTableNumberPipe`,\n * so they can be interchangeable in the cases of usage\n */\nexport interface KbqNumericPipe {\n transform(value: unknown, digitsInfo?: string, locale?: string): string | null;\n}\n\nfunction isEmpty(value: any): boolean {\n return value == null || value === '' || value !== value;\n}\n\nfunction strToNumber(value: unknown): number {\n const coerced = coerceNumberProperty(value, null);\n\n if (coerced === null) {\n throw new Error(`${value} is not a number`);\n }\n\n return coerced;\n}\n\nexport const NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?(-(true|false))?)?$/;\n\nconst minIntGroupPosition = 1;\nconst minFractionGroupPosition = 3;\nconst maxFractionGroupPosition = 5;\nconst useGroupingPosition = 7;\n\ntype RoundDecimalOptions = KbqNumberRoundingLocaleConfig & {\n /** Label for the ten-thousand unit. */\n tenThousand?: string;\n /** Label for the one-hundred-millions unit. */\n oneHundredMillions?: string;\n rtl?: boolean;\n};\n\nconst ROUNDING_UNITS = {\n thousand: 1e3,\n tenThousand: 10 * 1e3,\n million: 1e6,\n oneHundredMillions: 100 * 1e6,\n billion: 1e9,\n trillion: 1e12\n};\n\n/** Rounding units that carry a localized label in `KbqNumberRoundingLocaleConfig`. */\ntype RoundingUnit = keyof RoundDecimalOptions & keyof typeof ROUNDING_UNITS;\n\nconst intervalsConfig = {\n supportedLanguages: ['ru-RU', 'en-US', 'es-LA', 'pt-BR'],\n intervals: [\n { startRange: 1, endRange: ROUNDING_UNITS.thousand },\n { startRange: ROUNDING_UNITS.thousand, endRange: ROUNDING_UNITS.tenThousand, precision: 1 },\n { startRange: ROUNDING_UNITS.tenThousand, endRange: ROUNDING_UNITS.million },\n { startRange: ROUNDING_UNITS.million, endRange: ROUNDING_UNITS.million * 10, precision: 1 },\n { startRange: ROUNDING_UNITS.million * 10, endRange: ROUNDING_UNITS.billion }\n ]\n};\n\nclass ParsedDigitsInfo {\n useGrouping: boolean;\n minimumIntegerDigits: number;\n minimumFractionDigits: number;\n maximumFractionDigits: number;\n}\n\nconst defaultValueForGroupingInRULocale: number = 10000;\n\nfunction parseDigitsInfo(digitsInfo: string): ParsedDigitsInfo {\n const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);\n\n if (parts === null) {\n throw new Error(`${digitsInfo} is not a valid digit info`);\n }\n\n const minIntPart = parts[minIntGroupPosition];\n const minFractionPart = parts[minFractionGroupPosition];\n const maxFractionPart = parts[maxFractionGroupPosition];\n const useGroupingPart = parts[useGroupingPosition];\n\n const result = new ParsedDigitsInfo();\n\n if (minIntPart != null) {\n result.minimumIntegerDigits = parseInt(minIntPart);\n }\n\n if (minFractionPart != null) {\n result.minimumFractionDigits = parseInt(minFractionPart);\n }\n\n if (maxFractionPart != null) {\n result.maximumFractionDigits = parseInt(maxFractionPart);\n } else if (minFractionPart != null && result.minimumFractionDigits > result.maximumFractionDigits) {\n result.maximumFractionDigits = result.minimumFractionDigits;\n }\n\n if (useGroupingPart != null) {\n result.useGrouping = useGroupingPart === 'true';\n }\n\n return result;\n}\n\n@Injectable({ providedIn: 'root' })\n@Pipe({\n name: 'kbqNumber',\n pure: false\n})\nexport class KbqDecimalPipe implements KbqNumericPipe, PipeTransform {\n private id = inject(KBQ_LOCALE_ID, { optional: true });\n private localeService = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly options = inject<ParsedDigitsInfo>(KBQ_NUMBER_FORMATTER_OPTIONS, { optional: true })!;\n constructor() {\n this.options = this.options || KBQ_NUMBER_FORMATTER_DEFAULT_OPTIONS;\n\n this.localeService?.changes.subscribe((newId: string) => (this.id = newId));\n }\n\n /**\n * @param value The number to be formatted.\n * @param digitsInfo Decimal representation options, specified by a string\n * in the following format:<br>\n * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>.\n * - `minIntegerDigits`: The minimum number of integer digits before the decimal point.\n * Default is `1`.\n * - `minFractionDigits`: The minimum number of digits after the decimal point.\n * Default is `0`.\n * - `maxFractionDigits`: The maximum number of digits after the decimal point.\n * Default is `3`.\n * @param locale A locale code for the locale format rules to use.\n * When not supplied, uses the value of `KBQ_LOCALE_ID`, which is `ru` by default.\n */\n transform(value: any, digitsInfo?: string, locale?: string): string | null {\n if (isEmpty(value)) {\n return null;\n }\n\n const currentLocale = locale || this.id || KBQ_DEFAULT_LOCALE_ID;\n\n let parsedDigitsInfo: ParsedDigitsInfo | undefined;\n\n if (digitsInfo) {\n parsedDigitsInfo = parseDigitsInfo(digitsInfo);\n }\n\n const options: Intl.NumberFormatOptions = {\n ...this.options,\n ...parsedDigitsInfo\n };\n\n if (this.isSpecialFormatForRULocale(currentLocale, value, parsedDigitsInfo?.useGrouping)) {\n options.useGrouping = false;\n }\n\n try {\n const formatter = new Intl.NumberFormat(currentLocale, options);\n\n return formatNumberWithLocale(\n value,\n formatter,\n this.localeService?.locales[currentLocale]?.formatters.number.decimal\n );\n } catch (error: any) {\n throw Error(`InvalidPipeArgument: KbqDecimalPipe for pipe '${JSON.stringify(error.message)}'`);\n }\n }\n\n isSpecialFormatForRULocale(locale: string, value: number, grouping?: boolean): boolean {\n return (\n ['ru', 'ru-RU'].includes(locale) &&\n grouping === undefined &&\n Math.abs(value) < defaultValueForGroupingInRULocale\n );\n }\n}\n\n@Injectable({ providedIn: 'root' })\n@Pipe({\n name: 'kbqTableNumber',\n pure: false\n})\nexport class KbqTableNumberPipe implements KbqNumericPipe, PipeTransform {\n private id = inject(KBQ_LOCALE_ID, { optional: true });\n private localeService = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly options = inject<ParsedDigitsInfo>(KBQ_NUMBER_FORMATTER_OPTIONS, { optional: true })!;\n constructor() {\n this.options = this.options || KBQ_NUMBER_FORMATTER_DEFAULT_OPTIONS;\n\n this.localeService?.changes.subscribe((newId: string) => (this.id = newId));\n }\n\n /**\n * @param value The number to be formatted.\n * @param digitsInfo Decimal representation options, specified by a string\n * in the following format:<br>\n * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>.\n * - `minIntegerDigits`: The minimum number of integer digits before the decimal point.\n * Default is `1`.\n * - `minFractionDigits`: The minimum number of digits after the decimal point.\n * Default is `0`.\n * - `maxFractionDigits`: The maximum number of digits after the decimal point.\n * Default is `3`.\n * @param locale A locale code for the locale format rules to use.\n * When not supplied, uses the value of `KBQ_LOCALE_ID`, which is `ru` by default.\n */\n transform(value: any, digitsInfo?: string, locale?: string): string | null {\n if (isEmpty(value)) {\n return null;\n }\n\n const currentLocale = locale || this.id || KBQ_DEFAULT_LOCALE_ID;\n\n let parsedDigitsInfo: ParsedDigitsInfo | undefined;\n\n if (digitsInfo) {\n parsedDigitsInfo = parseDigitsInfo(digitsInfo);\n }\n\n const options: Intl.NumberFormatOptions = {\n ...this.options,\n ...parsedDigitsInfo\n };\n\n try {\n const formatter = new Intl.NumberFormat(currentLocale, options);\n\n return formatNumberWithLocale(\n value,\n formatter,\n this.localeService?.locales[currentLocale]?.formatters.number.decimal\n );\n } catch (error: any) {\n throw Error(`InvalidPipeArgument: KbqTableNumberPipe for pipe '${JSON.stringify(error.message)}'`);\n }\n }\n}\n\nexport function isWithin(startRange: number, endRange: number, valueToCheck: number): boolean {\n return startRange <= valueToCheck && valueToCheck < endRange;\n}\n\n@Injectable({ providedIn: 'root' })\n@Pipe({\n name: 'kbqRoundNumber',\n pure: false\n})\nexport class KbqRoundDecimalPipe implements PipeTransform {\n private id = inject(KBQ_LOCALE_ID, { optional: true });\n private localeService = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n roundingOptions: RoundDecimalOptions;\n\n constructor() {\n this.localeService?.changes.subscribe((newId: string) => (this.id = newId));\n }\n\n // @TODO: update returned type to string | null. Breaking change\n transform(value: any, locale?: string): any {\n if (isEmpty(value)) {\n return null;\n }\n\n const currentLocale: string = locale || this.id || KBQ_DEFAULT_LOCALE_ID;\n\n this.roundingOptions = this.localeService?.locales[currentLocale].formatters.number.rounding;\n\n try {\n const num = strToNumber(value);\n const unit = this.calculateUnit(num);\n\n if (!unit) {\n return Intl.NumberFormat.call(this, currentLocale, { useGrouping: false }).format(num);\n }\n\n let parts: { num?: number; fraction?: number } = {};\n\n if (intervalsConfig.supportedLanguages.includes(currentLocale)) {\n intervalsConfig.intervals.find(({ startRange, endRange, precision }) => {\n const within = isWithin(startRange, endRange, num);\n\n if (within) {\n if (precision) {\n parts =\n unit === 'thousand'\n ? this.calculatePartsForThousands(num)\n : {\n num: Math.trunc(num / ROUNDING_UNITS[unit]),\n fraction: this.calculateDecimal(num, ROUNDING_UNITS[unit])\n };\n } else {\n parts = { num: Math.round(num / ROUNDING_UNITS[unit]) };\n }\n }\n\n return within;\n });\n }\n\n parts = parts.num\n ? parts\n : {\n num: Math.trunc(num / ROUNDING_UNITS[unit]),\n fraction: this.calculateDecimal(num, ROUNDING_UNITS[unit])\n };\n Object.keys(parts).forEach((key) => {\n parts[key] = Intl.NumberFormat.call(this, currentLocale, { useGrouping: false }).format(parts[key]);\n });\n\n const calculatedValue = parts.fraction\n ? `${parts.num}${this.roundingOptions.groupSeparator}${parts.fraction}`\n : `${parts.num}`;\n\n return `${calculatedValue}${this.roundingOptions.separator}${this.roundingOptions[unit]}`;\n } catch (error: any) {\n throw Error(`InvalidPipeArgument: KbqRoundDecimalPipe for pipe '${JSON.stringify(error.message)}'`);\n }\n }\n\n private calculateDecimal(num: number, divider: number) {\n return Math.round(((num / divider) % 1) * 10);\n }\n\n /**\n * 2 * 1000 is a number in the interval of [1500...2500)\n *\n * 2,0 * 1000 is a number in the interval of [1950...2050)\n */\n private calculatePartsForThousands(num: number) {\n const dividedValue = num / ROUNDING_UNITS.thousand;\n const div = Math.round(dividedValue) * ROUNDING_UNITS.thousand;\n const fifty = 50;\n\n return isWithin(div - fifty, div + fifty, num)\n ? { num: Math.round(dividedValue), fraction: 0 }\n : { num: Math.round(dividedValue) };\n }\n\n private calculateUnit(num: number): RoundingUnit | undefined {\n let currentUnit: RoundingUnit | undefined;\n const localizedOptions = Object.keys(this.roundingOptions);\n\n (Object.keys(ROUNDING_UNITS) as RoundingUnit[]).every((key) => {\n if (!localizedOptions.includes(key)) {\n return true;\n }\n\n if (num / ROUNDING_UNITS[key] >= 1) {\n currentUnit = key;\n\n return true;\n }\n\n return false;\n });\n\n return currentUnit;\n }\n}\n","import { KbqUnitSystem } from './config';\n\nexport const KBQ_INVALID_VALUE_ERROR = 'Argument \"value\" must be a finite number!';\n\n/**\n * Converts a byte value into locale-independent file size parts: numeric value and unit abbreviation.\n *\n * @param value - size in bytes.\n * @param system - unit system defining abbreviations and base scaling (SI/IEC).\n * @returns Object with the formatted size info.\n *\n * @example\n * getFormattedSizeParts(1500, 'SI'); // { value: \"1.50\", unit: \"KB\" }\n */\nexport function getFormattedSizeParts(value: number, system: KbqUnitSystem): { value: string; unit: string } {\n const { result, unit } = getHumanizedBytes(value, system);\n\n return {\n value: result.toString(),\n unit\n };\n}\n\n/**\n * Converts bytes to Kb, Mb, Gb\n *\n * @param value the number of bytes\n * @param system the measurement system\n * @param threshold the lower counting threshold\n */\nexport const getHumanizedBytes = (\n value: number,\n system: KbqUnitSystem,\n threshold?: number\n): { result: number; unit: string } => {\n if (!Number.isFinite(value)) {\n throw new Error(KBQ_INVALID_VALUE_ERROR);\n }\n\n const calculatedThreshold = Number.isFinite(threshold) ? threshold : Math.pow(system.base, system.power);\n const orderOfMagnitude: number = Math.pow(system.base, system.power);\n\n let result: number = value;\n let step = 0;\n const len: number = system.abbreviations.length - 1;\n\n while (step < len) {\n if (calculatedThreshold !== undefined && result < calculatedThreshold) {\n break;\n }\n\n step++;\n result = value / Math.pow(orderOfMagnitude, step);\n }\n\n return {\n result,\n unit: system.abbreviations[step]\n };\n};\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KBQ_DEFAULT_LOCALE_ID, KBQ_LOCALE_SERVICE } from '../../locales';\nimport { KbqDecimalPipe } from '../number/formatter';\nimport {\n KBQ_SIZE_UNITS_CONFIG,\n KBQ_SIZE_UNITS_DEFAULT_CONFIG,\n KbqMeasurementSystem,\n KbqMeasurementSystemType,\n KbqSizeUnitsConfig,\n KbqUnitSystem\n} from './config';\nimport { getFormattedSizeParts } from './size';\n\n@Pipe({\n name: 'kbqDataSize',\n pure: false\n})\nexport class KbqDataSizePipe implements PipeTransform {\n /** Injects the external configuration for size units, if available. */\n readonly externalConfig = inject(KBQ_SIZE_UNITS_CONFIG, { optional: true });\n\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly numberPipe = inject(KbqDecimalPipe, { optional: true });\n private readonly nonBreakingSpace = '\\u00a0';\n private config: KbqSizeUnitsConfig;\n\n constructor() {\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n if (!this.localeService) {\n this.config = this.externalConfig || KBQ_SIZE_UNITS_DEFAULT_CONFIG;\n }\n }\n\n /** Transforms bytes into localized size string */\n transform(\n source: number,\n precision: number = this.config.defaultPrecision,\n unitSystemName: KbqMeasurementSystemType = this.config.defaultUnitSystem,\n locale: string = this.localeService?.id || KBQ_DEFAULT_LOCALE_ID\n ): string {\n const resolvedUnitSystems: Record<KbqMeasurementSystem, KbqUnitSystem> = this.localeService\n ? this.localeService.locales[locale].sizeUnits.unitSystems\n : this.config.unitSystems;\n\n const { value, unit } = getFormattedSizeParts(source, resolvedUnitSystems[unitSystemName]);\n\n const formattedValue = this.numberPipe?.transform(value, `1.0-${precision}`, locale) || value;\n\n return formattedValue ? `${formattedValue}${this.nonBreakingSpace}${unit}` : '';\n }\n\n private updateLocaleParams = () => {\n this.config = this.externalConfig || this.localeService?.getParams('sizeUnits');\n };\n}\n","import { NgModule } from '@angular/core';\nimport { DateFormatter } from './date/formatter';\nimport {\n AbsoluteDateFormatterImpurePipe,\n AbsoluteDateFormatterPipe,\n AbsoluteDateShortFormatterImpurePipe,\n AbsoluteDateShortFormatterPipe,\n AbsoluteDateTimeFormatterImpurePipe,\n AbsoluteDateTimeFormatterPipe,\n AbsoluteShortDateTimeFormatterImpurePipe,\n AbsoluteShortDateTimeFormatterPipe,\n DurationLongFormatterImpurePipe,\n DurationLongFormatterPipe,\n DurationShortestFormatterImpurePipe,\n DurationShortestFormatterPipe,\n DurationShortFormatterImpurePipe,\n DurationShortFormatterPipe,\n KbqAbsoluteLongDatePipe,\n KbqAbsoluteLongDateTimePipe,\n KbqAbsoluteShortDatePipe,\n KbqAbsoluteShortDateTimePipe,\n KbqDurationLongPipe,\n KbqDurationShortestPipe,\n KbqDurationShortPipe,\n KbqRangeLongDatePipe,\n KbqRangeLongDateTimePipe,\n KbqRangeMiddleDateTimePipe,\n KbqRangeShortDatePipe,\n KbqRangeShortDateTimePipe,\n KbqRelativeLongDatePipe,\n KbqRelativeLongDateTimePipe,\n KbqRelativeShortDatePipe,\n KbqRelativeShortDateTimePipe,\n RangeDateFormatterImpurePipe,\n RangeDateFormatterPipe,\n RangeDateTimeFormatterImpurePipe,\n RangeDateTimeFormatterPipe,\n RangeMiddleDateTimeFormatterImpurePipe,\n RangeMiddleDateTimeFormatterPipe,\n RangeShortDateFormatterImpurePipe,\n RangeShortDateFormatterPipe,\n RangeShortDateTimeFormatterImpurePipe,\n RangeShortDateTimeFormatterPipe,\n RelativeDateFormatterImpurePipe,\n RelativeDateFormatterPipe,\n RelativeDateTimeFormatterImpurePipe,\n RelativeDateTimeFormatterPipe,\n RelativeShortDateFormatterImpurePipe,\n RelativeShortDateFormatterPipe,\n RelativeShortDateTimeFormatterImpurePipe,\n RelativeShortDateTimeFormatterPipe\n} from './date/formatter.pipe';\nimport { KbqDataSizePipe } from './filesize';\nimport { KbqDecimalPipe, KbqRoundDecimalPipe, KbqTableNumberPipe } from './number/formatter';\n\n@NgModule({\n imports: [\n AbsoluteDateFormatterPipe,\n AbsoluteDateTimeFormatterPipe,\n AbsoluteDateShortFormatterPipe,\n AbsoluteShortDateTimeFormatterPipe,\n RelativeDateFormatterPipe,\n RelativeDateTimeFormatterPipe,\n RelativeShortDateFormatterPipe,\n RelativeShortDateTimeFormatterPipe,\n RangeDateFormatterPipe,\n RangeShortDateFormatterPipe,\n RangeDateTimeFormatterPipe,\n RangeShortDateTimeFormatterPipe,\n RangeMiddleDateTimeFormatterPipe,\n DurationShortestFormatterPipe,\n DurationLongFormatterPipe,\n DurationShortFormatterPipe,\n AbsoluteDateFormatterImpurePipe,\n AbsoluteDateTimeFormatterImpurePipe,\n AbsoluteDateShortFormatterImpurePipe,\n AbsoluteShortDateTimeFormatterImpurePipe,\n RelativeDateFormatterImpurePipe,\n RelativeDateTimeFormatterImpurePipe,\n RelativeShortDateFormatterImpurePipe,\n RelativeShortDateTimeFormatterImpurePipe,\n RangeDateFormatterImpurePipe,\n RangeShortDateFormatterImpurePipe,\n RangeDateTimeFormatterImpurePipe,\n RangeShortDateTimeFormatterImpurePipe,\n RangeMiddleDateTimeFormatterImpurePipe,\n DurationShortestFormatterImpurePipe,\n DurationLongFormatterImpurePipe,\n DurationShortFormatterImpurePipe,\n KbqAbsoluteLongDatePipe,\n KbqAbsoluteLongDateTimePipe,\n KbqAbsoluteShortDatePipe,\n KbqAbsoluteShortDateTimePipe,\n KbqRelativeLongDatePipe,\n KbqRelativeLongDateTimePipe,\n KbqRelativeShortDatePipe,\n KbqRelativeShortDateTimePipe,\n KbqRangeLongDatePipe,\n KbqRangeLongDateTimePipe,\n KbqRangeMiddleDateTimePipe,\n KbqRangeShortDatePipe,\n KbqRangeShortDateTimePipe,\n KbqDurationShortestPipe,\n KbqDurationLongPipe,\n KbqDurationShortPipe,\n KbqDataSizePipe,\n KbqDecimalPipe,\n KbqRoundDecimalPipe,\n KbqTableNumberPipe\n ],\n providers: [DateFormatter],\n exports: [\n KbqDecimalPipe,\n KbqRoundDecimalPipe,\n KbqTableNumberPipe,\n AbsoluteDateFormatterPipe,\n AbsoluteDateTimeFormatterPipe,\n AbsoluteDateShortFormatterPipe,\n AbsoluteShortDateTimeFormatterPipe,\n RelativeDateFormatterPipe,\n RelativeDateTimeFormatterPipe,\n RelativeShortDateFormatterPipe,\n RelativeShortDateTimeFormatterPipe,\n RangeDateFormatterPipe,\n RangeShortDateFormatterPipe,\n RangeDateTimeFormatterPipe,\n RangeShortDateTimeFormatterPipe,\n RangeMiddleDateTimeFormatterPipe,\n DurationShortestFormatterPipe,\n DurationLongFormatterPipe,\n DurationShortFormatterPipe,\n AbsoluteDateFormatterImpurePipe,\n AbsoluteDateTimeFormatterImpurePipe,\n AbsoluteDateShortFormatterImpurePipe,\n AbsoluteShortDateTimeFormatterImpurePipe,\n RelativeDateFormatterImpurePipe,\n RelativeDateTimeFormatterImpurePipe,\n RelativeShortDateFormatterImpurePipe,\n RelativeShortDateTimeFormatterImpurePipe,\n RangeDateFormatterImpurePipe,\n RangeShortDateFormatterImpurePipe,\n RangeDateTimeFormatterImpurePipe,\n RangeShortDateTimeFormatterImpurePipe,\n RangeMiddleDateTimeFormatterImpurePipe,\n DurationShortestFormatterImpurePipe,\n DurationLongFormatterImpurePipe,\n DurationShortFormatterImpurePipe,\n KbqAbsoluteLongDatePipe,\n KbqAbsoluteLongDateTimePipe,\n KbqAbsoluteShortDatePipe,\n KbqAbsoluteShortDateTimePipe,\n KbqRelativeLongDatePipe,\n KbqRelativeLongDateTimePipe,\n KbqRelativeShortDatePipe,\n KbqRelativeShortDateTimePipe,\n KbqRangeLongDatePipe,\n KbqRangeLongDateTimePipe,\n KbqRangeMiddleDateTimePipe,\n KbqRangeShortDatePipe,\n KbqRangeShortDateTimePipe,\n KbqDurationShortestPipe,\n KbqDurationLongPipe,\n KbqDurationShortPipe,\n KbqDataSizePipe\n ]\n})\nexport class KbqFormattersModule {}\n\nexport * from './date/formatter';\nexport * from './date/formatter.pipe';\nexport * from './filesize/index';\nexport * from './number/formatter';\n","import { AfterContentInit, Directive, ElementRef, contentChildren, inject } from '@angular/core';\n\n@Directive({\n selector: '.kbq-form__row, .kbq-form__fieldset, .kbq-form__legend',\n host: {\n '[class.kbq-form-row_margin]': 'margin'\n },\n exportAs: 'kbqFormElement'\n})\nexport class KbqFormElement implements AfterContentInit {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n margin = false;\n\n isRow = false;\n isFieldSet = false;\n hasLegend = false;\n isHorizontal = false;\n\n readonly elements = contentChildren(KbqFormElement);\n\n ngAfterContentInit(): void {\n const classList = this.element.nativeElement.classList;\n\n this.isRow = classList.contains('kbq-form__row');\n this.isHorizontal = classList.contains('kbq-horizontal');\n\n this.isFieldSet = classList.contains('kbq-form__fieldset');\n\n if (this.isFieldSet && this.element.nativeElement.firstElementChild) {\n this.hasLegend = this.element.nativeElement.firstElementChild.classList.contains('kbq-form__legend');\n }\n }\n}\n\n@Directive({\n selector: '.kbq-form-vertical, .kbq-form-horizontal',\n host: {\n class: 'kbq-form'\n },\n exportAs: 'kbqForm'\n})\nexport class KbqForm implements AfterContentInit {\n readonly elements = contentChildren(KbqFormElement);\n\n ngAfterContentInit(): void {\n this.handleElements(this.elements());\n }\n\n handleElements(elements: readonly KbqFormElement[]): void {\n elements.forEach((element, index) => {\n const nextElement: KbqFormElement | undefined = elements[index + 1];\n\n if (element.isFieldSet && !element.isHorizontal) {\n this.handleElements(element.elements());\n }\n\n element.margin = !!(nextElement && !nextElement.hasLegend);\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqForm, KbqFormElement } from './forms.directive';\n\n@NgModule({\n imports: [\n KbqForm,\n KbqFormElement\n ],\n exports: [\n KbqForm,\n KbqFormElement\n ]\n})\nexport class KbqFormsModule {}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/** Provides a set of validators for password form controls. */\nexport class PasswordValidators {\n /**\n * Validator that requires the control's value length to be at least `min` characters.\n *\n * `min` - number of characters.\n *\n * ## Usage:\n *\n * ```typescript\n * const control = new FormControl('password', PasswordValidators.minLength(10));\n * console.log(control.errors); // {minLength: {min: 10, actual: 8}}\n * ```\n */\n static minLength(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n return value.length >= min ? null : { minLength: { min, actual: value.length } };\n };\n }\n\n /**\n * Validator that requires the control's value length to be at most `max` characters.\n *\n * `max` - number of characters.\n *\n * ## Usage:\n * ```typescript\n * const control = new FormControl('password', PasswordValidators.maxLength(6));\n * console.log(control.errors); // {maxLength: {max: 6, actual: 8}}\n * ```\n */\n static maxLength(max: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n return value.length <= max ? null : { maxLength: { max, actual: value.length } };\n };\n }\n\n /**\n * Validator that requires the control's value to be at least `min` uppercase characters.\n *\n * `min` - number of uppercase characters.\n *\n * ### Usage:\n *\n * ```typescript\n * const control = new FormControl('Password', PasswordValidators.minUppercase(2));\n * console.log(control.errors); // {minUppercase: {min: 2, actual: 1}}\n * ```\n */\n static minUppercase(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n const matches = (value.match(/[A-Z]/g) || []).length;\n\n return matches >= min ? null : { minUppercase: { min, actual: matches } };\n };\n }\n\n /**\n * Validator that requires the control's value to be at least `min` lowercase characters.\n *\n * `min` - number of lowercase characters.\n *\n * ### Usage:\n *\n * ```typescript\n * const control = new FormControl('PASSWORD', PasswordValidators.minLowercase());\n * console.log(control.errors); // {minLowercase: {min: 1, actual: 0}}\n * ```\n */\n static minLowercase(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n const matches = (value.match(/[a-z]/g) || []).length;\n\n return matches >= min ? null : { minLowercase: { min, actual: matches } };\n };\n }\n\n /**\n * Validator that requires the control's value to be at least `min` number characters.\n *\n * `min` - number of number characters.\n *\n * ### Usage:\n *\n * ```typescript\n * const control = new FormControl('passw0rd', PasswordValidators.minNumber(2));\n * console.log(control.errors); // {minNumber: {min: 2, actual: 1}}\n * ```\n */\n static minNumber(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n const matches = (value.match(/[\\d]/g) || []).length;\n\n return matches >= min ? null : { minNumber: { min, actual: matches } };\n };\n }\n\n /**\n * Validator that requires the control's value to be at least `min` special characters.\n *\n * `min` - number of special characters.\n *\n * ### Special characters:\n * ```js\n * ['!','@','#','$','%','^','&','*']\n * ```\n *\n * ### Usage:\n *\n * ```typescript\n * const control = new FormControl('pa$sword', PasswordValidators.minSpecial(2));\n * console.log(control.errors); // {minSpecial: {min: 2, actual: 1}}\n * ```\n */\n static minSpecial(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n const matches = (value.match(/[!@#$%^&*]/g) || []).length;\n\n return matches >= min ? null : { minSpecial: { min, actual: matches } };\n };\n }\n}\n\n/** Provides a set of validators for file-related form controls. */\nexport class FileValidators {\n /**\n * Validator that checks if the file size is less than or equal to the provided `maxSize`.\n *\n * @param maxSize - The maximum allowed file size in bytes.\n *\n * @returns A ValidatorFn function that checks the file size.\n *\n * ## Usage:\n *\n * ```typescript\n * const control = new FormControl(null, [FileValidators.maxFileSize(1024 * 1024)]); // 1MB\n * control.setValue(FILE_LESS_OR_EQUAL_THAN_1MB);\n * console.log(control.errors); // null\n * control.setValue(FILE_MORE_THAN_1MB);\n * console.log(control.errors); // {maxFileSize: { max: 1048576, actual: FILE_MORE_THAN_1MB.size }}\n * ```\n */\n static maxFileSize(maxSize: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (!value) return null;\n\n const size = value instanceof File ? value.size : value.file.size;\n\n if (size > maxSize) {\n return { maxFileSize: { max: maxSize, actual: size } };\n }\n\n return null;\n };\n }\n\n /**\n * Validator that checks whether file's name or MIME type\n * matches one of the accepted extensions or MIME types.\n *\n * @param accept - Array of allowed file extensions or MIME types.\n * @returns ValidatorFn that returns validation error if file type is not accepted, or null otherwise.\n */\n static isCorrectExtension(accept: (`.${string}` | `${string}/${string}`)[]): ValidatorFn {\n return (control: AbstractControl<{ file: File } | null>): ValidationErrors | null => {\n if (!accept?.length || !control.value) return null;\n const { name, type } = control.value.file;\n\n const isValid = accept.some((acceptedExtensionOrMimeType) => {\n const typeAsRegExp = new RegExp(`${acceptedExtensionOrMimeType}$`);\n\n return typeAsRegExp.test(name) || typeAsRegExp.test(type);\n });\n\n return isValid ? null : { fileExtensionMismatch: { expected: accept, actual: name } };\n };\n }\n}\n\n/**\n * Type helper describing accepted file types, referring to:\n * @link https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/file#unique_file_type_specifiers\n */\nexport type KbqFileTypeSpecifier = Parameters<typeof FileValidators.isCorrectExtension>[0];\n","/** Unicode combining marks left behind by NFKD decomposition of accented characters, e.g. `é` → `e` + U+0301. */\nconst COMBINING_MARKS = /[̀-ͯ]/g;\n\n/**\n * `й`/`Й` decompose under NFKD into `и`/`И` + a combining breve, same as any other diacritic. Unlike\n * Latin diacritics, that breve marks a distinct Cyrillic letter rather than an accented variant, so it's\n * re-composed after the generic strip instead of being folded away with the rest.\n */\nconst CYRILLIC_I_BREVE = /[иИ]̆/g;\n\n/** The transformation behind {@link normalizeSearchValue}, minus the end-trimming — see {@link findSearchMatchRanges}. */\nfunction foldDiacritics(value: string): string {\n return value\n .normalize('NFKD')\n .replace(CYRILLIC_I_BREVE, (match) => (match[0] === 'И' ? 'Й' : 'й'))\n .replace(COMBINING_MARKS, '')\n .toLocaleLowerCase();\n}\n\n/**\n * Normalizes a string for case- and diacritic-insensitive search comparison: trims the ends,\n * decomposes accented characters (NFKD), strips the resulting combining marks (while preserving\n * `й`/`Й` as distinct letters), and lowercases using the current locale. Internal whitespace and\n * punctuation are left untouched.\n */\nexport function normalizeSearchValue(value: string): string {\n if (typeof value !== 'string' || !value) return '';\n\n return foldDiacritics(value.trim());\n}\n\n/**\n * Locates every case- and diacritic-insensitive match of `tokens` in `value`, returning `[start, end)`\n * ranges in `value`'s own (unfolded) coordinates — overlapping or adjacent ranges are merged. This is\n * what a highlighter needs to stay in sync with {@link createSearchPredicate}: matching a folded value\n * like `cafe` against `Café` only tells you *that* it matched, not *where* in the original string to\n * mark, since folding can change which letters look alike without changing the string's length.\n */\nexport function findSearchMatchRanges(value: string, tokens: readonly string[]): Array<[number, number]> {\n const normalizedTokens = tokens.map(normalizeSearchValue).filter((token) => token.length > 0);\n\n if (typeof value !== 'string' || !normalizedTokens.length) return [];\n\n // Folding is applied one UTF-16 code unit at a time so every character of the normalized value can be\n // traced back to the original index it came from — this is what makes mapping a match's position back\n // onto `value` possible. Surrogate pairs are folded as two independent units; neither combining-mark\n // stripping nor case-folding depends on cross-surrogate context, so this doesn't affect correctness.\n let normalizedValue = '';\n const originalIndexOf: number[] = [];\n\n for (let index = 0; index < value.length; index++) {\n const folded = foldDiacritics(value[index]);\n\n normalizedValue += folded;\n\n for (let i = 0; i < folded.length; i++) originalIndexOf.push(index);\n }\n\n const ranges: Array<[number, number]> = [];\n\n for (const token of normalizedTokens) {\n let fromIndex = 0;\n let matchIndex: number;\n\n while ((matchIndex = normalizedValue.indexOf(token, fromIndex)) !== -1) {\n ranges.push([originalIndexOf[matchIndex], originalIndexOf[matchIndex + token.length - 1] + 1]);\n fromIndex = matchIndex + token.length;\n }\n }\n\n return mergeRanges(ranges);\n}\n\nfunction mergeRanges(ranges: Array<[number, number]>): Array<[number, number]> {\n if (ranges.length < 2) return ranges;\n\n const sorted = [...ranges].sort(([aStart, aEnd], [bStart, bEnd]) => aStart - bStart || aEnd - bEnd);\n const merged: Array<[number, number]> = [sorted[0]];\n\n for (const [start, end] of sorted.slice(1)) {\n const last = merged[merged.length - 1];\n\n if (start <= last[1]) {\n last[1] = Math.max(last[1], end);\n } else {\n merged.push([start, end]);\n }\n }\n\n return merged;\n}\n\nconst SEARCH_QUERY_TOKEN = /\"([^\"]*)\"|(\\S+)/g;\n\n/**\n * Splits a raw query into tokens, treating whitespace as a separator and `\"quoted phrases\"` as\n * a single token (spaces inside the quotes are preserved). A `\"` with no matching closing quote\n * stays part of its token instead of being dropped, so a half-open quote yields a token no\n * realistic haystack contains — and therefore no results — until the quote is closed.\n */\nexport function tokenizeSearchQuery(query: string): string[] {\n if (typeof query !== 'string' || !query.trim()) return [];\n\n const tokens: string[] = [];\n\n for (const match of query.matchAll(SEARCH_QUERY_TOKEN)) {\n const token = match[1] ?? match[2];\n\n if (token) tokens.push(token);\n }\n\n return tokens;\n}\n\n/**\n * Builds a case- and diacritic-insensitive substring predicate for the given query. The query is\n * tokenized (bare words + `\"quoted phrases\"`) and every token must match (AND) against at least\n * one of the supplied haystacks (OR across fields) — pass a single string for a single-field\n * search, or an array for multi-field rows. An empty/whitespace-only query matches everything.\n */\nexport function createSearchPredicate(query: string): (value: string | readonly string[]) => boolean {\n const tokens = tokenizeSearchQuery(query)\n .map(normalizeSearchValue)\n .filter((token) => token.length > 0);\n\n if (!tokens.length) return () => true;\n\n return (value: string | readonly string[]): boolean => {\n const haystacks = (Array.isArray(value) ? value : [value]).map(normalizeSearchValue);\n\n return tokens.every((token) => haystacks.some((haystack) => haystack.includes(token)));\n };\n}\n","import { findSearchMatchRanges } from '../search/search-base';\n\nconst HTML_ESCAPES = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' } as const;\nconst HTML_SPECIAL_CHARS = /[&<>\"']/;\nconst HTML_SPECIAL_CHARS_GLOBAL = new RegExp(HTML_SPECIAL_CHARS.source, 'g');\n\n/** Escapes characters in the specified string that have special meaning in a regular expression. */\nexport function escapeRegExp(value: string): string {\n if (value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n return value;\n}\n\nfunction escapeHtml(value: string): string {\n if (!HTML_SPECIAL_CHARS.test(value)) return value;\n\n return value.replace(HTML_SPECIAL_CHARS_GLOBAL, (chr) => HTML_ESCAPES[chr] ?? chr);\n}\n\nfunction normalizeKeywords(keyword: unknown): string[] {\n const list = Array.isArray(keyword) ? keyword : [keyword];\n\n // Longest first, so a shorter keyword (e.g. \"a\") can't shadow a longer one that starts\n // with it (e.g. \"all\") within the same regex alternation.\n return list\n .filter((item): item is string => typeof item === 'string' && item.length > 0)\n .sort((a, b) => b.length - a.length);\n}\n\nfunction findLiteralMatchRanges(value: string, keywords: string[]): Array<[number, number]> {\n const pattern = new RegExp(keywords.map(escapeRegExp).join('|'), 'gi');\n const ranges: Array<[number, number]> = [];\n let match: RegExpExecArray | null = pattern.exec(value);\n\n while (match !== null) {\n ranges.push([match.index, match.index + match[0].length]);\n match = pattern.exec(value);\n }\n\n return ranges;\n}\n\n/**\n * @docs-private\n * `keyword` accepts either a single string or an array of strings — every keyword is\n * highlighted independently, which is what multi-token search queries need.\n *\n * By default, matching is literal (case-insensitive substring), same as a plain `.includes`. Pass\n * `foldDiacritics: true` when the keywords were matched with diacritic folding (e.g. via\n * {@link createSearchPredicate} from `@koobiq/components/core`) — otherwise a folded match like\n * `cafe` finding `Café` has nothing in the value for a literal highlighter to mark.\n */\nexport function highlight(\n value: unknown,\n keyword: unknown,\n mark: (text: string) => string,\n foldDiacritics = false\n): string {\n if (typeof value !== 'string') return '';\n\n const keywords = normalizeKeywords(keyword);\n\n if (!keywords.length) return escapeHtml(value);\n\n const ranges = foldDiacritics ? findSearchMatchRanges(value, keywords) : findLiteralMatchRanges(value, keywords);\n\n if (!ranges.length) return escapeHtml(value);\n\n let result = '';\n let cursor = 0;\n\n for (const [start, end] of ranges) {\n result += escapeHtml(value.slice(cursor, start));\n result += mark(escapeHtml(value.slice(start, end)));\n cursor = end;\n }\n\n return result + escapeHtml(value.slice(cursor));\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { highlight } from './highlight-base';\n\n/** @docs-private */\nexport const kbqHighlightBackgroundMark = (text: string): string =>\n `<mark class=\"kbq-highlight-background\">${text}</mark>`;\n\n@Pipe({ name: 'kbqHighlightBackground' })\nexport class KbqHighlightBackgroundPipe implements PipeTransform {\n transform(value: unknown, keyword: unknown, foldDiacritics = false): string {\n return highlight(value, keyword, kbqHighlightBackgroundMark, foldDiacritics);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { highlight } from './highlight-base';\n\n/** @docs-private */\nexport const kbqHighlightMark = (text: string): string => `<mark class=\"kbq-highlight\">${text}</mark>`;\n\n@Pipe({ name: 'mcHighlight' })\nexport class KbqHighlightPipe implements PipeTransform {\n transform(value: unknown, keyword: unknown, foldDiacritics = false): string {\n return highlight(value, keyword, kbqHighlightMark, foldDiacritics);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqHighlightBackgroundPipe } from './highlight-background.pipe';\nimport { KbqHighlightPipe } from './highlight.pipe';\n\n@NgModule({\n imports: [KbqHighlightPipe, KbqHighlightBackgroundPipe],\n exports: [KbqHighlightPipe, KbqHighlightBackgroundPipe]\n})\nexport class KbqHighlightModule {}\n\nexport * from './highlight-background.pipe';\nexport { escapeRegExp } from './highlight-base';\nexport * from './highlight.pipe';\n","import { Directive, ElementRef, QueryList } from '@angular/core';\n\n/**\n * Shared directive to count lines inside a text area, such as a list item.\n * Line elements can be extracted with a @ContentChildren(KbqLine) query, then\n * counted by checking the query list's length.\n */\n@Directive({\n selector: '[kbq-line], [mcLine]',\n host: { class: 'kbq-line' }\n})\nexport class KbqLine {}\n\n/**\n * Helper that takes a query list of lines and sets the correct class on the host.\n * @docs-private\n */\nexport class KbqLineSetter {\n constructor(\n private _lines: QueryList<KbqLine>,\n private _element: ElementRef\n ) {\n this.setLineClass(this._lines.length);\n\n this._lines.changes.subscribe(() => {\n this.setLineClass(this._lines.length);\n });\n }\n\n private setLineClass(count: number): void {\n const minLineClassNumber = 2;\n const maxLineClassNumber = 3;\n\n this.resetClasses();\n\n if (count === minLineClassNumber || count === maxLineClassNumber) {\n this.setClass(`kbq-${count}-line`, true);\n } else if (count > maxLineClassNumber) {\n this.setClass(`kbq-multi-line`, true);\n }\n }\n\n private resetClasses(): void {\n this.setClass('kbq-2-line', false);\n this.setClass('kbq-3-line', false);\n this.setClass('kbq-multi-line', false);\n }\n\n private setClass(className: string, isAdd: boolean): void {\n if (isAdd) {\n this._element.nativeElement.classList.add(className);\n } else {\n this._element.nativeElement.classList.remove(className);\n }\n }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport { Directive, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { KBQ_WINDOW } from '../tokens';\nimport { kbqInjectNativeElement } from '../utils';\n\n@Directive({\n host: {\n '[class.kbq-expanded]': '!collapsed',\n '[class.kbq-collapsed]': 'collapsed'\n }\n})\nexport class KbqRectangleItem {\n protected readonly isBrowser = inject(Platform).isBrowser;\n protected readonly nativeElement = kbqInjectNativeElement();\n private readonly window = inject(KBQ_WINDOW);\n\n readonly state = new Subject<void>();\n\n get collapsed(): boolean {\n return this._collapsed;\n }\n\n set collapsed(value: boolean) {\n this._collapsed = value;\n\n this.state.next();\n }\n\n private _collapsed: boolean;\n\n /**\n * Outer width of the item: its border box plus horizontal margins.\n *\n * `getComputedStyle().width` resolves to the used content-box width whatever `box-sizing` says,\n * so it silently drops padding and borders on the `border-box` elements this measures, and the\n * result would change again under a consuming application's global reset.\n * `getBoundingClientRect()` is always the border box, which makes it host-independent.\n */\n getOuterElementWidth(): number {\n if (!this.isBrowser) return 0;\n\n const { marginLeft, marginRight } = this.window.getComputedStyle(this.nativeElement);\n\n return [marginLeft, marginRight].reduce(\n (acc, item) => acc + (parseFloat(item) || 0),\n this.nativeElement.getBoundingClientRect().width\n );\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n OnDestroy,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ENTER, SPACE, TAB } from '../keycodes';\nimport { kbqInjectNativeElement } from '../utils';\n\nexport interface KbqOptionActionParent {\n dropdownTrigger: {\n opened: boolean;\n restoreFocus: boolean;\n dropdownClosed: EventEmitter<void>;\n lastDestroyReason: void | 'click' | 'keydown' | 'tab';\n openedBy: Exclude<FocusOrigin, 'program' | null> | undefined;\n toggle(): void;\n };\n tooltipTrigger: {\n disabled: boolean;\n };\n focus(): void;\n}\n\nexport const KBQ_OPTION_ACTION_PARENT = new InjectionToken<KbqOptionActionParent>('KBQ_OPTION_ACTION_PARENT');\n\n@Component({\n selector: 'kbq-option-action',\n template: `\n <ng-content select=\"[kbq-icon]\">\n <i class=\"kbq kbq-icon kbq-contrast-fade kbq-ellipsis-vertical_16\"></i>\n </ng-content>\n `,\n styleUrls: ['./action.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-option-action',\n '[class.kbq-expanded]': 'false',\n '[class.kbq-disabled]': 'disabled',\n '[attr.disabled]': 'disabled || null',\n '[attr.tabIndex]': '-1',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeyDown($event)'\n },\n exportAs: 'kbqOptionAction'\n})\nexport class KbqOptionActionComponent implements AfterViewInit, OnDestroy {\n private readonly nativeElement = kbqInjectNativeElement();\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly option = inject(KBQ_OPTION_ACTION_PARENT);\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n if (value !== this.disabled) {\n this._disabled = value;\n }\n }\n\n private _disabled: boolean = false;\n\n hasFocus: boolean = false;\n\n get active(): boolean {\n return this.hasFocus || !!this.option.dropdownTrigger?.opened;\n }\n\n private readonly destroyRef = inject(DestroyRef);\n\n ngAfterViewInit(): void {\n this.focusMonitor\n .monitor(this.nativeElement, true)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((result) => (this.hasFocus = !!result));\n\n if (!this.option.dropdownTrigger) return;\n\n this.option.dropdownTrigger.restoreFocus = false;\n\n this.option.dropdownTrigger.dropdownClosed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n const lastDestroyReason = this.option.dropdownTrigger.lastDestroyReason;\n\n if (lastDestroyReason) {\n this.focus(lastDestroyReason === 'keydown' ? 'keyboard' : 'program');\n }\n });\n }\n\n ngOnDestroy(): void {\n this.focusMonitor.stopMonitoring(this.nativeElement);\n }\n\n focus(origin?: FocusOrigin, options?: FocusOptions) {\n if (this.focusMonitor && origin) {\n this.focusMonitor.focusVia(this.nativeElement, origin, options);\n } else {\n this.nativeElement.focus();\n }\n\n // The action lives inside `.kbq-action-container`, which is `display: none` until the option\n // is hovered or keyboard-focused. Focusing a hidden element is a no-op, so `hasFocus` has to\n // reflect what actually happened: assuming success would latch `kbq-action-button-focused`\n // on the option forever, since `FocusMonitor` never emits for an element that never got focus.\n this.hasFocus = this.nativeElement.ownerDocument.activeElement === this.nativeElement;\n }\n\n onClick($event) {\n $event.stopPropagation();\n }\n\n onKeyDown($event) {\n if ([SPACE, ENTER].includes($event.keyCode) && this.option.dropdownTrigger) {\n this.option.dropdownTrigger.openedBy = 'keyboard';\n } else if ($event.shiftKey && $event.keyCode === TAB) {\n this.hasFocus = false;\n\n this.option.focus();\n } else if ($event.keyCode === TAB) {\n return;\n }\n\n $event.preventDefault();\n $event.stopPropagation();\n }\n}\n\n/**\n * Moves focus from an option to its trailing action button on Tab.\n *\n * Shared by `KbqListOption` and `KbqTreeOption` so the two cannot drift apart. Tab is swallowed only\n * when focus actually landed: the action lives in a `display: none` container until the option is\n * hovered or keyboard-focused, and focusing a hidden element is a no-op, so suppressing Tab there\n * would trap focus on the option.\n */\nexport function kbqFocusOptionActionOnTab(\n $event: KeyboardEvent,\n actionButton: KbqOptionActionComponent | undefined\n): void {\n if (!actionButton || $event.keyCode !== TAB || $event.shiftKey || actionButton.hasFocus) {\n return;\n }\n\n actionButton.focus();\n\n if (actionButton.hasFocus) {\n $event.preventDefault();\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'kbq-action-container',\n template: `\n <div class=\"kbq-action-container__gradient\"></div>\n <div class=\"kbq-action-container__box\">\n <ng-content />\n </div>\n `,\n styleUrls: ['./action-container.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-action-container'\n },\n exportAs: 'kbqActionContainer'\n})\nexport class KbqActionContainer {}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, Input, input, ViewEncapsulation } from '@angular/core';\n\nlet uniqueOptgroupIdCounter = 0;\n\n/**\n * Component that is used to group instances of `kbq-option`.\n * When options aren't provided as `ng-content`, used as a Group Header with styling.\n */\n@Component({\n selector: 'kbq-optgroup',\n templateUrl: 'optgroup.html',\n styleUrls: ['./optgroup.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-optgroup',\n role: 'group',\n '[attr.aria-labelledby]': 'labelId',\n '[class.kbq-disabled]': 'disabled'\n },\n exportAs: 'kbqOptgroup'\n})\nexport class KbqOptgroup {\n readonly label = input<string>(undefined!);\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n if (value !== this.disabled) {\n this._disabled = value;\n }\n }\n\n private _disabled: boolean = false;\n\n /** Unique id for the underlying label. */\n labelId: string = `kbq-optgroup-label-${uniqueOptgroupIdCounter++}`;\n}\n","<label class=\"kbq-optgroup-label\" [id]=\"labelId\">\n {{ label() }}\n</label>\n<ng-content select=\"kbq-option, kbq-list-option, kbq-timezone-option, ng-container\" />\n","export enum MultipleMode {\n CHECKBOX = 'checkbox',\n KEYBOARD = 'keyboard'\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { KbqColorDirective } from '../../common-behaviors';\n\nexport type KbqPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate' | boolean;\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n * Note that theming is meant to be handled by the parent element, e.g.\n * `kbq-primary .kbq-pseudo-checkbox`.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<kbq-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n * @docs-private\n */\n@Component({\n selector: 'kbq-pseudo-checkbox',\n templateUrl: 'pseudo-checkbox.partial.html',\n styleUrls: ['pseudo-checkbox.scss', 'pseudo-checkbox-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-pseudo-checkbox',\n '[class.kbq-checkbox_big]': 'big()',\n '[class.kbq-indeterminate]': 'state() === \"indeterminate\"',\n '[class.kbq-checked]': 'state() === true || state() === \"checked\"',\n '[class.kbq-disabled]': 'disabled()'\n },\n preserveWhitespaces: false\n})\nexport class KbqPseudoCheckbox extends KbqColorDirective {\n readonly big = input<boolean>(false);\n\n readonly state = input<KbqPseudoCheckboxState>('unchecked');\n\n readonly disabled = input<boolean>(false);\n}\n","<i class=\"kbq-checkbox-checkmark kbq kbq-check-s_16\"></i>\n<i class=\"kbq-checkbox-mixedmark kbq kbq-minus-s_16\"></i>\n","import { NgModule } from '@angular/core';\nimport { KbqPseudoCheckbox } from './pseudo-checkbox';\n\n@NgModule({\n imports: [KbqPseudoCheckbox],\n exports: [KbqPseudoCheckbox]\n})\nexport class KbqPseudoCheckboxModule {}\n","import { KbqPseudoCheckboxState } from './pseudo-checkbox/pseudo-checkbox';\n\n/**\n * Adapter describing how a component reads and writes selection state for a set of items,\n * so the shared select-all logic can operate regardless of how selection is stored\n * (per-option setter, `SelectionModel` on data nodes, etc.).\n */\nexport interface KbqSelectAllAdapter<T> {\n /** All candidate items, in render/model order. */\n items: readonly T[];\n /** Whether the item may participate (e.g. not disabled, and — for tree — `selectable()`). */\n isSelectable: (item: T) => boolean;\n /** Current selected state of the item. */\n isSelected: (item: T) => boolean;\n /**\n * Applies the new selected state to the item. Must be idempotent — a no-op, with no further side\n * effects (no emitted events, no notifications) — when `selected` already matches the item's current\n * state: {@link toggleSelectAll} calls this for every selectable item, not just the ones whose state\n * actually changes, and relies on implementations to absorb the redundant calls silently.\n */\n setSelected: (item: T, selected: boolean) => void;\n}\n\n/** Options for {@link toggleSelectAll}. */\nexport interface KbqToggleSelectAllOptions {\n /**\n * When `true`, a repeated toggle deselects everything once all selectable items are already\n * selected. When `false` (default), the toggle only ever selects.\n */\n allowDeselect?: boolean;\n}\n\n/**\n * Canonical \"select all / deselect all\" toggle shared by the multi-select components (`Ctrl`/`Cmd` + `A`).\n *\n * Considers only selectable items and selects them all. When `allowDeselect` is `true` and every selectable\n * item is already selected, deselects them all instead; otherwise a repeated call is a no-op. No-op when\n * there are no selectable items.\n *\n * @returns the items whose selected state actually flipped, in input order.\n */\nexport function toggleSelectAll<T>(adapter: KbqSelectAllAdapter<T>, options?: KbqToggleSelectAllOptions): T[] {\n const selectable = adapter.items.filter((item) => adapter.isSelectable(item));\n\n if (selectable.length === 0) {\n return [];\n }\n\n const shouldSelect = !options?.allowDeselect || selectable.some((item) => !adapter.isSelected(item));\n const changed = selectable.filter((item) => adapter.isSelected(item) !== shouldSelect);\n\n selectable.forEach((item) => adapter.setSelected(item, shouldSelect));\n\n return changed;\n}\n\n/**\n * State of a \"select all\" master checkbox over the same items {@link toggleSelectAll} would act on.\n *\n * Considers only selectable items, so items the toggle cannot reach (disabled, non-selectable) never\n * pin the checkbox to `indeterminate`. An empty selectable set reads as `unchecked`: there is nothing\n * to select, and `[].every()` being `true` would otherwise report a full selection.\n */\nexport function getSelectAllState<T>(adapter: KbqSelectAllAdapter<T>): KbqPseudoCheckboxState {\n const selectable = adapter.items.filter((item) => adapter.isSelectable(item));\n\n if (selectable.length === 0) {\n return 'unchecked';\n }\n\n const selected = selectable.filter((item) => adapter.isSelected(item)).length;\n\n if (selected === 0) {\n return 'unchecked';\n }\n\n return selected === selectable.length ? 'checked' : 'indeterminate';\n}\n\n/** Event emitted by the `onSelectAll` outputs when the select-all toggle runs. */\nexport class KbqSelectAllEvent<T, S = unknown> {\n constructor(\n /** Component that emitted the event. */\n public readonly source: S,\n /** The selectable options affected by the toggle. */\n public readonly options: T[],\n /** `true` when all options were selected, `false` when all were deselected. */\n public readonly selected: boolean\n ) {}\n}\n\n/**\n * Whether `Ctrl`/`Cmd` + `A` should select the text of a search `<input>` rather than toggle options.\n *\n * Returns `true` only when the input has text that is not already fully selected (nothing selected,\n * a partial selection, or just a caret). Returns `false` for an empty input (so select-all falls\n * straight through to the options) and when the whole value is already selected (a second press\n * then acts on the options).\n */\nexport function shouldSelectSearchText(input: HTMLInputElement | null | undefined): boolean {\n if (!input) {\n return false;\n }\n\n const length = input.value.length;\n\n if (length === 0) {\n return false;\n }\n\n return !(input.selectionStart === 0 && input.selectionEnd === length);\n}\n","import { ElementRef, InjectionToken } from '@angular/core';\n\nexport interface KbqTitleTextRef {\n textElement?: ElementRef;\n parentTextElement?: ElementRef;\n}\n\nexport const KBQ_TITLE_TEXT_REF = new InjectionToken<KbqTitleTextRef>('KbqTitleTextRef');\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n AfterViewChecked,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ActiveDescendantKeyManager } from '../a11y';\nimport { ENTER, hasModifierKey, SPACE } from '../keycodes';\nimport { KbqPseudoCheckboxModule } from '../selection';\nimport { KBQ_TITLE_TEXT_REF, KbqTitleTextRef } from '../title';\nimport { kbqFocusAndReveal, kbqGetElementHeight } from '../utils';\nimport { KbqOptgroup } from './optgroup';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet uniqueIdCounter = 0;\n\n/** Event object emitted by KbqOption when selected or deselected. */\nexport class KbqOptionSelectionChange<T = KbqOption> {\n constructor(\n public source: T,\n public isUserInput = false\n ) {}\n}\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n * @docs-private\n */\nexport interface KbqOptionParentComponent {\n multiple?: boolean;\n multiSelection?: boolean;\n withVirtualScroll?: boolean;\n keyManager?: ActiveDescendantKeyManager<KbqOption>;\n setSelectedOptionsByClick: (option: KbqOption) => void;\n}\n\n/**\n * Handler that will update scroll position of elements inside overlay\n */\nexport interface KeyboardNavigationHandler {\n /** Scrolls the active option into view. */\n scrollActiveOptionIntoView(): void;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const KBQ_OPTION_PARENT_COMPONENT = new InjectionToken<KbqOptionParentComponent>('KBQ_OPTION_PARENT_COMPONENT');\n\nexport abstract class KbqOptionBase {\n value: any;\n abstract get viewValue(): string;\n abstract get disabled(): boolean;\n abstract set disabled(value: any);\n\n abstract readonly onSelectionChange: EventEmitter<KbqOptionSelectionChange<any>>;\n\n abstract select(): void;\n\n abstract deselect(): void;\n\n /** Emits the selection change event. */\n protected emitSelectionChangeEvent(isUserInput = false): void {\n this.onSelectionChange.emit(new KbqOptionSelectionChange(this, isUserInput));\n }\n}\n\nexport class KbqVirtualOption extends KbqOptionBase {\n get disabled() {\n return this._disabled;\n }\n set disabled(value: any) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n get selected(): boolean {\n return this._selected;\n }\n\n private _selected = false;\n\n get viewValue(): string {\n return this._viewValue ?? this.value;\n }\n\n readonly onSelectionChange = new EventEmitter<KbqOptionSelectionChange<KbqVirtualOption>>();\n\n constructor(\n public value: any,\n private _disabled: boolean = false,\n private readonly _viewValue?: string\n ) {\n super();\n }\n\n select(): void {\n if (!this._selected) {\n this._selected = true;\n\n this.emitSelectionChangeEvent();\n }\n }\n\n deselect(): void {\n if (this._selected) {\n this._selected = false;\n\n this.emitSelectionChangeEvent();\n }\n }\n}\n\n/**\n * Single option inside of a `<kbq-select>` element.\n */\n@Component({\n selector: 'kbq-option',\n imports: [\n KbqPseudoCheckboxModule\n ],\n templateUrl: 'option.html',\n /* Component inherits styles from `list`, so `list` variables are imported as the single source of truth. */\n styleUrls: ['option.scss', 'option-tokens.scss'],\n providers: [\n {\n provide: KBQ_TITLE_TEXT_REF,\n useExisting: KbqOption\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.tabindex]': 'getTabIndex()',\n class: 'kbq-option',\n '[class.kbq-selected]': 'selected',\n '[class.kbq-option-multiple]': 'multiple',\n '[class.kbq-active]': 'active',\n '[class.kbq-disabled]': 'disabled',\n '[id]': 'id',\n\n '(click)': 'handleClick($event)',\n '(mouseenter)': 'onMouseenter()',\n '(mouseleave)': 'onMouseleave()',\n '(keydown)': 'handleKeydown($event)'\n },\n exportAs: 'kbqOption'\n})\nexport class KbqOption extends KbqOptionBase implements AfterViewChecked, OnDestroy, KbqTitleTextRef {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n protected readonly parent = inject<KbqOptionParentComponent>(KBQ_OPTION_PARENT_COMPONENT, { optional: true })!;\n readonly group = inject(KbqOptgroup, { optional: true });\n @ViewChild('kbqTitleText', { static: false }) textElement: ElementRef;\n\n /** The form value of the option. */\n // TODO: Skipped for migration because:\n // Your application code writes to the input. This prevents migration.\n @Input() value: any;\n\n readonly selectable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n // todo this flag will need to be rethought in the future (added for filter panel)\n readonly userSelect = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get showCheckbox() {\n return this._showCheckbox === undefined ? this.multiple : this._showCheckbox;\n }\n\n set showCheckbox(value) {\n this._showCheckbox = coerceBooleanProperty(value);\n }\n\n private _showCheckbox: boolean;\n\n /** Event emitted when the option is selected or deselected. */\n @Output() readonly onSelectionChange = new EventEmitter<KbqOptionSelectionChange>();\n\n /** Emits when the state of the option changes and any parents have to be notified. */\n readonly stateChanges = new Subject<void>();\n\n /**\n * The displayed value of the option. It is necessary to show the selected option in the\n * select's trigger.\n */\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get viewValue(): string {\n return this._viewValue || (this.getHostElement().textContent || '').trim();\n }\n\n set viewValue(value: string) {\n this._viewValue = value;\n }\n\n private _viewValue: string;\n\n /** Whether the wrapping component is in multiple selection mode. */\n get multiple(): boolean {\n return !!this.parent?.multiSelection;\n }\n\n get id(): string {\n return this._id;\n }\n\n private _id = `kbq-option-${uniqueIdCounter++}`;\n\n get selected(): boolean {\n return this._selected;\n }\n\n private _selected = false;\n\n // TODO: Skipped for migration because:\n // Accessor inputs cannot be migrated as they are too complex.\n @Input()\n get disabled() {\n return (this.group && this.group.disabled) || this._disabled;\n }\n\n set disabled(value: any) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _disabled = false;\n\n /**\n * Whether or not the option is currently active and ready to be selected.\n * An active option displays styles as if it is focused, but the\n * focus is actually retained somewhere else. This comes in handy\n * for components like autocomplete where focus must remain on the input.\n */\n get active(): boolean {\n return this._active;\n }\n\n private _active = false;\n\n private mostRecentViewValue = '';\n\n /**\n * Whether the pointer is currently over this option. Cleared on `mouseleave` rather than when the\n * option is focused: hovering the option that is already active does not move the key manager's\n * index, so no focus follows and a flag cleared only there would stay armed indefinitely.\n */\n private hoveredByPointer = false;\n ngAfterViewChecked() {\n // Since parent components could be using the option's label to display the selected values\n // (e.g. `kbq-select`) and they don't have a way of knowing if the option's label has changed\n // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n // relatively cheap, however we still limit them only to selected options in order to avoid\n // hitting the DOM too often.\n if (this._selected) {\n const viewValue = this.viewValue;\n\n if (viewValue !== this.mostRecentViewValue) {\n this.mostRecentViewValue = viewValue;\n this.stateChanges.next();\n }\n }\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n }\n\n /** @docs-private */\n getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n select(emitEvent: boolean = true): void {\n if (!this._selected) {\n this._selected = true;\n\n this.changeDetectorRef.markForCheck();\n if (emitEvent) this.emitSelectionChangeEvent();\n }\n }\n\n deselect(emitEvent: boolean = true): void {\n if (this._selected) {\n this._selected = false;\n\n this.changeDetectorRef.markForCheck();\n if (emitEvent) this.emitSelectionChangeEvent();\n }\n }\n\n /** Moves keyboard focus to this option and reveals it — see {@link kbqFocusAndReveal}. */\n focus(): void {\n kbqFocusAndReveal(this.getHostElement(), this.hoveredByPointer);\n }\n\n /**\n * This method sets display styles on the option to make it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setActiveStyles(): void {\n if (!this._active) {\n this._active = true;\n this.changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * This method removes display styles on the option that made it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setInactiveStyles(): void {\n if (this._active) {\n this._active = false;\n this.changeDetectorRef.markForCheck();\n }\n }\n\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel(): string {\n return this.viewValue;\n }\n\n /** @docs-private */\n handleClick(event: MouseEvent): void {\n if (hasModifierKey(event, 'shiftKey')) {\n this.parent.setSelectedOptionsByClick(this);\n } else {\n this.selectViaInteraction();\n }\n }\n\n /** Ensures the option is selected when activated from the keyboard. */\n handleKeydown(event: KeyboardEvent): void {\n // Only claim the event when the option is actually going to react to it: a non-selectable\n // or disabled option has nothing to do with ENTER/SPACE, and swallowing the event anyway\n // would stop it from reaching an ancestor that might (e.g. a custom row built on top of a\n // non-selectable option, like a \"select all\" master checkbox).\n if ((event.keyCode === ENTER || event.keyCode === SPACE) && !this.disabled && this.selectable()) {\n this.selectViaInteraction();\n\n // Prevent the page from scrolling down and form submits.\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * `Selects the option while indicating the selection came from the user. Used to\n * determine if the select's view -> model callback should be invoked.`\n */\n selectViaInteraction(): void {\n if (this.userSelect()) return;\n\n if (!this.disabled && this.selectable()) {\n this._selected = this.multiple ? !this._selected : true;\n\n this.changeDetectorRef.markForCheck();\n this.emitSelectionChangeEvent(true);\n }\n }\n\n getTabIndex(): string {\n return this.disabled ? '-1' : '0';\n }\n\n getHostElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n /** @docs-private */\n protected onMouseenter() {\n if (this.disabled) return;\n\n this.hoveredByPointer = true;\n\n this.parent?.keyManager?.setActiveItem(this);\n }\n\n /** @docs-private */\n protected onMouseleave() {\n this.hoveredByPointer = false;\n }\n}\n\n/**\n * Counts the amount of option group labels that precede the specified option.\n * @param optionIndex Index of the option at which to start counting.\n * @param options Flat list of all of the options.\n * @param optionGroups Flat list of all of the option groups.\n * @docs-private\n */\nexport function countGroupLabelsBeforeOption(\n optionIndex: number,\n options: QueryList<KbqOption>,\n optionGroups: QueryList<KbqOptgroup>\n): number {\n if (optionGroups.length) {\n const optionsArray = options.toArray();\n const groups = optionGroups.toArray();\n\n let groupCounter = 0;\n\n for (let i = 0; i < optionIndex + 1; i++) {\n if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\n groupCounter++;\n }\n }\n\n return groupCounter;\n }\n\n return 0;\n}\n\n/**\n * Determines the position to which to scroll a panel in order for an option to be into view.\n * @param optionIndex Index of the option to be scrolled into the view.\n * @param optionHeight Height of the options.\n * @param currentScrollPosition Current scroll position of the panel.\n * @param panelHeight Height of the panel.\n * @docs-private\n * @deprecated Unused — an option reveals itself on focus through `KbqOption.focus`, which lets the\n * browser resolve the scroll container instead of computing an offset from a uniform row height. Will be\n * removed in the next major release.\n */\nexport function getOptionScrollPosition(\n optionIndex: number,\n optionHeight: number,\n currentScrollPosition: number,\n panelHeight: number\n): number {\n const optionOffset = optionIndex * optionHeight;\n\n if (optionOffset < currentScrollPosition) {\n return optionOffset;\n }\n\n if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\n return Math.max(0, optionOffset - panelHeight + optionHeight);\n }\n\n return currentScrollPosition;\n}\n","@if (showCheckbox) {\n <ng-content select=\"kbq-pseudo-checkbox\">\n <kbq-pseudo-checkbox [disabled]=\"disabled\" [state]=\"selected ? 'checked' : 'unchecked'\" />\n </ng-content>\n}\n\n<span #kbqTitleText class=\"kbq-option-text\">\n <ng-content />\n</span>\n","import { NgModule } from '@angular/core';\nimport { KbqPseudoCheckbox } from '../selection';\nimport { KbqOptionActionComponent } from './action';\nimport { KbqOptgroup } from './optgroup';\nimport { KbqOption } from './option';\n\n@NgModule({\n imports: [KbqPseudoCheckbox, KbqOption, KbqOptgroup, KbqOptionActionComponent],\n exports: [KbqOption, KbqOptgroup, KbqOptionActionComponent]\n})\nexport class KbqOptionModule {}\n","import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport {\n afterNextRender,\n DestroyRef,\n Directive,\n inject,\n InjectionToken,\n input,\n numberAttribute,\n OnInit,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, Observable } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { kbqInjectNativeElement } from '../utils';\n\n/** Shadow visibility state — which of the two shadows should be rendered. */\nexport interface KbqOverflowShadowState {\n /** Whether the top (header) shadow should be visible — content is scrolled past the top. */\n top: boolean;\n /** Whether the bottom (footer) shadow should be visible — more content remains below the fold. */\n bottom: boolean;\n}\n\n/**\n * Source of scroll events and scroll metrics. Can be provided by a component that wraps\n * the scrollable element (e.g. `KbqScrollbar`) so that `KbqOverflowShadowContainer` does\n * not have to subscribe to the native `scroll` event directly.\n */\nexport interface KbqOverflowShadowSource {\n /** Emits whenever the wrapped element scrolls. */\n readonly onScroll: Observable<unknown>;\n /** The element whose `scrollTop`/`clientHeight`/`scrollHeight` drive the shadows, or `null` if not ready yet. */\n getScrollElement(): HTMLElement | null;\n}\n\n/**\n * DI token a scrollable wrapper component can provide to expose itself as the scroll source\n * for a co-located `KbqOverflowShadowContainer` (see `KbqScrollbar`).\n */\nexport const KBQ_OVERFLOW_SHADOW_SOURCE = new InjectionToken<KbqOverflowShadowSource>('KBQ_OVERFLOW_SHADOW_SOURCE');\n\n/**\n * Container directive that sits on the scrollable element. Listens for scroll events and\n * keeps the `overflow` signal up to date, which is then read by `KbqOverflowShadowTop` and\n * `KbqOverflowShadowBottom`.\n *\n * The scroll source is auto-detected: if `KBQ_OVERFLOW_SHADOW_SOURCE` is provided in the\n * host's DI, that source is used; otherwise the native `scroll` event on the host element\n * is observed.\n *\n * In addition to scroll events, the directive observes the scroll source's box-size changes\n * via CDK's `SharedResizeObserver` — this covers layout changes that happen without a scroll\n * and alter the viewport size (modal open/close animation, window resize, reflow that resizes\n * the element). Content that only grows `scrollHeight` without changing the element's box size\n * is not detected by the resize observer; call `checkOverflow()` manually for those cases.\n */\n@Directive({\n selector: '[kbqOverflowShadowContainer]',\n exportAs: 'kbqOverflowShadowContainer'\n})\nexport class KbqOverflowShadowContainer implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly hostElement = kbqInjectNativeElement();\n private readonly externalSource = inject(KBQ_OVERFLOW_SHADOW_SOURCE, { optional: true, self: true });\n private readonly sharedResizeObserver = inject(SharedResizeObserver);\n\n /** Optional debounce for scroll events, in milliseconds. Default is 0. */\n readonly debounce = input(0, { transform: numberAttribute });\n\n /** Current shadow state. Updated on every scroll event. */\n readonly overflow = signal<KbqOverflowShadowState>({ top: false, bottom: false });\n\n constructor() {\n afterNextRender(() => {\n this.checkOverflow();\n this.observeResize();\n });\n }\n\n ngOnInit(): void {\n const source$ = this.externalSource\n ? this.externalSource.onScroll\n : fromEvent(this.hostElement, 'scroll', { passive: true });\n\n const stream$ = this.debounce() > 0 ? source$.pipe(debounceTime(this.debounce())) : source$;\n\n stream$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.checkOverflow());\n }\n\n /**\n * Force-rechecks overflow and updates the signal. Calling this manually is normally not\n * necessary — scroll events plus `SharedResizeObserver` cover the standard scenarios. Kept\n * for rare cases when external code knows about a layout change more precisely than the\n * browser observers (e.g. content that only grows `scrollHeight`).\n */\n checkOverflow(): void {\n const source = this.getScrollSource();\n\n if (!source) return;\n\n // `clientHeight` (content-box) is the visible scroll-viewport height. `Math.round` on the\n // bottom comparison absorbs sub-pixel scroll metrics (HiDPI / browser zoom) so the bottom\n // shadow reliably clears at the very bottom instead of lingering on a fractional gap.\n const { scrollTop, clientHeight, scrollHeight } = source;\n\n this.overflow.set({\n top: scrollTop > 0,\n bottom: Math.round(scrollTop + clientHeight) < scrollHeight\n });\n }\n\n private getScrollSource(): HTMLElement | null {\n return this.externalSource ? this.externalSource.getScrollElement() : this.hostElement;\n }\n\n private observeResize(): void {\n const source = this.getScrollSource();\n\n if (!source) return;\n\n this.sharedResizeObserver\n .observe(source)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.checkOverflow());\n }\n}\n\n/**\n * Marker directive for the top-shadow indicator. Linked to the container directive via a\n * template ref: `<header [kbqOverflowShadowTop]=\"containerRef\">`.\n *\n * Sets an inline `box-shadow` on the host element using the value from the `shadow` input\n * (the Koobiq token by default). Consumers can override the shadow from the outside by\n * overriding the token `--kbq-shadow-overflow-normal-bottom` (or whichever token is passed\n * via the `shadow` input) in the relevant cascade scope.\n */\n@Directive({\n selector: '[kbqOverflowShadowTop]',\n host: {\n '[style.box-shadow]': 'ref()?.overflow()?.top ? shadow() : null'\n },\n exportAs: 'kbqOverflowShadowTop'\n})\nexport class KbqOverflowShadowTop {\n /**\n * Reference to the container directive. May be `undefined` if the container has not\n * been rendered yet (e.g. the indicator lives in one @if block and the container in\n * another).\n */\n readonly ref = input<KbqOverflowShadowContainer | undefined>(undefined, { alias: 'kbqOverflowShadowTop' });\n\n /** Value of `box-shadow` when the shadow is active. Defaults to the standard Koobiq token. */\n readonly shadow = input<string>('var(--kbq-shadow-overflow-normal-bottom)');\n}\n\n/**\n * Marker directive for the bottom-shadow indicator. Linked to the container directive via a\n * template ref: `<footer [kbqOverflowShadowBottom]=\"containerRef\">`.\n *\n * Sets an inline `box-shadow` on the host element. See {@link KbqOverflowShadowTop}.\n */\n@Directive({\n selector: '[kbqOverflowShadowBottom]',\n host: {\n '[style.box-shadow]': 'ref()?.overflow()?.bottom ? shadow() : null'\n },\n exportAs: 'kbqOverflowShadowBottom'\n})\nexport class KbqOverflowShadowBottom {\n /** Reference to the container directive. See {@link KbqOverflowShadowTop.ref}. */\n readonly ref = input<KbqOverflowShadowContainer | undefined>(undefined, { alias: 'kbqOverflowShadowBottom' });\n\n /** Value of `box-shadow` when the shadow is active. Defaults to the standard Koobiq token. */\n readonly shadow = input<string>('var(--kbq-shadow-overflow-normal-top)');\n}\n","import {\n CdkScrollable,\n FlexibleConnectedPositionStrategy,\n FlexibleConnectedPositionStrategyOrigin,\n OverlayRef,\n ScrollDispatcher,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ElementRef, isDevMode, NgZone } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n/** Configuration options for `KbqAutoHideScrollStrategy`. */\nexport interface KbqAutoHideScrollStrategyConfig {\n /**\n * Element whose position is tracked against ancestor scroll container boundaries.\n * When omitted, the overlay panel is checked against the viewport instead.\n */\n originElement?: HTMLElement;\n /** Scroll event throttle in ms. Defaults to 20. */\n scrollThrottle?: number;\n}\n\n/** Lifecycle hooks for `KbqAutoHideScrollStrategy`, passed via `kbqAutoHideScrollStrategyFactory`. */\nexport interface KbqAutoHideScrollStrategyHooks {\n /** Called (inside Angular zone) when the tracked element scrolls outside its scroll container boundary. */\n onHide?: () => void;\n}\n\n/**\n * Scroll strategy that repositions the overlay on scroll and reports when the tracked element\n * moves outside its boundary:\n *\n * - With `originElement`: tracks the origin against each ancestor `CdkScrollable` container.\n * - Without `originElement`: tracks the overlay panel against the viewport.\n *\n * Two ways to react to the out-of-bounds event, usable independently or together:\n * - Subscribe to `hide` — a handle for callers that don't control how this strategy is\n * constructed (e.g. reaching into an existing component's `overlayRef.getConfig().scrollStrategy`\n * from the outside).\n * - Pass `onHide` via the factory returned by `kbqAutoHideScrollStrategyFactory` — for callers\n * that construct the strategy themselves.\n */\nexport class KbqAutoHideScrollStrategy implements ScrollStrategy {\n private readonly hideSubject = new Subject<void>();\n\n /** Emits once when the tracked element scrolls outside its boundary. */\n readonly hide: Observable<void> = this.hideSubject.asObservable();\n\n private overlayRef: OverlayRef | null = null;\n private scrollSubscription: Subscription | null = null;\n private originElement: HTMLElement | null = null;\n private ancestorScrollContainers: readonly CdkScrollable[] | null = null;\n\n constructor(\n private readonly scrollDispatcher: ScrollDispatcher,\n private readonly viewportRuler: ViewportRuler,\n private readonly ngZone: NgZone,\n private readonly config: KbqAutoHideScrollStrategyConfig = {},\n private hooks?: KbqAutoHideScrollStrategyHooks\n ) {}\n\n /** @docs-private */\n attach(overlayRef: OverlayRef): void {\n if (this.overlayRef && isDevMode()) {\n throw new Error('KbqAutoHideScrollStrategy: attach() has already been called for this instance.');\n }\n\n this.overlayRef = overlayRef;\n }\n\n /** Subscribes to scroll events and starts repositioning / out-of-bounds detection. */\n enable(): void {\n if (this.scrollSubscription) return;\n\n if (!this.overlayRef) {\n throw new Error('KbqAutoHideScrollStrategy: enable() was called before attach(). Call attach() first.');\n }\n\n const overlayRef = this.overlayRef;\n const { scrollThrottle = 20 } = this.config;\n\n this.originElement = this.config.originElement ?? this.resolveOriginElement(overlayRef);\n this.ancestorScrollContainers = this.originElement\n ? this.scrollDispatcher.getAncestorScrollContainers(this.originElement)\n : null;\n\n this.scrollSubscription = this.scrollDispatcher\n .scrolled(scrollThrottle)\n .pipe(\n filter(\n (scrollable) =>\n !scrollable || !overlayRef.overlayElement.contains(scrollable.getElementRef().nativeElement)\n )\n )\n .subscribe(() => {\n const isOutside = this.originElement\n ? this.isOriginOutsideAncestors(this.originElement)\n : this.isOverlayOutsideViewport(overlayRef);\n\n if (isOutside) {\n this.disable();\n this.ngZone.run(() => {\n this.hideSubject.next();\n this.hooks?.onHide?.();\n });\n\n return;\n }\n\n overlayRef.updatePosition();\n });\n }\n\n /** Unsubscribes from scroll events. */\n disable(): void {\n this.scrollSubscription?.unsubscribe();\n this.scrollSubscription = null;\n }\n\n /** Disables the strategy and completes `hide`. */\n detach(): void {\n this.disable();\n this.hideSubject.complete();\n this.hooks = undefined;\n this.overlayRef = null;\n this.originElement = null;\n this.ancestorScrollContainers = null;\n }\n\n private resolveOriginElement(overlayRef: OverlayRef): HTMLElement | null {\n const positionStrategy = overlayRef.getConfig().positionStrategy;\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n return this.coerceOriginElement(positionStrategy._origin);\n }\n\n return null;\n }\n\n private isOriginOutsideAncestors(originElement: HTMLElement): boolean {\n const originRect = originElement.getBoundingClientRect();\n\n return (this.ancestorScrollContainers ?? []).some((scrollable) =>\n this.isOutsideBounds(originRect, scrollable.getElementRef().nativeElement.getBoundingClientRect())\n );\n }\n\n private isOverlayOutsideViewport(overlayRef: OverlayRef): boolean {\n const overlayRect = overlayRef.overlayElement.getBoundingClientRect();\n const { width, height } = this.viewportRuler.getViewportSize();\n\n return this.isOutsideBounds(overlayRect, { top: 0, left: 0, bottom: height, right: width } as DOMRect);\n }\n\n private isOutsideBounds(\n rect: DOMRect,\n containerRect: DOMRect | Pick<DOMRect, 'top' | 'bottom' | 'left' | 'right'>\n ): boolean {\n return (\n rect.bottom < containerRect.top ||\n rect.top > containerRect.bottom ||\n rect.right < containerRect.left ||\n rect.left > containerRect.right\n );\n }\n\n private coerceOriginElement(raw?: FlexibleConnectedPositionStrategyOrigin): HTMLElement | null {\n if (raw instanceof HTMLElement) {\n return raw;\n } else if (raw instanceof ElementRef && raw.nativeElement instanceof HTMLElement) {\n return raw.nativeElement;\n }\n\n return null;\n }\n}\n\n/**\n * Factory function for `KbqAutoHideScrollStrategy`. Use it directly as a `useFactory` value\n * when providing a component-level scroll strategy token (e.g. `KBQ_POPOVER_SCROLL_STRATEGY`).\n *\n * The returned function accepts an optional `hooks` object (see `KbqAutoHideScrollStrategyHooks`)\n * and an optional `config` (see `KbqAutoHideScrollStrategyConfig`).\n *\n * @example\n * ```ts\n * const createScrollStrategy = kbqAutoHideScrollStrategyFactory(scrollDispatcher, viewportRuler, ngZone);\n * const strategy = createScrollStrategy({ onHide: () => this.hide() }, { originElement });\n * ```\n */\nexport function kbqAutoHideScrollStrategyFactory(\n scrollDispatcher: ScrollDispatcher,\n viewportRuler: ViewportRuler,\n ngZone: NgZone\n): (hooks?: KbqAutoHideScrollStrategyHooks, config?: KbqAutoHideScrollStrategyConfig) => KbqAutoHideScrollStrategy {\n return (hooks?, config?) =>\n new KbqAutoHideScrollStrategy(scrollDispatcher, viewportRuler, ngZone, config ?? {}, hooks);\n}\n","import { ConnectionPositionPair, Overlay, ScrollStrategy } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\nexport const POSITION_MAP: { [key: string]: ConnectionPositionPair } = {\n top: {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom'\n },\n topCenter: {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom'\n },\n topLeft: {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n },\n topRight: {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n },\n right: {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center'\n },\n rightTop: {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top'\n },\n rightBottom: {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom'\n },\n bottom: {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top'\n },\n bottomCenter: {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top'\n },\n bottomLeft: {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n bottomRight: {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n },\n left: {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center'\n },\n leftTop: {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top'\n },\n leftBottom: {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom'\n }\n};\n\nexport const EXTENDED_OVERLAY_POSITIONS = objectValues([\n POSITION_MAP.top,\n POSITION_MAP.topLeft,\n POSITION_MAP.topRight,\n POSITION_MAP.right,\n POSITION_MAP.rightTop,\n POSITION_MAP.rightBottom,\n POSITION_MAP.bottom,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.bottomRight,\n POSITION_MAP.left,\n POSITION_MAP.leftTop,\n POSITION_MAP.leftBottom\n]);\n\nexport const TOP_POSITION_PRIORITY = objectValues([\n POSITION_MAP.top,\n POSITION_MAP.bottom,\n POSITION_MAP.right,\n POSITION_MAP.rightBottom,\n POSITION_MAP.leftBottom,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.bottomRight\n]);\n\nexport const BOTTOM_POSITION_PRIORITY = objectValues([\n POSITION_MAP.bottom,\n POSITION_MAP.top,\n POSITION_MAP.topLeft,\n POSITION_MAP.topRight,\n POSITION_MAP.rightBottom,\n POSITION_MAP.leftBottom\n]);\n\nexport const RIGHT_POSITION_PRIORITY = objectValues([\n POSITION_MAP.right,\n POSITION_MAP.left,\n POSITION_MAP.leftTop,\n POSITION_MAP.leftBottom,\n POSITION_MAP.top,\n POSITION_MAP.bottom\n]);\n\nexport const LEFT_POSITION_PRIORITY = objectValues([\n POSITION_MAP.left,\n POSITION_MAP.right,\n POSITION_MAP.rightTop,\n POSITION_MAP.rightBottom,\n POSITION_MAP.top,\n POSITION_MAP.bottom\n]);\n\nexport const RIGHT_TOP_POSITION_PRIORITY = objectValues([\n POSITION_MAP.rightTop,\n POSITION_MAP.leftTop,\n POSITION_MAP.left,\n POSITION_MAP.leftBottom,\n POSITION_MAP.topLeft,\n POSITION_MAP.bottomLeft\n]);\n\nexport const RIGHT_BOTTOM_POSITION_PRIORITY = objectValues([\n POSITION_MAP.rightBottom,\n POSITION_MAP.leftBottom,\n POSITION_MAP.left,\n POSITION_MAP.leftTop,\n POSITION_MAP.topLeft,\n POSITION_MAP.bottomLeft\n]);\n\nexport const LEFT_TOP_POSITION_PRIORITY = objectValues([\n POSITION_MAP.leftTop,\n POSITION_MAP.rightTop,\n POSITION_MAP.right,\n POSITION_MAP.rightBottom,\n POSITION_MAP.topRight,\n POSITION_MAP.bottomRight\n]);\n\nexport const LEFT_BOTTOM_POSITION_PRIORITY = objectValues([\n POSITION_MAP.leftBottom,\n POSITION_MAP.rightBottom,\n POSITION_MAP.right,\n POSITION_MAP.rightTop,\n POSITION_MAP.topRight,\n POSITION_MAP.bottomRight\n]);\n\nexport const TOP_LEFT_POSITION_PRIORITY = objectValues([\n POSITION_MAP.topLeft,\n POSITION_MAP.topRight,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.bottom,\n POSITION_MAP.bottomRight,\n POSITION_MAP.leftBottom,\n POSITION_MAP.rightBottom\n]);\n\nexport const TOP_RIGHT_POSITION_PRIORITY = objectValues([\n POSITION_MAP.topRight,\n POSITION_MAP.topLeft,\n POSITION_MAP.bottomRight,\n POSITION_MAP.bottom,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.leftBottom,\n POSITION_MAP.rightBottom\n]);\n\nexport const BOTTOM_RIGHT_POSITION_PRIORITY = objectValues([\n POSITION_MAP.bottomRight,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.topRight,\n POSITION_MAP.top,\n POSITION_MAP.topLeft,\n POSITION_MAP.leftTop,\n POSITION_MAP.rightTop\n]);\n\nexport const BOTTOM_LEFT_POSITION_PRIORITY = objectValues([\n POSITION_MAP.bottomLeft,\n POSITION_MAP.bottomRight,\n POSITION_MAP.topLeft,\n POSITION_MAP.top,\n POSITION_MAP.topRight,\n POSITION_MAP.rightTop,\n POSITION_MAP.leftTop\n]);\n\nexport const POSITION_PRIORITY_STRATEGY = {\n top: TOP_POSITION_PRIORITY,\n topLeft: TOP_LEFT_POSITION_PRIORITY,\n topRight: TOP_RIGHT_POSITION_PRIORITY,\n bottom: BOTTOM_POSITION_PRIORITY,\n bottomLeft: BOTTOM_LEFT_POSITION_PRIORITY,\n bottomRight: BOTTOM_RIGHT_POSITION_PRIORITY,\n left: LEFT_POSITION_PRIORITY,\n leftTop: LEFT_TOP_POSITION_PRIORITY,\n leftBottom: LEFT_BOTTOM_POSITION_PRIORITY,\n right: RIGHT_POSITION_PRIORITY,\n rightTop: RIGHT_TOP_POSITION_PRIORITY,\n rightBottom: RIGHT_BOTTOM_POSITION_PRIORITY\n};\n\nexport const POSITION_TO_CSS_MAP: { [key: string]: string } = {\n top: 'top',\n topLeft: 'top-left',\n topRight: 'top-right',\n right: 'right',\n rightTop: 'right-top',\n rightBottom: 'right-bottom',\n left: 'left',\n leftTop: 'left-top',\n leftBottom: 'left-bottom',\n bottom: 'bottom',\n bottomLeft: 'bottom-left',\n bottomRight: 'bottom-right'\n};\n\nexport const KBQ_CUSTOM_SCROLL_STRATEGY_PROVIDER = <T>(\n token: InjectionToken<T>,\n factory: (overlay: Overlay) => () => ScrollStrategy\n) => ({\n provide: token,\n deps: [Overlay],\n useFactory: factory\n});\n\nfunction arrayMap<T, S>(array: T[], iteratee: (item: T, index: number, arr: T[]) => S): S[] {\n let index = -1;\n const length = array === null ? 0 : array.length;\n const result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n\n return result;\n}\n\nfunction baseValues<T>(object: T[], props: string[]): T[] {\n return arrayMap(props, (key) => object[key]);\n}\n\nfunction objectValues<T>(object: T[]): T[] {\n return object === null ? [] : baseValues(object, Object.keys(object));\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\n\n/**\n * Maximum height of an overlay panel's scrollable content, in pixels. `null` falls back to the\n * `--kbq-select-panel-size-max-height` design token.\n *\n * The cap covers the scrollable list only — a search field or a footer rendered beside it adds to the\n * panel's total height. With a `cdk-virtual-scroll-viewport` the value is an exact height rather than a\n * cap, because the viewport pins both its `min-height` and its `max-height` to the token.\n */\nexport type KbqPanelMaxHeight = number | null;\n\n/**\n * Renders `panelMaxHeight` as a CSS length for the `--kbq-select-panel-size-max-height` token.\n *\n * A non-finite value yields `null` so that Angular removes the inline custom property and the stylesheet\n * default applies again. A negative value is clamped to `0` because `max-height` rejects negative lengths\n * at computed-value time, which would drop the declaration and leave the list unbounded rather than at\n * its default height.\n * @docs-private\n */\nexport function kbqResolvePanelMaxHeightToken(panelMaxHeight: KbqPanelMaxHeight | undefined): string | null {\n // `numberAttribute` coerces `null` and other invalid bindings to `NaN`, so guard on finiteness\n // rather than on `null`, which never reaches us from a template binding.\n return Number.isFinite(panelMaxHeight) ? coerceCssPixelValue(Math.max(panelMaxHeight as number, 0)) : null;\n}\n\n/**\n * Default cap of an overlay panel's scrollable content, in pixels. Mirrors the stylesheet default of\n * `--kbq-select-panel-size-max-height` so that the two cannot drift apart.\n * @docs-private\n */\nexport const KBQ_PANEL_DEFAULT_MAX_HEIGHT = 256;\n\n/**\n * Geometry needed to work out how tall an anchored panel's scrollable list may be.\n * @docs-private\n */\nexport interface KbqPanelSpaceContext {\n /** Viewport-relative top of the element the panel is anchored to. */\n triggerTop: number;\n /** Viewport-relative bottom of the element the panel is anchored to. */\n triggerBottom: number;\n /** Height of the viewport the panel has to fit into. */\n viewportHeight: number;\n /** Margin the overlay keeps from the viewport edge, i.e. `cdkConnectedOverlayViewportMargin`. */\n viewportMargin: number;\n /**\n * Everything in the panel that is not the scrollable list and therefore adds to its total height: the\n * trigger gap, the list padding, a search field and a footer.\n */\n chromeHeight: number;\n}\n\n/**\n * How much room the panel's scrollable list has on each side of the trigger. Negative means it does not fit.\n * @docs-private\n */\nexport interface KbqPanelSideSpace {\n above: number;\n below: number;\n}\n\n/**\n * Measures how much room the panel's scrollable list has on either side of the trigger.\n *\n * Returns `null` for geometry that cannot be trusted — a collapsed trigger rect or a zero-height viewport, which\n * is what a DOM without layout reports, on the server and under jsdom.\n * @docs-private\n */\nexport function kbqResolvePanelSideSpace(context: KbqPanelSpaceContext): KbqPanelSideSpace | null {\n const { triggerTop, triggerBottom, viewportHeight, viewportMargin, chromeHeight } = context;\n\n if (![triggerTop, triggerBottom, viewportHeight, viewportMargin, chromeHeight].every(Number.isFinite)) {\n return null;\n }\n\n if (viewportHeight <= 0 || triggerBottom <= triggerTop) return null;\n\n return {\n above: triggerTop - viewportMargin - chromeHeight,\n below: viewportHeight - triggerBottom - viewportMargin - chromeHeight\n };\n}\n\n/**\n * What the DOM reports about the first row of a trigger that lays its content out in rows.\n * @docs-private\n */\nexport interface KbqTriggerFirstRowMeasurements {\n /** Viewport-relative top of the element the overlay is anchored to. */\n originTop: number;\n /** Viewport-relative bottom of the element the overlay is anchored to. */\n originBottom: number;\n /** Border-box top of the row container. */\n listTop: number;\n /** Border-box bottom of the row container. */\n listBottom: number;\n /** Viewport-relative bottom of the lowest element sitting on the first laid-out row. */\n firstRowBottom: number;\n /** Scroll offset of the row container, so that a scrolled container still reports its own first row. */\n listScrollTop: number;\n}\n\n/**\n * Distance from the trigger's top edge down to where a panel would start if the trigger had a single row —\n * equivalently, the trigger's height with rows 2..N removed.\n *\n * Returns `null` for geometry that cannot be trusted: a collapsed rect (the server, a DOM without layout), or\n * a row container that is not what drives the trigger's height, which a result reaching past the trigger's own\n * bottom edge gives away.\n * @docs-private\n */\nexport function kbqResolveTriggerFirstRowOffset(measurements: KbqTriggerFirstRowMeasurements): number | null {\n const { originTop, originBottom, listTop, listBottom, firstRowBottom, listScrollTop } = measurements;\n\n if (![originTop, originBottom, listTop, listBottom, firstRowBottom, listScrollTop].every(Number.isFinite)) {\n return null;\n }\n\n const originHeight = originBottom - originTop;\n\n if (originHeight <= 0) return null;\n\n // The first row measured in the container's own, unscrolled coordinates, plus the chrome the trigger keeps\n // above and below its rows — the matcher's padding and the field's border.\n const firstRowHeight = firstRowBottom + listScrollTop - listTop;\n const offset = listTop - originTop + firstRowHeight + (originBottom - listBottom);\n\n return offset > 0 && offset <= originHeight ? offset : null;\n}\n\n/**\n * Room the panel's scrollable list has when it is anchored to the trigger's first row instead of to the\n * trigger's bottom edge. The same arithmetic as {@link kbqResolvePanelSideSpace}, on a trigger cut to one row.\n * @docs-private\n */\nexport function kbqResolveOverlapPanelSpace(context: KbqPanelSpaceContext, firstRowOffset: number): number | null {\n const space = kbqResolvePanelSideSpace({ ...context, triggerBottom: context.triggerTop + firstRowOffset });\n\n return space && space.below;\n}\n\n/**\n * Everything the first-row anchor decision needs beyond {@link KbqPanelSpaceContext}.\n * @docs-private\n */\nexport interface KbqPanelAnchorOptions {\n /** Result of {@link kbqResolveTriggerFirstRowOffset}; `null` when there is no row to anchor to. */\n firstRowOffset: number | null;\n /** Height the scrollable list takes with no viewport clamp in force. */\n naturalListHeight: number;\n /** Whether the panel is already anchored to the first row, which widens the band it stays in. */\n anchored?: boolean;\n}\n\n/**\n * Whether the panel should be anchored below the trigger's first row and rendered over the rest of it.\n *\n * Three things have to hold. The trigger must have more than one row, or there is nothing to overlap. It must\n * be taller than the panel, or the room beside it is the better trade and the panel belongs on a side. And\n * the panel must fit there at its full height — the caller adds this as a THIRD `ConnectedPosition`,\n * and when no position fits the overlay falls back to whichever goes off-screen the least, so an anchor that\n * does not fit would outrank `above`/`below` on that fallback and move panels that have no business moving.\n * Gating on the fit keeps the fallback ranking exactly as it is without this anchor.\n *\n * `anchored` widens the height test by one row, so that deselecting a single option cannot bounce a panel\n * sitting right on the boundary across several hundred pixels.\n * @docs-private\n */\nexport function kbqShouldAnchorPanelToFirstRow(\n context: KbqPanelSpaceContext,\n { firstRowOffset, naturalListHeight, anchored = false }: KbqPanelAnchorOptions\n): boolean {\n if (firstRowOffset === null) return false;\n\n if (!Number.isFinite(naturalListHeight)) return false;\n\n // Read off the same rect the space calculation uses, so the two can never disagree.\n const triggerHeight = context.triggerBottom - context.triggerTop;\n\n // A single-row trigger has nothing to overlap.\n if (triggerHeight - firstRowOffset <= 1) return false;\n\n const hysteresis = anchored ? firstRowOffset : 0;\n\n if (triggerHeight + hysteresis <= context.chromeHeight + naturalListHeight) return false;\n\n // The overlay rejects a position whose top edge is off the top of the viewport, which a trigger scrolled\n // past the fold produces.\n if (context.triggerTop + firstRowOffset < 0) return false;\n\n const space = kbqResolveOverlapPanelSpace(context, firstRowOffset);\n\n return space !== null && space >= naturalListHeight;\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ElementRef } from '@angular/core';\n\n/**\n * Default minimum width of an overlay panel, in pixels.\n *\n * Kept in sync by hand with `--kbq-dropdown-size-container-width-min` in `dropdown-tokens.scss`,\n * which expresses the same default for the dropdown's CSS-driven sizing.\n */\nexport const KBQ_PANEL_DEFAULT_MIN_WIDTH = 200;\n\n/**\n * Width of an overlay panel.\n *\n * - `'auto'` — matches the trigger width, but never narrower than `panelMinWidth`.\n * - `number` — an explicit width in pixels. `panelMinWidth` is not applied.\n * - `string` — an explicit CSS width (e.g. `fit-content`, `20rem`). `panelMinWidth` is not applied.\n * - `null`/`''` — the panel sizes to its content, but never narrower than the trigger or `panelMinWidth`.\n */\n// `string & {}` keeps the literal members visible to autocomplete while still allowing any CSS width.\nexport type KbqPanelWidth = 'auto' | number | (string & {}) | null | '';\n\n/** Minimum width of an overlay panel, in pixels. `null` applies no additional minimum. */\nexport type KbqPanelMinWidth = number | null;\n\n/**\n * Maximum width of an overlay panel, in pixels. `null` falls back to the `--kbq-panel-size-width-max`\n * design token.\n *\n * The cap is soft: it limits how far a panel grows with its content, but never makes a panel narrower\n * than its trigger, and never overrides an explicit `panelWidth`.\n */\nexport type KbqPanelMaxWidth = number | null;\n\n/**\n * Anything an overlay panel can be measured against.\n * @docs-private\n */\nexport type KbqPanelWidthOrigin = ElementRef<HTMLElement> | CdkOverlayOrigin | HTMLElement;\n\n/**\n * Resolved size of an overlay pane.\n *\n * Both keys are always present so that the result can be passed straight to `OverlayRef.updateSize()`,\n * which shallow-merges into the existing config — an omitted key would leave a stale value applied.\n * @docs-private\n */\nexport interface KbqResolvedPanelWidth {\n width: number | string;\n minWidth: number | string;\n}\n\n/**\n * Measures the rendered width of a panel's trigger.\n *\n * Uses `getBoundingClientRect()` because `getComputedStyle().width` resolves to the used\n * content-box width regardless of `box-sizing`, so subtracting borders from it double-counts them.\n * @docs-private\n */\nexport function kbqGetPanelWidthOrigin(origin: KbqPanelWidthOrigin): number {\n const element =\n origin instanceof CdkOverlayOrigin\n ? origin.elementRef.nativeElement\n : origin instanceof ElementRef\n ? origin.nativeElement\n : origin;\n\n return element.getBoundingClientRect().width;\n}\n\n/**\n * Resolves `panelWidth` and `panelMinWidth` into the `width` and `minWidth` of the overlay pane.\n *\n * `panelWidth` selects the sizing policy. The \"never narrower than the trigger\" rule belongs to the\n * automatic policies (`null` and `'auto'`); an explicit width is taken at face value.\n * @docs-private\n */\nexport function kbqResolvePanelWidth(\n panelWidth: KbqPanelWidth | undefined,\n panelMinWidth: KbqPanelMinWidth | undefined,\n triggerWidth: number\n): KbqResolvedPanelWidth {\n // `numberAttribute` coerces `null` and other invalid bindings to `NaN`, so guard on finiteness\n // rather than on `null`, which never reaches us from a template binding.\n const min = Number.isFinite(panelMinWidth) ? Math.max(panelMinWidth as number, 0) : 0;\n const floor = Math.max(min, Number.isFinite(triggerWidth) ? triggerWidth : 0);\n\n // Trigger-sized. The floor is resolved here rather than emitted as `minWidth` because\n // `KbqAbstractSelect.setOverlayPosition()` clears `minWidth` on viewport overflow, after having\n // derived the panel offset from the pre-clear width. A floor of `0` means the trigger could not\n // be measured, not that a zero-width panel was asked for, so the width stays unset and the panel\n // sizes to its content.\n if (panelWidth === 'auto') {\n return { width: floor > 0 ? coerceCssPixelValue(floor) : '', minWidth: '' };\n }\n\n // Content-sized. Only `null`/`undefined`/`''` opt in — `0` is an explicit width. A non-finite\n // `panelWidth` (e.g. `NaN` from an upstream computation) is treated the same way rather than\n // reaching the DOM unguarded, mirroring how `panelMinWidth`/`triggerWidth` are handled above.\n if (panelWidth == null || panelWidth === '' || (typeof panelWidth === 'number' && !Number.isFinite(panelWidth))) {\n return { width: '', minWidth: floor };\n }\n\n // Explicit width. `panelMinWidth` is not applied. Rendered as CSS so that a zero survives the\n // truthy check `CdkConnectedOverlay._getWidth()` applies to the width it was given (CDK 22+).\n return { width: coerceCssPixelValue(panelWidth), minWidth: '' };\n}\n","/**\n * A simple (x, y) coordinate. Picked from the DOM's own `DOMPointReadOnly` rather than hand-rolled, so\n * a plain `{ x, y }` literal (e.g. from a `MouseEvent`) satisfies it without constructing a `DOMPoint` —\n * `DOMPoint` isn't implemented in every runtime (e.g. jsdom).\n * @docs-private\n */\nexport type KbqPoint = Pick<DOMPointReadOnly, 'x' | 'y'>;\n\n/**\n * A triangle described by its three vertices.\n * @docs-private\n */\nexport interface KbqTriangle {\n a: KbqPoint;\n b: KbqPoint;\n c: KbqPoint;\n}\n\n/**\n * Whether `point` lies within (or on the edge of) `rect`.\n * @docs-private\n */\nexport function isPointInRect(point: KbqPoint, rect: DOMRect): boolean {\n return point.x >= rect.left && point.x <= rect.right && point.y >= rect.top && point.y <= rect.bottom;\n}\n\n/**\n * Whether `point` lies within (or on the edge of) `triangle`.\n *\n * Uses the sign of the cross product of each triangle edge with the point: the point is inside\n * only if it's consistently on the same side of all three edges.\n * @docs-private\n */\nexport function isPointInTriangle(point: KbqPoint, triangle: KbqTriangle): boolean {\n const { a, b, c } = triangle;\n\n const sign = (p1: KbqPoint, p2: KbqPoint, p3: KbqPoint): number =>\n (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);\n\n const d1 = sign(point, a, b);\n const d2 = sign(point, b, c);\n const d3 = sign(point, c, a);\n\n const hasNegative = d1 < 0 || d2 < 0 || d3 < 0;\n const hasPositive = d1 > 0 || d2 > 0 || d3 > 0;\n\n return !(hasNegative && hasPositive);\n}\n\n/**\n * Builds the \"safe triangle\" connecting `origin` (typically the pointer position where it left a\n * trigger) to the top and bottom corners of `targetRect` (typically a submenu panel) that are nearest\n * to `origin` — the submenu can open on either side of its trigger, so the nearest edge is picked by\n * comparing distances rather than assuming a fixed side.\n * @docs-private\n */\nexport function getSafeTriangleVertices(origin: KbqPoint, targetRect: DOMRect): KbqTriangle {\n const nearX =\n Math.abs(targetRect.left - origin.x) <= Math.abs(targetRect.right - origin.x)\n ? targetRect.left\n : targetRect.right;\n\n return { a: origin, b: { x: nearX, y: targetRect.top }, c: { x: nearX, y: targetRect.bottom } };\n}\n","import { OverlayContainer } from '@angular/cdk/overlay';\nimport { ApplicationRef, ElementRef, Injectable, InjectionToken, Provider, inject } from '@angular/core';\n\n/**\n * Reference to the element used to locate the shadow root that should host the CDK overlay container.\n *\n * It can be the shadow host element itself (the common case — the MFE root element) or any element that already\n * lives inside the shadow tree. Provide it directly, as an `ElementRef`, or as a getter (useful when the element is\n * created after the providers are declared, e.g. resolved lazily at bootstrap).\n */\nexport type KbqShadowDomOverlayHost = HTMLElement | ElementRef<HTMLElement> | (() => Element | null | undefined);\n\n/**\n * Element used by {@link KbqShadowDomOverlayContainer} to locate the shadow root that should host overlays.\n *\n * When not provided, the container falls back to the application root component element.\n */\nexport const KBQ_SHADOW_DOM_OVERLAY_HOST = new InjectionToken<KbqShadowDomOverlayHost>('KBQ_SHADOW_DOM_OVERLAY_HOST');\n\n/** Marks the structural overlay stylesheet that {@link KbqShadowDomOverlayContainer} clones into a shadow root. */\nconst overlayStructuralStylesAttribute = 'data-kbq-overlay-structural-styles';\n\n/**\n * `OverlayContainer` that places the `.cdk-overlay-container` inside a shadow root instead of `document.body`.\n *\n * The default CDK `OverlayContainer` always appends its container to `document.body`. When the application is\n * rendered inside a shadow root (e.g. a Module Federation micro-frontend), overlays — toasts, modals, dropdowns,\n * tooltips, etc. — escape the shadow tree into the light DOM. There they lose access to the styles and theme tokens\n * scoped to the shadow root (Koobiq theme tokens are defined on the `.kbq-light` / `.kbq-dark` ancestor), which\n * results in unstyled overlays.\n *\n * This container resolves the target shadow root from {@link KBQ_SHADOW_DOM_OVERLAY_HOST} (or the root component when\n * the token is absent) and relocates the overlay container into it. After relocating, it also clones CDK's own\n * structural overlay stylesheet (`position`/`z-index`/backdrop, `.cdk-overlay-container:empty`) into the shadow root,\n * since those `document.head` styles do not cross the shadow boundary. If no shadow root is found — the common case\n * for an app rendered directly in the light DOM — the container is left on `document.body`, so it is safe to provide\n * unconditionally.\n *\n * Only **open** shadow roots can be resolved: a closed shadow root exposes neither `Element.shadowRoot` nor a\n * `ShadowRoot` from `getRootNode()`, so pass an element that already lives inside the closed tree if you must use one.\n *\n * Note: this fixes the overlay container *placement* and delivers the CDK structural overlay styles. The host\n * application is still responsible for delivering the **Koobiq component/theme styles** (the `.kbq-light` / `.kbq-dark`\n * tokens and component CSS) into the shadow root, since global `document.head` stylesheets do not cascade across a\n * shadow boundary.\n *\n * @see kbqShadowDomOverlayProvider\n */\n@Injectable()\nexport class KbqShadowDomOverlayContainer extends OverlayContainer {\n private readonly host = inject(KBQ_SHADOW_DOM_OVERLAY_HOST, { optional: true });\n private readonly applicationRef = inject(ApplicationRef);\n\n /** @internal CDK lifecycle hook — overridden to relocate the container into a shadow root. */\n protected override _createContainer(): void {\n // Let CDK create the container (and run its test-environment cleanup). It is appended to `document.body`.\n super._createContainer();\n\n const shadowRoot = this.resolveShadowRoot();\n\n if (shadowRoot) {\n // Relocate the container into the shadow root and deliver the structural overlay styles alongside it.\n shadowRoot.appendChild(this._containerElement);\n this.deliverStructuralStyles(shadowRoot);\n } else if (this.host != null) {\n // An explicit host was provided but did not resolve to an open shadow root (wrong element, a closed\n // shadow root, or an element not yet inside a shadow tree). The container stays on `document.body`, so\n // overlays would render unstyled — warn instead of failing silently.\n // eslint-disable-next-line no-console\n console.warn(\n '[KbqShadowDomOverlayContainer] The provided host did not resolve to an open shadow root; the ' +\n 'overlay container stays on document.body. Ensure the host element (or an element inside its ' +\n 'shadow tree) uses an open shadow root.'\n );\n }\n }\n\n /**\n * Clones CDK's structural overlay stylesheet into the shadow root.\n *\n * CDK ships the overlay's structural CSS as a `ViewEncapsulation.None` component, so Angular injects it as a\n * `<style>` in `document.head` synchronously — `OverlayContainer.getContainerElement()` loads it before\n * `_createContainer()` runs. Those rules do not cross the shadow boundary, so a relocated container would\n * otherwise be unpositioned. Cloning the already-injected stylesheet keeps it version-matched to the installed\n * `@angular/cdk` and is idempotent.\n */\n private deliverStructuralStyles(shadowRoot: ShadowRoot): void {\n if (shadowRoot.querySelector(`style[${overlayStructuralStylesAttribute}]`)) {\n return;\n }\n\n const sourceStyle = Array.from(this._document.head.querySelectorAll('style')).find((style) =>\n style.textContent?.includes('.cdk-overlay-pane')\n );\n\n if (sourceStyle) {\n const clone = sourceStyle.cloneNode(true) as HTMLStyleElement;\n\n clone.setAttribute(overlayStructuralStylesAttribute, '');\n shadowRoot.appendChild(clone);\n }\n }\n\n private resolveShadowRoot(): ShadowRoot | null {\n const element = this.resolveHostElement();\n\n if (!element) {\n return null;\n }\n\n // The host can be the shadow host itself (the common case — the MFE root element)...\n const ownShadowRoot = element.shadowRoot;\n\n if (ownShadowRoot) {\n return ownShadowRoot;\n }\n\n // ...or an element that already lives inside the shadow tree.\n const rootNode = element.getRootNode();\n\n return typeof ShadowRoot !== 'undefined' && rootNode instanceof ShadowRoot ? rootNode : null;\n }\n\n private resolveHostElement(): Element | null {\n if (this.host) {\n const resolved = typeof this.host === 'function' ? this.host() : this.host;\n\n if (resolved instanceof ElementRef) {\n return resolved.nativeElement;\n }\n\n return resolved ?? null;\n }\n\n // No explicit host provided — fall back to the application root component element.\n return this.applicationRef.components[0]?.location.nativeElement ?? null;\n }\n}\n\n/**\n * Providers that route all CDK overlays into a shadow root via {@link KbqShadowDomOverlayContainer}.\n *\n * Add it to the bootstrap providers of an application rendered inside a shadow root:\n *\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: kbqShadowDomOverlayProvider(() => document.querySelector('my-mfe-root')!)\n * });\n * ```\n *\n * The provider replaces the global `OverlayContainer` token, so it cannot be combined with another custom\n * `OverlayContainer` (e.g. CDK's `FullscreenOverlayContainer`) — the last provider wins. Apps that need both must\n * subclass `KbqShadowDomOverlayContainer`.\n *\n * @param host element (or getter / `ElementRef`) inside the target shadow tree. When omitted, the application root\n * component element is used to resolve the shadow root.\n */\nexport const kbqShadowDomOverlayProvider = (host?: KbqShadowDomOverlayHost): Provider[] => {\n const providers: Provider[] = [{ provide: OverlayContainer, useClass: KbqShadowDomOverlayContainer }];\n\n if (host !== undefined) {\n providers.push({ provide: KBQ_SHADOW_DOM_OVERLAY_HOST, useValue: host });\n }\n\n return providers;\n};\n","import { InjectionToken, Provider, Type } from '@angular/core';\nimport { TooltipSizeArrowSize } from '@koobiq/design-tokens';\nimport { Observable } from 'rxjs';\nimport { KbqEnumValues } from '../utils';\n\nexport interface KbqParentPopup {\n closedStream: Observable<boolean>;\n}\n\n/**\n * InjectionToken for providing component with popup. Used in select and tree-select for tooltip.\n */\nexport const KBQ_PARENT_POPUP = new InjectionToken<KbqParentPopup>('kbq-parent-popup');\n\n/**\n * Contract of a pop-up anchored to the same element as a tooltip — a popover, a dropdown, a select and so on.\n *\n * A tooltip sharing its host with such a pop-up mutes itself while the pop-up is on screen, so the two never\n * compete for the same anchor and the focus restored by the closing pop-up does not re-open the tooltip.\n */\nexport interface KbqSiblingPopup {\n /**\n * Whether the pop-up overlay is currently attached. Unlike a visibility flag it must flip synchronously,\n * both when the overlay is attached and when it is detached.\n */\n readonly isAttached: boolean;\n /** Emits `true` when the pop-up opens and `false` when it closes. */\n readonly openedChange: Observable<boolean>;\n}\n\n/**\n * Element-level token for pop-ups sharing their trigger element with a tooltip. Multi-provided, so a single\n * element can carry several pop-ups at once — for example the filter-bar button with both a popover and a\n * dropdown attached to it.\n */\nexport const KBQ_SIBLING_POPUP = new InjectionToken<readonly KbqSiblingPopup[]>('kbq-sibling-popup');\n\n/**\n * Builds the multi-provider entry a pop-up trigger adds to its own `providers` to announce itself to a\n * tooltip on the same element.\n *\n * Every concrete trigger has to add it on its own: Angular copies `providers` to a subclass only when that\n * subclass has no decorator of its own, so inheriting from an already-announced trigger is not enough.\n */\nexport const kbqSiblingPopupProvider = (popup: Type<KbqSiblingPopup>): Provider => ({\n provide: KBQ_SIBLING_POPUP,\n useExisting: popup,\n multi: true\n});\n\nexport enum PopUpPlacements {\n Top = 'top',\n TopLeft = 'topLeft',\n TopRight = 'topRight',\n Right = 'right',\n RightTop = 'rightTop',\n RightBottom = 'rightBottom',\n Left = 'left',\n LeftTop = 'leftTop',\n LeftBottom = 'leftBottom',\n Bottom = 'bottom',\n BottomLeft = 'bottomLeft',\n BottomRight = 'bottomRight'\n}\n\nexport type KbqPopUpPlacementValues = KbqEnumValues<PopUpPlacements>;\n\nexport type KbqStickToWindowPlacementValues = KbqEnumValues<\n PopUpPlacements.Top | PopUpPlacements.Right | PopUpPlacements.Bottom | PopUpPlacements.Left\n>;\n\nexport enum PopUpVisibility {\n Initial = 'initial',\n Visible = 'visible',\n Hidden = 'hidden'\n}\n\nexport enum PopUpTriggers {\n Click = 'click',\n Focus = 'focus',\n Hover = 'hover',\n Keydown = 'keydown',\n Program = 'program'\n}\n\nexport enum PopUpSizes {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n Custom = 'custom'\n}\n\nexport type KbqPopUpSizeValues = KbqEnumValues<PopUpSizes>;\n\n/**\n * Default value when configuring overlay in popups (Autocomplete, Datepicker, Dropdown, Select, Tags Autocomplete,\n * Tags Input, Timezone, TreeSelect).\n */\nexport const defaultOffsetY: number = 4;\n\n/**\n * Pane class applied to a connected overlay whose panel is positioned BELOW its trigger.\n *\n * Used instead of a physical `offsetY` gap: the pane sits flush with the trigger and the visual gap is\n * recreated as transparent `padding-top` inside the pane (see the `kbq-connected-overlay-gap` styles), so the\n * gap is covered by the pane (`pointer-events: auto`) and can no longer be clicked/hovered through.\n */\nexport const KBQ_CONNECTED_OVERLAY_BELOW_CLASS = 'kbq-connected-overlay_below';\n\n/**\n * Pane class applied to a connected overlay whose panel is positioned ABOVE its trigger (flipped).\n *\n * Mirror of {@link KBQ_CONNECTED_OVERLAY_BELOW_CLASS}: the visual gap is recreated as transparent\n * `padding-bottom` inside the pane so the flipped gap is not click/hover-through.\n */\nexport const KBQ_CONNECTED_OVERLAY_ABOVE_CLASS = 'kbq-connected-overlay_above';\n\n/**\n * Pane class applied to a connected overlay whose panel is anchored to the FIRST ROW of a trigger it\n * OVERLAPS — a multiline select whose tag rows have made it taller than the panel itself, with too little\n * room to open on either side of it.\n *\n * The panel ends up where it would for a single-row trigger, so the gap is the same transparent\n * `padding-top` as {@link KBQ_CONNECTED_OVERLAY_BELOW_CLASS}. It is a separate class because the room left\n * for the panel has to be measured from the first row rather than from the trigger's bottom edge, and the\n * class is how the component tells the two apart.\n */\nexport const KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS = 'kbq-connected-overlay_overlap';\n\n/**\n * Variable used for offsetY(X) calculations when applying Angular Overlay\n *\n * @docs-private\n */\nexport const ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT = Math.round(parseInt(TooltipSizeArrowSize) * Math.sqrt(2));\n","import { FocusTrapInertStrategy } from '@angular/cdk/a11y';\n\n// Need replace EventListenerFocusTrapInertStrategy to EmptyFocusTrapStrategy for focus work correctly with open popover\nexport class EmptyFocusTrapStrategy implements FocusTrapInertStrategy {\n preventFocus(): void {}\n allowFocus(): void {}\n}\n","import { AnimationEvent } from '@angular/animations';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport {\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n OnDestroy,\n Renderer2,\n TemplateRef\n} from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { PopUpPlacements, PopUpVisibility } from './constants';\nimport { KbqPopUpTrigger } from './pop-up-trigger';\n\n@Directive({\n host: {\n '(mouseenter)': 'hovered.next(true)',\n '(mouseleave)': 'hovered.next(false)'\n }\n})\nexport abstract class KbqPopUp implements OnDestroy {\n protected readonly renderer: Renderer2 = inject(Renderer2);\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n readonly destroyRef = inject(DestroyRef);\n\n /** Stream that emits when the popup item is hovered. */\n readonly hovered = new BehaviorSubject<boolean>(false);\n\n trigger: KbqPopUpTrigger<unknown>;\n header: string | TemplateRef<any>;\n content: string | TemplateRef<any>;\n context: { $implicit: any } | null;\n\n classMap = {};\n\n warning: boolean;\n arrow: boolean;\n defaultPaddings: boolean;\n\n offset: number | null;\n\n visibility = PopUpVisibility.Initial;\n visibleChange = new EventEmitter<boolean>();\n\n protected prefix: string;\n\n /** Subject for notifying that the tooltip has been hidden from the view */\n protected readonly onHideSubject = new Subject<void>();\n\n protected closeOnInteraction: boolean = false;\n\n private showTimeoutId: any;\n private hideTimeoutId: any;\n\n ngOnDestroy() {\n clearTimeout(this.showTimeoutId);\n clearTimeout(this.hideTimeoutId);\n\n this.onHideSubject.complete();\n this.hovered.complete();\n // Completed here rather than left dangling: the trigger subscribes to it once per show and keeps that\n // subscription for its own lifetime, so a trigger that outlives many pop-ups would otherwise accumulate\n // one live subscriber per show.\n this.visibleChange.complete();\n }\n\n isTemplateRef(value: any): boolean {\n return value instanceof TemplateRef;\n }\n\n show(delay: number): void {\n if (this.hideTimeoutId) {\n clearTimeout(this.hideTimeoutId);\n }\n\n this.closeOnInteraction = true;\n\n this.showTimeoutId = setTimeout(() => {\n this.showTimeoutId = undefined;\n\n this.visibility = PopUpVisibility.Visible;\n this.visibleChange.emit(true);\n // Mark for check so if any parent component has set the\n // ChangeDetectionStrategy to OnPush it will be checked anyways\n this.markForCheck();\n\n if (this.trigger.triggerName === 'mouseenter') {\n this.addEventListenerForHide();\n }\n }, delay);\n }\n\n /**\n * Hides the popup after a specified delay.\n *\n * The hide timeout triggers the hiding of the popup by updating visibility and emitting relevant events.\n * Also, it marks for check to ensure proper change detection, especially for parent components with OnPush strategy.\n * @param delay - The delay in milliseconds before hiding the popup.\n */\n hide(delay: number): void {\n if (this.showTimeoutId) {\n clearTimeout(this.showTimeoutId);\n }\n\n this.hideTimeoutId = setTimeout(() => {\n this.hideTimeoutId = undefined;\n this.visibility = PopUpVisibility.Hidden;\n\n this.visibleChange.emit(false);\n this.onHideSubject.next();\n\n // Mark for check so if any parent component has set the\n // ChangeDetectionStrategy to OnPush it will be checked anyways\n this.markForCheck();\n }, delay);\n }\n\n isVisible(): boolean {\n return this.visibility === PopUpVisibility.Visible;\n }\n\n updateClassMap(placement: string, customClass: string, classMap?): void {\n // `customClass` may be a whitespace-separated list of class names; expand it into\n // individual keys so the native `[class]` binding (which doesn't tokenise object keys)\n // applies each class correctly.\n const customClasses: Record<string, boolean> = {};\n\n for (const token of (customClass ?? '').split(/\\s+/).filter(Boolean)) {\n customClasses[token] = true;\n }\n\n this.classMap = {\n [`${this.prefix}_placement-${placement}`]: true,\n ...customClasses,\n ...classMap\n };\n }\n\n /** Returns an observable that notifies when the tooltip has been hidden from view. */\n afterHidden(): Observable<void> {\n return this.onHideSubject.asObservable();\n }\n\n markForCheck(): void {\n this.changeDetectorRef.markForCheck();\n }\n\n detectChanges(): void {\n this.changeDetectorRef.detectChanges();\n }\n\n animationStart() {\n this.closeOnInteraction = false;\n }\n\n animationDone({ toState }: AnimationEvent): void {\n if (toState === PopUpVisibility.Hidden && !this.isVisible()) {\n this.onHideSubject.next();\n }\n\n if (toState === PopUpVisibility.Visible || toState === PopUpVisibility.Hidden) {\n this.closeOnInteraction = true;\n }\n }\n\n handleBodyInteraction(): void {\n if (this.closeOnInteraction) {\n this.hide(0);\n }\n }\n\n protected addEventListenerForHide() {\n this.elementRef.nativeElement.addEventListener('mouseleave', () => this.hide(0));\n }\n\n protected setStickPosition() {\n const oppositeSide = {\n [PopUpPlacements.Top]: PopUpPlacements.Bottom,\n [PopUpPlacements.Bottom]: PopUpPlacements.Top,\n [PopUpPlacements.Right]: PopUpPlacements.Left,\n [PopUpPlacements.Left]: PopUpPlacements.Right\n }[this.trigger.stickToWindow];\n\n if (!this.trigger.stickToWindow || !oppositeSide) return;\n\n this.arrow = false;\n\n if (this.trigger.container) {\n const { width, height } = this.elementRef.nativeElement.getBoundingClientRect();\n const { right, left, top, bottom } = this.trigger.container.getBoundingClientRect();\n\n if (this.trigger.stickToWindow === PopUpPlacements.Right) {\n this.renderer.setStyle(\n this.trigger.overlayRef?.overlayElement,\n 'left',\n coerceCssPixelValue(right - width)\n );\n } else if (this.trigger.stickToWindow === PopUpPlacements.Left) {\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, 'left', coerceCssPixelValue(left));\n } else if (this.trigger.stickToWindow === PopUpPlacements.Top) {\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, 'top', coerceCssPixelValue(top));\n } else if (this.trigger.stickToWindow === PopUpPlacements.Bottom) {\n this.renderer.setStyle(\n this.trigger.overlayRef?.overlayElement,\n 'top',\n coerceCssPixelValue(bottom - height)\n );\n }\n\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, 'right', 'unset');\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, 'bottom', 'unset');\n } else {\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, this.trigger.stickToWindow, 0);\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, oppositeSide, 'unset');\n }\n }\n}\n","import { Renderer2 } from '@angular/core';\n\nexport const applyPopupMargins = (renderer: Renderer2, element: HTMLElement, name: string, value: string) => {\n const classList = element.classList;\n\n if (\n classList.contains(`${name}_placement-top`) ||\n classList.contains(`${name}_placement-top-left`) ||\n classList.contains(`${name}_placement-top-right`)\n ) {\n renderer.setStyle(element, 'margin-bottom', value);\n }\n\n if (\n classList.contains(`${name}_placement-right`) ||\n classList.contains(`${name}_placement-right-top`) ||\n classList.contains(`${name}_placement-right-bottom`)\n ) {\n renderer.setStyle(element, 'margin-left', value);\n }\n\n if (\n classList.contains(`${name}_placement-bottom`) ||\n classList.contains(`${name}_placement-bottom-left`) ||\n classList.contains(`${name}_placement-bottom-right`)\n ) {\n renderer.setStyle(element, 'margin-top', value);\n }\n\n if (\n classList.contains(`${name}_placement-left`) ||\n classList.contains(`${name}_placement-left-top`) ||\n classList.contains(`${name}_placement-left-bottom`)\n ) {\n renderer.setStyle(element, 'margin-right', value);\n }\n};\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n CdkScrollable,\n ConnectedOverlayPositionChange,\n ConnectionPositionPair,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollDispatcher,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n NgZone,\n OnDestroy,\n OnInit,\n TemplateRef,\n Type,\n ViewContainerRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, interval, Observable, Subscription } from 'rxjs';\nimport { AsyncScheduler } from 'rxjs/internal/scheduler/AsyncScheduler';\nimport { distinctUntilChanged, filter, delay as rxDelay } from 'rxjs/operators';\nimport { ENTER, ESCAPE, SPACE } from '../keycodes';\nimport {\n EXTENDED_OVERLAY_POSITIONS,\n POSITION_MAP,\n POSITION_PRIORITY_STRATEGY,\n POSITION_TO_CSS_MAP\n} from '../overlay/overlay-position-map';\nimport {\n ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT,\n KbqPopUpPlacementValues,\n KbqSiblingPopup,\n KbqStickToWindowPlacementValues,\n PopUpPlacements,\n PopUpTriggers\n} from './constants';\nimport { KbqPopUp } from './pop-up';\n\ntype KbqPopupTriggerOffset = Pick<ConnectionPositionPair, 'offsetX' | 'offsetY'>;\n\nconst getOffset = (\n { originX, overlayX, originY, overlayY }: ConnectionPositionPair,\n { width, height }: DOMRect\n): KbqPopupTriggerOffset => {\n const offset: KbqPopupTriggerOffset = {};\n const elementWidthHalf = width / 2;\n const elementHeightHalf = height / 2;\n\n // alignment should be applied only if the element is small\n if (ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT > elementWidthHalf) {\n const PADDING = ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT - elementWidthHalf;\n\n if (originX === overlayX) {\n if (originX === 'start') {\n offset.offsetX = -PADDING;\n }\n\n if (originX === 'end') {\n offset.offsetX = PADDING;\n }\n }\n }\n\n // alignment should be applied only if the element is small\n if (ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT > elementHeightHalf) {\n const PADDING = ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT - elementHeightHalf;\n\n if (originY === overlayY) {\n if (originY === 'top') {\n offset.offsetY = -PADDING;\n }\n\n if (originY === 'bottom') {\n offset.offsetY = PADDING;\n }\n }\n }\n\n return offset;\n};\n\n/**\n * Abstract base directive for hover/focus/click-triggered pop-ups (e.g. tooltip and popover). It manages the\n * CDK overlay lifecycle, binds the trigger event listeners, resolves placement via a flexible connected position\n * strategy, and controls show/hide timing. Concrete subclasses supply the pop-up component type, its content,\n * and the overlay configuration.\n */\n@Directive({\n host: {\n '(mouseenter)': 'hovered.next(true)',\n '(mouseleave)': 'hovered.next(false)'\n }\n})\nexport abstract class KbqPopUpTrigger<T> implements OnInit, OnDestroy, KbqSiblingPopup {\n /** Stream that emits when the popupTrigger is hovered.\n * @docs-private */\n readonly hovered = new BehaviorSubject<boolean>(false);\n\n /** RxJS scheduler that drives the hide timeout; `undefined` falls back to the default async scheduler.\n * @docs-private */\n protected readonly scheduler = inject(AsyncScheduler, { optional: true }) || undefined;\n /** CDK Overlay service used to create and position the pop-up overlay.\n * @docs-private */\n protected readonly overlay: Overlay = inject(Overlay);\n /** Reference to the host element the pop-up is anchored to.\n * @docs-private */\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /** Angular zone, used to run the hide timer outside Angular and re-enter when hiding.\n * @docs-private */\n protected readonly ngZone: NgZone = inject(NgZone);\n /** CDK ScrollDispatcher, used to track ancestor scroll containers so the pop-up repositions on scroll.\n * @docs-private */\n protected readonly scrollDispatcher: ScrollDispatcher = inject(ScrollDispatcher);\n /** CDK ViewportRuler, used to re-apply the stick-to-window position on window resize.\n * @docs-private */\n protected readonly viewportRuler: ViewportRuler = inject(ViewportRuler);\n /** View container the pop-up component portal is attached to.\n * @docs-private */\n protected readonly hostView: ViewContainerRef = inject(ViewContainerRef);\n /** Text direction (LTR/RTL) applied to the overlay when a `Directionality` is available.\n * @docs-private */\n protected readonly direction = inject(Directionality, { optional: true });\n /** Destroy reference used to auto-unsubscribe streams when the directive is destroyed.\n * @docs-private */\n protected readonly destroyRef = inject(DestroyRef);\n /** Nearest `CdkScrollable` ancestor, if any.\n * @docs-private */\n protected readonly scrollable = inject(CdkScrollable, { optional: true });\n /** Factory returning the overlay scroll strategy; provided by the concrete subclass.\n * @docs-private */\n protected abstract scrollStrategy: () => ScrollStrategy;\n\n /** Optional element used to anchor and measure the pop-up instead of the host element.\n * @docs-private */\n protected externalNativeElement: HTMLElement;\n\n /** Change detector used to refresh the trigger when its open state changes. */\n private popUpChangeDetectorRef = inject(ChangeDetectorRef);\n\n /** Whether the pop-up overlay is currently open. */\n get isOpen(): boolean {\n return this._isOpen;\n }\n\n set isOpen(value: boolean) {\n this._isOpen = value;\n\n this.popUpChangeDetectorRef.markForCheck();\n }\n\n /** Backing field for `isOpen`. */\n private _isOpen: boolean = false;\n\n /**\n * Whether the pop-up overlay is currently attached.\n *\n * Unlike `isOpen`, which follows the visibility of the pop-up component and therefore lags a task behind\n * `show()`/`hide()`, this flips synchronously — it is the window during which the overlay (and its\n * backdrop) is present in the DOM. Part of the {@link KbqSiblingPopup} contract.\n */\n get isAttached(): boolean {\n return !!this.instance;\n }\n\n /** Emits `true` when the pop-up opens and `false` when it closes. Part of the {@link KbqSiblingPopup} contract. */\n get openedChange(): Observable<boolean> {\n return this.visibleChange;\n }\n\n /** Delay in milliseconds before the pop-up is shown.\n * @docs-private */\n enterDelay: number = 0;\n /** Delay in milliseconds before the pop-up is hidden.\n * @docs-private */\n leaveDelay: number = 0;\n /** Name of the DOM event that last triggered show/hide (e.g. `mouseenter`, `focus`, `click`).\n * @docs-private */\n triggerName: string;\n /** Reference to the created overlay, or `null` when no overlay exists.\n * @docs-private */\n overlayRef: OverlayRef | null;\n /** Placement used to keep the pop-up stuck within the window bounds.\n * @docs-private */\n stickToWindow: KbqStickToWindowPlacementValues;\n /** Host container element of the pop-up.\n * @docs-private */\n container: HTMLElement;\n /** Whether the pop-up is disabled and therefore never shown; implemented by the subclass.\n * @docs-private */\n abstract disabled: boolean;\n /** Whether the arrow/pointer is rendered; implemented by the subclass.\n * @docs-private */\n abstract arrow: boolean;\n /** Space/comma-separated list of trigger events (`hover`, `focus`, `click`, `keydown`); implemented by the subclass.\n * @docs-private */\n abstract trigger: string;\n /** Extra CSS class applied to the pop-up; implemented by the subclass.\n * @docs-private */\n abstract customClass: string;\n /** Pop-up content as a string or template; implemented by the subclass.\n * @docs-private */\n abstract content: string | TemplateRef<any>;\n /** Emits when the resolved placement changes; implemented by the subclass.\n * @docs-private */\n abstract placementChange: EventEmitter<string>;\n /** Emits when the pop-up visibility changes; implemented by the subclass.\n * @docs-private */\n abstract visibleChange: EventEmitter<boolean>;\n /** CSS selector of the element used as the overlay's transform origin; implemented by the subclass.\n * @docs-private */\n protected abstract originSelector: string;\n /** Base overlay configuration (panel classes, etc.); implemented by the subclass.\n * @docs-private */\n protected abstract overlayConfig: OverlayConfig;\n /** Current resolved placement of the pop-up.\n * @docs-private */\n protected placement: KbqPopUpPlacementValues = PopUpPlacements.Top;\n /** Ordered list of fallback placements to try before the default priority.\n * @docs-private */\n protected placementPriority: string | string[] | null = null;\n /** Whether the pop-up is currently visible.\n * @docs-private */\n protected visible = false;\n /** Backing field for the subclass `content` input.\n * @docs-private */\n protected _content: string | TemplateRef<any>;\n /** Backing field for the subclass `disabled` input.\n * @docs-private */\n protected _disabled: boolean;\n /** Backing field for the subclass `customClass` input.\n * @docs-private */\n protected _customClass: string;\n /** Component portal attached to the overlay to render the pop-up.\n * @docs-private */\n protected portal: ComponentPortal<T>;\n /** Currently attached pop-up component instance, or `null` when closed.\n * @docs-private */\n protected instance: any | null;\n /** Map of event name to the handler currently bound on the host element.\n * @docs-private */\n protected listeners = new Map<string, EventListener>();\n /** Subscription to the streams that should close the pop-up.\n * @docs-private */\n protected closingActionsSubscription: Subscription;\n /** Map of placement name to its CDK connected position pair.\n * @docs-private */\n protected readonly availablePositions: { [key: string]: ConnectionPositionPair } = POSITION_MAP;\n /** Last mouse event, used to position the pop-up relative to the cursor.\n * @docs-private */\n protected mouseEvent?: MouseEvent;\n /** Flexible connected position strategy driving the overlay.\n * @docs-private */\n protected strategy: FlexibleConnectedPositionStrategy;\n\n /** Hide pop-up with timeout. Need if you want to show pop-up after leaving trigger\n * @docs-private */\n protected hideWithTimeout: boolean = false;\n\n /** prevents closure by any event\n * @docs-private */\n protected preventClose: boolean = false;\n\n /** Applies the placement (and modifier) CSS classes to the open pop-up; implemented by the subclass.\n * @docs-private */\n abstract updateClassMap(newPlacement?: string): void;\n\n /** Pushes the current inputs (content, arrow, offset, …) into the open pop-up; implemented by the subclass.\n * @docs-private */\n abstract updateData(): void;\n\n /** Returns the stream of events that should close the pop-up; implemented by the subclass.\n * @docs-private */\n abstract closingActions(): Observable<any>;\n\n /** Returns the component type to attach as the pop-up overlay; implemented by the subclass.\n * @docs-private */\n abstract getOverlayHandleComponentType(): Type<T>;\n\n /** Binds the DOM event listeners for the configured triggers. */\n ngOnInit(): void {\n this.initListeners();\n }\n\n /** Disposes the overlay and removes all bound event listeners. */\n ngOnDestroy(): void {\n this.overlayRef?.dispose();\n\n this.listeners.forEach(this.removeEventListener);\n\n this.listeners.clear();\n }\n\n /** Sets the placement (falling back to `Top` on an unknown value) and refreshes the classes and position.\n * @docs-private */\n updatePlacement(value: KbqPopUpPlacementValues) {\n if (POSITION_TO_CSS_MAP[value]) {\n this.placement = value;\n\n this.updateClassMap();\n } else {\n this.placement = PopUpPlacements.Top;\n\n // eslint-disable-next-line no-console\n console.warn(`Unknown position: ${value}. Will used default position: ${this.placement}`);\n }\n\n if (this.visible) {\n this.updatePosition();\n }\n }\n\n /** Sets the ordered list of fallback placements, or clears it when the value is empty.\n * @docs-private */\n updatePlacementPriority(value) {\n if (value && value.length > 0) {\n this.placementPriority = value;\n } else {\n this.placementPriority = null;\n }\n }\n\n /** Coerces and applies an external visibility value by showing or hiding the pop-up when it changes.\n * @docs-private */\n updateVisible(externalValue: boolean) {\n const value = coerceBooleanProperty(externalValue);\n\n if (this.visible !== value) {\n this.visible = value;\n\n if (value) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n\n /** Closes the pop-up when `Escape` is pressed while it is open. Bound to the host `keydown` event.\n * @docs-private */\n keydownHandler(event: KeyboardEvent) {\n if (this.isOpen && event.keyCode === ESCAPE) {\n this.hide();\n }\n }\n\n /** Hides the pop-up. Bound to the host `touchend` event.\n * @docs-private */\n touchendHandler() {\n this.hide();\n }\n\n /** Creates the overlay (if needed) and shows the pop-up after `delay` ms, wiring its visibility stream.\n * @docs-private */\n show(delay: number = this.enterDelay): void {\n if (this.disabled || this.instance) {\n return;\n }\n\n this.overlayRef = this.createOverlay();\n this.subscribeOnClosingActions();\n this.detach();\n\n this.portal = this.portal || new ComponentPortal(this.getOverlayHandleComponentType(), this.hostView);\n\n this.instance = this.overlayRef.attach(this.portal).instance as KbqPopUp;\n\n this.instance.trigger = this;\n\n this.instance.afterHidden().pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.detach);\n\n this.updateClassMap();\n\n this.updateData();\n\n this.instance.visibleChange\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.visible = value;\n this.visibleChange.emit(value);\n this.isOpen = value;\n });\n\n this.updatePosition();\n\n this.instance.show(delay);\n\n // The position strategy re-applies the overlay position on window resize (its ViewportRuler\n // subscription is created inside OverlayRef.attach(), i.e. before this one), wiping the manual\n // styles written by setStickPosition. Re-apply them after the strategy has run.\n // No-op when stickToWindow is not set.\n this.viewportRuler\n .change()\n .pipe(takeUntilDestroyed(this.instance.destroyRef))\n .subscribe(() => this.instance?.setStickPosition());\n\n if (this.hideWithTimeout && this.trigger.includes(PopUpTriggers.Hover)) {\n this.ngZone.runOutsideAngular(() => {\n interval(this.leaveDelay, this.scheduler)\n .pipe(\n filter(() => this.trigger.includes(PopUpTriggers.Hover)),\n filter(() => !this.hovered.getValue() && !this.instance?.hovered.getValue()),\n takeUntilDestroyed(this.instance?.destroyRef)\n )\n .subscribe(() => this.hide());\n });\n }\n }\n\n /** Hides the pop-up after `delay` ms, honoring `preventClose` and the hover state on mouseleave.\n * @docs-private */\n hide(delay: number = this.leaveDelay) {\n if (this.preventClose) return;\n\n if (\n (this.instance && this.triggerName !== 'mouseleave') ||\n (this.triggerName === 'mouseleave' && !this.instance?.hovered.getValue())\n ) {\n this.ngZone.run(() => this.instance?.hide(delay));\n }\n }\n\n /** Detaches the overlay (if attached) and clears the current pop-up instance.\n * @docs-private */\n detach = (): void => {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef.detach();\n }\n\n this.instance = null;\n };\n\n /** Create the overlay config and position strategy\n * @docs-private */\n createOverlay(): OverlayRef {\n if (this.overlayRef) {\n return this.overlayRef;\n }\n\n // Create connected position strategy that listens for scroll events to reposition.\n this.strategy = this.overlay\n .position()\n .flexibleConnectedTo(this.getNativeElement())\n .withTransformOriginOn(this.originSelector)\n .withFlexibleDimensions(false)\n .withPositions([...EXTENDED_OVERLAY_POSITIONS])\n .withLockedPosition()\n .withScrollableContainers(this.scrollDispatcher.getAncestorScrollContainers(this.getNativeElement()));\n\n this.strategy.positionChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.onPositionChange);\n\n this.overlayRef = this.overlay.create({\n ...this.overlayConfig,\n direction: this.direction || undefined,\n positionStrategy: this.strategy,\n scrollStrategy: this.scrollStrategy()\n });\n\n this.subscribeOnClosingActions();\n\n this.overlayRef.detachments().pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.detach);\n\n return this.overlayRef;\n }\n\n /** Resets the overlay position origin back to the host element.\n * @docs-private */\n resetOrigin() {\n this.strategy.setOrigin(this.getNativeElement());\n }\n\n /** Maps the CDK connection position back to a placement name, emits `placementChange`, and updates classes.\n * @docs-private */\n onPositionChange = ($event: ConnectedOverlayPositionChange): void => {\n if (!this.instance) return;\n\n let newPlacement = this.placement;\n\n const { originX, originY, overlayX, overlayY } = $event.connectionPair;\n\n Object.keys(this.availablePositions).some((key) => {\n if (\n originX === this.availablePositions[key].originX &&\n originY === this.availablePositions[key].originY &&\n overlayX === this.availablePositions[key].overlayX &&\n overlayY === this.availablePositions[key].overlayY\n ) {\n newPlacement = key as PopUpPlacements;\n\n return true;\n }\n\n return false;\n });\n\n this.placementChange.emit(newPlacement);\n\n this.updateClassMap(newPlacement);\n\n this.instance.detectChanges();\n };\n\n /** Rebinds the host DOM listeners (click/hover/focus/keydown) according to the configured triggers.\n * @docs-private */\n initListeners() {\n this.clearListeners();\n\n if (this.trigger.includes(PopUpTriggers.Click)) {\n this.listeners.set(...this.createListener('click', this.show));\n }\n\n if (this.trigger.includes(PopUpTriggers.Hover)) {\n this.listeners\n .set(...this.createListener('mouseenter', this.show))\n .set(...this.createListener('mouseleave', this.getMouseLeaveListener()));\n }\n\n if (this.trigger.includes(PopUpTriggers.Focus)) {\n this.listeners\n .set(...this.createListener('focus', this.show))\n .set(...this.createListener('blur', this.hide));\n }\n\n if (this.trigger.includes(PopUpTriggers.Keydown)) {\n this.listeners.set('keydown', (event) => {\n if (event instanceof KeyboardEvent && [ENTER, SPACE].includes(event.keyCode)) {\n setTimeout(() => this.show());\n }\n });\n }\n\n this.listeners.forEach(this.addEventListener);\n }\n\n /** Returns the `mouseleave` handler — a delayed hide when `hideWithTimeout` is set, otherwise an immediate hide.\n * @docs-private */\n getMouseLeaveListener() {\n if (this.hideWithTimeout) {\n return () => setTimeout(() => this.hide(), this.leaveDelay);\n }\n\n return this.hide;\n }\n\n /** Updates the position of the current popover.\n * @docs-private */\n updatePosition(reapplyPosition: boolean = false) {\n this.overlayRef = this.createOverlay();\n\n this.subscribeOnClosingActions();\n\n const position = (this.overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy)\n .withPositions(this.getAdjustedPositions())\n .withPush(true);\n\n if (reapplyPosition) {\n setTimeout(() => position.reapplyLastPosition());\n }\n }\n\n /** Moves browser focus to the pop-up's native element.\n * @docs-private */\n focus() {\n this.getNativeElement().focus();\n }\n\n /** Returns the element the pop-up is bound to: the external element when set, otherwise the host element.\n * @docs-private */\n getNativeElement(): HTMLElement {\n return this.externalNativeElement || this.elementRef.nativeElement;\n }\n\n /** Sets an external element to anchor and measure the pop-up against instead of the host element.\n * @docs-private */\n setExternalNativeElement(value: HTMLElement) {\n this.externalNativeElement = value;\n }\n\n /**\n * Returns a list of positions that are aligned with the element's dimensions and offsets.\n * @docs-private */\n protected getAdjustedPositions(): ConnectionPositionPair[] {\n const res: ConnectionPositionPair[] = [];\n\n for (const pos of this.getPrioritizedPositions()) {\n const offset: KbqPopupTriggerOffset = this.arrow\n ? getOffset(pos, this.getNativeElement().getBoundingClientRect())\n : {};\n\n res.push({\n ...pos,\n ...offset\n });\n }\n\n return res;\n }\n\n /** Maps a priority placement value (or array of values) to the matching connected position pairs.\n * @docs-private */\n protected getPriorityPlacementStrategy(value: string | string[]): ConnectionPositionPair[] {\n const result: ConnectionPositionPair[] = [];\n const possiblePositions = Object.keys(this.availablePositions);\n\n if (Array.isArray(value)) {\n value.forEach((position: string) => {\n if (possiblePositions.includes(position)) {\n result.push(this.availablePositions[position]);\n }\n });\n } else if (possiblePositions.includes(value)) {\n result.push(this.availablePositions[value]);\n }\n\n return result;\n }\n\n /** Returns the positions to try: the custom `placementPriority` when set, otherwise the default strategy.\n * @docs-private */\n protected getPrioritizedPositions() {\n if (this.placementPriority) {\n return this.getPriorityPlacementStrategy(this.placementPriority);\n }\n\n return POSITION_PRIORITY_STRATEGY[this.placement];\n }\n\n /** Removes all bound host event listeners and clears the listener map.\n * @docs-private */\n protected clearListeners() {\n this.listeners.forEach(this.removeEventListener);\n\n this.listeners.clear();\n }\n\n /** Wraps a trigger handler so it records the active trigger name and mouse event before running. */\n private createListener(name: string, listener: () => void): [string, (event: unknown) => void] {\n return [\n name,\n (event: unknown) => {\n this.triggerName = name;\n this.saveMouseEvent(event as MouseEvent);\n\n return listener.call(this);\n }\n ];\n }\n\n /** Remembers the last mouse event on `mouseenter`, used for cursor-relative positioning. */\n private saveMouseEvent(event: MouseEvent) {\n if (this.triggerName === 'mouseenter') {\n this.mouseEvent = event;\n }\n }\n\n /** Binds a single event listener to the pop-up's native element. */\n private addEventListener = (listener: EventListener, event: string) => {\n this.getNativeElement().addEventListener(event, listener);\n };\n\n /** Unbinds a single event listener from the pop-up's native element. */\n private removeEventListener = (listener: EventListener, event: string) => {\n this.getNativeElement().removeEventListener(event, listener);\n };\n\n /** (Re)subscribes to the closing-action streams and hides the pop-up, ignoring prevented click events. */\n private subscribeOnClosingActions() {\n this.closingActionsSubscription?.unsubscribe();\n\n this.closingActionsSubscription = this.closingActions()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .pipe(rxDelay(0))\n .subscribe((event) => {\n if (event?.type === 'click' && event.kbqPopoverPreventHide) {\n return;\n }\n\n this.hide();\n });\n }\n}\n","import { Overlay, RepositionScrollStrategy, ScrollStrategy } from '@angular/cdk/overlay';\nimport { inject, InjectionToken } from '@angular/core';\n\n/**\n * Minimum option count threshold for displaying select search.\n * Search is hidden when fewer options are available.\n */\nexport const KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD = 10;\n\n/**\n * The select panel will only \"fit\" inside the viewport if it is positioned at\n * this value or more away from the viewport boundary.\n */\nexport const SELECT_PANEL_VIEWPORT_PADDING = 8;\n\n/**\n * Injection token that determines the scroll handling while a select is open.\n *\n * The root default keeps the select usable when it is reached outside `KbqSelectModule`'s injector - imported\n * as a bare standalone component, pulled in through another standalone component (`KbqTimezoneSelect`,\n * `KbqCalendarHeader`), or rendered in a component built from the root injector, as `KbqModalService` does.\n * Providing the token anywhere still wins over this default.\n */\nexport const KBQ_SELECT_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>('kbq-select-scroll-strategy', {\n providedIn: 'root',\n factory: () => kbqSelectScrollStrategyProviderFactory(inject(Overlay))\n});\n\n/** @docs-private */\nexport function kbqSelectScrollStrategyProviderFactory(overlay: Overlay): () => RepositionScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const KBQ_SELECT_SCROLL_STRATEGY_PROVIDER = {\n provide: KBQ_SELECT_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: kbqSelectScrollStrategyProviderFactory\n};\n","import { CdkConnectedOverlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n input,\n OnDestroy,\n Signal,\n viewChild\n} from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { KBQ_FORM_FIELD_REF, KbqFormFieldRef } from '../form-field';\nimport { END, ESCAPE, HOME, SPACE } from '../keycodes';\nimport {\n KBQ_PANEL_DEFAULT_MAX_HEIGHT,\n KbqPanelSpaceContext,\n kbqResolveTriggerFirstRowOffset,\n kbqShouldAnchorPanelToFirstRow\n} from '../overlay/panel-height';\nimport {\n kbqGetPanelWidthOrigin,\n KbqPanelMinWidth,\n KbqPanelWidth,\n KbqPanelWidthOrigin,\n kbqResolvePanelWidth\n} from '../overlay/panel-width';\nimport { KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS } from '../pop-up/constants';\nimport { KBQ_WINDOW } from '../tokens';\nimport { KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD, SELECT_PANEL_VIEWPORT_PADDING } from './constants';\n\n@Directive({\n selector: 'kbq-select-trigger, [kbq-select-trigger]'\n})\nexport class KbqSelectTrigger {}\n\n@Directive({\n selector: 'kbq-select-matcher, [kbq-select-matcher]'\n})\nexport class KbqSelectMatcher {\n readonly useDefaultHandlers = input<boolean, unknown>(true, { transform: booleanAttribute });\n}\n\n@Directive({\n selector: '[kbq-select-search-empty-result]',\n host: {\n class: 'kbq-select-search-empty-result kbq-select__no-options-message'\n },\n exportAs: 'kbqSelectSearchEmptyResult'\n})\nexport class KbqSelectSearchEmptyResult {}\n\n@Directive({\n selector: 'kbq-select-footer, [kbq-select-footer]',\n host: { class: 'kbq-select__footer' }\n})\nexport class KbqSelectFooter {}\n\n/**\n * Action inside a `kbq-select-footer`, drawn as a row of the drop-down menu rather than as a form\n * button. Apply it to a native `button` or `a` so activation and semantics stay native.\n */\n@Directive({\n selector: '[kbq-select-footer-item]',\n host: { class: 'kbq-select__footer-item' }\n})\nexport class KbqSelectFooterItem {}\n\n@Directive({\n selector: '[kbqSelectSearch]',\n host: {\n '(keydown)': 'handleKeydown($event)'\n },\n exportAs: 'kbqSelectSearch'\n})\nexport class KbqSelectSearch implements AfterContentInit, OnDestroy {\n protected formField = inject<KbqFormFieldRef>(KBQ_FORM_FIELD_REF, { optional: true })!;\n\n readonly changes: EventEmitter<string> = new EventEmitter<string>();\n\n isSearchChanged: boolean = false;\n\n get ngControl() {\n return this.formField.control().ngControl;\n }\n\n private searchChangesSubscription: Subscription = new Subscription();\n\n constructor() {\n this.formField.canCleanerClearByEsc = false;\n this.formField.inOverlay.set(true);\n }\n\n setPlaceholder(value: string): void {\n this.formField.control().placeholder = value;\n }\n\n hasPlaceholder(): boolean {\n return !!this.formField?.control.placeholder;\n }\n\n focus(): void {\n this.formField.focus();\n }\n\n reset(): void {\n this.ngControl?.reset();\n }\n\n value() {\n return this.formField.control().value;\n }\n\n ngAfterContentInit(): void {\n if (this.formField.control().controlType !== 'input') {\n throw Error('KbqSelectSearch does not work without kbqInput');\n }\n\n if (!this.ngControl) {\n throw Error('KbqSelectSearch does not work without ngControl');\n }\n\n Promise.resolve().then(() => {\n this.searchChangesSubscription = this.ngControl.valueChanges!.subscribe((value) => {\n this.isSearchChanged = true;\n this.changes.next(value);\n });\n });\n }\n\n ngOnDestroy(): void {\n this.searchChangesSubscription.unsubscribe();\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (event.keyCode === ESCAPE) {\n if (this.value()) {\n this.reset();\n event.stopPropagation();\n }\n }\n\n if ([SPACE, HOME, END].includes(event.keyCode)) {\n event.stopPropagation();\n }\n }\n}\n\n/**\n * Abstract class representing a customizable select component with an overlay.\n *\n * This class provides base functionality for handling the overlay positioning.\n * @docs-private\n */\n@Directive()\nexport abstract class KbqAbstractSelect {\n protected overlayDir: CdkConnectedOverlay;\n protected triggerRect: DOMRect;\n\n /** Positions the `cdkConnectedOverlayPositions` input reads. */\n abstract positions: ConnectedPosition[];\n\n /** Whether the trigger lays its selected values out in rows. */\n protected abstract readonly multiline: Signal<boolean>;\n\n /** Scrollable option list inside the panel. */\n protected abstract readonly optionsContainer: Signal<ElementRef<HTMLElement> | undefined>;\n\n /** Margin the overlay keeps from the viewport edge, i.e. `cdkConnectedOverlayViewportMargin`. */\n protected abstract readonly viewportMargin: number;\n\n /**\n * Row container of a multi-selection trigger. Absent for a single value, an empty trigger and a custom\n * matcher or trigger — all of which have no rows for the panel to anchor to.\n */\n protected readonly multilineMatchList = viewChild<ElementRef<HTMLElement>>('multilineMatchList');\n\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n protected readonly window = inject(KBQ_WINDOW);\n\n /** Whether the panel is open. Declared as a method because the two selects spell the state differently. */\n protected abstract isPanelOpen(): boolean;\n\n /** Element the overlay is positioned and sized against. */\n protected abstract getOverlayOriginElement(): HTMLElement | undefined;\n\n /** Overlay panel class. */\n protected readonly overlayPanelClass = 'kbq-select-overlay';\n\n /** Width of the overlay panel. */\n protected overlayWidth: string | number = '';\n\n /** Minimum width of the overlay panel. */\n protected overlayMinWidth: string | number = '';\n\n /**\n * Height of everything in the panel that is not the option list — the trigger gap the pane pads itself\n * with, the list padding, a search field and a footer.\n *\n * The same for every anchor: the below and overlap panes pad the top, the above pane pads the bottom, and\n * all three pad by the same gap — which is what keeps the anchor decision from feeding back into itself.\n */\n private panelChromeHeight = 0;\n\n /** Transparent gap the pane pads itself with, which the anchor has to be raised by. */\n private panelGapHeight = 0;\n\n /**\n * Cap the option list is rendered with, in pixels. Measured off the panel rather than derived from\n * `panelMaxHeight`, because `--kbq-select-panel-size-max-height` is what the list actually obeys and a\n * consumer can override it. Seeded with the stylesheet's own default, which is what a DOM that computes\n * no layout — the server, jsdom — leaves in force.\n */\n private panelMaxHeightCap = KBQ_PANEL_DEFAULT_MAX_HEIGHT;\n\n private resizeSubscription = Subscription.EMPTY;\n\n /**\n * Resolves the overlay panel size for the current trigger geometry and stores it for the\n * `cdkConnectedOverlay` width bindings.\n */\n protected updateOverlayWidth(\n panelWidth: KbqPanelWidth,\n panelMinWidth: KbqPanelMinWidth,\n origin: KbqPanelWidthOrigin\n ): void {\n const { width, minWidth } = kbqResolvePanelWidth(panelWidth, panelMinWidth, kbqGetPanelWidthOrigin(origin));\n\n this.overlayWidth = width;\n this.overlayMinWidth = minWidth;\n }\n\n /**\n * Freezes the panel at its rendered width so that filtering the options does not reflow it.\n * Does nothing when the width is already pinned.\n */\n protected lockOverlayWidthForSearch(panel: ElementRef<HTMLElement> | undefined): void {\n // Compare against the unset sentinel rather than a truthy check — an explicit zero-width panel\n // resolves to `'0px'`, and a measured width below can be `0`; both mean \"already pinned\".\n if (this.overlayWidth !== '') return;\n\n const measuredPanelWidth = panel?.nativeElement.getBoundingClientRect().width;\n\n if (measuredPanelWidth) {\n this.overlayWidth = measuredPanelWidth;\n }\n }\n\n protected setOverlayPosition() {\n // As in `reanchorPanel()`: a disposed overlay keeps its `overlayRef` but loses `hostElement`, and an\n // expansion or selection change can still arrive once the select has closed for good.\n if (!this.overlayDir.overlayRef?.hostElement) return;\n\n this.resetOverlay();\n\n const overlayRect = this.getOverlayRect();\n // Window width without scrollbar\n const windowWidth = this.overlayDir.overlayRef?.hostElement.clientWidth;\n let offsetX: number = 0;\n let overlayMaxWidth: number;\n\n // Determine if select overflows on either side.\n const leftOverflow = -overlayRect.left;\n const rightOverflow = overlayRect.right - windowWidth;\n\n // If the element overflows on either side, reduce the offset to allow it to fit.\n if (leftOverflow > 0 || rightOverflow > 0) {\n [offsetX, overlayMaxWidth] = this.calculateOverlayOffsetX(offsetX);\n this.overlayDir.overlayRef.overlayElement.style.maxWidth = `${overlayMaxWidth}px`;\n // reset the minWidth property\n this.overlayDir.overlayRef.overlayElement.style.minWidth = '';\n }\n\n // Set the offset directly in order to avoid having to go through change detection and\n // potentially triggering \"changed after it was checked\" errors. Round the value to avoid\n // blurry content in some browsers.\n this.overlayDir.offsetX = Math.round(offsetX);\n this.overlayDir.overlayRef.updatePosition();\n }\n\n protected calculateOverlayOffsetX(baseOffsetX: number): number[] {\n let offsetX = baseOffsetX;\n const windowWidth = this.overlayDir.overlayRef?.hostElement.clientWidth;\n const { left: leftIndent, right: triggerRight, width: triggerWidth } = this.triggerRect;\n const { width: overlayRectWidth } = this.getOverlayRect();\n const rightIndent = windowWidth - triggerRight;\n // Setting direction of dropdown expansion\n const isRightDirection = leftIndent <= rightIndent;\n\n const indent = isRightDirection ? rightIndent : leftIndent;\n const maxDropdownWidth = indent + triggerWidth - SELECT_PANEL_VIEWPORT_PADDING;\n const overlayMaxWidth = overlayRectWidth < maxDropdownWidth ? overlayRectWidth : maxDropdownWidth;\n\n if (!isRightDirection) {\n const leftOffset = triggerRight - overlayMaxWidth;\n\n offsetX -= leftIndent - leftOffset;\n }\n\n return [offsetX, overlayMaxWidth];\n }\n\n protected getOverlayRect(): DOMRect {\n return this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();\n }\n\n protected resetOverlay(): void {\n this.overlayDir.overlayRef.hostElement.classList.add(this.overlayPanelClass);\n this.overlayDir.offsetX = 0;\n this.overlayDir.overlayRef.overlayElement.style.maxWidth = 'unset';\n this.overlayDir.overlayRef.updatePosition();\n }\n\n /**\n * Returns `positions` with the first-row anchor added, updated or removed, or `null` when the array\n * already says what it should — so that the caller can skip the change detection an edit would need.\n *\n * The anchor goes LAST. The overlay returns on the first position that fits completely, so an entry at the\n * end is reached exactly when neither the below nor the above position works, which is the rule this\n * implements. Pass `null` to drop it again.\n *\n * The result is meant to be assigned to the field the `cdkConnectedOverlayPositions` input reads, NOT\n * handed to `withPositions()` on the strategy: `CdkConnectedOverlay.ngOnChanges` rebuilds the strategy\n * from that field on ANY input change — the width `lockOverlayWidthForSearch` pins is one — so a list\n * applied only to the strategy would be dropped again without a trace.\n */\n protected withOverlapPosition(positions: ConnectedPosition[], offsetY: number | null): ConnectedPosition[] | null {\n // `panelClass` is `string | string[]`, and `positions` is public, so an anchor can come back in a\n // shape a strict comparison would miss — which would append a second anchor on every recompute and\n // leave every one of them behind on close.\n const isOverlap = ({ panelClass }: ConnectedPosition) =>\n Array.isArray(panelClass)\n ? panelClass.includes(KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS)\n : panelClass === KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS;\n const current = positions.find(isOverlap);\n const withoutOverlap = () => positions.filter((position) => !isOverlap(position));\n\n if (offsetY === null) return current ? withoutOverlap() : null;\n\n // Rounded so that sub-pixel layout jitter cannot rebuild the array on every selection change.\n const roundedOffsetY = Math.round(offsetY);\n\n if (current?.offsetY === roundedOffsetY) return null;\n\n return [\n ...withoutOverlap(),\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: roundedOffsetY,\n panelClass: KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS\n }\n ];\n }\n\n /**\n * Re-resolves the panel position with the first-row anchor brought up to date.\n *\n * Never call this from a `positionChange` subscriber: CDK records the position it applied AFTER the\n * subscriber returns, so an anchor resolved from inside that frame is overwritten by the pre-anchor\n * position, and `cdkConnectedOverlayLockPosition` then replays that stale one on the next scroll.\n */\n protected reanchorPanel(): void {\n // `hostElement` is nulled by `OverlayRef.dispose()`, which is what a queued call landing after the\n // component was destroyed has to be told apart by — `overlayRef` itself outlives disposal.\n if (!this.overlayDir?.overlayRef?.hostElement) return;\n\n // Only when the anchor actually moved. `setOverlayPosition()` is a one-shot: it clears the pane's\n // `minWidth` and derives the panel offset from the width it had before that, so a second run over\n // the same open measures a narrower pane. In RTL the pane's x is `documentWidth - (x + paneWidth)`,\n // so that narrower measurement moves the panel; in LTR only `left` is written and nothing moves.\n if (this.updatePanelAnchor()) {\n this.setOverlayPosition();\n }\n }\n\n /**\n * Re-resolves the anchor while the panel is open. A resize rewraps the trigger's rows and changes the\n * room beside it at once, and CDK re-applies the position on its own, so without this the anchor it\n * resolves against is the one measured for the old viewport.\n */\n protected subscribeToPanelResize(): void {\n this.resizeSubscription.unsubscribe();\n\n if (!this.multiline()) return;\n\n this.resizeSubscription = fromEvent(this.window, 'resize')\n .pipe(debounceTime(50))\n .subscribe(() => this.reanchorPanel());\n }\n\n /** Drops the resize subscription the open set up. */\n protected unsubscribeFromPanelResize(): void {\n this.resizeSubscription.unsubscribe();\n }\n\n /**\n * Keeps the first-row anchor in `positions`: a third position that puts the panel just below the\n * trigger's first row and over the rest of it, for a multiline trigger that has grown taller than the\n * panel and fits on neither side of it.\n *\n * The anchor goes last, and the overlay stops at the first position that fits completely, so it is\n * reached exactly when neither `below` nor `above` works. `kbqShouldAnchorPanelToFirstRow` holds the\n * rest of the rule.\n *\n * Returns whether the array changed, so that a caller can skip the reposition an unchanged anchor does\n * not need. Updating the array is all there is to do here — `setOverlayPosition()` rebuilds the strategy\n * and resolves the position again.\n */\n protected updatePanelAnchor(): boolean {\n if (!this.multiline() || !this.isPanelOpen() || !this.overlayDir?.overlayRef) return false;\n\n // A measurement that cannot be trusted would leave the seeds in force, and a zero chrome height\n // overstates the room beside the trigger by the whole of a search field and a footer.\n if (!this.measurePanelChrome()) return false;\n\n const context = this.resolvePanelSpaceContext();\n\n if (!context) return false;\n\n const firstRowOffset = this.resolveFirstRowOffset();\n const anchorToFirstRow = kbqShouldAnchorPanelToFirstRow(context, {\n firstRowOffset,\n naturalListHeight: this.measureNaturalListHeight(),\n anchored: this.isPanelAnchoredToFirstRow()\n });\n // The pane pads the gap inside itself, so the anchor is raised by it: the painted panel then starts\n // where the second row does, instead of leaving the top of that row's tags showing through the band.\n const offsetY = anchorToFirstRow && firstRowOffset !== null ? firstRowOffset - this.panelGapHeight : null;\n const positions = this.withOverlapPosition(this.positions, offsetY);\n\n if (!positions) return false;\n\n this.positions = positions;\n // Pushes the new array into `CdkConnectedOverlay`: the strategy is rebuilt from the directive's\n // input, not from this field, so without this the reposition would resolve against the old list.\n this.changeDetectorRef.detectChanges();\n\n return true;\n }\n\n /**\n * Distance from the origin's top edge to just below the trigger's first row, or `null` when there is no\n * row to anchor to.\n */\n private resolveFirstRowOffset(): number | null {\n const origin = this.getOverlayOriginElement();\n const list = this.multilineMatchList()?.nativeElement;\n\n if (!origin || !list) return null;\n\n // The rows follow document order, so the scan stops at the first child that starts lower. Collapsed\n // children are skipped: a custom tag template can render a hidden node, and its all-zero rect would\n // otherwise be taken for the topmost row and push every real tag out of it.\n let firstRowTop: number | null = null;\n let firstRowBottom = Number.NEGATIVE_INFINITY;\n\n for (const child of Array.from(list.children)) {\n const { top, bottom, width, height } = child.getBoundingClientRect();\n\n // A collapsed child occupies no row and adds nothing to one, so it is skipped whichever way it\n // collapsed — its rect would otherwise be read as a row of its own.\n if (width === 0 || height === 0) continue;\n\n if (firstRowTop === null) {\n firstRowTop = top;\n // Sub-pixel layout only makes the tops of one row equal to within a pixel, and a custom tag\n // template can put several elements on the same row.\n } else if (top - firstRowTop >= 1) {\n break;\n }\n\n firstRowBottom = Math.max(firstRowBottom, bottom);\n }\n\n if (firstRowTop === null) return null;\n\n const originRect = origin.getBoundingClientRect();\n const listRect = list.getBoundingClientRect();\n\n return kbqResolveTriggerFirstRowOffset({\n originTop: originRect.top,\n originBottom: originRect.bottom,\n listTop: listRect.top,\n listBottom: listRect.bottom,\n firstRowBottom,\n // The rows keep their laid-out position while their container scrolls, so the scroll offset is\n // what converts them back into the list's own coordinates.\n listScrollTop: list.scrollTop\n });\n }\n\n /**\n * Height the option list takes with no viewport clamp in force.\n *\n * Read from `scrollHeight`, which reports the whole content rather than what the pane happens to show\n * right now — the anchor decision runs on a pane the overlay may be about to move.\n */\n private measureNaturalListHeight(): number {\n if (this.isListHeightPinnedToCap()) return this.panelMaxHeightCap;\n\n const content = this.optionsContainer()?.nativeElement;\n\n if (!content) return this.panelMaxHeightCap;\n\n // `clientHeight` less the computed content box is the list's own vertical padding, which\n // `scrollHeight` counts and the cap does not.\n const padding = content.clientHeight - parseFloat(this.window.getComputedStyle(content).height);\n\n return Math.min(this.panelMaxHeightCap, content.scrollHeight - (Number.isFinite(padding) ? padding : 0));\n }\n\n /**\n * Whether the option list renders at the cap whatever its content is, which a\n * `cdk-virtual-scroll-viewport` does by pinning both its `min-height` and its `max-height` to the token.\n */\n protected isListHeightPinnedToCap(): boolean {\n return false;\n }\n\n /** Geometry the panel height calculation needs, or `null` when there is nothing to measure against. */\n private resolvePanelSpaceContext(): KbqPanelSpaceContext | null {\n const origin = this.getOverlayOriginElement();\n\n if (!origin) return null;\n\n const { top, bottom } = origin.getBoundingClientRect();\n\n return {\n triggerTop: top,\n triggerBottom: bottom,\n // `clientHeight`, not `innerHeight`: the overlay narrows the viewport the same way, and the two\n // differ by the horizontal scrollbar — enough for a position we think fits to be rejected.\n viewportHeight: this.window.document.documentElement.clientHeight,\n viewportMargin: this.viewportMargin,\n chromeHeight: this.panelChromeHeight\n };\n }\n\n /** Whether the panel is currently drawn over the trigger, read from the class the overlay applies. */\n private isPanelAnchoredToFirstRow(): boolean {\n return this.overlayDir.overlayRef.overlayElement.classList.contains(KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS);\n }\n\n /**\n * Records the part of the panel that is not the option list, the gap the pane pads itself with, and the\n * cap the list is rendered with. Returns `false` when the panel cannot be measured, which is the caller's\n * signal to leave the anchor alone rather than decide against a stale value.\n */\n private measurePanelChrome(): boolean {\n const pane = this.overlayDir.overlayRef.overlayElement;\n const content = this.optionsContainer()?.nativeElement;\n\n if (!content) return false;\n\n // `--kbq-select-panel-size-max-height` caps the list's *content box* — the scroller is `box-sizing:\n // initial` — so its own padding counts as chrome. The computed `height` is that content box, which is\n // exactly what the cap has to be measured against.\n const { height, maxHeight } = this.window.getComputedStyle(content);\n const { paddingTop, paddingBottom } = this.window.getComputedStyle(pane);\n const chromeHeight = pane.getBoundingClientRect().height - parseFloat(height);\n const cap = parseFloat(maxHeight);\n\n if (!Number.isFinite(chromeHeight) || chromeHeight < 0) return false;\n\n this.panelChromeHeight = chromeHeight;\n // Whichever side the current position pads, the gap is the same one the anchored pane will pad.\n this.panelGapHeight = Math.max(parseFloat(paddingTop) || 0, parseFloat(paddingBottom) || 0);\n\n // `none`, `''` and a DOM without layout all yield NaN, which leaves the seed in force.\n if (Number.isFinite(cap) && cap > 0) {\n this.panelMaxHeightCap = cap;\n }\n\n return true;\n }\n\n protected resolveSearchMinOptionsThreshold(value?: 'auto' | number) {\n return value === 'auto' ? KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD : value;\n }\n}\n","import { isDevMode } from '@angular/core';\n\n/**\n * Runs a consumer-supplied `compareWith` defensively: a comparator that throws is reported in dev mode\n * and treated as \"no match\", so one bad comparison cannot take a whole selection down with it.\n *\n * Callers own the `null` policy — `KbqSelect` refuses to match a `null` option value, `KbqListSelection`\n * lets the comparator decide — so nothing is filtered here.\n *\n * @docs-private\n */\nexport function runCompareWith<T>(compareWith: (o1: T, o2: T) => boolean, first: T, second: T): boolean {\n try {\n return compareWith(first, second);\n } catch (error) {\n if (isDevMode()) {\n // Notify developers of errors in their comparator.\n // eslint-disable-next-line no-console\n console.warn(error);\n }\n\n return false;\n }\n}\n","/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * @docs-private\n */\nexport function getKbqSelectDynamicMultipleError(): Error {\n return Error('Cannot change `multiple` mode of select after initialization.');\n}\n\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nexport function getKbqSelectNonArrayValueError(): Error {\n return Error('Value must be an array in multiple-selection mode.');\n}\n\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nexport function getKbqSelectNonFunctionValueError(): Error {\n return Error('`compareWith` must be a function.');\n}\n","export const selectEvents = 'selectEvents';\n","import { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class KbqMeasureScrollbarService {\n protected readonly document = inject<Document>(DOCUMENT);\n private readonly platform = inject(Platform);\n\n get scrollBarWidth(): number {\n if (this._scrollBarWidth) {\n return this._scrollBarWidth;\n }\n\n this.initScrollBarWidth();\n\n return this._scrollBarWidth;\n }\n\n private _scrollBarWidth: number;\n private scrollbarMeasure = {\n position: 'absolute',\n top: '-9999px',\n width: '50px',\n height: '50px',\n overflow: 'scroll'\n };\n\n constructor() {\n this.initScrollBarWidth();\n }\n\n initScrollBarWidth() {\n if (!this.platform.isBrowser) {\n this._scrollBarWidth = 0;\n\n return;\n }\n\n const scrollDiv = this.document.createElement('div');\n\n for (const scrollProp in this.scrollbarMeasure) {\n if (this.scrollbarMeasure.hasOwnProperty(scrollProp)) {\n scrollDiv.style[scrollProp] = this.scrollbarMeasure[scrollProp];\n }\n }\n\n this.document.body.appendChild(scrollDiv);\n\n const width = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\n this.document.body.removeChild(scrollDiv);\n this._scrollBarWidth = width;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, OnDestroy, Renderer2, RendererFactory2 } from '@angular/core';\nimport { BehaviorSubject, pairwise, Subscription } from 'rxjs';\n\nexport interface KbqTheme {\n name: string;\n className: string;\n selected: boolean;\n}\n\n/**\n * Enum representing the available themes for the Koobiq design system.\n * This enum is used to manage and switch between different visual themes.\n */\nexport enum KbqThemeSelector {\n /**\n * Represents the default light theme.\n * This is the standard theme that is applied\n * when the application is first loaded if nothing else provided\n */\n Default = 'kbq-light',\n /**\n * This theme is used to provide a darker visual experience, often preferred in low-light environments.\n */\n Dark = 'kbq-dark'\n}\n\nexport const KbqDefaultThemes: KbqTheme[] = [\n {\n name: 'light',\n className: KbqThemeSelector.Default,\n selected: true\n },\n {\n name: 'dark',\n className: KbqThemeSelector.Dark,\n selected: false\n }\n];\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService<T extends KbqTheme | null = KbqTheme> implements OnDestroy {\n protected readonly document = inject<Document>(DOCUMENT);\n protected readonly rendererFactory = inject(RendererFactory2);\n protected renderer: Renderer2;\n\n current: BehaviorSubject<T> = new BehaviorSubject(null as T);\n\n themes: T[] = KbqDefaultThemes as T[];\n\n protected subscription: Subscription;\n\n constructor() {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n\n this.subscription = this.current.pipe(pairwise()).subscribe(this.update);\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n setThemes(items: T[]) {\n this.themes = items;\n }\n\n setTheme(value: T | number) {\n if (typeof value === 'number') {\n this.current.next(this.themes[value]);\n } else if (typeof value === 'object' && this.themes.includes(value)) {\n this.current.next(value);\n } else {\n throw Error(`value has unsupported type: ${typeof value}`);\n }\n }\n\n getTheme(): T {\n return this.current.value;\n }\n\n protected update = ([prev, current]: T[]) => {\n if (prev) {\n prev.selected = false;\n this.renderer.removeClass(this.document.body, prev.className);\n }\n\n if (current) {\n this.renderer.addClass(this.document.body, current.className);\n current.selected = true;\n }\n };\n}\n","/* eslint-disable no-restricted-globals -- testing utilities legitimately use raw `document`/`window` */\n\n/** Creates a browser MouseEvent with the specified options. */\nexport function createMouseEvent(type: string, x = 0, y = 0, button = 0) {\n const event = document.createEvent('MouseEvent');\n\n event.initMouseEvent(\n type,\n false,\n false,\n window /* view */,\n 0,\n x /* screenX */,\n y /* screenY */,\n x /* clientX */,\n y /* clientY */,\n false,\n false,\n false,\n false,\n button /* button */,\n null\n );\n\n return event;\n}\n\n/** Creates a browser TouchEvent with the specified pointer coordinates. */\nexport function createTouchEvent(type: string, pageX = 0, pageY = 0) {\n // In favor of creating events that work for most of the browsers, the event is created\n // as a basic UI Event. The necessary details for the event will be set manually.\n const event = document.createEvent('UIEvent');\n const touchDetails = { pageX, pageY };\n\n (event as any).initUIEvent(type, true, true, window, 0);\n\n // Most of the browsers don't have a \"initTouchEvent\" method that can be used to define\n // the touch details.\n Object.defineProperties(event, {\n touches: { value: [touchDetails] }\n });\n\n return event;\n}\n\n/** Dispatches a keydown event from an element. */\nexport function createKeyboardEvent(type: string, keyCode: number, target?: Element, key?: string) {\n const event = document.createEvent('KeyboardEvent') as any;\n\n // Firefox does not support `initKeyboardEvent`, but supports `initKeyEvent`.\n if (event.initKeyEvent) {\n event.initKeyEvent(type, true, true, window, 0, 0, 0, 0, 0, keyCode);\n } else {\n event.initKeyboardEvent(type, true, true, window, 0, key, 0, '', false);\n }\n\n // Webkit Browsers don't set the keyCode when calling the init function.\n // See related bug https://bugs.webkit.org/show_bug.cgi?id=16735\n Object.defineProperties(event, {\n keyCode: { get: () => keyCode },\n key: { get: () => key }\n });\n\n // Only override `target` when explicitly provided; otherwise let jsdom set it during dispatch.\n if (target !== undefined) {\n Object.defineProperty(event, 'target', { get: () => target });\n }\n\n return event;\n}\n\n/** Creates a fake event object with any desired event type. */\nexport function createFakeEvent(type: string, canBubble = false, cancelable = true) {\n const event = document.createEvent('Event');\n\n event.initEvent(type, canBubble, cancelable);\n\n return event;\n}\n","import { createFakeEvent, createKeyboardEvent, createMouseEvent, createTouchEvent } from './event-objects';\n\n/** Utility to dispatch any event on a Node. */\nexport function dispatchEvent(node: Node | Window, event: Event): Event {\n node.dispatchEvent(event);\n\n return event;\n}\n\n/** Shorthand to dispatch a fake event on a specified node. */\nexport function dispatchFakeEvent(node: Node | Window, type: string, canBubble?: boolean): Event {\n return dispatchEvent(node, createFakeEvent(type, canBubble));\n}\n\n/** Shorthand to dispatch a keyboard event with a specified key code and, optionally, a `KeyboardEvent.key`. */\nexport function dispatchKeyboardEvent(\n node: Node,\n type: string,\n keyCode: number,\n target?: Element,\n key?: string\n): KeyboardEvent {\n return dispatchEvent(node, createKeyboardEvent(type, keyCode, target, key)) as KeyboardEvent;\n}\n\n/** Shorthand to dispatch a mouse event on the specified coordinates. */\nexport function dispatchMouseEvent(\n node: Node,\n type: string,\n x = 0,\n y = 0,\n event = createMouseEvent(type, x, y)\n): MouseEvent {\n return dispatchEvent(node, event) as MouseEvent;\n}\n\n/** Shorthand to dispatch a touch event on the specified coordinates. */\nexport function dispatchTouchEvent(node: Node, type: string, x = 0, y = 0) {\n return dispatchEvent(node, createTouchEvent(type, x, y));\n}\n","import { dispatchFakeEvent } from './dispatch-events';\n\n/**\n * Patches an elements focus and blur methods to emit events consistently and predictably.\n * This is necessary, because some browsers, like IE11, will call the focus handlers asynchronously,\n * while others won't fire them at all if the browser window is not focused.\n */\nexport function patchElementFocus(element: HTMLElement) {\n element.focus = () => dispatchFakeEvent(element, 'focus');\n element.blur = () => dispatchFakeEvent(element, 'blur');\n}\n","import { EventEmitter, Injectable, NgZone } from '@angular/core';\n\n/**\n * Mock synchronous NgZone implementation that can be used\n * to flush out `onStable` subscriptions in tests.\n *\n * via: https://github.com/angular/angular/blob/master/packages/core/testing/src/ng_zone_mock.ts\n * @docs-private\n */\n@Injectable()\nexport class MockNgZone extends NgZone {\n onStable: EventEmitter<any> = new EventEmitter(false);\n\n constructor() {\n super({ enableLongStackTrace: false });\n }\n\n run(fn: () => void): any {\n return fn();\n }\n\n runOutsideAngular(fn: () => void): any {\n return fn();\n }\n\n simulateZoneExit(): void {\n this.onStable.emit(null);\n }\n}\n","import { dispatchFakeEvent } from './dispatch-events';\n\n/**\n * Focuses an input, sets its value and dispatches\n * the `input` event, simulating the user typing.\n * @param value Value to be set on the input.\n * @param element Element onto which to set the value.\n */\nexport function typeInElement(value: string, element: HTMLInputElement) {\n element.focus();\n element.value = value;\n dispatchFakeEvent(element, 'input');\n}\n","export function wrappedErrorMessage(e: Error) {\n const escapedMessage = e.message.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n return new RegExp(escapedMessage);\n}\n","/**\n * @docs-private\n */\nexport const validationTooltipShowDelay = 10;\n\n/**\n * @docs-private\n */\nexport const validationTooltipHideDelay = 3000;\n","import { Version } from '@angular/core';\n\nexport const VERSION = new Version('20.4.1+sha-b56aea5');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map","BaseDateAdapter","BaseDateFormatter","KbqDateAdapter","i1.KbqPseudoCheckbox","rxDelay"],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-core.mjs","sources":["../../../packages/components/core/keycodes/keycodes.ts","../../../packages/components/core/a11y/key-manager/list-key-manager.ts","../../../packages/components/core/a11y/key-manager/activedescendant-key-manager.ts","../../../packages/components/core/a11y/key-manager/focus-key-manager.ts","../../../packages/components/core/a11y/leave-tab-order.ts","../../../packages/components/core/tokens/window.ts","../../../packages/components/core/animation/animations-state.ts","../../../packages/components/core/common-behaviors/autofill.ts","../../../packages/components/core/common-behaviors/checkable.ts","../../../packages/components/core/common-behaviors/clipboard.ts","../../../packages/components/core/common-behaviors/color.ts","../../../packages/components/core/common-behaviors/error-state.ts","../../../packages/components/core/common-behaviors/read-state.ts","../../../packages/components/core/common-behaviors/index.ts","../../../packages/components/core/datetime/date-adapter.ts","../../../packages/components/core/datetime/date-formats.ts","../../../packages/components/core/datetime/timezone.ts","../../../packages/components/core/error/error-state-matcher.ts","../../../packages/components/core/form-field/caret-origin.ts","../../../packages/components/core/form-field/text-ruler.ts","../../../packages/components/core/form-field/caret-rect.ts","../../../packages/components/core/form-field/caret-tracking.ts","../../../packages/components/core/utils/dom.ts","../../../packages/components/core/utils/delay-loading-indicator.ts","../../../packages/components/core/utils/query-list.ts","../../../packages/components/core/utils/utils.ts","../../../packages/components/core/form-field/field-sizing-content.ts","../../../packages/components/core/form-field/form-field-ref.ts","../../../packages/components/core/form-field/text-field-selection.ts","../../../packages/components/core/form-field/text-mirror.ts","../../../packages/components/core/form-field/text-query.ts","../../../packages/components/core/locales/en-US.ts","../../../packages/components/core/locales/es-LA.ts","../../../packages/components/core/locales/formatters.ts","../../../packages/components/core/locales/pt-BR.ts","../../../packages/components/core/locales/ru-RU.ts","../../../packages/components/core/locales/tk-TM.ts","../../../packages/components/core/locales/locale-service.ts","../../../packages/components/core/locales/configuration.ts","../../../packages/components/core/locales/a11y.ts","../../../packages/components/core/locales/popover-confirm.ts","../../../packages/components/core/locales/select.ts","../../../packages/components/core/locales/locale-overrides.directive.ts","../../../packages/components/core/locales/locale-service.module.ts","../../../packages/components/core/formatters/date/formatter.ts","../../../packages/components/core/formatters/date/formatter.pipe.ts","../../../packages/components/core/formatters/filesize/config.ts","../../../packages/components/core/formatters/number/formatter.ts","../../../packages/components/core/formatters/filesize/size.ts","../../../packages/components/core/formatters/filesize/formatter.ts","../../../packages/components/core/formatters/index.ts","../../../packages/components/core/forms/forms.directive.ts","../../../packages/components/core/forms/forms-module.ts","../../../packages/components/core/forms/validators.ts","../../../packages/components/core/search/search-base.ts","../../../packages/components/core/highlight/highlight-base.ts","../../../packages/components/core/highlight/highlight-background.pipe.ts","../../../packages/components/core/highlight/highlight.pipe.ts","../../../packages/components/core/highlight/highlight-bold.pipe.ts","../../../packages/components/core/highlight/index.ts","../../../packages/components/core/option/action.ts","../../../packages/components/core/option/action-container.ts","../../../packages/components/core/option/optgroup.ts","../../../packages/components/core/option/optgroup.html","../../../packages/components/core/selection/constants.ts","../../../packages/components/core/selection/pseudo-checkbox/pseudo-checkbox.ts","../../../packages/components/core/selection/pseudo-checkbox/pseudo-checkbox.partial.html","../../../packages/components/core/selection/pseudo-checkbox/pseudo-checkbox.module.ts","../../../packages/components/core/selection/select-all.ts","../../../packages/components/core/title/title-text-ref.ts","../../../packages/components/core/option/option.ts","../../../packages/components/core/option/option.html","../../../packages/components/core/option/option-module.ts","../../../packages/components/core/overflow-shadow/overflow-shadow.ts","../../../packages/components/core/overlay/scroll-strategy-utils.ts","../../../packages/components/core/overlay/auto-hide-scroll-strategy.ts","../../../packages/components/core/overlay/overlay-layer.ts","../../../packages/components/core/overlay/overlay-origin.ts","../../../packages/components/core/overlay/overlay-position-map.ts","../../../packages/components/core/overlay/panel-height.ts","../../../packages/components/core/overlay/panel-width.ts","../../../packages/components/core/overlay/reposition-scroll-strategy.ts","../../../packages/components/core/overlay/safe-area.ts","../../../packages/components/core/overlay/shadow-dom-overlay-container.ts","../../../packages/components/core/pop-up/constants.ts","../../../packages/components/core/pop-up/focus-trap-strategy.ts","../../../packages/components/core/pop-up/pop-up.ts","../../../packages/components/core/pop-up/pop-up-styles.ts","../../../packages/components/core/pop-up/pop-up-trigger.ts","../../../packages/components/core/select/clear-predicate.ts","../../../packages/components/core/select/constants.ts","../../../packages/components/core/select/common.ts","../../../packages/components/core/select/compare-with.ts","../../../packages/components/core/select/errors.ts","../../../packages/components/core/services/measure-scrollbar.service.ts","../../../packages/components/core/services/theme.service.ts","../../../packages/components/core/state-saving/state-saving-key.ts","../../../packages/components/core/state-saving/state-store.ts","../../../packages/components/core/state-saving/state-saving-service.ts","../../../packages/components/core/state-saving/state-saving.ts","../../../packages/components/core/testing/event-objects.ts","../../../packages/components/core/testing/dispatch-events.ts","../../../packages/components/core/testing/element-focus.ts","../../../packages/components/core/testing/type-in-element.ts","../../../packages/components/core/testing/wrapped-error-message.ts","../../../packages/components/core/validation/validation.ts","../../../packages/components/core/version.ts","../../../packages/components/core/koobiq-components-core.ts"],"sourcesContent":["import { _getEventTarget } from '@angular/cdk/platform';\n\nexport const MAC_ENTER = 3;\nexport const BACKSPACE = 8;\nexport const TAB = 9;\nexport const NUM_CENTER = 12;\nexport const ENTER = 13;\nexport const SHIFT = 16;\nexport const CONTROL = 17;\nexport const ALT = 18;\nexport const PAUSE = 19;\nexport const CAPS_LOCK = 20;\nexport const ESCAPE = 27;\nexport const SPACE = 32;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const END = 35;\nexport const HOME = 36;\nexport const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const PLUS_SIGN = 43;\nexport const PRINT_SCREEN = 44;\nexport const INSERT = 45;\nexport const DELETE = 46;\nexport const ZERO = 48;\nexport const ONE = 49;\nexport const TWO = 50;\nexport const THREE = 51;\nexport const FOUR = 52;\nexport const FIVE = 53;\nexport const SIX = 54;\nexport const SEVEN = 55;\nexport const EIGHT = 56;\nexport const NINE = 57;\nexport const FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\nexport const FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\nexport const QUESTION_MARK = 63;\nexport const AT_SIGN = 64;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\nexport const META = 91; // WIN_KEY_LEFT\nexport const MAC_WK_CMD_LEFT = 91;\nexport const MAC_WK_CMD_RIGHT = 93;\nexport const CONTEXT_MENU = 93;\nexport const NUMPAD_ZERO = 96;\nexport const NUMPAD_ONE = 97;\nexport const NUMPAD_TWO = 98;\nexport const NUMPAD_THREE = 99;\nexport const NUMPAD_FOUR = 100;\nexport const NUMPAD_FIVE = 101;\nexport const NUMPAD_SIX = 102;\nexport const NUMPAD_SEVEN = 103;\nexport const NUMPAD_EIGHT = 104;\nexport const NUMPAD_NINE = 105;\nexport const NUMPAD_MULTIPLY = 106;\nexport const NUMPAD_PLUS = 107;\nexport const NUMPAD_MINUS = 109;\nexport const NUMPAD_PERIOD = 110;\nexport const NUMPAD_DIVIDE = 111;\nexport const F1 = 112;\nexport const F2 = 113;\nexport const F3 = 114;\nexport const F4 = 115;\nexport const F5 = 116;\nexport const F6 = 117;\nexport const F7 = 118;\nexport const F8 = 119;\nexport const F9 = 120;\nexport const F10 = 121;\nexport const F11 = 122;\nexport const F12 = 123;\nexport const NUM_LOCK = 144;\nexport const SCROLL_LOCK = 145;\nexport const FIRST_MEDIA = 166;\nexport const FF_MINUS = 173;\nexport const MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\nexport const VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\nexport const VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\nexport const FF_MUTE = 181;\nexport const FF_VOLUME_DOWN = 182;\nexport const LAST_MEDIA = 183;\nexport const FF_VOLUME_UP = 183;\nexport const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\nexport const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\nexport const COMMA = 188;\nexport const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\nexport const PERIOD = 190;\nexport const SLASH = 191;\nexport const APOSTROPHE = 192;\nexport const TILDE = 192;\nexport const OPEN_SQUARE_BRACKET = 219;\nexport const BACKSLASH = 220;\nexport const CLOSE_SQUARE_BRACKET = 221;\nexport const SINGLE_QUOTE = 222;\nexport const MAC_META = 224;\n\ntype ModifierKey = 'altKey' | 'shiftKey' | 'ctrlKey' | 'metaKey';\n\nexport function hasModifierKey(event: KeyboardEvent | MouseEvent, ...modifiers: ModifierKey[]): boolean {\n if (modifiers.length) {\n return modifiers.some((modifier) => event[modifier]);\n }\n\n return event.altKey || event.shiftKey || event.ctrlKey || event.metaKey;\n}\n\nexport function isControl(event: KeyboardEvent): boolean {\n const keyCode = event.keyCode;\n\n switch (keyCode) {\n case SHIFT:\n case CONTROL:\n case ALT:\n return true;\n default:\n return event.metaKey;\n }\n}\n\nexport function isNumberKey({ keyCode }: KeyboardEvent): boolean {\n return keyCode >= ZERO && keyCode <= NINE;\n}\n\nexport function isNumpadKey({ keyCode }: KeyboardEvent): boolean {\n return keyCode >= NUMPAD_ZERO && keyCode <= NUMPAD_NINE;\n}\nexport function isLetterKey({ keyCode }: KeyboardEvent): boolean {\n return keyCode >= A && keyCode <= Z;\n}\n\nexport function isFunctionKey({ keyCode }: KeyboardEvent): boolean {\n return keyCode >= F1 && keyCode <= F12;\n}\n\nexport function isVerticalMovement({ keyCode }: KeyboardEvent): boolean {\n return [UP_ARROW, DOWN_ARROW, PAGE_DOWN, PAGE_UP, HOME, END].includes(keyCode);\n}\n\nexport function isHorizontalMovement({ keyCode }: KeyboardEvent): boolean {\n return [LEFT_ARROW, RIGHT_ARROW, BACKSPACE, DELETE].includes(keyCode);\n}\n\nexport function isSelectAll(event: KeyboardEvent): boolean {\n return (event.ctrlKey || event.metaKey) && event.keyCode === A;\n}\n\nexport function isCopy(event: KeyboardEvent): boolean {\n return (event.ctrlKey || event.metaKey) && event.keyCode === C;\n}\n\nexport function isInput(event: Event): boolean {\n const target = _getEventTarget<HTMLElement>(event);\n\n return !!target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA');\n}\n\nexport function isLeftBracket(event: KeyboardEvent): boolean {\n return event.code === 'BracketLeft';\n}\n\nexport function isRightBracket(event: KeyboardEvent): boolean {\n return event.code === 'BracketRight';\n}\n\n/** @deprecated Use {@link isNumberKey}, which checks the same keys. Will be removed in 22.0.0. */\nexport function isDigit({ keyCode }: KeyboardEvent): boolean {\n return [ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE].includes(keyCode);\n}\n","import { QueryList, Signal } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, filter, map, tap } from 'rxjs/operators';\nimport { A, DOWN_ARROW, END, HOME, LEFT_ARROW, NINE, RIGHT_ARROW, TAB, UP_ARROW, Z, ZERO } from '../../keycodes';\n\n// This interface is for items that can be passed to a ListKeyManager.\nexport interface ListKeyManagerOption {\n /** Whether the option is disabled. A signal lets an option expose `disabled` as an `input()`. */\n disabled?: boolean | Signal<boolean>;\n\n // Gets the label for this option.\n getLabel?(): string;\n}\n\nfunction isOptionDisabled(item: ListKeyManagerOption): boolean {\n return typeof item.disabled === 'function' ? item.disabled() : !!item.disabled;\n}\n\n/** Modifier keys handled by the ListKeyManager. */\nexport type ListKeyManagerModifierKey = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey';\n\n/**\n * This class manages keyboard events for selectable lists. If you pass it a query list\n * of items, it will set the active item correctly when arrow events occur.\n */\nexport class ListKeyManager<T extends ListKeyManagerOption> {\n /**\n * Stream that emits any time the TAB key is pressed, so components can react\n * when focus is shifted off of the list.\n */\n tabOut: Subject<void> = new Subject<void>();\n\n /** Stream that emits whenever the active item of the list manager changes. */\n change = new Subject<number>();\n\n previousActiveItemIndex = -1;\n\n // Index of the currently active item.\n get activeItemIndex(): number {\n return this._activeItemIndex;\n }\n\n private _activeItemIndex = -1;\n\n // The active item.\n get activeItem(): T | null {\n return this._activeItem;\n }\n\n private _activeItem: T | null = null;\n\n private wrap: boolean = false;\n private letterKeyStream = new Subject<string>();\n private typeaheadSubscription = Subscription.EMPTY;\n private vertical = true;\n private horizontal: 'ltr' | 'rtl' | null;\n\n private scrollSize: number = 0;\n\n // Buffer for the letters that the user has pressed when the typeahead option is turned on.\n private pressedLetters: string[] = [];\n\n private homeAndEnd = false;\n\n private allowedModifierKeys: ListKeyManagerModifierKey[] = [];\n\n constructor(private _items: QueryList<T>) {\n if (_items instanceof QueryList) {\n _items.changes.subscribe((newItems: QueryList<T>) => {\n if (this._activeItem) {\n const itemArray = newItems.toArray();\n const newIndex = itemArray.indexOf(this._activeItem);\n\n if (newIndex > -1 && newIndex !== this._activeItemIndex) {\n this._activeItemIndex = newIndex;\n }\n }\n });\n }\n }\n\n /** Gets whether the user is currently typing into the manager using the typeahead feature. */\n isTyping(): boolean {\n return this.pressedLetters.length > 0;\n }\n\n withScrollSize(scrollSize: number): this {\n this.scrollSize = scrollSize;\n\n return this;\n }\n\n /**\n * Modifier keys which are allowed to be held down and whose default actions will be prevented\n * as the user is pressing the arrow keys. Defaults to not allowing any modifier keys.\n */\n withAllowedModifierKeys(keys: ListKeyManagerModifierKey[]): this {\n this.allowedModifierKeys = keys;\n\n return this;\n }\n\n /**\n * Turns on wrapping mode, which ensures that the active item will wrap to\n * the other end of list when there are no more items in the given direction.\n */\n\n withWrap(shouldWrap = true): this {\n this.wrap = shouldWrap;\n\n return this;\n }\n\n /**\n * Sets the predicate function that determines which items should be skipped by the\n * list key manager.\n *\n * @param predicate Function that determines whether the given item should be skipped.\n */\n skipPredicate(predicate: (item: T) => boolean): this {\n this.skipPredicateFn = predicate;\n\n return this;\n }\n\n /**\n * Configures whether the key manager should be able to move the selection vertically.\n *\n * @param enabled Whether vertical selection should be enabled.\n */\n withVerticalOrientation(enabled: boolean = true): this {\n this.vertical = enabled;\n\n return this;\n }\n\n /**\n * Configures the key manager to move the selection horizontally.\n * Passing in `null` will disable horizontal movement.\n *\n * @param direction Direction in which the selection can be moved.\n */\n withHorizontalOrientation(direction: 'ltr' | 'rtl' | null): this {\n this.horizontal = direction;\n\n return this;\n }\n\n /**\n * Turns on typeahead mode which allows users to set the active item by typing.\n *\n * @param debounceInterval Time to wait after the last keystroke before setting the active item.\n * @param searchLetterIndex letter index for incremental search, if is -1 search is disabled\n */\n withTypeAhead(debounceInterval: number = 200, searchLetterIndex: number = 0): this {\n if (this._items.length && this._items.some((item) => typeof item.getLabel !== 'function')) {\n throw Error('ListKeyManager items in typeahead mode must implement the `getLabel` method.');\n }\n\n this.typeaheadSubscription.unsubscribe();\n\n // Debounce the presses of non-navigational keys, collect the ones that correspond to letters and convert those\n // letters back into a string. Afterwards find the first item that starts with that string and select it.\n this.typeaheadSubscription = this.letterKeyStream\n .pipe(\n tap((keyCode) => this.pressedLetters.push(keyCode)),\n debounceTime(debounceInterval),\n filter(() => this.pressedLetters.length > 0),\n map(() => this.pressedLetters.join(''))\n )\n .subscribe((inputString) => {\n if (searchLetterIndex === -1) {\n this.pressedLetters = [];\n\n return;\n }\n\n const items = this._items.toArray();\n\n // Start at 1 because we want to start searching at the item immediately\n // following the current active item.\n for (let i = 1; i < items.length + 1; i++) {\n const index = (this._activeItemIndex + i) % items.length;\n const item = items[index];\n\n if (\n !isOptionDisabled(item) &&\n item.getLabel!().toUpperCase().trim().indexOf(inputString) === searchLetterIndex\n ) {\n this.setActiveItem(index);\n break;\n }\n }\n\n this.pressedLetters = [];\n });\n\n return this;\n }\n\n /**\n * Configures the key manager to activate the first and last items\n * respectively when the Home or End key is pressed.\n *\n * @param enabled Whether pressing the Home or End key activates the first/last item.\n */\n withHomeAndEnd(enabled: boolean = true): this {\n this.homeAndEnd = enabled;\n\n return this;\n }\n\n /**\n * Sets the active item to the item at the index specified.\n *\n * @param index The index of the item to be set as active or item The item to be set as active.\n */\n setActiveItem(index: number | T): void;\n\n /**\n * Sets the active item to the item at the index specified.\n *\n * @param item The index of the item to be set as active.\n */\n setActiveItem(item: any): void {\n this.previousActiveItemIndex = this._activeItemIndex;\n\n this.updateActiveItem(item);\n\n // By index, not by identity as in the CDK: autocomplete and tree-select take any `change` while\n // their panel is closed for keyboard navigation, and a re-rendered list keeps its index.\n if (this._activeItemIndex !== this.previousActiveItemIndex) {\n this.change.next(this._activeItemIndex);\n }\n }\n\n /**\n * Sets the active item depending on the key event passed in.\n *\n * @param event Keyboard event to be used for determining which element should be active.\n */\n onKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n const modifiers: ListKeyManagerModifierKey[] = ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'];\n const isModifierAllowed = modifiers.every((modifier) => {\n return !event[modifier] || this.allowedModifierKeys.indexOf(modifier) > -1;\n });\n\n switch (keyCode) {\n case TAB:\n this.tabOut.next();\n\n return;\n\n case DOWN_ARROW:\n if (this.vertical) {\n this.setNextItemActive();\n break;\n } else {\n return;\n }\n\n case UP_ARROW:\n if (this.vertical) {\n this.setPreviousItemActive();\n break;\n } else {\n return;\n }\n\n case RIGHT_ARROW:\n if (this.horizontal === 'ltr') {\n this.setNextItemActive();\n break;\n } else if (this.horizontal === 'rtl') {\n this.setPreviousItemActive();\n break;\n } else {\n return;\n }\n\n case LEFT_ARROW:\n if (this.horizontal === 'ltr') {\n this.setPreviousItemActive();\n break;\n } else if (this.horizontal === 'rtl') {\n this.setNextItemActive();\n break;\n } else {\n return;\n }\n\n case HOME:\n if (this.homeAndEnd && isModifierAllowed) {\n this.setFirstItemActive();\n break;\n } else {\n return;\n }\n\n case END:\n if (this.homeAndEnd && isModifierAllowed) {\n this.setLastItemActive();\n break;\n } else {\n return;\n }\n\n default:\n // Attempt to use the `event.key` which also maps it to the user's keyboard language,\n // otherwise fall back to resolving alphanumeric characters via the keyCode.\n if (event.key && event.key.length === 1) {\n this.letterKeyStream.next(event.key.toLocaleUpperCase());\n } else if ((keyCode >= A && keyCode <= Z) || (keyCode >= ZERO && keyCode <= NINE)) {\n this.letterKeyStream.next(String.fromCharCode(keyCode));\n }\n\n // Note that we return here, in order to avoid preventing\n // the default action of non-navigational keys.\n return;\n }\n\n this.pressedLetters = [];\n event.preventDefault();\n }\n\n // Sets the active item to the first enabled item in the list.\n setFirstItemActive(): void {\n this.setActiveItemByIndex(0, 1);\n }\n\n // Sets the active item to the last enabled item in the list.\n setLastItemActive(): void {\n this.setActiveItemByIndex(this._items.length - 1, -1);\n }\n\n // Sets the active item to the next enabled item in the list.\n setNextItemActive(): void {\n if (this._activeItemIndex < 0) {\n this.setFirstItemActive();\n } else {\n this.setActiveItemByDelta(1);\n }\n }\n\n // Sets the active item to a previous enabled item in the list.\n setPreviousItemActive(): void {\n if (this._activeItemIndex < 0 && this.wrap) {\n this.setLastItemActive();\n } else {\n this.setActiveItemByDelta(-1);\n }\n }\n\n setNextPageItemActive(delta: number = this.scrollSize): void {\n const nextItemIndex = this._activeItemIndex + delta;\n\n if (nextItemIndex >= this._items.length) {\n this.setLastItemActive();\n } else {\n this.setActiveItemByDelta(delta);\n }\n }\n\n setPreviousPageItemActive(delta: number = this.scrollSize): void {\n const nextItemIndex = this._activeItemIndex - delta;\n\n if (nextItemIndex <= 0) {\n this.setFirstItemActive();\n } else {\n this.setActiveItemByDelta(-delta);\n }\n }\n\n /**\n * Allows setting the active without any other effects.\n *\n * @param index Index of the item to be set as active.\n */\n updateActiveItem(index: number): void;\n\n /**\n * Allows setting the active item without any other effects.\n *\n * @param item Item to be set as active or index Index of the item to be set as active..\n */\n updateActiveItem(item: number | T): void;\n\n updateActiveItem(item: any): void {\n const itemArray = this._items.toArray();\n const index = typeof item === 'number' ? item : itemArray.indexOf(item);\n const activeItem = itemArray[index];\n\n // Explicitly against null/undefined: any other falsy value is a legitimate item.\n this._activeItem = activeItem ?? null;\n this._activeItemIndex = index;\n }\n\n /**\n * Predicate function that can be used to check whether an item should be skipped\n * by the key manager. By default, disabled items are skipped.\n */\n private skipPredicateFn = (item: T) => isOptionDisabled(item);\n\n /**\n * This method sets the active item, given a list of items and the delta between the\n * currently active item and the new active item. It will calculate differently\n * depending on whether wrap mode is turned on.\n */\n private setActiveItemByDelta(delta: number): void {\n if (this.wrap) {\n this.setActiveInWrapMode(delta);\n } else {\n this.setActiveInDefaultMode(delta);\n }\n }\n\n /**\n * Sets the active item properly given \"wrap\" mode. In other words, it will continue to move\n * down the list until it finds an item that is not disabled, and it will wrap if it\n * encounters either end of the list.\n */\n private setActiveInWrapMode(delta: number): void {\n const items = this.getItemsArray();\n\n for (let i = 1; i <= items.length; i++) {\n const index = (this._activeItemIndex + delta * i + items.length) % items.length;\n const item = items[index];\n\n if (!this.skipPredicateFn(item)) {\n this.setActiveItem(index);\n\n return;\n }\n }\n }\n\n /**\n * Sets the active item properly given the default mode. In other words, it will\n * continue to move down the list until it finds an item that is not disabled. If\n * it encounters either end of the list, it will stop and not wrap.\n */\n private setActiveInDefaultMode(delta: number): void {\n this.setActiveItemByIndex(this._activeItemIndex + delta, delta);\n }\n\n /**\n * Sets the active item to the first enabled item starting at the index specified. If the\n * item is disabled, it will move in the fallbackDelta direction until it either\n * finds an enabled item or encounters the end of the list.\n */\n private setActiveItemByIndex(index: number, fallbackDelta: number): void {\n const items = this.getItemsArray();\n\n if (!items[index]) {\n return;\n }\n\n let curIndex = index;\n\n while (this.skipPredicateFn(items[curIndex])) {\n curIndex += fallbackDelta;\n\n if (!items[curIndex]) {\n return;\n }\n }\n\n this.setActiveItem(curIndex);\n }\n\n /** Returns the items as an array. */\n private getItemsArray(): T[] {\n return this._items instanceof QueryList ? this._items.toArray() : this._items;\n }\n}\n","import { ListKeyManager, ListKeyManagerOption } from './list-key-manager';\n\n/**\n * This is the interface for highlightable items (used by the ActiveDescendantKeyManager).\n * Each item must know how to style itself as active or inactive and whether or not it is\n * currently disabled.\n */\nexport interface Highlightable extends ListKeyManagerOption {\n // Applies the styles for an active item to this item.\n setActiveStyles(): void;\n\n // Applies the styles for an inactive item to this item.\n setInactiveStyles(): void;\n}\n\nexport class ActiveDescendantKeyManager<T> extends ListKeyManager<Highlightable & T> {\n /**\n * Sets the active item to the item at the specified index and adds the\n * active styles to the newly active item. Also removes active styles\n * from the previously active item.\n *\n * @param index Index of the item to be set as active.\n */\n setActiveItem(index: number): void;\n\n /**\n * Sets the active item to the item to the specified one and adds the\n * active styles to the it. Also removes active styles from the\n * previously active item.\n *\n * @param item Item to be set as active.\n */\n setActiveItem(item: T): void;\n\n /**\n * This method sets the active item to the item at the specified index.\n * It also adds active styles to the newly active item and removes active\n * styles from the previously active item.\n */\n setActiveItem(index: any): void {\n if (this.activeItem) {\n this.activeItem.setInactiveStyles();\n }\n\n super.setActiveItem(index);\n\n if (this.activeItem) {\n this.activeItem.setActiveStyles();\n }\n }\n}\n","import { FocusOrigin } from '@angular/cdk/a11y';\nimport { ListKeyManager, ListKeyManagerOption } from './list-key-manager';\n\n/**\n * This is the interface for focusable items (used by the FocusKeyManager).\n * Each item must know how to focus itself, whether or not it is currently disabled\n * and be able to supply it's label.\n */\nexport interface IFocusableOption extends ListKeyManagerOption {\n // Focuses the `FocusableOption`. */\n focus(origin?: FocusOrigin): void;\n}\n\nexport class FocusKeyManager<T> extends ListKeyManager<IFocusableOption & T> {\n private origin: FocusOrigin = 'program';\n\n /**\n * Sets the active item or index to the item that is specified and focuses it.\n *\n * @param item Item to be set as active.\n */\n setActiveItem(item: number | T): void;\n\n setActiveItem(item: any): void {\n super.setActiveItem(item);\n\n if (this.activeItem) {\n this.activeItem.focus(this.origin);\n }\n }\n\n /**\n * Sets the focus origin that will be passed in to the items for any subsequent `focus` calls.\n *\n * @param origin Focus origin to be used when focusing items.\n */\n setFocusOrigin(origin: FocusOrigin): this {\n this.origin = origin;\n\n return this;\n }\n\n /** @deprecated Keep the origin you pass to `setFocusOrigin()`. Will be removed in 22.0.0. */\n getFocusOrigin(): FocusOrigin {\n return this.origin;\n }\n}\n","import { DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\n\n/**\n * Takes the host of a composite widget out of the tab order whenever `tabOut` emits, and puts it back on the next\n * macrotask, once the browser has moved the focus. A host that hands its focus to an item would otherwise be where\n * Shift+Tab from that item lands, and pass the focus straight back to the item.\n *\n * @param tabOut Emits while Tab leaves the widget, such as `tabOut` of the widget's key manager.\n * @param host Element holding the widget's tab stop.\n * @param renderedTabIndex Tab index the host binding renders, `null` for none. Read when the host is put back.\n * @param destroyRef Lifetime of the widget, which also ends a pending restore.\n *\n * @docs-private\n */\nexport function kbqLeaveTabOrderOnTabOut(\n tabOut: Observable<void>,\n host: HTMLElement,\n renderedTabIndex: () => number | null,\n destroyRef: DestroyRef\n): void {\n let restore: ReturnType<typeof setTimeout> | undefined;\n\n destroyRef.onDestroy(() => clearTimeout(restore));\n\n tabOut.pipe(takeUntilDestroyed(destroyRef)).subscribe(() => {\n // Written to the DOM only: the browser moves the focus as soon as this Tab is handled, before change detection\n // could apply a binding, and the tab index the widget holds may be the consumer's own.\n host.tabIndex = -1;\n\n // The binding still holds its value and will not write it again, so the restore puts that value back itself.\n clearTimeout(restore);\n restore = setTimeout(() => {\n const tabIndex = renderedTabIndex();\n\n if (tabIndex === null) {\n host.removeAttribute('tabindex');\n } else {\n host.tabIndex = tabIndex;\n }\n });\n });\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, InjectionToken } from '@angular/core';\n\n/**\n * An abstraction over the global `window` object.\n */\nexport const KBQ_WINDOW = new InjectionToken<Window>('[KBQ_WINDOW]', {\n factory: (): Window => {\n const _window =\n inject(DOCUMENT).defaultView ||\n // A detached document (built by `DOMImplementation` or parsed by `DOMParser`) has no view of its own.\n // eslint-disable-next-line no-restricted-globals\n window;\n\n if (!_window) {\n throw new Error('[KBQ_WINDOW] window is not available.');\n }\n\n return _window;\n }\n});\n","import { isPlatformServer } from '@angular/common';\nimport {\n afterNextRender,\n ANIMATION_MODULE_TYPE,\n DestroyRef,\n inject,\n InjectionToken,\n Injector,\n MAX_ANIMATION_TIMEOUT,\n PLATFORM_ID\n} from '@angular/core';\nimport { KBQ_WINDOW } from '../tokens/window';\n\n/** Configuration of the motion of Koobiq components. */\nexport interface KbqAnimationsConfig {\n /** Whether components skip their enter, leave and state animations. */\n animationsDisabled?: boolean;\n}\n\n/**\n * Configures the motion of Koobiq components, for example `{ animationsDisabled: true }` for a test suite\n * that should not wait for transitions.\n */\nexport const KBQ_ANIMATIONS_CONFIG = new InjectionToken<KbqAnimationsConfig>('KBQ_ANIMATIONS_CONFIG');\n\n/**\n * Whether Koobiq components render state changes without motion: turned off by `KBQ_ANIMATIONS_CONFIG`,\n * by `provideNoopAnimations()`, or by the user's `prefers-reduced-motion` setting. Reads the setting once,\n * so a component calls it in its injection context.\n *\n * @docs-private\n */\nexport function kbqAnimationsDisabled(): boolean {\n if (\n inject(KBQ_ANIMATIONS_CONFIG, { optional: true })?.animationsDisabled ||\n inject(ANIMATION_MODULE_TYPE, { optional: true }) === 'NoopAnimations'\n ) {\n return true;\n }\n\n return inject(KBQ_WINDOW).matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n}\n\n/**\n * Settles once the CSS animations and transitions running on an element have finished, cancelled ones\n * included, or once `timeout` milliseconds have passed when it is given: a paused animation never finishes.\n * `null` when none runs — animations turned off, reduced motion, no Web Animations API (the server, jsdom).\n *\n * @docs-private\n */\nexport function kbqAnimationsSettled(element: Element | null | undefined, timeout?: number): Promise<void> | null {\n const animations = (element?.getAnimations?.() ?? []).filter(\n // An infinite animation (a spinner in the content) never finishes.\n (animation) => animation.effect?.getComputedTiming().endTime !== Infinity\n );\n\n if (!animations.length) return null;\n\n const finished = Promise.allSettled(animations.map(({ finished }) => finished)).then(() => {});\n\n if (timeout === undefined) return finished;\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const expired = new Promise<void>((resolve) => (timeoutId = setTimeout(resolve, timeout)));\n\n return Promise.race([finished, expired]).finally(() => clearTimeout(timeoutId));\n}\n\n/**\n * Calls `callback` once the CSS animations and transitions running on an element after the next render\n * have finished, and right after that render when none runs (see `kbqAnimationsSettled`). An animation\n * that does not finish in `MAX_ANIMATION_TIMEOUT` (a paused one) is no longer waited for. On the server,\n * where nothing renders, calls back in a microtask. The wait ends with the injector; `destroy()` cancels it.\n *\n * @docs-private\n */\nexport function kbqAfterAnimations(\n element: () => Element | null | undefined,\n callback: () => void,\n injector: Injector\n): { destroy(): void } {\n const destroyRef = injector.get(DestroyRef);\n\n // Nothing is left to animate, nor to notify.\n if (destroyRef.destroyed) return { destroy: () => {} };\n\n let active = true;\n\n const settle = (): void => {\n const settled = kbqAnimationsSettled(element(), injector.get(MAX_ANIMATION_TIMEOUT));\n\n if (!settled) return finish();\n\n settled.then(finish);\n };\n\n // `afterNextRender` does nothing on the server.\n const server = isPlatformServer(injector.get(PLATFORM_ID));\n const renderRef = server ? null : afterNextRender(settle, { injector });\n\n const stop = (): void => {\n active = false;\n renderRef?.destroy();\n };\n\n const unregister = destroyRef.onDestroy(stop);\n\n const destroy = (): void => {\n if (!active) return;\n\n stop();\n unregister();\n };\n\n const finish = (): void => {\n if (!active) return;\n\n destroy();\n callback();\n };\n\n if (server) Promise.resolve().then(finish);\n\n return { destroy };\n}\n","import { AutofillMonitor } from '@angular/cdk/text-field';\nimport { DestroyRef, ElementRef, inject, Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Tracks whether the current control's value was filled in by the browser, as a signal.\n *\n * Call it from an injection context on a directive whose host is the element the browser actually\n * fills — a text `<input>` or a `<textarea>`. Every `KbqFormFieldControl` that can be autofilled\n * exposes the result as its `autofilled` member.\n *\n * This is a hook for application code, not the mechanism behind the autofill styling. The styling\n * keys on `:autofill` in CSS, which matches in the same style pass the browser fills the field;\n * detection here goes through a zero-length keyframe animation and an `animationstart` listener, so\n * it lands a frame or two later — too late to paint with, and early enough for anything a component\n * wants to do about it.\n *\n * `monitor()` returns EMPTY off the browser platform, so this needs no `Platform` guard.\n */\nexport const kbqInjectAutofilled = (): Signal<boolean> => {\n const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n const autofillMonitor = inject(AutofillMonitor);\n const destroyRef = inject(DestroyRef);\n const autofilled = signal(false);\n\n autofillMonitor\n .monitor(elementRef)\n .pipe(takeUntilDestroyed(destroyRef))\n .subscribe(({ isAutofilled }) => autofilled.set(isAutofilled));\n\n // `stopMonitoring()` is the load-bearing teardown, not a duplicate of `takeUntilDestroyed()`\n // above: `AutofillMonitor` is `providedIn: 'root'`, so dropping only the subscription would\n // leave the element registered with the app-lifetime service and its marker classes on the DOM\n // node.\n destroyRef.onDestroy(() => autofillMonitor.stopMonitoring(elementRef));\n\n return autofilled.asReadonly();\n};\n","import { computed, Directive, forwardRef, InjectionToken, model, Provider, signal, untracked } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KbqCheckedState } from './checkbox';\n\n/**\n * Provider Expression that allows `KbqCheckable` to register as a `ControlValueAccessor`, so any host\n * applying it via `hostDirectives` gets `[(ngModel)]`/`formControl` support without wiring up its own.\n *\n * @docs-private\n */\nconst KBQ_CHECKABLE_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KbqCheckable),\n multi: true\n};\n\n/**\n * Click action shared by checkable controls (checkbox, toggle, and custom checkbox-like primitives).\n * noop: Do not toggle checked or indeterminate.\n * check: Only toggle checked status, ignore indeterminate.\n * check-indeterminate: Toggle checked status, set indeterminate to false. Default behavior.\n * undefined: Same as `check-indeterminate`.\n */\nexport type KbqCheckableClickAction = 'noop' | 'check' | 'check-indeterminate' | undefined;\n\n/** Injection token that can be used to specify the default click behavior for checkable controls. */\nexport const KBQ_CHECKABLE_CLICK_ACTION = new InjectionToken<KbqCheckableClickAction>('kbq-checkable-click-action');\n\n/**\n * Represents the different states that require custom transitions between them.\n *\n * @docs-private\n */\nexport enum TransitionCheckState {\n /** The initial state of the component before any user interaction. */\n Init = 'init',\n /** The state representing the component when it's becoming checked. */\n Checked = 'checked',\n /** The state representing the component when it's becoming unchecked. */\n Unchecked = 'unchecked',\n /** The state representing the component when it's becoming indeterminate. */\n Indeterminate = 'indeterminate'\n}\n\n/** Result of resolving a click on a checkable control's native input. See {@link KbqCheckable.resolveClick}. */\nexport interface KbqCheckableClickResult {\n /** Whether `checked` should be toggled and a `change` event emitted. */\n readonly shouldToggle: boolean;\n /** Whether `indeterminate` should be cleared and an `indeterminateChange` event emitted. */\n readonly shouldClearIndeterminate: boolean;\n}\n\n/**\n * Shared behavior for checkbox-like controls: checked/disabled/indeterminate/tabIndex state, the click-to-toggle\n * algorithm, ARIA-checked computation, and `ControlValueAccessor` change plumbing.\n *\n * Meant to be applied via `hostDirectives` by components that render their own native `<input type=\"checkbox\">`\n * and markup (e.g. `KbqCheckbox`, `KbqToggleComponent`, or custom checkbox-like primitives). Hosts stay\n * responsible for their own public inputs/outputs, `FocusMonitor` wiring, and emitting their own typed\n * `change` event - this directive only centralizes the state and decisions behind them.\n */\n@Directive({\n selector: '[kbqCheckable]',\n providers: [KBQ_CHECKABLE_CONTROL_VALUE_ACCESSOR],\n exportAs: 'kbqCheckable'\n})\nexport class KbqCheckable implements ControlValueAccessor {\n private controlValueAccessorChangeFn: (value: any) => void = () => {};\n\n /**\n * Called when the control is blurred. Needed to properly implement `ControlValueAccessor`.\n *\n * @docs-private\n */\n onTouched: () => any = () => {};\n\n /** @docs-private */\n readonly currentCheckState = signal<TransitionCheckState>(TransitionCheckState.Init);\n\n readonly checked = model(false);\n\n readonly disabled = model(false);\n\n readonly indeterminate = model(false);\n\n /** Raw tab index as set by the caller, ignoring `disabled`. Use `effectiveTabIndex` to read the applied value. */\n readonly tabIndex = model(0);\n\n /** The tab index actually applied to the native input: forced to `-1` while disabled. */\n readonly effectiveTabIndex = computed(() => (this.disabled() ? -1 : this.tabIndex()));\n\n /** Returns the ARIA-checked value: `'true'`, `'false'`, or `'mixed'` when indeterminate. */\n getAriaChecked(): KbqCheckedState {\n return this.checked() ? 'true' : this.indeterminate() ? 'mixed' : 'false';\n }\n\n /** Toggles the `checked` state and notifies the registered `ControlValueAccessor` change handler. */\n toggle(): void {\n // Untracked, as `transitionCheckState()`: called from a consumer's `effect()`, `checked` read here would make\n // the effect toggle again on every change it makes.\n untracked(() => {\n this.checked.update((value) => !value);\n this.notifyFormValueChange(this.checked());\n });\n }\n\n /**\n * Resolves what a click on the native input should do, based on the current state and `clickAction`.\n * Pure - does not mutate state. Callers apply `checked`/`indeterminate` themselves and own emitting\n * their own change events, so timing/order stays identical to a hand-written click handler.\n */\n resolveClick(clickAction: KbqCheckableClickAction): KbqCheckableClickResult {\n if (this.disabled() || clickAction === 'noop') {\n return { shouldToggle: false, shouldClearIndeterminate: false };\n }\n\n return {\n shouldToggle: true,\n shouldClearIndeterminate: this.indeterminate() && clickAction !== 'check'\n };\n }\n\n /** Resets the native input to match the current `checked`/`indeterminate` state (used for the `noop` click action). */\n resetNativeInput(nativeInput: HTMLInputElement): void {\n nativeInput.checked = this.checked();\n nativeInput.indeterminate = this.indeterminate();\n }\n\n /** Transitions the animation state, ignoring no-op transitions. @docs-private */\n transitionCheckState(newState: TransitionCheckState): void {\n if (untracked(this.currentCheckState) === newState) return;\n\n this.currentCheckState.set(newState);\n }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: any): void {\n this.checked.set(!!value);\n }\n\n /** Stores the `ControlValueAccessor` change handler to be notified by `notifyFormValueChange`. */\n registerOnChange(fn: (value: any) => void): void {\n this.controlValueAccessorChangeFn = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /** Notifies the registered `ControlValueAccessor` change handler. */\n notifyFormValueChange(value: boolean): void {\n this.controlValueAccessorChangeFn(value);\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[kbqNormalizeWhitespace]',\n host: {\n '(copy)': 'onCopy($event)'\n }\n})\nexport class KbqNormalizeWhitespace {\n /** @docs-private */\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Replace thin-space with space on copy event\n */\n onCopy($event: ClipboardEvent) {\n const value =\n (this.elementRef.nativeElement as HTMLInputElement).value || this.elementRef.nativeElement.textContent;\n\n if ($event.type === 'copy' && value) {\n $event.preventDefault();\n $event.clipboardData?.setData('text', value?.replace(/\\u2009/g, ' '));\n }\n }\n}\n","import { Directive, ElementRef, inject, input, linkedSignal, Signal, signal, WritableSignal } from '@angular/core';\n\nexport enum KbqComponentColors {\n Theme = 'theme',\n ThemeFade = 'theme-fade',\n Contrast = 'contrast',\n ContrastFade = 'contrast-fade',\n\n Error = 'error',\n Warning = 'warning',\n Success = 'success',\n\n Default = 'contrast',\n Empty = 'empty'\n}\n\n/**\n * A color read through `read` and written into `target`, so that a value set in code outlives a change of what\n * `read` falls back to.\n */\nfunction writableColor<T>(read: () => T, target: WritableSignal<T | null | undefined>): WritableSignal<T> {\n const color = linkedSignal(read);\n\n color.set = (value) => target.set(value);\n color.update = (updateFn) => target.set(updateFn(color()));\n\n return color;\n}\n\n/** Renders the `color` of a component as its `kbq-<color>` host class. */\n@Directive({\n host: {\n '[class]': 'colorClassName'\n }\n})\nexport class KbqColorDirective<T extends string = KbqComponentColors | string> {\n /** @docs-private */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private readonly defaultColorState = signal<T>(KbqComponentColors.Empty as T);\n\n /** Color used while neither the `color` input nor a value set in code gives one. */\n protected readonly defaultColor: Signal<T> = this.defaultColorState.asReadonly();\n\n /** @docs-private */\n readonly colorInput = input<T | null | undefined>(undefined, { alias: 'color' });\n\n /** Color set in code. A new value of the input drops it. */\n private readonly colorSetInCode = linkedSignal<T | null | undefined, T | null | undefined>({\n source: this.colorInput,\n computation: () => undefined\n });\n\n /**\n * Color of the component. A value set in code holds until the input changes, and the default color is used\n * while both are unset or falsy.\n */\n readonly color: WritableSignal<T> = writableColor(\n () => this.colorSetInCode() || this.colorInput() || this.defaultColor(),\n this.colorSetInCode\n );\n\n /** current class name of color */\n get colorClassName(): string {\n return `kbq-${this.color() || this.defaultColor()}`;\n }\n\n /** this color will be used as a default value. For example [color]=\"'' | false | undefined | null\". */\n setDefaultColor(color: T): void {\n this.defaultColorState.set(color);\n }\n}\n","import { Signal, signal } from '@angular/core';\nimport { AbstractControl, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { ErrorStateMatcher } from '../error/error-state-matcher';\n\n/** @docs-private */\nexport interface CanUpdateErrorState {\n /** Whether the component is in an error state. */\n readonly errorState: Signal<boolean>;\n /** Updates the error state based on the provided error state matcher. */\n updateErrorState(): void;\n}\n\n/**\n * Class that tracks the error state of a component.\n *\n * The state depends on the form control and its parent form, which notify nothing a signal could follow, so\n * the owner calls `updateErrorState` from `ngDoCheck`.\n *\n * @docs-private\n */\nexport class KbqErrorStateTracker implements CanUpdateErrorState {\n private readonly state = signal(false);\n\n /** Whether the tracker is currently in an error state. */\n readonly errorState: Signal<boolean> = this.state.asReadonly();\n\n /** User-defined matcher for the error state. */\n errorStateMatcher: ErrorStateMatcher | null | undefined;\n\n constructor(\n private defaultMatcher: ErrorStateMatcher | null,\n public ngControl: NgControl | null,\n private parentFormGroup: FormGroupDirective | null,\n private parentForm: NgForm | null\n ) {}\n\n /** Updates the error state based on the provided error state matcher. */\n updateErrorState() {\n const parent = this.parentFormGroup || this.parentForm;\n const matcher = this.errorStateMatcher || this.defaultMatcher;\n const control = this.ngControl ? (this.ngControl.control as AbstractControl) : null;\n\n this.state.set(matcher?.isErrorState(control, parent) ?? false);\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n/**\n * Marks its host as read once the user has dwelled on it long enough, or has clicked it.\n *\n * Dwelling is tracked for pointer (`mouseenter`/`mouseleave`) and keyboard (`focusin`/`focusout`)\n * interaction alike, so the host becomes readable without a mouse. The two channels run\n * independently — the pointer can still rest on the host after focus has left, and the other way\n * round — so the dwell ends only once both of them have. `focusin`/`focusout` bubble, so focusing any\n * control inside the host counts as dwelling on the host itself, and moving focus between two of them\n * keeps the dwell running.\n */\n@Directive({\n host: {\n '(mouseenter)': 'startDwell()',\n '(mouseleave)': 'endDwell()',\n '(focusin)': 'startDwell(\"focus\")',\n '(focusout)': 'endDwell(\"focus\", $event)',\n '(click)': 'read.next(true)'\n }\n})\nexport class KbqReadStateDirective {\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Start of the earliest dwell still in progress, or `undefined` while the host is neither hovered nor focused. */\n get timestamp(): number | undefined {\n if (this.pointerStartedAt === undefined) return this.focusStartedAt;\n if (this.focusStartedAt === undefined) return this.pointerStartedAt;\n\n return Math.min(this.pointerStartedAt, this.focusStartedAt);\n }\n\n /** How long (ms) the user has to dwell on the host before it counts as read. */\n timeToRead: number = 500;\n\n readonly read = new BehaviorSubject<boolean>(false);\n\n private pointerStartedAt: number | undefined;\n private focusStartedAt: number | undefined;\n\n /** Starts measuring a dwell on one channel. Re-entering the same one keeps its earliest start. */\n startDwell(channel: 'pointer' | 'focus' = 'pointer') {\n if (channel === 'pointer') {\n this.pointerStartedAt ??= Date.now();\n } else {\n this.focusStartedAt ??= Date.now();\n }\n }\n\n /**\n * Ends the dwell on one channel and, once no channel is left dwelling, marks the host as read when\n * the whole dwell lasted longer than `timeToRead`.\n *\n * @param event the `focusout` that ended a focus dwell. Its `relatedTarget` is the element about to\n * receive focus: focus landing inside the host again is a move between the host's own controls, not\n * the user leaving.\n */\n endDwell(channel: 'pointer' | 'focus' = 'pointer', event?: FocusEvent) {\n if (channel === 'focus' && this.containsTarget(event?.relatedTarget)) {\n return;\n }\n\n const startedAt = this.timestamp;\n\n if (channel === 'pointer') {\n this.pointerStartedAt = undefined;\n } else {\n this.focusStartedAt = undefined;\n }\n\n // The other channel is still dwelling, so the user has not left the host yet.\n if (this.timestamp !== undefined) {\n return;\n }\n\n if (startedAt !== undefined && Date.now() - startedAt > this.timeToRead) {\n this.read.next(true);\n }\n\n this.changeDetectorRef.markForCheck();\n }\n\n private containsTarget(target: EventTarget | null | undefined): boolean {\n return !!target && this.elementRef.nativeElement.contains(target as Node);\n }\n}\n","import { InjectionToken, OutputRef } from '@angular/core';\n\nexport * from './autofill';\nexport * from './checkable';\nexport * from './checkbox';\nexport * from './clipboard';\nexport { KbqColorDirective, KbqComponentColors } from './color';\nexport { CanUpdateErrorState, KbqErrorStateTracker } from './error-state';\nexport * from './flex';\nexport * from './orientation';\nexport * from './read-state';\nexport { KbqDefaultSizes } from './size';\n\n/**\n * A parent whose content changes size once its animation ends, such as a tab group.\n *\n * @docs-private\n */\nexport const KBQ_PARENT_ANIMATION_COMPONENT = new InjectionToken<{ readonly animationDone: OutputRef<void> }>(\n 'kbq-parent-animation-component'\n);\n","import { inject, InjectionToken, LOCALE_ID } from '@angular/core';\nimport { DateAdapter as BaseDateAdapter } from '@koobiq/date-adapter';\nimport { Observable } from 'rxjs';\n\n/** InjectionToken for datepicker that can be used to override default locale code. */\nexport const KBQ_DATE_LOCALE = new InjectionToken<string>('KBQ_DATE_LOCALE', {\n providedIn: 'root',\n factory: KBQ_DATE_LOCALE_FACTORY\n});\n\n/** @docs-private */\nexport function KBQ_DATE_LOCALE_FACTORY(): string {\n return inject(LOCALE_ID);\n}\n\nexport abstract class DateAdapter<D> extends BaseDateAdapter<D> {\n /** A stream that emits when the locale changes. */\n abstract get localeChanges(): Observable<any>;\n}\n","import { InjectionToken } from '@angular/core';\nimport { DateFormats } from '@koobiq/date-adapter';\n\nexport const KBQ_DATE_FORMATS = new InjectionToken<DateFormats>('kbq-date-formats');\nexport type KbqDateFormats = DateFormats;\n","import { inject, Injectable, InjectionToken, isDevMode, Provider, signal, Signal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/**\n * Time zone the library renders dates in.\n *\n * Accepts an IANA name (`'Europe/Moscow'`), a fixed offset — in minutes east of UTC (`180`) or as a\n * string (`'+03:00'`, `'UTC+3'`, `'03:00:00'`) — `'utc'`, or `'system'` for the zone of the host the code\n * runs on.\n *\n * The `string & {}` arm keeps IANA names open while still offering the special values as completions.\n */\nexport type KbqTimezoneLike = 'system' | 'utc' | number | (string & {});\n\n/**\n * InjectionToken for the time zone every date the library formats is rendered in.\n *\n * Read once, by the {@link KbqDateTimezoneService} constructor, out of the injector that created the\n * service — call {@link KbqDateTimezoneService.setTimezone} to change the zone afterwards. Defaults to\n * `'system'`, the zone of the host the code runs on.\n */\nexport const KBQ_DATE_TIMEZONE = new InjectionToken<KbqTimezoneLike>('KBQ_DATE_TIMEZONE');\n\nconst MINUTES_PER_HOUR = 60;\nconst SECONDS_PER_MINUTE = 60;\n\n/** The largest offset any zone has ever had; anything beyond it is a typo, not a zone. */\nconst MAX_OFFSET_HOURS = 14;\nconst MAX_OFFSET_MINUTES = MAX_OFFSET_HOURS * MINUTES_PER_HOUR;\n\n/** `UTC`/`GMT` with no offset — a valid input on its own, and what `Intl` reports for zero-offset zones. */\nconst UTC_ALIAS_PATTERN = /^(?:utc|gmt)$/i;\n\n/**\n * A fixed offset written with separators, with or without a `UTC`/`GMT` prefix and with or without a\n * sign: `+03:00`, `UTC+3`, `GMT+05:30`, `03:00:00`. The seconds group matches both the `timeZoneName`\n * `Intl` reports in the `longOffset` style for pre-standard-time instants (`GMT-00:44:30`) and the form\n * `KbqTimezoneZone.offset` is written in.\n */\nconst FIXED_OFFSET_PATTERN = /^(?:utc|gmt)?([+-])?(\\d{1,2})(?::([0-5]\\d)(?::([0-5]\\d))?)?$/i;\n\n/** The same offset written without separators: `-0530`. Kept apart so `+123` fails instead of backtracking. */\nconst COMPACT_OFFSET_PATTERN = /^(?:utc|gmt)?([+-])?(\\d{2})([0-5]\\d)$/i;\n\n/** Offset in minutes east of UTC of a fixed-offset specifier, or `null` when the value is not one. */\nconst parseFixedOffset = (value: string): number | null => {\n if (UTC_ALIAS_PATTERN.test(value)) return 0;\n\n const match = COMPACT_OFFSET_PATTERN.exec(value) ?? FIXED_OFFSET_PATTERN.exec(value);\n\n if (!match) return null;\n\n const [, sign, hours, minutes = '0', seconds = '0'] = match;\n\n if (Number(hours) > MAX_OFFSET_HOURS) return null;\n\n const magnitude = Number(hours) * MINUTES_PER_HOUR + Number(minutes) + Number(seconds) / SECONDS_PER_MINUTE;\n\n // Rounded because both date libraries expect whole minutes; only pre-1900 zones have a seconds part.\n return (sign === '-' ? -1 : 1) * Math.round(magnitude);\n};\n\n/**\n * One `Intl.DateTimeFormat` per IANA zone: building it is the expensive part of resolving an offset, and\n * an application uses a handful of zones at most. A `null` entry marks a name `Intl` rejected, so an\n * invalid zone is reported once instead of throwing on every date.\n *\n * Bounded because the zone can come from unvalidated input — a cookie on the server, a picker in the\n * browser — and this map outlives every request in the process.\n */\nconst MAX_CACHED_FORMATTERS = 32;\nconst offsetFormatters = new Map<string, Intl.DateTimeFormat | null>();\n\nconst getOffsetFormatter = (timeZone: string): Intl.DateTimeFormat | null => {\n if (!offsetFormatters.has(timeZone)) {\n if (offsetFormatters.size >= MAX_CACHED_FORMATTERS) {\n offsetFormatters.delete(offsetFormatters.keys().next().value!);\n }\n\n try {\n offsetFormatters.set(timeZone, new Intl.DateTimeFormat('en-US', { timeZone, timeZoneName: 'longOffset' }));\n } catch {\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn(`Unknown time zone \"${timeZone}\", dates are left in the host time zone.`);\n }\n\n offsetFormatters.set(timeZone, null);\n }\n }\n\n return offsetFormatters.get(timeZone)!;\n};\n\n/**\n * Offset of `timezone` at `timestamp`, in minutes east of UTC. `null` means \"leave the date in the host\n * zone\" — either because `timezone` is `'system'`, or because it is a name no `Intl` implementation knows.\n *\n * Takes the instant because an IANA zone has no single offset: `'Europe/Berlin'` is +60 in January and\n * +120 in July, and one list of dates can span the change.\n */\nexport const kbqResolveTimezoneOffset = (timezone: KbqTimezoneLike, timestamp: number): number | null => {\n if (timezone === 'system') return null;\n\n // Bounded and rounded like the string form: a numeric offset comes from the same unvalidated places,\n // and neither date library reads a fractional minute or a 99-hour offset as anything sensible.\n if (typeof timezone === 'number') {\n return Number.isFinite(timezone) && Math.abs(timezone) <= MAX_OFFSET_MINUTES ? Math.round(timezone) : null;\n }\n\n const fixedOffset = parseFixedOffset(timezone);\n\n if (fixedOffset !== null) return fixedOffset;\n\n // An invalid date has no offset to resolve, and `Intl` throws rather than saying so.\n if (!Number.isFinite(timestamp)) return null;\n\n const timeZoneName = getOffsetFormatter(timezone)\n ?.formatToParts(new Date(timestamp))\n .find(({ type }) => type === 'timeZoneName')?.value;\n\n return timeZoneName ? parseFixedOffset(timeZoneName) : null;\n};\n\n/**\n * Holds the time zone every date the library creates, parses and formats is rendered in.\n *\n * Provided in root, so {@link KBQ_DATE_TIMEZONE} in the application providers configures the whole\n * application. To scope a zone to one subtree, list {@link kbqDateTimezoneProvider} in that component's\n * `providers` together with the date adapter and the `DateFormatter`: the adapter captures the service of\n * the injector that created it, and keeps using it.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqDateTimezoneService {\n /** Active time zone. */\n readonly timezone: Signal<KbqTimezoneLike>;\n\n /**\n * Emits when the active time zone changes.\n *\n * The counterpart of `DateAdapter.localeChanges`, for the surfaces that render a date once instead of\n * through an impure pipe — the date inputs and the calendar.\n */\n readonly changes: Observable<KbqTimezoneLike>;\n\n private readonly _timezone = signal<KbqTimezoneLike>(inject(KBQ_DATE_TIMEZONE, { optional: true }) ?? 'system');\n private readonly _changes = new Subject<KbqTimezoneLike>();\n\n constructor() {\n this.timezone = this._timezone.asReadonly();\n this.changes = this._changes.asObservable();\n }\n\n /** Activates a time zone. */\n setTimezone(timezone: KbqTimezoneLike): void {\n this._timezone.set(timezone);\n this._changes.next(timezone);\n }\n\n /**\n * Offset of the active zone at `timestamp`, in minutes east of UTC, or `null` when dates are left in\n * the host zone.\n */\n offsetAt(timestamp: number): number | null {\n return kbqResolveTimezoneOffset(this._timezone(), timestamp);\n }\n}\n\n/**\n * Utility provider of {@link KBQ_DATE_TIMEZONE}, the time zone dates are rendered in.\n *\n * Provides {@link KbqDateTimezoneService} alongside the token, so listing it in a component's `providers`\n * scopes the zone to that subtree instead of resolving the root service and silently doing nothing.\n */\nexport const kbqDateTimezoneProvider = (timezone: KbqTimezoneLike): Provider[] => [\n KbqDateTimezoneService,\n { provide: KBQ_DATE_TIMEZONE, useValue: timezone }\n];\n","import { Injectable, isDevMode, Provider, Type } from '@angular/core';\nimport { AbstractControl, FormGroupDirective, NgForm } from '@angular/forms';\n\n/** Utility provider for `ErrorStateMatcher`. */\nexport const kbqErrorStateMatcherProvider = (\n errorStateMatcher: Type<ErrorStateMatcher> | ErrorStateMatcher\n): Provider => {\n if (errorStateMatcher instanceof Type) {\n return {\n provide: ErrorStateMatcher,\n useClass: errorStateMatcher\n };\n }\n\n return {\n provide: ErrorStateMatcher,\n useValue: errorStateMatcher\n };\n};\n\n/**\n * Error state matcher that matches when a control is invalid and form is submitted.\n * Requires use FormGroupDirective or NgForm.\n */\n@Injectable()\nexport class ShowOnFormSubmitErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return !!(control?.invalid && form?.submitted);\n }\n}\n\n/**\n * Error state matcher with split behavior based on error's type:\n * - `required` errors are shown only after the form is submitted.\n * - All other errors are shown as soon as the control is invalid and touched.\n */\n@Injectable()\nexport class ShowRequiredOnSubmitErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return control?.hasError('required')\n ? !!(control?.invalid && form?.submitted)\n : !!(control?.invalid && control.touched);\n }\n}\n\n/** Error state matcher that matches when a control is invalid and dirty or form is submitted. */\n@Injectable()\nexport class ShowOnControlDirtyErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return !!(control?.invalid && (control.dirty || form?.submitted));\n }\n}\n\n/**\n * Provider that defines how form controls behave with regards to displaying error messages.\n * Error state matcher that matches when a control is invalid and touched or form is submitted.\n */\n@Injectable({ providedIn: 'root' })\nexport class ErrorStateMatcher {\n isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return !!(control?.invalid && (control.touched || form?.submitted));\n }\n}\n\n/**\n * Resolves which controls a group-level error concerns.\n *\n * Called with one error of a group at a time. Return the names of the controls the error applies to, relative\n * to the group holding it — `AbstractControl.get` paths such as `'passwords.confirm'` are supported — or\n * `null` for errors this scope does not know.\n *\n * It is called from change detection, so keep it cheap and allocation-free.\n */\nexport type CrossFieldErrorScope = (errorKey: string, errorValue: unknown) => readonly string[] | null;\n\n/**\n * Error state matcher that also shows an error set on a `FormGroup` on the controls that error concerns,\n * which the default matcher cannot: it is handed the field's own `FormControl` and never looks further.\n *\n * `scope` maps an error to those controls, so no error shape is imposed on validators. The error is revealed\n * once every one of them is touched, or the form is submitted — override `shouldReveal` to change that.\n *\n * ## Usage:\n *\n * ```typescript\n * providers: [\n * kbqErrorStateMatcherProvider(\n * new ShowOnCrossFieldErrorStateMatcher((key) =>\n * key === 'passwordsMismatch' ? ['newPassword', 'confirmPassword'] : null\n * )\n * )\n * ]\n * ```\n *\n * Always pass an instance, as above — never the bare class (or a subclass) to `kbqErrorStateMatcherProvider`.\n * `scope` has no injection token, so Angular cannot construct this class on its own; passing the class throws\n * `NG0204` the first time anything injects `ErrorStateMatcher`.\n *\n * ## Combining with another matcher\n *\n * Cross-field display timing is this class's one job; timing for a control's own, non-cross-field errors is\n * not, so it is delegated to `own` (default: the plain `ErrorStateMatcher`) rather than hard-coded — pass any\n * other matcher to combine its timing with cross-field support, instead of subclassing:\n *\n * ```typescript\n * new ShowOnCrossFieldErrorStateMatcher(\n * (key) => (key === 'passwordsMismatch' ? ['newPassword', 'confirmPassword'] : null),\n * new ShowRequiredOnSubmitErrorStateMatcher()\n * )\n * ```\n */\nexport class ShowOnCrossFieldErrorStateMatcher extends ErrorStateMatcher {\n // Keyed by the group holding the error, not flattened into one global set — otherwise a typo warned about\n // on one form would silently suppress the same warning for an unrelated group that happens to reuse the\n // control name.\n private readonly warned = new WeakMap<AbstractControl, Set<string>>();\n\n constructor(\n private readonly scope: CrossFieldErrorScope,\n private readonly own: ErrorStateMatcher = new ErrorStateMatcher()\n ) {\n super();\n }\n\n override isErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n return this.own.isErrorState(control, form) || this.isCrossFieldErrorState(control, form);\n }\n\n /**\n * Whether the controls a cross-field error concerns have been interacted with enough to show it.\n *\n * Consulted only while the form has not been submitted — a submit always reveals. A disabled control\n * counts as satisfied, since it can never be touched by the user. Override to change the rule: when one\n * end of a range is prefilled and the user is never expected to visit it, waiting for all of them hides\n * the error until submit, and `controls.some(...)` is the better cue.\n */\n protected shouldReveal(controls: AbstractControl[]): boolean {\n return controls.every(({ touched, disabled }) => touched || disabled);\n }\n\n private isCrossFieldErrorState(control: AbstractControl | null, form: FormGroupDirective | NgForm | null): boolean {\n // A disabled control is never shown as invalid, matching the default `ErrorStateMatcher` (its own\n // `invalid` is always `false` while disabled). Without this, a control satisfying `shouldReveal` only\n // because it's disabled would end up flagged by the very rule that's supposed to skip past it.\n if (!control?.enabled) {\n return false;\n }\n\n // The rule may sit on any ancestor, not only the immediate parent. A group's own `errors` never holds\n // its children's, so each level contributes exactly its own cross-field errors.\n for (let group = control.parent; group; group = group.parent) {\n if (this.isRevealedOn(group, control, form)) {\n return true;\n }\n }\n\n return false;\n }\n\n private isRevealedOn(\n group: AbstractControl,\n control: AbstractControl,\n form: FormGroupDirective | NgForm | null\n ): boolean {\n if (!group.errors) {\n return false;\n }\n\n for (const [key, value] of Object.entries(group.errors)) {\n const names = this.scope(key, value);\n\n if (!names?.length) {\n continue;\n }\n\n // A cheap first pass: resolve every name once, without allocating, just to learn whether `control`\n // is even named by this rule and whether every name resolved. Most rules don't concern a given\n // control, so the `involved` array below is worth building only once we know it might matter.\n let containsControl = false;\n let allResolved = true;\n\n for (const name of names) {\n const resolved = this.resolve(group, name);\n\n containsControl ||= resolved === control;\n allResolved &&= !!resolved;\n }\n\n if (!containsControl) {\n continue;\n }\n\n if (form?.submitted) {\n return true;\n }\n\n // A name that failed to resolve leaves no way to know whether the control it would have named is\n // touched, so \"every named control is touched\" can't be honestly claimed from the rest — fall\n // back to submit-only for this rule instead of revealing early on the controls that did resolve.\n if (allResolved) {\n // Resolving names to controls, rather than the control back to its name, keeps this\n // proportional to the size of the rule instead of the size of the form, and gets path and\n // `FormArray` index support from `get` for free.\n const involved = names\n .map((name) => this.resolve(group, name))\n .filter((item): item is AbstractControl => !!item);\n\n if (this.shouldReveal(involved)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n private resolve(group: AbstractControl, name: string): AbstractControl | null {\n const resolved = group.get(name);\n\n if (!resolved && isDevMode()) {\n const warnedNames = this.warned.get(group) ?? new Set<string>();\n\n if (!warnedNames.has(name)) {\n warnedNames.add(name);\n this.warned.set(group, warnedNames);\n\n // eslint-disable-next-line no-console\n console.warn(\n `ShowOnCrossFieldErrorStateMatcher: the scope named the control \"${name}\", which the group ` +\n `holding the error does not have. The error will not be shown on it.`\n );\n }\n }\n\n return resolved;\n }\n}\n","import { KbqCaretRect } from './caret-rect';\n\n/**\n * Overlay origin that stays on the caret: a virtual origin for `FlexibleConnectedPositionStrategy.setOrigin()` whose\n * `x`, `y`, `width` and `height` are measured again whenever the strategy reads them.\n *\n * A plain rectangle is a snapshot, and every repositioning the caret itself does not cause — a scrolled page, a resized\n * window, the field moving within its layout — would place the overlay at coordinates the caret has left. Reads made\n * within one task share one measurement, so positioning the overlay measures the caret once.\n *\n * `measure` returns the rectangle to anchor to, including a fallback for when the caret cannot be located.\n */\nexport const kbqCreateCaretOrigin = (measure: () => KbqCaretRect): Readonly<KbqCaretRect> => {\n let measured: KbqCaretRect | null = null;\n\n const read = (): KbqCaretRect => {\n if (!measured) {\n measured = measure();\n queueMicrotask(() => (measured = null));\n }\n\n return measured;\n };\n\n return {\n get x() {\n return read().x;\n },\n get y() {\n return read().y;\n },\n get width() {\n return read().width;\n },\n get height() {\n return read().height;\n }\n };\n};\n","/**\n * Properties that affect the rendered width of the text and have to be mirrored onto the ruler.\n *\n * `font-variant` is deliberately absent: the shorthand does not round-trip through the computed style\n * once a field sets more than one of its longhands, so the longhands are copied instead.\n */\nexport const RULER_INHERITED_PROPERTIES = [\n 'font',\n 'fontFamily',\n 'fontFeatureSettings',\n 'fontKerning',\n 'fontOpticalSizing',\n 'fontSize',\n 'fontSizeAdjust',\n 'fontStretch',\n 'fontStyle',\n 'fontSynthesis',\n 'fontVariantCaps',\n 'fontVariantEastAsian',\n 'fontVariantLigatures',\n 'fontVariantNumeric',\n 'fontVariationSettings',\n 'fontWeight',\n 'letterSpacing',\n 'textIndent',\n 'textTransform'\n] as const satisfies Array<keyof CSSStyleDeclaration>;\n\nconst RULER_PROPERTIES = {\n all: 'initial',\n position: 'absolute',\n top: '0px',\n left: '0px',\n width: '0px',\n height: '0px',\n visibility: 'hidden',\n overflow: 'scroll',\n whiteSpace: 'pre',\n pointerEvents: 'none'\n} as const satisfies Partial<CSSStyleDeclaration>;\n\n/**\n * Properties that decide where a soft wrap falls and where the wrapped text sits, mirrored onto a wrapping\n * ruler on top of {@link RULER_INHERITED_PROPERTIES}.\n *\n * Padding is part of the list twice over: it shifts the text inside the box, and the offsets read back from\n * the ruler are measured from its padding edge, so a ruler without it reports the wrong first line.\n */\nexport const WRAPPING_RULER_INHERITED_PROPERTIES = [\n 'direction',\n 'hyphens',\n 'lineHeight',\n 'overflowWrap',\n 'paddingBottom',\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'tabSize',\n 'textAlign',\n 'whiteSpace',\n 'wordBreak',\n 'wordSpacing'\n] as const satisfies Array<keyof CSSStyleDeclaration>;\n\nconst WRAPPING_RULER_PROPERTIES = {\n all: 'initial',\n position: 'absolute',\n top: '0px',\n left: '0px',\n // The content width is supplied by the caller, so the border box the field was laid out in never has to\n // be reconstructed from `box-sizing` and the border widths.\n boxSizing: 'content-box',\n visibility: 'hidden',\n overflow: 'hidden',\n whiteSpace: 'pre-wrap',\n pointerEvents: 'none'\n} as const satisfies Partial<CSSStyleDeclaration>;\n\n/**\n * Builds a hidden element that renders text with the typography of the element `computedStyle` was taken\n * from. Append it to the document, measure through {@link kbqMeasureRulerText}, and remove it.\n *\n * @docs-private\n */\nexport const kbqCreateTextRuler = (document: Document, computedStyle: CSSStyleDeclaration): HTMLSpanElement => {\n const ruler: HTMLSpanElement = document.createElement('span');\n\n Object.assign(ruler.style, RULER_PROPERTIES);\n RULER_INHERITED_PROPERTIES.forEach((property) => {\n ruler.style[property] = computedStyle[property];\n });\n\n return ruler;\n};\n\n/**\n * Width of `text` in pixels, in the same coordinate space as `clientWidth` and `scrollLeft`.\n *\n * `scrollWidth`, not `getBoundingClientRect()`: the latter reports the transformed box, which disagrees\n * with the untransformed layout metrics it would be compared against under a scaled ancestor.\n *\n * @docs-private\n */\nexport const kbqMeasureRulerText = (ruler: HTMLSpanElement, text: string): number => {\n ruler.textContent = text;\n\n return ruler.scrollWidth;\n};\n\n/**\n * Builds a hidden element that lays text out the way a soft-wrapping field of `contentWidth` pixels does,\n * with the typography and box metrics of the element `computedStyle` was taken from. Append it to the\n * document, measure through {@link kbqMeasureRulerTextOffset}, and remove it.\n *\n * `contentWidth` is the field's content box — `clientWidth` minus its horizontal padding — rather than the\n * computed `width`, which disagrees with it as soon as the field shows a scrollbar.\n *\n * @docs-private\n */\nexport const kbqCreateWrappingTextRuler = (\n document: Document,\n computedStyle: CSSStyleDeclaration,\n contentWidth: number\n): HTMLDivElement => {\n const ruler: HTMLDivElement = document.createElement('div');\n\n Object.assign(ruler.style, WRAPPING_RULER_PROPERTIES);\n [...RULER_INHERITED_PROPERTIES, ...WRAPPING_RULER_INHERITED_PROPERTIES].forEach((property) => {\n ruler.style[property] = computedStyle[property];\n });\n ruler.style.width = `${contentWidth}px`;\n\n return ruler;\n};\n\n/**\n * Offset of the position right after `text`, in pixels from the ruler's padding edge — the same origin the\n * field's own `scrollLeft` and `scrollTop` are measured from.\n *\n * `rest` is laid out after the position without a break opportunity before it, so that a word the field wraps as\n * a whole takes the position along to the next row. The marker carries a word joiner, which also gives it a line\n * box after a trailing newline.\n *\n * @docs-private\n */\nexport const kbqMeasureRulerTextOffset = (\n ruler: HTMLDivElement,\n text: string,\n rest: string = ''\n): { left: number; top: number } => {\n const marker = ruler.ownerDocument.createElement('span');\n\n marker.textContent = '\\u2060';\n\n ruler.textContent = text;\n ruler.append(marker, rest);\n\n const { offsetLeft: left, offsetTop: top } = marker;\n\n ruler.textContent = '';\n\n return { left, top };\n};\n","import {\n kbqCreateTextRuler,\n kbqCreateWrappingTextRuler,\n kbqMeasureRulerText,\n kbqMeasureRulerTextOffset\n} from './text-ruler';\n\n/**\n * Rectangle occupied by a text insertion point or a text selection, in viewport coordinates.\n *\n * Shaped after the virtual origin a CDK `FlexibleConnectedPositionStrategy` accepts, so it can be handed to\n * `setOrigin()` as it is and every placement, offset and fallback keeps working against it.\n */\nexport interface KbqCaretRect {\n /** Distance from the left edge of the viewport, in pixels. */\n x: number;\n /** Distance from the top edge of the viewport, in pixels. */\n y: number;\n /** Width of the selection, or `0` for a collapsed caret. */\n width: number;\n /** Height of one line of text in the field. */\n height: number;\n}\n\n/** Anything the caret helpers can measure: a text field, or an element the user edits directly. */\nexport type KbqTextAnchor = HTMLInputElement | HTMLTextAreaElement | HTMLElement;\n\n/** Fields that render something other than their value, so measuring the value tells nothing. */\nconst OPAQUE_INPUT_TYPES = ['password', 'color', 'file', 'image', 'range'];\n\n/** Alignments that move a line away from the start edge, where a prefix of the value is measured from. */\nconst OFFSET_ALIGNMENTS = ['center', 'right', 'end', '-webkit-center', '-webkit-right'];\n\n/** Rest of the word a position stands in, up to the next whitespace. */\nconst WORD_REST = /\\S*/y;\n\nconst isTextArea = (element: KbqTextAnchor): element is HTMLTextAreaElement => element.tagName === 'TEXTAREA';\n\nconst isInput = (element: KbqTextAnchor): element is HTMLInputElement => element.tagName === 'INPUT';\n\n/**\n * Whether a field lays its text out from the start edge, left to right — the layout the caret helpers and the\n * inline hint of the autocomplete are able to reproduce. Right-to-left, centred and end-aligned text is not.\n *\n * @docs-private\n */\nexport const kbqIsTextLaidOutFromStart = (computedStyle: CSSStyleDeclaration): boolean =>\n computedStyle.direction !== 'rtl' && !OFFSET_ALIGNMENTS.includes(computedStyle.textAlign);\n\n/**\n * Rectangle of the caret in `element`, in viewport coordinates, or `null` when there is nothing to measure —\n * the element holds no selection, or it is detached from a rendered document.\n *\n * Falls back to the element's own box for fields whose rendered text is not their value (`password` and\n * friends), for right-to-left text, where the visual order of a bidi line is not a prefix of the value, and for\n * inputs whose text is centred or end-aligned.\n * The result is always clamped to the field's visible box, so a caret scrolled out of view keeps whatever is\n * anchored to it next to the field instead of sending it off screen.\n */\nexport const kbqGetCaretRect = (element: KbqTextAnchor): KbqCaretRect | null => {\n return measure(element, true);\n};\n\n/**\n * Rectangle of the text selected in `element`, in viewport coordinates, collapsing to the caret rectangle\n * ({@link kbqGetCaretRect}) when nothing is selected.\n */\nexport const kbqGetSelectionRect = (element: KbqTextAnchor): KbqCaretRect | null => {\n return measure(element, false);\n};\n\nconst measure = (element: KbqTextAnchor, collapse: boolean): KbqCaretRect | null => {\n const document = element.ownerDocument;\n const window = document.defaultView;\n\n // A server-side DOM has a window but lays nothing out, and has no `getBoundingClientRect` at all.\n if (!window || typeof element.getBoundingClientRect !== 'function') return null;\n\n const computedStyle = window.getComputedStyle(element);\n const box = element.getBoundingClientRect();\n\n if (isInput(element) || isTextArea(element)) {\n const { selectionStart, selectionEnd } = element;\n\n // Input types without a text selection, such as `email` or `number`, report none.\n if (selectionStart === null || selectionEnd === null) return null;\n\n const start = selectionStart;\n const end = collapse ? selectionStart : selectionEnd;\n\n // A textarea measures its lines in a mirror that copies the alignment; a single-line input is measured\n // from its start edge only.\n const unmeasurable = isInput(element)\n ? OPAQUE_INPUT_TYPES.includes(element.type) || !kbqIsTextLaidOutFromStart(computedStyle)\n : computedStyle.direction === 'rtl';\n\n if (unmeasurable) {\n return fieldRect(box);\n }\n\n const rect = isTextArea(element)\n ? measureTextArea(element, computedStyle, box, start, end)\n : measureInput(element, computedStyle, box, start, end);\n\n return clampToField(rect, element, computedStyle, box);\n }\n\n return measureSelection(element, window, box, collapse);\n};\n\n/** The element's own box, used wherever the caret inside it cannot be located. */\nconst fieldRect = ({ left, top, width, height }: DOMRect): KbqCaretRect => ({ x: left, y: top, width, height });\n\nconst measureInput = (\n element: HTMLInputElement,\n computedStyle: CSSStyleDeclaration,\n box: DOMRect,\n start: number,\n end: number\n): KbqCaretRect => {\n const document = element.ownerDocument;\n const { value, scrollLeft } = element;\n const lineHeight = resolveLineHeight(computedStyle);\n const inset = numeric(computedStyle.borderLeftWidth) + numeric(computedStyle.paddingLeft);\n const ruler = kbqCreateTextRuler(document, computedStyle);\n\n document.body.appendChild(ruler);\n\n const startOffset = kbqMeasureRulerText(ruler, value.slice(0, start));\n // A caret is the common case on the typing path, and measuring it twice costs a second layout.\n const endOffset = end === start ? startOffset : kbqMeasureRulerText(ruler, value.slice(0, end));\n\n ruler.remove();\n\n return {\n x: box.left + inset + startOffset - scrollLeft,\n // An input renders its single line vertically centred in the content box, wherever the box ends up.\n y: box.top + (box.height - lineHeight) / 2,\n width: endOffset - startOffset,\n height: lineHeight\n };\n};\n\nconst measureTextArea = (\n element: HTMLTextAreaElement,\n computedStyle: CSSStyleDeclaration,\n box: DOMRect,\n start: number,\n end: number\n): KbqCaretRect => {\n const document = element.ownerDocument;\n const { value, scrollLeft, scrollTop, clientWidth } = element;\n const lineHeight = resolveLineHeight(computedStyle);\n const contentWidth = clientWidth - numeric(computedStyle.paddingLeft) - numeric(computedStyle.paddingRight);\n const ruler = kbqCreateWrappingTextRuler(document, computedStyle, contentWidth);\n\n document.body.appendChild(ruler);\n\n // The rest of the word goes into the ruler too: the field wraps a word that no longer fits as a whole, and a\n // prefix measured alone would stay on the previous row.\n const startOffset = kbqMeasureRulerTextOffset(ruler, value.slice(0, start), wordRest(value, start));\n const endOffset =\n end === start ? startOffset : kbqMeasureRulerTextOffset(ruler, value.slice(0, end), wordRest(value, end));\n\n ruler.remove();\n\n const x = box.left + numeric(computedStyle.borderLeftWidth) + startOffset.left - scrollLeft;\n const y = box.top + numeric(computedStyle.borderTopWidth) + startOffset.top - scrollTop;\n\n return {\n x,\n y,\n // A selection spanning several lines has no single rectangle; the caret line is the half worth\n // anchoring to, so the width collapses as soon as the selection wraps.\n width: endOffset.top === startOffset.top ? endOffset.left - startOffset.left : 0,\n height: lineHeight\n };\n};\n\n/**\n * Rectangle of the document selection inside `element` — the branch that serves `contenteditable`, where the\n * browser lays the text out and the range can be measured directly.\n */\nconst measureSelection = (\n element: HTMLElement,\n window: Window,\n box: DOMRect,\n collapse: boolean\n): KbqCaretRect | null => {\n const selection = window.getSelection();\n\n if (!selection?.rangeCount) return null;\n\n const range = selection.getRangeAt(0);\n\n if (!element.contains(range.commonAncestorContainer)) return null;\n\n const measured = range.cloneRange();\n\n if (collapse) {\n measured.collapse(true);\n }\n\n // A collapsed range, and a range whose only content is a line break, are laid out without a box of their\n // own. The first client rect of the uncollapsed range still carries the line, and the element's own box\n // is the last resort.\n const rect = nonEmptyRect(measured.getBoundingClientRect()) ?? nonEmptyRect(range.getClientRects()[0]);\n\n if (!rect) return fieldRect(box);\n\n return { x: rect.left, y: rect.top, width: collapse ? 0 : rect.width, height: rect.height };\n};\n\nconst nonEmptyRect = (rect: DOMRect | undefined): DOMRect | null => (rect && rect.height > 0 ? rect : null);\n\n/**\n * Pulls the caret rectangle back into the part of the field the user can see.\n *\n * A caret scrolled out of a field is still a valid position, and anchoring to it would push a pop-up away\n * from the control it belongs to — or off screen entirely for a long value.\n */\nconst clampToField = (\n rect: KbqCaretRect,\n element: HTMLInputElement | HTMLTextAreaElement,\n computedStyle: CSSStyleDeclaration,\n box: DOMRect\n): KbqCaretRect => {\n const left = box.left + numeric(computedStyle.borderLeftWidth);\n const top = box.top + numeric(computedStyle.borderTopWidth);\n const right = left + element.clientWidth;\n const bottom = top + element.clientHeight;\n\n const x = clamp(rect.x, left, right);\n\n return {\n x,\n y: clamp(rect.y, top, Math.max(bottom - rect.height, top)),\n width: Math.max(Math.min(rect.x + rect.width, right) - x, 0),\n height: rect.height\n };\n};\n\nconst clamp = (value: number, min: number, max: number): number => Math.min(Math.max(value, min), max);\n\nconst wordRest = (value: string, index: number): string => {\n WORD_REST.lastIndex = index;\n\n return WORD_REST.exec(value)?.[0] ?? '';\n};\n\nconst numeric = (value: string): number => parseFloat(value) || 0;\n\n/**\n * Height of one line of text in the field.\n *\n * `line-height: normal` computes to the keyword rather than to a length in every browser but Firefox, and\n * the font size is the closest stand-in available without laying a line out.\n */\nconst resolveLineHeight = (computedStyle: CSSStyleDeclaration): number =>\n numeric(computedStyle.lineHeight) || numeric(computedStyle.fontSize);\n","import { Renderer2 } from '@angular/core';\n\n/**\n * Events after which the caret of a text field may stand somewhere else.\n *\n * `scroll` is one of them because a field scrolls its own text without any ancestor scrolling, so neither the\n * `ScrollDispatcher` nor an overlay scroll strategy ever hears about it.\n */\nconst CARET_MOVE_EVENTS = ['input', 'keyup', 'click', 'select', 'scroll'] as const;\n\n/**\n * Calls `callback` whenever the caret of `element` may have moved — the user typed, moved the caret, selected\n * text or scrolled the field — and returns the function that stops listening.\n *\n * The listeners are bound in the zone the caller runs it in.\n */\nexport const kbqListenForCaretMoves = (\n renderer: Renderer2,\n element: HTMLElement,\n callback: () => void\n): (() => void) => {\n const unbinders = CARET_MOVE_EVENTS.map((name) => renderer.listen(element, name, callback));\n\n return () => unbinders.forEach((unbind) => unbind());\n};\n","import { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { ElementRef, inject } from '@angular/core';\n\n/**\n * Injects the native element for the current component.\n */\nexport const kbqInjectNativeElement = <T extends Element = HTMLElement>(): T => {\n return inject<ElementRef<T>>(ElementRef<T>).nativeElement;\n};\n\n/**\n * Focuses `element` and scrolls it into view by the shortest distance, leaving a visible one alone.\n *\n * The reveal is explicit because the one `focus()` performs implicitly is not portable: WebKit defers it\n * to a later rendering update, where it lands after — and undoes — any scrolling the reader did in the\n * meantime. Letting the element reveal itself keeps every consumer working, whatever it uses as a scroll\n * container, and the browser resolves that container rather than the caller guessing at it.\n *\n * Pass `skipReveal` when the pointer caused the focus: the element is already under the cursor, so\n * revealing it would shift the list out from under it.\n */\nexport const kbqFocusAndReveal = (element: HTMLElement, skipReveal = false): void => {\n if (typeof element.focus !== 'function') return;\n\n // A focus listener calling back into `focus` must not scroll a second time. Read through shadow\n // roots, where `document.activeElement` reports the host instead of the element that holds focus.\n const wasFocused = _getFocusedElementPierceShadowDom() === element;\n\n element.focus({ preventScroll: true });\n\n if (skipReveal || wasFocused) return;\n\n element.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n};\n\n/** Axis a scroll-overflow check applies to. */\nexport type KbqScrollAxis = 'horizontal' | 'vertical';\n\n/**\n * Largest disagreement (px) between an element's box metrics and the scroll offset the browser actually\n * hands out.\n *\n * `scrollWidth`/`clientWidth` are rounded to whole CSS pixels (up to 1px of error) while the scroll offset\n * snaps to the device-pixel grid, whose step is `1 / devicePixelRatio` CSS px — so the bound is\n * `1 + 1 / devicePixelRatio` and widens as the page is zoomed out, rather than being a constant. At 50% zoom\n * on a 1× display it is already 3px, which is why a fixed tolerance leaks the bug back in at low zoom.\n *\n * The view is resolved from the element rather than a global, so the helper stays usable on the server.\n */\nexport const kbqGetScrollOverflowTolerance = (element: Element): number => {\n return 1 + 1 / (element.ownerDocument.defaultView?.devicePixelRatio || 1);\n};\n\n/**\n * Whether `element` has scroll overflow along `axis` larger than the measurement error of the metrics it is\n * derived from — i.e. whether there is a scroll range the user can actually reach.\n */\nexport const kbqHasScrollOverflow = (element: Element, axis: KbqScrollAxis = 'horizontal'): boolean => {\n const overflow =\n axis === 'horizontal' ? element.scrollWidth - element.clientWidth : element.scrollHeight - element.clientHeight;\n\n return overflow > kbqGetScrollOverflowTolerance(element);\n};\n\n/**\n * Rendered height of an element, or `0` when it has no box.\n *\n * `getClientRects()` returns an empty list for elements that are not laid out and is missing entirely\n * from the server DOM, so both the method and the first rect are read defensively rather than going\n * through `getBoundingClientRect()`, whose zeroes are indistinguishable from a genuinely collapsed\n * element.\n */\nexport const kbqGetElementHeight = (element: Element): number => {\n return element.getClientRects?.()?.[0]?.height ?? 0;\n};\n","import {\n asyncScheduler,\n defer,\n distinctUntilChanged,\n EMPTY,\n MonoTypeOperatorFunction,\n of,\n switchMap,\n timer\n} from 'rxjs';\n\n/** Timing options of `kbqDelayLoadingIndicator`. */\nexport type KbqDelayLoadingIndicatorOptions = {\n /** How long, in milliseconds, an operation has to run before the indicator appears. Defaults to 500. */\n delay?: number;\n /** How long, in milliseconds, the indicator stays visible once it has appeared. Defaults to 300. */\n minDuration?: number;\n};\n\n/**\n * Turns the state of an operation into the visibility of its loading indicator, so that the indicator\n * does not flash: it appears only once the operation has run for `delay`, and once shown stays visible\n * for at least `minDuration`.\n *\n * Use the result for the indicator only. State that blocks a repeated action, such as `disabled`,\n * has to follow the operation itself and change immediately.\n *\n * @example\n * ```ts\n * readonly showIndicator$ = this.loading$.pipe(kbqDelayLoadingIndicator());\n * ```\n */\nexport function kbqDelayLoadingIndicator(\n options: KbqDelayLoadingIndicatorOptions = {}\n): MonoTypeOperatorFunction<boolean> {\n const { delay = 500, minDuration = 300 } = options;\n\n return (source) =>\n defer(() => {\n let shownAt: number | null = null;\n\n return source.pipe(\n distinctUntilChanged(),\n switchMap((loading) => {\n if (loading) {\n // Restarted while the indicator is still shown: keep it rather than hide and show it again.\n if (shownAt !== null) return EMPTY;\n\n const show = defer(() => {\n shownAt = asyncScheduler.now();\n\n return of(true);\n });\n\n return delay > 0 ? timer(delay).pipe(switchMap(() => show)) : show;\n }\n\n if (shownAt === null) return of(false);\n\n const remaining = minDuration - (asyncScheduler.now() - shownAt);\n const hide = defer(() => {\n shownAt = null;\n\n return of(false);\n });\n\n return remaining > 0 ? timer(remaining).pipe(switchMap(() => hide)) : hide;\n }),\n distinctUntilChanged()\n );\n });\n}\n","import { DestroyRef, effect, EnvironmentInjector, inject, QueryList, Signal, untracked } from '@angular/core';\n\n/**\n * Keeps a `QueryList` in step with a signal query, for a public member that stays typed as `QueryList` while the\n * query behind it is a signal one. Call it in an injection context and read the member through the function it\n * returns: a read brings the list up to date, so it is filled in `ngAfterContentInit`/`ngAfterViewInit` already.\n * Call it from `ngAfterContentChecked` (a content query) or `ngAfterViewChecked` (a view query) too: that is where\n * a decorator query emitted `changes` — after new items are bound, before the owner's host bindings. The list is\n * destroyed with its owner, which completes `changes`.\n *\n * ```ts\n * private readonly optionsQuery = contentChildren(KbqOption, { descendants: true });\n * private readonly optionsList = kbqQueryListFrom(this.optionsQuery);\n *\n * get options(): QueryList<KbqOption> {\n * return this.optionsList();\n * }\n *\n * ngAfterContentChecked(): void {\n * this.optionsList();\n * }\n * ```\n *\n * @docs-private\n */\nexport function kbqQueryListFrom<T>(query: Signal<readonly T[]>): () => QueryList<T> {\n const list = new QueryList<T>(true);\n let synced: readonly T[] | undefined;\n\n const sync = (): QueryList<T> => {\n const results = query();\n\n if (results !== synced) {\n synced = results;\n // Untracked: a subscriber to `changes` may write signals, also when a template reads the list.\n untracked(() => {\n list.reset([...results]);\n list.notifyOnChanges();\n });\n }\n\n return list;\n };\n\n // Emits `changes` for an owner whose hook does not sync the list. A root effect: a view one runs before the\n // embedded views are checked, so items added by an `@for` would reach the subscribers unbound.\n const syncEffect = effect(() => sync(), { injector: inject(EnvironmentInjector), manualCleanup: true });\n\n inject(DestroyRef).onDestroy(() => {\n syncEffect.destroy();\n list.destroy();\n });\n\n return sync;\n}\n","import { numberAttribute } from '@angular/core';\n\n/** @deprecated Use `typeof value === 'boolean'`. Will be removed in 22.0.0. */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/** Whether the value is undefined. */\nexport const isUndefined = (value: unknown): value is undefined => {\n return value === undefined;\n};\n\n/** Whether the value is null. */\nexport const isNull = (value: unknown): value is null => {\n return value === null;\n};\n\n/** Whether the value is HTMLElement. */\nexport const isHtmlElement = (value: unknown): value is HTMLElement => {\n return value instanceof HTMLElement;\n};\n\n/** Whether the value is Element. */\nexport const isElement = (value: unknown): value is Element => value instanceof Element;\n\n/** Whether the value is HTMLElement or null. */\nexport const isHtmlElementOrNull = (value: unknown): value is HTMLElement | null => {\n return isHtmlElement(value) || isNull(value);\n};\n\nexport const getNodesWithoutComments = (nodes: NodeList): Node[] => {\n return Array.from(nodes).filter((node) => node.nodeType !== Node.COMMENT_NODE);\n};\n\n/**\n * Child nodes that take part in the icon detection: comments and whitespace-only text nodes are\n * ignored so that detection does not depend on `preserveWhitespaces`.\n */\nexport const getContentNodes = (element: Node): Node[] => {\n return getNodesWithoutComments(element.childNodes).filter(\n (node) => node.nodeType !== Node.TEXT_NODE || !!node.textContent?.trim()\n );\n};\n\n/** Host tags that support the native `disabled` attribute. */\nconst nativelyDisableableTags = new Set([\n 'button',\n 'input',\n 'select',\n 'textarea'\n]);\n\n/** Whether the element supports the native `disabled` attribute; on any other host it is invalid HTML. */\nexport const supportsNativeDisabled = (element: Element): boolean =>\n nativelyDisableableTags.has(element.nodeName.toLowerCase());\n\nexport const leftIconClassName = 'kbq-icon_left';\nexport const rightIconClassName = 'kbq-icon_right';\n\n/** Whether the current platform is a Mac. */\nexport function isMac(): boolean {\n // eslint-disable-next-line no-restricted-globals\n return /^mac/i.test(navigator?.platform);\n}\n\n/**\n * Converts an enumeration (enum) type into a string literal type containing\n * all possible string representations of the values.\n */\nexport type KbqEnumValues<T extends string | number> = `${T}`;\n\n/**\n * Recursive counterpart of `Partial<T>`: every property at every depth becomes optional.\n *\n * Arrays and functions are passed through unchanged — making the elements of `string[]` optional\n * would turn it into `{ 0?: string }`, which is never what a partial override means.\n */\nexport type KbqDeepPartial<T> = T extends (...args: never[]) => unknown\n ? T\n : T extends readonly unknown[]\n ? T\n : T extends object\n ? { [K in keyof T]?: KbqDeepPartial<T[K]> }\n : T;\n\nconst isMergeableObject = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\n/**\n * Recursively completes `patch` from `base` — the runtime counterpart of {@link KbqDeepPartial}.\n *\n * A shallow spread would be wrong for any `T` with a nested section: `{ ...base, ...patch }` replaces a\n * whole sub-object, dropping the sibling keys the patch never mentioned.\n *\n * Returns `base` itself whenever the patch adds nothing, so that overriding one section leaves every\n * other section referentially identical to the object it was completed from.\n */\nexport const kbqDeepMerge = <T>(base: T, patch: NoInfer<KbqDeepPartial<T>> | undefined): T => {\n if (patch === undefined) return base;\n if (!isMergeableObject(base) || !isMergeableObject(patch)) return patch as T;\n\n const result: Record<string, unknown> = { ...base };\n let changed = false;\n\n for (const key of Object.keys(patch)) {\n const merged = kbqDeepMerge(base[key], patch[key]);\n\n if (merged !== result[key]) {\n result[key] = merged;\n changed = true;\n }\n }\n\n return (changed ? result : base) as T;\n};\n\n/**\n * `numberAttribute` for an input whose default is `undefined`: a missing, empty or unparsable value gives\n * `undefined` rather than `NaN` or `0`. Angular's own transform returns `NaN`, which is not nullish and\n * therefore walks past every `??` meant to apply the default, and `0` for `null` and for an empty string.\n */\nexport const kbqOptionalNumberAttribute = (value: unknown): number | undefined => {\n const parsed = value == null || value === '' ? NaN : numberAttribute(value);\n\n return Number.isFinite(parsed) ? parsed : undefined;\n};\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport { afterNextRender, DestroyRef, Directive, inject, Renderer2 } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, merge } from 'rxjs';\nimport { KBQ_WINDOW } from '../tokens';\nimport { kbqInjectNativeElement } from '../utils';\nimport { kbqCreateTextRuler, kbqMeasureRulerText } from './text-ruler';\n\n/**\n * Properties that should be added to the width when `box-sizing: border-box` is applied.\n */\nconst BOX_SIZING_BORDER_BOX_WIDTH_PROPERTIES = [\n 'paddingLeft',\n 'paddingRight',\n 'borderLeftWidth',\n 'borderRightWidth'\n] as const satisfies Array<keyof CSSStyleDeclaration>;\n\nconst FIELD_RESIZE_EVENTS = ['input', 'change', 'focus', 'blur'] as const;\n\n/**\n * Emulates [`field-sizing: content`](https://developer.mozilla.org/en-US/docs/Web/CSS/field-sizing) CSS property for\n * browsers that do not support it natively.\n *\n * @docs-private\n */\n@Directive({\n selector: '[kbqFieldSizingContent]',\n host: {\n class: 'kbq-field-sizing-content'\n },\n exportAs: 'kbqFieldSizingContent'\n})\nexport class KbqFieldSizingContent {\n private readonly element = kbqInjectNativeElement<HTMLInputElement>();\n private readonly renderer = inject(Renderer2);\n private readonly window = inject(KBQ_WINDOW);\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n afterNextRender(() => this.emulate());\n }\n\n private emulate(): void {\n if (CSS.supports('field-sizing', 'content')) {\n this.renderer.setStyle(this.element, 'fieldSizing', 'content');\n\n return;\n }\n\n merge(...FIELD_RESIZE_EVENTS.map((event) => fromEvent(this.element, event)))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.setupWidth());\n\n this.setupWidth();\n }\n\n private setupWidth(): void {\n const computedStyle = this.window.getComputedStyle(this.element);\n const ruler = kbqCreateTextRuler(this.document, computedStyle);\n const text = this.element.value || this.element.placeholder || '';\n\n this.renderer.appendChild(this.document.body, ruler);\n\n // We should add space to prevent text truncation in Safari/Firefox\n const width = this.calculateWidth(kbqMeasureRulerText(ruler, text && `${text} `), computedStyle);\n\n this.renderer.setStyle(this.element, 'width', coerceCssPixelValue(width));\n this.renderer.removeChild(this.document.body, ruler);\n }\n\n private calculateWidth(textWidth: number, computedStyle: CSSStyleDeclaration): number {\n if (computedStyle.boxSizing === 'border-box') {\n return BOX_SIZING_BORDER_BOX_WIDTH_PROPERTIES.reduce(\n (width, property) => width + (parseFloat(computedStyle[property]) || 0),\n textWidth\n );\n }\n\n return textWidth;\n }\n}\n","import { ElementRef, InjectionToken, ModelSignal, Signal } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n/**\n * The part of `KbqFormFieldControl` that code outside `@koobiq/components/form-field` relies on.\n *\n * It is declared here, and not imported, because importing the form-field package from `core` would close a\n * dependency cycle — the same reason `KBQ_FORM_FIELD_REF` exists. `KbqFormFieldControl` structurally satisfies\n * it, so narrow casts are only needed for the members of a specific control (e.g. `numberInput`).\n *\n * @docs-private\n */\nexport interface KbqFormFieldControlRef<T = unknown> {\n /** The value of the control. */\n readonly value: Signal<T | null>;\n /** The element ID for this control. */\n readonly id: Signal<string>;\n /** The placeholder for this control. */\n readonly placeholder: Signal<string | null | undefined>;\n /** Gets the NgControl for this control. */\n readonly ngControl: NgControl | null;\n /** Whether the control is focused. */\n readonly focused: Signal<boolean>;\n /** Whether the control is empty. */\n readonly empty: Signal<boolean>;\n /** Whether the control is required. */\n readonly required: Signal<boolean>;\n /** Whether the control is disabled. */\n readonly disabled: Signal<boolean>;\n /** Whether the control is in an error state. */\n readonly errorState: Signal<boolean>;\n /** Name of the control type, used to build the `kbq-form-field-type-{{controlType}}` class. */\n readonly controlType?: string;\n}\n\n/**\n * Internal contract between `core` and `KbqFormField`, for code that cannot import the form field because of a\n * circular dependency (e.g. `core/select/common.ts`). Application code injects `KBQ_FORM_FIELD` from\n * `@koobiq/components/form-field` instead.\n *\n * @docs-private\n */\nexport interface KbqFormFieldRef {\n /** The form field control, as `KbqFormField.control` reads it. */\n readonly control: Signal<KbqFormFieldControlRef>;\n /** Use when KbqFormField is in an overlay container. */\n inOverlay: ModelSignal<boolean>;\n focus(): void;\n}\n\n/**\n * Injects the `KbqFormField` as a `KbqFormFieldRef` where `@koobiq/components/form-field` cannot be imported: an\n * internal contract between `core` and the form field. Application code injects `KBQ_FORM_FIELD` from\n * `@koobiq/components/form-field` instead.\n *\n * @docs-private\n */\nexport const KBQ_FORM_FIELD_REF = new InjectionToken<KbqFormFieldRef>('KbqFormFieldRef');\n\n/**\n * Contract for an ancestor that wants to override where overlays opened by a nested\n * `KbqFormField`'s control (e.g. a select's dropdown, a datepicker's calendar) are\n * anchored, instead of the form-field's own container.\n */\nexport interface KbqConnectedOverlayOriginProvider {\n /**\n * Element the overlay should be positioned and sized against, or `undefined` to fall\n * back to the form-field's own container.\n */\n getConnectedOverlayOrigin(): ElementRef | undefined;\n}\n\n/**\n * Injection token for `KbqConnectedOverlayOriginProvider`. Provide it on an ancestor\n * component to redirect where a nested `KbqFormField`'s control positions its overlay.\n */\nexport const KBQ_CONNECTED_OVERLAY_ORIGIN = new InjectionToken<KbqConnectedOverlayOriginProvider>(\n 'KbqConnectedOverlayOrigin'\n);\n","import { kbqCreateTextRuler, kbqMeasureRulerText } from './text-ruler';\n\n/**\n * Scrolls a text field horizontally so that its current selection is visible.\n *\n * Browsers scroll a field to the caret only for edits the user makes: a selection set from script leaves\n * the field at whatever offset the last keystroke produced. A masked field re-renders its value and moves\n * the caret between value parts on every keystroke, so without this the field keeps the offset of the part\n * that was edited before and clips the one being edited now.\n *\n * Leaves the field alone when it is not focused, when it renders something other than its value, and in\n * right-to-left text, where the browser's own caret following is already correct.\n */\nexport const kbqRevealSelection = (element: HTMLInputElement): void => {\n const document = element.ownerDocument;\n const window = document.defaultView;\n\n // A field the user has left is the browser's to scroll: it resets the offset on blur, and a write\n // landing after that would park the field mid-value until it is focused again.\n if (!window || document.activeElement !== element) {\n return;\n }\n\n // A password field renders bullets, which are not the widths of the characters behind them.\n if (element.type === 'password') {\n return;\n }\n\n const maxScrollLeft = element.scrollWidth - element.clientWidth;\n\n // The value fits, so any offset the field is left at is an artifact of an earlier, longer value.\n if (maxScrollLeft <= 0) {\n element.scrollLeft = 0;\n\n return;\n }\n\n const computedStyle = window.getComputedStyle(element);\n\n // Every offset below is measured from the left edge, while an RTL field scrolls into negative\n // `scrollLeft`. Mirroring that needs the visual order of a bidi line rather than a prefix of the\n // value, so the browser's own caret following is left in place instead of being overwritten.\n if (computedStyle.direction === 'rtl') {\n return;\n }\n\n const { value, selectionStart, selectionEnd, clientWidth } = element;\n const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\n const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\n const ruler = kbqCreateTextRuler(document, computedStyle);\n\n document.body.appendChild(ruler);\n\n // `scrollLeft` is measured from the start of the padding box, the text starts one `padding-left` in.\n const start = paddingLeft + kbqMeasureRulerText(ruler, value.slice(0, selectionStart ?? 0));\n // A caret is the common case on the typing path, and measuring it twice costs a second layout.\n const end =\n selectionEnd === selectionStart\n ? start\n : paddingLeft + kbqMeasureRulerText(ruler, value.slice(0, selectionEnd ?? 0));\n\n ruler.remove();\n\n // The smallest offset that still shows the selection, so that as much as possible of what precedes it\n // stays on screen. Deriving the offset from the selection alone, instead of nudging the current one,\n // keeps the result independent of where the last keystroke happened to leave the field.\n const minimumRevealingEnd = Math.max(end + paddingRight - clientWidth, 0);\n // A selection wider than the field cannot be shown whole; its start is the half worth keeping.\n const maximumKeepingStart = Math.max(start - paddingLeft, 0);\n\n element.scrollLeft = Math.min(minimumRevealingEnd, maximumKeepingStart, maxScrollLeft);\n};\n\n/**\n * Selects the `[start, end]` range of a text field and keeps it visible with {@link kbqRevealSelection}.\n */\nexport const kbqSetSelectionRange = (element: HTMLInputElement, start: number, end: number): void => {\n element.setSelectionRange(start, end);\n\n kbqRevealSelection(element);\n};\n","import { RULER_INHERITED_PROPERTIES, WRAPPING_RULER_INHERITED_PROPERTIES } from './text-ruler';\n\n/** Layer that renders text over a text field in the field's own layout. */\nexport interface KbqTextMirror {\n /**\n * Shows `hint` exactly where the field would render it between `before` and `after`. Both of those stay\n * transparent: they only take the room the field's own text takes, so the field stays readable through the layer.\n *\n * Returns whether the hint is shown where it belongs: on the row the text before it ends on, and inside the part\n * of the field the user can see. A hint that is not is hidden again.\n */\n update(before: string, hint: string, after: string): boolean;\n /** Hides the layer until the next `update`. */\n hide(): void;\n /** Removes the layer. */\n destroy(): void;\n}\n\nconst MIRROR_PROPERTIES = {\n position: 'absolute',\n boxSizing: 'border-box',\n margin: '0',\n borderStyle: 'solid',\n borderColor: 'transparent',\n overflow: 'hidden',\n color: 'transparent',\n background: 'transparent',\n pointerEvents: 'none'\n} as const satisfies Partial<CSSStyleDeclaration>;\n\nconst MIRRORED_PROPERTIES = [\n ...RULER_INHERITED_PROPERTIES,\n ...WRAPPING_RULER_INHERITED_PROPERTIES,\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth'\n] as const satisfies Array<keyof CSSStyleDeclaration>;\n\nconst numeric = (value: string): number => parseFloat(value) || 0;\n\n/**\n * Creates a {@link KbqTextMirror} for `field`, hidden until its first update. The hint is wrapped in an element with\n * the `${className}__hint` class, which is what gives it a color.\n *\n * The layer is inserted right after the field so that both share one containing block, which has to be positioned —\n * `kbq-form-field` is. It copies the field's typography, wrapping, padding and border widths, and takes the field's\n * size without its scrollbar: the layer has none, and a content box wider than the field's would wrap the text\n * elsewhere.\n *\n * Only call it in the browser.\n *\n * @docs-private\n */\nexport const kbqCreateTextMirror = (\n field: HTMLInputElement | HTMLTextAreaElement,\n className: string\n): KbqTextMirror => {\n const document = field.ownerDocument;\n const window = document.defaultView!;\n const isTextArea = field.tagName === 'TEXTAREA';\n const layer = document.createElement('div');\n // Stands where the text before the hint ends. Its zero-width space is a break opportunity: without one, the typed\n // prefix and the hint form a single word, and a word that no longer fits would drag the prefix onto the next row.\n const marker = document.createElement('span');\n const hint = document.createElement('span');\n\n layer.className = className;\n layer.setAttribute('aria-hidden', 'true');\n layer.hidden = true;\n marker.textContent = '\\u200b';\n hint.className = `${className}__hint`;\n Object.assign(layer.style, MIRROR_PROPERTIES);\n\n field.after(layer);\n\n const sync = () => {\n const computedStyle = window.getComputedStyle(field);\n\n MIRRORED_PROPERTIES.forEach((property) => {\n layer.style[property] = computedStyle[property];\n });\n\n const horizontalBorders = numeric(computedStyle.borderLeftWidth) + numeric(computedStyle.borderRightWidth);\n const verticalBorders = numeric(computedStyle.borderTopWidth) + numeric(computedStyle.borderBottomWidth);\n\n layer.style.left = `${field.offsetLeft}px`;\n layer.style.top = `${field.offsetTop}px`;\n layer.style.width = `${field.clientWidth + horizontalBorders}px`;\n layer.style.height = `${field.clientHeight + verticalBorders}px`;\n\n if (!isTextArea) {\n // An input keeps its value on one line whatever its `white-space`, and centres that line in the content\n // box, while a block starts it at the top; a line as tall as the content box puts the text where the\n // input does.\n const contentHeight =\n field.clientHeight - numeric(computedStyle.paddingTop) - numeric(computedStyle.paddingBottom);\n\n layer.style.whiteSpace = 'pre';\n layer.style.lineHeight = `${contentHeight}px`;\n }\n\n layer.scrollTop = field.scrollTop;\n layer.scrollLeft = field.scrollLeft;\n };\n\n const isHintInPlace = (): boolean => {\n const hintRect = hint.getClientRects()[0];\n const markerRect = marker.getClientRects()[0];\n\n // Nothing is laid out, so there is no position to check the hint against.\n if (!hintRect || !markerRect) return true;\n\n const layerRect = layer.getBoundingClientRect();\n const left = layerRect.left + layer.clientLeft;\n const top = layerRect.top + layer.clientTop;\n\n return (\n Math.abs(hintRect.top - markerRect.top) < 1 &&\n hintRect.left >= left - 1 &&\n hintRect.left < left + layer.clientWidth &&\n hintRect.top >= top - 1 &&\n hintRect.top < top + layer.clientHeight\n );\n };\n\n // A growing textarea changes its height after the input that made it grow, when nothing else calls `update`.\n const resizeObserver = window.ResizeObserver\n ? new window.ResizeObserver(() => {\n if (!layer.hidden) sync();\n })\n : null;\n\n resizeObserver?.observe(field);\n\n return {\n update: (before, hintText, after) => {\n hint.textContent = hintText;\n layer.textContent = '';\n // The trailing zero-width space gives a last line left empty by a newline the height the field gives it,\n // so that the layer scrolls as far as the field does.\n layer.append(before, marker, hint, after, '\\u200b');\n layer.hidden = false;\n // After the content: the scroll offsets are clamped to what the layer holds when they are written.\n sync();\n\n const inPlace = isHintInPlace();\n\n layer.hidden = !inPlace;\n\n return inPlace;\n },\n hide: () => {\n layer.hidden = true;\n },\n destroy: () => {\n resizeObserver?.disconnect();\n layer.remove();\n }\n };\n};\n","/** Part of a text field's value that is being completed: the query right before the caret. */\nexport interface KbqTextQuery {\n /** Index the query starts at, including its trigger character. Replacing the query starts here. */\n start: number;\n /** Index the query ends at — the caret. */\n end: number;\n /** Text to match the options against, without the trigger character. */\n text: string;\n /** Trigger the query starts with, or `null` when the query is the word before the caret. */\n trigger: string | null;\n}\n\n/** Options of {@link kbqGetTextQuery}. */\nexport interface KbqTextQueryOptions {\n /**\n * Strings that start a query, such as `/` for commands or `@` for mentions. When empty, the word before the\n * caret is the query.\n */\n triggers?: readonly string[];\n /** Shortest query that counts. Defaults to `1` for a word and to `0` after a trigger. */\n minLength?: number;\n}\n\n/** A character a word is made of: a letter, a combining mark or a digit of any script, `_` or `-`. */\nconst WORD_CHARACTER = /^[\\p{L}\\p{M}\\p{N}_-]$/u;\n\nconst WHITESPACE = /\\s/;\n\n/**\n * Query right before `caret` in `value`, or `null` when the text there is not one.\n *\n * With `triggers`, the query runs from the closest trigger to the caret. The trigger has to start the line or\n * follow whitespace — so that the `@` of an e-mail address opens nothing — and no whitespace may stand between it\n * and the caret. Without `triggers`, the query is the word the caret ends.\n */\nexport const kbqGetTextQuery = (\n value: string,\n caret: number,\n { triggers = [], minLength }: KbqTextQueryOptions = {}\n): KbqTextQuery | null => {\n if (triggers.length) {\n return findTriggeredQuery(value.slice(0, caret), triggers, minLength ?? 0);\n }\n\n const start = findWordStart(value, caret);\n\n if (caret - start < (minLength ?? 1)) return null;\n\n return { start, end: caret, text: value.slice(start, caret), trigger: null };\n};\n\n/**\n * Start of the word that ends at `caret`, walking back one code point at a time. A pattern anchored at the caret is\n * retried from every position of a long run of word characters that does not reach it, which takes seconds for a\n * pasted token.\n */\nconst findWordStart = (value: string, caret: number): number => {\n let start = caret;\n\n while (start > 0) {\n const previous = value.charCodeAt(start - 1);\n // The second half of a surrogate pair is read together with the first.\n const size = previous >= 0xdc00 && previous <= 0xdfff && start > 1 ? 2 : 1;\n\n if (!WORD_CHARACTER.test(value.slice(start - size, start))) break;\n\n start -= size;\n }\n\n return start;\n};\n\nconst findTriggeredQuery = (\n beforeCaret: string,\n triggers: readonly string[],\n minLength: number\n): KbqTextQuery | null => {\n let closest: KbqTextQuery | null = null;\n\n for (const trigger of triggers) {\n if (!trigger) continue;\n\n const start = beforeCaret.lastIndexOf(trigger);\n\n if (start < 0 || (closest && start <= closest.start)) continue;\n\n const text = beforeCaret.slice(start + trigger.length);\n const startsToken = start === 0 || WHITESPACE.test(beforeCaret[start - 1]);\n\n if (!startsToken || WHITESPACE.test(text)) continue;\n\n closest = { start, end: beforeCaret.length, text, trigger };\n }\n\n return closest && closest.text.length >= minLength ? closest : null;\n};\n","import { KbqLocaleStringsData } from './types';\n\nexport const enUSLocaleData = {\n a11y: {\n close: 'Close',\n save: 'Save',\n saving: 'Saving',\n saveFailed: 'Couldn’t save',\n cancel: 'Cancel',\n edit: 'Edit',\n removeAll: 'Remove all',\n remove: 'Remove',\n breadcrumbs: 'Breadcrumbs',\n expandBreadcrumbs: 'Show hidden breadcrumbs',\n previousMonth: 'Previous month',\n currentDate: 'Current date',\n nextMonth: 'Next month',\n clear: 'Clear',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n resizeColumns: 'Resize columns',\n resizePanels: 'Resize panels',\n toastRegion: 'Notifications',\n optionActions: 'Actions',\n progressBar: 'Progress'\n },\n select: { hiddenItemsText: '+{{ number }}', selectAll: 'Select all' },\n datepicker: {\n placeholder: 'yyyy-mm-dd',\n dateInput: 'yyyy-MM-dd'\n },\n timepicker: {\n placeholder: {\n full: 'hh:mm:ss',\n short: 'hh:mm'\n }\n },\n fileUpload: {\n a11y: {\n fileAdded: '{{ fileName }} added',\n fileRemoved: '{{ fileName }} removed',\n filesNotAdded: 'Some of the files were not added'\n },\n single: {\n captionText: 'Drag file here or {{ browseLink }}',\n captionTextOnlyFolder: 'Drag here or {{ browseLinkFolder }}',\n captionTextWithFolder: 'Drag here or {{ browseLink }} or {{ browseLinkFolderMixed }}',\n browseLink: 'choose file',\n browseLinkFolder: 'choose folder',\n browseLinkFolderMixed: 'folder'\n },\n multiple: {\n captionText: 'or {{ browseLink }}',\n captionTextOnlyFolder: 'or {{ browseLinkFolder }}',\n captionTextWithFolder: 'or {{ browseLink }} or {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Drag more or {{ browseLink }}',\n captionTextForCompactSize: 'Drag here or {{ browseLink }}',\n browseLink: 'choose files',\n browseLinkFolder: 'choose folder',\n browseLinkFolderMixed: 'folder',\n title: 'Drag here'\n }\n },\n codeBlock: {\n softWrapOnTooltip: 'Enable word wrap',\n softWrapOffTooltip: 'Disable word wrap',\n downloadTooltip: 'Download',\n copiedTooltip: '✓ Copied',\n copyTooltip: 'Copy',\n viewAllText: 'Show all',\n viewLessText: 'Show less',\n openExternalSystemTooltip: 'Open in the external system'\n },\n timezone: {\n searchPlaceholder: 'City or time zone',\n otherCountriesLabel: 'Other countries'\n },\n actionsPanel: {\n closeTooltip: 'Clear'\n },\n filterBar: {\n reset: {\n buttonName: 'Reset'\n },\n search: {\n tooltip: 'Search',\n placeholder: 'Search'\n },\n filters: {\n defaultName: 'Filters',\n saveNewFilterTooltip: 'Save as new',\n searchPlaceholder: 'Search',\n searchEmptyResult: 'Nothing found',\n saveAsNewFilter: 'Save as new',\n saveChangesHeader: 'New name',\n saveChangesButton: 'Save',\n saveAsNewHeader: 'New filter',\n saveAsNewButton: 'Save as new',\n change: 'Rename',\n resetChanges: 'Reset',\n remove: 'Delete',\n errorHint: 'A filter with this name already exists',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n actionsTooltip: 'Filter actions'\n },\n add: {\n tooltip: 'Add filter',\n addedAnnouncement: 'The \"{{ name }}\" filter was added'\n },\n refresher: {\n refresh: 'Refresh',\n settings: 'Refresh settings'\n },\n pipe: {\n clearButtonTooltip: 'Clear',\n removeButtonTooltip: 'Delete',\n applyButton: 'Apply',\n emptySearchResult: 'Nothing found',\n selectAll: 'Select all',\n noOptions: 'No options'\n },\n datePipe: {\n customPeriod: 'Custom period',\n customPeriodFrom: 'from',\n customPeriodTo: 'to',\n customPeriodErrorHint: 'The period cannot start later than it ends',\n customPeriodMinIntervalErrorHint: 'The period cannot be shorter than {{ value }}',\n customPeriodMaxIntervalErrorHint: 'The period cannot be longer than {{ value }}',\n backToPeriodSelection: 'Back'\n }\n },\n clampedText: {\n openText: 'Expand',\n closeText: 'Collapse',\n showMoreText: 'Show {exceededItemCount} more',\n moreText: 'more'\n },\n navbar: {\n toggle: {\n expand: 'Expand',\n collapse: 'Collapse'\n }\n },\n searchExpandable: {\n tooltip: 'Search',\n placeholder: 'Search'\n },\n appSwitcher: {\n searchPlaceholder: 'Search',\n searchEmptyResult: 'Nothing found',\n sitesHeader: 'Other sites',\n clearSearch: 'Clear search'\n },\n username: {\n siteLabel: 'site'\n },\n popoverConfirm: {\n confirmText: 'Are you sure you want to continue?',\n confirmButtonText: 'Yes'\n },\n timeRange: {\n title: {\n placeholder: 'Period'\n },\n editor: {\n from: 'from',\n to: 'to',\n apply: 'Apply',\n cancel: 'Cancel',\n rangeLabel: 'Period',\n outOfBoundsError: 'Allowed period: {{ value }}',\n allTime: 'All time',\n currentQuarter: 'This quarter',\n currentYear: 'This year',\n allTimeOption: 'All time',\n currentQuarterOption: 'This quarter',\n currentYearOption: 'This year'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: 'and',\n YEARS: `{years, plural,\n one {# year}\n other {Last # years}\n }`,\n MONTHS: `{months, plural,\n one {Last month}\n other {Last # months}\n }`,\n WEEKS: `{weeks, plural,\n one {Last week}\n other {Last # weeks}\n }`,\n DAYS: `{days, plural,\n one {Last day}\n other {Last # days}\n }`,\n HOURS: `{hours, plural,\n one {Last hour}\n other {Last # hours}\n }`,\n MINUTES: `{minutes, plural,\n one {Last minute}\n other {Last # minutes}\n }`,\n SECONDS: `{seconds, plural,\n one {Last second}\n other {Last # seconds}\n }`,\n YEARS_FRACTION: `{years} years`,\n MONTHS_FRACTION: `{months} months`\n },\n option: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: 'and',\n YEARS: `{years, plural,\n one {Last year}\n other {Last # years}\n }`,\n MONTHS: `{months, plural,\n one {Last month}\n other {Last # months}\n }`,\n WEEKS: `{weeks, plural,\n one {Last week}\n other {Last # weeks}\n }`,\n DAYS: `{days, plural,\n one {Last day}\n other {Last # days}\n }`,\n HOURS: `{hours, plural,\n one {Last hour}\n other {Last # hours}\n }`,\n MINUTES: `{minutes, plural,\n one {Last minute}\n other {Last # minutes}\n }`,\n SECONDS: `{seconds, plural,\n one {Last second}\n other {Last # seconds}\n }`,\n YEARS_FRACTION: `{years} years`,\n MONTHS_FRACTION: `{months} months`\n }\n }\n },\n notificationCenter: {\n notifications: 'Notifications',\n remove: 'Delete',\n removeAll: 'Delete all',\n doNotDisturb: 'Turn off notifications',\n showPopUpNotifications: 'Turn on notifications',\n noNotifications: 'No notifications yet',\n failedToLoadNotifications: 'Failed to load notifications.',\n repeat: 'Try again',\n loadingMore: 'Loading notifications',\n unread: 'Unread'\n }\n} satisfies KbqLocaleStringsData;\n","import { KbqLocaleStringsData } from './types';\n\nexport const esLALocaleData = {\n a11y: {\n close: 'Cerrar',\n save: 'Guardar',\n saving: 'Guardando',\n saveFailed: 'No se pudo guardar',\n cancel: 'Cancelar',\n edit: 'Editar',\n removeAll: 'Eliminar todo',\n remove: 'Eliminar',\n breadcrumbs: 'Ruta de navegación',\n expandBreadcrumbs: 'Mostrar elementos ocultos',\n previousMonth: 'Mes anterior',\n currentDate: 'Fecha actual',\n nextMonth: 'Mes siguiente',\n clear: 'Borrar',\n showPassword: 'Mostrar la contraseña',\n hidePassword: 'Ocultar la contraseña',\n resizeColumns: 'Redimensionar columnas',\n resizePanels: 'Redimensionar paneles',\n toastRegion: 'Notificaciones',\n optionActions: 'Acciones',\n progressBar: 'Progreso'\n },\n select: {\n hiddenItemsText: '+{{ number }}',\n selectAll: 'Seleccionar todo'\n },\n datepicker: {\n placeholder: 'dd/mm/aaaa'\n },\n timepicker: {\n placeholder: {\n full: 'hh:mm:ss',\n short: 'hh:mm'\n }\n },\n fileUpload: {\n a11y: {\n fileAdded: '{{ fileName }} agregado',\n fileRemoved: '{{ fileName }} eliminado',\n filesNotAdded: 'Algunos archivos no se agregaron'\n },\n single: {\n captionText: 'Arrastre el archivo aquí o {{ browseLink }}',\n captionTextOnlyFolder: 'Arrastre el archivo aquí o {{ browseLinkFolder }}',\n captionTextWithFolder: 'Arrastre el archivo aquí o {{ browseLink }} o {{ browseLinkFolderMixed }}',\n browseLink: 'elija',\n browseLinkFolder: 'carpeta',\n browseLinkFolderMixed: 'carpeta'\n },\n multiple: {\n captionText: 'Arrastre aquí o {{ browseLink }}',\n captionTextOnlyFolder: 'Arrastre aquí o {{ browseLinkFolder }}',\n captionTextWithFolder: 'Arrastre aquí o {{ browseLink }} o {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Arrastre más archivos aquí o {{ browseLink }}',\n captionTextForCompactSize: 'Arrastre archivos o {{ browseLink }}',\n browseLink: 'elija',\n browseLinkFolder: 'carpeta',\n browseLinkFolderMixed: 'carpeta',\n title: 'Cargue los archivos'\n }\n },\n codeBlock: {\n softWrapOnTooltip: 'Activar el ajuste de texto',\n softWrapOffTooltip: 'Desactivar el ajuste de texto',\n downloadTooltip: 'Descargar',\n copiedTooltip: '✓ Copiado',\n copyTooltip: 'Copiar',\n viewAllText: 'Mostrar todo',\n viewLessText: 'Mostrar menos',\n openExternalSystemTooltip: 'Abrir en el sistema externo'\n },\n timezone: {\n searchPlaceholder: 'Ciudad o zona horaria',\n otherCountriesLabel: 'Otros países'\n },\n actionsPanel: {\n closeTooltip: 'Desmarque'\n },\n filterBar: {\n reset: {\n buttonName: 'Restablecer'\n },\n search: {\n tooltip: 'Búsqueda',\n placeholder: 'Búsqueda'\n },\n filters: {\n defaultName: 'Filtros',\n saveNewFilterTooltip: 'Guardar el filtro nuevo',\n searchPlaceholder: 'Búsqueda',\n searchEmptyResult: 'No se encontró nada',\n saveAsNewFilter: 'Guardar como filtro nuevo',\n saveChangesHeader: 'Nuevo nombre',\n saveChangesButton: 'Guardar cambios',\n saveAsNewHeader: 'Nuevo filtro',\n saveAsNewButton: 'Guardar como nuevo',\n change: 'Renombrar',\n resetChanges: 'Restablecer',\n remove: 'Eliminar',\n errorHint: 'No se pudo guardar el filtro. Intente de nuevo o comuníquese con el administrador.',\n saveButton: 'Guardar',\n cancelButton: 'Cancelar',\n actionsTooltip: 'Acciones de filtro'\n },\n add: {\n tooltip: 'Agregar filtro',\n addedAnnouncement: 'Filtro {{ name }} agregado'\n },\n refresher: {\n refresh: 'Actualizar',\n settings: 'Configuración de actualización'\n },\n pipe: {\n clearButtonTooltip: 'Borrar',\n removeButtonTooltip: 'Eliminar',\n applyButton: 'Aplicar',\n emptySearchResult: 'No se encontró nada',\n selectAll: 'Seleccionar todo',\n noOptions: 'Sin opciones'\n },\n datePipe: {\n customPeriod: 'Personalizar período',\n customPeriodFrom: 'desde',\n customPeriodTo: 'hasta',\n customPeriodErrorHint: 'El inicio del período no puede estar después del fin',\n customPeriodMinIntervalErrorHint: 'El período no puede ser más corto que {{ value }}',\n customPeriodMaxIntervalErrorHint: 'El período no puede ser más largo que {{ value }}',\n backToPeriodSelection: 'Atrás'\n }\n },\n clampedText: {\n openText: 'Expandir',\n closeText: 'Contraer',\n showMoreText: 'Mostrar {exceededItemCount} más',\n moreText: 'más'\n },\n navbar: {\n toggle: {\n expand: 'Expandir',\n collapse: 'Colapsar'\n }\n },\n searchExpandable: {\n tooltip: 'Búsqueda',\n placeholder: 'Búsqueda'\n },\n appSwitcher: {\n searchPlaceholder: 'Búsqueda',\n searchEmptyResult: 'No se encontró nada',\n sitesHeader: 'Otros sitios',\n clearSearch: 'Borrar la búsqueda'\n },\n username: {\n siteLabel: 'sitio'\n },\n popoverConfirm: {\n confirmText: '¿Está seguro de que desea continuar?',\n confirmButtonText: 'Sí'\n },\n timeRange: {\n title: {\n placeholder: 'Seleccione el período'\n },\n editor: {\n from: 'de',\n to: 'a',\n apply: 'Aplicar',\n cancel: 'Cancelar',\n rangeLabel: 'Período',\n outOfBoundsError: 'Período permitido: {{ value }}',\n allTime: 'por todo el tiempo',\n currentQuarter: 'por el trimestre actual',\n currentYear: 'por el año actual',\n allTimeOption: 'Todo el tiempo',\n currentQuarterOption: 'Trimestre actual',\n currentYearOption: 'Año actual'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ', ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {# año}\n other {últimos # años}\n }`,\n MONTHS: `{months, plural,\n one {último mes}\n other {últimos # meses}\n }`,\n WEEKS: `{weeks, plural,\n one {última semana}\n other {últimas # semanas}\n }`,\n DAYS: `{days, plural,\n one {último día}\n other {últimos # días}\n }`,\n HOURS: `{hours, plural,\n one {última hora}\n other {últimas # horas}\n }`,\n MINUTES: `{minutes, plural,\n one {último minuto}\n other {últimos # minutos}\n }`,\n SECONDS: `{seconds, plural,\n one {último segundo}\n other {últimos # segundos}\n }`,\n YEARS_FRACTION: `{years} años`,\n MONTHS_FRACTION: `{months} meses`\n },\n option: {\n SEPARATOR: ', ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {Último año}\n other {Últimos # años}\n }`,\n MONTHS: `{months, plural,\n one {Último mes}\n other {Últimos # meses}\n }`,\n WEEKS: `{weeks, plural,\n one {Última semana}\n other {Últimas # semanas}\n }`,\n DAYS: `{days, plural,\n one {Último día}\n other {Últimos # días}\n }`,\n HOURS: `{hours, plural,\n one {Última hora}\n other {Últimas # horas}\n }`,\n MINUTES: `{minutes, plural,\n one {Último minuto}\n other {Últimos # minutos}\n }`,\n SECONDS: `{seconds, plural,\n one {Último segundo}\n other {Últimos # segundos}\n }`,\n YEARS_FRACTION: `{years} años`,\n MONTHS_FRACTION: `{months} meses`\n }\n }\n },\n notificationCenter: {\n notifications: 'Notificaciones',\n remove: 'Eliminar',\n removeAll: 'Eliminar todo',\n doNotDisturb: 'No molestar',\n showPopUpNotifications: 'Mostrar notificaciones emergentes',\n noNotifications: 'Sin notificaciones',\n failedToLoadNotifications: 'Error al cargar las notificaciones',\n repeat: 'Repetir',\n loadingMore: 'Cargando más notificaciones',\n unread: 'No leído'\n }\n} satisfies KbqLocaleStringsData;\n","import { KbqLocaleFormattersData } from './types';\n\nexport const enUSFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: '',\n groupSeparator: '.',\n thousand: 'K',\n million: 'M',\n billion: 'B',\n trillion: 'T'\n }\n }\n },\n input: {\n number: {\n groupSeparator: [','],\n fractionSeparator: '.'\n }\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['B', 'KB', 'MB', 'GB', 'TB'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['B', 'KiB', 'MiB', 'GiB', 'TiB'],\n base: 2,\n power: 10\n }\n }\n }\n} satisfies KbqLocaleFormattersData;\n\nexport const esLAFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: '',\n groupSeparator: ',',\n thousand: 'K',\n million: 'M',\n billion: 'MRD',\n trillion: 'B'\n },\n decimal: {\n viewGroupSeparator: '\\u2009'\n }\n }\n },\n input: {\n number: {\n // nbsp is generated automatically and used by default in spec\n groupSeparator: [' ', ' ', '\\u2009'],\n fractionSeparator: ',',\n viewGroupSeparator: '\\u2009'\n }\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['B', 'KB', 'MB', 'GB', 'TB'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['B', 'KiB', 'MiB', 'GiB', 'TiB'],\n base: 2,\n power: 10\n }\n }\n }\n} satisfies KbqLocaleFormattersData;\n\nexport const ptBRFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: ' ',\n groupSeparator: ',',\n thousand: 'mil',\n million: 'mi',\n billion: 'bi',\n trillion: 'tri'\n }\n }\n },\n input: {\n number: {\n groupSeparator: ['.'],\n fractionSeparator: ','\n }\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['B', 'KB', 'MB', 'GB', 'TB'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['B', 'KiB', 'MiB', 'GiB', 'TiB'],\n base: 2,\n power: 10\n }\n }\n }\n} satisfies KbqLocaleFormattersData;\n\nexport const ruRUFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: ' ',\n groupSeparator: ',',\n thousand: 'К',\n million: 'М',\n // Latin `B` (U+0042) according to UX Guidelines.\n billion: 'B',\n trillion: 'Т'\n },\n decimal: {\n viewGroupSeparator: '\\u2009'\n }\n }\n },\n input: {\n number: {\n // nbsp is generated automatically and used by default in spec\n groupSeparator: [' ', ' ', '\\u2009'],\n fractionSeparator: ',',\n startFormattingFrom: 4,\n viewGroupSeparator: '\\u2009'\n }\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['Б', 'КБ', 'МБ', 'ГБ', 'ТБ'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['Б', 'КиБ', 'МиБ', 'ГиБ', 'ТиБ'],\n base: 2,\n power: 10\n }\n }\n }\n} satisfies KbqLocaleFormattersData;\n\nexport const tkTMFormattersData = {\n formatters: {\n number: {\n rounding: {\n separator: ' ',\n groupSeparator: '',\n thousand: 'M',\n million: 'Mn',\n billion: 'Mr',\n trillion: 'Tn'\n }\n }\n },\n input: {\n number: {\n groupSeparator: [' ', ' ', '\\u2009'],\n fractionSeparator: ',',\n viewGroupSeparator: '\\u2009'\n }\n },\n sizeUnits: {\n defaultUnitSystem: 'SI',\n defaultPrecision: 2,\n unitSystems: {\n SI: {\n abbreviations: ['B', 'KB', 'MB', 'GB', 'TB'],\n base: 10,\n power: 3\n },\n IEC: {\n abbreviations: ['B', 'KiB', 'MiB', 'GiB', 'TiB'],\n base: 2,\n power: 10\n }\n }\n }\n} satisfies KbqLocaleFormattersData;\n","import { KbqLocaleStringsData } from './types';\n\nexport const ptBRLocaleData = {\n a11y: {\n close: 'Fechar',\n save: 'Salvar',\n saving: 'Salvando',\n saveFailed: 'Não foi possível salvar',\n cancel: 'Cancelar',\n edit: 'Editar',\n removeAll: 'Remover tudo',\n remove: 'Remover',\n breadcrumbs: 'Trilha de navegação',\n expandBreadcrumbs: 'Mostrar itens ocultos',\n previousMonth: 'Mês anterior',\n currentDate: 'Data atual',\n nextMonth: 'Próximo mês',\n clear: 'Apagar',\n showPassword: 'Mostrar a senha',\n hidePassword: 'Ocultar a senha',\n resizeColumns: 'Redimensionar colunas',\n resizePanels: 'Redimensionar painéis',\n toastRegion: 'Notificações',\n optionActions: 'Ações',\n progressBar: 'Progresso'\n },\n select: {\n hiddenItemsText: '+{{ number }}',\n selectAll: 'Selecionar tudo'\n },\n datepicker: {\n placeholder: 'dd/mm/yyyy'\n },\n timepicker: {\n placeholder: {\n full: 'hh:mm:ss',\n short: 'hh:mm'\n }\n },\n fileUpload: {\n a11y: {\n fileAdded: '{{ fileName }} adicionado',\n fileRemoved: '{{ fileName }} removido',\n filesNotAdded: 'Alguns arquivos não foram adicionados'\n },\n single: {\n captionText: 'Arrastar o arquivo aqui ou {{ browseLink }}',\n captionTextOnlyFolder: 'Arrastar o arquivo aqui ou {{ browseLinkFolder }}',\n captionTextWithFolder: 'Arrastar o arquivo aqui ou {{ browseLink }} ou {{ browseLinkFolderMixed }}',\n browseLink: 'escolher',\n browseLinkFolder: 'pasta',\n browseLinkFolderMixed: 'pasta'\n },\n multiple: {\n captionText: 'Arrastar aqui ou {{ browseLink }}',\n captionTextOnlyFolder: 'Arrastar aqui ou {{ browseLinkFolder }}',\n captionTextWithFolder: 'Arrastar aqui ou {{ browseLink }} ou {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Arrastar mais arquivos aqui ou {{ browseLink }}',\n captionTextForCompactSize: 'Arrastar arquivos ou {{ browseLink }}',\n browseLink: 'escolher',\n browseLinkFolder: 'pasta',\n browseLinkFolderMixed: 'pasta',\n title: 'Carregar arquivos'\n }\n },\n codeBlock: {\n softWrapOnTooltip: 'Ativar quebra de linha',\n softWrapOffTooltip: 'Desativar quebra de linha',\n downloadTooltip: 'Baixar',\n copiedTooltip: '✓ Copiado',\n copyTooltip: 'Copiar',\n viewAllText: 'Mostrar todos',\n viewLessText: 'Mostrar menos',\n openExternalSystemTooltip: 'Abrir em sistema externo'\n },\n timezone: {\n searchPlaceholder: 'Cidade ou fuso horário',\n otherCountriesLabel: 'Outros países'\n },\n actionsPanel: {\n closeTooltip: 'Desmarcar'\n },\n filterBar: {\n reset: {\n buttonName: 'Reconfigurar'\n },\n search: {\n tooltip: 'Buscar',\n placeholder: 'Buscar'\n },\n filters: {\n defaultName: 'Filtros',\n saveNewFilterTooltip: 'Salve o filtro novo',\n searchPlaceholder: 'Buscar',\n searchEmptyResult: 'Nada encontrado',\n saveAsNewFilter: 'Salve o filtro novo',\n saveChangesHeader: 'Novo nome',\n saveChangesButton: 'Salve as mudanças',\n saveAsNewHeader: 'Novo filtro',\n saveAsNewButton: 'Salve como novo',\n change: 'Renomear',\n resetChanges: 'Reconfigurar',\n remove: 'Deletar',\n errorHint: 'O filtro não pôde ser salvo. Tente de novo ou entre em contato com o administrador.',\n saveButton: 'Salvar',\n cancelButton: 'Cancelar',\n actionsTooltip: 'Ações do filtro'\n },\n add: {\n tooltip: 'Adicionar filtros',\n addedAnnouncement: 'Filtro {{ name }} adicionado'\n },\n refresher: {\n refresh: 'Atualizar',\n settings: 'Configurações de atualização'\n },\n pipe: {\n clearButtonTooltip: 'Apagar',\n removeButtonTooltip: 'Deletar',\n applyButton: 'Aplicar',\n emptySearchResult: 'Nada encontrado',\n selectAll: 'Selecionar todos',\n noOptions: 'Sem opções'\n },\n datePipe: {\n customPeriod: 'Selecionar período',\n customPeriodFrom: 'de',\n customPeriodTo: 'até',\n customPeriodErrorHint: 'O período não pode começar depois de quando acaba',\n customPeriodMinIntervalErrorHint: 'O período não pode ser menor que {{ value }}',\n customPeriodMaxIntervalErrorHint: 'O período não pode ser maior que {{ value }}',\n backToPeriodSelection: 'Voltar'\n }\n },\n clampedText: {\n openText: 'Expandir',\n closeText: 'Recolher',\n showMoreText: 'Mostrar mais {exceededItemCount}',\n moreText: 'mais'\n },\n navbar: {\n toggle: {\n expand: 'Expandir',\n collapse: 'Colapso'\n }\n },\n searchExpandable: {\n tooltip: 'Pesquisar',\n placeholder: 'Pesquisar'\n },\n appSwitcher: {\n searchPlaceholder: 'Pesquisar',\n searchEmptyResult: 'Nada encontrado',\n sitesHeader: 'Outros sites',\n clearSearch: 'Limpar a pesquisa'\n },\n username: {\n siteLabel: 'site'\n },\n popoverConfirm: {\n confirmText: 'Tem certeza de que deseja continuar?',\n confirmButtonText: 'Sim'\n },\n timeRange: {\n title: {\n placeholder: 'Selecione o período'\n },\n editor: {\n from: 'de',\n to: 'até',\n apply: 'Aplicar',\n cancel: 'Cancelar',\n rangeLabel: 'Período',\n outOfBoundsError: 'Período permitido: {{ value }}',\n allTime: 'por todo o tempo',\n currentQuarter: 'pelo trimestre atual',\n currentYear: 'pelo ano atual',\n allTimeOption: 'Todo o tempo',\n currentQuarterOption: 'Trimestre atual',\n currentYearOption: 'Ano atual'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ' e ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {# ano}\n other {últimos # anos}\n }`,\n MONTHS: `{months, plural,\n one {último mês}\n other {últimos # meses}\n }`,\n WEEKS: `{weeks, plural,\n one {última semana}\n other {últimas # semanas}\n }`,\n DAYS: `{days, plural,\n one {último dia}\n other {últimos # dias}\n }`,\n HOURS: `{hours, plural,\n one {última hora}\n other {últimas # horas}\n }`,\n MINUTES: `{minutes, plural,\n one {último minuto}\n other {últimos # minutos}\n }`,\n SECONDS: `{seconds, plural,\n one {último segundo}\n other {últimos # segundos}\n }`,\n YEARS_FRACTION: `{years} anos`,\n MONTHS_FRACTION: `{months} meses`\n },\n option: {\n SEPARATOR: ' e ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {Último ano}\n other {Últimos # anos}\n }`,\n MONTHS: `{months, plural,\n one {Último mês}\n other {Últimos # meses}\n }`,\n WEEKS: `{weeks, plural,\n one {Última semana}\n other {Últimas # semanas}\n }`,\n DAYS: `{days, plural,\n one {Último dia}\n other {Últimos # dias}\n }`,\n HOURS: `{hours, plural,\n one {Última hora}\n other {Últimas # horas}\n }`,\n MINUTES: `{minutes, plural,\n one {Último minuto}\n other {Últimos # minutos}\n }`,\n SECONDS: `{seconds, plural,\n one {Último segundo}\n other {Últimos # segundos}\n }`,\n YEARS_FRACTION: `{years} anos`,\n MONTHS_FRACTION: `{months} meses`\n }\n }\n },\n notificationCenter: {\n notifications: 'Notificações',\n remove: 'Remover',\n removeAll: 'Remover tudo',\n doNotDisturb: 'Não perturbe',\n showPopUpNotifications: 'Mostrar notificações pop-up',\n noNotifications: 'Sem notificações',\n failedToLoadNotifications: 'Falha ao carregar notificações',\n repeat: 'Repetir',\n loadingMore: 'Carregando mais notificações',\n unread: 'Não lida'\n }\n} satisfies KbqLocaleStringsData;\n","import { KbqLocaleStringsData } from './types';\n\nexport const ruRULocaleData = {\n a11y: {\n close: 'Закрыть',\n save: 'Сохранить',\n saving: 'Сохранение',\n saveFailed: 'Не удалось сохранить',\n cancel: 'Отменить',\n edit: 'Редактировать',\n removeAll: 'Удалить все',\n remove: 'Удалить',\n breadcrumbs: 'Хлебные крошки',\n expandBreadcrumbs: 'Показать скрытые элементы',\n previousMonth: 'Предыдущий месяц',\n currentDate: 'Текущая дата',\n nextMonth: 'Следующий месяц',\n clear: 'Очистить',\n showPassword: 'Показать пароль',\n hidePassword: 'Скрыть пароль',\n resizeColumns: 'Изменить ширину колонок',\n resizePanels: 'Изменить размер панелей',\n toastRegion: 'Уведомления',\n optionActions: 'Действия',\n progressBar: 'Прогресс'\n },\n select: { hiddenItemsText: '+{{ number }}', selectAll: 'Выбрать все' },\n datepicker: {\n placeholder: 'дд.мм.гггг',\n dateInput: 'dd.MM.yyyy'\n },\n timepicker: {\n placeholder: {\n full: 'чч:мм:сс',\n short: 'чч:мм'\n }\n },\n fileUpload: {\n a11y: {\n fileAdded: '{{ fileName }} добавлен',\n fileRemoved: '{{ fileName }} удален',\n filesNotAdded: 'Часть файлов не добавлена'\n },\n single: {\n captionText: 'Перетащите сюда или {{ browseLink }}',\n captionTextOnlyFolder: 'Перетащите сюда или {{ browseLinkFolder }}',\n captionTextWithFolder: 'Перетащите сюда или {{ browseLink }} или {{ browseLinkFolderMixed }}',\n browseLink: 'выберите файл',\n browseLinkFolder: 'выберите папку',\n browseLinkFolderMixed: 'папку'\n },\n multiple: {\n captionText: 'или {{ browseLink }}',\n captionTextOnlyFolder: 'или {{ browseLinkFolder }}',\n captionTextWithFolder: 'или {{ browseLink }} или {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Перетащите еще или {{ browseLink }}',\n captionTextForCompactSize: 'Перетащите сюда или {{ browseLink }}',\n browseLink: 'выберите файлы',\n browseLinkFolder: 'выберите папку',\n browseLinkFolderMixed: 'папку',\n title: 'Перетащите сюда'\n }\n },\n codeBlock: {\n softWrapOnTooltip: 'Включить перенос по словам',\n softWrapOffTooltip: 'Выключить перенос по словам',\n downloadTooltip: 'Скачать',\n copiedTooltip: '✓ Скопировано',\n copyTooltip: 'Скопировать',\n viewAllText: 'Показать все',\n viewLessText: 'Свернуть',\n openExternalSystemTooltip: 'Открыть во внешней системе'\n },\n timezone: {\n searchPlaceholder: 'Город или часовой пояс',\n otherCountriesLabel: 'Другие страны'\n },\n actionsPanel: {\n closeTooltip: 'Отменить выбор'\n },\n filterBar: {\n reset: {\n buttonName: 'Сбросить'\n },\n search: {\n tooltip: 'Поиск',\n placeholder: 'Поиск'\n },\n filters: {\n defaultName: 'Фильтры',\n saveNewFilterTooltip: 'Сохранить как новый',\n searchPlaceholder: 'Поиск',\n searchEmptyResult: 'Ничего не найдено',\n saveAsNewFilter: 'Сохранить как новый',\n saveChangesHeader: 'Новое название',\n saveChangesButton: 'Сохранить',\n saveAsNewHeader: 'Новый фильтр',\n saveAsNewButton: 'Сохранить как новый',\n change: 'Переименовать',\n resetChanges: 'Сбросить изменения',\n remove: 'Удалить',\n errorHint: 'Такой фильтр уже есть',\n saveButton: 'Сохранить',\n cancelButton: 'Отмена',\n actionsTooltip: 'Действия с фильтром'\n },\n add: {\n tooltip: 'Добавить фильтр',\n addedAnnouncement: 'Фильтр «{{ name }}» добавлен'\n },\n refresher: {\n refresh: 'Обновить',\n settings: 'Настройки обновления'\n },\n pipe: {\n clearButtonTooltip: 'Очистить',\n removeButtonTooltip: 'Удалить',\n applyButton: 'Применить',\n emptySearchResult: 'Ничего не найдено',\n selectAll: 'Выбрать все',\n noOptions: 'Нет доступных опций'\n },\n datePipe: {\n customPeriod: 'Произвольный период',\n customPeriodFrom: 'с',\n customPeriodTo: 'по',\n customPeriodErrorHint: 'Начало периода не может быть позже окончания',\n customPeriodMinIntervalErrorHint: 'Период не может быть короче {{ value }}',\n customPeriodMaxIntervalErrorHint: 'Период не может быть длиннее {{ value }}',\n backToPeriodSelection: 'Назад'\n }\n },\n clampedText: {\n openText: 'Развернуть',\n closeText: 'Свернуть',\n showMoreText: 'Показать еще {exceededItemCount}',\n moreText: 'еще'\n },\n navbar: {\n toggle: {\n expand: 'Развернуть',\n collapse: 'Свернуть'\n }\n },\n searchExpandable: {\n tooltip: 'Поиск',\n placeholder: 'Поиск'\n },\n appSwitcher: {\n searchPlaceholder: 'Поиск',\n searchEmptyResult: 'Ничего не найдено',\n sitesHeader: 'Другие площадки',\n clearSearch: 'Очистить поиск'\n },\n username: {\n siteLabel: 'площадка'\n },\n popoverConfirm: {\n confirmText: 'Вы уверены, что хотите продолжить?',\n confirmButtonText: 'Да'\n },\n timeRange: {\n title: {\n placeholder: 'Период'\n },\n editor: {\n from: 'с',\n to: 'по',\n apply: 'Применить',\n cancel: 'Отмена',\n rangeLabel: 'период',\n outOfBoundsError: 'Допустимый период: {{ value }}',\n allTime: 'все время',\n currentQuarter: 'текущий квартал',\n currentYear: 'текущий год',\n allTimeOption: 'все время',\n currentQuarterOption: 'текущий квартал',\n currentYearOption: 'текущий год'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: 'и',\n YEARS: `{years, plural,\n one {# год}\n few {последние # года}\n other {последние # лет}\n }`,\n MONTHS: `{months, plural,\n one {последний месяц}\n few {последние # месяца}\n other {последние # месяцев}\n }`,\n WEEKS: `{weeks, plural,\n one {последняя неделя}\n few {последние # недели}\n other {последние # недель}\n }`,\n DAYS: `{days, plural,\n one {последний день}\n few {последние # дня}\n other {последние # дней}\n }`,\n HOURS: `{hours, plural,\n one {последний час}\n few {последние # часа}\n other {последние # часов}\n }`,\n MINUTES: `{minutes, plural,\n one {последняя минута}\n few {последние # минуты}\n other {последние # минут}\n }`,\n SECONDS: `{seconds, plural,\n one {последняя секунда}\n few {последние # секунды}\n other {последние # секунд}\n }`,\n YEARS_FRACTION: `{years} лет`,\n MONTHS_FRACTION: `{months} месяцев`\n },\n option: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: 'и',\n YEARS: `{years, plural,\n one {последний год}\n few {последние # года}\n other {последние # лет}\n }`,\n MONTHS: `{months, plural,\n one {последний месяц}\n few {последние # месяца}\n other {последние # месяцев}\n }`,\n WEEKS: `{weeks, plural,\n one {последняя неделя}\n few {последние # недели}\n other {последние # недель}\n }`,\n DAYS: `{days, plural,\n one {последний день}\n few {последние # дня}\n other {последние # дней}\n }`,\n HOURS: `{hours, plural,\n one {последний час}\n few {последние # часа}\n other {последние # часов}\n }`,\n MINUTES: `{minutes, plural,\n one {последняя минута}\n few {последние # минуты}\n other {последние # минут}\n }`,\n SECONDS: `{seconds, plural,\n one {последняя секунда}\n few {последние # секунды}\n other {последние # секунд}\n }`,\n YEARS_FRACTION: `{years} лет`,\n MONTHS_FRACTION: `{months} месяцев`\n }\n }\n },\n notificationCenter: {\n notifications: 'Уведомления',\n remove: 'Удалить',\n removeAll: 'Удалить все',\n doNotDisturb: 'Отключить уведомления',\n showPopUpNotifications: 'Включить уведомления',\n noNotifications: 'Нет уведомлений',\n failedToLoadNotifications: 'Не удалось загрузить уведомления.',\n repeat: 'Повторить',\n loadingMore: 'Загрузка уведомлений',\n unread: 'Не прочитано'\n }\n} satisfies KbqLocaleStringsData;\n","import { KbqLocaleStringsData } from './types';\n\nexport const tkTMLocaleData = {\n a11y: {\n close: 'Ýap',\n save: 'Ýazdyr',\n saving: 'Ýazdyrylýar',\n saveFailed: 'Ýazdyryp bolmady',\n cancel: 'Ýatyr',\n edit: 'Üýtget',\n removeAll: 'Ählisini aýyr',\n remove: 'Aýyr',\n breadcrumbs: 'Nawigasiýa ýoly',\n expandBreadcrumbs: 'Gizlenen elementleri görkez',\n previousMonth: 'Öňki aý',\n currentDate: 'Şu günki sene',\n nextMonth: 'Indiki aý',\n clear: 'Arassala',\n showPassword: 'Paroly görkez',\n hidePassword: 'Paroly gizle',\n resizeColumns: 'Sütünleriň giňligini üýtget',\n resizePanels: 'Panelleriň ölçegini üýtget',\n toastRegion: 'Bildirişler',\n optionActions: 'Hereketler',\n progressBar: 'Ösüş'\n },\n select: {\n hiddenItemsText: '+{{ number }}',\n selectAll: 'Ählisini saýla'\n },\n datepicker: {\n placeholder: 'gg.aa.ýý.',\n dateInput: 'gg.aa.ýý.'\n },\n timepicker: {\n placeholder: {\n full: 'ss:mm:seksek',\n short: 'ss:mm'\n }\n },\n fileUpload: {\n a11y: {\n fileAdded: '{{ fileName }} goşuldy',\n fileRemoved: '{{ fileName }} pozuldy',\n filesNotAdded: 'Käbir faýllar goşulmady'\n },\n single: {\n captionText: 'Faýly geçiriň ýa-da {{ browseLink }}',\n captionTextOnlyFolder: 'Faýly geçiriň ýa-da {{ browseLinkFolder }}',\n captionTextWithFolder: 'Faýly geçiriň ýa-da {{ browseLink }} ýa-da {{ browseLinkFolderMixed }}',\n browseLink: 'saýlaň',\n browseLinkFolder: 'bukja',\n browseLinkFolderMixed: 'bukja'\n },\n multiple: {\n captionText: 'Şu ýere geçiriň ýa-da {{ browseLink }}',\n captionTextOnlyFolder: 'Şu ýere geçiriň ýa-da {{ browseLinkFolder }}',\n captionTextWithFolder: 'Şu ýere geçiriň ýa-da {{ browseLink }} ýa-da {{ browseLinkFolderMixed }}',\n captionTextWhenSelected: 'Ýene geçiriň ýa-da {{ browseLink }}',\n captionTextForCompactSize: 'Faýllary geçiriň ýa-da {{ browseLink }}',\n browseLink: 'saýlaň',\n browseLinkFolder: 'bukja',\n browseLinkFolderMixed: 'bukja',\n title: 'Faýl ýükläň'\n }\n },\n codeBlock: {\n softWrapOnTooltip: 'Sözler boýunça geçirmäni işjeňleşdirmek',\n softWrapOffTooltip: 'Sözler boýunça geçirmäni öçürmek',\n downloadTooltip: 'Ýüklemek',\n copiedTooltip: '✓ Göçürildi',\n copyTooltip: 'Göçürmek',\n viewAllText: 'Hemmesini görkezmek',\n viewLessText: 'Ýygyrmak',\n openExternalSystemTooltip: 'Daşarky ulgamda açmak'\n },\n timezone: {\n searchPlaceholder: 'Şäher ýa-da sagat guşagy',\n otherCountriesLabel: 'Beýleki ýurtlar'\n },\n actionsPanel: {\n closeTooltip: 'Saýlawy ýatyr'\n },\n filterBar: {\n reset: {\n buttonName: 'Täzeden düz'\n },\n search: {\n tooltip: 'Gözleg',\n placeholder: 'Gözleg'\n },\n filters: {\n defaultName: 'Filtrler',\n saveNewFilterTooltip: 'Täze filtri ýazdyr',\n searchPlaceholder: 'Gözleg',\n searchEmptyResult: 'Hiç zat tapylmady',\n saveAsNewFilter: 'Täze filtr hökmünde ýazdyr',\n saveChangesHeader: 'Täze at',\n saveChangesButton: 'Üýtgetmeleri ýazdyr',\n saveAsNewHeader: 'Täze filtr',\n saveAsNewButton: 'Täze hökmünde ýazdyr',\n change: 'Adyny üýtget',\n resetChanges: 'Täzeden düz',\n remove: 'Poz',\n errorHint: 'Filtri ýazdyryp bolmady. Täzeden synanyň ýa-da administratora ýüz tutuň.',\n saveButton: 'Ýazdyr',\n cancelButton: 'Ýatyr',\n actionsTooltip: 'Filtr amallary'\n },\n add: {\n tooltip: 'Filtr goş',\n addedAnnouncement: '{{ name }} filtri goşuldy'\n },\n refresher: {\n refresh: 'Täzele',\n settings: 'Täzeleme sazlamalary'\n },\n pipe: {\n clearButtonTooltip: 'Arassala',\n removeButtonTooltip: 'Ýokla',\n applyButton: 'Ulan',\n emptySearchResult: 'Hiç zat tapylmady',\n selectAll: 'Ählisini saýla',\n noOptions: 'Wariant ýok'\n },\n datePipe: {\n customPeriod: 'Laýyk döwür',\n customPeriodFrom: 'başy',\n customPeriodTo: 'soňy',\n customPeriodErrorHint: 'Döwür gutarýan wagtyndan soň başlap bilmeýär',\n customPeriodMinIntervalErrorHint: 'Döwür azyndan {{ value }} bolmaly',\n customPeriodMaxIntervalErrorHint: 'Döwür köpi bilen {{ value }} bolmaly',\n backToPeriodSelection: 'Yzyna'\n }\n },\n clampedText: {\n openText: 'Giňelt',\n closeText: 'Ýap',\n showMoreText: 'Ýene {exceededItemCount} görkeziň',\n moreText: 'has köp'\n },\n navbar: {\n toggle: {\n expand: 'Giňeltmek',\n collapse: 'Ýykmak'\n }\n },\n searchExpandable: {\n tooltip: 'Gözleg',\n placeholder: 'Gözleg'\n },\n appSwitcher: {\n searchPlaceholder: 'Gözleg',\n searchEmptyResult: 'Hiç zat tapylmady',\n sitesHeader: 'Beýleki saýtlar',\n clearSearch: 'Gözlegi arassala'\n },\n username: {\n siteLabel: 'sayt'\n },\n popoverConfirm: {\n confirmText: 'Dowam etmek isleýändigiňize ynanýarsyňyzmy?',\n confirmButtonText: 'Hawa'\n },\n timeRange: {\n title: {\n placeholder: 'Möhleti saýla'\n },\n editor: {\n from: 'şundan',\n to: 'şuňa',\n apply: 'Ulanmak',\n cancel: 'Ýatyrmak',\n rangeLabel: 'Döwür',\n outOfBoundsError: 'Rugsat berlen döwür: {{ value }}',\n allTime: 'hemme döwür üçin',\n currentQuarter: 'şu çärýek üçin',\n currentYear: 'şu ýyl üçin',\n allTimeOption: 'Hemme döwür',\n currentQuarterOption: 'Şu çärýek',\n currentYearOption: 'Şu ýyl'\n },\n durationTemplate: {\n title: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {soňky # ýyl}\n other {soňky # ýyl}\n }`,\n MONTHS: `{months, plural,\n one {soňky aý}\n other {soňky # aý}\n }`,\n WEEKS: `{weeks, plural,\n one {soňky hepde}\n other {soňky # hepde}\n }`,\n DAYS: `{days, plural,\n one {soňky gün}\n other {soňky # gün}\n }`,\n HOURS: `{hours, plural,\n one {soňky sagat}\n other {soňky # sagat}\n }`,\n MINUTES: `{minutes, plural,\n one {soňky minut}\n other {soňky # minut}\n }`,\n SECONDS: `{seconds, plural,\n one {soňky sekunt}\n other {soňky # sekunt}\n }`,\n YEARS_FRACTION: `soňky {years} ýyl`,\n MONTHS_FRACTION: `soňky {months} aý`\n },\n option: {\n SEPARATOR: ' ',\n LAST_PART_SEPARATOR: '',\n YEARS: `{years, plural,\n one {Ýyl}\n other {# ýyl}\n }`,\n MONTHS: `{months, plural,\n one {Aý}\n other {# aý}\n }`,\n WEEKS: `{weeks, plural,\n one {Hepde}\n other {# hepde}\n }`,\n DAYS: `{days, plural,\n one {Gün}\n other {# gün}\n }`,\n HOURS: `{hours, plural,\n one {Sagat}\n other {# sagat}\n }`,\n MINUTES: `{minutes, plural,\n one {Minut}\n other {# minut}\n }`,\n SECONDS: `{seconds, plural,\n one {Sekunt}\n other {# sekunt}\n }`,\n YEARS_FRACTION: `{years} ýyl`,\n MONTHS_FRACTION: `{months} aý`\n }\n }\n },\n notificationCenter: {\n notifications: 'Duýduryşlar',\n remove: 'Aýyr',\n removeAll: 'Ählisini aýyr',\n doNotDisturb: 'Alada etme',\n showPopUpNotifications: 'Açylýan bildirişleri görkeziň',\n noNotifications: 'Duýduryş ýok',\n failedToLoadNotifications: 'Duýduryşlary ýükläp bilmedi',\n repeat: 'Gaýtalama',\n loadingMore: 'Duýduryşlar ýüklenýär',\n unread: 'Okalmadyk'\n }\n} satisfies KbqLocaleStringsData;\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, Injectable, InjectionToken, InjectOptions, Provider, Signal, signal } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { kbqDeepMerge } from '../utils';\nimport { enUSLocaleData } from './en-US';\nimport { esLALocaleData } from './es-LA';\nimport {\n enUSFormattersData,\n esLAFormattersData,\n ptBRFormattersData,\n ruRUFormattersData,\n tkTMFormattersData\n} from './formatters';\nimport { ptBRLocaleData } from './pt-BR';\nimport { ruRULocaleData } from './ru-RU';\nimport { tkTMLocaleData } from './tk-TM';\nimport {\n KbqInputNumberLocaleConfiguration,\n KbqLocaleData,\n KbqLocaleDataInput,\n KbqLocaleDataMap,\n KbqLocaleIdLike,\n KbqLocaleItem,\n KbqLocaleSection,\n KbqPartialLocaleData\n} from './types';\n\nexport const KBQ_LOCALE_ID = new InjectionToken<KbqLocaleIdLike>('KbqLocaleId');\n\nexport const KBQ_DEFAULT_LOCALE_ID = 'ru-RU';\n\nexport function KBQ_DEFAULT_LOCALE_DATA_FACTORY() {\n return {\n items: [\n { id: 'en-US', name: 'English' },\n { id: 'es-LA', name: 'Español' },\n { id: 'pt-BR', name: 'Português' },\n { id: 'ru-RU', name: 'Русский' },\n { id: 'tk-TM', name: 'Türkmen' }\n ],\n 'en-US': { ...enUSLocaleData, ...enUSFormattersData },\n 'es-LA': { ...esLALocaleData, ...esLAFormattersData },\n 'pt-BR': { ...ptBRLocaleData, ...ptBRFormattersData },\n 'ru-RU': { ...ruRULocaleData, ...ruRUFormattersData },\n 'tk-TM': { ...tkTMLocaleData, ...tkTMFormattersData }\n };\n}\nexport const KBQ_LOCALE_DATA = new InjectionToken<KbqLocaleDataInput>('KBQ_LOCALE_DATA', {\n providedIn: 'root',\n factory: KBQ_DEFAULT_LOCALE_DATA_FACTORY\n});\n\n/**\n * Assembles the locale registry.\n *\n * `items` is not a locale, yet it has always shared this object with them — which no index signature can\n * express. {@link KbqLocaleDataMap} resolves that in favour of readers (`locales[id]` stays\n * `KbqLocaleData`), and this is the single place that has to assert the shape when building it.\n */\nconst asLocaleDataMap = (locales: Record<string, KbqLocaleData>, items: KbqLocaleItem[]): KbqLocaleDataMap =>\n Object.assign(locales, { items }) as KbqLocaleDataMap;\n\nconst { items: shippedLocaleItems, ...shippedLocales } = KBQ_DEFAULT_LOCALE_DATA_FACTORY();\n\n/**\n * The locales shipped with the library, used as the merge base for consumer-supplied locale data: a\n * partial locale is completed from the shipped locale of the same id, or from {@link KBQ_DEFAULT_LOCALE_ID}\n * when the id is new.\n */\nconst SHIPPED_LOCALE_DATA = asLocaleDataMap(shippedLocales, shippedLocaleItems);\n\n/** Completes one locale from the shipped locale of the same id, falling back to the default locale. */\nconst resolveLocaleData = (id: KbqLocaleIdLike, data: KbqPartialLocaleData | undefined): KbqLocaleData =>\n kbqDeepMerge(SHIPPED_LOCALE_DATA[id] ?? SHIPPED_LOCALE_DATA[KBQ_DEFAULT_LOCALE_ID], data);\n\nconst resolveLocaleDataMap = (input: KbqLocaleDataInput | null): KbqLocaleDataMap => {\n const source = input ?? SHIPPED_LOCALE_DATA;\n const items = source.items ?? SHIPPED_LOCALE_DATA.items;\n const locales: Record<string, KbqLocaleData> = {};\n\n // Every shipped locale and every offered `items` entry is registered, not just the ids the input\n // happens to patch: a partial input leaves `items` at the full shipped list, and a locale a picker\n // can activate must have data behind it — `setLocale` would otherwise leave `data()` undefined.\n const ids = new Set([...Object.keys(SHIPPED_LOCALE_DATA), ...Object.keys(source), ...items.map(({ id }) => id)]);\n\n for (const id of ids) {\n if (id === 'items') continue;\n\n locales[id] = resolveLocaleData(id, source[id] as KbqPartialLocaleData);\n }\n\n return asLocaleDataMap(locales, items);\n};\n\nexport const KBQ_LOCALE_SERVICE = new InjectionToken<KbqLocaleService>('KBQ_LOCALE_SERVICE');\n\n/**\n * Attribute name to be used to set the locale in the html element. Defaults to `'lang'`.\n *\n * @docs-private\n */\nexport const KBQ_LOCALE_SERVICE_LANG_ATTR_NAME = new InjectionToken<string>('KBQ_LOCALE_SERVICE_LANG_ATTR_NAME', {\n factory: () => 'lang'\n});\n\n/**\n * Utility provider of {@link KBQ_LOCALE_SERVICE_LANG_ATTR_NAME}, the attribute name to be used to set the locale in\n * the html element.\n *\n * @docs-private\n */\nexport const kbqLocaleServiceLangAttrNameProvider = (attrName: string): Provider => ({\n provide: KBQ_LOCALE_SERVICE_LANG_ATTR_NAME,\n useValue: attrName\n});\n\n@Injectable({ providedIn: 'root' })\nexport class KbqLocaleService {\n /**\n * Emits the active locale id on every change.\n *\n * Prefer the {@link localeId} signal in new code — a signal read from a template registers on the\n * reading view, which an observable subscribed in one component cannot do for its children.\n */\n readonly changes: BehaviorSubject<string>;\n\n /** Every registered locale keyed by id, plus the `items` list used to render locale pickers. */\n readonly locales: KbqLocaleDataMap;\n\n /** Active locale id. */\n readonly localeId: Signal<KbqLocaleIdLike>;\n\n /** Locale data of the active locale. Always complete — see {@link addLocale}. */\n readonly data: Signal<KbqLocaleData>;\n\n /** Registered locales, for rendering a locale picker. */\n readonly items: Signal<KbqLocaleItem[]>;\n\n private readonly document = inject(DOCUMENT);\n\n /** @deprecated Use the {@link localeId} signal. Will be removed in 22.0.0. */\n get id(): string {\n return this._localeId();\n }\n\n set id(value: string) {\n this._localeId.set(value);\n }\n\n /** @deprecated Use the {@link data} signal. Will be removed in 22.0.0. */\n get current(): KbqLocaleData {\n return this._data();\n }\n\n set current(value: KbqLocaleData) {\n this._data.set(value);\n }\n\n private readonly _localeId = signal<KbqLocaleIdLike>(KBQ_DEFAULT_LOCALE_ID);\n private readonly _data = signal<KbqLocaleData>(SHIPPED_LOCALE_DATA[KBQ_DEFAULT_LOCALE_ID]);\n private readonly _items = signal<KbqLocaleItem[]>(SHIPPED_LOCALE_DATA.items);\n\n private readonly langAttrName = inject(KBQ_LOCALE_SERVICE_LANG_ATTR_NAME);\n\n constructor() {\n const id = inject(KBQ_LOCALE_ID, { optional: true });\n const localeData = inject(KBQ_LOCALE_DATA, { optional: true });\n\n this.locales = resolveLocaleDataMap(localeData);\n\n this.localeId = this._localeId.asReadonly();\n this.data = this._data.asReadonly();\n this.items = this._items.asReadonly();\n\n this._localeId.set(id || KBQ_DEFAULT_LOCALE_ID);\n this._data.set(this.register(this._localeId()));\n this._items.set(this.locales.items);\n\n this.changes = new BehaviorSubject(this._localeId());\n }\n\n /** Activates a locale. */\n setLocale(id: KbqLocaleIdLike) {\n this._localeId.set(id);\n this._data.set(this.register(id));\n\n this.document.documentElement.setAttribute(this.langAttrName, id);\n\n this.changes.next(id);\n }\n\n /**\n * Registers a locale and activates it.\n *\n * The data may be partial: every section — and every key within a section — is optional, and whatever\n * is omitted is completed from the shipped locale of the same id, or from the default locale when the\n * id is new. That is what lets {@link getParams} promise a complete section for any registered locale.\n */\n addLocale(id: KbqLocaleIdLike, localeData: KbqPartialLocaleData) {\n this.locales[id] = resolveLocaleData(id, localeData);\n\n this.setLocale(id);\n }\n\n /**\n * Localized strings of one section of the active locale.\n *\n * Passing a known {@link KbqLocaleSection} resolves the precise configuration type; any other string\n * falls back to `any`, so dynamically-built section names keep working.\n */\n getParams<K extends KbqLocaleSection>(section: K): KbqLocaleData[K];\n getParams(section: string): any;\n getParams(section: string) {\n return this._data()?.[section] ?? SHIPPED_LOCALE_DATA[KBQ_DEFAULT_LOCALE_ID][section];\n }\n\n /** Reactive counterpart of {@link getParams}: re-emits whenever the locale changes. */\n params<K extends KbqLocaleSection>(section: K): Signal<KbqLocaleData[K]> {\n return computed(() => this.getParams(section));\n }\n\n /**\n * Registers `id` unless the registry already holds it, and returns its complete data.\n *\n * Both the constructor and {@link setLocale} activate a locale, and either can be handed an id the\n * registry does not know — `KBQ_LOCALE_ID` accepts any string. {@link data} promises a complete locale,\n * and code reading `locales[id]` directly would otherwise be handed `undefined`.\n */\n private register(id: KbqLocaleIdLike): KbqLocaleData {\n return (this.locales[id] ??= resolveLocaleData(id, undefined));\n }\n}\n\n/**\n * Utility provider of {@link KBQ_LOCALE_ID}, the locale to activate.\n *\n * Belongs in the same `providers` array as {@link kbqLocaleServiceProvider}: the id is read once, by the\n * `KbqLocaleService` constructor, out of the injector that created the service. Use `setLocale()` to change\n * the locale afterwards.\n */\nexport const kbqLocaleIDProvider = (localeId: KbqLocaleIdLike): Provider => ({\n provide: KBQ_LOCALE_ID,\n useValue: localeId\n});\n\n/**\n * Utility provider for the locale service. {@link KBQ_LOCALE_SERVICE} has no factory, so nothing is localized\n * until an application provides it.\n *\n * Provides the service next to the token rather than aliasing the class through `useClass`, which builds a\n * *second* instance: the one the components read then has nothing to do with the one `inject(KbqLocaleService)`\n * hands out, and `setLocale()` called on the latter moves nothing that is rendered.\n *\n * On a component it scopes the locale to that subtree — put {@link kbqLocaleIDProvider} in the same array to\n * pick the locale of that scope.\n */\nexport const kbqLocaleServiceProvider = (): Provider => [\n KbqLocaleService,\n { provide: KBQ_LOCALE_SERVICE, useExisting: KbqLocaleService }\n];\n\n/**\n * Reads the locale service the application provided.\n *\n * Resolves {@link KBQ_LOCALE_SERVICE}, not the class: the token is what the components read, and an application\n * is free to provide something else under it. Pass `{ optional: true }` for code that has to keep working\n * without a locale service — which is how every component of this library reads it.\n */\nexport function kbqInjectLocaleService(options?: InjectOptions & { optional?: false }): KbqLocaleService;\nexport function kbqInjectLocaleService(options: InjectOptions): KbqLocaleService | null;\nexport function kbqInjectLocaleService(options?: InjectOptions): KbqLocaleService | null {\n return inject(KBQ_LOCALE_SERVICE, options ?? {});\n}\n\n// todo code below need refactor or delete in DS-3603\n/** @docs-private */\nexport const KBQ_DEFAULT_PRECISION_SEPARATOR = '.';\n\n/** @internal */\nexport function numberByParts(\n value: string,\n customConfig: Pick<KbqInputNumberLocaleConfiguration, 'fractionSeparator' | 'groupSeparator'>\n): { integer: string; fraction: string } {\n const { groupSeparator, fractionSeparator } = customConfig;\n const result = { integer: '', fraction: '' };\n let parsedValue = value;\n\n // normalize only when '.', ',' are used as fractionSeparators\n if (groupSeparator.includes(' ') && fractionSeparator === ',') {\n parsedValue = parsedValue.replace(/\\./g, ',');\n }\n\n const isNegative = parsedValue.startsWith('-');\n const numberByParts = parsedValue.split(fractionSeparator).filter(Boolean);\n\n if (numberByParts.length > 1) {\n result.fraction = numberByParts.pop() || '';\n result.integer = numberByParts\n .join()\n .replace(groupSeparator.join(''), '')\n .replace(fractionSeparator, '')\n .replace(/\\D/g, '');\n } else {\n result.integer = numberByParts.join().replace(groupSeparator[0], '').replace(/\\D/g, '');\n }\n\n if (isNegative) result.integer = `-${result.integer}`;\n\n return result;\n}\n\n/**\n * Function that returns a string representation of a number without localized separators\n */\nexport function normalizeNumber(\n value: string | null | undefined,\n customConfig: Pick<KbqInputNumberLocaleConfiguration, 'fractionSeparator' | 'groupSeparator'>\n): string {\n if (value === null || value === undefined) return '';\n\n const { groupSeparator, fractionSeparator } = customConfig;\n const groupSeparatorRegexp = new RegExp(`[${groupSeparator.join('')}]`, 'g');\n const fractionSeparatorRegexp = new RegExp(`\\\\${fractionSeparator}`, 'g');\n\n return value\n .toString()\n .replace(groupSeparatorRegexp, '')\n .replace(fractionSeparatorRegexp, KBQ_DEFAULT_PRECISION_SEPARATOR);\n}\n\n/**\n * Function that parse string and return a number. The string can be in any locale.\n */\nexport function checkAndNormalizeLocalizedNumber(num: string | null | undefined, locale?: string): number | null {\n if (num === null || num === undefined) return null;\n\n const locales = KBQ_DEFAULT_LOCALE_DATA_FACTORY();\n\n if (locale && locales[locale]) {\n const config = locales[locale].input.number;\n let normalized: number;\n\n if (!/\\d/g.test(num)) return +num;\n\n const { integer, fraction } = numberByParts(num, config);\n\n if (fraction) {\n normalized = +[integer, fraction].join('.');\n } else {\n normalized = +normalizeNumber(integer, config);\n }\n\n if (!Number.isNaN(normalized)) {\n return normalized;\n }\n }\n\n /* if some locale input config satisfies pasted number, try to normalise with selected locale config */\n let numberOutput: number | null = null;\n\n for (const config of locales.items.map(({ id }) => locales[id].input.number)) {\n const normalized = +normalizeNumber(num, config);\n\n if (!Number.isNaN(normalized)) {\n numberOutput = normalized;\n break;\n }\n }\n\n return numberOutput;\n}\n\n// todo code above need refactor or delete in DS-3603\n","import { computed, inject, InjectionToken, Provider, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map, of } from 'rxjs';\nimport { kbqDeepMerge, KbqDeepPartial } from '../utils';\nimport { KBQ_LOCALE_SERVICE } from './locale-service';\nimport { KbqLocaleData, KbqLocaleSection, KbqPartialLocaleData } from './types';\n\n/**\n * Element-level source of localized strings, resolved by {@link kbqInjectLocaleConfiguration}.\n *\n * A narrow token rather than the directive class, so that a reader with no carrier of its own depends\n * only on the resolved configuration and not on the carrier that happened to supply it.\n *\n * @docs-private\n */\nexport interface KbqLocaleOverridesHost {\n /** Own configuration merged over every ancestor carrier's. */\n readonly resolvedOverrides: Signal<KbqPartialLocaleData>;\n}\n\n/** @docs-private */\nexport const KBQ_LOCALE_OVERRIDES_HOST = new InjectionToken<KbqLocaleOverridesHost>('KBQ_LOCALE_OVERRIDES_HOST');\n\n/**\n * Consumer overrides of individual locale sections, contributed by every\n * `kbq<Component>LocaleConfigurationProvider`.\n *\n * `multi` because overriding several sections in one `providers` array is the common case: a single-value\n * token would let the last provider silently drop every other one. Each entry is a batch rather than a\n * single override, so that a provider can also re-contribute what it inherited — see\n * {@link kbqLocaleConfigurationOverrideProvider}.\n *\n * @docs-private\n */\n// The annotation is load-bearing: `KbqPartialLocaleData` resolves to a conditional type, which TypeScript\n// evaluates when emitting an unannotated declaration — inlining 250 lines of expanded shape into the\n// public API report.\nexport const KBQ_LOCALE_CONFIGURATION_OVERRIDES: InjectionToken<KbqPartialLocaleData[][]> = new InjectionToken<\n KbqPartialLocaleData[][]\n>('KBQ_LOCALE_CONFIGURATION_OVERRIDES');\n\n/**\n * Registers a partial override of one locale section.\n *\n * Backs every `kbq<Component>LocaleConfigurationProvider`. The override is applied on top of the active\n * locale rather than replacing it, so the keys it does not mention keep following `setLocale()`.\n *\n * @param section Section of the locale data to override.\n * @param configuration Strings to override; every key is optional at every depth.\n */\nexport const kbqLocaleConfigurationOverrideProvider = <K extends KbqLocaleSection>(\n section: K,\n configuration: KbqDeepPartial<KbqLocaleData[K]>\n): Provider => [\n {\n provide: KBQ_LOCALE_CONFIGURATION_OVERRIDES,\n // Angular resolves a `multi` token from the nearest injector holding any entry for it and never\n // merges the levels above. Without re-contributing them here, scoping one section to a component —\n // which is exactly what the localization guide recommends — would hide every section an ancestor\n // overrode from that whole subtree.\n useFactory: () => (inject(KBQ_LOCALE_CONFIGURATION_OVERRIDES, { skipSelf: true, optional: true }) ?? []).flat(),\n multi: true\n },\n {\n provide: KBQ_LOCALE_CONFIGURATION_OVERRIDES,\n // A computed key widens to an index signature, and `section` is the type parameter itself — this is the\n // single place that has to assert the shape, in exchange for a precisely typed call site.\n useValue: [{ [section]: configuration } as KbqPartialLocaleData],\n multi: true\n }\n];\n\n/**\n * Reactive localized strings for one section of the active locale.\n *\n * Follows `KBQ_LOCALE_SERVICE` when the application provides one, and otherwise resolves `token`, whose\n * factory supplies the default strings. Overrides registered through\n * {@link kbqLocaleConfigurationOverrideProvider} are merged on top of whichever of the two applies, and a\n * `KbqLocaleOverridesDirective` on the element or any ancestor of it on top of those — the more\n * local the source, the later it is merged. Being a signal is what makes a runtime `setLocale()` reach\n * `OnPush` children that render these strings: they register the read on their own view, which a\n * subscription in the parent could never do for them.\n *\n * This is the carrier-less path — for a pipe, or for content that resolves against an ancestor carrier\n * only. A component that carries `KbqLocaleOverridesDirective` itself reads its strings through\n * {@link KbqLocaleOverridesDirective.read} instead, which cannot be called without the carrier.\n *\n * @param section Section of the locale data to read.\n * @param token Configuration token, whose factory supplies the default strings.\n */\nexport function kbqInjectLocaleConfiguration<K extends KbqLocaleSection>(\n section: K,\n token: InjectionToken<KbqLocaleData[K]>\n): Signal<KbqLocaleData[K]> {\n const localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n const host = inject(KBQ_LOCALE_OVERRIDES_HOST, { optional: true });\n // Every provider at this level re-contributes the inherited batch, so an ancestor's override arrives\n // once per provider. `Set` keeps the first occurrence of each, which is the one that preserves\n // ancestor-before-descendant precedence.\n const overrides = [...new Set((inject(KBQ_LOCALE_CONFIGURATION_OVERRIDES, { optional: true }) || []).flat())];\n const defaultValue = inject(token);\n // `kbqDeepMerge` returns its base untouched when a patch adds nothing, so an unoverridden section stays\n // referentially identical to the data the locale service holds.\n const withOverrides = (configuration: KbqLocaleData[K]): KbqLocaleData[K] =>\n overrides.reduce((result, override) => kbqDeepMerge(result, override[section]), configuration);\n const initialValue = withOverrides(defaultValue);\n const configuration = localeService\n ? localeService.changes.pipe(map(() => withOverrides(localeService.getParams(section) ?? defaultValue)))\n : of(initialValue);\n const fromInjector = toSignal(configuration, { initialValue });\n\n // Read lazily, inside the `computed`: the carrier is resolved here, in the injection context, but its\n // `input()` is only set on the first change detection run — well after this function has returned.\n return host ? computed(() => kbqDeepMerge(fromInjector(), host.resolvedOverrides()[section])) : fromInjector;\n}\n","import { InjectionToken, Provider, Signal } from '@angular/core';\nimport { KbqDeepPartial } from '../utils';\nimport { kbqInjectLocaleConfiguration, kbqLocaleConfigurationOverrideProvider } from './configuration';\nimport { ruRULocaleData } from './ru-RU';\nimport { KbqA11yLocaleConfiguration } from './types';\n\n/** Localization configuration provider for the accessible names of built-in icon-only buttons. */\nexport const KBQ_A11Y_LOCALE_CONFIGURATION = new InjectionToken<KbqA11yLocaleConfiguration>(\n 'KbqA11yLocaleConfiguration',\n {\n factory: () => ruRULocaleData.a11y\n }\n);\n\n/**\n * Utility provider of {@link KBQ_A11Y_LOCALE_CONFIGURATION}. Only the names you pass are overridden;\n * the rest keep following the active locale.\n */\nexport const kbqA11yLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqA11yLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('a11y', configuration);\n\n/**\n * Injection function that creates a reactive locale configuration signal with the accessible names\n * of the icon-only buttons the library renders itself.\n *\n * @docs-private\n */\nexport function kbqInjectA11yLocaleConfiguration(): Signal<KbqA11yLocaleConfiguration> {\n return kbqInjectLocaleConfiguration('a11y', KBQ_A11Y_LOCALE_CONFIGURATION);\n}\n","import { InjectionToken, Provider, Signal } from '@angular/core';\nimport { KbqDeepPartial } from '../utils';\nimport { kbqInjectLocaleConfiguration, kbqLocaleConfigurationOverrideProvider } from './configuration';\nimport { ruRULocaleData } from './ru-RU';\nimport { KbqPopoverConfirmLocaleConfiguration } from './types';\n\n/** Localization configuration provider for the default strings of a confirmation popover. */\nexport const KBQ_POPOVER_CONFIRM_LOCALE_CONFIGURATION = new InjectionToken<KbqPopoverConfirmLocaleConfiguration>(\n 'KbqPopoverConfirmLocaleConfiguration',\n {\n factory: () => ruRULocaleData.popoverConfirm\n }\n);\n\n/**\n * Utility provider of {@link KBQ_POPOVER_CONFIRM_LOCALE_CONFIGURATION}. Only the strings you pass are overridden;\n * the rest keep following the active locale.\n */\nexport const kbqPopoverConfirmLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqPopoverConfirmLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('popoverConfirm', configuration);\n\n/**\n * Injection function that creates a reactive locale configuration signal with the default strings of a\n * confirmation popover.\n *\n * @docs-private\n */\nexport function kbqInjectPopoverConfirmLocaleConfiguration(): Signal<KbqPopoverConfirmLocaleConfiguration> {\n return kbqInjectLocaleConfiguration('popoverConfirm', KBQ_POPOVER_CONFIRM_LOCALE_CONFIGURATION);\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { KbqDeepPartial } from '../utils';\nimport { kbqLocaleConfigurationOverrideProvider } from './configuration';\nimport { ruRULocaleData } from './ru-RU';\nimport { KbqSelectLocaleConfiguration } from './types';\n\n/** Default localized strings shared by the select-like components. */\nexport const KBQ_SELECT_DEFAULT_LOCALE_CONFIGURATION: KbqSelectLocaleConfiguration = ruRULocaleData.select;\n\n/**\n * Localization configuration provider for the select-like components.\n *\n * Lives in `core` rather than in `@koobiq/components/select` because several packages that do not depend\n * on one another read this section: `KbqSelect`, `KbqTreeSelect`, `KbqTreeSelection` (the last one also\n * standalone, outside a tree-select) and `KbqListSelection`.\n */\nexport const KBQ_SELECT_LOCALE_CONFIGURATION = new InjectionToken<KbqSelectLocaleConfiguration>(\n 'KbqSelectLocaleConfiguration',\n { factory: () => KBQ_SELECT_DEFAULT_LOCALE_CONFIGURATION }\n);\n\n/**\n * Utility provider of {@link KBQ_SELECT_LOCALE_CONFIGURATION}. Only the strings you pass are overridden;\n * the rest keep following the active locale.\n */\nexport const kbqSelectLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqSelectLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('select', configuration);\n","import {\n computed,\n Directive,\n forwardRef,\n inject,\n InjectionToken,\n Injector,\n input,\n InputSignal,\n runInInjectionContext,\n Signal\n} from '@angular/core';\nimport { kbqDeepMerge } from '../utils';\nimport { KBQ_LOCALE_OVERRIDES_HOST, kbqInjectLocaleConfiguration, KbqLocaleOverridesHost } from './configuration';\nimport { KbqLocaleData, KbqLocaleSection, KbqPartialLocaleData } from './types';\n\n/**\n * Overrides localized strings for one element and its subtree, as a template binding.\n *\n * The provider helpers — `kbqSelectLocaleConfigurationProvider` and its siblings — can only be attached to\n * an injector, so scoping an override to a single component instance means owning a component boundary.\n * This directive is the per-instance counterpart: every localized component applies it through\n * `hostDirectives` and exposes it as `localeOverrides`, and it can also be placed on any element of your\n * own to scope an override to a whole region.\n *\n * It is also the read side: a component that applies it takes its own strings from {@link read}, so the\n * overrides and the strings they are supposed to override can never come apart. The two directions keep\n * separate names — `[localeOverrides]` writes a partial, `localeConfiguration()` reads the resolved whole.\n *\n * Only the keys you pass are overridden; everything else keeps following the active locale.\n *\n * The `hostDirectives` entry is spelled out in every component rather than shared as a const on purpose:\n * Angular resolves `hostDirectives` with the partial evaluator, and a component in another entry point\n * resolves this package through the built `index.d.ts`, where a const is a declaration without an\n * initializer — `NG1010: Host directive reference must be a class`.\n */\n@Directive({\n selector: '[kbqLocaleOverrides]',\n providers: [\n { provide: KBQ_LOCALE_OVERRIDES_HOST, useExisting: forwardRef(() => KbqLocaleOverridesDirective) }\n ],\n exportAs: 'kbqLocaleOverrides'\n})\nexport class KbqLocaleOverridesDirective implements KbqLocaleOverridesHost {\n /**\n * Localized strings for this element and its subtree, keyed by locale section. Every key is optional at\n * every depth.\n */\n // The annotation is load-bearing, for the reason given at `KBQ_LOCALE_CONFIGURATION_OVERRIDES`.\n readonly overrides: InputSignal<KbqPartialLocaleData | undefined> = input<KbqPartialLocaleData | undefined>(\n undefined,\n { alias: 'kbqLocaleOverrides' }\n );\n\n // Angular resolves an element-injector token from the nearest node that holds it and never merges the\n // levels above — the same trap `kbqLocaleConfigurationOverrideProvider` works around for its `multi`\n // token. Without re-merging the ancestor here, a carrier on a nested component would hide an outer\n // carrier from that whole subtree.\n private readonly parent = inject(KBQ_LOCALE_OVERRIDES_HOST, { skipSelf: true, optional: true });\n\n private readonly injector = inject(Injector);\n\n // One signal per token: a public method invites repeated calls, and each of them would otherwise open\n // a subscription of its own, living until the view is destroyed.\n private readonly sections = new Map<InjectionToken<unknown>, Signal<unknown>>();\n\n // `?? undefined` rather than the raw input: `kbqDeepMerge` only treats `undefined` as \"no patch\", and\n // returns the patch itself for anything unmergeable — so a `null` arriving from an `async` pipe before\n // its first value would make this signal `null` and every reader in the subtree throw on `[section]`.\n readonly resolvedOverrides: Signal<KbqPartialLocaleData> = computed(() =>\n kbqDeepMerge(this.parent?.resolvedOverrides() ?? {}, this.overrides() ?? undefined)\n );\n\n /**\n * Reactive localized strings for one section, resolved against this carrier and every ancestor of it.\n *\n * The counterpart of {@link kbqInjectLocaleConfiguration} for a component that carries this directive.\n * It resolves the same sources — the two are interchangeable in what they return — but it is reached\n * through the carrier, so a component that forgot the `hostDirectives` entry fails at construction\n * instead of silently resolving an ancestor's carrier. Resolve it with `{ self: true }` for that to\n * hold: `{ host: true }` reaches the enclosing component's host element, where an ancestor would\n * answer. Carrying the directive is what makes `[localeOverrides]` work, so every localized component\n * reads this way; a component with no carrier of its own — a leaf, a pipe — calls\n * {@link kbqInjectLocaleConfiguration} instead.\n *\n * Applying the directive is not the same as exposing its input: `KbqDropzoneContent` carries it without\n * one, because its content has no element for a consumer to bind on.\n *\n * Sources are merged in the order the localization guide documents, and repeated calls with the same\n * token return the same signal.\n *\n * Call it from a field initializer or a constructor. It needs no injection context, but the first call\n * for a token opens a subscription, which Angular forbids inside a reactive context — a call from a\n * template expression or a `computed` throws, and only until the token has been cached.\n *\n * @param section Section of the locale data to read.\n * @param token Configuration token, whose factory supplies the default strings.\n */\n read<K extends KbqLocaleSection>(section: K, token: InjectionToken<KbqLocaleData[K]>): Signal<KbqLocaleData[K]> {\n if (!this.sections.has(token)) {\n // Own injector rather than the caller's: the two are the same node injector, and taking it\n // from here is what lets the method be called outside an injection context.\n this.sections.set(\n token,\n runInInjectionContext(this.injector, () => kbqInjectLocaleConfiguration(section, token))\n );\n }\n\n return this.sections.get(token) as Signal<KbqLocaleData[K]>;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { kbqLocaleServiceProvider } from './locale-service';\n\n@NgModule({\n providers: [kbqLocaleServiceProvider()]\n})\nexport class KbqLocaleServiceModule {}\n","import { inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter } from '@koobiq/date-adapter';\nimport { DateFormatter as BaseDateFormatter } from '@koobiq/date-formatter';\nimport { KBQ_DATE_LOCALE, DateAdapter as KbqDateAdapter } from '../../datetime';\nimport { KBQ_LOCALE_SERVICE, KbqLocaleService } from '../../locales';\n\n@Injectable()\nexport class DateFormatter<D> extends BaseDateFormatter<D> {\n override readonly adapter: DateAdapter<D>;\n\n protected localeService = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n constructor() {\n const adapter = inject<DateAdapter<D>>(KbqDateAdapter);\n const locale = inject(KBQ_DATE_LOCALE);\n\n super(adapter, locale);\n this.adapter = adapter;\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe((locale) => this.setLocale(locale));\n }\n}\n","import { ChangeDetectorRef, DestroyRef, inject, Pipe, PipeTransform } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DurationUnit } from '@koobiq/date-adapter';\nimport { DateTimeOptions } from '@koobiq/date-formatter';\nimport { DateAdapter, KbqDateTimezoneService, KbqTimezoneLike } from '../../datetime';\nimport { KBQ_LOCALE_SERVICE } from '../../locales';\nimport { DateFormatter } from './formatter';\n\n/**\n * Identity comparison with a one-level element-wise fallback for arrays, so an input rebuilt on every\n * change detection cycle — a `[from, to]` tuple returned from a getter or a `computed()`, a `units`\n * array built in a method — still hits the cache of the impure pipes below. Array literals written\n * directly in a template are already memoized by Angular (`ɵɵpureFunction`); this covers the rest.\n *\n * Compares array elements by reference, like the `a === b` fallback it wraps — it has no notion of two\n * dates being \"equal\". Mutating a date already passed to a pipe in place (`Date#setHours`, a Moment\n * instance updated without cloning, …) keeps the same reference, so a `[from, to]` tuple rebuilt around\n * that mutated instance still reads as unchanged and the cached, now-stale string is returned. Replace\n * pipe inputs instead of mutating them — the same requirement Angular's OnPush change detection already\n * places on any object bound to an OnPush view.\n */\nconst shallowEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n\n return a.every((item, index) => item === b[index]);\n};\n\n/**\n * Deserializes a pipe input into a date, treating a missing value and an unparseable one alike as\n * \"no date\" — `DateAdapter.deserialize()` returns `null` for the former but a truthy *invalid* date\n * for the latter, so a plain truthiness check is not enough.\n */\nconst toValidDate = <D>(adapter: DateAdapter<D>, value: unknown): D | null => {\n const date = adapter.deserialize(value);\n\n return date != null && adapter.isValid(date) ? date : null;\n};\n\n/**\n * A `[from, to]` tuple with both bounds required; `null` when either is missing or invalid.\n *\n * Takes the tuple itself as possibly missing, not just its bounds: a pipe input that has not been\n * populated yet is `null`/`undefined` rather than `[null, null]`, and destructuring that throws.\n */\nconst toClosedRange = <D>(adapter: DateAdapter<D>, value: D[] | string[] | null | undefined): [D, D] | null => {\n const [from, to] = value ?? [];\n const startDate = toValidDate(adapter, from);\n const endDate = toValidDate(adapter, to);\n\n return startDate && endDate ? [startDate, endDate] : null;\n};\n\n/**\n * A `[from, to]` tuple where one bound may be open; `null` only when neither bound is a valid date.\n *\n * The range formatters switch to the opened-range template on their own when a bound is missing, but\n * throw when both are — and a throwing pipe aborts the rendering of the whole view.\n */\nconst toOpenedRange = <D>(\n adapter: DateAdapter<D>,\n value: D[] | string[] | null | undefined\n): [D | null, D | null] | null => {\n const [from, to] = value ?? [];\n const startDate = toValidDate(adapter, from);\n const endDate = toValidDate(adapter, to);\n\n return startDate || endDate ? [startDate, endDate] : null;\n};\n\n/**\n * A `[from, to]` tuple the duration formatters accept: both bounds required and chronologically\n * ordered. `DateFormatter.duration*` throws on anything else.\n */\nconst toDurationRange = <D>(adapter: DateAdapter<D>, value: D[] | string[] | null | undefined): [D, D] | null => {\n const range = toClosedRange(adapter, value);\n\n return range && adapter.compareDateTime(range[0], range[1]) <= 0 ? range : null;\n};\n\n/** @deprecated The base of the deprecated unprefixed date pipes. Will be removed in 22.0.0. */\nexport class BaseFormatterPipe<D> {\n protected readonly adapter: DateAdapter<D> = inject(DateAdapter<D>);\n protected readonly formatter: DateFormatter<D> = inject(DateFormatter<D>);\n}\n\n/**\n * Base class for impure date-formatter pipes that recompute their result whenever the active locale\n * changes via `KbqLocaleService`, or the active time zone via `KbqDateTimezoneService`.\n *\n * The base class owns:\n * - a subscription to `KbqLocaleService.changes`, which invalidates the cache and marks the host for check\n * (the same approach the built-in `AsyncPipe` uses);\n * - a read of the active time zone signal in `transform()`, which registers it on the rendering view, so a\n * time zone change refreshes that view — OnPush included — without a call of its own;\n * - caching by `(value, args, localeId, timezone)`, so the impure `transform()` only does\n * real work when an input, the active locale or the active time zone actually changed — see\n * `shallowEqual` for how the comparison works and its limits.\n *\n * Subclasses implement `format()`, which receives the raw pipe input(s) — a\n * single value for absolute/relative pipes, or a `[from, to]` tuple for range\n * pipes — deserializes via `this.adapter` and calls the matching\n * `DateFormatter` method.\n *\n * @docs-private\n */\nexport abstract class BaseLocaleAwareFormatterPipe<\n D,\n Value = D | string | null | undefined,\n Args extends unknown[] = unknown[]\n> {\n protected readonly adapter: DateAdapter<D> = inject(DateAdapter<D>);\n protected readonly formatter: DateFormatter<D> = inject(DateFormatter<D>);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly timezoneService = inject(KbqDateTimezoneService);\n\n private cachedValue: Value | null = null;\n private cachedArgs: Args = [] as unknown as Args;\n private cachedLocaleId: string | null = null;\n private cachedTimezone: KbqTimezoneLike | null = null;\n private cachedResult = '';\n private hasCache = false;\n\n constructor() {\n this.localeService?.changes.pipe(takeUntilDestroyed(inject(DestroyRef))).subscribe(() => {\n this.hasCache = false;\n this.changeDetectorRef.markForCheck();\n });\n }\n\n transform(value: Value, ...args: Args): string {\n const currentLocaleId = this.localeService?.localeId() ?? null;\n // Read ahead of the cache check on every call: the read is what refreshes the view on a zone change.\n const currentTimezone = this.timezoneService.timezone();\n\n if (\n this.hasCache &&\n shallowEqual(value, this.cachedValue) &&\n currentLocaleId === this.cachedLocaleId &&\n currentTimezone === this.cachedTimezone &&\n this.argsEqual(args)\n ) {\n return this.cachedResult;\n }\n\n this.cachedResult = this.format(value, ...args);\n this.cachedValue = value;\n this.cachedArgs = args;\n this.cachedLocaleId = currentLocaleId;\n this.cachedTimezone = currentTimezone;\n this.hasCache = true;\n\n return this.cachedResult;\n }\n\n protected abstract format(value: Value, ...args: Args): string;\n\n private argsEqual(args: Args): boolean {\n if (args.length !== this.cachedArgs.length) return false;\n\n for (let i = 0; i < args.length; i++) {\n if (!shallowEqual(args[i], this.cachedArgs[i])) return false;\n }\n\n return true;\n }\n}\n\n/**\n * @deprecated Use the `kbqAbsoluteLongDate` pipe (`KbqAbsoluteLongDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'absoluteLongDate'\n})\nexport class AbsoluteDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, currYear?: boolean): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteLongDate(date, currYear) : '';\n }\n}\n\n/**\n * @deprecated Use the `kbqAbsoluteLongDate` pipe (`KbqAbsoluteLongDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'absoluteLongDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class AbsoluteDateFormatterImpurePipe<D> extends AbsoluteDateFormatterPipe<D> {\n transform(value: D | string | null | undefined, currYear?: boolean): string {\n return super.transform(value, currYear);\n }\n}\n\n/**\n * @deprecated Use the `kbqAbsoluteLongDateTime` pipe (`KbqAbsoluteLongDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'absoluteLongDateTime'\n})\nexport class AbsoluteDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteLongDateTime(date, options) : '';\n }\n}\n\n/**\n * @deprecated Use the `kbqAbsoluteLongDateTime` pipe (`KbqAbsoluteLongDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'absoluteLongDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class AbsoluteDateTimeFormatterImpurePipe<D> extends AbsoluteDateTimeFormatterPipe<D> {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n/**\n * @deprecated Use the `kbqAbsoluteShortDate` pipe (`KbqAbsoluteShortDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'absoluteShortDate'\n})\nexport class AbsoluteDateShortFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, currYear?: boolean): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteShortDate(date, currYear) : '';\n }\n}\n\n/**\n * @deprecated Use the `kbqAbsoluteShortDate` pipe (`KbqAbsoluteShortDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'absoluteShortDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class AbsoluteDateShortFormatterImpurePipe<D> extends AbsoluteDateShortFormatterPipe<D> {\n transform(value: D | string | null | undefined, currYear?: boolean): string {\n return super.transform(value, currYear);\n }\n}\n\n/**\n * @deprecated Use the `kbqAbsoluteShortDateTime` pipe (`KbqAbsoluteShortDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'absoluteShortDateTime'\n})\nexport class AbsoluteShortDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteShortDateTime(date, options) : '';\n }\n}\n\n/**\n * @deprecated Use the `kbqAbsoluteShortDateTime` pipe (`KbqAbsoluteShortDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'absoluteShortDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class AbsoluteShortDateTimeFormatterImpurePipe<D> extends AbsoluteShortDateTimeFormatterPipe<D> {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n/**\n * @deprecated Use the `kbqRelativeLongDate` pipe (`KbqRelativeLongDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'relativeLongDate'\n})\nexport class RelativeDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeLongDate(date) : '';\n }\n}\n\n/**\n * @deprecated Use the `kbqRelativeLongDate` pipe (`KbqRelativeLongDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'relativeLongDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RelativeDateFormatterImpurePipe<D> extends RelativeDateFormatterPipe<D> {\n transform(value: D | string | null | undefined): string {\n return super.transform(value);\n }\n}\n\n/**\n * @deprecated Use the `kbqRelativeLongDateTime` pipe (`KbqRelativeLongDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'relativeLongDateTime'\n})\nexport class RelativeDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeLongDateTime(date, options) : '';\n }\n}\n\n/**\n * @deprecated Use the `kbqRelativeLongDateTime` pipe (`KbqRelativeLongDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'relativeLongDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RelativeDateTimeFormatterImpurePipe<D> extends RelativeDateTimeFormatterPipe<D> {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n/**\n * @deprecated Use the `kbqRelativeShortDate` pipe (`KbqRelativeShortDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'relativeShortDate'\n})\nexport class RelativeShortDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeShortDate(date) : '';\n }\n}\n\n/**\n * @deprecated Use the `kbqRelativeShortDate` pipe (`KbqRelativeShortDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'relativeShortDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RelativeShortDateFormatterImpurePipe<D> extends RelativeShortDateFormatterPipe<D> {\n transform(value: D | string | null | undefined): string {\n return super.transform(value);\n }\n}\n\n/**\n * @deprecated Use the `kbqRelativeShortDateTime` pipe (`KbqRelativeShortDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'relativeShortDateTime'\n})\nexport class RelativeShortDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeShortDateTime(date, options) : '';\n }\n}\n\n/**\n * @deprecated Use the `kbqRelativeShortDateTime` pipe (`KbqRelativeShortDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'relativeShortDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RelativeShortDateTimeFormatterImpurePipe<D> extends RelativeShortDateTimeFormatterPipe<D> {\n transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeLongDate` pipe (`KbqRangeLongDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeLongDate'\n})\nexport class RangeDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeLongDate(range[0], range[1]);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeLongDate` pipe (`KbqRangeLongDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeLongDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeDateFormatterImpurePipe<D> extends RangeDateFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined): string {\n return super.transform(value);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeShortDate` pipe (`KbqRangeShortDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeShortDate'\n})\nexport class RangeShortDateFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeShortDate(range[0], range[1] ?? undefined);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeShortDate` pipe (`KbqRangeShortDatePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeShortDateImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeShortDateFormatterImpurePipe<D> extends RangeShortDateFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined): string {\n return super.transform(value);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeLongDateTime` pipe (`KbqRangeLongDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeLongDateTime'\n})\nexport class RangeDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeLongDateTime(range[0], range[1] ?? undefined, options);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeLongDateTime` pipe (`KbqRangeLongDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeLongDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeDateTimeFormatterImpurePipe<D> extends RangeDateTimeFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeMiddleDateTime` pipe (`KbqRangeMiddleDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeMiddleDateTime'\n})\nexport class RangeMiddleDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n // Unlike the other range formats, the middle one has no opened-range template — both bounds required.\n const range = toClosedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeMiddleDateTime(range[0], range[1], options);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeMiddleDateTime` pipe (`KbqRangeMiddleDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeMiddleDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeMiddleDateTimeFormatterImpurePipe<D> extends RangeMiddleDateTimeFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeShortDateTime` pipe (`KbqRangeShortDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeShortDateTime'\n})\nexport class RangeShortDateTimeFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeShortDateTime(range[0], range[1], options);\n }\n}\n\n/**\n * @deprecated Use the `kbqRangeShortDateTime` pipe (`KbqRangeShortDateTimePipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'rangeShortDateTimeImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class RangeShortDateTimeFormatterImpurePipe<D> extends RangeShortDateTimeFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n/**\n * @deprecated Use the `kbqDurationShortest` pipe (`KbqDurationShortestPipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'durationShortest'\n})\nexport class DurationShortestFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationShortest(range[0], range[1], options?.seconds, options?.milliseconds);\n }\n}\n\n/**\n * @deprecated Use the `kbqDurationShortest` pipe (`KbqDurationShortestPipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'durationShortestImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class DurationShortestFormatterImpurePipe<D> extends DurationShortestFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n}\n\n/**\n * @deprecated Use the `kbqDurationLong` pipe (`KbqDurationLongPipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'durationLong'\n})\nexport class DurationLongFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationLong(range[0], range[1], units, fraction);\n }\n}\n\n/**\n * @deprecated Use the `kbqDurationLong` pipe (`KbqDurationLongPipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'durationLongImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class DurationLongFormatterImpurePipe<D> extends DurationLongFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n return super.transform(value, units, fraction);\n }\n}\n\n/**\n * @deprecated Use the `kbqDurationShort` pipe (`KbqDurationShortPipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'durationShort'\n})\nexport class DurationShortFormatterPipe<D> extends BaseFormatterPipe<D> implements PipeTransform {\n transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationShort(range[0], range[1], units, fraction);\n }\n}\n\n/**\n * @deprecated Use the `kbqDurationShort` pipe (`KbqDurationShortPipe`), which follows a locale change.\n * Will be removed in 22.0.0.\n */\n@Pipe({\n name: 'durationShortImpurePipe',\n pure: false\n})\n// eslint-disable-next-line @angular-eslint/use-pipe-transform-interface\nexport class DurationShortFormatterImpurePipe<D> extends DurationShortFormatterPipe<D> {\n transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n return super.transform(value, units, fraction);\n }\n}\n\n// Impure pipes that recompute on `KbqLocaleService` locale changes and on `KbqDateTimezoneService` time\n// zone changes (see `BaseLocaleAwareFormatterPipe`). Prefer these `kbq`-prefixed pipes when either can\n// change at runtime; the pure pipes above are kept for static usages and backward compatibility.\n\n@Pipe({\n name: 'kbqAbsoluteLongDate',\n pure: false\n})\nexport class KbqAbsoluteLongDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [currYear?: boolean]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, currYear?: boolean): string {\n return super.transform(value, currYear);\n }\n\n protected format(value: D | string | null | undefined, currYear?: boolean): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteLongDate(date, currYear) : '';\n }\n}\n\n@Pipe({\n name: 'kbqAbsoluteShortDate',\n pure: false\n})\nexport class KbqAbsoluteShortDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [currYear?: boolean]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, currYear?: boolean): string {\n return super.transform(value, currYear);\n }\n\n protected format(value: D | string | null | undefined, currYear?: boolean): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteShortDate(date, currYear) : '';\n }\n}\n\n@Pipe({\n name: 'kbqAbsoluteLongDateTime',\n pure: false\n})\nexport class KbqAbsoluteLongDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteLongDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'kbqAbsoluteShortDateTime',\n pure: false\n})\nexport class KbqAbsoluteShortDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.absoluteShortDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRelativeLongDate',\n pure: false\n})\nexport class KbqRelativeLongDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, []>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined): string {\n return super.transform(value);\n }\n\n protected format(value: D | string | null | undefined): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeLongDate(date) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRelativeShortDate',\n pure: false\n})\nexport class KbqRelativeShortDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, []>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined): string {\n return super.transform(value);\n }\n\n protected format(value: D | string | null | undefined): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeShortDate(date) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRelativeLongDateTime',\n pure: false\n})\nexport class KbqRelativeLongDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeLongDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRelativeShortDateTime',\n pure: false\n})\nexport class KbqRelativeShortDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D | string | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D | string | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D | string | null | undefined, options?: DateTimeOptions): string {\n const date = toValidDate(this.adapter, value);\n\n return date ? this.formatter.relativeShortDateTime(date, options) : '';\n }\n}\n\n@Pipe({\n name: 'kbqRangeLongDate',\n pure: false\n})\nexport class KbqRangeLongDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, []>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined): string {\n return super.transform(value);\n }\n\n protected format(value: D[] | string[] | null | undefined): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeLongDate(range[0], range[1]);\n }\n}\n\n@Pipe({\n name: 'kbqRangeShortDate',\n pure: false\n})\nexport class KbqRangeShortDatePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, []>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined): string {\n return super.transform(value);\n }\n\n protected format(value: D[] | string[] | null | undefined): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeShortDate(range[0], range[1] ?? undefined);\n }\n}\n\n@Pipe({\n name: 'kbqRangeLongDateTime',\n pure: false\n})\nexport class KbqRangeLongDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeLongDateTime(range[0], range[1] ?? undefined, options);\n }\n}\n\n@Pipe({\n name: 'kbqRangeMiddleDateTime',\n pure: false\n})\nexport class KbqRangeMiddleDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n // Unlike the other range formats, the middle one has no opened-range template — both bounds required.\n const range = toClosedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeMiddleDateTime(range[0], range[1], options);\n }\n}\n\n@Pipe({\n name: 'kbqRangeShortDateTime',\n pure: false\n})\nexport class KbqRangeShortDateTimePipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toOpenedRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.rangeShortDateTime(range[0], range[1], options);\n }\n}\n\n/**\n * Formats the duration between two dates as a digital-clock value, e.g. `48:02:25`.\n *\n * Takes a `[from, to]` tuple, like the range pipes. `options.seconds` defaults to `true` and\n * `options.milliseconds` to `false`; `options.currYear` is not used by this format.\n *\n * Renders an empty string when the tuple itself or one of its bounds is missing or invalid, or when\n * `from` is later than `to`.\n *\n * @example\n * ```html\n * {{ [startedAt, finishedAt] | kbqDurationShortest }}\n * {{ [startedAt, finishedAt] | kbqDurationShortest: { seconds: false } }}\n * ```\n */\n@Pipe({\n name: 'kbqDurationShortest',\n pure: false\n})\nexport class KbqDurationShortestPipe<D>\n extends BaseLocaleAwareFormatterPipe<D, D[] | string[] | null | undefined, [options?: DateTimeOptions]>\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n return super.transform(value, options);\n }\n\n protected format(value: D[] | string[] | null | undefined, options?: DateTimeOptions): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationShortest(range[0], range[1], options?.seconds, options?.milliseconds);\n }\n}\n\n/**\n * Formats the duration between two dates in the long text format, e.g. `2 дня и 4 часа`.\n *\n * Takes a `[from, to]` tuple, like the range pipes. `units` restricts the units to show (the\n * formatter picks them automatically when omitted), `fraction` adds a fractional part for years\n * and months.\n *\n * Renders an empty string when the tuple itself or one of its bounds is missing or invalid, or when\n * `from` is later than `to`.\n *\n * @example\n * ```html\n * {{ [startedAt, finishedAt] | kbqDurationLong }}\n * {{ [startedAt, finishedAt] | kbqDurationLong: ['hours', 'minutes'] }}\n * {{ [startedAt, finishedAt] | kbqDurationLong: ['years'] : true }}\n * ```\n */\n@Pipe({\n name: 'kbqDurationLong',\n pure: false\n})\nexport class KbqDurationLongPipe<D>\n extends BaseLocaleAwareFormatterPipe<\n D,\n D[] | string[] | null | undefined,\n [units?: DurationUnit[], fraction?: boolean]\n >\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n return super.transform(value, units, fraction);\n }\n\n protected format(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationLong(range[0], range[1], units, fraction);\n }\n}\n\n/**\n * Formats the duration between two dates in the short text format, e.g. `2 д 4 ч`.\n *\n * Takes a `[from, to]` tuple, like the range pipes. `units` restricts the units to show (the\n * formatter picks them automatically when omitted), `fraction` adds a fractional part for years\n * and months.\n *\n * Renders an empty string when the tuple itself or one of its bounds is missing or invalid, or when\n * `from` is later than `to`.\n *\n * @example\n * ```html\n * {{ [startedAt, finishedAt] | kbqDurationShort }}\n * {{ [startedAt, finishedAt] | kbqDurationShort: ['seconds', 'milliseconds'] }}\n * ```\n */\n@Pipe({\n name: 'kbqDurationShort',\n pure: false\n})\nexport class KbqDurationShortPipe<D>\n extends BaseLocaleAwareFormatterPipe<\n D,\n D[] | string[] | null | undefined,\n [units?: DurationUnit[], fraction?: boolean]\n >\n implements PipeTransform\n{\n override transform(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n return super.transform(value, units, fraction);\n }\n\n protected format(value: D[] | string[] | null | undefined, units?: DurationUnit[], fraction?: boolean): string {\n const range = toDurationRange(this.adapter, value);\n\n if (!range) return '';\n\n return this.formatter.durationShort(range[0], range[1], units, fraction);\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { enUSFormattersData, kbqLocaleConfigurationOverrideProvider } from '../../locales';\nimport { KbqDeepPartial } from '../../utils';\n\n/**\n * Available unit systems for file size formatting.\n * - SI (Metric): 1 KB = 1000 bytes\n * - IEC (Binary): 1 KiB = 1024 bytes\n */\nexport enum KbqMeasurementSystem {\n SI = 'SI',\n IEC = 'IEC'\n}\n\n/** Unit systems as union type */\nexport type KbqMeasurementSystemType = keyof typeof KbqMeasurementSystem;\n\nexport interface KbqUnitSystem {\n abbreviations: string[];\n base: number;\n power: number;\n}\n\n/**\n * Configuration for file size formatting options.\n * Defines the default unit system, precision, and available unit systems.\n */\nexport interface KbqSizeUnitsLocaleConfiguration {\n /**\n * Default unit system to use, one of {@link KbqMeasurementSystem} (e.g., 'SI' or 'IEC').\n */\n defaultUnitSystem: KbqMeasurementSystemType;\n /** Default number of decimal places to display in formatted output: with `2`, \"1.23 KB\". */\n defaultPrecision: number;\n /** Unit systems by {@link KbqMeasurementSystem}. */\n unitSystems: {\n [KbqMeasurementSystem.SI]: KbqUnitSystem;\n [KbqMeasurementSystem.IEC]: KbqUnitSystem;\n };\n}\n\nexport const KBQ_SIZE_UNITS_DEFAULT_LOCALE_CONFIGURATION: KbqSizeUnitsLocaleConfiguration =\n enUSFormattersData.sizeUnits;\n\n/**\n * Configuration for converting sizes in different unit systems. Supplies the defaults only — the active\n * locale wins over it, and {@link kbqSizeUnitsLocaleConfigurationProvider} wins over both.\n */\nexport const KBQ_SIZE_UNITS_LOCALE_CONFIGURATION = new InjectionToken<KbqSizeUnitsLocaleConfiguration>(\n 'KbqSizeUnitsLocaleConfiguration',\n {\n factory: () => KBQ_SIZE_UNITS_DEFAULT_LOCALE_CONFIGURATION\n }\n);\n\n/**\n * Utility provider of {@link KBQ_SIZE_UNITS_LOCALE_CONFIGURATION}. Only the units you pass are overridden;\n * the rest keep following the active locale.\n */\nexport const kbqSizeUnitsLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqSizeUnitsLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('sizeUnits', configuration);\n\n/** @deprecated Use {@link KbqSizeUnitsLocaleConfiguration}. Will be removed in 22.0.0. */\nexport type KbqSizeUnitsConfig = KbqSizeUnitsLocaleConfiguration;\n/** @deprecated Use {@link KBQ_SIZE_UNITS_DEFAULT_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_SIZE_UNITS_DEFAULT_CONFIG = KBQ_SIZE_UNITS_DEFAULT_LOCALE_CONFIGURATION;\n/** @deprecated Use {@link KBQ_SIZE_UNITS_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */\nexport const KBQ_SIZE_UNITS_CONFIG = KBQ_SIZE_UNITS_LOCALE_CONFIGURATION;\n/** @deprecated Use {@link kbqSizeUnitsLocaleConfigurationProvider}. Will be removed in 22.0.0. */\nexport const kbqFilesizeFormatterConfigurationProvider = kbqSizeUnitsLocaleConfigurationProvider;\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { inject, Injectable, InjectionToken, Pipe, PipeTransform, Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n KBQ_DEFAULT_LOCALE_ID,\n KBQ_LOCALE_ID,\n KBQ_LOCALE_SERVICE,\n KbqFormattersLocaleConfiguration,\n kbqInjectLocaleConfiguration,\n kbqLocaleConfigurationOverrideProvider,\n KbqLocaleService,\n KbqNumberFormatOptions,\n KbqNumberRoundingLocaleConfiguration,\n ruRUFormattersData\n} from '../../locales';\nimport { KbqDeepPartial } from '../../utils';\n\nexport const KBQ_NUMBER_FORMATTER_OPTIONS = new InjectionToken<ParsedDigitsInfo>('KbqNumberFormatterOptions');\n\n/**\n * Localization configuration provider for the number formatting rules — the decimal separators the\n * pipes apply on top of `Intl.NumberFormat`, and the abbreviations `kbqRoundNumber` renders.\n *\n * Supplies the defaults only: the active locale wins over it, and\n * {@link kbqFormattersLocaleConfigurationProvider} wins over both.\n */\nexport const KBQ_FORMATTERS_LOCALE_CONFIGURATION = new InjectionToken<KbqFormattersLocaleConfiguration>(\n 'KbqFormattersLocaleConfiguration',\n { factory: () => ruRUFormattersData.formatters }\n);\n\n/**\n * Utility provider of {@link KBQ_FORMATTERS_LOCALE_CONFIGURATION}. Only the rules you pass are overridden;\n * the rest keep following the active locale.\n */\nexport const kbqFormattersLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqFormattersLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('formatters', configuration);\n\n/**\n * Decimal formatting rules of `locale`, or `undefined` to leave `Intl.NumberFormat` alone.\n *\n * Only the active locale carries the consumer overrides, so an explicitly passed one is answered from the\n * raw locale data — and an id that was never registered has no entry at all, which is why the lookup is\n * guarded and not just the service. Without a locale service there is no active locale to speak of: the\n * token still resolves to its `ru-RU` factory default, and applying that to whatever `KBQ_LOCALE_ID` says\n * would rewrite the group separator of an app that never opted into localization.\n */\nconst decimalFor = (\n formatters: KbqFormattersLocaleConfiguration,\n localeService: KbqLocaleService | null,\n activeLocale: string | null,\n locale: string\n): KbqNumberFormatOptions | undefined =>\n localeService && locale === (activeLocale || KBQ_DEFAULT_LOCALE_ID)\n ? formatters.number.decimal\n : localeService?.locales[locale]?.formatters.number.decimal;\n\nexport const KBQ_NUMBER_FORMATTER_DEFAULT_OPTIONS: ParsedDigitsInfo = {\n useGrouping: true,\n minimumIntegerDigits: 1,\n minimumFractionDigits: 0,\n maximumFractionDigits: 3\n};\n\n/** Formats a number value according to locale and formatting options */\nexport function formatNumberWithLocale(\n value: unknown,\n formatter: Intl.NumberFormat,\n options?: KbqNumberFormatOptions\n): string {\n const num = strToNumber(value);\n\n if (!options?.viewGroupSeparator) return formatter.format(num);\n\n const numberFormatParts = formatter.formatToParts(num);\n\n for (const numberFormatPart of numberFormatParts) {\n if (numberFormatPart.type === 'group') {\n numberFormatPart.value = options.viewGroupSeparator;\n }\n }\n\n return numberFormatParts.map(({ value }) => value).join('');\n}\n\n/**\n * Special contract between `KbqDecimalPipe` and `KbqTableNumberPipe`,\n * so they can be interchangeable in the cases of usage\n */\nexport interface KbqNumericPipe {\n transform(value: unknown, digitsInfo?: string, locale?: string): string | null;\n}\n\nfunction isEmpty(value: any): boolean {\n return value == null || value === '' || value !== value;\n}\n\nfunction strToNumber(value: unknown): number {\n const coerced = coerceNumberProperty(value, null);\n\n if (coerced === null) {\n throw new Error(`${value} is not a number`);\n }\n\n return coerced;\n}\n\nconst NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?(-(true|false))?)?$/;\n\nconst minIntGroupPosition = 1;\nconst minFractionGroupPosition = 3;\nconst maxFractionGroupPosition = 5;\nconst useGroupingPosition = 7;\n\ntype RoundDecimalOptions = KbqNumberRoundingLocaleConfiguration & {\n /** Label for the ten-thousand unit. */\n tenThousand?: string;\n /** Label for the one-hundred-millions unit. */\n oneHundredMillions?: string;\n};\n\nconst ROUNDING_UNITS = {\n thousand: 1e3,\n tenThousand: 10 * 1e3,\n million: 1e6,\n oneHundredMillions: 100 * 1e6,\n billion: 1e9,\n trillion: 1e12\n};\n\n/** Rounding units that carry a localized label in `KbqNumberRoundingLocaleConfiguration`. */\ntype RoundingUnit = keyof RoundDecimalOptions & keyof typeof ROUNDING_UNITS;\n\nconst intervalsConfig = {\n supportedLanguages: ['ru-RU', 'en-US', 'es-LA', 'pt-BR'],\n intervals: [\n { startRange: 1, endRange: ROUNDING_UNITS.thousand },\n { startRange: ROUNDING_UNITS.thousand, endRange: ROUNDING_UNITS.tenThousand, precision: 1 },\n { startRange: ROUNDING_UNITS.tenThousand, endRange: ROUNDING_UNITS.million },\n { startRange: ROUNDING_UNITS.million, endRange: ROUNDING_UNITS.million * 10, precision: 1 },\n { startRange: ROUNDING_UNITS.million * 10, endRange: ROUNDING_UNITS.billion }\n ]\n};\n\nclass ParsedDigitsInfo {\n useGrouping: boolean;\n minimumIntegerDigits: number;\n minimumFractionDigits: number;\n maximumFractionDigits: number;\n}\n\nconst defaultValueForGroupingInRULocale: number = 10000;\n\nfunction parseDigitsInfo(digitsInfo: string): ParsedDigitsInfo {\n const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);\n\n if (parts === null) {\n throw new Error(`${digitsInfo} is not a valid digit info`);\n }\n\n const minIntPart = parts[minIntGroupPosition];\n const minFractionPart = parts[minFractionGroupPosition];\n const maxFractionPart = parts[maxFractionGroupPosition];\n const useGroupingPart = parts[useGroupingPosition];\n\n const result = new ParsedDigitsInfo();\n\n if (minIntPart != null) {\n result.minimumIntegerDigits = parseInt(minIntPart);\n }\n\n if (minFractionPart != null) {\n result.minimumFractionDigits = parseInt(minFractionPart);\n }\n\n if (maxFractionPart != null) {\n result.maximumFractionDigits = parseInt(maxFractionPart);\n } else if (minFractionPart != null && result.minimumFractionDigits > result.maximumFractionDigits) {\n result.maximumFractionDigits = result.minimumFractionDigits;\n }\n\n if (useGroupingPart != null) {\n result.useGrouping = useGroupingPart === 'true';\n }\n\n return result;\n}\n\n@Injectable({ providedIn: 'root' })\n@Pipe({\n name: 'kbqNumber',\n pure: false\n})\nexport class KbqDecimalPipe implements KbqNumericPipe, PipeTransform {\n private id = inject(KBQ_LOCALE_ID, { optional: true });\n private localeService = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly options = inject<ParsedDigitsInfo>(KBQ_NUMBER_FORMATTER_OPTIONS, { optional: true })!;\n private readonly formatters = kbqInjectLocaleConfiguration('formatters', KBQ_FORMATTERS_LOCALE_CONFIGURATION);\n\n constructor() {\n this.options = this.options || KBQ_NUMBER_FORMATTER_DEFAULT_OPTIONS;\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe((newId: string) => (this.id = newId));\n }\n\n /**\n * @param value The number to be formatted.\n * @param digitsInfo Decimal representation options, specified by a string\n * in the format `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`.\n * - `minIntegerDigits`: The minimum number of integer digits before the decimal point.\n * Default is `1`.\n * - `minFractionDigits`: The minimum number of digits after the decimal point.\n * Default is `0`.\n * - `maxFractionDigits`: The maximum number of digits after the decimal point.\n * Default is `3`.\n * @param locale A locale code for the locale format rules to use.\n * When not supplied, uses the value of `KBQ_LOCALE_ID`, which is `ru` by default.\n */\n transform(value: any, digitsInfo?: string, locale?: string): string | null {\n if (isEmpty(value)) {\n return null;\n }\n\n const currentLocale = locale || this.id || KBQ_DEFAULT_LOCALE_ID;\n\n let parsedDigitsInfo: ParsedDigitsInfo | undefined;\n\n if (digitsInfo) {\n parsedDigitsInfo = parseDigitsInfo(digitsInfo);\n }\n\n const options: Intl.NumberFormatOptions = {\n ...this.options,\n ...parsedDigitsInfo\n };\n\n if (this.isSpecialFormatForRULocale(currentLocale, value, parsedDigitsInfo?.useGrouping)) {\n options.useGrouping = false;\n }\n\n try {\n const formatter = new Intl.NumberFormat(currentLocale, options);\n\n return formatNumberWithLocale(\n value,\n formatter,\n decimalFor(this.formatters(), this.localeService, this.id, currentLocale)\n );\n } catch (error: any) {\n throw Error(`InvalidPipeArgument: KbqDecimalPipe for pipe '${JSON.stringify(error.message)}'`, {\n cause: error\n });\n }\n }\n\n private isSpecialFormatForRULocale(locale: string, value: number, grouping?: boolean): boolean {\n return (\n ['ru', 'ru-RU'].includes(locale) &&\n grouping === undefined &&\n Math.abs(value) < defaultValueForGroupingInRULocale\n );\n }\n}\n\n@Injectable({ providedIn: 'root' })\n@Pipe({\n name: 'kbqTableNumber',\n pure: false\n})\nexport class KbqTableNumberPipe implements KbqNumericPipe, PipeTransform {\n private id = inject(KBQ_LOCALE_ID, { optional: true });\n private localeService = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly options = inject<ParsedDigitsInfo>(KBQ_NUMBER_FORMATTER_OPTIONS, { optional: true })!;\n private readonly formatters = kbqInjectLocaleConfiguration('formatters', KBQ_FORMATTERS_LOCALE_CONFIGURATION);\n\n constructor() {\n this.options = this.options || KBQ_NUMBER_FORMATTER_DEFAULT_OPTIONS;\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe((newId: string) => (this.id = newId));\n }\n\n /**\n * @param value The number to be formatted.\n * @param digitsInfo Decimal representation options, specified by a string\n * in the format `{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}`.\n * - `minIntegerDigits`: The minimum number of integer digits before the decimal point.\n * Default is `1`.\n * - `minFractionDigits`: The minimum number of digits after the decimal point.\n * Default is `0`.\n * - `maxFractionDigits`: The maximum number of digits after the decimal point.\n * Default is `3`.\n * @param locale A locale code for the locale format rules to use.\n * When not supplied, uses the value of `KBQ_LOCALE_ID`, which is `ru` by default.\n */\n transform(value: any, digitsInfo?: string, locale?: string): string | null {\n if (isEmpty(value)) {\n return null;\n }\n\n const currentLocale = locale || this.id || KBQ_DEFAULT_LOCALE_ID;\n\n let parsedDigitsInfo: ParsedDigitsInfo | undefined;\n\n if (digitsInfo) {\n parsedDigitsInfo = parseDigitsInfo(digitsInfo);\n }\n\n const options: Intl.NumberFormatOptions = {\n ...this.options,\n ...parsedDigitsInfo\n };\n\n try {\n const formatter = new Intl.NumberFormat(currentLocale, options);\n\n return formatNumberWithLocale(\n value,\n formatter,\n decimalFor(this.formatters(), this.localeService, this.id, currentLocale)\n );\n } catch (error: any) {\n throw Error(`InvalidPipeArgument: KbqTableNumberPipe for pipe '${JSON.stringify(error.message)}'`, {\n cause: error\n });\n }\n }\n}\n\nfunction isWithin(startRange: number, endRange: number, valueToCheck: number): boolean {\n return startRange <= valueToCheck && valueToCheck < endRange;\n}\n\n@Injectable({ providedIn: 'root' })\n@Pipe({\n name: 'kbqRoundNumber',\n pure: false\n})\nexport class KbqRoundDecimalPipe implements PipeTransform {\n private id = inject(KBQ_LOCALE_ID, { optional: true });\n private localeService = inject<KbqLocaleService>(KBQ_LOCALE_SERVICE, { optional: true });\n private roundingOptions: RoundDecimalOptions;\n private readonly formatters = kbqInjectLocaleConfiguration('formatters', KBQ_FORMATTERS_LOCALE_CONFIGURATION);\n\n constructor() {\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe((newId: string) => (this.id = newId));\n }\n\n // @TODO: update returned type to string | null. Breaking change\n transform(value: any, locale?: string): any {\n if (isEmpty(value)) {\n return null;\n }\n\n const currentLocale: string = locale || this.id || KBQ_DEFAULT_LOCALE_ID;\n\n // Only the active locale carries the consumer overrides; an explicitly passed locale is a request\n // for that locale's own rules, and one that was never registered has no entry at all.\n this.roundingOptions =\n currentLocale === (this.id || KBQ_DEFAULT_LOCALE_ID)\n ? this.formatters().number.rounding\n : (this.localeService?.locales[currentLocale]?.formatters.number.rounding ??\n ruRUFormattersData.formatters.number.rounding);\n\n try {\n const num = strToNumber(value);\n const unit = this.calculateUnit(num);\n\n if (!unit) {\n return Intl.NumberFormat.call(this, currentLocale, { useGrouping: false }).format(num);\n }\n\n let parts: { num?: number; fraction?: number } = {};\n\n if (intervalsConfig.supportedLanguages.includes(currentLocale)) {\n intervalsConfig.intervals.find(({ startRange, endRange, precision }) => {\n const within = isWithin(startRange, endRange, num);\n\n if (within) {\n if (precision) {\n parts =\n unit === 'thousand'\n ? this.calculatePartsForThousands(num)\n : {\n num: Math.trunc(num / ROUNDING_UNITS[unit]),\n fraction: this.calculateDecimal(num, ROUNDING_UNITS[unit])\n };\n } else {\n parts = { num: Math.round(num / ROUNDING_UNITS[unit]) };\n }\n }\n\n return within;\n });\n }\n\n parts = parts.num\n ? parts\n : {\n num: Math.trunc(num / ROUNDING_UNITS[unit]),\n fraction: this.calculateDecimal(num, ROUNDING_UNITS[unit])\n };\n Object.keys(parts).forEach((key) => {\n parts[key] = Intl.NumberFormat.call(this, currentLocale, { useGrouping: false }).format(parts[key]);\n });\n\n const calculatedValue = parts.fraction\n ? `${parts.num}${this.roundingOptions.groupSeparator}${parts.fraction}`\n : `${parts.num}`;\n\n return `${calculatedValue}${this.roundingOptions.separator}${this.roundingOptions[unit]}`;\n } catch (error: any) {\n throw Error(`InvalidPipeArgument: KbqRoundDecimalPipe for pipe '${JSON.stringify(error.message)}'`, {\n cause: error\n });\n }\n }\n\n private calculateDecimal(num: number, divider: number) {\n return Math.round(((num / divider) % 1) * 10);\n }\n\n /**\n * 2 * 1000 is a number in the interval of [1500...2500)\n *\n * 2,0 * 1000 is a number in the interval of [1950...2050)\n */\n private calculatePartsForThousands(num: number) {\n const dividedValue = num / ROUNDING_UNITS.thousand;\n const div = Math.round(dividedValue) * ROUNDING_UNITS.thousand;\n const fifty = 50;\n\n return isWithin(div - fifty, div + fifty, num)\n ? { num: Math.round(dividedValue), fraction: 0 }\n : { num: Math.round(dividedValue) };\n }\n\n private calculateUnit(num: number): RoundingUnit | undefined {\n let currentUnit: RoundingUnit | undefined;\n const localizedOptions = Object.keys(this.roundingOptions);\n\n (Object.keys(ROUNDING_UNITS) as RoundingUnit[]).every((key) => {\n if (!localizedOptions.includes(key)) {\n return true;\n }\n\n if (num / ROUNDING_UNITS[key] >= 1) {\n currentUnit = key;\n\n return true;\n }\n\n return false;\n });\n\n return currentUnit;\n }\n}\n","import { KbqUnitSystem } from './config';\n\nexport const KBQ_INVALID_VALUE_ERROR = 'Argument \"value\" must be a finite number!';\n\n/**\n * Converts a byte value into locale-independent file size parts: numeric value and unit abbreviation.\n *\n * @param value - size in bytes.\n * @param system - unit system defining abbreviations and base scaling (SI/IEC).\n * @returns Object with the formatted size info.\n * @example\n * ```ts\n * getFormattedSizeParts(1500, 'SI'); // { value: \"1.50\", unit: \"KB\" }\n * ```\n */\nexport function getFormattedSizeParts(value: number, system: KbqUnitSystem): { value: string; unit: string } {\n const { result, unit } = getHumanizedBytes(value, system);\n\n return {\n value: result.toString(),\n unit\n };\n}\n\n/**\n * Converts bytes to Kb, Mb, Gb\n *\n * @param value the number of bytes\n * @param system the measurement system\n * @param threshold the lower counting threshold\n */\nexport const getHumanizedBytes = (\n value: number,\n system: KbqUnitSystem,\n threshold?: number\n): { result: number; unit: string } => {\n if (!Number.isFinite(value)) {\n throw new Error(KBQ_INVALID_VALUE_ERROR);\n }\n\n const calculatedThreshold = Number.isFinite(threshold) ? threshold : Math.pow(system.base, system.power);\n const orderOfMagnitude: number = Math.pow(system.base, system.power);\n\n let result: number = value;\n let step = 0;\n const len: number = system.abbreviations.length - 1;\n\n while (step < len) {\n if (calculatedThreshold !== undefined && result < calculatedThreshold) {\n break;\n }\n\n step++;\n result = value / Math.pow(orderOfMagnitude, step);\n }\n\n return {\n result,\n unit: system.abbreviations[step]\n };\n};\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { KBQ_DEFAULT_LOCALE_ID, KBQ_LOCALE_SERVICE, kbqInjectLocaleConfiguration } from '../../locales';\nimport { KbqDecimalPipe } from '../number/formatter';\nimport {\n KBQ_SIZE_UNITS_LOCALE_CONFIGURATION,\n KbqMeasurementSystem,\n KbqMeasurementSystemType,\n KbqUnitSystem\n} from './config';\nimport { getFormattedSizeParts } from './size';\n\n@Pipe({\n name: 'kbqDataSize',\n pure: false\n})\nexport class KbqDataSizePipe implements PipeTransform {\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly numberPipe = inject(KbqDecimalPipe, { optional: true });\n private readonly nonBreakingSpace = '\\u00a0';\n private readonly config = kbqInjectLocaleConfiguration('sizeUnits', KBQ_SIZE_UNITS_LOCALE_CONFIGURATION);\n\n /** Transforms bytes into localized size string */\n transform(\n source: number,\n precision: number = this.config().defaultPrecision,\n unitSystemName: KbqMeasurementSystemType = this.config().defaultUnitSystem,\n locale: string = this.localeService?.localeId() || KBQ_DEFAULT_LOCALE_ID\n ): string {\n const config = this.config();\n // `config` already carries the active locale with the overrides merged in. A caller that asks for\n // another locale explicitly is asking for that locale's units — a locale id that was never\n // registered has no entry at all, so guard the lookup, not just the service.\n const resolvedUnitSystems: Record<KbqMeasurementSystem, KbqUnitSystem> =\n locale === (this.localeService?.localeId() || KBQ_DEFAULT_LOCALE_ID)\n ? config.unitSystems\n : (this.localeService?.locales[locale]?.sizeUnits.unitSystems ?? config.unitSystems);\n\n const { value, unit } = getFormattedSizeParts(source, resolvedUnitSystems[unitSystemName]);\n\n const formattedValue = this.numberPipe?.transform(value, `1.0-${precision}`, locale) || value;\n\n return formattedValue ? `${formattedValue}${this.nonBreakingSpace}${unit}` : '';\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DateFormatter } from './date/formatter';\nimport {\n AbsoluteDateFormatterImpurePipe,\n AbsoluteDateFormatterPipe,\n AbsoluteDateShortFormatterImpurePipe,\n AbsoluteDateShortFormatterPipe,\n AbsoluteDateTimeFormatterImpurePipe,\n AbsoluteDateTimeFormatterPipe,\n AbsoluteShortDateTimeFormatterImpurePipe,\n AbsoluteShortDateTimeFormatterPipe,\n DurationLongFormatterImpurePipe,\n DurationLongFormatterPipe,\n DurationShortestFormatterImpurePipe,\n DurationShortestFormatterPipe,\n DurationShortFormatterImpurePipe,\n DurationShortFormatterPipe,\n KbqAbsoluteLongDatePipe,\n KbqAbsoluteLongDateTimePipe,\n KbqAbsoluteShortDatePipe,\n KbqAbsoluteShortDateTimePipe,\n KbqDurationLongPipe,\n KbqDurationShortestPipe,\n KbqDurationShortPipe,\n KbqRangeLongDatePipe,\n KbqRangeLongDateTimePipe,\n KbqRangeMiddleDateTimePipe,\n KbqRangeShortDatePipe,\n KbqRangeShortDateTimePipe,\n KbqRelativeLongDatePipe,\n KbqRelativeLongDateTimePipe,\n KbqRelativeShortDatePipe,\n KbqRelativeShortDateTimePipe,\n RangeDateFormatterImpurePipe,\n RangeDateFormatterPipe,\n RangeDateTimeFormatterImpurePipe,\n RangeDateTimeFormatterPipe,\n RangeMiddleDateTimeFormatterImpurePipe,\n RangeMiddleDateTimeFormatterPipe,\n RangeShortDateFormatterImpurePipe,\n RangeShortDateFormatterPipe,\n RangeShortDateTimeFormatterImpurePipe,\n RangeShortDateTimeFormatterPipe,\n RelativeDateFormatterImpurePipe,\n RelativeDateFormatterPipe,\n RelativeDateTimeFormatterImpurePipe,\n RelativeDateTimeFormatterPipe,\n RelativeShortDateFormatterImpurePipe,\n RelativeShortDateFormatterPipe,\n RelativeShortDateTimeFormatterImpurePipe,\n RelativeShortDateTimeFormatterPipe\n} from './date/formatter.pipe';\nimport { KbqDataSizePipe } from './filesize';\nimport { KbqDecimalPipe, KbqRoundDecimalPipe, KbqTableNumberPipe } from './number/formatter';\n\n@NgModule({\n imports: [\n AbsoluteDateFormatterPipe,\n AbsoluteDateTimeFormatterPipe,\n AbsoluteDateShortFormatterPipe,\n AbsoluteShortDateTimeFormatterPipe,\n RelativeDateFormatterPipe,\n RelativeDateTimeFormatterPipe,\n RelativeShortDateFormatterPipe,\n RelativeShortDateTimeFormatterPipe,\n RangeDateFormatterPipe,\n RangeShortDateFormatterPipe,\n RangeDateTimeFormatterPipe,\n RangeShortDateTimeFormatterPipe,\n RangeMiddleDateTimeFormatterPipe,\n DurationShortestFormatterPipe,\n DurationLongFormatterPipe,\n DurationShortFormatterPipe,\n AbsoluteDateFormatterImpurePipe,\n AbsoluteDateTimeFormatterImpurePipe,\n AbsoluteDateShortFormatterImpurePipe,\n AbsoluteShortDateTimeFormatterImpurePipe,\n RelativeDateFormatterImpurePipe,\n RelativeDateTimeFormatterImpurePipe,\n RelativeShortDateFormatterImpurePipe,\n RelativeShortDateTimeFormatterImpurePipe,\n RangeDateFormatterImpurePipe,\n RangeShortDateFormatterImpurePipe,\n RangeDateTimeFormatterImpurePipe,\n RangeShortDateTimeFormatterImpurePipe,\n RangeMiddleDateTimeFormatterImpurePipe,\n DurationShortestFormatterImpurePipe,\n DurationLongFormatterImpurePipe,\n DurationShortFormatterImpurePipe,\n KbqAbsoluteLongDatePipe,\n KbqAbsoluteLongDateTimePipe,\n KbqAbsoluteShortDatePipe,\n KbqAbsoluteShortDateTimePipe,\n KbqRelativeLongDatePipe,\n KbqRelativeLongDateTimePipe,\n KbqRelativeShortDatePipe,\n KbqRelativeShortDateTimePipe,\n KbqRangeLongDatePipe,\n KbqRangeLongDateTimePipe,\n KbqRangeMiddleDateTimePipe,\n KbqRangeShortDatePipe,\n KbqRangeShortDateTimePipe,\n KbqDurationShortestPipe,\n KbqDurationLongPipe,\n KbqDurationShortPipe,\n KbqDataSizePipe,\n KbqDecimalPipe,\n KbqRoundDecimalPipe,\n KbqTableNumberPipe\n ],\n providers: [DateFormatter],\n exports: [\n KbqDecimalPipe,\n KbqRoundDecimalPipe,\n KbqTableNumberPipe,\n AbsoluteDateFormatterPipe,\n AbsoluteDateTimeFormatterPipe,\n AbsoluteDateShortFormatterPipe,\n AbsoluteShortDateTimeFormatterPipe,\n RelativeDateFormatterPipe,\n RelativeDateTimeFormatterPipe,\n RelativeShortDateFormatterPipe,\n RelativeShortDateTimeFormatterPipe,\n RangeDateFormatterPipe,\n RangeShortDateFormatterPipe,\n RangeDateTimeFormatterPipe,\n RangeShortDateTimeFormatterPipe,\n RangeMiddleDateTimeFormatterPipe,\n DurationShortestFormatterPipe,\n DurationLongFormatterPipe,\n DurationShortFormatterPipe,\n AbsoluteDateFormatterImpurePipe,\n AbsoluteDateTimeFormatterImpurePipe,\n AbsoluteDateShortFormatterImpurePipe,\n AbsoluteShortDateTimeFormatterImpurePipe,\n RelativeDateFormatterImpurePipe,\n RelativeDateTimeFormatterImpurePipe,\n RelativeShortDateFormatterImpurePipe,\n RelativeShortDateTimeFormatterImpurePipe,\n RangeDateFormatterImpurePipe,\n RangeShortDateFormatterImpurePipe,\n RangeDateTimeFormatterImpurePipe,\n RangeShortDateTimeFormatterImpurePipe,\n RangeMiddleDateTimeFormatterImpurePipe,\n DurationShortestFormatterImpurePipe,\n DurationLongFormatterImpurePipe,\n DurationShortFormatterImpurePipe,\n KbqAbsoluteLongDatePipe,\n KbqAbsoluteLongDateTimePipe,\n KbqAbsoluteShortDatePipe,\n KbqAbsoluteShortDateTimePipe,\n KbqRelativeLongDatePipe,\n KbqRelativeLongDateTimePipe,\n KbqRelativeShortDatePipe,\n KbqRelativeShortDateTimePipe,\n KbqRangeLongDatePipe,\n KbqRangeLongDateTimePipe,\n KbqRangeMiddleDateTimePipe,\n KbqRangeShortDatePipe,\n KbqRangeShortDateTimePipe,\n KbqDurationShortestPipe,\n KbqDurationLongPipe,\n KbqDurationShortPipe,\n KbqDataSizePipe\n ]\n})\nexport class KbqFormattersModule {}\n\nexport * from './date/formatter';\nexport * from './date/formatter.pipe';\nexport * from './filesize/index';\nexport * from './number/formatter';\n","import { AfterContentInit, Directive, ElementRef, contentChildren, inject } from '@angular/core';\n\n@Directive({\n selector: '.kbq-form__row, .kbq-form__fieldset, .kbq-form__legend',\n host: {\n '[class.kbq-form-row_margin]': 'margin'\n },\n exportAs: 'kbqFormElement'\n})\nexport class KbqFormElement implements AfterContentInit {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n margin = false;\n\n isFieldSet = false;\n hasLegend = false;\n isHorizontal = false;\n\n readonly elements = contentChildren(KbqFormElement);\n\n ngAfterContentInit(): void {\n const classList = this.element.nativeElement.classList;\n\n this.isHorizontal = classList.contains('kbq-horizontal');\n\n this.isFieldSet = classList.contains('kbq-form__fieldset');\n\n if (this.isFieldSet && this.element.nativeElement.firstElementChild) {\n this.hasLegend = this.element.nativeElement.firstElementChild.classList.contains('kbq-form__legend');\n }\n }\n}\n\n@Directive({\n selector: '.kbq-form-vertical, .kbq-form-horizontal',\n host: {\n class: 'kbq-form'\n },\n exportAs: 'kbqForm'\n})\nexport class KbqForm implements AfterContentInit {\n readonly elements = contentChildren(KbqFormElement);\n\n ngAfterContentInit(): void {\n this.handleElements(this.elements());\n }\n\n handleElements(elements: readonly KbqFormElement[]): void {\n elements.forEach((element, index) => {\n const nextElement: KbqFormElement | undefined = elements[index + 1];\n\n if (element.isFieldSet && !element.isHorizontal) {\n this.handleElements(element.elements());\n }\n\n element.margin = !!(nextElement && !nextElement.hasLegend);\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqForm, KbqFormElement } from './forms.directive';\n\n@NgModule({\n imports: [\n KbqForm,\n KbqFormElement\n ],\n exports: [\n KbqForm,\n KbqFormElement\n ]\n})\nexport class KbqFormsModule {}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/** Provides a set of validators for password form controls. */\nexport class PasswordValidators {\n /**\n * Validator that requires the control's value length to be at least `min` characters.\n *\n * `min` - number of characters.\n *\n * ## Usage:\n *\n * ```typescript\n * const control = new FormControl('password', PasswordValidators.minLength(10));\n * console.log(control.errors); // {minLength: {min: 10, actual: 8}}\n * ```\n */\n static minLength(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n return value.length >= min ? null : { minLength: { min, actual: value.length } };\n };\n }\n\n /**\n * Validator that requires the control's value length to be at most `max` characters.\n *\n * `max` - number of characters.\n *\n * ## Usage:\n * ```typescript\n * const control = new FormControl('password', PasswordValidators.maxLength(6));\n * console.log(control.errors); // {maxLength: {max: 6, actual: 8}}\n * ```\n */\n static maxLength(max: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n return value.length <= max ? null : { maxLength: { max, actual: value.length } };\n };\n }\n\n /**\n * Validator that requires the control's value to be at least `min` uppercase characters.\n *\n * `min` - number of uppercase characters.\n *\n * ### Usage:\n *\n * ```typescript\n * const control = new FormControl('Password', PasswordValidators.minUppercase(2));\n * console.log(control.errors); // {minUppercase: {min: 2, actual: 1}}\n * ```\n */\n static minUppercase(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n const matches = (value.match(/[A-Z]/g) || []).length;\n\n return matches >= min ? null : { minUppercase: { min, actual: matches } };\n };\n }\n\n /**\n * Validator that requires the control's value to be at least `min` lowercase characters.\n *\n * `min` - number of lowercase characters.\n *\n * ### Usage:\n *\n * ```typescript\n * const control = new FormControl('PASSWORD', PasswordValidators.minLowercase());\n * console.log(control.errors); // {minLowercase: {min: 1, actual: 0}}\n * ```\n */\n static minLowercase(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n const matches = (value.match(/[a-z]/g) || []).length;\n\n return matches >= min ? null : { minLowercase: { min, actual: matches } };\n };\n }\n\n /**\n * Validator that requires the control's value to be at least `min` number characters.\n *\n * `min` - number of number characters.\n *\n * ### Usage:\n *\n * ```typescript\n * const control = new FormControl('passw0rd', PasswordValidators.minNumber(2));\n * console.log(control.errors); // {minNumber: {min: 2, actual: 1}}\n * ```\n */\n static minNumber(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n const matches = (value.match(/[\\d]/g) || []).length;\n\n return matches >= min ? null : { minNumber: { min, actual: matches } };\n };\n }\n\n /**\n * Validator that requires the control's value to be at least `min` special characters.\n *\n * `min` - number of special characters.\n *\n * ### Special characters:\n * ```js\n * ['!','@','#','$','%','^','&','*']\n * ```\n *\n * ### Usage:\n *\n * ```typescript\n * const control = new FormControl('pa$sword', PasswordValidators.minSpecial(2));\n * console.log(control.errors); // {minSpecial: {min: 2, actual: 1}}\n * ```\n */\n static minSpecial(min: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (typeof value !== 'string') {\n return null;\n }\n\n const matches = (value.match(/[!@#$%^&*]/g) || []).length;\n\n return matches >= min ? null : { minSpecial: { min, actual: matches } };\n };\n }\n}\n\n/** Provides a set of validators for file-related form controls. */\nexport class FileValidators {\n /**\n * Validator that checks if the file size is less than or equal to the provided `maxSize`.\n *\n * @param maxSize - The maximum allowed file size in bytes.\n * @returns A ValidatorFn function that checks the file size.\n *\n * ## Usage:\n *\n * ```typescript\n * const control = new FormControl(null, [FileValidators.maxFileSize(1024 * 1024)]); // 1MB\n * control.setValue(FILE_LESS_OR_EQUAL_THAN_1MB);\n * console.log(control.errors); // null\n * control.setValue(FILE_MORE_THAN_1MB);\n * console.log(control.errors); // {maxFileSize: { max: 1048576, actual: FILE_MORE_THAN_1MB.size }}\n * ```\n */\n static maxFileSize(maxSize: number): ValidatorFn {\n return ({ value }: AbstractControl): ValidationErrors | null => {\n if (!value) return null;\n\n const size = value instanceof File ? value.size : value.file.size;\n\n if (size > maxSize) {\n return { maxFileSize: { max: maxSize, actual: size } };\n }\n\n return null;\n };\n }\n\n /**\n * Validator that checks whether file's name or MIME type\n * matches one of the accepted extensions or MIME types.\n *\n * @param accept - Array of allowed file extensions or MIME types.\n * @returns ValidatorFn that returns validation error if file type is not accepted, or null otherwise.\n */\n static isCorrectExtension(accept: (`.${string}` | `${string}/${string}`)[]): ValidatorFn {\n return (control: AbstractControl<{ file: File } | null>): ValidationErrors | null => {\n if (!accept?.length || !control.value) return null;\n const { name, type } = control.value.file;\n\n const isValid = accept.some((acceptedExtensionOrMimeType) => {\n const typeAsRegExp = new RegExp(`${acceptedExtensionOrMimeType}$`);\n\n return typeAsRegExp.test(name) || typeAsRegExp.test(type);\n });\n\n return isValid ? null : { fileExtensionMismatch: { expected: accept, actual: name } };\n };\n }\n}\n\n/**\n * Type helper describing accepted file types, referring to\n * [unique file type specifiers](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/file#unique_file_type_specifiers).\n */\nexport type KbqFileTypeSpecifier = Parameters<typeof FileValidators.isCorrectExtension>[0];\n","/** Unicode combining marks left behind by NFKD decomposition of accented characters, e.g. `é` → `e` + U+0301. */\nconst COMBINING_MARKS = /[̀-ͯ]/g;\n\n/**\n * `й`/`Й` decompose under NFKD into `и`/`И` + a combining breve, same as any other diacritic. Unlike\n * Latin diacritics, that breve marks a distinct Cyrillic letter rather than an accented variant, so it's\n * re-composed after the generic strip instead of being folded away with the rest.\n */\nconst CYRILLIC_I_BREVE = /[иИ]̆/g;\n\n/** The transformation behind {@link normalizeSearchValue}, minus the end-trimming — see {@link findSearchMatchRanges}. */\nfunction foldDiacritics(value: string): string {\n return value\n .normalize('NFKD')\n .replace(CYRILLIC_I_BREVE, (match) => (match[0] === 'И' ? 'Й' : 'й'))\n .replace(COMBINING_MARKS, '')\n .toLocaleLowerCase();\n}\n\n/**\n * Normalizes a string for case- and diacritic-insensitive search comparison: trims the ends,\n * decomposes accented characters (NFKD), strips the resulting combining marks (while preserving\n * `й`/`Й` as distinct letters), and lowercases using the current locale. Internal whitespace and\n * punctuation are left untouched.\n */\nexport function normalizeSearchValue(value: string): string {\n if (typeof value !== 'string' || !value) return '';\n\n return foldDiacritics(value.trim());\n}\n\n/**\n * Locates every case- and diacritic-insensitive match of `tokens` in `value`, returning `[start, end)`\n * ranges in `value`'s own (unfolded) coordinates — overlapping or adjacent ranges are merged. This is\n * what a highlighter needs to stay in sync with {@link createSearchPredicate}: matching a folded value\n * like `cafe` against `Café` only tells you *that* it matched, not *where* in the original string to\n * mark, since folding can change which letters look alike without changing the string's length.\n */\nexport function findSearchMatchRanges(value: string, tokens: readonly string[]): Array<[number, number]> {\n const normalizedTokens = tokens.map(normalizeSearchValue).filter((token) => token.length > 0);\n\n if (typeof value !== 'string' || !normalizedTokens.length) return [];\n\n // Folding is applied one UTF-16 code unit at a time so every character of the normalized value can be\n // traced back to the original index it came from — this is what makes mapping a match's position back\n // onto `value` possible. Surrogate pairs are folded as two independent units; neither combining-mark\n // stripping nor case-folding depends on cross-surrogate context, so this doesn't affect correctness.\n let normalizedValue = '';\n const originalIndexOf: number[] = [];\n\n for (let index = 0; index < value.length; index++) {\n const folded = foldDiacritics(value[index]);\n\n normalizedValue += folded;\n\n for (let i = 0; i < folded.length; i++) originalIndexOf.push(index);\n }\n\n const ranges: Array<[number, number]> = [];\n\n for (const token of normalizedTokens) {\n let fromIndex = 0;\n let matchIndex: number;\n\n while ((matchIndex = normalizedValue.indexOf(token, fromIndex)) !== -1) {\n ranges.push([originalIndexOf[matchIndex], originalIndexOf[matchIndex + token.length - 1] + 1]);\n fromIndex = matchIndex + token.length;\n }\n }\n\n return mergeRanges(ranges);\n}\n\nfunction mergeRanges(ranges: Array<[number, number]>): Array<[number, number]> {\n if (ranges.length < 2) return ranges;\n\n const sorted = [...ranges].sort(([aStart, aEnd], [bStart, bEnd]) => aStart - bStart || aEnd - bEnd);\n const merged: Array<[number, number]> = [sorted[0]];\n\n for (const [start, end] of sorted.slice(1)) {\n const last = merged[merged.length - 1];\n\n if (start <= last[1]) {\n last[1] = Math.max(last[1], end);\n } else {\n merged.push([start, end]);\n }\n }\n\n return merged;\n}\n\nconst SEARCH_QUERY_TOKEN = /\"([^\"]*)\"|(\\S+)/g;\n\n/**\n * Splits a raw query into tokens, treating whitespace as a separator and `\"quoted phrases\"` as\n * a single token (spaces inside the quotes are preserved). A `\"` with no matching closing quote\n * stays part of its token instead of being dropped, so a half-open quote yields a token no\n * realistic haystack contains — and therefore no results — until the quote is closed.\n */\nexport function tokenizeSearchQuery(query: string): string[] {\n if (typeof query !== 'string' || !query.trim()) return [];\n\n const tokens: string[] = [];\n\n for (const match of query.matchAll(SEARCH_QUERY_TOKEN)) {\n const token = match[1] ?? match[2];\n\n if (token) tokens.push(token);\n }\n\n return tokens;\n}\n\n/**\n * Builds a case- and diacritic-insensitive substring predicate for the given query. The query is\n * tokenized (bare words + `\"quoted phrases\"`) and every token must match (AND) against at least\n * one of the supplied haystacks (OR across fields) — pass a single string for a single-field\n * search, or an array for multi-field rows. An empty/whitespace-only query matches everything.\n */\nexport function createSearchPredicate(query: string): (value: string | readonly string[]) => boolean {\n const tokens = tokenizeSearchQuery(query)\n .map(normalizeSearchValue)\n .filter((token) => token.length > 0);\n\n if (!tokens.length) return () => true;\n\n return (value: string | readonly string[]): boolean => {\n const haystacks = (Array.isArray(value) ? value : [value]).map(normalizeSearchValue);\n\n return tokens.every((token) => haystacks.some((haystack) => haystack.includes(token)));\n };\n}\n","import { findSearchMatchRanges } from '../search/search-base';\n\nconst HTML_ESCAPES = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' } as const;\nconst HTML_SPECIAL_CHARS = /[&<>\"']/;\nconst HTML_SPECIAL_CHARS_GLOBAL = new RegExp(HTML_SPECIAL_CHARS.source, 'g');\n\n/** Escapes characters in the specified string that have special meaning in a regular expression. */\nexport function escapeRegExp(value: string): string {\n if (value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n return value;\n}\n\nfunction escapeHtml(value: string): string {\n if (!HTML_SPECIAL_CHARS.test(value)) return value;\n\n return value.replace(HTML_SPECIAL_CHARS_GLOBAL, (chr) => HTML_ESCAPES[chr] ?? chr);\n}\n\nfunction normalizeKeywords(keyword: unknown): string[] {\n const list = Array.isArray(keyword) ? keyword : [keyword];\n\n // Longest first, so a shorter keyword (e.g. \"a\") can't shadow a longer one that starts\n // with it (e.g. \"all\") within the same regex alternation.\n return list\n .filter((item): item is string => typeof item === 'string' && item.length > 0)\n .sort((a, b) => b.length - a.length);\n}\n\nfunction findLiteralMatchRanges(value: string, keywords: string[]): Array<[number, number]> {\n const pattern = new RegExp(keywords.map(escapeRegExp).join('|'), 'gi');\n const ranges: Array<[number, number]> = [];\n let match: RegExpExecArray | null = pattern.exec(value);\n\n while (match !== null) {\n ranges.push([match.index, match.index + match[0].length]);\n match = pattern.exec(value);\n }\n\n return ranges;\n}\n\n/**\n * `keyword` accepts either a single string or an array of strings — every keyword is\n * highlighted independently, which is what multi-token search queries need.\n *\n * By default, matching is literal (case-insensitive substring), same as a plain `.includes`. Pass\n * `foldDiacritics: true` when the keywords were matched with diacritic folding (e.g. via\n * {@link createSearchPredicate} from `@koobiq/components/core`) — otherwise a folded match like\n * `cafe` finding `Café` has nothing in the value for a literal highlighter to mark.\n *\n * @docs-private\n */\nexport function highlight(\n value: unknown,\n keyword: unknown,\n mark: (text: string) => string,\n foldDiacritics = false\n): string {\n if (typeof value !== 'string') return '';\n\n const keywords = normalizeKeywords(keyword);\n\n if (!keywords.length) return escapeHtml(value);\n\n const ranges = foldDiacritics ? findSearchMatchRanges(value, keywords) : findLiteralMatchRanges(value, keywords);\n\n if (!ranges.length) return escapeHtml(value);\n\n let result = '';\n let cursor = 0;\n\n for (const [start, end] of ranges) {\n result += escapeHtml(value.slice(cursor, start));\n result += mark(escapeHtml(value.slice(start, end)));\n cursor = end;\n }\n\n return result + escapeHtml(value.slice(cursor));\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { highlight } from './highlight-base';\n\n/** @internal */\nexport const kbqHighlightBackgroundMark = (text: string): string =>\n `<mark class=\"kbq-highlight-background\">${text}</mark>`;\n\n@Pipe({ name: 'kbqHighlightBackground' })\nexport class KbqHighlightBackgroundPipe implements PipeTransform {\n transform(value: unknown, keyword: unknown, foldDiacritics = false): string {\n return highlight(value, keyword, kbqHighlightBackgroundMark, foldDiacritics);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { highlight } from './highlight-base';\n\n/** @internal */\nexport const kbqHighlightMark = (text: string): string => `<mark class=\"kbq-highlight\">${text}</mark>`;\n\n/** @deprecated Use the `kbqHighlightBold` pipe (`KbqHighlightBoldPipe`). Will be removed in 22.0.0. */\n@Pipe({ name: 'mcHighlight' })\nexport class KbqHighlightPipe implements PipeTransform {\n transform(value: unknown, keyword: unknown, foldDiacritics = false): string {\n return highlight(value, keyword, kbqHighlightMark, foldDiacritics);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { highlight } from './highlight-base';\nimport { kbqHighlightMark } from './highlight.pipe';\n\n/** Wraps the matches of a search in a bold `<mark class=\"kbq-highlight\">`. */\n@Pipe({ name: 'kbqHighlightBold' })\nexport class KbqHighlightBoldPipe implements PipeTransform {\n /**\n * Returns `value` as HTML with every match of `keyword` marked, or `''` when `value` is not a string.\n * With `foldDiacritics`, a keyword matches regardless of diacritics: `creme` marks `Crème`.\n */\n transform(\n value: string | null | undefined,\n keyword: string | readonly string[] | null | undefined,\n foldDiacritics = false\n ): string {\n return highlight(value, keyword, kbqHighlightMark, foldDiacritics);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqHighlightBackgroundPipe } from './highlight-background.pipe';\nimport { KbqHighlightBoldPipe } from './highlight-bold.pipe';\nimport { KbqHighlightPipe } from './highlight.pipe';\n\n@NgModule({\n imports: [KbqHighlightPipe, KbqHighlightBoldPipe, KbqHighlightBackgroundPipe],\n exports: [KbqHighlightPipe, KbqHighlightBoldPipe, KbqHighlightBackgroundPipe]\n})\nexport class KbqHighlightModule {}\n\nexport * from './highlight-background.pipe';\nexport { escapeRegExp } from './highlight-base';\nexport * from './highlight-bold.pipe';\nexport * from './highlight.pipe';\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n InjectionToken,\n input,\n OnDestroy,\n OutputRef,\n ViewEncapsulation,\n WritableSignal\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ENTER, SPACE, TAB } from '../keycodes';\nimport { KBQ_A11Y_LOCALE_CONFIGURATION, KbqLocaleOverridesDirective } from '../locales';\nimport { kbqInjectNativeElement } from '../utils';\n\n/** Structural, so core doesn't depend on dropdown; nothing type-checks it against `KbqDropdownTrigger`. */\nexport interface KbqOptionActionParent {\n dropdownTrigger: {\n opened: boolean;\n restoreFocus: WritableSignal<boolean>;\n dropdownClosed: OutputRef<void>;\n lastDestroyReason: void | 'click' | 'keydown' | 'tab';\n openedBy: Exclude<FocusOrigin, 'program' | null> | undefined;\n toggle(): void;\n };\n focus(): void;\n}\n\nexport const KBQ_OPTION_ACTION_PARENT = new InjectionToken<KbqOptionActionParent>('KBQ_OPTION_ACTION_PARENT');\n\n@Component({\n selector: 'kbq-option-action',\n template: `\n <ng-content select=\"[kbq-icon]\">\n <i class=\"kbq kbq-icon kbq-contrast-fade kbq-ellipsis-vertical_16\"></i>\n </ng-content>\n `,\n styleUrls: ['./action.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-option-action',\n role: 'button',\n // The class reads `disabled` and the attributes a signal of their own (see `KbqOption`): the class binding\n // runs after `aria-label`, so reading `disabled` there as well would be a repeated read. The two attributes\n // run back to back, and a signal read twice in a row costs no scan.\n '[class.kbq-disabled]': 'disabled()',\n '[attr.disabled]': 'disabledAttribute()',\n '[attr.aria-disabled]': 'disabledAttribute()',\n '[attr.aria-label]': 'resolvedAriaLabel',\n '[attr.tabIndex]': '-1',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeyDown($event)'\n },\n hostDirectives: [\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ],\n exportAs: 'kbqOptionAction'\n})\nexport class KbqOptionActionComponent implements AfterViewInit, OnDestroy {\n private readonly nativeElement = kbqInjectNativeElement();\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly option = inject(KBQ_OPTION_ACTION_PARENT);\n private readonly a11yLocaleConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'a11y',\n KBQ_A11Y_LOCALE_CONFIGURATION\n );\n\n /**\n * Accessible name of the button. The rendered content is an icon, so without a name the button\n * is announced as unlabelled; defaults to the localized \"option actions\" text.\n */\n readonly ariaLabel = input<string>(undefined!, { alias: 'aria-label' });\n\n /**\n * Accessible name written to the host.\n *\n * The host is the very element the consumer writes, and a host binding runs after their own\n * `[attr.aria-label]` binding on that element — which never reaches the aliased input. Falling\n * straight through to the localized default would replace the specific name they set (\"Delete\n * file\") with the generic one, so a name already on the element outranks the default.\n *\n * @docs-private\n */\n protected get resolvedAriaLabel(): string {\n return (\n this.ariaLabel() ||\n this.nativeElement.getAttribute('aria-label') ||\n this.a11yLocaleConfiguration().optionActions\n );\n }\n\n /** Whether the action is disabled. */\n readonly disabled = input<boolean, boolean | string | null | undefined>(false, { transform: booleanAttribute });\n\n /**\n * Value of the `disabled` and `aria-disabled` attributes.\n *\n * @internal\n */\n protected readonly disabledAttribute = computed(() => this.disabled() || null);\n\n hasFocus: boolean = false;\n\n get active(): boolean {\n return this.hasFocus || !!this.option.dropdownTrigger?.opened;\n }\n\n private readonly destroyRef = inject(DestroyRef);\n\n ngAfterViewInit(): void {\n this.focusMonitor\n .monitor(this.nativeElement, true)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((result) => (this.hasFocus = !!result));\n\n if (!this.option.dropdownTrigger) return;\n\n this.option.dropdownTrigger.restoreFocus.set(false);\n\n outputToObservable(this.option.dropdownTrigger.dropdownClosed)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const lastDestroyReason = this.option.dropdownTrigger.lastDestroyReason;\n\n if (lastDestroyReason) {\n this.focus(lastDestroyReason === 'keydown' ? 'keyboard' : 'program');\n }\n });\n }\n\n ngOnDestroy(): void {\n this.focusMonitor.stopMonitoring(this.nativeElement);\n }\n\n focus(origin?: FocusOrigin, options?: FocusOptions) {\n if (this.focusMonitor && origin) {\n this.focusMonitor.focusVia(this.nativeElement, origin, options);\n } else {\n this.nativeElement.focus();\n }\n\n // The action lives inside `.kbq-action-container`, which is `display: none` until the option\n // is hovered or keyboard-focused. Focusing a hidden element is a no-op, so `hasFocus` has to\n // reflect what actually happened: assuming success would latch `kbq-action-button-focused`\n // on the option forever, since `FocusMonitor` never emits for an element that never got focus.\n this.hasFocus = this.nativeElement.ownerDocument.activeElement === this.nativeElement;\n }\n\n onClick($event) {\n $event.stopPropagation();\n }\n\n onKeyDown($event) {\n if ([SPACE, ENTER].includes($event.keyCode) && this.option.dropdownTrigger) {\n this.option.dropdownTrigger.openedBy = 'keyboard';\n } else if ($event.shiftKey && $event.keyCode === TAB) {\n this.hasFocus = false;\n\n this.option.focus();\n } else if ($event.keyCode === TAB) {\n return;\n }\n\n $event.preventDefault();\n $event.stopPropagation();\n }\n}\n\n/**\n * Moves focus from an option to its trailing action button on Tab.\n *\n * Shared by `KbqListOption` and `KbqTreeOption` so the two cannot drift apart. Tab is swallowed only\n * when focus actually landed: the action lives in a `display: none` container until the option is\n * hovered or keyboard-focused, and focusing a hidden element is a no-op, so suppressing Tab there\n * would trap focus on the option.\n */\nexport function kbqFocusOptionActionOnTab(\n $event: KeyboardEvent,\n actionButton: KbqOptionActionComponent | undefined\n): void {\n if (!actionButton || $event.keyCode !== TAB || $event.shiftKey || actionButton.hasFocus) {\n return;\n }\n\n actionButton.focus();\n\n if (actionButton.hasFocus) {\n $event.preventDefault();\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'kbq-action-container',\n template: `\n <div class=\"kbq-action-container__gradient\"></div>\n <div class=\"kbq-action-container__box\">\n <ng-content />\n </div>\n `,\n styleUrls: ['./action-container.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-action-container'\n },\n exportAs: 'kbqActionContainer'\n})\nexport class KbqActionContainer {}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\nlet uniqueOptgroupIdCounter = 0;\n\n/**\n * Component that is used to group instances of `kbq-option`.\n * When options aren't provided as `ng-content`, used as a Group Header with styling.\n */\n@Component({\n selector: 'kbq-optgroup',\n templateUrl: 'optgroup.html',\n styleUrls: ['./optgroup.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-optgroup',\n role: 'group',\n '[attr.aria-labelledby]': 'labelId',\n '[class.kbq-disabled]': 'disabled()'\n },\n exportAs: 'kbqOptgroup'\n})\nexport class KbqOptgroup {\n readonly label = input<string>(undefined!);\n\n /** Whether the group, and every option in it, is disabled. */\n readonly disabled = input<boolean, boolean | string | null | undefined>(false, { transform: booleanAttribute });\n\n /** Unique id for the underlying label. */\n labelId: string = `kbq-optgroup-label-${uniqueOptgroupIdCounter++}`;\n}\n","<!-- A `<label>` with nothing to label is not exposed as one; the host's `aria-labelledby` names the group. -->\n<span class=\"kbq-optgroup-label\" [id]=\"labelId\">\n {{ label() }}\n</span>\n<ng-content select=\"kbq-option, kbq-list-option, kbq-timezone-option, ng-container\" />\n","import { KbqEnumValues } from '../utils';\n\n// Declared locally rather than imported: `typeof ngDevMode` is the guard the build optimizer folds away,\n// so the warning below leaves no trace in a production bundle.\ndeclare const ngDevMode: boolean | undefined;\n\nexport enum MultipleMode {\n CHECKBOX = 'checkbox',\n KEYBOARD = 'keyboard'\n}\n\n/**\n * Values accepted by the `multiple` input of a selection list or tree.\n *\n * `KbqEnumValues` accepts a mode either as a {@link MultipleMode} member or as the plain string a static\n * attribute delivers, and follows the enum on its own. The remaining literals are the boolean spellings a\n * static attribute delivers: `''` is what a bare `multiple` resolves to, `'true'` and `'false'` are what\n * `multiple=\"true\"` and `multiple=\"false\"` deliver.\n *\n * Single selection is the default, so the way to ask for it is to leave the attribute off entirely.\n */\nexport type KbqMultipleInput = KbqEnumValues<MultipleMode> | 'true' | 'false' | '' | boolean | null | undefined;\n\n/** Every mode the enum declares, so adding one needs no change here. */\nconst modes: string[] = Object.values(MultipleMode);\n\n/** Spellings that mean the default multiple mode, alongside `true`. */\nconst checkboxAliases: string[] = ['', 'true'];\n\n/** Spellings that turn multiple selection off, alongside `false`, `null` and `undefined`. */\nconst singleAliases: string[] = ['false'];\n\n/**\n * Resolves the `multiple` input of a selection list or tree into a mode, or `null` for single selection.\n *\n * The set of modes is closed, so an unrecognized value falls back to single selection and is reported in dev\n * mode rather than read as multiple selection.\n */\nexport function resolveMultipleMode(value: KbqMultipleInput): MultipleMode | null {\n if (value === true) {\n return MultipleMode.CHECKBOX;\n }\n\n if (value === false || value == null) {\n return null;\n }\n\n if (modes.includes(value)) {\n return value as MultipleMode;\n }\n\n if (checkboxAliases.includes(value)) {\n return MultipleMode.CHECKBOX;\n }\n\n if (!singleAliases.includes(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n // eslint-disable-next-line no-console\n console.warn(\n `Unsupported \\`multiple\\` value ${JSON.stringify(value)}, falling back to single selection. ` +\n `Expected ${modes.map((mode) => `\"${mode}\"`).join(', ')}, an empty value or a boolean. ` +\n 'Omit the attribute for single selection.'\n );\n }\n\n return null;\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { KbqColorDirective } from '../../common-behaviors';\n\nexport type KbqPseudoCheckboxState = 'unchecked' | 'checked' | 'indeterminate' | boolean;\n\n/**\n * Component that shows a simplified checkbox without including any kind of \"real\" checkbox.\n * Meant to be used when the checkbox is purely decorative and a large number of them will be\n * included, such as for the options in a multi-select. Uses no SVGs or complex animations.\n *\n * Note that this component will be completely invisible to screen-reader users. This is *not*\n * interchangeable with `<kbq-checkbox>` and should *not* be used if the user would directly\n * interact with the checkbox. The pseudo-checkbox should only be used as an implementation detail\n * of more complex components that appropriately handle selected / checked state.\n *\n * @docs-private\n */\n@Component({\n selector: 'kbq-pseudo-checkbox',\n templateUrl: 'pseudo-checkbox.partial.html',\n styleUrls: ['pseudo-checkbox.scss', 'pseudo-checkbox-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'kbq-pseudo-checkbox',\n '[class.kbq-pseudo-checkbox_big]': 'big()',\n '[class.kbq-indeterminate]': 'state() === \"indeterminate\"',\n '[class.kbq-checked]': 'state() === true || state() === \"checked\"',\n '[class.kbq-disabled]': 'disabled()'\n },\n preserveWhitespaces: false\n})\nexport class KbqPseudoCheckbox extends KbqColorDirective {\n readonly big = input<boolean>(false);\n\n readonly state = input<KbqPseudoCheckboxState>('unchecked');\n\n readonly disabled = input<boolean>(false);\n}\n","<i class=\"kbq-checkbox-checkmark kbq kbq-check-s_16\"></i>\n<i class=\"kbq-checkbox-mixedmark kbq kbq-minus-s_16\"></i>\n","import { NgModule } from '@angular/core';\nimport { KbqPseudoCheckbox } from './pseudo-checkbox';\n\n@NgModule({\n imports: [KbqPseudoCheckbox],\n exports: [KbqPseudoCheckbox]\n})\nexport class KbqPseudoCheckboxModule {}\n","import { KbqPseudoCheckboxState } from './pseudo-checkbox/pseudo-checkbox';\n\n/**\n * Adapter describing how a component reads and writes selection state for a set of items,\n * so the shared select-all logic can operate regardless of how selection is stored\n * (per-option setter, `SelectionModel` on data nodes, etc.).\n */\nexport interface KbqSelectAllAdapter<T> {\n /** All candidate items, in render/model order. */\n items: readonly T[];\n /** Whether the item may participate (e.g. not disabled, and — for tree — `selectable()`). */\n isSelectable: (item: T) => boolean;\n /** Current selected state of the item. */\n isSelected: (item: T) => boolean;\n\n /**\n * Applies the new selected state to the item. Must be idempotent — a no-op, with no further side\n * effects (no emitted events, no notifications) — when `selected` already matches the item's current\n * state: {@link toggleSelectAll} calls this for every selectable item, not just the ones whose state\n * actually changes, and relies on implementations to absorb the redundant calls silently.\n */\n setSelected: (item: T, selected: boolean) => void;\n}\n\n/** Options for {@link toggleSelectAll}. */\nexport interface KbqToggleSelectAllOptions {\n /**\n * When `true`, a repeated toggle deselects everything once all selectable items are already\n * selected. When `false` (default), the toggle only ever selects.\n */\n allowDeselect?: boolean;\n}\n\n/**\n * Canonical \"select all / deselect all\" toggle shared by the multi-select components (`Ctrl`/`Cmd` + `A`).\n *\n * Considers only selectable items and selects them all. When `allowDeselect` is `true` and every selectable\n * item is already selected, deselects them all instead; otherwise a repeated call is a no-op. No-op when\n * there are no selectable items.\n *\n * @returns the items whose selected state actually flipped, in input order.\n */\nexport function toggleSelectAll<T>(adapter: KbqSelectAllAdapter<T>, options?: KbqToggleSelectAllOptions): T[] {\n const selectable = adapter.items.filter((item) => adapter.isSelectable(item));\n\n if (selectable.length === 0) {\n return [];\n }\n\n const shouldSelect = !options?.allowDeselect || selectable.some((item) => !adapter.isSelected(item));\n const changed = selectable.filter((item) => adapter.isSelected(item) !== shouldSelect);\n\n selectable.forEach((item) => adapter.setSelected(item, shouldSelect));\n\n return changed;\n}\n\n/**\n * State of a \"select all\" master checkbox over the same items {@link toggleSelectAll} would act on.\n *\n * Considers only selectable items, so items the toggle cannot reach (disabled, non-selectable) never\n * pin the checkbox to `indeterminate`. An empty selectable set reads as `unchecked`: there is nothing\n * to select, and `[].every()` being `true` would otherwise report a full selection.\n */\nexport function getSelectAllState<T>(adapter: KbqSelectAllAdapter<T>): KbqPseudoCheckboxState {\n const selectable = adapter.items.filter((item) => adapter.isSelectable(item));\n\n if (selectable.length === 0) {\n return 'unchecked';\n }\n\n const selected = selectable.filter((item) => adapter.isSelected(item)).length;\n\n if (selected === 0) {\n return 'unchecked';\n }\n\n return selected === selectable.length ? 'checked' : 'indeterminate';\n}\n\n/** Event emitted by the `onSelectAll` outputs when the select-all toggle runs. */\nexport class KbqSelectAllEvent<T, S = unknown> {\n constructor(\n /** Component that emitted the event. */\n public readonly source: S,\n /** The selectable options affected by the toggle. */\n public readonly options: T[],\n /** `true` when all options were selected, `false` when all were deselected. */\n public readonly selected: boolean\n ) {}\n}\n\n/**\n * Whether `Ctrl`/`Cmd` + `A` should select the text of a search `<input>` rather than toggle options.\n *\n * Returns `true` only when the input has text that is not already fully selected (nothing selected,\n * a partial selection, or just a caret). Returns `false` for an empty input (so select-all falls\n * straight through to the options) and when the whole value is already selected (a second press\n * then acts on the options).\n */\nexport function shouldSelectSearchText(input: HTMLInputElement | null | undefined): boolean {\n if (!input) {\n return false;\n }\n\n const length = input.value.length;\n\n if (length === 0) {\n return false;\n }\n\n return !(input.selectionStart === 0 && input.selectionEnd === length);\n}\n\n/**\n * Transform of a `selectAllHandler` input: takes a function or `undefined`, which leaves the component its own handler,\n * and throws on anything else, so that a wrong binding fails where it is made rather than on the first Ctrl/Cmd + A.\n *\n * @docs-private\n */\nexport function kbqSelectAllHandlerTransform<S>(\n handler: ((event: KeyboardEvent, source: S) => void) | undefined\n): ((event: KeyboardEvent, source: S) => void) | undefined {\n if (handler !== undefined && typeof handler !== 'function') {\n throw Error('`selectAllHandler` must be a function.');\n }\n\n return handler;\n}\n","import { ElementRef, InjectionToken } from '@angular/core';\n\nexport interface KbqTitleTextRef {\n textElement?: ElementRef;\n parentTextElement?: ElementRef;\n}\n\nexport const KBQ_TITLE_TEXT_REF = new InjectionToken<KbqTitleTextRef>('KbqTitleTextRef');\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n AfterViewChecked,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n input,\n OnDestroy,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { ActiveDescendantKeyManager } from '../a11y';\nimport { ENTER, hasModifierKey, SPACE } from '../keycodes';\nimport { KbqPseudoCheckboxModule } from '../selection';\nimport { KBQ_TITLE_TEXT_REF, KbqTitleTextRef } from '../title';\nimport { kbqFocusAndReveal, kbqGetElementHeight } from '../utils';\nimport { KbqOptgroup } from './optgroup';\n\n/**\n * Option IDs need to be unique across components, so this counter exists outside of\n * the component definition.\n */\nlet uniqueIdCounter = 0;\n\n/** Event object emitted by KbqOption when selected or deselected. */\nexport class KbqOptionSelectionChange<T = KbqOption> {\n constructor(\n public source: T,\n public isUserInput = false\n ) {}\n}\n\n/**\n * Describes a parent component that manages a list of options.\n * Contains properties that the options can inherit.\n *\n * @docs-private\n */\nexport interface KbqOptionParentComponent {\n multiple?: boolean;\n multiSelection?: boolean;\n withVirtualScroll?: boolean;\n keyManager?: ActiveDescendantKeyManager<KbqOption>;\n\n /**\n * Handles a Shift+click on `option`, e.g. by selecting the range up to it. Without it, the click selects the\n * option alone.\n */\n setSelectedOptionsByClick?(option: KbqOption): void;\n}\n\n/**\n * Handler that will update scroll position of elements inside overlay\n */\nexport interface KeyboardNavigationHandler {\n /** Scrolls the active option into view. */\n scrollActiveOptionIntoView(): void;\n}\n\n/**\n * Injection token used to provide the parent component to options.\n */\nexport const KBQ_OPTION_PARENT_COMPONENT = new InjectionToken<KbqOptionParentComponent>('KBQ_OPTION_PARENT_COMPONENT');\n\nexport abstract class KbqOptionBase {\n abstract get value(): any;\n abstract get viewValue(): string;\n abstract get disabled(): boolean;\n\n abstract readonly onSelectionChange: EventEmitter<KbqOptionSelectionChange<any>>;\n\n abstract select(): void;\n\n abstract deselect(): void;\n\n /** Emits the selection change event. */\n protected emitSelectionChangeEvent(isUserInput = false): void {\n this.onSelectionChange.emit(new KbqOptionSelectionChange(this, isUserInput));\n }\n}\n\nexport class KbqVirtualOption extends KbqOptionBase {\n get disabled() {\n return this._disabled;\n }\n set disabled(value: any) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n get selected(): boolean {\n return this._selected;\n }\n\n private _selected = false;\n\n get viewValue(): string {\n return this._viewValue ?? this.value;\n }\n\n readonly onSelectionChange = new EventEmitter<KbqOptionSelectionChange<KbqVirtualOption>>();\n\n constructor(\n public value: any,\n private _disabled: boolean = false,\n private readonly _viewValue?: string\n ) {\n super();\n }\n\n select(): void {\n if (!this._selected) {\n this._selected = true;\n\n this.emitSelectionChangeEvent();\n }\n }\n\n deselect(): void {\n if (this._selected) {\n this._selected = false;\n\n this.emitSelectionChangeEvent();\n }\n }\n}\n\n/**\n * Single option inside of a `<kbq-select>` element.\n */\n@Component({\n selector: 'kbq-option',\n imports: [\n KbqPseudoCheckboxModule\n ],\n templateUrl: 'option.html',\n /* Component inherits styles from `list`, so `list` variables are imported as the single source of truth. */\n styleUrls: ['option.scss', 'option-tokens.scss'],\n providers: [\n {\n provide: KBQ_TITLE_TEXT_REF,\n useExisting: KbqOption\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n // No signal is read by two of these bindings. Host bindings run in the reactive consumer of the declaring\n // view, shared by every option in it, and a signal that consumer reads again after others is found by a\n // scan of all it has read so far: a repeated read costs O(N²) per check across N options.\n '[attr.tabindex]': 'getTabIndex()',\n // Static rather than a host binding: a host binding is applied after the declaring view's own\n // attribute bindings, so it would silently overwrite an `[attr.role]` the consumer set on the\n // element. As an attribute it is only the default, and the consumer's binding still wins.\n role: 'option',\n '[attr.aria-selected]': 'getAriaSelected()',\n '[attr.aria-disabled]': 'ariaDisabled()',\n class: 'kbq-option',\n '[class.kbq-selected]': 'selected',\n '[class.kbq-option-multiple]': 'multiple',\n '[class.kbq-active]': 'active',\n '[class.kbq-disabled]': 'disabled',\n '[id]': 'id',\n\n '(click)': 'handleClick($event)',\n '(mouseenter)': 'onMouseenter()',\n '(mouseleave)': 'onMouseleave()',\n '(keydown)': 'handleKeydown($event)'\n },\n exportAs: 'kbqOption'\n})\nexport class KbqOption extends KbqOptionBase implements AfterViewChecked, OnDestroy, KbqTitleTextRef {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly parent = inject<KbqOptionParentComponent>(KBQ_OPTION_PARENT_COMPONENT, { optional: true });\n readonly group = inject(KbqOptgroup, { optional: true });\n\n private readonly titleText = viewChild<ElementRef<HTMLElement>>('kbqTitleText');\n\n /** Element holding the text of the option, measured by `kbq-title`. */\n get textElement(): ElementRef<HTMLElement> | undefined {\n return this.titleText();\n }\n\n /** @docs-private */\n readonly valueInput = input<any>(undefined, { alias: 'value' });\n\n /** The form value of the option. */\n get value(): any {\n return this.valueInput();\n }\n\n readonly selectable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n // todo this flag will need to be rethought in the future (added for filter panel)\n readonly userSelect = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** @docs-private */\n readonly showCheckboxInput = input<boolean | undefined, boolean | string | null | undefined>(undefined, {\n alias: 'showCheckbox',\n transform: booleanAttribute\n });\n\n /** Whether the option renders a checkbox. Follows the multiple selection mode of the parent until bound. */\n get showCheckbox(): boolean {\n return this.showCheckboxInput() ?? this.multiple;\n }\n\n /**\n * Event emitted when the option is selected or deselected. A stream rather than an `output()`: it keeps\n * emitting after the option is destroyed, because a select holds on to a selected option that its search or\n * virtual scroll removed.\n */\n readonly onSelectionChange = new EventEmitter<KbqOptionSelectionChange>();\n\n /** @docs-private */\n readonly selectionChangeOutput = outputFromObservable(this.onSelectionChange, { alias: 'onSelectionChange' });\n\n /** Emits when the state of the option changes and any parents have to be notified. */\n readonly stateChanges = new Subject<void>();\n\n /** @docs-private */\n readonly viewValueInput = input<string | undefined>(undefined, { alias: 'viewValue' });\n\n /**\n * The displayed value of the option. It is necessary to show the selected option in the\n * select's trigger. Falls back to the text of the option.\n */\n get viewValue(): string {\n return this.viewValueInput() || (this.getHostElement().textContent || '').trim();\n }\n\n /** Whether the wrapping component is in multiple selection mode. */\n get multiple(): boolean {\n return !!this.parent?.multiSelection;\n }\n\n get id(): string {\n return this._id;\n }\n\n private _id = `kbq-option-${uniqueIdCounter++}`;\n\n get selected(): boolean {\n return this.selectedState();\n }\n\n private readonly selectedState = signal(false);\n\n /** @docs-private */\n readonly disabledInput = input<boolean, boolean | string | null | undefined>(false, {\n alias: 'disabled',\n transform: booleanAttribute\n });\n\n /** Whether the option is disabled, through its own input or its group. */\n get disabled(): boolean {\n return this.disabledState();\n }\n\n // A signal per option for the host bindings, since the group's is the same for all its options.\n private readonly disabledState = computed(() => !!this.group?.disabled() || this.disabledInput());\n\n /**\n * Value of `aria-disabled`: the same as `disabled`, but a signal of its own, since `kbq-disabled` reads that one.\n *\n * @internal\n */\n protected readonly ariaDisabled = computed(() => this.disabled);\n\n private readonly tabIndex = computed(() => (this.disabled ? '-1' : '0'));\n\n // The selected state for `aria-selected`, apart from the one `kbq-selected` reads.\n private readonly ariaSelected = computed(() => this.selected);\n\n /**\n * Whether or not the option is currently active and ready to be selected.\n * An active option displays styles as if it is focused, but the\n * focus is actually retained somewhere else. This comes in handy\n * for components like autocomplete where focus must remain on the input.\n */\n get active(): boolean {\n return this.activeState();\n }\n\n private readonly activeState = signal(false);\n\n private mostRecentViewValue = '';\n\n /**\n * Whether the pointer is currently over this option. Cleared on `mouseleave` rather than when the\n * option is focused: hovering the option that is already active does not move the key manager's\n * index, so no focus follows and a flag cleared only there would stay armed indefinitely.\n */\n private hoveredByPointer = false;\n ngAfterViewChecked() {\n // Since parent components could be using the option's label to display the selected values\n // (e.g. `kbq-select`) and they don't have a way of knowing if the option's label has changed\n // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\n // relatively cheap, however we still limit them only to selected options in order to avoid\n // hitting the DOM too often.\n if (this.selected) {\n const viewValue = this.viewValue;\n\n if (viewValue !== this.mostRecentViewValue) {\n this.mostRecentViewValue = viewValue;\n this.stateChanges.next();\n }\n }\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n }\n\n /** @docs-private */\n getHeight(): number {\n return kbqGetElementHeight(this.elementRef.nativeElement);\n }\n\n select(emitEvent: boolean = true): void {\n // Untracked, as in `deselect()` and `selectViaInteraction()`: called from a consumer's `effect()`, the\n // selected state read on the way would make the effect run again whenever the user changes it.\n untracked(() => {\n if (!this.selected) {\n this.selectedState.set(true);\n\n if (emitEvent) this.emitSelectionChangeEvent();\n }\n });\n }\n\n deselect(emitEvent: boolean = true): void {\n untracked(() => {\n if (this.selected) {\n this.selectedState.set(false);\n\n if (emitEvent) this.emitSelectionChangeEvent();\n }\n });\n }\n\n /** Moves keyboard focus to this option and reveals it — see {@link kbqFocusAndReveal}. */\n focus(): void {\n kbqFocusAndReveal(this.getHostElement(), this.hoveredByPointer);\n }\n\n /**\n * This method sets display styles on the option to make it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setActiveStyles(): void {\n this.activeState.set(true);\n }\n\n /**\n * This method removes display styles on the option that made it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setInactiveStyles(): void {\n this.activeState.set(false);\n }\n\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel(): string {\n return this.viewValue;\n }\n\n /** @docs-private */\n handleClick(event: MouseEvent): void {\n if (hasModifierKey(event, 'shiftKey') && this.parent?.setSelectedOptionsByClick) {\n this.parent.setSelectedOptionsByClick(this);\n } else {\n this.selectViaInteraction();\n }\n }\n\n /** Ensures the option is selected when activated from the keyboard. */\n handleKeydown(event: KeyboardEvent): void {\n // Only claim the event when the option is actually going to react to it: a non-selectable\n // or disabled option has nothing to do with ENTER/SPACE, and swallowing the event anyway\n // would stop it from reaching an ancestor that might (e.g. a custom row built on top of a\n // non-selectable option, like a \"select all\" master checkbox).\n if ((event.keyCode === ENTER || event.keyCode === SPACE) && !this.disabled && this.selectable()) {\n this.selectViaInteraction();\n\n // Prevent the page from scrolling down and form submits.\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * Selects the option while indicating the selection came from the user. Used to\n * determine if the select's view -> model callback should be invoked.\n */\n selectViaInteraction(): void {\n untracked(() => {\n if (this.userSelect()) return;\n\n if (!this.disabled && this.selectable()) {\n this.selectedState.set(this.multiple ? !this.selected : true);\n\n this.emitSelectionChangeEvent(true);\n }\n });\n }\n\n getTabIndex(): string {\n return this.tabIndex();\n }\n\n /**\n * The selected state, but only while the element still carries the default `option` role.\n *\n * That role is a plain attribute so a consumer can replace it (see the host metadata above), and\n * `aria-selected` is not allowed on most of what they would replace it with — `role=\"checkbox\"`\n * takes `aria-checked` instead. Emitting it regardless is an `aria-allowed-attr` violation, so the\n * default selection semantics step aside together with the default role.\n */\n protected getAriaSelected(): boolean | null {\n return this.getHostElement().getAttribute('role') === 'option' ? this.ariaSelected() : null;\n }\n\n getHostElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n /** @docs-private */\n protected onMouseenter() {\n if (this.disabled) return;\n\n this.hoveredByPointer = true;\n\n this.parent?.keyManager?.setActiveItem(this);\n }\n\n /** @docs-private */\n protected onMouseleave() {\n this.hoveredByPointer = false;\n }\n}\n","@if (showCheckbox) {\n <ng-content select=\"kbq-pseudo-checkbox\">\n <!-- Decorative: the selection state is announced through the host's `aria-selected`. -->\n <kbq-pseudo-checkbox aria-hidden=\"true\" [disabled]=\"disabled\" [state]=\"selected ? 'checked' : 'unchecked'\" />\n </ng-content>\n}\n\n<span #kbqTitleText class=\"kbq-option-text\">\n <ng-content />\n</span>\n","import { NgModule } from '@angular/core';\nimport { KbqPseudoCheckbox } from '../selection';\nimport { KbqOptionActionComponent } from './action';\nimport { KbqOptgroup } from './optgroup';\nimport { KbqOption } from './option';\n\n@NgModule({\n imports: [KbqPseudoCheckbox, KbqOption, KbqOptgroup, KbqOptionActionComponent],\n exports: [KbqOption, KbqOptgroup, KbqOptionActionComponent]\n})\nexport class KbqOptionModule {}\n","import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport {\n afterNextRender,\n DestroyRef,\n Directive,\n inject,\n InjectionToken,\n input,\n numberAttribute,\n OnInit,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, Observable } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { kbqInjectNativeElement } from '../utils';\n\n/** Shadow visibility state — which of the two shadows should be rendered. */\nexport interface KbqOverflowShadowState {\n /** Whether the top (header) shadow should be visible — content is scrolled past the top. */\n top: boolean;\n /** Whether the bottom (footer) shadow should be visible — more content remains below the fold. */\n bottom: boolean;\n}\n\n/**\n * Source of scroll events and scroll metrics. Can be provided by a component that wraps\n * the scrollable element (e.g. `KbqScrollbar`) so that `KbqOverflowShadowContainer` does\n * not have to subscribe to the native `scroll` event directly.\n */\nexport interface KbqOverflowShadowSource {\n /** Emits whenever the wrapped element scrolls. */\n readonly onScroll: Observable<unknown>;\n /** The element whose `scrollTop`/`clientHeight`/`scrollHeight` drive the shadows, or `null` if not ready yet. */\n getScrollElement(): HTMLElement | null;\n}\n\n/**\n * DI token a scrollable wrapper component can provide to expose itself as the scroll source\n * for a co-located `KbqOverflowShadowContainer` (see `KbqScrollbar`).\n */\nexport const KBQ_OVERFLOW_SHADOW_SOURCE = new InjectionToken<KbqOverflowShadowSource>('KBQ_OVERFLOW_SHADOW_SOURCE');\n\n/**\n * Container directive that sits on the scrollable element. Listens for scroll events and\n * keeps the `overflow` signal up to date, which is then read by `KbqOverflowShadowTop` and\n * `KbqOverflowShadowBottom`.\n *\n * The scroll source is auto-detected: if `KBQ_OVERFLOW_SHADOW_SOURCE` is provided in the\n * host's DI, that source is used; otherwise the native `scroll` event on the host element\n * is observed.\n *\n * In addition to scroll events, the directive observes the scroll source's box-size changes\n * via CDK's `SharedResizeObserver` — this covers layout changes that happen without a scroll\n * and alter the viewport size (modal open/close animation, window resize, reflow that resizes\n * the element). Content that only grows `scrollHeight` without changing the element's box size\n * is not detected by the resize observer; call `checkOverflow()` manually for those cases.\n */\n@Directive({\n selector: '[kbqOverflowShadowContainer]',\n exportAs: 'kbqOverflowShadowContainer'\n})\nexport class KbqOverflowShadowContainer implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly hostElement = kbqInjectNativeElement();\n private readonly externalSource = inject(KBQ_OVERFLOW_SHADOW_SOURCE, { optional: true, self: true });\n private readonly sharedResizeObserver = inject(SharedResizeObserver);\n\n /** Optional debounce for scroll events, in milliseconds. Default is 0. */\n readonly debounce = input(0, { transform: numberAttribute });\n\n /** Current shadow state. Re-checked on every scroll event and resize; changes only when an edge does. */\n readonly overflow = signal<KbqOverflowShadowState>(\n { top: false, bottom: false },\n { equal: (a, b) => a.top === b.top && a.bottom === b.bottom }\n );\n\n constructor() {\n // In the read phase, so that containers rendered together measure in one layout rather than one each.\n afterNextRender({\n read: () => {\n this.checkOverflow();\n this.observeResize();\n }\n });\n }\n\n ngOnInit(): void {\n const source$ = this.externalSource\n ? this.externalSource.onScroll\n : fromEvent(this.hostElement, 'scroll', { passive: true });\n\n const stream$ = this.debounce() > 0 ? source$.pipe(debounceTime(this.debounce())) : source$;\n\n stream$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.checkOverflow());\n }\n\n /**\n * Force-rechecks overflow and updates the signal. Calling this manually is normally not\n * necessary — scroll events plus `SharedResizeObserver` cover the standard scenarios. Kept\n * for rare cases when external code knows about a layout change more precisely than the\n * browser observers (e.g. content that only grows `scrollHeight`).\n */\n checkOverflow(): void {\n const source = this.getScrollSource();\n\n if (!source) return;\n\n // `clientHeight` (content-box) is the visible scroll-viewport height. `Math.round` on the\n // bottom comparison absorbs sub-pixel scroll metrics (HiDPI / browser zoom) so the bottom\n // shadow reliably clears at the very bottom instead of lingering on a fractional gap.\n const { scrollTop, clientHeight, scrollHeight } = source;\n\n this.overflow.set({\n top: scrollTop > 0,\n bottom: Math.round(scrollTop + clientHeight) < scrollHeight\n });\n }\n\n private getScrollSource(): HTMLElement | null {\n return this.externalSource ? this.externalSource.getScrollElement() : this.hostElement;\n }\n\n private observeResize(): void {\n const source = this.getScrollSource();\n\n if (!source) return;\n\n this.sharedResizeObserver\n .observe(source)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.checkOverflow());\n }\n}\n\n/**\n * Marker directive for the top-shadow indicator. Linked to the container directive via a\n * template ref: `<header [kbqOverflowShadowTop]=\"containerRef\">`.\n *\n * Sets an inline `box-shadow` on the host element using the value from the `shadow` input\n * (the Koobiq token by default). Consumers can override the shadow from the outside by\n * overriding the token `--kbq-shadow-overflow-normal-bottom` (or whichever token is passed\n * via the `shadow` input) in the relevant cascade scope.\n */\n@Directive({\n selector: '[kbqOverflowShadowTop]',\n host: {\n '[style.box-shadow]': 'ref()?.overflow()?.top ? shadow() : null'\n },\n exportAs: 'kbqOverflowShadowTop'\n})\nexport class KbqOverflowShadowTop {\n /**\n * Reference to the container directive. May be `undefined` if the container has not\n * been rendered yet (e.g. the indicator lives in one `@if` block and the container in\n * another).\n */\n readonly ref = input<KbqOverflowShadowContainer | undefined>(undefined, { alias: 'kbqOverflowShadowTop' });\n\n /** Value of `box-shadow` when the shadow is active. Defaults to the standard Koobiq token. */\n readonly shadow = input<string>('var(--kbq-shadow-overflow-normal-bottom)');\n}\n\n/**\n * Marker directive for the bottom-shadow indicator. Linked to the container directive via a\n * template ref: `<footer [kbqOverflowShadowBottom]=\"containerRef\">`.\n *\n * Sets an inline `box-shadow` on the host element. See {@link KbqOverflowShadowTop}.\n */\n@Directive({\n selector: '[kbqOverflowShadowBottom]',\n host: {\n '[style.box-shadow]': 'ref()?.overflow()?.bottom ? shadow() : null'\n },\n exportAs: 'kbqOverflowShadowBottom'\n})\nexport class KbqOverflowShadowBottom {\n /** Reference to the container directive. See {@link KbqOverflowShadowTop.ref}. */\n readonly ref = input<KbqOverflowShadowContainer | undefined>(undefined, { alias: 'kbqOverflowShadowBottom' });\n\n /** Value of `box-shadow` when the shadow is active. Defaults to the standard Koobiq token. */\n readonly shadow = input<string>('var(--kbq-shadow-overflow-normal-top)');\n}\n","import { CdkScrollable, OverlayRef } from '@angular/cdk/overlay';\n\n/** @docs-private */\nexport function isScrollFromInsideOverlay(overlayRef: OverlayRef, scrollable: CdkScrollable | void): boolean {\n return !!scrollable && overlayRef.overlayElement.contains(scrollable.getElementRef().nativeElement);\n}\n","import {\n CdkScrollable,\n FlexibleConnectedPositionStrategy,\n FlexibleConnectedPositionStrategyOrigin,\n OverlayRef,\n ScrollDispatcher,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ElementRef, isDevMode, NgZone } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { isScrollFromInsideOverlay } from './scroll-strategy-utils';\n\n/** Configuration options for `KbqAutoHideScrollStrategy`. */\nexport interface KbqAutoHideScrollStrategyConfig {\n /**\n * Element whose position is tracked against ancestor scroll container boundaries.\n * When omitted, the overlay panel is checked against the viewport instead.\n */\n originElement?: HTMLElement;\n /** Scroll event throttle in ms. Defaults to 20. */\n scrollThrottle?: number;\n}\n\n/** Lifecycle hooks for `KbqAutoHideScrollStrategy`, passed via `kbqAutoHideScrollStrategyFactory`. */\nexport interface KbqAutoHideScrollStrategyHooks {\n /** Called (inside Angular zone) when the tracked element scrolls outside its scroll container boundary. */\n onHide?: () => void;\n}\n\n/**\n * Scroll strategy that repositions the overlay on scroll and reports when the tracked element\n * moves outside its boundary:\n *\n * - With `originElement`: tracks the origin against each ancestor `CdkScrollable` container.\n * - Without `originElement`: tracks the overlay panel against the viewport.\n *\n * Two ways to react to the out-of-bounds event, usable independently or together:\n * - Subscribe to `hide` — a handle for callers that don't control how this strategy is\n * constructed (e.g. reaching into an existing component's `overlayRef.getConfig().scrollStrategy`\n * from the outside).\n * - Pass `onHide` via the factory returned by `kbqAutoHideScrollStrategyFactory` — for callers\n * that construct the strategy themselves.\n */\nexport class KbqAutoHideScrollStrategy implements ScrollStrategy {\n private readonly hideSubject = new Subject<void>();\n\n /** Emits once when the tracked element scrolls outside its boundary. */\n readonly hide: Observable<void> = this.hideSubject.asObservable();\n\n private overlayRef: OverlayRef | null = null;\n private scrollSubscription: Subscription | null = null;\n private originElement: HTMLElement | null = null;\n private ancestorScrollContainers: readonly CdkScrollable[] | null = null;\n\n constructor(\n private readonly scrollDispatcher: ScrollDispatcher,\n private readonly viewportRuler: ViewportRuler,\n private readonly ngZone: NgZone,\n private readonly config: KbqAutoHideScrollStrategyConfig = {},\n private hooks?: KbqAutoHideScrollStrategyHooks\n ) {}\n\n /** @docs-private */\n attach(overlayRef: OverlayRef): void {\n if (this.overlayRef && isDevMode()) {\n throw new Error('KbqAutoHideScrollStrategy: attach() has already been called for this instance.');\n }\n\n this.overlayRef = overlayRef;\n }\n\n /** Subscribes to scroll events and starts repositioning / out-of-bounds detection. */\n enable(): void {\n if (this.scrollSubscription) return;\n\n if (!this.overlayRef) {\n throw new Error('KbqAutoHideScrollStrategy: enable() was called before attach(). Call attach() first.');\n }\n\n const overlayRef = this.overlayRef;\n const { scrollThrottle = 20 } = this.config;\n\n this.originElement = this.config.originElement ?? this.resolveOriginElement(overlayRef);\n this.ancestorScrollContainers = this.originElement\n ? this.scrollDispatcher.getAncestorScrollContainers(this.originElement)\n : null;\n\n this.scrollSubscription = this.scrollDispatcher\n .scrolled(scrollThrottle)\n .pipe(filter((scrollable) => !isScrollFromInsideOverlay(overlayRef, scrollable)))\n .subscribe(() => {\n const isOutside = this.originElement\n ? this.isOriginOutsideAncestors(this.originElement)\n : this.isOverlayOutsideViewport(overlayRef);\n\n if (isOutside) {\n this.disable();\n this.ngZone.run(() => {\n this.hideSubject.next();\n this.hooks?.onHide?.();\n });\n\n return;\n }\n\n overlayRef.updatePosition();\n });\n }\n\n /** Unsubscribes from scroll events. */\n disable(): void {\n this.scrollSubscription?.unsubscribe();\n this.scrollSubscription = null;\n }\n\n /** Disables the strategy and completes `hide`. */\n detach(): void {\n this.disable();\n this.hideSubject.complete();\n this.hooks = undefined;\n this.overlayRef = null;\n this.originElement = null;\n this.ancestorScrollContainers = null;\n }\n\n private resolveOriginElement(overlayRef: OverlayRef): HTMLElement | null {\n const positionStrategy = overlayRef.getConfig().positionStrategy;\n\n if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {\n return this.coerceOriginElement(positionStrategy._origin);\n }\n\n return null;\n }\n\n private isOriginOutsideAncestors(originElement: HTMLElement): boolean {\n const originRect = originElement.getBoundingClientRect();\n\n return (this.ancestorScrollContainers ?? []).some((scrollable) =>\n this.isOutsideBounds(originRect, scrollable.getElementRef().nativeElement.getBoundingClientRect())\n );\n }\n\n private isOverlayOutsideViewport(overlayRef: OverlayRef): boolean {\n const overlayRect = overlayRef.overlayElement.getBoundingClientRect();\n const { width, height } = this.viewportRuler.getViewportSize();\n\n return this.isOutsideBounds(overlayRect, { top: 0, left: 0, bottom: height, right: width } as DOMRect);\n }\n\n private isOutsideBounds(\n rect: DOMRect,\n containerRect: DOMRect | Pick<DOMRect, 'top' | 'bottom' | 'left' | 'right'>\n ): boolean {\n return (\n rect.bottom < containerRect.top ||\n rect.top > containerRect.bottom ||\n rect.right < containerRect.left ||\n rect.left > containerRect.right\n );\n }\n\n private coerceOriginElement(raw?: FlexibleConnectedPositionStrategyOrigin): HTMLElement | null {\n if (raw instanceof HTMLElement) {\n return raw;\n } else if (raw instanceof ElementRef && raw.nativeElement instanceof HTMLElement) {\n return raw.nativeElement;\n }\n\n return null;\n }\n}\n\n/**\n * Factory function for `KbqAutoHideScrollStrategy`. Use it directly as a `useFactory` value\n * when providing a component-level scroll strategy token (e.g. `KBQ_POPOVER_SCROLL_STRATEGY`).\n *\n * The returned function accepts an optional `hooks` object (see `KbqAutoHideScrollStrategyHooks`)\n * and an optional `config` (see `KbqAutoHideScrollStrategyConfig`).\n *\n * @example\n * ```ts\n * const createScrollStrategy = kbqAutoHideScrollStrategyFactory(scrollDispatcher, viewportRuler, ngZone);\n * const strategy = createScrollStrategy({ onHide: () => this.hide() }, { originElement });\n * ```\n */\nexport function kbqAutoHideScrollStrategyFactory(\n scrollDispatcher: ScrollDispatcher,\n viewportRuler: ViewportRuler,\n ngZone: NgZone\n): (hooks?: KbqAutoHideScrollStrategyHooks, config?: KbqAutoHideScrollStrategyConfig) => KbqAutoHideScrollStrategy {\n return (hooks?, config?) =>\n new KbqAutoHideScrollStrategy(scrollDispatcher, viewportRuler, ngZone, config ?? {}, hooks);\n}\n","import { OverlayContainer, OverlayRef } from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { Directive, inject, Injectable, InjectionToken, OnDestroy } from '@angular/core';\nimport { kbqInjectNativeElement } from '../utils';\n\nconst overlayLayerClass = 'kbq-overlay-layer';\nconst overlayLayerExcludeClass = 'kbq-overlay-layer-exclude';\nconst overlayPopoverClass = 'cdk-overlay-popover';\n\n/** Element an overlay is anchored to, or a getter read again on every attach of the overlay. */\nexport type KbqOverlayLayerOrigin = Element | (() => Element | null | undefined);\n\n/** Places overlays into the layer of the {@link KbqOverlayLayer} element their origin is in. */\nexport interface KbqOverlayLayers {\n /**\n * Moves the overlay into the layer of the innermost `kbqOverlayLayer` element that contains `origin` and keeps it\n * there on every attach. An overlay whose origin is outside every such element stays in the application-wide\n * overlay container.\n */\n adopt(overlayRef: OverlayRef, origin: KbqOverlayLayerOrigin): void;\n}\n\n@Injectable({ providedIn: 'root' })\nclass KbqOverlayLayerRegistry implements KbqOverlayLayers {\n private readonly overlayContainer = inject(OverlayContainer);\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = inject(Platform).isBrowser;\n private readonly layers = new Set<KbqOverlayLayer>();\n private readonly adopted = new WeakSet<OverlayRef>();\n\n adopt(overlayRef: OverlayRef, origin: KbqOverlayLayerOrigin): void {\n if (!this.isBrowser || this.adopted.has(overlayRef)) {\n return;\n }\n\n this.adopted.add(overlayRef);\n\n const resolveOrigin = typeof origin === 'function' ? origin : () => origin;\n\n this.place(overlayRef, resolveOrigin());\n // Completes when the overlay is disposed.\n overlayRef.attachments().subscribe(() => this.place(overlayRef, resolveOrigin()));\n }\n\n register(layer: KbqOverlayLayer): void {\n this.layers.add(layer);\n }\n\n unregister(layer: KbqOverlayLayer): void {\n this.layers.delete(layer);\n }\n\n private place(overlayRef: OverlayRef, origin: Element | null | undefined): void {\n const host = overlayRef.hostElement;\n const parent = host?.parentElement;\n\n if (!parent) {\n return;\n }\n\n const isInLayer = parent.classList.contains(overlayLayerClass);\n\n if (!isInLayer && !this.layers.size) {\n return;\n }\n\n const root = this.overlayContainer.getContainerElement();\n\n // A host that another `OverlayContainer` resolved through a node injector is not ours to move.\n if (!isInLayer && parent !== root) {\n return;\n }\n\n const target = this.findLayer(origin)?.getContainerElement() ?? root;\n\n if (target === parent) {\n // `usePopover` stays on in the config, so CDK prepends the backdrop of every attach into the host.\n if (isInLayer) {\n this.setInTopLayer(overlayRef, false);\n }\n\n return;\n }\n\n const backdrop = overlayRef.backdropElement;\n\n // CDK keeps the backdrop right before its host.\n if (backdrop?.parentElement === parent) {\n target.appendChild(backdrop);\n }\n\n target.appendChild(host);\n this.setInTopLayer(overlayRef, target === root);\n }\n\n /**\n * CDK shows an overlay host as a popover, in the top layer above the whole page, where the `z-index` of a layer\n * does not reach it. A host moved into a layer leaves the top layer and is laid out as without popovers, its\n * backdrop before it; one moved back to the application-wide container returns to the top layer.\n */\n private setInTopLayer(overlayRef: OverlayRef, inTopLayer: boolean): void {\n if (!overlayRef.getConfig().usePopover) {\n return;\n }\n\n const host = overlayRef.hostElement;\n const backdrop = overlayRef.backdropElement;\n\n if (inTopLayer) {\n host.setAttribute('popover', 'manual');\n host.classList.add(overlayPopoverClass);\n\n if (backdrop?.nextElementSibling === host) {\n host.prepend(backdrop);\n }\n\n if (overlayRef.hasAttached()) {\n host.showPopover();\n }\n\n return;\n }\n\n if (host.hasAttribute('popover')) {\n host.hidePopover();\n }\n\n host.removeAttribute('popover');\n host.classList.remove(overlayPopoverClass);\n\n if (backdrop?.parentElement === host) {\n host.before(backdrop);\n }\n }\n\n private findLayer(origin: Element | null | undefined): KbqOverlayLayer | null {\n if (!origin) {\n return null;\n }\n\n const overlayAncestor = origin.closest('.cdk-overlay-container');\n const excludedAncestor = origin.closest(`.${overlayLayerExcludeClass}`);\n const fullscreenElement = this.document.fullscreenElement;\n let match: KbqOverlayLayer | null = null;\n\n for (const layer of this.layers) {\n const { host } = layer;\n\n if (!host.contains(origin)) {\n continue;\n }\n\n // Opened from page chrome inside the host: stays above that chrome.\n if (excludedAncestor && host.contains(excludedAncestor)) {\n continue;\n }\n\n // Opened from an overlay that a scoped container renders inside the host: stays above that overlay.\n if (\n overlayAncestor &&\n !overlayAncestor.classList.contains(overlayLayerClass) &&\n host.contains(overlayAncestor)\n ) {\n continue;\n }\n\n // The layer would render outside the fullscreen element, so the panel would not be visible.\n if (fullscreenElement && !fullscreenElement.contains(host)) {\n continue;\n }\n\n if (!match || match.host.contains(host)) {\n match = layer;\n }\n }\n\n return match;\n }\n}\n\n/** Places overlays into the layer of the {@link KbqOverlayLayer} element their origin is in. */\nexport const KBQ_OVERLAY_LAYERS = new InjectionToken<KbqOverlayLayers>('KBQ_OVERLAY_LAYERS', {\n providedIn: 'root',\n factory: () => inject(KbqOverlayLayerRegistry)\n});\n\n/**\n * Renders the panels opened from inside the element into an overlay layer of its own, beneath a sticky `kbq-top-bar`\n * or `kbq-navbar`, so they slide under the bar while the content scrolls.\n *\n * Covers the panels of select, tree-select, timezone select, dropdown, popover, autocomplete, datepicker and inline\n * edit. Modals, sidepanels, toasts, tooltips and the panels opened from outside the element or from a\n * {@link KbqOverlayLayerExclude} element inside it, such as the bars, stay in the application-wide overlay container\n * above the bars. The layer's `z-index` is `--kbq-overlay-layer-z-index` (`980`).\n */\n@Directive({\n selector: '[kbqOverlayLayer]'\n})\nexport class KbqOverlayLayer implements OnDestroy {\n private readonly registry = inject(KbqOverlayLayerRegistry);\n private readonly document = inject(DOCUMENT);\n private container: HTMLElement | null = null;\n\n /** @internal */\n readonly host = kbqInjectNativeElement();\n\n constructor() {\n this.registry.register(this);\n }\n\n ngOnDestroy(): void {\n this.registry.unregister(this);\n this.container?.remove();\n this.container = null;\n }\n\n /**\n * Created with the first panel, so an element that never opens one is left untouched. Lives inside the host to\n * share its stacking context with a bar rendered in the same scrolling viewport.\n *\n * @internal\n */\n getContainerElement(): HTMLElement {\n if (!this.container) {\n this.container = this.document.createElement('div');\n this.container.classList.add('cdk-overlay-container', overlayLayerClass);\n this.host.appendChild(this.container);\n }\n\n return this.container;\n }\n}\n\n/**\n * Keeps the panels opened from inside the element in the application-wide overlay container, even within a\n * {@link KbqOverlayLayer} element, so they stay above page chrome they overlap. `kbq-top-bar`, `kbq-navbar` and\n * `kbq-vertical-navbar` apply it themselves.\n */\n@Directive({\n selector: '[kbqOverlayLayerExclude]',\n host: {\n class: overlayLayerExcludeClass\n }\n})\nexport class KbqOverlayLayerExclude {}\n","import { CdkOverlayOrigin, FlexibleConnectedPositionStrategyOrigin } from '@angular/cdk/overlay';\nimport { ElementRef } from '@angular/core';\nimport { KbqCaretRect } from '../form-field/caret-rect';\n\n/**\n * Anything a connected overlay can be anchored to: an element, or a rectangle in viewport coordinates such as\n * the caret rectangle {@link kbqGetCaretRect} measures.\n */\nexport type KbqOverlayOrigin = ElementRef<HTMLElement> | HTMLElement | CdkOverlayOrigin | KbqCaretRect;\n\n/** Whether the origin is an element with a box of its own, rather than a rectangle in viewport coordinates. */\nexport const kbqIsElementOrigin = (origin: KbqOverlayOrigin): boolean =>\n origin instanceof CdkOverlayOrigin ||\n !!(origin as ElementRef<HTMLElement>).nativeElement ||\n 'getBoundingClientRect' in origin;\n\n/** Resolves a Koobiq origin into the value a connected position strategy accepts. */\nexport const kbqResolveOverlayOrigin = (origin: KbqOverlayOrigin): FlexibleConnectedPositionStrategyOrigin =>\n origin instanceof CdkOverlayOrigin ? origin.elementRef : origin;\n\n/** Size of an overlay origin, for the offsets that keep an arrow pointing at an anchor narrower than itself. */\nexport const kbqGetOverlayOriginSize = (origin: KbqOverlayOrigin): Pick<KbqCaretRect, 'width' | 'height'> => {\n const resolved = kbqResolveOverlayOrigin(origin);\n const element = (resolved as ElementRef<HTMLElement>).nativeElement ?? (resolved as HTMLElement | KbqCaretRect);\n\n // Duck typing rather than `instanceof Element`, which is not defined on the server.\n if ('getBoundingClientRect' in element) return element.getBoundingClientRect();\n\n const { width, height } = element;\n\n return { width, height };\n};\n","import { ConnectionPositionPair, Overlay, ScrollStrategy } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\n/** @internal */\nexport const POSITION_MAP: { [key: string]: ConnectionPositionPair } = {\n top: {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom'\n },\n topCenter: {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom'\n },\n topLeft: {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n },\n topRight: {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n },\n right: {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center'\n },\n rightTop: {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top'\n },\n rightBottom: {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom'\n },\n bottom: {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top'\n },\n bottomCenter: {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top'\n },\n bottomLeft: {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n bottomRight: {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n },\n left: {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center'\n },\n leftTop: {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top'\n },\n leftBottom: {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom'\n }\n};\n\n/** @internal */\nexport const EXTENDED_OVERLAY_POSITIONS = [\n POSITION_MAP.top,\n POSITION_MAP.topLeft,\n POSITION_MAP.topRight,\n POSITION_MAP.right,\n POSITION_MAP.rightTop,\n POSITION_MAP.rightBottom,\n POSITION_MAP.bottom,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.bottomRight,\n POSITION_MAP.left,\n POSITION_MAP.leftTop,\n POSITION_MAP.leftBottom\n];\n\nconst TOP_POSITION_PRIORITY = [\n POSITION_MAP.top,\n POSITION_MAP.bottom,\n POSITION_MAP.right,\n POSITION_MAP.rightBottom,\n POSITION_MAP.leftBottom,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.bottomRight\n];\n\nconst BOTTOM_POSITION_PRIORITY = [\n POSITION_MAP.bottom,\n POSITION_MAP.top,\n POSITION_MAP.topLeft,\n POSITION_MAP.topRight,\n POSITION_MAP.rightBottom,\n POSITION_MAP.leftBottom\n];\n\nconst RIGHT_POSITION_PRIORITY = [\n POSITION_MAP.right,\n POSITION_MAP.left,\n POSITION_MAP.leftTop,\n POSITION_MAP.leftBottom,\n POSITION_MAP.top,\n POSITION_MAP.bottom\n];\n\nconst LEFT_POSITION_PRIORITY = [\n POSITION_MAP.left,\n POSITION_MAP.right,\n POSITION_MAP.rightTop,\n POSITION_MAP.rightBottom,\n POSITION_MAP.top,\n POSITION_MAP.bottom\n];\n\nconst RIGHT_TOP_POSITION_PRIORITY = [\n POSITION_MAP.rightTop,\n POSITION_MAP.leftTop,\n POSITION_MAP.left,\n POSITION_MAP.leftBottom,\n POSITION_MAP.topLeft,\n POSITION_MAP.bottomLeft\n];\n\nconst RIGHT_BOTTOM_POSITION_PRIORITY = [\n POSITION_MAP.rightBottom,\n POSITION_MAP.leftBottom,\n POSITION_MAP.left,\n POSITION_MAP.leftTop,\n POSITION_MAP.topLeft,\n POSITION_MAP.bottomLeft\n];\n\nconst LEFT_TOP_POSITION_PRIORITY = [\n POSITION_MAP.leftTop,\n POSITION_MAP.rightTop,\n POSITION_MAP.right,\n POSITION_MAP.rightBottom,\n POSITION_MAP.topRight,\n POSITION_MAP.bottomRight\n];\n\nconst LEFT_BOTTOM_POSITION_PRIORITY = [\n POSITION_MAP.leftBottom,\n POSITION_MAP.rightBottom,\n POSITION_MAP.right,\n POSITION_MAP.rightTop,\n POSITION_MAP.topRight,\n POSITION_MAP.bottomRight\n];\n\nconst TOP_LEFT_POSITION_PRIORITY = [\n POSITION_MAP.topLeft,\n POSITION_MAP.topRight,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.bottom,\n POSITION_MAP.bottomRight,\n POSITION_MAP.leftBottom,\n POSITION_MAP.rightBottom\n];\n\nconst TOP_RIGHT_POSITION_PRIORITY = [\n POSITION_MAP.topRight,\n POSITION_MAP.topLeft,\n POSITION_MAP.bottomRight,\n POSITION_MAP.bottom,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.leftBottom,\n POSITION_MAP.rightBottom\n];\n\nconst BOTTOM_RIGHT_POSITION_PRIORITY = [\n POSITION_MAP.bottomRight,\n POSITION_MAP.bottomLeft,\n POSITION_MAP.topRight,\n POSITION_MAP.top,\n POSITION_MAP.topLeft,\n POSITION_MAP.leftTop,\n POSITION_MAP.rightTop\n];\n\nconst BOTTOM_LEFT_POSITION_PRIORITY = [\n POSITION_MAP.bottomLeft,\n POSITION_MAP.bottomRight,\n POSITION_MAP.topLeft,\n POSITION_MAP.top,\n POSITION_MAP.topRight,\n POSITION_MAP.rightTop,\n POSITION_MAP.leftTop\n];\n\n/** @internal */\nexport const POSITION_PRIORITY_STRATEGY = {\n top: TOP_POSITION_PRIORITY,\n topLeft: TOP_LEFT_POSITION_PRIORITY,\n topRight: TOP_RIGHT_POSITION_PRIORITY,\n bottom: BOTTOM_POSITION_PRIORITY,\n bottomLeft: BOTTOM_LEFT_POSITION_PRIORITY,\n bottomRight: BOTTOM_RIGHT_POSITION_PRIORITY,\n left: LEFT_POSITION_PRIORITY,\n leftTop: LEFT_TOP_POSITION_PRIORITY,\n leftBottom: LEFT_BOTTOM_POSITION_PRIORITY,\n right: RIGHT_POSITION_PRIORITY,\n rightTop: RIGHT_TOP_POSITION_PRIORITY,\n rightBottom: RIGHT_BOTTOM_POSITION_PRIORITY\n};\n\nexport const POSITION_TO_CSS_MAP: { [key: string]: string } = {\n top: 'top',\n topLeft: 'top-left',\n topRight: 'top-right',\n right: 'right',\n rightTop: 'right-top',\n rightBottom: 'right-bottom',\n left: 'left',\n leftTop: 'left-top',\n leftBottom: 'left-bottom',\n bottom: 'bottom',\n bottomLeft: 'bottom-left',\n bottomRight: 'bottom-right'\n};\n\nexport const KBQ_CUSTOM_SCROLL_STRATEGY_PROVIDER = <T>(\n token: InjectionToken<T>,\n factory: (overlay: Overlay) => () => ScrollStrategy\n) => ({\n provide: token,\n deps: [Overlay],\n useFactory: factory\n});\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\n\n/**\n * Maximum height of an overlay panel's scrollable content, in pixels. `null` falls back to the\n * `--kbq-select-panel-size-max-height` design token.\n *\n * The cap covers the scrollable list only — a search field or a footer rendered beside it adds to the\n * panel's total height. With a `cdk-virtual-scroll-viewport` the value is an exact height rather than a\n * cap, because the viewport pins both its `min-height` and its `max-height` to the token.\n */\nexport type KbqPanelMaxHeight = number | null;\n\n/**\n * Renders `panelMaxHeight` as a CSS length for the `--kbq-select-panel-size-max-height` token.\n *\n * A non-finite value yields `null` so that Angular removes the inline custom property and the stylesheet\n * default applies again. A negative value is clamped to `0` because `max-height` rejects negative lengths\n * at computed-value time, which would drop the declaration and leave the list unbounded rather than at\n * its default height.\n *\n * @docs-private\n */\nexport function kbqResolvePanelMaxHeightToken(panelMaxHeight: KbqPanelMaxHeight | undefined): string | null {\n // `numberAttribute` coerces `null` and other invalid bindings to `NaN`, so guard on finiteness\n // rather than on `null`, which never reaches us from a template binding.\n return Number.isFinite(panelMaxHeight) ? coerceCssPixelValue(Math.max(panelMaxHeight as number, 0)) : null;\n}\n\n/**\n * Default cap of an overlay panel's scrollable content, in pixels. Mirrors the stylesheet default of\n * `--kbq-select-panel-size-max-height` so that the two cannot drift apart.\n *\n * @docs-private\n */\nexport const KBQ_PANEL_DEFAULT_MAX_HEIGHT = 256;\n\n/**\n * Geometry needed to work out how tall an anchored panel's scrollable list may be.\n *\n * @docs-private\n */\nexport interface KbqPanelSpaceContext {\n /** Viewport-relative top of the element the panel is anchored to. */\n triggerTop: number;\n /** Viewport-relative bottom of the element the panel is anchored to. */\n triggerBottom: number;\n /** Height of the viewport the panel has to fit into. */\n viewportHeight: number;\n /** Margin the overlay keeps from the viewport edge, i.e. `cdkConnectedOverlayViewportMargin`. */\n viewportMargin: number;\n\n /**\n * Everything in the panel that is not the scrollable list and therefore adds to its total height: the\n * trigger gap, the list padding, a search field and a footer.\n */\n chromeHeight: number;\n}\n\n/**\n * How much room the panel's scrollable list has on each side of the trigger. Negative means it does not fit.\n *\n * @docs-private\n */\nexport interface KbqPanelSideSpace {\n above: number;\n below: number;\n}\n\n/**\n * Measures how much room the panel's scrollable list has on either side of the trigger.\n *\n * Returns `null` for geometry that cannot be trusted — a collapsed trigger rect or a zero-height viewport, which\n * is what a DOM without layout reports, on the server and under jsdom.\n *\n * @docs-private\n */\nexport function kbqResolvePanelSideSpace(context: KbqPanelSpaceContext): KbqPanelSideSpace | null {\n const { triggerTop, triggerBottom, viewportHeight, viewportMargin, chromeHeight } = context;\n\n if (![triggerTop, triggerBottom, viewportHeight, viewportMargin, chromeHeight].every(Number.isFinite)) {\n return null;\n }\n\n if (viewportHeight <= 0 || triggerBottom <= triggerTop) return null;\n\n return {\n above: triggerTop - viewportMargin - chromeHeight,\n below: viewportHeight - triggerBottom - viewportMargin - chromeHeight\n };\n}\n\n/**\n * What the DOM reports about the first row of a trigger that lays its content out in rows.\n *\n * @docs-private\n */\nexport interface KbqTriggerFirstRowMeasurements {\n /** Viewport-relative top of the element the overlay is anchored to. */\n originTop: number;\n /** Viewport-relative bottom of the element the overlay is anchored to. */\n originBottom: number;\n /** Border-box top of the row container. */\n listTop: number;\n /** Border-box bottom of the row container. */\n listBottom: number;\n /** Viewport-relative bottom of the lowest element sitting on the first laid-out row. */\n firstRowBottom: number;\n /** Scroll offset of the row container, so that a scrolled container still reports its own first row. */\n listScrollTop: number;\n}\n\n/**\n * Distance from the trigger's top edge down to where a panel would start if the trigger had a single row —\n * equivalently, the trigger's height with rows 2..N removed.\n *\n * Returns `null` for geometry that cannot be trusted: a collapsed rect (the server, a DOM without layout), or\n * a row container that is not what drives the trigger's height, which a result reaching past the trigger's own\n * bottom edge gives away.\n *\n * @docs-private\n */\nexport function kbqResolveTriggerFirstRowOffset(measurements: KbqTriggerFirstRowMeasurements): number | null {\n const { originTop, originBottom, listTop, listBottom, firstRowBottom, listScrollTop } = measurements;\n\n if (![originTop, originBottom, listTop, listBottom, firstRowBottom, listScrollTop].every(Number.isFinite)) {\n return null;\n }\n\n const originHeight = originBottom - originTop;\n\n if (originHeight <= 0) return null;\n\n // The first row measured in the container's own, unscrolled coordinates, plus the chrome the trigger keeps\n // above and below its rows — the matcher's padding and the field's border.\n const firstRowHeight = firstRowBottom + listScrollTop - listTop;\n const offset = listTop - originTop + firstRowHeight + (originBottom - listBottom);\n\n return offset > 0 && offset <= originHeight ? offset : null;\n}\n\n/**\n * Room the panel's scrollable list has when it is anchored to the trigger's first row instead of to the\n * trigger's bottom edge. The same arithmetic as {@link kbqResolvePanelSideSpace}, on a trigger cut to one row.\n *\n * @docs-private\n */\nexport function kbqResolveOverlapPanelSpace(context: KbqPanelSpaceContext, firstRowOffset: number): number | null {\n const space = kbqResolvePanelSideSpace({ ...context, triggerBottom: context.triggerTop + firstRowOffset });\n\n return space && space.below;\n}\n\n/**\n * Everything the first-row anchor decision needs beyond {@link KbqPanelSpaceContext}.\n *\n * @docs-private\n */\nexport interface KbqPanelAnchorOptions {\n /** Result of {@link kbqResolveTriggerFirstRowOffset}; `null` when there is no row to anchor to. */\n firstRowOffset: number | null;\n /** Height the scrollable list takes with no viewport clamp in force. */\n naturalListHeight: number;\n /** Whether the panel is already anchored to the first row, which widens the band it stays in. */\n anchored?: boolean;\n}\n\n/**\n * Whether the panel should be anchored below the trigger's first row and rendered over the rest of it.\n *\n * Three things have to hold. The trigger must have more than one row, or there is nothing to overlap. It must\n * be taller than the panel, or the room beside it is the better trade and the panel belongs on a side. And\n * the panel must fit there at its full height — the caller adds this as a THIRD `ConnectedPosition`,\n * and when no position fits the overlay falls back to whichever goes off-screen the least, so an anchor that\n * does not fit would outrank `above`/`below` on that fallback and move panels that have no business moving.\n * Gating on the fit keeps the fallback ranking exactly as it is without this anchor.\n *\n * `anchored` widens the height test by one row, so that deselecting a single option cannot bounce a panel\n * sitting right on the boundary across several hundred pixels.\n *\n * @docs-private\n */\nexport function kbqShouldAnchorPanelToFirstRow(\n context: KbqPanelSpaceContext,\n { firstRowOffset, naturalListHeight, anchored = false }: KbqPanelAnchorOptions\n): boolean {\n if (firstRowOffset === null) return false;\n\n if (!Number.isFinite(naturalListHeight)) return false;\n\n // Read off the same rect the space calculation uses, so the two can never disagree.\n const triggerHeight = context.triggerBottom - context.triggerTop;\n\n // A single-row trigger has nothing to overlap.\n if (triggerHeight - firstRowOffset <= 1) return false;\n\n const hysteresis = anchored ? firstRowOffset : 0;\n\n if (triggerHeight + hysteresis <= context.chromeHeight + naturalListHeight) return false;\n\n // The overlay rejects a position whose top edge is off the top of the viewport, which a trigger scrolled\n // past the fold produces.\n if (context.triggerTop + firstRowOffset < 0) return false;\n\n const space = kbqResolveOverlapPanelSpace(context, firstRowOffset);\n\n return space !== null && space >= naturalListHeight;\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ElementRef } from '@angular/core';\n\n/**\n * Default minimum width of an overlay panel, in pixels.\n *\n * Kept in sync by hand with `--kbq-dropdown-size-container-width-min` in `dropdown-tokens.scss`,\n * which expresses the same default for the dropdown's CSS-driven sizing.\n */\nexport const KBQ_PANEL_DEFAULT_MIN_WIDTH = 200;\n\n/**\n * Width of an overlay panel.\n *\n * - `'auto'` — matches the trigger width, but never narrower than `panelMinWidth`.\n * - `number` — an explicit width in pixels. `panelMinWidth` is not applied.\n * - `string` — an explicit CSS width (e.g. `fit-content`, `20rem`). `panelMinWidth` is not applied.\n * - `null`/`''` — the panel sizes to its content, but never narrower than the trigger or `panelMinWidth`.\n */\n// `string & {}` keeps the literal members visible to autocomplete while still allowing any CSS width.\nexport type KbqPanelWidth = 'auto' | number | (string & {}) | null | '';\n\n/** Minimum width of an overlay panel, in pixels. `null` applies no additional minimum. */\nexport type KbqPanelMinWidth = number | null;\n\n/**\n * Maximum width of an overlay panel, in pixels. `null` falls back to the `--kbq-panel-size-width-max`\n * design token.\n *\n * The cap is soft: it limits how far a panel grows with its content, but never makes a panel narrower\n * than its trigger, and never overrides an explicit `panelWidth`.\n */\nexport type KbqPanelMaxWidth = number | null;\n\n/**\n * Anything an overlay panel can be measured against.\n *\n * @docs-private\n */\nexport type KbqPanelWidthOrigin = ElementRef<HTMLElement> | CdkOverlayOrigin | HTMLElement;\n\n/**\n * Resolved size of an overlay pane.\n *\n * Both keys are always present so that the result can be passed straight to `OverlayRef.updateSize()`,\n * which shallow-merges into the existing config — an omitted key would leave a stale value applied.\n *\n * @docs-private\n */\nexport interface KbqResolvedPanelWidth {\n width: number | string;\n minWidth: number | string;\n}\n\n/**\n * Measures the rendered width of a panel's trigger.\n *\n * Uses `getBoundingClientRect()` because `getComputedStyle().width` resolves to the used\n * content-box width regardless of `box-sizing`, so subtracting borders from it double-counts them.\n *\n * @docs-private\n */\nexport function kbqGetPanelWidthOrigin(origin: KbqPanelWidthOrigin): number {\n const element =\n origin instanceof CdkOverlayOrigin\n ? origin.elementRef.nativeElement\n : origin instanceof ElementRef\n ? origin.nativeElement\n : origin;\n\n return element.getBoundingClientRect().width;\n}\n\n/**\n * Whether `panelWidth` is an explicit width rather than `'auto'` or content-sized.\n *\n * @docs-private\n */\nexport function isExplicitPanelWidth(panelWidth: KbqPanelWidth | undefined): panelWidth is number | string {\n if (panelWidth === 'auto' || panelWidth == null || panelWidth === '') return false;\n\n return !(typeof panelWidth === 'number' && !Number.isFinite(panelWidth));\n}\n\n/**\n * Resolves `panelWidth` and `panelMinWidth` into the `width` and `minWidth` of the overlay pane.\n *\n * `panelWidth` selects the sizing policy. The \"never narrower than the trigger\" rule belongs to the\n * automatic policies (`null` and `'auto'`); an explicit width is taken at face value.\n *\n * @docs-private\n */\nexport function kbqResolvePanelWidth(\n panelWidth: KbqPanelWidth | undefined,\n panelMinWidth: KbqPanelMinWidth | undefined,\n triggerWidth: number\n): KbqResolvedPanelWidth {\n // `numberAttribute` coerces `null` and other invalid bindings to `NaN`, so guard on finiteness\n // rather than on `null`, which never reaches us from a template binding.\n const min = Number.isFinite(panelMinWidth) ? Math.max(panelMinWidth as number, 0) : 0;\n const floor = Math.max(min, Number.isFinite(triggerWidth) ? triggerWidth : 0);\n\n // Trigger-sized. The floor is resolved here rather than emitted as `minWidth` because\n // `KbqAbstractSelect.setOverlayPosition()` clears `minWidth` on viewport overflow, after having\n // derived the panel offset from the pre-clear width. A floor of `0` means the trigger could not\n // be measured, not that a zero-width panel was asked for, so the width stays unset and the panel\n // sizes to its content.\n if (panelWidth === 'auto') {\n return { width: floor > 0 ? coerceCssPixelValue(floor) : '', minWidth: '' };\n }\n\n // Content-sized. Only `null`/`undefined`/`''` opt in — `0` is an explicit width. A non-finite\n // `panelWidth` (e.g. `NaN` from an upstream computation) is treated the same way rather than\n // reaching the DOM unguarded, mirroring how `panelMinWidth`/`triggerWidth` are handled above.\n if (!isExplicitPanelWidth(panelWidth)) {\n return { width: '', minWidth: floor };\n }\n\n // Explicit width. `panelMinWidth` is not applied. Rendered as CSS so that a zero survives the\n // truthy check `CdkConnectedOverlay._getWidth()` applies to the width it was given (CDK 22+).\n return { width: coerceCssPixelValue(panelWidth), minWidth: '' };\n}\n","import { OverlayRef, ScrollDispatcher, ScrollStrategy } from '@angular/cdk/overlay';\nimport { isDevMode } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { isScrollFromInsideOverlay } from './scroll-strategy-utils';\n\nfunction getKbqRepositionScrollStrategyAlreadyAttachedError(): Error {\n return Error('KbqRepositionScrollStrategy: attach() has already been called for this instance.');\n}\n\nfunction getKbqRepositionScrollStrategyNotAttachedError(): Error {\n return Error('KbqRepositionScrollStrategy: enable() was called before attach(). Call attach() first.');\n}\n\n/** @docs-private */\nexport interface KbqRepositionScrollStrategyConfig {\n scrollThrottle?: number;\n /** Whether scrolls originating inside the overlay should be ignored. Defaults to `true`. */\n ignoreInnerScroll?: boolean;\n}\n\n/**\n * Repositions an overlay on external scroll events while ignoring its own scrolling by default.\n *\n * @docs-private\n */\nexport class KbqRepositionScrollStrategy implements ScrollStrategy {\n private overlayRef: OverlayRef | null = null;\n private scrollSubscription: Subscription | null = null;\n\n constructor(\n private readonly scrollDispatcher: ScrollDispatcher,\n private readonly config: KbqRepositionScrollStrategyConfig = {}\n ) {}\n\n attach(overlayRef: OverlayRef): void {\n if (this.overlayRef && isDevMode()) {\n throw getKbqRepositionScrollStrategyAlreadyAttachedError();\n }\n\n this.overlayRef = overlayRef;\n }\n\n enable(): void {\n if (this.scrollSubscription) return;\n\n if (!this.overlayRef) {\n throw getKbqRepositionScrollStrategyNotAttachedError();\n }\n\n const overlayRef = this.overlayRef;\n const { scrollThrottle = 0, ignoreInnerScroll = true } = this.config;\n\n this.scrollSubscription = this.scrollDispatcher\n .scrolled(scrollThrottle)\n .pipe(filter((scrollable) => !ignoreInnerScroll || !isScrollFromInsideOverlay(overlayRef, scrollable)))\n .subscribe(() => overlayRef.updatePosition());\n }\n\n disable(): void {\n this.scrollSubscription?.unsubscribe();\n this.scrollSubscription = null;\n }\n\n detach(): void {\n this.disable();\n this.overlayRef = null;\n }\n}\n\n/** @docs-private */\nexport function kbqRepositionScrollStrategyFactory(\n scrollDispatcher: ScrollDispatcher,\n config?: KbqRepositionScrollStrategyConfig\n): () => KbqRepositionScrollStrategy {\n return () => new KbqRepositionScrollStrategy(scrollDispatcher, config);\n}\n","/**\n * A simple (x, y) coordinate. Picked from the DOM's own `DOMPointReadOnly` rather than hand-rolled, so\n * a plain `{ x, y }` literal (e.g. from a `MouseEvent`) satisfies it without constructing a `DOMPoint` —\n * `DOMPoint` isn't implemented in every runtime (e.g. jsdom).\n *\n * @docs-private\n */\nexport type KbqPoint = Pick<DOMPointReadOnly, 'x' | 'y'>;\n\n/**\n * A triangle described by its three vertices.\n *\n * @docs-private\n */\nexport interface KbqTriangle {\n a: KbqPoint;\n b: KbqPoint;\n c: KbqPoint;\n}\n\n/**\n * Whether `point` lies within (or on the edge of) `rect`.\n *\n * @docs-private\n */\nexport function isPointInRect(point: KbqPoint, rect: DOMRect): boolean {\n return point.x >= rect.left && point.x <= rect.right && point.y >= rect.top && point.y <= rect.bottom;\n}\n\n/**\n * Whether `point` lies within (or on the edge of) `triangle`.\n *\n * Uses the sign of the cross product of each triangle edge with the point: the point is inside\n * only if it's consistently on the same side of all three edges.\n *\n * @docs-private\n */\nexport function isPointInTriangle(point: KbqPoint, triangle: KbqTriangle): boolean {\n const { a, b, c } = triangle;\n\n const sign = (p1: KbqPoint, p2: KbqPoint, p3: KbqPoint): number =>\n (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y);\n\n const d1 = sign(point, a, b);\n const d2 = sign(point, b, c);\n const d3 = sign(point, c, a);\n\n const hasNegative = d1 < 0 || d2 < 0 || d3 < 0;\n const hasPositive = d1 > 0 || d2 > 0 || d3 > 0;\n\n return !(hasNegative && hasPositive);\n}\n\n/**\n * Builds the \"safe triangle\" connecting `origin` (typically the pointer position where it left a\n * trigger) to the top and bottom corners of `targetRect` (typically a submenu panel) that are nearest\n * to `origin` — the submenu can open on either side of its trigger, so the nearest edge is picked by\n * comparing distances rather than assuming a fixed side.\n *\n * @docs-private\n */\nexport function getSafeTriangleVertices(origin: KbqPoint, targetRect: DOMRect): KbqTriangle {\n const nearX =\n Math.abs(targetRect.left - origin.x) <= Math.abs(targetRect.right - origin.x)\n ? targetRect.left\n : targetRect.right;\n\n return { a: origin, b: { x: nearX, y: targetRect.top }, c: { x: nearX, y: targetRect.bottom } };\n}\n","import { OverlayContainer } from '@angular/cdk/overlay';\nimport { ApplicationRef, ElementRef, Injectable, InjectionToken, Provider, inject } from '@angular/core';\n\n/**\n * Reference to the element used to locate the shadow root that should host the CDK overlay container.\n *\n * It can be the shadow host element itself (the common case — the MFE root element) or any element that already\n * lives inside the shadow tree. Provide it directly, as an `ElementRef`, or as a getter (useful when the element is\n * created after the providers are declared, e.g. resolved lazily at bootstrap).\n */\nexport type KbqShadowDomOverlayHost = HTMLElement | ElementRef<HTMLElement> | (() => Element | null | undefined);\n\n/**\n * Element used by {@link KbqShadowDomOverlayContainer} to locate the shadow root that should host overlays.\n *\n * When not provided, the container falls back to the application root component element.\n */\nexport const KBQ_SHADOW_DOM_OVERLAY_HOST = new InjectionToken<KbqShadowDomOverlayHost>('KBQ_SHADOW_DOM_OVERLAY_HOST');\n\n/** Marks the structural overlay stylesheet that {@link KbqShadowDomOverlayContainer} clones into a shadow root. */\nconst overlayStructuralStylesAttribute = 'data-kbq-overlay-structural-styles';\n\n/**\n * `OverlayContainer` that places the `.cdk-overlay-container` inside a shadow root instead of `document.body`.\n * Provide it with {@link kbqShadowDomOverlayProvider}.\n *\n * The default CDK `OverlayContainer` always appends its container to `document.body`. When the application is\n * rendered inside a shadow root (e.g. a Module Federation micro-frontend), overlays — toasts, modals, dropdowns,\n * tooltips, etc. — escape the shadow tree into the light DOM. There they lose access to the styles and theme tokens\n * scoped to the shadow root (Koobiq theme tokens are defined on the `.kbq-light` / `.kbq-dark` ancestor), which\n * results in unstyled overlays.\n *\n * This container resolves the target shadow root from {@link KBQ_SHADOW_DOM_OVERLAY_HOST} (or the root component when\n * the token is absent) and relocates the overlay container into it. After relocating, it also clones CDK's own\n * structural overlay stylesheet (`position`/`z-index`/backdrop, `.cdk-overlay-container:empty`) into the shadow root,\n * since those `document.head` styles do not cross the shadow boundary. If no shadow root is found — the common case\n * for an app rendered directly in the light DOM — the container is left on `document.body`, so it is safe to provide\n * unconditionally.\n *\n * Only **open** shadow roots can be resolved: a closed shadow root exposes neither `Element.shadowRoot` nor a\n * `ShadowRoot` from `getRootNode()`, so pass an element that already lives inside the closed tree if you must use one.\n *\n * Note: this fixes the overlay container *placement* and delivers the CDK structural overlay styles. The host\n * application is still responsible for delivering the **Koobiq component/theme styles** (the `.kbq-light` / `.kbq-dark`\n * tokens and component CSS) into the shadow root, since global `document.head` stylesheets do not cascade across a\n * shadow boundary.\n */\n@Injectable()\nexport class KbqShadowDomOverlayContainer extends OverlayContainer {\n private readonly host = inject(KBQ_SHADOW_DOM_OVERLAY_HOST, { optional: true });\n private readonly applicationRef = inject(ApplicationRef);\n\n /**\n * CDK lifecycle hook — overridden to relocate the container into a shadow root.\n *\n * @internal\n */\n protected override _createContainer(): void {\n // Let CDK create the container (and run its test-environment cleanup). It is appended to `document.body`.\n super._createContainer();\n\n const container = this._containerElement;\n\n // CDK always assigns the element here; the field is optional only before the first creation.\n if (!container) return;\n\n const shadowRoot = this.resolveShadowRoot();\n\n if (shadowRoot) {\n // Relocate the container into the shadow root and deliver the structural overlay styles alongside it.\n shadowRoot.appendChild(container);\n this.deliverStructuralStyles(shadowRoot);\n } else if (this.host != null) {\n // An explicit host was provided but did not resolve to an open shadow root (wrong element, a closed\n // shadow root, or an element not yet inside a shadow tree). The container stays on `document.body`, so\n // overlays would render unstyled — warn instead of failing silently.\n // eslint-disable-next-line no-console\n console.warn(\n '[KbqShadowDomOverlayContainer] The provided host did not resolve to an open shadow root; the ' +\n 'overlay container stays on document.body. Ensure the host element (or an element inside its ' +\n 'shadow tree) uses an open shadow root.'\n );\n }\n }\n\n /**\n * Clones CDK's structural overlay stylesheet into the shadow root.\n *\n * CDK ships the overlay's structural CSS as a `ViewEncapsulation.None` component, so Angular injects it as a\n * `<style>` in `document.head` synchronously — `OverlayContainer.getContainerElement()` loads it before\n * `_createContainer()` runs. Those rules do not cross the shadow boundary, so a relocated container would\n * otherwise be unpositioned. Cloning the already-injected stylesheet keeps it version-matched to the installed\n * `@angular/cdk` and is idempotent.\n */\n private deliverStructuralStyles(shadowRoot: ShadowRoot): void {\n if (shadowRoot.querySelector(`style[${overlayStructuralStylesAttribute}]`)) {\n return;\n }\n\n const sourceStyle = Array.from(this._document.head.querySelectorAll('style')).find((style) =>\n style.textContent?.includes('.cdk-overlay-pane')\n );\n\n if (sourceStyle) {\n const clone = sourceStyle.cloneNode(true) as HTMLStyleElement;\n\n clone.setAttribute(overlayStructuralStylesAttribute, '');\n shadowRoot.appendChild(clone);\n }\n }\n\n private resolveShadowRoot(): ShadowRoot | null {\n const element = this.resolveHostElement();\n\n if (!element) {\n return null;\n }\n\n // The host can be the shadow host itself (the common case — the MFE root element)...\n const ownShadowRoot = element.shadowRoot;\n\n if (ownShadowRoot) {\n return ownShadowRoot;\n }\n\n // ...or an element that already lives inside the shadow tree.\n const rootNode = element.getRootNode();\n\n return typeof ShadowRoot !== 'undefined' && rootNode instanceof ShadowRoot ? rootNode : null;\n }\n\n private resolveHostElement(): Element | null {\n if (this.host) {\n const resolved = typeof this.host === 'function' ? this.host() : this.host;\n\n if (resolved instanceof ElementRef) {\n return resolved.nativeElement;\n }\n\n return resolved ?? null;\n }\n\n // No explicit host provided — fall back to the application root component element.\n return this.applicationRef.components[0]?.location.nativeElement ?? null;\n }\n}\n\n/**\n * Providers that route all CDK overlays into a shadow root via {@link KbqShadowDomOverlayContainer}.\n *\n * Add it to the bootstrap providers of an application rendered inside a shadow root:\n *\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: kbqShadowDomOverlayProvider(() => document.querySelector('my-mfe-root')!)\n * });\n * ```\n *\n * The provider replaces the global `OverlayContainer` token, so it cannot be combined with another custom\n * `OverlayContainer` (e.g. CDK's `FullscreenOverlayContainer`) — the last provider wins. Apps that need both must\n * subclass `KbqShadowDomOverlayContainer`.\n *\n * @param host element (or getter / `ElementRef`) inside the target shadow tree. When omitted, the application root\n * component element is used to resolve the shadow root.\n */\nexport const kbqShadowDomOverlayProvider = (host?: KbqShadowDomOverlayHost): Provider[] => {\n const providers: Provider[] = [{ provide: OverlayContainer, useClass: KbqShadowDomOverlayContainer }];\n\n if (host !== undefined) {\n providers.push({ provide: KBQ_SHADOW_DOM_OVERLAY_HOST, useValue: host });\n }\n\n return providers;\n};\n","import { InjectionToken, Provider, Type } from '@angular/core';\nimport { SizeM } from '@koobiq/design-tokens';\nimport { Observable } from 'rxjs';\nimport { KbqEnumValues } from '../utils';\n\nexport interface KbqParentPopup {\n closedStream: Observable<boolean>;\n}\n\n/**\n * InjectionToken for providing component with popup. Used in select and tree-select for tooltip.\n */\nexport const KBQ_PARENT_POPUP = new InjectionToken<KbqParentPopup>('kbq-parent-popup');\n\n/**\n * Contract of a pop-up anchored to the same element as a tooltip — a popover, a dropdown, a select and so on.\n *\n * A tooltip sharing its host with such a pop-up mutes itself while the pop-up is on screen, so the two never\n * compete for the same anchor and the focus restored by the closing pop-up does not re-open the tooltip.\n */\nexport interface KbqSiblingPopup {\n /**\n * Whether the pop-up overlay is currently attached. Unlike a visibility flag it must flip synchronously,\n * both when the overlay is attached and when it is detached.\n */\n readonly isAttached: boolean;\n /** Emits `true` when the pop-up opens and `false` when it closes. */\n readonly openedChange: Observable<boolean>;\n}\n\n/**\n * Element-level token for pop-ups sharing their trigger element with a tooltip. Multi-provided, so a single\n * element can carry several pop-ups at once — for example the filter-bar button with both a popover and a\n * dropdown attached to it.\n */\nexport const KBQ_SIBLING_POPUP = new InjectionToken<readonly KbqSiblingPopup[]>('kbq-sibling-popup');\n\n/**\n * Builds the multi-provider entry a pop-up trigger adds to its own `providers` to announce itself to a\n * tooltip on the same element.\n *\n * Every concrete trigger has to add it on its own: Angular copies `providers` to a subclass only when that\n * subclass has no decorator of its own, so inheriting from an already-announced trigger is not enough.\n */\nexport const kbqSiblingPopupProvider = (popup: Type<KbqSiblingPopup>): Provider => ({\n provide: KBQ_SIBLING_POPUP,\n useExisting: popup,\n multi: true\n});\n\nexport enum PopUpPlacements {\n Top = 'top',\n TopLeft = 'topLeft',\n TopRight = 'topRight',\n Right = 'right',\n RightTop = 'rightTop',\n RightBottom = 'rightBottom',\n Left = 'left',\n LeftTop = 'leftTop',\n LeftBottom = 'leftBottom',\n Bottom = 'bottom',\n BottomLeft = 'bottomLeft',\n BottomRight = 'bottomRight'\n}\n\nexport type KbqPopUpPlacementValues = KbqEnumValues<PopUpPlacements>;\n\nexport type KbqStickToWindowPlacementValues = KbqEnumValues<\n PopUpPlacements.Top | PopUpPlacements.Right | PopUpPlacements.Bottom | PopUpPlacements.Left\n>;\n\nexport enum PopUpVisibility {\n Initial = 'initial',\n Visible = 'visible',\n Hidden = 'hidden'\n}\n\nexport enum PopUpTriggers {\n Click = 'click',\n Focus = 'focus',\n Hover = 'hover',\n Keydown = 'keydown',\n Program = 'program'\n}\n\nexport enum PopUpSizes {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n Custom = 'custom'\n}\n\nexport type KbqPopUpSizeValues = KbqEnumValues<PopUpSizes>;\n\n/**\n * Default value when configuring overlay in popups (Autocomplete, Datepicker, Dropdown, Select, Tags Autocomplete,\n * Tags Input, Timezone, TreeSelect).\n */\nexport const defaultOffsetY: number = 4;\n\n/**\n * Pane class applied to a connected overlay whose panel is positioned BELOW its trigger.\n *\n * Used instead of a physical `offsetY` gap: the pane sits flush with the trigger and the visual gap is\n * recreated as transparent `padding-top` inside the pane (see the `kbq-connected-overlay-gap` styles), so the\n * gap is covered by the pane (`pointer-events: auto`) and can no longer be clicked/hovered through.\n */\nexport const KBQ_CONNECTED_OVERLAY_BELOW_CLASS = 'kbq-connected-overlay_below';\n\n/**\n * Pane class applied to a connected overlay whose panel is positioned ABOVE its trigger (flipped).\n *\n * Mirror of {@link KBQ_CONNECTED_OVERLAY_BELOW_CLASS}: the visual gap is recreated as transparent\n * `padding-bottom` inside the pane so the flipped gap is not click/hover-through.\n */\nexport const KBQ_CONNECTED_OVERLAY_ABOVE_CLASS = 'kbq-connected-overlay_above';\n\n/**\n * Pane class applied to a connected overlay whose panel is anchored to the FIRST ROW of a trigger it\n * OVERLAPS — a multiline select whose tag rows have made it taller than the panel itself, with too little\n * room to open on either side of it.\n *\n * The panel ends up where it would for a single-row trigger, so the gap is the same transparent\n * `padding-top` as {@link KBQ_CONNECTED_OVERLAY_BELOW_CLASS}. It is a separate class because the room left\n * for the panel has to be measured from the first row rather than from the trigger's bottom edge, and the\n * class is how the component tells the two apart.\n */\nexport const KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS = 'kbq-connected-overlay_overlap';\n\n/**\n * Variable used for offsetY(X) calculations when applying Angular Overlay\n *\n * @internal\n */\n// `TooltipSizeArrowSize` was removed in @koobiq/design-tokens v4 along with the rest of the\n// deprecated component tokens; it aliased `{size.m}`, which is what its deprecation notice told\n// consumers to use.\nexport const ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT = Math.round(parseInt(SizeM) * Math.sqrt(2));\n","import { FocusTrapInertStrategy } from '@angular/cdk/a11y';\n\n// Need replace EventListenerFocusTrapInertStrategy to EmptyFocusTrapStrategy for focus work correctly with open popover\nexport class EmptyFocusTrapStrategy implements FocusTrapInertStrategy {\n preventFocus(): void {}\n allowFocus(): void {}\n}\n","import { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport {\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Injector,\n OnDestroy,\n Renderer2,\n Signal,\n signal,\n TemplateRef\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { kbqAfterAnimations, kbqAnimationsDisabled } from '../animation/animations-state';\nimport { PopUpPlacements, PopUpVisibility } from './constants';\nimport { KbqPopUpTrigger } from './pop-up-trigger';\n\n@Directive({\n host: {\n '(mouseenter)': 'setHovered(true)',\n '(mouseleave)': 'setHovered(false)'\n }\n})\nexport abstract class KbqPopUp implements OnDestroy {\n protected readonly renderer: Renderer2 = inject(Renderer2);\n private readonly hostElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The element the pop-up measures and decorates: its host, unless a subclass renders a panel of its own. */\n protected get elementRef(): ElementRef<HTMLElement> {\n return this.hostElementRef;\n }\n protected readonly changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n readonly destroyRef = inject(DestroyRef);\n\n /**\n * Whether the pop-up appears without motion.\n *\n * @docs-private\n */\n protected readonly animationsDisabled = kbqAnimationsDisabled();\n\n private readonly hostInjector = inject(Injector);\n\n private readonly hoveredState = signal(false);\n\n /** Whether the pointer is over the pop-up. */\n readonly hovered: Signal<boolean> = this.hoveredState.asReadonly();\n\n trigger: KbqPopUpTrigger<unknown>;\n header: string | TemplateRef<unknown>;\n content: string | TemplateRef<unknown>;\n context: { $implicit: unknown } | null;\n\n private readonly classMapState = signal({});\n\n /** CSS classes of the pop-up element: the placement, the custom class and the modifiers of the subclass. */\n get classMap() {\n return this.classMapState();\n }\n\n set classMap(value) {\n this.classMapState.set(value);\n }\n\n arrow: boolean;\n defaultPaddings: boolean;\n\n offset: number | null;\n\n private readonly visibilityState = signal(PopUpVisibility.Initial);\n\n /** Stage of the pop-up's life: not shown yet, visible, or hidden. */\n get visibility(): PopUpVisibility {\n return this.visibilityState();\n }\n\n set visibility(value: PopUpVisibility) {\n this.visibilityState.set(value);\n }\n\n visibleChange = new EventEmitter<boolean>();\n\n protected prefix: string;\n\n /** Subject for notifying that the tooltip has been hidden from the view */\n protected readonly onHideSubject = new Subject<void>();\n\n private showTimeoutId: any;\n private hideTimeoutId: any;\n\n /** Handler bound on the pop-up element to hide it on `mouseleave`, or `null` while none is bound. */\n private hideOnMouseLeave: (() => void) | null = null;\n\n private showAnimation?: { destroy(): void };\n\n ngOnDestroy() {\n clearTimeout(this.showTimeoutId);\n clearTimeout(this.hideTimeoutId);\n\n this.removeEventListenerForHide();\n\n this.onHideSubject.complete();\n // Completed here rather than left dangling: the trigger subscribes to it once per show and keeps that\n // subscription for its own lifetime, so a trigger that outlives many pop-ups would otherwise accumulate\n // one live subscriber per show.\n this.visibleChange.complete();\n }\n\n isTemplateRef(value: any): boolean {\n return value instanceof TemplateRef;\n }\n\n show(delay: number): void {\n // Symmetrical to the clearing `hide()` does: `KbqPopUpTrigger.show()` re-enters this method on every\n // re-hover while the pop-up stays attached, and without this each re-entry queues another show task.\n // The extra tasks outlive the very teardown meant to cancel them — the first one to fire resets\n // `showTimeoutId`, so `hide()` and `ngOnDestroy` then clear nothing and the rest run against a\n // destroyed component.\n if (this.showTimeoutId) {\n clearTimeout(this.showTimeoutId);\n }\n\n if (this.hideTimeoutId) {\n clearTimeout(this.hideTimeoutId);\n }\n\n this.showTimeoutId = setTimeout(() => {\n this.showTimeoutId = undefined;\n\n // A re-hover re-enters `show()` on a pop-up already on screen, which has no entrance to wait for.\n const appearing = !this.isVisible();\n\n this.visibility = PopUpVisibility.Visible;\n this.visibleChange.emit(true);\n\n if (appearing) {\n this.waitForShowAnimation();\n }\n\n if (this.trigger.triggerName === 'mouseenter') {\n this.addEventListenerForHide();\n }\n }, delay);\n }\n\n /**\n * Hides the popup after a specified delay.\n *\n * The hide timeout triggers the hiding of the popup by updating visibility and emitting relevant events.\n *\n * @param delay - The delay in milliseconds before hiding the popup.\n */\n hide(delay: number): void {\n if (this.showTimeoutId) {\n clearTimeout(this.showTimeoutId);\n }\n\n // Repeated `hide()` calls must not stack timers: without this the earliest pending timeout still\n // fires, hiding the pop-up before the delay of the call that actually replaced it has elapsed.\n if (this.hideTimeoutId) {\n clearTimeout(this.hideTimeoutId);\n }\n\n this.hideTimeoutId = setTimeout(() => {\n this.hideTimeoutId = undefined;\n this.visibility = PopUpVisibility.Hidden;\n\n this.visibleChange.emit(false);\n this.onHideSubject.next();\n }, delay);\n }\n\n isVisible(): boolean {\n return this.visibility === PopUpVisibility.Visible;\n }\n\n updateClassMap(placement: string, customClass: string, classMap?): void {\n // `customClass` may be a whitespace-separated list of class names; expand it into\n // individual keys so the native `[class]` binding (which doesn't tokenise object keys)\n // applies each class correctly.\n const customClasses: Record<string, boolean> = {};\n\n for (const token of (customClass ?? '').split(/\\s+/).filter(Boolean)) {\n customClasses[token] = true;\n }\n\n this.classMap = {\n [`${this.prefix}_placement-${placement}`]: true,\n ...customClasses,\n ...classMap\n };\n }\n\n /** Returns an observable that notifies when the tooltip has been hidden from view. */\n afterHidden(): Observable<void> {\n return this.onHideSubject.asObservable();\n }\n\n /** Records whether the pointer is over the pop-up, and lets the trigger re-evaluate its delayed hide. */\n protected setHovered(value: boolean): void {\n this.hoveredState.set(value);\n // Optional: a panel rendered on its own, without a trigger, is hoverable too.\n this.trigger?.handleHoverChange();\n }\n\n detectChanges(): void {\n this.changeDetectorRef.detectChanges();\n }\n\n /**\n * Called once the pop-up has animated in. Only the entrance animates: `hide()` emits `onHideSubject`\n * synchronously and `KbqPopUpTrigger` detaches the overlay in the same call stack.\n */\n protected afterShowAnimation(): void {}\n\n /** Calls `afterShowAnimation()` once the pop-up has animated in. */\n private waitForShowAnimation(): void {\n this.showAnimation?.destroy();\n this.showAnimation = kbqAfterAnimations(\n // Read once rendered: a subclass queries the animated element from its view.\n () => this.elementRef?.nativeElement,\n () => this.afterShowAnimation(),\n this.hostInjector\n );\n }\n\n /** Binds the `mouseleave` hide listener on the pop-up element, at most once per instance. */\n protected addEventListenerForHide() {\n if (this.hideOnMouseLeave) return;\n\n this.hideOnMouseLeave = () => this.hide(0);\n\n this.elementRef.nativeElement.addEventListener('mouseleave', this.hideOnMouseLeave);\n }\n\n /** Unbinds the `mouseleave` hide listener bound by {@link addEventListenerForHide}. */\n private removeEventListenerForHide() {\n if (!this.hideOnMouseLeave) return;\n\n this.elementRef.nativeElement.removeEventListener('mouseleave', this.hideOnMouseLeave);\n\n this.hideOnMouseLeave = null;\n }\n\n protected setStickPosition() {\n if (!this.trigger.stickToWindow) return;\n\n const oppositeSide = {\n [PopUpPlacements.Top]: PopUpPlacements.Bottom,\n [PopUpPlacements.Bottom]: PopUpPlacements.Top,\n [PopUpPlacements.Right]: PopUpPlacements.Left,\n [PopUpPlacements.Left]: PopUpPlacements.Right\n }[this.trigger.stickToWindow];\n\n if (!oppositeSide) return;\n\n this.arrow = false;\n\n if (this.trigger.container) {\n const { width, height } = this.elementRef.nativeElement.getBoundingClientRect();\n const { right, left, top, bottom } = this.trigger.container.getBoundingClientRect();\n\n if (this.trigger.stickToWindow === PopUpPlacements.Right) {\n this.renderer.setStyle(\n this.trigger.overlayRef?.overlayElement,\n 'left',\n coerceCssPixelValue(right - width)\n );\n } else if (this.trigger.stickToWindow === PopUpPlacements.Left) {\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, 'left', coerceCssPixelValue(left));\n } else if (this.trigger.stickToWindow === PopUpPlacements.Top) {\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, 'top', coerceCssPixelValue(top));\n } else if (this.trigger.stickToWindow === PopUpPlacements.Bottom) {\n this.renderer.setStyle(\n this.trigger.overlayRef?.overlayElement,\n 'top',\n coerceCssPixelValue(bottom - height)\n );\n }\n\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, 'right', 'unset');\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, 'bottom', 'unset');\n } else {\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, this.trigger.stickToWindow, 0);\n this.renderer.setStyle(this.trigger.overlayRef?.overlayElement, oppositeSide, 'unset');\n }\n }\n}\n","import { Renderer2 } from '@angular/core';\n\nexport const applyPopupMargins = (renderer: Renderer2, element: HTMLElement, name: string, value: string) => {\n const classList = element.classList;\n\n if (\n classList.contains(`${name}_placement-top`) ||\n classList.contains(`${name}_placement-top-left`) ||\n classList.contains(`${name}_placement-top-right`)\n ) {\n renderer.setStyle(element, 'margin-bottom', value);\n }\n\n if (\n classList.contains(`${name}_placement-right`) ||\n classList.contains(`${name}_placement-right-top`) ||\n classList.contains(`${name}_placement-right-bottom`)\n ) {\n renderer.setStyle(element, 'margin-left', value);\n }\n\n if (\n classList.contains(`${name}_placement-bottom`) ||\n classList.contains(`${name}_placement-bottom-left`) ||\n classList.contains(`${name}_placement-bottom-right`)\n ) {\n renderer.setStyle(element, 'margin-top', value);\n }\n\n if (\n classList.contains(`${name}_placement-left`) ||\n classList.contains(`${name}_placement-left-top`) ||\n classList.contains(`${name}_placement-left-bottom`)\n ) {\n renderer.setStyle(element, 'margin-right', value);\n }\n};\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n CdkScrollable,\n ConnectedOverlayPositionChange,\n ConnectionPositionPair,\n FlexibleConnectedPositionStrategy,\n FlexibleConnectedPositionStrategyOrigin,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollDispatcher,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n NgZone,\n OnDestroy,\n OnInit,\n Signal,\n signal,\n TemplateRef,\n Type,\n untracked,\n ViewContainerRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, Subscription } from 'rxjs';\nimport { distinctUntilChanged, delay as rxDelay } from 'rxjs/operators';\nimport { ENTER, ESCAPE, SPACE } from '../keycodes';\nimport { kbqGetOverlayOriginSize, KbqOverlayOrigin, kbqResolveOverlayOrigin } from '../overlay/overlay-origin';\nimport {\n EXTENDED_OVERLAY_POSITIONS,\n POSITION_MAP,\n POSITION_PRIORITY_STRATEGY,\n POSITION_TO_CSS_MAP\n} from '../overlay/overlay-position-map';\nimport {\n ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT,\n KbqPopUpPlacementValues,\n KbqSiblingPopup,\n KbqStickToWindowPlacementValues,\n PopUpPlacements,\n PopUpTriggers\n} from './constants';\nimport { KbqPopUp } from './pop-up';\n\ntype KbqPopupTriggerOffset = Pick<ConnectionPositionPair, 'offsetX' | 'offsetY'>;\n\nconst getOffset = (\n { originX, overlayX, originY, overlayY }: ConnectionPositionPair,\n { width, height }: { width: number; height: number }\n): KbqPopupTriggerOffset => {\n const offset: KbqPopupTriggerOffset = {};\n const elementWidthHalf = width / 2;\n const elementHeightHalf = height / 2;\n\n // alignment should be applied only if the element is small\n if (ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT > elementWidthHalf) {\n const PADDING = ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT - elementWidthHalf;\n\n if (originX === overlayX) {\n if (originX === 'start') {\n offset.offsetX = -PADDING;\n }\n\n if (originX === 'end') {\n offset.offsetX = PADDING;\n }\n }\n }\n\n // alignment should be applied only if the element is small\n if (ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT > elementHeightHalf) {\n const PADDING = ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT - elementHeightHalf;\n\n if (originY === overlayY) {\n if (originY === 'top') {\n offset.offsetY = -PADDING;\n }\n\n if (originY === 'bottom') {\n offset.offsetY = PADDING;\n }\n }\n }\n\n return offset;\n};\n\n/**\n * Abstract base directive for hover/focus/click-triggered pop-ups (e.g. tooltip and popover). It manages the\n * CDK overlay lifecycle, binds the trigger event listeners, resolves placement via a flexible connected position\n * strategy, and controls show/hide timing. Concrete subclasses supply the pop-up component type, its content,\n * and the overlay configuration.\n */\n@Directive({\n host: {\n '(mouseenter)': 'setHovered(true)',\n '(mouseleave)': 'setHovered(false)'\n }\n})\nexport abstract class KbqPopUpTrigger<T> implements OnInit, OnDestroy, KbqSiblingPopup {\n private readonly hoveredState = signal(false);\n\n /**\n * Whether the pointer is over the trigger.\n *\n * @docs-private\n */\n readonly hovered: Signal<boolean> = this.hoveredState.asReadonly();\n\n /**\n * CDK Overlay service used to create and position the pop-up overlay.\n *\n * @docs-private\n */\n protected readonly overlay: Overlay = inject(Overlay);\n\n /**\n * Reference to the host element the pop-up is anchored to.\n *\n * @docs-private\n */\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Angular zone, used to run the hide timer outside Angular and re-enter when hiding.\n *\n * @docs-private\n */\n protected readonly ngZone: NgZone = inject(NgZone);\n\n /**\n * CDK ScrollDispatcher, used to track ancestor scroll containers so the pop-up repositions on scroll.\n *\n * @docs-private\n */\n protected readonly scrollDispatcher: ScrollDispatcher = inject(ScrollDispatcher);\n\n /**\n * CDK ViewportRuler, used to re-apply the stick-to-window position on window resize.\n *\n * @docs-private\n */\n protected readonly viewportRuler: ViewportRuler = inject(ViewportRuler);\n\n /**\n * View container the pop-up component portal is attached to.\n *\n * @docs-private\n */\n protected readonly hostView: ViewContainerRef = inject(ViewContainerRef);\n\n /**\n * Text direction (LTR/RTL) applied to the overlay when a `Directionality` is available.\n *\n * @docs-private\n */\n protected readonly direction = inject(Directionality, { optional: true });\n\n /**\n * Destroy reference used to auto-unsubscribe streams when the directive is destroyed.\n *\n * @docs-private\n */\n protected readonly destroyRef = inject(DestroyRef);\n\n /**\n * Nearest `CdkScrollable` ancestor, if any.\n *\n * @docs-private\n */\n protected readonly scrollable = inject(CdkScrollable, { optional: true });\n\n /**\n * Factory returning the overlay scroll strategy; provided by the concrete subclass.\n *\n * @docs-private\n */\n protected abstract scrollStrategy: () => ScrollStrategy;\n\n /**\n * Optional element used to anchor and measure the pop-up instead of the host element.\n *\n * @docs-private\n */\n protected externalNativeElement: HTMLElement;\n\n /** Whether the pop-up overlay is currently open. */\n get isOpen(): boolean {\n return this.openState();\n }\n\n set isOpen(value: boolean) {\n this.openState.set(value);\n }\n\n /** Backing signal of `isOpen`, so that the host bindings and templates reading it follow it by themselves. */\n private readonly openState = signal(false);\n\n /**\n * Whether the pop-up overlay is currently attached.\n *\n * Unlike `isOpen`, which follows the visibility of the pop-up component and therefore lags a task behind\n * `show()`/`hide()`, this flips synchronously — it is the window during which the overlay (and its\n * backdrop) is present in the DOM. Part of the {@link KbqSiblingPopup} contract.\n */\n get isAttached(): boolean {\n return !!this.instance;\n }\n\n /** Emits `true` when the pop-up opens and `false` when it closes. Part of the {@link KbqSiblingPopup} contract. */\n get openedChange(): Observable<boolean> {\n return this.visibleChange;\n }\n\n /**\n * Delay in milliseconds before the pop-up is shown.\n *\n * @docs-private\n */\n enterDelay: number = 0;\n\n /**\n * Delay in milliseconds before the pop-up is hidden.\n *\n * @docs-private\n */\n leaveDelay: number = 0;\n\n /**\n * Name of the DOM event that last triggered show/hide (e.g. `mouseenter`, `focus`, `click`).\n *\n * @docs-private\n */\n triggerName: string;\n\n /**\n * Reference to the created overlay, or `null` when no overlay exists.\n *\n * @docs-private\n */\n overlayRef: OverlayRef | null;\n\n /**\n * Placement used to keep the pop-up stuck within the window bounds.\n *\n * @docs-private\n */\n stickToWindow: KbqStickToWindowPlacementValues | undefined;\n\n /**\n * Host container element of the pop-up.\n *\n * @docs-private\n */\n container: HTMLElement | undefined;\n\n /**\n * Whether the pop-up is disabled and therefore never shown; implemented by the subclass.\n *\n * @docs-private\n */\n abstract disabled: boolean;\n\n /**\n * Whether the arrow/pointer is rendered; implemented by the subclass.\n *\n * @docs-private\n */\n abstract arrow: boolean;\n\n /**\n * Space/comma-separated list of trigger events (`hover`, `focus`, `click`, `keydown`); implemented by the subclass.\n *\n * @docs-private\n */\n abstract trigger: string;\n\n /**\n * Extra CSS class applied to the pop-up; implemented by the subclass.\n *\n * @docs-private\n */\n abstract customClass: string;\n\n /**\n * Pop-up content as a string or template; implemented by the subclass.\n *\n * @docs-private\n */\n abstract content: string | TemplateRef<unknown>;\n\n /**\n * Emits when the resolved placement changes; implemented by the subclass.\n *\n * @docs-private\n */\n abstract placementChange: EventEmitter<KbqPopUpPlacementValues>;\n\n /**\n * Emits when the pop-up visibility changes; implemented by the subclass.\n *\n * @docs-private\n */\n abstract visibleChange: EventEmitter<boolean>;\n\n /**\n * CSS selector of the element used as the overlay's transform origin; implemented by the subclass.\n *\n * @docs-private\n */\n protected abstract originSelector: string;\n\n /**\n * Base overlay configuration (panel classes, etc.); implemented by the subclass.\n *\n * @docs-private\n */\n protected abstract overlayConfig: OverlayConfig;\n\n /**\n * Current resolved placement of the pop-up.\n *\n * @docs-private\n */\n protected placement: KbqPopUpPlacementValues = PopUpPlacements.Top;\n\n /**\n * Ordered list of fallback placements to try before the default priority.\n *\n * @docs-private\n */\n protected placementPriority: string | string[] | null = null;\n\n /**\n * Whether the pop-up is currently visible.\n *\n * @docs-private\n */\n protected visible = false;\n\n /**\n * Backing field for the subclass `content` input.\n *\n * @docs-private\n */\n protected _content: string | TemplateRef<unknown>;\n\n /**\n * Backing field for the subclass `disabled` input.\n *\n * @docs-private\n */\n protected _disabled: boolean;\n\n /**\n * Backing field for the subclass `customClass` input.\n *\n * @docs-private\n */\n protected _customClass: string;\n\n /**\n * Component portal attached to the overlay to render the pop-up.\n *\n * @docs-private\n */\n protected portal: ComponentPortal<T>;\n\n /**\n * Currently attached pop-up component instance, or `null` when closed.\n *\n * @docs-private\n */\n protected instance: any | null;\n\n /**\n * Map of event name to the handler currently bound on the host element.\n *\n * @docs-private\n */\n protected listeners = new Map<string, EventListener>();\n\n /**\n * Subscription to the streams that should close the pop-up.\n *\n * @docs-private\n */\n protected closingActionsSubscription: Subscription;\n /** Handle of the queued `reapplyLastPosition` task, so repeated input updates schedule it only once. */\n private repositionTimeoutId: ReturnType<typeof setTimeout> | undefined;\n /** Handle of the deferred show scheduled by the `keydown` trigger. */\n private keydownShowTimeoutId: ReturnType<typeof setTimeout> | undefined;\n /** Whether the attached pop-up hides once the pointer has left both it and the trigger (`hideWithTimeout`). */\n private hoverHideArmed = false;\n /** Whether the pointer was over the trigger or the pop-up when the hover hide last looked. */\n private hoveredOverEither: boolean | undefined;\n /** Handle of the hide the hover hide has scheduled. */\n private hoverHideTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n /**\n * Map of placement name to its CDK connected position pair.\n *\n * @docs-private\n */\n protected readonly availablePositions: { [key: string]: ConnectionPositionPair } = POSITION_MAP;\n\n /**\n * Last mouse event, used to position the pop-up relative to the cursor.\n *\n * @docs-private\n */\n protected mouseEvent?: MouseEvent;\n\n /**\n * Flexible connected position strategy driving the overlay.\n *\n * @docs-private\n */\n protected strategy: FlexibleConnectedPositionStrategy;\n\n /**\n * What the pop-up is positioned against, or `null` while it follows the host element.\n *\n * @docs-private\n */\n protected origin: KbqOverlayOrigin | null = null;\n\n /**\n * Hide pop-up with timeout. Need if you want to show pop-up after leaving trigger\n *\n * @docs-private\n */\n protected hideWithTimeout: boolean = false;\n\n /**\n * prevents closure by any event\n *\n * @docs-private\n */\n protected preventClose: boolean = false;\n\n /**\n * Applies the placement (and modifier) CSS classes to the open pop-up; implemented by the subclass.\n *\n * @docs-private\n */\n abstract updateClassMap(newPlacement?: string): void;\n\n /**\n * Pushes the current inputs (content, arrow, offset, …) into the open pop-up; implemented by the subclass.\n *\n * @docs-private\n */\n abstract updateData(): void;\n\n /**\n * Returns the stream of events that should close the pop-up; implemented by the subclass.\n *\n * @docs-private\n */\n abstract closingActions(): Observable<any>;\n\n /**\n * Returns the component type to attach as the pop-up overlay; implemented by the subclass.\n *\n * @docs-private\n */\n abstract getOverlayHandleComponentType(): Type<T>;\n\n /** Binds the DOM event listeners for the configured triggers. */\n ngOnInit(): void {\n this.initListeners();\n }\n\n /** Disposes the overlay, cancels the pending timers and removes all bound event listeners. */\n ngOnDestroy(): void {\n clearTimeout(this.repositionTimeoutId);\n clearTimeout(this.keydownShowTimeoutId);\n this.disarmHoverHide();\n\n this.overlayRef?.dispose();\n // Nulled so a later `createOverlay()` — `updatePosition()` reaches it from an input setter — cannot\n // hand out the disposed reference.\n this.overlayRef = null;\n\n this.closingActionsSubscription?.unsubscribe();\n\n this.listeners.forEach(this.removeEventListener);\n\n this.listeners.clear();\n }\n\n /**\n * Sets the placement (falling back to `Top` on an unknown value) and refreshes the classes and position.\n *\n * @docs-private\n */\n updatePlacement(value: KbqPopUpPlacementValues) {\n if (POSITION_TO_CSS_MAP[value]) {\n this.placement = value;\n\n this.updateClassMap();\n } else {\n this.placement = PopUpPlacements.Top;\n\n // eslint-disable-next-line no-console\n console.warn(`Unknown position: ${value}. Will used default position: ${this.placement}`);\n }\n\n if (this.visible) {\n this.updatePosition();\n }\n }\n\n /**\n * Sets the ordered list of fallback placements, or clears it when the value is empty.\n *\n * @docs-private\n */\n updatePlacementPriority(value) {\n if (value && value.length > 0) {\n this.placementPriority = value;\n } else {\n this.placementPriority = null;\n }\n }\n\n /**\n * Coerces and applies an external visibility value by showing or hiding the pop-up when it changes.\n *\n * @docs-private\n */\n updateVisible(externalValue: boolean) {\n const value = coerceBooleanProperty(externalValue);\n\n if (this.visible !== value) {\n this.visible = value;\n\n if (value) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n\n /**\n * Closes the pop-up when `Escape` is pressed while it is open. Bound to the host `keydown` event.\n *\n * @docs-private\n */\n keydownHandler(event: KeyboardEvent) {\n // An Escape already spent, by an open tooltip or by a control on the host closing a popup of its own, closes\n // nothing more.\n if (event.keyCode !== ESCAPE || event.defaultPrevented || !this.isOpen || !this.canHide()) return;\n\n // Spent only when the pop-up closes, so that a container closing on Escape, such as a modal, stays open.\n event.preventDefault();\n this.hide();\n }\n\n /**\n * Hides the pop-up. Bound to the host `touchend` event.\n *\n * @docs-private\n */\n touchendHandler() {\n this.hide();\n }\n\n /**\n * Creates the overlay (if needed) and shows the pop-up after `delay` ms, wiring its visibility stream.\n *\n * @docs-private\n */\n show(delay: number = this.enterDelay): void {\n // Untracked: called from a consumer's `effect()`, the state read on the way — `isOpen` in `detach()` and in\n // the subclasses' `updateData()`, their input signals — would make the effect run again on every open and\n // close.\n untracked(() => this.attachAndShow(delay));\n }\n\n /** Body of `show()`. */\n private attachAndShow(delay: number): void {\n if (this.disabled) {\n return;\n }\n\n if (this.instance) {\n // A pointer that comes back during the leave delay has to cancel the pending hide, and\n // `KbqPopUp.show()` is the only thing that clears that timer. The wiring below stays untouched —\n // the visibility mirror is `distinctUntilChanged`, so re-showing a pop-up that is already visible\n // emits nothing and neither the single-instance registry nor `kbqVisibleChange` sees a second open.\n if (this.triggerName === 'mouseenter') {\n this.ngZone.run(() => this.instance.show(delay));\n }\n\n return;\n }\n\n this.overlayRef = this.createOverlay();\n this.detach();\n\n this.portal = this.portal || new ComponentPortal(this.getOverlayHandleComponentType(), this.hostView);\n\n this.instance = this.overlayRef.attach(this.portal).instance as KbqPopUp;\n\n // Subscribed once per attach and torn down by `detach`, so a closed pop-up keeps no document-level\n // listener alive and a reopened one does not stack a second subscription.\n this.subscribeOnClosingActions();\n\n this.instance.trigger = this;\n\n this.instance.afterHidden().pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.detach);\n\n this.updateClassMap();\n\n this.updateData();\n\n this.instance.visibleChange\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.visible = value;\n this.visibleChange.emit(value);\n this.isOpen = value;\n });\n\n this.updatePosition();\n\n this.instance.show(delay);\n\n // The position strategy re-applies the overlay position on window resize (its ViewportRuler\n // subscription is created inside OverlayRef.attach(), i.e. before this one), wiping the manual\n // styles written by setStickPosition. Re-apply them after the strategy has run.\n // No-op when stickToWindow is not set.\n this.viewportRuler\n .change()\n .pipe(takeUntilDestroyed(this.instance.destroyRef))\n .subscribe(() => this.instance?.setStickPosition());\n\n if (this.hideWithTimeout && this.trigger.includes(PopUpTriggers.Hover)) {\n // Driven by the hover events of the trigger and the pop-up rather than by polling: a cursor that\n // returns to the trigger — or moves onto the pop-up itself — cancels a hide that is still pending.\n this.hoverHideArmed = true;\n this.hoveredOverEither = undefined;\n this.handleHoverChange();\n }\n }\n\n /**\n * Hides the pop-up after `delay` ms, honoring `preventClose` and the hover state on mouseleave.\n *\n * @docs-private\n */\n hide(delay: number = this.leaveDelay) {\n if (this.canHide()) {\n this.ngZone.run(() => this.instance?.hide(delay));\n }\n }\n\n /**\n * Whether `hide()` hides the pop-up: not under `preventClose`, nor while the pointer that left the trigger rests\n * on the pop-up.\n */\n private canHide(): boolean {\n if (this.preventClose || !this.instance) return false;\n\n // Untracked for the same reason as in `show()`.\n return this.triggerName !== 'mouseleave' || !untracked(() => this.instance!.hovered());\n }\n\n /**\n * Re-evaluates the delayed hide of `hideWithTimeout` after the pointer has entered or left the trigger or the\n * pop-up. Called by the pop-up, a separate class.\n *\n * @internal\n */\n handleHoverChange(): void {\n if (!this.hoverHideArmed) return;\n\n const hovered = this.hovered() || !!this.instance?.hovered();\n\n if (hovered === this.hoveredOverEither) return;\n\n this.hoveredOverEither = hovered;\n\n clearTimeout(this.hoverHideTimeoutId);\n this.hoverHideTimeoutId = undefined;\n\n if (hovered) return;\n\n // Outside the zone: `hide()` re-enters it itself.\n this.ngZone.runOutsideAngular(() => {\n this.hoverHideTimeoutId = setTimeout(() => {\n this.hoverHideTimeoutId = undefined;\n // `hide(0)` because the leave delay has already been waited out here; letting `hide()` apply\n // its default would make the pop-up linger for twice the configured delay.\n this.hide(0);\n }, this.leaveDelay);\n });\n }\n\n /** Records whether the pointer is over the trigger. */\n protected setHovered(value: boolean): void {\n this.hoveredState.set(value);\n this.handleHoverChange();\n }\n\n /**\n * Detaches the overlay (if attached) and clears the current pop-up instance.\n *\n * @docs-private\n */\n detach = (): void => {\n clearTimeout(this.repositionTimeoutId);\n this.repositionTimeoutId = undefined;\n\n this.closingActionsSubscription?.unsubscribe();\n this.disarmHoverHide();\n\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef.detach();\n }\n\n this.instance = null;\n\n // A scroll strategy detaches the overlay without going through `hide()`, and a pop-up destroyed that\n // way completes its visibility stream instead of emitting `false`. Without this the trigger stays\n // `isOpen` for good, and a consumer that guards `show()` with it never opens the pop-up again.\n // Keyed on `isOpen` rather than on `visible`: the latter mirrors the requested state, which `show()`\n // has already set by the time it detaches a previous overlay.\n if (this.isOpen) {\n this.visible = false;\n this.isOpen = false;\n this.visibleChange.emit(false);\n }\n };\n\n /**\n * Create the overlay config and position strategy\n *\n * @docs-private\n */\n createOverlay(): OverlayRef {\n if (this.overlayRef) {\n return this.overlayRef;\n }\n\n // Create connected position strategy that listens for scroll events to reposition.\n this.strategy = this.overlay\n .position()\n .flexibleConnectedTo(this.getResolvedOrigin())\n .withTransformOriginOn(this.originSelector)\n .withFlexibleDimensions(false)\n .withPositions([...EXTENDED_OVERLAY_POSITIONS])\n .withLockedPosition()\n .withScrollableContainers(this.scrollDispatcher.getAncestorScrollContainers(this.getNativeElement()));\n\n this.strategy.positionChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.onPositionChange);\n\n this.overlayRef = this.overlay.create({\n ...this.overlayConfig,\n direction: this.direction || undefined,\n positionStrategy: this.strategy,\n scrollStrategy: this.scrollStrategy()\n });\n\n this.overlayRef.detachments().pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.detach);\n\n return this.overlayRef;\n }\n\n /**\n * Resets the overlay position origin back to the configured origin, the host element by default.\n *\n * @docs-private\n */\n resetOrigin() {\n this.strategy.setOrigin(this.getResolvedOrigin());\n }\n\n /**\n * Positions the pop-up against `origin` — an element, or a rectangle in viewport coordinates such as the one\n * {@link kbqCreateCaretOrigin} keeps on the caret — instead of the host element; `null` restores the host\n * element. An open pop-up moves to the new origin at once.\n *\n * This moves the position origin only. {@link setExternalNativeElement} moves the host itself, and with it\n * the trigger's event listeners, its focus target and the scroll containers the pop-up follows.\n */\n updateOrigin(origin: KbqOverlayOrigin | null): void {\n this.origin = origin;\n\n if (!this.strategy) return;\n\n // Told to the strategy even while the pop-up is closed: the overlay is created once and reused, so an\n // origin bound between two opens would otherwise never reach it.\n this.strategy.setOrigin(this.getResolvedOrigin());\n\n if (!this.overlayRef?.hasAttached()) return;\n\n // Through `updatePosition()`, because the new positions it applies clear the position locked in by\n // `withLockedPosition()`. Re-applying the last position instead would keep the pop-up on the placement\n // picked for the previous origin, with no chance to flip.\n this.updatePosition();\n this.overlayRef.updatePosition();\n }\n\n /**\n * The origin the position strategy is connected to.\n *\n * @docs-private\n */\n protected getResolvedOrigin(): FlexibleConnectedPositionStrategyOrigin {\n return this.origin ? kbqResolveOverlayOrigin(this.origin) : this.getNativeElement();\n }\n\n /**\n * Maps the CDK connection position back to a placement name, emits `placementChange`, and updates classes.\n *\n * @docs-private\n */\n onPositionChange = ($event: ConnectedOverlayPositionChange): void => {\n if (!this.instance) return;\n\n let newPlacement = this.placement;\n\n const { originX, originY, overlayX, overlayY } = $event.connectionPair;\n\n Object.keys(this.availablePositions).some((key) => {\n if (\n originX === this.availablePositions[key].originX &&\n originY === this.availablePositions[key].originY &&\n overlayX === this.availablePositions[key].overlayX &&\n overlayY === this.availablePositions[key].overlayY\n ) {\n newPlacement = key as PopUpPlacements;\n\n return true;\n }\n\n return false;\n });\n\n this.placementChange.emit(newPlacement);\n\n this.updateClassMap(newPlacement);\n\n // CDK rewrites all four inset styles of the pane every time it applies a position — on ancestor\n // scroll, on resize and on `reapplyLastPosition` — wiping the manual insets written by\n // `setStickPosition`. Re-applying them here, after the strategy has run, is what keeps a\n // `stickToWindow` pop-up on its window edge. No-op when `stickToWindow` is unset.\n this.instance.setStickPosition();\n\n this.instance.detectChanges();\n };\n\n /**\n * Rebinds the host DOM listeners (click/hover/focus/keydown) according to the configured triggers.\n *\n * @docs-private\n */\n initListeners() {\n this.clearListeners();\n\n if (this.trigger.includes(PopUpTriggers.Click)) {\n this.listeners.set(...this.createListener('click', this.show));\n }\n\n if (this.trigger.includes(PopUpTriggers.Hover)) {\n this.listeners\n .set(...this.createListener('mouseenter', this.show))\n .set(...this.createListener('mouseleave', this.getMouseLeaveListener()));\n }\n\n if (this.trigger.includes(PopUpTriggers.Focus)) {\n this.listeners\n .set(...this.createListener('focus', this.show))\n .set(...this.createListener('blur', this.hide));\n }\n\n if (this.trigger.includes(PopUpTriggers.Keydown)) {\n this.listeners.set('keydown', (event) => {\n if (event instanceof KeyboardEvent && [ENTER, SPACE].includes(event.keyCode)) {\n // Recorded the way `createListener` does it for every other trigger. Without it the show\n // is still attributed to whichever event ran last, and a stale `focus` there makes the\n // tooltip's keyboard-origin gate swallow the show outright. The event itself carries the\n // key code, so this listener cannot go through `createListener`, which drops it.\n this.triggerName = 'keydown';\n\n this.keydownShowTimeoutId = setTimeout(() => this.show());\n }\n });\n }\n\n this.listeners.forEach(this.addEventListener);\n }\n\n /**\n * Returns the `mouseleave` handler — an immediate hide unless `hideWithTimeout` hands that job to the watchdog.\n *\n * @docs-private\n */\n getMouseLeaveListener(): () => void {\n return () => {\n // With `hideWithTimeout` the hide is owned by the hover watchdog armed in `show()`: it waits for\n // the pointer to leave both the trigger and the pop-up, and re-entering either one cancels it.\n // Hiding from here as well would race that watchdog with an untracked timer and close the pop-up\n // under a returning cursor.\n if (this.hideWithTimeout) return;\n\n this.hide();\n };\n }\n\n /**\n * Updates the position of the current popover.\n *\n * @docs-private\n */\n updatePosition(reapplyPosition: boolean = false) {\n this.overlayRef = this.createOverlay();\n\n const position = (this.overlayRef.getConfig().positionStrategy as FlexibleConnectedPositionStrategy)\n .withPositions(this.getAdjustedPositions())\n .withPush(true);\n\n // Coalesced and tracked: content, context and header each push their own `updateData()` in a single\n // change-detection cycle, and every reposition re-enters `onPositionChange`. One queued task per\n // cycle is enough, and it must not outlive the overlay it repositions.\n if (reapplyPosition && this.repositionTimeoutId === undefined) {\n this.repositionTimeoutId = setTimeout(() => {\n this.repositionTimeoutId = undefined;\n\n if (this.overlayRef?.hasAttached()) {\n position.reapplyLastPosition();\n }\n });\n }\n }\n\n /**\n * Moves browser focus to the pop-up's native element.\n *\n * @docs-private\n */\n focus() {\n this.getNativeElement().focus();\n }\n\n /**\n * Returns the element the pop-up is bound to: the external element when set, otherwise the host element.\n *\n * @docs-private\n */\n getNativeElement(): HTMLElement {\n return this.externalNativeElement || this.elementRef.nativeElement;\n }\n\n /**\n * Sets an external element to anchor and measure the pop-up against instead of the host element.\n *\n * @docs-private\n */\n setExternalNativeElement(value: HTMLElement) {\n this.externalNativeElement = value;\n }\n\n /**\n * Returns a list of positions that are aligned with the element's dimensions and offsets.\n *\n * @docs-private\n */\n protected getAdjustedPositions(): ConnectionPositionPair[] {\n const res: ConnectionPositionPair[] = [];\n // Measured once instead of once per candidate position: every read forces a synchronous layout, and\n // `updateData()` reaches this method on every content, context, header, arrow and offset change.\n const anchorSize = this.arrow ? this.getAnchorSize() : null;\n\n for (const pos of this.getPrioritizedPositions()) {\n const offset: KbqPopupTriggerOffset = anchorSize ? getOffset(pos, anchorSize) : {};\n\n res.push({\n ...pos,\n ...offset\n });\n }\n\n return res;\n }\n\n /**\n * Size of what the pop-up is positioned against: a corner placement shifts the pop-up so that its arrow still\n * points at an anchor narrower than the arrow's inset. The host element by default.\n *\n * @docs-private\n */\n protected getAnchorSize(): { width: number; height: number } {\n return this.origin ? kbqGetOverlayOriginSize(this.origin) : this.getNativeElement().getBoundingClientRect();\n }\n\n /**\n * Maps a priority placement value (or array of values) to the matching connected position pairs.\n *\n * @docs-private\n */\n protected getPriorityPlacementStrategy(value: string | string[]): ConnectionPositionPair[] {\n const result: ConnectionPositionPair[] = [];\n const possiblePositions = Object.keys(this.availablePositions);\n\n if (Array.isArray(value)) {\n value.forEach((position: string) => {\n if (possiblePositions.includes(position)) {\n result.push(this.availablePositions[position]);\n }\n });\n } else if (possiblePositions.includes(value)) {\n result.push(this.availablePositions[value]);\n }\n\n return result;\n }\n\n /**\n * Returns the positions to try: the custom `placementPriority` when set, otherwise the default strategy.\n *\n * @docs-private\n */\n protected getPrioritizedPositions() {\n if (this.placementPriority) {\n return this.getPriorityPlacementStrategy(this.placementPriority);\n }\n\n return POSITION_PRIORITY_STRATEGY[this.placement];\n }\n\n /**\n * Removes all bound host event listeners and clears the listener map.\n *\n * @docs-private\n */\n protected clearListeners() {\n this.listeners.forEach(this.removeEventListener);\n\n this.listeners.clear();\n }\n\n /** Stops the delayed hide of `hideWithTimeout` for the pop-up being detached. */\n private disarmHoverHide(): void {\n this.hoverHideArmed = false;\n clearTimeout(this.hoverHideTimeoutId);\n this.hoverHideTimeoutId = undefined;\n }\n\n /** Wraps a trigger handler so it records the active trigger name and mouse event before running. */\n private createListener(name: string, listener: () => void): [string, (event: unknown) => void] {\n return [\n name,\n (event: unknown) => {\n this.triggerName = name;\n this.saveMouseEvent(event as MouseEvent);\n\n return listener.call(this);\n }\n ];\n }\n\n /** Remembers the last mouse event on `mouseenter`, used for cursor-relative positioning. */\n private saveMouseEvent(event: MouseEvent) {\n if (this.triggerName === 'mouseenter') {\n this.mouseEvent = event;\n }\n }\n\n /** Binds a single event listener to the pop-up's native element. */\n private addEventListener = (listener: EventListener, event: string) => {\n this.getNativeElement().addEventListener(event, listener);\n };\n\n /** Unbinds a single event listener from the pop-up's native element. */\n private removeEventListener = (listener: EventListener, event: string) => {\n this.getNativeElement().removeEventListener(event, listener);\n };\n\n /** (Re)subscribes to the closing-action streams and hides the pop-up, ignoring prevented click events. */\n private subscribeOnClosingActions() {\n this.closingActionsSubscription?.unsubscribe();\n\n this.closingActionsSubscription = this.closingActions()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .pipe(rxDelay(0))\n .subscribe((event) => {\n if (event?.type === 'click' && event.kbqPopoverPreventHide) {\n return;\n }\n\n this.hide();\n });\n }\n}\n","import { isDevMode } from '@angular/core';\n\n/**\n * Runs a consumer-supplied `clearPredicate` defensively: a predicate that throws is reported in dev mode\n * and treated as \"keep this one\", so a broken predicate cannot clear away what it failed to judge.\n *\n * The same call also decides whether the cleaner is offered at all, which is why refusing is the safe\n * answer: a control that would act on a broken rule is hidden instead.\n *\n * @docs-private\n */\nexport function runClearPredicate<T>(clearPredicate: (item: T) => boolean, item: T): boolean {\n try {\n return clearPredicate(item);\n } catch (error) {\n if (isDevMode()) {\n // Notify developers of errors in their predicate.\n // eslint-disable-next-line no-console\n console.warn(error);\n }\n\n return false;\n }\n}\n","import { ScrollDispatcher, ScrollStrategy } from '@angular/cdk/overlay';\nimport { inject, InjectionToken } from '@angular/core';\nimport { kbqRepositionScrollStrategyFactory } from '../overlay/reposition-scroll-strategy';\n\n/**\n * Minimum option count threshold for displaying select search.\n * Search is hidden when fewer options are available.\n */\nexport const KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD = 10;\n\n/**\n * The select panel will only \"fit\" inside the viewport if it is positioned at\n * this value or more away from the viewport boundary.\n *\n * @internal\n */\nexport const SELECT_PANEL_VIEWPORT_PADDING = 8;\n\n/**\n * Injection token that determines the scroll handling while a select is open.\n *\n * The root default keeps the select usable when it is reached outside `KbqSelectModule`'s injector - imported\n * as a bare standalone component, pulled in through another standalone component (`KbqTimezoneSelect`,\n * `KbqCalendarHeader`), or rendered in a component built from the root injector, as `KbqModalService` does.\n * Providing the token anywhere still wins over this default.\n */\nexport const KBQ_SELECT_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>('kbq-select-scroll-strategy', {\n providedIn: 'root',\n factory: () => kbqSelectScrollStrategyProviderFactory(inject(ScrollDispatcher))\n});\n\n/** @docs-private */\nexport function kbqSelectScrollStrategyProviderFactory(scrollDispatcher: ScrollDispatcher): () => ScrollStrategy {\n return kbqRepositionScrollStrategyFactory(scrollDispatcher);\n}\n","import { CdkConnectedOverlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n input,\n isWritableSignal,\n Signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { KBQ_FORM_FIELD_REF, KbqFormFieldRef } from '../form-field';\nimport { END, ESCAPE, HOME, SPACE } from '../keycodes';\nimport {\n KBQ_PANEL_DEFAULT_MAX_HEIGHT,\n KbqPanelSpaceContext,\n kbqResolveTriggerFirstRowOffset,\n kbqShouldAnchorPanelToFirstRow\n} from '../overlay/panel-height';\nimport {\n kbqGetPanelWidthOrigin,\n KbqPanelMinWidth,\n KbqPanelWidth,\n KbqPanelWidthOrigin,\n kbqResolvePanelWidth\n} from '../overlay/panel-width';\nimport { KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS } from '../pop-up/constants';\nimport { KBQ_WINDOW } from '../tokens';\nimport { KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD, SELECT_PANEL_VIEWPORT_PADDING } from './constants';\n\n@Directive({\n selector: 'kbq-select-trigger, [kbq-select-trigger]'\n})\nexport class KbqSelectTrigger {}\n\n@Directive({\n selector: 'kbq-select-matcher, [kbq-select-matcher]'\n})\nexport class KbqSelectMatcher {\n readonly useDefaultHandlers = input<boolean, unknown>(true, { transform: booleanAttribute });\n}\n\n@Directive({\n selector: '[kbq-select-search-empty-result]',\n host: {\n class: 'kbq-select-search-empty-result kbq-select__no-options-message'\n },\n exportAs: 'kbqSelectSearchEmptyResult'\n})\nexport class KbqSelectSearchEmptyResult {}\n\n@Directive({\n selector: 'kbq-select-footer, [kbq-select-footer]',\n host: { class: 'kbq-select__footer' }\n})\nexport class KbqSelectFooter {}\n\n/**\n * Action inside a `kbq-select-footer`, drawn as a row of the drop-down menu rather than as a form\n * button. Apply it to a native `button` or `a` so activation and semantics stay native.\n */\n@Directive({\n selector: '[kbq-select-footer-item]',\n host: { class: 'kbq-select__footer-item' }\n})\nexport class KbqSelectFooterItem {}\n\n@Directive({\n selector: '[kbqSelectSearch]',\n host: {\n '(keydown)': 'handleKeydown($event)'\n },\n exportAs: 'kbqSelectSearch'\n})\nexport class KbqSelectSearch implements AfterContentInit {\n protected formField = inject<KbqFormFieldRef>(KBQ_FORM_FIELD_REF, { optional: true })!;\n\n /**\n * Captured here rather than built where it is used: `takeUntilDestroyed()` reads the current\n * `DestroyRef` from the injection context, and the subscription below is created in a microtask,\n * which has none. Field initialization runs in the constructor's context, where it does.\n */\n private readonly takeUntilDestroyed = takeUntilDestroyed<any>();\n\n readonly changes: EventEmitter<string> = new EventEmitter<string>();\n\n isSearchChanged: boolean = false;\n\n get ngControl() {\n return this.formField.control().ngControl;\n }\n\n constructor() {\n this.formField.inOverlay.set(true);\n }\n\n setPlaceholder(value: string): void {\n const placeholder = this.formField.control().placeholder;\n\n // The search control is `KbqInput` (see `ngAfterContentInit`), whose placeholder can be written.\n if (isWritableSignal(placeholder)) {\n placeholder.set(value);\n }\n }\n\n focus(): void {\n this.formField.focus();\n }\n\n reset(): void {\n this.ngControl?.reset();\n }\n\n value() {\n return this.formField.control().value();\n }\n\n ngAfterContentInit(): void {\n if (this.formField.control().controlType !== 'input') {\n throw Error('KbqSelectSearch does not work without kbqInput');\n }\n\n if (!this.ngControl) {\n throw Error('KbqSelectSearch does not work without ngControl');\n }\n\n // The subscription is deferred, so the directive can be destroyed before it even exists —\n // the captured operator owns it either way, while an `ngOnDestroy` unsubscribe would not.\n Promise.resolve().then(() => {\n this.ngControl!.valueChanges!.pipe(this.takeUntilDestroyed).subscribe((value) => {\n this.isSearchChanged = true;\n this.changes.next(value);\n });\n });\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (event.keyCode === ESCAPE) {\n if (this.value()) {\n this.reset();\n event.stopPropagation();\n }\n }\n\n if ([SPACE, HOME, END].includes(event.keyCode)) {\n event.stopPropagation();\n }\n }\n}\n\n/**\n * Abstract class representing a customizable select component with an overlay.\n *\n * This class provides base functionality for handling the overlay positioning.\n *\n * @docs-private\n */\n@Directive()\nexport abstract class KbqAbstractSelect {\n /** Overlay directive of the panel. Subclasses resolve it with their own view query. */\n protected abstract overlayDir: CdkConnectedOverlay;\n\n /** Last measured bounding rect of the trigger. Subclasses refresh it whenever the panel opens. */\n protected abstract triggerRect: DOMRect;\n\n /** Positions the `cdkConnectedOverlayPositions` input reads. */\n abstract positions: ConnectedPosition[];\n\n /** Whether the trigger lays its selected values out in rows. */\n protected abstract readonly multiline: Signal<boolean>;\n\n /** Scrollable option list inside the panel. */\n protected abstract readonly optionsContainer: Signal<ElementRef<HTMLElement> | undefined>;\n\n /** Margin the overlay keeps from the viewport edge, i.e. `cdkConnectedOverlayViewportMargin`. */\n protected abstract readonly viewportMargin: number;\n\n /**\n * Row container of a multi-selection trigger. Absent for a single value, an empty trigger and a custom\n * matcher or trigger — all of which have no rows for the panel to anchor to.\n */\n protected readonly multilineMatchList = viewChild<ElementRef<HTMLElement>>('multilineMatchList');\n\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n protected readonly window = inject(KBQ_WINDOW);\n\n /** Whether the panel is open. Declared as a method because the two selects spell the state differently. */\n protected abstract isPanelOpen(): boolean;\n\n /** Element the overlay is positioned and sized against. */\n protected abstract getOverlayOriginElement(): HTMLElement | undefined;\n\n /** Overlay panel class. */\n protected readonly overlayPanelClass = 'kbq-select-overlay';\n\n /** Width of the overlay panel. */\n protected overlayWidth: string | number = '';\n\n /** Minimum width of the overlay panel. */\n protected overlayMinWidth: string | number = '';\n\n /**\n * Height of everything in the panel that is not the option list — the trigger gap the pane pads itself\n * with, the list padding, a search field and a footer.\n *\n * The same for every anchor: the below and overlap panes pad the top, the above pane pads the bottom, and\n * all three pad by the same gap — which is what keeps the anchor decision from feeding back into itself.\n */\n private panelChromeHeight = 0;\n\n /** Transparent gap the pane pads itself with, which the anchor has to be raised by. */\n private panelGapHeight = 0;\n\n /**\n * Cap the option list is rendered with, in pixels. Measured off the panel rather than derived from\n * `panelMaxHeight`, because `--kbq-select-panel-size-max-height` is what the list actually obeys and a\n * consumer can override it. Seeded with the stylesheet's own default, which is what a DOM that computes\n * no layout — the server, jsdom — leaves in force.\n */\n private panelMaxHeightCap = KBQ_PANEL_DEFAULT_MAX_HEIGHT;\n\n private resizeSubscription = Subscription.EMPTY;\n\n /**\n * Resolves the overlay panel size for the current trigger geometry and stores it for the\n * `cdkConnectedOverlay` width bindings.\n */\n protected updateOverlayWidth(\n panelWidth: KbqPanelWidth,\n panelMinWidth: KbqPanelMinWidth,\n origin: KbqPanelWidthOrigin\n ): void {\n const { width, minWidth } = kbqResolvePanelWidth(panelWidth, panelMinWidth, kbqGetPanelWidthOrigin(origin));\n\n this.overlayWidth = width;\n this.overlayMinWidth = minWidth;\n }\n\n /**\n * Freezes the panel at its rendered width so that filtering the options does not reflow it.\n * Does nothing when the width is already pinned.\n */\n protected lockOverlayWidthForSearch(panel: ElementRef<HTMLElement> | undefined): void {\n // Compare against the unset sentinel rather than a truthy check — an explicit zero-width panel\n // resolves to `'0px'`, and a measured width below can be `0`; both mean \"already pinned\".\n if (this.overlayWidth !== '') return;\n\n const measuredPanelWidth = panel?.nativeElement.getBoundingClientRect().width;\n\n if (measuredPanelWidth) {\n this.overlayWidth = measuredPanelWidth;\n this.changeDetectorRef.markForCheck();\n }\n }\n\n protected setOverlayPosition() {\n // As in `reanchorPanel()`: a disposed overlay keeps its `overlayRef` but loses `hostElement`, and an\n // expansion or selection change can still arrive once the select has closed for good.\n if (!this.overlayDir.overlayRef?.hostElement) return;\n\n this.resetOverlay();\n\n const overlayRect = this.getOverlayRect();\n // Window width without scrollbar\n const windowWidth = this.overlayDir.overlayRef?.hostElement.clientWidth;\n let offsetX: number = 0;\n let overlayMaxWidth: number;\n\n // Determine if select overflows on either side.\n const leftOverflow = -overlayRect.left;\n const rightOverflow = overlayRect.right - windowWidth;\n\n // If the element overflows on either side, reduce the offset to allow it to fit.\n if (leftOverflow > 0 || rightOverflow > 0) {\n [offsetX, overlayMaxWidth] = this.calculateOverlayOffsetX(offsetX);\n this.overlayDir.overlayRef.overlayElement.style.maxWidth = `${overlayMaxWidth}px`;\n // reset the minWidth property\n this.overlayDir.overlayRef.overlayElement.style.minWidth = '';\n }\n\n // Set the offset directly in order to avoid having to go through change detection and\n // potentially triggering \"changed after it was checked\" errors. Round the value to avoid\n // blurry content in some browsers.\n this.overlayDir.offsetX = Math.round(offsetX);\n this.overlayDir.overlayRef.updatePosition();\n }\n\n protected calculateOverlayOffsetX(baseOffsetX: number): number[] {\n let offsetX = baseOffsetX;\n const windowWidth = this.overlayDir.overlayRef?.hostElement.clientWidth;\n const { left: leftIndent, right: triggerRight, width: triggerWidth } = this.triggerRect;\n const { width: overlayRectWidth } = this.getOverlayRect();\n const rightIndent = windowWidth - triggerRight;\n // Setting direction of dropdown expansion\n const isRightDirection = leftIndent <= rightIndent;\n\n const indent = isRightDirection ? rightIndent : leftIndent;\n const maxDropdownWidth = indent + triggerWidth - SELECT_PANEL_VIEWPORT_PADDING;\n const overlayMaxWidth = overlayRectWidth < maxDropdownWidth ? overlayRectWidth : maxDropdownWidth;\n\n if (!isRightDirection) {\n const leftOffset = triggerRight - overlayMaxWidth;\n\n offsetX -= leftIndent - leftOffset;\n }\n\n return [offsetX, overlayMaxWidth];\n }\n\n protected getOverlayRect(): DOMRect {\n return this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();\n }\n\n protected resetOverlay(): void {\n this.overlayDir.overlayRef.hostElement.classList.add(this.overlayPanelClass);\n this.overlayDir.offsetX = 0;\n this.overlayDir.overlayRef.overlayElement.style.maxWidth = 'unset';\n this.overlayDir.overlayRef.updatePosition();\n }\n\n /**\n * Returns `positions` with the first-row anchor added, updated or removed, or `null` when the array\n * already says what it should — so that the caller can skip the change detection an edit would need.\n *\n * The anchor goes LAST. The overlay returns on the first position that fits completely, so an entry at the\n * end is reached exactly when neither the below nor the above position works, which is the rule this\n * implements. Pass `null` to drop it again.\n *\n * The result is meant to be assigned to the field the `cdkConnectedOverlayPositions` input reads, NOT\n * handed to `withPositions()` on the strategy: `CdkConnectedOverlay.ngOnChanges` rebuilds the strategy\n * from that field on ANY input change — the width `lockOverlayWidthForSearch` pins is one — so a list\n * applied only to the strategy would be dropped again without a trace.\n */\n protected withOverlapPosition(positions: ConnectedPosition[], offsetY: number | null): ConnectedPosition[] | null {\n // `panelClass` is `string | string[]`, and `positions` is public, so an anchor can come back in a\n // shape a strict comparison would miss — which would append a second anchor on every recompute and\n // leave every one of them behind on close.\n const isOverlap = ({ panelClass }: ConnectedPosition) =>\n Array.isArray(panelClass)\n ? panelClass.includes(KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS)\n : panelClass === KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS;\n const current = positions.find(isOverlap);\n const withoutOverlap = () => positions.filter((position) => !isOverlap(position));\n\n if (offsetY === null) return current ? withoutOverlap() : null;\n\n // Rounded so that sub-pixel layout jitter cannot rebuild the array on every selection change.\n const roundedOffsetY = Math.round(offsetY);\n\n if (current?.offsetY === roundedOffsetY) return null;\n\n return [\n ...withoutOverlap(),\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: roundedOffsetY,\n panelClass: KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS\n }\n ];\n }\n\n /**\n * Re-resolves the panel position with the first-row anchor brought up to date.\n *\n * Never call this from a `positionChange` subscriber: CDK records the position it applied AFTER the\n * subscriber returns, so an anchor resolved from inside that frame is overwritten by the pre-anchor\n * position, and `cdkConnectedOverlayLockPosition` then replays that stale one on the next scroll.\n */\n protected reanchorPanel(): void {\n // `hostElement` is nulled by `OverlayRef.dispose()`, which is what a queued call landing after the\n // component was destroyed has to be told apart by — `overlayRef` itself outlives disposal.\n if (!this.overlayDir?.overlayRef?.hostElement) return;\n\n // Only when the anchor actually moved. `setOverlayPosition()` is a one-shot: it clears the pane's\n // `minWidth` and derives the panel offset from the width it had before that, so a second run over\n // the same open measures a narrower pane. In RTL the pane's x is `documentWidth - (x + paneWidth)`,\n // so that narrower measurement moves the panel; in LTR only `left` is written and nothing moves.\n if (this.updatePanelAnchor()) {\n this.setOverlayPosition();\n }\n }\n\n /**\n * Re-resolves the anchor while the panel is open. A resize rewraps the trigger's rows and changes the\n * room beside it at once, and CDK re-applies the position on its own, so without this the anchor it\n * resolves against is the one measured for the old viewport.\n */\n protected subscribeToPanelResize(): void {\n this.resizeSubscription.unsubscribe();\n\n if (!this.multiline()) return;\n\n this.resizeSubscription = fromEvent(this.window, 'resize')\n .pipe(debounceTime(50))\n .subscribe(() => this.reanchorPanel());\n }\n\n /** Drops the resize subscription the open set up. */\n protected unsubscribeFromPanelResize(): void {\n this.resizeSubscription.unsubscribe();\n }\n\n /**\n * Keeps the first-row anchor in `positions`: a third position that puts the panel just below the\n * trigger's first row and over the rest of it, for a multiline trigger that has grown taller than the\n * panel and fits on neither side of it.\n *\n * The anchor goes last, and the overlay stops at the first position that fits completely, so it is\n * reached exactly when neither `below` nor `above` works. `kbqShouldAnchorPanelToFirstRow` holds the\n * rest of the rule.\n *\n * Returns whether the array changed, so that a caller can skip the reposition an unchanged anchor does\n * not need. Updating the array is all there is to do here — `setOverlayPosition()` rebuilds the strategy\n * and resolves the position again.\n */\n protected updatePanelAnchor(): boolean {\n if (!this.multiline() || !this.isPanelOpen() || !this.overlayDir?.overlayRef) return false;\n\n // A measurement that cannot be trusted would leave the seeds in force, and a zero chrome height\n // overstates the room beside the trigger by the whole of a search field and a footer.\n if (!this.measurePanelChrome()) return false;\n\n const context = this.resolvePanelSpaceContext();\n\n if (!context) return false;\n\n const firstRowOffset = this.resolveFirstRowOffset();\n const anchorToFirstRow = kbqShouldAnchorPanelToFirstRow(context, {\n firstRowOffset,\n naturalListHeight: this.measureNaturalListHeight(),\n anchored: this.isPanelAnchoredToFirstRow()\n });\n // The pane pads the gap inside itself, so the anchor is raised by it: the painted panel then starts\n // where the second row does, instead of leaving the top of that row's tags showing through the band.\n const offsetY = anchorToFirstRow && firstRowOffset !== null ? firstRowOffset - this.panelGapHeight : null;\n const positions = this.withOverlapPosition(this.positions, offsetY);\n\n if (!positions) return false;\n\n this.positions = positions;\n // Pushes the new array into `CdkConnectedOverlay`: the strategy is rebuilt from the directive's\n // input, not from this field, so without this the reposition would resolve against the old list.\n this.changeDetectorRef.detectChanges();\n\n return true;\n }\n\n /**\n * Distance from the origin's top edge to just below the trigger's first row, or `null` when there is no\n * row to anchor to.\n */\n private resolveFirstRowOffset(): number | null {\n const origin = this.getOverlayOriginElement();\n const list = this.multilineMatchList()?.nativeElement;\n\n if (!origin || !list) return null;\n\n // The rows follow document order, so the scan stops at the first child that starts lower. Collapsed\n // children are skipped: a custom tag template can render a hidden node, and its all-zero rect would\n // otherwise be taken for the topmost row and push every real tag out of it.\n let firstRowTop: number | null = null;\n let firstRowBottom = Number.NEGATIVE_INFINITY;\n\n for (const child of Array.from(list.children)) {\n const { top, bottom, width, height } = child.getBoundingClientRect();\n\n // A collapsed child occupies no row and adds nothing to one, so it is skipped whichever way it\n // collapsed — its rect would otherwise be read as a row of its own.\n if (width === 0 || height === 0) continue;\n\n if (firstRowTop === null) {\n firstRowTop = top;\n // Sub-pixel layout only makes the tops of one row equal to within a pixel, and a custom tag\n // template can put several elements on the same row.\n } else if (top - firstRowTop >= 1) {\n break;\n }\n\n firstRowBottom = Math.max(firstRowBottom, bottom);\n }\n\n if (firstRowTop === null) return null;\n\n const originRect = origin.getBoundingClientRect();\n const listRect = list.getBoundingClientRect();\n\n return kbqResolveTriggerFirstRowOffset({\n originTop: originRect.top,\n originBottom: originRect.bottom,\n listTop: listRect.top,\n listBottom: listRect.bottom,\n firstRowBottom,\n // The rows keep their laid-out position while their container scrolls, so the scroll offset is\n // what converts them back into the list's own coordinates.\n listScrollTop: list.scrollTop\n });\n }\n\n /**\n * Height the option list takes with no viewport clamp in force.\n *\n * Read from `scrollHeight`, which reports the whole content rather than what the pane happens to show\n * right now — the anchor decision runs on a pane the overlay may be about to move.\n */\n private measureNaturalListHeight(): number {\n if (this.isListHeightPinnedToCap()) return this.panelMaxHeightCap;\n\n const content = this.optionsContainer()?.nativeElement;\n\n if (!content) return this.panelMaxHeightCap;\n\n // `clientHeight` less the computed content box is the list's own vertical padding, which\n // `scrollHeight` counts and the cap does not.\n const padding = content.clientHeight - parseFloat(this.window.getComputedStyle(content).height);\n\n return Math.min(this.panelMaxHeightCap, content.scrollHeight - (Number.isFinite(padding) ? padding : 0));\n }\n\n /**\n * Whether the option list renders at the cap whatever its content is, which a\n * `cdk-virtual-scroll-viewport` does by pinning both its `min-height` and its `max-height` to the token.\n */\n protected isListHeightPinnedToCap(): boolean {\n return false;\n }\n\n /** Geometry the panel height calculation needs, or `null` when there is nothing to measure against. */\n private resolvePanelSpaceContext(): KbqPanelSpaceContext | null {\n const origin = this.getOverlayOriginElement();\n\n if (!origin) return null;\n\n const { top, bottom } = origin.getBoundingClientRect();\n\n return {\n triggerTop: top,\n triggerBottom: bottom,\n // `clientHeight`, not `innerHeight`: the overlay narrows the viewport the same way, and the two\n // differ by the horizontal scrollbar — enough for a position we think fits to be rejected.\n viewportHeight: this.window.document.documentElement.clientHeight,\n viewportMargin: this.viewportMargin,\n chromeHeight: this.panelChromeHeight\n };\n }\n\n /** Whether the panel is currently drawn over the trigger, read from the class the overlay applies. */\n private isPanelAnchoredToFirstRow(): boolean {\n return this.overlayDir.overlayRef.overlayElement.classList.contains(KBQ_CONNECTED_OVERLAY_OVERLAP_CLASS);\n }\n\n /**\n * Records the part of the panel that is not the option list, the gap the pane pads itself with, and the\n * cap the list is rendered with. Returns `false` when the panel cannot be measured, which is the caller's\n * signal to leave the anchor alone rather than decide against a stale value.\n */\n private measurePanelChrome(): boolean {\n const pane = this.overlayDir.overlayRef.overlayElement;\n const content = this.optionsContainer()?.nativeElement;\n\n if (!content) return false;\n\n // `--kbq-select-panel-size-max-height` caps the list's *content box* — the scroller is `box-sizing:\n // initial` — so its own padding counts as chrome. The computed `height` is that content box, which is\n // exactly what the cap has to be measured against.\n const { height, maxHeight } = this.window.getComputedStyle(content);\n const { paddingTop, paddingBottom } = this.window.getComputedStyle(pane);\n const chromeHeight = pane.getBoundingClientRect().height - parseFloat(height);\n const cap = parseFloat(maxHeight);\n\n if (!Number.isFinite(chromeHeight) || chromeHeight < 0) return false;\n\n this.panelChromeHeight = chromeHeight;\n // Whichever side the current position pads, the gap is the same one the anchored pane will pad.\n this.panelGapHeight = Math.max(parseFloat(paddingTop) || 0, parseFloat(paddingBottom) || 0);\n\n // `none`, `''` and a DOM without layout all yield NaN, which leaves the seed in force.\n if (Number.isFinite(cap) && cap > 0) {\n this.panelMaxHeightCap = cap;\n }\n\n return true;\n }\n\n protected resolveSearchMinOptionsThreshold(value?: 'auto' | number) {\n return value === 'auto' ? KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD : value;\n }\n}\n","import { isDevMode } from '@angular/core';\n\n/**\n * Runs a consumer-supplied `compareWith` defensively: a comparator that throws is reported in dev mode\n * and treated as \"no match\", so one bad comparison cannot take a whole selection down with it.\n *\n * Callers own the `null` policy — `KbqSelect` refuses to match a `null` option value, `KbqListSelection`\n * lets the comparator decide — so nothing is filtered here.\n *\n * @docs-private\n */\nexport function runCompareWith<T>(compareWith: (o1: T, o2: T) => boolean, first: T, second: T): boolean {\n try {\n return compareWith(first, second);\n } catch (error) {\n if (isDevMode()) {\n // Notify developers of errors in their comparator.\n // eslint-disable-next-line no-console\n console.warn(error);\n }\n\n return false;\n }\n}\n","/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n *\n * @docs-private\n */\nexport function getKbqSelectDynamicMultipleError(): Error {\n return Error('Cannot change `multiple` mode of select after initialization.');\n}\n\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n *\n * @docs-private\n */\nexport function getKbqSelectNonArrayValueError(): Error {\n return Error('Value must be an array in multiple-selection mode.');\n}\n\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n *\n * @docs-private\n */\nexport function getKbqSelectNonFunctionValueError(): Error {\n return Error('`compareWith` must be a function.');\n}\n","import { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n/**\n * @deprecated Nothing in the library uses it. Measure the scrollbar of the element that scrolls instead:\n * `element.offsetWidth - element.clientWidth`. Will be removed in 22.0.0.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqMeasureScrollbarService {\n protected readonly document = inject<Document>(DOCUMENT);\n private readonly platform = inject(Platform);\n\n get scrollBarWidth(): number {\n if (this._scrollBarWidth) {\n return this._scrollBarWidth;\n }\n\n this.initScrollBarWidth();\n\n return this._scrollBarWidth;\n }\n\n private _scrollBarWidth: number;\n private scrollbarMeasure = {\n position: 'absolute',\n top: '-9999px',\n width: '50px',\n height: '50px',\n overflow: 'scroll'\n };\n\n constructor() {\n this.initScrollBarWidth();\n }\n\n initScrollBarWidth() {\n if (!this.platform.isBrowser) {\n this._scrollBarWidth = 0;\n\n return;\n }\n\n const scrollDiv = this.document.createElement('div');\n\n for (const scrollProp in this.scrollbarMeasure) {\n if (this.scrollbarMeasure.hasOwnProperty(scrollProp)) {\n scrollDiv.style[scrollProp] = this.scrollbarMeasure[scrollProp];\n }\n }\n\n this.document.body.appendChild(scrollDiv);\n\n const width = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\n this.document.body.removeChild(scrollDiv);\n this._scrollBarWidth = width;\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n effect,\n inject,\n Injectable,\n InjectionToken,\n PLATFORM_ID,\n Provider,\n Renderer2,\n RendererFactory2,\n REQUEST,\n signal,\n untracked\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EMPTY, Observable } from 'rxjs';\nimport { KBQ_WINDOW } from '../tokens';\n\n/** Media query behind `KbqThemeService.mode`'s `'auto'` resolution. */\nconst PREFERS_DARK_QUERY = '(prefers-color-scheme: dark)';\n\n/**\n * Light/dark polarity of a `KbqThemeConfig`. Drives `mode()` resolution and is the strictly-typed value\n * to reach for when something (e.g. CSS `light-dark()`) needs to know which of the two is active.\n */\nexport type KbqThemeColorScheme = 'light' | 'dark';\n\n/** Selection understood by `KbqThemeService`. The only way to select a theme — see `setMode()`. */\nexport type KbqThemeMode = 'auto' | KbqThemeColorScheme;\n\n/** A theme registered with `KbqThemeService`, resolved by `mode()` via its required `colorScheme`. */\nexport interface KbqThemeConfig {\n name: string;\n /** CSS class applied to the document body when this theme is active. */\n className: string;\n colorScheme: KbqThemeColorScheme;\n}\n\n/** CSS class names for `KBQ_DEFAULT_THEMES`, the built-in light/dark theme set. */\nexport enum KbqThemeSelector {\n /** Class for the built-in light theme. */\n Light = 'kbq-light',\n /** Class for the built-in dark theme. */\n Dark = 'kbq-dark'\n}\n\n/** Theme names for `KBQ_DEFAULT_THEMES`, the built-in light/dark theme set. */\nexport enum KbqThemeNames {\n /** Name for the built-in light theme. */\n Light = 'light',\n /** Name for the built-in dark theme. */\n Dark = 'dark'\n}\n\n/** The built-in light/dark theme set — `KBQ_THEME_CONFIG`'s default `themes`. */\nexport const KBQ_DEFAULT_THEMES: KbqThemeConfig[] = [\n { name: KbqThemeNames.Light, className: KbqThemeSelector.Light, colorScheme: 'light' },\n { name: KbqThemeNames.Dark, className: KbqThemeSelector.Dark, colorScheme: 'dark' }\n];\n\n/** Settings accepted by `KBQ_THEME_CONFIG` / `kbqThemeProvider()`. */\nexport interface KbqThemeSettings<T extends KbqThemeConfig = KbqThemeConfig> {\n /** Themes available to the service. Defaults to `KBQ_DEFAULT_THEMES`. */\n themes: T[];\n /** Initial mode, used only when nothing is persisted yet in the `KBQ_THEME_STORE`. Defaults to `'auto'`. */\n mode: KbqThemeMode;\n\n /**\n * Name of the theme pinned initially, overriding `mode` resolution — see `KbqThemeService.staticTheme`.\n * Used only when nothing is persisted yet in the `KBQ_THEME_STORE` — a `KbqThemeStore` reads a pin the\n * user cleared and one that was never set back the same way, so a persisted mode is what tells the two\n * apart. Clearing the pin through `selectTheme(null)` without ever calling `setMode()` leaves nothing\n * persisted, and this theme applies again on the next load. Defaults to `null`.\n */\n theme: string | null;\n\n /**\n * Key used to persist the selection — a `localStorage` key or cookie name, depending on `KBQ_THEME_STORE`.\n * Defaults to `'kbq-theme-mode'`.\n */\n storageKey: string;\n}\n\nconst KBQ_THEME_DEFAULT_SETTINGS: KbqThemeSettings = {\n themes: KBQ_DEFAULT_THEMES,\n mode: 'auto',\n theme: null,\n storageKey: 'kbq-theme-mode'\n};\n\n/** Injection token for `KbqThemeService`'s settings. Configure via `kbqThemeProvider()`, not this directly. */\nexport const KBQ_THEME_CONFIG = new InjectionToken<KbqThemeSettings>('KBQ_THEME_CONFIG', {\n providedIn: 'root',\n factory: () => KBQ_THEME_DEFAULT_SETTINGS\n});\n\n/**\n * Configures `KbqThemeService` — registers custom themes, sets the initial mode, and how it's persisted.\n * Only the properties you pass are overridden; anything omitted keeps its `KBQ_THEME_DEFAULT_SETTINGS` value.\n */\nexport const kbqThemeProvider = <T extends KbqThemeConfig = KbqThemeConfig>(\n config: Partial<KbqThemeSettings<T>>\n): Provider => ({\n provide: KBQ_THEME_CONFIG,\n useValue: { ...KBQ_THEME_DEFAULT_SETTINGS, ...config }\n});\n\n/**\n * Strategy used by `KbqThemeService` to persist and restore `mode()`.\n *\n * Provide a custom implementation through the `KBQ_THEME_STORE` token to change where it's stored\n * (e.g. `sessionStorage`, a backend), or to disable persistence entirely.\n */\nexport interface KbqThemeStore {\n /**\n * Returns the previously saved mode, or `null` when nothing is stored/available. Raw value only —\n * applying `KbqThemeSettings.mode` as the default for a `null`/invalid result is the caller's job\n * (see `KbqThemeService`'s `readMode()`), not this method's.\n */\n getMode(): KbqThemeMode | null;\n /** Persists the mode. */\n setMode(mode: KbqThemeMode): void;\n\n /**\n * Returns the previously saved static theme name, or `null` when nothing is available.\n * Raw value only — applying `KbqThemeSettings.theme` as the default is the caller's job, not this method's.\n */\n getStaticTheme(): string | null;\n /** Persists the static theme name, or clears it when `null`. */\n setStaticTheme(name: string | null): void;\n\n /**\n * Optional. Emits whenever the stored values change outside this instance — the same app open in\n * another tab, most commonly. `KbqThemeService` re-reads the store on every emission, so a theme\n * switched in one tab reaches the others. Leave it out when the storage has no way to report that.\n */\n changes?: Observable<void>;\n}\n\n/**\n * Default `KbqThemeStore` implementation backed by `localStorage`.\n *\n * All access is guarded so it is safe on the server (SSR) and in environments where storage throws on access\n * (private mode, sandboxed iframes). The storage key is configured via `KBQ_THEME_CONFIG.storageKey`\n * (see `kbqThemeProvider()`).\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqThemeLocalStorageStore implements KbqThemeStore {\n private readonly window = inject(KBQ_WINDOW);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly storageKey = inject(KBQ_THEME_CONFIG).storageKey;\n private readonly staticThemeStorageKey = `${this.storageKey}-static`;\n\n /**\n * `storage` fires only in the *other* documents of the same origin, never in the one that wrote the\n * value, so this reports exactly the external changes `KbqThemeStore.changes` is meant to report,\n * with no echo of this instance's own writes. `EMPTY` on the server, which has no other tabs to hear\n * from — a listener there would never fire.\n */\n readonly changes: Observable<void> = this.isBrowser\n ? new Observable<void>((subscriber) => {\n const listener = ({ key }: StorageEvent) => {\n // `key === null` is `localStorage.clear()` — every key at once, this store's included.\n if (key === null || key === this.storageKey || key === this.staticThemeStorageKey) {\n subscriber.next();\n }\n };\n\n this.window.addEventListener('storage', listener);\n\n return () => this.window.removeEventListener('storage', listener);\n })\n : EMPTY;\n\n getMode(): KbqThemeMode | null {\n try {\n return this.window.localStorage.getItem(this.storageKey) as KbqThemeMode | null;\n } catch {\n // No-op on the server, or wherever `localStorage` is unavailable/throws (private mode, sandboxed iframes).\n return null;\n }\n }\n\n setMode(mode: KbqThemeMode): void {\n try {\n this.window.localStorage.setItem(this.storageKey, mode);\n } catch {\n // Ignore storage write failures (server-side, quota exceeded, disabled/blocked storage, etc.).\n }\n }\n\n getStaticTheme(): string | null {\n try {\n // `|| null`: an empty string means \"cleared\" (see `setStaticTheme()`) — never a real theme name.\n return this.window.localStorage.getItem(this.staticThemeStorageKey) || null;\n } catch {\n return null;\n }\n }\n\n setStaticTheme(name: string | null): void {\n try {\n // Not `setItem(key, null)` — `localStorage` coerces the value to the string `\"null\"`, which would\n // then read back as if it were a real theme name. An empty string is unambiguous, since no theme\n // has an empty `name`, and `getStaticTheme()` treats it the same as an absent key.\n this.window.localStorage.setItem(this.staticThemeStorageKey, name ?? '');\n } catch {\n // Ignore storage write failures (server-side, quota exceeded, disabled/blocked storage, etc.).\n }\n }\n}\n\n/**\n * `KbqThemeStore` implementation backed by a cookie, for apps with **live** Angular SSR — a cookie travels\n * with the request, so the server can read it and render the right theme immediately, unlike `localStorage`.\n * On the server it reads the incoming request's `Cookie` header itself, so no bootstrap wiring is needed.\n * Not useful for a statically prerendered site — there is no request there, so use\n * `KbqThemeLocalStorageStore` instead.\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqThemeCookieStore implements KbqThemeStore {\n private readonly document = inject(DOCUMENT);\n /** The incoming request during a server render — the only cookie source there. `null` in the browser. */\n private readonly request = inject(REQUEST, { optional: true });\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly storageKey = inject(KBQ_THEME_CONFIG).storageKey;\n private readonly staticThemeStorageKey = `${this.storageKey}-static`;\n\n getMode(): KbqThemeMode | null {\n return this.readCookie(this.storageKey) as KbqThemeMode | null;\n }\n\n setMode(mode: KbqThemeMode): void {\n this.writeCookie(this.storageKey, mode);\n }\n\n getStaticTheme(): string | null {\n // `|| null`: an empty string means \"cleared\" (see `setStaticTheme()`) — never a real theme name.\n return this.readCookie(this.staticThemeStorageKey) || null;\n }\n\n setStaticTheme(name: string | null): void {\n // An empty string is unambiguous, since no theme has an empty `name` — same reasoning as\n // `KbqThemeLocalStorageStore`. Goes through the same `writeCookie()` as every other value, so it\n // gets the same skip-if-unchanged behavior instead of needing a separate expiry branch.\n this.writeCookie(this.staticThemeStorageKey, name ?? '');\n }\n\n private readCookie(key: string): string | null {\n // `document` is a cookie jar only in the browser: the server's DOM implementation (domino, bundled\n // into `@angular/platform-server`) declares `document.cookie` \"not yet implemented\" and throws on\n // access, so there the request's own header is both the correct source and the only safe one.\n return this.parseCookie(this.isBrowser ? this.document.cookie : this.requestCookies(), key);\n }\n\n /**\n * `REQUEST` is a plain token with a `null` root factory, so what an app provides need not be a fetch\n * `Request` — an Express `req`, whose `headers` is a plain object, has no `get()`. A foreign shape must\n * degrade to \"no cookies\", not take the render down.\n */\n private requestCookies(): string {\n try {\n return this.request?.headers.get('cookie') ?? '';\n } catch {\n return '';\n }\n }\n\n private parseCookie(cookies: string, key: string): string | null {\n const prefix = `${key}=`;\n const cookie = cookies\n .split(';')\n .map((entry) => entry.trim())\n .find((entry) => entry.startsWith(prefix));\n\n if (!cookie) return null;\n\n try {\n return decodeURIComponent(cookie.slice(prefix.length));\n } catch {\n // `decodeURIComponent` throws `URIError` on a malformed escape. This store's own values always\n // go through `encodeURIComponent`, but the cookie under this key need not be one it wrote — and\n // on the server it comes straight off the request, where anyone can send `key=%`. Letting the\n // throw out would take the whole render down over a foreign cookie, so treat it as absent.\n return null;\n }\n }\n\n private writeCookie(key: string, value: string): void {\n // A server render has nothing to persist to — the selection arrived with the request, and writing\n // `document.cookie` there throws for the same reason reading it does (see `readCookie()`).\n if (!this.isBrowser) return;\n\n // Skip the write when unchanged, so an identical value never silently resets the cookie's expiry:\n // `KbqThemeService.setMode()` clears the pinned theme on every call, persisting `null` even when\n // nothing was pinned, and selecting the mode that is already active is an ordinary thing to do.\n if (this.readCookie(key) === value) return;\n\n // 1 year: matches the lifetime a persisted UI preference is expected to have. No `SameSite` —\n // this only ever writes its own theme cookie by exact key, so it has no cross-site write to\n // guard against; leave whatever policy the app's other cookies use untouched.\n this.document.cookie = `${key}=${encodeURIComponent(value)}; path=/; max-age=31536000`;\n }\n}\n\n/**\n * Injection token for the store used to persist the current mode (see `KbqThemeStore`).\n * Defaults to a `localStorage`-backed implementation (`KbqThemeLocalStorageStore`).\n */\nexport const KBQ_THEME_STORE = new InjectionToken<KbqThemeStore>('KBQ_THEME_STORE', {\n providedIn: 'root',\n factory: () => inject(KbqThemeLocalStorageStore)\n});\n\n/**\n * Manages the active Koobiq theme: resolves `mode()` against the OS color scheme and the registered\n * `themes()`, applies the active theme's class to the document body, and persists `mode()` via\n * `KBQ_THEME_STORE`.\n *\n * @example\n * ```ts\n * providers: [kbqThemeProvider({ themes: myThemes, mode: 'dark' })]\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqThemeService<T extends KbqThemeConfig = KbqThemeConfig> {\n private readonly document = inject(DOCUMENT);\n private readonly window = inject(KBQ_WINDOW);\n private readonly store = inject(KBQ_THEME_STORE);\n private readonly destroyRef = inject(DestroyRef);\n private readonly config = inject(KBQ_THEME_CONFIG) as KbqThemeSettings<T>;\n\n private readonly renderer: Renderer2;\n\n /**\n * Resolved once and kept, so the initial read and the change subscription can never end up watching\n * two different objects — a server-side `matchMedia` stub typically returns a fresh one per call.\n */\n private readonly media = this.matchPrefersDark();\n private readonly systemPrefersDark = signal(this.media?.matches ?? false);\n\n private readonly themesState = signal<T[]>(this.config.themes);\n private readonly modeState = signal<KbqThemeMode>(this.readMode());\n private readonly staticThemeState = signal<string | null>(this.readStaticTheme());\n\n /** Themes available to select from. Set via `setThemes()` to register a fully custom set. */\n readonly themes = this.themesState.asReadonly();\n /** Selected fixed `'light'`/`'dark'` mode, or `'auto'` to follow the OS color scheme. Set via `setMode()`. */\n readonly mode = this.modeState.asReadonly();\n\n /**\n * Name of a theme selected out of `themes()`,\n * overriding `mode` resolution in `currentTheme()` until\n * cleared or `setMode()`/`toggle()` is called. `null` when nothing is selected.\n */\n readonly staticTheme = this.staticThemeState.asReadonly();\n\n /** `mode()` resolved to a concrete `'light'`/`'dark'` target — never `'auto'`. */\n private readonly resolvedMode = computed<KbqThemeColorScheme>(() => {\n const mode = this.modeState();\n\n return mode === 'auto' ? (this.systemPrefersDark() ? 'dark' : 'light') : mode;\n });\n\n /** The static theme if `staticTheme()` is set, otherwise the theme whose `colorScheme` matches `resolvedMode()`. */\n readonly currentTheme = computed<T | null>(() => {\n const staticTheme = this.staticThemeState();\n\n if (staticTheme !== null) {\n return this.themesState().find((theme) => theme.name === staticTheme) ?? null;\n }\n\n return this.themesState().find((theme) => theme.colorScheme === this.resolvedMode()) ?? null;\n });\n\n /** `currentTheme()`'s polarity, falling back to `resolvedMode()` if nothing matched. */\n readonly colorScheme = computed<KbqThemeColorScheme>(() => this.currentTheme()?.colorScheme ?? this.resolvedMode());\n\n constructor() {\n this.renderer = inject(RendererFactory2).createRenderer(null, null);\n\n this.watchSystemTheme();\n this.watchStore();\n\n effect(() => this.applyTheme(this.currentTheme(), this.themesState()));\n }\n\n /** Replaces the registered theme set with a fully custom one. */\n setThemes(items: T[]) {\n this.themesState.set(items);\n }\n\n /**\n * Sets a fixed `'light'`/`'dark'` mode, or `'auto'` to follow the OS color scheme, clearing any active\n * static theme so this always hands control back to dynamic resolution.\n */\n setMode(mode: KbqThemeMode) {\n // Mode first, pin second. Each store write is its own `KbqThemeStore.changes` notification, so\n // another tab observes the state between them: clearing the pin first would leave it resolving the\n // *old* mode for one step and visibly flash the previous theme. With the pin still in place, the\n // intermediate state resolves to the pinned theme, which is what that tab already shows.\n this.modeState.set(mode);\n this.store.setMode(mode);\n this.selectTheme(null);\n }\n\n /** Pins a theme by name out of `themes()`, or clears the pin when `name` is `null`. */\n selectTheme(name: string | null) {\n this.staticThemeState.set(name);\n this.store.setStaticTheme(name);\n }\n\n /** Switches between `'light'`/`'dark'`, based on `colorScheme()` — the current theme's actual polarity. */\n toggle() {\n // Untracked: called from a consumer's `effect()`, `colorScheme` read here would make the effect toggle again on\n // every change it makes.\n this.setMode(untracked(this.colorScheme) === 'dark' ? 'light' : 'dark');\n }\n\n /** The persisted mode, or `config.mode` when nothing valid is stored. Also used to re-read the store. */\n private readMode(): KbqThemeMode {\n const stored = this.store.getMode();\n\n return stored === 'auto' || stored === 'light' || stored === 'dark' ? stored : this.config.mode;\n }\n\n /** The persisted static theme, or `config.theme` while the user has made no selection of their own. */\n private readStaticTheme(): string | null {\n const stored = this.store.getStaticTheme();\n\n if (stored !== null) return stored;\n\n // `config.theme` is documented as applying only when nothing is persisted yet, but a store cannot\n // tell a pin that was cleared from one that was never set — both read back as `null`. A persisted\n // mode is the marker that the user has chosen something: without this, `setMode()` (which clears\n // the pin) would be silently undone by `config.theme` on the next load.\n return this.store.getMode() === null ? this.config.theme : null;\n }\n\n /**\n * Read synchronously at construction, so `systemPrefersDark` is right before the first render — deferring\n * it to e.g. `afterNextRender` would show the wrong theme first and correct it visibly.\n *\n * `matchMedia` is supplied, not guaranteed: it is absent from the server's `KBQ_WINDOW` and from jsdom,\n * where calling it throws `TypeError`, and where an app substitutes its own — see `provideServerWindow`\n * in apps/docs — this runs that app's code from a field initializer, where a throw would fail the\n * service outright. One `catch` covers both, so there is no `typeof` check in front of it. Contrast\n * `KbqThemeLocalStorageStore.changes`, which calls `addEventListener` unguarded: that object comes from\n * `KBQ_WINDOW`'s own factory, which returns a real view or throws.\n */\n private matchPrefersDark(): MediaQueryList | null {\n try {\n return this.window.matchMedia(PREFERS_DARK_QUERY);\n } catch {\n return null;\n }\n }\n\n /**\n * Listens by hand rather than through `fromEvent()`: a `matchMedia` stub can return a bare object\n * carrying `matches` and nothing else, and `fromEvent()` rejects a target lacking either half of the\n * `addEventListener`/`removeEventListener` pair by throwing synchronously — from the constructor,\n * failing the whole service in exactly the environment these guards exist for.\n */\n private watchSystemTheme(): void {\n const media = this.media;\n\n if (typeof media?.addEventListener !== 'function') return;\n\n const listener = (event: MediaQueryListEvent) => this.systemPrefersDark.set(event.matches);\n\n media.addEventListener('change', listener);\n this.destroyRef.onDestroy(() => media.removeEventListener?.('change', listener));\n }\n\n /**\n * Picks up a selection made outside this instance — the same app in another tab (see\n * `KbqThemeStore.changes`). Re-reads rather than trusting an event payload, so the store stays the\n * single source of truth, and writes nothing back: the tab that made the change already persisted it.\n */\n private watchStore(): void {\n this.store.changes?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n const staticTheme = this.readStaticTheme();\n\n this.modeState.set(this.readMode());\n\n // `themes()` is per-instance — `setThemes()` in one tab does not register anything in another.\n // Pinning a name this instance doesn't know would resolve `currentTheme()` to `null` and strip\n // every theme class off the body, so an unknown name degrades to \"no change\", not \"no theme\".\n if (staticTheme === null || this.themesState().some(({ name }) => name === staticTheme)) {\n this.staticThemeState.set(staticTheme);\n }\n });\n }\n\n private applyTheme(current: T | null, themes: T[]) {\n // By `className`, not by theme object identity — multiple registered themes (e.g. a custom set of\n // names layered onto the same built-in light/dark classes) can share a `className`. Comparing by\n // object would remove a class that another, differently-named entry just added for the same reason.\n const classNames = new Set(themes.map((theme) => theme.className));\n\n for (const className of classNames) {\n if (className === current?.className) {\n this.renderer.addClass(this.document.body, className);\n } else {\n this.renderer.removeClass(this.document.body, className);\n }\n }\n }\n}\n","import { _getShadowRoot } from '@angular/cdk/platform';\nimport { InjectionToken } from '@angular/core';\n\n/**\n * Produces the storage key for a component that persists state without being given a `stateSavingKey`.\n *\n * Returning an empty string means \"this host cannot be identified\": the component then persists\n * nothing rather than writing under a key a later load would not reproduce.\n */\nexport type KbqStateSavingKeyResolver = (host: Element | null) => string;\n\n/** Ids a component library generates: they carry an instantiation counter, so they never anchor a path. */\nconst generatedIdPattern = /^(kbq|cdk|mat|ng)[-_]/i;\n\n/** The element's index among its preceding siblings of the same tag — `nth-of-type`, zero-based. */\nconst siblingIndex = (element: Element): number => {\n let index = 0;\n let sibling = element.previousElementSibling;\n\n while (sibling) {\n if (sibling.tagName === element.tagName) index++;\n\n sibling = sibling.previousElementSibling;\n }\n\n return index;\n};\n\n/**\n * The element the path continues from. `parentElement` is `null` at a shadow root, whose `host`\n * continues the path in the light tree (see `kbqShadowDomOverlayProvider`).\n */\nconst parentOf = (element: Element): Element | null =>\n element.parentElement ?? _getShadowRoot(element as HTMLElement)?.host ?? null;\n\n/**\n * Default `KbqStateSavingKeyResolver`: builds the key from where the host sits in the document.\n *\n * Each segment is the tag name, suffixed with `:n` when earlier siblings share it. An author-written\n * `id` ends the walk and becomes the root segment, which is what makes the key survive a restructuring\n * above the component — and gives an author a way to pin it without reaching for `stateSavingKey`.\n *\n * ```\n * app-root/main/kbq-accordion\n * app-root/main/kbq-accordion:1\n * #settings-panel/div/kbq-accordion\n * #faq\n * ```\n */\nexport const kbqStructuralStateSavingKey: KbqStateSavingKeyResolver = (host) => {\n const body = host?.ownerDocument?.body;\n\n if (!host || !body) return '';\n\n const segments: string[] = [];\n let element: Element | null = host;\n\n while (element && element !== body) {\n const id = element.getAttribute('id');\n\n if (id && !generatedIdPattern.test(id)) {\n segments.push(`#${id}`);\n\n return segments.reverse().join('/');\n }\n\n const tag = element.tagName.toLowerCase();\n const index = siblingIndex(element);\n\n segments.push(index ? `${tag}:${index}` : tag);\n element = parentOf(element);\n }\n\n // Ran out of ancestors without reaching `<body>`: the host is not in the document.\n return element === body ? segments.reverse().join('/') : '';\n};\n\n/**\n * Injection token for the strategy that derives a storage key from the host element when a component\n * persists state without a `stateSavingKey`. Defaults to `kbqStructuralStateSavingKey`.\n *\n * Replace it to key the state on something the DOM does not know about — an application that keeps the\n * same layout across parameterized routes can prefix the resolved key with the route it is on.\n *\n * @example\n * ```ts\n * providers: [\n * {\n * provide: KBQ_STATE_SAVING_KEY_RESOLVER,\n * useFactory: () => {\n * const router = inject(Router);\n *\n * return (host: Element | null) => `${router.url}|${kbqStructuralStateSavingKey(host)}`;\n * }\n * }\n * ]\n * ```\n */\nexport const KBQ_STATE_SAVING_KEY_RESOLVER = new InjectionToken<KbqStateSavingKeyResolver>(\n 'KBQ_STATE_SAVING_KEY_RESOLVER',\n { providedIn: 'root', factory: () => kbqStructuralStateSavingKey }\n);\n","import { Platform } from '@angular/cdk/platform';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport { EMPTY, Observable } from 'rxjs';\nimport { KBQ_WINDOW } from '../tokens';\n\n/**\n * Strategy used to persist component state across reloads.\n *\n * Payloads are opaque: a store moves them, it never interprets them. A read is typed `unknown` on\n * purpose — web storage is origin-wide and user-writable, so the consumer has to normalize whatever\n * comes back (see the `normalize` callback of `KbqStateSaving.read()`).\n *\n * Provide a custom implementation through the `KBQ_STATE_STORE` token to change where the state is\n * stored. To keep it for the tab session only, provide the bundled `KbqSessionStorageStateStore`\n * instead of writing one.\n *\n * **Every method is synchronous.** A component reads once while it initializes and cannot wait, so a\n * store that returns a promise restores nothing — the payload reaches `normalize` unresolved and is\n * rejected (dev mode warns about it). To back the state with a server, load it before the application\n * renders — `provideAppInitializer` — and serve it from memory here.\n */\nexport interface KbqStateStore {\n /** Returns the raw persisted payload for the key, or `null` when nothing is stored/available. */\n getState(key: string): unknown;\n /** Persists the payload under the key. It has to be JSON-serializable. */\n setState(key: string, state: unknown): void;\n /** Removes the payload persisted under the key. */\n removeState(key: string): void;\n\n /**\n * Optional. Every key this store currently holds.\n *\n * `KbqStateSavingService` needs it to report the entries no live component claims. Leave it out when\n * the storage cannot be enumerated, and the service reports the live components alone.\n */\n keys?(): string[];\n\n /**\n * Optional. Emits whenever entries change outside this instance — the same app open in another tab,\n * most commonly. `KbqStateSavingService` re-emits it, so a panel listing the entries can refresh.\n * Leave it out when the storage has no way to report that.\n */\n changes?: Observable<void>;\n}\n\n/**\n * How long a web-storage entry survives without being written or read, in milliseconds.\n * Defaults to 90 days.\n *\n * Components persist under keys derived from the host's position in the document when no\n * `stateSavingKey` is given, so a restructuring silently strands the entry written under the previous\n * key. The TTL is what eventually collects those.\n */\nexport const KBQ_STATE_SAVING_TTL = new InjectionToken<number>('KBQ_STATE_SAVING_TTL', {\n providedIn: 'root',\n factory: () => 90 * 24 * 60 * 60 * 1000\n});\n\n/** Prefix every entry a web-storage state store owns is written under. */\nconst stateKeyPrefix = 'kbq.state.';\n\n/** What a web-storage state store actually writes: the consumer's payload plus its own bookkeeping. */\ninterface KbqStateEnvelope {\n /** Epoch milliseconds of the last write or refresh. Drives expiry. */\n savedAt: number;\n /** The consumer's opaque payload. */\n state: unknown;\n}\n\nconst parseEnvelope = (raw: string | null): KbqStateEnvelope | null => {\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw);\n\n return parsed !== null && typeof parsed === 'object' && typeof parsed.savedAt === 'number' && 'state' in parsed\n ? (parsed as KbqStateEnvelope)\n : null;\n } catch {\n return null;\n }\n};\n\n/**\n * Base `KbqStateStore` backed by one of the `Window` storages, which the subclass picks.\n *\n * All access is guarded so it is safe on the server (SSR) and in environments where storage throws on\n * access (private mode, sandboxed iframes) or holds a payload that is not even valid JSON.\n */\n@Injectable()\nexport abstract class KbqWebStorageStateStore implements KbqStateStore {\n // `KBQ_WINDOW`'s factory throws wherever there is no `window` at all, so it is only injected in the\n // browser: a component injects its store eagerly, before it knows whether it will persist anything.\n private readonly window = inject(Platform).isBrowser ? inject(KBQ_WINDOW) : null;\n private readonly ttl = inject(KBQ_STATE_SAVING_TTL);\n\n /**\n * `storage` fires only in the *other* documents of the same origin, never in the one that wrote the\n * value, so this reports exactly the external changes `KbqStateStore.changes` is meant to report,\n * with no echo of this instance's own writes.\n */\n readonly changes: Observable<void> = this.watchStorage();\n\n constructor() {\n this.removeExpired();\n }\n\n /** The storage this store reads from and writes to. */\n protected abstract getStorage(window: Window): Storage;\n\n keys(): string[] {\n if (!this.window) return [];\n\n try {\n const storage = this.getStorage(this.window);\n const keys: string[] = [];\n\n for (let index = 0; index < storage.length; index++) {\n const storageKey = storage.key(index);\n\n if (!storageKey?.startsWith(stateKeyPrefix)) continue;\n\n // An expired entry is on its way out — listing it would report an orphan that disappears\n // on its own before anyone can act on it.\n if (this.isExpired(parseEnvelope(storage.getItem(storageKey)))) continue;\n\n keys.push(storageKey.slice(stateKeyPrefix.length));\n }\n\n return keys;\n } catch {\n return [];\n }\n }\n\n getState(key: string): unknown {\n if (!this.window) return null;\n\n try {\n const storage = this.getStorage(this.window);\n const envelope = parseEnvelope(storage.getItem(stateKeyPrefix + key));\n\n if (!envelope) return this.readLegacyState(storage, key);\n\n if (this.isExpired(envelope)) {\n storage.removeItem(stateKeyPrefix + key);\n\n return null;\n }\n\n // Refresh the entry, so state that is read on every visit but never changed does not expire\n // under an active user. `setState` decides whether the write is actually due.\n this.setState(key, envelope.state);\n\n return envelope.state;\n } catch {\n return null;\n }\n }\n\n setState(key: string, state: unknown): void {\n if (!this.window) return;\n\n try {\n const storage = this.getStorage(this.window);\n const serialized = JSON.stringify(state);\n const current = parseEnvelope(storage.getItem(stateKeyPrefix + key));\n const now = Date.now();\n\n // Skip the write when the payload is unchanged and the entry is not yet halfway to expiring.\n // A component persists a whole snapshot on every change, and a single interaction routinely\n // produces the same snapshot twice (one item closing while another opens); `setItem` is\n // synchronous. Comparing whole entries would never match — `savedAt` differs every time.\n if (current && JSON.stringify(current.state) === serialized && now - current.savedAt <= this.ttl / 2) {\n return;\n }\n\n storage.setItem(stateKeyPrefix + key, JSON.stringify({ savedAt: now, state } satisfies KbqStateEnvelope));\n } catch {\n // Ignore storage write failures (quota exceeded, disabled/blocked storage, etc.).\n }\n }\n\n removeState(key: string): void {\n if (!this.window) return;\n\n try {\n const storage = this.getStorage(this.window);\n\n storage.removeItem(stateKeyPrefix + key);\n\n // An entry left over from before the prefix existed would be read again on the next load and\n // undo the removal, so shadow it with an empty one. Deleting it outright is not an option:\n // an unprefixed key is not necessarily ours (see `readLegacyState`).\n if (storage.getItem(key) !== null) this.setState(key, null);\n } catch {\n // Ignore storage failures (disabled/blocked storage, etc.).\n }\n }\n\n /**\n * Reads an entry written before entries were prefixed (`@koobiq/components` 20.2.0), so an upgrade\n * does not reset what users had.\n *\n * Read-through only: the entry is neither rewritten nor removed, because an unprefixed key is not\n * necessarily ours — an application storing its own `settings` would lose it to a component keyed\n * `stateSavingKey=\"settings\"`. The first write moves the state under the prefix and takes over from\n * there. A one-major bridge; removed in 22.0.0.\n */\n private readLegacyState(storage: Storage, key: string): unknown {\n const raw = storage.getItem(key);\n\n return raw ? JSON.parse(raw) : null;\n }\n\n /**\n * Drops the entries that outlived the TTL, along with anything under the prefix that no longer\n * parses. Runs once per application — the store is `providedIn: 'root'`.\n *\n * Keys derived from the document make this necessary: a component whose surrounding markup changes\n * starts writing under a new key, and nothing else would ever collect the old entry.\n */\n private removeExpired(): void {\n if (!this.window) return;\n\n try {\n const storage = this.getStorage(this.window);\n\n // Backwards: removing an entry shifts the index of every entry after it.\n for (let index = storage.length - 1; index >= 0; index--) {\n const storageKey = storage.key(index);\n\n if (!storageKey?.startsWith(stateKeyPrefix)) continue;\n\n if (this.isExpired(parseEnvelope(storage.getItem(storageKey)))) storage.removeItem(storageKey);\n }\n } catch {\n // Ignore storage failures (disabled/blocked storage, etc.).\n }\n }\n\n /** Whether an entry is unusable: absent, no longer parseable, or past the TTL. */\n private isExpired(envelope: KbqStateEnvelope | null): boolean {\n return !envelope || Date.now() - envelope.savedAt > this.ttl;\n }\n\n /** Backs `changes`. `EMPTY` on the server, which has no other tabs to hear from. */\n private watchStorage(): Observable<void> {\n const window = this.window;\n\n if (!window) return EMPTY;\n\n return new Observable<void>((subscriber) => {\n const listener = ({ key, storageArea }: StorageEvent) => {\n // The event fires for every storage area, so a `localStorage` store must not react to a\n // `sessionStorage` write. `storageArea` is nullable in the spec — fall through when it\n // is absent rather than guessing.\n if (storageArea && storageArea !== this.getStorage(window)) return;\n\n // `key === null` is `Storage.clear()` — every key at once, this store's entries included.\n if (key === null || key.startsWith(stateKeyPrefix)) subscriber.next();\n };\n\n window.addEventListener('storage', listener);\n\n return () => window.removeEventListener('storage', listener);\n });\n }\n}\n\n/** Default `KbqStateStore` implementation, persisting into `localStorage`. */\n@Injectable({ providedIn: 'root' })\nexport class KbqLocalStorageStateStore extends KbqWebStorageStateStore {\n protected getStorage(window: Window): Storage {\n return window.localStorage;\n }\n}\n\n/**\n * `KbqStateStore` implementation persisting into `sessionStorage`, so the state lives for the tab\n * session instead of until it expires.\n *\n * @example\n * ```ts\n * providers: [{ provide: KBQ_STATE_STORE, useExisting: KbqSessionStorageStateStore }]\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqSessionStorageStateStore extends KbqWebStorageStateStore {\n protected getStorage(window: Window): Storage {\n return window.sessionStorage;\n }\n}\n\n/**\n * Injection token for the store components persist their state into (see `KbqStateStore`).\n * Defaults to a `localStorage`-backed implementation (`KbqLocalStorageStateStore`).\n *\n * Providing it in a component's own `providers` scopes the replacement to that subtree.\n */\nexport const KBQ_STATE_STORE = new InjectionToken<KbqStateStore>('KBQ_STATE_STORE', {\n providedIn: 'root',\n factory: () => inject(KbqLocalStorageStateStore)\n});\n","import { inject, Injectable } from '@angular/core';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { KBQ_STATE_STORE } from './state-store';\n\n/**\n * Something that persists state, as `KbqStateSavingService` reports it.\n *\n * Every `KbqStateSaving` directive satisfies this and registers itself, so the service sees a component\n * even when it was given its own `KBQ_STATE_STORE` — one the root store knows nothing about. A service\n * that persists on behalf of something with no host element registers one of these too, and reports a\n * `null` host; `KbqSidepanelService` does, for a sidepanel that is closed when its entry matters.\n */\nexport interface KbqStateSavingRef {\n /** How the owner is named in dev-mode warnings — a tag name for a component. */\n readonly name: string;\n\n /**\n * The key the state is persisted under. Empty until the component has read, and for a host no key\n * could be derived from.\n */\n readonly key: string;\n /** Whether this component persists — its own `useStateSaving`, not the service-wide switch. */\n readonly enabled: boolean;\n /** The state it last read or wrote, or `null`. Raw, in the shape the component persists. */\n readonly state: unknown;\n /** The host element, for locating the component on the page. */\n readonly host: Element | null;\n /** Removes this component's persisted state, through its own store. */\n clear(): void;\n}\n\n/**\n * Reports and manages what has been persisted through `KbqStateSaving`.\n *\n * Two sources, because neither covers the other. The registry of live components says who persists,\n * under which key, and what they currently hold — including a component given its own\n * `KBQ_STATE_STORE`, which the root store cannot see. The root store says what is actually stored,\n * including entries no live component claims: a component whose surrounding markup changed writes under\n * a new key and strands the old entry, and only the store knows it is still there.\n *\n * Everything is reported as a snapshot rather than a signal. Components register while their host is\n * being created, which happens during change detection, and a signal written then is read back by a\n * view that has already been checked (`NG0100`). Subscribe to `changes` to know when to take a new\n * snapshot.\n *\n * @example\n * ```ts\n * const stateSaving = inject(KbqStateSavingService);\n *\n * stateSaving.clearOrphans();\n * stateSaving.setEnabled(false);\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqStateSavingService {\n private readonly store = inject(KBQ_STATE_STORE);\n private readonly changed = new Subject<void>();\n\n /** Live components, in registration order. A `Set`, so a double registration cannot duplicate one. */\n private readonly registry = new Set<KbqStateSavingRef>();\n\n /**\n * Emits whenever this picture changes: a component registered, persisted, cleared or was destroyed,\n * this service wrote or removed something, or the store reported a change made outside this tab.\n *\n * It says *that* something changed, never what — take a fresh snapshot in response. Expect it to be\n * chatty: the initial render of a page full of persisting components emits once per component, and\n * a component that persists on every interaction emits on every interaction.\n */\n readonly changes: Observable<void> = this.store.changes ? merge(this.changed, this.store.changes) : this.changed;\n\n private enabled = true;\n\n /** How deep the current `batch()` nesting is — a counter for the same reason `applying()` uses one. */\n private batchDepth = 0;\n\n /** Whether components are allowed to persist. */\n isEnabled(): boolean {\n return this.enabled;\n }\n\n /**\n * Turns persistence off, or back on, for every component at once — the switch behind a \"do not\n * remember my interface\" setting. A component's own `useStateSaving` still has to be set for it to\n * persist; this only takes that away.\n *\n * Turning it off stops reading and writing. It does not remove what is already stored, and does not\n * collapse what was already restored — call `clear()` for the first, reload for the second. A\n * component reads once while it initializes, so a setting that arrives later than that reaches the\n * next render; provide `KBQ_STATE_SAVING_ENABLED` to decide before anything reads.\n */\n setEnabled(enabled: boolean): void {\n if (this.enabled === enabled) return;\n\n this.enabled = enabled;\n this.changed.next();\n }\n\n /** Every live component that persists state, in registration order. */\n components(): readonly KbqStateSavingRef[] {\n return [...this.registry];\n }\n\n /**\n * Every key the root store holds. Empty when the store cannot enumerate — see `KbqStateStore.keys`,\n * which a backend-backed store is expected to leave out.\n */\n keys(): string[] {\n return this.store.keys?.() ?? [];\n }\n\n /**\n * The keys the root store holds that no live component claims — what a markup change leaves behind.\n *\n * A component that has not read yet claims nothing, so a page still initializing can report a key as\n * orphaned for as long as that takes.\n */\n orphans(): string[] {\n const claimed = new Set(this.components().map(({ key }) => key));\n\n return this.keys().filter((key) => !claimed.has(key));\n }\n\n /**\n * The raw payload stored under the key, or `null`.\n *\n * Raw: normalizing a payload into state belongs to the component that wrote it (see the\n * `normalize` callback of `KbqStateSaving.read()`), and the service does not know which component that is.\n */\n read(key: string): unknown {\n return this.store.getState(key);\n }\n\n /**\n * Overwrites the payload stored under the key. It has to be JSON-serializable, and in the shape the\n * owning component's `normalize` accepts — anything else is rejected on read and the component falls\n * back to its default.\n *\n * A component restores once, while initializing, so this reaches a component that is already on\n * screen only after a reload.\n */\n write(key: string, state: unknown): void {\n this.batch(() => this.store.setState(key, state));\n }\n\n /** Removes the entry stored under the key, in the root store and in any live component's own. */\n remove(key: string): void {\n this.batch(() => {\n this.store.removeState(key);\n\n // A component can be given its own `KBQ_STATE_STORE` through its `providers`, and the root\n // store knows nothing about that one. Going through the component itself reaches it.\n this.components()\n .filter((ref) => ref.key === key)\n .forEach((ref) => ref.clear());\n });\n }\n\n /** Removes every entry, claimed and orphaned alike. */\n clear(): void {\n this.batch(() => {\n this.keys().forEach((key) => this.store.removeState(key));\n this.components().forEach((ref) => ref.clear());\n });\n }\n\n /** Removes only the entries no live component claims, leaving what is in use alone. */\n clearOrphans(): void {\n this.batch(() => this.orphans().forEach((key) => this.store.removeState(key)));\n }\n\n /**\n * Called when an owner persisted or removed its own state, which does not pass through this service\n * and would otherwise go unreported. @docs-private\n */\n notify(): void {\n if (this.batchDepth > 0) return;\n\n this.changed.next();\n }\n\n /**\n * Runs a compound operation and reports it once. Without this, `clear()` would emit once per\n * component it clears on top of its own emission, since a cleared component reports for itself.\n */\n private batch(operation: () => void): void {\n this.batchDepth++;\n\n try {\n operation();\n } finally {\n this.batchDepth--;\n }\n\n this.changed.next();\n }\n\n /** Called by an owner as it starts persisting. @docs-private */\n register(ref: KbqStateSavingRef): void {\n this.registry.add(ref);\n this.changed.next();\n }\n\n /** Called when the component that owns the controller is destroyed. @docs-private */\n unregister(ref: KbqStateSavingRef): void {\n if (!this.registry.delete(ref)) return;\n\n this.changed.next();\n }\n}\n","import {\n booleanAttribute,\n DestroyRef,\n Directive,\n effect,\n inject,\n InjectionToken,\n input,\n isDevMode,\n output,\n untracked\n} from '@angular/core';\nimport { kbqInjectNativeElement } from '../utils';\nimport { KBQ_STATE_SAVING_KEY_RESOLVER } from './state-saving-key';\nimport { KbqStateSavingRef, KbqStateSavingService } from './state-saving-service';\nimport { KBQ_STATE_STORE } from './state-store';\n\n/**\n * What `useStateSaving` defaults to. Provide `false` to turn state saving off across an application;\n * a component opts back in with `[useStateSaving]=\"true\"`.\n *\n * The only switch in place before the first component reads — `KbqStateSavingService.setEnabled()` runs\n * later than that.\n */\nexport const KBQ_STATE_SAVING_ENABLED = new InjectionToken<boolean>('KBQ_STATE_SAVING_ENABLED', {\n providedIn: 'root',\n factory: () => true\n});\n\n/**\n * Persists one component's state through `KBQ_STATE_STORE`.\n *\n * Applied with `hostDirectives`, forwarding both inputs, and injected to drive it. What to persist and\n * when to read it stays with the component: `read()` once while initializing, `write()` on every change.\n * The Core page carries the worked example and the rules.\n *\n * The key comes from `stateSavingKey`, or is derived from where the host sits in the document\n * (`KBQ_STATE_SAVING_KEY_RESOLVER`) — see the Core page for the rules that come with that.\n */\n@Directive({\n selector: '[kbqStateSaving]',\n exportAs: 'kbqStateSaving'\n})\nexport class KbqStateSaving implements KbqStateSavingRef {\n /**\n * The host element the key is derived from, and by which `KbqStateSavingService` locates it.\n *\n * Typed nullable for `KbqStateSavingRef`, whose other implementation has no element of its own —\n * `KbqSidepanelService` persists on behalf of a panel that lives in an overlay.\n */\n readonly host: Element | null = kbqInjectNativeElement<Element>();\n\n // These two are what a host forwards, so their documentation is read on the host's own page — it\n // describes the component a consumer is configuring, not the directive behind it.\n\n /**\n * Whether the component remembers its state across reloads and restores it on the next render.\n * Defaults to `true`, or to whatever `KBQ_STATE_SAVING_ENABLED` is provided as.\n */\n readonly useStateSaving = input(inject(KBQ_STATE_SAVING_ENABLED), { transform: booleanAttribute });\n\n /**\n * The key the state is persisted under. While it is empty the key is derived from where the\n * component sits in the document, which moves when the surrounding markup is restructured — an `id`\n * on the component or any ancestor pins it just as well as this input does.\n */\n readonly stateSavingKey = input<string>('');\n\n /**\n * Emits when the key changes after the state was read, so the owner can restore from the new one.\n *\n * The key is read once, while the owner restores, and `write()` refuses a key it has not read —\n * without this, moving a component to another key would stop its writes for good instead of moving\n * its state. Not forwarded from a host: the component that injects the directive is the one that\n * knows how to restore itself.\n */\n readonly keyChanges = output<void>();\n\n /** The state last read from or written to the store, or `null` when there is none. */\n get state(): unknown {\n return this.useStateSaving() ? this._state : null;\n }\n\n /** How the host is named in dev-mode warnings: its tag, which is what the author sees in the markup. */\n get name(): string {\n return this.host?.tagName.toLowerCase() ?? 'kbqStateSaving';\n }\n\n /**\n * The key the state is persisted under, empty until `read()` has run. Deliberately the key that was\n * read: resolving one now needs the host to be in the document.\n */\n get key(): string {\n return this.readKey ?? '';\n }\n\n /** Whether this host persists — its own `useStateSaving`, not the application-wide switch. */\n get enabled(): boolean {\n return this.useStateSaving();\n }\n\n private readonly store = inject(KBQ_STATE_STORE);\n private readonly resolveKey = inject(KBQ_STATE_SAVING_KEY_RESOLVER);\n private readonly service = inject(KbqStateSavingService);\n private readonly destroyRef = inject(DestroyRef);\n\n private _state: unknown = null;\n\n /** A counter, not a flag: a nested `applying()` would otherwise release the guard on the way out. */\n private applyingDepth = 0;\n\n /**\n * The key `read()` last read, `null` until it has. Until then a write would overwrite what is stored\n * blind; holding the key rather than a flag also stops a write landing on one never read.\n */\n private readKey: string | null = null;\n\n private resolvedKey: string | undefined;\n\n constructor() {\n this.service.register(this);\n this.destroyRef.onDestroy(() => this.service.unregister(this));\n\n effect(() => {\n // Tracked directly, not through `storageKey`: that resolves a derived key by walking the\n // document, and this effect first runs while the host is still detached.\n this.stateSavingKey();\n\n // Nothing has been read, so nothing can have moved.\n if (this.readKey === null) return;\n\n if (this.storageKey !== this.readKey) this.keyChanges.emit();\n });\n }\n\n /**\n * Reads the persisted state, coerced by `normalize`. Returns `null` while persistence is disabled,\n * and while no key can be resolved for the host.\n *\n * `normalize` turns a raw payload into state and returns `null` when it cannot. Storage is\n * user-writable, so nothing is trusted; this is also where an older payload is migrated.\n */\n read<T>(normalize: (parsed: unknown) => T | null): T | null {\n this._state = null;\n\n if (!this.persists) return null;\n\n const key = this.storageKey;\n\n if (!key) {\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn(\n `${this.name}: state saving is enabled, but no key could be derived from the host ` +\n 'element — it is not in the document when the state is read. Nothing is persisted. ' +\n 'Provide a `stateSavingKey` to persist anyway.'\n );\n }\n\n return null;\n }\n\n if (isDevMode()) this.warnAboutCollision(key);\n\n this.readKey = key;\n\n const raw = this.store.getState(key);\n\n if (isDevMode() && typeof (raw as { then?: unknown } | null)?.then === 'function') {\n // eslint-disable-next-line no-console\n console.warn(\n `${this.name}: the state store returned a promise. \\`KbqStateStore\\` is read synchronously, ` +\n 'so an asynchronous store never restores anything — the payload reaches `normalize` ' +\n 'unresolved and is rejected. Load the state before the application renders (for ' +\n 'example in `provideAppInitializer`) and serve it from memory.'\n );\n }\n\n const state = normalize(raw);\n\n this._state = state;\n\n return state;\n }\n\n /**\n * Persists the state. A no-op while persistence is disabled, while `applying()` runs, and before\n * `read()` has run.\n *\n * Pass the whole state, not a change to it: a full snapshot drops values that no longer exist.\n */\n write(state: unknown): void {\n // Untracked, like `clear()`: a caller's `effect()` must not start following `useStateSaving` and the key.\n untracked(() => this.writeState(state));\n }\n\n private writeState(state: unknown): void {\n if (!this.persists || this.applyingDepth > 0) return;\n\n const key = this.storageKey;\n\n if (key !== this.readKey) {\n if (isDevMode() && this.readKey !== null) {\n // eslint-disable-next-line no-console\n console.warn(\n `${this.name}: the state saving key changed from \\`${this.readKey}\\` to \\`${key}\\` ` +\n 'after the state was read. Nothing is persisted under the new key until it is read, ' +\n \"so the state stored there is not overwritten with another key's.\"\n );\n }\n\n return;\n }\n\n this._state = state;\n\n this.store.setState(key, state);\n this.service.notify();\n }\n\n /**\n * Removes the persisted state. Persistence itself stays on — the next `write()` records it again.\n *\n * Deliberately not gated on the application-wide switch, unlike `read()` and `write()`: that switch\n * means \"stop remembering\", and removing what was remembered carries it out.\n */\n clear(): void {\n untracked(() => this.clearState());\n }\n\n private clearState(): void {\n if (!this.useStateSaving()) return;\n\n this._state = null;\n\n const key = this.readKey ?? this.storageKey;\n\n if (key) this.store.removeState(key);\n\n this.service.notify();\n }\n\n /**\n * Runs `apply` with `write()` suppressed, and nests safely. Restored state goes through the\n * component's own setters, which persist as they go.\n */\n applying<R>(apply: () => R): R {\n this.applyingDepth++;\n\n try {\n return apply();\n } finally {\n this.applyingDepth--;\n }\n }\n\n /** Whether this directive reads and writes at all. */\n private get persists(): boolean {\n return this.service.isEnabled() && this.useStateSaving();\n }\n\n /**\n * Warns when another live component already persists under this key: a key is a whole entry, not a\n * namespace, so the two overwrite each other. Only an explicit `stateSavingKey` can collide.\n */\n private warnAboutCollision(key: string): void {\n const claimedBy = this.service.components().find((ref) => ref !== this && ref.key === key);\n\n if (!claimedBy) return;\n\n // eslint-disable-next-line no-console\n console.warn(\n `${this.name}: \\`${claimedBy.name}\\` already persists under the state saving key \\`${key}\\`. ` +\n 'They share one entry and overwrite each other. Give each component its own key.'\n );\n }\n\n /** The key the state is persisted under, empty when the host cannot be identified. */\n private get storageKey(): string {\n const key = this.stateSavingKey();\n\n if (key) return key;\n\n // Memoized because `write()` asks on every change and resolving walks the document. `||=` rather\n // than `??=`, so a host asked before it was in the document is not stuck with the empty key.\n this.resolvedKey ||= this.resolveKey(this.host);\n\n return this.resolvedKey;\n }\n}\n","/* eslint-disable no-restricted-globals -- testing utilities legitimately use raw `document`/`window` */\n\n/**\n * The view an event is initialized with. Vitest's jsdom environment, which `ng test` runs, points `window` at\n * Node's global object, and jsdom rejects anything but its own Window as a view: the event gets none there.\n */\nfunction eventView(): Window {\n // `null` is a valid view, which TypeScript's DOM types leave out.\n return (typeof Window !== 'undefined' && window instanceof Window ? window : null) as Window;\n}\n\n/** Creates a browser MouseEvent with the specified options. */\nexport function createMouseEvent(type: string, x = 0, y = 0, button = 0) {\n const event = document.createEvent('MouseEvent');\n\n event.initMouseEvent(\n type,\n false,\n false,\n eventView(),\n 0,\n x /* screenX */,\n y /* screenY */,\n x /* clientX */,\n y /* clientY */,\n false,\n false,\n false,\n false,\n button /* button */,\n null\n );\n\n return event;\n}\n\n/** Creates a browser TouchEvent with the specified pointer coordinates. */\nexport function createTouchEvent(type: string, pageX = 0, pageY = 0) {\n // In favor of creating events that work for most of the browsers, the event is created\n // as a basic UI Event. The necessary details for the event will be set manually.\n const event = document.createEvent('UIEvent');\n const touchDetails = { pageX, pageY };\n\n (event as any).initUIEvent(type, true, true, eventView(), 0);\n\n // Most of the browsers don't have a \"initTouchEvent\" method that can be used to define\n // the touch details.\n Object.defineProperties(event, {\n touches: { value: [touchDetails] }\n });\n\n return event;\n}\n\n/** Dispatches a keydown event from an element. */\nexport function createKeyboardEvent(type: string, keyCode: number, target?: Element, key?: string) {\n const event = document.createEvent('KeyboardEvent') as any;\n\n // Firefox does not support `initKeyboardEvent`, but supports `initKeyEvent`.\n if (event.initKeyEvent) {\n event.initKeyEvent(type, true, true, eventView(), 0, 0, 0, 0, 0, keyCode);\n } else {\n event.initKeyboardEvent(type, true, true, eventView(), 0, key, 0, '', false);\n }\n\n // Webkit Browsers don't set the keyCode when calling the init function.\n // See related bug https://bugs.webkit.org/show_bug.cgi?id=16735\n Object.defineProperties(event, {\n keyCode: { get: () => keyCode },\n key: { get: () => key }\n });\n\n // Only override `target` when explicitly provided; otherwise let jsdom set it during dispatch.\n if (target !== undefined) {\n Object.defineProperty(event, 'target', { get: () => target });\n }\n\n return event;\n}\n\n/** Creates a fake event object with any desired event type. */\nexport function createFakeEvent(type: string, canBubble = false, cancelable = true) {\n const event = document.createEvent('Event');\n\n event.initEvent(type, canBubble, cancelable);\n\n return event;\n}\n","import { createFakeEvent, createKeyboardEvent, createMouseEvent, createTouchEvent } from './event-objects';\n\n/** Utility to dispatch any event on a Node. */\nexport function dispatchEvent(node: Node | Window, event: Event): Event {\n node.dispatchEvent(event);\n\n return event;\n}\n\n/** Shorthand to dispatch a fake event on a specified node. */\nexport function dispatchFakeEvent(node: Node | Window, type: string, canBubble?: boolean): Event {\n return dispatchEvent(node, createFakeEvent(type, canBubble));\n}\n\n/** Shorthand to dispatch a keyboard event with a specified key code and, optionally, a `KeyboardEvent.key`. */\nexport function dispatchKeyboardEvent(\n node: Node,\n type: string,\n keyCode: number,\n target?: Element,\n key?: string\n): KeyboardEvent {\n return dispatchEvent(node, createKeyboardEvent(type, keyCode, target, key)) as KeyboardEvent;\n}\n\n/** Shorthand to dispatch a mouse event on the specified coordinates. */\nexport function dispatchMouseEvent(\n node: Node,\n type: string,\n x = 0,\n y = 0,\n event = createMouseEvent(type, x, y)\n): MouseEvent {\n return dispatchEvent(node, event) as MouseEvent;\n}\n\n/** Shorthand to dispatch a touch event on the specified coordinates. */\nexport function dispatchTouchEvent(node: Node, type: string, x = 0, y = 0) {\n return dispatchEvent(node, createTouchEvent(type, x, y));\n}\n","import { dispatchFakeEvent } from './dispatch-events';\n\n/**\n * Patches an element's focus and blur methods to emit events consistently and predictably:\n * a browser does not fire the focus handlers at all while its window is not focused.\n */\nexport function patchElementFocus(element: HTMLElement) {\n element.focus = () => dispatchFakeEvent(element, 'focus');\n element.blur = () => dispatchFakeEvent(element, 'blur');\n}\n","import { dispatchFakeEvent } from './dispatch-events';\n\n/**\n * Focuses an input, sets its value and dispatches\n * the `input` event, simulating the user typing.\n *\n * @param value Value to be set on the input.\n * @param element Element onto which to set the value.\n */\nexport function typeInElement(value: string, element: HTMLInputElement) {\n element.focus();\n element.value = value;\n dispatchFakeEvent(element, 'input');\n}\n","import { escapeRegExp } from '../highlight/highlight-base';\n\nexport function wrappedErrorMessage(e: Error) {\n return new RegExp(escapeRegExp(e.message));\n}\n","/**\n * @docs-private\n */\nexport const validationTooltipShowDelay = 10;\n\n/**\n * @docs-private\n */\nexport const validationTooltipHideDelay = 3000;\n","import { Version } from '@angular/core';\n\nexport const VERSION = new Version('21.0.0+sha-1c54e67');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isInput","BaseDateAdapter","numeric","map","BaseDateFormatter","KbqDateAdapter","i1.KbqLocaleOverridesDirective","i1.KbqPseudoCheckbox","distinctUntilChanged","rxDelay"],"mappings":"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"}