@koobiq/components 18.34.0 → 18.36.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 (583) hide show
  1. package/accordion/accordion.component.d.ts +1 -1
  2. package/app-switcher/_app-switcher-theme.scss +34 -0
  3. package/app-switcher/app-switcher-animations.d.ts +5 -0
  4. package/app-switcher/app-switcher-dropdown-app.d.ts +11 -0
  5. package/app-switcher/app-switcher-dropdown-app.scss +85 -0
  6. package/app-switcher/app-switcher-dropdown-site.d.ts +9 -0
  7. package/app-switcher/app-switcher-dropdown-site.scss +53 -0
  8. package/app-switcher/app-switcher.d.ts +191 -0
  9. package/app-switcher/app-switcher.module.d.ts +10 -0
  10. package/app-switcher/app-switcher.scss +64 -0
  11. package/app-switcher/index.d.ts +1 -0
  12. package/app-switcher/kbq-app-switcher-list-item.d.ts +16 -0
  13. package/app-switcher/kbq-app-switcher-list-item.scss +180 -0
  14. package/app-switcher/public-api.d.ts +6 -0
  15. package/badge/badge.component.d.ts +1 -1
  16. package/badge/badge.component.scss +2 -0
  17. package/breadcrumbs/breadcrumbs.scss +4 -0
  18. package/button/_button-theme.scss +1 -0
  19. package/button/button.component.d.ts +2 -2
  20. package/core/common-behaviors/clipboard.d.ts +1 -1
  21. package/core/common-behaviors/color.d.ts +5 -5
  22. package/core/common-behaviors/focus-monitor.d.ts +19 -0
  23. package/core/common-behaviors/hovered.d.ts +13 -0
  24. package/core/common-behaviors/index.d.ts +4 -0
  25. package/core/common-behaviors/orientation.d.ts +4 -0
  26. package/core/common-behaviors/read-state.d.ts +12 -0
  27. package/core/form-field/field-sizing-content.d.ts +21 -0
  28. package/core/form-field/index.d.ts +1 -0
  29. package/core/locales/en-US.d.ts +68 -0
  30. package/core/locales/es-LA.d.ts +68 -0
  31. package/core/locales/fa-IR.d.ts +68 -0
  32. package/core/locales/locale-service.d.ts +476 -0
  33. package/core/locales/pt-BR.d.ts +68 -0
  34. package/core/locales/ru-RU.d.ts +68 -0
  35. package/core/locales/tk-TM.d.ts +68 -0
  36. package/core/locales/types.d.ts +22 -0
  37. package/core/locales/zh-CN.d.ts +68 -0
  38. package/core/navbar/index.d.ts +1 -0
  39. package/core/navbar/rectangle-item.d.ts +14 -0
  40. package/core/option/action.d.ts +1 -1
  41. package/core/option/option.d.ts +4 -2
  42. package/core/pop-up/constants.d.ts +2 -1
  43. package/core/pop-up/pop-up-trigger.d.ts +5 -3
  44. package/core/pop-up/pop-up.d.ts +2 -1
  45. package/core/public-api.d.ts +1 -0
  46. package/core/select/common.d.ts +3 -0
  47. package/core/select/constants.d.ts +5 -0
  48. package/core/styles/common/_select.scss +5 -0
  49. package/core/utils/dom.d.ts +4 -0
  50. package/core/utils/index.d.ts +1 -0
  51. package/core/utils/utils.d.ts +4 -0
  52. package/datepicker/datepicker-input.directive.d.ts +18 -7
  53. package/divider/divider.scss +1 -0
  54. package/dropdown/dropdown-item.scss +1 -0
  55. package/dropdown/dropdown-trigger.directive.d.ts +7 -1
  56. package/dropdown/dropdown.component.d.ts +5 -1
  57. package/dropdown/dropdown.module.d.ts +1 -1
  58. package/esm2022/accordion/accordion-content.mjs +3 -3
  59. package/esm2022/accordion/accordion-header.mjs +3 -3
  60. package/esm2022/accordion/accordion-item.mjs +3 -3
  61. package/esm2022/accordion/accordion-trigger.component.mjs +3 -3
  62. package/esm2022/accordion/accordion.component.mjs +5 -5
  63. package/esm2022/accordion/accordion.module.mjs +4 -4
  64. package/esm2022/actions-panel/actions-panel-container.mjs +3 -3
  65. package/esm2022/actions-panel/actions-panel.mjs +3 -3
  66. package/esm2022/actions-panel/module.mjs +4 -4
  67. package/esm2022/alert/alert.component.mjs +12 -12
  68. package/esm2022/alert/alert.module.mjs +4 -4
  69. package/esm2022/app-switcher/app-switcher-animations.mjs +18 -0
  70. package/esm2022/app-switcher/app-switcher-dropdown-app.mjs +75 -0
  71. package/esm2022/app-switcher/app-switcher-dropdown-site.mjs +60 -0
  72. package/esm2022/app-switcher/app-switcher.mjs +446 -0
  73. package/esm2022/app-switcher/app-switcher.module.mjs +45 -0
  74. package/esm2022/app-switcher/index.mjs +2 -0
  75. package/esm2022/app-switcher/kbq-app-switcher-list-item.mjs +84 -0
  76. package/esm2022/app-switcher/koobiq-components-app-switcher.mjs +5 -0
  77. package/esm2022/app-switcher/public-api.mjs +7 -0
  78. package/esm2022/autocomplete/autocomplete-origin.directive.mjs +3 -3
  79. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +3 -3
  80. package/esm2022/autocomplete/autocomplete.component.mjs +3 -3
  81. package/esm2022/autocomplete/autocomplete.module.mjs +4 -4
  82. package/esm2022/badge/badge.component.mjs +11 -11
  83. package/esm2022/badge/badge.module.mjs +4 -4
  84. package/esm2022/breadcrumbs/breadcrumbs.mjs +17 -17
  85. package/esm2022/breadcrumbs/breadcrumbs.module.mjs +4 -4
  86. package/esm2022/button/button.component.mjs +9 -9
  87. package/esm2022/button/button.dropdown-trigger.directive.mjs +3 -3
  88. package/esm2022/button/button.module.mjs +4 -4
  89. package/esm2022/button-toggle/button-toggle.component.mjs +6 -6
  90. package/esm2022/button-toggle/button-toggle.module.mjs +4 -4
  91. package/esm2022/checkbox/checkbox-module.mjs +4 -4
  92. package/esm2022/checkbox/checkbox-required-validator.mjs +3 -3
  93. package/esm2022/checkbox/checkbox.mjs +3 -3
  94. package/esm2022/clamped-text/clamped-text.mjs +3 -3
  95. package/esm2022/clamped-text/module.mjs +4 -4
  96. package/esm2022/code-block/code-block-highlight.mjs +7 -7
  97. package/esm2022/code-block/code-block.mjs +4 -4
  98. package/esm2022/code-block/code-block.module.mjs +4 -4
  99. package/esm2022/content-panel/content-panel.mjs +24 -24
  100. package/esm2022/content-panel/module.mjs +4 -4
  101. package/esm2022/content-panel/resizable.mjs +6 -6
  102. package/esm2022/core/common-behaviors/clipboard.mjs +4 -4
  103. package/esm2022/core/common-behaviors/color.mjs +6 -7
  104. package/esm2022/core/common-behaviors/common-module.mjs +4 -4
  105. package/esm2022/core/common-behaviors/focus-monitor.mjs +37 -0
  106. package/esm2022/core/common-behaviors/hovered.mjs +31 -0
  107. package/esm2022/core/common-behaviors/index.mjs +5 -1
  108. package/esm2022/core/common-behaviors/orientation.mjs +2 -0
  109. package/esm2022/core/common-behaviors/read-state.mjs +33 -0
  110. package/esm2022/core/error/error-state-matcher.mjs +9 -9
  111. package/esm2022/core/form-field/field-sizing-content.mjs +114 -0
  112. package/esm2022/core/form-field/index.mjs +2 -1
  113. package/esm2022/core/formatters/date/formatter.mjs +3 -3
  114. package/esm2022/core/formatters/date/formatter.pipe.mjs +78 -78
  115. package/esm2022/core/formatters/filesize/formatter.mjs +3 -3
  116. package/esm2022/core/formatters/index.mjs +4 -4
  117. package/esm2022/core/formatters/number/formatter.mjs +12 -12
  118. package/esm2022/core/forms/forms-module.mjs +4 -4
  119. package/esm2022/core/forms/forms.directive.mjs +6 -6
  120. package/esm2022/core/highlight/highlight.pipe.mjs +3 -3
  121. package/esm2022/core/highlight/index.mjs +4 -4
  122. package/esm2022/core/line/line.mjs +7 -7
  123. package/esm2022/core/locales/en-US.mjs +111 -1
  124. package/esm2022/core/locales/es-LA.mjs +111 -1
  125. package/esm2022/core/locales/fa-IR.mjs +81 -1
  126. package/esm2022/core/locales/locale-service.mjs +3 -3
  127. package/esm2022/core/locales/locale-service.module.mjs +4 -4
  128. package/esm2022/core/locales/pt-BR.mjs +111 -1
  129. package/esm2022/core/locales/ru-RU.mjs +125 -1
  130. package/esm2022/core/locales/tk-TM.mjs +111 -1
  131. package/esm2022/core/locales/types.mjs +1 -1
  132. package/esm2022/core/locales/zh-CN.mjs +69 -1
  133. package/esm2022/core/navbar/index.mjs +2 -0
  134. package/esm2022/core/navbar/rectangle-item.mjs +40 -0
  135. package/esm2022/core/option/action-container.mjs +3 -3
  136. package/esm2022/core/option/action.mjs +4 -4
  137. package/esm2022/core/option/optgroup.mjs +3 -3
  138. package/esm2022/core/option/option-module.mjs +4 -4
  139. package/esm2022/core/option/option.mjs +10 -6
  140. package/esm2022/core/pop-up/constants.mjs +2 -1
  141. package/esm2022/core/pop-up/pop-up-trigger.mjs +10 -6
  142. package/esm2022/core/pop-up/pop-up.mjs +4 -4
  143. package/esm2022/core/public-api.mjs +2 -1
  144. package/esm2022/core/select/common.mjs +27 -17
  145. package/esm2022/core/select/constants.mjs +6 -1
  146. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +3 -3
  147. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +4 -4
  148. package/esm2022/core/services/measure-scrollbar.service.mjs +3 -3
  149. package/esm2022/core/services/theme.service.mjs +3 -3
  150. package/esm2022/core/utils/dom.mjs +8 -0
  151. package/esm2022/core/utils/index.mjs +2 -1
  152. package/esm2022/core/utils/utils.mjs +9 -1
  153. package/esm2022/core/version.mjs +2 -2
  154. package/esm2022/datepicker/calendar-body.component.mjs +3 -3
  155. package/esm2022/datepicker/calendar-header.component.mjs +3 -3
  156. package/esm2022/datepicker/calendar.component.mjs +3 -3
  157. package/esm2022/datepicker/datepicker-input.directive.mjs +29 -26
  158. package/esm2022/datepicker/datepicker-intl.mjs +3 -3
  159. package/esm2022/datepicker/datepicker-module.mjs +4 -4
  160. package/esm2022/datepicker/datepicker-toggle.component.mjs +9 -9
  161. package/esm2022/datepicker/datepicker.component.mjs +6 -6
  162. package/esm2022/datepicker/month-view.component.mjs +3 -3
  163. package/esm2022/divider/divider.component.mjs +4 -4
  164. package/esm2022/divider/divider.module.mjs +4 -4
  165. package/esm2022/dl/dl.component.mjs +9 -9
  166. package/esm2022/dl/dl.module.mjs +4 -4
  167. package/esm2022/dropdown/dropdown-content.directive.mjs +3 -3
  168. package/esm2022/dropdown/dropdown-item.component.mjs +5 -5
  169. package/esm2022/dropdown/dropdown-trigger.directive.mjs +33 -13
  170. package/esm2022/dropdown/dropdown.component.mjs +18 -8
  171. package/esm2022/dropdown/dropdown.module.mjs +14 -10
  172. package/esm2022/dynamic-translation/dynamic-translation.mjs +9 -9
  173. package/esm2022/dynamic-translation/module.mjs +4 -4
  174. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +7 -7
  175. package/esm2022/empty-state/empty-state.component.mjs +15 -15
  176. package/esm2022/empty-state/empty-state.module.mjs +4 -4
  177. package/esm2022/file-upload/file-drop.mjs +3 -3
  178. package/esm2022/file-upload/file-upload.mjs +6 -1
  179. package/esm2022/file-upload/file-upload.module.mjs +4 -4
  180. package/esm2022/file-upload/multiple-file-upload.component.mjs +29 -13
  181. package/esm2022/file-upload/single-file-upload.component.mjs +25 -10
  182. package/esm2022/filter-bar/filter-bar-button.mjs +3 -3
  183. package/esm2022/filter-bar/filter-bar.mjs +6 -6
  184. package/esm2022/filter-bar/filter-bar.module.mjs +4 -4
  185. package/esm2022/filter-bar/filter-refresher.mjs +3 -3
  186. package/esm2022/filter-bar/filter-reset.mjs +3 -3
  187. package/esm2022/filter-bar/filter-search.mjs +3 -3
  188. package/esm2022/filter-bar/filters.mjs +18 -6
  189. package/esm2022/filter-bar/pipe-add.mjs +5 -5
  190. package/esm2022/filter-bar/pipe.directive.mjs +3 -3
  191. package/esm2022/filter-bar/pipes/base-pipe.mjs +7 -7
  192. package/esm2022/filter-bar/pipes/pipe-button.mjs +3 -3
  193. package/esm2022/filter-bar/pipes/pipe-date.mjs +6 -6
  194. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +6 -6
  195. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +19 -14
  196. package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +12 -7
  197. package/esm2022/filter-bar/pipes/pipe-readonly.mjs +6 -6
  198. package/esm2022/filter-bar/pipes/pipe-select.mjs +6 -6
  199. package/esm2022/filter-bar/pipes/pipe-state.mjs +3 -3
  200. package/esm2022/filter-bar/pipes/pipe-text.mjs +6 -6
  201. package/esm2022/filter-bar/pipes/pipe-title.mjs +3 -3
  202. package/esm2022/filter-bar/pipes/pipe-tree-select.mjs +6 -6
  203. package/esm2022/form-field/cleaner.mjs +3 -3
  204. package/esm2022/form-field/error.mjs +3 -3
  205. package/esm2022/form-field/fieldset.mjs +11 -11
  206. package/esm2022/form-field/form-field.mjs +11 -11
  207. package/esm2022/form-field/form-field.module.mjs +4 -4
  208. package/esm2022/form-field/hint.mjs +3 -3
  209. package/esm2022/form-field/label.mjs +3 -3
  210. package/esm2022/form-field/password-hint.mjs +3 -3
  211. package/esm2022/form-field/password-toggle.mjs +7 -7
  212. package/esm2022/form-field/prefix.mjs +3 -3
  213. package/esm2022/form-field/reactive-password-hint.mjs +3 -3
  214. package/esm2022/form-field/stepper.mjs +3 -3
  215. package/esm2022/form-field/suffix.mjs +3 -3
  216. package/esm2022/form-field/validate.directive.mjs +3 -3
  217. package/esm2022/icon/icon-button.component.mjs +3 -3
  218. package/esm2022/icon/icon-item.component.mjs +3 -3
  219. package/esm2022/icon/icon.component.mjs +4 -4
  220. package/esm2022/icon/icon.module.mjs +4 -4
  221. package/esm2022/inline-edit/index.mjs +3 -0
  222. package/esm2022/inline-edit/inline-edit.mjs +378 -0
  223. package/esm2022/inline-edit/koobiq-components-inline-edit.mjs +5 -0
  224. package/esm2022/inline-edit/module.mjs +25 -0
  225. package/esm2022/input/input-number-validators.mjs +6 -6
  226. package/esm2022/input/input-number.mjs +4 -4
  227. package/esm2022/input/input-password.mjs +4 -4
  228. package/esm2022/input/input.mjs +7 -7
  229. package/esm2022/input/input.module.mjs +4 -4
  230. package/esm2022/link/link.component.mjs +6 -6
  231. package/esm2022/link/link.module.mjs +4 -4
  232. package/esm2022/list/list-selection.component.mjs +10 -10
  233. package/esm2022/list/list.component.mjs +6 -6
  234. package/esm2022/list/list.module.mjs +4 -4
  235. package/esm2022/loader-overlay/loader-overlay.component.mjs +13 -13
  236. package/esm2022/loader-overlay/loader-overlay.module.mjs +4 -4
  237. package/esm2022/markdown/markdown.component.mjs +5 -5
  238. package/esm2022/markdown/markdown.module.mjs +4 -4
  239. package/esm2022/markdown/markdown.service.mjs +3 -3
  240. package/esm2022/modal/css-unit.pipe.mjs +3 -3
  241. package/esm2022/modal/modal-control.service.mjs +3 -3
  242. package/esm2022/modal/modal.component.mjs +4 -4
  243. package/esm2022/modal/modal.directive.mjs +12 -12
  244. package/esm2022/modal/modal.module.mjs +4 -4
  245. package/esm2022/modal/modal.service.mjs +3 -3
  246. package/esm2022/navbar/navbar-item.component.mjs +49 -38
  247. package/esm2022/navbar/navbar.component.mjs +10 -10
  248. package/esm2022/navbar/navbar.module.mjs +4 -4
  249. package/esm2022/navbar/vertical-navbar.component.mjs +4 -4
  250. package/esm2022/navbar-ic/index.mjs +2 -0
  251. package/esm2022/navbar-ic/koobiq-components-navbar-ic.mjs +5 -0
  252. package/esm2022/navbar-ic/navbar-ic-header.mjs +58 -0
  253. package/esm2022/navbar-ic/navbar-ic-item.mjs +391 -0
  254. package/esm2022/navbar-ic/navbar-ic.animation.mjs +9 -0
  255. package/esm2022/navbar-ic/navbar-ic.mjs +286 -0
  256. package/esm2022/navbar-ic/navbar-ic.module.mjs +74 -0
  257. package/esm2022/navbar-ic/public-api.mjs +5 -0
  258. package/esm2022/notification-center/index.mjs +2 -0
  259. package/esm2022/notification-center/koobiq-components-notification-center.mjs +5 -0
  260. package/esm2022/notification-center/notification-center-animations.mjs +18 -0
  261. package/esm2022/notification-center/notification-center.mjs +353 -0
  262. package/esm2022/notification-center/notification-center.module.mjs +38 -0
  263. package/esm2022/notification-center/notification-center.service.mjs +127 -0
  264. package/esm2022/notification-center/notification-item.mjs +70 -0
  265. package/esm2022/notification-center/public-api.mjs +5 -0
  266. package/esm2022/overflow-items/module.mjs +4 -4
  267. package/esm2022/overflow-items/overflow-items.mjs +95 -41
  268. package/esm2022/popover/popover-confirm.component.mjs +10 -10
  269. package/esm2022/popover/popover.component.mjs +24 -14
  270. package/esm2022/popover/popover.module.mjs +4 -4
  271. package/esm2022/progress-bar/progress-bar.component.mjs +9 -9
  272. package/esm2022/progress-bar/progress-bar.module.mjs +4 -4
  273. package/esm2022/progress-spinner/progress-spinner.component.mjs +9 -9
  274. package/esm2022/progress-spinner/progress-spinner.module.mjs +4 -4
  275. package/esm2022/radio/radio.component.mjs +6 -6
  276. package/esm2022/radio/radio.module.mjs +4 -4
  277. package/esm2022/risk-level/risk-level.component.mjs +3 -3
  278. package/esm2022/risk-level/risk-level.module.mjs +4 -4
  279. package/esm2022/scrollbar/scrollbar.component.mjs +3 -3
  280. package/esm2022/scrollbar/scrollbar.directive.mjs +3 -3
  281. package/esm2022/scrollbar/scrollbar.module.mjs +4 -4
  282. package/esm2022/search-expandable/index.mjs +2 -0
  283. package/esm2022/search-expandable/koobiq-components-search-expandable.mjs +5 -0
  284. package/esm2022/search-expandable/public-api.mjs +3 -0
  285. package/esm2022/search-expandable/search-expandable.mjs +177 -0
  286. package/esm2022/search-expandable/search-expandable.module.mjs +18 -0
  287. package/esm2022/select/select-option.directive.mjs +3 -3
  288. package/esm2022/select/select.component.mjs +37 -10
  289. package/esm2022/select/select.module.mjs +4 -4
  290. package/esm2022/sidebar/sidebar.component.mjs +9 -9
  291. package/esm2022/sidebar/sidebar.module.mjs +4 -4
  292. package/esm2022/sidepanel/sidepanel-container.component.mjs +3 -3
  293. package/esm2022/sidepanel/sidepanel-directives.mjs +15 -15
  294. package/esm2022/sidepanel/sidepanel.module.mjs +4 -4
  295. package/esm2022/sidepanel/sidepanel.service.mjs +3 -3
  296. package/esm2022/split-button/index.mjs +2 -0
  297. package/esm2022/split-button/koobiq-components-split-button.mjs +5 -0
  298. package/esm2022/split-button/public-api.mjs +3 -0
  299. package/esm2022/split-button/split-button.mjs +92 -0
  300. package/esm2022/split-button/split-button.module.mjs +18 -0
  301. package/esm2022/splitter/splitter.component.mjs +13 -13
  302. package/esm2022/splitter/splitter.module.mjs +4 -4
  303. package/esm2022/table/table.component.mjs +6 -6
  304. package/esm2022/table/table.module.mjs +4 -4
  305. package/esm2022/tabs/paginated-tab-header.mjs +4 -4
  306. package/esm2022/tabs/tab-body.component.mjs +6 -6
  307. package/esm2022/tabs/tab-content.directive.mjs +3 -3
  308. package/esm2022/tabs/tab-group.component.mjs +15 -15
  309. package/esm2022/tabs/tab-header.component.mjs +4 -4
  310. package/esm2022/tabs/tab-label-wrapper.directive.mjs +4 -4
  311. package/esm2022/tabs/tab-label.directive.mjs +3 -3
  312. package/esm2022/tabs/tab-nav-bar.mjs +10 -10
  313. package/esm2022/tabs/tab.component.mjs +3 -3
  314. package/esm2022/tabs/tabs.module.mjs +4 -4
  315. package/esm2022/tags/tag-input.mjs +17 -11
  316. package/esm2022/tags/tag-list.component.mjs +256 -195
  317. package/esm2022/tags/tag.component.mjs +398 -118
  318. package/esm2022/tags/tag.module.mjs +20 -10
  319. package/esm2022/textarea/textarea.component.mjs +5 -5
  320. package/esm2022/textarea/textarea.module.mjs +4 -4
  321. package/esm2022/time-range/constants.mjs +21 -0
  322. package/esm2022/time-range/index.mjs +8 -0
  323. package/esm2022/time-range/koobiq-components-time-range.mjs +5 -0
  324. package/esm2022/time-range/module.mjs +36 -0
  325. package/esm2022/time-range/time-range-editor.mjs +219 -0
  326. package/esm2022/time-range/time-range-title-as-form-field.mjs +59 -0
  327. package/esm2022/time-range/time-range-title.mjs +112 -0
  328. package/esm2022/time-range/time-range.mjs +229 -0
  329. package/esm2022/time-range/time-range.service.mjs +189 -0
  330. package/esm2022/time-range/types.mjs +2 -0
  331. package/esm2022/timepicker/timepicker.directive.mjs +4 -4
  332. package/esm2022/timepicker/timepicker.module.mjs +4 -4
  333. package/esm2022/timezone/cities-by-filter.pipe.mjs +3 -3
  334. package/esm2022/timezone/timezone-option.component.mjs +3 -3
  335. package/esm2022/timezone/timezone-option.directive.mjs +3 -3
  336. package/esm2022/timezone/timezone-select.component.mjs +9 -9
  337. package/esm2022/timezone/timezone.module.mjs +4 -4
  338. package/esm2022/timezone/utc-offset.pipe.mjs +3 -3
  339. package/esm2022/title/title.directive.mjs +3 -3
  340. package/esm2022/title/title.module.mjs +4 -4
  341. package/esm2022/toast/toast-container.component.mjs +3 -3
  342. package/esm2022/toast/toast.component.mjs +20 -14
  343. package/esm2022/toast/toast.module.mjs +4 -4
  344. package/esm2022/toast/toast.service.mjs +5 -4
  345. package/esm2022/toast/toast.type.mjs +1 -1
  346. package/esm2022/toggle/toggle.component.mjs +3 -3
  347. package/esm2022/toggle/toggle.module.mjs +4 -4
  348. package/esm2022/tooltip/tooltip.component.mjs +20 -20
  349. package/esm2022/tooltip/tooltip.module.mjs +4 -4
  350. package/esm2022/top-bar/module.mjs +4 -4
  351. package/esm2022/top-bar/top-bar.mjs +9 -9
  352. package/esm2022/tree/node.mjs +3 -3
  353. package/esm2022/tree/outlet.mjs +3 -3
  354. package/esm2022/tree/padding.directive.mjs +3 -3
  355. package/esm2022/tree/toggle.mjs +16 -12
  356. package/esm2022/tree/tree-base.mjs +7 -7
  357. package/esm2022/tree/tree-option.component.mjs +5 -9
  358. package/esm2022/tree/tree-selection.component.mjs +4 -4
  359. package/esm2022/tree/tree.mjs +3 -3
  360. package/esm2022/tree/tree.module.mjs +4 -4
  361. package/esm2022/tree-select/tree-select.component.mjs +54 -14
  362. package/esm2022/tree-select/tree-select.module.mjs +4 -4
  363. package/esm2022/username/module.mjs +4 -4
  364. package/esm2022/username/username.mjs +15 -15
  365. package/esm2022/username/username.pipe.mjs +8 -8
  366. package/fesm2022/koobiq-components-accordion.mjs +20 -20
  367. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  368. package/fesm2022/koobiq-components-actions-panel.mjs +10 -10
  369. package/fesm2022/koobiq-components-alert.mjs +16 -16
  370. package/fesm2022/koobiq-components-app-switcher.mjs +704 -0
  371. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -0
  372. package/fesm2022/koobiq-components-autocomplete.mjs +13 -13
  373. package/fesm2022/koobiq-components-badge.mjs +14 -14
  374. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  375. package/fesm2022/koobiq-components-breadcrumbs.mjs +20 -20
  376. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  377. package/fesm2022/koobiq-components-button-toggle.mjs +10 -10
  378. package/fesm2022/koobiq-components-button.mjs +15 -15
  379. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  380. package/fesm2022/koobiq-components-checkbox.mjs +10 -10
  381. package/fesm2022/koobiq-components-clamped-text.mjs +7 -7
  382. package/fesm2022/koobiq-components-code-block.mjs +13 -13
  383. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  384. package/fesm2022/koobiq-components-content-panel.mjs +34 -34
  385. package/fesm2022/koobiq-components-core.mjs +1218 -237
  386. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  387. package/fesm2022/koobiq-components-datepicker.mjs +62 -60
  388. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  389. package/fesm2022/koobiq-components-divider.mjs +8 -8
  390. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  391. package/fesm2022/koobiq-components-dl.mjs +13 -13
  392. package/fesm2022/koobiq-components-dropdown.mjs +69 -35
  393. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  394. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  395. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  396. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  397. package/fesm2022/koobiq-components-file-upload.mjs +60 -25
  398. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  399. package/fesm2022/koobiq-components-filter-bar.mjs +118 -96
  400. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  401. package/fesm2022/koobiq-components-form-field.mjs +60 -60
  402. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  403. package/fesm2022/koobiq-components-icon.mjs +13 -13
  404. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  405. package/fesm2022/koobiq-components-inline-edit.mjs +407 -0
  406. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -0
  407. package/fesm2022/koobiq-components-input.mjs +22 -22
  408. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  409. package/fesm2022/koobiq-components-link.mjs +10 -10
  410. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  411. package/fesm2022/koobiq-components-list.mjs +19 -19
  412. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  413. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  414. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  415. package/fesm2022/koobiq-components-markdown.mjs +12 -12
  416. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  417. package/fesm2022/koobiq-components-modal.mjs +28 -28
  418. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  419. package/fesm2022/koobiq-components-navbar-ic.mjs +797 -0
  420. package/fesm2022/koobiq-components-navbar-ic.mjs.map +1 -0
  421. package/fesm2022/koobiq-components-navbar.mjs +65 -54
  422. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  423. package/fesm2022/koobiq-components-notification-center.mjs +586 -0
  424. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -0
  425. package/fesm2022/koobiq-components-overflow-items.mjs +98 -44
  426. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  427. package/fesm2022/koobiq-components-popover.mjs +36 -26
  428. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  429. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  430. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  431. package/fesm2022/koobiq-components-radio.mjs +10 -10
  432. package/fesm2022/koobiq-components-risk-level.mjs +7 -7
  433. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  434. package/fesm2022/koobiq-components-search-expandable.mjs +199 -0
  435. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -0
  436. package/fesm2022/koobiq-components-select.mjs +43 -16
  437. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  438. package/fesm2022/koobiq-components-sidebar.mjs +13 -13
  439. package/fesm2022/koobiq-components-sidepanel.mjs +25 -25
  440. package/fesm2022/koobiq-components-split-button.mjs +114 -0
  441. package/fesm2022/koobiq-components-split-button.mjs.map +1 -0
  442. package/fesm2022/koobiq-components-splitter.mjs +16 -16
  443. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  444. package/fesm2022/koobiq-components-table.mjs +10 -10
  445. package/fesm2022/koobiq-components-tabs.mjs +52 -52
  446. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  447. package/fesm2022/koobiq-components-tags.mjs +683 -331
  448. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  449. package/fesm2022/koobiq-components-textarea.mjs +8 -8
  450. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  451. package/fesm2022/koobiq-components-time-range.mjs +840 -0
  452. package/fesm2022/koobiq-components-time-range.mjs.map +1 -0
  453. package/fesm2022/koobiq-components-timepicker.mjs +7 -7
  454. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  455. package/fesm2022/koobiq-components-timezone.mjs +24 -24
  456. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  457. package/fesm2022/koobiq-components-title.mjs +7 -7
  458. package/fesm2022/koobiq-components-toast.mjs +28 -21
  459. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  460. package/fesm2022/koobiq-components-toggle.mjs +7 -7
  461. package/fesm2022/koobiq-components-tooltip.mjs +23 -23
  462. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  463. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  464. package/fesm2022/koobiq-components-tree-select.mjs +57 -17
  465. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  466. package/fesm2022/koobiq-components-tree.mjs +44 -44
  467. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  468. package/fesm2022/koobiq-components-username.mjs +27 -27
  469. package/file-upload/_file-upload-theme.scss +1 -1
  470. package/file-upload/file-upload.d.ts +6 -3
  471. package/file-upload/multiple-file-upload.component.d.ts +4 -1
  472. package/file-upload/single-file-upload.component.d.ts +4 -1
  473. package/filter-bar/_filter-bar-theme.scss +2 -2
  474. package/filter-bar/filters.d.ts +1 -0
  475. package/filter-bar/pipes/base-pipe.d.ts +1 -1
  476. package/filter-bar/pipes/base-pipe.scss +3 -3
  477. package/filter-bar/pipes/pipe-date.scss +1 -0
  478. package/form-field/fieldset-tokens.scss +1 -1
  479. package/form-field/form-field-tokens.scss +1 -1
  480. package/form-field/form-field.d.ts +1 -1
  481. package/form-field/form-field.scss +8 -10
  482. package/form-field/password-toggle.d.ts +1 -1
  483. package/icon/icon.component.d.ts +2 -2
  484. package/inline-edit/index.d.ts +2 -0
  485. package/inline-edit/inline-edit-tokens.scss +8 -0
  486. package/inline-edit/inline-edit.d.ts +136 -0
  487. package/inline-edit/inline-edit.scss +208 -0
  488. package/inline-edit/module.d.ts +7 -0
  489. package/input/input-number.d.ts +1 -1
  490. package/input/input-password.d.ts +2 -2
  491. package/input/input.d.ts +2 -2
  492. package/link/link.component.d.ts +3 -3
  493. package/list/list-selection.component.d.ts +1 -1
  494. package/loader-overlay/loader-overlay.component.d.ts +1 -1
  495. package/markdown/_markdown-theme.scss +1 -1
  496. package/markdown/markdown-tokens.scss +1 -0
  497. package/markdown/markdown.scss +8 -0
  498. package/modal/modal.component.d.ts +1 -1
  499. package/navbar/navbar-item.component.d.ts +3 -2
  500. package/navbar/navbar.component.d.ts +4 -4
  501. package/navbar/vertical-navbar.component.d.ts +2 -2
  502. package/navbar-ic/_navbar-ic-theme.scss +81 -0
  503. package/navbar-ic/index.d.ts +1 -0
  504. package/navbar-ic/navbar-ic-divider.scss +7 -0
  505. package/navbar-ic/navbar-ic-header.d.ts +18 -0
  506. package/navbar-ic/navbar-ic-header.scss +53 -0
  507. package/navbar-ic/navbar-ic-item.d.ts +125 -0
  508. package/navbar-ic/navbar-ic-item.scss +96 -0
  509. package/navbar-ic/navbar-ic-tokens.scss +22 -0
  510. package/navbar-ic/navbar-ic.animation.d.ts +2 -0
  511. package/navbar-ic/navbar-ic.d.ts +105 -0
  512. package/navbar-ic/navbar-ic.module.d.ts +14 -0
  513. package/navbar-ic/navbar-ic.scss +32 -0
  514. package/navbar-ic/public-api.d.ts +4 -0
  515. package/notification-center/_notification-center-theme.scss +27 -0
  516. package/notification-center/index.d.ts +1 -0
  517. package/notification-center/notification-center-animations.d.ts +5 -0
  518. package/notification-center/notification-center.d.ts +153 -0
  519. package/notification-center/notification-center.module.d.ts +7 -0
  520. package/notification-center/notification-center.scss +126 -0
  521. package/notification-center/notification-center.service.d.ts +72 -0
  522. package/notification-center/notification-item.d.ts +27 -0
  523. package/notification-center/notification-item.scss +157 -0
  524. package/notification-center/public-api.d.ts +4 -0
  525. package/overflow-items/overflow-items.d.ts +23 -9
  526. package/package.json +52 -10
  527. package/popover/_popover-theme.scss +6 -2
  528. package/popover/popover-tokens.scss +2 -0
  529. package/popover/popover.component.d.ts +8 -1
  530. package/popover/popover.scss +15 -7
  531. package/prebuilt-themes/dark-theme.css +1 -1
  532. package/prebuilt-themes/light-theme.css +1 -1
  533. package/prebuilt-themes/theme.css +1 -1
  534. package/schematics/ng-add/index.js +6 -6
  535. package/search-expandable/index.d.ts +1 -0
  536. package/search-expandable/public-api.d.ts +2 -0
  537. package/search-expandable/search-expandable.d.ts +70 -0
  538. package/search-expandable/search-expandable.module.d.ts +7 -0
  539. package/search-expandable/search-expandable.scss +21 -0
  540. package/select/select.component.d.ts +38 -3
  541. package/split-button/_split-button-theme.scss +59 -0
  542. package/split-button/index.d.ts +1 -0
  543. package/split-button/public-api.d.ts +2 -0
  544. package/split-button/split-button.d.ts +31 -0
  545. package/split-button/split-button.module.d.ts +7 -0
  546. package/split-button/split-button.scss +83 -0
  547. package/splitter/splitter.component.d.ts +5 -5
  548. package/tabs/paginated-tab-header.d.ts +1 -1
  549. package/tabs/tab-header.component.d.ts +2 -2
  550. package/tabs/tab-label-wrapper.directive.d.ts +2 -2
  551. package/tabs/tab-nav-bar.d.ts +3 -3
  552. package/tags/_tag-theme.scss +31 -16
  553. package/tags/tag-input.d.ts +2 -0
  554. package/tags/tag-list.component.d.ts +141 -45
  555. package/tags/tag-list.scss +16 -0
  556. package/tags/tag-tokens.scss +17 -1
  557. package/tags/tag.component.d.ts +151 -22
  558. package/tags/tag.module.d.ts +1 -1
  559. package/tags/tag.scss +27 -0
  560. package/textarea/textarea-tokens.scss +1 -1
  561. package/textarea/textarea.component.d.ts +2 -2
  562. package/time-range/constants.d.ts +8 -0
  563. package/time-range/index.d.ts +7 -0
  564. package/time-range/module.d.ts +10 -0
  565. package/time-range/time-range-editor.d.ts +67 -0
  566. package/time-range/time-range-title-as-form-field.d.ts +40 -0
  567. package/time-range/time-range-title.d.ts +18 -0
  568. package/time-range/time-range.d.ts +75 -0
  569. package/time-range/time-range.scss +66 -0
  570. package/time-range/time-range.service.d.ts +29 -0
  571. package/time-range/types.d.ts +43 -0
  572. package/timepicker/timepicker.directive.d.ts +2 -2
  573. package/toast/toast.component.d.ts +6 -4
  574. package/toast/toast.component.scss +11 -1
  575. package/toast/toast.service.d.ts +1 -0
  576. package/toast/toast.type.d.ts +1 -0
  577. package/tooltip/_tooltip-theme.scss +9 -2
  578. package/tooltip/tooltip-tokens.scss +2 -0
  579. package/tree/toggle.d.ts +1 -1
  580. package/tree/tree-base.d.ts +2 -2
  581. package/tree/tree-option.component.d.ts +1 -1
  582. package/tree/tree-selection.component.d.ts +1 -1
  583. package/tree-select/tree-select.component.d.ts +44 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"koobiq-components-notification-center.mjs","sources":["../../../packages/components/notification-center/notification-center-animations.ts","../../../packages/components/notification-center/notification-center.service.ts","../../../packages/components/notification-center/notification-item.ts","../../../packages/components/notification-center/notification-item.html","../../../packages/components/notification-center/notification-center.ts","../../../packages/components/notification-center/notification-center.html","../../../packages/components/notification-center/notification-center.module.ts","../../../packages/components/notification-center/koobiq-components-notification-center.ts"],"sourcesContent":["import { animate, AnimationTriggerMetadata, state, style, transition, trigger } from '@angular/animations';\nimport { KbqAnimationDurations } from '@koobiq/components/core';\n\n/** @docs-private */\nexport const KbqNotificationCenterAnimations: {\n readonly state: AnimationTriggerMetadata;\n} = {\n /** Animation that transitions a tooltip in and out. */\n state: trigger('state', [\n state(\n 'initial',\n style({\n opacity: 0,\n transform: 'scale(1, 0.8)'\n })\n ),\n transition(\n '* => visible',\n animate(\n '120ms cubic-bezier(0, 0, 0.2, 1)',\n style({\n opacity: 1,\n transform: 'scale(1, 1)'\n })\n )\n ),\n transition('* => hidden', animate(`${KbqAnimationDurations.Rapid} linear`, style({ opacity: 0 })))\n ])\n};\n","import { EventEmitter, inject, Injectable, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter, DateFormatter } from '@koobiq/components/core';\nimport { KbqToastData, KbqToastService, KbqToastStyle } from '@koobiq/components/toast';\nimport { BehaviorSubject, combineLatestWith, merge, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport interface KbqNotificationItem extends Omit<KbqToastData, 'closeButton'> {\n id?: string;\n\n title?: string | TemplateRef<unknown>;\n style?: string | KbqToastStyle;\n\n icon?: boolean | TemplateRef<unknown>;\n iconClass?: string;\n caption?: string | TemplateRef<unknown>;\n\n content?: string | TemplateRef<unknown>;\n actions?: TemplateRef<unknown>;\n\n date: string;\n read?: boolean;\n}\n\nexport const maxUnreadItemsLength = 99;\n\ntype KbqNotificationsGroup = { title: string; items: KbqNotificationItem[] };\n\ntype KbqNotificationsGroups = Record<string, KbqNotificationsGroup>;\n\n@Injectable({ providedIn: 'root' })\nexport class KbqNotificationCenterService {\n /** @docs-private */\n private readonly adapter = inject(DateAdapter);\n /** @docs-private */\n private readonly formatter = inject(DateFormatter);\n /** @docs-private */\n private readonly toastService = inject(KbqToastService);\n\n /** @docs-private */\n readonly silentMode = new BehaviorSubject(false);\n /** @docs-private */\n readonly loadingMode = new BehaviorSubject(false);\n /** @docs-private */\n readonly errorMode = new BehaviorSubject(false);\n /** @docs-private */\n readonly onRead = new BehaviorSubject<KbqNotificationItem | null>(null);\n\n /** Triggers an event when the user presses the reload button. */\n readonly onReload = new EventEmitter<void>();\n\n private originalItems = new BehaviorSubject([] as KbqNotificationItem[]);\n\n /** @docs-private */\n readonly groupedItems = this.originalItems.pipe(\n map((items) => {\n const result: KbqNotificationsGroups = {};\n\n items.map((item) => this.makeGroup(item, result));\n\n return Object.values(result).reverse();\n })\n );\n\n /** Emits an event whenever the changes. */\n readonly changes = merge(this.silentMode, this.loadingMode, this.errorMode, this.originalItems, this.onRead);\n\n /** Notification items */\n get items() {\n return this.originalItems.value;\n }\n\n set items(values: KbqNotificationItem[]) {\n this.originalItems.next(this.setReadState(this.setIds(values)));\n }\n\n /** Number of unread notifications */\n get unreadItemsCounter(): Observable<string> {\n return this.originalItems.pipe(map((items) => items.filter((item) => item.read === false).length)).pipe(\n combineLatestWith(this.onRead),\n map(([value]) => {\n if (value < maxUnreadItemsLength) {\n return value ? value.toString() : '';\n } else {\n return `${maxUnreadItemsLength}+`;\n }\n })\n );\n }\n\n /** true if there are no notifications. */\n get isEmpty() {\n return this.originalItems.value.length === 0;\n }\n\n constructor() {\n this.toastService?.read.pipe(takeUntilDestroyed()).subscribe((toastData) => {\n const item = this.items.find((item) => item.id === toastData?.id);\n\n if (item && !item.read) {\n item.read = true;\n\n this.onRead.next(toastData as KbqNotificationItem);\n }\n });\n }\n\n /** Set silent mode */\n setSilentMode(value: boolean) {\n this.silentMode.next(value);\n }\n\n /** Set loading mode */\n setLoadingMode(value: boolean) {\n this.loadingMode.next(value);\n }\n\n /** Set error mode */\n setErrorMode(value: boolean) {\n this.errorMode.next(value);\n }\n\n /** Push new notification item in center */\n push(item: KbqNotificationItem) {\n this.setReadState(this.setIds([item]));\n\n if (!this.silentMode.value) {\n this.toastService.show(item);\n }\n\n return this.originalItems.next([...this.originalItems.value, item]);\n }\n\n /** Remove notification item */\n remove(removedItem: KbqNotificationItem) {\n this.originalItems.next(this.originalItems.value.filter((item) => removedItem !== item));\n }\n\n /** Remove group of notification items */\n removeGroup(group: KbqNotificationsGroup) {\n this.originalItems.next(this.originalItems.value.filter((item) => !group.items.includes(item)));\n }\n\n /** Remove all notification items */\n removeAll() {\n this.originalItems.next([]);\n }\n\n private makeGroup = (item: KbqNotificationItem, groups: KbqNotificationsGroups) => {\n const parsedDate = this.adapter.parse(item.date, '');\n const groupId = this.adapter.format(parsedDate, 'yyyyMMdd');\n const groupTitle = this.formatter.absoluteLongDate(parsedDate);\n\n if (groups[groupId]) {\n groups[groupId].items.unshift(item);\n } else {\n groups[groupId] = {\n title: groupTitle,\n items: [item]\n };\n }\n };\n\n private setIds(items: KbqNotificationItem[]) {\n items.forEach((item) => (item.id = item.id ?? new Date().getTime().toString()));\n\n return items;\n }\n\n private setReadState(items: KbqNotificationItem[]) {\n items.forEach((item) => (item.read = item.read ?? false));\n\n return items;\n }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport { DateAdapter, KbqReadStateDirective, PopUpPlacements, ThemePalette } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTitleModule } from '@koobiq/components/title';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { filter } from 'rxjs/operators';\nimport { KbqNotificationCenterComponent } from './notification-center';\nimport { KbqNotificationCenterService, KbqNotificationItem } from './notification-center.service';\n\nlet id = 0;\n\n/** @docs-private */\n@Component({\n standalone: true,\n imports: [\n NgTemplateOutlet,\n KbqIconModule,\n NgClass,\n KbqTitleModule,\n KbqButtonModule,\n KbqTooltipTrigger\n ],\n selector: 'kbq-notification-item',\n templateUrl: './notification-item.html',\n styleUrls: ['./notification-item.scss'],\n host: {\n class: 'kbq-notification-item',\n '[class]': 'style'\n },\n hostDirectives: [KbqReadStateDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqNotificationItemComponent {\n private readonly adapter = inject(DateAdapter);\n protected readonly service = inject(KbqNotificationCenterService);\n protected readonly readStateDirective = inject<KbqReadStateDirective>(KbqReadStateDirective, { host: true });\n protected readonly center = inject(KbqNotificationCenterComponent, { host: true });\n\n protected popUpPlacements = PopUpPlacements;\n\n themePalette = ThemePalette;\n id = id++;\n\n time: string;\n\n $implicit;\n\n get style() {\n return {\n [`kbq-notification-item_${this.data.style}`]: !!this.data.style\n };\n }\n\n @Input()\n get data(): KbqNotificationItem {\n return this._data;\n }\n\n set data(value: KbqNotificationItem) {\n this._data = value;\n\n this.time = this.adapter.format(this.adapter.parse(value.date, ''), 'HH:mm');\n }\n\n private _data: KbqNotificationItem;\n\n constructor() {\n this.$implicit = this;\n\n this.readStateDirective.read\n .pipe(\n filter((value: boolean) => value),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n this.data.read = true;\n\n this.service.onRead.next(this.data);\n });\n }\n\n isTemplateRef(value): boolean {\n return value instanceof TemplateRef;\n }\n}\n","@if (data.icon) {\n <div class=\"kbq-notification-item__icon-container layout-row layout-align-start-start\">\n @if (data.icon === true) {\n @switch (data.style) {\n @case ('contrast') {\n <i\n kbq-icon=\"kbq-info-circle_16\"\n class=\"kbq-notification-item__icon\"\n [color]=\"$any(data.style)\"\n [ngClass]=\"data.iconClass\"\n ></i>\n }\n @case ('success') {\n <i\n kbq-icon=\"kbq-check-circle_16\"\n class=\"kbq-notification-item__icon\"\n [color]=\"$any(data.style)\"\n [ngClass]=\"data.iconClass\"\n ></i>\n }\n @case ('warning') {\n <i\n kbq-icon=\"kbq-exclamation-triangle_16\"\n class=\"kbq-notification-item__icon\"\n [color]=\"$any(data.style)\"\n [ngClass]=\"data.iconClass\"\n ></i>\n }\n @case ('error') {\n <i\n kbq-icon=\"kbq-exclamation-triangle_16\"\n class=\"kbq-notification-item__icon\"\n [color]=\"$any(data.style)\"\n [ngClass]=\"data.iconClass\"\n ></i>\n }\n }\n } @else if (isTemplateRef(data.icon)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.icon)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n\n<div class=\"kbq-notification-item__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-notification-item__title\"\n [class.kbq-notification-item__title_with-content]=\"data.caption || data.content\"\n >\n @if (isTemplateRef(data.title)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.title)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n @if (!isTemplateRef(data.title)) {\n <p>{{ data.title }}</p>\n }\n\n <div class=\"kbq-notification-item-time\" [class.kbq-notification-item-time_read]=\"data.read\">\n <div class=\"kbq-notification-item-time__value\">{{ time }}</div>\n <i class=\"kbq-notification-item-time__state\" kbq-icon=\"kbq-circle-xs_16\" [color]=\"'theme'\"></i>\n </div>\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-notification-item__text]=\"data.title\"\n [class.kbq-notification-item__title]=\"!data.title\"\n >\n @if (isTemplateRef(data.caption)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.caption)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n @if (!isTemplateRef(data.caption)) {\n {{ data.caption }}\n }\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-notification-item__content\">\n @if (isTemplateRef(data.content)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.content)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n @if (!isTemplateRef(data.content)) {\n {{ data.content }}\n }\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-notification-item__actions\">\n @if (isTemplateRef(data.actions)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.actions)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n @if (!isTemplateRef(data.actions)) {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n<button\n kbq-button\n class=\"kbq-notification-item__remove-button\"\n [kbqStyle]=\"'transparent'\"\n [color]=\"'contrast'\"\n [kbqTooltipArrow]=\"false\"\n [kbqTooltip]=\"center.localeData.remove\"\n [kbqPlacement]=\"popUpPlacements.Right\"\n (click)=\"service.remove(data)\"\n>\n <i kbq-icon=\"kbq-trash_16\"></i>\n</button>\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n CdkScrollable,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { AsyncPipe } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n EventEmitter,\n InjectionToken,\n Input,\n OnInit,\n Output,\n TemplateRef,\n Type,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n numberAttribute\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KbqBadgeModule } from '@koobiq/components/badge';\nimport { KbqButton, KbqButtonModule } from '@koobiq/components/button';\nimport {\n DateAdapter,\n KBQ_LOCALE_SERVICE,\n KbqPopUp,\n KbqPopUpTrigger,\n POSITION_TO_CSS_MAP,\n PopUpPlacements,\n PopUpSizes,\n PopUpTriggers,\n applyPopupMargins,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqDividerModule } from '@koobiq/components/divider';\nimport { KbqDropdownModule } from '@koobiq/components/dropdown';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqLoaderOverlayModule } from '@koobiq/components/loader-overlay';\nimport { KbqScrollbar, KbqScrollbarModule } from '@koobiq/components/scrollbar';\nimport { KbqToolTipModule } from '@koobiq/components/tooltip';\nimport { Subscription, merge } from 'rxjs';\nimport { KbqNotificationCenterAnimations } from './notification-center-animations';\nimport { KbqNotificationCenterService } from './notification-center.service';\nimport { KbqNotificationItemComponent } from './notification-item';\n\nconst defaultOffsetX = 8;\n\n/**default configuration of notification-center */\nexport const KBQ_NOTIFICATION_CENTER_DEFAULT_CONFIGURATION = ruRULocaleData.notificationCenter;\n\n/** Injection Token for providing configuration of notification-center */\nexport const KBQ_NOTIFICATION_CENTER_CONFIGURATION = new InjectionToken('KbqNotificationCenterConfiguration');\n\n/** @docs-private */\nexport const KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'kbq-notification-center-scroll-strategy'\n);\n\n/** @docs-private */\nexport function kbqNotificationCenterScrollStrategyFactory(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition({ scrollThrottle: 20 });\n}\n\n/** @docs-private */\nexport const KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: kbqNotificationCenterScrollStrategyFactory\n};\n\n/** @docs-private */\n@Component({\n standalone: true,\n selector: 'kbq-notification-center',\n templateUrl: './notification-center.html',\n styleUrls: ['./notification-center.scss'],\n preserveWhitespaces: false,\n host: {\n class: 'kbq-notification-center',\n '[class.kbq-notification-center_popover]': 'popoverMode',\n '(keydown.escape)': 'escapeHandler()'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n KbqIconModule,\n KbqBadgeModule,\n KbqScrollbarModule,\n KbqButtonModule,\n KbqDividerModule,\n KbqDropdownModule,\n KbqToolTipModule,\n AsyncPipe,\n KbqNotificationItemComponent,\n KbqLoaderOverlayModule\n ],\n animations: [KbqNotificationCenterAnimations.state]\n})\nexport class KbqNotificationCenterComponent extends KbqPopUp implements AfterViewInit {\n /** @docs-private */\n protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n /** @docs-private */\n protected readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n /** @docs-private */\n protected readonly dateAdapter = inject(DateAdapter);\n /** @docs-private */\n protected readonly service = inject(KbqNotificationCenterService);\n\n @ViewChild(KbqScrollbar) private scrollContainer: KbqScrollbar;\n\n readonly externalConfiguration = inject(KBQ_NOTIFICATION_CENTER_CONFIGURATION, { optional: true });\n\n configuration;\n\n /** @docs-private */\n protected popoverMode: boolean;\n\n /** @docs-private */\n protected isTopOverflow: boolean = false;\n /** @docs-private */\n protected isBottomOverflow: boolean = false;\n\n /** localized data\n * @docs-private */\n get localeData() {\n return this.configuration;\n }\n\n /** @docs-private */\n prefix = 'kbq-notification-center';\n /** @docs-private */\n trigger: KbqNotificationCenterTrigger;\n /** @docs-private */\n isTrapFocus: boolean = false;\n\n @ViewChild('notificationSwitcher') switcher: KbqButton;\n\n get popoverHeight(): string {\n return this._popoverHeight;\n }\n\n set popoverHeight(value: string) {\n this._popoverHeight = value;\n\n this.elementRef.nativeElement.style.height = value;\n }\n\n private _popoverHeight: string;\n\n constructor() {\n super();\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n if (!this.localeService) {\n this.initDefaultParams();\n }\n }\n\n ngAfterViewInit() {\n this.visibleChange.subscribe((state) => {\n if (this.offset !== null && state) {\n applyPopupMargins(\n this.renderer,\n this.elementRef.nativeElement,\n this.prefix,\n `${this.offset!.toString()}px`\n );\n }\n });\n\n this.service.changes.subscribe(() => this.changeDetectorRef.markForCheck());\n\n this.switcher.focus();\n\n setTimeout(this.checkOverflow);\n }\n\n /** @docs-private */\n updateClassMap(placement: string, customClass: string, size: PopUpSizes) {\n super.updateClassMap(placement, customClass, { [`${this.prefix}_${size}`]: !!size });\n }\n\n /** @docs-private */\n updateTrapFocus(isTrapFocus: boolean): void {\n this.isTrapFocus = isTrapFocus;\n }\n\n /** @docs-private */\n escapeHandler() {\n this.hide(0);\n }\n\n protected checkOverflow = () => {\n const nativeElement = this.scrollContainer.contentElement.nativeElement;\n\n const { scrollTop, offsetHeight, scrollHeight } = nativeElement;\n\n this.isTopOverflow = scrollTop > 0;\n\n this.isBottomOverflow = scrollTop + offsetHeight < scrollHeight;\n\n this.changeDetectorRef.markForCheck();\n };\n\n private updateLocaleParams = () => {\n this.configuration = this.externalConfiguration || this.localeService?.getParams('notificationCenter');\n\n this.changeDetectorRef.markForCheck();\n };\n\n private initDefaultParams() {\n this.configuration = KBQ_NOTIFICATION_CENTER_DEFAULT_CONFIGURATION;\n }\n}\n\n@Directive({\n standalone: true,\n selector: '[kbqNotificationCenterTrigger]',\n exportAs: 'kbqNotificationCenterTrigger',\n host: {\n '[class.kbq-notification-center_open]': 'isOpen',\n '[class.kbq-active]': 'hasClickTrigger && isOpen'\n }\n})\nexport class KbqNotificationCenterTrigger\n extends KbqPopUpTrigger<KbqNotificationCenterComponent>\n implements AfterContentInit, OnInit\n{\n /** @docs-private */\n protected scrollStrategy: () => ScrollStrategy = inject(KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY);\n /** @docs-private */\n protected readonly service = inject(KbqNotificationCenterService);\n\n // not used\n /** @docs-private */\n arrow: boolean = false;\n /** @docs-private */\n customClass: string;\n /** @docs-private */\n private hasBackdrop: boolean = false;\n /** @docs-private */\n private size: PopUpSizes = PopUpSizes.Medium;\n /** @docs-private */\n content: string | TemplateRef<any>;\n /** @docs-private */\n header: string | TemplateRef<any>;\n /** @docs-private */\n footer: string | TemplateRef<any>;\n /** @docs-private */\n private closeOnScroll: null;\n\n /** Number of unread notifications */\n get unreadItemsCounter() {\n return this.service.unreadItemsCounter;\n }\n\n /** Placement of popUp */\n @Input('kbqNotificationCenterPlacement') placement: PopUpPlacements = PopUpPlacements.Right;\n\n /** Class that will be used in the background */\n @Input() backdropClass: string = 'cdk-overlay-transparent-backdrop';\n\n /** Class that will be used in the panel */\n @Input('kbqNotificationCenterPanelClass') panelClass: string;\n\n /** Offset of popUp */\n @Input({ transform: numberAttribute }) offset: number | null = defaultOffsetX;\n\n /** Use popover or not */\n @Input({ transform: booleanAttribute })\n get popoverMode(): boolean {\n return this._popoverMode;\n }\n\n set popoverMode(value: boolean) {\n this._popoverMode = value;\n\n this.placement = PopUpPlacements.Bottom;\n this.updatePlacementPriority(['bottomCenter', 'bottomLeft', 'bottomRight']);\n }\n\n private _popoverMode: boolean = false;\n\n /** Set height of popover. Default is calc(100vh - 48px). 48px - height of navbar */\n @Input()\n get popoverHeight(): string {\n return this._popoverHeight;\n }\n\n set popoverHeight(value: string) {\n this._popoverHeight = value;\n\n if (this.instance?.popoverHeight) {\n this.instance.popoverHeight = value;\n }\n }\n\n private _popoverHeight: string;\n\n /** Whether the trigger is disabled. */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this._disabled) {\n this.hide();\n }\n }\n\n /** @docs-private */\n get hasClickTrigger(): boolean {\n return this.trigger.includes(PopUpTriggers.Click);\n }\n\n /** Emits a change event whenever the placement state changes. */\n @Output('kbqPlacementChange') readonly placementChange = new EventEmitter();\n\n /** Emits a change event whenever the visible state changes. */\n @Output('kbqVisibleChange') readonly visibleChange = new EventEmitter<boolean>();\n\n /** @docs-private */\n trigger: string = `${PopUpTriggers.Click}, ${PopUpTriggers.Keydown}`;\n\n /** @docs-private */\n protected originSelector = '.kbq-notification-center';\n\n /** @docs-private */\n protected get overlayConfig(): OverlayConfig {\n const defaultPanelClass = 'kbq-notification-center__panel';\n\n return {\n panelClass: this.panelClass ? [defaultPanelClass, this.panelClass] : defaultPanelClass,\n hasBackdrop: this.hasBackdrop,\n backdropClass: this.backdropClass\n };\n }\n\n /** @docs-private */\n protected preventClosingByInnerScrollSubscription: Subscription;\n\n constructor() {\n super();\n\n this.updatePlacementPriority(['right', 'rightBottom', 'rightTop']);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n this.scrollable\n ?.elementScrolled()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(this.hideIfNotInViewPort);\n }\n\n ngAfterContentInit(): void {\n if (this.closeOnScroll === null) {\n this.scrollDispatcher.scrolled().subscribe((scrollable: CdkScrollable | void) => {\n if (!scrollable?.getElementRef().nativeElement.classList.contains('kbq-hide-nested-popup')) return;\n\n const parentRects = scrollable.getElementRef().nativeElement.getBoundingClientRect();\n const childRects = this.elementRef.nativeElement.getBoundingClientRect();\n\n if (childRects.bottom < parentRects.top || childRects.top > parentRects.bottom) {\n this.hide();\n }\n });\n }\n\n this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible: boolean) => {\n if (visible) {\n // eslint-disable-next-line rxjs/no-nested-subscribe\n this.preventClosingByInnerScrollSubscription = this.closingActions().subscribe((event) => {\n if (event['scrollDispatcher']) {\n event['kbqPopoverPreventHide'] = true;\n event['type'] = 'click';\n }\n });\n } else {\n this.preventClosingByInnerScrollSubscription.unsubscribe();\n this.focus();\n }\n });\n }\n\n /** @docs-private */\n updateData() {\n if (!this.instance) return;\n\n this.instance.header = this.header;\n this.instance.content = this.content;\n this.instance.arrow = this.arrow;\n this.instance.offset = this.offset;\n this.instance.footer = this.footer;\n this.instance.popoverMode = this.popoverMode;\n this.instance.popoverHeight = this.popoverHeight;\n\n this.instance.updateTrapFocus(this.trigger !== PopUpTriggers.Focus);\n\n if (this.isOpen) {\n this.updatePosition(true);\n }\n }\n\n /** Updates the current position.\n *\n * @docs-private */\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 if (reapplyPosition) {\n setTimeout(() => position.reapplyLastPosition());\n }\n }\n\n /** @docs-private */\n getOverlayHandleComponentType(): Type<KbqNotificationCenterComponent> {\n return KbqNotificationCenterComponent;\n }\n\n /** @docs-private */\n updateClassMap(newPlacement: string = this.placement) {\n if (!this.instance) return;\n\n this.instance.updateClassMap(POSITION_TO_CSS_MAP[newPlacement], this.customClass, this.size);\n this.instance.markForCheck();\n }\n\n /** @docs-private */\n closingActions() {\n return merge(\n this.overlayRef!.outsidePointerEvents(),\n this.overlayRef!.backdropClick(),\n this.scrollDispatcher.scrolled()\n );\n }\n\n private hideIfNotInViewPort = () => {\n if (!this.scrollable) return;\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const containerRect = this.scrollable.getElementRef().nativeElement.getBoundingClientRect();\n\n if (\n !(\n rect.bottom >= containerRect.top &&\n rect.right >= containerRect.left &&\n rect.top <= containerRect.bottom &&\n rect.left <= containerRect.right\n )\n ) {\n this.hide();\n }\n };\n}\n","<div class=\"kbq-notification-center-header\">\n <div class=\"kbq-notification-center-title\">\n <div class=\"kbq-notification-center-title__text\">{{ localeData.notifications }}</div>\n <button\n #notificationSwitcher\n #dropdownTrigger=\"kbqDropdownTrigger\"\n kbq-button\n class=\"kbq-notification-center-title__button\"\n [kbqDropdownTriggerFor]=\"notificationSwitcherDropdown\"\n [kbqTooltip]=\"service.silentMode.value ? localeData.doNotDisturb : localeData.showPopUpNotifications\"\n [kbqTooltipArrow]=\"false\"\n [kbqTooltipOffset]=\"4\"\n [kbqTooltipDisabled]=\"dropdownTrigger.opened\"\n [kbqStyle]=\"'transparent'\"\n [color]=\"'contrast'\"\n >\n <i kbq-icon=\"{{ service.silentMode.value ? 'kbq-bell-slash_16' : 'kbq-bell_16' }}\"></i>\n </button>\n </div>\n <div class=\"kbq-notification-center-toolbar\">\n @if (!service.isEmpty) {\n <button\n kbq-button\n class=\"kbq-notification-center-toolbar__button\"\n [kbqStyle]=\"'transparent'\"\n [color]=\"'contrast'\"\n (click)=\"service.removeAll()\"\n >\n <i kbq-icon=\"kbq-trash_16\"></i>\n </button>\n\n <kbq-divider [vertical]=\"true\" />\n }\n\n <button\n kbq-button\n class=\"kbq-notification-center-toolbar__button\"\n [kbqStyle]=\"'transparent'\"\n [color]=\"'contrast'\"\n (click)=\"hide(0)\"\n >\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n</div>\n\n<div\n kbq-scrollbar\n class=\"kbq-notification-center-container\"\n [class.kbq-notification-center_bottom-overflow]=\"isBottomOverflow\"\n (onScroll)=\"checkOverflow()\"\n>\n @if (!service.errorMode.value) {\n @if (!service.loadingMode.value) {\n @for (group of service.groupedItems | async; track group) {\n <div\n class=\"kbq-notification-center-sub-header\"\n [class.kbq-notification-center_top-overflow]=\"isTopOverflow\"\n >\n <div class=\"kbq-notification-center-sub-header__date\">{{ group.title }}</div>\n\n <button\n kbq-button\n class=\"kbq-notification-center-sub-header__button\"\n [kbqStyle]=\"'transparent'\"\n [color]=\"'contrast'\"\n [kbqTooltip]=\"localeData.remove\"\n [kbqTooltipArrow]=\"false\"\n (click)=\"service.removeGroup(group)\"\n >\n <i kbq-icon=\"kbq-trash_16\"></i>\n </button>\n </div>\n\n @for (item of group.items; track item) {\n <kbq-notification-item [data]=\"item\" />\n }\n } @empty {\n <div class=\"kbq-notification-center-empty-container\">\n <i kbq-icon-item=\"kbq-bell_16\" [big]=\"true\" [color]=\"'contrast-fade'\"></i>\n {{ localeData.noNotifications }}\n </div>\n }\n } @else {\n <kbq-loader-overlay [transparent]=\"true\" />\n }\n } @else {\n <div class=\"kbq-notification-center-error-container\">\n <i kbq-icon-item=\"kbq-bell_16\" [big]=\"true\" [color]=\"'error'\" [fade]=\"true\"></i>\n {{ localeData.failedToLoadNotifications }}\n <button kbq-button [kbqStyle]=\"'transparent'\" [color]=\"'theme'\" (click)=\"service.onReload.emit()\">\n {{ localeData.repeat }}\n </button>\n </div>\n }\n</div>\n\n<kbq-dropdown #notificationSwitcherDropdown=\"kbqDropdown\">\n <button kbq-dropdown-item (click)=\"service.setSilentMode(false)\">\n <i kbq-icon=\"{{ !service.silentMode.value ? 'kbq-circle-xs_16' : '' }}\" [style.min-width.px]=\"16\"></i>\n {{ localeData.showPopUpNotifications }}\n </button>\n <button kbq-dropdown-item (click)=\"service.setSilentMode(true)\">\n <i kbq-icon=\"{{ service.silentMode.value ? 'kbq-circle-xs_16' : '' }}\" [style.min-width.px]=\"16\"></i>\n {{ localeData.doNotDisturb }}\n </button>\n</kbq-dropdown>\n","import { ConfigurableFocusTrapFactory, FOCUS_TRAP_INERT_STRATEGY, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { DateAdapter, DateFormatter, EmptyFocusTrapStrategy } from '@koobiq/components/core';\nimport {\n KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n KbqNotificationCenterComponent,\n KbqNotificationCenterTrigger\n} from './notification-center';\nimport { KbqNotificationCenterService } from './notification-center.service';\n\n@NgModule({\n imports: [\n KbqNotificationCenterComponent,\n KbqNotificationCenterTrigger\n ],\n exports: [\n KbqNotificationCenterComponent,\n KbqNotificationCenterTrigger\n ],\n providers: [\n KBQ_NOTIFICATION_CENTER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n { provide: FocusTrapFactory, useClass: ConfigurableFocusTrapFactory },\n { provide: FOCUS_TRAP_INERT_STRATEGY, useClass: EmptyFocusTrapStrategy },\n { provide: KbqNotificationCenterService, deps: [DateAdapter, DateFormatter] }]\n})\nexport class KbqNotificationCenterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Renderer2, ElementRef, signal, computed, Directive, input, numberAttribute, booleanAttribute, contentChildren, contentChild, output, NgModule } from '@angular/core';
2
+ import { inject, Renderer2, signal, computed, Directive, input, numberAttribute, booleanAttribute, contentChildren, contentChild, output, NgModule } from '@angular/core';
3
3
  import { SharedResizeObserver } from '@angular/cdk/observers/private';
4
4
  import { DOCUMENT } from '@angular/common';
5
5
  import { toSignal, outputToObservable, toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import { kbqInjectNativeElement, KBQ_WINDOW } from '@koobiq/components/core';
6
7
  import { merge, switchMap, skip, debounceTime } from 'rxjs';
7
8
 
8
9
  /**
@@ -13,8 +14,11 @@ import { merge, switchMap, skip, debounceTime } from 'rxjs';
13
14
  class ElementVisibilityManager {
14
15
  constructor() {
15
16
  this.renderer = inject(Renderer2);
16
- this.elementRef = inject(ElementRef);
17
17
  this.hiddenState = signal(false);
18
+ /**
19
+ * @docs-private
20
+ */
21
+ this.element = kbqInjectNativeElement();
18
22
  /**
19
23
  * Whether the element is hidden.
20
24
  *
@@ -28,8 +32,8 @@ class ElementVisibilityManager {
28
32
  * @docs-private
29
33
  */
30
34
  hide() {
31
- this.renderer.setStyle(this.elementRef.nativeElement, 'visibility', 'hidden');
32
- this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'absolute');
35
+ this.renderer.setStyle(this.element, 'visibility', 'hidden');
36
+ this.renderer.setStyle(this.element, 'position', 'absolute');
33
37
  this.hiddenState.set(true);
34
38
  }
35
39
  /**
@@ -38,14 +42,14 @@ class ElementVisibilityManager {
38
42
  * @docs-private
39
43
  */
40
44
  show() {
41
- this.renderer.removeStyle(this.elementRef.nativeElement, 'visibility');
42
- this.renderer.removeStyle(this.elementRef.nativeElement, 'position');
45
+ this.renderer.removeStyle(this.element, 'visibility');
46
+ this.renderer.removeStyle(this.element, 'position');
43
47
  this.hiddenState.set(false);
44
48
  }
45
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElementVisibilityManager, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
46
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ElementVisibilityManager, host: { properties: { "attr.aria-hidden": "hidden()", "class.kbq-overflow-item-hidden": "hidden()" } }, ngImport: i0 }); }
49
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ElementVisibilityManager, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
50
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ElementVisibilityManager, host: { properties: { "attr.aria-hidden": "hidden()", "class.kbq-overflow-item-hidden": "hidden()" } }, ngImport: i0 }); }
47
51
  }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElementVisibilityManager, decorators: [{
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ElementVisibilityManager, decorators: [{
49
53
  type: Directive,
50
54
  args: [{
51
55
  host: {
@@ -59,10 +63,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
59
63
  * Directive for displaying the result of hidden items by the `KbqOverflowItems` directive.
60
64
  */
61
65
  class KbqOverflowItemsResult extends ElementVisibilityManager {
62
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItemsResult, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
63
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: KbqOverflowItemsResult, isStandalone: true, selector: "[kbqOverflowItemsResult]", host: { classAttribute: "kbq-overflow-items-result" }, exportAs: ["kbqOverflowItemsResult"], usesInheritance: true, ngImport: i0 }); }
66
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItemsResult, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
67
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: KbqOverflowItemsResult, isStandalone: true, selector: "[kbqOverflowItemsResult]", host: { classAttribute: "kbq-overflow-items-result" }, exportAs: ["kbqOverflowItemsResult"], usesInheritance: true, ngImport: i0 }); }
64
68
  }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItemsResult, decorators: [{
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItemsResult, decorators: [{
66
70
  type: Directive,
67
71
  args: [{
68
72
  standalone: true,
@@ -100,10 +104,10 @@ class KbqOverflowItem extends ElementVisibilityManager {
100
104
  return;
101
105
  super.hide();
102
106
  }
103
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItem, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
104
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: KbqOverflowItem, isStandalone: true, selector: "[kbqOverflowItem]", inputs: { id: { classPropertyName: "id", publicName: "kbqOverflowItem", isSignal: true, isRequired: true, transformFunction: null }, order: { classPropertyName: "order", publicName: "order", isSignal: true, isRequired: false, transformFunction: null }, alwaysVisible: { classPropertyName: "alwaysVisible", publicName: "alwaysVisible", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.kbq-overflow-item_always-visible": "alwaysVisible()" }, classAttribute: "kbq-overflow-item" }, exportAs: ["kbqOverflowItem"], usesInheritance: true, ngImport: i0 }); }
107
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItem, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
108
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: KbqOverflowItem, isStandalone: true, selector: "[kbqOverflowItem]", inputs: { id: { classPropertyName: "id", publicName: "kbqOverflowItem", isSignal: true, isRequired: true, transformFunction: null }, order: { classPropertyName: "order", publicName: "order", isSignal: true, isRequired: false, transformFunction: null }, alwaysVisible: { classPropertyName: "alwaysVisible", publicName: "alwaysVisible", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.kbq-overflow-item_always-visible": "alwaysVisible()" }, classAttribute: "kbq-overflow-item" }, exportAs: ["kbqOverflowItem"], usesInheritance: true, ngImport: i0 }); }
105
109
  }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItem, decorators: [{
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItem, decorators: [{
107
111
  type: Directive,
108
112
  args: [{
109
113
  standalone: true,
@@ -120,10 +124,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
120
124
  */
121
125
  class KbqOverflowItems {
122
126
  constructor() {
123
- this.elementRef = inject(ElementRef);
127
+ this.element = kbqInjectNativeElement();
124
128
  this.resizeObserver = inject(SharedResizeObserver);
125
129
  this.renderer = inject(Renderer2);
126
130
  this.document = inject(DOCUMENT);
131
+ this.window = inject(KBQ_WINDOW);
127
132
  /**
128
133
  * `KbqOverflowItem` directive references.
129
134
  */
@@ -135,6 +140,11 @@ class KbqOverflowItems {
135
140
  /**
136
141
  * Whether the overflow order should be reversed.
137
142
  *
143
+ * @example
144
+ * ```
145
+ * [0, 1, hidden, hidden] ---> [hidden, hidden, 2, 3]
146
+ * ```
147
+ *
138
148
  * @default false
139
149
  */
140
150
  this.reverseOverflowOrder = input(false, { transform: booleanAttribute });
@@ -161,22 +171,46 @@ class KbqOverflowItems {
161
171
  initialValue: new Set([])
162
172
  });
163
173
  /**
164
- * Determines if the given element has a scrollbar.
174
+ * Defines the orientation of the overflow items.
175
+ *
176
+ * @default 'horizontal'
165
177
  */
166
- this.hasScrollbar = ({ scrollWidth, clientWidth }) => scrollWidth > clientWidth;
178
+ this.orientation = input('horizontal');
179
+ this.orientationConfig = {
180
+ horizontal: {
181
+ containerSize: (element) => element.clientWidth,
182
+ paddingStart: ({ paddingLeft }) => parseFloat(paddingLeft) || 0,
183
+ paddingEnd: ({ paddingRight }) => parseFloat(paddingRight) || 0,
184
+ itemSize: (element) => {
185
+ const { marginRight, marginLeft } = this.window.getComputedStyle(element);
186
+ return element.offsetWidth + (parseFloat(marginLeft) || 0) + (parseFloat(marginRight) || 0);
187
+ },
188
+ flexDirection: 'row'
189
+ },
190
+ vertical: {
191
+ containerSize: (element) => element.clientHeight,
192
+ paddingStart: ({ paddingTop }) => parseFloat(paddingTop) || 0,
193
+ paddingEnd: ({ paddingBottom }) => parseFloat(paddingBottom) || 0,
194
+ itemSize: (element) => {
195
+ const { marginTop, marginBottom } = this.window.getComputedStyle(element);
196
+ return element.offsetHeight + (parseFloat(marginTop) || 0) + (parseFloat(marginBottom) || 0);
197
+ },
198
+ flexDirection: 'column'
199
+ }
200
+ };
167
201
  this.setStyles();
168
202
  this.setupObservers();
169
203
  }
170
204
  setupObservers() {
171
- const resizeObservers = merge(this.resizeObserver.observe(this.elementRef.nativeElement), toObservable(this.additionalResizeObserverTargets).pipe(switchMap((targets) => {
205
+ const resizeObservers = merge(this.resizeObserver.observe(this.element), toObservable(this.additionalResizeObserverTargets).pipe(switchMap((targets) => {
172
206
  return Array.isArray(targets)
173
207
  ? merge(...targets.map((target) => this.resizeObserver.observe(target)))
174
208
  : this.resizeObserver.observe(targets);
175
209
  })));
176
- merge(toObservable(this.items), toObservable(this.reverseOverflowOrder).pipe(skip(1)), resizeObservers)
210
+ merge(toObservable(this.items), toObservable(this.reverseOverflowOrder).pipe(skip(1)), toObservable(this.orientation).pipe(skip(1)), resizeObservers)
177
211
  .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())
178
212
  .subscribe(() => {
179
- const hiddenItems = this.getHiddenItems(this.sortItemsByOrder(this.excludeAlwaysVisibleItems(this.items())), this.reverseOverflowOrder(), this.result(), this.elementRef.nativeElement);
213
+ const hiddenItems = this.getHiddenItems(this.sortItemsByOrder(this.items()), this.reverseOverflowOrder(), this.result(), this.element, this.orientation());
180
214
  const hiddenItemIDs = new Set(hiddenItems.map(({ id }) => id()));
181
215
  this.changes.emit(hiddenItemIDs);
182
216
  });
@@ -189,24 +223,19 @@ class KbqOverflowItems {
189
223
  const itemsWithOrder = Array.from(items, (item, index) => ({ item, order: item.order() ?? index }));
190
224
  return itemsWithOrder.sort((a, b) => a.order - b.order).map(({ item }) => item);
191
225
  }
192
- /**
193
- * Excludes items that have the `alwaysVisible` attribute.
194
- */
195
- excludeAlwaysVisibleItems(items) {
196
- return items.filter(({ alwaysVisible }) => !alwaysVisible());
197
- }
198
226
  /**
199
227
  * Manages the visibility of items based on the available space in the container and returns the hidden items.
200
228
  * Direction of hiding is determined by the `reverseOverflowOrder` attribute.
201
229
  */
202
- getHiddenItems(items, reverseOverflowOrder, result, container) {
230
+ getHiddenItems(items, reverseOverflowOrder, result, container, orientation) {
203
231
  result?.hide();
204
232
  items.forEach((item) => item.show());
205
- while (this.hasScrollbar(container)) {
206
- const visibleItems = items.filter(({ hidden }) => !hidden());
207
- if (visibleItems.length === 0)
233
+ while (this.hasOverflown(container, items, result, orientation)) {
234
+ const itemToHide = reverseOverflowOrder
235
+ ? items.find(({ hidden, alwaysVisible }) => !hidden() && !alwaysVisible())
236
+ : this.findLast(items, ({ hidden, alwaysVisible }) => !hidden() && !alwaysVisible());
237
+ if (!itemToHide)
208
238
  break;
209
- const itemToHide = reverseOverflowOrder ? visibleItems[0] : visibleItems[visibleItems.length - 1];
210
239
  itemToHide.hide();
211
240
  result?.show();
212
241
  }
@@ -216,16 +245,41 @@ class KbqOverflowItems {
216
245
  * This method sets the necessary styles for the directive.
217
246
  */
218
247
  setStyles() {
219
- this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'relative');
220
- this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'flex');
221
- this.renderer.setStyle(this.elementRef.nativeElement, 'flex-wrap', 'nowrap');
222
- this.renderer.setStyle(this.elementRef.nativeElement, 'flex-grow', '1');
223
- this.renderer.setStyle(this.elementRef.nativeElement, 'overflow', 'hidden');
248
+ this.renderer.setStyle(this.element, 'position', 'relative');
249
+ this.renderer.setStyle(this.element, 'overflow', 'hidden');
250
+ this.renderer.setStyle(this.element, 'display', 'flex');
251
+ this.renderer.setStyle(this.element, 'flex-grow', '1');
252
+ this.renderer.setStyle(this.element, 'flex-wrap', 'nowrap');
253
+ toObservable(this.orientation)
254
+ .pipe(takeUntilDestroyed())
255
+ .subscribe((orientation) => {
256
+ const { flexDirection } = this.orientationConfig[orientation];
257
+ this.renderer.setStyle(this.element, 'flex-direction', flexDirection);
258
+ });
259
+ }
260
+ hasOverflown(container, items, result, orientation) {
261
+ const { containerSize, paddingStart, paddingEnd, itemSize } = this.orientationConfig[orientation];
262
+ const computedStyle = this.window.getComputedStyle(container);
263
+ const containerSizeWithoutPaddings = containerSize(container) - paddingStart(computedStyle) - paddingEnd(computedStyle);
264
+ const itemsSize = items.reduce((size, item) => size + (item.hidden() ? 0 : itemSize(item.element)), 0);
265
+ const resultSize = !result || result.hidden() ? 0 : itemSize(result.element);
266
+ return itemsSize + resultSize > containerSizeWithoutPaddings;
267
+ }
268
+ /**
269
+ * @TODO Should be removed when `Array.prototype.findLast` is supported.
270
+ */
271
+ findLast(array, predicate) {
272
+ for (let i = array.length - 1; i >= 0; i--) {
273
+ if (predicate(array[i])) {
274
+ return array[i];
275
+ }
276
+ }
277
+ return undefined;
224
278
  }
225
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItems, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
226
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.2.13", type: KbqOverflowItems, isStandalone: true, selector: "[kbqOverflowItems]", inputs: { reverseOverflowOrder: { classPropertyName: "reverseOverflowOrder", publicName: "reverseOverflowOrder", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, additionalResizeObserverTargets: { classPropertyName: "additionalResizeObserverTargets", publicName: "additionalResizeObserverTargets", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changes: "changes" }, host: { classAttribute: "kbq-overflow-items" }, queries: [{ propertyName: "items", predicate: KbqOverflowItem, isSignal: true }, { propertyName: "result", first: true, predicate: KbqOverflowItemsResult, descendants: true, isSignal: true }], exportAs: ["kbqOverflowItems"], ngImport: i0 }); }
279
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItems, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
280
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.2.14", type: KbqOverflowItems, isStandalone: true, selector: "[kbqOverflowItems]", inputs: { reverseOverflowOrder: { classPropertyName: "reverseOverflowOrder", publicName: "reverseOverflowOrder", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null }, additionalResizeObserverTargets: { classPropertyName: "additionalResizeObserverTargets", publicName: "additionalResizeObserverTargets", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changes: "changes" }, host: { classAttribute: "kbq-overflow-items" }, queries: [{ propertyName: "items", predicate: KbqOverflowItem, isSignal: true }, { propertyName: "result", first: true, predicate: KbqOverflowItemsResult, descendants: true, isSignal: true }], exportAs: ["kbqOverflowItems"], ngImport: i0 }); }
227
281
  }
228
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItems, decorators: [{
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItems, decorators: [{
229
283
  type: Directive,
230
284
  args: [{
231
285
  standalone: true,
@@ -241,15 +295,15 @@ const COMPONENTS = [
241
295
  KbqOverflowItemsResult
242
296
  ];
243
297
  class KbqOverflowItemsModule {
244
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItemsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
245
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItemsModule, imports: [KbqOverflowItems,
298
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItemsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
299
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItemsModule, imports: [KbqOverflowItems,
246
300
  KbqOverflowItem,
247
301
  KbqOverflowItemsResult], exports: [KbqOverflowItems,
248
302
  KbqOverflowItem,
249
303
  KbqOverflowItemsResult] }); }
250
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItemsModule }); }
304
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItemsModule }); }
251
305
  }
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqOverflowItemsModule, decorators: [{
306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqOverflowItemsModule, decorators: [{
253
307
  type: NgModule,
254
308
  args: [{
255
309
  imports: COMPONENTS,
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-overflow-items.mjs","sources":["../../../packages/components/overflow-items/overflow-items.ts","../../../packages/components/overflow-items/module.ts","../../../packages/components/overflow-items/koobiq-components-overflow-items.ts"],"sourcesContent":["import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n numberAttribute,\n output,\n Renderer2,\n signal\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { debounceTime, merge, skip, switchMap } from 'rxjs';\n\n/**\n * Manages the visibility of the element.\n *\n * @docs-private\n */\n@Directive({\n host: {\n '[attr.aria-hidden]': 'hidden()',\n // @TODO should be refactored (#DS-3834)\n '[class.kbq-overflow-item-hidden]': 'hidden()'\n }\n})\nexport class ElementVisibilityManager {\n private readonly renderer = inject(Renderer2);\n private readonly elementRef = inject(ElementRef);\n private readonly hiddenState = signal(false);\n\n /**\n * Whether the element is hidden.\n *\n * @docs-private\n */\n readonly hidden = computed(() => this.hiddenState());\n\n /**\n * Hides the element.\n *\n * @docs-private\n */\n hide(): void {\n this.renderer.setStyle(this.elementRef.nativeElement, 'visibility', 'hidden');\n this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'absolute');\n this.hiddenState.set(true);\n }\n\n /**\n * Shows the element.\n *\n * @docs-private\n */\n show(): void {\n this.renderer.removeStyle(this.elementRef.nativeElement, 'visibility');\n this.renderer.removeStyle(this.elementRef.nativeElement, 'position');\n this.hiddenState.set(false);\n }\n}\n\n/**\n * Directive for displaying the result of hidden items by the `KbqOverflowItems` directive.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItemsResult]',\n exportAs: 'kbqOverflowItemsResult',\n host: { class: 'kbq-overflow-items-result' }\n})\nexport class KbqOverflowItemsResult extends ElementVisibilityManager {}\n\n/**\n * Directive for the item that can be hidden by the `KbqOverflowItems` directive.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItem]',\n exportAs: 'kbqOverflowItem',\n host: {\n class: 'kbq-overflow-item',\n '[class.kbq-overflow-item_always-visible]': 'alwaysVisible()'\n }\n})\nexport class KbqOverflowItem extends ElementVisibilityManager {\n /**\n * Unique identifier for the item.\n */\n readonly id = input.required({ alias: 'kbqOverflowItem' });\n /**\n * Defines the order in which the item is processed in the overflow container,\n * without changing its original position in the `QueryList`.\n */\n readonly order = input(null, { transform: numberAttribute });\n /**\n * Element with this attribute will be ignored when hiding and will always remain visible.\n * @default false\n */\n readonly alwaysVisible = input(false, { transform: booleanAttribute });\n\n /**\n * @docs-private\n */\n override hide(): void {\n if (this.alwaysVisible()) return;\n\n super.hide();\n }\n}\n\n/**\n * Directive for managing the visibility of items that overflow the container.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItems]',\n exportAs: 'kbqOverflowItems',\n host: { class: 'kbq-overflow-items' }\n})\nexport class KbqOverflowItems {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly renderer = inject(Renderer2);\n private readonly document = inject(DOCUMENT);\n\n /**\n * `KbqOverflowItem` directive references.\n */\n private readonly items = contentChildren(KbqOverflowItem);\n\n /**\n * `KbqOverflowItemsResult` directive reference.\n */\n private readonly result = contentChild(KbqOverflowItemsResult);\n\n /**\n * Whether the overflow order should be reversed.\n *\n * @default false\n */\n readonly reverseOverflowOrder = input(false, { transform: booleanAttribute });\n\n /**\n * Debounce time for recalculating items visibility.\n *\n * @default 0\n */\n readonly debounceTime = input(0, { transform: numberAttribute });\n\n /**\n * List of additional elements to observe for resize changes.\n *\n * @default document.body\n */\n readonly additionalResizeObserverTargets = input<Element | Element[]>(this.document.body);\n\n /**\n * Emits when the set of hidden items changes.\n */\n readonly changes = output<ReadonlySet<unknown>>();\n\n /**\n * Set of hidden item IDs.\n */\n readonly hiddenItemIDs = toSignal(outputToObservable(this.changes), {\n initialValue: new Set<unknown>([]) as ReadonlySet<unknown>\n });\n\n constructor() {\n this.setStyles();\n this.setupObservers();\n }\n\n private setupObservers(): void {\n const resizeObservers = merge(\n this.resizeObserver.observe(this.elementRef.nativeElement),\n toObservable(this.additionalResizeObserverTargets).pipe(\n switchMap((targets) => {\n return Array.isArray(targets)\n ? merge(...targets.map((target) => this.resizeObserver.observe(target)))\n : this.resizeObserver.observe(targets);\n })\n )\n );\n\n merge(toObservable(this.items), toObservable(this.reverseOverflowOrder).pipe(skip(1)), resizeObservers)\n .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())\n .subscribe(() => {\n const hiddenItems = this.getHiddenItems(\n this.sortItemsByOrder(this.excludeAlwaysVisibleItems(this.items())),\n this.reverseOverflowOrder(),\n this.result(),\n this.elementRef.nativeElement\n );\n const hiddenItemIDs = new Set(hiddenItems.map(({ id }) => id()));\n\n this.changes.emit(hiddenItemIDs);\n });\n }\n\n /**\n * Sort items by their `order` attribute.\n * If an item does not have an `order` defined, its index is used as a fallback.\n */\n private sortItemsByOrder(items: ReadonlyArray<KbqOverflowItem>): ReadonlyArray<KbqOverflowItem> {\n const itemsWithOrder = Array.from(items, (item, index) => ({ item, order: item.order() ?? index }));\n\n return itemsWithOrder.sort((a, b) => a.order - b.order).map(({ item }) => item);\n }\n\n /**\n * Excludes items that have the `alwaysVisible` attribute.\n */\n private excludeAlwaysVisibleItems(items: ReadonlyArray<KbqOverflowItem>): ReadonlyArray<KbqOverflowItem> {\n return items.filter(({ alwaysVisible }) => !alwaysVisible());\n }\n\n /**\n * Manages the visibility of items based on the available space in the container and returns the hidden items.\n * Direction of hiding is determined by the `reverseOverflowOrder` attribute.\n */\n private getHiddenItems(\n items: ReadonlyArray<KbqOverflowItem>,\n reverseOverflowOrder: boolean,\n result: KbqOverflowItemsResult | undefined,\n container: HTMLElement\n ): ReadonlyArray<KbqOverflowItem> {\n result?.hide();\n items.forEach((item) => item.show());\n\n while (this.hasScrollbar(container)) {\n const visibleItems = items.filter(({ hidden }) => !hidden());\n\n if (visibleItems.length === 0) break;\n\n const itemToHide = reverseOverflowOrder ? visibleItems[0] : visibleItems[visibleItems.length - 1];\n\n itemToHide.hide();\n result?.show();\n }\n\n return items.filter(({ hidden }) => hidden());\n }\n\n /**\n * This method sets the necessary styles for the directive.\n */\n private setStyles(): void {\n this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'relative');\n this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'flex');\n this.renderer.setStyle(this.elementRef.nativeElement, 'flex-wrap', 'nowrap');\n this.renderer.setStyle(this.elementRef.nativeElement, 'flex-grow', '1');\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow', 'hidden');\n }\n\n /**\n * Determines if the given element has a scrollbar.\n */\n private readonly hasScrollbar = ({ scrollWidth, clientWidth }: HTMLElement): boolean => scrollWidth > clientWidth;\n}\n","import { NgModule } from '@angular/core';\nimport { KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsResult } from './overflow-items';\n\nconst COMPONENTS = [\n KbqOverflowItems,\n KbqOverflowItem,\n KbqOverflowItemsResult\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqOverflowItemsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-overflow-items.mjs","sources":["../../../packages/components/overflow-items/overflow-items.ts","../../../packages/components/overflow-items/module.ts","../../../packages/components/overflow-items/koobiq-components-overflow-items.ts"],"sourcesContent":["import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n Directive,\n inject,\n input,\n numberAttribute,\n output,\n Renderer2,\n signal\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { KBQ_WINDOW, kbqInjectNativeElement, KbqOrientation } from '@koobiq/components/core';\nimport { debounceTime, merge, skip, switchMap } from 'rxjs';\n\n/**\n * Manages the visibility of the element.\n *\n * @docs-private\n */\n@Directive({\n host: {\n '[attr.aria-hidden]': 'hidden()',\n // @TODO should be refactored (#DS-3834)\n '[class.kbq-overflow-item-hidden]': 'hidden()'\n }\n})\nexport class ElementVisibilityManager {\n private readonly renderer = inject(Renderer2);\n private readonly hiddenState = signal(false);\n\n /**\n * @docs-private\n */\n readonly element = kbqInjectNativeElement();\n\n /**\n * Whether the element is hidden.\n *\n * @docs-private\n */\n readonly hidden = computed(() => this.hiddenState());\n\n /**\n * Hides the element.\n *\n * @docs-private\n */\n hide(): void {\n this.renderer.setStyle(this.element, 'visibility', 'hidden');\n this.renderer.setStyle(this.element, 'position', 'absolute');\n this.hiddenState.set(true);\n }\n\n /**\n * Shows the element.\n *\n * @docs-private\n */\n show(): void {\n this.renderer.removeStyle(this.element, 'visibility');\n this.renderer.removeStyle(this.element, 'position');\n this.hiddenState.set(false);\n }\n}\n\n/**\n * Directive for displaying the result of hidden items by the `KbqOverflowItems` directive.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItemsResult]',\n exportAs: 'kbqOverflowItemsResult',\n host: { class: 'kbq-overflow-items-result' }\n})\nexport class KbqOverflowItemsResult extends ElementVisibilityManager {}\n\n/**\n * Directive for the item that can be hidden by the `KbqOverflowItems` directive.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItem]',\n exportAs: 'kbqOverflowItem',\n host: {\n class: 'kbq-overflow-item',\n '[class.kbq-overflow-item_always-visible]': 'alwaysVisible()'\n }\n})\nexport class KbqOverflowItem extends ElementVisibilityManager {\n /**\n * Unique identifier for the item.\n */\n readonly id = input.required({ alias: 'kbqOverflowItem' });\n /**\n * Defines the order in which the item is processed in the overflow container,\n * without changing its original position in the `QueryList`.\n */\n readonly order = input(null, { transform: numberAttribute });\n /**\n * Element with this attribute will be ignored when hiding and will always remain visible.\n * @default false\n */\n readonly alwaysVisible = input(false, { transform: booleanAttribute });\n\n /**\n * @docs-private\n */\n override hide(): void {\n if (this.alwaysVisible()) return;\n\n super.hide();\n }\n}\n\n/**\n * Directive for managing the visibility of items that overflow the container.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItems]',\n exportAs: 'kbqOverflowItems',\n host: { class: 'kbq-overflow-items' }\n})\nexport class KbqOverflowItems {\n private readonly element = kbqInjectNativeElement();\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly renderer = inject(Renderer2);\n private readonly document = inject(DOCUMENT);\n private readonly window = inject(KBQ_WINDOW);\n\n /**\n * `KbqOverflowItem` directive references.\n */\n private readonly items = contentChildren(KbqOverflowItem);\n\n /**\n * `KbqOverflowItemsResult` directive reference.\n */\n private readonly result = contentChild(KbqOverflowItemsResult);\n\n /**\n * Whether the overflow order should be reversed.\n *\n * @example\n * ```\n * [0, 1, hidden, hidden] ---> [hidden, hidden, 2, 3]\n * ```\n *\n * @default false\n */\n readonly reverseOverflowOrder = input(false, { transform: booleanAttribute });\n\n /**\n * Debounce time for recalculating items visibility.\n *\n * @default 0\n */\n readonly debounceTime = input(0, { transform: numberAttribute });\n\n /**\n * List of additional elements to observe for resize changes.\n *\n * @default document.body\n */\n readonly additionalResizeObserverTargets = input<Element | Element[]>(this.document.body);\n\n /**\n * Emits when the set of hidden items changes.\n */\n readonly changes = output<ReadonlySet<unknown>>();\n\n /**\n * Set of hidden item IDs.\n */\n readonly hiddenItemIDs = toSignal(outputToObservable(this.changes), {\n initialValue: new Set<unknown>([]) as ReadonlySet<unknown>\n });\n\n /**\n * Defines the orientation of the overflow items.\n *\n * @default 'horizontal'\n */\n readonly orientation = input<KbqOrientation>('horizontal');\n\n private readonly orientationConfig: Record<\n KbqOrientation,\n {\n containerSize: (element: HTMLElement) => number;\n paddingStart: (computedStyle: CSSStyleDeclaration) => number;\n paddingEnd: (computedStyle: CSSStyleDeclaration) => number;\n itemSize: (element: HTMLElement) => number;\n flexDirection: 'row' | 'column';\n }\n > = {\n horizontal: {\n containerSize: (element) => element.clientWidth,\n paddingStart: ({ paddingLeft }) => parseFloat(paddingLeft) || 0,\n paddingEnd: ({ paddingRight }) => parseFloat(paddingRight) || 0,\n itemSize: (element) => {\n const { marginRight, marginLeft } = this.window.getComputedStyle(element);\n\n return element.offsetWidth + (parseFloat(marginLeft) || 0) + (parseFloat(marginRight) || 0);\n },\n flexDirection: 'row'\n },\n vertical: {\n containerSize: (element) => element.clientHeight,\n paddingStart: ({ paddingTop }) => parseFloat(paddingTop) || 0,\n paddingEnd: ({ paddingBottom }) => parseFloat(paddingBottom) || 0,\n itemSize: (element) => {\n const { marginTop, marginBottom } = this.window.getComputedStyle(element);\n\n return element.offsetHeight + (parseFloat(marginTop) || 0) + (parseFloat(marginBottom) || 0);\n },\n flexDirection: 'column'\n }\n } as const;\n\n constructor() {\n this.setStyles();\n this.setupObservers();\n }\n\n private setupObservers(): void {\n const resizeObservers = merge(\n this.resizeObserver.observe(this.element),\n toObservable(this.additionalResizeObserverTargets).pipe(\n switchMap((targets) => {\n return Array.isArray(targets)\n ? merge(...targets.map((target) => this.resizeObserver.observe(target)))\n : this.resizeObserver.observe(targets);\n })\n )\n );\n\n merge(\n toObservable(this.items),\n toObservable(this.reverseOverflowOrder).pipe(skip(1)),\n toObservable(this.orientation).pipe(skip(1)),\n resizeObservers\n )\n .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())\n .subscribe(() => {\n const hiddenItems = this.getHiddenItems(\n this.sortItemsByOrder(this.items()),\n this.reverseOverflowOrder(),\n this.result(),\n this.element,\n this.orientation()\n );\n const hiddenItemIDs = new Set(hiddenItems.map(({ id }) => id()));\n\n this.changes.emit(hiddenItemIDs);\n });\n }\n\n /**\n * Sort items by their `order` attribute.\n * If an item does not have an `order` defined, its index is used as a fallback.\n */\n private sortItemsByOrder(items: ReadonlyArray<KbqOverflowItem>): ReadonlyArray<KbqOverflowItem> {\n const itemsWithOrder = Array.from(items, (item, index) => ({ item, order: item.order() ?? index }));\n\n return itemsWithOrder.sort((a, b) => a.order - b.order).map(({ item }) => item);\n }\n\n /**\n * Manages the visibility of items based on the available space in the container and returns the hidden items.\n * Direction of hiding is determined by the `reverseOverflowOrder` attribute.\n */\n private getHiddenItems(\n items: ReadonlyArray<KbqOverflowItem>,\n reverseOverflowOrder: boolean,\n result: KbqOverflowItemsResult | undefined,\n container: HTMLElement,\n orientation: KbqOrientation\n ): ReadonlyArray<KbqOverflowItem> {\n result?.hide();\n items.forEach((item) => item.show());\n\n while (this.hasOverflown(container, items, result, orientation)) {\n const itemToHide = reverseOverflowOrder\n ? items.find(({ hidden, alwaysVisible }) => !hidden() && !alwaysVisible())\n : this.findLast(items, ({ hidden, alwaysVisible }) => !hidden() && !alwaysVisible());\n\n if (!itemToHide) break;\n\n itemToHide.hide();\n result?.show();\n }\n\n return items.filter(({ hidden }) => hidden());\n }\n\n /**\n * This method sets the necessary styles for the directive.\n */\n private setStyles(): void {\n this.renderer.setStyle(this.element, 'position', 'relative');\n this.renderer.setStyle(this.element, 'overflow', 'hidden');\n this.renderer.setStyle(this.element, 'display', 'flex');\n this.renderer.setStyle(this.element, 'flex-grow', '1');\n this.renderer.setStyle(this.element, 'flex-wrap', 'nowrap');\n\n toObservable(this.orientation)\n .pipe(takeUntilDestroyed())\n .subscribe((orientation) => {\n const { flexDirection } = this.orientationConfig[orientation];\n\n this.renderer.setStyle(this.element, 'flex-direction', flexDirection);\n });\n }\n\n private hasOverflown(\n container: HTMLElement,\n items: ReadonlyArray<KbqOverflowItem>,\n result: KbqOverflowItemsResult | undefined,\n orientation: KbqOrientation\n ): boolean {\n const { containerSize, paddingStart, paddingEnd, itemSize } = this.orientationConfig[orientation];\n const computedStyle = this.window.getComputedStyle(container);\n const containerSizeWithoutPaddings =\n containerSize(container) - paddingStart(computedStyle) - paddingEnd(computedStyle);\n const itemsSize = items.reduce((size, item) => size + (item.hidden() ? 0 : itemSize(item.element)), 0);\n const resultSize = !result || result.hidden() ? 0 : itemSize(result.element);\n\n return itemsSize + resultSize > containerSizeWithoutPaddings;\n }\n\n /**\n * @TODO Should be removed when `Array.prototype.findLast` is supported.\n */\n private findLast<T>(array: ReadonlyArray<T>, predicate: (item: T) => boolean): T | undefined {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i])) {\n return array[i];\n }\n }\n\n return undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsResult } from './overflow-items';\n\nconst COMPONENTS = [\n KbqOverflowItems,\n KbqOverflowItem,\n KbqOverflowItemsResult\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqOverflowItemsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}