UNPKG

@uex/web-extensions

Version:

Uex extensions for Angular 6+ web projects

393 lines 23.1 kB
/** * @fileoverview added by tsickle * Generated from: lib/modules/popover/popover.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ElementRef, Input } from '@angular/core'; import * as _ from 'lodash'; import PopperJS from 'popper.js'; import { ResizeSensor } from 'css-element-queries'; var PopoverComponent = /** @class */ (function () { function PopoverComponent(elementRef) { this.elementRef = elementRef; this._visible = false; this._placement = 'bottom-start'; this._use_target_width = false; this._use_target_min_width = false; this._default_size = { width: null, minWidth: null, maxHeight: null }; this.size = _.clone(this._default_size); } Object.defineProperty(PopoverComponent.prototype, "target", { get: /** * @return {?} */ function () { return this._target; }, set: /** * @param {?} target * @return {?} */ function (target) { var _this = this; setTimeout((/** * @return {?} */ function () { _this._target = target; _this.update(); })); }, enumerable: true, configurable: true }); Object.defineProperty(PopoverComponent.prototype, "visible", { get: /** * @return {?} */ function () { return this._visible; }, set: /** * @param {?} visible * @return {?} */ function (visible) { var _this = this; setTimeout((/** * @return {?} */ function () { _this._visible = visible; _this._updatePopper(); })); }, enumerable: true, configurable: true }); Object.defineProperty(PopoverComponent.prototype, "placement", { get: /** * @return {?} */ function () { return this._placement; }, set: /** * @param {?} placement * @return {?} */ function (placement) { this._placement = placement; this.update(); }, enumerable: true, configurable: true }); Object.defineProperty(PopoverComponent.prototype, "useTargetWidth", { get: /** * @return {?} */ function () { return this._use_target_width; }, set: /** * @param {?} use * @return {?} */ function (use) { var _this = this; setTimeout((/** * @return {?} */ function () { _this._use_target_width = use; _this.update(); })); }, enumerable: true, configurable: true }); Object.defineProperty(PopoverComponent.prototype, "useTargetMinWidth", { get: /** * @return {?} */ function () { return this._use_target_min_width; }, set: /** * @param {?} use * @return {?} */ function (use) { var _this = this; setTimeout((/** * @return {?} */ function () { _this._use_target_min_width = use; _this.update(); })); }, enumerable: true, configurable: true }); /** * @return {?} */ PopoverComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; this._resize_sensor = new ResizeSensor(this.elementRef.nativeElement, (/** * @return {?} */ function () { return _this._updatePopper(); })); }; /** * @return {?} */ PopoverComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this._resize_sensor) { this._resize_sensor.detach(); } if (this._popper) { this._popper.destroy(); } }; /** * @return {?} */ PopoverComponent.prototype.show = /** * @return {?} */ function () { this.visible = true; }; /** * @return {?} */ PopoverComponent.prototype.hide = /** * @return {?} */ function () { this.visible = false; }; /** * @return {?} */ PopoverComponent.prototype.update = /** * @return {?} */ function () { if (!this.visible) { return; } this._setPopper(); }; /** * @private * @return {?} */ PopoverComponent.prototype._setPopper = /** * @private * @return {?} */ function () { var _this = this; if (this._popper) { this._popper.destroy(); this._popper = null; } /** @type {?} */ var target = this._getTarget(); if (!target) { return; } setTimeout((/** * @return {?} */ function () { _this._popper = new PopperJS(target, _this.elementRef.nativeElement, { placement: _this._placement, positionFixed: true, onUpdate: (/** * @return {?} */ function () { return _this._setSize(); }) }); _this._popper.update(); })); }; /** * @private * @return {?} */ PopoverComponent.prototype._updatePopper = /** * @private * @return {?} */ function () { if (this._popper) { this._popper.update(); } else { this._setPopper(); } }; /** * @private * @return {?} */ PopoverComponent.prototype._setSize = /** * @private * @return {?} */ function () { if (!this.target) { return; } this.size = _.clone(this._default_size); /** @type {?} */ var target = this._getTarget(); /** @type {?} */ var target_rect = target.getBoundingClientRect(); if (this.useTargetWidth) { this.size.width = target_rect.width; } if (this.useTargetMinWidth) { this.size.minWidth = target_rect.width; } this._setMaxHeight(); }; /** * @private * @return {?} */ PopoverComponent.prototype._setMaxHeight = /** * @private * @return {?} */ function () { /** @type {?} */ var scroll_parent = this._getScrollParent(); if (!scroll_parent) { return; } /** @type {?} */ var parent_rect = scroll_parent.getBoundingClientRect(); this.size.maxHeight = parent_rect.height * 0.8; }; /** * @private * @return {?} */ PopoverComponent.prototype._getTarget = /** * @private * @return {?} */ function () { return this.target.elementRef ? this.target.elementRef.nativeElement : this.target; }; /** * @private * @param {?=} node * @return {?} */ PopoverComponent.prototype._getScrollParent = /** * @private * @param {?=} node * @return {?} */ function (node) { if (node === void 0) { node = this.elementRef.nativeElement; } if (node == null) { return null; } if (node != this.elementRef.nativeElement && node.scrollHeight > node.clientHeight) { return node; } else { return this._getScrollParent(node.parentNode); } }; PopoverComponent.decorators = [ { type: Component, args: [{ selector: 'uex-popover', template: '<ng-content></ng-content>', host: { class: 'uex-popover', '[class.visible]': 'visible', '[style.width.px]': 'size.width', '[style.min-width.px]': 'size.minWidth', '[style.max-height.px]': 'size.maxHeight' } }] } ]; /** @nocollapse */ PopoverComponent.ctorParameters = function () { return [ { type: ElementRef } ]; }; PopoverComponent.propDecorators = { target: [{ type: Input }], visible: [{ type: Input }], placement: [{ type: Input }], useTargetWidth: [{ type: Input }], useTargetMinWidth: [{ type: Input }] }; return PopoverComponent; }()); export { PopoverComponent }; if (false) { /** * @type {?} * @private */ PopoverComponent.prototype._popper; /** * @type {?} * @private */ PopoverComponent.prototype._target; /** * @type {?} * @private */ PopoverComponent.prototype._visible; /** * @type {?} * @private */ PopoverComponent.prototype._placement; /** * @type {?} * @private */ PopoverComponent.prototype._use_target_width; /** * @type {?} * @private */ PopoverComponent.prototype._use_target_min_width; /** * @type {?} * @private */ PopoverComponent.prototype._resize_sensor; /** * @type {?} * @private */ PopoverComponent.prototype._default_size; /** @type {?} */ PopoverComponent.prototype.size; /** @type {?} */ PopoverComponent.prototype.elementRef; } /** * @record */ export function IPopoverSize() { } if (false) { /** @type {?} */ IPopoverSize.prototype.width; /** @type {?} */ IPopoverSize.prototype.minWidth; /** @type {?} */ IPopoverSize.prototype.maxHeight; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWV4L3dlYi1leHRlbnNpb25zLyIsInNvdXJjZXMiOlsibGliL21vZHVsZXMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFdkYsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRDtJQWlERSwwQkFDUyxVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBS3ZCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUF1QixjQUFjLENBQUM7UUFDaEQsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUc5QixrQkFBYSxHQUFpQjtZQUNwQyxLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztRQUNLLFNBQUksR0FBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFmcEQsQ0FBQztJQXRDTCxzQkFDTSxvQ0FBTTs7OztRQU1WLGNBQW9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Ozs7O1FBUDVDLFVBQ2EsTUFBVztZQUR4QixpQkFNRztZQUpDLFVBQVU7OztZQUFDO2dCQUNULEtBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUN0QixLQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFDLENBQUM7UUFDTCxDQUFDOzs7T0FBQTtJQUVILHNCQUNNLHFDQUFPOzs7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Qjs7Ozs7O0lBMEMzQixtQ0FBMEI7Ozs7O0lBQzFCLG1DQUFxQjs7Ozs7SUFDckIsb0NBQXlCOzs7OztJQUN6QixzQ0FBd0Q7Ozs7O0lBQ3hELDZDQUFrQzs7Ozs7SUFDbEMsaURBQXNDOzs7OztJQUN0QywwQ0FBcUM7Ozs7O0lBRXJDLHlDQUlFOztJQUNGLGdDQUF3RDs7SUFoQnRELHNDQUE2Qjs7Ozs7QUErR2pDLGtDQUlDOzs7SUFIQyw2QkFBYzs7SUFDZCxnQ0FBaUI7O0lBQ2pCLGlDQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgUG9wcGVySlMgZnJvbSAncG9wcGVyLmpzJztcclxuaW1wb3J0IHsgUmVzaXplU2Vuc29yIH0gZnJvbSAnY3NzLWVsZW1lbnQtcXVlcmllcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VleC1wb3BvdmVyJyxcclxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAndWV4LXBvcG92ZXInLFxyXG4gICAgJ1tjbGFzcy52aXNpYmxlXSc6ICd2aXNpYmxlJyxcclxuICAgICdbc3R5bGUud2lkdGgucHhdJzogJ3NpemUud2lkdGgnLFxyXG4gICAgJ1tzdHlsZS5taW4td2lkdGgucHhdJzogJ3NpemUubWluV2lkdGgnLFxyXG4gICAgJ1tzdHlsZS5tYXgtaGVpZ2h0LnB4XSc6ICdzaXplLm1heEhlaWdodCdcclxuICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KClcclxuICAgIHNldCB0YXJnZXQodGFyZ2V0OiBhbnkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IHRhcmdldCgpOiBhbnkgeyByZXR1cm4gdGhpcy5fdGFyZ2V0OyB9XHJcbiAgQElucHV0KClcclxuICAgIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZpc2libGU7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUG9wcGVyKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl92aXNpYmxlOyB9XHJcbiAgQElucHV0KClcclxuICAgIHNldCBwbGFjZW1lbnQocGxhY2VtZW50OiBQb3BwZXJKUy5QbGFjZW1lbnQpIHsgdGhpcy5fcGxhY2VtZW50ID0gcGxhY2VtZW50OyB0aGlzLnVwZGF0ZSgpOyB9XHJcbiAgICBnZXQgcGxhY2VtZW50KCk6IFBvcHBlckpTLlBsYWNlbWVudCB7IHJldHVybiB0aGlzLl9wbGFjZW1lbnQ7IH1cclxuICBASW5wdXQoKVxyXG4gICAgc2V0IHVzZVRhcmdldFdpZHRoKHVzZTogYm9vbGVhbikge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLl91c2VfdGFyZ2V0X3dpZHRoID0gdXNlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZVRhcmdldFdpZHRoKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fdXNlX3RhcmdldF93aWR0aDsgfVxyXG4gIEBJbnB1dCgpXHJcbiAgICBzZXQgdXNlVGFyZ2V0TWluV2lkdGgodXNlOiBib29sZWFuKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3VzZV90YXJnZXRfbWluX3dpZHRoID0gdXNlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZVRhcmdldE1pbldpZHRoKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fdXNlX3RhcmdldF9taW5fd2lkdGg7IH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgX3BvcHBlcjogUG9wcGVySlM7XHJcbiAgcHJpdmF0ZSBfdGFyZ2V0OiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmlzaWJsZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3BsYWNlbWVudDogUG9wcGVySlMuUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XHJcbiAgcHJpdmF0ZSBfdXNlX3RhcmdldF93aWR0aCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3VzZV90YXJnZXRfbWluX3dpZHRoID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcmVzaXplX3NlbnNvcjogUmVzaXplU2Vuc29yO1xyXG5cclxuICBwcml2YXRlIF9kZWZhdWx0X3NpemU6IElQb3BvdmVyU2l6ZSA9IHtcclxuICAgIHdpZHRoOiBudWxsLFxyXG4gICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICBtYXhIZWlnaHQ6IG51bGxcclxuICB9O1xyXG4gIHB1YmxpYyBzaXplOiBJUG9wb3ZlclNpemUgPSBfLmNsb25lKHRoaXMuX2RlZmF1bHRfc2l6ZSk7XHJcblxyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLl9yZXNpemVfc2Vuc29yID0gbmV3IFJlc2l6ZVNlbnNvcih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgKCkgPT4gdGhpcy5fdXBkYXRlUG9wcGVyKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZV9zZW5zb3IpIHsgdGhpcy5fcmVzaXplX3NlbnNvci5kZXRhY2goKTsgfVxyXG4gICAgaWYgKHRoaXMuX3BvcHBlcikgeyB0aGlzLl9wb3BwZXIuZGVzdHJveSgpOyB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvdygpIHtcclxuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZSgpIHtcclxuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZSgpIHtcclxuICAgIGlmICghdGhpcy52aXNpYmxlKSB7IHJldHVybjsgfVxyXG4gICAgdGhpcy5fc2V0UG9wcGVyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRQb3BwZXIoKSB7XHJcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XHJcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0KCk7XHJcblxyXG4gICAgaWYgKCF0YXJnZXQpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3BvcHBlciA9IG5ldyBQb3BwZXJKUyh0YXJnZXQsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgICAgcGxhY2VtZW50OiB0aGlzLl9wbGFjZW1lbnQsXHJcbiAgICAgICAgcG9zaXRpb25GaXhlZDogdHJ1ZSxcclxuICAgICAgICBvblVwZGF0ZTogKCkgPT4gdGhpcy5fc2V0U2l6ZSgpXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVBvcHBlcigpIHtcclxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcclxuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2V0UG9wcGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRTaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhcmdldCkgeyByZXR1cm47IH1cclxuXHJcbiAgICB0aGlzLnNpemUgPSBfLmNsb25lKHRoaXMuX2RlZmF1bHRfc2l6ZSk7XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0KCk7XHJcbiAgICBjb25zdCB0YXJnZXRfcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICBpZiAodGhpcy51c2VUYXJnZXRXaWR0aCkge1xyXG4gICAgICB0aGlzLnNpemUud2lkdGggPSB0YXJnZXRfcmVjdC53aWR0aDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVzZVRhcmdldE1pbldpZHRoKSB7XHJcbiAgICAgIHRoaXMuc2l6ZS5taW5XaWR0aCA9IHRhcmdldF9yZWN0LndpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NldE1heEhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0TWF4SGVpZ2h0KCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsX3BhcmVudCA9IHRoaXMuX2dldFNjcm9sbFBhcmVudCgpO1xyXG4gICAgaWYgKCFzY3JvbGxfcGFyZW50KSB7IHJldHVybjsgfVxyXG5cclxuICAgIGNvbnN0IHBhcmVudF9yZWN0ID0gc2Nyb2xsX3BhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIHRoaXMuc2l6ZS5tYXhIZWlnaHQgPSBwYXJlbnRfcmVjdC5oZWlnaHQgKiAwLjg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRUYXJnZXQoKTogSFRNTEVsZW1lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0LmVsZW1lbnRSZWYgPyB0aGlzLnRhcmdldC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgOiB0aGlzLnRhcmdldDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFNjcm9sbFBhcmVudChub2RlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgIGlmIChub2RlID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGUgIT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiYgbm9kZS5zY3JvbGxIZWlnaHQgPiBub2RlLmNsaWVudEhlaWdodCkge1xyXG4gICAgICByZXR1cm4gbm9kZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9nZXRTY3JvbGxQYXJlbnQobm9kZS5wYXJlbnROb2RlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBvcG92ZXJTaXplIHtcclxuICB3aWR0aDogbnVtYmVyO1xyXG4gIG1pbldpZHRoOiBudW1iZXI7XHJcbiAgbWF4SGVpZ2h0OiBudW1iZXI7XHJcbn1cclxuIl19