UNPKG

@zag-js/tour

Version:

Core logic for the tour widget implemented as a state machine

45 lines (44 loc) 1.34 kB
// 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 };