@villedemontreal/angular-ui 13.2.1 → 13.3.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/esm2020/lib/bao.module.mjs +12 -7
- package/esm2020/lib/core/breakpoints.mjs +13 -0
- package/esm2020/lib/core/index.mjs +8 -0
- package/esm2020/lib/dropdown-menu/dropdown-menu.component.mjs +10 -3
- package/esm2020/lib/modal/modal-container.mjs +2 -2
- package/esm2020/lib/snack-bar/index.mjs +12 -0
- package/esm2020/lib/snack-bar/module.mjs +54 -0
- package/esm2020/lib/snack-bar/simple-snack-bar.component.mjs +92 -0
- package/esm2020/lib/snack-bar/snack-bar-animations.mjs +28 -0
- package/esm2020/lib/snack-bar/snack-bar-config.mjs +37 -0
- package/esm2020/lib/snack-bar/snack-bar-container.mjs +272 -0
- package/esm2020/lib/snack-bar/snack-bar-ref.mjs +75 -0
- package/esm2020/lib/snack-bar/snack-bar.mjs +251 -0
- package/esm2020/lib/system-header/index.mjs +8 -0
- package/esm2020/lib/system-header/module.mjs +33 -0
- package/esm2020/lib/system-header/system-header.component.mjs +128 -0
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/villedemontreal-angular-ui.mjs +981 -15
- package/fesm2015/villedemontreal-angular-ui.mjs.map +1 -1
- package/fesm2020/villedemontreal-angular-ui.mjs +977 -15
- package/fesm2020/villedemontreal-angular-ui.mjs.map +1 -1
- package/lib/bao.module.d.ts +3 -1
- package/lib/core/breakpoints.d.ts +7 -0
- package/lib/core/index.d.ts +2 -0
- package/lib/snack-bar/index.d.ts +6 -0
- package/lib/snack-bar/module.d.ts +13 -0
- package/lib/snack-bar/simple-snack-bar.component.d.ts +51 -0
- package/lib/snack-bar/snack-bar-animations.d.ts +8 -0
- package/lib/snack-bar/snack-bar-config.d.ts +51 -0
- package/lib/snack-bar/snack-bar-container.d.ts +111 -0
- package/lib/snack-bar/snack-bar-ref.d.ts +51 -0
- package/lib/snack-bar/snack-bar.d.ts +89 -0
- package/lib/system-header/index.d.ts +2 -0
- package/lib/system-header/module.d.ts +9 -0
- package/lib/system-header/system-header.component.d.ts +41 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 Ville de Montreal. All rights reserved.
|
|
3
|
+
* Licensed under the MIT license.
|
|
4
|
+
* See LICENSE file in the project root for full license information.
|
|
5
|
+
*/
|
|
6
|
+
import { ChangeDetectionStrategy, Component, Inject, ViewEncapsulation } from '@angular/core';
|
|
7
|
+
import { ICONS_DCT } from '../icon/icons-dictionary';
|
|
8
|
+
import { BAO_SNACK_BAR_DATA } from './snack-bar-config';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "./snack-bar-ref";
|
|
11
|
+
import * as i2 from "../icon/icon.component";
|
|
12
|
+
import * as i3 from "../button/button.component";
|
|
13
|
+
import * as i4 from "@angular/common";
|
|
14
|
+
const toastTypeToAttributes = {
|
|
15
|
+
info: {
|
|
16
|
+
toastClass: 'bao-snackbar-info',
|
|
17
|
+
icon: 'icon-info',
|
|
18
|
+
iconTitle: 'Information',
|
|
19
|
+
politeness: 'assertive'
|
|
20
|
+
},
|
|
21
|
+
success: {
|
|
22
|
+
toastClass: 'bao-snackbar-success',
|
|
23
|
+
icon: 'icon-check-circle',
|
|
24
|
+
iconTitle: 'Succès',
|
|
25
|
+
politeness: 'polite'
|
|
26
|
+
},
|
|
27
|
+
danger: {
|
|
28
|
+
toastClass: 'bao-snackbar-danger',
|
|
29
|
+
icon: 'icon-error',
|
|
30
|
+
iconTitle: 'Erreur',
|
|
31
|
+
politeness: 'assertive'
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* A component used to open as the default snack bar, matching material spec.
|
|
36
|
+
* This should only be used internally by the snack bar service.
|
|
37
|
+
*/
|
|
38
|
+
export class BaoSimpleSnackBarComponent {
|
|
39
|
+
constructor(snackBarRef, data) {
|
|
40
|
+
this.snackBarRef = snackBarRef;
|
|
41
|
+
this.showCloseTitle = 'Fermer le message';
|
|
42
|
+
this.data = data;
|
|
43
|
+
}
|
|
44
|
+
/** Returns the politeness */
|
|
45
|
+
get politeness() {
|
|
46
|
+
return (toastTypeToAttributes[this.data.toastType]?.politeness ||
|
|
47
|
+
toastTypeToAttributes['info'].politeness);
|
|
48
|
+
}
|
|
49
|
+
/** Returns the toast class */
|
|
50
|
+
get toastClass() {
|
|
51
|
+
return (toastTypeToAttributes[this.data.toastType]?.toastClass ||
|
|
52
|
+
toastTypeToAttributes['info'].toastClass);
|
|
53
|
+
}
|
|
54
|
+
/** Returns the toast icon */
|
|
55
|
+
get toastIcon() {
|
|
56
|
+
return (toastTypeToAttributes[this.data.toastType]?.icon ||
|
|
57
|
+
toastTypeToAttributes['info'].icon);
|
|
58
|
+
}
|
|
59
|
+
/** Returns the toast icon title */
|
|
60
|
+
get toastIconTitle() {
|
|
61
|
+
return (toastTypeToAttributes[this.data.toastType]?.iconTitle ||
|
|
62
|
+
toastTypeToAttributes['info'].iconTitle);
|
|
63
|
+
}
|
|
64
|
+
/** If the action button should be shown. */
|
|
65
|
+
get hasAction() {
|
|
66
|
+
return !!this.data.actionLabelOrIcon;
|
|
67
|
+
}
|
|
68
|
+
/** If the action is an icon */
|
|
69
|
+
get isActionIcon() {
|
|
70
|
+
return !!ICONS_DCT[this.data.actionLabelOrIcon];
|
|
71
|
+
}
|
|
72
|
+
/** Performs the action on the snack bar. */
|
|
73
|
+
action() {
|
|
74
|
+
this.snackBarRef.dismissWithAction();
|
|
75
|
+
}
|
|
76
|
+
/** Closes the snack bar. */
|
|
77
|
+
close() {
|
|
78
|
+
this.snackBarRef.dismiss();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
BaoSimpleSnackBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSimpleSnackBarComponent, deps: [{ token: i1.BaoSnackBarRef }, { token: BAO_SNACK_BAR_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
82
|
+
BaoSimpleSnackBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: BaoSimpleSnackBarComponent, selector: "bao-simple-snack-bar", host: { classAttribute: "bao-simple-snackbar" }, ngImport: i0, template: "<div\n class=\"bao-snackbar show\"\n [ngClass]=\"toastClass\"\n [attr.aria-live]=\"politeness\"\n aria-atomic=\"true\"\n>\n <div class=\"bao-snackbar-icon\">\n <bao-icon [svgIcon]=\"toastIcon\" [title]=\"toastIconTitle\"></bao-icon>\n </div>\n <div class=\"bao-snackbar-body\">\n {{ data.message }}\n </div>\n <div class=\"bao-snackbar-action\">\n <div *ngIf=\"hasAction\">\n <button\n bao-button\n role=\"button\"\n type=\"utility\"\n level=\"tertiary\"\n [reversed]=\"true\"\n [title]=\"data.actionLabelOrIcon\"\n (click)=\"action()\"\n >\n <bao-icon\n *ngIf=\"isActionIcon; else isActionText\"\n [svgIcon]=\"data.actionLabelOrIcon\"\n [title]=\"data.actionLabelOrIcon\"\n ></bao-icon>\n <ng-template #isActionText\n ><span>{{ data.actionLabelOrIcon }}</span></ng-template\n >\n </button>\n </div>\n <div *ngIf=\"data.showClose\">\n <button\n bao-button\n role=\"button\"\n type=\"utility\"\n level=\"tertiary\"\n [reversed]=\"true\"\n title=\"{{ showCloseTitle }}\"\n (click)=\"close()\"\n >\n <bao-icon svgIcon=\"icon-x\" title=\"{{ showCloseTitle }}\"></bao-icon>\n </button>\n </div>\n </div>\n</div>\n", styles: [".bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.bao-container{max-width:576px}}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.bao-snackbar{overflow:hidden;font-size:.875rem;line-height:1.25rem;color:#fff;background-color:#004b7b;background-clip:padding-box;box-shadow:0 2px 8px #0000001a;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem;width:100%}.bao-snackbar:not(:last-child){margin-bottom:1rem}.bao-snackbar.showing{opacity:1}.bao-snackbar.show{display:inline-flex;opacity:1}.bao-snackbar.hide{display:none}@media (min-width: 768px){.bao-snackbar{margin:1rem;width:auto}}.bao-snackbar-icon{display:inline-flex;align-items:center;flex-grow:0;margin:1rem 0 1rem 1rem}.bao-snackbar-body{display:flex;align-items:center;padding:1rem;margin:0}.bao-snackbar-action{display:flex;align-items:center;margin-left:auto}.bao-snackbar-action:last-child{margin-right:.5rem}.bao-snackbar-info{color:#fff;background-color:#004b7b}.bao-snackbar-success{color:#fff;background-color:#025d29}.bao-snackbar-danger{color:#fff;background-color:#851a00}\n"], components: [{ type: i2.BaoIconComponent, selector: "bao-icon", inputs: ["color", "size", "svgIcon", "title"], exportAs: ["baoIcon"] }, { type: i3.BaoButtonComponent, selector: "button[bao-button]", inputs: ["displayType", "level", "size", "loading", "reversed", "loadingSpinnerAriaLabel", "fullWidth"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
83
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSimpleSnackBarComponent, decorators: [{
|
|
84
|
+
type: Component,
|
|
85
|
+
args: [{ selector: 'bao-simple-snack-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
86
|
+
class: 'bao-simple-snackbar'
|
|
87
|
+
}, template: "<div\n class=\"bao-snackbar show\"\n [ngClass]=\"toastClass\"\n [attr.aria-live]=\"politeness\"\n aria-atomic=\"true\"\n>\n <div class=\"bao-snackbar-icon\">\n <bao-icon [svgIcon]=\"toastIcon\" [title]=\"toastIconTitle\"></bao-icon>\n </div>\n <div class=\"bao-snackbar-body\">\n {{ data.message }}\n </div>\n <div class=\"bao-snackbar-action\">\n <div *ngIf=\"hasAction\">\n <button\n bao-button\n role=\"button\"\n type=\"utility\"\n level=\"tertiary\"\n [reversed]=\"true\"\n [title]=\"data.actionLabelOrIcon\"\n (click)=\"action()\"\n >\n <bao-icon\n *ngIf=\"isActionIcon; else isActionText\"\n [svgIcon]=\"data.actionLabelOrIcon\"\n [title]=\"data.actionLabelOrIcon\"\n ></bao-icon>\n <ng-template #isActionText\n ><span>{{ data.actionLabelOrIcon }}</span></ng-template\n >\n </button>\n </div>\n <div *ngIf=\"data.showClose\">\n <button\n bao-button\n role=\"button\"\n type=\"utility\"\n level=\"tertiary\"\n [reversed]=\"true\"\n title=\"{{ showCloseTitle }}\"\n (click)=\"close()\"\n >\n <bao-icon svgIcon=\"icon-x\" title=\"{{ showCloseTitle }}\"></bao-icon>\n </button>\n </div>\n </div>\n</div>\n", styles: [".bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.bao-container{max-width:576px}}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.bao-snackbar{overflow:hidden;font-size:.875rem;line-height:1.25rem;color:#fff;background-color:#004b7b;background-clip:padding-box;box-shadow:0 2px 8px #0000001a;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem;width:100%}.bao-snackbar:not(:last-child){margin-bottom:1rem}.bao-snackbar.showing{opacity:1}.bao-snackbar.show{display:inline-flex;opacity:1}.bao-snackbar.hide{display:none}@media (min-width: 768px){.bao-snackbar{margin:1rem;width:auto}}.bao-snackbar-icon{display:inline-flex;align-items:center;flex-grow:0;margin:1rem 0 1rem 1rem}.bao-snackbar-body{display:flex;align-items:center;padding:1rem;margin:0}.bao-snackbar-action{display:flex;align-items:center;margin-left:auto}.bao-snackbar-action:last-child{margin-right:.5rem}.bao-snackbar-info{color:#fff;background-color:#004b7b}.bao-snackbar-success{color:#fff;background-color:#025d29}.bao-snackbar-danger{color:#fff;background-color:#851a00}\n"] }]
|
|
88
|
+
}], ctorParameters: function () { return [{ type: i1.BaoSnackBarRef }, { type: undefined, decorators: [{
|
|
89
|
+
type: Inject,
|
|
90
|
+
args: [BAO_SNACK_BAR_DATA]
|
|
91
|
+
}] }]; } });
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNuYWNrLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvc25hY2stYmFyL3NpbXBsZS1zbmFjay1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL3NuYWNrLWJhci9zaW1wbGUtc25hY2stYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBQ04saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQXdCLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7OztBQUc5RSxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksRUFBRTtRQUNKLFVBQVUsRUFBRSxtQkFBbUI7UUFDL0IsSUFBSSxFQUFFLFdBQVc7UUFDakIsU0FBUyxFQUFFLGFBQWE7UUFDeEIsVUFBVSxFQUFFLFdBQVc7S0FDeEI7SUFDRCxPQUFPLEVBQUU7UUFDUCxVQUFVLEVBQUUsc0JBQXNCO1FBQ2xDLElBQUksRUFBRSxtQkFBbUI7UUFDekIsU0FBUyxFQUFFLFFBQVE7UUFDbkIsVUFBVSxFQUFFLFFBQVE7S0FDckI7SUFDRCxNQUFNLEVBQUU7UUFDTixVQUFVLEVBQUUscUJBQXFCO1FBQ2pDLElBQUksRUFBRSxZQUFZO1FBQ2xCLFNBQVMsRUFBRSxRQUFRO1FBQ25CLFVBQVUsRUFBRSxXQUFXO0tBQ3hCO0NBQ0YsQ0FBQztBQWlCRjs7O0dBR0c7QUFXSCxNQUFNLE9BQU8sMEJBQTBCO0lBV3JDLFlBQ1MsV0FBdUQsRUFDbEMsSUFBUztRQUQ5QixnQkFBVyxHQUFYLFdBQVcsQ0FBNEM7UUFYekQsbUJBQWMsR0FBRyxtQkFBbUIsQ0FBQztRQWMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLElBQUksVUFBVTtRQUNaLE9BQU8sQ0FDTCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFVBQVU7WUFDdEQscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVELDhCQUE4QjtJQUM5QixJQUFJLFVBQVU7UUFDWixPQUFPLENBQ0wscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVO1lBQ3RELHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCw2QkFBNkI7SUFDN0IsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUNMLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSTtZQUNoRCxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLElBQUksY0FBYztRQUNoQixPQUFPLENBQ0wscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTO1lBQ3JELHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUN2QyxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLElBQUksWUFBWTtRQUNkLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELDRDQUE0QztJQUNyQyxNQUFNO1FBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCw0QkFBNEI7SUFDckIsS0FBSztRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQzs7d0hBcEVVLDBCQUEwQixnREFhM0Isa0JBQWtCOzRHQWJqQiwwQkFBMEIsNkdDakV2Qyx5ekNBZ0RBOzRGRGlCYSwwQkFBMEI7a0JBVnRDLFNBQVM7K0JBQ0Usc0JBQXNCLGlCQUdqQixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxxQkFBcUI7cUJBQzdCOzswQkFlRSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0LFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElDT05TX0RDVCB9IGZyb20gJy4uL2ljb24vaWNvbnMtZGljdGlvbmFyeSc7XG5pbXBvcnQgeyBCYW9TbmFja0JhclRvYXN0VHlwZSwgQkFPX1NOQUNLX0JBUl9EQVRBIH0gZnJvbSAnLi9zbmFjay1iYXItY29uZmlnJztcbmltcG9ydCB7IEJhb1NuYWNrQmFyUmVmIH0gZnJvbSAnLi9zbmFjay1iYXItcmVmJztcblxuY29uc3QgdG9hc3RUeXBlVG9BdHRyaWJ1dGVzID0ge1xuICBpbmZvOiB7XG4gICAgdG9hc3RDbGFzczogJ2Jhby1zbmFja2Jhci1pbmZvJyxcbiAgICBpY29uOiAnaWNvbi1pbmZvJyxcbiAgICBpY29uVGl0bGU6ICdJbmZvcm1hdGlvbicsXG4gICAgcG9saXRlbmVzczogJ2Fzc2VydGl2ZSdcbiAgfSxcbiAgc3VjY2Vzczoge1xuICAgIHRvYXN0Q2xhc3M6ICdiYW8tc25hY2tiYXItc3VjY2VzcycsXG4gICAgaWNvbjogJ2ljb24tY2hlY2stY2lyY2xlJyxcbiAgICBpY29uVGl0bGU6ICdTdWNjw6hzJyxcbiAgICBwb2xpdGVuZXNzOiAncG9saXRlJ1xuICB9LFxuICBkYW5nZXI6IHtcbiAgICB0b2FzdENsYXNzOiAnYmFvLXNuYWNrYmFyLWRhbmdlcicsXG4gICAgaWNvbjogJ2ljb24tZXJyb3InLFxuICAgIGljb25UaXRsZTogJ0VycmV1cicsXG4gICAgcG9saXRlbmVzczogJ2Fzc2VydGl2ZSdcbiAgfVxufTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGEgc2ltcGxlIHNuYWNrIGJhciBjb21wb25lbnQgdGhhdCBoYXMgYSBtZXNzYWdlIGFuZCBhIHNpbmdsZSBhY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRleHRPbmx5U25hY2tCYXIge1xuICBkYXRhOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHRvYXN0VHlwZTogQmFvU25hY2tCYXJUb2FzdFR5cGU7XG4gICAgYWN0aW9uTGFiZWxPckljb246IHN0cmluZztcbiAgICBzaG93Q2xvc2U6IGJvb2xlYW47XG4gIH07XG4gIHNuYWNrQmFyUmVmOiBCYW9TbmFja0JhclJlZjxJVGV4dE9ubHlTbmFja0Jhcj47XG4gIGFjdGlvbjogKCkgPT4gdm9pZDtcbiAgaGFzQWN0aW9uOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgY29tcG9uZW50IHVzZWQgdG8gb3BlbiBhcyB0aGUgZGVmYXVsdCBzbmFjayBiYXIsIG1hdGNoaW5nIG1hdGVyaWFsIHNwZWMuXG4gKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgc25hY2sgYmFyIHNlcnZpY2UuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhby1zaW1wbGUtc25hY2stYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICdzaW1wbGUtc25hY2stYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3NpbXBsZS1zbmFjay1iYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Jhby1zaW1wbGUtc25hY2tiYXInXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvU2ltcGxlU25hY2tCYXJDb21wb25lbnQgaW1wbGVtZW50cyBJVGV4dE9ubHlTbmFja0JhciB7XG4gIHB1YmxpYyBzaG93Q2xvc2VUaXRsZSA9ICdGZXJtZXIgbGUgbWVzc2FnZSc7XG5cbiAgLyoqIERhdGEgdGhhdCB3YXMgaW5qZWN0ZWQgaW50byB0aGUgc25hY2sgYmFyLiAqL1xuICBwdWJsaWMgZGF0YToge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICB0b2FzdFR5cGU6IEJhb1NuYWNrQmFyVG9hc3RUeXBlO1xuICAgIGFjdGlvbkxhYmVsT3JJY29uOiBzdHJpbmc7XG4gICAgc2hvd0Nsb3NlOiBib29sZWFuO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzbmFja0JhclJlZjogQmFvU25hY2tCYXJSZWY8QmFvU2ltcGxlU25hY2tCYXJDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoQkFPX1NOQUNLX0JBUl9EQVRBKSBkYXRhOiBhbnlcbiAgKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBwb2xpdGVuZXNzICovXG4gIGdldCBwb2xpdGVuZXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRvYXN0VHlwZVRvQXR0cmlidXRlc1t0aGlzLmRhdGEudG9hc3RUeXBlXT8ucG9saXRlbmVzcyB8fFxuICAgICAgdG9hc3RUeXBlVG9BdHRyaWJ1dGVzWydpbmZvJ10ucG9saXRlbmVzc1xuICAgICk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgdG9hc3QgY2xhc3MgKi9cbiAgZ2V0IHRvYXN0Q2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgdG9hc3RUeXBlVG9BdHRyaWJ1dGVzW3RoaXMuZGF0YS50b2FzdFR5cGVdPy50b2FzdENsYXNzIHx8XG4gICAgICB0b2FzdFR5cGVUb0F0dHJpYnV0ZXNbJ2luZm8nXS50b2FzdENsYXNzXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSB0b2FzdCBpY29uICovXG4gIGdldCB0b2FzdEljb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgdG9hc3RUeXBlVG9BdHRyaWJ1dGVzW3RoaXMuZGF0YS50b2FzdFR5cGVdPy5pY29uIHx8XG4gICAgICB0b2FzdFR5cGVUb0F0dHJpYnV0ZXNbJ2luZm8nXS5pY29uXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSB0b2FzdCBpY29uIHRpdGxlICovXG4gIGdldCB0b2FzdEljb25UaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0b2FzdFR5cGVUb0F0dHJpYnV0ZXNbdGhpcy5kYXRhLnRvYXN0VHlwZV0/Lmljb25UaXRsZSB8fFxuICAgICAgdG9hc3RUeXBlVG9BdHRyaWJ1dGVzWydpbmZvJ10uaWNvblRpdGxlXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBJZiB0aGUgYWN0aW9uIGJ1dHRvbiBzaG91bGQgYmUgc2hvd24uICovXG4gIGdldCBoYXNBY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhLmFjdGlvbkxhYmVsT3JJY29uO1xuICB9XG5cbiAgLyoqIElmIHRoZSBhY3Rpb24gaXMgYW4gaWNvbiAqL1xuICBnZXQgaXNBY3Rpb25JY29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIUlDT05TX0RDVFt0aGlzLmRhdGEuYWN0aW9uTGFiZWxPckljb25dO1xuICB9XG5cbiAgLyoqIFBlcmZvcm1zIHRoZSBhY3Rpb24gb24gdGhlIHNuYWNrIGJhci4gKi9cbiAgcHVibGljIGFjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKCk7XG4gIH1cblxuICAvKiogQ2xvc2VzIHRoZSBzbmFjayBiYXIuICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImJhby1zbmFja2JhciBzaG93XCJcbiAgW25nQ2xhc3NdPVwidG9hc3RDbGFzc1wiXG4gIFthdHRyLmFyaWEtbGl2ZV09XCJwb2xpdGVuZXNzXCJcbiAgYXJpYS1hdG9taWM9XCJ0cnVlXCJcbj5cbiAgPGRpdiBjbGFzcz1cImJhby1zbmFja2Jhci1pY29uXCI+XG4gICAgPGJhby1pY29uIFtzdmdJY29uXT1cInRvYXN0SWNvblwiIFt0aXRsZV09XCJ0b2FzdEljb25UaXRsZVwiPjwvYmFvLWljb24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYmFvLXNuYWNrYmFyLWJvZHlcIj5cbiAgICB7eyBkYXRhLm1lc3NhZ2UgfX1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJiYW8tc25hY2tiYXItYWN0aW9uXCI+XG4gICAgPGRpdiAqbmdJZj1cImhhc0FjdGlvblwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBiYW8tYnV0dG9uXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0eXBlPVwidXRpbGl0eVwiXG4gICAgICAgIGxldmVsPVwidGVydGlhcnlcIlxuICAgICAgICBbcmV2ZXJzZWRdPVwidHJ1ZVwiXG4gICAgICAgIFt0aXRsZV09XCJkYXRhLmFjdGlvbkxhYmVsT3JJY29uXCJcbiAgICAgICAgKGNsaWNrKT1cImFjdGlvbigpXCJcbiAgICAgID5cbiAgICAgICAgPGJhby1pY29uXG4gICAgICAgICAgKm5nSWY9XCJpc0FjdGlvbkljb247IGVsc2UgaXNBY3Rpb25UZXh0XCJcbiAgICAgICAgICBbc3ZnSWNvbl09XCJkYXRhLmFjdGlvbkxhYmVsT3JJY29uXCJcbiAgICAgICAgICBbdGl0bGVdPVwiZGF0YS5hY3Rpb25MYWJlbE9ySWNvblwiXG4gICAgICAgID48L2Jhby1pY29uPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2lzQWN0aW9uVGV4dFxuICAgICAgICAgID48c3Bhbj57eyBkYXRhLmFjdGlvbkxhYmVsT3JJY29uIH19PC9zcGFuPjwvbmctdGVtcGxhdGVcbiAgICAgICAgPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImRhdGEuc2hvd0Nsb3NlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGJhby1idXR0b25cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHR5cGU9XCJ1dGlsaXR5XCJcbiAgICAgICAgbGV2ZWw9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgIFtyZXZlcnNlZF09XCJ0cnVlXCJcbiAgICAgICAgdGl0bGU9XCJ7eyBzaG93Q2xvc2VUaXRsZSB9fVwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGJhby1pY29uIHN2Z0ljb249XCJpY29uLXhcIiB0aXRsZT1cInt7IHNob3dDbG9zZVRpdGxlIH19XCI+PC9iYW8taWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 Ville de Montreal. All rights reserved.
|
|
3
|
+
* Licensed under the MIT license.
|
|
4
|
+
* See LICENSE file in the project root for full license information.
|
|
5
|
+
*/
|
|
6
|
+
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
7
|
+
/**
|
|
8
|
+
* Animations used by the Material snack bar.
|
|
9
|
+
* @docs-private
|
|
10
|
+
*/
|
|
11
|
+
export const matSnackBarAnimations = {
|
|
12
|
+
/** Animation that shows and hides a snack bar. */
|
|
13
|
+
snackBarState: trigger('state', [
|
|
14
|
+
state('void, hidden', style({
|
|
15
|
+
transform: 'scale(0.8)',
|
|
16
|
+
opacity: 0
|
|
17
|
+
})),
|
|
18
|
+
state('visible', style({
|
|
19
|
+
transform: 'scale(1)',
|
|
20
|
+
opacity: 1
|
|
21
|
+
})),
|
|
22
|
+
transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),
|
|
23
|
+
transition('* => void, * => hidden', animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', style({
|
|
24
|
+
opacity: 0
|
|
25
|
+
})))
|
|
26
|
+
])
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2stYmFyLWFuaW1hdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvc25hY2stYmFyL3NuYWNrLWJhci1hbmltYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQ0wsT0FBTyxFQUVQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBRTdCOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUU5QjtJQUNGLGtEQUFrRDtJQUNsRCxhQUFhLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRTtRQUM5QixLQUFLLENBQ0gsY0FBYyxFQUNkLEtBQUssQ0FBQztZQUNKLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxDQUNIO1FBQ0QsS0FBSyxDQUNILFNBQVMsRUFDVCxLQUFLLENBQUM7WUFDSixTQUFTLEVBQUUsVUFBVTtZQUNyQixPQUFPLEVBQUUsQ0FBQztTQUNYLENBQUMsQ0FDSDtRQUNELFVBQVUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdkUsVUFBVSxDQUNSLHdCQUF3QixFQUN4QixPQUFPLENBQ0wsbUNBQW1DLEVBQ25DLEtBQUssQ0FBQztZQUNKLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxDQUNILENBQ0Y7S0FDRixDQUFDO0NBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhLFxuICBzdGF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cbi8qKlxuICogQW5pbWF0aW9ucyB1c2VkIGJ5IHRoZSBNYXRlcmlhbCBzbmFjayBiYXIuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRTbmFja0JhckFuaW1hdGlvbnM6IHtcbiAgcmVhZG9ubHkgc25hY2tCYXJTdGF0ZTogQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhO1xufSA9IHtcbiAgLyoqIEFuaW1hdGlvbiB0aGF0IHNob3dzIGFuZCBoaWRlcyBhIHNuYWNrIGJhci4gKi9cbiAgc25hY2tCYXJTdGF0ZTogdHJpZ2dlcignc3RhdGUnLCBbXG4gICAgc3RhdGUoXG4gICAgICAndm9pZCwgaGlkZGVuJyxcbiAgICAgIHN0eWxlKHtcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMC44KScsXG4gICAgICAgIG9wYWNpdHk6IDBcbiAgICAgIH0pXG4gICAgKSxcbiAgICBzdGF0ZShcbiAgICAgICd2aXNpYmxlJyxcbiAgICAgIHN0eWxlKHtcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMSknLFxuICAgICAgICBvcGFjaXR5OiAxXG4gICAgICB9KVxuICAgICksXG4gICAgdHJhbnNpdGlvbignKiA9PiB2aXNpYmxlJywgYW5pbWF0ZSgnMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSknKSksXG4gICAgdHJhbnNpdGlvbihcbiAgICAgICcqID0+IHZvaWQsICogPT4gaGlkZGVuJyxcbiAgICAgIGFuaW1hdGUoXG4gICAgICAgICc3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSknLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgXSlcbn07XG4iXX0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
/** Injection token that can be used to access the data that was passed in to a snack bar. */
|
|
3
|
+
export const BAO_SNACK_BAR_DATA = new InjectionToken('BaoSnackBarData');
|
|
4
|
+
/**
|
|
5
|
+
* Configuration used when opening a snack-bar.
|
|
6
|
+
*/
|
|
7
|
+
export class BaoSnackBarConfig {
|
|
8
|
+
constructor() {
|
|
9
|
+
/** The message to display in the snackbar. */
|
|
10
|
+
this.message = 'No message';
|
|
11
|
+
/** The type of snackbar template to display. */
|
|
12
|
+
this.toastType = 'info';
|
|
13
|
+
/**
|
|
14
|
+
* The attached action to the snack bar. If the name of the action matches an icon provided as part of
|
|
15
|
+
* angular-ui icon dictionnary an icon will be displayed instead of text.
|
|
16
|
+
* */
|
|
17
|
+
this.actionLabelOrIcon = '';
|
|
18
|
+
/** Displays the close button when set to true */
|
|
19
|
+
this.showClose = false;
|
|
20
|
+
/** The length of time in milliseconds to wait before automatically dismissing the snack bar. */
|
|
21
|
+
this.duration = 5000;
|
|
22
|
+
/** The politeness level for the MatAriaLiveAnnouncer announcement. */
|
|
23
|
+
this.politeness = 'assertive';
|
|
24
|
+
/**
|
|
25
|
+
* Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom
|
|
26
|
+
* component or template, the announcement message will default to the specified message.
|
|
27
|
+
*/
|
|
28
|
+
this.announcementMessage = '';
|
|
29
|
+
/** Data being injected into the child component. */
|
|
30
|
+
this.data = null;
|
|
31
|
+
/** The horizontal position to place the snack bar. */
|
|
32
|
+
this.horizontalPosition = 'left';
|
|
33
|
+
/** The vertical position to place the snack bar. */
|
|
34
|
+
this.verticalPosition = 'bottom';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2stYmFyLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9zbmFjay1iYXIvc25hY2stYmFyLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsY0FBYyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUVqRSw2RkFBNkY7QUFDN0YsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQU0saUJBQWlCLENBQUMsQ0FBQztBQWdCN0U7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ0UsOENBQThDO1FBQ3ZDLFlBQU8sR0FBRyxZQUFZLENBQUM7UUFFOUIsZ0RBQWdEO1FBQ3pDLGNBQVMsR0FBMEIsTUFBTSxDQUFDO1FBRWpEOzs7YUFHSztRQUNFLHNCQUFpQixHQUFZLEVBQUUsQ0FBQztRQUV2QyxpREFBaUQ7UUFDMUMsY0FBUyxHQUFhLEtBQUssQ0FBQztRQUVuQyxnR0FBZ0c7UUFDekYsYUFBUSxHQUFZLElBQUksQ0FBQztRQUVoQyxzRUFBc0U7UUFDL0QsZUFBVSxHQUF3QixXQUFXLENBQUM7UUFFckQ7OztXQUdHO1FBQ0ksd0JBQW1CLEdBQVksRUFBRSxDQUFDO1FBY3pDLG9EQUFvRDtRQUM3QyxTQUFJLEdBQWMsSUFBSSxDQUFDO1FBRTlCLHNEQUFzRDtRQUMvQyx1QkFBa0IsR0FBbUMsTUFBTSxDQUFDO1FBRW5FLG9EQUFvRDtRQUM3QyxxQkFBZ0IsR0FBaUMsUUFBUSxDQUFDO0lBQ25FLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHsgQXJpYUxpdmVQb2xpdGVuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqIEluamVjdGlvbiB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgZGF0YSB0aGF0IHdhcyBwYXNzZWQgaW4gdG8gYSBzbmFjayBiYXIuICovXG5leHBvcnQgY29uc3QgQkFPX1NOQUNLX0JBUl9EQVRBID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ0Jhb1NuYWNrQmFyRGF0YScpO1xuXG4vKiogUG9zc2libGUgdmFsdWVzIGZvciBob3Jpem9udGFsUG9zaXRpb24gb24gTWF0U25hY2tCYXJDb25maWcuICovXG5leHBvcnQgdHlwZSBCYW9TbmFja0Jhckhvcml6b250YWxQb3NpdGlvbiA9XG4gIHwgJ3N0YXJ0J1xuICB8ICdjZW50ZXInXG4gIHwgJ2VuZCdcbiAgfCAnbGVmdCdcbiAgfCAncmlnaHQnO1xuXG4vKiogUG9zc2libGUgdmFsdWVzIGZvciB2ZXJ0aWNhbFBvc2l0aW9uIG9uIE1hdFNuYWNrQmFyQ29uZmlnLiAqL1xuZXhwb3J0IHR5cGUgQmFvU25hY2tCYXJWZXJ0aWNhbFBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJztcblxuLyoqIFBvc3NpYmxlIHR5cGVzIG9mIHRvYXN0IHRvIGRpc3BsYXkgdGhlIHNuYWNrIGJhciAqL1xuZXhwb3J0IHR5cGUgQmFvU25hY2tCYXJUb2FzdFR5cGUgPSAnaW5mbycgfCAnc3VjY2VzcycgfCAnZGFuZ2VyJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHVzZWQgd2hlbiBvcGVuaW5nIGEgc25hY2stYmFyLlxuICovXG5leHBvcnQgY2xhc3MgQmFvU25hY2tCYXJDb25maWc8RCA9IGFueT4ge1xuICAvKiogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBpbiB0aGUgc25hY2tiYXIuICovXG4gIHB1YmxpYyBtZXNzYWdlID0gJ05vIG1lc3NhZ2UnO1xuXG4gIC8qKiBUaGUgdHlwZSBvZiBzbmFja2JhciB0ZW1wbGF0ZSB0byBkaXNwbGF5LiAqL1xuICBwdWJsaWMgdG9hc3RUeXBlPzogQmFvU25hY2tCYXJUb2FzdFR5cGUgPSAnaW5mbyc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdHRhY2hlZCBhY3Rpb24gdG8gdGhlIHNuYWNrIGJhci4gSWYgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBtYXRjaGVzIGFuIGljb24gcHJvdmlkZWQgYXMgcGFydCBvZlxuICAgKiBhbmd1bGFyLXVpIGljb24gZGljdGlvbm5hcnkgYW4gaWNvbiB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkIG9mIHRleHQuXG4gICAqICovXG4gIHB1YmxpYyBhY3Rpb25MYWJlbE9ySWNvbj86IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBEaXNwbGF5cyB0aGUgY2xvc2UgYnV0dG9uIHdoZW4gc2V0IHRvIHRydWUgKi9cbiAgcHVibGljIHNob3dDbG9zZT86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGhlIGxlbmd0aCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBhdXRvbWF0aWNhbGx5IGRpc21pc3NpbmcgdGhlIHNuYWNrIGJhci4gKi9cbiAgcHVibGljIGR1cmF0aW9uPzogbnVtYmVyID0gNTAwMDtcblxuICAvKiogVGhlIHBvbGl0ZW5lc3MgbGV2ZWwgZm9yIHRoZSBNYXRBcmlhTGl2ZUFubm91bmNlciBhbm5vdW5jZW1lbnQuICovXG4gIHB1YmxpYyBwb2xpdGVuZXNzPzogQXJpYUxpdmVQb2xpdGVuZXNzID0gJ2Fzc2VydGl2ZSc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgdG8gYmUgYW5ub3VuY2VkIGJ5IHRoZSBMaXZlQW5ub3VuY2VyLiBXaGVuIG9wZW5pbmcgYSBzbmFja2JhciB3aXRob3V0IGEgY3VzdG9tXG4gICAqIGNvbXBvbmVudCBvciB0ZW1wbGF0ZSwgdGhlIGFubm91bmNlbWVudCBtZXNzYWdlIHdpbGwgZGVmYXVsdCB0byB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuXG4gICAqL1xuICBwdWJsaWMgYW5ub3VuY2VtZW50TWVzc2FnZT86IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlldyBjb250YWluZXIgdGhhdCBzZXJ2ZXMgYXMgdGhlIHBhcmVudCBmb3IgdGhlIHNuYWNrYmFyIGZvciB0aGUgcHVycG9zZXMgb2YgZGVwZW5kZW5jeVxuICAgKiBpbmplY3Rpb24uIE5vdGU6IHRoaXMgZG9lcyBub3QgYWZmZWN0IHdoZXJlIHRoZSBzbmFja2JhciBpcyBpbnNlcnRlZCBpbiB0aGUgRE9NLlxuICAgKi9cbiAgcHVibGljIHZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIC8qKiBFeHRyYSBDU1MgY2xhc3NlcyB0byBiZSBhZGRlZCB0byB0aGUgc25hY2sgYmFyIGNvbnRhaW5lci4gKi9cbiAgcHVibGljIHBhbmVsQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogVGV4dCBsYXlvdXQgZGlyZWN0aW9uIGZvciB0aGUgc25hY2sgYmFyLiAqL1xuICBwdWJsaWMgZGlyZWN0aW9uPzogRGlyZWN0aW9uO1xuXG4gIC8qKiBEYXRhIGJlaW5nIGluamVjdGVkIGludG8gdGhlIGNoaWxkIGNvbXBvbmVudC4gKi9cbiAgcHVibGljIGRhdGE/OiBEIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIHRvIHBsYWNlIHRoZSBzbmFjayBiYXIuICovXG4gIHB1YmxpYyBob3Jpem9udGFsUG9zaXRpb24/OiBCYW9TbmFja0Jhckhvcml6b250YWxQb3NpdGlvbiA9ICdsZWZ0JztcblxuICAvKiogVGhlIHZlcnRpY2FsIHBvc2l0aW9uIHRvIHBsYWNlIHRoZSBzbmFjayBiYXIuICovXG4gIHB1YmxpYyB2ZXJ0aWNhbFBvc2l0aW9uPzogQmFvU25hY2tCYXJWZXJ0aWNhbFBvc2l0aW9uID0gJ2JvdHRvbSc7XG59XG4iXX0=
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { BasePortalOutlet, CdkPortalOutlet } from '@angular/cdk/portal';
|
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, inject, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { take } from 'rxjs/operators';
|
|
6
|
+
import { matSnackBarAnimations } from './snack-bar-animations';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/cdk/platform";
|
|
9
|
+
import * as i2 from "./snack-bar-config";
|
|
10
|
+
import * as i3 from "@angular/cdk/portal";
|
|
11
|
+
let uniqueId = 0;
|
|
12
|
+
/**
|
|
13
|
+
* Internal component that wraps user-provided snack bar content.
|
|
14
|
+
* @docs-private
|
|
15
|
+
*/
|
|
16
|
+
export class BaoSnackBarContainerComponent extends BasePortalOutlet {
|
|
17
|
+
constructor(_ngZone, _elementRef, _changeDetectorRef, _platform,
|
|
18
|
+
/** The snack bar configuration. */
|
|
19
|
+
snackBarConfig) {
|
|
20
|
+
super();
|
|
21
|
+
this._ngZone = _ngZone;
|
|
22
|
+
this._elementRef = _elementRef;
|
|
23
|
+
this._changeDetectorRef = _changeDetectorRef;
|
|
24
|
+
this._platform = _platform;
|
|
25
|
+
this.snackBarConfig = snackBarConfig;
|
|
26
|
+
this._document = inject(DOCUMENT);
|
|
27
|
+
this._trackedModals = new Set();
|
|
28
|
+
/** Subject for notifying that the snack bar has announced to screen readers. */
|
|
29
|
+
this._onAnnounce = new Subject();
|
|
30
|
+
/** Subject for notifying that the snack bar has exited from view. */
|
|
31
|
+
this._onExit = new Subject();
|
|
32
|
+
/** Subject for notifying that the snack bar has finished entering the view. */
|
|
33
|
+
this._onEnter = new Subject();
|
|
34
|
+
/** The state of the snack bar animations. */
|
|
35
|
+
this._animationState = 'void';
|
|
36
|
+
/** The number of milliseconds to wait before announcing the snack bar's content. */
|
|
37
|
+
this._announceDelay = 150;
|
|
38
|
+
/** Whether the component has been destroyed. */
|
|
39
|
+
this._destroyed = false;
|
|
40
|
+
/** Unique ID of the aria-live element. */
|
|
41
|
+
this._liveElementId = `bao-snack-bar-container-live-${uniqueId++}`;
|
|
42
|
+
/**
|
|
43
|
+
* Attaches a DOM portal to the snack bar container.
|
|
44
|
+
* @deprecated To be turned into a method.
|
|
45
|
+
* @breaking-change 10.0.0
|
|
46
|
+
*/
|
|
47
|
+
this.attachDomPortal = (portal) => {
|
|
48
|
+
this.assertNotAttached();
|
|
49
|
+
const result = this._portalOutlet.attachDomPortal(portal);
|
|
50
|
+
this._afterPortalAttached();
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
// Use aria-live rather than a live role like 'alert' or 'status'
|
|
54
|
+
// because NVDA and JAWS have show inconsistent behavior with live roles.
|
|
55
|
+
if (snackBarConfig.politeness === 'assertive' &&
|
|
56
|
+
!snackBarConfig.announcementMessage) {
|
|
57
|
+
this._live = 'assertive';
|
|
58
|
+
}
|
|
59
|
+
else if (snackBarConfig.politeness === 'off') {
|
|
60
|
+
this._live = 'off';
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this._live = 'polite';
|
|
64
|
+
}
|
|
65
|
+
// Only set role for Firefox. Set role based on aria-live because setting role="alert" implies
|
|
66
|
+
// aria-live="assertive" which may cause issues if aria-live is set to "polite" above.
|
|
67
|
+
if (this._platform.FIREFOX) {
|
|
68
|
+
if (this._live === 'polite') {
|
|
69
|
+
this._role = 'status';
|
|
70
|
+
}
|
|
71
|
+
if (this._live === 'assertive') {
|
|
72
|
+
this._role = 'alert';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Attach a component portal as content to this snack bar container. */
|
|
77
|
+
attachComponentPortal(portal) {
|
|
78
|
+
this.assertNotAttached();
|
|
79
|
+
this.applySnackBarClasses();
|
|
80
|
+
const result = this._portalOutlet.attachComponentPortal(portal);
|
|
81
|
+
this._afterPortalAttached();
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
/** Attach a template portal as content to this snack bar container. */
|
|
85
|
+
attachTemplatePortal(portal) {
|
|
86
|
+
this.assertNotAttached();
|
|
87
|
+
this.applySnackBarClasses();
|
|
88
|
+
const result = this._portalOutlet.attachTemplatePortal(portal);
|
|
89
|
+
this._afterPortalAttached();
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
/** Handle end of animations, updating the state of the snackbar. */
|
|
93
|
+
onAnimationEnd(event) {
|
|
94
|
+
const { fromState, toState } = event;
|
|
95
|
+
if ((toState === 'void' && fromState !== 'void') || toState === 'hidden') {
|
|
96
|
+
this.completeExit();
|
|
97
|
+
}
|
|
98
|
+
if (toState === 'visible') {
|
|
99
|
+
// Note: we shouldn't use `this` inside the zone callback,
|
|
100
|
+
// because it can cause a memory leak.
|
|
101
|
+
const onEnter = this._onEnter;
|
|
102
|
+
this._ngZone.run(() => {
|
|
103
|
+
onEnter.next();
|
|
104
|
+
onEnter.complete();
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** Begin animation of snack bar entrance into view. */
|
|
109
|
+
enter() {
|
|
110
|
+
if (!this._destroyed) {
|
|
111
|
+
this._animationState = 'visible';
|
|
112
|
+
this._changeDetectorRef.detectChanges();
|
|
113
|
+
this.screenReaderAnnounce();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Begin animation of the snack bar exiting from view. */
|
|
117
|
+
exit() {
|
|
118
|
+
// Note: this one transitions to `hidden`, rather than `void`, in order to handle the case
|
|
119
|
+
// where multiple snack bars are opened in quick succession (e.g. two consecutive calls to
|
|
120
|
+
// `MatSnackBar.open`).
|
|
121
|
+
this._animationState = 'hidden';
|
|
122
|
+
// Mark this element with an 'exit' attribute to indicate that the snackbar has
|
|
123
|
+
// been dismissed and will soon be removed from the DOM. This is used by the snackbar
|
|
124
|
+
// test harness.
|
|
125
|
+
this._elementRef.nativeElement.setAttribute('mat-exit', '');
|
|
126
|
+
// If the snack bar hasn't been announced by the time it exits it wouldn't have been open
|
|
127
|
+
// long enough to visually read it either, so clear the timeout for announcing.
|
|
128
|
+
clearTimeout(this._announceTimeoutId);
|
|
129
|
+
return this._onExit;
|
|
130
|
+
}
|
|
131
|
+
/** Makes sure the exit callbacks have been invoked when the element is destroyed. */
|
|
132
|
+
ngOnDestroy() {
|
|
133
|
+
this._destroyed = true;
|
|
134
|
+
this.completeExit();
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Waits for the zone to settle before removing the element. Helps prevent
|
|
138
|
+
* errors where we end up removing an element which is in the middle of an animation.
|
|
139
|
+
*/
|
|
140
|
+
completeExit() {
|
|
141
|
+
this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {
|
|
142
|
+
this._onExit.next();
|
|
143
|
+
this._onExit.complete();
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/** Applies the various positioning and user-configured CSS classes to the snack bar. */
|
|
147
|
+
applySnackBarClasses() {
|
|
148
|
+
const element = this._elementRef.nativeElement;
|
|
149
|
+
const panelClasses = this.snackBarConfig.panelClass;
|
|
150
|
+
if (panelClasses) {
|
|
151
|
+
if (Array.isArray(panelClasses)) {
|
|
152
|
+
// Note that we can't use a spread here, because IE doesn't support multiple arguments.
|
|
153
|
+
panelClasses.forEach(cssClass => element.classList.add(cssClass));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
element.classList.add(panelClasses);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (this.snackBarConfig.horizontalPosition === 'center') {
|
|
160
|
+
element.classList.add('bao-snack-bar-center');
|
|
161
|
+
}
|
|
162
|
+
if (this.snackBarConfig.verticalPosition === 'top') {
|
|
163
|
+
element.classList.add('bao-snack-bar-top');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Called after the portal contents have been attached. Can be
|
|
168
|
+
* used to modify the DOM once it's guaranteed to be in place.
|
|
169
|
+
*/
|
|
170
|
+
_afterPortalAttached() {
|
|
171
|
+
const element = this._elementRef.nativeElement;
|
|
172
|
+
const panelClasses = this.snackBarConfig.panelClass;
|
|
173
|
+
if (panelClasses) {
|
|
174
|
+
if (Array.isArray(panelClasses)) {
|
|
175
|
+
// Note that we can't use a spread here, because IE doesn't support multiple arguments.
|
|
176
|
+
panelClasses.forEach(cssClass => element.classList.add(cssClass));
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
element.classList.add(panelClasses);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
this._exposeToModals();
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Some browsers won't expose the accessibility node of the live element if there is an
|
|
186
|
+
* `aria-modal` and the live element is outside of it. This method works around the issue by
|
|
187
|
+
* pointing the `aria-owns` of all modals to the live element.
|
|
188
|
+
*/
|
|
189
|
+
_exposeToModals() {
|
|
190
|
+
// Note that the selector here is limited to CDK overlays at the moment in order to reduce the
|
|
191
|
+
// section of the DOM we need to look through. This should cover all the cases we support, but
|
|
192
|
+
// the selector can be expanded if it turns out to be too narrow.
|
|
193
|
+
const id = this._liveElementId;
|
|
194
|
+
const modals = this._document.querySelectorAll('body > .cdk-overlay-container [aria-modal="true"]');
|
|
195
|
+
for (let i = 0; i < modals.length; i++) {
|
|
196
|
+
const modal = modals[i];
|
|
197
|
+
const ariaOwns = modal.getAttribute('aria-owns');
|
|
198
|
+
this._trackedModals.add(modal);
|
|
199
|
+
if (!ariaOwns) {
|
|
200
|
+
modal.setAttribute('aria-owns', id);
|
|
201
|
+
}
|
|
202
|
+
else if (ariaOwns.indexOf(id) === -1) {
|
|
203
|
+
modal.setAttribute('aria-owns', ariaOwns + ' ' + id);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/** Clears the references to the live element from any modals it was added to. */
|
|
208
|
+
_clearFromModals() {
|
|
209
|
+
this._trackedModals.forEach(modal => {
|
|
210
|
+
const ariaOwns = modal.getAttribute('aria-owns');
|
|
211
|
+
if (ariaOwns) {
|
|
212
|
+
const newValue = ariaOwns.replace(this._liveElementId, '').trim();
|
|
213
|
+
if (newValue.length > 0) {
|
|
214
|
+
modal.setAttribute('aria-owns', newValue);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
modal.removeAttribute('aria-owns');
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
this._trackedModals.clear();
|
|
222
|
+
}
|
|
223
|
+
/** Asserts that no content is already attached to the container. */
|
|
224
|
+
assertNotAttached() {
|
|
225
|
+
if (this._portalOutlet.hasAttached()) {
|
|
226
|
+
throw Error('Attempting to attach snack bar content after content is already attached');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Starts a timeout to move the snack bar content to the live region so screen readers will
|
|
231
|
+
* announce it.
|
|
232
|
+
*/
|
|
233
|
+
screenReaderAnnounce() {
|
|
234
|
+
if (!this._announceTimeoutId) {
|
|
235
|
+
this._ngZone.runOutsideAngular(() => {
|
|
236
|
+
this._announceTimeoutId = window.setTimeout(() => {
|
|
237
|
+
const inertElement = this._elementRef.nativeElement.querySelector('[aria-hidden]');
|
|
238
|
+
const liveElement = this._elementRef.nativeElement.querySelector('[aria-live]');
|
|
239
|
+
if (inertElement && liveElement) {
|
|
240
|
+
// If an element in the snack bar content is focused before being moved
|
|
241
|
+
// track it and restore focus after moving to the live region.
|
|
242
|
+
let focusedElement = null;
|
|
243
|
+
if (this._platform.isBrowser &&
|
|
244
|
+
document.activeElement instanceof HTMLElement &&
|
|
245
|
+
inertElement.contains(document.activeElement)) {
|
|
246
|
+
focusedElement = document.activeElement;
|
|
247
|
+
}
|
|
248
|
+
inertElement.removeAttribute('aria-hidden');
|
|
249
|
+
liveElement.appendChild(inertElement);
|
|
250
|
+
focusedElement?.focus();
|
|
251
|
+
this._onAnnounce.next();
|
|
252
|
+
this._onAnnounce.complete();
|
|
253
|
+
}
|
|
254
|
+
}, this._announceDelay);
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
BaoSnackBarContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSnackBarContainerComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Platform }, { token: i2.BaoSnackBarConfig }], target: i0.ɵɵFactoryTarget.Component });
|
|
260
|
+
BaoSnackBarContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: BaoSnackBarContainerComponent, selector: "bao-snack-bar-container", host: { listeners: { "@state.done": "onAnimationEnd($event)" }, properties: { "@state": "_animationState" }, classAttribute: "bao-snack-bar-container" }, viewQueries: [{ propertyName: "_portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!-- Initialy holds the snack bar content, will be empty after announcing to screen readers. -->\n<div aria-hidden=\"true\">\n <ng-template cdkPortalOutlet></ng-template>\n</div>\n\n<!-- Will receive the snack bar content from the non-live div, move will happen a short delay after opening -->\n<div\n [attr.aria-live]=\"_live\"\n [attr.role]=\"_role\"\n [attr.id]=\"_liveElementId\"\n></div>\n", styles: [".bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.bao-container{max-width:576px}}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.cdk-overlay-pane{width:100%}@media (min-width: 768px){.cdk-overlay-pane{margin:0;width:auto}}.bao-snack-bar-container{border-radius:.25rem;box-sizing:border-box;display:block;margin:1rem;max-width:100vw;min-width:15rem;min-height:3rem;transform-origin:center;width:100%}\n"], directives: [{ type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], animations: [matSnackBarAnimations.snackBarState], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
|
|
261
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSnackBarContainerComponent, decorators: [{
|
|
262
|
+
type: Component,
|
|
263
|
+
args: [{ selector: 'bao-snack-bar-container', changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, animations: [matSnackBarAnimations.snackBarState], host: {
|
|
264
|
+
class: 'bao-snack-bar-container',
|
|
265
|
+
'[@state]': '_animationState',
|
|
266
|
+
'(@state.done)': 'onAnimationEnd($event)'
|
|
267
|
+
}, template: "<!-- Initialy holds the snack bar content, will be empty after announcing to screen readers. -->\n<div aria-hidden=\"true\">\n <ng-template cdkPortalOutlet></ng-template>\n</div>\n\n<!-- Will receive the snack bar content from the non-live div, move will happen a short delay after opening -->\n<div\n [attr.aria-live]=\"_live\"\n [attr.role]=\"_role\"\n [attr.id]=\"_liveElementId\"\n></div>\n", styles: [".bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.bao-container{max-width:576px}}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.cdk-overlay-pane{width:100%}@media (min-width: 768px){.cdk-overlay-pane{margin:0;width:auto}}.bao-snack-bar-container{border-radius:.25rem;box-sizing:border-box;display:block;margin:1rem;max-width:100vw;min-width:15rem;min-height:3rem;transform-origin:center;width:100%}\n"] }]
|
|
268
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Platform }, { type: i2.BaoSnackBarConfig }]; }, propDecorators: { _portalOutlet: [{
|
|
269
|
+
type: ViewChild,
|
|
270
|
+
args: [CdkPortalOutlet, { static: true }]
|
|
271
|
+
}] } });
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2stYmFyLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9zbmFjay1iYXIvc25hY2stYmFyLWNvbnRhaW5lci50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9zbmFjay1iYXIvc25hY2stYmFyLWNvbnRhaW5lci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUloQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFJVCxNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFHL0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBaUJqQjs7O0dBR0c7QUFrQkgsTUFBTSxPQUFPLDZCQUNYLFNBQVEsZ0JBQWdCO0lBMEN4QixZQUNVLE9BQWUsRUFDZixXQUFvQyxFQUNwQyxrQkFBcUMsRUFDckMsU0FBbUI7SUFDM0IsbUNBQW1DO0lBQzVCLGNBQWlDO1FBRXhDLEtBQUssRUFBRSxDQUFDO1FBUEEsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUNwQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFFcEIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBMUNsQyxjQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVcsQ0FBQztRQUU1QyxnRkFBZ0Y7UUFDaEUsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUzRCxxRUFBcUU7UUFDckQsWUFBTyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXZELCtFQUErRTtRQUMvRCxhQUFRLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFeEQsNkNBQTZDO1FBQ3RDLG9CQUFlLEdBQUcsTUFBTSxDQUFDO1FBS2hDLG9GQUFvRjtRQUNuRSxtQkFBYyxHQUFXLEdBQUcsQ0FBQztRQUs5QyxnREFBZ0Q7UUFDeEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQVEzQiwwQ0FBMEM7UUFDakMsbUJBQWMsR0FBRyxnQ0FBZ0MsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQXdEdkU7Ozs7V0FJRztRQUNJLG9CQUFlLEdBQUcsQ0FBQyxNQUFpQixFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBdERBLGlFQUFpRTtRQUNqRSx5RUFBeUU7UUFDekUsSUFDRSxjQUFjLENBQUMsVUFBVSxLQUFLLFdBQVc7WUFDekMsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQ25DO1lBQ0EsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7U0FDMUI7YUFBTSxJQUFJLGNBQWMsQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztTQUN2QjtRQUNELDhGQUE4RjtRQUM5RixzRkFBc0Y7UUFDdEYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQzthQUN2QjtZQUNELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO2FBQ3RCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsd0VBQXdFO0lBQ2pFLHFCQUFxQixDQUFJLE1BQTBCO1FBQ3hELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHVFQUF1RTtJQUNoRSxvQkFBb0IsQ0FDekIsTUFBeUI7UUFFekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBY0Qsb0VBQW9FO0lBQzdELGNBQWMsQ0FBQyxLQUFxQjtRQUN6QyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVyQyxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUN4RSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFFRCxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDekIsMERBQTBEO1lBQzFELHNDQUFzQztZQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBRTlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDcEIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELHVEQUF1RDtJQUNoRCxLQUFLO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7WUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELDBEQUEwRDtJQUNuRCxJQUFJO1FBQ1QsMEZBQTBGO1FBQzFGLDBGQUEwRjtRQUMxRix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7UUFFaEMsK0VBQStFO1FBQy9FLHFGQUFxRjtRQUNyRixnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU1RCx5RkFBeUY7UUFDekYsK0VBQStFO1FBQy9FLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV0QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELHFGQUFxRjtJQUM5RSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssWUFBWTtRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3RkFBd0Y7SUFDaEYsb0JBQW9CO1FBQzFCLE1BQU0sT0FBTyxHQUFnQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUM1RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztRQUVwRCxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQy9CLHVGQUF1RjtnQkFDdkYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDbkU7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDckM7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsS0FBSyxRQUFRLEVBQUU7WUFDdkQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUMvQztRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUU7WUFDbEQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDTyxvQkFBb0I7UUFDNUIsTUFBTSxPQUFPLEdBQWdCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO1FBRXBELElBQUksWUFBWSxFQUFFO1lBQ2hCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDL0IsdUZBQXVGO2dCQUN2RixZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUNuRTtpQkFBTTtnQkFDTCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNyQztTQUNGO1FBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZUFBZTtRQUNyQiw4RkFBOEY7UUFDOUYsOEZBQThGO1FBQzlGLGlFQUFpRTtRQUNqRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQzVDLG1EQUFtRCxDQUNwRCxDQUFDO1FBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0IsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNyQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RDLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFFBQVEsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDdEQ7U0FDRjtJQUNILENBQUM7SUFFRCxpRkFBaUY7SUFDekUsZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFakQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUVsRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN2QixLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0wsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDcEM7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsb0VBQW9FO0lBQzVELGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxLQUFLLENBQ1QsMEVBQTBFLENBQzNFLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUMvQyxNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNoRSxNQUFNLFdBQVcsR0FDZixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBRTlELElBQUksWUFBWSxJQUFJLFdBQVcsRUFBRTt3QkFDL0IsdUVBQXVFO3dCQUN2RSw4REFBOEQ7d0JBQzlELElBQUksY0FBYyxHQUF1QixJQUFJLENBQUM7d0JBQzlDLElBQ0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTOzRCQUN4QixRQUFRLENBQUMsYUFBYSxZQUFZLFdBQVc7NEJBQzdDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUM3Qzs0QkFDQSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQzt5QkFDekM7d0JBRUQsWUFBWSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDNUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDdEMsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDO3dCQUV4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUM3QjtnQkFDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzsySEFsVFUsNkJBQTZCOytHQUE3Qiw2QkFBNkIsd1FBSzdCLGVBQWUscUZDN0U1QixnWkFXQSw2Z0NEc0RjLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDOzRGQU90Qyw2QkFBNkI7a0JBakJ6QyxTQUFTOytCQUNFLHlCQUF5QixtQkFPbEIsdUJBQXVCLENBQUMsT0FBTyxpQkFDakMsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxRQUMzQzt3QkFDSixLQUFLLEVBQUUseUJBQXlCO3dCQUNoQyxVQUFVLEVBQUUsaUJBQWlCO3dCQUM3QixlQUFlLEVBQUUsd0JBQXdCO3FCQUMxQzs2TUFPNkMsYUFBYTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQXJpYUxpdmVQb2xpdGVuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgQmFzZVBvcnRhbE91dGxldCxcbiAgQ2RrUG9ydGFsT3V0bGV0LFxuICBDb21wb25lbnRQb3J0YWwsXG4gIERvbVBvcnRhbCxcbiAgVGVtcGxhdGVQb3J0YWxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIGluamVjdCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbWF0U25hY2tCYXJBbmltYXRpb25zIH0gZnJvbSAnLi9zbmFjay1iYXItYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBCYW9TbmFja0JhckNvbmZpZyB9IGZyb20gJy4vc25hY2stYmFyLWNvbmZpZyc7XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbi8qKlxuICogSW50ZXJuYWwgaW50ZXJmYWNlIGZvciBhIHNuYWNrIGJhciBjb250YWluZXIuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJhb1NuYWNrQmFyQ29udGFpbmVyIHtcbiAgc25hY2tCYXJDb25maWc6IEJhb1NuYWNrQmFyQ29uZmlnO1xuICBfb25Bbm5vdW5jZTogU3ViamVjdDxhbnk+O1xuICBfb25FeGl0OiBTdWJqZWN0PGFueT47XG4gIF9vbkVudGVyOiBTdWJqZWN0PGFueT47XG4gIGVudGVyOiAoKSA9PiB2b2lkO1xuICBleGl0OiAoKSA9PiBPYnNlcnZhYmxlPHZvaWQ+O1xuICBhdHRhY2hUZW1wbGF0ZVBvcnRhbDogPEM+KHBvcnRhbDogVGVtcGxhdGVQb3J0YWw8Qz4pID0+IEVtYmVkZGVkVmlld1JlZjxDPjtcbiAgYXR0YWNoQ29tcG9uZW50UG9ydGFsOiA8VD4ocG9ydGFsOiBDb21wb25lbnRQb3J0YWw8VD4pID0+IENvbXBvbmVudFJlZjxUPjtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBjb21wb25lbnQgdGhhdCB3cmFwcyB1c2VyLXByb3ZpZGVkIHNuYWNrIGJhciBjb250ZW50LlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiYW8tc25hY2stYmFyLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnc25hY2stYmFyLWNvbnRhaW5lci5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3NuYWNrLWJhci1jb250YWluZXIuc2NzcyddLFxuICAvLyBJbiBJdnkgZW1iZWRkZWQgdmlld3Mgd2lsbCBiZSBjaGFuZ2UgZGV0ZWN0ZWQgZnJvbSB0aGVpciBkZWNsYXJhdGlvbiBwbGFjZSwgcmF0aGVyIHRoYW5cbiAgLy8gd2hlcmUgdGhleSB3ZXJlIHN0YW1wZWQgb3V0LiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuJ3QgaGF2ZSB0aGUgc25hY2sgYmFyIGNvbnRhaW5lciBiZSBPblB1c2gsXG4gIC8vIGJlY2F1c2UgaXQgbWlnaHQgY2F1c2Ugc25hY2sgYmFycyB0aGF0IHdlcmUgb3BlbmVkIGZyb20gYSB0ZW1wbGF0ZSBub3QgdG8gYmUgb3V0IG9mIGRhdGUuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGFuaW1hdGlvbnM6IFttYXRTbmFja0JhckFuaW1hdGlvbnMuc25hY2tCYXJTdGF0ZV0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Jhby1zbmFjay1iYXItY29udGFpbmVyJyxcbiAgICAnW0BzdGF0ZV0nOiAnX2FuaW1hdGlvblN0YXRlJyxcbiAgICAnKEBzdGF0ZS5kb25lKSc6ICdvbkFuaW1hdGlvbkVuZCgkZXZlbnQpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb1NuYWNrQmFyQ29udGFpbmVyQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZVBvcnRhbE91dGxldFxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgSUJhb1NuYWNrQmFyQ29udGFpbmVyXG57XG4gIC8qKiBUaGUgcG9ydGFsIG91dGxldCBpbnNpZGUgb2YgdGhpcyBjb250YWluZXIgaW50byB3aGljaCB0aGUgc25hY2sgYmFyIGNvbnRlbnQgd2lsbCBiZSBsb2FkZWQuICovXG4gIEBWaWV3Q2hpbGQoQ2RrUG9ydGFsT3V0bGV0LCB7IHN0YXRpYzogdHJ1ZSB9KSBfcG9ydGFsT3V0bGV0OiBDZGtQb3J0YWxPdXRsZXQ7XG5cbiAgcHJpdmF0ZSBfZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIF90cmFja2VkTW9kYWxzID0gbmV3IFNldDxFbGVtZW50PigpO1xuXG4gIC8qKiBTdWJqZWN0IGZvciBub3RpZnlpbmcgdGhhdCB0aGUgc25hY2sgYmFyIGhhcyBhbm5vdW5jZWQgdG8gc2NyZWVuIHJlYWRlcnMuICovXG4gIHB1YmxpYyByZWFkb25seSBfb25Bbm5vdW5jZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgLyoqIFN1YmplY3QgZm9yIG5vdGlmeWluZyB0aGF0IHRoZSBzbmFjayBiYXIgaGFzIGV4aXRlZCBmcm9tIHZpZXcuICovXG4gIHB1YmxpYyByZWFkb25seSBfb25FeGl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICAvKiogU3ViamVjdCBmb3Igbm90aWZ5aW5nIHRoYXQgdGhlIHNuYWNrIGJhciBoYXMgZmluaXNoZWQgZW50ZXJpbmcgdGhlIHZpZXcuICovXG4gIHB1YmxpYyByZWFkb25seSBfb25FbnRlcjogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgLyoqIFRoZSBzdGF0ZSBvZiB0aGUgc25hY2sgYmFyIGFuaW1hdGlvbnMuICovXG4gIHB1YmxpYyBfYW5pbWF0aW9uU3RhdGUgPSAndm9pZCc7XG5cbiAgLyoqIGFyaWEtbGl2ZSB2YWx1ZSBmb3IgdGhlIGxpdmUgcmVnaW9uLiAqL1xuICBwdWJsaWMgX2xpdmU6IEFyaWFMaXZlUG9saXRlbmVzcztcblxuICAvKiogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgYW5ub3VuY2luZyB0aGUgc25hY2sgYmFyJ3MgY29udGVudC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYW5ub3VuY2VEZWxheTogbnVtYmVyID0gMTUwO1xuXG4gIC8qKiBUaGUgdGltZW91dCBmb3IgYW5ub3VuY2luZyB0aGUgc25hY2sgYmFyJ3MgY29udGVudC4gKi9cbiAgcHJpdmF0ZSBfYW5ub3VuY2VUaW1lb3V0SWQ6IG51bWJlcjtcblxuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSBfZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFJvbGUgb2YgdGhlIGxpdmUgcmVnaW9uLiBUaGlzIGlzIG9ubHkgZm9yIEZpcmVmb3ggYXMgdGhlcmUgaXMgYSBrbm93biBpc3N1ZSB3aGVyZSBGaXJlZm94ICtcbiAgICogSkFXUyBkb2VzIG5vdCByZWFkIG91dCBhcmlhLWxpdmUgbWVzc2FnZS5cbiAgICovXG4gIF9yb2xlPzogJ3N0YXR1cycgfCAnYWxlcnQnO1xuXG4gIC8qKiBVbmlxdWUgSUQgb2YgdGhlIGFyaWEtbGl2ZSBlbGVtZW50LiAqL1xuICByZWFkb25seSBfbGl2ZUVsZW1lbnRJZCA9IGBiYW8tc25hY2stYmFyLWNvbnRhaW5lci1saXZlLSR7dW5pcXVlSWQrK31gO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgLyoqIFRoZSBzbmFjayBiYXIgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgc25hY2tCYXJDb25maWc6IEJhb1NuYWNrQmFyQ29uZmlnXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBVc2UgYXJpYS1saXZlIHJhdGhlciB0aGFuIGEgbGl2ZSByb2xlIGxpa2UgJ2FsZXJ0JyBvciAnc3RhdHVzJ1xuICAgIC8vIGJlY2F1c2UgTlZEQSBhbmQgSkFXUyBoYXZlIHNob3cgaW5jb25zaXN0ZW50IGJlaGF2aW9yIHdpdGggbGl2ZSByb2xlcy5cbiAgICBpZiAoXG4gICAgICBzbmFja0JhckNvbmZpZy5wb2xpdGVuZXNzID09PSAnYXNzZXJ0aXZlJyAmJlxuICAgICAgIXNuYWNrQmFyQ29uZmlnLmFubm91bmNlbWVudE1lc3NhZ2VcbiAgICApIHtcbiAgICAgIHRoaXMuX2xpdmUgPSAnYXNzZXJ0aXZlJztcbiAgICB9IGVsc2UgaWYgKHNuYWNrQmFyQ29uZmlnLnBvbGl0ZW5lc3MgPT09ICdvZmYnKSB7XG4gICAgICB0aGlzLl9saXZlID0gJ29mZic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpdmUgPSAncG9saXRlJztcbiAgICB9XG4gICAgLy8gT25seSBzZXQgcm9sZSBmb3IgRmlyZWZveC4gU2V0IHJvbGUgYmFzZWQgb24gYXJpYS1saXZlIGJlY2F1c2Ugc2V0dGluZyByb2xlPVwiYWxlcnRcIiBpbXBsaWVzXG4gICAgLy8gYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgd2hpY2ggbWF5IGNhdXNlIGlzc3VlcyBpZiBhcmlhLWxpdmUgaXMgc2V0IHRvIFwicG9saXRlXCIgYWJvdmUuXG4gICAgaWYgKHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gpIHtcbiAgICAgIGlmICh0aGlzLl9saXZlID09PSAncG9saXRlJykge1xuICAgICAgICB0aGlzLl9yb2xlID0gJ3N0YXR1cyc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fbGl2ZSA9PT0gJ2Fzc2VydGl2ZScpIHtcbiAgICAgICAgdGhpcy5fcm9sZSA9ICdhbGVydCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEF0dGFjaCBhIGNvbXBvbmVudCBwb3J0YWwgYXMgY29udGVudCB0byB0aGlzIHNuYWNrIGJhciBjb250YWluZXIuICovXG4gIHB1YmxpYyBhdHRhY2hDb21wb25lbnRQb3J0YWw8VD4ocG9ydGFsOiBDb21wb25lbnRQb3J0YWw8VD4pOiBDb21wb25lbnRSZWY8VD4ge1xuICAgIHRoaXMuYXNzZXJ0Tm90QXR0YWNoZWQoKTtcbiAgICB0aGlzLmFwcGx5U25hY2tCYXJDbGFzc2VzKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChwb3J0YWwpO1xuICAgIHRoaXMuX2FmdGVyUG9ydGFsQXR0YWNoZWQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIEF0dGFjaCBhIHRlbXBsYXRlIHBvcnRhbCBhcyBjb250ZW50IHRvIHRoaXMgc25hY2sgYmFyIGNvbnRhaW5lci4gKi9cbiAgcHVibGljIGF0dGFjaFRlbXBsYXRlUG9ydGFsPEM+KFxuICAgIHBvcnRhbDogVGVtcGxhdGVQb3J0YWw8Qz5cbiAgKTogRW1iZWRkZWRWaWV3UmVmPEM+IHtcbiAgICB0aGlzLmFzc2VydE5vdEF0dGFjaGVkKCk7XG4gICAgdGhpcy5hcHBseVNuYWNrQmFyQ2xhc3NlcygpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChwb3J0YWwpO1xuICAgIHRoaXMuX2FmdGVyUG9ydGFsQXR0YWNoZWQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaGVzIGEgRE9NIHBvcnRhbCB0byB0aGUgc25hY2sgYmFyIGNvbnRhaW5lci5cbiAgICogQGRlcHJlY2F0ZWQgVG8gYmUgdHVybmVkIGludG8gYSBtZXRob2QuXG4gICAqIEBicmVha2luZy1jaGFuZ2UgMTAuMC4wXG4gICAqL1xuICBwdWJsaWMgYXR0YWNoRG9tUG9ydGFsID0gKHBvcnRhbDogRG9tUG9ydGFsKSA9PiB7XG4gICAgdGhpcy5hc3NlcnROb3RBdHRhY2hlZCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwocG9ydGFsKTtcbiAgICB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKiogSGFuZGxlIGVuZCBvZiBhbmltYXRpb25zLCB1cGRhdGluZyB0aGUgc3RhdGUgb2YgdGhlIHNuYWNrYmFyLiAqL1xuICBwdWJsaWMgb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgeyBmcm9tU3RhdGUsIHRvU3RhdGUgfSA9IGV2ZW50O1xuXG4gICAgaWYgKCh0b1N0YXRlID09PSAndm9pZCcgJiYgZnJvbVN0YXRlICE9PSAndm9pZCcpIHx8IHRvU3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICB0aGlzLmNvbXBsZXRlRXhpdCgpO1xuICAgIH1cblxuICAgIGlmICh0b1N0YXRlID09PSAndmlzaWJsZScpIHtcbiAgICAgIC8vIE5vdGU6IHdlIHNob3VsZG4ndCB1c2UgYHRoaXNgIGluc2lkZSB0aGUgem9uZSBjYWxsYmFjayxcbiAgICAgIC8vIGJlY2F1c2UgaXQgY2FuIGNhdXNlIGEgbWVtb3J5IGxlYWsuXG4gICAgICBjb25zdCBvbkVudGVyID0gdGhpcy5fb25FbnRlcjtcblxuICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIG9uRW50ZXIubmV4dCgpO1xuICAgICAgICBvbkVudGVyLmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQmVnaW4gYW5pbWF0aW9uIG9mIHNuYWNrIGJhciBlbnRyYW5jZSBpbnRvIHZpZXcuICovXG4gIHB1YmxpYyBlbnRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2Rlc3Ryb3llZCkge1xuICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUgPSAndmlzaWJsZSc7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnNjcmVlblJlYWRlckFubm91bmNlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEJlZ2luIGFuaW1hdGlvbiBvZiB0aGUgc25hY2sgYmFyIGV4aXRpbmcgZnJvbSB2aWV3LiAqL1xuICBwdWJsaWMgZXhpdCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAvLyBOb3RlOiB0aGlzIG9uZSB0cmFuc2l0aW9ucyB0byBgaGlkZGVuYCwgcmF0aGVyIHRoYW4gYHZvaWRgLCBpbiBvcmRlciB0byBoYW5kbGUgdGhlIGNhc2VcbiAgICAvLyB3aGVyZSBtdWx0aXBsZSBzbmFjayBiYXJzIGFyZSBvcGVuZWQgaW4gcXVpY2sgc3VjY2Vzc2lvbiAoZS5nLiB0d28gY29uc2VjdXRpdmUgY2FsbHMgdG9cbiAgICAvLyBgTWF0U25hY2tCYXIub3BlbmApLlxuICAgIHRoaXMuX2FuaW1hdGlvblN0YXRlID0gJ2hpZGRlbic7XG5cbiAgICAvLyBNYXJrIHRoaXMgZWxlbWVudCB3aXRoIGFuICdleGl0JyBhdHRyaWJ1dGUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc25hY2tiYXIgaGFzXG4gICAgLy8gYmVlbiBkaXNtaXNzZWQgYW5kIHdpbGwgc29vbiBiZSByZW1vdmVkIGZyb20gdGhlIERPTS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBzbmFja2JhclxuICAgIC8vIHRlc3QgaGFybmVzcy5cbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdtYXQtZXhpdCcsICcnKTtcblxuICAgIC8vIElmIHRoZSBzbmFjayBiYXIgaGFzbid0IGJlZW4gYW5ub3VuY2VkIGJ5IHRoZSB0aW1lIGl0IGV4aXRzIGl0IHdvdWxkbid0IGhhdmUgYmVlbiBvcGVuXG4gICAgLy8gbG9uZyBlbm91Z2ggdG8gdmlzdWFsbHkgcmVhZCBpdCBlaXRoZXIsIHNvIGNsZWFyIHRoZSB0aW1lb3V0IGZvciBhbm5vdW5jaW5nLlxuICAgIGNsZWFyVGltZW91dCh0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZCk7XG5cbiAgICByZXR1cm4gdGhpcy5fb25FeGl0O1xuICB9XG5cbiAgLyoqIE1ha2VzIHN1cmUgdGhlIGV4aXQgY2FsbGJhY2tzIGhhdmUgYmVlbiBpbnZva2VkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZGVzdHJveWVkLiAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbXBsZXRlRXhpdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXRzIGZvciB0aGUgem9uZSB0byBzZXR0bGUgYmVmb3JlIHJlbW92aW5nIHRoZSBlbGVtZW50LiBIZWxwcyBwcmV2ZW50XG4gICAqIGVycm9ycyB3aGVyZSB3ZSBlbmQgdXAgcmVtb3ZpbmcgYW4gZWxlbWVudCB3aGljaCBpcyBpbiB0aGUgbWlkZGxlIG9mIGFuIGFuaW1hdGlvbi5cbiAgICovXG4gIHByaXZhdGUgY29tcGxldGVFeGl0KCkge1xuICAgIHRoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX29uRXhpdC5uZXh0KCk7XG4gICAgICB0aGlzLl9vbkV4aXQuY29tcGxldGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBBcHBsaWVzIHRoZSB2YXJpb3VzIHBvc2l0aW9uaW5nIGFuZCB1c2VyLWNvbmZpZ3VyZWQgQ1NTIGNsYXNzZXMgdG8gdGhlIHNuYWNrIGJhci4gKi9cbiAgcHJpdmF0ZSBhcHBseVNuYWNrQmFyQ2xhc3NlcygpIHtcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBwYW5lbENsYXNzZXMgPSB0aGlzLnNuYWNrQmFyQ29uZmlnLnBhbmVsQ2xhc3M7XG5cbiAgICBpZiAocGFuZWxDbGFzc2VzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYW5lbENsYXNzZXMpKSB7XG4gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgYSBzcHJlYWQgaGVyZSwgYmVjYXVzZSBJRSBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgYXJndW1lbnRzLlxuICAgICAgICBwYW5lbENsYXNzZXMuZm9yRWFjaChjc3NDbGFzcyA9PiBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY3NzQ2xhc3MpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChwYW5lbENsYXNzZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNuYWNrQmFyQ29uZmlnLmhvcml6b250YWxQb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYmFvLXNuYWNrLWJhci1jZW50ZXInKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zbmFja0JhckNvbmZpZy52ZXJ0aWNhbFBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdiYW8tc25hY2stYmFyLXRvcCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgdGhlIHBvcnRhbCBjb250ZW50cyBoYXZlIGJlZW4gYXR0YWNoZWQuIENhbiBiZVxuICAgKiB1c2VkIHRvIG1vZGlmeSB0aGUgRE9NIG9uY2UgaXQncyBndWFyYW50ZWVkIHRvIGJlIGluIHBsYWNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9hZnRlclBvcnRhbEF0dGFjaGVkKCkge1xuICAgIGNvbnN0IGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHBhbmVsQ2xhc3NlcyA9IHRoaXMuc25hY2tCYXJDb25maWcucGFuZWxDbGFzcztcblxuICAgIGlmIChwYW5lbENsYXNzZXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhbmVsQ2xhc3NlcykpIHtcbiAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGNhbid0IHVzZSBhIHNwcmVhZCBoZXJlLCBiZWNhdXNlIElFIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBhcmd1bWVudHMuXG4gICAgICAgIHBhbmVsQ2xhc3Nlcy5mb3JFYWNoKGNzc0NsYXNzID0+IGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjc3NDbGFzcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKHBhbmVsQ2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZXhwb3NlVG9Nb2RhbHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb21lIGJyb3dzZXJzIHdvbid0IGV4cG9zZSB0aGUgYWNjZXNzaWJpbGl0eSBub2RlIG9mIHRoZSBsaXZlIGVsZW1lbnQgaWYgdGhlcmUgaXMgYW5cbiAgICogYGFyaWEtbW9kYWxgIGFuZCB0aGUgbGl2ZSBlbGVtZW50IGlzIG91dHNpZGUgb2YgaXQuIFRoaXMgbWV0aG9kIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUgYnlcbiAgICogcG9pbnRpbmcgdGhlIGBhcmlhLW93bnNgIG9mIGFsbCBtb2RhbHMgdG8gdGhlIGxpdmUgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgX2V4cG9zZVRvTW9kYWxzKCkge1xuICAgIC8vIE5vdGUgdGhhdCB0aGUgc2VsZWN0b3IgaGVyZSBpcyBsaW1pdGVkIHRvIENESyBvdmVybGF5cyBhdCB0aGUgbW9tZW50IGluIG9yZGVyIHRvIHJlZHVjZSB0aGVcbiAgICAvLyBzZWN0aW9uIG9mIHRoZSBET00gd2UgbmVlZCB0byBsb29rIHRocm91Z2guIFRoaXMgc2hvdWxkIGNvdmVyIGFsbCB0aGUgY2FzZXMgd2Ugc3VwcG9ydCwgYnV0XG4gICAgLy8gdGhlIHNlbGVjdG9yIGNhbiBiZSBleHBhbmRlZCBpZiBpdCB0dXJucyBvdXQgdG8gYmUgdG9vIG5hcnJvdy5cbiAgICBjb25zdCBpZCA9IHRoaXMuX2xpdmVFbGVtZW50SWQ7XG4gICAgY29uc3QgbW9kYWxzID0gdGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICdib2R5ID4gLmNkay1vdmVybGF5LWNvbnRhaW5lciBbYXJpYS1tb2RhbD1cInRydWVcIl0nXG4gICAgKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtb2RhbCA9IG1vZGFsc1tpXTtcbiAgICAgIGNvbnN0IGFyaWFPd25zID0gbW9kYWwuZ2V0QXR0cmlidXRlKCdhcmlhLW93bnMnKTtcbiAgICAgIHRoaXMuX3RyYWNrZWRNb2RhbHMuYWRkKG1vZGFsKTtcblxuICAgICAgaWYgKCFhcmlhT3ducykge1xuICAgICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGlkKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJpYU93bnMuaW5kZXhPZihpZCkgPT09IC0xKSB7XG4gICAgICAgIG1vZGFsLnNldEF0dHJpYnV0ZSgnYXJpYS1vd25zJywgYXJpYU93bnMgKyAnICcgKyBpZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIENsZWFycyB0aGUgcmVmZXJlbmNlcyB0byB0aGUgbGl2ZSBlbGVtZW50IGZyb20gYW55IG1vZGFscyBpdCB3YXMgYWRkZWQgdG8uICovXG4gIHByaXZhdGUgX2NsZWFyRnJvbU1vZGFscygpIHtcbiAgICB0aGlzLl90cmFja2VkTW9kYWxzLmZvckVhY2gobW9kYWwgPT4ge1xuICAgICAgY29uc3QgYXJpYU93bnMgPSBtb2RhbC5nZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycpO1xuXG4gICAgICBpZiAoYXJpYU93bnMpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBhcmlhT3ducy5yZXBsYWNlKHRoaXMuX2xpdmVFbGVtZW50SWQsICcnKS50cmltKCk7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtb2RhbC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtb3ducycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5fdHJhY2tlZE1vZGFscy5jbGVhcigpO1xuICB9XG5cbiAgLyoqIEFzc2VydHMgdGhhdCBubyBjb250ZW50IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlIGNvbnRhaW5lci4gKi9cbiAgcHJpdmF0ZSBhc3NlcnROb3RBdHRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQXR0ZW1wdGluZyB0byBhdHRhY2ggc25hY2sgYmFyIGNvbnRlbnQgYWZ0ZXIgY29udGVudCBpcyBhbHJlYWR5IGF0dGFjaGVkJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIGEgdGltZW91dCB0byBtb3ZlIHRoZSBzbmFjayBiYXIgY29udGVudCB0byB0aGUgbGl2ZSByZWdpb24gc28gc2NyZWVuIHJlYWRlcnMgd2lsbFxuICAgKiBhbm5vdW5jZSBpdC5cbiAgICovXG4gIHByaXZhdGUgc2NyZWVuUmVhZGVyQW5ub3VuY2UoKSB7XG4gICAgaWYgKCF0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZCkge1xuICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5lcnRFbGVtZW50ID1cbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbYXJpYS1oaWRkZW5dJyk7XG4gICAgICAgICAgY29uc3QgbGl2ZUVsZW1lbnQgPVxuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1thcmlhLWxpdmVdJyk7XG5cbiAgICAgICAgICBpZiAoaW5lcnRFbGVtZW50ICYmIGxpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbGVtZW50IGluIHRoZSBzbmFjayBiYXIgY29udGVudCBpcyBmb2N1c2VkIGJlZm9yZSBiZWluZyBtb3ZlZFxuICAgICAgICAgICAgLy8gdHJhY2sgaXQgYW5kIHJlc3RvcmUgZm9jdXMgYWZ0ZXIgbW92aW5nIHRvIHRoZSBsaXZlIHJlZ2lvbi5cbiAgICAgICAgICAgIGxldCBmb2N1c2VkRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyICYmXG4gICAgICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuICAgICAgICAgICAgICBpbmVydEVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluZXJ0RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gICAgICAgICAgICBsaXZlRWxlbWVudC5hcHBlbmRDaGlsZChpbmVydEVsZW1lbnQpO1xuICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQ/LmZvY3VzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX29uQW5ub3VuY2UubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5fb25Bbm5vdW5jZS5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5fYW5ub3VuY2VEZWxheSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gSW5pdGlhbHkgaG9sZHMgdGhlIHNuYWNrIGJhciBjb250ZW50LCB3aWxsIGJlIGVtcHR5IGFmdGVyIGFubm91bmNpbmcgdG8gc2NyZWVuIHJlYWRlcnMuIC0tPlxuPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgPG5nLXRlbXBsYXRlIGNka1BvcnRhbE91dGxldD48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjwhLS0gV2lsbCByZWNlaXZlIHRoZSBzbmFjayBiYXIgY29udGVudCBmcm9tIHRoZSBub24tbGl2ZSBkaXYsIG1vdmUgd2lsbCBoYXBwZW4gYSBzaG9ydCBkZWxheSBhZnRlciBvcGVuaW5nIC0tPlxuPGRpdlxuICBbYXR0ci5hcmlhLWxpdmVdPVwiX2xpdmVcIlxuICBbYXR0ci5yb2xlXT1cIl9yb2xlXCJcbiAgW2F0dHIuaWRdPVwiX2xpdmVFbGVtZW50SWRcIlxuPjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
/** Maximum amount of milliseconds that can be passed into setTimeout. */
|
|
3
|
+
const MAX_TIMEOUT = Math.pow(2, 31) - 1;
|
|
4
|
+
/**
|
|
5
|
+
* Reference to a snack bar dispatched from the snack bar service.
|
|
6
|
+
*/
|
|
7
|
+
export class BaoSnackBarRef {
|
|
8
|
+
constructor(containerInstance, _overlayRef) {
|
|
9
|
+
this._overlayRef = _overlayRef;
|
|
10
|
+
/** Subject for notifying the user that the snack bar has been dismissed. */
|
|
11
|
+
this._afterDismissed = new Subject();
|
|
12
|
+
/** Subject for notifying the user that the snack bar has opened and appeared. */
|
|
13
|
+
this._afterOpened = new Subject();
|
|
14
|
+
/** Subject for notifying the user that the snack bar action was called. */
|
|
15
|
+
this._onAction = new Subject();
|
|
16
|
+
/** Whether the snack bar was dismissed using the action button. */
|
|
17
|
+
this._dismissedByAction = false;
|
|
18
|
+
this.containerInstance = containerInstance;
|
|
19
|
+
// Dismiss snackbar on action.
|
|
20
|
+
this.onAction().subscribe(() => this.dismiss());
|
|
21
|
+
containerInstance._onExit.subscribe(() => this.finishDismiss());
|
|
22
|
+
}
|
|
23
|
+
/** Dismisses the snack bar. */
|
|
24
|
+
dismiss() {
|
|
25
|
+
if (!this._afterDismissed.closed) {
|
|
26
|
+
this.containerInstance.exit();
|
|
27
|
+
}
|
|
28
|
+
clearTimeout(this._durationTimeoutId);
|
|
29
|
+
}
|
|
30
|
+
/** Marks the snackbar action clicked. */
|
|
31
|
+
dismissWithAction() {
|
|
32
|
+
if (!this._onAction.closed) {
|
|
33
|
+
this._dismissedByAction = true;
|
|
34
|
+
this._onAction.next();
|
|
35
|
+
this._onAction.complete();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Dismisses the snack bar after some duration */
|
|
39
|
+
dismissAfter(duration) {
|
|
40
|
+
// Note that we need to cap the duration to the maximum value for setTimeout, because
|
|
41
|
+
// it'll revert to 1 if somebody passes in something greater (e.g. `Infinity`). See #17234.
|
|
42
|
+
// @TODO: window.setTimeout() ?
|
|
43
|
+
this._durationTimeoutId = window.setTimeout(() => this.dismiss(), Math.min(duration, MAX_TIMEOUT));
|
|
44
|
+
}
|
|
45
|
+
/** Marks the snackbar as opened */
|
|
46
|
+
open() {
|
|
47
|
+
if (!this._afterOpened.closed) {
|
|
48
|
+
this._afterOpened.next();
|
|
49
|
+
this._afterOpened.complete();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Gets an observable that is notified when the snack bar is finished closing. */
|
|
53
|
+
afterDismissed() {
|
|
54
|
+
return this._afterDismissed;
|
|
55
|
+
}
|
|
56
|
+
/** Gets an observable that is notified when the snack bar has opened and appeared. */
|
|
57
|
+
afterOpened() {
|
|
58
|
+
return this.containerInstance._onEnter;
|
|
59
|
+
}
|
|
60
|
+
/** Gets an observable that is notified when the snack bar action is called. */
|
|
61
|
+
onAction() {
|
|
62
|
+
return this._onAction;
|
|
63
|
+
}
|
|
64
|
+
/** Cleans up the DOM after closing. */
|
|
65
|
+
finishDismiss() {
|
|
66
|
+
this._overlayRef.dispose();
|
|
67
|
+
if (!this._onAction.closed) {
|
|
68
|
+
this._onAction.complete();
|
|
69
|
+
}
|
|
70
|
+
this._afterDismissed.next({ dismissedByAction: this._dismissedByAction });
|
|
71
|
+
this._afterDismissed.complete();
|
|
72
|
+
this._dismissedByAction = false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2stYmFyLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9zbmFjay1iYXIvc25hY2stYmFyLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUzNDLHlFQUF5RTtBQUN6RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQTRCekIsWUFDRSxpQkFBd0MsRUFDaEMsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFwQmpDLDRFQUE0RTtRQUMzRCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBRXRFLGlGQUFpRjtRQUNoRSxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFcEQsMkVBQTJFO1FBQzFELGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBUWpELG1FQUFtRTtRQUMzRCx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFNakMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELCtCQUErQjtJQUN4QixPQUFPO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMvQjtRQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQseUNBQXlDO0lBQ2xDLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQsa0RBQWtEO0lBQzNDLFlBQVksQ0FBQyxRQUFnQjtRQUNsQyxxRkFBcUY7UUFDckYsMkZBQTJGO1FBRTNGLCtCQUErQjtRQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FDekMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRCxtQ0FBbUM7SUFDNUIsSUFBSTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsa0ZBQWtGO0lBQzNFLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxzRkFBc0Y7SUFDL0UsV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7SUFDekMsQ0FBQztJQUVELCtFQUErRTtJQUN4RSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCx1Q0FBdUM7SUFDL0IsYUFBYTtRQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzNCO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cbmltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJQmFvU25hY2tCYXJDb250YWluZXIgfSBmcm9tICcuL3NuYWNrLWJhci1jb250YWluZXInO1xuXG4vKiogRXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gYSBzbmFjayBiYXIgaXMgZGlzbWlzc2VkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQmFvU25hY2tCYXJEaXNtaXNzIHtcbiAgLyoqIFdoZXRoZXIgdGhlIHNuYWNrIGJhciB3YXMgZGlzbWlzc2VkIHVzaW5nIHRoZSBhY3Rpb24gYnV0dG9uLiAqL1xuICBkaXNtaXNzZWRCeUFjdGlvbjogYm9vbGVhbjtcbn1cblxuLyoqIE1heGltdW0gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0aGF0IGNhbiBiZSBwYXNzZWQgaW50byBzZXRUaW1lb3V0LiAqL1xuY29uc3QgTUFYX1RJTUVPVVQgPSBNYXRoLnBvdygyLCAzMSkgLSAxO1xuXG4vKipcbiAqIFJlZmVyZW5jZSB0byBhIHNuYWNrIGJhciBkaXNwYXRjaGVkIGZyb20gdGhlIHNuYWNrIGJhciBzZXJ2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgQmFvU25hY2tCYXJSZWY8VD4ge1xuICAvKiogVGhlIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgbWFraW5nIHVwIHRoZSBjb250ZW50IG9mIHRoZSBzbmFjayBiYXIuICovXG4gIHB1YmxpYyBpbnN0YW5jZTogVDtcblxuICAvKipcbiAgICogVGhlIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgbWFraW5nIHVwIHRoZSBjb250ZW50IG9mIHRoZSBzbmFjayBiYXIuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIHB1YmxpYyBjb250YWluZXJJbnN0YW5jZTogSUJhb1NuYWNrQmFyQ29udGFpbmVyO1xuXG4gIC8qKiBTdWJqZWN0IGZvciBub3RpZnlpbmcgdGhlIHVzZXIgdGhhdCB0aGUgc25hY2sgYmFyIGhhcyBiZWVuIGRpc21pc3NlZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYWZ0ZXJEaXNtaXNzZWQgPSBuZXcgU3ViamVjdDxJQmFvU25hY2tCYXJEaXNtaXNzPigpO1xuXG4gIC8qKiBTdWJqZWN0IGZvciBub3RpZnlpbmcgdGhlIHVzZXIgdGhhdCB0aGUgc25hY2sgYmFyIGhhcyBvcGVuZWQgYW5kIGFwcGVhcmVkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9hZnRlck9wZW5lZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqIFN1YmplY3QgZm9yIG5vdGlmeWluZyB0aGUgdXNlciB0aGF0IHRoZSBzbmFjayBiYXIgYWN0aW9uIHdhcyBjYWxsZWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQWN0aW9uID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogVGltZW91dCBJRCBmb3IgdGhlIGR1cmF0aW9uIHNldFRpbWVvdXQgY2FsbC4gVXNlZCB0byBjbGVhciB0aGUgdGltZW91dCBpZiB0aGUgc25hY2tiYXIgaXNcbiAgICogZGlzbWlzc2VkIGJlZm9yZSB0aGUgZHVyYXRpb24gcGFzc2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZHVyYXRpb25UaW1lb3V0SWQ6IG51bWJlcjtcblxuICAvKiogV2hldGhlciB0aGUgc25hY2sgYmFyIHdhcyBkaXNtaXNzZWQgdXNpbmcgdGhlIGFjdGlvbiBidXR0b24uICovXG4gIHByaXZhdGUgX2Rpc21pc3NlZEJ5QWN0aW9uID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29udGFpbmVySW5zdGFuY2U6IElCYW9TbmFja0JhckNvbnRhaW5lcixcbiAgICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmXG4gICkge1xuICAgIHRoaXMuY29udGFpbmVySW5zdGFuY2UgPSBjb250YWluZXJJbnN0YW5jZTtcbiAgICAvLyBEaXNtaXNzIHNuYWNrYmFyIG9uIGFjdGlvbi5cbiAgICB0aGlzLm9uQWN0aW9uKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGlzbWlzcygpKTtcbiAgICBjb250YWluZXJJbnN0YW5jZS5fb25FeGl0LnN1YnNjcmliZSgoKSA9PiB0aGlzLmZpbmlzaERpc21pc3MoKSk7XG4gIH1cblxuICAvKiogRGlzbWlzc2VzIHRoZSBzbmFjayBiYXIuICovXG4gIHB1YmxpYyBkaXNtaXNzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lckluc3RhbmNlLmV4aXQoKTtcbiAgICB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKTtcbiAgfVxuXG4gIC8qKiBNYXJrcyB0aGUgc25hY2tiYXIgYWN0aW9uIGNsaWNrZWQuICovXG4gIHB1YmxpYyBkaXNtaXNzV2l0aEFjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX29uQWN0aW9uLmNsb3NlZCkge1xuICAgICAgdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb24gPSB0cnVlO1xuICAgICAgdGhpcy5fb25BY3Rpb24ubmV4dCgpO1xuICAgICAgdGhpcy5fb25BY3Rpb24uY29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogRGlzbWlzc2VzIHRoZSBzbmFjayBiYXIgYWZ0ZXIgc29tZSBkdXJhdGlvbiAqL1xuICBwdWJsaWMgZGlzbWlzc0FmdGVyKGR1cmF0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBjYXAgdGhlIGR1cmF0aW9uIHRvIHRoZSBtYXhpbXVtIHZhbHVlIGZvciBzZXRUaW1lb3V0LCBiZWNhdXNlXG4gICAgLy8gaXQnbGwgcmV2ZXJ0IHRvIDEgaWYgc29tZWJvZHkgcGFzc2VzIGluIHNvbWV0aGluZyBncmVhdGVyIChlLmcuIGBJbmZpbml0eWApLiBTZWUgIzE3MjM0LlxuXG4gICAgLy8gQFRPRE86IHdpbmRvdy5zZXRUaW1lb3V0KCkgP1xuICAgIHRoaXMuX2R1cmF0aW9uVGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoXG4gICAgICAoKSA9PiB0aGlzLmRpc21pc3MoKSxcbiAgICAgIE1hdGgubWluKGR1cmF0aW9uLCBNQVhfVElNRU9VVClcbiAgICApO1xuICB9XG5cbiAgLyoqIE1hcmtzIHRoZSBzbmFja2JhciBhcyBvcGVuZWQgKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9hZnRlck9wZW5lZC5jbG9zZWQpIHtcbiAgICAgIHRoaXMuX2FmdGVyT3BlbmVkLm5leHQoKTtcbiAgICAgIHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldHMgYW4gb2JzZXJ2YWJsZSB0aGF0IGlzIG5vdGlmaWVkIHdoZW4gdGhlIHNuYWNrIGJhciBpcyBmaW5pc2hlZCBjbG9zaW5nLiAqL1xuICBwdWJsaWMgYWZ0ZXJEaXNtaXNzZWQoKTogT2JzZXJ2YWJsZTxJQmFvU25hY2tCYXJEaXNtaXNzPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FmdGVyRGlzbWlzc2VkO1xuICB9XG5cbiAgLyoqIEdldHMgYW4gb2JzZXJ2YWJsZSB0aGF0IGlzIG5vdGlmaWVkIHdoZW4gdGhlIHNuYWNrIGJhciBoYXMgb3BlbmVkIGFuZCBhcHBlYXJlZC4gKi9cbiAgcHVibGljIGFmdGVyT3BlbmVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyO1xuICB9XG5cbiAgLyoqIEdldHMgYW4gb2JzZXJ2YWJsZSB0aGF0IGlzIG5vdGlmaWVkIHdoZW4gdGhlIHNuYWNrIGJhciBhY3Rpb24gaXMgY2FsbGVkLiAqL1xuICBwdWJsaWMgb25BY3Rpb24oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX29uQWN0aW9uO1xuICB9XG5cbiAgLyoqIENsZWFucyB1cCB0aGUgRE9NIGFmdGVyIGNsb3NpbmcuICovXG4gIHByaXZhdGUgZmluaXNoRGlzbWlzcygpOiB2b2lkIHtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblxuICAgIGlmICghdGhpcy5fb25BY3Rpb24uY2xvc2VkKSB7XG4gICAgICB0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX2FmdGVyRGlzbWlzc2VkLm5leHQoeyBkaXNtaXNzZWRCeUFjdGlvbjogdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb24gfSk7XG4gICAgdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbiA9IGZhbHNlO1xuICB9XG59XG4iXX0=
|