UNPKG

@hxui/angular

Version:

* * *

206 lines 20.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import { DOCUMENT } from '@angular/common'; import { ApplicationRef, ComponentFactoryResolver, Inject, Injectable, } from '@angular/core'; import { DomPortalHost } from '../portal/dom-portal-host'; import { OverlayContainer } from './overlay-container'; import { OverlayRef } from './overlay-ref'; import { ToastrPosition } from '../toastr-config'; import * as i0 from "@angular/core"; import * as i1 from "./overlay-container"; import * as i2 from "@angular/common"; /** * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be * used as a low-level building building block for other components. Dialogs, tooltips, menus, * selects, etc. can all be built using overlays. The service should primarily be used by authors * of re-usable components rather than developers building end-user applications. * * An overlay *is* a PortalHost, so any kind of Portal can be loaded into one. */ var Overlay = /** @class */ (function () { function Overlay(_overlayContainer, _componentFactoryResolver, _appRef, _document) { this._overlayContainer = _overlayContainer; this._componentFactoryResolver = _componentFactoryResolver; this._appRef = _appRef; this._document = _document; // Namespace panes by overlay container this._paneElements = new Map(); } /** * Creates an overlay. * @returns A reference to the created overlay. */ /** * Creates an overlay. * @param {?=} position * @param {?=} overlayContainer * @return {?} A reference to the created overlay. */ Overlay.prototype.create = /** * Creates an overlay. * @param {?=} position * @param {?=} overlayContainer * @return {?} A reference to the created overlay. */ function (position, overlayContainer) { // get existing pane if possible return this._createOverlayRef(this.getPaneElement(position, overlayContainer)); }; /** * @param {?=} position * @param {?=} overlayContainer * @return {?} */ Overlay.prototype.getPaneElement = /** * @param {?=} position * @param {?=} overlayContainer * @return {?} */ function (position, overlayContainer) { if (position === void 0) { position = ToastrPosition.TOP_RIGHT; } if (!this._paneElements.get(overlayContainer)) { this._paneElements.set(overlayContainer, {}); } if (!this._paneElements.get(overlayContainer)[position]) { this._paneElements.get(overlayContainer)[position] = this._createPaneElement(position, overlayContainer); } return this._paneElements.get(overlayContainer)[position]; }; /** * Creates the DOM element for an overlay and appends it to the overlay container. * @returns Newly-created pane element */ /** * Creates the DOM element for an overlay and appends it to the overlay container. * @param {?} position * @param {?=} overlayContainer * @return {?} Newly-created pane element */ Overlay.prototype._createPaneElement = /** * Creates the DOM element for an overlay and appends it to the overlay container. * @param {?} position * @param {?=} overlayContainer * @return {?} Newly-created pane element */ function (position, overlayContainer) { /** @type {?} */ var pane = this._document.createElement('div'); pane.id = 'hxa-toastr-container'; /// pane.classList.add(positionClass); pane.classList.add('hxa-toastr-container'); pane.classList.add('hxui-reset'); pane.style.position = 'fixed'; pane.style['z-index'] = 1000; if (position === ToastrPosition.CENTER_CENTER) { pane.style.top = '50%'; pane.style.left = '50%'; pane.style.transform = 'translate(-50%, -50%)'; } else if (position === ToastrPosition.TOP_CENTER) { pane.style.top = '0'; pane.style.right = '0'; pane.style.width = '100%'; } else if (position === ToastrPosition.BOTTOM_CENTER) { pane.style.bottom = '0'; pane.style.right = '0'; pane.style.width = '100%'; } else if (position === ToastrPosition.TOP_FULL_WIDTH) { pane.style.top = '0'; pane.style.right = '0'; pane.style.width = '100%'; } else if (position === ToastrPosition.BOTTOM_FULL_WIDTH) { pane.style.bottom = '0'; pane.style.right = '0'; pane.style.width = '100%'; } else if (position === ToastrPosition.TOP_LEFT) { pane.style.top = '2rem'; pane.style.left = '2rem'; } else if (position === ToastrPosition.TOP_RIGHT) { pane.style.top = '2rem'; pane.style.right = '2rem'; } else if (position === ToastrPosition.BOTTOM_RIGHT) { pane.style.bottom = '2rem'; pane.style.right = '2rem'; } else if (position === ToastrPosition.BOTTOM_LEFT) { pane.style.bottom = '2rem'; pane.style.left = '2rem'; } if (!overlayContainer) { this._overlayContainer.getContainerElement().appendChild(pane); } else { overlayContainer.getContainerElement().appendChild(pane); } return pane; }; /** * Create a DomPortalHost into which the overlay content can be loaded. * @param pane The DOM element to turn into a portal host. * @returns A portal host for the given DOM element. */ /** * Create a DomPortalHost into which the overlay content can be loaded. * @param {?} pane The DOM element to turn into a portal host. * @return {?} A portal host for the given DOM element. */ Overlay.prototype._createPortalHost = /** * Create a DomPortalHost into which the overlay content can be loaded. * @param {?} pane The DOM element to turn into a portal host. * @return {?} A portal host for the given DOM element. */ function (pane) { return new DomPortalHost(pane, this._componentFactoryResolver, this._appRef); }; /** * Creates an OverlayRef for an overlay in the given DOM element. * @param pane DOM element for the overlay */ /** * Creates an OverlayRef for an overlay in the given DOM element. * @param {?} pane DOM element for the overlay * @return {?} */ Overlay.prototype._createOverlayRef = /** * Creates an OverlayRef for an overlay in the given DOM element. * @param {?} pane DOM element for the overlay * @return {?} */ function (pane) { return new OverlayRef(this._createPortalHost(pane)); }; Overlay.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] }, ]; /** @nocollapse */ Overlay.ctorParameters = function () { return [ { type: OverlayContainer }, { type: ComponentFactoryResolver }, { type: ApplicationRef }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } ]; }; /** @nocollapse */ Overlay.ngInjectableDef = i0.defineInjectable({ factory: function Overlay_Factory() { return new Overlay(i0.inject(i1.OverlayContainer), i0.inject(i0.ComponentFactoryResolver), i0.inject(i0.ApplicationRef), i0.inject(i2.DOCUMENT)); }, token: Overlay, providedIn: "root" }); return Overlay; }()); export { Overlay }; if (false) { /** @type {?} */ Overlay.prototype._paneElements; /** @type {?} */ Overlay.prototype._overlayContainer; /** @type {?} */ Overlay.prototype._componentFactoryResolver; /** @type {?} */ Overlay.prototype._appRef; /** @type {?} */ Overlay.prototype._document; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BoeHVpL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvdG9hc3RyL292ZXJsYXkvb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLE1BQU0sRUFDTixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7QUFVaEQ7SUFRRSxpQkFDVSxpQkFBbUMsRUFDbkMseUJBQW1ELEVBQ25ELE9BQXVCLEVBQ0wsU0FBYztRQUhoQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMEI7UUFDbkQsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDTCxjQUFTLEdBQVQsU0FBUyxDQUFLOztRQVRsQyxrQkFBYSxHQUdqQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBT1gsQ0FBQztJQUNKOzs7T0FHRzs7Ozs7OztJQUNILHdCQUFNOzs7Ozs7SUFBTixVQUNFLFFBQXlCLEVBQ3pCLGdCQUEyQztRQUUzQyxnQ0FBZ0M7UUFDaEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQ2hELENBQUM7SUFDSixDQUFDOzs7Ozs7SUFFRCxnQ0FBYzs7Ozs7SUFBZCxVQUNFLFFBQW1ELEVBQ25ELGdCQUEyQztRQUQzQyx5QkFBQSxFQUFB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SUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7Z0JBM0hGLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7Ozs7Z0JBWnpCLGdCQUFnQjtnQkFQdkIsd0JBQXdCO2dCQUR4QixjQUFjO2dEQWdDWCxNQUFNLFNBQUMsUUFBUTs7O2tCQWxDcEI7Q0FrSkMsQUE1SEQsSUE0SEM7U0EzSFksT0FBTzs7O0lBRWxCLGdDQUdjOztJQUdaLG9DQUEyQzs7SUFDM0MsNENBQTJEOztJQUMzRCwwQkFBK0I7O0lBQy9CLDRCQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBcHBsaWNhdGlvblJlZixcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIEluamVjdGFibGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBEb21Qb3J0YWxIb3N0IH0gZnJvbSAnLi4vcG9ydGFsL2RvbS1wb3J0YWwtaG9zdCc7XHJcbmltcG9ydCB7IFRvYXN0ckNvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4uL3RvYXN0ci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPdmVybGF5Q29udGFpbmVyIH0gZnJvbSAnLi9vdmVybGF5LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICcuL292ZXJsYXktcmVmJztcclxuaW1wb3J0IHtUb2FzdHJQb3NpdGlvbn0gZnJvbSAnLi4vdG9hc3RyLWNvbmZpZyc7XHJcblxyXG4vKipcclxuICogU2VydmljZSB0byBjcmVhdGUgT3ZlcmxheXMuIE92ZXJsYXlzIGFyZSBkeW5hbWljYWxseSBhZGRlZCBwaWVjZXMgb2YgZmxvYXRpbmcgVUksIG1lYW50IHRvIGJlXHJcbiAqIHVzZWQgYXMgYSBsb3ctbGV2ZWwgYnVpbGRpbmcgYnVpbGRpbmcgYmxvY2sgZm9yIG90aGVyIGNvbXBvbmVudHMuIERpYWxvZ3MsIHRvb2x0aXBzLCBtZW51cyxcclxuICogc2VsZWN0cywgZXRjLiBjYW4gYWxsIGJlIGJ1aWx0IHVzaW5nIG92ZXJsYXlzLiBUaGUgc2VydmljZSBzaG91bGQgcHJpbWFyaWx5IGJlIHVzZWQgYnkgYXV0aG9yc1xyXG4gKiBvZiByZS11c2FibGUgY29tcG9uZW50cyByYXRoZXIgdGhhbiBkZXZlbG9wZXJzIGJ1aWxkaW5nIGVuZC11c2VyIGFwcGxpY2F0aW9ucy5cclxuICpcclxuICogQW4gb3ZlcmxheSAqaXMqIGEgUG9ydGFsSG9zdCwgc28gYW55IGtpbmQgb2YgUG9ydGFsIGNhbiBiZSBsb2FkZWQgaW50byBvbmUuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgT3ZlcmxheSB7XHJcbiAgLy8gTmFtZXNwYWNlIHBhbmVzIGJ5IG92ZXJsYXkgY29udGFpbmVyXHJcbiAgcHJpdmF0ZSBfcGFuZUVsZW1lbnRzOiBNYXA8XHJcbiAgICBUb2FzdHJDb250YWluZXJEaXJlY3RpdmUsXHJcbiAgICB7IHN0cmluZz86IEhUTUxFbGVtZW50IH1cclxuICA+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX292ZXJsYXlDb250YWluZXI6IE92ZXJsYXlDb250YWluZXIsXHJcbiAgICBwcml2YXRlIF9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX2FwcFJlZjogQXBwbGljYXRpb25SZWYsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxyXG4gICkge31cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIG92ZXJsYXkuXHJcbiAgICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIGNyZWF0ZWQgb3ZlcmxheS5cclxuICAgKi9cclxuICBjcmVhdGUoXHJcbiAgICBwb3NpdGlvbj86IFRvYXN0clBvc2l0aW9uLFxyXG4gICAgb3ZlcmxheUNvbnRhaW5lcj86IFRvYXN0ckNvbnRhaW5lckRpcmVjdGl2ZSxcclxuICApOiBPdmVybGF5UmVmIHtcclxuICAgIC8vIGdldCBleGlzdGluZyBwYW5lIGlmIHBvc3NpYmxlXHJcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlT3ZlcmxheVJlZihcclxuICAgICAgdGhpcy5nZXRQYW5lRWxlbWVudChwb3NpdGlvbiwgb3ZlcmxheUNvbnRhaW5lciksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFuZUVsZW1lbnQoXHJcbiAgICBwb3NpdGlvbjogVG9hc3RyUG9zaXRpb24gPSBUb2FzdHJQb3NpdGlvbi5UT1BfUklHSFQsXHJcbiAgICBvdmVybGF5Q29udGFpbmVyPzogVG9hc3RyQ29udGFpbmVyRGlyZWN0aXZlLFxyXG4gICk6IEhUTUxFbGVtZW50IHtcclxuICAgIGlmICghdGhpcy5fcGFuZUVsZW1lbnRzLmdldChvdmVybGF5Q29udGFpbmVyKSkge1xyXG4gICAgICB0aGlzLl9wYW5lRWxlbWVudHMuc2V0KG92ZXJsYXlDb250YWluZXIsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3BhbmVFbGVtZW50cy5nZXQob3ZlcmxheUNvbnRhaW5lcilbcG9zaXRpb25dKSB7XHJcbiAgICAgIHRoaXMuX3BhbmVFbGVtZW50cy5nZXQob3ZlcmxheUNvbnRhaW5lcilbcG9zaXRpb25dID0gdGhpcy5fY3JlYXRlUGFuZUVsZW1lbnQocG9zaXRpb24sIG92ZXJsYXlDb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9wYW5lRWxlbWVudHMuZ2V0KG92ZXJsYXlDb250YWluZXIpW3Bvc2l0aW9uXTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIHRoZSBET00gZWxlbWVudCBmb3IgYW4gb3ZlcmxheSBhbmQgYXBwZW5kcyBpdCB0byB0aGUgb3ZlcmxheSBjb250YWluZXIuXHJcbiAgICogQHJldHVybnMgTmV3bHktY3JlYXRlZCBwYW5lIGVsZW1lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9jcmVhdGVQYW5lRWxlbWVudChcclxuICAgIHBvc2l0aW9uOiBUb2FzdHJQb3NpdGlvbixcclxuICAgIG92ZXJsYXlDb250YWluZXI/OiBUb2FzdHJDb250YWluZXJEaXJlY3RpdmUsXHJcbiAgKTogSFRNTEVsZW1lbnQge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cclxuICAgIHBhbmUuaWQgPSAnaHhhLXRvYXN0ci1jb250YWluZXInO1xyXG4gICAgLy8vIHBhbmUuY2xhc3NMaXN0LmFkZChwb3NpdGlvbkNsYXNzKTtcclxuICAgIHBhbmUuY2xhc3NMaXN0LmFkZCgnaHhhLXRvYXN0ci1jb250YWluZXInKTtcclxuICAgIHBhbmUuY2xhc3NMaXN0LmFkZCgnaHh1aS1yZXNldCcpO1xyXG4gICAgcGFuZS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICBwYW5lLnN0eWxlWyd6LWluZGV4J10gPSAxMDAwO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gVG9hc3RyUG9zaXRpb24uQ0VOVEVSX0NFTlRFUikge1xyXG4gICAgICBwYW5lLnN0eWxlLnRvcCA9ICc1MCUnO1xyXG4gICAgICBwYW5lLnN0eWxlLmxlZnQgPSAnNTAlJztcclxuICAgICAgcGFuZS5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlKC01MCUsIC01MCUpJztcclxuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFRvYXN0clBvc2l0aW9uLlRPUF9DRU5URVIpIHtcclxuICAgICAgcGFuZS5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICAgIHBhbmUuc3R5bGUucmlnaHQgPSAnMCc7XHJcbiAgICAgIHBhbmUuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBUb2FzdHJQb3NpdGlvbi5CT1RUT01fQ0VOVEVSKSB7XHJcbiAgICAgIHBhbmUuc3R5bGUuYm90dG9tID0gJzAnO1xyXG4gICAgICBwYW5lLnN0eWxlLnJpZ2h0ID0gJzAnO1xyXG4gICAgICBwYW5lLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gVG9hc3RyUG9zaXRpb24uVE9QX0ZVTExfV0lEVEgpIHtcclxuICAgICAgcGFuZS5zdHlsZS50b3AgPSAnMCc7XHJcbiAgICAgIHBhbmUuc3R5bGUucmlnaHQgPSAnMCc7XHJcbiAgICAgIHBhbmUuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBUb2FzdHJQb3NpdGlvbi5CT1RUT01fRlVMTF9XSURUSCkge1xyXG4gICAgICBwYW5lLnN0eWxlLmJvdHRvbSA9ICcwJztcclxuICAgICAgcGFuZS5zdHlsZS5yaWdodCA9ICcwJztcclxuICAgICAgcGFuZS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFRvYXN0clBvc2l0aW9uLlRPUF9MRUZUKSB7XHJcbiAgICAgIHBhbmUuc3R5bGUudG9wID0gJzJyZW0nO1xyXG4gICAgICBwYW5lLnN0eWxlLmxlZnQgPSAnMnJlbSc7XHJcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBUb2FzdHJQb3NpdGlvbi5UT1BfUklHSFQpIHtcclxuICAgICAgcGFuZS5zdHlsZS50b3AgPSAnMnJlbSc7XHJcbiAgICAgIHBhbmUuc3R5bGUucmlnaHQgPSAnMnJlbSc7XHJcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBUb2FzdHJQb3NpdGlvbi5CT1RUT01fUklHSFQpIHtcclxuICAgICAgcGFuZS5zdHlsZS5ib3R0b20gPSAnMnJlbSc7XHJcbiAgICAgIHBhbmUuc3R5bGUucmlnaHQgPSAnMnJlbSc7XHJcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09PSBUb2FzdHJQb3NpdGlvbi5CT1RUT01fTEVGVCkge1xyXG4gICAgICBwYW5lLnN0eWxlLmJvdHRvbSA9ICcycmVtJztcclxuICAgICAgcGFuZS5zdHlsZS5sZWZ0ID0gJzJyZW0nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb3ZlcmxheUNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZChwYW5lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG92ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHBhbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgRG9tUG9ydGFsSG9zdCBpbnRvIHdoaWNoIHRoZSBvdmVybGF5IGNvbnRlbnQgY2FuIGJlIGxvYWRlZC5cclxuICAgKiBAcGFyYW0gcGFuZSBUaGUgRE9NIGVsZW1lbnQgdG8gdHVybiBpbnRvIGEgcG9ydGFsIGhvc3QuXHJcbiAgICogQHJldHVybnMgQSBwb3J0YWwgaG9zdCBmb3IgdGhlIGdpdmVuIERPTSBlbGVtZW50LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NyZWF0ZVBvcnRhbEhvc3QocGFuZTogSFRNTEVsZW1lbnQpOiBEb21Qb3J0YWxIb3N0IHtcclxuICAgIHJldHVybiBuZXcgRG9tUG9ydGFsSG9zdChcclxuICAgICAgcGFuZSxcclxuICAgICAgdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICB0aGlzLl9hcHBSZWYsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhbiBPdmVybGF5UmVmIGZvciBhbiBvdmVybGF5IGluIHRoZSBnaXZlbiBET00gZWxlbWVudC5cclxuICAgKiBAcGFyYW0gcGFuZSBET00gZWxlbWVudCBmb3IgdGhlIG92ZXJsYXlcclxuICAgKi9cclxuICBwcml2YXRlIF9jcmVhdGVPdmVybGF5UmVmKHBhbmU6IEhUTUxFbGVtZW50KTogT3ZlcmxheVJlZiB7XHJcbiAgICByZXR1cm4gbmV3IE92ZXJsYXlSZWYodGhpcy5fY3JlYXRlUG9ydGFsSG9zdChwYW5lKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==