@villedemontreal/angular-ui 18.0.0 → 19.0.1
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/fesm2022/villedemontreal-angular-ui.mjs +421 -372
- package/fesm2022/villedemontreal-angular-ui.mjs.map +1 -1
- package/lib/dropdown-menu/dropdown-menu.component.d.ts +16 -9
- package/lib/modal/modal-container.d.ts +1 -1
- package/lib/modal/modal.d.ts +1 -1
- package/package.json +5 -7
- package/esm2022/lib/alert/alert.component.mjs +0 -169
- package/esm2022/lib/alert/index.mjs +0 -8
- package/esm2022/lib/alert/module.mjs +0 -41
- package/esm2022/lib/avatar/avatar.component.mjs +0 -102
- package/esm2022/lib/avatar/index.mjs +0 -8
- package/esm2022/lib/avatar/module.mjs +0 -24
- package/esm2022/lib/badge/badge.component.mjs +0 -27
- package/esm2022/lib/badge/index.mjs +0 -8
- package/esm2022/lib/badge/module.mjs +0 -24
- package/esm2022/lib/bao.module.mjs +0 -124
- package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -36
- package/esm2022/lib/breadcrumb/index.mjs +0 -8
- package/esm2022/lib/breadcrumb/module.mjs +0 -25
- package/esm2022/lib/button/button.component.mjs +0 -100
- package/esm2022/lib/button/index.mjs +0 -8
- package/esm2022/lib/button/module.mjs +0 -25
- package/esm2022/lib/card/card.component.mjs +0 -94
- package/esm2022/lib/card/index.mjs +0 -8
- package/esm2022/lib/card/module.mjs +0 -38
- package/esm2022/lib/checkbox/checkbox-group.component.mjs +0 -58
- package/esm2022/lib/checkbox/checkbox.component.mjs +0 -304
- package/esm2022/lib/checkbox/index.mjs +0 -9
- package/esm2022/lib/checkbox/module.mjs +0 -35
- package/esm2022/lib/common-components/error-text/errorText.component.mjs +0 -16
- package/esm2022/lib/common-components/guiding-text/guidingText.component.mjs +0 -16
- package/esm2022/lib/common-components/index.mjs +0 -11
- package/esm2022/lib/common-components/label-text/labelText.component.mjs +0 -22
- package/esm2022/lib/common-components/module.mjs +0 -38
- package/esm2022/lib/common-components/title-text/titleText.component.mjs +0 -16
- package/esm2022/lib/core/breakpoints.mjs +0 -13
- package/esm2022/lib/core/colors.mjs +0 -25
- package/esm2022/lib/core/index.mjs +0 -8
- package/esm2022/lib/dropdown-menu/dropdown-menu.component.mjs +0 -573
- package/esm2022/lib/dropdown-menu/index.mjs +0 -8
- package/esm2022/lib/dropdown-menu/module.mjs +0 -47
- package/esm2022/lib/file/file-input.component.mjs +0 -320
- package/esm2022/lib/file/file-intl.mjs +0 -65
- package/esm2022/lib/file/file-preview.component.mjs +0 -96
- package/esm2022/lib/file/index.mjs +0 -10
- package/esm2022/lib/file/module.mjs +0 -56
- package/esm2022/lib/header-info/header-info.component.mjs +0 -104
- package/esm2022/lib/header-info/index.mjs +0 -8
- package/esm2022/lib/header-info/module.mjs +0 -41
- package/esm2022/lib/hyperlink/hyperlink.component.mjs +0 -84
- package/esm2022/lib/hyperlink/index.mjs +0 -8
- package/esm2022/lib/hyperlink/module.mjs +0 -24
- package/esm2022/lib/icon/bao-icon-registry.mjs +0 -47
- package/esm2022/lib/icon/icon.component.mjs +0 -158
- package/esm2022/lib/icon/icons-dictionary.mjs +0 -129
- package/esm2022/lib/icon/index.mjs +0 -8
- package/esm2022/lib/icon/module.mjs +0 -24
- package/esm2022/lib/list/index.mjs +0 -8
- package/esm2022/lib/list/list.component.mjs +0 -73
- package/esm2022/lib/list/module.mjs +0 -38
- package/esm2022/lib/message-bar/index.mjs +0 -8
- package/esm2022/lib/message-bar/message-bar.component.mjs +0 -87
- package/esm2022/lib/message-bar/module.mjs +0 -26
- package/esm2022/lib/modal/index.mjs +0 -12
- package/esm2022/lib/modal/modal-config.mjs +0 -73
- package/esm2022/lib/modal/modal-container.mjs +0 -240
- package/esm2022/lib/modal/modal-directives.mjs +0 -84
- package/esm2022/lib/modal/modal-ref.mjs +0 -226
- package/esm2022/lib/modal/modal.mjs +0 -344
- package/esm2022/lib/modal/module.mjs +0 -29
- package/esm2022/lib/pagination/index.mjs +0 -8
- package/esm2022/lib/pagination/module.mjs +0 -25
- package/esm2022/lib/pagination/pagination.component.mjs +0 -217
- package/esm2022/lib/radio/index.mjs +0 -9
- package/esm2022/lib/radio/module.mjs +0 -54
- package/esm2022/lib/radio/radio-group.component.mjs +0 -247
- package/esm2022/lib/radio/radio.component.mjs +0 -291
- package/esm2022/lib/shared/enum/display-mode.mjs +0 -2
- package/esm2022/lib/shared/index.mjs +0 -7
- package/esm2022/lib/snack-bar/index.mjs +0 -12
- package/esm2022/lib/snack-bar/module.mjs +0 -51
- package/esm2022/lib/snack-bar/simple-snack-bar.component.mjs +0 -92
- package/esm2022/lib/snack-bar/snack-bar-animations.mjs +0 -28
- package/esm2022/lib/snack-bar/snack-bar-config.mjs +0 -37
- package/esm2022/lib/snack-bar/snack-bar-container.mjs +0 -277
- package/esm2022/lib/snack-bar/snack-bar-ref.mjs +0 -75
- package/esm2022/lib/snack-bar/snack-bar.mjs +0 -251
- package/esm2022/lib/summary/index.mjs +0 -9
- package/esm2022/lib/summary/list-summary.component.mjs +0 -30
- package/esm2022/lib/summary/module.mjs +0 -37
- package/esm2022/lib/summary/summary.component.mjs +0 -93
- package/esm2022/lib/system-header/index.mjs +0 -8
- package/esm2022/lib/system-header/module.mjs +0 -33
- package/esm2022/lib/system-header/system-header.component.mjs +0 -130
- package/esm2022/lib/tabs/index.mjs +0 -8
- package/esm2022/lib/tabs/module.mjs +0 -35
- package/esm2022/lib/tabs/tabs.component.mjs +0 -295
- package/esm2022/lib/tag/index.mjs +0 -8
- package/esm2022/lib/tag/module.mjs +0 -24
- package/esm2022/lib/tag/tag.component.mjs +0 -75
- package/esm2022/public-api.mjs +0 -31
- package/esm2022/villedemontreal-angular-ui.mjs +0 -5
|
@@ -1,37 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2stYmFyLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9zbmFjay1iYXIvc25hY2stYmFyLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsY0FBYyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUVqRSw2RkFBNkY7QUFDN0YsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQU0saUJBQWlCLENBQUMsQ0FBQztBQWdCN0U7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ0UsOENBQThDO1FBQ3ZDLFlBQU8sR0FBRyxZQUFZLENBQUM7UUFFOUIsZ0RBQWdEO1FBQ3pDLGNBQVMsR0FBMEIsTUFBTSxDQUFDO1FBRWpEOzs7YUFHSztRQUNFLHNCQUFpQixHQUFZLEVBQUUsQ0FBQztRQUV2QyxpREFBaUQ7UUFDMUMsY0FBUyxHQUFhLEtBQUssQ0FBQztRQUVuQyxnR0FBZ0c7UUFDekYsYUFBUSxHQUFZLElBQUksQ0FBQztRQUVoQyxzRUFBc0U7UUFDL0QsZUFBVSxHQUF3QixXQUFXLENBQUM7UUFFckQ7OztXQUdHO1FBQ0ksd0JBQW1CLEdBQVksRUFBRSxDQUFDO1FBY3pDLG9EQUFvRDtRQUM3QyxTQUFJLEdBQWMsSUFBSSxDQUFDO1FBRTlCLHNEQUFzRDtRQUMvQyx1QkFBa0IsR0FBbUMsTUFBTSxDQUFDO1FBRW5FLG9EQUFvRDtRQUM3QyxxQkFBZ0IsR0FBaUMsUUFBUSxDQUFDO0lBQ25FLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHsgQXJpYUxpdmVQb2xpdGVuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqIEluamVjdGlvbiB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgZGF0YSB0aGF0IHdhcyBwYXNzZWQgaW4gdG8gYSBzbmFjayBiYXIuICovXG5leHBvcnQgY29uc3QgQkFPX1NOQUNLX0JBUl9EQVRBID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ0Jhb1NuYWNrQmFyRGF0YScpO1xuXG4vKiogUG9zc2libGUgdmFsdWVzIGZvciBob3Jpem9udGFsUG9zaXRpb24gb24gTWF0U25hY2tCYXJDb25maWcuICovXG5leHBvcnQgdHlwZSBCYW9TbmFja0Jhckhvcml6b250YWxQb3NpdGlvbiA9XG4gIHwgJ3N0YXJ0J1xuICB8ICdjZW50ZXInXG4gIHwgJ2VuZCdcbiAgfCAnbGVmdCdcbiAgfCAncmlnaHQnO1xuXG4vKiogUG9zc2libGUgdmFsdWVzIGZvciB2ZXJ0aWNhbFBvc2l0aW9uIG9uIE1hdFNuYWNrQmFyQ29uZmlnLiAqL1xuZXhwb3J0IHR5cGUgQmFvU25hY2tCYXJWZXJ0aWNhbFBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJztcblxuLyoqIFBvc3NpYmxlIHR5cGVzIG9mIHRvYXN0IHRvIGRpc3BsYXkgdGhlIHNuYWNrIGJhciAqL1xuZXhwb3J0IHR5cGUgQmFvU25hY2tCYXJUb2FzdFR5cGUgPSAnaW5mbycgfCAnc3VjY2VzcycgfCAnZGFuZ2VyJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHVzZWQgd2hlbiBvcGVuaW5nIGEgc25hY2stYmFyLlxuICovXG5leHBvcnQgY2xhc3MgQmFvU25hY2tCYXJDb25maWc8RCA9IGFueT4ge1xuICAvKiogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBpbiB0aGUgc25hY2tiYXIuICovXG4gIHB1YmxpYyBtZXNzYWdlID0gJ05vIG1lc3NhZ2UnO1xuXG4gIC8qKiBUaGUgdHlwZSBvZiBzbmFja2JhciB0ZW1wbGF0ZSB0byBkaXNwbGF5LiAqL1xuICBwdWJsaWMgdG9hc3RUeXBlPzogQmFvU25hY2tCYXJUb2FzdFR5cGUgPSAnaW5mbyc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdHRhY2hlZCBhY3Rpb24gdG8gdGhlIHNuYWNrIGJhci4gSWYgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBtYXRjaGVzIGFuIGljb24gcHJvdmlkZWQgYXMgcGFydCBvZlxuICAgKiBhbmd1bGFyLXVpIGljb24gZGljdGlvbm5hcnkgYW4gaWNvbiB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkIG9mIHRleHQuXG4gICAqICovXG4gIHB1YmxpYyBhY3Rpb25MYWJlbE9ySWNvbj86IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBEaXNwbGF5cyB0aGUgY2xvc2UgYnV0dG9uIHdoZW4gc2V0IHRvIHRydWUgKi9cbiAgcHVibGljIHNob3dDbG9zZT86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGhlIGxlbmd0aCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBhdXRvbWF0aWNhbGx5IGRpc21pc3NpbmcgdGhlIHNuYWNrIGJhci4gKi9cbiAgcHVibGljIGR1cmF0aW9uPzogbnVtYmVyID0gNTAwMDtcblxuICAvKiogVGhlIHBvbGl0ZW5lc3MgbGV2ZWwgZm9yIHRoZSBNYXRBcmlhTGl2ZUFubm91bmNlciBhbm5vdW5jZW1lbnQuICovXG4gIHB1YmxpYyBwb2xpdGVuZXNzPzogQXJpYUxpdmVQb2xpdGVuZXNzID0gJ2Fzc2VydGl2ZSc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgdG8gYmUgYW5ub3VuY2VkIGJ5IHRoZSBMaXZlQW5ub3VuY2VyLiBXaGVuIG9wZW5pbmcgYSBzbmFja2JhciB3aXRob3V0IGEgY3VzdG9tXG4gICAqIGNvbXBvbmVudCBvciB0ZW1wbGF0ZSwgdGhlIGFubm91bmNlbWVudCBtZXNzYWdlIHdpbGwgZGVmYXVsdCB0byB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuXG4gICAqL1xuICBwdWJsaWMgYW5ub3VuY2VtZW50TWVzc2FnZT86IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlldyBjb250YWluZXIgdGhhdCBzZXJ2ZXMgYXMgdGhlIHBhcmVudCBmb3IgdGhlIHNuYWNrYmFyIGZvciB0aGUgcHVycG9zZXMgb2YgZGVwZW5kZW5jeVxuICAgKiBpbmplY3Rpb24uIE5vdGU6IHRoaXMgZG9lcyBub3QgYWZmZWN0IHdoZXJlIHRoZSBzbmFja2JhciBpcyBpbnNlcnRlZCBpbiB0aGUgRE9NLlxuICAgKi9cbiAgcHVibGljIHZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIC8qKiBFeHRyYSBDU1MgY2xhc3NlcyB0byBiZSBhZGRlZCB0byB0aGUgc25hY2sgYmFyIGNvbnRhaW5lci4gKi9cbiAgcHVibGljIHBhbmVsQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKiogVGV4dCBsYXlvdXQgZGlyZWN0aW9uIGZvciB0aGUgc25hY2sgYmFyLiAqL1xuICBwdWJsaWMgZGlyZWN0aW9uPzogRGlyZWN0aW9uO1xuXG4gIC8qKiBEYXRhIGJlaW5nIGluamVjdGVkIGludG8gdGhlIGNoaWxkIGNvbXBvbmVudC4gKi9cbiAgcHVibGljIGRhdGE/OiBEIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIHRvIHBsYWNlIHRoZSBzbmFjayBiYXIuICovXG4gIHB1YmxpYyBob3Jpem9udGFsUG9zaXRpb24/OiBCYW9TbmFja0Jhckhvcml6b250YWxQb3NpdGlvbiA9ICdsZWZ0JztcblxuICAvKiogVGhlIHZlcnRpY2FsIHBvc2l0aW9uIHRvIHBsYWNlIHRoZSBzbmFjayBiYXIuICovXG4gIHB1YmxpYyB2ZXJ0aWNhbFBvc2l0aW9uPzogQmFvU25hY2tCYXJWZXJ0aWNhbFBvc2l0aW9uID0gJ2JvdHRvbSc7XG59XG4iXX0=
|
|
@@ -1,277 +0,0 @@
|
|
|
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
|
-
try {
|
|
250
|
-
liveElement.appendChild(inertElement);
|
|
251
|
-
}
|
|
252
|
-
catch (error) {
|
|
253
|
-
console.warn(error);
|
|
254
|
-
}
|
|
255
|
-
focusedElement?.focus();
|
|
256
|
-
this._onAnnounce.next();
|
|
257
|
-
this._onAnnounce.complete();
|
|
258
|
-
}
|
|
259
|
-
}, this._announceDelay);
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoSnackBarContainerComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Platform }, { token: i2.BaoSnackBarConfig }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
264
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", 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"], dependencies: [{ kind: "directive", type: i3.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], animations: [matSnackBarAnimations.snackBarState], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
|
|
265
|
-
}
|
|
266
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoSnackBarContainerComponent, decorators: [{
|
|
267
|
-
type: Component,
|
|
268
|
-
args: [{ selector: 'bao-snack-bar-container', changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, animations: [matSnackBarAnimations.snackBarState], host: {
|
|
269
|
-
class: 'bao-snack-bar-container',
|
|
270
|
-
'[@state]': '_animationState',
|
|
271
|
-
'(@state.done)': 'onAnimationEnd($event)'
|
|
272
|
-
}, 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"] }]
|
|
273
|
-
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Platform }, { type: i2.BaoSnackBarConfig }], propDecorators: { _portalOutlet: [{
|
|
274
|
-
type: ViewChild,
|
|
275
|
-
args: [CdkPortalOutlet, { static: true }]
|
|
276
|
-
}] } });
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2stYmFyLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9zbmFjay1iYXIvc25hY2stYmFyLWNvbnRhaW5lci50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9zbmFjay1iYXIvc25hY2stYmFyLWNvbnRhaW5lci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUloQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFJVCxNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFHL0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBaUJqQjs7O0dBR0c7QUFrQkgsTUFBTSxPQUFPLDZCQUNYLFNBQVEsZ0JBQWdCO0lBMEN4QixZQUNVLE9BQWUsRUFDZixXQUFvQyxFQUNwQyxrQkFBcUMsRUFDckMsU0FBbUI7SUFDM0IsbUNBQW1DO0lBQzVCLGNBQWlDO1FBRXhDLEtBQUssRUFBRSxDQUFDO1FBUEEsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUNwQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFFcEIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBMUNsQyxjQUFT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RSxDQUFDO29CQUM5QixDQUFDO2dCQUNILENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0F2VFUsNkJBQTZCO21HQUE3Qiw2QkFBNkIsd1FBSzdCLGVBQWUscUZDN0U1QixnWkFXQSxraUNEc0RjLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDOzs0RkFPdEMsNkJBQTZCO2tCQWpCekMsU0FBUzsrQkFDRSx5QkFBeUIsbUJBT2xCLHVCQUF1QixDQUFDLE9BQU8saUJBQ2pDLGlCQUFpQixDQUFDLElBQUksY0FDekIsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsUUFDM0M7d0JBQ0osS0FBSyxFQUFFLHlCQUF5Qjt3QkFDaEMsVUFBVSxFQUFFLGlCQUFpQjt3QkFDN0IsZUFBZSxFQUFFLHdCQUF3QjtxQkFDMUM7MkxBTzZDLGFBQWE7c0JBQTFELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IEFyaWFMaXZlUG9saXRlbmVzcyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIEJhc2VQb3J0YWxPdXRsZXQsXG4gIENka1BvcnRhbE91dGxldCxcbiAgQ29tcG9uZW50UG9ydGFsLFxuICBEb21Qb3J0YWwsXG4gIFRlbXBsYXRlUG9ydGFsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBpbmplY3QsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG1hdFNuYWNrQmFyQW5pbWF0aW9ucyB9IGZyb20gJy4vc25hY2stYmFyLWFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQmFvU25hY2tCYXJDb25maWcgfSBmcm9tICcuL3NuYWNrLWJhci1jb25maWcnO1xuXG5sZXQgdW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIEludGVybmFsIGludGVyZmFjZSBmb3IgYSBzbmFjayBiYXIgY29udGFpbmVyLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElCYW9TbmFja0JhckNvbnRhaW5lciB7XG4gIHNuYWNrQmFyQ29uZmlnOiBCYW9TbmFja0JhckNvbmZpZztcbiAgX29uQW5ub3VuY2U6IFN1YmplY3Q8YW55PjtcbiAgX29uRXhpdDogU3ViamVjdDxhbnk+O1xuICBfb25FbnRlcjogU3ViamVjdDxhbnk+O1xuICBlbnRlcjogKCkgPT4gdm9pZDtcbiAgZXhpdDogKCkgPT4gT2JzZXJ2YWJsZTx2b2lkPjtcbiAgYXR0YWNoVGVtcGxhdGVQb3J0YWw6IDxDPihwb3J0YWw6IFRlbXBsYXRlUG9ydGFsPEM+KSA9PiBFbWJlZGRlZFZpZXdSZWY8Qz47XG4gIGF0dGFjaENvbXBvbmVudFBvcnRhbDogPFQ+KHBvcnRhbDogQ29tcG9uZW50UG9ydGFsPFQ+KSA9PiBDb21wb25lbnRSZWY8VD47XG59XG5cbi8qKlxuICogSW50ZXJuYWwgY29tcG9uZW50IHRoYXQgd3JhcHMgdXNlci1wcm92aWRlZCBzbmFjayBiYXIgY29udGVudC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFvLXNuYWNrLWJhci1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJ3NuYWNrLWJhci1jb250YWluZXIuaHRtbCcsXG4gIHN0eWxlVXJsczogWydzbmFjay1iYXItY29udGFpbmVyLnNjc3MnXSxcbiAgLy8gSW4gSXZ5IGVtYmVkZGVkIHZpZXdzIHdpbGwgYmUgY2hhbmdlIGRldGVjdGVkIGZyb20gdGhlaXIgZGVjbGFyYXRpb24gcGxhY2UsIHJhdGhlciB0aGFuXG4gIC8vIHdoZXJlIHRoZXkgd2VyZSBzdGFtcGVkIG91dC4gVGhpcyBtZWFucyB0aGF0IHdlIGNhbid0IGhhdmUgdGhlIHNuYWNrIGJhciBjb250YWluZXIgYmUgT25QdXNoLFxuICAvLyBiZWNhdXNlIGl0IG1pZ2h0IGNhdXNlIHNuYWNrIGJhcnMgdGhhdCB3ZXJlIG9wZW5lZCBmcm9tIGEgdGVtcGxhdGUgbm90IHRvIGJlIG91dCBvZiBkYXRlLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBhbmltYXRpb25zOiBbbWF0U25hY2tCYXJBbmltYXRpb25zLnNuYWNrQmFyU3RhdGVdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdiYW8tc25hY2stYmFyLWNvbnRhaW5lcicsXG4gICAgJ1tAc3RhdGVdJzogJ19hbmltYXRpb25TdGF0ZScsXG4gICAgJyhAc3RhdGUuZG9uZSknOiAnb25BbmltYXRpb25FbmQoJGV2ZW50KSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBCYW9TbmFja0JhckNvbnRhaW5lckNvbXBvbmVudFxuICBleHRlbmRzIEJhc2VQb3J0YWxPdXRsZXRcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIElCYW9TbmFja0JhckNvbnRhaW5lclxue1xuICAvKiogVGhlIHBvcnRhbCBvdXRsZXQgaW5zaWRlIG9mIHRoaXMgY29udGFpbmVyIGludG8gd2hpY2ggdGhlIHNuYWNrIGJhciBjb250ZW50IHdpbGwgYmUgbG9hZGVkLiAqL1xuICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldCwgeyBzdGF0aWM6IHRydWUgfSkgX3BvcnRhbE91dGxldDogQ2RrUG9ydGFsT3V0bGV0O1xuXG4gIHByaXZhdGUgX2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSBfdHJhY2tlZE1vZGFscyA9IG5ldyBTZXQ8RWxlbWVudD4oKTtcblxuICAvKiogU3ViamVjdCBmb3Igbm90aWZ5aW5nIHRoYXQgdGhlIHNuYWNrIGJhciBoYXMgYW5ub3VuY2VkIHRvIHNjcmVlbiByZWFkZXJzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX29uQW5ub3VuY2U6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKiBTdWJqZWN0IGZvciBub3RpZnlpbmcgdGhhdCB0aGUgc25hY2sgYmFyIGhhcyBleGl0ZWQgZnJvbSB2aWV3LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX29uRXhpdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgLyoqIFN1YmplY3QgZm9yIG5vdGlmeWluZyB0aGF0IHRoZSBzbmFjayBiYXIgaGFzIGZpbmlzaGVkIGVudGVyaW5nIHRoZSB2aWV3LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX29uRW50ZXI6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKiBUaGUgc3RhdGUgb2YgdGhlIHNuYWNrIGJhciBhbmltYXRpb25zLiAqL1xuICBwdWJsaWMgX2FuaW1hdGlvblN0YXRlID0gJ3ZvaWQnO1xuXG4gIC8qKiBhcmlhLWxpdmUgdmFsdWUgZm9yIHRoZSBsaXZlIHJlZ2lvbi4gKi9cbiAgcHVibGljIF9saXZlOiBBcmlhTGl2ZVBvbGl0ZW5lc3M7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGFubm91bmNpbmcgdGhlIHNuYWNrIGJhcidzIGNvbnRlbnQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Fubm91bmNlRGVsYXk6IG51bWJlciA9IDE1MDtcblxuICAvKiogVGhlIHRpbWVvdXQgZm9yIGFubm91bmNpbmcgdGhlIHNuYWNrIGJhcidzIGNvbnRlbnQuICovXG4gIHByaXZhdGUgX2Fubm91bmNlVGltZW91dElkOiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBkZXN0cm95ZWQuICovXG4gIHByaXZhdGUgX2Rlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBSb2xlIG9mIHRoZSBsaXZlIHJlZ2lvbi4gVGhpcyBpcyBvbmx5IGZvciBGaXJlZm94IGFzIHRoZXJlIGlzIGEga25vd24gaXNzdWUgd2hlcmUgRmlyZWZveCArXG4gICAqIEpBV1MgZG9lcyBub3QgcmVhZCBvdXQgYXJpYS1saXZlIG1lc3NhZ2UuXG4gICAqL1xuICBfcm9sZT86ICdzdGF0dXMnIHwgJ2FsZXJ0JztcblxuICAvKiogVW5pcXVlIElEIG9mIHRoZSBhcmlhLWxpdmUgZWxlbWVudC4gKi9cbiAgcmVhZG9ubHkgX2xpdmVFbGVtZW50SWQgPSBgYmFvLXNuYWNrLWJhci1jb250YWluZXItbGl2ZS0ke3VuaXF1ZUlkKyt9YDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIC8qKiBUaGUgc25hY2sgYmFyIGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIHNuYWNrQmFyQ29uZmlnOiBCYW9TbmFja0JhckNvbmZpZ1xuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gVXNlIGFyaWEtbGl2ZSByYXRoZXIgdGhhbiBhIGxpdmUgcm9sZSBsaWtlICdhbGVydCcgb3IgJ3N0YXR1cydcbiAgICAvLyBiZWNhdXNlIE5WREEgYW5kIEpBV1MgaGF2ZSBzaG93IGluY29uc2lzdGVudCBiZWhhdmlvciB3aXRoIGxpdmUgcm9sZXMuXG4gICAgaWYgKFxuICAgICAgc25hY2tCYXJDb25maWcucG9saXRlbmVzcyA9PT0gJ2Fzc2VydGl2ZScgJiZcbiAgICAgICFzbmFja0JhckNvbmZpZy5hbm5vdW5jZW1lbnRNZXNzYWdlXG4gICAgKSB7XG4gICAgICB0aGlzLl9saXZlID0gJ2Fzc2VydGl2ZSc7XG4gICAgfSBlbHNlIGlmIChzbmFja0JhckNvbmZpZy5wb2xpdGVuZXNzID09PSAnb2ZmJykge1xuICAgICAgdGhpcy5fbGl2ZSA9ICdvZmYnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXZlID0gJ3BvbGl0ZSc7XG4gICAgfVxuICAgIC8vIE9ubHkgc2V0IHJvbGUgZm9yIEZpcmVmb3guIFNldCByb2xlIGJhc2VkIG9uIGFyaWEtbGl2ZSBiZWNhdXNlIHNldHRpbmcgcm9sZT1cImFsZXJ0XCIgaW1wbGllc1xuICAgIC8vIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIHdoaWNoIG1heSBjYXVzZSBpc3N1ZXMgaWYgYXJpYS1saXZlIGlzIHNldCB0byBcInBvbGl0ZVwiIGFib3ZlLlxuICAgIGlmICh0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YKSB7XG4gICAgICBpZiAodGhpcy5fbGl2ZSA9PT0gJ3BvbGl0ZScpIHtcbiAgICAgICAgdGhpcy5fcm9sZSA9ICdzdGF0dXMnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2xpdmUgPT09ICdhc3NlcnRpdmUnKSB7XG4gICAgICAgIHRoaXMuX3JvbGUgPSAnYWxlcnQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBBdHRhY2ggYSBjb21wb25lbnQgcG9ydGFsIGFzIGNvbnRlbnQgdG8gdGhpcyBzbmFjayBiYXIgY29udGFpbmVyLiAqL1xuICBwdWJsaWMgYXR0YWNoQ29tcG9uZW50UG9ydGFsPFQ+KHBvcnRhbDogQ29tcG9uZW50UG9ydGFsPFQ+KTogQ29tcG9uZW50UmVmPFQ+IHtcbiAgICB0aGlzLmFzc2VydE5vdEF0dGFjaGVkKCk7XG4gICAgdGhpcy5hcHBseVNuYWNrQmFyQ2xhc3NlcygpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hDb21wb25lbnRQb3J0YWwocG9ydGFsKTtcbiAgICB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBBdHRhY2ggYSB0ZW1wbGF0ZSBwb3J0YWwgYXMgY29udGVudCB0byB0aGlzIHNuYWNrIGJhciBjb250YWluZXIuICovXG4gIHB1YmxpYyBhdHRhY2hUZW1wbGF0ZVBvcnRhbDxDPihcbiAgICBwb3J0YWw6IFRlbXBsYXRlUG9ydGFsPEM+XG4gICk6IEVtYmVkZGVkVmlld1JlZjxDPiB7XG4gICAgdGhpcy5hc3NlcnROb3RBdHRhY2hlZCgpO1xuICAgIHRoaXMuYXBwbHlTbmFja0JhckNsYXNzZXMoKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwocG9ydGFsKTtcbiAgICB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyBhIERPTSBwb3J0YWwgdG8gdGhlIHNuYWNrIGJhciBjb250YWluZXIuXG4gICAqIEBkZXByZWNhdGVkIFRvIGJlIHR1cm5lZCBpbnRvIGEgbWV0aG9kLlxuICAgKiBAYnJlYWtpbmctY2hhbmdlIDEwLjAuMFxuICAgKi9cbiAgcHVibGljIGF0dGFjaERvbVBvcnRhbCA9IChwb3J0YWw6IERvbVBvcnRhbCkgPT4ge1xuICAgIHRoaXMuYXNzZXJ0Tm90QXR0YWNoZWQoKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKHBvcnRhbCk7XG4gICAgdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqIEhhbmRsZSBlbmQgb2YgYW5pbWF0aW9ucywgdXBkYXRpbmcgdGhlIHN0YXRlIG9mIHRoZSBzbmFja2Jhci4gKi9cbiAgcHVibGljIG9uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIGNvbnN0IHsgZnJvbVN0YXRlLCB0b1N0YXRlIH0gPSBldmVudDtcblxuICAgIGlmICgodG9TdGF0ZSA9PT0gJ3ZvaWQnICYmIGZyb21TdGF0ZSAhPT0gJ3ZvaWQnKSB8fCB0b1N0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgdGhpcy5jb21wbGV0ZUV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAodG9TdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICAvLyBOb3RlOiB3ZSBzaG91bGRuJ3QgdXNlIGB0aGlzYCBpbnNpZGUgdGhlIHpvbmUgY2FsbGJhY2ssXG4gICAgICAvLyBiZWNhdXNlIGl0IGNhbiBjYXVzZSBhIG1lbW9yeSBsZWFrLlxuICAgICAgY29uc3Qgb25FbnRlciA9IHRoaXMuX29uRW50ZXI7XG5cbiAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBvbkVudGVyLm5leHQoKTtcbiAgICAgICAgb25FbnRlci5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEJlZ2luIGFuaW1hdGlvbiBvZiBzbmFjayBiYXIgZW50cmFuY2UgaW50byB2aWV3LiAqL1xuICBwdWJsaWMgZW50ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9kZXN0cm95ZWQpIHtcbiAgICAgIHRoaXMuX2FuaW1hdGlvblN0YXRlID0gJ3Zpc2libGUnO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5zY3JlZW5SZWFkZXJBbm5vdW5jZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBCZWdpbiBhbmltYXRpb24gb2YgdGhlIHNuYWNrIGJhciBleGl0aW5nIGZyb20gdmlldy4gKi9cbiAgcHVibGljIGV4aXQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgLy8gTm90ZTogdGhpcyBvbmUgdHJhbnNpdGlvbnMgdG8gYGhpZGRlbmAsIHJhdGhlciB0aGFuIGB2b2lkYCwgaW4gb3JkZXIgdG8gaGFuZGxlIHRoZSBjYXNlXG4gICAgLy8gd2hlcmUgbXVsdGlwbGUgc25hY2sgYmFycyBhcmUgb3BlbmVkIGluIHF1aWNrIHN1Y2Nlc3Npb24gKGUuZy4gdHdvIGNvbnNlY3V0aXZlIGNhbGxzIHRvXG4gICAgLy8gYE1hdFNuYWNrQmFyLm9wZW5gKS5cbiAgICB0aGlzLl9hbmltYXRpb25TdGF0ZSA9ICdoaWRkZW4nO1xuXG4gICAgLy8gTWFyayB0aGlzIGVsZW1lbnQgd2l0aCBhbiAnZXhpdCcgYXR0cmlidXRlIHRvIGluZGljYXRlIHRoYXQgdGhlIHNuYWNrYmFyIGhhc1xuICAgIC8vIGJlZW4gZGlzbWlzc2VkIGFuZCB3aWxsIHNvb24gYmUgcmVtb3ZlZCBmcm9tIHRoZSBET00uIFRoaXMgaXMgdXNlZCBieSB0aGUgc25hY2tiYXJcbiAgICAvLyB0ZXN0IGhhcm5lc3MuXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnbWF0LWV4aXQnLCAnJyk7XG5cbiAgICAvLyBJZiB0aGUgc25hY2sgYmFyIGhhc24ndCBiZWVuIGFubm91bmNlZCBieSB0aGUgdGltZSBpdCBleGl0cyBpdCB3b3VsZG4ndCBoYXZlIGJlZW4gb3BlblxuICAgIC8vIGxvbmcgZW5vdWdoIHRvIHZpc3VhbGx5IHJlYWQgaXQgZWl0aGVyLCBzbyBjbGVhciB0aGUgdGltZW91dCBmb3IgYW5ub3VuY2luZy5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuX29uRXhpdDtcbiAgfVxuXG4gIC8qKiBNYWtlcyBzdXJlIHRoZSBleGl0IGNhbGxiYWNrcyBoYXZlIGJlZW4gaW52b2tlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGRlc3Ryb3llZC4gKi9cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy5jb21wbGV0ZUV4aXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0cyBmb3IgdGhlIHpvbmUgdG8gc2V0dGxlIGJlZm9yZSByZW1vdmluZyB0aGUgZWxlbWVudC4gSGVscHMgcHJldmVudFxuICAgKiBlcnJvcnMgd2hlcmUgd2UgZW5kIHVwIHJlbW92aW5nIGFuIGVsZW1lbnQgd2hpY2ggaXMgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbmltYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGNvbXBsZXRlRXhpdCgpIHtcbiAgICB0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9vbkV4aXQubmV4dCgpO1xuICAgICAgdGhpcy5fb25FeGl0LmNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQXBwbGllcyB0aGUgdmFyaW91cyBwb3NpdGlvbmluZyBhbmQgdXNlci1jb25maWd1cmVkIENTUyBjbGFzc2VzIHRvIHRoZSBzbmFjayBiYXIuICovXG4gIHByaXZhdGUgYXBwbHlTbmFja0JhckNsYXNzZXMoKSB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgcGFuZWxDbGFzc2VzID0gdGhpcy5zbmFja0JhckNvbmZpZy5wYW5lbENsYXNzO1xuXG4gICAgaWYgKHBhbmVsQ2xhc3Nlcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFuZWxDbGFzc2VzKSkge1xuICAgICAgICAvLyBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIGEgc3ByZWFkIGhlcmUsIGJlY2F1c2UgSUUgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGFyZ3VtZW50cy5cbiAgICAgICAgcGFuZWxDbGFzc2VzLmZvckVhY2goY3NzQ2xhc3MgPT4gZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQocGFuZWxDbGFzc2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zbmFja0JhckNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb24gPT09ICdjZW50ZXInKSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Jhby1zbmFjay1iYXItY2VudGVyJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc25hY2tCYXJDb25maWcudmVydGljYWxQb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYmFvLXNuYWNrLWJhci10b3AnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIHRoZSBwb3J0YWwgY29udGVudHMgaGF2ZSBiZWVuIGF0dGFjaGVkLiBDYW4gYmVcbiAgICogdXNlZCB0byBtb2RpZnkgdGhlIERPTSBvbmNlIGl0J3MgZ3VhcmFudGVlZCB0byBiZSBpbiBwbGFjZS5cbiAgICovXG4gIHByb3RlY3RlZCBfYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpIHtcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBwYW5lbENsYXNzZXMgPSB0aGlzLnNuYWNrQmFyQ29uZmlnLnBhbmVsQ2xhc3M7XG5cbiAgICBpZiAocGFuZWxDbGFzc2VzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYW5lbENsYXNzZXMpKSB7XG4gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgYSBzcHJlYWQgaGVyZSwgYmVjYXVzZSBJRSBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgYXJndW1lbnRzLlxuICAgICAgICBwYW5lbENsYXNzZXMuZm9yRWFjaChjc3NDbGFzcyA9PiBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY3NzQ2xhc3MpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChwYW5lbENsYXNzZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2V4cG9zZVRvTW9kYWxzKCk7XG4gIH1cblxuICAvKipcbiAgICogU29tZSBicm93c2VycyB3b24ndCBleHBvc2UgdGhlIGFjY2Vzc2liaWxpdHkgbm9kZSBvZiB0aGUgbGl2ZSBlbGVtZW50IGlmIHRoZXJlIGlzIGFuXG4gICAqIGBhcmlhLW1vZGFsYCBhbmQgdGhlIGxpdmUgZWxlbWVudCBpcyBvdXRzaWRlIG9mIGl0LiBUaGlzIG1ldGhvZCB3b3JrcyBhcm91bmQgdGhlIGlzc3VlIGJ5XG4gICAqIHBvaW50aW5nIHRoZSBgYXJpYS1vd25zYCBvZiBhbGwgbW9kYWxzIHRvIHRoZSBsaXZlIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIF9leHBvc2VUb01vZGFscygpIHtcbiAgICAvLyBOb3RlIHRoYXQgdGhlIHNlbGVjdG9yIGhlcmUgaXMgbGltaXRlZCB0byBDREsgb3ZlcmxheXMgYXQgdGhlIG1vbWVudCBpbiBvcmRlciB0byByZWR1Y2UgdGhlXG4gICAgLy8gc2VjdGlvbiBvZiB0aGUgRE9NIHdlIG5lZWQgdG8gbG9vayB0aHJvdWdoLiBUaGlzIHNob3VsZCBjb3ZlciBhbGwgdGhlIGNhc2VzIHdlIHN1cHBvcnQsIGJ1dFxuICAgIC8vIHRoZSBzZWxlY3RvciBjYW4gYmUgZXhwYW5kZWQgaWYgaXQgdHVybnMgb3V0IHRvIGJlIHRvbyBuYXJyb3cuXG4gICAgY29uc3QgaWQgPSB0aGlzLl9saXZlRWxlbWVudElkO1xuICAgIGNvbnN0IG1vZGFscyA9IHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnYm9keSA+IC5jZGstb3ZlcmxheS1jb250YWluZXIgW2FyaWEtbW9kYWw9XCJ0cnVlXCJdJ1xuICAgICk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGFscy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbW9kYWwgPSBtb2RhbHNbaV07XG4gICAgICBjb25zdCBhcmlhT3ducyA9IG1vZGFsLmdldEF0dHJpYnV0ZSgnYXJpYS1vd25zJyk7XG4gICAgICB0aGlzLl90cmFja2VkTW9kYWxzLmFkZChtb2RhbCk7XG5cbiAgICAgIGlmICghYXJpYU93bnMpIHtcbiAgICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLW93bnMnLCBpZCk7XG4gICAgICB9IGVsc2UgaWYgKGFyaWFPd25zLmluZGV4T2YoaWQpID09PSAtMSkge1xuICAgICAgICBtb2RhbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGFyaWFPd25zICsgJyAnICsgaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDbGVhcnMgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGxpdmUgZWxlbWVudCBmcm9tIGFueSBtb2RhbHMgaXQgd2FzIGFkZGVkIHRvLiAqL1xuICBwcml2YXRlIF9jbGVhckZyb21Nb2RhbHMoKSB7XG4gICAgdGhpcy5fdHJhY2tlZE1vZGFscy5mb3JFYWNoKG1vZGFsID0+IHtcbiAgICAgIGNvbnN0IGFyaWFPd25zID0gbW9kYWwuZ2V0QXR0cmlidXRlKCdhcmlhLW93bnMnKTtcblxuICAgICAgaWYgKGFyaWFPd25zKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gYXJpYU93bnMucmVwbGFjZSh0aGlzLl9saXZlRWxlbWVudElkLCAnJykudHJpbSgpO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbW9kYWwuc2V0QXR0cmlidXRlKCdhcmlhLW93bnMnLCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kYWwucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW93bnMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX3RyYWNrZWRNb2RhbHMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBBc3NlcnRzIHRoYXQgbm8gY29udGVudCBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIHRoZSBjb250YWluZXIuICovXG4gIHByaXZhdGUgYXNzZXJ0Tm90QXR0YWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0F0dGVtcHRpbmcgdG8gYXR0YWNoIHNuYWNrIGJhciBjb250ZW50IGFmdGVyIGNvbnRlbnQgaXMgYWxyZWFkeSBhdHRhY2hlZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBhIHRpbWVvdXQgdG8gbW92ZSB0aGUgc25hY2sgYmFyIGNvbnRlbnQgdG8gdGhlIGxpdmUgcmVnaW9uIHNvIHNjcmVlbiByZWFkZXJzIHdpbGxcbiAgICogYW5ub3VuY2UgaXQuXG4gICAqL1xuICBwcml2YXRlIHNjcmVlblJlYWRlckFubm91bmNlKCkge1xuICAgIGlmICghdGhpcy5fYW5ub3VuY2VUaW1lb3V0SWQpIHtcbiAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Fubm91bmNlVGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZXJ0RWxlbWVudCA9XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW2FyaWEtaGlkZGVuXScpO1xuICAgICAgICAgIGNvbnN0IGxpdmVFbGVtZW50ID1cbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbYXJpYS1saXZlXScpO1xuXG4gICAgICAgICAgaWYgKGluZXJ0RWxlbWVudCAmJiBsaXZlRWxlbWVudCkge1xuICAgICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCBpbiB0aGUgc25hY2sgYmFyIGNvbnRlbnQgaXMgZm9jdXNlZCBiZWZvcmUgYmVpbmcgbW92ZWRcbiAgICAgICAgICAgIC8vIHRyYWNrIGl0IGFuZCByZXN0b3JlIGZvY3VzIGFmdGVyIG1vdmluZyB0byB0aGUgbGl2ZSByZWdpb24uXG4gICAgICAgICAgICBsZXQgZm9jdXNlZEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciAmJlxuICAgICAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgaW5lcnRFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbmVydEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5lcnRFbGVtZW50KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50Py5mb2N1cygpO1xuXG4gICAgICAgICAgICB0aGlzLl9vbkFubm91bmNlLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuX29uQW5ub3VuY2UuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMuX2Fubm91bmNlRGVsYXkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tIEluaXRpYWx5IGhvbGRzIHRoZSBzbmFjayBiYXIgY29udGVudCwgd2lsbCBiZSBlbXB0eSBhZnRlciBhbm5vdW5jaW5nIHRvIHNjcmVlbiByZWFkZXJzLiAtLT5cbjxkaXYgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gIDxuZy10ZW1wbGF0ZSBjZGtQb3J0YWxPdXRsZXQ+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48IS0tIFdpbGwgcmVjZWl2ZSB0aGUgc25hY2sgYmFyIGNvbnRlbnQgZnJvbSB0aGUgbm9uLWxpdmUgZGl2LCBtb3ZlIHdpbGwgaGFwcGVuIGEgc2hvcnQgZGVsYXkgYWZ0ZXIgb3BlbmluZyAtLT5cbjxkaXZcbiAgW2F0dHIuYXJpYS1saXZlXT1cIl9saXZlXCJcbiAgW2F0dHIucm9sZV09XCJfcm9sZVwiXG4gIFthdHRyLmlkXT1cIl9saXZlRWxlbWVudElkXCJcbj48L2Rpdj5cbiJdfQ==
|
|
@@ -1,75 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2stYmFyLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9zbmFjay1iYXIvc25hY2stYmFyLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUzNDLHlFQUF5RTtBQUN6RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQTRCekIsWUFDRSxpQkFBd0MsRUFDaEMsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFwQmpDLDRFQUE0RTtRQUMzRCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBRXRFLGlGQUFpRjtRQUNoRSxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFcEQsMkVBQTJFO1FBQzFELGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBUWpELG1FQUFtRTtRQUMzRCx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFNakMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELCtCQUErQjtJQUN4QixPQUFPO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELHlDQUF5QztJQUNsQyxpQkFBaUI7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxrREFBa0Q7SUFDM0MsWUFBWSxDQUFDLFFBQWdCO1FBQ2xDLHFGQUFxRjtRQUNyRiwyRkFBMkY7UUFFM0YsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUN6QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELG1DQUFtQztJQUM1QixJQUFJO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsa0ZBQWtGO0lBQzNFLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxzRkFBc0Y7SUFDL0UsV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7SUFDekMsQ0FBQztJQUVELCtFQUErRTtJQUN4RSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCx1Q0FBdUM7SUFDL0IsYUFBYTtRQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNiBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5pbXBvcnQgeyBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUJhb1NuYWNrQmFyQ29udGFpbmVyIH0gZnJvbSAnLi9zbmFjay1iYXItY29udGFpbmVyJztcblxuLyoqIEV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuIGEgc25hY2sgYmFyIGlzIGRpc21pc3NlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJhb1NuYWNrQmFyRGlzbWlzcyB7XG4gIC8qKiBXaGV0aGVyIHRoZSBzbmFjayBiYXIgd2FzIGRpc21pc3NlZCB1c2luZyB0aGUgYWN0aW9uIGJ1dHRvbi4gKi9cbiAgZGlzbWlzc2VkQnlBY3Rpb246IGJvb2xlYW47XG59XG5cbi8qKiBNYXhpbXVtIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdGhhdCBjYW4gYmUgcGFzc2VkIGludG8gc2V0VGltZW91dC4gKi9cbmNvbnN0IE1BWF9USU1FT1VUID0gTWF0aC5wb3coMiwgMzEpIC0gMTtcblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gYSBzbmFjayBiYXIgZGlzcGF0Y2hlZCBmcm9tIHRoZSBzbmFjayBiYXIgc2VydmljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhb1NuYWNrQmFyUmVmPFQ+IHtcbiAgLyoqIFRoZSBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IG1ha2luZyB1cCB0aGUgY29udGVudCBvZiB0aGUgc25hY2sgYmFyLiAqL1xuICBwdWJsaWMgaW5zdGFuY2U6IFQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IG1ha2luZyB1cCB0aGUgY29udGVudCBvZiB0aGUgc25hY2sgYmFyLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBwdWJsaWMgY29udGFpbmVySW5zdGFuY2U6IElCYW9TbmFja0JhckNvbnRhaW5lcjtcblxuICAvKiogU3ViamVjdCBmb3Igbm90aWZ5aW5nIHRoZSB1c2VyIHRoYXQgdGhlIHNuYWNrIGJhciBoYXMgYmVlbiBkaXNtaXNzZWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FmdGVyRGlzbWlzc2VkID0gbmV3IFN1YmplY3Q8SUJhb1NuYWNrQmFyRGlzbWlzcz4oKTtcblxuICAvKiogU3ViamVjdCBmb3Igbm90aWZ5aW5nIHRoZSB1c2VyIHRoYXQgdGhlIHNuYWNrIGJhciBoYXMgb3BlbmVkIGFuZCBhcHBlYXJlZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYWZ0ZXJPcGVuZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKiBTdWJqZWN0IGZvciBub3RpZnlpbmcgdGhlIHVzZXIgdGhhdCB0aGUgc25hY2sgYmFyIGFjdGlvbiB3YXMgY2FsbGVkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkFjdGlvbiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgSUQgZm9yIHRoZSBkdXJhdGlvbiBzZXRUaW1lb3V0IGNhbGwuIFVzZWQgdG8gY2xlYXIgdGhlIHRpbWVvdXQgaWYgdGhlIHNuYWNrYmFyIGlzXG4gICAqIGRpc21pc3NlZCBiZWZvcmUgdGhlIGR1cmF0aW9uIHBhc3Nlcy5cbiAgICovXG4gIHByaXZhdGUgX2R1cmF0aW9uVGltZW91dElkOiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNuYWNrIGJhciB3YXMgZGlzbWlzc2VkIHVzaW5nIHRoZSBhY3Rpb24gYnV0dG9uLiAqL1xuICBwcml2YXRlIF9kaXNtaXNzZWRCeUFjdGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lckluc3RhbmNlOiBJQmFvU25hY2tCYXJDb250YWluZXIsXG4gICAgcHJpdmF0ZSBfb3ZlcmxheVJlZjogT3ZlcmxheVJlZlxuICApIHtcbiAgICB0aGlzLmNvbnRhaW5lckluc3RhbmNlID0gY29udGFpbmVySW5zdGFuY2U7XG4gICAgLy8gRGlzbWlzcyBzbmFja2JhciBvbiBhY3Rpb24uXG4gICAgdGhpcy5vbkFjdGlvbigpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRpc21pc3MoKSk7XG4gICAgY29udGFpbmVySW5zdGFuY2UuX29uRXhpdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5maW5pc2hEaXNtaXNzKCkpO1xuICB9XG5cbiAgLyoqIERpc21pc3NlcyB0aGUgc25hY2sgYmFyLiAqL1xuICBwdWJsaWMgZGlzbWlzcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2FmdGVyRGlzbWlzc2VkLmNsb3NlZCkge1xuICAgICAgdGhpcy5jb250YWluZXJJbnN0YW5jZS5leGl0KCk7XG4gICAgfVxuICAgIGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCk7XG4gIH1cblxuICAvKiogTWFya3MgdGhlIHNuYWNrYmFyIGFjdGlvbiBjbGlja2VkLiAqL1xuICBwdWJsaWMgZGlzbWlzc1dpdGhBY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9vbkFjdGlvbi5jbG9zZWQpIHtcbiAgICAgIHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuX29uQWN0aW9uLm5leHQoKTtcbiAgICAgIHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIERpc21pc3NlcyB0aGUgc25hY2sgYmFyIGFmdGVyIHNvbWUgZHVyYXRpb24gKi9cbiAgcHVibGljIGRpc21pc3NBZnRlcihkdXJhdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gY2FwIHRoZSBkdXJhdGlvbiB0byB0aGUgbWF4aW11bSB2YWx1ZSBmb3Igc2V0VGltZW91dCwgYmVjYXVzZVxuICAgIC8vIGl0J2xsIHJldmVydCB0byAxIGlmIHNvbWVib2R5IHBhc3NlcyBpbiBzb21ldGhpbmcgZ3JlYXRlciAoZS5nLiBgSW5maW5pdHlgKS4gU2VlICMxNzIzNC5cblxuICAgIC8vIEBUT0RPOiB3aW5kb3cuc2V0VGltZW91dCgpID9cbiAgICB0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgKCkgPT4gdGhpcy5kaXNtaXNzKCksXG4gICAgICBNYXRoLm1pbihkdXJhdGlvbiwgTUFYX1RJTUVPVVQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBNYXJrcyB0aGUgc25hY2tiYXIgYXMgb3BlbmVkICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkKSB7XG4gICAgICB0aGlzLl9hZnRlck9wZW5lZC5uZXh0KCk7XG4gICAgICB0aGlzLl9hZnRlck9wZW5lZC5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBpcyBub3RpZmllZCB3aGVuIHRoZSBzbmFjayBiYXIgaXMgZmluaXNoZWQgY2xvc2luZy4gKi9cbiAgcHVibGljIGFmdGVyRGlzbWlzc2VkKCk6IE9ic2VydmFibGU8SUJhb1NuYWNrQmFyRGlzbWlzcz4ge1xuICAgIHJldHVybiB0aGlzLl9hZnRlckRpc21pc3NlZDtcbiAgfVxuXG4gIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBpcyBub3RpZmllZCB3aGVuIHRoZSBzbmFjayBiYXIgaGFzIG9wZW5lZCBhbmQgYXBwZWFyZWQuICovXG4gIHB1YmxpYyBhZnRlck9wZW5lZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXJJbnN0YW5jZS5fb25FbnRlcjtcbiAgfVxuXG4gIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBpcyBub3RpZmllZCB3aGVuIHRoZSBzbmFjayBiYXIgYWN0aW9uIGlzIGNhbGxlZC4gKi9cbiAgcHVibGljIG9uQWN0aW9uKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9vbkFjdGlvbjtcbiAgfVxuXG4gIC8qKiBDbGVhbnMgdXAgdGhlIERPTSBhZnRlciBjbG9zaW5nLiAqL1xuICBwcml2YXRlIGZpbmlzaERpc21pc3MoKTogdm9pZCB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG5cbiAgICBpZiAoIXRoaXMuX29uQWN0aW9uLmNsb3NlZCkge1xuICAgICAgdGhpcy5fb25BY3Rpb24uY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9hZnRlckRpc21pc3NlZC5uZXh0KHsgZGlzbWlzc2VkQnlBY3Rpb246IHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uIH0pO1xuICAgIHRoaXMuX2FmdGVyRGlzbWlzc2VkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb24gPSBmYWxzZTtcbiAgfVxufVxuIl19
|