/** * Editor Page — main editor + simulator with resizable panels */ import React, { useRef, useState, useCallback } from 'react'; import { Link } from 'react-router-dom'; import { CodeEditor } from '../components/editor/CodeEditor'; import { EditorToolbar } from '../components/editor/EditorToolbar'; import { SimulatorCanvas } from '../components/simulator/SimulatorCanvas'; import { SerialMonitor } from '../components/simulator/SerialMonitor'; import { useSimulatorStore } from '../store/useSimulatorStore'; import '../App.css'; export const EditorPage: React.FC = () => { const [editorWidthPct, setEditorWidthPct] = useState(45); const containerRef = useRef(null); const resizingRef = useRef(false); const serialMonitorOpen = useSimulatorStore((s) => s.serialMonitorOpen); const toggleSerialMonitor = useSimulatorStore((s) => s.toggleSerialMonitor); const [serialHeightPct, setSerialHeightPct] = useState(30); const handleResizeMouseDown = useCallback((e: React.MouseEvent) => { e.preventDefault(); resizingRef.current = true; const handleMouseMove = (ev: MouseEvent) => { if (!resizingRef.current || !containerRef.current) return; const rect = containerRef.current.getBoundingClientRect(); const pct = ((ev.clientX - rect.left) / rect.width) * 100; setEditorWidthPct(Math.max(20, Math.min(80, pct))); }; const handleMouseUp = () => { resizingRef.current = false; document.body.style.cursor = ''; document.body.style.userSelect = ''; document.removeEventListener('mousemove', handleMouseMove); document.removeEventListener('mouseup', handleMouseUp); }; document.body.style.cursor = 'col-resize'; document.body.style.userSelect = 'none'; document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', handleMouseUp); }, []); return (
Arduino Emulator
Examples
{/* Resize handle */}
{serialMonitorOpen && (
)}
); };