import { initialize } from "@open-iframe-resizer/core"; const iframeRegistry = new Map(); const init = (iframe: HTMLIFrameElement) => { const iframeId = iframe.id; initialize( { checkOrigin: false, }, `#${iframeId}` ); iframeRegistry.set(iframeId, iframe); }; const initializeGlobalMessageHandler = () => { if ((window as any).__iframeBridgeHandlerInitialized) { return; } window.addEventListener("message", (event) => { if (event.data && event.data.type === "get_viewport_info") { let targetIframe: HTMLIFrameElement | null = null; for (const [_, iframe] of iframeRegistry.entries()) { if (iframe.contentWindow === event.source) { targetIframe = iframe; break; } } if (!targetIframe && iframeRegistry.size > 0) { const firstIframe = Array.from(iframeRegistry.values())[0]; targetIframe = firstIframe || null; } if (targetIframe) { const rect = targetIframe.getBoundingClientRect(); const response = { type: "viewport_info_response", iframeTopInViewport: rect.top, iframeLeftInViewport: rect.left, viewportHeight: window.innerHeight, viewportWidth: window.innerWidth, scrollTop: window.scrollY, scrollLeft: window.scrollX, requestId: event.data.data?.requestId, }; if (event.source) { event.source.postMessage(response, { targetOrigin: event.origin }); } } } }); (window as any).__iframeBridgeHandlerInitialized = true; }; const iFrameSetup = (iframe: HTMLIFrameElement) => { if (!iframe.id) { iframe.id = `iframe-${Date.now()}-${Math.random() .toString(36) .substring(2, 11)}`; } initializeGlobalMessageHandler(); init(iframe); }; if (typeof window !== "undefined") { (window as any).iFrameSetup = iFrameSetup; } export { iFrameSetup };