From 5c553bb1eb4740f0afe5756b2374c184bddf1590 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sat, 30 Jul 2022 23:34:07 +0300 Subject: [PATCH] vertical nudge for popovers, especially for overlay-centers ones --- src/components/popover/popover.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/components/popover/popover.js b/src/components/popover/popover.js index 82ae9885..c19e6904 100644 --- a/src/components/popover/popover.js +++ b/src/components/popover/popover.js @@ -124,13 +124,17 @@ const Popover = { const leftInnerOffset = overlayCenterScreenBox.left - box.left const topInnerOffset = overlayCenterScreenBox.top - box.top horizOffset = -leftInnerOffset - overlayCenter.offsetWidth * 0.5 - vertOffset = -topInnerOffset - overlayCenter.offsetWidth * 0.5 + vertOffset = -topInnerOffset - overlayCenter.offsetHeight * 0.5 } else { horizOffset = content.offsetWidth * -0.5 - vertOffset = content.offsetWidth * -0.5 + vertOffset = content.offsetHeight * -0.5 } + const leftBorder = origin.x + horizOffset - const rightBorder = origin.x - horizOffset + const rightBorder = leftBorder + content.offsetWidth + const topBorder = origin.y + vertOffset + const bottomBorder = topBorder + content.offsetHeight + // If overflowing from left, move it so that it doesn't if (leftBorder < xBounds.min) { horizOffset += xBounds.min - leftBorder @@ -141,6 +145,16 @@ const Popover = { horizOffset -= rightBorder - xBounds.max } + // If overflowing from top, move it so that it doesn't + if (topBorder < yBounds.min) { + vertOffset += yBounds.min - topBorder + } + + // If overflowing from bottom, move it so that it doesn't + if (bottomBorder > yBounds.max) { + vertOffset -= bottomBorder - yBounds.max + } + let translateX = 0 let translateY = 0