diff --git a/src/renderer/src/components/FocusView.tsx b/src/renderer/src/components/FocusView.tsx index 9e5972a..ef88942 100644 --- a/src/renderer/src/components/FocusView.tsx +++ b/src/renderer/src/components/FocusView.tsx @@ -1,4 +1,4 @@ -import { useState, useRef, useCallback } from 'react' +import { useState, useRef, useCallback, useEffect } from 'react' import type { Session, ShellTerminal, ChangedFile } from '../types' import { useTerminalMount } from '../hooks/useTerminalMount' import { stripAnsi } from '../../../shared/stripAnsi' @@ -42,6 +42,9 @@ export default function FocusView({ const [terminalCollapsed, setTerminalCollapsed] = useState(false) const [showChanges, setShowChanges] = useState(false) const [showPrDrawer, setShowPrDrawer] = useState(false) + const [prDrawerWidth, setPrDrawerWidth] = useState(350) + const [prDragging, setPrDragging] = useState(false) + const prDragRef = useRef<{ startX: number; startW: number } | null>(null) const [editingSummary, setEditingSummary] = useState(false) const [summaryDraft, setSummaryDraft] = useState('') const summaryInputRef = useRef(null) @@ -60,8 +63,38 @@ export default function FocusView({ [session.id] ) + const handlePrDragStart = useCallback( + (e: React.MouseEvent) => { + e.preventDefault() + prDragRef.current = { startX: e.clientX, startW: prDrawerWidth } + setPrDragging(true) + }, + [prDrawerWidth] + ) + + useEffect(() => { + const onMouseMove = (e: MouseEvent): void => { + if (!prDragRef.current) return + const delta = prDragRef.current.startX - e.clientX + const newWidth = Math.min(800, Math.max(250, prDragRef.current.startW + delta)) + setPrDrawerWidth(newWidth) + } + const onMouseUp = (): void => { + if (prDragRef.current) { + prDragRef.current = null + setPrDragging(false) + } + } + document.addEventListener('mousemove', onMouseMove) + document.addEventListener('mouseup', onMouseUp) + return () => { + document.removeEventListener('mousemove', onMouseMove) + document.removeEventListener('mouseup', onMouseUp) + } + }, []) + return ( -
+
{/* Toolbar */}
@@ -281,8 +314,12 @@ export default function FocusView({ {/* PR drawer (right side) */} {showPrDrawer && session.pr && session.pr.state !== 'none' && ( <> -
-
+ {/* Resize handle */} +
+