export function getPopoverStyle(placement, autoAdjustOverflow, size) { var containerRect = size.containerRect, childrenRect = size.childrenRect, contentRect = size.contentRect, systemInfo = size.systemInfo; var left = childrenRect.left - containerRect.left; var top = childrenRect.top - containerRect.top; var bottom = containerRect.bottom - childrenRect.bottom; var right = containerRect.right - childrenRect.right; var adjustedPlacement = placement; var arrowMargin = 12; var contentRectWidth = contentRect.width + arrowMargin; var contentRectHeight = contentRect.height + arrowMargin; if (autoAdjustOverflow) { if (adjustedPlacement === 'top') { if (childrenRect.top - contentRectHeight < 0) { adjustedPlacement = 'bottom'; } } else if (adjustedPlacement === 'bottom') { if (childrenRect.bottom + contentRectHeight > systemInfo.windowHeight) { adjustedPlacement = 'top'; } } else if (adjustedPlacement === 'left') { if (childrenRect.left - contentRectWidth < 0) { adjustedPlacement = 'right'; } } else if (adjustedPlacement === 'right') { if (childrenRect.right + contentRectWidth > systemInfo.windowWidth) { adjustedPlacement = 'left'; } } else if (adjustedPlacement === 'top-left') { if (childrenRect.top - contentRectHeight < 0) { adjustedPlacement = adjustedPlacement.replace('top', 'bottom'); } if (childrenRect.left + contentRectWidth > systemInfo.windowWidth) { adjustedPlacement = adjustedPlacement.replace('left', 'right'); } } else if (adjustedPlacement === 'top-right') { if (childrenRect.top - contentRectHeight < 0) { adjustedPlacement = adjustedPlacement.replace('top', 'bottom'); } if (childrenRect.right - contentRectWidth < 0) { adjustedPlacement = adjustedPlacement.replace('right', 'left'); } } else if (adjustedPlacement === 'bottom-left') { if (childrenRect.bottom + contentRectHeight > systemInfo.windowHeight) { adjustedPlacement = adjustedPlacement.replace('bottom', 'top'); } if (childrenRect.left + contentRectWidth > systemInfo.windowWidth) { adjustedPlacement = adjustedPlacement.replace('left', 'right'); } } else if (adjustedPlacement === 'bottom-right') { if (childrenRect.bottom + contentRectHeight > systemInfo.windowHeight) { adjustedPlacement = adjustedPlacement.replace('bottom', 'top'); } if (childrenRect.right - contentRectWidth < 0) { adjustedPlacement = adjustedPlacement.replace('right', 'left'); } } else if (adjustedPlacement === 'left-top') { if (childrenRect.left - contentRectWidth < 0) { adjustedPlacement = adjustedPlacement.replace('left', 'right'); } if (childrenRect.top + contentRectHeight > systemInfo.windowHeight) { adjustedPlacement = adjustedPlacement.replace('top', 'bottom'); } } else if (adjustedPlacement === 'left-bottom') { if (childrenRect.left - contentRectWidth < 0) { adjustedPlacement = adjustedPlacement.replace('left', 'right'); } if (childrenRect.bottom - contentRectHeight < 0) { adjustedPlacement = adjustedPlacement.replace('bottom', 'top'); } } else if (adjustedPlacement === 'right-top') { if (childrenRect.right + contentRectWidth > systemInfo.windowWidth) { adjustedPlacement = adjustedPlacement.replace('right', 'left'); } if (childrenRect.top + contentRectHeight > systemInfo.windowHeight) { adjustedPlacement = adjustedPlacement.replace('top', 'bottom'); } } else if (adjustedPlacement === 'right-bottom') { if (childrenRect.right + contentRectWidth > systemInfo.windowWidth) { adjustedPlacement = adjustedPlacement.replace('right', 'left'); } if (childrenRect.bottom - contentRectHeight < 0) { adjustedPlacement = adjustedPlacement.replace('bottom', 'top'); } } } var popoverContentStyle; if (adjustedPlacement === 'top') { popoverContentStyle = getStyle({ left: left + childrenRect.width / 2, top: top - arrowMargin, }); } else if (adjustedPlacement === 'bottom') { popoverContentStyle = getStyle({ left: left + childrenRect.width / 2, bottom: bottom - arrowMargin, }); } else if (adjustedPlacement === 'left') { popoverContentStyle = getStyle({ left: left - arrowMargin, top: top + childrenRect.height / 2, }); } else if (adjustedPlacement === 'right') { popoverContentStyle = getStyle({ right: right - arrowMargin, top: top + childrenRect.height / 2, }); } else if (adjustedPlacement === 'top-left') { popoverContentStyle = getStyle({ left: left, top: top - arrowMargin, }); } else if (adjustedPlacement === 'top-right') { popoverContentStyle = getStyle({ right: right, top: top - arrowMargin, }); } else if (adjustedPlacement === 'bottom-left') { popoverContentStyle = getStyle({ left: left, bottom: bottom - arrowMargin, }); } else if (adjustedPlacement === 'bottom-right') { popoverContentStyle = getStyle({ right: right, bottom: bottom - arrowMargin, }); } else if (adjustedPlacement === 'left-top') { popoverContentStyle = getStyle({ left: left - arrowMargin, top: top, }); } else if (adjustedPlacement === 'left-bottom') { popoverContentStyle = getStyle({ left: left - arrowMargin, bottom: bottom, }); } else if (adjustedPlacement === 'right-top') { popoverContentStyle = getStyle({ right: right - arrowMargin, top: top, }); } else if (adjustedPlacement === 'right-bottom') { popoverContentStyle = getStyle({ right: right - arrowMargin, bottom: bottom, }); } return { popoverContentStyle: popoverContentStyle, adjustedPlacement: adjustedPlacement, }; } function getStyle(obj) { return Object.keys(obj) .map(function (item) { return "".concat(item, ": ").concat(obj[item], "px"); }) .join(';'); }