diff --git a/src/app/components/WorkspaceFileDialog.tsx b/src/app/components/WorkspaceFileDialog.tsx index 8aeb1c5..829e0e4 100644 --- a/src/app/components/WorkspaceFileDialog.tsx +++ b/src/app/components/WorkspaceFileDialog.tsx @@ -10,6 +10,8 @@ import React, { import { Download, Loader2, + Maximize2, + Minimize2, FileText, Code, Pencil, @@ -189,6 +191,21 @@ export const WorkspaceFileDialog = React.memo<{ const [htmlView, setHtmlView] = useState<"preview" | "source">("preview"); // Bumped after a successful save so the preview iframe reloads new content. const [savedTick, setSavedTick] = useState(0); + // Browser-level fullscreen for the preview panel (toolbar stays usable). + const previewAreaRef = useRef(null); + const [isFullscreen, setIsFullscreen] = useState(false); + + useEffect(() => { + const onChange = () => + setIsFullscreen(document.fullscreenElement === previewAreaRef.current); + document.addEventListener("fullscreenchange", onChange); + return () => document.removeEventListener("fullscreenchange", onChange); + }, []); + + const toggleFullscreen = () => { + if (document.fullscreenElement) void document.exitFullscreen(); + else void previewAreaRef.current?.requestFullscreen(); + }; const [discardAction, setDiscardAction] = useState< "close" | "cancel-edit" | null >(null); @@ -492,114 +509,315 @@ export const WorkspaceFileDialog = React.memo<{ { + // While the preview panel is fullscreen, Esc must only exit + // fullscreen — not close the whole dialog. + if (document.fullscreenElement) e.preventDefault(); + }} > {path} -
-
-
-
- {editing ? ( - <> - - - - ) : ( - <> - {showHtmlToggle && ( -
- -