theme-lib
Version:
This is a simple example Angular Library published to npm.
234 lines • 19.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ElementRef, HostBinding, Inject, TemplateRef, Renderer2, ViewChild, ComponentFactoryResolver, Input, } from '@angular/core';
import { NbComponentPortal, NbFocusTrapFactoryService, NbOverlayContainerComponent, NbTemplatePortal, } from '../cdk';
import { NB_WINDOW_CONTENT, NbWindowConfig, NbWindowState, NB_WINDOW_CONTEXT } from './window.options';
import { NbWindowRef } from './window-ref';
var NbWindowComponent = /** @class */ (function () {
function NbWindowComponent(content, context, windowRef, config, focusTrapFactory, elementRef, renderer) {
this.content = content;
this.context = context;
this.windowRef = windowRef;
this.config = config;
this.focusTrapFactory = focusTrapFactory;
this.elementRef = elementRef;
this.renderer = renderer;
}
Object.defineProperty(NbWindowComponent.prototype, "isFullScreen", {
get: /**
* @return {?}
*/
function () {
return this.windowRef.state === NbWindowState.FULL_SCREEN;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbWindowComponent.prototype, "maximized", {
get: /**
* @return {?}
*/
function () {
return this.windowRef.state === NbWindowState.MAXIMIZED;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbWindowComponent.prototype, "minimized", {
get: /**
* @return {?}
*/
function () {
return this.windowRef.state === NbWindowState.MINIMIZED;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
NbWindowComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);
this.focusTrap.blurPreviouslyFocusedElement();
this.focusTrap.focusInitialElement();
if (this.config.windowClass) {
this.renderer.addClass(this.elementRef.nativeElement, this.config.windowClass);
}
};
/**
* @return {?}
*/
NbWindowComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
if (this.content instanceof TemplateRef) {
this.attachTemplate();
}
else {
this.attachComponent();
}
};
/**
* @return {?}
*/
NbWindowComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.focusTrap) {
this.focusTrap.restoreFocus();
}
this.close();
};
/**
* @return {?}
*/
NbWindowComponent.prototype.minimize = /**
* @return {?}
*/
function () {
if (this.windowRef.state === NbWindowState.MINIMIZED) {
this.windowRef.toPreviousState();
}
else {
this.windowRef.minimize();
}
};
/**
* @return {?}
*/
NbWindowComponent.prototype.maximize = /**
* @return {?}
*/
function () {
this.windowRef.maximize();
};
/**
* @return {?}
*/
NbWindowComponent.prototype.fullScreen = /**
* @return {?}
*/
function () {
this.windowRef.fullScreen();
};
/**
* @return {?}
*/
NbWindowComponent.prototype.maximizeOrFullScreen = /**
* @return {?}
*/
function () {
if (this.windowRef.state === NbWindowState.MINIMIZED) {
this.maximize();
}
else {
this.fullScreen();
}
};
/**
* @return {?}
*/
NbWindowComponent.prototype.close = /**
* @return {?}
*/
function () {
this.windowRef.close();
};
/**
* @protected
* @return {?}
*/
NbWindowComponent.prototype.attachTemplate = /**
* @protected
* @return {?}
*/
function () {
this.overlayContainer.attachTemplatePortal(new NbTemplatePortal((/** @type {?} */ (this.content)), null, {
$implicit: this.context,
}));
};
/**
* @protected
* @return {?}
*/
NbWindowComponent.prototype.attachComponent = /**
* @protected
* @return {?}
*/
function () {
/** @type {?} */
var portal = new NbComponentPortal((/** @type {?} */ (this.content)), null, null, this.cfr);
/** @type {?} */
var ref = this.overlayContainer.attachComponentPortal(portal);
Object.assign(ref.instance, this.context);
ref.changeDetectorRef.detectChanges();
};
NbWindowComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-window',
template: "\n <nb-card>\n <nb-card-header>\n <div cdkFocusInitial class=\"title\" tabindex=\"-1\">{{ config.title }}</div>\n\n <div class=\"buttons\">\n <button class=\"button\" (click)=\"minimize()\">\n <i class=\"nb-fold\"></i>\n </button>\n <button class=\"button\" *ngIf=\"isFullScreen\" (click)=\"maximize()\">\n <i class=\"nb-minimize\"></i>\n </button>\n <button class=\"button\" *ngIf=\"minimized || maximized\" (click)=\"maximizeOrFullScreen()\">\n <i class=\"nb-maximize\"></i>\n </button>\n <button class=\"button\" (click)=\"close()\">\n <i class=\"nb-close\"></i>\n </button>\n </div>\n </nb-card-header>\n <nb-card-body *ngIf=\"maximized || isFullScreen\">\n <nb-overlay-container></nb-overlay-container>\n </nb-card-body>\n </nb-card>\n ",
styles: [":host{flex:1 0 auto;min-width:20rem}:host nb-card{margin:0}:host nb-card-header{display:flex;justify-content:space-between;align-items:center;padding-right:0;overflow:hidden}:host .title{flex:1 0 auto;margin-right:3rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .buttons{width:9.5rem;display:flex;justify-content:space-evenly}:host .buttons .button{background:0 0;border:none;flex:0 0 3rem;padding:0 .8rem}:host(.full-screen){position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}:host(.maximized) nb-card{border-bottom-left-radius:0;border-bottom-right-radius:0}:host(.minimized) nb-card{border-bottom-left-radius:0;border-bottom-right-radius:0;height:auto}:host(.minimized) nb-card nb-card-header{border-bottom:none}"]
}] }
];
/** @nocollapse */
NbWindowComponent.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [NB_WINDOW_CONTENT,] }] },
{ type: Object, decorators: [{ type: Inject, args: [NB_WINDOW_CONTEXT,] }] },
{ type: NbWindowRef },
{ type: NbWindowConfig },
{ type: NbFocusTrapFactoryService },
{ type: ElementRef },
{ type: Renderer2 }
]; };
NbWindowComponent.propDecorators = {
cfr: [{ type: Input }],
isFullScreen: [{ type: HostBinding, args: ['class.full-screen',] }],
maximized: [{ type: HostBinding, args: ['class.maximized',] }],
minimized: [{ type: HostBinding, args: ['class.minimized',] }],
overlayContainer: [{ type: ViewChild, args: [NbOverlayContainerComponent,] }]
};
return NbWindowComponent;
}());
export { NbWindowComponent };
if (false) {
/** @type {?} */
NbWindowComponent.prototype.cfr;
/** @type {?} */
NbWindowComponent.prototype.overlayContainer;
/**
* @type {?}
* @protected
*/
NbWindowComponent.prototype.focusTrap;
/** @type {?} */
NbWindowComponent.prototype.content;
/** @type {?} */
NbWindowComponent.prototype.context;
/** @type {?} */
NbWindowComponent.prototype.windowRef;
/** @type {?} */
NbWindowComponent.prototype.config;
/**
* @type {?}
* @protected
*/
NbWindowComponent.prototype.focusTrapFactory;
/**
* @type {?}
* @protected
*/
NbWindowComponent.prototype.elementRef;
/**
* @type {?}
* @protected
*/
NbWindowComponent.prototype.renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3dpbmRvdy93aW5kb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUdOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUF1Qix3QkFBd0IsRUFBRSxLQUFLLEdBQ2hFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxpQkFBaUIsRUFFakIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQixnQkFBZ0IsR0FDakIsTUFBTSxRQUFRLENBQUM7QUFFaEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTNDO0lBbURFLDJCQUNvQyxPQUEyQyxFQUMzQyxPQUFlLEVBQzFDLFNBQXNCLEVBQ3RCLE1BQXNCLEVBQ25CLGdCQUEyQyxFQUMzQyxVQUFzQixFQUN0QixRQUFtQjtRQU5LLFlBQU8sR0FBUCxPQUFPLENBQW9DO1FBQzNDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDMUMsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUNuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTJCO1FBQzNDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUM1QixDQUFDO0lBM0JKLHNCQUNJLDJDQUFZOzs7O1FBRGhCO1lBRUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsV0FBVyxDQUFDO1FBQzVELENBQUM7OztPQUFBO0lBRUQsc0JBQ0ksd0NBQVM7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QUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hDLENBQUM7O2dCQTlIRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSxrNUJBd0JUOztpQkFFRjs7OztnREF3QkksTUFBTSxTQUFDLGlCQUFpQjtnQkFDa0IsTUFBTSx1QkFBaEQsTUFBTSxTQUFDLGlCQUFpQjtnQkF2RHBCLFdBQVc7Z0JBRFEsY0FBYztnQkFMeEMseUJBQXlCO2dCQVp6QixVQUFVO2dCQU1WLFNBQVM7OztzQkE0Q1IsS0FBSzsrQkFFTCxXQUFXLFNBQUMsbUJBQW1COzRCQUsvQixXQUFXLFNBQUMsaUJBQWlCOzRCQUs3QixXQUFXLFNBQUMsaUJBQWlCO21DQUs3QixTQUFTLFNBQUMsMkJBQTJCOztJQWdGeEMsd0JBQUM7Q0FBQSxBQS9IRCxJQStIQztTQWxHWSxpQkFBaUI7OztJQUM1QixnQ0FBdUM7O0lBaUJ2Qyw2Q0FBc0Y7Ozs7O0lBRXRGLHNDQUFpQzs7SUFHL0Isb0NBQTZFOztJQUM3RSxvQ0FBaUQ7O0lBQ2pELHNDQUE2Qjs7SUFDN0IsbUNBQTZCOzs7OztJQUM3Qiw2Q0FBcUQ7Ozs7O0lBQ3JELHVDQUFnQzs7Ozs7SUFDaEMscUNBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBJbmplY3QsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBUeXBlLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIElucHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE5iQ29tcG9uZW50UG9ydGFsLFxyXG4gIE5iRm9jdXNUcmFwLFxyXG4gIE5iRm9jdXNUcmFwRmFjdG9yeVNlcnZpY2UsXHJcbiAgTmJPdmVybGF5Q29udGFpbmVyQ29tcG9uZW50LFxyXG4gIE5iVGVtcGxhdGVQb3J0YWwsXHJcbn0gZnJvbSAnLi4vY2RrJztcclxuaW1wb3J0IHsgTmJDb21wb25lbnRUeXBlIH0gZnJvbSAnLi4vY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBOQl9XSU5ET1dfQ09OVEVOVCwgTmJXaW5kb3dDb25maWcsIE5iV2luZG93U3RhdGUsIE5CX1dJTkRPV19DT05URVhUIH0gZnJvbSAnLi93aW5kb3cub3B0aW9ucyc7XHJcbmltcG9ydCB7IE5iV2luZG93UmVmIH0gZnJvbSAnLi93aW5kb3ctcmVmJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmItd2luZG93JyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5iLWNhcmQ+XHJcbiAgICAgIDxuYi1jYXJkLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGNka0ZvY3VzSW5pdGlhbCBjbGFzcz1cInRpdGxlXCIgdGFiaW5kZXg9XCItMVwiPnt7IGNvbmZpZy50aXRsZSB9fTwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJtaW5pbWl6ZSgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibmItZm9sZFwiPjwvaT5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiICpuZ0lmPVwiaXNGdWxsU2NyZWVuXCIgKGNsaWNrKT1cIm1heGltaXplKClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJuYi1taW5pbWl6ZVwiPjwvaT5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiICpuZ0lmPVwibWluaW1pemVkIHx8IG1heGltaXplZFwiIChjbGljayk9XCJtYXhpbWl6ZU9yRnVsbFNjcmVlbigpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibmItbWF4aW1pemVcIj48L2k+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm5iLWNsb3NlXCI+PC9pPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmItY2FyZC1oZWFkZXI+XHJcbiAgICAgIDxuYi1jYXJkLWJvZHkgKm5nSWY9XCJtYXhpbWl6ZWQgfHwgaXNGdWxsU2NyZWVuXCI+XHJcbiAgICAgICAgPG5iLW92ZXJsYXktY29udGFpbmVyPjwvbmItb3ZlcmxheS1jb250YWluZXI+XHJcbiAgICAgIDwvbmItY2FyZC1ib2R5PlxyXG4gICAgPC9uYi1jYXJkPlxyXG4gIGAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vd2luZG93LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYldpbmRvd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mdWxsLXNjcmVlbicpXHJcbiAgZ2V0IGlzRnVsbFNjcmVlbigpIHtcclxuICAgIHJldHVybiB0aGlzLndpbmRvd1JlZi5zdGF0ZSA9PT0gTmJXaW5kb3dTdGF0ZS5GVUxMX1NDUkVFTjtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MubWF4aW1pemVkJylcclxuICBnZXQgbWF4aW1pemVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMud2luZG93UmVmLnN0YXRlID09PSBOYldpbmRvd1N0YXRlLk1BWElNSVpFRDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MubWluaW1pemVkJylcclxuICBnZXQgbWluaW1pemVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMud2luZG93UmVmLnN0YXRlID09PSBOYldpbmRvd1N0YXRlLk1JTklNSVpFRDtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoTmJPdmVybGF5Q29udGFpbmVyQ29tcG9uZW50KSBvdmVybGF5Q29udGFpbmVyOiBOYk92ZXJsYXlDb250YWluZXJDb21wb25lbnQ7XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c1RyYXA6IE5iRm9jdXNUcmFwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTkJfV0lORE9XX0NPTlRFTlQpIHB1YmxpYyBjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+IHwgTmJDb21wb25lbnRUeXBlLFxyXG4gICAgQEluamVjdChOQl9XSU5ET1dfQ09OVEVYVCkgcHVibGljIGNvbnRleHQ6IE9iamVjdCxcclxuICAgIHB1YmxpYyB3aW5kb3dSZWY6IE5iV2luZG93UmVmLFxyXG4gICAgcHVibGljIGNvbmZpZzogTmJXaW5kb3dDb25maWcsXHJcbiAgICBwcm90ZWN0ZWQgZm9jdXNUcmFwRmFjdG9yeTogTmJGb2N1c1RyYXBGYWN0b3J5U2VydmljZSxcclxuICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZm9jdXNUcmFwID0gdGhpcy5mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLmZvY3VzVHJhcC5ibHVyUHJldmlvdXNseUZvY3VzZWRFbGVtZW50KCk7XHJcbiAgICB0aGlzLmZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLndpbmRvd0NsYXNzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY29uZmlnLndpbmRvd0NsYXNzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xyXG4gICAgICB0aGlzLmF0dGFjaFRlbXBsYXRlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dGFjaENvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5mb2N1c1RyYXApIHtcclxuICAgICAgdGhpcy5mb2N1c1RyYXAucmVzdG9yZUZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgbWluaW1pemUoKSB7XHJcbiAgICBpZiAodGhpcy53aW5kb3dSZWYuc3RhdGUgPT09IE5iV2luZG93U3RhdGUuTUlOSU1JWkVEKSB7XHJcbiAgICAgIHRoaXMud2luZG93UmVmLnRvUHJldmlvdXNTdGF0ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53aW5kb3dSZWYubWluaW1pemUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1heGltaXplKCkge1xyXG4gICAgdGhpcy53aW5kb3dSZWYubWF4aW1pemUoKTtcclxuICB9XHJcblxyXG4gIGZ1bGxTY3JlZW4oKSB7XHJcbiAgICB0aGlzLndpbmRvd1JlZi5mdWxsU2NyZWVuKCk7XHJcbiAgfVxyXG5cclxuICBtYXhpbWl6ZU9yRnVsbFNjcmVlbigpIHtcclxuICAgIGlmICh0aGlzLndpbmRvd1JlZi5zdGF0ZSA9PT0gTmJXaW5kb3dTdGF0ZS5NSU5JTUlaRUQpIHtcclxuICAgICAgdGhpcy5tYXhpbWl6ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mdWxsU2NyZWVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMud2luZG93UmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYXR0YWNoVGVtcGxhdGUoKSB7XHJcbiAgICB0aGlzLm92ZXJsYXlDb250YWluZXIuYXR0YWNoVGVtcGxhdGVQb3J0YWwobmV3IE5iVGVtcGxhdGVQb3J0YWwodGhpcy5jb250ZW50IGFzIFRlbXBsYXRlUmVmPGFueT4sIG51bGwsIHtcclxuICAgICAgJGltcGxpY2l0OiB0aGlzLmNvbnRleHQsXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYXR0YWNoQ29tcG9uZW50KCkge1xyXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IE5iQ29tcG9uZW50UG9ydGFsKHRoaXMuY29udGVudCBhcyBUeXBlPGFueT4sIG51bGwsIG51bGwsIHRoaXMuY2ZyKTtcclxuICAgIGNvbnN0IHJlZiA9IHRoaXMub3ZlcmxheUNvbnRhaW5lci5hdHRhY2hDb21wb25lbnRQb3J0YWwocG9ydGFsKTtcclxuICAgIE9iamVjdC5hc3NpZ24ocmVmLmluc3RhbmNlLCB0aGlzLmNvbnRleHQpO1xyXG4gICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbn1cclxuIl19