vuesax-alpha
Version:
A Component Library for Vue 3
58 lines (53 loc) • 2.33 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var index = require('../../utils/index.js');
var dom = require('../../utils/dom.js');
var getScale = require('../platform/get-scale.js');
var isElement = require('../platform/is-element.js');
var getVisualOffsets = require('./get-visual-offsets.js');
var unwrapElement = require('./unwrap-element.js');
function getBoundingClientRect(element, includeScale = false, isFixedStrategy = false, offsetParent) {
const clientRect = element.getBoundingClientRect();
const domElement = unwrapElement.unwrapElement(element);
let scale = index.createCoords(1);
if (includeScale) {
if (offsetParent) {
if (isElement.isElement(offsetParent)) {
scale = getScale.getScale(offsetParent);
}
} else {
scale = getScale.getScale(element);
}
}
const visualOffsets = getVisualOffsets.shouldAddVisualOffsets(
domElement,
isFixedStrategy,
offsetParent
) ? getVisualOffsets.getVisualOffsets(domElement) : index.createCoords(0);
let x = (clientRect.left + visualOffsets.x) / scale.x;
let y = (clientRect.top + visualOffsets.y) / scale.y;
let width = clientRect.width / scale.x;
let height = clientRect.height / scale.y;
if (domElement) {
const win = dom.getWindow(domElement);
const offsetWin = offsetParent && isElement.isElement(offsetParent) ? dom.getWindow(offsetParent) : offsetParent;
let currentIFrame = win.frameElement;
while (currentIFrame && offsetParent && offsetWin !== win) {
const iframeScale = getScale.getScale(currentIFrame);
const iframeRect = currentIFrame.getBoundingClientRect();
const css = dom.getComputedStyle(currentIFrame);
const left = iframeRect.left + (currentIFrame.clientLeft + Number.parseFloat(css.paddingLeft)) * iframeScale.x;
const top = iframeRect.top + (currentIFrame.clientTop + Number.parseFloat(css.paddingTop)) * iframeScale.y;
x *= iframeScale.x;
y *= iframeScale.y;
width *= iframeScale.x;
height *= iframeScale.y;
x += left;
y += top;
currentIFrame = dom.getWindow(currentIFrame).frameElement;
}
}
return index.rectToClientRect({ width, height, x, y });
}
exports.getBoundingClientRect = getBoundingClientRect;
//# sourceMappingURL=get-bounding-client-rect.js.map