theme-lib
Version:
This is a simple example Angular Library published to npm.
221 lines (220 loc) • 17.6 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';
export class NbWindowComponent {
/**
* @param {?} content
* @param {?} context
* @param {?} windowRef
* @param {?} config
* @param {?} focusTrapFactory
* @param {?} elementRef
* @param {?} renderer
*/
constructor(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;
}
/**
* @return {?}
*/
get isFullScreen() {
return this.windowRef.state === NbWindowState.FULL_SCREEN;
}
/**
* @return {?}
*/
get maximized() {
return this.windowRef.state === NbWindowState.MAXIMIZED;
}
/**
* @return {?}
*/
get minimized() {
return this.windowRef.state === NbWindowState.MINIMIZED;
}
/**
* @return {?}
*/
ngOnInit() {
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 {?}
*/
ngAfterViewInit() {
if (this.content instanceof TemplateRef) {
this.attachTemplate();
}
else {
this.attachComponent();
}
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this.focusTrap) {
this.focusTrap.restoreFocus();
}
this.close();
}
/**
* @return {?}
*/
minimize() {
if (this.windowRef.state === NbWindowState.MINIMIZED) {
this.windowRef.toPreviousState();
}
else {
this.windowRef.minimize();
}
}
/**
* @return {?}
*/
maximize() {
this.windowRef.maximize();
}
/**
* @return {?}
*/
fullScreen() {
this.windowRef.fullScreen();
}
/**
* @return {?}
*/
maximizeOrFullScreen() {
if (this.windowRef.state === NbWindowState.MINIMIZED) {
this.maximize();
}
else {
this.fullScreen();
}
}
/**
* @return {?}
*/
close() {
this.windowRef.close();
}
/**
* @protected
* @return {?}
*/
attachTemplate() {
this.overlayContainer.attachTemplatePortal(new NbTemplatePortal((/** @type {?} */ (this.content)), null, {
$implicit: this.context,
}));
}
/**
* @protected
* @return {?}
*/
attachComponent() {
/** @type {?} */
const portal = new NbComponentPortal((/** @type {?} */ (this.content)), null, null, this.cfr);
/** @type {?} */
const ref = this.overlayContainer.attachComponentPortal(portal);
Object.assign(ref.instance, this.context);
ref.changeDetectorRef.detectChanges();
}
}
NbWindowComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-window',
template: `
<nb-card>
<nb-card-header>
<div cdkFocusInitial class="title" tabindex="-1">{{ config.title }}</div>
<div class="buttons">
<button class="button" (click)="minimize()">
<i class="nb-fold"></i>
</button>
<button class="button" *ngIf="isFullScreen" (click)="maximize()">
<i class="nb-minimize"></i>
</button>
<button class="button" *ngIf="minimized || maximized" (click)="maximizeOrFullScreen()">
<i class="nb-maximize"></i>
</button>
<button class="button" (click)="close()">
<i class="nb-close"></i>
</button>
</div>
</nb-card-header>
<nb-card-body *ngIf="maximized || isFullScreen">
<nb-overlay-container></nb-overlay-container>
</nb-card-body>
</nb-card>
`,
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 = () => [
{ 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,] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3dpbmRvdy93aW5kb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUdOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUF1Qix3QkFBd0IsRUFBRSxLQUFLLEdBQ2hFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxpQkFBaUIsRUFFakIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQixnQkFBZ0IsR0FDakIsTUFBTSxRQUFRLENBQUM7QUFFaEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBK0IzQyxNQUFNLE9BQU8saUJBQWlCOzs7Ozs7Ozs7O0lBc0I1QixZQUNvQyxPQUEyQyxFQUMzQyxPQUFlLEVBQzFDLFNBQXNCLEVBQ3RCLE1BQXNCLEVBQ25CLGdCQUEyQyxFQUMzQyxVQUFzQixFQUN0QixRQUFtQjtRQU5LLFlBQU8sR0FBUCxPQUFPLENBQW9DO1FBQzNDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDMUMsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUNuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTJCO1FBQzNDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUM1QixDQUFDOzs7O0lBM0JKLElBQ0ksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLFdBQVcsQ0FBQztJQUM1RCxDQUFDOzs7O0lB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SUFDeEMsQ0FBQzs7O1lBOUhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsV0FBVztnQkFDckIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3QlQ7O2FBRUY7Ozs7NENBd0JJLE1BQU0sU0FBQyxpQkFBaUI7WUFDa0IsTUFBTSx1QkFBaEQsTUFBTSxTQUFDLGlCQUFpQjtZQXZEcEIsV0FBVztZQURRLGNBQWM7WUFMeEMseUJBQXlCO1lBWnpCLFVBQVU7WUFNVixTQUFTOzs7a0JBNENSLEtBQUs7MkJBRUwsV0FBVyxTQUFDLG1CQUFtQjt3QkFLL0IsV0FBVyxTQUFDLGlCQUFpQjt3QkFLN0IsV0FBVyxTQUFDLGlCQUFpQjsrQkFLN0IsU0FBUyxTQUFDLDJCQUEyQjs7OztJQWpCdEMsZ0NBQXVDOztJQWlCdkMsNkNBQXNGOzs7OztJQUV0RixzQ0FBaUM7O0lBRy9CLG9DQUE2RTs7SUFDN0Usb0NBQWlEOztJQUNqRCxzQ0FBNkI7O0lBQzdCLG1DQUE2Qjs7Ozs7SUFDN0IsNkNBQXFEOzs7OztJQUNyRCx1Q0FBZ0M7Ozs7O0lBQ2hDLHFDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSW5qZWN0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCwgVHlwZSwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBJbnB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBOYkNvbXBvbmVudFBvcnRhbCxcclxuICBOYkZvY3VzVHJhcCxcclxuICBOYkZvY3VzVHJhcEZhY3RvcnlTZXJ2aWNlLFxyXG4gIE5iT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCxcclxuICBOYlRlbXBsYXRlUG9ydGFsLFxyXG59IGZyb20gJy4uL2Nkayc7XHJcbmltcG9ydCB7IE5iQ29tcG9uZW50VHlwZSB9IGZyb20gJy4uL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgTkJfV0lORE9XX0NPTlRFTlQsIE5iV2luZG93Q29uZmlnLCBOYldpbmRvd1N0YXRlLCBOQl9XSU5ET1dfQ09OVEVYVCB9IGZyb20gJy4vd2luZG93Lm9wdGlvbnMnO1xyXG5pbXBvcnQgeyBOYldpbmRvd1JlZiB9IGZyb20gJy4vd2luZG93LXJlZic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLXdpbmRvdycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuYi1jYXJkPlxyXG4gICAgICA8bmItY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBjZGtGb2N1c0luaXRpYWwgY2xhc3M9XCJ0aXRsZVwiIHRhYmluZGV4PVwiLTFcIj57eyBjb25maWcudGl0bGUgfX08L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwibWluaW1pemUoKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm5iLWZvbGRcIj48L2k+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAqbmdJZj1cImlzRnVsbFNjcmVlblwiIChjbGljayk9XCJtYXhpbWl6ZSgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibmItbWluaW1pemVcIj48L2k+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAqbmdJZj1cIm1pbmltaXplZCB8fCBtYXhpbWl6ZWRcIiAoY2xpY2spPVwibWF4aW1pemVPckZ1bGxTY3JlZW4oKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm5iLW1heGltaXplXCI+PC9pPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJuYi1jbG9zZVwiPjwvaT5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25iLWNhcmQtaGVhZGVyPlxyXG4gICAgICA8bmItY2FyZC1ib2R5ICpuZ0lmPVwibWF4aW1pemVkIHx8IGlzRnVsbFNjcmVlblwiPlxyXG4gICAgICAgIDxuYi1vdmVybGF5LWNvbnRhaW5lcj48L25iLW92ZXJsYXktY29udGFpbmVyPlxyXG4gICAgICA8L25iLWNhcmQtYm9keT5cclxuICAgIDwvbmItY2FyZD5cclxuICBgLFxyXG4gIHN0eWxlVXJsczogWycuL3dpbmRvdy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmJXaW5kb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZnVsbC1zY3JlZW4nKVxyXG4gIGdldCBpc0Z1bGxTY3JlZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy53aW5kb3dSZWYuc3RhdGUgPT09IE5iV2luZG93U3RhdGUuRlVMTF9TQ1JFRU47XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1heGltaXplZCcpXHJcbiAgZ2V0IG1heGltaXplZCgpIHtcclxuICAgIHJldHVybiB0aGlzLndpbmRvd1JlZi5zdGF0ZSA9PT0gTmJXaW5kb3dTdGF0ZS5NQVhJTUlaRUQ7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1pbmltaXplZCcpXHJcbiAgZ2V0IG1pbmltaXplZCgpIHtcclxuICAgIHJldHVybiB0aGlzLndpbmRvd1JlZi5zdGF0ZSA9PT0gTmJXaW5kb3dTdGF0ZS5NSU5JTUlaRUQ7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKE5iT3ZlcmxheUNvbnRhaW5lckNvbXBvbmVudCkgb3ZlcmxheUNvbnRhaW5lcjogTmJPdmVybGF5Q29udGFpbmVyQ29tcG9uZW50O1xyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNUcmFwOiBOYkZvY3VzVHJhcDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE5CX1dJTkRPV19DT05URU5UKSBwdWJsaWMgY29udGVudDogVGVtcGxhdGVSZWY8YW55PiB8IE5iQ29tcG9uZW50VHlwZSxcclxuICAgIEBJbmplY3QoTkJfV0lORE9XX0NPTlRFWFQpIHB1YmxpYyBjb250ZXh0OiBPYmplY3QsXHJcbiAgICBwdWJsaWMgd2luZG93UmVmOiBOYldpbmRvd1JlZixcclxuICAgIHB1YmxpYyBjb25maWc6IE5iV2luZG93Q29uZmlnLFxyXG4gICAgcHJvdGVjdGVkIGZvY3VzVHJhcEZhY3Rvcnk6IE5iRm9jdXNUcmFwRmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmZvY3VzVHJhcCA9IHRoaXMuZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5mb2N1c1RyYXAuYmx1clByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpO1xyXG4gICAgdGhpcy5mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy53aW5kb3dDbGFzcykge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmNvbmZpZy53aW5kb3dDbGFzcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcclxuICAgICAgdGhpcy5hdHRhY2hUZW1wbGF0ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hdHRhY2hDb21wb25lbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuZm9jdXNUcmFwKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNUcmFwLnJlc3RvcmVGb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIG1pbmltaXplKCkge1xyXG4gICAgaWYgKHRoaXMud2luZG93UmVmLnN0YXRlID09PSBOYldpbmRvd1N0YXRlLk1JTklNSVpFRCkge1xyXG4gICAgICB0aGlzLndpbmRvd1JlZi50b1ByZXZpb3VzU3RhdGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMud2luZG93UmVmLm1pbmltaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYXhpbWl6ZSgpIHtcclxuICAgIHRoaXMud2luZG93UmVmLm1heGltaXplKCk7XHJcbiAgfVxyXG5cclxuICBmdWxsU2NyZWVuKCkge1xyXG4gICAgdGhpcy53aW5kb3dSZWYuZnVsbFNjcmVlbigpO1xyXG4gIH1cclxuXHJcbiAgbWF4aW1pemVPckZ1bGxTY3JlZW4oKSB7XHJcbiAgICBpZiAodGhpcy53aW5kb3dSZWYuc3RhdGUgPT09IE5iV2luZG93U3RhdGUuTUlOSU1JWkVEKSB7XHJcbiAgICAgIHRoaXMubWF4aW1pemUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZnVsbFNjcmVlbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLndpbmRvd1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGF0dGFjaFRlbXBsYXRlKCkge1xyXG4gICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmF0dGFjaFRlbXBsYXRlUG9ydGFsKG5ldyBOYlRlbXBsYXRlUG9ydGFsKHRoaXMuY29udGVudCBhcyBUZW1wbGF0ZVJlZjxhbnk+LCBudWxsLCB7XHJcbiAgICAgICRpbXBsaWNpdDogdGhpcy5jb250ZXh0LFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGF0dGFjaENvbXBvbmVudCgpIHtcclxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBOYkNvbXBvbmVudFBvcnRhbCh0aGlzLmNvbnRlbnQgYXMgVHlwZTxhbnk+LCBudWxsLCBudWxsLCB0aGlzLmNmcik7XHJcbiAgICBjb25zdCByZWYgPSB0aGlzLm92ZXJsYXlDb250YWluZXIuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHBvcnRhbCk7XHJcbiAgICBPYmplY3QuYXNzaWduKHJlZi5pbnN0YW5jZSwgdGhpcy5jb250ZXh0KTtcclxuICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==