UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

136 lines 17 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { Overlay, OverlayConfig, OverlayContainer, } from "@angular/cdk/overlay"; import { DOCUMENT } from "@angular/common"; import { Inject, Injectable, Optional } from "@angular/core"; import { Subject } from "rxjs"; import { OVERLAY_CONTAINER } from "./constants"; import { OVERLAY_PANEL_CLASS } from "./types"; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/overlay"; /* @dynamic */ /** * @ignore */ export class OverlayService { get overlayConfig() { if (!this._overlayConfig) { this.defineOverlayConfig(); } return this._overlayConfig; } set overlayConfig(value) { this._overlayConfig = value; } constructor(overlay, overlayContainer, document, customContainerInjection) { this.overlay = overlay; this.overlayContainer = overlayContainer; this.document = document; this.customContainerInjection = customContainerInjection; // props/outputs this.showing = false; this.show$ = new Subject(); this.hide$ = new Subject(); } createOverlay() { this.appendToContainer(); this.overlayRef = this.overlay.create(this.overlayConfig); this.overlayRef.attach(this.contentTemplate); this.overlayRef.addPanelClass(OVERLAY_PANEL_CLASS); } show() { if (this.showing) { return; } this.createOverlay(); this.showing = true; this.show$.next(); } hide() { if (!this.showing) { return; } this.disposeOverlayRef(); this.showing = false; this.hide$.next(); } getOverlayRef() { return this.overlayRef; } updateSize(size) { this.overlayRef?.updateSize(size); } ngOnDestroy() { this.show$.complete(); this.hide$.complete(); } defineOverlayConfig() { const positionStrategy = this.overlay .position() .global() .centerHorizontally() .centerVertically(); const scrollStrategy = this.overlay.scrollStrategies.reposition(); this._overlayConfig = new OverlayConfig({ positionStrategy, scrollStrategy, hasBackdrop: false, disposeOnNavigation: true, backdropClass: "cdk-overlay-transparent-backdrop", }); } disposeOverlayRef() { if (this.overlayRef?.hasAttached()) { this.overlayRef.dispose(); } } appendToContainer() { let container; const customContainer = this.customContainer || this.customContainerInjection; // input is a priority if (customContainer) { container = typeof customContainer === "string" ? this.document.querySelector(customContainer) ?? undefined : customContainer.nativeElement; if (!container) { console.warn(`Specified container is not found: ${customContainer}. \nAppending to body.`); container = this.document.body; } } else { container = this.document.body; } this.overlayContainer.setContainer(container); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OverlayService, deps: [{ token: i1.Overlay }, { token: i1.OverlayContainer }, { token: DOCUMENT }, { token: OVERLAY_CONTAINER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OverlayService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OverlayService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.Overlay }, { type: i1.OverlayContainer }, { type: Document, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [OVERLAY_CONTAINER] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9vdmVybGF5L292ZXJsYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUNILE9BQU8sRUFDUCxhQUFhLEVBQ2IsZ0JBQWdCLEdBR25CLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRCxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFFcEUsY0FBYztBQUNkOztHQUVHO0FBRUgsTUFBTSxPQUFPLGNBQWM7SUFVdkIsSUFBVyxhQUFhO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFXLGFBQWEsQ0FBQyxLQUFvQjtRQUN6QyxJQUFJLENBQUMsY0FBYyxH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Q0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDdkIsZUFBZSxDQUNsQixJQUFJLFNBQVM7b0JBQ2hCLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO1lBRXhDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osT0FBTyxDQUFDLElBQUksQ0FDUixxQ0FBcUMsZUFBZSx3QkFBd0IsQ0FDL0UsQ0FBQztnQkFDRixTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7YUFDbEM7U0FDSjthQUFNO1lBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ2xDO1FBRUEsSUFBSSxDQUFDLGdCQUEyQyxDQUFDLFlBQVksQ0FDMUQsU0FBUyxDQUNaLENBQUM7SUFDTixDQUFDOytHQXhIUSxjQUFjLHlFQXlCWCxRQUFRLGFBRVIsaUJBQWlCO21IQTNCcEIsY0FBYzs7NEZBQWQsY0FBYztrQkFEMUIsVUFBVTs7MEJBMEJGLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgICBPdmVybGF5LFxuICAgIE92ZXJsYXlDb25maWcsXG4gICAgT3ZlcmxheUNvbnRhaW5lcixcbiAgICBPdmVybGF5UmVmLFxuICAgIE92ZXJsYXlTaXplQ29uZmlnLFxufSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7IFBvcnRhbCB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgT1ZFUkxBWV9DT05UQUlORVIgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE92ZXJsYXlDdXN0b21Db250YWluZXIgfSBmcm9tIFwiLi9vdmVybGF5LWN1c3RvbS1jb250YWluZXJcIjtcbmltcG9ydCB7IE92ZXJsYXlDb250YWluZXJUeXBlLCBPVkVSTEFZX1BBTkVMX0NMQVNTIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyogQGR5bmFtaWMgKi9cbi8qKlxuICogQGlnbm9yZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3ZlcmxheVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8vIGlucHV0c1xuICAgIHB1YmxpYyBjb250ZW50VGVtcGxhdGU6IFBvcnRhbDxhbnk+OyAvLyBkb3VibGUgY2hlY2sgdGhlIHR5cGVcbiAgICBwdWJsaWMgY3VzdG9tQ29udGFpbmVyOiBPdmVybGF5Q29udGFpbmVyVHlwZTtcblxuICAgIC8vIHByb3BzL291dHB1dHNcbiAgICBwdWJsaWMgc2hvd2luZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBzaG93JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHVibGljIGhpZGUkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBnZXQgb3ZlcmxheUNvbmZpZygpOiBPdmVybGF5Q29uZmlnIHtcbiAgICAgICAgaWYgKCF0aGlzLl9vdmVybGF5Q29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmluZU92ZXJsYXlDb25maWcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheUNvbmZpZztcbiAgICB9XG4gICAgcHVibGljIHNldCBvdmVybGF5Q29uZmlnKHZhbHVlOiBPdmVybGF5Q29uZmlnKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlDb25maWcgPSB2YWx1ZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfb3ZlcmxheUNvbmZpZzogT3ZlcmxheUNvbmZpZztcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHByb3RlY3RlZCBvdmVybGF5Q29udGFpbmVyOiBPdmVybGF5Q29udGFpbmVyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KE9WRVJMQVlfQ09OVEFJTkVSKVxuICAgICAgICBwcml2YXRlIGN1c3RvbUNvbnRhaW5lckluamVjdGlvbjogT3ZlcmxheUNvbnRhaW5lclR5cGVcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgY3JlYXRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hcHBlbmRUb0NvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHRoaXMub3ZlcmxheUNvbmZpZyk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2godGhpcy5jb250ZW50VGVtcGxhdGUpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyhPVkVSTEFZX1BBTkVMX0NMQVNTKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd2luZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xuXG4gICAgICAgIHRoaXMuc2hvd2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvdyQubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd2luZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcG9zZU92ZXJsYXlSZWYoKTtcblxuICAgICAgICB0aGlzLnNob3dpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oaWRlJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE92ZXJsYXlSZWYoKTogT3ZlcmxheVJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVNpemUoc2l6ZTogT3ZlcmxheVNpemVDb25maWcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy51cGRhdGVTaXplKHNpemUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmhpZGUkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWZpbmVPdmVybGF5Q29uZmlnKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgLmdsb2JhbCgpXG4gICAgICAgICAgICAuY2VudGVySG9yaXpvbnRhbGx5KClcbiAgICAgICAgICAgIC5jZW50ZXJWZXJ0aWNhbGx5KCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlDb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3ksXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBkaXNwb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogXCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc3Bvc2VPdmVybGF5UmVmKCkge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmRUb0NvbnRhaW5lcigpOiB2b2lkIHtcbiAgICAgICAgbGV0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbnRhaW5lciA9XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUNvbnRhaW5lciB8fCB0aGlzLmN1c3RvbUNvbnRhaW5lckluamVjdGlvbjsgLy8gaW5wdXQgaXMgYSBwcmlvcml0eVxuXG4gICAgICAgIGlmIChjdXN0b21Db250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIGN1c3RvbUNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICkgPz8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIDogY3VzdG9tQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICBgU3BlY2lmaWVkIGNvbnRhaW5lciBpcyBub3QgZm91bmQ6ICR7Y3VzdG9tQ29udGFpbmVyfS4gXFxuQXBwZW5kaW5nIHRvIGJvZHkuYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gdGhpcy5kb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGFpbmVyID0gdGhpcy5kb2N1bWVudC5ib2R5O1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMub3ZlcmxheUNvbnRhaW5lciBhcyBPdmVybGF5Q3VzdG9tQ29udGFpbmVyKS5zZXRDb250YWluZXIoXG4gICAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=