diff options
Diffstat (limited to 'popperjs/package/lib/dom-utils/getLayoutRect.js.flow')
-rw-r--r-- | popperjs/package/lib/dom-utils/getLayoutRect.js.flow | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/popperjs/package/lib/dom-utils/getLayoutRect.js.flow b/popperjs/package/lib/dom-utils/getLayoutRect.js.flow new file mode 100644 index 0000000..fe99526 --- /dev/null +++ b/popperjs/package/lib/dom-utils/getLayoutRect.js.flow @@ -0,0 +1,29 @@ +// @flow +import type { Rect } from '../types'; +import getBoundingClientRect from './getBoundingClientRect'; + +// Returns the layout rect of an element relative to its offsetParent. Layout +// means it doesn't take into account transforms. +export default function getLayoutRect(element: HTMLElement): Rect { + const clientRect = getBoundingClientRect(element); + + // Use the clientRect sizes if it's not been transformed. + // Fixes https://github.com/popperjs/popper-core/issues/1223 + let width = element.offsetWidth; + let height = element.offsetHeight; + + if (Math.abs(clientRect.width - width) <= 1) { + width = clientRect.width; + } + + if (Math.abs(clientRect.height - height) <= 1) { + height = clientRect.height; + } + + return { + x: element.offsetLeft, + y: element.offsetTop, + width, + height, + }; +} |