UNPKG

@angular-mdl/core

Version:

Angular components, directives and styles based on material design lite https://getmdl.io.

157 lines 17.8 kB
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=