@nova-ui/bits
Version:
SolarWinds Nova Framework
92 lines • 20 kB
JavaScript
import { ChangeDetectorRef, Component, ElementRef, HostListener, Input, NgZone, TemplateRef, } from "@angular/core";
import _isBoolean from "lodash/isBoolean";
import { Subject } from "rxjs";
import { take } from "rxjs/operators";
import { fadeIn } from "../../animations/fadeIn";
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../icon/icon.component";
import * as i3 from "../overlay/arrow-component/overlay-arrow.component";
/**
* @ignore
*/
export class PopoverModalComponent {
onClick(event) {
event.stopPropagation();
}
onMouseEnter() {
this.popoverModalEventSubject.next("mouse-enter");
}
onMouseLeave() {
this.popoverModalEventSubject.next("mouse-leave");
}
constructor(elRef, zone, cdRef) {
this.elRef = elRef;
this.zone = zone;
this.cdRef = cdRef;
this.placement = "right";
this.fadeIn = false;
this.popoverModalSubscriptions = [];
}
ngOnInit() {
const displayChangeSubscription = this.displayChange.subscribe((show) => {
if (!show) {
this.popoverBeforeHiddenSubject.next();
this.fadeIn = false;
this.cdRef.markForCheck();
}
});
this.popoverModalSubscriptions.push(displayChangeSubscription);
}
ngAfterViewInit() {
// To prevent from exception 'expression was changed after check'
const zoneSubscription = this.zone.onStable
.asObservable()
.pipe(take(1))
.subscribe(() => {
// To be sure, that change detection mechanism was invoked and placement was updated
this.zone.run(() => (this.fadeIn = true));
});
this.popoverModalSubscriptions.push(zoneSubscription);
}
onAnimationEnd(event) {
if (_isBoolean(event.fromState) && event.fromState) {
this.popoverAfterHiddenSubject.next();
}
}
ngOnDestroy() {
this.popoverModalSubscriptions.forEach((sub) => {
sub.unsubscribe();
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopoverModalComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PopoverModalComponent, selector: "nui-popover-modal", inputs: { backdrop: "backdrop", context: "context", template: "template", displayChange: "displayChange", hostElement: "hostElement", hasPadding: "hasPadding", unlimited: "unlimited" }, host: { attributes: { "role": "dialog" }, listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0, template: "<div\n class=\"nui-popover-container-animation fade\"\n [@fadeIn]=\"fadeIn\"\n (@fadeIn.done)=\"onAnimationEnd($event)\"\n>\n <div\n class=\"nui-popover-container\"\n [ngClass]=\"['nui-popover-container--' + placement]\"\n [class.unlimited]=\"unlimited\"\n >\n <div class=\"nui-popover-container__arrow arrow\"></div>\n <div class=\"nui-popover-container__frame\">\n <div\n *ngIf=\"context.icon || context.title\"\n class=\"nui-popover-container__header\"\n [class.nui-popover-container__header--with-border]=\"\n context.title\n \"\n >\n <div class=\"nui-popover-container__icon\" *ngIf=\"context.icon\">\n <nui-icon [icon]=\"context.icon\"></nui-icon>\n </div>\n <div\n *ngIf=\"context.title\"\n class=\"nui-popover-container__title\"\n [class.nui-popover-container__title--with-icon]=\"\n context.icon\n \"\n title=\"{{ context.title }}\"\n >\n <span>{{ context.title }}</span>\n </div>\n </div>\n <div\n class=\"nui-popover-container__content\"\n [class.noPadding]=\"!hasPadding\"\n >\n <ng-container [ngTemplateOutlet]=\"template\"></ng-container>\n </div>\n </div>\n </div>\n <nui-overlay-arrow></nui-overlay-arrow>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconComponent, selector: "nui-icon", inputs: ["iconColor", "brushType", "iconHoverColor", "iconSize", "cssClass", "fillContainer", "status", "childStatus", "icon", "counter"] }, { kind: "component", type: i3.OverlayArrowComponent, selector: "nui-overlay-arrow" }], animations: [fadeIn] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopoverModalComponent, decorators: [{
type: Component,
args: [{ selector: "nui-popover-modal", animations: [fadeIn], host: { role: "dialog" }, template: "<div\n class=\"nui-popover-container-animation fade\"\n [@fadeIn]=\"fadeIn\"\n (@fadeIn.done)=\"onAnimationEnd($event)\"\n>\n <div\n class=\"nui-popover-container\"\n [ngClass]=\"['nui-popover-container--' + placement]\"\n [class.unlimited]=\"unlimited\"\n >\n <div class=\"nui-popover-container__arrow arrow\"></div>\n <div class=\"nui-popover-container__frame\">\n <div\n *ngIf=\"context.icon || context.title\"\n class=\"nui-popover-container__header\"\n [class.nui-popover-container__header--with-border]=\"\n context.title\n \"\n >\n <div class=\"nui-popover-container__icon\" *ngIf=\"context.icon\">\n <nui-icon [icon]=\"context.icon\"></nui-icon>\n </div>\n <div\n *ngIf=\"context.title\"\n class=\"nui-popover-container__title\"\n [class.nui-popover-container__title--with-icon]=\"\n context.icon\n \"\n title=\"{{ context.title }}\"\n >\n <span>{{ context.title }}</span>\n </div>\n </div>\n <div\n class=\"nui-popover-container__content\"\n [class.noPadding]=\"!hasPadding\"\n >\n <ng-container [ngTemplateOutlet]=\"template\"></ng-container>\n </div>\n </div>\n </div>\n <nui-overlay-arrow></nui-overlay-arrow>\n</div>\n" }]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }], propDecorators: { backdrop: [{
type: Input
}], context: [{
type: Input
}], template: [{
type: Input
}], displayChange: [{
type: Input
}], hostElement: [{
type: Input
}], hasPadding: [{
type: Input
}], unlimited: [{
type: Input
}], onClick: [{
type: HostListener,
args: ["click", ["$event"]]
}], onMouseEnter: [{
type: HostListener,
args: ["mouseenter"]
}], onMouseLeave: [{
type: HostListener,
args: ["mouseleave"]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3BvcG92ZXIvcG9wb3Zlci1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3BvcG92ZXIvcG9wb3Zlci1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQkEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7OztBQVdqRDs7R0FFRztBQU9ILE1BQU0sT0FBTyxxQkFBcUI7SUE2QzlCLE9BQU8sQ0FBQyxLQUFpQjtRQUNyQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUdELFlBQVk7UUFDUixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFHRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFDVyxLQUFpQixFQUNoQixJQUFZLEVBQ1osS0FBd0I7UUFGekIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNoQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUExQjdCLGNBQVMsR0FBcUIsT0FBTyxDQUFDO1FBQ3RDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFLZCw4QkFBeUIsR0FBbUIsRUFBRSxDQUFDO0lBcUJwRCxDQUFDO0lBRUcsUUFBUTtRQUNYLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQzFELENBQUMsSUFBYSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNQLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDN0I7UUFDTCxDQUFDLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sZUFBZTtRQUNsQixpRUFBaUU7UUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7YUFDdEMsWUFBWSxFQUFFO2FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixvRkFBb0Y7WUFDcEYsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFDUCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFxQjtRQUN2QyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNoRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQXJHUSxxQkFBcUI7bUdBQXJCLHFCQUFxQiwwWUMzRGxDLGlsREEyQ0EsNnFCRGFnQixDQUFDLE1BQU0sQ0FBQzs7NEZBR1gscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNJLG1CQUFtQixjQUVqQixDQUFDLE1BQU0sQ0FBQyxRQUNkLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtvSUFNZixRQUFRO3NCQUFoQixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBV04sT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNakMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFlBQVk7Z0JBTTFCLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgX2lzQm9vbGVhbiBmcm9tIFwibG9kYXNoL2lzQm9vbGVhblwiO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHRha2UgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgSVBvcG92ZXJNb2RhbENvbnRleHQgfSBmcm9tIFwiLi9wb3BvdmVyLW1vZGFsLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBvcG92ZXJQbGFjZW1lbnQgfSBmcm9tIFwiLi9wdWJsaWMtYXBpXCI7XG5pbXBvcnQgeyBmYWRlSW4gfSBmcm9tIFwiLi4vLi4vYW5pbWF0aW9ucy9mYWRlSW5cIjtcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCB0eXBlIFBvcG92ZXJNb2RhbEV2ZW50cyA9XG4gICAgfCBcIm1vdXNlLWVudGVyXCJcbiAgICB8IFwibW91c2UtbGVhdmVcIlxuICAgIHwgXCJiYWNrZHJvcC1jbGlja1wiXG4gICAgfCBcIm91dHNpZGUtY2xpY2tcIjtcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm51aS1wb3BvdmVyLW1vZGFsXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9wb3BvdmVyLW1vZGFsLmNvbXBvbmVudC5odG1sXCIsXG4gICAgYW5pbWF0aW9uczogW2ZhZGVJbl0sXG4gICAgaG9zdDogeyByb2xlOiBcImRpYWxvZ1wiIH0sXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBJcyBiYWNrZHJvcCB1c2VkXG4gICAgICovXG4gICAgQElucHV0KCkgYmFja2Ryb3A6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHNldHRpbmdzIGZvciBwb3BvdmVyXG4gICAgICovXG4gICAgQElucHV0KCkgY29udGV4dDogSVBvcG92ZXJNb2RhbENvbnRleHQ7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHBvcG92ZXIgY29udGVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBmYWRlSW4gcHJvcGVydHlcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkaXNwbGF5Q2hhbmdlOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gICAgLyoqXG4gICAgICogUG9wb3ZlciBob3N0RWxlbWVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhvc3RFbGVtZW50OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGlmIGNvbnRhaW5lciBoYXMgcGFkZGluZy5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBoYXNQYWRkaW5nOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCBjb25zdHJhaW50cyBhcmUgaW4gZWZmZWN0IGZvciB0aGUgcG9wb3ZlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIHVubGltaXRlZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBwbGFjZW1lbnQ6IFBvcG92ZXJQbGFjZW1lbnQgPSBcInJpZ2h0XCI7XG4gICAgcHVibGljIGZhZGVJbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBwb3BvdmVyQmVmb3JlSGlkZGVuU3ViamVjdDogU3ViamVjdDx2b2lkPjtcbiAgICBwdWJsaWMgcG9wb3ZlckFmdGVySGlkZGVuU3ViamVjdDogU3ViamVjdDx2b2lkPjtcbiAgICBwdWJsaWMgcG9wb3Zlck1vZGFsRXZlbnRTdWJqZWN0OiBTdWJqZWN0PFBvcG92ZXJNb2RhbEV2ZW50cz47XG5cbiAgICBwcml2YXRlIHBvcG92ZXJNb2RhbFN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxuICAgIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIilcbiAgICBvbk1vdXNlRW50ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9wb3Zlck1vZGFsRXZlbnRTdWJqZWN0Lm5leHQoXCJtb3VzZS1lbnRlclwiKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKFwibW91c2VsZWF2ZVwiKVxuICAgIG9uTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyTW9kYWxFdmVudFN1YmplY3QubmV4dChcIm1vdXNlLWxlYXZlXCIpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlzcGxheUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZGlzcGxheUNoYW5nZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoc2hvdzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc2hvdykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJCZWZvcmVIaWRkZW5TdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWRlSW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5wb3BvdmVyTW9kYWxTdWJzY3JpcHRpb25zLnB1c2goZGlzcGxheUNoYW5nZVN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gVG8gcHJldmVudCBmcm9tIGV4Y2VwdGlvbiAnZXhwcmVzc2lvbiB3YXMgY2hhbmdlZCBhZnRlciBjaGVjaydcbiAgICAgICAgY29uc3Qgem9uZVN1YnNjcmlwdGlvbiA9IHRoaXMuem9uZS5vblN0YWJsZVxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVG8gYmUgc3VyZSwgdGhhdCBjaGFuZ2UgZGV0ZWN0aW9uIG1lY2hhbmlzbSB3YXMgaW52b2tlZCBhbmQgcGxhY2VtZW50IHdhcyB1cGRhdGVkXG4gICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiAodGhpcy5mYWRlSW4gPSB0cnVlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3BvdmVyTW9kYWxTdWJzY3JpcHRpb25zLnB1c2goem9uZVN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoX2lzQm9vbGVhbihldmVudC5mcm9tU3RhdGUpICYmIGV2ZW50LmZyb21TdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQWZ0ZXJIaWRkZW5TdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyTW9kYWxTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4ge1xuICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cIm51aS1wb3BvdmVyLWNvbnRhaW5lci1hbmltYXRpb24gZmFkZVwiXG4gICAgW0BmYWRlSW5dPVwiZmFkZUluXCJcbiAgICAoQGZhZGVJbi5kb25lKT1cIm9uQW5pbWF0aW9uRW5kKCRldmVudClcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJudWktcG9wb3Zlci1jb250YWluZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJbJ251aS1wb3BvdmVyLWNvbnRhaW5lci0tJyArIHBsYWNlbWVudF1cIlxuICAgICAgICBbY2xhc3MudW5saW1pdGVkXT1cInVubGltaXRlZFwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnVpLXBvcG92ZXItY29udGFpbmVyX19hcnJvdyBhcnJvd1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnVpLXBvcG92ZXItY29udGFpbmVyX19mcmFtZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udGV4dC5pY29uIHx8IGNvbnRleHQudGl0bGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibnVpLXBvcG92ZXItY29udGFpbmVyX19oZWFkZXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5udWktcG9wb3Zlci1jb250YWluZXJfX2hlYWRlci0td2l0aC1ib3JkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQudGl0bGVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJudWktcG9wb3Zlci1jb250YWluZXJfX2ljb25cIiAqbmdJZj1cImNvbnRleHQuaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bnVpLWljb24gW2ljb25dPVwiY29udGV4dC5pY29uXCI+PC9udWktaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udGV4dC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibnVpLXBvcG92ZXItY29udGFpbmVyX190aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5udWktcG9wb3Zlci1jb250YWluZXJfX3RpdGxlLS13aXRoLWljb25dPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lmljb25cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBjb250ZXh0LnRpdGxlIH19XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbnRleHQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm51aS1wb3BvdmVyLWNvbnRhaW5lcl9fY29udGVudFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm5vUGFkZGluZ109XCIhaGFzUGFkZGluZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxudWktb3ZlcmxheS1hcnJvdz48L251aS1vdmVybGF5LWFycm93PlxuPC9kaXY+XG4iXX0=