/** * Resizable Panes Demo * Simulates the Allotment resizable split behavior */ import React, { useState, useEffect } from 'react' export default function ResizablePanesDemo() { const [leftWidth, setLeftWidth] = useState(240) const [rightWidth, setRightWidth] = useState(280) const [isDragging, setIsDragging] = useState(null) const handleDragStart = (side: string) => (e: React.MouseEvent) => { setIsDragging(side) e.preventDefault() } useEffect(() => { const handleMouseMove = (e: MouseEvent) => { if (isDragging === 'left') { setLeftWidth(Math.max(180, Math.min(320, e.clientX - 24))) } else if (isDragging === 'right') { setRightWidth(Math.max(200, Math.min(400, window.innerWidth - e.clientX - 24))) } } const handleMouseUp = () => setIsDragging(null) if (isDragging) { window.addEventListener('mousemove', handleMouseMove) window.addEventListener('mouseup', handleMouseUp) return () => { window.removeEventListener('mousemove', handleMouseMove) window.removeEventListener('mouseup', handleMouseUp) } } }, [isDragging]) return (
{/* Left Sidebar */}
Session Groups
{['Active Sessions', 'Completed'].map((g) => (
{g}
))}
{/* Left Drag Handle */}
{/* Main Content */}
Terminal Grid Area
{/* Right Drag Handle */}
{/* Right Sidebar */}
Project Files
{['src/', 'docs/', 'tests/'].map((f) => (
{f}
))}
) }