UNPKG

@hyahfoufi/ng-snotify

Version:

Angular 2+ alternative notifications center

131 lines 15.8 kB
import { Component, ViewEncapsulation } from '@angular/core'; import { SnotifyPosition } from '../../enums/snotify-position.enum'; import * as i0 from "@angular/core"; import * as i1 from "../../services/snotify.service"; import * as i2 from "@angular/common"; import * as i3 from "../toast/toast.component"; import * as i4 from "../../pipes/keys.pipe"; export class SnotifyComponent { service; /** * Toasts array */ notifications; /** * Toasts emitter */ emitter; /** * Helper for slice pipe (maxOnScreen) */ dockSizeA; /** * Helper for slice pipe (maxOnScreen) */ dockSizeB; /** * Helper for slice pipe (maxAtPosition) */ blockSizeA; /** * Helper for slice pipe (maxAtPosition) */ blockSizeB; /** * Backdrop Opacity */ backdrop = -1; /** * How many toasts with backdrop in current queue */ withBackdrop; constructor(service) { this.service = service; } /** * Init base options. Subscribe to options, lifecycle change */ ngOnInit() { this.emitter = this.service.emitter.subscribe((toasts) => { if (this.service.config.global.newOnTop) { this.dockSizeA = -this.service.config.global.maxOnScreen; this.dockSizeB = undefined; this.blockSizeA = -this.service.config.global.maxAtPosition; this.blockSizeB = undefined; this.withBackdrop = toasts.filter(toast => toast.config.backdrop >= 0); } else { this.dockSizeA = 0; this.dockSizeB = this.service.config.global.maxOnScreen; this.blockSizeA = 0; this.blockSizeB = this.service.config.global.maxAtPosition; this.withBackdrop = toasts.filter(toast => toast.config.backdrop >= 0).reverse(); } this.notifications = this.splitToasts(toasts.slice(this.dockSizeA, this.dockSizeB)); this.stateChanged('mounted'); }); } // TODO: fix backdrop if more than one toast called in a row /** * Changes the backdrop opacity * @param event SnotifyEventType */ stateChanged(event) { if (!this.withBackdrop.length) { if (this.backdrop >= 0) { this.backdrop = -1; } return; } switch (event) { case 'mounted': if (this.backdrop < 0) { this.backdrop = 0; } break; case 'beforeShow': this.backdrop = this.withBackdrop[this.withBackdrop.length - 1].config.backdrop; break; case 'beforeHide': if (this.withBackdrop.length === 1) { this.backdrop = 0; } break; case 'hidden': if (this.withBackdrop.length === 1) { this.backdrop = -1; } break; } } /** * Split toasts toasts into different objects * @param toasts SnotifyToast[] * @returns SnotifyNotifications */ splitToasts(toasts) { const result = {}; for (const property in SnotifyPosition) { if (SnotifyPosition.hasOwnProperty(property)) { result[SnotifyPosition[property]] = []; } } toasts.forEach((toast) => { result[toast.config.position].push(toast); }); return result; } /** * Unsubscribe subscriptions */ ngOnDestroy() { this.emitter.unsubscribe(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SnotifyComponent, deps: [{ token: i1.SnotifyService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SnotifyComponent, selector: "ng-snotify", ngImport: i0, template: "<div class=\"snotify-backdrop\" *ngIf=\"backdrop >= 0\" [style.opacity]=\"backdrop\"></div>\n<div *ngFor=\"let position of notifications | keys\" class=\"snotify snotify-{{ position }}\">\n <ng-snotify-toast\n *ngFor=\"let notification of notifications[position] | slice: blockSizeA:blockSizeB\"\n [toast]=\"notification\"\n (stateChanged)=\"stateChanged($event)\"\n >\n </ng-snotify-toast>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ToastComponent, selector: "ng-snotify-toast", inputs: ["toast"], outputs: ["stateChanged"] }, { kind: "pipe", type: i2.SlicePipe, name: "slice" }, { kind: "pipe", type: i4.KeysPipe, name: "keys" }], encapsulation: i0.ViewEncapsulation.None }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SnotifyComponent, decorators: [{ type: Component, args: [{ selector: 'ng-snotify', encapsulation: ViewEncapsulation.None, template: "<div class=\"snotify-backdrop\" *ngIf=\"backdrop >= 0\" [style.opacity]=\"backdrop\"></div>\n<div *ngFor=\"let position of notifications | keys\" class=\"snotify snotify-{{ position }}\">\n <ng-snotify-toast\n *ngFor=\"let notification of notifications[position] | slice: blockSizeA:blockSizeB\"\n [toast]=\"notification\"\n (stateChanged)=\"stateChanged($event)\"\n >\n </ng-snotify-toast>\n</div>\n" }] }], ctorParameters: () => [{ type: i1.SnotifyService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25vdGlmeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zbm90aWZ5L3NyYy9saWIvY29tcG9uZW50cy9zbm90aWZ5L3Nub3RpZnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctc25vdGlmeS9zcmMvbGliL2NvbXBvbmVudHMvc25vdGlmeS9zbm90aWZ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7O0FBUXBFLE1BQU0sT0FBTyxnQkFBZ0I7SUFrQ1A7SUFqQ3BCOztPQUVHO0lBQ0gsYUFBYSxDQUF1QjtJQUNwQzs7T0FFRztJQUNILE9BQU8sQ0FBZTtJQUN0Qjs7T0FFRztJQUNILFNBQVMsQ0FBUztJQUNsQjs7T0FFRztJQUNILFNBQVMsQ0FBcUI7SUFDOUI7O09BRUc7SUFDSCxVQUFVLENBQVM7SUFDbkI7O09BRUc7SUFDSCxVQUFVLENBQXFCO0lBQy9COztPQUVHO0lBQ0gsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2Q7O09BRUc7SUFDSCxZQUFZLENBQWlCO0lBRTdCLFlBQW9CLE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQUcsQ0FBQztJQUUvQzs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQXNCLEVBQUUsRUFBRTtZQUN2RSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuRixDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDREQUE0RDtJQUM1RDs7O09BR0c7SUFDSCxZQUFZLENBQUMsS0FBdUI7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLFNBQVM7Z0JBQ1osSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDcEIsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxZQUFZO2dCQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUNoRixNQUFNO1lBQ1IsS0FBSyxZQUFZO2dCQUNmLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNwQixDQUFDO2dCQUNELE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLE1BQXNCO1FBQ2hDLE1BQU0sTUFBTSxHQUF5QixFQUFFLENBQUM7UUFFeEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN2QyxJQUFJLGVBQWUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLENBQUM7d0dBdkhVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLGtEQ2I3Qiw4WkFTQTs7NEZESWEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLFlBQVksaUJBRVAsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTbm90aWZ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nub3RpZnkuc2VydmljZSc7XG5pbXBvcnQgeyBTbm90aWZ5VG9hc3QgfSBmcm9tICcuLi8uLi9tb2RlbHMvc25vdGlmeS10b2FzdC5tb2RlbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNub3RpZnlOb3RpZmljYXRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zbm90aWZ5LW5vdGlmaWNhdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNub3RpZnlQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Nub3RpZnktcG9zaXRpb24uZW51bSc7XG5pbXBvcnQgeyBTbm90aWZ5RXZlbnRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMvc25vdGlmeS1ldmVudC50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmctc25vdGlmeScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbm90aWZ5LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTbm90aWZ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVG9hc3RzIGFycmF5XG4gICAqL1xuICBub3RpZmljYXRpb25zOiBTbm90aWZ5Tm90aWZpY2F0aW9ucztcbiAgLyoqXG4gICAqIFRvYXN0cyBlbWl0dGVyXG4gICAqL1xuICBlbWl0dGVyOiBTdWJzY3JpcHRpb247XG4gIC8qKlxuICAgKiBIZWxwZXIgZm9yIHNsaWNlIHBpcGUgKG1heE9uU2NyZWVuKVxuICAgKi9cbiAgZG9ja1NpemVBOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIZWxwZXIgZm9yIHNsaWNlIHBpcGUgKG1heE9uU2NyZWVuKVxuICAgKi9cbiAgZG9ja1NpemVCOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBIZWxwZXIgZm9yIHNsaWNlIHBpcGUgKG1heEF0UG9zaXRpb24pXG4gICAqL1xuICBibG9ja1NpemVBOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIZWxwZXIgZm9yIHNsaWNlIHBpcGUgKG1heEF0UG9zaXRpb24pXG4gICAqL1xuICBibG9ja1NpemVCOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBCYWNrZHJvcCBPcGFjaXR5XG4gICAqL1xuICBiYWNrZHJvcCA9IC0xO1xuICAvKipcbiAgICogSG93IG1hbnkgdG9hc3RzIHdpdGggYmFja2Ryb3AgaW4gY3VycmVudCBxdWV1ZVxuICAgKi9cbiAgd2l0aEJhY2tkcm9wOiBTbm90aWZ5VG9hc3RbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IFNub3RpZnlTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBJbml0IGJhc2Ugb3B0aW9ucy4gU3Vic2NyaWJlIHRvIG9wdGlvbnMsIGxpZmVjeWNsZSBjaGFuZ2VcbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZW1pdHRlciA9IHRoaXMuc2VydmljZS5lbWl0dGVyLnN1YnNjcmliZSgodG9hc3RzOiBTbm90aWZ5VG9hc3RbXSkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VydmljZS5jb25maWcuZ2xvYmFsLm5ld09uVG9wKSB7XG4gICAgICAgIHRoaXMuZG9ja1NpemVBID0gLXRoaXMuc2VydmljZS5jb25maWcuZ2xvYmFsLm1heE9uU2NyZWVuO1xuICAgICAgICB0aGlzLmRvY2tTaXplQiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5ibG9ja1NpemVBID0gLXRoaXMuc2VydmljZS5jb25maWcuZ2xvYmFsLm1heEF0UG9zaXRpb247XG4gICAgICAgIHRoaXMuYmxvY2tTaXplQiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy53aXRoQmFja2Ryb3AgPSB0b2FzdHMuZmlsdGVyKHRvYXN0ID0+IHRvYXN0LmNvbmZpZy5iYWNrZHJvcCA+PSAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZG9ja1NpemVBID0gMDtcbiAgICAgICAgdGhpcy5kb2NrU2l6ZUIgPSB0aGlzLnNlcnZpY2UuY29uZmlnLmdsb2JhbC5tYXhPblNjcmVlbjtcbiAgICAgICAgdGhpcy5ibG9ja1NpemVBID0gMDtcbiAgICAgICAgdGhpcy5ibG9ja1NpemVCID0gdGhpcy5zZXJ2aWNlLmNvbmZpZy5nbG9iYWwubWF4QXRQb3NpdGlvbjtcbiAgICAgICAgdGhpcy53aXRoQmFja2Ryb3AgPSB0b2FzdHMuZmlsdGVyKHRvYXN0ID0+IHRvYXN0LmNvbmZpZy5iYWNrZHJvcCA+PSAwKS5yZXZlcnNlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSB0aGlzLnNwbGl0VG9hc3RzKHRvYXN0cy5zbGljZSh0aGlzLmRvY2tTaXplQSwgdGhpcy5kb2NrU2l6ZUIpKTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkKCdtb3VudGVkJyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUT0RPOiBmaXggYmFja2Ryb3AgaWYgbW9yZSB0aGFuIG9uZSB0b2FzdCBjYWxsZWQgaW4gYSByb3dcbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGJhY2tkcm9wIG9wYWNpdHlcbiAgICogQHBhcmFtIGV2ZW50IFNub3RpZnlFdmVudFR5cGVcbiAgICovXG4gIHN0YXRlQ2hhbmdlZChldmVudDogU25vdGlmeUV2ZW50VHlwZSkge1xuICAgIGlmICghdGhpcy53aXRoQmFja2Ryb3AubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5iYWNrZHJvcCA+PSAwKSB7XG4gICAgICAgIHRoaXMuYmFja2Ryb3AgPSAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSAnbW91bnRlZCc6XG4gICAgICAgIGlmICh0aGlzLmJhY2tkcm9wIDwgMCkge1xuICAgICAgICAgIHRoaXMuYmFja2Ryb3AgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmVmb3JlU2hvdyc6XG4gICAgICAgIHRoaXMuYmFja2Ryb3AgPSB0aGlzLndpdGhCYWNrZHJvcFt0aGlzLndpdGhCYWNrZHJvcC5sZW5ndGggLSAxXS5jb25maWcuYmFja2Ryb3A7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmVmb3JlSGlkZSc6XG4gICAgICAgIGlmICh0aGlzLndpdGhCYWNrZHJvcC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmJhY2tkcm9wID0gMDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgICAgIGlmICh0aGlzLndpdGhCYWNrZHJvcC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmJhY2tkcm9wID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRvYXN0cyB0b2FzdHMgaW50byBkaWZmZXJlbnQgb2JqZWN0c1xuICAgKiBAcGFyYW0gdG9hc3RzIFNub3RpZnlUb2FzdFtdXG4gICAqIEByZXR1cm5zIFNub3RpZnlOb3RpZmljYXRpb25zXG4gICAqL1xuICBzcGxpdFRvYXN0cyh0b2FzdHM6IFNub3RpZnlUb2FzdFtdKTogU25vdGlmeU5vdGlmaWNhdGlvbnMge1xuICAgIGNvbnN0IHJlc3VsdDogU25vdGlmeU5vdGlmaWNhdGlvbnMgPSB7fTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gU25vdGlmeVBvc2l0aW9uKSB7XG4gICAgICBpZiAoU25vdGlmeVBvc2l0aW9uLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICByZXN1bHRbU25vdGlmeVBvc2l0aW9uW3Byb3BlcnR5XV0gPSBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0b2FzdHMuZm9yRWFjaCgodG9hc3Q6IFNub3RpZnlUb2FzdCkgPT4ge1xuICAgICAgcmVzdWx0W3RvYXN0LmNvbmZpZy5wb3NpdGlvbiBhcyBzdHJpbmddLnB1c2godG9hc3QpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBzdWJzY3JpcHRpb25zXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtaXR0ZXIudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNub3RpZnktYmFja2Ryb3BcIiAqbmdJZj1cImJhY2tkcm9wID49IDBcIiBbc3R5bGUub3BhY2l0eV09XCJiYWNrZHJvcFwiPjwvZGl2PlxuPGRpdiAqbmdGb3I9XCJsZXQgcG9zaXRpb24gb2Ygbm90aWZpY2F0aW9ucyB8IGtleXNcIiBjbGFzcz1cInNub3RpZnkgc25vdGlmeS17eyBwb3NpdGlvbiB9fVwiPlxuICA8bmctc25vdGlmeS10b2FzdFxuICAgICpuZ0Zvcj1cImxldCBub3RpZmljYXRpb24gb2Ygbm90aWZpY2F0aW9uc1twb3NpdGlvbl0gfCBzbGljZTogYmxvY2tTaXplQTpibG9ja1NpemVCXCJcbiAgICBbdG9hc3RdPVwibm90aWZpY2F0aW9uXCJcbiAgICAoc3RhdGVDaGFuZ2VkKT1cInN0YXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgPlxuICA8L25nLXNub3RpZnktdG9hc3Q+XG48L2Rpdj5cbiJdfQ==