UNPKG

ngx-smart-popover

Version:

Simple popover control for your angular (v4+) applications using bootstrap4 with smart reflection logic when overflowing the viewport. This is a continuation of ngx-popover (https://github.com/pleerock/ngx-popover). If you want to use it without bootstrap

923 lines 99.9 kB
/** * @fileoverview added by tsickle * Generated from: lib/popover-content.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * This is a continuation of ngx-popover * @Reference {github} https://github.com/pleerock/ngx-popover */ import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Renderer2, ViewChild, HostListener } from '@angular/core'; import { PopoverPlacement } from './popover.placement'; var PopoverContentComponent = /** @class */ (function () { // ------------------------------------------------------------------------- // Constructor // ------------------------------------------------------------------------- function PopoverContentComponent(element, cdr, renderer) { var _this = this; this.element = element; this.cdr = cdr; this.renderer = renderer; this.placement = PopoverPlacement.Top; this.animation = true; this.closeOnClickOutside = false; this.closeOnMouseOutside = false; this.appendToBody = false; this.size = 'small'; this.onCloseFromOutside = new EventEmitter(); this.top = -10000; this.left = -10000; this.isIn = false; this.opacity = 0; this.transitionEnabled = false; this.windowWidth = window.innerWidth; this.windowHeight = window.innerHeight; // ------------------------------------------------------------------------- // Anonymous // ------------------------------------------------------------------------- /** * Closes dropdown if user clicks outside of this directive. */ this.onDocumentMouseDown = (/** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var element = _this.element.nativeElement; if (!element || !_this.popover) { return; } if (element.contains(event.target) || _this.popover.getElement().contains(event.target)) { return; } _this.onCloseFromOutside.emit(undefined); }); } // ------------------------------------------------------------------------- // Lifecycle callbacks // ------------------------------------------------------------------------- // ------------------------------------------------------------------------- // Lifecycle callbacks // ------------------------------------------------------------------------- /** * @return {?} */ PopoverContentComponent.prototype.ngAfterViewInit = // ------------------------------------------------------------------------- // Lifecycle callbacks // ------------------------------------------------------------------------- /** * @return {?} */ function () { var _this = this; if (this.closeOnClickOutside) { this.listenClickFunc = this.renderer.listen('document', 'mousedown', (/** * @param {?} event * @return {?} */ function (event) { return _this.onDocumentMouseDown(event); })); } if (this.closeOnMouseOutside) { this.listenMouseFunc = this.renderer.listen('document', 'mouseover', (/** * @param {?} event * @return {?} */ function (event) { return _this.onDocumentMouseDown(event); })); } // Always close on mobile touch event outside. this.listenTouchFunc = this.renderer.listen('document', 'touchstart', (/** * @param {?} event * @return {?} */ function (event) { return _this.onDocumentMouseDown(event); })); this.show(); this.cdr.detectChanges(); }; /** * @return {?} */ PopoverContentComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.closeOnClickOutside && this.listenClickFunc) { this.listenClickFunc(); } if (this.closeOnMouseOutside && this.listenMouseFunc) { this.listenMouseFunc(); } if (!!this.listenTouchFunc) { this.listenTouchFunc(); } }; // ------------------------------------------------------------------------- // Public Methods // ------------------------------------------------------------------------- // ------------------------------------------------------------------------- // Public Methods // ------------------------------------------------------------------------- /** * @param {?} event * @return {?} */ PopoverContentComponent.prototype.onResize = // ------------------------------------------------------------------------- // Public Methods // ------------------------------------------------------------------------- /** * @param {?} event * @return {?} */ function (event) { this.windowWidth = window.innerWidth; this.windowHeight = window.innerHeight; }; /** * @return {?} */ PopoverContentComponent.prototype.updatePosition = /** * @return {?} */ function () { // if visible, reposition if (this.opacity) { /** @type {?} */ var p = this.positionElements(this.popover.getElement(), this.popoverDiv.nativeElement, this.placement); this.top = p.top; this.left = p.left; } }; /** * @return {?} */ PopoverContentComponent.prototype.show = /** * @return {?} */ function () { if (!this.popover || !this.popover.getElement()) { return; } /** @type {?} */ var p = this.positionElements(this.popover.getElement(), this.popoverDiv.nativeElement, this.placement); this.top = p.top; this.left = p.left; this.isIn = true; this.transitionEnabled = true; this.opacity = 1; }; /** * @return {?} */ PopoverContentComponent.prototype.hide = /** * @return {?} */ function () { this.top = -10000; this.left = -10000; this.isIn = true; this.popover.hide(); }; /** * @return {?} */ PopoverContentComponent.prototype.hideFromPopover = /** * @return {?} */ function () { this.top = -10000; this.left = -10000; this.isIn = true; this.transitionEnabled = false; this.opacity = 0; }; // ------------------------------------------------------------------------- // Protected Methods // ------------------------------------------------------------------------- // ------------------------------------------------------------------------- // Protected Methods // ------------------------------------------------------------------------- /** * @protected * @param {?} hostEl * @param {?} targetEl * @param {?} positionStr * @param {?=} appendToBody * @return {?} */ PopoverContentComponent.prototype.positionElements = // ------------------------------------------------------------------------- // Protected Methods // ------------------------------------------------------------------------- /** * @protected * @param {?} hostEl * @param {?} targetEl * @param {?} positionStr * @param {?=} appendToBody * @return {?} */ function (hostEl, targetEl, positionStr, appendToBody) { if (appendToBody === void 0) { appendToBody = false; } /** @type {?} */ var positionStrParts = ((/** @type {?} */ (positionStr))).split(' '); /** @type {?} */ var pos0 = positionStrParts[0]; /** @type {?} */ var pos1 = positionStrParts[1] || 'center'; /** @type {?} */ var hostElPos = this.appendToBody || appendToBody ? this.offset(hostEl) : this.position(hostEl); /** @type {?} */ var targetElWidth = targetEl.offsetWidth; /** @type {?} */ var targetElHeight = targetEl.offsetHeight; this.effectivePlacement = pos0 = this.getEffectivePlacement(pos0, hostEl, targetEl); /** @type {?} */ var shiftWidth = { center: (/** * @return {?} */ function () { return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2; }), left: (/** * @return {?} */ function () { return hostElPos.left; }), right: (/** * @return {?} */ function () { return hostElPos.left + hostElPos.width; }), topOrBottomRight: (/** * @return {?} */ function () { return hostElPos.left + hostElPos.width / 2; }), topOrBottomLeft: (/** * @return {?} */ function () { return hostElPos.left - targetElWidth + hostElPos.width / 2; }) }; /** @type {?} */ var shiftHeight = { center: (/** * @return {?} */ function () { return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2; }), top: (/** * @return {?} */ function () { return hostElPos.top; }), bottom: (/** * @return {?} */ function () { return hostElPos.top + hostElPos.height; }) }; /** @type {?} */ var targetElPos; switch (pos0) { case PopoverPlacement.Right: targetElPos = { top: shiftHeight[pos1](), left: shiftWidth[pos0]() }; break; case PopoverPlacement.Left: targetElPos = { top: shiftHeight[pos1](), left: hostElPos.left - targetElWidth }; break; case PopoverPlacement.Bottom: targetElPos = { top: shiftHeight[pos0](), left: shiftWidth[pos1]() }; break; case PopoverPlacement.TopLeft: targetElPos = { top: hostElPos.top - targetElHeight, left: shiftWidth['topOrBottomLeft']() }; break; case PopoverPlacement.TopRight: targetElPos = { top: hostElPos.top - targetElHeight, left: shiftWidth['topOrBottomRight']() }; break; case PopoverPlacement.BottomLeft: targetElPos = { top: shiftHeight[PopoverPlacement.Bottom](), left: shiftWidth['topOrBottomLeft']() }; break; case PopoverPlacement.BottomRight: targetElPos = { top: shiftHeight[PopoverPlacement.Bottom](), left: shiftWidth['topOrBottomRight']() }; break; default: targetElPos = { top: hostElPos.top - targetElHeight, left: shiftWidth[pos1]() }; break; } return targetElPos; }; /** * @protected * @param {?} nativeEl * @return {?} */ PopoverContentComponent.prototype.position = /** * @protected * @param {?} nativeEl * @return {?} */ function (nativeEl) { /** @type {?} */ var offsetParentBCR = { top: 0, left: 0 }; /** @type {?} */ var elBCR = this.offset(nativeEl); /** @type {?} */ var offsetParentEl = this.parentOffsetEl(nativeEl); if (offsetParentEl !== window.document) { offsetParentBCR = this.offset(offsetParentEl); offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop; offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft; } /** @type {?} */ var boundingClientRect = nativeEl.getBoundingClientRect(); return { width: boundingClientRect.width || nativeEl.offsetWidth, height: boundingClientRect.height || nativeEl.offsetHeight, top: elBCR.top - offsetParentBCR.top, left: elBCR.left - offsetParentBCR.left }; }; /** * @protected * @param {?} nativeEl * @return {?} */ PopoverContentComponent.prototype.offset = /** * @protected * @param {?} nativeEl * @return {?} */ function (nativeEl) { /** @type {?} */ var boundingClientRect = nativeEl.getBoundingClientRect(); return { width: boundingClientRect.width || nativeEl.offsetWidth, height: boundingClientRect.height || nativeEl.offsetHeight, top: boundingClientRect.top + (window.pageYOffset || window.document.documentElement.scrollTop), left: boundingClientRect.left + (window.pageXOffset || window.document.documentElement.scrollLeft) }; }; /** * @protected * @param {?} nativeEl * @param {?} cssProp * @return {?} */ PopoverContentComponent.prototype.getStyle = /** * @protected * @param {?} nativeEl * @param {?} cssProp * @return {?} */ function (nativeEl, cssProp) { if (((/** @type {?} */ (nativeEl))).currentStyle) { // IE return ((/** @type {?} */ (nativeEl))).currentStyle[cssProp]; } if (window.getComputedStyle) { return ((/** @type {?} */ (window.getComputedStyle)))(nativeEl)[cssProp]; } // finally try and get inline style return ((/** @type {?} */ (nativeEl.style)))[cssProp]; }; /** * @protected * @param {?} nativeEl * @return {?} */ PopoverContentComponent.prototype.isStaticPositioned = /** * @protected * @param {?} nativeEl * @return {?} */ function (nativeEl) { return (this.getStyle(nativeEl, 'position') || 'static') === 'static'; }; /** * @protected * @param {?} nativeEl * @return {?} */ PopoverContentComponent.prototype.parentOffsetEl = /** * @protected * @param {?} nativeEl * @return {?} */ function (nativeEl) { /** @type {?} */ var offsetParent = nativeEl.offsetParent || window.document; while (offsetParent && offsetParent !== window.document && this.isStaticPositioned(offsetParent)) { offsetParent = offsetParent.offsetParent; } return offsetParent || window.document; }; // Check for overflow of the viewport and reflect the position if necessary. // Check for overflow of the viewport and reflect the position if necessary. /** * @protected * @param {?} placement * @param {?} hostElement * @param {?} targetElement * @return {?} */ PopoverContentComponent.prototype.getEffectivePlacement = // Check for overflow of the viewport and reflect the position if necessary. /** * @protected * @param {?} placement * @param {?} hostElement * @param {?} targetElement * @return {?} */ function (placement, hostElement, targetElement) { /** @type {?} */ var hostElBoundingRect = hostElement.getBoundingClientRect(); /** @type {?} */ var desiredPlacement = placement || PopoverPlacement.Top; // Determines if a popover overflows in a direction when in a specific position. /** @type {?} */ var overflows = { positionTop: { top: hostElBoundingRect.top - targetElement.offsetHeight < 0, right: hostElBoundingRect.left + hostElBoundingRect.width / 2 + targetElement.offsetWidth / 2 > this.windowWidth, left: hostElBoundingRect.left + hostElBoundingRect.width / 2 - targetElement.offsetWidth / 2 < 0 }, positionTopRight: { top: hostElBoundingRect.top - targetElement.offsetHeight < 0, right: hostElBoundingRect.right + targetElement.offsetWidth > this.windowWidth }, positionRight: { top: hostElBoundingRect.top + hostElBoundingRect.height / 2 - targetElement.offsetHeight / 2 < 0, right: hostElBoundingRect.right + targetElement.offsetWidth > this.windowWidth, bottom: hostElBoundingRect.top + hostElBoundingRect.height / 2 + targetElement.offsetHeight / 2 > this.windowHeight }, positionBottomRight: { right: hostElBoundingRect.right + targetElement.offsetWidth > this.windowWidth, bottom: hostElBoundingRect.bottom + targetElement.offsetHeight > this.windowHeight }, positionBottom: { right: hostElBoundingRect.left + hostElBoundingRect.width / 2 + targetElement.offsetWidth / 2 > this.windowWidth, bottom: hostElBoundingRect.bottom + targetElement.offsetHeight > this.windowHeight, left: hostElBoundingRect.left + hostElBoundingRect.width / 2 - targetElement.offsetWidth / 2 < 0 }, positionBottomLeft: { bottom: hostElBoundingRect.bottom + targetElement.offsetHeight > this.windowHeight, left: hostElBoundingRect.left - targetElement.offsetWidth < 0 }, positionLeft: { left: hostElBoundingRect.left < targetElement.offsetWidth, top: hostElBoundingRect.top + hostElBoundingRect.height / 2 - targetElement.offsetHeight / 2 < 0, bottom: hostElBoundingRect.top + hostElBoundingRect.height / 2 + targetElement.offsetHeight / 2 > this.windowHeight }, positionTopLeft: { top: hostElBoundingRect.top - targetElement.offsetHeight < 0, left: hostElBoundingRect.left - targetElement.offsetWidth < 0 } }; if (desiredPlacement === PopoverPlacement.Top) { // If it overflows on the top AND left, go to bottom-right. if (overflows.positionTop.top && overflows.positionTop.left) { return PopoverPlacement.BottomRight; // If it overflows on the top AND right, go to bottom-left. } else if (overflows.positionTop.top && overflows.positionTop.right) { return PopoverPlacement.BottomLeft; // If it only overflows on the top, go to bottom. } else if (overflows.positionTop.top) { return PopoverPlacement.Bottom; // If it only overflows to the right, go to top-left. } else if (overflows.positionTop.right) { return PopoverPlacement.TopLeft; // If it only overflows to the left, go to top-right. } else if (overflows.positionTop.left) { return PopoverPlacement.TopRight; } else { return PopoverPlacement.Top; } } if (desiredPlacement === PopoverPlacement.TopRight) { // If it overflows on the top AND the right, try in the order: bottom, Bottom-left, left. if (overflows.positionTopRight.top && overflows.positionTopRight.right) { if (overflows.positionBottom.bottom) { return PopoverPlacement.Left; } else if (overflows.positionBottom.right) { return PopoverPlacement.BottomLeft; } else { return PopoverPlacement.Bottom; } // If it only overflows on the top, try in the order: right, bottom-right. } else if (overflows.positionTopRight.top) { if (overflows.positionRight.top) { return PopoverPlacement.BottomRight; } else { return PopoverPlacement.Right; } // If it only overflows on the right, try in the order: top, top-left. } else if (overflows.positionTopRight.right) { if (overflows.positionTop.right) { return PopoverPlacement.TopLeft; } else { return PopoverPlacement.Top; } } else { return PopoverPlacement.TopRight; } } if (desiredPlacement === PopoverPlacement.Right) { // If it overflows on the right AND the top, try in the order: bottom-right, bottom, bottom-left. if (overflows.positionRight.right && overflows.positionRight.top) { if (overflows.positionBottomRight.right && overflows.positionBottom.right) { return PopoverPlacement.BottomLeft; } else if (overflows.positionBottomRight.right) { return PopoverPlacement.Bottom; } else { return PopoverPlacement.BottomRight; } // If it overflows on the right AND the bottom, try in the order: top-right, top, top-left. } else if (overflows.positionRight.right && overflows.positionRight.bottom) { if (overflows.positionTopRight.right && overflows.positionTop.right) { return PopoverPlacement.TopLeft; } else if (overflows.positionTopRight.right) { return PopoverPlacement.Top; } else { return PopoverPlacement.TopRight; } // If it only overflows on the right, try all top positions from right to left, then try all bottom positions right to left. } else if (overflows.positionRight.right) { if (overflows.positionTop.top) { if (overflows.positionBottom.right) { return PopoverPlacement.BottomLeft; } else if (overflows.positionBottomRight.right) { return PopoverPlacement.Bottom; } else { return PopoverPlacement.BottomRight; } } else { if (overflows.positionTop.right) { return PopoverPlacement.TopLeft; } else if (overflows.positionTopRight.right) { return PopoverPlacement.Top; } else { return PopoverPlacement.TopRight; } } // If it only over flows on the top, go bottom-right. } else if (overflows.positionRight.top) { return PopoverPlacement.BottomRight; // If it only overflows on the bottom, go top-right. } else if (overflows.positionRight.bottom) { return PopoverPlacement.TopRight; } else { return PopoverPlacement.Right; } } if (desiredPlacement === PopoverPlacement.BottomRight) { // If it overflows on the bottom AND the right, try in the order: top, top-left, left. if (overflows.positionBottomRight.bottom && overflows.positionBottomRight.right) { if (overflows.positionTop.top) { return PopoverPlacement.Left; } else if (overflows.positionTop.right) { return PopoverPlacement.TopLeft; } else { return PopoverPlacement.Top; } // If it only overflows on the bottom, try in the order: right, top-right. } else if (overflows.positionBottomRight.bottom) { if (overflows.positionRight.bottom) { return PopoverPlacement.TopRight; } else { return PopoverPlacement.Right; } // If it only overflows on the right, try in the order: bottom, bottom-left. } else if (overflows.positionBottomRight.right) { if (overflows.positionBottom.right) { return PopoverPlacement.BottomLeft; } else { return PopoverPlacement.Bottom; } } else { return PopoverPlacement.BottomRight; } } if (desiredPlacement === PopoverPlacement.Bottom) { // If it overflows on the bottom AND left, go to top-right. if (overflows.positionBottom.bottom && overflows.positionBottom.left) { return PopoverPlacement.TopRight; // If it overflows on the bottom AND right, go to top-left. } else if (overflows.positionBottom.bottom && overflows.positionBottom.right) { return PopoverPlacement.TopLeft; // If it only overflows on the bottom, go to top. } else if (overflows.positionBottom.bottom) { return PopoverPlacement.Top; // If it only overflows to the right, go to bottom-left. } else if (overflows.positionBottom.right) { return PopoverPlacement.BottomLeft; // If it only overflows to the left, go to bottom-right. } else if (overflows.positionBottom.left) { return PopoverPlacement.BottomRight; } else { return PopoverPlacement.Bottom; } } if (desiredPlacement === PopoverPlacement.BottomLeft) { // If it overflows on the bottom AND the left, try in the order: top, top-right, right. if (overflows.positionBottomLeft.bottom && overflows.positionBottomLeft.left) { if (overflows.positionTop.top) { return PopoverPlacement.Right; } else if (overflows.positionTop.left) { return PopoverPlacement.TopRight; } else { return PopoverPlacement.Top; } // If it only overflows on the bottom, try in the order: left, top-left. } else if (overflows.positionBottomLeft.bottom) { if (overflows.positionLeft.bottom) { return PopoverPlacement.TopLeft; } else { return PopoverPlacement.Left; } // If it only overflows on the left, try in the order: bottom, bottom-right. } else if (overflows.positionBottomLeft.left) { if (overflows.positionBottom.left) { return PopoverPlacement.BottomRight; } else { return PopoverPlacement.Bottom; } } else { return PopoverPlacement.BottomLeft; } } if (desiredPlacement === PopoverPlacement.Left) { // If it overflows on the left AND the top, try in the order: bottom-left, bottom, bottom-right. if (overflows.positionLeft.left && overflows.positionLeft.top) { if (overflows.positionBottomLeft.left && overflows.positionBottom.left) { return PopoverPlacement.BottomRight; } else if (overflows.positionBottomRight.right) { return PopoverPlacement.Bottom; } else { return PopoverPlacement.BottomLeft; } // If it overflows on the left AND the bottom, try in the order: top-left, top, top-right. } else if (overflows.positionLeft.left && overflows.positionLeft.bottom) { if (overflows.positionTopLeft.left && overflows.positionTop.left) { return PopoverPlacement.TopRight; } else if (overflows.positionTopLeft.left) { return PopoverPlacement.Top; } else { return PopoverPlacement.TopLeft; } // If it only overflows on the left, try all top positions from left to right, then try all bottom positions left to right. } else if (overflows.positionLeft.left) { if (overflows.positionTop.top) { if (overflows.positionBottom.left) { return PopoverPlacement.BottomRight; } else if (overflows.positionBottomLeft.left) { return PopoverPlacement.Bottom; } else { return PopoverPlacement.BottomLeft; } } else { if (overflows.positionTop.left) { return PopoverPlacement.TopRight; } else if (overflows.positionTopLeft.left) { return PopoverPlacement.Top; } else { return PopoverPlacement.TopLeft; } } // If it only over flows on the top, go bottom-left. } else if (overflows.positionLeft.top) { return PopoverPlacement.BottomLeft; // If it only overflows on the bottom, go top-left. } else if (overflows.positionLeft.bottom) { return PopoverPlacement.TopLeft; } else { return PopoverPlacement.Left; } } if (desiredPlacement === PopoverPlacement.TopLeft) { // If it overflows on the top AND the left, try in the order: bottom, Bottom-right, right. if (overflows.positionTopLeft.top && overflows.positionTopLeft.left) { if (overflows.positionBottom.bottom) { return PopoverPlacement.Right; } else if (overflows.positionBottom.left) { return PopoverPlacement.BottomRight; } else { return PopoverPlacement.Bottom; } // If it only overflows on the top, try in the order: left, bottom-left. } else if (overflows.positionTopLeft.top) { if (overflows.positionLeft.top) { return PopoverPlacement.BottomLeft; } else { return PopoverPlacement.Left; } // If it only overflows on the left, try in the order: top, top-right. } else if (overflows.positionTopLeft.left) { if (overflows.positionTop.left) { return PopoverPlacement.TopRight; } else { return PopoverPlacement.Top; } } else { return PopoverPlacement.TopLeft; } } return desiredPlacement; }; PopoverContentComponent.decorators = [ { type: Component, args: [{ selector: 'popover-content', template: "\n <div #popoverDiv\n class=\"bs-popover-{{ effectivePlacement }} popover-content popover {{ parentClass }}\"\n [ngClass]=\"{\n 'sm': size === 'small',\n 'md-sm': size === 'medium-small',\n 'md': size === 'medium',\n 'lg': size === 'large',\n 'in': isIn\n }\"\n [style.top.px]=\"top\"\n [style.left.px]=\"left\"\n [style.transition]=\"(transitionEnabled ? '0.15s opacity' : '')\"\n [style.opacity]=\"opacity\"\n [style.display]=\"'block'\"\n [attr.aria-hidden]=\"opacity === 0\"\n role=\"popover\">\n <div [hidden]=\"!closeOnMouseOutside\" class=\"virtual-area\"></div>\n <div class=\"arrow\"></div>\n <div class=\"popover-header\" [hidden]=\"!title\">{{ title }}</div>\n <div class=\"popover-body\">\n <ng-content></ng-content>\n {{ content }}\n </div>\n </div>\n " }] } ]; /** @nocollapse */ PopoverContentComponent.ctorParameters = function () { return [ { type: ElementRef }, { type: ChangeDetectorRef }, { type: Renderer2 } ]; }; PopoverContentComponent.propDecorators = { content: [{ type: Input }], placement: [{ type: Input }], title: [{ type: Input }], parentClass: [{ type: Input }], animation: [{ type: Input }], closeOnClickOutside: [{ type: Input }], closeOnMouseOutside: [{ type: Input }], appendToBody: [{ type: Input }], size: [{ type: Input }], popoverDiv: [{ type: ViewChild, args: ['popoverDiv', { static: true },] }], onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }] }; return PopoverContentComponent; }()); export { PopoverContentComponent }; if (false) { /** @type {?} */ PopoverContentComponent.prototype.content; /** @type {?} */ PopoverContentComponent.prototype.placement; /** @type {?} */ PopoverContentComponent.prototype.title; /** @type {?} */ PopoverContentComponent.prototype.parentClass; /** @type {?} */ PopoverContentComponent.prototype.animation; /** @type {?} */ PopoverContentComponent.prototype.closeOnClickOutside; /** @type {?} */ PopoverContentComponent.prototype.closeOnMouseOutside; /** @type {?} */ PopoverContentComponent.prototype.appendToBody; /** @type {?} */ PopoverContentComponent.prototype.size; /** @type {?} */ PopoverContentComponent.prototype.popoverDiv; /** @type {?} */ PopoverContentComponent.prototype.popover; /** @type {?} */ PopoverContentComponent.prototype.onCloseFromOutside; /** @type {?} */ PopoverContentComponent.prototype.top; /** @type {?} */ PopoverContentComponent.prototype.left; /** @type {?} */ PopoverContentComponent.prototype.isIn; /** @type {?} */ PopoverContentComponent.prototype.effectivePlacement; /** @type {?} */ PopoverContentComponent.prototype.opacity; /** @type {?} */ PopoverContentComponent.prototype.transitionEnabled; /** @type {?} */ PopoverContentComponent.prototype.windowWidth; /** @type {?} */ PopoverContentComponent.prototype.windowHeight; /** @type {?} */ PopoverContentComponent.prototype.listenClickFunc; /** @type {?} */ PopoverContentComponent.prototype.listenMouseFunc; /** @type {?} */ PopoverContentComponent.prototype.listenTouchFunc; /** * Closes dropdown if user clicks outside of this directive. * @type {?} */ PopoverContentComponent.prototype.onDocumentMouseDown; /** * @type {?} * @protected */ PopoverContentComponent.prototype.element; /** * @type {?} * @protected */ PopoverContentComponent.prototype.cdr; /** * @type {?} * @protected */ PopoverContentComponent.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zbWFydC1wb3BvdmVyLyIsInNvdXJjZXMiOlsibGliL3BvcG92ZXItY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBS0EsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQ7SUFrRkksNEVBQTRFO0lBQzVFLGNBQWM7SUFDZCw0RUFBNEU7SUFFNUUsaUNBQXNCLE9BQW1CLEVBQ25CLEdBQXNCLEVBQ3RCLFFBQW1CO1FBRnpDLGlCQUdDO1FBSHFCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQXREekIsY0FBUyxHQUFxQixnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7UUFHbkQsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLFNBQUksR0FBMkQsT0FBTyxDQUFDO1FBUWhGLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEMsUUFBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2IsU0FBSSxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2QsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUViLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFDWixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFMUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ2hDLGlC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