@bravura/ui 3.8.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/CHANGELOG.md +579 -557
  2. package/LICENSE +6 -6
  3. package/README.md +56 -54
  4. package/alert/alert-container.component.d.ts +1 -1
  5. package/alert/alert-message.component.d.ts +1 -1
  6. package/behavior/await.directive.d.ts +1 -1
  7. package/behavior/observe-content-class.directive.d.ts +1 -1
  8. package/behavior/sizing.directive.d.ts +1 -1
  9. package/clip-note/clip-note.directive.d.ts +1 -1
  10. package/currency-input/currency-input.directive.d.ts +1 -1
  11. package/decimal-input/decimal-input.directive.d.ts +1 -1
  12. package/discrete-input/discrete-input.component.d.ts +1 -1
  13. package/esm2022/alert/alert-container.component.mjs +207 -0
  14. package/esm2022/alert/alert-message.component.mjs +101 -0
  15. package/esm2022/alert/alert.module.mjs +22 -0
  16. package/{esm2020 → esm2022}/alert/public-api.mjs +1 -1
  17. package/esm2022/alert/testing/test-api.mjs +44 -0
  18. package/{esm2020 → esm2022}/behavior/await.directive.mjs +6 -6
  19. package/esm2022/behavior/behavior.module.mjs +37 -0
  20. package/{esm2020 → esm2022}/behavior/observe-content-class.directive.mjs +5 -5
  21. package/{esm2020 → esm2022}/behavior/public-api.mjs +1 -1
  22. package/esm2022/behavior/sizing-monitor.directive.mjs +31 -0
  23. package/esm2022/behavior/sizing.directive.mjs +256 -0
  24. package/esm2022/clip-note/clip-note.component.mjs +216 -0
  25. package/esm2022/clip-note/clip-note.directive.mjs +141 -0
  26. package/esm2022/clip-note/clip-note.module.mjs +32 -0
  27. package/{esm2020 → esm2022}/clip-note/public-api.mjs +1 -1
  28. package/{esm2020 → esm2022}/common/common-utils.mjs +1 -1
  29. package/{esm2020 → esm2022}/common/common.module.mjs +7 -7
  30. package/{esm2020 → esm2022}/common/public-api.mjs +1 -1
  31. package/{esm2020 → esm2022}/currency-input/currency-input.directive.mjs +6 -6
  32. package/esm2022/currency-input/currency-input.module.mjs +19 -0
  33. package/{esm2020 → esm2022}/currency-input/public-api.mjs +1 -1
  34. package/{esm2020 → esm2022}/decimal-input/decimal-input.directive.mjs +9 -9
  35. package/{esm2020 → esm2022}/decimal-input/decimal-input.module.mjs +5 -5
  36. package/esm2022/discrete-input/discrete-input.component.mjs +337 -0
  37. package/esm2022/discrete-input/discrete-input.module.mjs +21 -0
  38. package/{esm2020 → esm2022}/discrete-input/public-api.mjs +1 -1
  39. package/esm2022/file-upload/file-upload.component.mjs +400 -0
  40. package/esm2022/file-upload/file-upload.module.mjs +44 -0
  41. package/esm2022/file-upload/file-upload.service.mjs +29 -0
  42. package/{esm2020 → esm2022}/file-upload/public-api.mjs +1 -1
  43. package/esm2022/form-field/form-field.component.mjs +82 -0
  44. package/esm2022/form-field/form-field.module.mjs +33 -0
  45. package/{esm2020 → esm2022}/form-field/public-api.mjs +1 -1
  46. package/esm2022/icon-font/icon-font.module.mjs +22 -0
  47. package/{esm2020 → esm2022}/icon-font/icon.directive.mjs +5 -5
  48. package/{esm2020 → esm2022}/icon-font/public-api.mjs +1 -1
  49. package/{esm2020 → esm2022}/icon-font/utilities.mjs +1 -1
  50. package/esm2022/panel/panel-section.component.mjs +41 -0
  51. package/esm2022/panel/panel.component.mjs +87 -0
  52. package/esm2022/panel/panel.module.mjs +23 -0
  53. package/{esm2020 → esm2022}/panel/public-api.mjs +1 -1
  54. package/esm2022/panel/tinted.directive.mjs +60 -0
  55. package/esm2022/phone-number/phone-number.directive.mjs +188 -0
  56. package/{esm2020 → esm2022}/phone-number/phone-number.module.mjs +5 -5
  57. package/{esm2020 → esm2022}/phone-number/phone-number.pipe.mjs +6 -6
  58. package/esm2022/phone-number/phone-number.validator.mjs +64 -0
  59. package/{esm2020 → esm2022}/phone-number/public-api.mjs +1 -1
  60. package/{esm2020 → esm2022}/public-api.mjs +1 -1
  61. package/esm2022/radio-panel/radio-panel-item.component.mjs +93 -0
  62. package/esm2022/radio-panel/radio-panel.component.mjs +81 -0
  63. package/{esm2020 → esm2022}/radio-panel/radio-panel.module.mjs +5 -5
  64. package/esm2022/radio-panel/testing/test-api.mjs +46 -0
  65. package/{esm2020 → esm2022}/selection-panel/public-api.mjs +1 -1
  66. package/esm2022/selection-panel/selection-panel-item.component.mjs +166 -0
  67. package/esm2022/selection-panel/selection-panel.directive.mjs +119 -0
  68. package/esm2022/selection-panel/selection-panel.module.mjs +23 -0
  69. package/{esm2020 → esm2022}/skeletons/public-api.mjs +1 -1
  70. package/esm2022/skeletons/skeleton-loader-presets.directive.mjs +83 -0
  71. package/{esm2020 → esm2022}/skeletons/skeleton-loader.component.mjs +5 -5
  72. package/esm2022/skeletons/skeletons.module.mjs +35 -0
  73. package/{esm2020 → esm2022}/stepper/public-api.mjs +1 -1
  74. package/{esm2020 → esm2022}/stepper/stepper-animation.mjs +1 -1
  75. package/esm2022/stepper/stepper.component.mjs +176 -0
  76. package/esm2022/stepper/stepper.module.mjs +52 -0
  77. package/{esm2020 → esm2022}/tooltip/public-api.mjs +1 -1
  78. package/esm2022/tooltip/tooltip.component.mjs +63 -0
  79. package/esm2022/tooltip/tooltip.directive.mjs +148 -0
  80. package/esm2022/tooltip/tooltip.module.mjs +25 -0
  81. package/{fesm2020 → fesm2022}/bravura-ui-alert-testing.mjs +2 -2
  82. package/fesm2022/bravura-ui-alert-testing.mjs.map +1 -0
  83. package/fesm2022/bravura-ui-alert.mjs +327 -0
  84. package/fesm2022/bravura-ui-alert.mjs.map +1 -0
  85. package/{fesm2020 → fesm2022}/bravura-ui-behavior.mjs +45 -45
  86. package/fesm2022/bravura-ui-behavior.mjs.map +1 -0
  87. package/{fesm2020 → fesm2022}/bravura-ui-clip-note.mjs +70 -70
  88. package/fesm2022/bravura-ui-clip-note.mjs.map +1 -0
  89. package/{fesm2020 → fesm2022}/bravura-ui-common.mjs +6 -6
  90. package/fesm2022/bravura-ui-common.mjs.map +1 -0
  91. package/{fesm2020 → fesm2022}/bravura-ui-currency-input.mjs +11 -11
  92. package/fesm2022/bravura-ui-currency-input.mjs.map +1 -0
  93. package/{fesm2020 → fesm2022}/bravura-ui-decimal-input.mjs +12 -12
  94. package/fesm2022/bravura-ui-decimal-input.mjs.map +1 -0
  95. package/{fesm2020 → fesm2022}/bravura-ui-discrete-input.mjs +48 -48
  96. package/fesm2022/bravura-ui-discrete-input.mjs.map +1 -0
  97. package/fesm2022/bravura-ui-file-upload.mjs +474 -0
  98. package/fesm2022/bravura-ui-file-upload.mjs.map +1 -0
  99. package/{fesm2020 → fesm2022}/bravura-ui-form-field.mjs +19 -19
  100. package/fesm2022/bravura-ui-form-field.mjs.map +1 -0
  101. package/{fesm2020 → fesm2022}/bravura-ui-icon-font.mjs +8 -8
  102. package/fesm2022/bravura-ui-icon-font.mjs.map +1 -0
  103. package/fesm2022/bravura-ui-panel.mjs +206 -0
  104. package/fesm2022/bravura-ui-panel.mjs.map +1 -0
  105. package/{fesm2020 → fesm2022}/bravura-ui-phone-number.mjs +30 -30
  106. package/fesm2022/bravura-ui-phone-number.mjs.map +1 -0
  107. package/{fesm2020 → fesm2022}/bravura-ui-radio-panel-testing.mjs +5 -6
  108. package/fesm2022/bravura-ui-radio-panel-testing.mjs.map +1 -0
  109. package/{fesm2020 → fesm2022}/bravura-ui-radio-panel.mjs +31 -31
  110. package/fesm2022/bravura-ui-radio-panel.mjs.map +1 -0
  111. package/fesm2022/bravura-ui-selection-panel.mjs +306 -0
  112. package/fesm2022/bravura-ui-selection-panel.mjs.map +1 -0
  113. package/{fesm2020 → fesm2022}/bravura-ui-skeletons.mjs +43 -43
  114. package/fesm2022/bravura-ui-skeletons.mjs.map +1 -0
  115. package/fesm2022/bravura-ui-stepper.mjs +251 -0
  116. package/fesm2022/bravura-ui-stepper.mjs.map +1 -0
  117. package/{fesm2020 → fesm2022}/bravura-ui-tooltip.mjs +32 -24
  118. package/fesm2022/bravura-ui-tooltip.mjs.map +1 -0
  119. package/fesm2022/bravura-ui.mjs.map +1 -0
  120. package/file-upload/file-upload.component.d.ts +1 -1
  121. package/form-field/form-field.component.d.ts +1 -1
  122. package/icon-font/icon.directive.d.ts +1 -1
  123. package/package.json +76 -120
  124. package/panel/panel.component.d.ts +1 -1
  125. package/panel/tinted.directive.d.ts +1 -1
  126. package/phone-number/phone-number.directive.d.ts +1 -1
  127. package/phone-number/phone-number.validator.d.ts +2 -2
  128. package/radio-panel/radio-panel-item.component.d.ts +1 -1
  129. package/radio-panel/radio-panel.component.d.ts +1 -1
  130. package/radio-panel/testing/test-api.d.ts +2 -3
  131. package/selection-panel/selection-panel-item.component.d.ts +1 -1
  132. package/selection-panel/selection-panel.directive.d.ts +1 -1
  133. package/skeletons/skeleton-loader-presets.directive.d.ts +3 -3
  134. package/stepper/stepper.component.d.ts +1 -1
  135. package/theme/_bui-card.scss +56 -56
  136. package/theme/_ui-theme.scss +112 -112
  137. package/theme/global-style-by-bootstrap.scss +3 -3
  138. package/theme/global-style-by-tailwind.scss +3 -3
  139. package/theme/scrollbar.scss +40 -40
  140. package/tooltip/tooltip.component.d.ts +2 -0
  141. package/tooltip/tooltip.directive.d.ts +3 -5
  142. package/esm2020/alert/alert-container.component.mjs +0 -207
  143. package/esm2020/alert/alert-message.component.mjs +0 -102
  144. package/esm2020/alert/alert.module.mjs +0 -22
  145. package/esm2020/alert/testing/test-api.mjs +0 -44
  146. package/esm2020/behavior/behavior.module.mjs +0 -37
  147. package/esm2020/behavior/sizing-monitor.directive.mjs +0 -31
  148. package/esm2020/behavior/sizing.directive.mjs +0 -256
  149. package/esm2020/clip-note/clip-note.component.mjs +0 -216
  150. package/esm2020/clip-note/clip-note.directive.mjs +0 -141
  151. package/esm2020/clip-note/clip-note.module.mjs +0 -32
  152. package/esm2020/currency-input/currency-input.module.mjs +0 -19
  153. package/esm2020/discrete-input/discrete-input.component.mjs +0 -337
  154. package/esm2020/discrete-input/discrete-input.module.mjs +0 -21
  155. package/esm2020/file-upload/file-upload.component.mjs +0 -400
  156. package/esm2020/file-upload/file-upload.module.mjs +0 -44
  157. package/esm2020/file-upload/file-upload.service.mjs +0 -29
  158. package/esm2020/form-field/form-field.component.mjs +0 -82
  159. package/esm2020/form-field/form-field.module.mjs +0 -33
  160. package/esm2020/icon-font/icon-font.module.mjs +0 -22
  161. package/esm2020/panel/panel-section.component.mjs +0 -41
  162. package/esm2020/panel/panel.component.mjs +0 -87
  163. package/esm2020/panel/panel.module.mjs +0 -23
  164. package/esm2020/panel/tinted.directive.mjs +0 -60
  165. package/esm2020/phone-number/phone-number.directive.mjs +0 -188
  166. package/esm2020/phone-number/phone-number.validator.mjs +0 -64
  167. package/esm2020/radio-panel/radio-panel-item.component.mjs +0 -93
  168. package/esm2020/radio-panel/radio-panel.component.mjs +0 -81
  169. package/esm2020/radio-panel/testing/test-api.mjs +0 -47
  170. package/esm2020/selection-panel/selection-panel-item.component.mjs +0 -166
  171. package/esm2020/selection-panel/selection-panel.directive.mjs +0 -119
  172. package/esm2020/selection-panel/selection-panel.module.mjs +0 -23
  173. package/esm2020/skeletons/skeleton-loader-presets.directive.mjs +0 -83
  174. package/esm2020/skeletons/skeletons.module.mjs +0 -35
  175. package/esm2020/stepper/stepper.component.mjs +0 -176
  176. package/esm2020/stepper/stepper.module.mjs +0 -52
  177. package/esm2020/tooltip/tooltip.component.mjs +0 -54
  178. package/esm2020/tooltip/tooltip.directive.mjs +0 -149
  179. package/esm2020/tooltip/tooltip.module.mjs +0 -25
  180. package/fesm2015/bravura-ui-alert-testing.mjs +0 -64
  181. package/fesm2015/bravura-ui-alert-testing.mjs.map +0 -1
  182. package/fesm2015/bravura-ui-alert.mjs +0 -340
  183. package/fesm2015/bravura-ui-alert.mjs.map +0 -1
  184. package/fesm2015/bravura-ui-behavior.mjs +0 -515
  185. package/fesm2015/bravura-ui-behavior.mjs.map +0 -1
  186. package/fesm2015/bravura-ui-clip-note.mjs +0 -393
  187. package/fesm2015/bravura-ui-clip-note.mjs.map +0 -1
  188. package/fesm2015/bravura-ui-common.mjs +0 -96
  189. package/fesm2015/bravura-ui-common.mjs.map +0 -1
  190. package/fesm2015/bravura-ui-currency-input.mjs +0 -300
  191. package/fesm2015/bravura-ui-currency-input.mjs.map +0 -1
  192. package/fesm2015/bravura-ui-decimal-input.mjs +0 -145
  193. package/fesm2015/bravura-ui-decimal-input.mjs.map +0 -1
  194. package/fesm2015/bravura-ui-discrete-input.mjs +0 -365
  195. package/fesm2015/bravura-ui-discrete-input.mjs.map +0 -1
  196. package/fesm2015/bravura-ui-file-upload.mjs +0 -478
  197. package/fesm2015/bravura-ui-file-upload.mjs.map +0 -1
  198. package/fesm2015/bravura-ui-form-field.mjs +0 -120
  199. package/fesm2015/bravura-ui-form-field.mjs.map +0 -1
  200. package/fesm2015/bravura-ui-icon-font.mjs +0 -178
  201. package/fesm2015/bravura-ui-icon-font.mjs.map +0 -1
  202. package/fesm2015/bravura-ui-panel.mjs +0 -210
  203. package/fesm2015/bravura-ui-panel.mjs.map +0 -1
  204. package/fesm2015/bravura-ui-phone-number.mjs +0 -327
  205. package/fesm2015/bravura-ui-phone-number.mjs.map +0 -1
  206. package/fesm2015/bravura-ui-radio-panel-testing.mjs +0 -63
  207. package/fesm2015/bravura-ui-radio-panel-testing.mjs.map +0 -1
  208. package/fesm2015/bravura-ui-radio-panel.mjs +0 -200
  209. package/fesm2015/bravura-ui-radio-panel.mjs.map +0 -1
  210. package/fesm2015/bravura-ui-selection-panel.mjs +0 -311
  211. package/fesm2015/bravura-ui-selection-panel.mjs.map +0 -1
  212. package/fesm2015/bravura-ui-skeletons.mjs +0 -195
  213. package/fesm2015/bravura-ui-skeletons.mjs.map +0 -1
  214. package/fesm2015/bravura-ui-stepper.mjs +0 -253
  215. package/fesm2015/bravura-ui-stepper.mjs.map +0 -1
  216. package/fesm2015/bravura-ui-tooltip.mjs +0 -229
  217. package/fesm2015/bravura-ui-tooltip.mjs.map +0 -1
  218. package/fesm2015/bravura-ui.mjs.map +0 -1
  219. package/fesm2020/bravura-ui-alert-testing.mjs.map +0 -1
  220. package/fesm2020/bravura-ui-alert.mjs +0 -328
  221. package/fesm2020/bravura-ui-alert.mjs.map +0 -1
  222. package/fesm2020/bravura-ui-behavior.mjs.map +0 -1
  223. package/fesm2020/bravura-ui-clip-note.mjs.map +0 -1
  224. package/fesm2020/bravura-ui-common.mjs.map +0 -1
  225. package/fesm2020/bravura-ui-currency-input.mjs.map +0 -1
  226. package/fesm2020/bravura-ui-decimal-input.mjs.map +0 -1
  227. package/fesm2020/bravura-ui-discrete-input.mjs.map +0 -1
  228. package/fesm2020/bravura-ui-file-upload.mjs +0 -474
  229. package/fesm2020/bravura-ui-file-upload.mjs.map +0 -1
  230. package/fesm2020/bravura-ui-form-field.mjs.map +0 -1
  231. package/fesm2020/bravura-ui-icon-font.mjs.map +0 -1
  232. package/fesm2020/bravura-ui-panel.mjs +0 -206
  233. package/fesm2020/bravura-ui-panel.mjs.map +0 -1
  234. package/fesm2020/bravura-ui-phone-number.mjs.map +0 -1
  235. package/fesm2020/bravura-ui-radio-panel-testing.mjs.map +0 -1
  236. package/fesm2020/bravura-ui-radio-panel.mjs.map +0 -1
  237. package/fesm2020/bravura-ui-selection-panel.mjs +0 -306
  238. package/fesm2020/bravura-ui-selection-panel.mjs.map +0 -1
  239. package/fesm2020/bravura-ui-skeletons.mjs.map +0 -1
  240. package/fesm2020/bravura-ui-stepper.mjs +0 -251
  241. package/fesm2020/bravura-ui-stepper.mjs.map +0 -1
  242. package/fesm2020/bravura-ui-tooltip.mjs.map +0 -1
  243. package/fesm2020/bravura-ui.mjs +0 -8
  244. package/fesm2020/bravura-ui.mjs.map +0 -1
  245. /package/{esm2020 → esm2022}/alert/bravura-ui-alert.mjs +0 -0
  246. /package/{esm2020 → esm2022}/alert/testing/bravura-ui-alert-testing.mjs +0 -0
  247. /package/{esm2020 → esm2022}/behavior/bravura-ui-behavior.mjs +0 -0
  248. /package/{esm2020 → esm2022}/bravura-ui.mjs +0 -0
  249. /package/{esm2020 → esm2022}/clip-note/bravura-ui-clip-note.mjs +0 -0
  250. /package/{esm2020 → esm2022}/common/bravura-ui-common.mjs +0 -0
  251. /package/{esm2020 → esm2022}/currency-input/bravura-ui-currency-input.mjs +0 -0
  252. /package/{esm2020 → esm2022}/decimal-input/bravura-ui-decimal-input.mjs +0 -0
  253. /package/{esm2020 → esm2022}/decimal-input/public-api.mjs +0 -0
  254. /package/{esm2020 → esm2022}/discrete-input/bravura-ui-discrete-input.mjs +0 -0
  255. /package/{esm2020 → esm2022}/file-upload/bravura-ui-file-upload.mjs +0 -0
  256. /package/{esm2020 → esm2022}/form-field/bravura-ui-form-field.mjs +0 -0
  257. /package/{esm2020 → esm2022}/icon-font/bravura-ui-icon-font.mjs +0 -0
  258. /package/{esm2020 → esm2022}/panel/bravura-ui-panel.mjs +0 -0
  259. /package/{esm2020 → esm2022}/phone-number/bravura-ui-phone-number.mjs +0 -0
  260. /package/{esm2020 → esm2022}/radio-panel/bravura-ui-radio-panel.mjs +0 -0
  261. /package/{esm2020 → esm2022}/radio-panel/public-api.mjs +0 -0
  262. /package/{esm2020 → esm2022}/radio-panel/testing/bravura-ui-radio-panel-testing.mjs +0 -0
  263. /package/{esm2020 → esm2022}/selection-panel/bravura-ui-selection-panel.mjs +0 -0
  264. /package/{esm2020 → esm2022}/skeletons/bravura-ui-skeletons.mjs +0 -0
  265. /package/{esm2020 → esm2022}/stepper/bravura-ui-stepper.mjs +0 -0
  266. /package/{esm2020 → esm2022}/tooltip/bravura-ui-tooltip.mjs +0 -0
  267. /package/{fesm2015 → fesm2022}/bravura-ui.mjs +0 -0
package/LICENSE CHANGED
@@ -1,7 +1,7 @@
1
- ISC License
2
-
3
- Copyright 2021 Bravura Solutions
4
-
5
- Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
6
-
1
+ ISC License
2
+
3
+ Copyright 2021 Bravura Solutions
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
6
+
7
7
  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md CHANGED
@@ -1,54 +1,56 @@
1
- # Bravura UI Components for Angular applications
2
-
3
- This package contains a set of UI components built on top of [Angular Material library and Component Development Kit](https://material.angular.io/). It supplements Angular Material in implementing Bravura UX Design System, which is an extension of the latest [Material Design Specification](https://material.io/design).
4
-
5
- [Storybook on Chromatic](https://master--611486a592e16a003b62f4ad.chromatic.com)
6
-
7
- ## Angular version compatibility
8
-
9
- | BUI versions | Compatible Angular versions |
10
- | ------------ | --------------------------- |
11
- | ^3.0.0 | 15, 16 |
12
- | ^2.0.0 | 14 |
13
- | ^1.15.x | 12, 13 |
14
- | 1 .. 1.14.x | 12 |
15
-
16
- ### MDC-based releases
17
-
18
- From version 3.0 onward, the package `@bravura/ui` is only compatible with `@angular/components` 15.1 and up, which is based on the Offical Material Design Components for web. Please refer to [this document](https://material.angular.io/guide/mdc-migration) for more information.
19
-
20
- To continue to use `@bravura/ui` at the latest version in your Angular projects, you must upgrade both Angular and Angular Material packages to version 15 or later. You must also you run the migration tool to switch from the legacy component implementations to the new MDC-based ones. The legacy components from `@angular/components` are no longer supported.
21
-
22
- ## Setup
23
-
24
- Install the package in your Angular project by using one of the commands below, according to the package manager chosen.
25
-
26
- NPM:
27
-
28
- ```
29
- npm install --save @bravura/ui
30
- ```
31
-
32
- Yarn:
33
-
34
- ```
35
- yarn add @bravura/ui
36
- ```
37
-
38
- Import the `NgModule` from one of the sub-packages where the component is provided. For example:
39
-
40
- ```typescript
41
- @import {RadioPanelModule} from '@bravura/ui/radio-panel'
42
- @NgModule({
43
- declarations: [MyComponent],
44
- imports: [RadioPanelModule]
45
- })
46
- export class MyModule {}
47
-
48
- ```
49
-
50
- ## Theming
51
-
52
- To incorporate components' theming with Angular Material, you need to configure a custom theme, following the [theming guide on the Angular Material document site](https://material.angular.io/guide/theming#custom-themes-with-sass). In the global style SASS partial where the Material theme is configured, add the BUI theme mixin reference to activate theming.
53
-
54
- You may also need to include the CSS of custom font definitions for [Material Icon Font](https://fonts.google.com/icons) into the global stylesheets.
1
+ # Bravura UI Components for Angular applications
2
+
3
+ This package contains a set of UI components built on top of [Angular Material library and Component Development Kit](https://material.angular.io/). It supplements Angular Material in implementing Bravura UX Design System, which is an extension of the latest [Material Design Specification](https://material.io/design).
4
+
5
+ [Storybook on Chromatic](https://master--611486a592e16a003b62f4ad.chromatic.com)
6
+
7
+ ## Angular version compatibility
8
+
9
+ | BUI versions | Compatible Angular versions |
10
+ | ------------ | --------------------------- |
11
+ | ^5.0.0 | 17 |
12
+ | ^4.0.0 | 16 |
13
+ | ^3.0.0 | 15, 16 |
14
+ | ^2.0.0 | 14 |
15
+ | ^1.15.x | 12, 13 |
16
+ | 1 .. 1.14.x | 12 |
17
+
18
+ ### MDC-based releases
19
+
20
+ From version 3.0 onward, the package `@bravura/ui` is only compatible with `@angular/components` 15.1 and up, which is based on the Offical Material Design Components for web. Please refer to [this document](https://material.angular.io/guide/mdc-migration) for more information.
21
+
22
+ To continue to use `@bravura/ui` at the latest version in your Angular projects, you must upgrade both Angular and Angular Material packages to version 15 or later. You must also you run the migration tool to switch from the legacy component implementations to the new MDC-based ones. The legacy components from `@angular/components` are no longer supported.
23
+
24
+ ## Setup
25
+
26
+ Install the package in your Angular project by using one of the commands below, according to the package manager chosen.
27
+
28
+ NPM:
29
+
30
+ ```
31
+ npm install --save @bravura/ui
32
+ ```
33
+
34
+ Yarn:
35
+
36
+ ```
37
+ yarn add @bravura/ui
38
+ ```
39
+
40
+ Import the `NgModule` from one of the sub-packages where the component is provided. For example:
41
+
42
+ ```typescript
43
+ @import {RadioPanelModule} from '@bravura/ui/radio-panel'
44
+ @NgModule({
45
+ declarations: [MyComponent],
46
+ imports: [RadioPanelModule]
47
+ })
48
+ export class MyModule {}
49
+
50
+ ```
51
+
52
+ ## Theming
53
+
54
+ To incorporate components' theming with Angular Material, you need to configure a custom theme, following the [theming guide on the Angular Material document site](https://material.angular.io/guide/theming#custom-themes-with-sass). In the global style SASS partial where the Material theme is configured, add the BUI theme mixin reference to activate theming.
55
+
56
+ You may also need to include the CSS of custom font definitions for [Material Icon Font](https://fonts.google.com/icons) into the global stylesheets.
@@ -66,6 +66,6 @@ export declare class AlertContainerComponent implements OnInit, OnDestroy {
66
66
  clear(): Promise<void>;
67
67
  private _endFloating;
68
68
  static ɵfac: i0.ɵɵFactoryDeclaration<AlertContainerComponent, never>;
69
- static ɵcmp: i0.ɵɵComponentDeclaration<AlertContainerComponent, "bui-alert-container", never, { "max": "max"; "outsideViewportBehavior": "outsideViewportBehavior"; "floatDuration": "floatDuration"; }, { "init": "init"; }, never, never, false, never>;
69
+ static ɵcmp: i0.ɵɵComponentDeclaration<AlertContainerComponent, "bui-alert-container", never, { "max": { "alias": "max"; "required": false; }; "outsideViewportBehavior": { "alias": "outsideViewportBehavior"; "required": false; }; "floatDuration": { "alias": "floatDuration"; "required": false; }; }, { "init": "init"; }, never, never, false, never>;
70
70
  }
71
71
  export {};
@@ -43,5 +43,5 @@ export declare class AlertMessageComponent implements OnInit {
43
43
  /** @ignore */
44
44
  _dismiss(): void;
45
45
  static ɵfac: i0.ɵɵFactoryDeclaration<AlertMessageComponent, never>;
46
- static ɵcmp: i0.ɵɵComponentDeclaration<AlertMessageComponent, "bui-alert", never, { "type": "type"; "message": "message"; "politeness": "politeness"; "dismissible": "dismissible"; "_id": "id"; }, { "dismissed": "dismissed"; "initialised": "initialised"; }, never, ["*"], false, never>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<AlertMessageComponent, "bui-alert", never, { "type": { "alias": "type"; "required": false; }; "message": { "alias": "message"; "required": false; }; "politeness": { "alias": "politeness"; "required": false; }; "dismissible": { "alias": "dismissible"; "required": false; }; "_id": { "alias": "id"; "required": false; }; }, { "dismissed": "dismissed"; "initialised": "initialised"; }, never, ["*"], false, never>;
47
47
  }
@@ -67,5 +67,5 @@ export declare class AwaitDirective implements AfterViewInit, DoCheck {
67
67
  private get _isDeterminate();
68
68
  private _statusChanged;
69
69
  static ɵfac: i0.ɵɵFactoryDeclaration<AwaitDirective, [null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, null, null]>;
70
- static ɵdir: i0.ɵɵDirectiveDeclaration<AwaitDirective, "[buiAwait]", never, { "buiAwait": "buiAwait"; "buiAwaitAriaLabel": "buiAwaitAriaLabel"; "buiAwaitDiameter": "buiAwaitDiameter"; }, {}, never, never, false, never>;
70
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AwaitDirective, "[buiAwait]", never, { "buiAwait": { "alias": "buiAwait"; "required": false; }; "buiAwaitAriaLabel": { "alias": "buiAwaitAriaLabel"; "required": false; }; "buiAwaitDiameter": { "alias": "buiAwaitDiameter"; "required": false; }; }, {}, never, never, false, never>;
71
71
  }
@@ -25,5 +25,5 @@ export declare class ObserveContentClassDirective implements OnDestroy, OnInit {
25
25
  private checkClassWith;
26
26
  private addClass;
27
27
  static ɵfac: i0.ɵɵFactoryDeclaration<ObserveContentClassDirective, never>;
28
- static ɵdir: i0.ɵɵDirectiveDeclaration<ObserveContentClassDirective, "[bui-class.empty],[bui-class.not-empty],[bui-class.no-text],[bui-class.has-text]", never, { "classEmpty": "bui-class.empty"; "classNotEmpty": "bui-class.not-empty"; "classNoText": "bui-class.no-text"; "classHasText": "bui-class.has-text"; }, {}, never, never, false, never>;
28
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ObserveContentClassDirective, "[bui-class.empty],[bui-class.not-empty],[bui-class.no-text],[bui-class.has-text]", never, { "classEmpty": { "alias": "bui-class.empty"; "required": false; }; "classNotEmpty": { "alias": "bui-class.not-empty"; "required": false; }; "classNoText": { "alias": "bui-class.no-text"; "required": false; }; "classHasText": { "alias": "bui-class.has-text"; "required": false; }; }, {}, never, never, false, never>;
29
29
  }
@@ -94,5 +94,5 @@ export declare class SizingDirective implements OnChanges, OnDestroy {
94
94
  private _reflowHeight;
95
95
  private _toNumber;
96
96
  static ɵfac: i0.ɵɵFactoryDeclaration<SizingDirective, [null, { optional: true; }, null, null]>;
97
- static ɵdir: i0.ɵɵDirectiveDeclaration<SizingDirective, "[buiSizing],[buiResized],[buiSizingBy],[buiFixedHeight]", never, { "buiSizing": "buiSizing"; "sizingBy": "sizingBy"; "buiSizingBy": "buiSizingBy"; "buiFixedHeight": "buiFixedHeight"; }, { "buiResized": "buiResized"; }, never, never, false, never>;
97
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SizingDirective, "[buiSizing],[buiResized],[buiSizingBy],[buiFixedHeight]", never, { "buiSizing": { "alias": "buiSizing"; "required": false; }; "sizingBy": { "alias": "sizingBy"; "required": false; }; "buiSizingBy": { "alias": "buiSizingBy"; "required": false; }; "buiFixedHeight": { "alias": "buiFixedHeight"; "required": false; }; }, { "buiResized": "buiResized"; }, never, never, false, never>;
98
98
  }
@@ -65,5 +65,5 @@ export declare class ClipNoteDirective implements AfterViewInit {
65
65
  close(): void;
66
66
  private _processContent;
67
67
  static ɵfac: i0.ɵɵFactoryDeclaration<ClipNoteDirective, [{ host: true; }, null, null]>;
68
- static ɵdir: i0.ɵɵDirectiveDeclaration<ClipNoteDirective, "[buiClipNote]", ["buiClipNote"], { "buiClipNote": "buiClipNote"; "buiClipNoteColor": "buiClipNoteColor"; "buiClipNoteIcon": "buiClipNoteIcon"; "buiClipNoteCaption": "buiClipNoteCaption"; }, { "buiClipNoteOpened": "buiClipNoteOpened"; "buiClipNoteClosed": "buiClipNoteClosed"; }, never, never, false, never>;
68
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ClipNoteDirective, "[buiClipNote]", ["buiClipNote"], { "buiClipNote": { "alias": "buiClipNote"; "required": false; }; "buiClipNoteColor": { "alias": "buiClipNoteColor"; "required": false; }; "buiClipNoteIcon": { "alias": "buiClipNoteIcon"; "required": false; }; "buiClipNoteCaption": { "alias": "buiClipNoteCaption"; "required": false; }; }, { "buiClipNoteOpened": "buiClipNoteOpened"; "buiClipNoteClosed": "buiClipNoteClosed"; }, never, never, false, never>;
69
69
  }
@@ -58,5 +58,5 @@ export declare class CurrencyInputDirective implements OnInit, OnChanges, Contro
58
58
  private _convert;
59
59
  private get _0Text();
60
60
  static ɵfac: i0.ɵɵFactoryDeclaration<CurrencyInputDirective, [{ self: true; }, null, null, null, { optional: true; }]>;
61
- static ɵdir: i0.ɵɵDirectiveDeclaration<CurrencyInputDirective, "input[buiCurrencyInput],input[currencyCode],input[data-type=currency]", never, { "allowNegative": "allowNegative"; "currencyCode": "currencyCode"; "baseUnitOnly": "baseUnitOnly"; "format": "format"; }, {}, never, never, false, never>;
61
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CurrencyInputDirective, "input[buiCurrencyInput],input[currencyCode],input[data-type=currency]", never, { "allowNegative": { "alias": "allowNegative"; "required": false; }; "currencyCode": { "alias": "currencyCode"; "required": false; }; "baseUnitOnly": { "alias": "baseUnitOnly"; "required": false; }; "format": { "alias": "format"; "required": false; }; }, {}, never, never, false, never>;
62
62
  }
@@ -28,5 +28,5 @@ export declare class DecimalInputDirective implements OnChanges, ControlValueAcc
28
28
  registerOnTouched(fn: any): void;
29
29
  private _resetDecimalPlaces;
30
30
  static ɵfac: i0.ɵɵFactoryDeclaration<DecimalInputDirective, [{ self: true; }, null]>;
31
- static ɵdir: i0.ɵɵDirectiveDeclaration<DecimalInputDirective, "input[buiDecimalInput]", never, { "buiDecimalInput": "buiDecimalInput"; }, {}, never, never, false, never>;
31
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DecimalInputDirective, "input[buiDecimalInput]", never, { "buiDecimalInput": { "alias": "buiDecimalInput"; "required": false; }; }, {}, never, never, false, never>;
32
32
  }
@@ -136,6 +136,6 @@ export declare class DiscreteInputComponent extends _DiscreteInputBase implement
136
136
  ngDoCheck(): void;
137
137
  private _replaceText;
138
138
  static ɵfac: i0.ɵɵFactoryDeclaration<DiscreteInputComponent, [null, null, { optional: true; }, { optional: true; self: true; }, { optional: true; }, { optional: true; }, null]>;
139
- static ɵcmp: i0.ɵɵComponentDeclaration<DiscreteInputComponent, "bui-discrete-input", never, { "type": "type"; "separator": "separator"; "accept": "accept"; "userAriaDescribedBy": "aria-describedby"; "autocomplete": "autocomplete"; "sizeSpec": "sizeSpec"; "placeholder": "placeholder"; "required": "required"; "disabled": "disabled"; "value": "value"; }, {}, never, never, false, never>;
139
+ static ɵcmp: i0.ɵɵComponentDeclaration<DiscreteInputComponent, "bui-discrete-input", never, { "type": { "alias": "type"; "required": false; }; "separator": { "alias": "separator"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "userAriaDescribedBy": { "alias": "aria-describedby"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "sizeSpec": { "alias": "sizeSpec"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, {}, never, never, false, never>;
140
140
  }
141
141
  export {};
@@ -0,0 +1,207 @@
1
+ import { animate, state, style, transition, trigger } from '@angular/animations';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { generateID, isElementInViewport } from '@bravura/ui/common';
4
+ import { Subject, timer } from 'rxjs';
5
+ import { delay, take, takeUntil, tap } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/cdk/scrolling";
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "./alert-message.component";
10
+ /**@internal */
11
+ class InternalAlertOject {
12
+ constructor(type, message) {
13
+ this.type = type;
14
+ this.message = message;
15
+ this.deleted = false;
16
+ this.id = `bui-alert-cont-alert-${generateID()}`;
17
+ }
18
+ }
19
+ /**
20
+ * Use this component in a designated area of a page for displaying notification messages
21
+ *
22
+ */
23
+ export class AlertContainerComponent {
24
+ constructor(zone, cdRef, _elementRef, scroll) {
25
+ this.zone = zone;
26
+ this.cdRef = cdRef;
27
+ this._elementRef = _elementRef;
28
+ this.scroll = scroll;
29
+ /** The maximum number of messages displayed in the container area. */
30
+ this.max = 5;
31
+ /**
32
+ * This property determines the behavior for displaying the notifications when the container is outside the viewport.
33
+ *
34
+ * `scroll`: The component will try to scroll to reveal the new notifications.
35
+ * `float`: The component will float the alert panel to the center of the screen for a couple of seconds and move it back to the original position.
36
+ */
37
+ this.outsideViewportBehavior = 'float';
38
+ /**
39
+ * The number of milliseconds for which the alert container will be floated when new notification arrives.
40
+ *
41
+ * This will only take effect when `outsideViewportBehavior` is set to `float` and the container is outside the viewport.
42
+ */
43
+ this.floatDuration = 2000;
44
+ /**@internal */
45
+ this._alerts = [];
46
+ /**@internal */
47
+ this._floated = false;
48
+ /**@internal */
49
+ this._floatPanelHidden = true;
50
+ /** @ignore Emits whenever the animation is started. */
51
+ this._animationStarted = new Subject();
52
+ /** @ignore Emits whenever the animation is done. */
53
+ this._animationEnded = new Subject();
54
+ this._destroyed$ = new Subject();
55
+ /** Emits the component instance after initialisation. */
56
+ this.init = new EventEmitter();
57
+ }
58
+ ngOnInit() {
59
+ const checkScroll = () => {
60
+ if (isElementInViewport(this._elementRef.nativeElement)) {
61
+ this._endFloating();
62
+ }
63
+ };
64
+ this.scroll
65
+ .ancestorScrolled(this._elementRef.nativeElement)
66
+ .pipe(takeUntil(this._destroyed$))
67
+ .subscribe(checkScroll);
68
+ checkScroll();
69
+ this.init.emit(this);
70
+ this.init.complete();
71
+ }
72
+ ngOnDestroy() {
73
+ this._destroyed$.next();
74
+ this._destroyed$.complete();
75
+ this._endFloatingSub?.unsubscribe();
76
+ }
77
+ /**@internal */
78
+ get _remaining() {
79
+ return this._alerts.filter(a => !a.deleted);
80
+ }
81
+ /**@internal */
82
+ get _width() {
83
+ return this._elementRef.nativeElement.clientWidth;
84
+ }
85
+ /** Add a message to the notification area */
86
+ async notify(type, message) {
87
+ this._endFloatingSub?.unsubscribe();
88
+ const duplicate = this._remaining.find(_a => message === _a.message);
89
+ if (duplicate) {
90
+ this._dismiss(duplicate);
91
+ }
92
+ const remaining = this._remaining;
93
+ if (remaining.length >= this.max) {
94
+ this._dismiss(remaining[0]);
95
+ }
96
+ const a = new InternalAlertOject(type, message);
97
+ await this._checkViewport();
98
+ this.zone.run(() => {
99
+ this._alerts.push(a);
100
+ this.cdRef.markForCheck();
101
+ });
102
+ }
103
+ /**@ignore */
104
+ async _checkViewport() {
105
+ if (!isElementInViewport(this._elementRef.nativeElement)) {
106
+ if (this.outsideViewportBehavior === 'float') {
107
+ const d = this._floated ? 0 : 100;
108
+ this._floated = true;
109
+ this._floatPanelHidden = false;
110
+ this._endFloating(this.floatDuration);
111
+ this.cdRef.markForCheck();
112
+ await timer(d).toPromise();
113
+ }
114
+ else {
115
+ this._elementRef.nativeElement.scrollIntoView({ block: 'start', behavior: 'smooth' });
116
+ }
117
+ }
118
+ }
119
+ /**@ignore */
120
+ async _dismiss(a) {
121
+ const id = a.id;
122
+ a.deleted = true;
123
+ this.cdRef.markForCheck();
124
+ await this._animationEnded.pipe(take(1)).toPromise();
125
+ this.zone.run(() => {
126
+ this._alerts = this._alerts.filter(_a => _a.id !== id);
127
+ this.cdRef.markForCheck();
128
+ });
129
+ }
130
+ /** Remove all messages currently displayed. */
131
+ async clear() {
132
+ await Promise.all(this._remaining.map(a => this._dismiss(a)));
133
+ this._endFloating();
134
+ }
135
+ _endFloating(_delay = 0) {
136
+ if (!this._floated) {
137
+ return;
138
+ }
139
+ this._endFloatingSub?.unsubscribe();
140
+ this._endFloatingSub = timer(_delay)
141
+ .pipe(tap(() => {
142
+ this._floated = false;
143
+ this.zone.run(() => this.cdRef.markForCheck());
144
+ }), delay(400))
145
+ .subscribe(() => {
146
+ this._floatPanelHidden = true;
147
+ this.zone.run(() => this.cdRef.markForCheck());
148
+ });
149
+ }
150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlertContainerComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.ScrollDispatcher }], target: i0.ɵɵFactoryTarget.Component }); }
151
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AlertContainerComponent, selector: "bui-alert-container", inputs: { max: "max", outsideViewportBehavior: "outsideViewportBehavior", floatDuration: "floatDuration" }, outputs: { init: "init" }, host: { properties: { "class": "'bui-alert-container bui-host bui-alert-container-' + (_remaining.length ? 'not-empty': 'empty')" } }, ngImport: i0, template: "<div\r\n\tclass=\"bui-alert-fixed-panel\"\r\n\t[style.opacity]=\"_floatPanelHidden ? 1 : 0\"\r\n\t[class.bui-alert-fixed-panel-blink]=\"outsideViewportBehavior === 'scroll'\"\r\n>\r\n\t<bui-alert\r\n\t\t*ngFor=\"let a of _alerts\"\r\n\t\t[id]=\"a.id\"\r\n\t\t[type]=\"a.type\"\r\n\t\t[message]=\"a.message\"\r\n\t\tdismissible\r\n\t\t[@alertTransition]=\"a.deleted ? 'hidden' : 'visible'\"\r\n\t\t(@alertTransition.start)=\"_animationStarted.next($event)\"\r\n\t\t(@alertTransition.done)=\"_animationEnded.next($event)\"\r\n\t\t(dismissed)=\"_dismiss(a)\"\r\n\t></bui-alert>\r\n</div>\r\n\r\n<div class=\"bui-alert-float-panel-frame\" [hidden]=\"_floatPanelHidden\" [class.bui-alert-float-panel-shaded]=\"_floated\">\r\n\t<div class=\"bui-alert-float-panel\" [style.max-width]=\"_width + 'px'\" [@floatTransition]=\"'visible'\" *ngIf=\"_floated\">\r\n\t\t<bui-alert\r\n\t\t\t*ngFor=\"let a of _alerts\"\r\n\t\t\t[id]=\"a.id\"\r\n\t\t\t[type]=\"a.type\"\r\n\t\t\t[message]=\"a.message\"\r\n\t\t\t[@alertTransition]=\"a.deleted ? 'hidden' : 'visible'\"\r\n\t\t></bui-alert>\r\n\t</div>\r\n</div>\r\n", styles: [".bui-alert:not(:first-of-type){margin-top:.5rem}:host(:not([hidden])){display:block}.bui-alert-fixed-panel{transition:opacity .2s ease-in}.bui-alert-fixed-panel.bui-alert-fixed-panel-blink .bui-alert:last-of-type{animation:blink 1s ease-in forwards}.bui-alert-float-panel-frame{position:fixed;z-index:1000;inset:0;justify-content:center;align-items:center;flex-direction:column;transition:background-color .4s cubic-bezier(.25,0,.55,.2)}.bui-alert-float-panel-frame:not([hidden]){display:flex}.bui-alert-float-panel-frame.bui-alert-float-panel-shaded{background-color:#00000080}.bui-alert-float-panel-frame .bui-alert{background-color:var(--bui-bg-card)}@keyframes blink{60%{opacity:1}70%{opacity:0}80%{opacity:1}90%{opacity:0}}\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.AlertMessageComponent, selector: "bui-alert", inputs: ["type", "message", "politeness", "dismissible", "id"], outputs: ["dismissed", "initialised"] }], animations: [
152
+ trigger('floatTransition', [
153
+ transition(':enter', [style({ opacity: '0', transform: 'translateY(-10vh)' }), animate('.3s ease-in')]),
154
+ transition(':leave', [animate('.4s ease-out', style({ transform: 'translateY(-10vh)', opacity: '0' }))])
155
+ ]),
156
+ trigger('alertTransition', [
157
+ state('visible', style({})),
158
+ state('hidden', style({
159
+ height: 0,
160
+ overflow: 'hidden',
161
+ transform: 'scaleY(0)',
162
+ opacity: 0,
163
+ 'margin-top': '-1rem'
164
+ })),
165
+ transition('void => visible', [
166
+ style({ transform: 'translateY(100%)', height: 0, opacity: '0', overflow: 'hidden' }),
167
+ animate('250ms cubic-bezier(0.42, 0.0, 0.58, 1.0)')
168
+ ]),
169
+ transition('visible => hidden', [animate('250ms cubic-bezier(0.25, 0, 0.3, 1.0)')])
170
+ ])
171
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
172
+ }
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlertContainerComponent, decorators: [{
174
+ type: Component,
175
+ args: [{ selector: 'bui-alert-container', host: {
176
+ '[class]': `'bui-alert-container bui-host bui-alert-container-' + (_remaining.length ? 'not-empty': 'empty')`
177
+ }, changeDetection: ChangeDetectionStrategy.OnPush, animations: [
178
+ trigger('floatTransition', [
179
+ transition(':enter', [style({ opacity: '0', transform: 'translateY(-10vh)' }), animate('.3s ease-in')]),
180
+ transition(':leave', [animate('.4s ease-out', style({ transform: 'translateY(-10vh)', opacity: '0' }))])
181
+ ]),
182
+ trigger('alertTransition', [
183
+ state('visible', style({})),
184
+ state('hidden', style({
185
+ height: 0,
186
+ overflow: 'hidden',
187
+ transform: 'scaleY(0)',
188
+ opacity: 0,
189
+ 'margin-top': '-1rem'
190
+ })),
191
+ transition('void => visible', [
192
+ style({ transform: 'translateY(100%)', height: 0, opacity: '0', overflow: 'hidden' }),
193
+ animate('250ms cubic-bezier(0.42, 0.0, 0.58, 1.0)')
194
+ ]),
195
+ transition('visible => hidden', [animate('250ms cubic-bezier(0.25, 0, 0.3, 1.0)')])
196
+ ])
197
+ ], template: "<div\r\n\tclass=\"bui-alert-fixed-panel\"\r\n\t[style.opacity]=\"_floatPanelHidden ? 1 : 0\"\r\n\t[class.bui-alert-fixed-panel-blink]=\"outsideViewportBehavior === 'scroll'\"\r\n>\r\n\t<bui-alert\r\n\t\t*ngFor=\"let a of _alerts\"\r\n\t\t[id]=\"a.id\"\r\n\t\t[type]=\"a.type\"\r\n\t\t[message]=\"a.message\"\r\n\t\tdismissible\r\n\t\t[@alertTransition]=\"a.deleted ? 'hidden' : 'visible'\"\r\n\t\t(@alertTransition.start)=\"_animationStarted.next($event)\"\r\n\t\t(@alertTransition.done)=\"_animationEnded.next($event)\"\r\n\t\t(dismissed)=\"_dismiss(a)\"\r\n\t></bui-alert>\r\n</div>\r\n\r\n<div class=\"bui-alert-float-panel-frame\" [hidden]=\"_floatPanelHidden\" [class.bui-alert-float-panel-shaded]=\"_floated\">\r\n\t<div class=\"bui-alert-float-panel\" [style.max-width]=\"_width + 'px'\" [@floatTransition]=\"'visible'\" *ngIf=\"_floated\">\r\n\t\t<bui-alert\r\n\t\t\t*ngFor=\"let a of _alerts\"\r\n\t\t\t[id]=\"a.id\"\r\n\t\t\t[type]=\"a.type\"\r\n\t\t\t[message]=\"a.message\"\r\n\t\t\t[@alertTransition]=\"a.deleted ? 'hidden' : 'visible'\"\r\n\t\t></bui-alert>\r\n\t</div>\r\n</div>\r\n", styles: [".bui-alert:not(:first-of-type){margin-top:.5rem}:host(:not([hidden])){display:block}.bui-alert-fixed-panel{transition:opacity .2s ease-in}.bui-alert-fixed-panel.bui-alert-fixed-panel-blink .bui-alert:last-of-type{animation:blink 1s ease-in forwards}.bui-alert-float-panel-frame{position:fixed;z-index:1000;inset:0;justify-content:center;align-items:center;flex-direction:column;transition:background-color .4s cubic-bezier(.25,0,.55,.2)}.bui-alert-float-panel-frame:not([hidden]){display:flex}.bui-alert-float-panel-frame.bui-alert-float-panel-shaded{background-color:#00000080}.bui-alert-float-panel-frame .bui-alert{background-color:var(--bui-bg-card)}@keyframes blink{60%{opacity:1}70%{opacity:0}80%{opacity:1}90%{opacity:0}}\n"] }]
198
+ }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }], propDecorators: { max: [{
199
+ type: Input
200
+ }], outsideViewportBehavior: [{
201
+ type: Input
202
+ }], floatDuration: [{
203
+ type: Input
204
+ }], init: [{
205
+ type: Output
206
+ }] } });
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL2FsZXJ0L2FsZXJ0LWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9hbGVydC9hbGVydC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFFakcsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRTdELGVBQWU7QUFDZixNQUFNLGtCQUFrQjtJQUd2QixZQUE0QixJQUEyQyxFQUFrQixPQUFlO1FBQTVFLFNBQUksR0FBSixJQUFJLENBQXVDO1FBQWtCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFEeEcsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVmLElBQUksQ0FBQyxFQUFFLEdBQUcsd0JBQXdCLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDbEQsQ0FBQztDQUNEO0FBRUQ7OztHQUdHO0FBa0NILE1BQU0sT0FBTyx1QkFBdUI7SUF5Q25DLFlBQ1MsSUFBWSxFQUNaLEtBQXdCLEVBQ3hCLFdBQW9DLEVBQ3BDLE1BQXdCO1FBSHhCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixV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LEVBQUUsQ0FBQztnQ0FDckYsT0FBTyxDQUFDLDBDQUEwQyxDQUFDOzZCQUNuRCxDQUFDOzRCQUNGLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUM7eUJBQ25GLENBQUM7cUJBQ0Y7bUtBS0QsR0FBRztzQkFERixLQUFLO2dCQVVOLHVCQUF1QjtzQkFEdEIsS0FBSztnQkFTTixhQUFhO3NCQURaLEtBQUs7Z0JBb0JFLElBQUk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciwgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgU2Nyb2xsRGlzcGF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG5cdENoYW5nZURldGVjdG9yUmVmLFxyXG5cdENvbXBvbmVudCxcclxuXHRFbGVtZW50UmVmLFxyXG5cdEV2ZW50RW1pdHRlcixcclxuXHRJbnB1dCxcclxuXHROZ1pvbmUsXHJcblx0T25EZXN0cm95LFxyXG5cdE9uSW5pdCxcclxuXHRPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVJRCwgaXNFbGVtZW50SW5WaWV3cG9ydCB9IGZyb20gJ0BicmF2dXJhL3VpL2NvbW1vbic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqQGludGVybmFsICovXHJcbmNsYXNzIEludGVybmFsQWxlcnRPamVjdCB7XHJcblx0aWQ6IHN0cmluZztcclxuXHRkZWxldGVkID0gZmFsc2U7XHJcblx0Y29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHR5cGU6ICdzdWNjZXNzJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicsIHB1YmxpYyByZWFkb25seSBtZXNzYWdlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuaWQgPSBgYnVpLWFsZXJ0LWNvbnQtYWxlcnQtJHtnZW5lcmF0ZUlEKCl9YDtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVc2UgdGhpcyBjb21wb25lbnQgaW4gYSBkZXNpZ25hdGVkIGFyZWEgb2YgYSBwYWdlIGZvciBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbiBtZXNzYWdlc1xyXG4gKlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdidWktYWxlcnQtY29udGFpbmVyJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vYWxlcnQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9hbGVydC1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcclxuXHRob3N0OiB7XHJcblx0XHQnW2NsYXNzXSc6IGAnYnVpLWFsZXJ0LWNvbnRhaW5lciBidWktaG9zdCBidWktYWxlcnQtY29udGFpbmVyLScgKyAoX3JlbWFpbmluZy5sZW5ndGggPyAnbm90LWVtcHR5JzogJ2VtcHR5JylgXHJcblx0fSxcclxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuXHRhbmltYXRpb25zOiBbXHJcblx0XHR0cmlnZ2VyKCdmbG9hdFRyYW5zaXRpb24nLCBbXHJcblx0XHRcdHRyYW5zaXRpb24oJzplbnRlcicsIFtzdHlsZSh7IG9wYWNpdHk6ICcwJywgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTB2aCknIH0pLCBhbmltYXRlKCcuM3MgZWFzZS1pbicpXSksXHJcblx0XHRcdHRyYW5zaXRpb24oJzpsZWF2ZScsIFthbmltYXRlKCcuNHMgZWFzZS1vdXQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwdmgpJywgb3BhY2l0eTogJzAnIH0pKV0pXHJcblx0XHRdKSxcclxuXHRcdHRyaWdnZXIoJ2FsZXJ0VHJhbnNpdGlvbicsIFtcclxuXHRcdFx0c3RhdGUoJ3Zpc2libGUnLCBzdHlsZSh7fSkpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHQnaGlkZGVuJyxcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRoZWlnaHQ6IDAsXHJcblx0XHRcdFx0XHRvdmVyZmxvdzogJ2hpZGRlbicsXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm06ICdzY2FsZVkoMCknLFxyXG5cdFx0XHRcdFx0b3BhY2l0eTogMCxcclxuXHRcdFx0XHRcdCdtYXJnaW4tdG9wJzogJy0xcmVtJ1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHRyYW5zaXRpb24oJ3ZvaWQgPT4gdmlzaWJsZScsIFtcclxuXHRcdFx0XHRzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTAwJSknLCBoZWlnaHQ6IDAsIG9wYWNpdHk6ICcwJywgb3ZlcmZsb3c6ICdoaWRkZW4nIH0pLFxyXG5cdFx0XHRcdGFuaW1hdGUoJzI1MG1zIGN1YmljLWJlemllcigwLjQyLCAwLjAsIDAuNTgsIDEuMCknKVxyXG5cdFx0XHRdKSxcclxuXHRcdFx0dHJhbnNpdGlvbigndmlzaWJsZSA9PiBoaWRkZW4nLCBbYW5pbWF0ZSgnMjUwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAsIDAuMywgMS4wKScpXSlcclxuXHRcdF0pXHJcblx0XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWxlcnRDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblx0LyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyBkaXNwbGF5ZWQgaW4gdGhlIGNvbnRhaW5lciBhcmVhLiAqL1xyXG5cdEBJbnB1dCgpXHJcblx0bWF4ID0gNTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhpcyBwcm9wZXJ0eSBkZXRlcm1pbmVzIHRoZSBiZWhhdmlvciBmb3IgZGlzcGxheWluZyB0aGUgbm90aWZpY2F0aW9ucyB3aGVuIHRoZSBjb250YWluZXIgaXMgb3V0c2lkZSB0aGUgdmlld3BvcnQuXHJcblx0ICpcclxuXHQgKiBgc2Nyb2xsYDogVGhlIGNvbXBvbmVudCB3aWxsIHRyeSB0byBzY3JvbGwgdG8gcmV2ZWFsIHRoZSBuZXcgbm90aWZpY2F0aW9ucy5cclxuXHQgKiBgZmxvYXRgOiBUaGUgY29tcG9uZW50IHdpbGwgZmxvYXQgdGhlIGFsZXJ0IHBhbmVsIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHNjcmVlbiBmb3IgYSBjb3VwbGUgb2Ygc2Vjb25kcyBhbmQgbW92ZSBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwb3NpdGlvbi5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdG91dHNpZGVWaWV3cG9ydEJlaGF2aW9yOiAnc2Nyb2xsJyB8ICdmbG9hdCcgPSAnZmxvYXQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdGhlIGFsZXJ0IGNvbnRhaW5lciB3aWxsIGJlIGZsb2F0ZWQgd2hlbiBuZXcgbm90aWZpY2F0aW9uIGFycml2ZXMuXHJcblx0ICpcclxuXHQgKiBUaGlzIHdpbGwgb25seSB0YWtlIGVmZmVjdCB3aGVuIGBvdXRzaWRlVmlld3BvcnRCZWhhdmlvcmAgaXMgc2V0IHRvIGBmbG9hdGAgYW5kIHRoZSBjb250YWluZXIgaXMgb3V0c2lkZSB0aGUgdmlld3BvcnQuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRmbG9hdER1cmF0aW9uID0gMjAwMDtcclxuXHJcblx0LyoqQGludGVybmFsICovXHJcblx0X2FsZXJ0czogSW50ZXJuYWxBbGVydE9qZWN0W10gPSBbXTtcclxuXHQvKipAaW50ZXJuYWwgKi9cclxuXHRfZmxvYXRlZCA9IGZhbHNlO1xyXG5cdC8qKkBpbnRlcm5hbCAqL1xyXG5cdF9mbG9hdFBhbmVsSGlkZGVuID0gdHJ1ZTtcclxuXHJcblx0LyoqIEBpZ25vcmUgRW1pdHMgd2hlbmV2ZXIgdGhlIGFuaW1hdGlvbiBpcyBzdGFydGVkLiAqL1xyXG5cdHJlYWRvbmx5IF9hbmltYXRpb25TdGFydGVkID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KCk7XHJcblx0LyoqIEBpZ25vcmUgRW1pdHMgd2hlbmV2ZXIgdGhlIGFuaW1hdGlvbiBpcyBkb25lLiAqL1xyXG5cdHJlYWRvbmx5IF9hbmltYXRpb25FbmRlZCA9IG5ldyBTdWJqZWN0PEFuaW1hdGlvbkV2ZW50PigpO1xyXG5cclxuXHRwcml2YXRlIF9kZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHRwcml2YXRlIF9lbmRGbG9hdGluZ1N1Yj86IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0LyoqIEVtaXRzIHRoZSBjb21wb25lbnQgaW5zdGFuY2UgYWZ0ZXIgaW5pdGlhbGlzYXRpb24uICovXHJcblx0QE91dHB1dCgpXHJcblx0cHJpdmF0ZSBpbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxBbGVydENvbnRhaW5lckNvbXBvbmVudD4oKTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHpvbmU6IE5nWm9uZSxcclxuXHRcdHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0cHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcblx0XHRwcml2YXRlIHNjcm9sbDogU2Nyb2xsRGlzcGF0Y2hlclxyXG5cdCkge31cclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjaGVja1Njcm9sbCA9ICgpID0+IHtcclxuXHRcdFx0aWYgKGlzRWxlbWVudEluVmlld3BvcnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSkge1xyXG5cdFx0XHRcdHRoaXMuX2VuZEZsb2F0aW5nKCk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0XHR0aGlzLnNjcm9sbFxyXG5cdFx0XHQuYW5jZXN0b3JTY3JvbGxlZCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXHJcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcclxuXHRcdFx0LnN1YnNjcmliZShjaGVja1Njcm9sbCk7XHJcblx0XHRjaGVja1Njcm9sbCgpO1xyXG5cdFx0dGhpcy5pbml0LmVtaXQodGhpcyk7XHJcblx0XHR0aGlzLmluaXQuY29tcGxldGUoKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5fZGVzdHJveWVkJC5uZXh0KCk7XHJcblx0XHR0aGlzLl9kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XHJcblx0XHR0aGlzLl9lbmRGbG9hdGluZ1N1Yj8udW5zdWJzY3JpYmUoKTtcclxuXHR9XHJcblxyXG5cdC8qKkBpbnRlcm5hbCAqL1xyXG5cdGdldCBfcmVtYWluaW5nKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2FsZXJ0cy5maWx0ZXIoYSA9PiAhYS5kZWxldGVkKTtcclxuXHR9XHJcblxyXG5cdC8qKkBpbnRlcm5hbCAqL1xyXG5cdGdldCBfd2lkdGgoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xyXG5cdH1cclxuXHJcblx0LyoqIEFkZCBhIG1lc3NhZ2UgdG8gdGhlIG5vdGlmaWNhdGlvbiBhcmVhICovXHJcblx0YXN5bmMgbm90aWZ5KHR5cGU6ICdzdWNjZXNzJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicsIG1lc3NhZ2U6IHN0cmluZykge1xyXG5cdFx0dGhpcy5fZW5kRmxvYXRpbmdTdWI/LnVuc3Vic2NyaWJlKCk7XHJcblx0XHRjb25zdCBkdXBsaWNhdGUgPSB0aGlzLl9yZW1haW5pbmcuZmluZChfYSA9PiBtZXNzYWdlID09PSBfYS5tZXNzYWdlKTtcclxuXHRcdGlmIChkdXBsaWNhdGUpIHtcclxuXHRcdFx0dGhpcy5fZGlzbWlzcyhkdXBsaWNhdGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHJlbWFpbmluZyA9IHRoaXMuX3JlbWFpbmluZztcclxuXHRcdGlmIChyZW1haW5pbmcubGVuZ3RoID49IHRoaXMubWF4KSB7XHJcblx0XHRcdHRoaXMuX2Rpc21pc3MocmVtYWluaW5nWzBdKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBhID0gbmV3IEludGVybmFsQWxlcnRPamVjdCh0eXBlLCBtZXNzYWdlKTtcclxuXHRcdGF3YWl0IHRoaXMuX2NoZWNrVmlld3BvcnQoKTtcclxuXHRcdHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG5cdFx0XHR0aGlzLl9hbGVydHMucHVzaChhKTtcclxuXHRcdFx0dGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqQGlnbm9yZSAqL1xyXG5cdGFzeW5jIF9jaGVja1ZpZXdwb3J0KCkge1xyXG5cdFx0aWYgKCFpc0VsZW1lbnRJblZpZXdwb3J0KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpIHtcclxuXHRcdFx0aWYgKHRoaXMub3V0c2lkZVZpZXdwb3J0QmVoYXZpb3IgPT09ICdmbG9hdCcpIHtcclxuXHRcdFx0XHRjb25zdCBkID0gdGhpcy5fZmxvYXRlZCA/IDAgOiAxMDA7XHJcblx0XHRcdFx0dGhpcy5fZmxvYXRlZCA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy5fZmxvYXRQYW5lbEhpZGRlbiA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuX2VuZEZsb2F0aW5nKHRoaXMuZmxvYXREdXJhdGlvbik7XHJcblx0XHRcdFx0dGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHRhd2FpdCB0aW1lcihkKS50b1Byb21pc2UoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ3N0YXJ0JywgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipAaWdub3JlICovXHJcblx0YXN5bmMgX2Rpc21pc3MoYTogSW50ZXJuYWxBbGVydE9qZWN0KSB7XHJcblx0XHRjb25zdCBpZCA9IGEuaWQ7XHJcblx0XHRhLmRlbGV0ZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdGF3YWl0IHRoaXMuX2FuaW1hdGlvbkVuZGVkLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XHJcblx0XHR0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuXHRcdFx0dGhpcy5fYWxlcnRzID0gdGhpcy5fYWxlcnRzLmZpbHRlcihfYSA9PiBfYS5pZCAhPT0gaWQpO1xyXG5cdFx0XHR0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKiogUmVtb3ZlIGFsbCBtZXNzYWdlcyBjdXJyZW50bHkgZGlzcGxheWVkLiAqL1xyXG5cdGFzeW5jIGNsZWFyKCkge1xyXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fcmVtYWluaW5nLm1hcChhID0+IHRoaXMuX2Rpc21pc3MoYSkpKTtcclxuXHRcdHRoaXMuX2VuZEZsb2F0aW5nKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIF9lbmRGbG9hdGluZyhfZGVsYXkgPSAwKSB7XHJcblx0XHRpZiAoIXRoaXMuX2Zsb2F0ZWQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5fZW5kRmxvYXRpbmdTdWI/LnVuc3Vic2NyaWJlKCk7XHJcblx0XHR0aGlzLl9lbmRGbG9hdGluZ1N1YiA9IHRpbWVyKF9kZWxheSlcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0dGFwKCgpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuX2Zsb2F0ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKSk7XHJcblx0XHRcdFx0fSksXHJcblx0XHRcdFx0ZGVsYXkoNDAwKVxyXG5cdFx0XHQpXHJcblx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuX2Zsb2F0UGFuZWxIaWRkZW4gPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKSk7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxufVxyXG4iLCI8ZGl2XHJcblx0Y2xhc3M9XCJidWktYWxlcnQtZml4ZWQtcGFuZWxcIlxyXG5cdFtzdHlsZS5vcGFjaXR5XT1cIl9mbG9hdFBhbmVsSGlkZGVuID8gMSA6IDBcIlxyXG5cdFtjbGFzcy5idWktYWxlcnQtZml4ZWQtcGFuZWwtYmxpbmtdPVwib3V0c2lkZVZpZXdwb3J0QmVoYXZpb3IgPT09ICdzY3JvbGwnXCJcclxuPlxyXG5cdDxidWktYWxlcnRcclxuXHRcdCpuZ0Zvcj1cImxldCBhIG9mIF9hbGVydHNcIlxyXG5cdFx0W2lkXT1cImEuaWRcIlxyXG5cdFx0W3R5cGVdPVwiYS50eXBlXCJcclxuXHRcdFttZXNzYWdlXT1cImEubWVzc2FnZVwiXHJcblx0XHRkaXNtaXNzaWJsZVxyXG5cdFx0W0BhbGVydFRyYW5zaXRpb25dPVwiYS5kZWxldGVkID8gJ2hpZGRlbicgOiAndmlzaWJsZSdcIlxyXG5cdFx0KEBhbGVydFRyYW5zaXRpb24uc3RhcnQpPVwiX2FuaW1hdGlvblN0YXJ0ZWQubmV4dCgkZXZlbnQpXCJcclxuXHRcdChAYWxlcnRUcmFuc2l0aW9uLmRvbmUpPVwiX2FuaW1hdGlvbkVuZGVkLm5leHQoJGV2ZW50KVwiXHJcblx0XHQoZGlzbWlzc2VkKT1cIl9kaXNtaXNzKGEpXCJcclxuXHQ+PC9idWktYWxlcnQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImJ1aS1hbGVydC1mbG9hdC1wYW5lbC1mcmFtZVwiIFtoaWRkZW5dPVwiX2Zsb2F0UGFuZWxIaWRkZW5cIiBbY2xhc3MuYnVpLWFsZXJ0LWZsb2F0LXBhbmVsLXNoYWRlZF09XCJfZmxvYXRlZFwiPlxyXG5cdDxkaXYgY2xhc3M9XCJidWktYWxlcnQtZmxvYXQtcGFuZWxcIiBbc3R5bGUubWF4LXdpZHRoXT1cIl93aWR0aCArICdweCdcIiBbQGZsb2F0VHJhbnNpdGlvbl09XCIndmlzaWJsZSdcIiAqbmdJZj1cIl9mbG9hdGVkXCI+XHJcblx0XHQ8YnVpLWFsZXJ0XHJcblx0XHRcdCpuZ0Zvcj1cImxldCBhIG9mIF9hbGVydHNcIlxyXG5cdFx0XHRbaWRdPVwiYS5pZFwiXHJcblx0XHRcdFt0eXBlXT1cImEudHlwZVwiXHJcblx0XHRcdFttZXNzYWdlXT1cImEubWVzc2FnZVwiXHJcblx0XHRcdFtAYWxlcnRUcmFuc2l0aW9uXT1cImEuZGVsZXRlZCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnXCJcclxuXHRcdD48L2J1aS1hbGVydD5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,101 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
3
+ import { generateID } from '@bravura/ui/common';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/material/icon";
7
+ import * as i3 from "@bravura/ui/icon-font";
8
+ import * as i4 from "@angular/material/button";
9
+ /** @ignore */
10
+ const ICONS = {
11
+ success: 'check_circle',
12
+ info: 'info',
13
+ warn: 'report_problem',
14
+ error: 'cancel'
15
+ };
16
+ /** @ignore */
17
+ const DEFAULT_POLITENESS = {
18
+ success: 'polite',
19
+ info: 'polite',
20
+ warn: 'assertive',
21
+ error: 'assertive'
22
+ };
23
+ /**
24
+ * An alert style message usually appears in a global notification area.
25
+ *
26
+ * The base color of the message is determined by the `type` of the message and a list of predefined
27
+ * CSS custom properties.
28
+ *
29
+ * ```scss
30
+ * --bui-color-success: #519602;
31
+ * --bui-color-info: #0dcaf0;
32
+ * --bui-color-warning: #ffc107;
33
+ * --bui-color-error: #dc3545;
34
+ * ```
35
+ *
36
+ *
37
+ */
38
+ export class AlertMessageComponent {
39
+ /** Whether to display the button to fire the `dismissed` event. */
40
+ get dismissible() {
41
+ return this._dismissible;
42
+ }
43
+ set dismissible(value) {
44
+ this._dismissible = coerceBooleanProperty(value);
45
+ }
46
+ constructor() {
47
+ /** The type of the message, used to derive the icon and base color. */
48
+ this.type = 'error';
49
+ /** The message to be displayed, HTML supported. */
50
+ this.message = '';
51
+ /** To be emitted when the user choose to dismiss the message. The event object is the ID of the element. */
52
+ this.dismissed = new EventEmitter();
53
+ /** To be emitted when the component finishes initialisation. The event object is the ID of the element. */
54
+ this.initialised = new EventEmitter();
55
+ this._id = `bui-alert-${generateID()}`;
56
+ this._dismissible = false;
57
+ }
58
+ ngOnInit() {
59
+ this.politeness = this.politeness || DEFAULT_POLITENESS[this.type];
60
+ this.initialised.emit(this._id);
61
+ }
62
+ /** @ignore */
63
+ get iconName() {
64
+ return ICONS[this.type];
65
+ }
66
+ /** @ignore */
67
+ _dismiss() {
68
+ this.dismissed.emit(this._id);
69
+ }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlertMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
71
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AlertMessageComponent, selector: "bui-alert", inputs: { type: "type", message: "message", politeness: "politeness", dismissible: "dismissible", _id: ["id", "_id"] }, outputs: { dismissed: "dismissed", initialised: "initialised" }, host: { properties: { "class": "'bui-alert bui-host bui-alert-' + (type === 'warn' ? 'warning' : type) + (dismissible ? ' bui-alert-dismissible' : '')", "role": "politeness === 'off' ? 'region' : 'alert'", "attr.aria-live": "politeness === 'assertive' ? undefined : politeness", "id": "this._id" } }, ngImport: i0, template: "<div class=\"bui-alert-backdrop\"></div>\r\n<div class=\"bui-alert-frame\"></div>\r\n\r\n<div class=\"bui-alert-wrapper\">\r\n\t<div class=\"bui-alert-icon-area\">\r\n\t\t<mat-icon [buiIcon]=\"iconName\" variant=\"outlined\"></mat-icon>\r\n\t</div>\r\n\t<div class=\"bui-alert-content\">\r\n\t\t<div [innerHTML]=\"message\" *ngIf=\"message\"></div>\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n</div>\r\n\r\n<div class=\"bui-alert-button-area\" *ngIf=\"dismissible\">\r\n\t<div class=\"bui-alert-button-backdrop\"></div>\r\n\t<button mat-icon-button class=\"bui-alert-button\" (click)=\"_dismiss()\" aria-label=\"dismiss alert\">\r\n\t\t<mat-icon>cancel</mat-icon>\r\n\t</button>\r\n</div>\r\n", styles: [":host(:not([hidden])){display:block;padding:12px 14px 12px 19px;position:relative;border-radius:5px}:host-context([dir=rtl]) :host(:not([hidden])){padding:12px 19px 12px 14px}:host(:not([hidden])),:host(:not([hidden])) *{box-sizing:border-box}.bui-alert-backdrop,.bui-alert-frame{position:absolute;inset:0}.bui-alert-backdrop{opacity:.1}:host(.bui-alert-dismissible) .bui-alert-backdrop{clip-path:polygon(0 0,calc(100% - 25px) 0,calc(100% - 18.75px) 18.75px,100% 25px,100% 100%,0 100%)}:host-context([dir=rtl]) :host(.bui-alert-dismissible) .bui-alert-backdrop{clip-path:polygon(0 25px,0 100%,100% 100%,100% 0,25px 0,18.75px 18.75px)}.bui-alert-frame{border-radius:5px;border-width:1px 1px 1px 5px;border-style:solid}:host-context([dir=rtl]) .bui-alert-frame{border-width:1px 5px 1px 1px}:host(.bui-alert-dismissible) .bui-alert-frame{clip-path:polygon(0 0,calc(100% - 25px) 0,calc(100% - 25px) 25px,100% 25px,100% 100%,0 100%)}:host-context([dir=rtl]) :host(.bui-alert-dismissible) .bui-alert-frame{clip-path:polygon(0 25px,0 100%,100% 100%,100% 0,25px 0)}.bui-alert-button-area{position:absolute;right:-15px;top:-15px;width:40px;height:40px;border-radius:20px;display:flex;align-items:center;justify-content:center}:host-context([dir=rtl]) .bui-alert-button-area{right:unset;left:-15px}.bui-alert-button-backdrop{position:absolute;border-radius:20px;width:100%;height:100%;clip-path:polygon(0 15px,25px 15px,25px 100%,0% 100%)}:host-context([dir=rtl]) .bui-alert-button-backdrop{clip-path:polygon(15px 15px,15px 100%,100% 100%,100% 15px)}.bui-alert-wrapper{display:flex;align-items:stretch}.bui-alert-icon-area{flex-shrink:0;display:flex;justify-content:center;align-items:center;border-radius:5px;width:30px;height:30px;margin-right:14px;color:var(--bui-bg-card)}:host-context([dir=rtl]) .bui-alert-icon-area{margin-right:unset;margin-left:14px}.bui-alert-content{z-index:1;flex-grow:1;display:flex;flex-direction:column;justify-content:center;gap:1rem}:host(.bui-alert-dismissible) .bui-alert-content{clip-path:polygon(0 0,calc(100% - 11px) 0,100% 13px,100% 100%,0 100%)}:host-context([dir=rtl]) :host(.bui-alert-dismissible) .bui-alert-content{clip-path:polygon(0 13px,0 100%,100% 100%,100% 0,11px 0)}:host(.bui-alert-success) .bui-alert-frame{border-color:var(--bui-color-success)}:host(.bui-alert-success) .bui-alert-backdrop,:host(.bui-alert-success) .bui-alert-icon-area{background-color:var(--bui-color-success)}:host(.bui-alert-success) .bui-alert-button-backdrop{border:1px var(--bui-color-success) solid}:host(.bui-alert-success) .bui-alert-button{color:var(--bui-color-success)}:host(.bui-alert-info) .bui-alert-frame{border-color:var(--bui-color-info)}:host(.bui-alert-info) .bui-alert-backdrop,:host(.bui-alert-info) .bui-alert-icon-area{background-color:var(--bui-color-info)}:host(.bui-alert-info) .bui-alert-button-backdrop{border:1px var(--bui-color-info) solid}:host(.bui-alert-info) .bui-alert-button{color:var(--bui-color-info)}:host(.bui-alert-warning) .bui-alert-frame{border-color:var(--bui-color-warning)}:host(.bui-alert-warning) .bui-alert-backdrop,:host(.bui-alert-warning) .bui-alert-icon-area{background-color:var(--bui-color-warning)}:host(.bui-alert-warning) .bui-alert-button-backdrop{border:1px var(--bui-color-warning) solid}:host(.bui-alert-warning) .bui-alert-button{color:var(--bui-color-warning)}:host(.bui-alert-error) .bui-alert-frame{border-color:var(--bui-color-error)}:host(.bui-alert-error) .bui-alert-backdrop,:host(.bui-alert-error) .bui-alert-icon-area{background-color:var(--bui-color-error)}:host(.bui-alert-error) .bui-alert-button-backdrop{border:1px var(--bui-color-error) solid}:host(.bui-alert-error) .bui-alert-button{color:var(--bui-color-error)}.bui-alert-button{width:40px;height:40px;padding:8px;overflow:hidden}@polyfill-unscoped-rule{content: \".bui-alert .bui-alert-content > div > *:first-child\"; margin-top: 0;}@polyfill-unscoped-rule{content: \".bui-alert .bui-alert-content > div > *:last-child\"; margin-bottom: 0;}@polyfill-unscoped-rule{content: \".bui-alert .bui-alert-content > *:first-child\"; margin-top: 0;}@polyfill-unscoped-rule{content: \".bui-alert .bui-alert-content > *:last-child\"; margin-bottom: 0;}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "[buiIcon]", inputs: ["buiIcon", "size", "variant"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
72
+ }
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlertMessageComponent, decorators: [{
74
+ type: Component,
75
+ args: [{ selector: 'bui-alert', host: {
76
+ '[class]': `'bui-alert bui-host bui-alert-' + (type === 'warn' ? 'warning' : type) + (dismissible ? ' bui-alert-dismissible' : '')`,
77
+ '[role]': `politeness === 'off' ? 'region' : 'alert'`,
78
+ '[attr.aria-live]': `politeness === 'assertive' ? undefined : politeness`
79
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"bui-alert-backdrop\"></div>\r\n<div class=\"bui-alert-frame\"></div>\r\n\r\n<div class=\"bui-alert-wrapper\">\r\n\t<div class=\"bui-alert-icon-area\">\r\n\t\t<mat-icon [buiIcon]=\"iconName\" variant=\"outlined\"></mat-icon>\r\n\t</div>\r\n\t<div class=\"bui-alert-content\">\r\n\t\t<div [innerHTML]=\"message\" *ngIf=\"message\"></div>\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n</div>\r\n\r\n<div class=\"bui-alert-button-area\" *ngIf=\"dismissible\">\r\n\t<div class=\"bui-alert-button-backdrop\"></div>\r\n\t<button mat-icon-button class=\"bui-alert-button\" (click)=\"_dismiss()\" aria-label=\"dismiss alert\">\r\n\t\t<mat-icon>cancel</mat-icon>\r\n\t</button>\r\n</div>\r\n", styles: [":host(:not([hidden])){display:block;padding:12px 14px 12px 19px;position:relative;border-radius:5px}:host-context([dir=rtl]) :host(:not([hidden])){padding:12px 19px 12px 14px}:host(:not([hidden])),:host(:not([hidden])) *{box-sizing:border-box}.bui-alert-backdrop,.bui-alert-frame{position:absolute;inset:0}.bui-alert-backdrop{opacity:.1}:host(.bui-alert-dismissible) .bui-alert-backdrop{clip-path:polygon(0 0,calc(100% - 25px) 0,calc(100% - 18.75px) 18.75px,100% 25px,100% 100%,0 100%)}:host-context([dir=rtl]) :host(.bui-alert-dismissible) .bui-alert-backdrop{clip-path:polygon(0 25px,0 100%,100% 100%,100% 0,25px 0,18.75px 18.75px)}.bui-alert-frame{border-radius:5px;border-width:1px 1px 1px 5px;border-style:solid}:host-context([dir=rtl]) .bui-alert-frame{border-width:1px 5px 1px 1px}:host(.bui-alert-dismissible) .bui-alert-frame{clip-path:polygon(0 0,calc(100% - 25px) 0,calc(100% - 25px) 25px,100% 25px,100% 100%,0 100%)}:host-context([dir=rtl]) :host(.bui-alert-dismissible) .bui-alert-frame{clip-path:polygon(0 25px,0 100%,100% 100%,100% 0,25px 0)}.bui-alert-button-area{position:absolute;right:-15px;top:-15px;width:40px;height:40px;border-radius:20px;display:flex;align-items:center;justify-content:center}:host-context([dir=rtl]) .bui-alert-button-area{right:unset;left:-15px}.bui-alert-button-backdrop{position:absolute;border-radius:20px;width:100%;height:100%;clip-path:polygon(0 15px,25px 15px,25px 100%,0% 100%)}:host-context([dir=rtl]) .bui-alert-button-backdrop{clip-path:polygon(15px 15px,15px 100%,100% 100%,100% 15px)}.bui-alert-wrapper{display:flex;align-items:stretch}.bui-alert-icon-area{flex-shrink:0;display:flex;justify-content:center;align-items:center;border-radius:5px;width:30px;height:30px;margin-right:14px;color:var(--bui-bg-card)}:host-context([dir=rtl]) .bui-alert-icon-area{margin-right:unset;margin-left:14px}.bui-alert-content{z-index:1;flex-grow:1;display:flex;flex-direction:column;justify-content:center;gap:1rem}:host(.bui-alert-dismissible) .bui-alert-content{clip-path:polygon(0 0,calc(100% - 11px) 0,100% 13px,100% 100%,0 100%)}:host-context([dir=rtl]) :host(.bui-alert-dismissible) .bui-alert-content{clip-path:polygon(0 13px,0 100%,100% 100%,100% 0,11px 0)}:host(.bui-alert-success) .bui-alert-frame{border-color:var(--bui-color-success)}:host(.bui-alert-success) .bui-alert-backdrop,:host(.bui-alert-success) .bui-alert-icon-area{background-color:var(--bui-color-success)}:host(.bui-alert-success) .bui-alert-button-backdrop{border:1px var(--bui-color-success) solid}:host(.bui-alert-success) .bui-alert-button{color:var(--bui-color-success)}:host(.bui-alert-info) .bui-alert-frame{border-color:var(--bui-color-info)}:host(.bui-alert-info) .bui-alert-backdrop,:host(.bui-alert-info) .bui-alert-icon-area{background-color:var(--bui-color-info)}:host(.bui-alert-info) .bui-alert-button-backdrop{border:1px var(--bui-color-info) solid}:host(.bui-alert-info) .bui-alert-button{color:var(--bui-color-info)}:host(.bui-alert-warning) .bui-alert-frame{border-color:var(--bui-color-warning)}:host(.bui-alert-warning) .bui-alert-backdrop,:host(.bui-alert-warning) .bui-alert-icon-area{background-color:var(--bui-color-warning)}:host(.bui-alert-warning) .bui-alert-button-backdrop{border:1px var(--bui-color-warning) solid}:host(.bui-alert-warning) .bui-alert-button{color:var(--bui-color-warning)}:host(.bui-alert-error) .bui-alert-frame{border-color:var(--bui-color-error)}:host(.bui-alert-error) .bui-alert-backdrop,:host(.bui-alert-error) .bui-alert-icon-area{background-color:var(--bui-color-error)}:host(.bui-alert-error) .bui-alert-button-backdrop{border:1px var(--bui-color-error) solid}:host(.bui-alert-error) .bui-alert-button{color:var(--bui-color-error)}.bui-alert-button{width:40px;height:40px;padding:8px;overflow:hidden}@polyfill-unscoped-rule{content: \".bui-alert .bui-alert-content > div > *:first-child\"; margin-top: 0;}@polyfill-unscoped-rule{content: \".bui-alert .bui-alert-content > div > *:last-child\"; margin-bottom: 0;}@polyfill-unscoped-rule{content: \".bui-alert .bui-alert-content > *:first-child\"; margin-top: 0;}@polyfill-unscoped-rule{content: \".bui-alert .bui-alert-content > *:last-child\"; margin-bottom: 0;}\n"] }]
80
+ }], ctorParameters: () => [], propDecorators: { type: [{
81
+ type: Input
82
+ }], message: [{
83
+ type: Input
84
+ }], politeness: [{
85
+ type: Input
86
+ }], dismissible: [{
87
+ type: Input
88
+ }], dismissed: [{
89
+ type: Output
90
+ }], initialised: [{
91
+ type: Output
92
+ }],
93
+ /** @ignore */
94
+ _id: [{
95
+ type: Input,
96
+ args: ['id']
97
+ }, {
98
+ type: HostBinding,
99
+ args: ['id']
100
+ }] } });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtbWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9hbGVydC9hbGVydC1tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL2FsZXJ0L2FsZXJ0LW1lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFFaEQsY0FBYztBQUNkLE1BQU0sS0FBSyxHQUFRO0lBQ2xCLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLGdCQUFnQjtJQUN0QixLQUFLLEVBQUUsUUFBUTtDQUNmLENBQUM7QUFFRixjQUFjO0FBQ2QsTUFBTSxrQkFBa0IsR0FBRztJQUMxQixPQUFPLEVBQUUsUUFBUTtJQUNqQixJQUFJLEVBQUUsUUFBUTtJQUNkLElBQUksRUFBRSxXQUFXO0lBQ2pCLEtBQUssRUFBRSxXQUFXO0NBQ2xCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQVlILE1BQU0sT0FBTyxxQkFBcUI7SUFrQmpDLG1FQUFtRTtJQUNuRSxJQUNJLFdBQVc7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQVU7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBaUJEO1FBcENBLHdFQUF3RTtRQUV4RSxTQUFJLEdBQTBDLE9BQU8sQ0FBQztRQUV0RCxvREFBb0Q7UUFFcEQsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQWViLDZHQUE2RztRQUU3RyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV2Qyw0R0FBNEc7UUFFNUcsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBS3pDLFFBQUcsR0FBRyxhQUFhLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFFMUIsaUJBQVksR0FBRyxLQUFLLENBQUM7SUFFZCxDQUFDO0lBRWhCLFFBQVE7UUFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYztJQUNkLElBQUksUUFBUTtRQUNYLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsY0FBYztJQUNkLFFBQVE7UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQzsrR0F6RFcscUJBQXFCO21HQUFyQixxQkFBcUIsdWhCQzlDbEMsMHJCQW1CQTs7NEZEMkJhLHFCQUFxQjtrQkFYakMsU0FBUzsrQkFDQyxXQUFXLFFBR2Y7d0JBQ0wsU0FBUyxFQUFFLHdIQUF3SDt3QkFDbkksUUFBUSxFQUFFLDJDQUEyQzt3QkFDckQsa0JBQWtCLEVBQUUscURBQXFEO3FCQUN6RSxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTt3REFVL0MsSUFBSTtzQkFESCxLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBS0YsV0FBVztzQkFEZCxLQUFLO2dCQVVOLFNBQVM7c0JBRFIsTUFBTTtnQkFLUCxXQUFXO3NCQURWLE1BQU07O1FBS1AsY0FBYztRQUNkLEdBQUc7c0JBSEYsS0FBSzt1QkFBQyxJQUFJOztzQkFDVixXQUFXO3VCQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVJRCB9IGZyb20gJ0BicmF2dXJhL3VpL2NvbW1vbic7XHJcblxyXG4vKiogQGlnbm9yZSAqL1xyXG5jb25zdCBJQ09OUzogYW55ID0ge1xyXG5cdHN1Y2Nlc3M6ICdjaGVja19jaXJjbGUnLFxyXG5cdGluZm86ICdpbmZvJyxcclxuXHR3YXJuOiAncmVwb3J0X3Byb2JsZW0nLFxyXG5cdGVycm9yOiAnY2FuY2VsJ1xyXG59O1xyXG5cclxuLyoqIEBpZ25vcmUgKi9cclxuY29uc3QgREVGQVVMVF9QT0xJVEVORVNTID0ge1xyXG5cdHN1Y2Nlc3M6ICdwb2xpdGUnLFxyXG5cdGluZm86ICdwb2xpdGUnLFxyXG5cdHdhcm46ICdhc3NlcnRpdmUnLFxyXG5cdGVycm9yOiAnYXNzZXJ0aXZlJ1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFuIGFsZXJ0IHN0eWxlIG1lc3NhZ2UgdXN1YWxseSBhcHBlYXJzIGluIGEgZ2xvYmFsIG5vdGlmaWNhdGlvbiBhcmVhLlxyXG4gKlxyXG4gKiBUaGUgYmFzZSBjb2xvciBvZiB0aGUgbWVzc2FnZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBgdHlwZWAgb2YgdGhlIG1lc3NhZ2UgYW5kIGEgbGlzdCBvZiBwcmVkZWZpbmVkXHJcbiAqIENTUyBjdXN0b20gcHJvcGVydGllcy5cclxuICpcclxuICogYGBgc2Nzc1xyXG4gKiAtLWJ1aS1jb2xvci1zdWNjZXNzOiAjNTE5NjAyO1xyXG4gKiAtLWJ1aS1jb2xvci1pbmZvOiAjMGRjYWYwO1xyXG4gKiAtLWJ1aS1jb2xvci13YXJuaW5nOiAjZmZjMTA3O1xyXG4gKiAtLWJ1aS1jb2xvci1lcnJvcjogI2RjMzU0NTtcclxuICogYGBgXHJcbiAqXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2J1aS1hbGVydCcsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2FsZXJ0LW1lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2FsZXJ0LW1lc3NhZ2UuY29tcG9uZW50LnNjc3MnXSxcclxuXHRob3N0OiB7XHJcblx0XHQnW2NsYXNzXSc6IGAnYnVpLWFsZXJ0IGJ1aS1ob3N0IGJ1aS1hbGVydC0nICsgKHR5cGUgPT09ICd3YXJuJyA/ICd3YXJuaW5nJyA6IHR5cGUpICsgKGRpc21pc3NpYmxlID8gJyBidWktYWxlcnQtZGlzbWlzc2libGUnIDogJycpYCxcclxuXHRcdCdbcm9sZV0nOiBgcG9saXRlbmVzcyA9PT0gJ29mZicgPyAncmVnaW9uJyA6ICdhbGVydCdgLFxyXG5cdFx0J1thdHRyLmFyaWEtbGl2ZV0nOiBgcG9saXRlbmVzcyA9PT0gJ2Fzc2VydGl2ZScgPyB1bmRlZmluZWQgOiBwb2xpdGVuZXNzYFxyXG5cdH0sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEFsZXJ0TWVzc2FnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0LyoqIEBpZ25vcmUgKi9cclxuXHRzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzbWlzc2libGU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cdC8qKiBAaWdub3JlICovXHJcblx0c3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2JsaW5rOiBib29sZWFuIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcblx0LyoqIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlLCB1c2VkIHRvIGRlcml2ZSB0aGUgaWNvbiBhbmQgYmFzZSBjb2xvci4gICovXHJcblx0QElucHV0KClcclxuXHR0eXBlOiAnc3VjY2VzcycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InID0gJ2Vycm9yJztcclxuXHJcblx0LyoqIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCwgSFRNTCBzdXBwb3J0ZWQuICAqL1xyXG5cdEBJbnB1dCgpXHJcblx0bWVzc2FnZSA9ICcnO1xyXG5cclxuXHQvKiogU3BlY2lmaWVzIHRoZSBBUklBIGxpdmUgcmVnaW9uIHBvbGl0ZW5lc3MuICovXHJcblx0QElucHV0KClcclxuXHRwb2xpdGVuZXNzITogJ29mZicgfCAncG9saXRlJyB8ICdhc3NlcnRpdmUnO1xyXG5cclxuXHQvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBidXR0b24gdG8gZmlyZSB0aGUgYGRpc21pc3NlZGAgZXZlbnQuICovXHJcblx0QElucHV0KClcclxuXHRnZXQgZGlzbWlzc2libGUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZGlzbWlzc2libGU7XHJcblx0fVxyXG5cdHNldCBkaXNtaXNzaWJsZSh2YWx1ZTogYW55KSB7XHJcblx0XHR0aGlzLl9kaXNtaXNzaWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHQvKiogVG8gYmUgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNob29zZSB0byBkaXNtaXNzIHRoZSBtZXNzYWdlLiBUaGUgZXZlbnQgb2JqZWN0IGlzIHRoZSBJRCBvZiB0aGUgZWxlbWVudC4gICovXHJcblx0QE91dHB1dCgpXHJcblx0ZGlzbWlzc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG5cdC8qKiBUbyBiZSBlbWl0dGVkIHdoZW4gdGhlIGNvbXBvbmVudCBmaW5pc2hlcyBpbml0aWFsaXNhdGlvbi4gVGhlIGV2ZW50IG9iamVjdCBpcyB0aGUgSUQgb2YgdGhlIGVsZW1lbnQuICAqL1xyXG5cdEBPdXRwdXQoKVxyXG5cdGluaXRpYWxpc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG5cdEBJbnB1dCgnaWQnKVxyXG5cdEBIb3N0QmluZGluZygnaWQnKVxyXG5cdC8qKiBAaWdub3JlICovXHJcblx0X2lkID0gYGJ1aS1hbGVydC0ke2dlbmVyYXRlSUQoKX1gO1xyXG5cclxuXHRwcml2YXRlIF9kaXNtaXNzaWJsZSA9IGZhbHNlO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5wb2xpdGVuZXNzID0gdGhpcy5wb2xpdGVuZXNzIHx8IERFRkFVTFRfUE9MSVRFTkVTU1t0aGlzLnR5cGVdO1xyXG5cdFx0dGhpcy5pbml0aWFsaXNlZC5lbWl0KHRoaXMuX2lkKTtcclxuXHR9XHJcblxyXG5cdC8qKiBAaWdub3JlICovXHJcblx0Z2V0IGljb25OYW1lKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gSUNPTlNbdGhpcy50eXBlXTtcclxuXHR9XHJcblxyXG5cdC8qKiBAaWdub3JlICovXHJcblx0X2Rpc21pc3MoKSB7XHJcblx0XHR0aGlzLmRpc21pc3NlZC5lbWl0KHRoaXMuX2lkKTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImJ1aS1hbGVydC1iYWNrZHJvcFwiPjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiYnVpLWFsZXJ0LWZyYW1lXCI+PC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYnVpLWFsZXJ0LXdyYXBwZXJcIj5cclxuXHQ8ZGl2IGNsYXNzPVwiYnVpLWFsZXJ0LWljb24tYXJlYVwiPlxyXG5cdFx0PG1hdC1pY29uIFtidWlJY29uXT1cImljb25OYW1lXCIgdmFyaWFudD1cIm91dGxpbmVkXCI+PC9tYXQtaWNvbj5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwiYnVpLWFsZXJ0LWNvbnRlbnRcIj5cclxuXHRcdDxkaXYgW2lubmVySFRNTF09XCJtZXNzYWdlXCIgKm5nSWY9XCJtZXNzYWdlXCI+PC9kaXY+XHJcblx0XHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImJ1aS1hbGVydC1idXR0b24tYXJlYVwiICpuZ0lmPVwiZGlzbWlzc2libGVcIj5cclxuXHQ8ZGl2IGNsYXNzPVwiYnVpLWFsZXJ0LWJ1dHRvbi1iYWNrZHJvcFwiPjwvZGl2PlxyXG5cdDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiYnVpLWFsZXJ0LWJ1dHRvblwiIChjbGljayk9XCJfZGlzbWlzcygpXCIgYXJpYS1sYWJlbD1cImRpc21pc3MgYWxlcnRcIj5cclxuXHRcdDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxyXG5cdDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19