UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

234 lines 19.1 kB
/** * @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