UNPKG

framer-motion

Version:

A simple and powerful JavaScript animation library

65 lines (62 loc) 2.13 kB
import { resolveElements } from 'motion-dom'; const resizeHandlers = new WeakMap(); let observer; function getElementSize(target, borderBoxSize) { if (borderBoxSize) { const { inlineSize, blockSize } = borderBoxSize[0]; return { width: inlineSize, height: blockSize }; } else if (target instanceof SVGElement && "getBBox" in target) { return target.getBBox(); } else { return { width: target.offsetWidth, height: target.offsetHeight, }; } } function notifyTarget({ target, contentRect, borderBoxSize, }) { var _a; (_a = resizeHandlers.get(target)) === null || _a === void 0 ? void 0 : _a.forEach((handler) => { handler({ target, contentSize: contentRect, get size() { return getElementSize(target, borderBoxSize); }, }); }); } function notifyAll(entries) { entries.forEach(notifyTarget); } function createResizeObserver() { if (typeof ResizeObserver === "undefined") return; observer = new ResizeObserver(notifyAll); } function resizeElement(target, handler) { if (!observer) createResizeObserver(); const elements = resolveElements(target); elements.forEach((element) => { let elementHandlers = resizeHandlers.get(element); if (!elementHandlers) { elementHandlers = new Set(); resizeHandlers.set(element, elementHandlers); } elementHandlers.add(handler); observer === null || observer === void 0 ? void 0 : observer.observe(element); }); return () => { elements.forEach((element) => { const elementHandlers = resizeHandlers.get(element); elementHandlers === null || elementHandlers === void 0 ? void 0 : elementHandlers.delete(handler); if (!(elementHandlers === null || elementHandlers === void 0 ? void 0 : elementHandlers.size)) { observer === null || observer === void 0 ? void 0 : observer.unobserve(element); } }); }; } export { resizeElement };