import { useEffect, useLayoutEffect, useState } from 'react'; import { LAYOUT_CONSTANTS, calculateResponsiveScale } from '../utils/layout-constants'; import VideoEditor from './canvas/video-editor'; const useResponsiveCanvas = (maxWidth = 350) => { const [scale, setScale] = useState(() => calculateResponsiveScale(maxWidth)); useLayoutEffect(() => { setScale(calculateResponsiveScale(maxWidth)); }, [maxWidth]); useEffect(() => { const handleResize = () => { setScale(calculateResponsiveScale(maxWidth)); }; // Update immediately handleResize(); // Event listeners window.addEventListener('resize', handleResize); window.addEventListener('orientationchange', handleResize); // ResizeObserver for more reliable detection let resizeObserver; if (window.ResizeObserver) { resizeObserver = new ResizeObserver(handleResize); resizeObserver.observe(document.body); } // MutationObserver for dev tools detection let mutationObserver; if (window.MutationObserver) { mutationObserver = new MutationObserver(() => { setTimeout(handleResize, 50); }); mutationObserver.observe(document.documentElement, { attributes: true, attributeFilter: ['style'], }); } return () => { window.removeEventListener('resize', handleResize); window.removeEventListener('orientationchange', handleResize); if (resizeObserver) resizeObserver.disconnect(); if (mutationObserver) mutationObserver.disconnect(); }; }, [maxWidth]); return scale; }; const EditorCanvas = ({ maxWidth = 350 }) => { const scale = useResponsiveCanvas(maxWidth); const displayWidth = LAYOUT_CONSTANTS.CANVAS_WIDTH * scale; const displayHeight = LAYOUT_CONSTANTS.CANVAS_HEIGHT * scale; const convertCoordinates = (e) => { const rect = e.currentTarget.getBoundingClientRect(); return { x: (e.clientX - rect.left) / scale, y: (e.clientY - rect.top) / scale, }; }; return (