@hxui/angular
Version:
* * *
206 lines • 20.5 kB
JavaScript
/**
* @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==