@koobiq/components 20.4.2 → 21.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (771) hide show
  1. package/accordion/accordion-trigger.scss +3 -10
  2. package/accordion/accordion.scss +4 -6
  3. package/actions-panel/actions-panel-container.scss +45 -1
  4. package/alert/alert.component.scss +3 -2
  5. package/app-switcher/_app-switcher-theme.scss +0 -4
  6. package/app-switcher/app-switcher-dropdown-app.scss +3 -2
  7. package/app-switcher/app-switcher-dropdown-site.scss +2 -1
  8. package/app-switcher/{kbq-app-switcher-list-item.scss → app-switcher-list-item.scss} +18 -4
  9. package/app-switcher/app-switcher-tokens.scss +15 -0
  10. package/app-switcher/app-switcher.scss +14 -4
  11. package/autocomplete/autocomplete.scss +7 -6
  12. package/badge/badge.component.scss +5 -8
  13. package/breadcrumbs/breadcrumbs.scss +25 -10
  14. package/button/_button-base.scss +30 -7
  15. package/button/_button-theme.scss +16 -0
  16. package/button/button-group.scss +7 -0
  17. package/button/button-tokens.scss +0 -2
  18. package/button/button.scss +34 -2
  19. package/button-toggle/_button-toggle-theme.scss +7 -2
  20. package/button-toggle/button-toggle.scss +65 -15
  21. package/checkbox/_checkbox-theme.scss +4 -3
  22. package/checkbox/checkbox.scss +3 -6
  23. package/clamped-text/clamped-text.scss +6 -2
  24. package/code-block/code-block-tokens.scss +0 -224
  25. package/code-block/code-block.scss +20 -9
  26. package/content-panel/content-panel-aside.scss +3 -2
  27. package/content-panel/content-panel-container.scss +37 -0
  28. package/content-panel/content-panel.scss +4 -3
  29. package/core/highlight/_highlight-theme.scss +3 -1
  30. package/core/option/action-container.scss +2 -2
  31. package/core/option/action.scss +2 -1
  32. package/core/option/option.scss +2 -1
  33. package/core/pop-up/_pop-up.scss +0 -37
  34. package/core/selection/pseudo-checkbox/pseudo-checkbox.scss +5 -10
  35. package/core/styles/_core.scss +3 -0
  36. package/core/styles/_koobiq-theme.scss +5 -6
  37. package/core/styles/common/_animation.scss +44 -16
  38. package/core/styles/common/_groups-mixins.scss +21 -19
  39. package/core/styles/common/_groups.scss +4 -32
  40. package/core/styles/common/_index.scss +0 -2
  41. package/core/styles/common/_link.scss +117 -0
  42. package/core/styles/common/_list.scss +0 -26
  43. package/core/styles/common/_overlay.scss +8 -10
  44. package/core/styles/common/_rtl.scss +0 -14
  45. package/core/styles/common/_select.scss +33 -15
  46. package/core/styles/common/_squircle.scss +63 -0
  47. package/core/styles/common/_tokens.scss +0 -11
  48. package/core/styles/common/_vendor-prefixes.scss +0 -20
  49. package/core/styles/functions/_timing.scss +0 -22
  50. package/core/styles/theming/_scrollbar-theme.scss +6 -1
  51. package/core/styles/theming/_theming.scss +13 -65
  52. package/core/styles/typography/_index.scss +0 -1
  53. package/core/styles/typography/_typography.scss +0 -143
  54. package/core/styles/visual/_body.scss +1 -6
  55. package/core/styles/visual/_layout.scss +0 -12
  56. package/datepicker/calendar-body.scss +3 -1
  57. package/datepicker/calendar-header.scss +0 -1
  58. package/datepicker/datepicker-content.scss +33 -1
  59. package/datepicker/datepicker-toggle.scss +0 -38
  60. package/dl/dl-tokens.scss +10 -0
  61. package/dl/dl.scss +113 -13
  62. package/dropdown/_dropdown-theme.scss +4 -16
  63. package/dropdown/dropdown-item.scss +4 -10
  64. package/dropdown/dropdown.scss +2 -1
  65. package/empty-state/_empty-state-theme.scss +10 -4
  66. package/empty-state/empty-state-tokens.scss +4 -4
  67. package/empty-state/empty-state.scss +4 -0
  68. package/fesm2022/koobiq-components-accordion.mjs +347 -229
  69. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-actions-panel.mjs +302 -187
  71. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  72. package/fesm2022/koobiq-components-alert.mjs +39 -39
  73. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  74. package/fesm2022/koobiq-components-app-switcher.mjs +677 -367
  75. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-autocomplete.mjs +620 -253
  77. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-badge.mjs +46 -48
  79. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-breadcrumbs.mjs +221 -169
  81. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  82. package/fesm2022/koobiq-components-button-toggle.mjs +565 -196
  83. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  84. package/fesm2022/koobiq-components-button.mjs +332 -116
  85. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-checkbox.mjs +172 -132
  87. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-clamped-text.mjs +165 -158
  89. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-code-block.mjs +755 -601
  91. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-content-panel.mjs +260 -143
  93. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-core.mjs +4342 -1595
  95. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-datepicker.mjs +1713 -1606
  97. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-divider.mjs +73 -36
  99. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-dl.mjs +447 -89
  101. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-dropdown.mjs +703 -599
  103. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-dynamic-translation.mjs +20 -20
  105. package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-ellipsis-center.mjs +46 -31
  107. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-empty-state.mjs +116 -60
  109. package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-file-upload.mjs +550 -290
  111. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-filter-bar.mjs +2810 -2538
  113. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-flag.mjs +79 -24
  115. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-form-field.mjs +389 -525
  117. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-icon.mjs +366 -136
  119. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-inline-edit.mjs +429 -212
  121. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-input.mjs +601 -459
  123. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-link-deprecated.mjs +196 -0
  125. package/fesm2022/koobiq-components-link-deprecated.mjs.map +1 -0
  126. package/fesm2022/koobiq-components-link.mjs +328 -125
  127. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-list.mjs +583 -433
  129. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-loader-overlay.mjs +167 -68
  131. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-markdown.mjs +55 -78
  133. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-modal.mjs +853 -475
  135. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-navbar.mjs +895 -556
  137. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-notification-center.mjs +680 -310
  139. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-overflow-items.mjs +46 -64
  141. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  142. package/fesm2022/koobiq-components-popover.mjs +684 -285
  143. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  144. package/fesm2022/koobiq-components-progress-bar.mjs +87 -33
  145. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-progress-spinner.mjs +52 -43
  147. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-radio.mjs +450 -231
  149. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-resizer.mjs +127 -21
  151. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  152. package/fesm2022/koobiq-components-scrollbar-deprecated.mjs +299 -0
  153. package/fesm2022/koobiq-components-scrollbar-deprecated.mjs.map +1 -0
  154. package/fesm2022/koobiq-components-scrollbar.mjs +745 -222
  155. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  156. package/fesm2022/koobiq-components-search-expandable.mjs +288 -126
  157. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  158. package/fesm2022/koobiq-components-select.mjs +883 -693
  159. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  160. package/fesm2022/koobiq-components-sidebar.mjs +207 -88
  161. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  162. package/fesm2022/koobiq-components-sidepanel.mjs +689 -296
  163. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  164. package/fesm2022/koobiq-components-skeleton.mjs +815 -41
  165. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
  166. package/fesm2022/koobiq-components-split-button.mjs +109 -88
  167. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  168. package/fesm2022/koobiq-components-splitter-deprecated.mjs +591 -0
  169. package/fesm2022/koobiq-components-splitter-deprecated.mjs.map +1 -0
  170. package/fesm2022/koobiq-components-splitter.mjs +890 -501
  171. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  172. package/fesm2022/koobiq-components-table.mjs +63 -49
  173. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  174. package/fesm2022/koobiq-components-tabs.mjs +1062 -603
  175. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  176. package/fesm2022/koobiq-components-tags.mjs +886 -733
  177. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  178. package/fesm2022/koobiq-components-textarea.mjs +213 -185
  179. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  180. package/fesm2022/koobiq-components-time-range.mjs +299 -147
  181. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  182. package/fesm2022/koobiq-components-timepicker.mjs +233 -245
  183. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  184. package/fesm2022/koobiq-components-timezone.mjs +344 -142
  185. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  186. package/fesm2022/koobiq-components-title.mjs +229 -145
  187. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  188. package/fesm2022/koobiq-components-toast.mjs +463 -143
  189. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  190. package/fesm2022/koobiq-components-toggle.mjs +177 -130
  191. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  192. package/fesm2022/koobiq-components-tooltip.mjs +657 -214
  193. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  194. package/fesm2022/koobiq-components-top-bar.mjs +61 -32
  195. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  196. package/fesm2022/koobiq-components-tree-select.mjs +719 -488
  197. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  198. package/fesm2022/koobiq-components-tree.mjs +1506 -558
  199. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  200. package/fesm2022/koobiq-components-username.mjs +290 -135
  201. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  202. package/file-upload/dropzone.scss +31 -3
  203. package/file-upload/file-upload-tokens.scss +2 -22
  204. package/file-upload/file-upload.scss +6 -0
  205. package/file-upload/multiple-file-upload.component.scss +14 -12
  206. package/file-upload/single-file-upload.component.scss +3 -2
  207. package/filter-bar/filters.scss +7 -0
  208. package/filter-bar/pipes/base-pipe.scss +3 -3
  209. package/filter-bar/pipes/pipe-date.scss +8 -1
  210. package/flag/flag-tokens.scss +22 -0
  211. package/flag/flag.scss +34 -21
  212. package/form-field/{_fiedset-theme.scss → _fieldset-theme.scss} +1 -5
  213. package/form-field/_form-field-theme.scss +4 -9
  214. package/form-field/cleaner.scss +3 -1
  215. package/form-field/fieldset.scss +3 -4
  216. package/form-field/form-field.scss +26 -21
  217. package/form-field/password-toggle.scss +3 -1
  218. package/icon/_icon-button-theme.scss +7 -0
  219. package/icon/_icon-theme.scss +10 -7
  220. package/icon/icon-button.scss +0 -2
  221. package/icon/icon-tokens.scss +12 -9
  222. package/inline-edit/inline-edit.scss +40 -54
  223. package/input/input.scss +4 -0
  224. package/link/{_link-theme.scss → deprecated/_link-theme.scss} +11 -6
  225. package/link/deprecated/link-tokens.scss +27 -0
  226. package/link/link-tokens.scss +6 -25
  227. package/link/link.scss +137 -0
  228. package/list/list.scss +3 -2
  229. package/loader-overlay/_loader-overlay-theme.scss +19 -10
  230. package/loader-overlay/loader-overlay-tokens.scss +0 -2
  231. package/loader-overlay/loader-overlay.scss +7 -1
  232. package/markdown/_markdown-theme.scss +16 -0
  233. package/markdown/markdown-tokens.scss +5 -0
  234. package/markdown/markdown.scss +2 -1
  235. package/modal/_modal-animation.scss +23 -14
  236. package/modal/modal-tokens.scss +2 -1
  237. package/modal/modal.scss +35 -31
  238. package/navbar/_navbar-item_horizontal.scss +8 -6
  239. package/navbar/_navbar-item_vertical.scss +18 -6
  240. package/navbar/_navbar-theme.scss +9 -1
  241. package/navbar/navbar-brand.scss +8 -6
  242. package/navbar/navbar-divider.scss +1 -1
  243. package/navbar/navbar-item.scss +8 -9
  244. package/navbar/navbar-toggle.scss +3 -3
  245. package/navbar/navbar-tokens.scss +14 -0
  246. package/navbar/navbar.scss +1 -2
  247. package/navbar/vertical-navbar.scss +2 -2
  248. package/notification-center/_notification-center-theme.scss +11 -6
  249. package/notification-center/notification-center-tokens.scss +33 -0
  250. package/notification-center/notification-center.scss +58 -20
  251. package/notification-center/notification-item.scss +15 -6
  252. package/package.json +112 -81
  253. package/popover/popover-tokens.scss +0 -2
  254. package/popover/popover.scss +41 -19
  255. package/prebuilt-themes/theme.css +1 -1
  256. package/progress-bar/_progress-bar-theme.scss +20 -3
  257. package/progress-bar/progress-bar-tokens.scss +3 -0
  258. package/progress-bar/progress-bar.scss +36 -8
  259. package/progress-spinner/progress-spinner.scss +4 -3
  260. package/radio/_radio-theme.scss +21 -4
  261. package/radio/radio-tokens.scss +7 -3
  262. package/radio/radio.scss +55 -8
  263. package/schematics/collection.json +399 -7
  264. package/schematics/migrations/accordion-state-saving-default/README.md +60 -0
  265. package/schematics/migrations/accordion-state-saving-default/data.js +75 -0
  266. package/schematics/migrations/accordion-state-saving-default/index.js +60 -0
  267. package/schematics/migrations/accordion-state-saving-default/schema.json +15 -0
  268. package/schematics/migrations/actions-panel-overlay-container/README.md +35 -0
  269. package/schematics/migrations/actions-panel-overlay-container/data.js +47 -0
  270. package/schematics/migrations/actions-panel-overlay-container/index.js +54 -0
  271. package/schematics/migrations/actions-panel-overlay-container/schema.json +15 -0
  272. package/schematics/migrations/alert-signals/README.md +13 -7
  273. package/schematics/migrations/alert-signals/data.js +3 -0
  274. package/schematics/migrations/alert-signals/index.js +70 -203
  275. package/schematics/migrations/angular-animations-removal/README.md +46 -0
  276. package/schematics/migrations/angular-animations-removal/data.js +150 -0
  277. package/schematics/migrations/angular-animations-removal/index.js +20 -0
  278. package/schematics/migrations/angular-animations-removal/schema.json +15 -0
  279. package/schematics/migrations/app-switcher-signals/README.md +88 -0
  280. package/schematics/migrations/app-switcher-signals/data.js +136 -0
  281. package/schematics/migrations/app-switcher-signals/index.js +365 -0
  282. package/schematics/migrations/app-switcher-signals/schema.json +20 -0
  283. package/schematics/migrations/autocomplete-panel-width-auto/README.md +2 -2
  284. package/schematics/migrations/autocomplete-panel-width-auto/index.js +1 -1
  285. package/schematics/migrations/autocomplete-signals/README.md +92 -0
  286. package/schematics/migrations/autocomplete-signals/data.js +149 -0
  287. package/schematics/migrations/autocomplete-signals/index.js +706 -0
  288. package/schematics/migrations/autocomplete-signals/schema.json +20 -0
  289. package/schematics/migrations/badge-signals/README.md +77 -0
  290. package/schematics/migrations/badge-signals/data.js +109 -0
  291. package/schematics/migrations/badge-signals/index.js +693 -0
  292. package/schematics/migrations/badge-signals/schema.json +20 -0
  293. package/schematics/migrations/button-state-and-styles/README.md +129 -0
  294. package/schematics/migrations/button-state-and-styles/data.js +136 -0
  295. package/schematics/migrations/button-state-and-styles/index.js +220 -0
  296. package/schematics/migrations/button-state-and-styles/schema.json +20 -0
  297. package/schematics/migrations/button-supported-colors/README.md +73 -0
  298. package/schematics/migrations/button-supported-colors/data.js +106 -0
  299. package/schematics/migrations/button-supported-colors/index.js +260 -0
  300. package/schematics/migrations/button-supported-colors/schema.json +20 -0
  301. package/schematics/migrations/button-toggle-signals-and-aria/README.md +137 -0
  302. package/schematics/migrations/button-toggle-signals-and-aria/data.js +200 -0
  303. package/schematics/migrations/button-toggle-signals-and-aria/index.js +496 -0
  304. package/schematics/migrations/button-toggle-signals-and-aria/schema.json +20 -0
  305. package/schematics/migrations/button-truncation/README.md +110 -0
  306. package/schematics/migrations/button-truncation/data.js +88 -0
  307. package/schematics/migrations/button-truncation/index.js +269 -0
  308. package/schematics/migrations/button-truncation/schema.json +20 -0
  309. package/schematics/migrations/checkbox-signals/README.md +76 -0
  310. package/schematics/migrations/checkbox-signals/data.js +114 -0
  311. package/schematics/migrations/checkbox-signals/index.js +634 -0
  312. package/schematics/migrations/checkbox-signals/schema.json +20 -0
  313. package/schematics/migrations/clamped-text-disclosure/README.md +62 -0
  314. package/schematics/migrations/clamped-text-disclosure/data.js +101 -0
  315. package/schematics/migrations/clamped-text-disclosure/index.js +59 -0
  316. package/schematics/migrations/clamped-text-disclosure/schema.json +15 -0
  317. package/schematics/migrations/code-block-signals/README.md +84 -0
  318. package/schematics/migrations/code-block-signals/data.js +121 -0
  319. package/schematics/migrations/code-block-signals/index.js +700 -0
  320. package/schematics/migrations/code-block-signals/schema.json +20 -0
  321. package/schematics/migrations/color-signals/README.md +46 -0
  322. package/schematics/migrations/color-signals/data.js +131 -0
  323. package/schematics/migrations/color-signals/index.js +19 -0
  324. package/schematics/migrations/color-signals/schema.json +20 -0
  325. package/schematics/migrations/core-mixins-removal/README.md +20 -0
  326. package/schematics/migrations/core-mixins-removal/data.js +27 -0
  327. package/schematics/migrations/core-mixins-removal/index.js +17 -0
  328. package/schematics/migrations/core-mixins-removal/schema.json +15 -0
  329. package/schematics/migrations/css-selectors/README.md +2 -2
  330. package/schematics/migrations/css-selectors/index.js +1 -1
  331. package/schematics/migrations/datepicker-signals/README.md +24 -0
  332. package/schematics/migrations/datepicker-signals/data.js +49 -0
  333. package/schematics/migrations/datepicker-signals/index.js +17 -0
  334. package/schematics/migrations/datepicker-signals/schema.json +15 -0
  335. package/schematics/migrations/deprecated-icons/README.md +2 -2
  336. package/schematics/migrations/deprecated-icons/index.js +1 -1
  337. package/schematics/migrations/design-tokens-v4/README.md +75 -0
  338. package/schematics/migrations/design-tokens-v4/index.js +59 -0
  339. package/schematics/migrations/design-tokens-v4/schema.json +15 -0
  340. package/schematics/migrations/divider-signals-and-aria/README.md +47 -0
  341. package/schematics/migrations/divider-signals-and-aria/data.js +62 -0
  342. package/schematics/migrations/divider-signals-and-aria/index.js +211 -0
  343. package/schematics/migrations/divider-signals-and-aria/schema.json +15 -0
  344. package/schematics/migrations/dl-attribute-coercion/README.md +59 -0
  345. package/schematics/migrations/dl-attribute-coercion/data.js +85 -0
  346. package/schematics/migrations/dl-attribute-coercion/index.js +161 -0
  347. package/schematics/migrations/dl-attribute-coercion/schema.json +15 -0
  348. package/schematics/migrations/dl-standalone-names/README.md +49 -0
  349. package/schematics/migrations/dl-standalone-names/data.js +44 -0
  350. package/schematics/migrations/dl-standalone-names/index.js +321 -0
  351. package/schematics/migrations/dl-standalone-names/schema.json +20 -0
  352. package/schematics/migrations/dropdown-demote-overlay/README.md +137 -0
  353. package/schematics/migrations/dropdown-demote-overlay/data.js +84 -0
  354. package/schematics/migrations/dropdown-demote-overlay/index.js +288 -0
  355. package/schematics/migrations/dropdown-demote-overlay/schema.json +20 -0
  356. package/schematics/migrations/dropdown-signals/README.md +83 -0
  357. package/schematics/migrations/dropdown-signals/data.js +152 -0
  358. package/schematics/migrations/dropdown-signals/index.js +19 -0
  359. package/schematics/migrations/dropdown-signals/schema.json +20 -0
  360. package/schematics/migrations/empty-state-error-color/README.md +84 -0
  361. package/schematics/migrations/empty-state-error-color/data.js +85 -0
  362. package/schematics/migrations/empty-state-error-color/index.js +71 -0
  363. package/schematics/migrations/empty-state-error-color/schema.json +15 -0
  364. package/schematics/migrations/empty-state-size-attr/README.md +2 -2
  365. package/schematics/migrations/empty-state-size-attr/index.js +1 -1
  366. package/schematics/migrations/file-upload-cva-and-primitives/README.md +70 -0
  367. package/schematics/migrations/file-upload-cva-and-primitives/data.js +97 -0
  368. package/schematics/migrations/file-upload-cva-and-primitives/index.js +60 -0
  369. package/schematics/migrations/file-upload-cva-and-primitives/schema.json +15 -0
  370. package/schematics/migrations/file-upload-deprecated-outputs/README.md +90 -0
  371. package/schematics/migrations/file-upload-deprecated-outputs/data.js +20 -0
  372. package/schematics/migrations/file-upload-deprecated-outputs/index.js +70 -0
  373. package/schematics/migrations/file-upload-deprecated-outputs/schema.json +20 -0
  374. package/schematics/migrations/filter-bar-rename-action/README.md +183 -0
  375. package/schematics/migrations/filter-bar-rename-action/data.js +151 -0
  376. package/schematics/migrations/filter-bar-rename-action/index.js +177 -0
  377. package/schematics/migrations/filter-bar-rename-action/schema.json +20 -0
  378. package/schematics/migrations/filter-bar-signals/README.md +27 -16
  379. package/schematics/migrations/filter-bar-signals/data.js +1 -2
  380. package/schematics/migrations/filter-bar-signals/index.js +100 -195
  381. package/schematics/migrations/filter-bar-state-saving-default/README.md +53 -0
  382. package/schematics/migrations/filter-bar-state-saving-default/data.js +87 -0
  383. package/schematics/migrations/filter-bar-state-saving-default/index.js +61 -0
  384. package/schematics/migrations/filter-bar-state-saving-default/schema.json +15 -0
  385. package/schematics/migrations/flag-inner-html/README.md +67 -0
  386. package/schematics/migrations/flag-inner-html/data.js +58 -0
  387. package/schematics/migrations/flag-inner-html/index.js +61 -0
  388. package/schematics/migrations/flag-inner-html/schema.json +15 -0
  389. package/schematics/migrations/form-field-signals/README.md +125 -0
  390. package/schematics/migrations/form-field-signals/data.js +288 -0
  391. package/schematics/migrations/form-field-signals/index.js +382 -0
  392. package/schematics/migrations/form-field-signals/schema.json +20 -0
  393. package/schematics/migrations/icon-semantics-and-api/README.md +65 -0
  394. package/schematics/migrations/icon-semantics-and-api/data.js +97 -0
  395. package/schematics/migrations/icon-semantics-and-api/index.js +64 -0
  396. package/schematics/migrations/icon-semantics-and-api/schema.json +15 -0
  397. package/schematics/migrations/icons-replacement/README.md +5 -5
  398. package/schematics/migrations/icons-replacement/index.js +1 -1
  399. package/schematics/migrations/inline-edit-a11y-and-types/README.md +82 -0
  400. package/schematics/migrations/inline-edit-a11y-and-types/data.js +117 -0
  401. package/schematics/migrations/inline-edit-a11y-and-types/index.js +97 -0
  402. package/schematics/migrations/inline-edit-a11y-and-types/schema.json +20 -0
  403. package/schematics/migrations/input-number-surface/README.md +140 -0
  404. package/schematics/migrations/input-number-surface/data.js +135 -0
  405. package/schematics/migrations/input-number-surface/index.js +292 -0
  406. package/schematics/migrations/input-number-surface/schema.json +20 -0
  407. package/schematics/migrations/input-signals/README.md +20 -0
  408. package/schematics/migrations/input-signals/data.js +30 -0
  409. package/schematics/migrations/input-signals/index.js +17 -0
  410. package/schematics/migrations/input-signals/schema.json +15 -0
  411. package/schematics/migrations/link-deprecated-path/README.md +144 -0
  412. package/schematics/migrations/link-deprecated-path/index.js +19 -0
  413. package/schematics/migrations/link-deprecated-path/schema.json +20 -0
  414. package/schematics/migrations/link-signals/README.md +71 -0
  415. package/schematics/migrations/link-signals/data.js +116 -0
  416. package/schematics/migrations/link-signals/index.js +415 -0
  417. package/schematics/migrations/link-signals/schema.json +20 -0
  418. package/schematics/migrations/list-signals/README.md +22 -0
  419. package/schematics/migrations/list-signals/data.js +35 -0
  420. package/schematics/migrations/list-signals/index.js +17 -0
  421. package/schematics/migrations/list-signals/schema.json +15 -0
  422. package/schematics/migrations/list-tree-multiple-input/README.md +105 -0
  423. package/schematics/migrations/list-tree-multiple-input/data.js +74 -0
  424. package/schematics/migrations/list-tree-multiple-input/index.js +221 -0
  425. package/schematics/migrations/list-tree-multiple-input/schema.json +20 -0
  426. package/schematics/migrations/loader-overlay-signals/README.md +62 -0
  427. package/schematics/migrations/loader-overlay-signals/data.js +101 -0
  428. package/schematics/migrations/loader-overlay-signals/index.js +697 -0
  429. package/schematics/migrations/loader-overlay-signals/schema.json +20 -0
  430. package/schematics/migrations/loader-overlay-size-attr/README.md +2 -2
  431. package/schematics/migrations/loader-overlay-size-attr/index.js +1 -1
  432. package/schematics/migrations/locale-configuration-providers/README.md +163 -0
  433. package/schematics/migrations/locale-configuration-providers/data.js +257 -0
  434. package/schematics/migrations/locale-configuration-providers/index.js +294 -0
  435. package/schematics/migrations/locale-configuration-providers/schema.json +20 -0
  436. package/schematics/migrations/mandatory-peer-dependencies/README.md +70 -0
  437. package/schematics/migrations/mandatory-peer-dependencies/index.js +42 -0
  438. package/schematics/migrations/mandatory-peer-dependencies/schema.json +15 -0
  439. package/schematics/migrations/markdown-signals/README.md +58 -0
  440. package/schematics/migrations/markdown-signals/data.js +79 -0
  441. package/schematics/migrations/markdown-signals/index.js +639 -0
  442. package/schematics/migrations/markdown-signals/schema.json +20 -0
  443. package/schematics/migrations/modal-dialog-semantics/README.md +106 -0
  444. package/schematics/migrations/modal-dialog-semantics/data.js +110 -0
  445. package/schematics/migrations/modal-dialog-semantics/index.js +58 -0
  446. package/schematics/migrations/modal-dialog-semantics/schema.json +15 -0
  447. package/schematics/migrations/modal-signals/README.md +88 -0
  448. package/schematics/migrations/modal-signals/data.js +132 -0
  449. package/schematics/migrations/modal-signals/index.js +19 -0
  450. package/schematics/migrations/modal-signals/schema.json +20 -0
  451. package/schematics/migrations/navbar-signals-and-aria/README.md +111 -0
  452. package/schematics/migrations/navbar-signals-and-aria/data.js +198 -0
  453. package/schematics/migrations/navbar-signals-and-aria/index.js +568 -0
  454. package/schematics/migrations/navbar-signals-and-aria/schema.json +20 -0
  455. package/schematics/migrations/new-icons-pack/README.md +10 -10
  456. package/schematics/migrations/new-icons-pack/index.js +1 -1
  457. package/schematics/migrations/notification-center-signals/README.md +67 -0
  458. package/schematics/migrations/notification-center-signals/data.js +66 -0
  459. package/schematics/migrations/notification-center-signals/index.js +61 -0
  460. package/schematics/migrations/notification-center-signals/schema.json +15 -0
  461. package/schematics/migrations/option-signals/README.md +37 -0
  462. package/schematics/migrations/option-signals/data.js +86 -0
  463. package/schematics/migrations/option-signals/index.js +19 -0
  464. package/schematics/migrations/option-signals/schema.json +20 -0
  465. package/schematics/migrations/popover-leave-delay/README.md +51 -0
  466. package/schematics/migrations/popover-leave-delay/data.js +61 -0
  467. package/schematics/migrations/popover-leave-delay/index.js +54 -0
  468. package/schematics/migrations/popover-leave-delay/schema.json +15 -0
  469. package/schematics/migrations/progress-bar-percentage-and-aria/README.md +54 -0
  470. package/schematics/migrations/progress-bar-percentage-and-aria/data.js +76 -0
  471. package/schematics/migrations/progress-bar-percentage-and-aria/index.js +58 -0
  472. package/schematics/migrations/progress-bar-percentage-and-aria/schema.json +15 -0
  473. package/schematics/migrations/progress-spinner-signals/README.md +72 -0
  474. package/schematics/migrations/progress-spinner-signals/data.js +83 -0
  475. package/schematics/migrations/progress-spinner-signals/index.js +694 -0
  476. package/schematics/migrations/progress-spinner-signals/schema.json +20 -0
  477. package/schematics/migrations/query-list-signals/README.md +32 -0
  478. package/schematics/migrations/query-list-signals/data.js +70 -0
  479. package/schematics/migrations/query-list-signals/index.js +17 -0
  480. package/schematics/migrations/query-list-signals/schema.json +15 -0
  481. package/schematics/migrations/radio-signals-and-aria/README.md +82 -0
  482. package/schematics/migrations/radio-signals-and-aria/data.js +163 -0
  483. package/schematics/migrations/radio-signals-and-aria/index.js +39 -0
  484. package/schematics/migrations/radio-signals-and-aria/schema.json +20 -0
  485. package/schematics/migrations/read-state-dwell-handlers/README.md +125 -0
  486. package/schematics/migrations/read-state-dwell-handlers/data.js +45 -0
  487. package/schematics/migrations/read-state-dwell-handlers/index.js +215 -0
  488. package/schematics/migrations/read-state-dwell-handlers/schema.json +20 -0
  489. package/schematics/migrations/scrollbar-deprecated-path/README.md +128 -0
  490. package/schematics/migrations/scrollbar-deprecated-path/index.js +20 -0
  491. package/schematics/migrations/scrollbar-deprecated-path/schema.json +20 -0
  492. package/schematics/migrations/select-signal-inputs/README.md +61 -0
  493. package/schematics/migrations/select-signal-inputs/data.js +99 -0
  494. package/schematics/migrations/select-signal-inputs/index.js +57 -0
  495. package/schematics/migrations/select-signal-inputs/schema.json +15 -0
  496. package/schematics/migrations/sidepanel-non-modal-behavior/README.md +57 -0
  497. package/schematics/migrations/sidepanel-non-modal-behavior/data.js +111 -0
  498. package/schematics/migrations/sidepanel-non-modal-behavior/index.js +57 -0
  499. package/schematics/migrations/sidepanel-non-modal-behavior/schema.json +15 -0
  500. package/schematics/migrations/signal-inputs-subclasses/README.md +28 -0
  501. package/schematics/migrations/signal-inputs-subclasses/data.js +69 -0
  502. package/schematics/migrations/signal-inputs-subclasses/index.js +17 -0
  503. package/schematics/migrations/signal-inputs-subclasses/schema.json +15 -0
  504. package/schematics/migrations/split-button-optional-disabled/README.md +47 -0
  505. package/schematics/migrations/split-button-optional-disabled/data.js +53 -0
  506. package/schematics/migrations/split-button-optional-disabled/index.js +57 -0
  507. package/schematics/migrations/split-button-optional-disabled/schema.json +15 -0
  508. package/schematics/migrations/splitter-deprecated-path/README.md +136 -0
  509. package/schematics/migrations/splitter-deprecated-path/index.js +20 -0
  510. package/schematics/migrations/splitter-deprecated-path/schema.json +20 -0
  511. package/schematics/migrations/state-saving-default/README.md +67 -0
  512. package/schematics/migrations/state-saving-default/data.js +88 -0
  513. package/schematics/migrations/state-saving-default/index.js +62 -0
  514. package/schematics/migrations/state-saving-default/schema.json +15 -0
  515. package/schematics/migrations/table-cell-content/README.md +55 -0
  516. package/schematics/migrations/table-cell-content/data.js +66 -0
  517. package/schematics/migrations/table-cell-content/index.js +66 -0
  518. package/schematics/migrations/table-cell-content/schema.json +15 -0
  519. package/schematics/migrations/tabs-signals-and-aria/README.md +93 -0
  520. package/schematics/migrations/tabs-signals-and-aria/data.js +139 -0
  521. package/schematics/migrations/tabs-signals-and-aria/index.js +65 -0
  522. package/schematics/migrations/tabs-signals-and-aria/schema.json +15 -0
  523. package/schematics/migrations/tag-list-cleaner/README.md +58 -0
  524. package/schematics/migrations/tag-list-cleaner/data.js +42 -0
  525. package/schematics/migrations/tag-list-cleaner/index.js +196 -0
  526. package/schematics/migrations/tag-list-cleaner/schema.json +20 -0
  527. package/schematics/migrations/tag-slots/README.md +41 -0
  528. package/schematics/migrations/tag-slots/index.js +190 -0
  529. package/schematics/migrations/tag-slots/schema.json +20 -0
  530. package/schematics/migrations/tags-signals/README.md +85 -0
  531. package/schematics/migrations/tags-signals/data.js +103 -0
  532. package/schematics/migrations/tags-signals/index.js +673 -0
  533. package/schematics/migrations/tags-signals/schema.json +20 -0
  534. package/schematics/migrations/textarea-signals/README.md +72 -0
  535. package/schematics/migrations/textarea-signals/data.js +121 -0
  536. package/schematics/migrations/textarea-signals/index.js +379 -0
  537. package/schematics/migrations/textarea-signals/schema.json +20 -0
  538. package/schematics/migrations/time-range-title-for/README.md +164 -0
  539. package/schematics/migrations/time-range-title-for/data.js +139 -0
  540. package/schematics/migrations/time-range-title-for/index.js +163 -0
  541. package/schematics/migrations/time-range-title-for/schema.json +20 -0
  542. package/schematics/migrations/timepicker-signals/README.md +78 -0
  543. package/schematics/migrations/timepicker-signals/data.js +82 -0
  544. package/schematics/migrations/timepicker-signals/index.js +709 -0
  545. package/schematics/migrations/timepicker-signals/schema.json +20 -0
  546. package/schematics/migrations/timezone-grouping-utils/README.md +73 -0
  547. package/schematics/migrations/timezone-grouping-utils/data.js +101 -0
  548. package/schematics/migrations/timezone-grouping-utils/index.js +64 -0
  549. package/schematics/migrations/timezone-grouping-utils/schema.json +15 -0
  550. package/schematics/migrations/title-encapsulation/README.md +49 -0
  551. package/schematics/migrations/title-encapsulation/data.js +69 -0
  552. package/schematics/migrations/title-encapsulation/index.js +57 -0
  553. package/schematics/migrations/title-encapsulation/schema.json +15 -0
  554. package/schematics/migrations/toast-stack-and-defaults/README.md +102 -0
  555. package/schematics/migrations/toast-stack-and-defaults/data.js +79 -0
  556. package/schematics/migrations/toast-stack-and-defaults/index.js +53 -0
  557. package/schematics/migrations/toast-stack-and-defaults/schema.json +15 -0
  558. package/schematics/migrations/tooltip-pointer-events-and-types/README.md +53 -0
  559. package/schematics/migrations/tooltip-pointer-events-and-types/data.js +89 -0
  560. package/schematics/migrations/tooltip-pointer-events-and-types/index.js +60 -0
  561. package/schematics/migrations/tooltip-pointer-events-and-types/schema.json +15 -0
  562. package/schematics/migrations/top-bar-container-selectors/README.md +111 -0
  563. package/schematics/migrations/top-bar-container-selectors/data.js +56 -0
  564. package/schematics/migrations/top-bar-container-selectors/index.js +84 -0
  565. package/schematics/migrations/top-bar-container-selectors/schema.json +20 -0
  566. package/schematics/migrations/tree-select-signals/README.md +61 -0
  567. package/schematics/migrations/tree-select-signals/data.js +106 -0
  568. package/schematics/migrations/tree-select-signals/index.js +58 -0
  569. package/schematics/migrations/tree-select-signals/schema.json +15 -0
  570. package/schematics/migrations/tree-signals/README.md +82 -0
  571. package/schematics/migrations/tree-signals/data.js +123 -0
  572. package/schematics/migrations/tree-signals/index.js +54 -0
  573. package/schematics/migrations/tree-signals/schema.json +15 -0
  574. package/schematics/migrations/tree-state-saving-default/README.md +66 -0
  575. package/schematics/migrations/tree-state-saving-default/data.js +78 -0
  576. package/schematics/migrations/tree-state-saving-default/index.js +60 -0
  577. package/schematics/migrations/tree-state-saving-default/schema.json +15 -0
  578. package/schematics/migrations/username-pipe-injection/README.md +59 -0
  579. package/schematics/migrations/username-pipe-injection/data.js +78 -0
  580. package/schematics/migrations/username-pipe-injection/index.js +58 -0
  581. package/schematics/migrations/username-pipe-injection/schema.json +15 -0
  582. package/schematics/migrations/v20-upgrade/README.md +36 -16
  583. package/schematics/migrations/v20-upgrade/data.js +124 -77
  584. package/schematics/migrations/v20-upgrade/index.js +6 -213
  585. package/schematics/migrations/v21-upgrade/README.md +271 -0
  586. package/schematics/migrations/v21-upgrade/data.js +1371 -0
  587. package/schematics/migrations/v21-upgrade/index.js +94 -0
  588. package/schematics/migrations/v21-upgrade/schema.json +20 -0
  589. package/schematics/migrations/zoneless-change-detection/README.md +30 -0
  590. package/schematics/migrations/zoneless-change-detection/data.js +29 -0
  591. package/schematics/migrations/zoneless-change-detection/index.js +20 -0
  592. package/schematics/migrations/zoneless-change-detection/schema.json +15 -0
  593. package/schematics/migrations.json +392 -2
  594. package/schematics/ng-add/index.js +515 -14
  595. package/schematics/ng-add/schema.json +15 -0
  596. package/schematics/utils/deprecated-path-migration.js +61 -0
  597. package/schematics/utils/package-config.js +9 -105
  598. package/scrollbar/{_scrollbar-component-theme.scss → deprecated/_scrollbar-component-theme.scss} +1 -1
  599. package/scrollbar/{scrollbar.component.scss → deprecated/scrollbar.component.scss} +1 -1
  600. package/scrollbar/native-scrollbar.scss +68 -0
  601. package/scrollbar/scrollbar-tokens.scss +13 -22
  602. package/scrollbar/scrollbar-track.scss +94 -0
  603. package/scrollbar/scrollbar-viewport.scss +33 -0
  604. package/scrollbar/scrollbar.scss +24 -0
  605. package/search-expandable/search-expandable-tokens.scss +4 -0
  606. package/search-expandable/search-expandable.scss +4 -2
  607. package/select/_select-theme.scss +3 -16
  608. package/select/select.scss +0 -6
  609. package/sidebar/sidebar.scss +20 -0
  610. package/sidepanel/_sidepanel-theme.scss +1 -1
  611. package/sidepanel/sidepanel-tokens.scss +7 -1
  612. package/sidepanel/sidepanel.scss +41 -5
  613. package/skeleton/skeleton-presets.scss +350 -0
  614. package/skeleton/skeleton-tokens.scss +127 -0
  615. package/skeleton/skeleton.scss +53 -45
  616. package/split-button/_split-button-theme.scss +4 -4
  617. package/split-button/split-button.scss +2 -6
  618. package/splitter/{_splitter-theme.scss → deprecated/_splitter-theme.scss} +1 -1
  619. package/splitter/deprecated/splitter.scss +51 -0
  620. package/splitter/splitter-tokens.scss +19 -0
  621. package/splitter/splitter.scss +148 -28
  622. package/table/_table-theme.scss +13 -12
  623. package/table/table-tokens.scss +8 -0
  624. package/table/table.scss +47 -22
  625. package/tabs/_tabs-common.scss +14 -14
  626. package/tabs/_tabs-theme.scss +4 -5
  627. package/tabs/tab-body.scss +49 -1
  628. package/tabs/tab-header.scss +2 -1
  629. package/tags/tag-list.scss +4 -0
  630. package/tags/tag.scss +19 -1
  631. package/time-range/time-range.scss +9 -0
  632. package/timezone/timezone-option.component.scss +4 -7
  633. package/timezone/timezone-select.component.scss +3 -0
  634. package/toast/_toast-theme.scss +1 -4
  635. package/toast/toast-container.component.scss +19 -13
  636. package/toast/toast-tokens.scss +12 -6
  637. package/toast/toast.component.scss +42 -19
  638. package/toggle/_toggle-theme.scss +4 -10
  639. package/toggle/toggle.scss +67 -26
  640. package/tooltip/_tooltip-theme.scss +7 -1
  641. package/tooltip/tooltip-tokens.scss +1 -2
  642. package/tooltip/tooltip.scss +55 -9
  643. package/top-bar/top-bar-tokens.scss +13 -2
  644. package/top-bar/top-bar.scss +24 -19
  645. package/tree/_tree-theme.scss +0 -1
  646. package/tree/toggle.scss +5 -9
  647. package/tree/tree-option.scss +2 -4
  648. package/tree/tree-tokens.scss +2 -1
  649. package/tree/tree.scss +3 -5
  650. package/tree-select/_tree-select-theme.scss +4 -15
  651. package/tree-select/tree-select-tokens.scss +16 -0
  652. package/tree-select/tree-select.scss +0 -6
  653. package/{accordion/index.d.ts → types/koobiq-components-accordion.d.ts} +102 -84
  654. package/{actions-panel/index.d.ts → types/koobiq-components-actions-panel.d.ts} +44 -59
  655. package/{alert/index.d.ts → types/koobiq-components-alert.d.ts} +8 -3
  656. package/types/koobiq-components-app-switcher.d.ts +406 -0
  657. package/types/koobiq-components-autocomplete.d.ts +443 -0
  658. package/{badge/index.d.ts → types/koobiq-components-badge.d.ts} +25 -20
  659. package/{breadcrumbs/index.d.ts → types/koobiq-components-breadcrumbs.d.ts} +97 -46
  660. package/types/koobiq-components-button-toggle.d.ts +340 -0
  661. package/types/koobiq-components-button.d.ts +296 -0
  662. package/types/koobiq-components-checkbox.d.ts +172 -0
  663. package/types/koobiq-components-clamped-text.d.ts +184 -0
  664. package/{code-block/index.d.ts → types/koobiq-components-code-block.d.ts} +114 -79
  665. package/{content-panel/index.d.ts → types/koobiq-components-content-panel.d.ts} +81 -25
  666. package/{core/index.d.ts → types/koobiq-components-core.d.ts} +2827 -865
  667. package/{datepicker/index.d.ts → types/koobiq-components-datepicker.d.ts} +161 -116
  668. package/types/koobiq-components-divider.d.ts +43 -0
  669. package/types/koobiq-components-dl.d.ts +235 -0
  670. package/{dropdown/index.d.ts → types/koobiq-components-dropdown.d.ts} +245 -239
  671. package/types/koobiq-components-ellipsis-center.d.ts +85 -0
  672. package/types/koobiq-components-empty-state.d.ts +106 -0
  673. package/{file-upload/index.d.ts → types/koobiq-components-file-upload.d.ts} +214 -107
  674. package/{filter-bar/index.d.ts → types/koobiq-components-filter-bar.d.ts} +410 -495
  675. package/types/koobiq-components-flag.d.ts +68 -0
  676. package/{form-field/index.d.ts → types/koobiq-components-form-field.d.ts} +167 -191
  677. package/types/koobiq-components-icon.d.ts +333 -0
  678. package/{inline-edit/index.d.ts → types/koobiq-components-inline-edit.d.ts} +109 -46
  679. package/types/koobiq-components-input.d.ts +477 -0
  680. package/types/koobiq-components-link-deprecated.d.ts +101 -0
  681. package/types/koobiq-components-link.d.ts +176 -0
  682. package/{list/index.d.ts → types/koobiq-components-list.d.ts} +162 -99
  683. package/types/koobiq-components-loader-overlay.d.ts +101 -0
  684. package/{markdown/index.d.ts → types/koobiq-components-markdown.d.ts} +16 -24
  685. package/types/koobiq-components-modal.d.ts +666 -0
  686. package/types/koobiq-components-navbar.d.ts +569 -0
  687. package/types/koobiq-components-notification-center.d.ts +500 -0
  688. package/{overflow-items/index.d.ts → types/koobiq-components-overflow-items.d.ts} +8 -22
  689. package/types/koobiq-components-popover.d.ts +468 -0
  690. package/types/koobiq-components-progress-bar.d.ts +67 -0
  691. package/{progress-spinner/index.d.ts → types/koobiq-components-progress-spinner.d.ts} +33 -10
  692. package/types/koobiq-components-radio.d.ts +294 -0
  693. package/{resizer/index.d.ts → types/koobiq-components-resizer.d.ts} +37 -2
  694. package/{scrollbar/index.d.ts → types/koobiq-components-scrollbar-deprecated.d.ts} +18 -1
  695. package/types/koobiq-components-scrollbar.d.ts +154 -0
  696. package/types/koobiq-components-search-expandable.d.ts +164 -0
  697. package/{select/index.d.ts → types/koobiq-components-select.d.ts} +360 -167
  698. package/types/koobiq-components-sidebar.d.ts +152 -0
  699. package/types/koobiq-components-sidepanel.d.ts +436 -0
  700. package/types/koobiq-components-skeleton.d.ts +234 -0
  701. package/types/koobiq-components-split-button.d.ts +65 -0
  702. package/{splitter/index.d.ts → types/koobiq-components-splitter-deprecated.d.ts} +44 -1
  703. package/types/koobiq-components-splitter.d.ts +406 -0
  704. package/types/koobiq-components-table.d.ts +44 -0
  705. package/types/koobiq-components-tabs.d.ts +888 -0
  706. package/{tags/index.d.ts → types/koobiq-components-tags.d.ts} +249 -133
  707. package/types/koobiq-components-textarea.d.ts +178 -0
  708. package/{time-range/index.d.ts → types/koobiq-components-time-range.d.ts} +135 -62
  709. package/types/koobiq-components-timepicker.d.ts +223 -0
  710. package/types/koobiq-components-timezone.d.ts +266 -0
  711. package/types/koobiq-components-title.d.ts +184 -0
  712. package/types/koobiq-components-toast.d.ts +289 -0
  713. package/types/koobiq-components-toggle.d.ts +121 -0
  714. package/types/koobiq-components-tooltip.d.ts +610 -0
  715. package/types/koobiq-components-top-bar.d.ts +61 -0
  716. package/types/koobiq-components-tree-select.d.ts +667 -0
  717. package/types/koobiq-components-tree.d.ts +1290 -0
  718. package/types/koobiq-components-username.d.ts +340 -0
  719. package/username/_username-theme.scss +35 -0
  720. package/username/username.scss +10 -34
  721. package/app-switcher/index.d.ts +0 -276
  722. package/autocomplete/index.d.ts +0 -286
  723. package/button/index.d.ts +0 -153
  724. package/button-toggle/index.d.ts +0 -162
  725. package/checkbox/index.d.ts +0 -163
  726. package/clamped-text/index.d.ts +0 -146
  727. package/core/styles/_tokens.scss +0 -7
  728. package/core/styles/common/_clearfix.scss +0 -13
  729. package/core/styles/common/_popup.scss +0 -6
  730. package/core/styles/functions/_index.scss +0 -3
  731. package/core/styles/functions/_number.scss +0 -60
  732. package/core/styles/functions/_string.scss +0 -18
  733. package/core/styles/theming/scrollbar-tokens.scss +0 -25
  734. package/core/styles/typography/_typography-utils.scss +0 -84
  735. package/divider/index.d.ts +0 -20
  736. package/dl/index.d.ts +0 -45
  737. package/ellipsis-center/index.d.ts +0 -71
  738. package/empty-state/index.d.ts +0 -45
  739. package/flag/index.d.ts +0 -44
  740. package/icon/index.d.ts +0 -200
  741. package/input/index.d.ts +0 -354
  742. package/link/index.d.ts +0 -56
  743. package/loader-overlay/index.d.ts +0 -57
  744. package/modal/index.d.ts +0 -339
  745. package/navbar/index.d.ts +0 -372
  746. package/notification-center/index.d.ts +0 -323
  747. package/popover/index.d.ts +0 -182
  748. package/prebuilt-themes/dark-theme.css +0 -1
  749. package/prebuilt-themes/light-theme.css +0 -1
  750. package/progress-bar/index.d.ts +0 -31
  751. package/radio/index.d.ts +0 -203
  752. package/search-expandable/index.d.ts +0 -101
  753. package/sidebar/index.d.ts +0 -94
  754. package/sidepanel/index.d.ts +0 -272
  755. package/skeleton/index.d.ts +0 -26
  756. package/split-button/index.d.ts +0 -46
  757. package/table/index.d.ts +0 -25
  758. package/tabs/index.d.ts +0 -677
  759. package/textarea/index.d.ts +0 -138
  760. package/timepicker/index.d.ts +0 -197
  761. package/timezone/index.d.ts +0 -125
  762. package/title/index.d.ts +0 -139
  763. package/toast/index.d.ts +0 -178
  764. package/toggle/index.d.ts +0 -104
  765. package/tooltip/index.d.ts +0 -335
  766. package/top-bar/index.d.ts +0 -33
  767. package/tree/index.d.ts +0 -802
  768. package/tree-select/index.d.ts +0 -475
  769. package/username/index.d.ts +0 -194
  770. /package/{dynamic-translation/index.d.ts → types/koobiq-components-dynamic-translation.d.ts} +0 -0
  771. /package/{index.d.ts → types/koobiq-components.d.ts} +0 -0
@@ -1,29 +1,19 @@
1
1
  import { SharedResizeObserver } from '@angular/cdk/observers/private';
2
2
  import { Overlay, OverlayContainer, CdkScrollable, OverlayKeyboardDispatcher, FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Directive, inject, ElementRef, TemplateRef, ViewEncapsulation, ChangeDetectionStrategy, Component, Injector, NgZone, Injectable, ChangeDetectorRef, viewChild, ViewContainerRef, NgModule } from '@angular/core';
4
+ import { InjectionToken, Directive, inject, ElementRef, Injector, signal, DestroyRef, TemplateRef, ViewEncapsulation, ChangeDetectionStrategy, Component, NgZone, untracked, Injectable, viewChild, ViewContainerRef, forwardRef, NgModule } from '@angular/core';
5
5
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
- import { ComponentPortal } from '@angular/cdk/portal';
7
- import { BehaviorSubject, merge, timer, filter as filter$1, shareReplay } from 'rxjs';
8
- import { FocusMonitor } from '@angular/cdk/a11y';
9
- import { NgTemplateOutlet } from '@angular/common';
10
6
  import * as i1 from '@koobiq/components/core';
11
- import { KbqReadStateDirective, ThemePalette } from '@koobiq/components/core';
7
+ import { KbqReadStateDirective, kbqInjectA11yLocaleConfiguration, kbqAnimationsDisabled, kbqAfterAnimations } from '@koobiq/components/core';
8
+ import { FocusMonitor } from '@angular/cdk/a11y';
9
+ import { ComponentPortal } from '@angular/cdk/portal';
10
+ import { NgTemplateOutlet, DOCUMENT } from '@angular/common';
11
+ import { BehaviorSubject, Observable, timer, map, distinctUntilChanged, switchMap, EMPTY, filter as filter$1, share } from 'rxjs';
12
12
  import * as i2 from '@koobiq/components/icon';
13
13
  import { KbqIconModule } from '@koobiq/components/icon';
14
14
  import * as i3 from '@koobiq/components/title';
15
15
  import { KbqTitleModule } from '@koobiq/components/title';
16
- import { filter } from 'rxjs/operators';
17
- import { trigger, state, style, transition, animate } from '@angular/animations';
18
-
19
- const kbqToastAnimations = {
20
- toastState: trigger('state', [
21
- state('void', style({ transform: 'translateX(100%)', opacity: 0 })),
22
- transition('* => visible', animate('150ms ease-out', style({ transform: 'translateX(0%)', opacity: 1 }))),
23
- transition('* => void', animate('300ms ease-in', style({ transform: 'translateX(50%)', opacity: 0, height: 0 })))
24
- ])
25
- };
26
- const toastState = kbqToastAnimations.toastState;
16
+ import { filter, take } from 'rxjs/operators';
27
17
 
28
18
  var KbqToastStyle;
29
19
  (function (KbqToastStyle) {
@@ -44,30 +34,39 @@ var KbqToastPosition;
44
34
  })(KbqToastPosition || (KbqToastPosition = {}));
45
35
  class KbqToastData {
46
36
  }
47
- const defaultToastConfig = {
37
+ /** Stack a toast belongs to. Provided by `KbqToastService` for every toast it creates. */
38
+ const KBQ_TOAST_STACK = new InjectionToken('KBQ_TOAST_STACK');
39
+ /** Frozen so that the fallback every application shares cannot be reconfigured from a single consumer. */
40
+ const defaultToastConfig = Object.freeze({
48
41
  position: KbqToastPosition.TOP_RIGHT,
49
42
  duration: 5000,
50
43
  delay: 2000,
51
44
  onTop: false,
52
- indent: {
45
+ indent: Object.freeze({
53
46
  vertical: 0,
54
47
  horizontal: 0
55
- }
56
- };
48
+ })
49
+ });
57
50
  const KBQ_TOAST_CONFIG = new InjectionToken('kbq-toast-config', {
58
51
  factory: () => defaultToastConfig
59
52
  });
60
53
  /** Utility provider for `KBQ_TOAST_CONFIG`. */
61
54
  const kbqToastConfigurationProvider = (configuration) => ({
62
55
  provide: KBQ_TOAST_CONFIG,
63
- useValue: { ...defaultToastConfig, ...configuration }
56
+ useValue: {
57
+ ...defaultToastConfig,
58
+ ...configuration,
59
+ // `indent` is merged on its own: a shallow spread would alias the default object into every
60
+ // configuration that omits it, so writing to one provider's indent would move the global default.
61
+ indent: { ...defaultToastConfig.indent, ...configuration.indent }
62
+ }
64
63
  });
65
64
 
66
65
  class KbqToastCloseButton {
67
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastCloseButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
68
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", type: KbqToastCloseButton, isStandalone: true, selector: "[kbq-toast-close-button]", host: { classAttribute: "kbq-toast__close-button" }, ngImport: i0 }); }
66
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastCloseButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
67
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.25", type: KbqToastCloseButton, isStandalone: true, selector: "[kbq-toast-close-button]", host: { classAttribute: "kbq-toast__close-button" }, ngImport: i0 }); }
69
68
  }
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastCloseButton, decorators: [{
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastCloseButton, decorators: [{
71
70
  type: Directive,
72
71
  args: [{
73
72
  selector: '[kbq-toast-close-button]',
@@ -77,74 +76,129 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
77
76
  }]
78
77
  }] });
79
78
  let id = 0;
79
+ /** Glyph rendered by the built-in icon of every style. A style outside the map renders no default icon. */
80
+ const defaultIcons = {
81
+ [KbqToastStyle.Contrast]: 'kbq-circle-info_16',
82
+ [KbqToastStyle.Success]: 'kbq-circle-check_16',
83
+ [KbqToastStyle.Warning]: 'kbq-triangle-exclamation_16',
84
+ [KbqToastStyle.Error]: 'kbq-triangle-exclamation_16'
85
+ };
86
+ /** Styles whose message interrupts the user instead of waiting for the next graceful moment. */
87
+ const assertiveStyles = [KbqToastStyle.Warning, KbqToastStyle.Error];
80
88
  class KbqToastComponent {
81
- get toastStyle() {
82
- return {
83
- [`kbq-toast_${this.data.style}`]: true
84
- };
85
- }
89
+ // TODO: nothing in the library uses it; kept as public API at the DS-2196 review. Document or deprecate it.
86
90
  get isFocusedOrHovered() {
87
- return this.hovered.getValue() || this.focused.getValue();
91
+ return this.hovered() || this.focused();
88
92
  }
89
93
  constructor() {
90
94
  this.data = inject(KbqToastData);
91
- this.service = inject(KbqToastService);
95
+ this.stack = inject(KBQ_TOAST_STACK);
92
96
  this.elementRef = inject(ElementRef);
93
97
  this.focusMonitor = inject(FocusMonitor);
98
+ this.injector = inject(Injector);
94
99
  this.readStateDirective = inject(KbqReadStateDirective, { host: true });
95
- this.themePalette = ThemePalette;
96
- this.animationState = 'void';
97
- this.hovered = new BehaviorSubject(false);
98
- this.focused = new BehaviorSubject(false);
100
+ this.a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();
101
+ /** Whether the toast appears and leaves without motion. */
102
+ this.animationsDisabled = kbqAnimationsDisabled();
103
+ /** Height the exit animation collapses from, set once the toast leaves. */
104
+ this.leavingHeight = signal(null, ...(ngDevMode ? [{ debugName: "leavingHeight" }] : /* istanbul ignore next */ []));
105
+ this._hovered = signal(false, ...(ngDevMode ? [{ debugName: "_hovered" }] : /* istanbul ignore next */ []));
106
+ this._focused = signal(false, ...(ngDevMode ? [{ debugName: "_focused" }] : /* istanbul ignore next */ []));
107
+ /** Whether the pointer is over the toast. */
108
+ this.hovered = this._hovered.asReadonly();
109
+ /** Whether the toast or an element inside it holds the focus. */
110
+ this.focused = this._focused.asReadonly();
99
111
  this.id = id++;
112
+ /** Context of the templates a consumer passes through `KbqToastData`. */
100
113
  this.$implicit = this;
101
- this.data.style = this.data.style || KbqToastStyle.Contrast;
102
- this.data.icon = this.data.icon !== undefined ? this.data.icon : true;
103
- this.data.iconClass = this.data.iconClass || undefined;
104
- this.data.closeButton = this.data.closeButton !== undefined ? this.data.closeButton : true;
105
- this.animationState = 'visible';
106
- this.runFocusMonitor();
107
- this.hovered.subscribe(this.service.hovered);
108
- this.focused.subscribe(this.service.focused);
109
- merge(this.hovered, this.focused)
110
- .pipe(filter((value) => value), takeUntilDestroyed())
111
- .subscribe(() => {
112
- if (this.ttl === 0) {
113
- return;
114
- }
115
- this.ttl = this.ttl < this.delay ? this.delay : this.ttl;
116
- });
114
+ // The injected data belongs to the caller, so every default lives here instead of being written back into it.
115
+ this.style = this.data.style || KbqToastStyle.Contrast;
116
+ this.styleClass = `kbq-toast_${this.style}`;
117
+ this.role = assertiveStyles.includes(this.style) ? 'alert' : 'status';
118
+ this.closeButton = this.data.closeButton !== undefined ? this.data.closeButton : true;
119
+ this.icon = this.data.icon !== undefined ? this.data.icon : true;
120
+ this.defaultIcon = defaultIcons[this.style] ?? null;
121
+ // The slot templates are fixed once the toast is created, so they are resolved once instead of on every
122
+ // change detection cycle.
123
+ this.iconTemplate = this.asTemplateRef(this.icon);
124
+ this.titleTemplate = this.asTemplateRef(this.data.title);
125
+ this.captionTemplate = this.asTemplateRef(this.data.caption);
126
+ this.contentTemplate = this.asTemplateRef(this.data.content);
127
+ this.actionsTemplate = this.asTemplateRef(this.data.actions);
128
+ this.closeButtonTemplate = this.asTemplateRef(this.closeButton);
129
+ this.alreadyRead = false;
130
+ this.runFocusMonitor(inject(DestroyRef));
131
+ // `read` is a `BehaviorSubject` re-emitted by every hover long enough to count as read, while a toast
132
+ // is read exactly once.
117
133
  this.readStateDirective.read
118
- .pipe(filter((value) => value), takeUntilDestroyed())
119
- .subscribe(() => this.service.read.next(this.data));
134
+ .pipe(filter(Boolean), take(1), takeUntilDestroyed())
135
+ .subscribe(() => this.markAsRead());
120
136
  }
121
137
  ngOnDestroy() {
122
138
  this.stopFocusMonitor();
123
- this.hovered.next(false);
124
- this.focused.next(false);
139
+ this.stack.setHovered(this.id, false);
140
+ this.stack.setFocused(this.id, null);
125
141
  }
126
142
  close() {
127
- this.service.read.next(this.data);
128
- this.service.hide(this.id);
143
+ this.markAsRead();
144
+ this.stack.hide(this.id);
129
145
  }
130
- isTemplateRef(value) {
131
- return value instanceof TemplateRef;
146
+ /**
147
+ * Plays the exit animation of a toast taken off the stack, then calls `done`.
148
+ *
149
+ * @docs-private
150
+ */
151
+ leave(done) {
152
+ const element = this.elementRef.nativeElement;
153
+ const destroyRef = this.injector.get(DestroyRef);
154
+ // `auto` does not animate, so the collapse starts from the measured height.
155
+ this.leavingHeight.set(element.offsetHeight);
156
+ // Raising the stack without `moveBefore()` takes it out of the DOM, which cancels the exit animation and
157
+ // starts it over: the one that runs then is waited for as well.
158
+ const afterExit = (awaited) => {
159
+ const running = (element.getAnimations?.() ?? []).filter((animation) => animation.playState === 'running' &&
160
+ !awaited.includes(animation) &&
161
+ animation.effect?.getComputedTiming().endTime !== Infinity);
162
+ if (!running.length)
163
+ return done();
164
+ Promise.allSettled(running.map(({ finished }) => finished)).then(() => {
165
+ if (!destroyRef.destroyed)
166
+ afterExit(running);
167
+ });
168
+ };
169
+ kbqAfterAnimations(() => element, () => afterExit([]), this.injector);
170
+ }
171
+ /** @docs-private */
172
+ setHovered(hovered) {
173
+ this._hovered.set(hovered);
174
+ this.stack.setHovered(this.id, hovered);
175
+ }
176
+ markAsRead() {
177
+ if (this.alreadyRead) {
178
+ return;
179
+ }
180
+ this.alreadyRead = true;
181
+ this.stack.read.next(this.data);
132
182
  }
133
- onAnimation($event) {
134
- this.service.animation.next($event);
183
+ asTemplateRef(value) {
184
+ return value instanceof TemplateRef ? value : null;
135
185
  }
136
- runFocusMonitor() {
186
+ runFocusMonitor(destroyRef) {
137
187
  this.focusMonitor
138
188
  .monitor(this.elementRef.nativeElement, true)
139
- .subscribe((origin) => this.focused.next(!!origin));
189
+ .pipe(takeUntilDestroyed(destroyRef))
190
+ .subscribe((origin) => {
191
+ this._focused.set(!!origin);
192
+ this.stack.setFocused(this.id, origin);
193
+ });
140
194
  }
141
195
  stopFocusMonitor() {
142
196
  this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);
143
197
  }
144
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
145
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.30", type: KbqToastComponent, isStandalone: true, selector: "kbq-toast", host: { listeners: { "@state.start": "onAnimation($event)", "@state.done": "onAnimation($event)", "mouseenter": "hovered.next(true)", "mouseleave": "hovered.next(false)", "keydown.esc": "close()" }, properties: { "class": "toastStyle", "class.kbq-toast_dismissible": "data.closeButton", "@state": "animationState" }, classAttribute: "kbq-toast" }, hostDirectives: [{ directive: i1.KbqReadStateDirective }], ngImport: i0, template: "@if (data.icon) {\n <div class=\"kbq-toast__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-circle-info_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('success') {\n <i\n kbq-icon=\"kbq-circle-check_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('warning') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('error') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n }\n }\n @if (isTemplateRef(data.icon)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.icon)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!isTemplateRef(data.title)\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (isTemplateRef(data.title)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.title)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!isTemplateRef(data.caption)\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (isTemplateRef(data.caption)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.caption)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!isTemplateRef(data.content)\">\n @if (isTemplateRef(data.content)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.content)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (isTemplateRef(data.actions)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.actions)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (data.closeButton) {\n <div>\n @if (data.closeButton === true) {\n <i kbq-icon-button=\"kbq-xmark-s_16\" kbq-toast-close-button (click)=\"close()\"></i>\n }\n @if (isTemplateRef(data.closeButton)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.closeButton)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n", styles: [".kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius);padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right)}.kbq-toast__icon-container{flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-container-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:calc(var(--kbq-toast-size-content-padding-top) - (var(--kbq-icon-button-size-small-vertical-padding) * 2 + 16px - var(--kbq-typography-text-normal-line-height)) / 2);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: 4px;--kbq-icon-button-size-normal-vertical-padding: 4px}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast,.kbq-toast__title{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-top: var(--kbq-size-m);--kbq-toast-stack-size-margin-right: var(--kbq-size-m);--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: 50%;--kbq-toast-size-close-button-margin-top: var(--kbq-size-m);--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "component", type: i2.KbqIconButton, selector: "[kbq-icon-button]", inputs: ["size", "small", "kbq-icon-button", "tabindex", "disabled"] }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i3.KbqTitleDirective, selector: "[kbq-title]", inputs: ["kbq-title"], exportAs: ["kbqTitle"] }, { kind: "directive", type: KbqToastCloseButton, selector: "[kbq-toast-close-button]" }], animations: [kbqToastAnimations.toastState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
198
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
199
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqToastComponent, isStandalone: true, selector: "kbq-toast", host: { attributes: { "aria-atomic": "true" }, listeners: { "mouseenter": "setHovered(true)", "mouseleave": "setHovered(false)", "keydown.esc": "close()" }, properties: { "class": "styleClass", "class.kbq-toast_dismissible": "closeButton", "attr.role": "role", "class.kbq-toast_leaving": "leavingHeight() !== null", "style.--kbq-toast-leaving-height.px": "leavingHeight()", "class.kbq-animations-disabled": "animationsDisabled" }, classAttribute: "kbq-toast" }, hostDirectives: [{ directive: i1.KbqReadStateDirective }], ngImport: i0, template: "@if (icon) {\n <div class=\"kbq-toast__icon-container\">\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else if (defaultIcon) {\n <i\n class=\"kbq-toast__icon\"\n aria-hidden=\"true\"\n [kbq-icon]=\"defaultIcon\"\n [color]=\"style\"\n [class]=\"data.iconClass\"\n ></i>\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!titleTemplate\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"titleTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!captionTemplate\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (captionTemplate) {\n <ng-container [ngTemplateOutlet]=\"captionTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!contentTemplate\">\n @if (contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (actionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"actionsTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (closeButton) {\n <div>\n @if (closeButtonTemplate) {\n <ng-container [ngTemplateOutlet]=\"closeButtonTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <button\n type=\"button\"\n kbq-icon-button=\"kbq-xmark-s_16\"\n kbq-toast-close-button\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n (click)=\"close()\"\n ></button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";.kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius)}@supports (corner-shape: squircle){.kbq-toast{corner-shape:squircle;border-radius:clamp(var(--kbq-toast-size-container-border-radius) * 1.85,var(--kbq-toast-size-container-border-radius) * 2.3 - 3.6px,var(--kbq-toast-size-container-border-radius) * 2)}}.kbq-toast{padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right);animation:kbq-toast-enter .15s ease-out}.kbq-toast.kbq-toast_leaving{pointer-events:none;animation:kbq-toast-leave .3s ease-in forwards}.kbq-toast.kbq-toast_leaving.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast.kbq-toast_leaving{animation:none;transition:none}}.kbq-toast.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast{animation:none;transition:none}}@keyframes kbq-toast-enter{0%{transform:translate(100%);opacity:0}}@keyframes kbq-toast-leave{0%{height:var(--kbq-toast-leaving-height)}to{transform:translate(50%);opacity:0;height:0}}.kbq-toast__icon-container{display:flex;align-items:flex-start;justify-content:flex-start;flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-icon-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:var(--kbq-toast-size-close-button-margin-top);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: var(--kbq-toast-size-close-button-padding);--kbq-icon-button-size-normal-vertical-padding: var(--kbq-toast-size-close-button-padding)}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: var(--kbq-toast-size-container-border-radius);--kbq-toast-size-close-button-padding: var(--kbq-size-xxs);--kbq-toast-size-close-button-icon-size: 16px;--kbq-toast-size-close-button-height: calc( var(--kbq-toast-size-close-button-icon-size) + var(--kbq-toast-size-close-button-padding) * 2 );--kbq-toast-size-close-button-margin-top: calc( var(--kbq-toast-size-content-padding-top) - (var(--kbq-toast-size-close-button-height) - var(--kbq-typography-text-normal-line-height)) / 2 );--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }, { kind: "component", type: i2.KbqIconButton, selector: "[kbq-icon-button]", inputs: ["size", "kbq-icon-button", "tabindex", "disabled"] }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i3.KbqTitleDirective, selector: "[kbq-title]", inputs: ["kbq-title", "ignoreTooltipPointerEvents"], exportAs: ["kbqTitle"] }, { kind: "directive", type: KbqToastCloseButton, selector: "[kbq-toast-close-button]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
146
200
  }
147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastComponent, decorators: [{
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastComponent, decorators: [{
148
202
  type: Component,
149
203
  args: [{ selector: 'kbq-toast', imports: [
150
204
  NgTemplateOutlet,
@@ -153,15 +207,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
153
207
  KbqToastCloseButton
154
208
  ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
155
209
  class: 'kbq-toast',
156
- '[class]': 'toastStyle',
157
- '[class.kbq-toast_dismissible]': 'data.closeButton',
158
- '[@state]': 'animationState',
159
- '(@state.start)': 'onAnimation($event)',
160
- '(@state.done)': 'onAnimation($event)',
161
- '(mouseenter)': 'hovered.next(true)',
162
- '(mouseleave)': 'hovered.next(false)',
210
+ '[class]': 'styleClass',
211
+ '[class.kbq-toast_dismissible]': 'closeButton',
212
+ // A toast is inserted into an already rendered page, so the toast itself has to be the live region:
213
+ // screen readers announce a node inserted with `role="alert"`/`role="status"`, while an `aria-live`
214
+ // wrapper has to be in the accessibility tree before its content changes.
215
+ '[attr.role]': 'role',
216
+ 'aria-atomic': 'true',
217
+ '[class.kbq-toast_leaving]': 'leavingHeight() !== null',
218
+ '[style.--kbq-toast-leaving-height.px]': 'leavingHeight()',
219
+ '[class.kbq-animations-disabled]': 'animationsDisabled',
220
+ '(mouseenter)': 'setHovered(true)',
221
+ '(mouseleave)': 'setHovered(false)',
163
222
  '(keydown.esc)': 'close()'
164
- }, hostDirectives: [KbqReadStateDirective], animations: [kbqToastAnimations.toastState], template: "@if (data.icon) {\n <div class=\"kbq-toast__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-circle-info_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('success') {\n <i\n kbq-icon=\"kbq-circle-check_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('warning') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n @case ('error') {\n <i\n kbq-icon=\"kbq-triangle-exclamation_16\"\n class=\"kbq-toast__icon\"\n [color]=\"$any(data.style)\"\n [class]=\"data.iconClass\"\n ></i>\n }\n }\n }\n @if (isTemplateRef(data.icon)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.icon)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!isTemplateRef(data.title)\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (isTemplateRef(data.title)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.title)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!isTemplateRef(data.caption)\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (isTemplateRef(data.caption)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.caption)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!isTemplateRef(data.content)\">\n @if (isTemplateRef(data.content)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.content)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (isTemplateRef(data.actions)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.actions)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (data.closeButton) {\n <div>\n @if (data.closeButton === true) {\n <i kbq-icon-button=\"kbq-xmark-s_16\" kbq-toast-close-button (click)=\"close()\"></i>\n }\n @if (isTemplateRef(data.closeButton)) {\n <ng-container [ngTemplateOutlet]=\"$any(data.closeButton)\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n </div>\n}\n", styles: [".kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius);padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right)}.kbq-toast__icon-container{flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-container-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:calc(var(--kbq-toast-size-content-padding-top) - (var(--kbq-icon-button-size-small-vertical-padding) * 2 + 16px - var(--kbq-typography-text-normal-line-height)) / 2);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: 4px;--kbq-icon-button-size-normal-vertical-padding: 4px}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast,.kbq-toast__title{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-top: var(--kbq-size-m);--kbq-toast-stack-size-margin-right: var(--kbq-size-m);--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: 50%;--kbq-toast-size-close-button-margin-top: var(--kbq-size-m);--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"] }]
223
+ }, hostDirectives: [KbqReadStateDirective], template: "@if (icon) {\n <div class=\"kbq-toast__icon-container\">\n @if (iconTemplate) {\n <ng-container [ngTemplateOutlet]=\"iconTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else if (defaultIcon) {\n <i\n class=\"kbq-toast__icon\"\n aria-hidden=\"true\"\n [kbq-icon]=\"defaultIcon\"\n [color]=\"style\"\n [class]=\"data.iconClass\"\n ></i>\n }\n </div>\n}\n\n<div class=\"kbq-toast__container\">\n @if (data.title) {\n <div\n kbq-title\n class=\"kbq-toast__title\"\n [class.kbq-toast__title_only-text]=\"!titleTemplate\"\n [class.kbq-toast__title_with-content]=\"data.caption || data.content\"\n >\n @if (titleTemplate) {\n <ng-container [ngTemplateOutlet]=\"titleTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <p>{{ data.title }}</p>\n }\n </div>\n }\n\n @if (data.caption) {\n <div\n kbq-title\n [class.kbq-toast__text]=\"data.title\"\n [class.kbq-toast__text_only-text]=\"!captionTemplate\"\n [class.kbq-toast__title]=\"!data.title\"\n >\n @if (captionTemplate) {\n <ng-container [ngTemplateOutlet]=\"captionTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.caption }}}\n </div>\n }\n\n @if (data.content) {\n <div class=\"kbq-toast__content\" [class.kbq-toast__content_only-text]=\"!contentTemplate\">\n @if (contentTemplate) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n }\n <!-- prettier-ignore -->\n @else {{{ data.content }}}\n </div>\n }\n\n @if (data.actions) {\n <div class=\"kbq-toast__actions\">\n @if (actionsTemplate) {\n <ng-container [ngTemplateOutlet]=\"actionsTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n {{ data.actions }}\n }\n </div>\n }\n</div>\n\n@if (closeButton) {\n <div>\n @if (closeButtonTemplate) {\n <ng-container [ngTemplateOutlet]=\"closeButtonTemplate\" [ngTemplateOutletContext]=\"{ $implicit }\" />\n } @else {\n <button\n type=\"button\"\n kbq-icon-button=\"kbq-xmark-s_16\"\n kbq-toast-close-button\n [attr.aria-label]=\"a11yLocaleConfiguration().close\"\n (click)=\"close()\"\n ></button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";.kbq-toast{display:flex;box-sizing:border-box;width:var(--kbq-toast-size-container-width);height:auto;border-radius:var(--kbq-toast-size-container-border-radius)}@supports (corner-shape: squircle){.kbq-toast{corner-shape:squircle;border-radius:clamp(var(--kbq-toast-size-container-border-radius) * 1.85,var(--kbq-toast-size-container-border-radius) * 2.3 - 3.6px,var(--kbq-toast-size-container-border-radius) * 2)}}.kbq-toast{padding-left:var(--kbq-toast-size-container-padding-left);padding-right:var(--kbq-toast-size-container-padding-right);animation:kbq-toast-enter .15s ease-out}.kbq-toast.kbq-toast_leaving{pointer-events:none;animation:kbq-toast-leave .3s ease-in forwards}.kbq-toast.kbq-toast_leaving.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast.kbq-toast_leaving{animation:none;transition:none}}.kbq-toast.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-toast{animation:none;transition:none}}@keyframes kbq-toast-enter{0%{transform:translate(100%);opacity:0}}@keyframes kbq-toast-leave{0%{height:var(--kbq-toast-leaving-height)}to{transform:translate(50%);opacity:0;height:0}}.kbq-toast__icon-container{display:flex;align-items:flex-start;justify-content:flex-start;flex-shrink:0;width:var(--kbq-toast-size-icon-width);max-width:var(--kbq-toast-size-icon-width);height:var(--kbq-toast-size-icon-height);max-height:var(--kbq-toast-size-icon-height);border-radius:var(--kbq-toast-size-icon-border-radius);margin-right:var(--kbq-toast-size-icon-margin-right);padding-top:calc(var(--kbq-toast-size-content-padding-top) + (var(--kbq-typography-text-normal-line-height) - var(--kbq-toast-size-icon-height)) / 2)}.kbq-toast__container{display:flex;flex-direction:column;flex:1;padding-top:var(--kbq-toast-size-content-padding-top);padding-right:var(--kbq-size-s);padding-bottom:var(--kbq-toast-size-content-padding-bottom);overflow:hidden}.kbq-toast__title{overflow:hidden;text-overflow:ellipsis}.kbq-toast__title>p{margin:0;overflow:hidden;text-overflow:ellipsis}.kbq-toast__title.kbq-toast__title_only-text{white-space:pre-wrap}.kbq-toast__title_with-content{padding-bottom:var(--kbq-toast-size-caption-padding-bottom)}.kbq-toast__text{display:flex;flex:1;align-items:center}.kbq-toast__text.kbq-toast__text_only-text{white-space:pre-wrap}.kbq-toast__content{display:flex;flex-direction:column}.kbq-toast__content.kbq-toast__content_only-text{white-space:pre-wrap}.kbq-toast__actions{display:flex;padding-top:var(--kbq-toast-size-button-stack-padding-top);gap:var(--kbq-toast-size-button-stack-content-gap-horizontal)}.kbq-toast__close-button{margin-top:var(--kbq-toast-size-close-button-margin-top);margin-right:var(--kbq-toast-size-close-button-margin-right)}.kbq-toast__close-button.kbq-icon-button{--kbq-icon-button-size-normal-horizontal-padding: var(--kbq-toast-size-close-button-padding);--kbq-icon-button-size-normal-vertical-padding: var(--kbq-toast-size-close-button-padding)}.kbq-toast.kbq-toast_contrast{box-shadow:var(--kbq-toast-contrast-container-shadow);background:var(--kbq-toast-contrast-container-background)}.kbq-toast.kbq-toast_contrast .kbq-toast__title{color:var(--kbq-toast-contrast-container-title)}.kbq-toast.kbq-toast_contrast .kbq-toast__text{color:var(--kbq-toast-contrast-container-text)}.kbq-toast.kbq-toast_success{box-shadow:var(--kbq-toast-success-container-shadow);background:var(--kbq-toast-success-container-background)}.kbq-toast.kbq-toast_success .kbq-toast__title{color:var(--kbq-toast-success-container-title)}.kbq-toast.kbq-toast_success .kbq-toast__text{color:var(--kbq-toast-success-container-text)}.kbq-toast.kbq-toast_warning{box-shadow:var(--kbq-toast-warning-container-shadow);background:var(--kbq-toast-warning-container-background)}.kbq-toast.kbq-toast_warning .kbq-toast__title{color:var(--kbq-toast-warning-container-title)}.kbq-toast.kbq-toast_warning .kbq-toast__text{color:var(--kbq-toast-warning-container-text)}.kbq-toast.kbq-toast_error{box-shadow:var(--kbq-toast-error-container-shadow);background:var(--kbq-toast-error-container-background)}.kbq-toast.kbq-toast_error .kbq-toast__title{color:var(--kbq-toast-error-container-title)}.kbq-toast.kbq-toast_error .kbq-toast__text{color:var(--kbq-toast-error-container-text)}.kbq-toast{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ":where(.kbq-toast-container){--kbq-toast-stack-size-margin-vertical: var(--kbq-size-m);--kbq-toast-stack-size-margin-horizontal: var(--kbq-size-m);--kbq-toast-stack-size-gap: var(--kbq-size-s);--kbq-toast-size-container-width: 360px;--kbq-toast-size-container-border-radius: var(--kbq-size-s);--kbq-toast-size-container-padding-left: var(--kbq-size-m);--kbq-toast-size-container-padding-right: var(--kbq-size-s);--kbq-toast-size-content-padding-top: var(--kbq-size-l);--kbq-toast-size-content-padding-bottom: var(--kbq-size-l);--kbq-toast-size-caption-padding-bottom: var(--kbq-size-xxs);--kbq-toast-size-icon-width: var(--kbq-size-l);--kbq-toast-size-icon-height: var(--kbq-size-l);--kbq-toast-size-icon-margin-right: var(--kbq-size-s);--kbq-toast-size-icon-border-radius: var(--kbq-toast-size-container-border-radius);--kbq-toast-size-close-button-padding: var(--kbq-size-xxs);--kbq-toast-size-close-button-icon-size: 16px;--kbq-toast-size-close-button-height: calc( var(--kbq-toast-size-close-button-icon-size) + var(--kbq-toast-size-close-button-padding) * 2 );--kbq-toast-size-close-button-margin-top: calc( var(--kbq-toast-size-content-padding-top) - (var(--kbq-toast-size-close-button-height) - var(--kbq-typography-text-normal-line-height)) / 2 );--kbq-toast-size-close-button-margin-right: var(--kbq-size-xxs);--kbq-toast-size-button-stack-padding-top: var(--kbq-size-s);--kbq-toast-size-button-stack-content-gap-horizontal: var(--kbq-size-m);--kbq-toast-contrast-container-background: var(--kbq-background-card);--kbq-toast-contrast-container-title: var(--kbq-foreground-contrast);--kbq-toast-contrast-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-contrast-container-shadow: var(--kbq-shadow-popup);--kbq-toast-error-container-background: var(--kbq-background-card);--kbq-toast-error-container-title: var(--kbq-foreground-contrast);--kbq-toast-error-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-error-container-shadow: var(--kbq-shadow-popup);--kbq-toast-warning-container-background: var(--kbq-background-card);--kbq-toast-warning-container-title: var(--kbq-foreground-contrast);--kbq-toast-warning-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-warning-container-shadow: var(--kbq-shadow-popup);--kbq-toast-success-container-background: var(--kbq-background-card);--kbq-toast-success-container-title: var(--kbq-foreground-contrast);--kbq-toast-success-container-text: var(--kbq-foreground-contrast-secondary);--kbq-toast-success-container-shadow: var(--kbq-shadow-popup)}\n"] }]
165
224
  }], ctorParameters: () => [] });
166
225
 
167
226
  const KBQ_TOAST_FACTORY = new InjectionToken('KBQ_TOAST_FACTORY', {
@@ -169,39 +228,103 @@ const KBQ_TOAST_FACTORY = new InjectionToken('KBQ_TOAST_FACTORY', {
169
228
  });
170
229
  const CHECK_INTERVAL = 500;
171
230
  let templateId = 0;
231
+ const cssAnimationsIn = (element) => (element.getAnimations?.({ subtree: true }) ?? []).filter((animation) => 'animationName' in animation);
232
+ const targetOf = (animation) => animation.effect?.target ?? null;
233
+ /**
234
+ * Moves `node` right after `reference` without starting the CSS animations inside it over, as taking a node out of
235
+ * the DOM and putting it back does: the exit animation of a leaving toast would be cancelled, and every visible toast
236
+ * would slide in again. `moveBefore()` keeps them running; where it is missing, each restarted animation is set back
237
+ * to the time it had reached, and one that had ended is ended again.
238
+ */
239
+ const moveAfter = (node, reference) => {
240
+ const parent = reference.parentNode;
241
+ if (parent?.moveBefore) {
242
+ parent.moveBefore(node, reference.nextSibling);
243
+ return;
244
+ }
245
+ const progress = cssAnimationsIn(node).map((animation) => ({
246
+ target: targetOf(animation),
247
+ name: animation.animationName,
248
+ time: animation.currentTime
249
+ }));
250
+ reference.after(node);
251
+ for (const animation of cssAnimationsIn(node)) {
252
+ const reached = progress.find(({ target, name }) => target === targetOf(animation) && name === animation.animationName);
253
+ if (reached) {
254
+ if (reached.time !== null)
255
+ animation.currentTime = reached.time;
256
+ }
257
+ else if (animation.effect?.getComputedTiming().endTime !== Infinity) {
258
+ animation.finish();
259
+ }
260
+ }
261
+ };
172
262
  /** Generic `T` is a type hint only; the runtime component comes from `KBQ_TOAST_FACTORY`. */
173
263
  class KbqToastService {
174
264
  get toasts() {
175
- return Object.values(this.toastsDict).filter((item) => !item.hostView.destroyed);
265
+ return Object.values(this.toastsDict)
266
+ .map(({ componentRef }) => componentRef)
267
+ .filter((componentRef) => !componentRef.hostView.destroyed);
176
268
  }
177
269
  get templates() {
178
- return Object.values(this.templatesDict);
270
+ return Object.values(this.templatesDict)
271
+ .map(({ viewRef }) => viewRef)
272
+ .filter((viewRef) => !viewRef.destroyed);
273
+ }
274
+ get isPaused() {
275
+ return this.hoveredToasts.size > 0 || this.focusedToasts.size > 0;
179
276
  }
180
277
  constructor() {
181
278
  this.overlay = inject(Overlay);
182
279
  this.injector = inject(Injector);
183
280
  this.overlayContainer = inject(OverlayContainer);
184
281
  this.ngZone = inject(NgZone);
282
+ this.focusMonitor = inject(FocusMonitor);
283
+ this.document = inject(DOCUMENT);
185
284
  this.toastFactory = inject(KBQ_TOAST_FACTORY);
186
- this.toastConfig = inject(KBQ_TOAST_CONFIG, { optional: true });
285
+ this.toastConfig = inject(KBQ_TOAST_CONFIG);
187
286
  this.read = new BehaviorSubject(null);
188
- this.hovered = new BehaviorSubject(false);
189
- this.focused = new BehaviorSubject(false);
190
- this.animation = new BehaviorSubject(null);
191
- this.timer = timer(CHECK_INTERVAL, CHECK_INTERVAL).pipe(filter$1(() => this.toasts.length > 0 && !this.hovered.getValue() && !this.focused.getValue()),
192
- // eslint-disable-next-line rxjs-x/no-ignored-replay-buffer
193
- shareReplay());
287
+ this._hovered = signal(false, ...(ngDevMode ? [{ debugName: "_hovered" }] : /* istanbul ignore next */ []));
288
+ this._focused = signal(false, ...(ngDevMode ? [{ debugName: "_focused" }] : /* istanbul ignore next */ []));
289
+ /** Whether at least one toast is hovered. */
290
+ this.hovered = this._hovered.asReadonly();
291
+ /** Whether at least one toast holds the focus. */
292
+ this.focused = this._focused.asReadonly();
293
+ this.stackSize = new BehaviorSubject(0);
294
+ /** Subscribed outside Angular so that a tick never runs change detection over the whole application. */
295
+ this.heartbeat = new Observable((subscriber) => this.ngZone.runOutsideAngular(() => timer(CHECK_INTERVAL, CHECK_INTERVAL).subscribe(subscriber)));
296
+ /**
297
+ * Countdown heartbeat: emits every 500 ms while the stack holds something and is not paused by the pointer
298
+ * or the keyboard focus. No interval runs while the stack is empty.
299
+ */
300
+ this.timer = this.stackSize.pipe(map((size) => size > 0), distinctUntilChanged(), switchMap((filled) => (filled ? this.heartbeat : EMPTY)), filter$1(() => !this.isPaused), share());
301
+ /** Toasts taken off the stack that still play their exit animation in the container. */
302
+ this.leaving = new Set();
194
303
  this.toastsDict = {};
195
304
  this.templatesDict = {};
305
+ this.hoveredToasts = new Set();
306
+ this.focusedToasts = new Map();
307
+ this.wasPaused = false;
196
308
  this.processToasts = () => {
197
- for (const toast of this.toasts.filter((item) => item.instance.ttl > 0)) {
198
- toast.instance.ttl -= CHECK_INTERVAL;
199
- if (toast.instance.ttl <= 0) {
200
- this.ngZone.run(() => {
201
- this.hide(toast.instance.id);
202
- this.updateTTLAfterDelete();
203
- });
204
- break;
309
+ this.purgeDestroyed();
310
+ for (const [id, record] of Object.entries(this.toastsDict)) {
311
+ if (record.ttl <= 0) {
312
+ continue;
313
+ }
314
+ record.ttl -= CHECK_INTERVAL;
315
+ if (record.ttl <= 0) {
316
+ this.ngZone.run(() => this.hide(+id));
317
+ return;
318
+ }
319
+ }
320
+ for (const [id, record] of Object.entries(this.templatesDict)) {
321
+ if (record.ttl <= 0) {
322
+ continue;
323
+ }
324
+ record.ttl -= CHECK_INTERVAL;
325
+ if (record.ttl <= 0) {
326
+ this.ngZone.run(() => this.hideTemplate(+id));
327
+ return;
205
328
  }
206
329
  }
207
330
  };
@@ -218,58 +341,218 @@ class KbqToastService {
218
341
  this.currentPosition = undefined;
219
342
  this.toastsDict = {};
220
343
  this.templatesDict = {};
344
+ this.hoveredToasts.clear();
345
+ this.focusedToasts.clear();
346
+ this.stackSize.next(0);
221
347
  }
222
348
  show(data, duration = this.toastConfig.duration, onTop = this.toastConfig.onTop) {
349
+ // Untracked, as `showTemplate()`, `hide()` and `hideTemplate()`: called from a consumer's `effect()`, the signals
350
+ // read on the way — the container's view query, those the focus listeners read when the focus moves on to the
351
+ // next toast — would become dependencies of the effect.
352
+ return untracked(() => this.addToast(data, duration, onTop));
353
+ }
354
+ /** Body of `show()`. */
355
+ addToast(data, duration, onTop) {
356
+ const previouslyFocused = this.document.activeElement;
223
357
  const container = this.prepareContainer();
358
+ // The class generic is a hint: the runtime component is whatever `KBQ_TOAST_FACTORY` resolves to.
224
359
  const componentRef = container.createToast(data, this.toastFactory, onTop);
225
- this.toastsDict[componentRef.instance.id] = componentRef;
226
- componentRef.instance.ttl = duration;
227
- componentRef.instance.delay = this.toastConfig.delay;
228
- return { ref: componentRef, id: componentRef.instance.id };
360
+ const id = componentRef.instance.id;
361
+ if (typeof id !== 'number') {
362
+ // The component is already rendered by now, and it never reaches the stack, so nothing else
363
+ // would ever tear it down: every retry would strand one more element inside the overlay.
364
+ // Detaching the view drops it from the container but leaves its host element connected, so
365
+ // the element has to be taken out by hand as well.
366
+ container.remove(componentRef.hostView);
367
+ componentRef.location.nativeElement.remove();
368
+ this.detachOverlay();
369
+ throw new Error('KBQ_TOAST_FACTORY must provide a component extending KbqToastComponent: `id` is missing.');
370
+ }
371
+ this.toastsDict[id] = { componentRef, ttl: duration, previouslyFocused };
372
+ this.syncStackSize();
373
+ return { ref: componentRef, id };
229
374
  }
230
375
  showTemplate(data, template, duration = this.toastConfig.duration, onTop = this.toastConfig.onTop) {
376
+ return untracked(() => this.addTemplate(data, template, duration, onTop));
377
+ }
378
+ /** Body of `showTemplate()`. */
379
+ addTemplate(data, template, duration, onTop) {
231
380
  const container = this.prepareContainer();
232
381
  const viewRef = container.createTemplate(data, template, onTop);
233
382
  const id = templateId++;
234
- this.templatesDict[id] = viewRef;
235
- this.addRemoveTimer(id, duration);
383
+ this.templatesDict[id] = { viewRef, ttl: duration };
384
+ this.syncStackSize();
236
385
  return { ref: viewRef, id };
237
386
  }
238
387
  hide(id) {
239
- const componentRef = this.toastsDict[id];
240
- if (!componentRef) {
388
+ untracked(() => this.removeToast(id));
389
+ }
390
+ /** Body of `hide()`. */
391
+ removeToast(id) {
392
+ const record = this.toastsDict[id];
393
+ if (!record) {
241
394
  return;
242
395
  }
243
- this.containerInstance?.remove(componentRef.hostView);
396
+ // Removing the view destroys the toast, which releases its own pause state, so the focus origin has to
397
+ // be read before that happens.
398
+ const focusOrigin = this.focusedToasts.get(id);
399
+ this.removeAfterExit(record.componentRef);
244
400
  delete this.toastsDict[id];
245
- this.detachOverlay();
401
+ this.setHovered(id, false);
402
+ this.setFocused(id, null);
403
+ // Only a keyboard or a programmatic focus is handed on. A mouse press on the close button focuses it
404
+ // as a side effect of the click, and moving that focus into the next toast would report the survivor
405
+ // as focused — pausing the whole stack until something blurs it, which a pointer leaving never does.
406
+ if (focusOrigin === 'keyboard' || focusOrigin === 'program') {
407
+ this.restoreFocus(record.previouslyFocused, focusOrigin);
408
+ }
409
+ this.renewLifetimes();
410
+ this.syncStackSize();
246
411
  }
247
412
  hideTemplate(id) {
248
- const viewRef = this.templatesDict[id];
249
- if (!viewRef) {
413
+ untracked(() => this.removeTemplate(id));
414
+ }
415
+ /** Body of `hideTemplate()`. */
416
+ removeTemplate(id) {
417
+ const record = this.templatesDict[id];
418
+ if (!record) {
250
419
  return;
251
420
  }
252
- this.containerInstance?.remove(viewRef);
421
+ this.containerInstance?.remove(record.viewRef);
253
422
  delete this.templatesDict[id];
423
+ this.renewLifetimes();
424
+ this.syncStackSize();
254
425
  this.detachOverlay();
255
426
  }
427
+ /** Reports that the pointer entered or left the toast with the given id. @docs-private */
428
+ setHovered(id, hovered) {
429
+ if (hovered === this.hoveredToasts.has(id)) {
430
+ return;
431
+ }
432
+ if (hovered) {
433
+ this.hoveredToasts.add(id);
434
+ }
435
+ else {
436
+ this.hoveredToasts.delete(id);
437
+ }
438
+ this.updatePauseState();
439
+ }
440
+ /** Reports the origin the toast with the given id is focused with, or `null` once it is not. @docs-private */
441
+ setFocused(id, origin) {
442
+ if ((this.focusedToasts.get(id) ?? null) === origin) {
443
+ return;
444
+ }
445
+ if (origin) {
446
+ this.focusedToasts.set(id, origin);
447
+ }
448
+ else {
449
+ this.focusedToasts.delete(id);
450
+ }
451
+ this.updatePauseState();
452
+ }
453
+ updatePauseState() {
454
+ const paused = this.isPaused;
455
+ // Entering the paused state renews the countdown, so that nothing disappears the instant the pointer or
456
+ // the focus leaves the stack.
457
+ if (paused && !this.wasPaused) {
458
+ this.renewLifetimes();
459
+ }
460
+ this.wasPaused = paused;
461
+ this._hovered.set(this.hoveredToasts.size > 0);
462
+ this._focused.set(this.focusedToasts.size > 0);
463
+ }
464
+ /** Focus must not fall back to the document body when the toast holding it goes away. */
465
+ restoreFocus(previouslyFocused, origin) {
466
+ const target = this.getNextFocusTarget() || previouslyFocused;
467
+ if (!target?.isConnected) {
468
+ return;
469
+ }
470
+ // `focusVia` keeps the focus ring of a keyboard user, which a native `focus()` would drop.
471
+ this.focusMonitor.focusVia(target, origin || 'program');
472
+ }
473
+ getNextFocusTarget() {
474
+ // Stack order, not `toastsDict` order. The dictionary is keyed by id, so `toasts` always reads
475
+ // oldest-first, while `onTop` inserts a new toast at the top of the stack — following the dictionary
476
+ // there would carry the focus past every toast between the one that closed and the oldest on screen.
477
+ const inStackOrder = this.toasts
478
+ .map(({ location }) => location.nativeElement)
479
+ .sort((a, b) => (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1));
480
+ for (const host of inStackOrder) {
481
+ const closeButton = host.querySelector('[kbq-toast-close-button]');
482
+ if (closeButton) {
483
+ return closeButton;
484
+ }
485
+ }
486
+ return null;
487
+ }
488
+ /** Plays the exit animation of a toast taken off the stack, then removes it from the container. */
489
+ removeAfterExit(componentRef) {
490
+ // Destroyed by whoever held the ref: there is nothing left to animate.
491
+ if (componentRef.hostView.destroyed) {
492
+ this.detachOverlay();
493
+ return;
494
+ }
495
+ this.leaving.add(componentRef);
496
+ // Also destroyed before its exit ends, by whoever holds the ref or with the overlay, which a destroyed
497
+ // view never reports back from.
498
+ componentRef.onDestroy(() => {
499
+ this.leaving.delete(componentRef);
500
+ this.detachOverlay();
501
+ });
502
+ componentRef.instance.leave(() => this.containerInstance?.remove(componentRef.hostView));
503
+ }
504
+ /** Detaching destroys the container, so it waits for the stack to empty and the last exit to end. */
256
505
  detachOverlay() {
257
- if (this.toasts.length !== 0 || this.templates.length !== 0) {
506
+ if (this.toasts.length !== 0 || this.templates.length !== 0 || this.leaving.size !== 0) {
258
507
  return;
259
508
  }
260
509
  this.overlayRef?.detach();
261
510
  }
262
- updateTTLAfterDelete() {
263
- this.toasts
264
- .filter((item) => item.instance.ttl > 0)
265
- .forEach((item) => (item.instance.ttl = this.toastConfig.delay));
511
+ syncStackSize() {
512
+ this.stackSize.next(this.toasts.length + this.templates.length);
513
+ }
514
+ /**
515
+ * Drops the records whose view was destroyed from outside the service — by a consumer holding the ref,
516
+ * or by whatever owns the surrounding view. Nothing else deletes them: a record with a `ttl` of `0` is
517
+ * skipped by the countdown forever, so the stack would keep reporting a size and the heartbeat would
518
+ * keep running with nothing on screen.
519
+ */
520
+ purgeDestroyed() {
521
+ let purged = false;
522
+ for (const [id, { componentRef }] of Object.entries(this.toastsDict)) {
523
+ if (!componentRef.hostView.destroyed) {
524
+ continue;
525
+ }
526
+ delete this.toastsDict[+id];
527
+ this.setHovered(+id, false);
528
+ this.setFocused(+id, null);
529
+ purged = true;
530
+ }
531
+ for (const [id, { viewRef }] of Object.entries(this.templatesDict)) {
532
+ if (!viewRef.destroyed) {
533
+ continue;
534
+ }
535
+ delete this.templatesDict[+id];
536
+ purged = true;
537
+ }
538
+ if (!purged) {
539
+ return;
540
+ }
541
+ this.syncStackSize();
542
+ this.detachOverlay();
266
543
  }
267
- addRemoveTimer(id, duration) {
268
- setTimeout(() => this.hideTemplate(id), duration);
544
+ /** Keeps every survivor on screen for at least the configured delay after a dismissal or a pause. */
545
+ renewLifetimes() {
546
+ const records = [...Object.values(this.toastsDict), ...Object.values(this.templatesDict)];
547
+ for (const record of records) {
548
+ if (record.ttl > 0) {
549
+ record.ttl = Math.max(record.ttl, this.toastConfig.delay);
550
+ }
551
+ }
269
552
  }
270
553
  prepareContainer() {
271
554
  const overlayRef = this.createOverlay();
272
- const portal = this.portal || new ComponentPortal(KbqToastContainerComponent, null, this.injector);
555
+ const portal = this.portal || new ComponentPortal(KbqToastContainerComponent, null, this.createStackInjector());
273
556
  this.portal = portal;
274
557
  if (!overlayRef.hasAttached()) {
275
558
  this.containerInstance = overlayRef.attach(portal).instance;
@@ -280,11 +563,35 @@ class KbqToastService {
280
563
  this.toTop(overlayRef);
281
564
  return this.containerInstance;
282
565
  }
566
+ /** Every toast resolves its stack through the container, so that it never depends on this service. */
567
+ createStackInjector() {
568
+ return Injector.create({
569
+ providers: [{ provide: KBQ_TOAST_STACK, useValue: this }],
570
+ parent: this.injector
571
+ });
572
+ }
573
+ /** Raises the stack above the overlays opened after it. */
283
574
  toTop(overlayRef) {
575
+ const host = overlayRef.hostElement;
284
576
  const overlays = this.overlayContainer.getContainerElement().childNodes;
285
- if (overlays.length > 1) {
286
- overlays[overlays.length - 1].after(overlayRef.hostElement);
577
+ const last = overlays[overlays.length - 1];
578
+ // The identity check matters: `x.after(x)` is not a no-op. `after()` resolves no viable next
579
+ // sibling for a node that is already last and falls through to `insertBefore(x, null)`, whose
580
+ // insert steps take `x` out of its parent first — a real detach and re-attach of the wrapper
581
+ // holding every live toast, on every `show()`.
582
+ if (overlays.length < 2 || last === host) {
583
+ return;
287
584
  }
585
+ // A popover host is in the top layer, painted in the order the popovers were shown in, not in DOM
586
+ // order. Taking it out of the DOM hides the popover, which drops the stack beneath every overlay
587
+ // there, so it is shown again instead. Its place in the DOM stays, so it is raised again on every
588
+ // `show()` while that overlay is open.
589
+ if (overlayRef.getConfig().usePopover && host.matches(':popover-open')) {
590
+ host.hidePopover();
591
+ host.showPopover();
592
+ return;
593
+ }
594
+ moveAfter(host, last);
288
595
  }
289
596
  createOverlay() {
290
597
  const expectedPosition = this.toastConfig.position;
@@ -292,7 +599,11 @@ class KbqToastService {
292
599
  return this.overlayRef;
293
600
  }
294
601
  if (this.overlayRef) {
602
+ // Nothing survives the overlay it lives in, so the stack is drained through the regular paths
603
+ // instead of leaving both dictionaries pointing at destroyed views.
604
+ this.clear();
295
605
  this.overlayRef.dispose();
606
+ this.overlayRef = undefined;
296
607
  this.containerInstance = undefined;
297
608
  this.portal = undefined;
298
609
  }
@@ -303,6 +614,10 @@ class KbqToastService {
303
614
  this.currentPosition = expectedPosition;
304
615
  return overlayRef;
305
616
  }
617
+ clear() {
618
+ Object.keys(this.toastsDict).forEach((id) => this.hide(+id));
619
+ Object.keys(this.templatesDict).forEach((id) => this.hideTemplate(+id));
620
+ }
306
621
  getPositionStrategy(position) {
307
622
  switch (position) {
308
623
  case KbqToastPosition.CENTER:
@@ -355,10 +670,10 @@ class KbqToastService {
355
670
  getGlobalOverlayPosition() {
356
671
  return this.overlay.position().global();
357
672
  }
358
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
359
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastService, providedIn: 'root' }); }
673
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
674
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastService, providedIn: 'root' }); }
360
675
  }
361
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastService, decorators: [{
676
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastService, decorators: [{
362
677
  type: Injectable,
363
678
  args: [{ providedIn: 'root' }]
364
679
  }], ctorParameters: () => [] });
@@ -367,21 +682,10 @@ class KbqToastContainerComponent extends CdkScrollable {
367
682
  constructor() {
368
683
  super();
369
684
  this.injector = inject(Injector);
370
- this.changeDetectorRef = inject(ChangeDetectorRef);
685
+ this.a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();
371
686
  this.service = inject(KbqToastService);
372
687
  this.viewContainer = viewChild.required('container', { read: ViewContainerRef });
373
688
  this.overlayKeyboardDispatcher = inject(OverlayKeyboardDispatcher);
374
- /**
375
- * Fakes a scroll on the container so that overlays anchored inside a toast are repositioned by their
376
- * `RepositionScrollStrategy` when the stack shifts.
377
- *
378
- * @deprecated The container repositions the overlays anchored inside it on its own, so nothing calls this.
379
- * It is kept only for callers that already hold a container reference — the instance created by
380
- * `KbqToastService` is not exposed. The fake scroll also closes every close-on-scroll overlay of the app.
381
- */
382
- this.dispatchScrollEvent = () => {
383
- this.elementRef.nativeElement.dispatchEvent(new Event('scroll'));
384
- };
385
689
  // Toasts are ordinary flow children, so removing one slides the rest for as long as its height animates,
386
690
  // and an overlay opened from inside a toast is left behind its trigger: CDK re-measures the origin only on
387
691
  // a scroll or a viewport resize. The container's box tracks the reflow exactly. It is not reported as a
@@ -394,12 +698,13 @@ class KbqToastContainerComponent extends CdkScrollable {
394
698
  createToast(data, componentType, onTop) {
395
699
  const injector = this.getInjector(data);
396
700
  const index = onTop ? 0 : undefined;
397
- this.changeDetectorRef.markForCheck();
398
701
  return this.viewContainer().createComponent(componentType, { injector, index });
399
702
  }
400
703
  createTemplate(data, template, onTop) {
401
704
  const index = onTop ? 0 : undefined;
402
- return this.viewContainer().createEmbeddedView(template, { $implicit: data }, index);
705
+ const viewRef = this.viewContainer().createEmbeddedView(template, { $implicit: data }, index);
706
+ this.markAsLiveRegion(viewRef);
707
+ return viewRef;
403
708
  }
404
709
  remove(viewRef) {
405
710
  const index = this.viewContainer().indexOf(viewRef);
@@ -426,14 +731,29 @@ class KbqToastContainerComponent extends CdkScrollable {
426
731
  }
427
732
  }
428
733
  }
429
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
430
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.30", type: KbqToastContainerComponent, isStandalone: true, selector: "kbq-toast-container", host: { classAttribute: "kbq-toast-container" }, viewQueries: [{ propertyName: "viewContainer", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: '<ng-container #container />', isInline: true, styles: [".kbq-toast-container{display:flex;flex-direction:column;align-items:flex-end;gap:var(--kbq-toast-stack-size-gap)}.kbq-toast-container.kbq-toast-container-top-right{margin-top:var(--kbq-toast-stack-size-margin-vertical);margin-right:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-top-left{margin-top:var(--kbq-toast-stack-size-margin-vertical);margin-left:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-top-center{margin-top:var(--kbq-toast-stack-size-margin-vertical)}.kbq-toast-container.kbq-toast-container-bottom-right{margin-bottom:var(--kbq-toast-stack-size-margin-vertical);margin-right:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-bottom-left{margin-bottom:var(--kbq-toast-stack-size-margin-vertical);margin-left:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-bottom-center{margin-bottom:var(--kbq-toast-stack-size-margin-vertical)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
734
+ /**
735
+ * A template toast has no component host of its own, so its first element becomes the live region — screen
736
+ * readers announce a node inserted with `role="status"`. A template declaring its own role is left alone,
737
+ * and one whose root is a bare text node cannot carry the attribute at all — it needs an element around it.
738
+ */
739
+ markAsLiveRegion(viewRef) {
740
+ const root = viewRef.rootNodes.find((node) => node?.nodeType === Node.ELEMENT_NODE);
741
+ if (!root || root.hasAttribute('role')) {
742
+ return;
743
+ }
744
+ root.setAttribute('role', 'status');
745
+ root.setAttribute('aria-atomic', 'true');
746
+ }
747
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
748
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.25", type: KbqToastContainerComponent, isStandalone: true, selector: "kbq-toast-container", host: { attributes: { "role": "region" }, properties: { "attr.aria-label": "a11yLocaleConfiguration().toastRegion" }, classAttribute: "kbq-toast-container" }, providers: [{ provide: KBQ_TOAST_STACK, useExisting: forwardRef((() => KbqToastService)) }], viewQueries: [{ propertyName: "viewContainer", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: '<ng-container #container />', isInline: true, styles: [".kbq-toast-container{display:flex;flex-direction:column;align-items:flex-end;gap:var(--kbq-toast-stack-size-gap)}.kbq-toast-container.kbq-toast-container-top-right,.kbq-toast-container.kbq-toast-container-top-left,.kbq-toast-container.kbq-toast-container-top-center{margin-top:var(--kbq-toast-stack-size-margin-vertical)}.kbq-toast-container.kbq-toast-container-bottom-right,.kbq-toast-container.kbq-toast-container-bottom-left,.kbq-toast-container.kbq-toast-container-bottom-center{margin-bottom:var(--kbq-toast-stack-size-margin-vertical)}.kbq-toast-container.kbq-toast-container-top-right,.kbq-toast-container.kbq-toast-container-bottom-right{margin-right:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-top-left,.kbq-toast-container.kbq-toast-container-bottom-left{align-items:flex-start;margin-left:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-top-center,.kbq-toast-container.kbq-toast-container-bottom-center,.kbq-toast-container.kbq-toast-container-center{align-items:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
431
749
  }
432
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastContainerComponent, decorators: [{
750
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastContainerComponent, decorators: [{
433
751
  type: Component,
434
- args: [{ selector: 'kbq-toast-container', template: '<ng-container #container />', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
435
- class: 'kbq-toast-container'
436
- }, styles: [".kbq-toast-container{display:flex;flex-direction:column;align-items:flex-end;gap:var(--kbq-toast-stack-size-gap)}.kbq-toast-container.kbq-toast-container-top-right{margin-top:var(--kbq-toast-stack-size-margin-vertical);margin-right:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-top-left{margin-top:var(--kbq-toast-stack-size-margin-vertical);margin-left:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-top-center{margin-top:var(--kbq-toast-stack-size-margin-vertical)}.kbq-toast-container.kbq-toast-container-bottom-right{margin-bottom:var(--kbq-toast-stack-size-margin-vertical);margin-right:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-bottom-left{margin-bottom:var(--kbq-toast-stack-size-margin-vertical);margin-left:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-bottom-center{margin-bottom:var(--kbq-toast-stack-size-margin-vertical)}\n"] }]
752
+ args: [{ selector: 'kbq-toast-container', template: '<ng-container #container />', providers: [{ provide: KBQ_TOAST_STACK, useExisting: forwardRef((() => KbqToastService)) }], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
753
+ class: 'kbq-toast-container',
754
+ role: 'region',
755
+ '[attr.aria-label]': 'a11yLocaleConfiguration().toastRegion'
756
+ }, styles: [".kbq-toast-container{display:flex;flex-direction:column;align-items:flex-end;gap:var(--kbq-toast-stack-size-gap)}.kbq-toast-container.kbq-toast-container-top-right,.kbq-toast-container.kbq-toast-container-top-left,.kbq-toast-container.kbq-toast-container-top-center{margin-top:var(--kbq-toast-stack-size-margin-vertical)}.kbq-toast-container.kbq-toast-container-bottom-right,.kbq-toast-container.kbq-toast-container-bottom-left,.kbq-toast-container.kbq-toast-container-bottom-center{margin-bottom:var(--kbq-toast-stack-size-margin-vertical)}.kbq-toast-container.kbq-toast-container-top-right,.kbq-toast-container.kbq-toast-container-bottom-right{margin-right:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-top-left,.kbq-toast-container.kbq-toast-container-bottom-left{align-items:flex-start;margin-left:var(--kbq-toast-stack-size-margin-horizontal)}.kbq-toast-container.kbq-toast-container-top-center,.kbq-toast-container.kbq-toast-container-bottom-center,.kbq-toast-container.kbq-toast-container-center{align-items:center}\n"] }]
437
757
  }], ctorParameters: () => [], propDecorators: { viewContainer: [{ type: i0.ViewChild, args: ['container', { ...{ read: ViewContainerRef }, isSignal: true }] }] } });
438
758
 
439
759
  const COMPONENTS = [
@@ -442,15 +762,15 @@ const COMPONENTS = [
442
762
  KbqToastContainerComponent
443
763
  ];
444
764
  class KbqToastModule {
445
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
446
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.30", ngImport: i0, type: KbqToastModule, imports: [KbqToastComponent,
765
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
766
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: KbqToastModule, imports: [KbqToastComponent,
447
767
  KbqToastCloseButton,
448
768
  KbqToastContainerComponent], exports: [KbqToastComponent,
449
769
  KbqToastCloseButton,
450
770
  KbqToastContainerComponent] }); }
451
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastModule, imports: [KbqToastComponent] }); }
771
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastModule, imports: [KbqToastComponent] }); }
452
772
  }
453
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqToastModule, decorators: [{
773
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqToastModule, decorators: [{
454
774
  type: NgModule,
455
775
  args: [{
456
776
  imports: COMPONENTS,
@@ -462,5 +782,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
462
782
  * Generated bundle index. Do not edit.
463
783
  */
464
784
 
465
- export { KBQ_TOAST_CONFIG, KBQ_TOAST_FACTORY, KbqToastCloseButton, KbqToastComponent, KbqToastContainerComponent, KbqToastData, KbqToastModule, KbqToastPosition, KbqToastService, KbqToastStyle, defaultToastConfig, kbqToastConfigurationProvider };
785
+ export { KBQ_TOAST_CONFIG, KBQ_TOAST_FACTORY, KBQ_TOAST_STACK, KbqToastCloseButton, KbqToastComponent, KbqToastContainerComponent, KbqToastData, KbqToastModule, KbqToastPosition, KbqToastService, KbqToastStyle, defaultToastConfig, kbqToastConfigurationProvider };
466
786
  //# sourceMappingURL=koobiq-components-toast.mjs.map