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
861 lines • 96.1 kB
JavaScript
/**
* @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';
export class PopoverContentComponent {
// -------------------------------------------------------------------------
// Constructor
// -------------------------------------------------------------------------
/**
* @param {?} element
* @param {?} cdr
* @param {?} renderer
*/
constructor(element, cdr, renderer) {
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 {?}
*/
(event) => {
/** @type {?} */
const 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
// -------------------------------------------------------------------------
/**
* @return {?}
*/
ngAfterViewInit() {
if (this.closeOnClickOutside) {
this.listenClickFunc = this.renderer.listen('document', 'mousedown', (/**
* @param {?} event
* @return {?}
*/
(event) => this.onDocumentMouseDown(event)));
}
if (this.closeOnMouseOutside) {
this.listenMouseFunc = this.renderer.listen('document', 'mouseover', (/**
* @param {?} event
* @return {?}
*/
(event) => this.onDocumentMouseDown(event)));
}
// Always close on mobile touch event outside.
this.listenTouchFunc = this.renderer.listen('document', 'touchstart', (/**
* @param {?} event
* @return {?}
*/
(event) => this.onDocumentMouseDown(event)));
this.show();
this.cdr.detectChanges();
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this.closeOnClickOutside && this.listenClickFunc) {
this.listenClickFunc();
}
if (this.closeOnMouseOutside && this.listenMouseFunc) {
this.listenMouseFunc();
}
if (!!this.listenTouchFunc) {
this.listenTouchFunc();
}
}
// -------------------------------------------------------------------------
// Public Methods
// -------------------------------------------------------------------------
/**
* @param {?} event
* @return {?}
*/
onResize(event) {
this.windowWidth = window.innerWidth;
this.windowHeight = window.innerHeight;
}
/**
* @return {?}
*/
updatePosition() {
// if visible, reposition
if (this.opacity) {
/** @type {?} */
const p = this.positionElements(this.popover.getElement(), this.popoverDiv.nativeElement, this.placement);
this.top = p.top;
this.left = p.left;
}
}
/**
* @return {?}
*/
show() {
if (!this.popover || !this.popover.getElement()) {
return;
}
/** @type {?} */
const 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 {?}
*/
hide() {
this.top = -10000;
this.left = -10000;
this.isIn = true;
this.popover.hide();
}
/**
* @return {?}
*/
hideFromPopover() {
this.top = -10000;
this.left = -10000;
this.isIn = true;
this.transitionEnabled = false;
this.opacity = 0;
}
// -------------------------------------------------------------------------
// Protected Methods
// -------------------------------------------------------------------------
/**
* @protected
* @param {?} hostEl
* @param {?} targetEl
* @param {?} positionStr
* @param {?=} appendToBody
* @return {?}
*/
positionElements(hostEl, targetEl, positionStr, appendToBody = false) {
/** @type {?} */
const positionStrParts = ((/** @type {?} */ (positionStr))).split(' ');
/** @type {?} */
let pos0 = positionStrParts[0];
/** @type {?} */
const pos1 = positionStrParts[1] || 'center';
/** @type {?} */
const hostElPos = this.appendToBody || appendToBody ? this.offset(hostEl) : this.position(hostEl);
/** @type {?} */
const targetElWidth = targetEl.offsetWidth;
/** @type {?} */
const targetElHeight = targetEl.offsetHeight;
this.effectivePlacement = pos0 = this.getEffectivePlacement(pos0, hostEl, targetEl);
/** @type {?} */
const 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 {?} */
const 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 {?} */
let 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 {?}
*/
position(nativeEl) {
/** @type {?} */
let offsetParentBCR = { top: 0, left: 0 };
/** @type {?} */
const elBCR = this.offset(nativeEl);
/** @type {?} */
const 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 {?} */
const 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 {?}
*/
offset(nativeEl) {
/** @type {?} */
const 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 {?}
*/
getStyle(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 {?}
*/
isStaticPositioned(nativeEl) {
return (this.getStyle(nativeEl, 'position') || 'static') === 'static';
}
/**
* @protected
* @param {?} nativeEl
* @return {?}
*/
parentOffsetEl(nativeEl) {
/** @type {?} */
let 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.
/**
* @protected
* @param {?} placement
* @param {?} hostElement
* @param {?} targetElement
* @return {?}
*/
getEffectivePlacement(placement, hostElement, targetElement) {
/** @type {?} */
const hostElBoundingRect = hostElement.getBoundingClientRect();
/** @type {?} */
const desiredPlacement = placement || PopoverPlacement.Top;
// Determines if a popover overflows in a direction when in a specific position.
/** @type {?} */
const 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: `
<div #popoverDiv
class="bs-popover-{{ effectivePlacement }} popover-content popover {{ parentClass }}"
[ngClass]="{
'sm': size === 'small',
'md-sm': size === 'medium-small',
'md': size === 'medium',
'lg': size === 'large',
'in': isIn
}"
[style.top.px]="top"
[style.left.px]="left"
[style.transition]="(transitionEnabled ? '0.15s opacity' : '')"
[style.opacity]="opacity"
[style.display]="'block'"
[attr.aria-hidden]="opacity === 0"
role="popover">
<div [hidden]="!closeOnMouseOutside" class="virtual-area"></div>
<div class="arrow"></div>
<div class="popover-header" [hidden]="!title">{{ title }}</div>
<div class="popover-body">
<ng-content></ng-content>
{{ content }}
</div>
</div>
`
}] }
];
/** @nocollapse */
PopoverContentComponent.ctorParameters = () => [
{ 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'],] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1zbWFydC1wb3BvdmVyLyIsInNvdXJjZXMiOlsibGliL3BvcG92ZXItY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBS0EsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUErQnZELE1BQU0sT0FBTyx1QkFBdUI7Ozs7Ozs7OztJQXlEaEMsWUFBc0IsT0FBbUIsRUFDbkIsR0FBc0IsRUFDdEIsUUFBbUI7UUFGbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBdER6QixjQUFTLEdBQXFCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztRQUduRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1Qix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsU0FBSSxHQUEyRCxPQUFPLENBQUM7UUFRaEYsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN4QyxRQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDYixTQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZCxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDaEMsaUJBQVksR0FBRyxNQUFNLENBQUMsV0FB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