@zag-js/tour
Version:
Core logic for the tour widget implemented as a state machine
45 lines (44 loc) • 1.34 kB
JavaScript
// src/utils/rect.ts
import { getWindow } from "@zag-js/dom-query";
function getCenterRect(size) {
return { x: size.width / 2, y: size.height / 2, width: 0, height: 0 };
}
function getFrameElement(win) {
return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
}
var normalizeEventPoint = (event) => {
let clientX = event.clientX;
let clientY = event.clientY;
let win = event.view || window;
let frame = getFrameElement(win);
while (frame) {
const iframeRect = frame.getBoundingClientRect();
const css = getComputedStyle(frame);
const left = iframeRect.left + (frame.clientLeft + parseFloat(css.paddingLeft));
const top = iframeRect.top + (frame.clientTop + parseFloat(css.paddingTop));
clientX += left;
clientY += top;
win = getWindow(frame);
frame = getFrameElement(win);
}
return { clientX, clientY };
};
function isEventInRect(rect, event) {
const { clientX, clientY } = normalizeEventPoint(event);
return rect.y <= clientY && clientY <= rect.y + rect.height && rect.x <= clientX && clientX <= rect.x + rect.width;
}
function offset(r, i) {
const dx = i.x || 0;
const dy = i.y || 0;
return {
x: r.x - dx,
y: r.y - dy,
width: r.width + dx + dx,
height: r.height + dy + dy
};
}
export {
getCenterRect,
isEventInRect,
offset
};