@coreui/angular
Version:
CoreUI Components Library for Angular
123 lines • 19 kB
JavaScript
import { Component, ContentChildren, DestroyRef, HostBinding, inject, Input, ViewChild, ViewContainerRef } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { ToasterHostDirective } from './toaster-host.directive';
import { ToastComponent } from '../toast/toast.component';
import * as i0 from "@angular/core";
import * as i1 from "./toaster.service";
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 {
#destroyRef;
constructor(hostElement, renderer, toasterService) {
this.hostElement = hostElement;
this.renderer = renderer;
this.toasterService = toasterService;
this.#destroyRef = inject(DestroyRef);
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();
}
ngAfterContentChecked() {
this.toasts = this.contentToasts;
}
addToast(toast, props, options) {
const 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.setInput(key, value);
}
componentRef.setInput('placement', this.placement);
componentRef.setInput('dynamic', true);
componentRef.setInput('index', index);
componentRef.setInput('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.setInput('visible', false);
item.instance['visibleChange'].emit(false);
item.destroy();
}
});
this.toasts?.forEach((item) => {
if (state.toast && item.element.nativeElement === state.toast.hostElement.nativeElement) {
if (!state.toast.dynamic()) {
state.toast['visible'] = false;
}
}
});
}
stateToasterSubscribe() {
this.toasterService.toasterState$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((state) => {
if (state.show === false) {
this.removeToast(state);
}
// if (state.show === true && state.toast?.dynamic() === undefined) {
// /* empty */
// }
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ToasterComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ToasterService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ToasterComponent, isStandalone: true, selector: "c-toaster", inputs: { placement: "placement", position: "position" }, host: { properties: { "class": "this.hostClasses" }, classAttribute: "toaster toast-container" }, 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 />\n<ng-content cToasterHost />\n", dependencies: [{ kind: "directive", type: ToasterHostDirective, selector: "[cToasterHost]", exportAs: ["cToasterHost"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ToasterComponent, decorators: [{
type: Component,
args: [{ selector: 'c-toaster', exportAs: 'cToaster', standalone: true, imports: [ToasterHostDirective], host: { class: 'toaster toast-container' }, template: "<ng-template cToasterHost />\n<ng-content cToasterHost />\n" }]
}], ctorParameters: () => [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3RvYXN0L3RvYXN0ZXIvdG9hc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3RvYXN0L3RvYXN0ZXIvdG9hc3Rlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULGVBQWUsRUFDZixVQUFVLEVBRVYsV0FBVyxFQUNYLE1BQU0sRUFFTixLQUFLLEVBS0wsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQUUxRCxNQUFNLENBQU4sSUFBWSxnQkFXWDtBQVhELFdBQVksZ0JBQWdCO0lBQzFCLHFDQUFpQixDQUFBO0lBQ2pCLDBDQUFzQixDQUFBO0lBQ3RCLDRDQUF3QixDQUFBO0lBQ3hCLHNDQUFrQixDQUFBO0lBQ2xCLGdEQUE0QixDQUFBO0lBQzVCLGtEQUE4QixDQUFBO0lBQzlCLDRDQUF3QixDQUFBO0lBQ3hCLGdEQUE0QixDQUFBO0lBQzVCLGtEQUE4QixDQUFBO0lBQzlCLDRDQUF3QixDQUFBO0FBQzFCLENBQUMsRUFYVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBVzNCO0FBdUJELE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsV0FBVyxDQUFzQjtJQUUxQyxZQUNVLFdBQXVCLEVBQ3ZCLFFBQW1CLEVBQ25CLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGFB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LENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMvRixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUNELHFFQUFxRTtZQUNyRSxnQkFBZ0I7WUFDaEIsSUFBSTtRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0ExR1UsZ0JBQWdCO21HQUFoQixnQkFBZ0IsK1BBMEJWLGNBQWMsUUFBVSxnQkFBZ0IsMEVBRDlDLG9CQUFvQixzRkNuRmpDLDZEQUVBLDRDRHFEWSxvQkFBb0I7OzRGQUduQixnQkFBZ0I7a0JBUjVCLFNBQVM7K0JBQ0UsV0FBVyxZQUVYLFVBQVUsY0FDUixJQUFJLFdBQ1AsQ0FBQyxvQkFBb0IsQ0FBQyxRQUN6QixFQUFFLEtBQUssRUFBRSx5QkFBeUIsRUFBRTtvSUFtQmpDLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFNkMsV0FBVztzQkFBN0QsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1ksYUFBYTtzQkFBekUsZUFBZTt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBR3ZELFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ01vZHVsZVJlZixcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5pbXBvcnQgeyBJVG9hc3RlckFjdGlvbiwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICcuL3RvYXN0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdGVySG9zdERpcmVjdGl2ZSB9IGZyb20gJy4vdG9hc3Rlci1ob3N0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUb2FzdENvbXBvbmVudCB9IGZyb20gJy4uL3RvYXN0L3RvYXN0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBlbnVtIFRvYXN0ZXJQbGFjZW1lbnQge1xuICBTdGF0aWMgPSAnc3RhdGljJyxcbiAgVG9wU3RhcnQgPSAndG9wLXN0YXJ0JyxcbiAgVG9wQ2VudGVyID0gJ3RvcC1jZW50ZXInLFxuICBUb3BFbmQgPSAndG9wLWVuZCcsXG4gIE1pZGRsZVN0YXJ0ID0gJ21pZGRsZS1zdGFydCcsXG4gIE1pZGRsZUNlbnRlciA9ICdtaWRkbGUtY2VudGVyJyxcbiAgTWlkZGxlRW5kID0gJ21pZGRsZS1lbmQnLFxuICBCb3R0b21TdGFydCA9ICdib3R0b20tc3RhcnQnLFxuICBCb3R0b21DZW50ZXIgPSAnYm90dG9tLWNlbnRlcicsXG4gIEJvdHRvbUVuZCA9ICdib3R0b20tZW5kJ1xufVxuXG5leHBvcnQgdHlwZSBUVG9hc3RlclBsYWNlbWVudCA9XG4gIHwgVG9hc3RlclBsYWNlbWVudC5TdGF0aWNcbiAgfCBUb2FzdGVyUGxhY2VtZW50LlRvcFN0YXJ0XG4gIHwgVG9hc3RlclBsYWNlbWVudC5Ub3BDZW50ZXJcbiAgfCBUb2FzdGVyUGxhY2VtZW50LlRvcEVuZFxuICB8IFRvYXN0ZXJQbGFjZW1lbnQuTWlkZGxlU3RhcnRcbiAgfCBUb2FzdGVyUGxhY2VtZW50Lk1pZGRsZUNlbnRlclxuICB8IFRvYXN0ZXJQbGFjZW1lbnQuTWlkZGxlRW5kXG4gIHwgVG9hc3RlclBsYWNlbWVudC5Cb3R0b21TdGFydFxuICB8IFRvYXN0ZXJQbGFjZW1lbnQuQm90dG9tQ2VudGVyXG4gIHwgVG9hc3RlclBsYWNlbWVudC5Cb3R0b21FbmRcbiAgfCBzdHJpbmc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtdG9hc3RlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90b2FzdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgZXhwb3J0QXM6ICdjVG9hc3RlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtUb2FzdGVySG9zdERpcmVjdGl2ZV0sXG4gIGhvc3Q6IHsgY2xhc3M6ICd0b2FzdGVyIHRvYXN0LWNvbnRhaW5lcicgfVxufSlcbmV4cG9ydCBjbGFzcyBUb2FzdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgcmVhZG9ubHkgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSB0b2FzdGVyU2VydmljZTogVG9hc3RlclNlcnZpY2VcbiAgKSB7fVxuXG4gIHBsYWNlbWVudHMgPSBPYmplY3QudmFsdWVzKFRvYXN0ZXJQbGFjZW1lbnQpO1xuICB0b2FzdHMhOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG4gIHRvYXN0c0R5bmFtaWM6IGFueVtdID0gW107XG5cbiAgLyoqXG4gICAqIFRvYXN0ZXIgcGxhY2VtZW50XG4gICAqIEB0eXBlIFRUb2FzdGVyUGxhY2VtZW50XG4gICAqL1xuICBASW5wdXQoKSBwbGFjZW1lbnQ6IFRUb2FzdGVyUGxhY2VtZW50ID0gVG9hc3RlclBsYWNlbWVudC5Ub3BFbmQ7XG5cbiAgLyoqXG4gICAqIFRvYXN0ZXIgcG9zaXRpb25cbiAgICogQHR5cGUgKHN0cmluZyB8ICdhYnNvbHV0ZScgfCAnZml4ZWQnIHwgJ3N0YXRpYycpXG4gICAqL1xuICBASW5wdXQoKSBwb3NpdGlvbjogc3RyaW5nIHwgJ2Fic29sdXRlJyB8ICdmaXhlZCcgfCAnc3RhdGljJyA9ICdhYnNvbHV0ZSc7XG5cbiAgQFZpZXdDaGlsZChUb2FzdGVySG9zdERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgdG9hc3Rlckhvc3QhOiBUb2FzdGVySG9zdERpcmVjdGl2ZTtcbiAgQENvbnRlbnRDaGlsZHJlbihUb2FzdENvbXBvbmVudCwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGNvbnRlbnRUb2FzdHMhOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2FzdGVyOiB0cnVlLFxuICAgICAgJ3RvYXN0LWNvbnRhaW5lcic6IHRydWUsXG4gICAgICBbYHBvc2l0aW9uLSR7dGhpcy5wb3NpdGlvbn1gXTogISF0aGlzLnBvc2l0aW9uLFxuICAgICAgJ3RvcC0wJzogdGhpcy5wbGFjZW1lbnQuaW5jbHVkZXMoJ3RvcCcpLFxuICAgICAgJ3RvcC01MCc6IHRoaXMucGxhY2VtZW50LmluY2x1ZGVzKCdtaWRkbGUnKSxcbiAgICAgICdib3R0b20tMCc6IHRoaXMucGxhY2VtZW50LmluY2x1ZGVzKCdib3R0b20nKSxcbiAgICAgICdzdGFydC0wJzogdGhpcy5wbGFjZW1lbnQuaW5jbHVkZXMoJ3N0YXJ0JyksXG4gICAgICAnc3RhcnQtNTAnOiB0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnY2VudGVyJyksXG4gICAgICAnZW5kLTAnOiB0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnZW5kJyksXG4gICAgICAndHJhbnNsYXRlLW1pZGRsZS14JzogdGhpcy5wbGFjZW1lbnQuaW5jbHVkZXMoJ2NlbnRlcicpICYmICF0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnbWlkZGxlJyksXG4gICAgICAndHJhbnNsYXRlLW1pZGRsZS15JzogdGhpcy5wbGFjZW1lbnQuaW5jbHVkZXMoJ21pZGRsZScpICYmICF0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnY2VudGVyJyksXG4gICAgICAndHJhbnNsYXRlLW1pZGRsZSc6IHRoaXMucGxhY2VtZW50LmluY2x1ZGVzKCdtaWRkbGUnKSAmJiB0aGlzLnBsYWNlbWVudC5pbmNsdWRlcygnY2VudGVyJylcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVRvYXN0ZXJTdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0cyA9IHRoaXMuY29udGVudFRvYXN0cztcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb2FzdChcbiAgICB0b2FzdDogYW55LFxuICAgIHByb3BzOiBhbnksXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGluZGV4PzogbnVtYmVyO1xuICAgICAgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgICAgIG5nTW9kdWxlUmVmPzogTmdNb2R1bGVSZWY8dW5rbm93bj47XG4gICAgICBwcm9qZWN0YWJsZU5vZGVzPzogTm9kZVtdW107XG4gICAgfVxuICApOiBDb21wb25lbnRSZWY8YW55PiB7XG4gICAgY29uc3QgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiA9IHRoaXMudG9hc3Rlckhvc3Qudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodG9hc3QsIG9wdGlvbnMpO1xuICAgIHRoaXMudG9hc3RzRHluYW1pYy5wdXNoKGNvbXBvbmVudFJlZik7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRvYXN0c0R5bmFtaWMuaW5kZXhPZihjb21wb25lbnRSZWYpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3BsYWNlbWVudCcsIHRoaXMucGxhY2VtZW50KTtcbiAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2R5bmFtaWMnLCB0cnVlKTtcbiAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ2luZGV4JywgaW5kZXgpO1xuICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dCgndmlzaWJsZScsIHRydWUpO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVsndmlzaWJsZUNoYW5nZSddLmVtaXQodHJ1ZSk7XG4gICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmPy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVUb2FzdChzdGF0ZTogSVRvYXN0ZXJBY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0c0R5bmFtaWM/LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChzdGF0ZS50b2FzdD8uZHluYW1pYygpICYmIGl0ZW0uaW5zdGFuY2UgPT09IHN0YXRlLnRvYXN0KSB7XG4gICAgICAgIGl0ZW0uc2V0SW5wdXQoJ3Zpc2libGUnLCBmYWxzZSk7XG4gICAgICAgIGl0ZW0uaW5zdGFuY2VbJ3Zpc2libGVDaGFuZ2UnXS5lbWl0KGZhbHNlKTtcbiAgICAgICAgaXRlbS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRvYXN0cz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKHN0YXRlLnRvYXN0ICYmIGl0ZW0uZWxlbWVudC5uYXRpdmVFbGVtZW50ID09PSBzdGF0ZS50b2FzdC5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGlmICghc3RhdGUudG9hc3QuZHluYW1pYygpKSB7XG4gICAgICAgICAgc3RhdGUudG9hc3RbJ3Zpc2libGUnXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRlVG9hc3RlclN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnRvYXN0ZXJTdGF0ZSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZikpLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgIGlmIChzdGF0ZS5zaG93ID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVRvYXN0KHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIChzdGF0ZS5zaG93ID09PSB0cnVlICYmIHN0YXRlLnRvYXN0Py5keW5hbWljKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gICAvKiBlbXB0eSAqL1xuICAgICAgLy8gfVxuICAgIH0pO1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgY1RvYXN0ZXJIb3N0IC8+XG48bmctY29udGVudCBjVG9hc3Rlckhvc3QgLz5cbiJdfQ==