@bravura/ui 3.8.1 → 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.
- package/CHANGELOG.md +579 -565
- package/LICENSE +6 -6
- package/README.md +56 -54
- package/alert/alert-container.component.d.ts +1 -1
- package/alert/alert-message.component.d.ts +1 -1
- package/behavior/await.directive.d.ts +1 -1
- package/behavior/observe-content-class.directive.d.ts +1 -1
- package/behavior/sizing.directive.d.ts +1 -1
- package/clip-note/clip-note.directive.d.ts +1 -1
- package/currency-input/currency-input.directive.d.ts +1 -1
- package/decimal-input/decimal-input.directive.d.ts +1 -1
- package/discrete-input/discrete-input.component.d.ts +1 -1
- package/esm2022/alert/alert-container.component.mjs +207 -0
- package/esm2022/alert/alert-message.component.mjs +101 -0
- package/esm2022/alert/alert.module.mjs +22 -0
- package/{esm2020 → esm2022}/alert/public-api.mjs +1 -1
- package/esm2022/alert/testing/test-api.mjs +44 -0
- package/{esm2020 → esm2022}/behavior/await.directive.mjs +6 -6
- package/esm2022/behavior/behavior.module.mjs +37 -0
- package/{esm2020 → esm2022}/behavior/observe-content-class.directive.mjs +5 -5
- package/{esm2020 → esm2022}/behavior/public-api.mjs +1 -1
- package/esm2022/behavior/sizing-monitor.directive.mjs +31 -0
- package/esm2022/behavior/sizing.directive.mjs +256 -0
- package/esm2022/clip-note/clip-note.component.mjs +216 -0
- package/esm2022/clip-note/clip-note.directive.mjs +141 -0
- package/esm2022/clip-note/clip-note.module.mjs +32 -0
- package/{esm2020 → esm2022}/clip-note/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/common/common-utils.mjs +1 -1
- package/{esm2020 → esm2022}/common/common.module.mjs +7 -7
- package/{esm2020 → esm2022}/common/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/currency-input/currency-input.directive.mjs +6 -6
- package/esm2022/currency-input/currency-input.module.mjs +19 -0
- package/{esm2020 → esm2022}/currency-input/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/decimal-input/decimal-input.directive.mjs +9 -9
- package/{esm2020 → esm2022}/decimal-input/decimal-input.module.mjs +5 -5
- package/esm2022/discrete-input/discrete-input.component.mjs +337 -0
- package/esm2022/discrete-input/discrete-input.module.mjs +21 -0
- package/{esm2020 → esm2022}/discrete-input/public-api.mjs +1 -1
- package/esm2022/file-upload/file-upload.component.mjs +400 -0
- package/esm2022/file-upload/file-upload.module.mjs +44 -0
- package/esm2022/file-upload/file-upload.service.mjs +29 -0
- package/{esm2020 → esm2022}/file-upload/public-api.mjs +1 -1
- package/esm2022/form-field/form-field.component.mjs +82 -0
- package/esm2022/form-field/form-field.module.mjs +33 -0
- package/{esm2020 → esm2022}/form-field/public-api.mjs +1 -1
- package/esm2022/icon-font/icon-font.module.mjs +22 -0
- package/{esm2020 → esm2022}/icon-font/icon.directive.mjs +5 -5
- package/{esm2020 → esm2022}/icon-font/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/icon-font/utilities.mjs +1 -1
- package/esm2022/panel/panel-section.component.mjs +41 -0
- package/esm2022/panel/panel.component.mjs +87 -0
- package/esm2022/panel/panel.module.mjs +23 -0
- package/{esm2020 → esm2022}/panel/public-api.mjs +1 -1
- package/esm2022/panel/tinted.directive.mjs +60 -0
- package/esm2022/phone-number/phone-number.directive.mjs +188 -0
- package/{esm2020 → esm2022}/phone-number/phone-number.module.mjs +5 -5
- package/{esm2020 → esm2022}/phone-number/phone-number.pipe.mjs +6 -6
- package/esm2022/phone-number/phone-number.validator.mjs +64 -0
- package/{esm2020 → esm2022}/phone-number/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/public-api.mjs +1 -1
- package/esm2022/radio-panel/radio-panel-item.component.mjs +93 -0
- package/esm2022/radio-panel/radio-panel.component.mjs +81 -0
- package/{esm2020 → esm2022}/radio-panel/radio-panel.module.mjs +5 -5
- package/esm2022/radio-panel/testing/test-api.mjs +46 -0
- package/{esm2020 → esm2022}/selection-panel/public-api.mjs +1 -1
- package/esm2022/selection-panel/selection-panel-item.component.mjs +166 -0
- package/esm2022/selection-panel/selection-panel.directive.mjs +119 -0
- package/esm2022/selection-panel/selection-panel.module.mjs +23 -0
- package/{esm2020 → esm2022}/skeletons/public-api.mjs +1 -1
- package/esm2022/skeletons/skeleton-loader-presets.directive.mjs +83 -0
- package/{esm2020 → esm2022}/skeletons/skeleton-loader.component.mjs +5 -5
- package/esm2022/skeletons/skeletons.module.mjs +35 -0
- package/{esm2020 → esm2022}/stepper/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/stepper/stepper-animation.mjs +1 -1
- package/esm2022/stepper/stepper.component.mjs +176 -0
- package/esm2022/stepper/stepper.module.mjs +52 -0
- package/{esm2020 → esm2022}/tooltip/public-api.mjs +1 -1
- package/esm2022/tooltip/tooltip.component.mjs +63 -0
- package/esm2022/tooltip/tooltip.directive.mjs +148 -0
- package/esm2022/tooltip/tooltip.module.mjs +25 -0
- package/{fesm2020 → fesm2022}/bravura-ui-alert-testing.mjs +2 -2
- package/fesm2022/bravura-ui-alert-testing.mjs.map +1 -0
- package/fesm2022/bravura-ui-alert.mjs +327 -0
- package/fesm2022/bravura-ui-alert.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-behavior.mjs +45 -45
- package/fesm2022/bravura-ui-behavior.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-clip-note.mjs +70 -70
- package/fesm2022/bravura-ui-clip-note.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-common.mjs +6 -6
- package/fesm2022/bravura-ui-common.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-currency-input.mjs +11 -11
- package/fesm2022/bravura-ui-currency-input.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-decimal-input.mjs +12 -12
- package/fesm2022/bravura-ui-decimal-input.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-discrete-input.mjs +48 -48
- package/fesm2022/bravura-ui-discrete-input.mjs.map +1 -0
- package/fesm2022/bravura-ui-file-upload.mjs +474 -0
- package/fesm2022/bravura-ui-file-upload.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-form-field.mjs +19 -19
- package/fesm2022/bravura-ui-form-field.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-icon-font.mjs +8 -8
- package/fesm2022/bravura-ui-icon-font.mjs.map +1 -0
- package/fesm2022/bravura-ui-panel.mjs +206 -0
- package/fesm2022/bravura-ui-panel.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-phone-number.mjs +30 -30
- package/fesm2022/bravura-ui-phone-number.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-radio-panel-testing.mjs +5 -6
- package/fesm2022/bravura-ui-radio-panel-testing.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-radio-panel.mjs +31 -31
- package/fesm2022/bravura-ui-radio-panel.mjs.map +1 -0
- package/fesm2022/bravura-ui-selection-panel.mjs +306 -0
- package/fesm2022/bravura-ui-selection-panel.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-skeletons.mjs +43 -43
- package/fesm2022/bravura-ui-skeletons.mjs.map +1 -0
- package/fesm2022/bravura-ui-stepper.mjs +251 -0
- package/fesm2022/bravura-ui-stepper.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-tooltip.mjs +32 -24
- package/fesm2022/bravura-ui-tooltip.mjs.map +1 -0
- package/fesm2022/bravura-ui.mjs.map +1 -0
- package/file-upload/file-upload.component.d.ts +1 -1
- package/form-field/form-field.component.d.ts +1 -1
- package/icon-font/icon.directive.d.ts +1 -1
- package/package.json +76 -120
- package/panel/panel.component.d.ts +1 -1
- package/panel/tinted.directive.d.ts +1 -1
- package/phone-number/phone-number.directive.d.ts +1 -1
- package/phone-number/phone-number.validator.d.ts +2 -2
- package/radio-panel/radio-panel-item.component.d.ts +1 -1
- package/radio-panel/radio-panel.component.d.ts +1 -1
- package/radio-panel/testing/test-api.d.ts +2 -3
- package/selection-panel/selection-panel-item.component.d.ts +1 -1
- package/selection-panel/selection-panel.directive.d.ts +1 -1
- package/skeletons/skeleton-loader-presets.directive.d.ts +3 -3
- package/stepper/stepper.component.d.ts +1 -1
- package/theme/_bui-card.scss +56 -56
- package/theme/_ui-theme.scss +112 -112
- package/theme/global-style-by-bootstrap.scss +3 -3
- package/theme/global-style-by-tailwind.scss +3 -3
- package/theme/scrollbar.scss +40 -40
- package/tooltip/tooltip.component.d.ts +2 -0
- package/tooltip/tooltip.directive.d.ts +3 -5
- package/esm2020/alert/alert-container.component.mjs +0 -207
- package/esm2020/alert/alert-message.component.mjs +0 -102
- package/esm2020/alert/alert.module.mjs +0 -22
- package/esm2020/alert/testing/test-api.mjs +0 -44
- package/esm2020/behavior/behavior.module.mjs +0 -37
- package/esm2020/behavior/sizing-monitor.directive.mjs +0 -31
- package/esm2020/behavior/sizing.directive.mjs +0 -256
- package/esm2020/clip-note/clip-note.component.mjs +0 -216
- package/esm2020/clip-note/clip-note.directive.mjs +0 -141
- package/esm2020/clip-note/clip-note.module.mjs +0 -32
- package/esm2020/currency-input/currency-input.module.mjs +0 -19
- package/esm2020/discrete-input/discrete-input.component.mjs +0 -337
- package/esm2020/discrete-input/discrete-input.module.mjs +0 -21
- package/esm2020/file-upload/file-upload.component.mjs +0 -400
- package/esm2020/file-upload/file-upload.module.mjs +0 -44
- package/esm2020/file-upload/file-upload.service.mjs +0 -29
- package/esm2020/form-field/form-field.component.mjs +0 -82
- package/esm2020/form-field/form-field.module.mjs +0 -33
- package/esm2020/icon-font/icon-font.module.mjs +0 -22
- package/esm2020/panel/panel-section.component.mjs +0 -41
- package/esm2020/panel/panel.component.mjs +0 -87
- package/esm2020/panel/panel.module.mjs +0 -23
- package/esm2020/panel/tinted.directive.mjs +0 -60
- package/esm2020/phone-number/phone-number.directive.mjs +0 -188
- package/esm2020/phone-number/phone-number.validator.mjs +0 -64
- package/esm2020/radio-panel/radio-panel-item.component.mjs +0 -93
- package/esm2020/radio-panel/radio-panel.component.mjs +0 -81
- package/esm2020/radio-panel/testing/test-api.mjs +0 -47
- package/esm2020/selection-panel/selection-panel-item.component.mjs +0 -166
- package/esm2020/selection-panel/selection-panel.directive.mjs +0 -119
- package/esm2020/selection-panel/selection-panel.module.mjs +0 -23
- package/esm2020/skeletons/skeleton-loader-presets.directive.mjs +0 -83
- package/esm2020/skeletons/skeletons.module.mjs +0 -35
- package/esm2020/stepper/stepper.component.mjs +0 -176
- package/esm2020/stepper/stepper.module.mjs +0 -52
- package/esm2020/tooltip/tooltip.component.mjs +0 -54
- package/esm2020/tooltip/tooltip.directive.mjs +0 -149
- package/esm2020/tooltip/tooltip.module.mjs +0 -25
- package/fesm2015/bravura-ui-alert-testing.mjs +0 -64
- package/fesm2015/bravura-ui-alert-testing.mjs.map +0 -1
- package/fesm2015/bravura-ui-alert.mjs +0 -340
- package/fesm2015/bravura-ui-alert.mjs.map +0 -1
- package/fesm2015/bravura-ui-behavior.mjs +0 -515
- package/fesm2015/bravura-ui-behavior.mjs.map +0 -1
- package/fesm2015/bravura-ui-clip-note.mjs +0 -393
- package/fesm2015/bravura-ui-clip-note.mjs.map +0 -1
- package/fesm2015/bravura-ui-common.mjs +0 -96
- package/fesm2015/bravura-ui-common.mjs.map +0 -1
- package/fesm2015/bravura-ui-currency-input.mjs +0 -300
- package/fesm2015/bravura-ui-currency-input.mjs.map +0 -1
- package/fesm2015/bravura-ui-decimal-input.mjs +0 -145
- package/fesm2015/bravura-ui-decimal-input.mjs.map +0 -1
- package/fesm2015/bravura-ui-discrete-input.mjs +0 -365
- package/fesm2015/bravura-ui-discrete-input.mjs.map +0 -1
- package/fesm2015/bravura-ui-file-upload.mjs +0 -478
- package/fesm2015/bravura-ui-file-upload.mjs.map +0 -1
- package/fesm2015/bravura-ui-form-field.mjs +0 -120
- package/fesm2015/bravura-ui-form-field.mjs.map +0 -1
- package/fesm2015/bravura-ui-icon-font.mjs +0 -178
- package/fesm2015/bravura-ui-icon-font.mjs.map +0 -1
- package/fesm2015/bravura-ui-panel.mjs +0 -210
- package/fesm2015/bravura-ui-panel.mjs.map +0 -1
- package/fesm2015/bravura-ui-phone-number.mjs +0 -327
- package/fesm2015/bravura-ui-phone-number.mjs.map +0 -1
- package/fesm2015/bravura-ui-radio-panel-testing.mjs +0 -63
- package/fesm2015/bravura-ui-radio-panel-testing.mjs.map +0 -1
- package/fesm2015/bravura-ui-radio-panel.mjs +0 -200
- package/fesm2015/bravura-ui-radio-panel.mjs.map +0 -1
- package/fesm2015/bravura-ui-selection-panel.mjs +0 -311
- package/fesm2015/bravura-ui-selection-panel.mjs.map +0 -1
- package/fesm2015/bravura-ui-skeletons.mjs +0 -195
- package/fesm2015/bravura-ui-skeletons.mjs.map +0 -1
- package/fesm2015/bravura-ui-stepper.mjs +0 -253
- package/fesm2015/bravura-ui-stepper.mjs.map +0 -1
- package/fesm2015/bravura-ui-tooltip.mjs +0 -229
- package/fesm2015/bravura-ui-tooltip.mjs.map +0 -1
- package/fesm2015/bravura-ui.mjs.map +0 -1
- package/fesm2020/bravura-ui-alert-testing.mjs.map +0 -1
- package/fesm2020/bravura-ui-alert.mjs +0 -328
- package/fesm2020/bravura-ui-alert.mjs.map +0 -1
- package/fesm2020/bravura-ui-behavior.mjs.map +0 -1
- package/fesm2020/bravura-ui-clip-note.mjs.map +0 -1
- package/fesm2020/bravura-ui-common.mjs.map +0 -1
- package/fesm2020/bravura-ui-currency-input.mjs.map +0 -1
- package/fesm2020/bravura-ui-decimal-input.mjs.map +0 -1
- package/fesm2020/bravura-ui-discrete-input.mjs.map +0 -1
- package/fesm2020/bravura-ui-file-upload.mjs +0 -474
- package/fesm2020/bravura-ui-file-upload.mjs.map +0 -1
- package/fesm2020/bravura-ui-form-field.mjs.map +0 -1
- package/fesm2020/bravura-ui-icon-font.mjs.map +0 -1
- package/fesm2020/bravura-ui-panel.mjs +0 -206
- package/fesm2020/bravura-ui-panel.mjs.map +0 -1
- package/fesm2020/bravura-ui-phone-number.mjs.map +0 -1
- package/fesm2020/bravura-ui-radio-panel-testing.mjs.map +0 -1
- package/fesm2020/bravura-ui-radio-panel.mjs.map +0 -1
- package/fesm2020/bravura-ui-selection-panel.mjs +0 -306
- package/fesm2020/bravura-ui-selection-panel.mjs.map +0 -1
- package/fesm2020/bravura-ui-skeletons.mjs.map +0 -1
- package/fesm2020/bravura-ui-stepper.mjs +0 -251
- package/fesm2020/bravura-ui-stepper.mjs.map +0 -1
- package/fesm2020/bravura-ui-tooltip.mjs.map +0 -1
- package/fesm2020/bravura-ui.mjs +0 -8
- package/fesm2020/bravura-ui.mjs.map +0 -1
- /package/{esm2020 → esm2022}/alert/bravura-ui-alert.mjs +0 -0
- /package/{esm2020 → esm2022}/alert/testing/bravura-ui-alert-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/behavior/bravura-ui-behavior.mjs +0 -0
- /package/{esm2020 → esm2022}/bravura-ui.mjs +0 -0
- /package/{esm2020 → esm2022}/clip-note/bravura-ui-clip-note.mjs +0 -0
- /package/{esm2020 → esm2022}/common/bravura-ui-common.mjs +0 -0
- /package/{esm2020 → esm2022}/currency-input/bravura-ui-currency-input.mjs +0 -0
- /package/{esm2020 → esm2022}/decimal-input/bravura-ui-decimal-input.mjs +0 -0
- /package/{esm2020 → esm2022}/decimal-input/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/discrete-input/bravura-ui-discrete-input.mjs +0 -0
- /package/{esm2020 → esm2022}/file-upload/bravura-ui-file-upload.mjs +0 -0
- /package/{esm2020 → esm2022}/form-field/bravura-ui-form-field.mjs +0 -0
- /package/{esm2020 → esm2022}/icon-font/bravura-ui-icon-font.mjs +0 -0
- /package/{esm2020 → esm2022}/panel/bravura-ui-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/phone-number/bravura-ui-phone-number.mjs +0 -0
- /package/{esm2020 → esm2022}/radio-panel/bravura-ui-radio-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/radio-panel/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/radio-panel/testing/bravura-ui-radio-panel-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/selection-panel/bravura-ui-selection-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/skeletons/bravura-ui-skeletons.mjs +0 -0
- /package/{esm2020 → esm2022}/stepper/bravura-ui-stepper.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/bravura-ui-tooltip.mjs +0 -0
- /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
|
-
| ^
|
|
12
|
-
| ^
|
|
13
|
-
| ^
|
|
14
|
-
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|