@angular-mdl/core
Version:
Angular components, directives and styles based on material design lite https://getmdl.io.
157 lines • 17.8 kB
JavaScript
import { Component, ComponentFactoryResolver, Injectable, ViewEncapsulation, } from "@angular/core";
import { MdlDialogOutletService } from "../dialog-outlet/mdl-dialog-outlet.service";
import { Subject } from "rxjs";
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../dialog-outlet/mdl-dialog-outlet.service";
const ANIMATION_TIME = 250;
export class MdlSnackbarComponent {
constructor() {
this.showIt = false;
}
onClick() {
this.onAction?.();
}
isActive() {
return this.showIt;
}
show() {
const result = new Subject();
// wait unit the dom is in place - then showIt will change the css class
setTimeout(() => {
this.showIt = true;
// fire after the view animation is done
setTimeout(() => {
result.next();
result.complete();
}, ANIMATION_TIME);
}, ANIMATION_TIME);
return result.asObservable();
}
hide() {
this.showIt = false;
const result = new Subject();
// fire after the view animation is done
setTimeout(() => {
result.next();
result.complete();
}, ANIMATION_TIME);
return result.asObservable();
}
}
MdlSnackbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlSnackbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
MdlSnackbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MdlSnackbarComponent, selector: "mdl-snackbar-component", ngImport: i0, template: `
<div
id="demo-toast-example"
class=" mdl-snackbar"
[ngClass]="{ 'mdl-snackbar--active': showIt }"
>
<div class="mdl-snackbar__text">{{ message }}</div>
<button
*ngIf="onAction"
class="mdl-snackbar__action"
type="button"
(click)="onClick()"
>
{{ actionText }}
</button>
</div>
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlSnackbarComponent, decorators: [{
type: Component,
args: [{
selector: "mdl-snackbar-component",
template: `
<div
id="demo-toast-example"
class=" mdl-snackbar"
[ngClass]="{ 'mdl-snackbar--active': showIt }"
>
<div class="mdl-snackbar__text">{{ message }}</div>
<button
*ngIf="onAction"
class="mdl-snackbar__action"
type="button"
(click)="onClick()"
>
{{ actionText }}
</button>
</div>
`,
encapsulation: ViewEncapsulation.None,
}]
}] });
export class MdlSnackbarService {
constructor(componentFactoryResolver, dialogOutletService) {
this.componentFactoryResolver = componentFactoryResolver;
this.dialogOutletService = dialogOutletService;
this.cFactory =
this.componentFactoryResolver.resolveComponentFactory(MdlSnackbarComponent);
}
showToast(message, timeout) {
return this.showSnackbar({
message,
timeout,
});
}
showSnackbar(snackbarMessage) {
const optTimeout = snackbarMessage.timeout || 2750;
const closeAfterTimeout = !!snackbarMessage.closeAfterTimeout;
const viewContainerRef = this.dialogOutletService.viewContainerRef;
if (!viewContainerRef) {
throw new Error("You did not provide a ViewContainerRef. " +
"Please see https://github.com/mseemann/angular2-mdl/wiki/How-to-use-the-MdlDialogService");
}
const cRef = viewContainerRef.createComponent(this.cFactory, viewContainerRef.length);
const mdlSnackbarComponent = cRef.instance;
mdlSnackbarComponent.message = snackbarMessage.message;
if (this.previousSnack) {
const previousSnack = this.previousSnack;
const subscription = previousSnack.component.hide().subscribe(() => {
previousSnack.cRef.destroy();
subscription.unsubscribe();
});
}
this.previousSnack = {
component: mdlSnackbarComponent,
cRef,
};
if (snackbarMessage.action) {
if (closeAfterTimeout) {
this.hideAndDestroySnack(mdlSnackbarComponent, cRef, optTimeout);
}
mdlSnackbarComponent.actionText = snackbarMessage.action.text;
mdlSnackbarComponent.onAction = () => {
mdlSnackbarComponent.hide().subscribe(() => {
cRef.destroy();
snackbarMessage.action?.handler();
});
};
}
else {
this.hideAndDestroySnack(mdlSnackbarComponent, cRef, optTimeout);
}
const result = new Subject();
mdlSnackbarComponent.show().subscribe(() => {
result.next(mdlSnackbarComponent);
result.complete();
});
return result.asObservable();
}
hideAndDestroySnack(component, componentRef, timeOut) {
setTimeout(() => {
component.hide().subscribe(() => {
componentRef.destroy();
});
}, timeOut);
}
}
MdlSnackbarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlSnackbarService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i2.MdlDialogOutletService }], target: i0.ɵɵFactoryTarget.Injectable });
MdlSnackbarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlSnackbarService, providedIn: "root" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlSnackbarService, decorators: [{
type: Injectable,
args: [{
providedIn: "root",
}]
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i2.MdlDialogOutletService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRsLXNuYWNrYmFyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvc25hY2tiYXIvbWRsLXNuYWNrYmFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCx3QkFBd0IsRUFFeEIsVUFBVSxFQUNWLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBRTNDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQXVCM0IsTUFBTSxPQUFPLG9CQUFvQjtJQXJCakM7UUF3QkUsV0FBTSxHQUFHLEtBQUssQ0FBQztLQXVDaEI7SUFwQ0MsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJO1FBQ0YsTUFBTSxNQUFNLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUMsd0VBQXdFO1FBQ3hFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQix3Q0FBd0M7WUFDeEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNyQixDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFbkIsT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMs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LElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDZixlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsTUFBTSxNQUFNLEdBQ1YsSUFBSSxPQUFPLEVBQXdCLENBQUM7UUFFdEMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLG1CQUFtQixDQUN6QixTQUErQixFQUMvQixZQUFnRCxFQUNoRCxPQUFlO1FBRWYsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUM5QixZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDZCxDQUFDOzsrR0FwR1Usa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTsyRkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0YWJsZSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBNZGxEaWFsb2dPdXRsZXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2RpYWxvZy1vdXRsZXQvbWRsLWRpYWxvZy1vdXRsZXQuc2VydmljZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5cbmNvbnN0IEFOSU1BVElPTl9USU1FID0gMjUwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWRsLXNuYWNrYmFyLWNvbXBvbmVudFwiLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGlkPVwiZGVtby10b2FzdC1leGFtcGxlXCJcbiAgICAgIGNsYXNzPVwiIG1kbC1zbmFja2JhclwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdtZGwtc25hY2tiYXItLWFjdGl2ZSc6IHNob3dJdCB9XCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibWRsLXNuYWNrYmFyX190ZXh0XCI+e3sgbWVzc2FnZSB9fTwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9uQWN0aW9uXCJcbiAgICAgICAgY2xhc3M9XCJtZGwtc25hY2tiYXJfX2FjdGlvblwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib25DbGljaygpXCJcbiAgICAgID5cbiAgICAgICAge3sgYWN0aW9uVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIE1kbFNuYWNrYmFyQ29tcG9uZW50IHtcbiAgbWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBhY3Rpb25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNob3dJdCA9IGZhbHNlO1xuICBvbkFjdGlvbjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkFjdGlvbj8uKCk7XG4gIH1cblxuICBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93SXQ7XG4gIH1cblxuICBzaG93KCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy8gd2FpdCB1bml0IHRoZSBkb20gaXMgaW4gcGxhY2UgLSB0aGVuIHNob3dJdCB3aWxsIGNoYW5nZSB0aGUgY3NzIGNsYXNzXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3dJdCA9IHRydWU7XG4gICAgICAvLyBmaXJlIGFmdGVyIHRoZSB2aWV3IGFuaW1hdGlvbiBpcyBkb25lXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVzdWx0Lm5leHQoKTtcbiAgICAgICAgcmVzdWx0LmNvbXBsZXRlKCk7XG4gICAgICB9LCBBTklNQVRJT05fVElNRSk7XG4gICAgfSwgQU5JTUFUSU9OX1RJTUUpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGhpZGUoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgdGhpcy5zaG93SXQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlc3VsdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvLyBmaXJlIGFmdGVyIHRoZSB2aWV3IGFuaW1hdGlvbiBpcyBkb25lXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZXN1bHQubmV4dCgpO1xuICAgICAgcmVzdWx0LmNvbXBsZXRlKCk7XG4gICAgfSwgQU5JTUFUSU9OX1RJTUUpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5hc09ic2VydmFibGUoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNZGxTbmFja2Jhck1lc3NhZ2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGNsb3NlQWZ0ZXJUaW1lb3V0PzogYm9vbGVhbjtcbiAgYWN0aW9uPzoge1xuICAgIGhhbmRsZXI6ICgpID0+IHZvaWQ7XG4gICAgdGV4dDogc3RyaW5nO1xuICB9O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBNZGxTbmFja2JhclNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PE1kbFNuYWNrYmFyQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBwcmV2aW91c1NuYWNrOlxuICAgIHwge1xuICAgICAgICBjb21wb25lbnQ6IE1kbFNuYWNrYmFyQ29tcG9uZW50O1xuICAgICAgICBjUmVmOiBDb21wb25lbnRSZWY8TWRsU25hY2tiYXJDb21wb25lbnQ+O1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBkaWFsb2dPdXRsZXRTZXJ2aWNlOiBNZGxEaWFsb2dPdXRsZXRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuY0ZhY3RvcnkgPVxuICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICAgIE1kbFNuYWNrYmFyQ29tcG9uZW50XG4gICAgICApO1xuICB9XG5cbiAgc2hvd1RvYXN0KFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICB0aW1lb3V0PzogbnVtYmVyXG4gICk6IE9ic2VydmFibGU8TWRsU25hY2tiYXJDb21wb25lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5zaG93U25hY2tiYXIoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgfSk7XG4gIH1cblxuICBzaG93U25hY2tiYXIoXG4gICAgc25hY2tiYXJNZXNzYWdlOiBJTWRsU25hY2tiYXJNZXNzYWdlXG4gICk6IE9ic2VydmFibGU8TWRsU25hY2tiYXJDb21wb25lbnQ+IHtcbiAgICBjb25zdCBvcHRUaW1lb3V0ID0gc25hY2tiYXJNZXNzYWdlLnRpbWVvdXQgfHwgMjc1MDtcbiAgICBjb25zdCBjbG9zZUFmdGVyVGltZW91dCA9ICEhc25hY2tiYXJNZXNzYWdlLmNsb3NlQWZ0ZXJUaW1lb3V0O1xuICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmRpYWxvZ091dGxldFNlcnZpY2Uudmlld0NvbnRhaW5lclJlZjtcblxuICAgIGlmICghdmlld0NvbnRhaW5lclJlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIllvdSBkaWQgbm90IHByb3ZpZGUgYSBWaWV3Q29udGFpbmVyUmVmLiBcIiArXG4gICAgICAgICAgXCJQbGVhc2Ugc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2VlbWFubi9hbmd1bGFyMi1tZGwvd2lraS9Ib3ctdG8tdXNlLXRoZS1NZGxEaWFsb2dTZXJ2aWNlXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY1JlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgdGhpcy5jRmFjdG9yeSxcbiAgICAgIHZpZXdDb250YWluZXJSZWYubGVuZ3RoXG4gICAgKTtcblxuICAgIGNvbnN0IG1kbFNuYWNrYmFyQ29tcG9uZW50ID0gY1JlZi5pbnN0YW5jZSBhcyBNZGxTbmFja2JhckNvbXBvbmVudDtcbiAgICBtZGxTbmFja2JhckNvbXBvbmVudC5tZXNzYWdlID0gc25hY2tiYXJNZXNzYWdlLm1lc3NhZ2U7XG5cbiAgICBpZiAodGhpcy5wcmV2aW91c1NuYWNrKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1NuYWNrID0gdGhpcy5wcmV2aW91c1NuYWNrO1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gcHJldmlvdXNTbmFjay5jb21wb25lbnQuaGlkZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHByZXZpb3VzU25hY2suY1JlZi5kZXN0cm95KCk7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2aW91c1NuYWNrID0ge1xuICAgICAgY29tcG9uZW50OiBtZGxTbmFja2JhckNvbXBvbmVudCxcbiAgICAgIGNSZWYsXG4gICAgfTtcblxuICAgIGlmIChzbmFja2Jhck1lc3NhZ2UuYWN0aW9uKSB7XG4gICAgICBpZiAoY2xvc2VBZnRlclRpbWVvdXQpIHtcbiAgICAgICAgdGhpcy5oaWRlQW5kRGVzdHJveVNuYWNrKG1kbFNuYWNrYmFyQ29tcG9uZW50LCBjUmVmLCBvcHRUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIG1kbFNuYWNrYmFyQ29tcG9uZW50LmFjdGlvblRleHQgPSBzbmFja2Jhck1lc3NhZ2UuYWN0aW9uLnRleHQ7XG4gICAgICBtZGxTbmFja2JhckNvbXBvbmVudC5vbkFjdGlvbiA9ICgpID0+IHtcbiAgICAgICAgbWRsU25hY2tiYXJDb21wb25lbnQuaGlkZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY1JlZi5kZXN0cm95KCk7XG4gICAgICAgICAgc25hY2tiYXJNZXNzYWdlLmFjdGlvbj8uaGFuZGxlcigpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZUFuZERlc3Ryb3lTbmFjayhtZGxTbmFja2JhckNvbXBvbmVudCwgY1JlZiwgb3B0VGltZW91dCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBTdWJqZWN0PE1kbFNuYWNrYmFyQ29tcG9uZW50PiA9XG4gICAgICBuZXcgU3ViamVjdDxNZGxTbmFja2JhckNvbXBvbmVudD4oKTtcblxuICAgIG1kbFNuYWNrYmFyQ29tcG9uZW50LnNob3coKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgcmVzdWx0Lm5leHQobWRsU25hY2tiYXJDb21wb25lbnQpO1xuICAgICAgcmVzdWx0LmNvbXBsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlQW5kRGVzdHJveVNuYWNrKFxuICAgIGNvbXBvbmVudDogTWRsU25hY2tiYXJDb21wb25lbnQsXG4gICAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8TWRsU25hY2tiYXJDb21wb25lbnQ+LFxuICAgIHRpbWVPdXQ6IG51bWJlclxuICApIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbXBvbmVudC5oaWRlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgIH0sIHRpbWVPdXQpO1xuICB9XG59XG4iXX0=