@bravobit/bb-foundation 0.26.3 → 0.27.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 (490) hide show
  1. package/auth/lib/directives/authenticated.directive.d.ts +1 -1
  2. package/collections/lib/components/collections-pager/collections-pager.component.d.ts +1 -1
  3. package/collections/lib/components/collections-viewer/collections-viewer.component.d.ts +1 -1
  4. package/controls/lib/checkbox/checkbox/checkbox.component.d.ts +1 -1
  5. package/controls/lib/checkbox/checkbox-group/checkbox-group.component.d.ts +1 -1
  6. package/controls/lib/control-error/control-error/control-error.component.d.ts +1 -1
  7. package/controls/lib/form-control/form-control/form-control.component.d.ts +1 -1
  8. package/controls/lib/form-control/form-control-addon/form-control-addon.component.d.ts +1 -1
  9. package/controls/lib/form-control/form-control-input.directive.d.ts +1 -1
  10. package/controls/lib/radio/radio-button/radio-button.component.d.ts +1 -1
  11. package/controls/lib/radio/radio-group/radio-group.component.d.ts +1 -1
  12. package/controls/lib/toggle/toggle/toggle.component.d.ts +1 -1
  13. package/controls/lib/toggle/toggle-group/toggle-group.component.d.ts +1 -1
  14. package/dashboard/lib/dashboard/dashboard.component.d.ts +1 -1
  15. package/dashboard/lib/dashboard-menu/dashboard-menu.component.d.ts +1 -1
  16. package/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.d.ts +1 -1
  17. package/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.d.ts +1 -1
  18. package/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.d.ts +1 -1
  19. package/dialog/lib/dialog-modal/dialog-modal.component.d.ts +1 -1
  20. package/elements/lib/avatar/avatar.component.d.ts +1 -1
  21. package/elements/lib/button/button.component.d.ts +2 -2
  22. package/elements/lib/checkbox/checkbox.component.d.ts +1 -1
  23. package/elements/lib/date-picker/date-picker.component.d.ts +1 -1
  24. package/elements/lib/directives/input.directive.d.ts +2 -2
  25. package/elements/lib/dropdown/dropdown.component.d.ts +1 -1
  26. package/elements/lib/file-picker/file-picker.component.d.ts +2 -2
  27. package/elements/lib/form-control/form-control.component.d.ts +1 -1
  28. package/elements/lib/form-error/form-error.component.d.ts +1 -1
  29. package/elements/lib/form-group/form-group.component.d.ts +1 -1
  30. package/elements/lib/icon/icon.component.d.ts +1 -1
  31. package/elements/lib/image-picker/image-picker.component.d.ts +1 -1
  32. package/elements/lib/spinner/spinner.component.d.ts +1 -1
  33. package/esm2022/auth/lib/auth.interceptor.mjs +91 -0
  34. package/esm2022/auth/lib/auth.module.mjs +36 -0
  35. package/esm2022/auth/lib/auth.service.mjs +271 -0
  36. package/esm2022/auth/lib/directives/authenticated.directive.mjs +43 -0
  37. package/esm2022/auth/lib/guards/anonymous.guard.mjs +54 -0
  38. package/esm2022/auth/lib/guards/authenticated.guard.mjs +57 -0
  39. package/esm2022/collections/lib/collections.module.mjs +55 -0
  40. package/esm2022/collections/lib/components/collections-pager/collections-pager.component.mjs +124 -0
  41. package/esm2022/collections/lib/components/collections-viewer/collections-viewer.component.mjs +32 -0
  42. package/esm2022/collections/lib/components/collections.directive.mjs +47 -0
  43. package/esm2022/controls/lib/checkbox/checkbox/checkbox.component.mjs +179 -0
  44. package/esm2022/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +69 -0
  45. package/esm2022/controls/lib/checkbox/checkbox.module.mjs +21 -0
  46. package/esm2022/controls/lib/control-error/control-error/control-error.component.mjs +64 -0
  47. package/esm2022/controls/lib/control-error/control-error-submit.directive.mjs +48 -0
  48. package/esm2022/controls/lib/control-error/control-error.module.mjs +20 -0
  49. package/esm2022/controls/lib/controls.module.mjs +63 -0
  50. package/esm2022/controls/lib/form-control/form-control/form-control.component.mjs +80 -0
  51. package/esm2022/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +23 -0
  52. package/esm2022/controls/lib/form-control/form-control-input.directive.mjs +125 -0
  53. package/esm2022/controls/lib/form-control/form-control.module.mjs +35 -0
  54. package/esm2022/controls/lib/radio/radio-button/radio-button.component.mjs +76 -0
  55. package/esm2022/controls/lib/radio/radio-group/radio-group.component.mjs +169 -0
  56. package/esm2022/controls/lib/radio/radio.module.mjs +22 -0
  57. package/esm2022/controls/lib/toggle/toggle/toggle.component.mjs +154 -0
  58. package/esm2022/controls/lib/toggle/toggle-group/toggle-group.component.mjs +63 -0
  59. package/esm2022/controls/lib/toggle/toggle.module.mjs +21 -0
  60. package/esm2022/dashboard/lib/dashboard/dashboard.component.mjs +58 -0
  61. package/{esm2020 → esm2022}/dashboard/lib/dashboard-header/dashboard-header.component.mjs +6 -5
  62. package/esm2022/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +32 -0
  63. package/esm2022/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +30 -0
  64. package/esm2022/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +76 -0
  65. package/esm2022/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +100 -0
  66. package/esm2022/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +63 -0
  67. package/esm2022/dashboard/lib/dashboard.module.mjs +48 -0
  68. package/esm2022/dialog/lib/dialog-actions/dialog-actions.component.mjs +13 -0
  69. package/esm2022/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +47 -0
  70. package/esm2022/dialog/lib/dialog-container/dialog-container.component.mjs +78 -0
  71. package/esm2022/dialog/lib/dialog-header/dialog-header.component.mjs +19 -0
  72. package/esm2022/dialog/lib/dialog-link/dialog-link.component.mjs +12 -0
  73. package/esm2022/dialog/lib/dialog-modal/dialog-modal.component.mjs +68 -0
  74. package/esm2022/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +80 -0
  75. package/esm2022/dialog/lib/dialog.insertion.mjs +17 -0
  76. package/esm2022/dialog/lib/dialog.module.mjs +69 -0
  77. package/esm2022/dialog/lib/dialog.service.mjs +69 -0
  78. package/esm2022/elements/lib/avatar/avatar.component.mjs +150 -0
  79. package/esm2022/elements/lib/button/button.component.mjs +63 -0
  80. package/esm2022/elements/lib/checkbox/checkbox.component.mjs +74 -0
  81. package/esm2022/elements/lib/date-picker/date-picker.component.mjs +308 -0
  82. package/esm2022/elements/lib/directives/addon.directive.mjs +31 -0
  83. package/esm2022/elements/lib/directives/form-submit.directive.mjs +51 -0
  84. package/esm2022/elements/lib/directives/form-submitter.directive.mjs +26 -0
  85. package/esm2022/elements/lib/directives/input.directive.mjs +138 -0
  86. package/esm2022/elements/lib/dropdown/dropdown.component.mjs +102 -0
  87. package/esm2022/elements/lib/elements.module.mjs +178 -0
  88. package/esm2022/elements/lib/file-picker/file-picker.component.mjs +237 -0
  89. package/esm2022/elements/lib/form-control/form-control.component.mjs +50 -0
  90. package/esm2022/elements/lib/form-error/form-error.component.mjs +124 -0
  91. package/esm2022/elements/lib/form-group/form-group.component.mjs +19 -0
  92. package/esm2022/elements/lib/icon/icon.component.mjs +103 -0
  93. package/esm2022/elements/lib/image-picker/image-picker.component.mjs +107 -0
  94. package/esm2022/elements/lib/pipes/file-image.pipe.mjs +44 -0
  95. package/esm2022/elements/lib/pipes/file-size.pipe.mjs +29 -0
  96. package/esm2022/elements/lib/pipes/relative-time.pipe.mjs +97 -0
  97. package/esm2022/elements/lib/spinner/spinner.component.mjs +26 -0
  98. package/esm2022/elements/lib/tag/tag.component.mjs +19 -0
  99. package/esm2022/http/lib/http.module.mjs +44 -0
  100. package/esm2022/http/lib/interceptors/base-url.interceptor.mjs +51 -0
  101. package/esm2022/http/lib/interceptors/error.interceptor.mjs +33 -0
  102. package/esm2022/lib/core/services/clipboard.service.mjs +71 -0
  103. package/esm2022/lib/core/services/exif.service.mjs +164 -0
  104. package/esm2022/lib/core/services/file-loader.service.mjs +88 -0
  105. package/esm2022/lib/core/services/image-converter.service.mjs +124 -0
  106. package/esm2022/lib/core/services/languages.service.mjs +75 -0
  107. package/esm2022/lib/core/services/network.service.mjs +56 -0
  108. package/esm2022/lib/core/services/patch.service.mjs +64 -0
  109. package/esm2022/localize/lib/localize.module.mjs +82 -0
  110. package/esm2022/localize/lib/localize.pipe.mjs +47 -0
  111. package/esm2022/localize/lib/localize.service.mjs +186 -0
  112. package/{esm2020 → esm2022}/localize/lib/transforms/interpolate.transform.mjs +1 -1
  113. package/{esm2020 → esm2022}/localize/lib/transforms/reference.transform.mjs +1 -1
  114. package/esm2022/localize/lib/views/localize-string/localize-string.component.mjs +89 -0
  115. package/esm2022/localize/lib/views/localize-template.directive.mjs +22 -0
  116. package/esm2022/masking/lib/directives/currency-mask.directive.mjs +36 -0
  117. package/esm2022/masking/lib/directives/date-mask.directive.mjs +36 -0
  118. package/esm2022/masking/lib/directives/input-mask.directive.mjs +119 -0
  119. package/esm2022/masking/lib/masking.module.mjs +31 -0
  120. package/esm2022/masking/lib/masking.service.mjs +104 -0
  121. package/esm2022/notifications/lib/notifications-item/notifications-item.component.mjs +101 -0
  122. package/esm2022/notifications/lib/notifications-list/notifications-list.component.mjs +48 -0
  123. package/esm2022/notifications/lib/notifications.module.mjs +31 -0
  124. package/esm2022/notifications/lib/notifications.service.mjs +142 -0
  125. package/esm2022/permissions/lib/directives/permission.directive.mjs +89 -0
  126. package/esm2022/permissions/lib/guards/permission.guard.mjs +57 -0
  127. package/esm2022/permissions/lib/permissions.module.mjs +40 -0
  128. package/esm2022/permissions/lib/permissions.service.mjs +97 -0
  129. package/esm2022/recaptcha/lib/recaptcha/recaptcha.component.mjs +220 -0
  130. package/esm2022/recaptcha/lib/recaptcha-loader.service.mjs +96 -0
  131. package/esm2022/recaptcha/lib/recaptcha.module.mjs +28 -0
  132. package/esm2022/storage/lib/storage.service.mjs +110 -0
  133. package/esm2022/table/lib/components/table/table.component.mjs +194 -0
  134. package/esm2022/table/lib/components/table-cell/table-cell.component.mjs +12 -0
  135. package/esm2022/table/lib/components/table-header-cell/table-header-cell.component.mjs +132 -0
  136. package/esm2022/table/lib/components/table-pager/table-pager.component.mjs +137 -0
  137. package/esm2022/table/lib/table.module.mjs +43 -0
  138. package/esm2022/theming/lib/theming.directive.mjs +39 -0
  139. package/esm2022/theming/lib/theming.module.mjs +17 -0
  140. package/esm2022/tooltip/lib/tooltip-container/tooltip-container.component.mjs +32 -0
  141. package/esm2022/tooltip/lib/tooltip.directive.mjs +141 -0
  142. package/esm2022/tooltip/lib/tooltip.module.mjs +32 -0
  143. package/esm2022/utils/lib/directives/autosize.directive.mjs +73 -0
  144. package/esm2022/utils/lib/directives/focus-trap.directive.mjs +78 -0
  145. package/esm2022/utils/lib/directives/focus.directive.mjs +38 -0
  146. package/esm2022/utils/lib/directives/template.directive.mjs +29 -0
  147. package/esm2022/utils/lib/functions/parse-date.function.mjs +19 -0
  148. package/esm2022/utils/lib/utils.module.mjs +36 -0
  149. package/esm2022/utils/public_api.mjs +7 -0
  150. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-auth.mjs +19 -19
  151. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-auth.mjs.map +1 -1
  152. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-collections.mjs +38 -38
  153. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-collections.mjs.map +1 -1
  154. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-controls.mjs +83 -83
  155. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-controls.mjs.map +1 -1
  156. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dashboard.mjs +37 -37
  157. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  158. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dialog.mjs +46 -46
  159. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dialog.mjs.map +1 -1
  160. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-elements.mjs +185 -185
  161. package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -0
  162. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-http.mjs +10 -10
  163. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-http.mjs.map +1 -1
  164. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-localize.mjs +20 -20
  165. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-localize.mjs.map +1 -1
  166. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-masking.mjs +20 -20
  167. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-masking.mjs.map +1 -1
  168. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-notifications.mjs +13 -13
  169. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-notifications.mjs.map +1 -1
  170. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-permissions.mjs +13 -13
  171. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-permissions.mjs.map +1 -1
  172. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-recaptcha.mjs +16 -16
  173. package/{fesm2015 → fesm2022}/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  174. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-storage.mjs +3 -3
  175. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-storage.mjs.map +1 -1
  176. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-table.mjs +34 -34
  177. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-table.mjs.map +1 -1
  178. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-theming.mjs +7 -7
  179. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-theming.mjs.map +1 -1
  180. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-tooltip.mjs +13 -13
  181. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-tooltip.mjs.map +1 -1
  182. package/{fesm2020 → fesm2022}/bravobit-bb-foundation-utils.mjs +42 -23
  183. package/fesm2022/bravobit-bb-foundation-utils.mjs.map +1 -0
  184. package/{fesm2020 → fesm2022}/bravobit-bb-foundation.mjs +21 -21
  185. package/{fesm2020 → fesm2022}/bravobit-bb-foundation.mjs.map +1 -1
  186. package/localize/lib/views/localize-string/localize-string.component.d.ts +1 -1
  187. package/localize/lib/views/localize-template.directive.d.ts +1 -1
  188. package/masking/lib/directives/currency-mask.directive.d.ts +1 -1
  189. package/masking/lib/directives/date-mask.directive.d.ts +1 -1
  190. package/masking/lib/directives/input-mask.directive.d.ts +1 -1
  191. package/notifications/lib/notifications-item/notifications-item.component.d.ts +1 -1
  192. package/package.json +70 -112
  193. package/permissions/lib/directives/permission.directive.d.ts +1 -1
  194. package/recaptcha/lib/recaptcha/recaptcha.component.d.ts +1 -1
  195. package/table/lib/components/table/table.component.d.ts +1 -1
  196. package/table/lib/components/table-header-cell/table-header-cell.component.d.ts +1 -1
  197. package/table/lib/components/table-pager/table-pager.component.d.ts +1 -1
  198. package/theming/lib/theming.directive.d.ts +1 -1
  199. package/tooltip/lib/tooltip.directive.d.ts +1 -1
  200. package/utils/lib/directives/autosize.directive.d.ts +1 -1
  201. package/utils/lib/directives/template.directive.d.ts +1 -1
  202. package/utils/lib/functions/parse-date.function.d.ts +1 -0
  203. package/utils/public_api.d.ts +1 -0
  204. package/esm2020/auth/lib/auth.interceptor.mjs +0 -90
  205. package/esm2020/auth/lib/auth.module.mjs +0 -35
  206. package/esm2020/auth/lib/auth.service.mjs +0 -270
  207. package/esm2020/auth/lib/directives/authenticated.directive.mjs +0 -42
  208. package/esm2020/auth/lib/guards/anonymous.guard.mjs +0 -53
  209. package/esm2020/auth/lib/guards/authenticated.guard.mjs +0 -56
  210. package/esm2020/collections/lib/collections.module.mjs +0 -54
  211. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +0 -123
  212. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +0 -31
  213. package/esm2020/collections/lib/components/collections.directive.mjs +0 -43
  214. package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +0 -178
  215. package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +0 -68
  216. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +0 -20
  217. package/esm2020/controls/lib/control-error/control-error/control-error.component.mjs +0 -63
  218. package/esm2020/controls/lib/control-error/control-error-submit.directive.mjs +0 -47
  219. package/esm2020/controls/lib/control-error/control-error.module.mjs +0 -19
  220. package/esm2020/controls/lib/controls.module.mjs +0 -62
  221. package/esm2020/controls/lib/form-control/form-control/form-control.component.mjs +0 -79
  222. package/esm2020/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +0 -22
  223. package/esm2020/controls/lib/form-control/form-control-input.directive.mjs +0 -124
  224. package/esm2020/controls/lib/form-control/form-control.module.mjs +0 -34
  225. package/esm2020/controls/lib/radio/radio-button/radio-button.component.mjs +0 -75
  226. package/esm2020/controls/lib/radio/radio-group/radio-group.component.mjs +0 -168
  227. package/esm2020/controls/lib/radio/radio.module.mjs +0 -21
  228. package/esm2020/controls/lib/toggle/toggle/toggle.component.mjs +0 -153
  229. package/esm2020/controls/lib/toggle/toggle-group/toggle-group.component.mjs +0 -62
  230. package/esm2020/controls/lib/toggle/toggle.module.mjs +0 -20
  231. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +0 -57
  232. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +0 -31
  233. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +0 -29
  234. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +0 -75
  235. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +0 -99
  236. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +0 -62
  237. package/esm2020/dashboard/lib/dashboard.module.mjs +0 -47
  238. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +0 -12
  239. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +0 -46
  240. package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +0 -77
  241. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +0 -18
  242. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +0 -11
  243. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +0 -67
  244. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +0 -79
  245. package/esm2020/dialog/lib/dialog.insertion.mjs +0 -16
  246. package/esm2020/dialog/lib/dialog.module.mjs +0 -68
  247. package/esm2020/dialog/lib/dialog.service.mjs +0 -68
  248. package/esm2020/elements/lib/avatar/avatar.component.mjs +0 -149
  249. package/esm2020/elements/lib/button/button.component.mjs +0 -61
  250. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +0 -73
  251. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +0 -307
  252. package/esm2020/elements/lib/directives/addon.directive.mjs +0 -29
  253. package/esm2020/elements/lib/directives/form-submit.directive.mjs +0 -50
  254. package/esm2020/elements/lib/directives/form-submitter.directive.mjs +0 -25
  255. package/esm2020/elements/lib/directives/input.directive.mjs +0 -136
  256. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +0 -100
  257. package/esm2020/elements/lib/elements.module.mjs +0 -177
  258. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +0 -236
  259. package/esm2020/elements/lib/form-control/form-control.component.mjs +0 -49
  260. package/esm2020/elements/lib/form-error/form-error.component.mjs +0 -123
  261. package/esm2020/elements/lib/form-group/form-group.component.mjs +0 -18
  262. package/esm2020/elements/lib/icon/icon.component.mjs +0 -102
  263. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +0 -106
  264. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +0 -43
  265. package/esm2020/elements/lib/pipes/file-size.pipe.mjs +0 -28
  266. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +0 -96
  267. package/esm2020/elements/lib/spinner/spinner.component.mjs +0 -25
  268. package/esm2020/elements/lib/tag/tag.component.mjs +0 -18
  269. package/esm2020/http/lib/http.module.mjs +0 -43
  270. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +0 -50
  271. package/esm2020/http/lib/interceptors/error.interceptor.mjs +0 -32
  272. package/esm2020/lib/core/services/clipboard.service.mjs +0 -70
  273. package/esm2020/lib/core/services/exif.service.mjs +0 -163
  274. package/esm2020/lib/core/services/file-loader.service.mjs +0 -87
  275. package/esm2020/lib/core/services/image-converter.service.mjs +0 -123
  276. package/esm2020/lib/core/services/languages.service.mjs +0 -74
  277. package/esm2020/lib/core/services/network.service.mjs +0 -55
  278. package/esm2020/lib/core/services/patch.service.mjs +0 -63
  279. package/esm2020/localize/lib/localize.module.mjs +0 -81
  280. package/esm2020/localize/lib/localize.pipe.mjs +0 -46
  281. package/esm2020/localize/lib/localize.service.mjs +0 -185
  282. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +0 -88
  283. package/esm2020/localize/lib/views/localize-template.directive.mjs +0 -21
  284. package/esm2020/masking/lib/directives/currency-mask.directive.mjs +0 -35
  285. package/esm2020/masking/lib/directives/date-mask.directive.mjs +0 -35
  286. package/esm2020/masking/lib/directives/input-mask.directive.mjs +0 -118
  287. package/esm2020/masking/lib/masking.module.mjs +0 -30
  288. package/esm2020/masking/lib/masking.service.mjs +0 -103
  289. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +0 -100
  290. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +0 -47
  291. package/esm2020/notifications/lib/notifications.module.mjs +0 -30
  292. package/esm2020/notifications/lib/notifications.service.mjs +0 -141
  293. package/esm2020/permissions/lib/directives/permission.directive.mjs +0 -88
  294. package/esm2020/permissions/lib/guards/permission.guard.mjs +0 -56
  295. package/esm2020/permissions/lib/permissions.module.mjs +0 -39
  296. package/esm2020/permissions/lib/permissions.service.mjs +0 -96
  297. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +0 -219
  298. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +0 -95
  299. package/esm2020/recaptcha/lib/recaptcha.module.mjs +0 -27
  300. package/esm2020/storage/lib/storage.service.mjs +0 -109
  301. package/esm2020/table/lib/components/table/table.component.mjs +0 -191
  302. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +0 -11
  303. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +0 -131
  304. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +0 -136
  305. package/esm2020/table/lib/table.module.mjs +0 -42
  306. package/esm2020/theming/lib/theming.directive.mjs +0 -38
  307. package/esm2020/theming/lib/theming.module.mjs +0 -16
  308. package/esm2020/tooltip/lib/tooltip-container/tooltip-container.component.mjs +0 -31
  309. package/esm2020/tooltip/lib/tooltip.directive.mjs +0 -140
  310. package/esm2020/tooltip/lib/tooltip.module.mjs +0 -31
  311. package/esm2020/utils/lib/directives/autosize.directive.mjs +0 -72
  312. package/esm2020/utils/lib/directives/focus-trap.directive.mjs +0 -77
  313. package/esm2020/utils/lib/directives/focus.directive.mjs +0 -37
  314. package/esm2020/utils/lib/directives/template.directive.mjs +0 -28
  315. package/esm2020/utils/lib/utils.module.mjs +0 -35
  316. package/esm2020/utils/public_api.mjs +0 -6
  317. package/fesm2015/bravobit-bb-foundation-auth.mjs +0 -851
  318. package/fesm2015/bravobit-bb-foundation-auth.mjs.map +0 -1
  319. package/fesm2015/bravobit-bb-foundation-collections.mjs +0 -474
  320. package/fesm2015/bravobit-bb-foundation-collections.mjs.map +0 -1
  321. package/fesm2015/bravobit-bb-foundation-controls.mjs +0 -1217
  322. package/fesm2015/bravobit-bb-foundation-controls.mjs.map +0 -1
  323. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +0 -417
  324. package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +0 -1
  325. package/fesm2015/bravobit-bb-foundation-dialog.mjs +0 -512
  326. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +0 -1
  327. package/fesm2015/bravobit-bb-foundation-elements.mjs +0 -1883
  328. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +0 -1
  329. package/fesm2015/bravobit-bb-foundation-http.mjs +0 -176
  330. package/fesm2015/bravobit-bb-foundation-http.mjs.map +0 -1
  331. package/fesm2015/bravobit-bb-foundation-localize.mjs +0 -835
  332. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +0 -1
  333. package/fesm2015/bravobit-bb-foundation-masking.mjs +0 -334
  334. package/fesm2015/bravobit-bb-foundation-masking.mjs.map +0 -1
  335. package/fesm2015/bravobit-bb-foundation-notifications.mjs +0 -357
  336. package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +0 -1
  337. package/fesm2015/bravobit-bb-foundation-permissions.mjs +0 -310
  338. package/fesm2015/bravobit-bb-foundation-permissions.mjs.map +0 -1
  339. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +0 -349
  340. package/fesm2015/bravobit-bb-foundation-rxjs.mjs +0 -22
  341. package/fesm2015/bravobit-bb-foundation-rxjs.mjs.map +0 -1
  342. package/fesm2015/bravobit-bb-foundation-storage.mjs +0 -418
  343. package/fesm2015/bravobit-bb-foundation-storage.mjs.map +0 -1
  344. package/fesm2015/bravobit-bb-foundation-table.mjs +0 -613
  345. package/fesm2015/bravobit-bb-foundation-table.mjs.map +0 -1
  346. package/fesm2015/bravobit-bb-foundation-theming.mjs +0 -382
  347. package/fesm2015/bravobit-bb-foundation-theming.mjs.map +0 -1
  348. package/fesm2015/bravobit-bb-foundation-tooltip.mjs +0 -210
  349. package/fesm2015/bravobit-bb-foundation-tooltip.mjs.map +0 -1
  350. package/fesm2015/bravobit-bb-foundation-utils.mjs +0 -246
  351. package/fesm2015/bravobit-bb-foundation-utils.mjs.map +0 -1
  352. package/fesm2015/bravobit-bb-foundation.mjs +0 -929
  353. package/fesm2015/bravobit-bb-foundation.mjs.map +0 -1
  354. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +0 -1
  355. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +0 -1
  356. package/fesm2020/bravobit-bb-foundation-utils.mjs.map +0 -1
  357. /package/{esm2020 → esm2022}/auth/bravobit-bb-foundation-auth.mjs +0 -0
  358. /package/{esm2020 → esm2022}/auth/lib/auth.session.mjs +0 -0
  359. /package/{esm2020 → esm2022}/auth/lib/directives/abstract.directive.mjs +0 -0
  360. /package/{esm2020 → esm2022}/auth/lib/helpers/jwt.helper.mjs +0 -0
  361. /package/{esm2020 → esm2022}/auth/lib/interfaces/config.interface.mjs +0 -0
  362. /package/{esm2020 → esm2022}/auth/lib/interfaces/provider.interface.mjs +0 -0
  363. /package/{esm2020 → esm2022}/auth/lib/interfaces/token.interface.mjs +0 -0
  364. /package/{esm2020 → esm2022}/auth/lib/providers/email.provider.mjs +0 -0
  365. /package/{esm2020 → esm2022}/auth/lib/providers/verify.provider.mjs +0 -0
  366. /package/{esm2020 → esm2022}/auth/lib/tokens/use-authorization.token.mjs +0 -0
  367. /package/{esm2020 → esm2022}/auth/public_api.mjs +0 -0
  368. /package/{esm2020 → esm2022}/bravobit-bb-foundation.mjs +0 -0
  369. /package/{esm2020 → esm2022}/collections/bravobit-bb-foundation-collections.mjs +0 -0
  370. /package/{esm2020 → esm2022}/collections/lib/collection.mjs +0 -0
  371. /package/{esm2020 → esm2022}/collections/lib/interfaces/collection.interface.mjs +0 -0
  372. /package/{esm2020 → esm2022}/collections/lib/providers/api-collection.provider.mjs +0 -0
  373. /package/{esm2020 → esm2022}/collections/lib/providers/collection.provider.mjs +0 -0
  374. /package/{esm2020 → esm2022}/collections/lib/providers/local-collection.provider.mjs +0 -0
  375. /package/{esm2020 → esm2022}/collections/public_api.mjs +0 -0
  376. /package/{esm2020 → esm2022}/controls/bravobit-bb-foundation-controls.mjs +0 -0
  377. /package/{esm2020 → esm2022}/controls/lib/control-error/control-error/control-error.animation.mjs +0 -0
  378. /package/{esm2020 → esm2022}/controls/lib/control-error/control-error.defaults.mjs +0 -0
  379. /package/{esm2020 → esm2022}/controls/lib/control-error/control-error.interface.mjs +0 -0
  380. /package/{esm2020 → esm2022}/controls/lib/control-error/control-error.utils.mjs +0 -0
  381. /package/{esm2020 → esm2022}/controls/lib/controls.interfaces.mjs +0 -0
  382. /package/{esm2020 → esm2022}/controls/public_api.mjs +0 -0
  383. /package/{esm2020 → esm2022}/dashboard/bravobit-bb-foundation-dashboard.mjs +0 -0
  384. /package/{esm2020 → esm2022}/dashboard/public_api.mjs +0 -0
  385. /package/{esm2020 → esm2022}/dialog/bravobit-bb-foundation-dialog.mjs +0 -0
  386. /package/{esm2020 → esm2022}/dialog/lib/dialog-container/dialog-container.animations.mjs +0 -0
  387. /package/{esm2020 → esm2022}/dialog/lib/dialog-overlay/dialog-overlay.animations.mjs +0 -0
  388. /package/{esm2020 → esm2022}/dialog/lib/dialog.interfaces.mjs +0 -0
  389. /package/{esm2020 → esm2022}/dialog/lib/dialog.ref.mjs +0 -0
  390. /package/{esm2020 → esm2022}/dialog/public_api.mjs +0 -0
  391. /package/{esm2020 → esm2022}/elements/bravobit-bb-foundation-elements.mjs +0 -0
  392. /package/{esm2020 → esm2022}/elements/lib/elements.interfaces.mjs +0 -0
  393. /package/{esm2020 → esm2022}/elements/public_api.mjs +0 -0
  394. /package/{esm2020 → esm2022}/http/bravobit-bb-foundation-http.mjs +0 -0
  395. /package/{esm2020 → esm2022}/http/lib/classes/http.config.mjs +0 -0
  396. /package/{esm2020 → esm2022}/http/lib/classes/http.error.mjs +0 -0
  397. /package/{esm2020 → esm2022}/http/lib/http.interfaces.mjs +0 -0
  398. /package/{esm2020 → esm2022}/http/public_api.mjs +0 -0
  399. /package/{esm2020 → esm2022}/lib/core/functions/date.utils.mjs +0 -0
  400. /package/{esm2020 → esm2022}/lib/core/functions/password.utils.mjs +0 -0
  401. /package/{esm2020 → esm2022}/lib/core/miscellaneous/regex.mjs +0 -0
  402. /package/{esm2020 → esm2022}/lib/core/miscellaneous/validator.mjs +0 -0
  403. /package/{esm2020 → esm2022}/lib/core/mixins/can-disable.mjs +0 -0
  404. /package/{esm2020 → esm2022}/lib/core/mixins/can-hide-errors.mjs +0 -0
  405. /package/{esm2020 → esm2022}/lib/core/mixins/can-load.mjs +0 -0
  406. /package/{esm2020 → esm2022}/lib/core/mixins/constructor.mjs +0 -0
  407. /package/{esm2020 → esm2022}/lib/core/mixins/has-error.mjs +0 -0
  408. /package/{esm2020 → esm2022}/lib/core/mixins/is-focused.mjs +0 -0
  409. /package/{esm2020 → esm2022}/lib/core/mixins/is-grouped.mjs +0 -0
  410. /package/{esm2020 → esm2022}/lib/core/mixins/is-readonly.mjs +0 -0
  411. /package/{esm2020 → esm2022}/lib/core/mixins/is-required.mjs +0 -0
  412. /package/{esm2020 → esm2022}/lib/core/tokens/accept-language.token.mjs +0 -0
  413. /package/{esm2020 → esm2022}/lib/core/tokens/base-url.token.mjs +0 -0
  414. /package/{esm2020 → esm2022}/lib/core/tokens/cookie.token.mjs +0 -0
  415. /package/{esm2020 → esm2022}/lib/core/tokens/location.token.mjs +0 -0
  416. /package/{esm2020 → esm2022}/lib/core/tokens/navigator.token.mjs +0 -0
  417. /package/{esm2020 → esm2022}/lib/core/tokens/window.token.mjs +0 -0
  418. /package/{esm2020 → esm2022}/localize/bravobit-bb-foundation-localize.mjs +0 -0
  419. /package/{esm2020 → esm2022}/localize/lib/dictionary/dictionary.class.mjs +0 -0
  420. /package/{esm2020 → esm2022}/localize/lib/dictionary/dictionary.context.mjs +0 -0
  421. /package/{esm2020 → esm2022}/localize/lib/dictionary/dictionary.data.mjs +0 -0
  422. /package/{esm2020 → esm2022}/localize/lib/functions/date.function.mjs +0 -0
  423. /package/{esm2020 → esm2022}/localize/lib/functions/lowercase.function.mjs +0 -0
  424. /package/{esm2020 → esm2022}/localize/lib/functions/uppercase.function.mjs +0 -0
  425. /package/{esm2020 → esm2022}/localize/lib/handlers/missing.handler.mjs +0 -0
  426. /package/{esm2020 → esm2022}/localize/lib/interfaces/config.interfaces.mjs +0 -0
  427. /package/{esm2020 → esm2022}/localize/lib/interfaces/functions.interfaces.mjs +0 -0
  428. /package/{esm2020 → esm2022}/localize/lib/interfaces/handlers.interfaces.mjs +0 -0
  429. /package/{esm2020 → esm2022}/localize/lib/interfaces/options.interfaces.mjs +0 -0
  430. /package/{esm2020 → esm2022}/localize/lib/interfaces/transforms.interfaces.mjs +0 -0
  431. /package/{esm2020 → esm2022}/localize/lib/locale.token.mjs +0 -0
  432. /package/{esm2020 → esm2022}/localize/lib/localizations/dutch.localization.mjs +0 -0
  433. /package/{esm2020 → esm2022}/localize/lib/localizations/english.localization.mjs +0 -0
  434. /package/{esm2020 → esm2022}/localize/lib/transforms/abstract.transform.mjs +0 -0
  435. /package/{esm2020 → esm2022}/localize/public_api.mjs +0 -0
  436. /package/{esm2020 → esm2022}/masking/bravobit-bb-foundation-masking.mjs +0 -0
  437. /package/{esm2020 → esm2022}/masking/lib/input-mask.interface.mjs +0 -0
  438. /package/{esm2020 → esm2022}/masking/public_api.mjs +0 -0
  439. /package/{esm2020 → esm2022}/notifications/bravobit-bb-foundation-notifications.mjs +0 -0
  440. /package/{esm2020 → esm2022}/notifications/lib/notifications.animations.mjs +0 -0
  441. /package/{esm2020 → esm2022}/notifications/lib/notifications.interfaces.mjs +0 -0
  442. /package/{esm2020 → esm2022}/notifications/public_api.mjs +0 -0
  443. /package/{esm2020 → esm2022}/permissions/bravobit-bb-foundation-permissions.mjs +0 -0
  444. /package/{esm2020 → esm2022}/permissions/lib/handlers/abstract.handler.mjs +0 -0
  445. /package/{esm2020 → esm2022}/permissions/lib/handlers/local.handler.mjs +0 -0
  446. /package/{esm2020 → esm2022}/permissions/lib/permissions.interface.mjs +0 -0
  447. /package/{esm2020 → esm2022}/permissions/public_api.mjs +0 -0
  448. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  449. /package/{esm2020 → esm2022}/recaptcha/bravobit-bb-foundation-recaptcha.mjs +0 -0
  450. /package/{esm2020 → esm2022}/recaptcha/lib/recaptcha.interface.mjs +0 -0
  451. /package/{esm2020 → esm2022}/recaptcha/public_api.mjs +0 -0
  452. /package/{esm2020 → esm2022}/rxjs/bravobit-bb-foundation-rxjs.mjs +0 -0
  453. /package/{esm2020 → esm2022}/rxjs/lib/observables/get-control-value.observable.mjs +0 -0
  454. /package/{esm2020 → esm2022}/rxjs/lib/operators/combine-latest-map.operator.mjs +0 -0
  455. /package/{esm2020 → esm2022}/rxjs/lib/operators/filter-nil.operator.mjs +0 -0
  456. /package/{esm2020 → esm2022}/rxjs/public_api.mjs +0 -0
  457. /package/{esm2020 → esm2022}/storage/bravobit-bb-foundation-storage.mjs +0 -0
  458. /package/{esm2020 → esm2022}/storage/lib/interfaces/attributes.interface.mjs +0 -0
  459. /package/{esm2020 → esm2022}/storage/lib/interfaces/memory.interface.mjs +0 -0
  460. /package/{esm2020 → esm2022}/storage/lib/interfaces/strategy.interface.mjs +0 -0
  461. /package/{esm2020 → esm2022}/storage/lib/strategies/cookie-storage.strategy.mjs +0 -0
  462. /package/{esm2020 → esm2022}/storage/lib/strategies/memory-storage.strategy.mjs +0 -0
  463. /package/{esm2020 → esm2022}/storage/lib/strategies/polyfill-storage.strategy.mjs +0 -0
  464. /package/{esm2020 → esm2022}/storage/public_api.mjs +0 -0
  465. /package/{esm2020 → esm2022}/table/bravobit-bb-foundation-table.mjs +0 -0
  466. /package/{esm2020 → esm2022}/table/lib/data/datasource.data.mjs +0 -0
  467. /package/{esm2020 → esm2022}/table/lib/data/generic.data.mjs +0 -0
  468. /package/{esm2020 → esm2022}/table/lib/interfaces/datasource.interface.mjs +0 -0
  469. /package/{esm2020 → esm2022}/table/lib/interfaces/table.interfaces.mjs +0 -0
  470. /package/{esm2020 → esm2022}/table/public_api.mjs +0 -0
  471. /package/{esm2020 → esm2022}/theming/bravobit-bb-foundation-theming.mjs +0 -0
  472. /package/{esm2020 → esm2022}/theming/lib/themes/checkbox-group.theme.mjs +0 -0
  473. /package/{esm2020 → esm2022}/theming/lib/themes/checkbox.theme.mjs +0 -0
  474. /package/{esm2020 → esm2022}/theming/lib/themes/control-error.theme.mjs +0 -0
  475. /package/{esm2020 → esm2022}/theming/lib/themes/form-control-addon.theme.mjs +0 -0
  476. /package/{esm2020 → esm2022}/theming/lib/themes/form-control.theme.mjs +0 -0
  477. /package/{esm2020 → esm2022}/theming/lib/themes/radio-button.theme.mjs +0 -0
  478. /package/{esm2020 → esm2022}/theming/lib/themes/radio-group.theme.mjs +0 -0
  479. /package/{esm2020 → esm2022}/theming/lib/themes/toggle-group.theme.mjs +0 -0
  480. /package/{esm2020 → esm2022}/theming/lib/themes/toggle.theme.mjs +0 -0
  481. /package/{esm2020 → esm2022}/theming/lib/theming.data.mjs +0 -0
  482. /package/{esm2020 → esm2022}/theming/lib/theming.interface.mjs +0 -0
  483. /package/{esm2020 → esm2022}/theming/lib/utils/theming.variable.mjs +0 -0
  484. /package/{esm2020 → esm2022}/theming/public_api.mjs +0 -0
  485. /package/{esm2020 → esm2022}/tooltip/bravobit-bb-foundation-tooltip.mjs +0 -0
  486. /package/{esm2020 → esm2022}/tooltip/lib/tooltip.interfaces.mjs +0 -0
  487. /package/{esm2020 → esm2022}/tooltip/public_api.mjs +0 -0
  488. /package/{esm2020 → esm2022}/utils/bravobit-bb-foundation-utils.mjs +0 -0
  489. /package/{fesm2020 → fesm2022}/bravobit-bb-foundation-rxjs.mjs +0 -0
  490. /package/{fesm2020 → fesm2022}/bravobit-bb-foundation-rxjs.mjs.map +0 -0
@@ -0,0 +1,101 @@
1
+ import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/cdk/platform";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@bravobit/bb-foundation/localize";
6
+ class BbNotificationsItem {
7
+ get getClass() {
8
+ return `bb-notifications-item ${this.notification.type}`;
9
+ }
10
+ constructor(_zone, _platform, _changeDetection) {
11
+ this._zone = _zone;
12
+ this._platform = _platform;
13
+ this._changeDetection = _changeDetection;
14
+ // Data.
15
+ this._progress = 0;
16
+ this._count = 0;
17
+ // Data.
18
+ this._radius = 19;
19
+ this._circumference = this._radius * 2 * Math.PI;
20
+ this.callActionAndDestroy = (notification, action) => {
21
+ // Perform the callback (if it exists).
22
+ action && action.callback && action.callback();
23
+ // Call the destroy method (if it exists).
24
+ notification && notification.destroy && notification.destroy();
25
+ };
26
+ this.instance = () => {
27
+ // Calculate the difference.
28
+ this._difference = (Date.now() - this._startTime) - (this._count * this._speed);
29
+ // Add up the count.
30
+ if (this._count++ === this._steps) {
31
+ this.notification.destroy();
32
+ }
33
+ // Add the steps to the progress.
34
+ this._progress += 100 / this._steps;
35
+ // Set a new timer.
36
+ this._timer = this.setTimeout(this.instance, this._speed - this._difference);
37
+ // Run a new change detection cycle.
38
+ this._zone.run(() => this._changeDetection.detectChanges());
39
+ };
40
+ this.setTimeout = (method, timeout) => {
41
+ // Check if the window and method exist.
42
+ if (!window || !window.setTimeout) {
43
+ return null;
44
+ }
45
+ return window.setTimeout(method, timeout);
46
+ };
47
+ }
48
+ get progressStrokeArray() {
49
+ const value = Math.floor(this._circumference);
50
+ return `${value}, ${value}`;
51
+ }
52
+ get progressStrokeOffset() {
53
+ return Math.floor(this._circumference - this._progress / 100 * this._circumference);
54
+ }
55
+ get isContentString() {
56
+ return typeof this.notification.content === 'string';
57
+ }
58
+ ngOnInit() {
59
+ // Check if the notification timeout is not 0 and the platform is a browser.
60
+ if (this.notification.timeout <= 0 || !this._platform.isBrowser) {
61
+ this.notification.dismiss = true;
62
+ return;
63
+ }
64
+ // Start the timeout.
65
+ this.startTimeout();
66
+ }
67
+ ngOnDestroy() {
68
+ // Clear the timeout if it was set.
69
+ this._timer && window && window.clearTimeout && window.clearTimeout(this._timer);
70
+ }
71
+ startTimeout() {
72
+ // Calculate the steps of the timeout.
73
+ this._steps = this.notification.timeout / 10;
74
+ // Calculate the speed of the timeout.
75
+ this._speed = this.notification.timeout / this._steps;
76
+ // Get the start time.
77
+ this._startTime = Date.now();
78
+ // Set a new timer outside of Angular.
79
+ this._zone.runOutsideAngular(() => this._timer = this.setTimeout(this.instance, this._speed));
80
+ }
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BbNotificationsItem, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
82
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: BbNotificationsItem, selector: "bb-notifications-item", inputs: { notification: "notification", dismissButtonText: "dismissButtonText" }, host: { attributes: { "role": "alert" }, properties: { "class": "this.getClass" } }, viewQueries: [{ propertyName: "progressElementRef", first: true, predicate: ["progress"], descendants: true }], ngImport: i0, template: "<div class=\"notification-content-wrapper\">\n <!--\n The icon for the notification.\n\n The icon is reflected by the type of the\n notification. Same goes for the color and\n background-color.\n -->\n <div [style.color]=\"notification?.color\"\n [style.background-color]=\"notification?.backgroundColor\"\n class=\"notification-icon-wrapper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 19.5\"\n class=\"notification-icon\">\n <path\n d=\"M8 19.5c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zM14 13.5v-5c0-3.1-1.6-5.6-4.5-6.3v-.7C9.5.7 8.8 0 8 0S6.5.7 6.5 1.5v.7C3.6 2.9 2 5.4 2 8.5v5l-2 2v1h16v-1l-2-2z\">\n </path>\n </svg>\n\n <!--\n The circular progress for the notification.\n\n The progress is only visible when a timeout is\n set. The progress adapts to the time remaining\n for the notification.\n -->\n <svg *ngIf=\"notification?.timeout > 0\"\n class=\"notification-progress-ring\"\n viewBox=\"0 0 40 40\"\n role=\"progressbar\">\n <circle #progress\n [attr.stroke-dasharray]=\"progressStrokeArray\"\n [attr.stroke-dashoffset]=\"progressStrokeOffset\"\n [style.stroke]=\"notification?.color\"\n class=\"notification-progress-circle\"\n stroke-width=\"2\"\n fill=\"transparent\"\n r=\"19\"\n cx=\"20\"\n cy=\"20\">\n </circle>\n </svg>\n </div>\n\n <!--\n The content for the notification.\n\n This displays a string or a template based\n on the given parameter by the user.\n -->\n <div class=\"notification-content\">\n <ng-container *ngIf=\"isContentString; else templateContent\"\n [ngSwitch]=\"notification?.localize\">\n <ng-container *ngSwitchCase=\"true\">\n {{ $any(notification?.content) | bbLocalize:{data: notification?.data} }}\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{ notification?.content }}\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<!--\n The actions of the notification.\n\n All actions are displayed here and are\n based on the actions array the user provided.\n-->\n<div *ngIf=\"notification?.actions?.length > 0 || notification?.dismiss\"\n class=\"notification-actions\">\n <button *ngFor=\"let action of notification?.actions\"\n (click)=\"callActionAndDestroy(notification, action)\"\n type=\"button\"\n [class.destructive]=\"action?.type === 'cancel'\"\n class=\"notification-actions-button\">\n <span [ngSwitch]=\"notification?.localize\"\n class=\"notification-actions-button-highlight\">\n <ng-container *ngSwitchCase=\"true\">\n {{ action?.title | bbLocalize:{data: notification?.data} }}\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{ action?.title }}\n </ng-container>\n </span>\n </button>\n <button *ngIf=\"notification?.dismiss\"\n (click)=\"notification?.destroy()\"\n class=\"notification-actions-button destructive\"\n type=\"button\">\n <span class=\"notification-actions-button-highlight\">\n {{ notification?.dismissText || dismissButtonText }}\n </span>\n </button>\n</div>\n\n<!--\n The outlet for the notification content template ref.\n-->\n<ng-template #templateContent>\n <ng-container *ngTemplateOutlet=\"$any(notification?.content)\"></ng-container>\n</ng-template>\n", styles: [".bb-notifications-item{display:flex;border-radius:4px;flex-direction:column;background-color:#fff;border:1px solid #d6dbe0}.bb-notifications-item.success .notification-icon-wrapper{color:#2dc05d;background-color:#ebfaf0}.bb-notifications-item.success .notification-progress-circle{stroke:#36d068}.bb-notifications-item.error .notification-icon-wrapper{color:#f43e3e;background-color:#feeeee}.bb-notifications-item.error .notification-progress-circle{stroke:#f55656}.bb-notifications-item.warning .notification-icon-wrapper{color:#f1ae00;background-color:#fff8e7}.bb-notifications-item.warning .notification-progress-circle{stroke:#ffbc0b}.bb-notifications-item.info .notification-icon-wrapper{color:#099bf6;background-color:#e9f6fe}.bb-notifications-item.info .notification-progress-circle{stroke:#22a5f7}.bb-notifications-item.custom .notification-icon-wrapper{color:#657385;background-color:#f3f5f6}.bb-notifications-item.custom .notification-progress-circle{stroke:#657385}.notification-content-wrapper{padding:20px;display:flex;align-items:center}.notification-icon-wrapper{width:40px;height:40px;display:flex;-webkit-user-select:none;user-select:none;position:relative;border-radius:50%;align-items:center;justify-content:center;color:#657385;background-color:#f3f5f6}.notification-icon{width:100%;height:100%;padding:10px;fill:currentColor}.notification-content{flex:1;font-size:14px;line-height:1.5;font-weight:500;margin-left:20px;color:#000000d9}.notification-content i{font-style:italic}.notification-content,.notification-actions-button{font-family:inherit}.notification-actions{display:flex;margin:0 20px;-webkit-user-select:none;user-select:none;border-top:1px solid #f3f5f6}.notification-actions-button{flex:1;border:none;color:#22a5f7;cursor:pointer;font-size:14px;font-weight:500;padding:12px 2px;text-align:center;background-color:transparent}.notification-actions-button:hover>.notification-actions-button-highlight,.notification-actions-button:focus>.notification-actions-button-highlight{background-color:#22a5f71a}.notification-actions-button:active>.notification-actions-button-highlight{background-color:#22a5f733}.notification-actions-button.destructive{color:#f55656}.notification-actions-button.destructive:hover>.notification-actions-button-highlight,.notification-actions-button.destructive:focus>.notification-actions-button-highlight{background-color:#f556561a}.notification-actions-button.destructive:active>.notification-actions-button-highlight{background-color:#f5565633}.notification-actions-button-highlight{padding:4px 12px;border-radius:12px;display:inline-flex;transition:background-color .15s cubic-bezier(0,0,.2,1)}.notification-progress-ring{inset:0;width:100%;height:100%;position:absolute}.notification-progress-circle{transform:rotate(-90deg);transform-origin:50% 50%;stroke:#657385}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i3.BbLocalize, name: "bbLocalize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
83
+ }
84
+ export { BbNotificationsItem };
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BbNotificationsItem, decorators: [{
86
+ type: Component,
87
+ args: [{ selector: 'bb-notifications-item', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, preserveWhitespaces: false, host: {
88
+ 'role': 'alert'
89
+ }, template: "<div class=\"notification-content-wrapper\">\n <!--\n The icon for the notification.\n\n The icon is reflected by the type of the\n notification. Same goes for the color and\n background-color.\n -->\n <div [style.color]=\"notification?.color\"\n [style.background-color]=\"notification?.backgroundColor\"\n class=\"notification-icon-wrapper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 19.5\"\n class=\"notification-icon\">\n <path\n d=\"M8 19.5c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zM14 13.5v-5c0-3.1-1.6-5.6-4.5-6.3v-.7C9.5.7 8.8 0 8 0S6.5.7 6.5 1.5v.7C3.6 2.9 2 5.4 2 8.5v5l-2 2v1h16v-1l-2-2z\">\n </path>\n </svg>\n\n <!--\n The circular progress for the notification.\n\n The progress is only visible when a timeout is\n set. The progress adapts to the time remaining\n for the notification.\n -->\n <svg *ngIf=\"notification?.timeout > 0\"\n class=\"notification-progress-ring\"\n viewBox=\"0 0 40 40\"\n role=\"progressbar\">\n <circle #progress\n [attr.stroke-dasharray]=\"progressStrokeArray\"\n [attr.stroke-dashoffset]=\"progressStrokeOffset\"\n [style.stroke]=\"notification?.color\"\n class=\"notification-progress-circle\"\n stroke-width=\"2\"\n fill=\"transparent\"\n r=\"19\"\n cx=\"20\"\n cy=\"20\">\n </circle>\n </svg>\n </div>\n\n <!--\n The content for the notification.\n\n This displays a string or a template based\n on the given parameter by the user.\n -->\n <div class=\"notification-content\">\n <ng-container *ngIf=\"isContentString; else templateContent\"\n [ngSwitch]=\"notification?.localize\">\n <ng-container *ngSwitchCase=\"true\">\n {{ $any(notification?.content) | bbLocalize:{data: notification?.data} }}\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{ notification?.content }}\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<!--\n The actions of the notification.\n\n All actions are displayed here and are\n based on the actions array the user provided.\n-->\n<div *ngIf=\"notification?.actions?.length > 0 || notification?.dismiss\"\n class=\"notification-actions\">\n <button *ngFor=\"let action of notification?.actions\"\n (click)=\"callActionAndDestroy(notification, action)\"\n type=\"button\"\n [class.destructive]=\"action?.type === 'cancel'\"\n class=\"notification-actions-button\">\n <span [ngSwitch]=\"notification?.localize\"\n class=\"notification-actions-button-highlight\">\n <ng-container *ngSwitchCase=\"true\">\n {{ action?.title | bbLocalize:{data: notification?.data} }}\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{ action?.title }}\n </ng-container>\n </span>\n </button>\n <button *ngIf=\"notification?.dismiss\"\n (click)=\"notification?.destroy()\"\n class=\"notification-actions-button destructive\"\n type=\"button\">\n <span class=\"notification-actions-button-highlight\">\n {{ notification?.dismissText || dismissButtonText }}\n </span>\n </button>\n</div>\n\n<!--\n The outlet for the notification content template ref.\n-->\n<ng-template #templateContent>\n <ng-container *ngTemplateOutlet=\"$any(notification?.content)\"></ng-container>\n</ng-template>\n", styles: [".bb-notifications-item{display:flex;border-radius:4px;flex-direction:column;background-color:#fff;border:1px solid #d6dbe0}.bb-notifications-item.success .notification-icon-wrapper{color:#2dc05d;background-color:#ebfaf0}.bb-notifications-item.success .notification-progress-circle{stroke:#36d068}.bb-notifications-item.error .notification-icon-wrapper{color:#f43e3e;background-color:#feeeee}.bb-notifications-item.error .notification-progress-circle{stroke:#f55656}.bb-notifications-item.warning .notification-icon-wrapper{color:#f1ae00;background-color:#fff8e7}.bb-notifications-item.warning .notification-progress-circle{stroke:#ffbc0b}.bb-notifications-item.info .notification-icon-wrapper{color:#099bf6;background-color:#e9f6fe}.bb-notifications-item.info .notification-progress-circle{stroke:#22a5f7}.bb-notifications-item.custom .notification-icon-wrapper{color:#657385;background-color:#f3f5f6}.bb-notifications-item.custom .notification-progress-circle{stroke:#657385}.notification-content-wrapper{padding:20px;display:flex;align-items:center}.notification-icon-wrapper{width:40px;height:40px;display:flex;-webkit-user-select:none;user-select:none;position:relative;border-radius:50%;align-items:center;justify-content:center;color:#657385;background-color:#f3f5f6}.notification-icon{width:100%;height:100%;padding:10px;fill:currentColor}.notification-content{flex:1;font-size:14px;line-height:1.5;font-weight:500;margin-left:20px;color:#000000d9}.notification-content i{font-style:italic}.notification-content,.notification-actions-button{font-family:inherit}.notification-actions{display:flex;margin:0 20px;-webkit-user-select:none;user-select:none;border-top:1px solid #f3f5f6}.notification-actions-button{flex:1;border:none;color:#22a5f7;cursor:pointer;font-size:14px;font-weight:500;padding:12px 2px;text-align:center;background-color:transparent}.notification-actions-button:hover>.notification-actions-button-highlight,.notification-actions-button:focus>.notification-actions-button-highlight{background-color:#22a5f71a}.notification-actions-button:active>.notification-actions-button-highlight{background-color:#22a5f733}.notification-actions-button.destructive{color:#f55656}.notification-actions-button.destructive:hover>.notification-actions-button-highlight,.notification-actions-button.destructive:focus>.notification-actions-button-highlight{background-color:#f556561a}.notification-actions-button.destructive:active>.notification-actions-button-highlight{background-color:#f5565633}.notification-actions-button-highlight{padding:4px 12px;border-radius:12px;display:inline-flex;transition:background-color .15s cubic-bezier(0,0,.2,1)}.notification-progress-ring{inset:0;width:100%;height:100%;position:absolute}.notification-progress-circle{transform:rotate(-90deg);transform-origin:50% 50%;stroke:#657385}\n"] }]
90
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.Platform }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { notification: [{
91
+ type: Input
92
+ }], dismissButtonText: [{
93
+ type: Input
94
+ }], progressElementRef: [{
95
+ type: ViewChild,
96
+ args: ['progress']
97
+ }], getClass: [{
98
+ type: HostBinding,
99
+ args: ['class']
100
+ }] } });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbm90aWZpY2F0aW9ucy9zcmMvbGliL25vdGlmaWNhdGlvbnMtaXRlbS9ub3RpZmljYXRpb25zLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9ub3RpZmljYXRpb25zL3NyYy9saWIvbm90aWZpY2F0aW9ucy1pdGVtL25vdGlmaWNhdGlvbnMtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7Ozs7O0FBSXZCLE1BV2EsbUJBQW1CO0lBd0I1QixJQUEwQixRQUFRO1FBQzlCLE9BQU8seUJBQXlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELFlBQW9CLEtBQWEsRUFDYixTQUFtQixFQUNuQixnQkFBbUM7UUFGbkMsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQXJCdkQsUUFBUTtRQUNBLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBU25CLFFBQVE7UUFDUyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsbUJBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBd0M3RCx5QkFBb0IsR0FBRyxDQUFDLFlBQTBCLEVBQUUsTUFBMEIsRUFBRSxFQUFFO1lBQzlFLHVDQUF1QztZQUN2QyxNQUFN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SSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUV0RCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFN0Isc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQzs4R0FsRlEsbUJBQW1CO2tHQUFuQixtQkFBbUIsb1ZDM0JoQywweUhBc0dBOztTRDNFYSxtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFYL0IsU0FBUzsrQkFDSSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksdUJBQ2hCLEtBQUssUUFDcEI7d0JBQ0YsTUFBTSxFQUFFLE9BQU87cUJBQ2xCO29KQUtRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdpQixrQkFBa0I7c0JBQXhDLFNBQVM7dUJBQUMsVUFBVTtnQkFpQkssUUFBUTtzQkFBakMsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05vdGlmaWNhdGlvbiwgTm90aWZpY2F0aW9uQWN0aW9ufSBmcm9tICcuLi9ub3RpZmljYXRpb25zLmludGVyZmFjZXMnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiYi1ub3RpZmljYXRpb25zLWl0ZW0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYXRpb25zLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25vdGlmaWNhdGlvbnMtaXRlbS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgaG9zdDoge1xuICAgICAgICAncm9sZSc6ICdhbGVydCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEJiTm90aWZpY2F0aW9uc0l0ZW0gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvLyBJbnB1dHMuXG4gICAgQElucHV0KCkgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb247XG4gICAgQElucHV0KCkgZGlzbWlzc0J1dHRvblRleHQ6IHN0cmluZyB8IG51bGw7XG5cbiAgICAvLyBFbGVtZW50cy5cbiAgICBAVmlld0NoaWxkKCdwcm9ncmVzcycpIHByb2dyZXNzRWxlbWVudFJlZjogRWxlbWVudFJlZjtcblxuICAgIC8vIERhdGEuXG4gICAgcHJpdmF0ZSBfcHJvZ3Jlc3MgPSAwO1xuICAgIHByaXZhdGUgX2NvdW50ID0gMDtcblxuICAgIC8vIEhlbHBlciB2YXJpYWJsZXMuXG4gICAgcHJpdmF0ZSBfc3RlcHM6IG51bWJlcjtcbiAgICBwcml2YXRlIF9zcGVlZDogbnVtYmVyO1xuICAgIHByaXZhdGUgX3RpbWVyOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfZGlmZmVyZW5jZTogbnVtYmVyO1xuXG4gICAgLy8gRGF0YS5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yYWRpdXMgPSAxOTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jaXJjdW1mZXJlbmNlID0gdGhpcy5fcmFkaXVzICogMiAqIE1hdGguUEk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IGdldENsYXNzKCkge1xuICAgICAgICByZXR1cm4gYGJiLW5vdGlmaWNhdGlvbnMtaXRlbSAke3RoaXMubm90aWZpY2F0aW9uLnR5cGV9YDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB9XG5cbiAgICBnZXQgcHJvZ3Jlc3NTdHJva2VBcnJheSgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBNYXRoLmZsb29yKHRoaXMuX2NpcmN1bWZlcmVuY2UpO1xuICAgICAgICByZXR1cm4gYCR7dmFsdWV9LCAke3ZhbHVlfWA7XG4gICAgfVxuXG4gICAgZ2V0IHByb2dyZXNzU3Ryb2tlT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLl9jaXJjdW1mZXJlbmNlIC0gdGhpcy5fcHJvZ3Jlc3MgLyAxMDAgKiB0aGlzLl9jaXJjdW1mZXJlbmNlKTtcbiAgICB9XG5cbiAgICBnZXQgaXNDb250ZW50U3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uLmNvbnRlbnQgPT09ICdzdHJpbmcnO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgbm90aWZpY2F0aW9uIHRpbWVvdXQgaXMgbm90IDAgYW5kIHRoZSBwbGF0Zm9ybSBpcyBhIGJyb3dzZXIuXG4gICAgICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbi50aW1lb3V0IDw9IDAgfHwgIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZGlzbWlzcyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB0aGUgdGltZW91dC5cbiAgICAgICAgdGhpcy5zdGFydFRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIHRpbWVvdXQgaWYgaXQgd2FzIHNldC5cbiAgICAgICAgdGhpcy5fdGltZXIgJiYgd2luZG93ICYmIHdpbmRvdy5jbGVhclRpbWVvdXQgJiYgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgfVxuXG4gICAgY2FsbEFjdGlvbkFuZERlc3Ryb3kgPSAobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24sIGFjdGlvbjogTm90aWZpY2F0aW9uQWN0aW9uKSA9PiB7XG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGNhbGxiYWNrIChpZiBpdCBleGlzdHMpLlxuICAgICAgICBhY3Rpb24gJiYgYWN0aW9uLmNhbGxiYWNrICYmIGFjdGlvbi5jYWxsYmFjaygpO1xuXG4gICAgICAgIC8vIENhbGwgdGhlIGRlc3Ryb3kgbWV0aG9kIChpZiBpdCBleGlzdHMpLlxuICAgICAgICBub3RpZmljYXRpb24gJiYgbm90aWZpY2F0aW9uLmRlc3Ryb3kgJiYgbm90aWZpY2F0aW9uLmRlc3Ryb3koKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBzdGFydFRpbWVvdXQoKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RlcHMgb2YgdGhlIHRpbWVvdXQuXG4gICAgICAgIHRoaXMuX3N0ZXBzID0gdGhpcy5ub3RpZmljYXRpb24udGltZW91dCAvIDEwO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc3BlZWQgb2YgdGhlIHRpbWVvdXQuXG4gICAgICAgIHRoaXMuX3NwZWVkID0gdGhpcy5ub3RpZmljYXRpb24udGltZW91dCAvIHRoaXMuX3N0ZXBzO1xuXG4gICAgICAgIC8vIEdldCB0aGUgc3RhcnQgdGltZS5cbiAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBTZXQgYSBuZXcgdGltZXIgb3V0c2lkZSBvZiBBbmd1bGFyLlxuICAgICAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuX3RpbWVyID0gdGhpcy5zZXRUaW1lb3V0KHRoaXMuaW5zdGFuY2UsIHRoaXMuX3NwZWVkKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlLlxuICAgICAgICB0aGlzLl9kaWZmZXJlbmNlID0gKERhdGUubm93KCkgLSB0aGlzLl9zdGFydFRpbWUpIC0gKHRoaXMuX2NvdW50ICogdGhpcy5fc3BlZWQpO1xuXG4gICAgICAgIC8vIEFkZCB1cCB0aGUgY291bnQuXG4gICAgICAgIGlmICh0aGlzLl9jb3VudCsrID09PSB0aGlzLl9zdGVwcykge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIHRoZSBzdGVwcyB0byB0aGUgcHJvZ3Jlc3MuXG4gICAgICAgIHRoaXMuX3Byb2dyZXNzICs9IDEwMCAvIHRoaXMuX3N0ZXBzO1xuXG4gICAgICAgIC8vIFNldCBhIG5ldyB0aW1lci5cbiAgICAgICAgdGhpcy5fdGltZXIgPSB0aGlzLnNldFRpbWVvdXQodGhpcy5pbnN0YW5jZSwgdGhpcy5fc3BlZWQgLSB0aGlzLl9kaWZmZXJlbmNlKTtcblxuICAgICAgICAvLyBSdW4gYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBjeWNsZS5cbiAgICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4gdGhpcy5fY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2V0VGltZW91dCA9IChtZXRob2Q6ICgpID0+IHZvaWQsIHRpbWVvdXQ6IG51bWJlcikgPT4ge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgd2luZG93IGFuZCBtZXRob2QgZXhpc3QuXG4gICAgICAgIGlmICghd2luZG93IHx8ICF3aW5kb3cuc2V0VGltZW91dCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2luZG93LnNldFRpbWVvdXQobWV0aG9kLCB0aW1lb3V0KTtcbiAgICB9O1xuXG59XG4iLCI8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgIDwhLS1cbiAgICAgICAgVGhlIGljb24gZm9yIHRoZSBub3RpZmljYXRpb24uXG5cbiAgICAgICAgVGhlIGljb24gaXMgcmVmbGVjdGVkIGJ5IHRoZSB0eXBlIG9mIHRoZVxuICAgICAgICBub3RpZmljYXRpb24uIFNhbWUgZ29lcyBmb3IgdGhlIGNvbG9yIGFuZFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yLlxuICAgIC0tPlxuICAgIDxkaXYgW3N0eWxlLmNvbG9yXT1cIm5vdGlmaWNhdGlvbj8uY29sb3JcIlxuICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibm90aWZpY2F0aW9uPy5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgY2xhc3M9XCJub3RpZmljYXRpb24taWNvbi13cmFwcGVyXCI+XG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxOS41XCJcbiAgICAgICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi1pY29uXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNOCAxOS41YzEuMSAwIDItLjkgMi0ySDZjMCAxLjEuOSAyIDIgMnpNMTQgMTMuNXYtNWMwLTMuMS0xLjYtNS42LTQuNS02LjN2LS43QzkuNS43IDguOCAwIDggMFM2LjUuNyA2LjUgMS41di43QzMuNiAyLjkgMiA1LjQgMiA4LjV2NWwtMiAydjFoMTZ2LTFsLTItMnpcIj5cbiAgICAgICAgICAgIDwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG5cbiAgICAgICAgPCEtLVxuICAgICAgICAgICAgVGhlIGNpcmN1bGFyIHByb2dyZXNzIGZvciB0aGUgbm90aWZpY2F0aW9uLlxuXG4gICAgICAgICAgICBUaGUgcHJvZ3Jlc3MgaXMgb25seSB2aXNpYmxlIHdoZW4gYSB0aW1lb3V0IGlzXG4gICAgICAgICAgICBzZXQuIFRoZSBwcm9ncmVzcyBhZGFwdHMgdG8gdGhlIHRpbWUgcmVtYWluaW5nXG4gICAgICAgICAgICBmb3IgdGhlIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgLS0+XG4gICAgICAgIDxzdmcgKm5nSWY9XCJub3RpZmljYXRpb24/LnRpbWVvdXQgPiAwXCJcbiAgICAgICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi1wcm9ncmVzcy1yaW5nXCJcbiAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDQwIDQwXCJcbiAgICAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgI3Byb2dyZXNzXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZS1kYXNoYXJyYXldPVwicHJvZ3Jlc3NTdHJva2VBcnJheVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZS1kYXNob2Zmc2V0XT1cInByb2dyZXNzU3Ryb2tlT2Zmc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnN0cm9rZV09XCJub3RpZmljYXRpb24/LmNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJub3RpZmljYXRpb24tcHJvZ3Jlc3MtY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIHI9XCIxOVwiXG4gICAgICAgICAgICAgICAgICAgIGN4PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICBjeT1cIjIwXCI+XG4gICAgICAgICAgICA8L2NpcmNsZT5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tXG4gICAgICAgIFRoZSBjb250ZW50IGZvciB0aGUgbm90aWZpY2F0aW9uLlxuXG4gICAgICAgIFRoaXMgZGlzcGxheXMgYSBzdHJpbmcgb3IgYSB0ZW1wbGF0ZSBiYXNlZFxuICAgICAgICBvbiB0aGUgZ2l2ZW4gcGFyYW1ldGVyIGJ5IHRoZSB1c2VyLlxuICAgIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tY29udGVudFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDb250ZW50U3RyaW5nOyBlbHNlIHRlbXBsYXRlQ29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cIm5vdGlmaWNhdGlvbj8ubG9jYWxpemVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICB7eyAkYW55KG5vdGlmaWNhdGlvbj8uY29udGVudCkgfCBiYkxvY2FsaXplOntkYXRhOiBub3RpZmljYXRpb24/LmRhdGF9IH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICB7eyBub3RpZmljYXRpb24/LmNvbnRlbnQgfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tXG4gICAgVGhlIGFjdGlvbnMgb2YgdGhlIG5vdGlmaWNhdGlvbi5cblxuICAgIEFsbCBhY3Rpb25zIGFyZSBkaXNwbGF5ZWQgaGVyZSBhbmQgYXJlXG4gICAgYmFzZWQgb24gdGhlIGFjdGlvbnMgYXJyYXkgdGhlIHVzZXIgcHJvdmlkZWQuXG4tLT5cbjxkaXYgKm5nSWY9XCJub3RpZmljYXRpb24/LmFjdGlvbnM/Lmxlbmd0aCA+IDAgfHwgbm90aWZpY2F0aW9uPy5kaXNtaXNzXCJcbiAgICAgY2xhc3M9XCJub3RpZmljYXRpb24tYWN0aW9uc1wiPlxuICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBub3RpZmljYXRpb24/LmFjdGlvbnNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxBY3Rpb25BbmREZXN0cm95KG5vdGlmaWNhdGlvbiwgYWN0aW9uKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5kZXN0cnVjdGl2ZV09XCJhY3Rpb24/LnR5cGUgPT09ICdjYW5jZWwnXCJcbiAgICAgICAgICAgIGNsYXNzPVwibm90aWZpY2F0aW9uLWFjdGlvbnMtYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuIFtuZ1N3aXRjaF09XCJub3RpZmljYXRpb24/LmxvY2FsaXplXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJub3RpZmljYXRpb24tYWN0aW9ucy1idXR0b24taGlnaGxpZ2h0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAge3sgYWN0aW9uPy50aXRsZSB8IGJiTG9jYWxpemU6e2RhdGE6IG5vdGlmaWNhdGlvbj8uZGF0YX0gfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgIHt7IGFjdGlvbj8udGl0bGUgfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIm5vdGlmaWNhdGlvbj8uZGlzbWlzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwibm90aWZpY2F0aW9uPy5kZXN0cm95KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJub3RpZmljYXRpb24tYWN0aW9ucy1idXR0b24gZGVzdHJ1Y3RpdmVcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5vdGlmaWNhdGlvbi1hY3Rpb25zLWJ1dHRvbi1oaWdobGlnaHRcIj5cbiAgICAgICAgICAgIHt7IG5vdGlmaWNhdGlvbj8uZGlzbWlzc1RleHQgfHwgZGlzbWlzc0J1dHRvblRleHQgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjwhLS1cbiAgICBUaGUgb3V0bGV0IGZvciB0aGUgbm90aWZpY2F0aW9uIGNvbnRlbnQgdGVtcGxhdGUgcmVmLlxuLS0+XG48bmctdGVtcGxhdGUgI3RlbXBsYXRlQ29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiJGFueShub3RpZmljYXRpb24/LmNvbnRlbnQpXCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,48 @@
1
+ import { ChangeDetectionStrategy, Component, HostBinding, ViewEncapsulation } from '@angular/core';
2
+ import { notificationAnimation } from '../notifications.animations';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../notifications.interfaces";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "../notifications-item/notifications-item.component";
7
+ class BbNotificationsList {
8
+ constructor(data) {
9
+ this.data = data;
10
+ // Data.
11
+ this.position = null;
12
+ // Track by function.
13
+ this.trackByFn = (_, item) => item?.id;
14
+ }
15
+ get horizontalPosition() {
16
+ return this.location.horizontal;
17
+ }
18
+ get verticalPosition() {
19
+ return this.location.vertical;
20
+ }
21
+ get animation() {
22
+ const to = this.horizontalPosition === 'flex-start'
23
+ ? -50
24
+ : 50;
25
+ return { to };
26
+ }
27
+ get location() {
28
+ const [y, x] = (this.data.position ?? '').split('|');
29
+ return { vertical: y ?? null, horizontal: x ?? null };
30
+ }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BbNotificationsList, deps: [{ token: i1.NotificationsData }], target: i0.ɵɵFactoryTarget.Component }); }
32
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: BbNotificationsList, selector: "bb-notifications-list", host: { attributes: { "role": "list" }, properties: { "style.justify-content": "this.horizontalPosition", "style.align-items": "this.verticalPosition" }, classAttribute: "bb-notifications-list" }, ngImport: i0, template: "<!--\n The notifications list.\n\n The list provides the animation effect for the\n incoming notifications.\n-->\n<div *ngIf=\"data?.data | async as notifications\"\n [@notificationListAnimation]=\"{value: notifications?.length, params: animation}\"\n class=\"notifications-list-wrapper\">\n <!--\n The loop for the notifications.\n\n All notifications will be displayed here. They\n are wrapped within a wrapper which separates them.\n -->\n <div *ngFor=\"let notification of notifications; trackBy: trackByFn\"\n class=\"notifications-item-wrapper\">\n <bb-notifications-item [notification]=\"notification\"\n [dismissButtonText]=\"data?.dismissText\">\n </bb-notifications-item>\n </div>\n</div>\n", styles: [".bb-notifications-list{inset:0;z-index:1100;padding:10px;display:flex;position:fixed;pointer-events:none}.notifications-list-wrapper{width:100%;display:block;max-width:400px;position:relative}.notifications-item-wrapper{padding:0;margin:0 0 10px;pointer-events:all}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.BbNotificationsItem, selector: "bb-notifications-item", inputs: ["notification", "dismissButtonText"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], animations: [notificationAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
33
+ }
34
+ export { BbNotificationsList };
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BbNotificationsList, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: 'bb-notifications-list', animations: [notificationAnimation], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, preserveWhitespaces: false, host: {
38
+ 'class': 'bb-notifications-list',
39
+ 'role': 'list'
40
+ }, template: "<!--\n The notifications list.\n\n The list provides the animation effect for the\n incoming notifications.\n-->\n<div *ngIf=\"data?.data | async as notifications\"\n [@notificationListAnimation]=\"{value: notifications?.length, params: animation}\"\n class=\"notifications-list-wrapper\">\n <!--\n The loop for the notifications.\n\n All notifications will be displayed here. They\n are wrapped within a wrapper which separates them.\n -->\n <div *ngFor=\"let notification of notifications; trackBy: trackByFn\"\n class=\"notifications-item-wrapper\">\n <bb-notifications-item [notification]=\"notification\"\n [dismissButtonText]=\"data?.dismissText\">\n </bb-notifications-item>\n </div>\n</div>\n", styles: [".bb-notifications-list{inset:0;z-index:1100;padding:10px;display:flex;position:fixed;pointer-events:none}.notifications-list-wrapper{width:100%;display:block;max-width:400px;position:relative}.notifications-item-wrapper{padding:0;margin:0 0 10px;pointer-events:all}\n"] }]
41
+ }], ctorParameters: function () { return [{ type: i1.NotificationsData }]; }, propDecorators: { horizontalPosition: [{
42
+ type: HostBinding,
43
+ args: ['style.justify-content']
44
+ }], verticalPosition: [{
45
+ type: HostBinding,
46
+ args: ['style.align-items']
47
+ }] } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbm90aWZpY2F0aW9ucy9zcmMvbGliL25vdGlmaWNhdGlvbnMtbGlzdC9ub3RpZmljYXRpb25zLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9ub3RpZmljYXRpb25zL3NyYy9saWIvbm90aWZpY2F0aW9ucy1saXN0L25vdGlmaWNhdGlvbnMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7QUFFbEUsTUFhYSxtQkFBbUI7SUFRNUIsWUFBbUIsSUFBdUI7UUFBdkIsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFOMUMsUUFBUTtRQUNSLGFBQVEsR0FBaUMsSUFBSSxDQUFDO1FBRTlDLHFCQUFxQjtRQUNyQixjQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBa0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUdoRCxDQUFDO0lBRUQsSUFDSSxrQkFBa0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFDSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixLQUFLLFlBQVk7WUFDL0MsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNMLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFVCxPQUFPLEVBQUMsRUFBRSxFQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQVksUUFBUTtRQUNoQixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJELE9BQU8sRUFBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBQyxDQUFDO0lBQ3hELENBQUM7OEdBakNRLG1CQUFtQjtrR0FBbkIsbUJBQW1CLGtRQ2pCaEMsb3lCQXNCQSxvdEJEZGdCLENBQUMscUJBQXFCLENBQUM7O1NBUzFCLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQWIvQixTQUFTOytCQUNJLHVCQUF1QixjQUdyQixDQUFDLHFCQUFxQixDQUFDLG1CQUNsQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLHVCQUNoQixLQUFLLFFBQ3BCO3dCQUNGLE9BQU8sRUFBRSx1QkFBdUI7d0JBQ2hDLE1BQU0sRUFBRSxNQUFNO3FCQUNqQjt3R0FjRyxrQkFBa0I7c0JBRHJCLFdBQVc7dUJBQUMsdUJBQXVCO2dCQU1oQyxnQkFBZ0I7c0JBRG5CLFdBQVc7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOb3RpZmljYXRpb24sIE5vdGlmaWNhdGlvbnNEYXRhLCBOb3RpZmljYXRpb25zUG9zaXRpb259IGZyb20gJy4uL25vdGlmaWNhdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge25vdGlmaWNhdGlvbkFuaW1hdGlvbn0gZnJvbSAnLi4vbm90aWZpY2F0aW9ucy5hbmltYXRpb25zJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiYi1ub3RpZmljYXRpb25zLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYXRpb25zLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25vdGlmaWNhdGlvbnMtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtub3RpZmljYXRpb25BbmltYXRpb25dLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnYmItbm90aWZpY2F0aW9ucy1saXN0JyxcbiAgICAgICAgJ3JvbGUnOiAnbGlzdCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEJiTm90aWZpY2F0aW9uc0xpc3Qge1xuXG4gICAgLy8gRGF0YS5cbiAgICBwb3NpdGlvbjogTm90aWZpY2F0aW9uc1Bvc2l0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBUcmFjayBieSBmdW5jdGlvbi5cbiAgICB0cmFja0J5Rm4gPSAoXywgaXRlbTogTm90aWZpY2F0aW9uKSA9PiBpdGVtPy5pZDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhOiBOb3RpZmljYXRpb25zRGF0YSkge1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuanVzdGlmeS1jb250ZW50JylcbiAgICBnZXQgaG9yaXpvbnRhbFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhdGlvbi5ob3Jpem9udGFsO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYWxpZ24taXRlbXMnKVxuICAgIGdldCB2ZXJ0aWNhbFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhdGlvbi52ZXJ0aWNhbDtcbiAgICB9XG5cbiAgICBnZXQgYW5pbWF0aW9uKCkge1xuICAgICAgICBjb25zdCB0byA9IHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uID09PSAnZmxleC1zdGFydCdcbiAgICAgICAgICAgID8gLTUwXG4gICAgICAgICAgICA6IDUwO1xuXG4gICAgICAgIHJldHVybiB7dG99O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgICBjb25zdCBbeSwgeF0gPSAodGhpcy5kYXRhLnBvc2l0aW9uID8/ICcnKS5zcGxpdCgnfCcpO1xuXG4gICAgICAgIHJldHVybiB7dmVydGljYWw6IHkgPz8gbnVsbCwgaG9yaXpvbnRhbDogeCA/PyBudWxsfTtcbiAgICB9XG5cbn1cbiIsIjwhLS1cbiAgICBUaGUgbm90aWZpY2F0aW9ucyBsaXN0LlxuXG4gICAgVGhlIGxpc3QgcHJvdmlkZXMgdGhlIGFuaW1hdGlvbiBlZmZlY3QgZm9yIHRoZVxuICAgIGluY29taW5nIG5vdGlmaWNhdGlvbnMuXG4tLT5cbjxkaXYgKm5nSWY9XCJkYXRhPy5kYXRhIHwgYXN5bmMgYXMgbm90aWZpY2F0aW9uc1wiXG4gICAgIFtAbm90aWZpY2F0aW9uTGlzdEFuaW1hdGlvbl09XCJ7dmFsdWU6IG5vdGlmaWNhdGlvbnM/Lmxlbmd0aCwgcGFyYW1zOiBhbmltYXRpb259XCJcbiAgICAgY2xhc3M9XCJub3RpZmljYXRpb25zLWxpc3Qtd3JhcHBlclwiPlxuICAgIDwhLS1cbiAgICAgICAgVGhlIGxvb3AgZm9yIHRoZSBub3RpZmljYXRpb25zLlxuXG4gICAgICAgIEFsbCBub3RpZmljYXRpb25zIHdpbGwgYmUgZGlzcGxheWVkIGhlcmUuIFRoZXlcbiAgICAgICAgYXJlIHdyYXBwZWQgd2l0aGluIGEgd3JhcHBlciB3aGljaCBzZXBhcmF0ZXMgdGhlbS5cbiAgICAtLT5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBub3RpZmljYXRpb24gb2Ygbm90aWZpY2F0aW9uczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgIGNsYXNzPVwibm90aWZpY2F0aW9ucy1pdGVtLXdyYXBwZXJcIj5cbiAgICAgICAgPGJiLW5vdGlmaWNhdGlvbnMtaXRlbSBbbm90aWZpY2F0aW9uXT1cIm5vdGlmaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc21pc3NCdXR0b25UZXh0XT1cImRhdGE/LmRpc21pc3NUZXh0XCI+XG4gICAgICAgIDwvYmItbm90aWZpY2F0aW9ucy1pdGVtPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import { BbNotificationsList } from './notifications-list/notifications-list.component';
2
+ import { BbNotificationsItem } from './notifications-item/notifications-item.component';
3
+ import { LocalizeModule } from '@bravobit/bb-foundation/localize';
4
+ import { NotificationsConfig } from './notifications.interfaces';
5
+ import { NgModule } from '@angular/core';
6
+ import { Notifications } from './notifications.service';
7
+ import { CommonModule } from '@angular/common';
8
+ import * as i0 from "@angular/core";
9
+ class NotificationsModule {
10
+ static forRoot(config) {
11
+ return {
12
+ ngModule: NotificationsModule,
13
+ providers: [
14
+ { provide: NotificationsConfig, useValue: config },
15
+ Notifications
16
+ ]
17
+ };
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NotificationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
20
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: NotificationsModule, declarations: [BbNotificationsList, BbNotificationsItem], imports: [CommonModule, LocalizeModule] }); }
21
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NotificationsModule, imports: [CommonModule, LocalizeModule] }); }
22
+ }
23
+ export { NotificationsModule };
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NotificationsModule, decorators: [{
25
+ type: NgModule,
26
+ args: [{
27
+ imports: [CommonModule, LocalizeModule],
28
+ declarations: [BbNotificationsList, BbNotificationsItem]
29
+ }]
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL25vdGlmaWNhdGlvbnMvc3JjL2xpYi9ub3RpZmljYXRpb25zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUN0RixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUN0RixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFzQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFN0MsTUFJYSxtQkFBbUI7SUFFNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUE0QjtRQUN2QyxPQUFPO1lBQ0gsUUFBUSxFQUFFLG1CQUFtQjtZQUM3QixTQUFTLEVBQUU7Z0JBQ1AsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQztnQkFDaEQsYUFBYTthQUNoQjtTQUNKLENBQUM7SUFDTixDQUFDOzhHQVZRLG1CQUFtQjsrR0FBbkIsbUJBQW1CLGlCQUZiLG1CQUFtQixFQUFFLG1CQUFtQixhQUQ3QyxZQUFZLEVBQUUsY0FBYzsrR0FHN0IsbUJBQW1CLFlBSGxCLFlBQVksRUFBRSxjQUFjOztTQUc3QixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFKL0IsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDO29CQUN2QyxZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQztpQkFDM0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JiTm90aWZpY2F0aW9uc0xpc3R9IGZyb20gJy4vbm90aWZpY2F0aW9ucy1saXN0L25vdGlmaWNhdGlvbnMtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtCYk5vdGlmaWNhdGlvbnNJdGVtfSBmcm9tICcuL25vdGlmaWNhdGlvbnMtaXRlbS9ub3RpZmljYXRpb25zLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7TG9jYWxpemVNb2R1bGV9IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL2xvY2FsaXplJztcbmltcG9ydCB7Tm90aWZpY2F0aW9uc0NvbmZpZ30gZnJvbSAnLi9ub3RpZmljYXRpb25zLmludGVyZmFjZXMnO1xuaW1wb3J0IHtNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05vdGlmaWNhdGlvbnN9IGZyb20gJy4vbm90aWZpY2F0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIExvY2FsaXplTW9kdWxlXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtCYk5vdGlmaWNhdGlvbnNMaXN0LCBCYk5vdGlmaWNhdGlvbnNJdGVtXVxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25zTW9kdWxlIHtcblxuICAgIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IE5vdGlmaWNhdGlvbnNDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE5vdGlmaWNhdGlvbnNNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBOb3RpZmljYXRpb25zTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAge3Byb3ZpZGU6IE5vdGlmaWNhdGlvbnNDb25maWcsIHVzZVZhbHVlOiBjb25maWd9LFxuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbnNcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,142 @@
1
+ import { NotificationsPosition, NotificationType, NotificationsData } from './notifications.interfaces';
2
+ import { createComponent, createEnvironmentInjector, Injectable, Optional } from '@angular/core';
3
+ import { BbNotificationsList } from './notifications-list/notifications-list.component';
4
+ import { BehaviorSubject } from 'rxjs';
5
+ import { share } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/cdk/platform";
8
+ import * as i2 from "@bravobit/bb-foundation/localize";
9
+ import * as i3 from "./notifications.interfaces";
10
+ class Notifications {
11
+ constructor(_platform, _applicationRef, _environmentInjector, _localize, _config) {
12
+ this._platform = _platform;
13
+ this._applicationRef = _applicationRef;
14
+ this._environmentInjector = _environmentInjector;
15
+ this._localize = _localize;
16
+ this._config = _config;
17
+ // The data containing the notifications.
18
+ this._notifications$ = new BehaviorSubject([]);
19
+ this.getProperty = (property, defaultValue) => {
20
+ return typeof property === 'undefined'
21
+ ? defaultValue
22
+ : property;
23
+ };
24
+ // Get the config.
25
+ const config = this._config || {};
26
+ // Set the config.
27
+ this._defaultMode = this.getProperty(config.mode, 'prepend');
28
+ this._defaultTimeout = this.getProperty(config.timeout, 8000);
29
+ this._defaultLocalize = this.getProperty(config.localize, false);
30
+ this._defaultDismiss = this.getProperty(config.dismiss, true);
31
+ this._defaultDismissText = this.getProperty(config.dismissText, 'Dismiss');
32
+ this._defaultPosition = this.getProperty(config.position, NotificationsPosition.TopRight);
33
+ // Create the element that holds all notifications.
34
+ this.createElement();
35
+ }
36
+ success(content, actions = [], timeout = this._defaultTimeout) {
37
+ return this.create({ content, timeout, actions, type: NotificationType.Success });
38
+ }
39
+ error(content, actions = [], timeout = this._defaultTimeout) {
40
+ return this.create({ content, timeout, actions, type: NotificationType.Error });
41
+ }
42
+ warn(content, actions = [], timeout = this._defaultTimeout) {
43
+ return this.create({ content, timeout, actions, type: NotificationType.Warning });
44
+ }
45
+ info(content, actions = [], timeout = this._defaultTimeout) {
46
+ return this.create({ content, timeout, actions, type: NotificationType.Info });
47
+ }
48
+ create(notification) {
49
+ // Compose a new notification item.
50
+ const item = this.compose(notification);
51
+ // Add the destroy function to the notification.
52
+ item.destroy = () => this.pull(item);
53
+ // Add the notification to the list
54
+ // and return the item.
55
+ return this.push(item);
56
+ }
57
+ push(notification) {
58
+ // Get the current list.
59
+ const oldList = this._notifications$.getValue();
60
+ // Check which mode is activated.
61
+ let newList;
62
+ switch (this._defaultMode) {
63
+ case 'append':
64
+ newList = [...oldList, notification];
65
+ break;
66
+ case 'prepend':
67
+ default:
68
+ newList = [notification, ...oldList];
69
+ }
70
+ // Push the new notifications.
71
+ this._notifications$.next(newList);
72
+ // Return the notification for further use.
73
+ return notification;
74
+ }
75
+ pull(notification) {
76
+ // Get the current list.
77
+ const newList = this._notifications$
78
+ .getValue()
79
+ .filter(item => item.id !== notification.id);
80
+ // Push a new list.
81
+ this._notifications$.next(newList);
82
+ }
83
+ compose(notification) {
84
+ // Attach a random id to the notification.
85
+ notification.id = Math.random().toString(36).substring(2, 12);
86
+ // Set all properties.
87
+ notification.type = this.getProperty(notification.type, NotificationType.Custom);
88
+ notification.content = this.getProperty(notification.content, null);
89
+ notification.data = this.getProperty(notification.data, {});
90
+ notification.timeout = this.getProperty(notification.timeout, this._defaultTimeout);
91
+ notification.localize = this.getProperty(notification.localize, this._defaultLocalize);
92
+ notification.dismiss = this.getProperty(notification.dismiss, this._defaultDismiss);
93
+ // Dismiss text localization.
94
+ const dismissText = this.getProperty(notification.dismissText, this._defaultDismissText);
95
+ notification.dismissText = this._defaultLocalize && this._localize
96
+ ? this._localize.translate(dismissText)
97
+ : dismissText;
98
+ // Return the composed notification.
99
+ return notification;
100
+ }
101
+ createElement() {
102
+ const environmentInjector = createEnvironmentInjector([
103
+ {
104
+ provide: NotificationsData,
105
+ useValue: {
106
+ data: this._notifications$.pipe(share()),
107
+ dismissText: this._defaultDismissText,
108
+ position: this._defaultPosition
109
+ }
110
+ }
111
+ ], this._environmentInjector);
112
+ // Create the component.
113
+ this._ref = createComponent(BbNotificationsList, { environmentInjector });
114
+ // Detect the changes.
115
+ this._ref.changeDetectorRef.detectChanges();
116
+ // Attach the component's view to the application
117
+ // so that the change detection will run properly.
118
+ this._applicationRef.attachView(this._ref.hostView);
119
+ // If the platform is not a browser return.
120
+ if (!this._platform.isBrowser) {
121
+ return;
122
+ }
123
+ try {
124
+ // Append the element to the DOM.
125
+ document.body.appendChild(this._ref.location.nativeElement);
126
+ }
127
+ catch {
128
+ // Don't do anything, because it must've failed.
129
+ }
130
+ }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: Notifications, deps: [{ token: i1.Platform }, { token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }, { token: i2.Localize, optional: true }, { token: i3.NotificationsConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
132
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: Notifications }); }
133
+ }
134
+ export { Notifications };
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: Notifications, decorators: [{
136
+ type: Injectable
137
+ }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }, { type: i2.Localize, decorators: [{
138
+ type: Optional
139
+ }] }, { type: i3.NotificationsConfig, decorators: [{
140
+ type: Optional
141
+ }] }]; } });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9ub3RpZmljYXRpb25zL3NyYy9saWIvbm90aWZpY2F0aW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUMscUJBQXFCLEVBQXVCLGdCQUFnQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDN0osT0FBTyxFQUErQixlQUFlLEVBQUUseUJBQXlCLEVBQXVCLFVBQVUsRUFBRSxRQUFRLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDL0osT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFHdEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRXJDLE1BQ2EsYUFBYTtJQWdCdEIsWUFBb0IsU0FBbUIsRUFDbkIsZUFBK0IsRUFDL0Isb0JBQXlDLEVBQzdCLFNBQW9CLEVBQ3BCLE9BQTZCO1FBSnpDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDN0IsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQVA3RCx5Q0FBeUM7UUFDakMsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsRUFBRSxDQUFDLENBQUM7UUEySTFELGdCQUFXLEdBQUcsQ0FBQyxRQUFhLEVBQUUsWUFBaUIsRUFBRSxFQUFFO1lBQ3ZELE9BQU8sT0FBTyxRQUFRLEtBQUssV0FBVztnQkFDbEMsQ0FBQyxDQUFDLFlBQVk7Z0JBQ2QsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNuQixDQUFDLENBQUM7UUF4SUUsa0JB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bUIsRUFBRSxFQUFDLG1CQUFtQixFQUFDLENBQUMsQ0FBQztRQUV4RSxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUU1QyxpREFBaUQ7UUFDakQsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEQsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUMzQixPQUFPO1NBQ1Y7UUFFRCxJQUFJO1lBQ0EsaUNBQWlDO1lBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQy9EO1FBQUMsTUFBTTtZQUNKLGdEQUFnRDtTQUNuRDtJQUNMLENBQUM7OEdBdkpRLGFBQWE7a0hBQWIsYUFBYTs7U0FBYixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVU7OzBCQW9CTSxRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOb3RpZmljYXRpb24sIE5vdGlmaWNhdGlvbkFjdGlvbiwgTm90aWZpY2F0aW9uc1Bvc2l0aW9uLCBOb3RpZmljYXRpb25zQ29uZmlnLCBOb3RpZmljYXRpb25UeXBlLCBOb3RpZmljYXRpb25zRGF0YX0gZnJvbSAnLi9ub3RpZmljYXRpb25zLmludGVyZmFjZXMnO1xuaW1wb3J0IHtBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50UmVmLCBjcmVhdGVDb21wb25lbnQsIGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IsIEVudmlyb25tZW50SW5qZWN0b3IsIEluamVjdGFibGUsIE9wdGlvbmFsLCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JiTm90aWZpY2F0aW9uc0xpc3R9IGZyb20gJy4vbm90aWZpY2F0aW9ucy1saXN0L25vdGlmaWNhdGlvbnMtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtMb2NhbGl6ZX0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vbG9jYWxpemUnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7c2hhcmV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbnMge1xuXG4gICAgLy8gUmVmZXJlbmNlIHRvIHRoZSBsaXN0LlxuICAgIHByaXZhdGUgX3JlZjogQ29tcG9uZW50UmVmPEJiTm90aWZpY2F0aW9uc0xpc3Q+O1xuXG4gICAgLy8gVGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBub3RpZmljYXRpb25zLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRNb2RlOiAncHJlcGVuZCcgfCAnYXBwZW5kJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0VGltZW91dDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRMb2NhbGl6ZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RGlzbWlzczogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0RGlzbWlzc1RleHQ6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0UG9zaXRpb246IE5vdGlmaWNhdGlvbnNQb3NpdGlvbjtcblxuICAgIC8vIFRoZSBkYXRhIGNvbnRhaW5pbmcgdGhlIG5vdGlmaWNhdGlvbnMuXG4gICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5vdGlmaWNhdGlvbltdPihbXSk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2Vudmlyb25tZW50SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfbG9jYWxpemU/OiBMb2NhbGl6ZSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb25maWc/OiBOb3RpZmljYXRpb25zQ29uZmlnKSB7XG4gICAgICAgIC8vIEdldCB0aGUgY29uZmlnLlxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9jb25maWcgfHwge307XG5cbiAgICAgICAgLy8gU2V0IHRoZSBjb25maWcuXG4gICAgICAgIHRoaXMuX2RlZmF1bHRNb2RlID0gdGhpcy5nZXRQcm9wZXJ0eShjb25maWcubW9kZSwgJ3ByZXBlbmQnKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFRpbWVvdXQgPSB0aGlzLmdldFByb3BlcnR5KGNvbmZpZy50aW1lb3V0LCA4MDAwKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdExvY2FsaXplID0gdGhpcy5nZXRQcm9wZXJ0eShjb25maWcubG9jYWxpemUsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdERpc21pc3MgPSB0aGlzLmdldFByb3BlcnR5KGNvbmZpZy5kaXNtaXNzLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdERpc21pc3NUZXh0ID0gdGhpcy5nZXRQcm9wZXJ0eShjb25maWcuZGlzbWlzc1RleHQsICdEaXNtaXNzJyk7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQb3NpdGlvbiA9IHRoaXMuZ2V0UHJvcGVydHkoY29uZmlnLnBvc2l0aW9uLCBOb3RpZmljYXRpb25zUG9zaXRpb24uVG9wUmlnaHQpO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgZWxlbWVudCB0aGF0IGhvbGRzIGFsbCBub3RpZmljYXRpb25zLlxuICAgICAgICB0aGlzLmNyZWF0ZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBzdWNjZXNzKGNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sIGFjdGlvbnM6IE5vdGlmaWNhdGlvbkFjdGlvbltdID0gW10sIHRpbWVvdXQgPSB0aGlzLl9kZWZhdWx0VGltZW91dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoe2NvbnRlbnQsIHRpbWVvdXQsIGFjdGlvbnMsIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc30pO1xuICAgIH1cblxuICAgIGVycm9yKGNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sIGFjdGlvbnM6IE5vdGlmaWNhdGlvbkFjdGlvbltdID0gW10sIHRpbWVvdXQgPSB0aGlzLl9kZWZhdWx0VGltZW91dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoe2NvbnRlbnQsIHRpbWVvdXQsIGFjdGlvbnMsIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3J9KTtcbiAgICB9XG5cbiAgICB3YXJuKGNvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sIGFjdGlvbnM6IE5vdGlmaWNhdGlvbkFjdGlvbltdID0gW10sIHRpbWVvdXQgPSB0aGlzLl9kZWZhdWx0VGltZW91dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoe2NvbnRlbnQsIHRpbWVvdXQsIGFjdGlvbnMsIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuV2FybmluZ30pO1xuICAgIH1cblxuICAgIGluZm8oY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiwgYWN0aW9uczogTm90aWZpY2F0aW9uQWN0aW9uW10gPSBbXSwgdGltZW91dCA9IHRoaXMuX2RlZmF1bHRUaW1lb3V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSh7Y29udGVudCwgdGltZW91dCwgYWN0aW9ucywgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5JbmZvfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIC8vIENvbXBvc2UgYSBuZXcgbm90aWZpY2F0aW9uIGl0ZW0uXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNvbXBvc2Uobm90aWZpY2F0aW9uKTtcblxuICAgICAgICAvLyBBZGQgdGhlIGRlc3Ryb3kgZnVuY3Rpb24gdG8gdGhlIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgaXRlbS5kZXN0cm95ID0gKCkgPT4gdGhpcy5wdWxsKGl0ZW0pO1xuXG4gICAgICAgIC8vIEFkZCB0aGUgbm90aWZpY2F0aW9uIHRvIHRoZSBsaXN0XG4gICAgICAgIC8vIGFuZCByZXR1cm4gdGhlIGl0ZW0uXG4gICAgICAgIHJldHVybiB0aGlzLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwdXNoKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBsaXN0LlxuICAgICAgICBjb25zdCBvbGRMaXN0ID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcblxuICAgICAgICAvLyBDaGVjayB3aGljaCBtb2RlIGlzIGFjdGl2YXRlZC5cbiAgICAgICAgbGV0IG5ld0xpc3Q6IE5vdGlmaWNhdGlvbltdO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX2RlZmF1bHRNb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdhcHBlbmQnOlxuICAgICAgICAgICAgICAgIG5ld0xpc3QgPSBbLi4ub2xkTGlzdCwgbm90aWZpY2F0aW9uXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ByZXBlbmQnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBuZXdMaXN0ID0gW25vdGlmaWNhdGlvbiwgLi4ub2xkTGlzdF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQdXNoIHRoZSBuZXcgbm90aWZpY2F0aW9ucy5cbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChuZXdMaXN0KTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIG5vdGlmaWNhdGlvbiBmb3IgZnVydGhlciB1c2UuXG4gICAgICAgIHJldHVybiBub3RpZmljYXRpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwdWxsKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBsaXN0LlxuICAgICAgICBjb25zdCBuZXdMaXN0ID0gdGhpcy5fbm90aWZpY2F0aW9ucyRcbiAgICAgICAgICAgIC5nZXRWYWx1ZSgpXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gbm90aWZpY2F0aW9uLmlkKTtcblxuICAgICAgICAvLyBQdXNoIGEgbmV3IGxpc3QuXG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQobmV3TGlzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wb3NlKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIC8vIEF0dGFjaCBhIHJhbmRvbSBpZCB0byB0aGUgbm90aWZpY2F0aW9uLlxuICAgICAgICBub3RpZmljYXRpb24uaWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTIpO1xuXG4gICAgICAgIC8vIFNldCBhbGwgcHJvcGVydGllcy5cbiAgICAgICAgbm90aWZpY2F0aW9uLnR5cGUgPSB0aGlzLmdldFByb3BlcnR5KG5vdGlmaWNhdGlvbi50eXBlLCBOb3RpZmljYXRpb25UeXBlLkN1c3RvbSk7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5jb250ZW50ID0gdGhpcy5nZXRQcm9wZXJ0eShub3RpZmljYXRpb24uY29udGVudCwgbnVsbCk7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5kYXRhID0gdGhpcy5nZXRQcm9wZXJ0eShub3RpZmljYXRpb24uZGF0YSwge30pO1xuICAgICAgICBub3RpZmljYXRpb24udGltZW91dCA9IHRoaXMuZ2V0UHJvcGVydHkobm90aWZpY2F0aW9uLnRpbWVvdXQsIHRoaXMuX2RlZmF1bHRUaW1lb3V0KTtcbiAgICAgICAgbm90aWZpY2F0aW9uLmxvY2FsaXplID0gdGhpcy5nZXRQcm9wZXJ0eShub3RpZmljYXRpb24ubG9jYWxpemUsIHRoaXMuX2RlZmF1bHRMb2NhbGl6ZSk7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5kaXNtaXNzID0gdGhpcy5nZXRQcm9wZXJ0eShub3RpZmljYXRpb24uZGlzbWlzcywgdGhpcy5fZGVmYXVsdERpc21pc3MpO1xuXG4gICAgICAgIC8vIERpc21pc3MgdGV4dCBsb2NhbGl6YXRpb24uXG4gICAgICAgIGNvbnN0IGRpc21pc3NUZXh0ID0gdGhpcy5nZXRQcm9wZXJ0eShub3RpZmljYXRpb24uZGlzbWlzc1RleHQsIHRoaXMuX2RlZmF1bHREaXNtaXNzVGV4dCk7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5kaXNtaXNzVGV4dCA9IHRoaXMuX2RlZmF1bHRMb2NhbGl6ZSAmJiB0aGlzLl9sb2NhbGl6ZVxuICAgICAgICAgICAgPyB0aGlzLl9sb2NhbGl6ZS50cmFuc2xhdGUoZGlzbWlzc1RleHQpXG4gICAgICAgICAgICA6IGRpc21pc3NUZXh0O1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgY29tcG9zZWQgbm90aWZpY2F0aW9uLlxuICAgICAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmplY3RvciA9IGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IE5vdGlmaWNhdGlvbnNEYXRhLFxuICAgICAgICAgICAgICAgIHVzZVZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuX25vdGlmaWNhdGlvbnMkLnBpcGUoc2hhcmUoKSksXG4gICAgICAgICAgICAgICAgICAgIGRpc21pc3NUZXh0OiB0aGlzLl9kZWZhdWx0RGlzbWlzc1RleHQsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLl9kZWZhdWx0UG9zaXRpb25cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sIHRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3IpO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgY29tcG9uZW50LlxuICAgICAgICB0aGlzLl9yZWYgPSBjcmVhdGVDb21wb25lbnQoQmJOb3RpZmljYXRpb25zTGlzdCwge2Vudmlyb25tZW50SW5qZWN0b3J9KTtcblxuICAgICAgICAvLyBEZXRlY3QgdGhlIGNoYW5nZXMuXG4gICAgICAgIHRoaXMuX3JlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgLy8gQXR0YWNoIHRoZSBjb21wb25lbnQncyB2aWV3IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBjaGFuZ2UgZGV0ZWN0aW9uIHdpbGwgcnVuIHByb3Blcmx5LlxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHRoaXMuX3JlZi5ob3N0Vmlldyk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHBsYXRmb3JtIGlzIG5vdCBhIGJyb3dzZXIgcmV0dXJuLlxuICAgICAgICBpZiAoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgZWxlbWVudCB0byB0aGUgRE9NLlxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9yZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcsIGJlY2F1c2UgaXQgbXVzdCd2ZSBmYWlsZWQuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb3BlcnR5ID0gKHByb3BlcnR5OiBhbnksIGRlZmF1bHRWYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcHJvcGVydHkgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IGRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgOiBwcm9wZXJ0eTtcbiAgICB9O1xuXG59XG4iXX0=
@@ -0,0 +1,89 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, Subscription } from 'rxjs';
3
+ import { distinctUntilChanged, switchMap } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../permissions.service";
6
+ class BbPermission {
7
+ set bbPermission(value) {
8
+ const permissions = Array.isArray(value) ? value : [value];
9
+ this._permission$.next(permissions);
10
+ this.updateView();
11
+ }
12
+ set bbPermissionElse(templateRef) {
13
+ this.assertTemplate('bbPermissionElse', templateRef);
14
+ this._elseTemplateRef = templateRef;
15
+ this.updateView();
16
+ }
17
+ set bbPermissionMode(mode) {
18
+ this._mode$.next(mode);
19
+ }
20
+ constructor(_permissions, _templateRef, _viewContainerRef) {
21
+ this._permissions = _permissions;
22
+ this._templateRef = _templateRef;
23
+ this._viewContainerRef = _viewContainerRef;
24
+ // Templates.
25
+ this._elseTemplateRef = null;
26
+ // View refs.
27
+ this._thenViewRef = null;
28
+ this._elseViewRef = null;
29
+ // Data.
30
+ this._valid = false;
31
+ this._permission$ = new BehaviorSubject([]);
32
+ this._mode$ = new BehaviorSubject('and');
33
+ // Subscriptions.
34
+ this._subscription = new Subscription();
35
+ }
36
+ ngOnInit() {
37
+ const check$ = combineLatest([this._permission$, this._mode$]).pipe(switchMap(([permissions, mode]) => this._permissions.has(permissions, { mode })), distinctUntilChanged());
38
+ const subscription = check$.subscribe(valid => {
39
+ this._valid = valid;
40
+ this.updateView();
41
+ });
42
+ this._subscription.add(subscription);
43
+ }
44
+ ngOnDestroy() {
45
+ this._subscription?.unsubscribe();
46
+ }
47
+ updateView() {
48
+ if (this._valid) {
49
+ if (!this._thenViewRef) {
50
+ this._viewContainerRef.clear();
51
+ this._elseViewRef = null;
52
+ if (this._templateRef) {
53
+ this._thenViewRef = this._viewContainerRef.createEmbeddedView(this._templateRef);
54
+ }
55
+ }
56
+ }
57
+ else {
58
+ if (!this._elseViewRef) {
59
+ this._viewContainerRef.clear();
60
+ this._thenViewRef = null;
61
+ if (this._elseTemplateRef) {
62
+ this._elseViewRef = this._viewContainerRef.createEmbeddedView(this._elseTemplateRef);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ assertTemplate(property, templateRef) {
68
+ const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);
69
+ if (!isTemplateRefOrNull) {
70
+ throw new Error(`${property} must be a TemplateRef.`);
71
+ }
72
+ }
73
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BbPermission, deps: [{ token: i1.Permissions }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
74
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: BbPermission, selector: "[bbPermission]", inputs: { bbPermission: "bbPermission", bbPermissionElse: "bbPermissionElse", bbPermissionMode: "bbPermissionMode" }, ngImport: i0 }); }
75
+ }
76
+ export { BbPermission };
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BbPermission, decorators: [{
78
+ type: Directive,
79
+ args: [{
80
+ selector: '[bbPermission]'
81
+ }]
82
+ }], ctorParameters: function () { return [{ type: i1.Permissions }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { bbPermission: [{
83
+ type: Input
84
+ }], bbPermissionElse: [{
85
+ type: Input
86
+ }], bbPermissionMode: [{
87
+ type: Input
88
+ }] } });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL3Blcm1pc3Npb25zL3NyYy9saWIvZGlyZWN0aXZlcy9wZXJtaXNzaW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFtQixLQUFLLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7OztBQUkvRCxNQUdhLFlBQVk7SUFjckIsSUFDSSxZQUFZLENBQUMsS0FBd0I7UUFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFDSSxnQkFBZ0IsQ0FBQyxXQUE2QjtRQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUNJLGdCQUFnQixDQUFDLElBQXFCO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFLRCxZQUFvQixZQUF5QixFQUN6QixZQUE4QixFQUM5QixpQkFBbUM7UUFGbkMsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFwQ3ZELGFBQWE7UUFDTCxxQkFBZ0IsR0FBNEIsSUFBSSxDQUFDO1FBRXpELGFBQWE7UUFDTCxpQkFBWSxHQUFnQyxJQUFJLENBQUM7UUFDakQsaUJBQVksR0FBZ0MsSUFBSSxDQUFDO1FBRXpELFFBQVE7UUFDQSxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDakQsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFrQixLQUFLLENBQUMsQ0FBQztRQXFCN0QsaUJBQWlCO1FBQ1Qsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBSzNDLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9ELFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQzlFLG9CQUFvQixFQUFFLENBQ3pCLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU8sVUFBVTtRQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDcEY7YUFDSjtTQUNKO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2lCQUN4RjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQWdCLEVBQUUsV0FBb0M7UUFDekUsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEseUJBQXlCLENBQUMsQ0FBQztTQUN6RDtJQUNMLENBQUM7OEdBbkZRLFlBQVk7a0dBQVosWUFBWTs7U0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBSHhCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0I7MkpBZ0JPLFlBQVk7c0JBRGYsS0FBSztnQkFRRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBUUYsZ0JBQWdCO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVtYmVkZGVkVmlld1JlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQZXJtaXNzaW9uc01vZGV9IGZyb20gJy4uL3Blcm1pc3Npb25zLmludGVyZmFjZSc7XG5pbXBvcnQge1Blcm1pc3Npb25zfSBmcm9tICcuLi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbYmJQZXJtaXNzaW9uXSdcbn0pXG5leHBvcnQgY2xhc3MgQmJQZXJtaXNzaW9uIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgLy8gVGVtcGxhdGVzLlxuICAgIHByaXZhdGUgX2Vsc2VUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gVmlldyByZWZzLlxuICAgIHByaXZhdGUgX3RoZW5WaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2Vsc2VWaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gRGF0YS5cbiAgICBwcml2YXRlIF92YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Blcm1pc3Npb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICAgIHByaXZhdGUgX21vZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQZXJtaXNzaW9uc01vZGU+KCdhbmQnKTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGJiUGVybWlzc2lvbih2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgICAgdGhpcy5fcGVybWlzc2lvbiQubmV4dChwZXJtaXNzaW9ucyk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGJiUGVybWlzc2lvbkVsc2UodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgdGhpcy5hc3NlcnRUZW1wbGF0ZSgnYmJQZXJtaXNzaW9uRWxzZScsIHRlbXBsYXRlUmVmKTtcbiAgICAgICAgdGhpcy5fZWxzZVRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGJiUGVybWlzc2lvbk1vZGUobW9kZTogUGVybWlzc2lvbnNNb2RlKSB7XG4gICAgICAgIHRoaXMuX21vZGUkLm5leHQobW9kZSk7XG4gICAgfVxuXG4gICAgLy8gU3Vic2NyaXB0aW9ucy5cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9wZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBjaGVjayQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9wZXJtaXNzaW9uJCwgdGhpcy5fbW9kZSRdKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChbcGVybWlzc2lvbnMsIG1vZGVdKSA9PiB0aGlzLl9wZXJtaXNzaW9ucy5oYXMocGVybWlzc2lvbnMsIHttb2RlfSkpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNoZWNrJC5zdWJzY3JpYmUodmFsaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdmFsaWQgPSB2YWxpZDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWaWV3KCkge1xuICAgICAgICBpZiAodGhpcy5fdmFsaWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fdGhlblZpZXdSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxzZVZpZXdSZWYgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aGVuVmlld1JlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2Vsc2VWaWV3UmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RoZW5WaWV3UmVmID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZWxzZVRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vsc2VWaWV3UmVmID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzc2VydFRlbXBsYXRlKHByb3BlcnR5OiBzdHJpbmcsIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkge1xuICAgICAgICBjb25zdCBpc1RlbXBsYXRlUmVmT3JOdWxsID0gISEoIXRlbXBsYXRlUmVmIHx8IHRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyk7XG4gICAgICAgIGlmICghaXNUZW1wbGF0ZVJlZk9yTnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5fSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYmJQZXJtaXNzaW9uOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYmJQZXJtaXNzaW9uRWxzZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYmJQZXJtaXNzaW9uTW9kZTogUGVybWlzc2lvbnNNb2RlO1xuXG59XG4iXX0=
@@ -0,0 +1,57 @@
1
+ import { Injectable, Optional } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import { of } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ import * as i2 from "../permissions.service";
7
+ import * as i3 from "../permissions.interface";
8
+ class BbPermissionGuard {
9
+ constructor(_router, _permissions, _config) {
10
+ this._router = _router;
11
+ this._permissions = _permissions;
12
+ this._config = _config;
13
+ }
14
+ canActivate(snapshot, state) {
15
+ const permission = snapshot?.data?.['permission'] ?? null;
16
+ const permission$ = this.parsePermission(permission);
17
+ return permission$.pipe(map(valid => {
18
+ if (valid) {
19
+ return true;
20
+ }
21
+ const onPermissionDeniedFn = this._config?.onPermissionDenied ?? null;
22
+ if (!onPermissionDeniedFn) {
23
+ return false;
24
+ }
25
+ const urlTree = onPermissionDeniedFn(this._router, snapshot, state);
26
+ if (!urlTree) {
27
+ return false;
28
+ }
29
+ return valid ? true : urlTree;
30
+ }));
31
+ }
32
+ canActivateChild(childRoute, state) {
33
+ return this.canActivate(childRoute, state);
34
+ }
35
+ parsePermission(data) {
36
+ if ((typeof ngDevMode === 'undefined' || ngDevMode) && (data === undefined || data === null)) {
37
+ console?.warn?.(`No "data.permission" property was passed.`);
38
+ return of(false);
39
+ }
40
+ if (Array.isArray(data) || typeof data === 'string') {
41
+ return this._permissions.has(data);
42
+ }
43
+ return this._permissions.has(data?.value, data?.options);
44
+ }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BbPermissionGuard, deps: [{ token: i1.Router }, { token: i2.Permissions }, { token: i3.PermissionsConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
46
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BbPermissionGuard, providedIn: 'root' }); }
47
+ }
48
+ export { BbPermissionGuard };
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: BbPermissionGuard, decorators: [{
50
+ type: Injectable,
51
+ args: [{
52
+ providedIn: 'root'
53
+ }]
54
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Permissions }, { type: i3.PermissionsConfig, decorators: [{
55
+ type: Optional
56
+ }] }]; } });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vcGVybWlzc2lvbnMvc3JjL2xpYi9ndWFyZHMvcGVybWlzc2lvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFJeEIsTUFHYSxpQkFBaUI7SUFFMUIsWUFBb0IsT0FBZSxFQUNmLFlBQXlCLEVBQ2IsT0FBMkI7UUFGdkMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ2IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7SUFDM0QsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQyxFQUFFLEtBQTBCO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDMUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQ25CLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNSLElBQUksS0FBSyxFQUFFO2dCQUNQLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFFRCxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBa0MsRUFBRSxLQUEwQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBb0Y7UUFDeEcsSUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQzFGLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQzdELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNqRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDOzhHQTlDUSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZkLE1BQU07O1NBRVQsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFLZ0IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQsIFJvdXRlciwgUm91dGVyU3RhdGVTbmFwc2hvdH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7UGVybWlzc2lvbnNPcHRpb25zLCBQZXJtaXNzaW9uc0NvbmZpZ30gZnJvbSAnLi4vcGVybWlzc2lvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7SW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQZXJtaXNzaW9uc30gZnJvbSAnLi4vcGVybWlzc2lvbnMuc2VydmljZSc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtvZn0gZnJvbSAncnhqcyc7XG5cbmRlY2xhcmUgbGV0IG5nRGV2TW9kZTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCYlBlcm1pc3Npb25HdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3Blcm1pc3Npb25zOiBQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb25maWc/OiBQZXJtaXNzaW9uc0NvbmZpZykge1xuICAgIH1cblxuICAgIGNhbkFjdGl2YXRlKHNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gc25hcHNob3Q/LmRhdGE/LlsncGVybWlzc2lvbiddID8/IG51bGw7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb24kID0gdGhpcy5wYXJzZVBlcm1pc3Npb24ocGVybWlzc2lvbik7XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9uJC5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbGlkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgb25QZXJtaXNzaW9uRGVuaWVkRm4gPSB0aGlzLl9jb25maWc/Lm9uUGVybWlzc2lvbkRlbmllZCA/PyBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghb25QZXJtaXNzaW9uRGVuaWVkRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHVybFRyZWUgPSBvblBlcm1pc3Npb25EZW5pZWRGbih0aGlzLl9yb3V0ZXIsIHNuYXBzaG90LCBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF1cmxUcmVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWQgPyB0cnVlIDogdXJsVHJlZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2FuQWN0aXZhdGVDaGlsZChjaGlsZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5BY3RpdmF0ZShjaGlsZFJvdXRlLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVBlcm1pc3Npb24oZGF0YTogc3RyaW5nIHwgc3RyaW5nW10gfCB7IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9ucz86IFBlcm1pc3Npb25zT3B0aW9ucyB9KSB7XG4gICAgICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpKSB7XG4gICAgICAgICAgICBjb25zb2xlPy53YXJuPy4oYE5vIFwiZGF0YS5wZXJtaXNzaW9uXCIgcHJvcGVydHkgd2FzIHBhc3NlZC5gKTtcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZXJtaXNzaW9ucy5oYXMoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fcGVybWlzc2lvbnMuaGFzKGRhdGE/LnZhbHVlLCBkYXRhPy5vcHRpb25zKTtcbiAgICB9XG5cbn1cbiJdfQ==