// Trusted parent-side measurement; template scripts stay disabled by sandbox and CSP. (() => { const frame = document.getElementById('previewHtmlFrame'); let observer; let scheduled = 0; function resizePreview() { scheduled = 0; const document = frame.contentDocument; if (!document?.body) return; frame.style.height = '0px'; const height = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); frame.style.height = `${Math.max(80, Math.ceil(height) + 2)}px`; } function scheduleResize() { cancelAnimationFrame(scheduled); scheduled = requestAnimationFrame(resizePreview); } function preventLinkNavigation(event) { if (event.target?.closest?.('a, area')) event.preventDefault(); } frame.addEventListener('load', () => { observer?.disconnect(); const document = frame.contentDocument; if (!document?.body) return; document.addEventListener('click', preventLinkNavigation, true); document.addEventListener('submit', event => event.preventDefault(), true); observer = new ResizeObserver(scheduleResize); observer.observe(document.body); scheduleResize(); }); window.addEventListener('resize', scheduleResize); window.addEventListener('pagehide', () => { observer?.disconnect(); cancelAnimationFrame(scheduled); }); })();