@coreui/angular
Version:
CoreUI for Angular UI components library
140 lines • 21.4 kB
JavaScript
import { Component, ContentChildren, HostBinding, Input, VERSION, ViewChild, ViewContainerRef } from '@angular/core';
import { ToasterHostDirective } from './toaster-host.directive';
import { ToastComponent } from '../toast/toast.component';
import * as i0 from "@angular/core";
import * as i1 from "./toaster.service";
import * as i2 from "./toaster-host.directive";
export var ToasterPlacement;
(function (ToasterPlacement) {
ToasterPlacement["Static"] = "static";
ToasterPlacement["TopStart"] = "top-start";
ToasterPlacement["TopCenter"] = "top-center";
ToasterPlacement["TopEnd"] = "top-end";
ToasterPlacement["MiddleStart"] = "middle-start";
ToasterPlacement["MiddleCenter"] = "middle-center";
ToasterPlacement["MiddleEnd"] = "middle-end";
ToasterPlacement["BottomStart"] = "bottom-start";
ToasterPlacement["BottomCenter"] = "bottom-center";
ToasterPlacement["BottomEnd"] = "bottom-end";
})(ToasterPlacement || (ToasterPlacement = {}));
export class ToasterComponent {
constructor(componentFactoryResolver, hostElement, renderer, toasterService) {
this.componentFactoryResolver = componentFactoryResolver;
this.hostElement = hostElement;
this.renderer = renderer;
this.toasterService = toasterService;
this.placements = Object.values(ToasterPlacement);
this.toastsDynamic = [];
/**
* Toaster placement
* @type TToasterPlacement
*/
this.placement = ToasterPlacement.TopEnd;
/**
* Toaster position
* @type (string | 'absolute' | 'fixed' | 'static')
*/
this.position = 'absolute';
}
get hostClasses() {
return {
toaster: true,
'toast-container': true,
[`position-${this.position}`]: !!this.position,
'top-0': this.placement.includes('top'),
'top-50': this.placement.includes('middle'),
'bottom-0': this.placement.includes('bottom'),
'start-0': this.placement.includes('start'),
'start-50': this.placement.includes('center'),
'end-0': this.placement.includes('end'),
'translate-middle-x': this.placement.includes('center') && !this.placement.includes('middle'),
'translate-middle-y': this.placement.includes('middle') && !this.placement.includes('center'),
'translate-middle': this.placement.includes('middle') && this.placement.includes('center'),
};
}
ngOnInit() {
this.stateToasterSubscribe(true);
}
ngOnDestroy() {
this.stateToasterSubscribe(false);
}
ngAfterContentChecked() {
this.toasts = this.contentToasts;
}
addToast(toast, props, options) {
let componentRef;
if (parseInt(VERSION.major) < 13) {
const factory = this.componentFactoryResolver.resolveComponentFactory(toast);
componentRef = this.toasterHost.viewContainerRef.createComponent(factory, options?.index, options?.injector, options?.projectableNodes, options?.ngModuleRef);
}
else {
// @ts-ignore
componentRef = this.toasterHost.viewContainerRef.createComponent(toast, options);
}
this.toastsDynamic.push(componentRef);
const index = this.toastsDynamic.indexOf(componentRef);
for (const [key, value] of Object.entries(props)) {
componentRef.instance[key] = value;
}
componentRef.instance['placement'] = this.placement;
componentRef.instance['dynamic'] = true;
componentRef.instance['index'] = index;
componentRef.instance['visible'] = true;
componentRef.instance['visibleChange'].emit(true);
componentRef.changeDetectorRef?.detectChanges();
return componentRef;
}
removeToast(state) {
this.toastsDynamic?.forEach(item => {
if (state.toast?.dynamic && (item.instance === state.toast)) {
item.instance.visible = false;
item.instance['visibleChange'].emit(false);
setTimeout(() => {
item.destroy();
}, 300);
}
});
this.toasts?.forEach(item => {
if (item.element.nativeElement === state.toast?.hostElement.nativeElement) {
if (!state.toast?.dynamic) {
// @ts-ignore
state.toast.visible = false;
}
}
});
}
stateToasterSubscribe(subscribe = true) {
if (subscribe) {
this.stateToasterSubscription = this.toasterService.toasterState$.subscribe((state) => {
if (state.show === false) {
this.removeToast(state);
}
if (state.show === true && state.toast?.dynamic === undefined) {
}
});
}
else {
this.stateToasterSubscription.unsubscribe();
}
}
}
ToasterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ToasterComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ToasterService }], target: i0.ɵɵFactoryTarget.Component });
ToasterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: ToasterComponent, selector: "c-toaster", inputs: { placement: "placement", position: "position" }, host: { properties: { "class": "this.hostClasses" } }, queries: [{ propertyName: "contentToasts", predicate: ToastComponent, read: ViewContainerRef }], viewQueries: [{ propertyName: "toasterHost", first: true, predicate: ToasterHostDirective, descendants: true, static: true }], exportAs: ["cToaster"], ngImport: i0, template: "<ng-template cToasterHost></ng-template>\n<ng-content cToasterHost></ng-content>\n", dependencies: [{ kind: "directive", type: i2.ToasterHostDirective, selector: "[cToasterHost]", exportAs: ["cToasterHost"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ToasterComponent, decorators: [{
type: Component,
args: [{ selector: 'c-toaster', exportAs: 'cToaster', template: "<ng-template cToasterHost></ng-template>\n<ng-content cToasterHost></ng-content>\n" }]
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ToasterService }]; }, propDecorators: { placement: [{
type: Input
}], position: [{
type: Input
}], toasterHost: [{
type: ViewChild,
args: [ToasterHostDirective, { static: true }]
}], contentToasts: [{
type: ContentChildren,
args: [ToastComponent, { read: ViewContainerRef }]
}], hostClasses: [{
type: HostBinding,
args: ['class']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3RvYXN0L3RvYXN0ZXIvdG9hc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3RvYXN0L3RvYXN0ZXIvdG9hc3Rlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUdULGVBQWUsRUFFZixXQUFXLEVBRVgsS0FBSyxFQU1MLE9BQU8sRUFDUCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUUxRCxNQUFNLENBQU4sSUFBWSxnQkFXWDtBQVhELFdBQVksZ0JBQWdCO0lBQzFCLHFDQUFpQixDQUFBO0lBQ2pCLDBDQUFzQixDQUFBO0lBQ3RCLDRDQUF3QixDQUFBO0lBQ3hCLHNDQUFrQixDQUFBO0lBQ2xCLGdEQUE0QixDQUFBO0lBQzVCLGtEQUE4QixDQUFBO0lBQzlCLDRDQUF3QixDQUFBO0lBQ3hCLGdEQUE0QixDQUFBO0lBQzVCLGtEQUE4QixDQUFBO0lBQzlCLDRDQUF3QixDQUFBO0FBQzFCLENBQUMsRUFYVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBVzNCO0FBb0JELE1BQU0sT0FBTyxnQkFBZ0I7SUFzQjNCLFlBQ1Usd0JBQWtELEVBQ2xELFdBQXVCLEVBQ3ZCLFFBQW1CLEVBQ25CLGNBQThCO1FBSDlCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixt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QUF2RSxlQUFlO3VCQUFDLGNBQWMsRUFBRSxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBQztnQkFVckQsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBDb21wb25lbnRSZWYsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgTmdNb2R1bGVSZWYsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZFUlNJT04sXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBJVG9hc3RlckFjdGlvbiwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICcuL3RvYXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0ZXJIb3N0RGlyZWN0aXZlIH0gZnJvbSAnLi90b2FzdGVyLWhvc3QuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVG9hc3RDb21wb25lbnQgfSBmcm9tICcuLi90b2FzdC90b2FzdC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGVudW0gVG9hc3RlclBsYWNlbWVudCB7XHJcbiAgU3RhdGljID0gJ3N0YXRpYycsXHJcbiAgVG9wU3RhcnQgPSAndG9wLXN0YXJ0JyxcclxuICBUb3BDZW50ZXIgPSAndG9wLWNlbnRlcicsXHJcbiAgVG9wRW5kID0gJ3RvcC1lbmQnLFxyXG4gIE1pZGRsZVN0YXJ0ID0gJ21pZGRsZS1zdGFydCcsXHJcbiAgTWlkZGxlQ2VudGVyID0gJ21pZGRsZS1jZW50ZXInLFxyXG4gIE1pZGRsZUVuZCA9ICdtaWRkbGUtZW5kJyxcclxuICBCb3R0b21TdGFydCA9ICdib3R0b20tc3RhcnQnLFxyXG4gIEJvdHRvbUNlbnRlciA9ICdib3R0b20tY2VudGVyJyxcclxuICBCb3R0b21FbmQgPSAnYm90dG9tLWVuZCcsXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRUb2FzdGVyUGxhY2VtZW50ID1cclxuICB8IFRvYXN0ZXJQbGFjZW1lbnQuU3RhdGljXHJcbiAgfCBUb2FzdGVyUGxhY2VtZW50LlRvcFN0YXJ0XHJcbiAgfCBUb2FzdGVyUGxhY2VtZW50LlRvcENlbnRlclxyXG4gIHwgVG9hc3RlclBsYWNlbWVudC5Ub3BFbmRcclxuICB8IFRvYXN0ZXJQbGFjZW1lbnQuTWlkZGxlU3RhcnRcclxuICB8IFRvYXN0ZXJQbGFjZW1lbnQuTWlkZGxlQ2VudGVyXHJcbiAgfCBUb2FzdGVyUGxhY2VtZW50Lk1pZGRsZUVuZFxyXG4gIHwgVG9hc3RlclBsYWNlbWVudC5Cb3R0b21TdGFydFxyXG4gIHwgVG9hc3RlclBsYWNlbWVudC5Cb3R0b21DZW50ZXJcclxuICB8IFRvYXN0ZXJQbGFjZW1lbnQuQm90dG9tRW5kXHJcbiAgfCBzdHJpbmc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2MtdG9hc3RlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RvYXN0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGV4cG9ydEFzOiAnY1RvYXN0ZXInXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2FzdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG5cclxuICBzdGF0ZVRvYXN0ZXJTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcbiAgcGxhY2VtZW50cyA9IE9iamVjdC52YWx1ZXMoVG9hc3RlclBsYWNlbWVudCk7XHJcbiAgdG9hc3RzITogUXVlcnlMaXN0PFZpZXdDb250YWluZXJSZWY+O1xyXG4gIHRvYXN0c0R5bmFtaWM6IGFueVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvYXN0ZXIgcGxhY2VtZW50XHJcbiAgICogQHR5cGUgVFRvYXN0ZXJQbGFjZW1lbnRcclxuICAgKi9cclxuICBASW5wdXQoKSBwbGFjZW1lbnQ6IFRUb2FzdGVyUGxhY2VtZW50ID0gVG9hc3RlclBsYWNlbWVudC5Ub3BFbmQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvYXN0ZXIgcG9zaXRpb25cclxuICAgKiBAdHlwZSAoc3RyaW5nIHwgJ2Fic29sdXRlJyB8ICdmaXhlZCcgfCAnc3RhdGljJylcclxuICAgKi9cclxuICBASW5wdXQoKSBwb3NpdGlvbjogKHN0cmluZyB8ICdhYnNvbHV0ZScgfCAnZml4ZWQnIHwgJ3N0YXRpYycpID0gJ2Fic29sdXRlJztcclxuXHJcbiAgQFZpZXdDaGlsZChUb2FzdGVySG9zdERpcmVjdGl2ZSwge3N0YXRpYzogdHJ1ZX0pIHRvYXN0ZXJIb3N0ITogVG9hc3Rlckhvc3REaXJlY3RpdmU7XHJcbiAgQENvbnRlbnRDaGlsZHJlbihUb2FzdENvbXBvbmVudCwge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KSBjb250ZW50VG9hc3RzITogUXVlcnlMaXN0PFZpZXdDb250YWluZXJSZWY+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSB0b2FzdGVyU2VydmljZTogVG9hc3RlclNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcclxuICBnZXQgaG9zdENsYXNzZXMoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRvYXN0ZXI6IHRydWUsXHJcbiAgICAgICd0b2FzdC1jb250YWluZXInOiB0cnVlLFxyXG4gICAgICBbYHBvc2l0aW9uLSR7dGhpcy5wb3NpdGlvbn1gXTogISF0aGlzLnBvc2l0aW9uLFxyXG4gICAgICAndG9wLTAnOiB0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygndG9wJyksXHJcbiAgICAgICd0b3AtNTAnOiB0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnbWlkZGxlJyksXHJcbiAgICAgICdib3R0b20tMCc6IHRoaXMucGxhY2VtZW50LmluY2x1ZGVzKCdib3R0b20nKSxcclxuICAgICAgJ3N0YXJ0LTAnOiB0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnc3RhcnQnKSxcclxuICAgICAgJ3N0YXJ0LTUwJzogdGhpcy5wbGFjZW1lbnQuaW5jbHVkZXMoJ2NlbnRlcicpLFxyXG4gICAgICAnZW5kLTAnOiB0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnZW5kJyksXHJcbiAgICAgICd0cmFuc2xhdGUtbWlkZGxlLXgnOiB0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnY2VudGVyJykgJiYgIXRoaXMucGxhY2VtZW50LmluY2x1ZGVzKCdtaWRkbGUnKSxcclxuICAgICAgJ3RyYW5zbGF0ZS1taWRkbGUteSc6IHRoaXMucGxhY2VtZW50LmluY2x1ZGVzKCdtaWRkbGUnKSAmJiAhdGhpcy5wbGFjZW1lbnQuaW5jbHVkZXMoJ2NlbnRlcicpLFxyXG4gICAgICAndHJhbnNsYXRlLW1pZGRsZSc6IHRoaXMucGxhY2VtZW50LmluY2x1ZGVzKCdtaWRkbGUnKSAmJiB0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnY2VudGVyJyksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlVG9hc3RlclN1YnNjcmliZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0ZVRvYXN0ZXJTdWJzY3JpYmUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy50b2FzdHMgPSB0aGlzLmNvbnRlbnRUb2FzdHM7XHJcbiAgfVxyXG5cclxuICBhZGRUb2FzdCh0b2FzdDogYW55LCBwcm9wczogYW55LCBvcHRpb25zPzogeyBpbmRleD86IG51bWJlcjsgaW5qZWN0b3I/OiBJbmplY3RvcjsgbmdNb2R1bGVSZWY/OiBOZ01vZHVsZVJlZjx1bmtub3duPjsgcHJvamVjdGFibGVOb2Rlcz86IE5vZGVbXVtdOyB9KTogQ29tcG9uZW50UmVmPGFueT4ge1xyXG4gICAgbGV0IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT47XHJcbiAgICBpZiAocGFyc2VJbnQoVkVSU0lPTi5tYWpvcikgPCAxMykge1xyXG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodG9hc3QpO1xyXG4gICAgICBjb21wb25lbnRSZWYgPSB0aGlzLnRvYXN0ZXJIb3N0LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnksIG9wdGlvbnM/LmluZGV4LCBvcHRpb25zPy5pbmplY3Rvciwgb3B0aW9ucz8ucHJvamVjdGFibGVOb2Rlcywgb3B0aW9ucz8ubmdNb2R1bGVSZWYpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICBjb21wb25lbnRSZWYgPSB0aGlzLnRvYXN0ZXJIb3N0LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRvYXN0LCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHRoaXMudG9hc3RzRHluYW1pYy5wdXNoKGNvbXBvbmVudFJlZik7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudG9hc3RzRHluYW1pYy5pbmRleE9mKGNvbXBvbmVudFJlZik7XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcykpIHtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVsncGxhY2VtZW50J10gPSB0aGlzLnBsYWNlbWVudDtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVsnZHluYW1pYyddID0gdHJ1ZTtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVsnaW5kZXgnXSA9IGluZGV4O1xyXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlWyd2aXNpYmxlJ10gPSB0cnVlO1xyXG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlWyd2aXNpYmxlQ2hhbmdlJ10uZW1pdCh0cnVlKTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZj8uZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcclxuICB9XHJcblxyXG4gIHJlbW92ZVRvYXN0KHN0YXRlOiBJVG9hc3RlckFjdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy50b2FzdHNEeW5hbWljPy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoc3RhdGUudG9hc3Q/LmR5bmFtaWMgJiYgKGl0ZW0uaW5zdGFuY2UgPT09IHN0YXRlLnRvYXN0KSkge1xyXG4gICAgICAgIGl0ZW0uaW5zdGFuY2UudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW0uaW5zdGFuY2VbJ3Zpc2libGVDaGFuZ2UnXS5lbWl0KGZhbHNlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGl0ZW0uZGVzdHJveSgpO1xyXG4gICAgICAgIH0sIDMwMCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudG9hc3RzPy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoaXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgPT09IHN0YXRlLnRvYXN0Py5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFzdGF0ZS50b2FzdD8uZHluYW1pYykge1xyXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgc3RhdGUudG9hc3QudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRlVG9hc3RlclN1YnNjcmliZShzdWJzY3JpYmU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICBpZiAoc3Vic2NyaWJlKSB7XHJcbiAgICAgIHRoaXMuc3RhdGVUb2FzdGVyU3Vic2NyaXB0aW9uID0gdGhpcy50b2FzdGVyU2VydmljZS50b2FzdGVyU3RhdGUkLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcclxuICAgICAgICBpZiAoc3RhdGUuc2hvdyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3Qoc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhdGUuc2hvdyA9PT0gdHJ1ZSAmJiBzdGF0ZS50b2FzdD8uZHluYW1pYyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhdGVUb2FzdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSBjVG9hc3Rlckhvc3Q+PC9uZy10ZW1wbGF0ZT5cbjxuZy1jb250ZW50IGNUb2FzdGVySG9zdD48L25nLWNvbnRlbnQ+XG4iXX0=