30 lines
821 B
Plaintext
30 lines
821 B
Plaintext
|
// @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,
|
||
|
};
|
||
|
}
|