import React, { useState, useRef } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { X, ZoomIn, ZoomOut, RotateCcw, Maximize2 } from 'lucide-react'; import PropTypes from 'prop-types'; const FullscreenCircuitViewer = ({ circuitSvg, isOpen, onClose }) => { const [zoom, setZoom] = useState(1); const [isDragging, setIsDragging] = useState(false); const [dragStart, setDragStart] = useState({ x: 0, y: 0 }); const [scrollPos, setScrollPos] = useState({ x: 0, y: 0 }); const containerRef = useRef(null); const handleZoomIn = () => setZoom(prev => Math.min(prev + 0.3, 5)); const handleZoomOut = () => setZoom(prev => Math.max(prev - 0.3, 0.3)); const handleResetZoom = () => setZoom(1); // Keyboard support React.useEffect(() => { const handleKeyDown = (e) => { if (!isOpen) return; switch (e.key) { case 'Escape': onClose(); break; case '+': case '=': e.preventDefault(); handleZoomIn(); break; case '-': e.preventDefault(); handleZoomOut(); break; case '0': e.preventDefault(); handleResetZoom(); break; default: break; } }; document.addEventListener('keydown', handleKeyDown); return () => document.removeEventListener('keydown', handleKeyDown); }, [isOpen, onClose]); const handleMouseDown = (e) => { if (e.target.closest('.zoom-controls')) return; setIsDragging(true); setDragStart({ x: e.clientX, y: e.clientY }); if (containerRef.current) { setScrollPos({ x: containerRef.current.scrollLeft, y: containerRef.current.scrollTop }); } }; const handleMouseMove = (e) => { if (!isDragging || !containerRef.current) return; const deltaX = e.clientX - dragStart.x; const deltaY = e.clientY - dragStart.y; containerRef.current.scrollLeft = scrollPos.x - deltaX; containerRef.current.scrollTop = scrollPos.y - deltaY; }; const handleMouseUp = () => { setIsDragging(false); }; if (!isOpen || !circuitSvg) return null; return ( e.stopPropagation()} className="w-full h-full max-w-7xl max-h-[90vh] bg-white dark:bg-neutral-900 rounded-lg shadow-2xl overflow-hidden m-4" > {/* Header */}

Quantum Circuit Diagram

Full-screen view with advanced zoom and pan controls

{/* Controls */}
{Math.round(zoom * 100)}%
{/* Circuit Container */}
{/* Footer with instructions */}
Drag to pan around the circuit Use zoom controls or mouse wheel Esc Close fullscreen
); }; FullscreenCircuitViewer.propTypes = { circuitSvg: PropTypes.string, isOpen: PropTypes.bool.isRequired, onClose: PropTypes.func.isRequired, }; export default FullscreenCircuitViewer;