merge: exit fullscreen on click outside, free Escape key

This commit is contained in:
Alex Blank
2026-05-29 11:11:11 +02:00
2 changed files with 20 additions and 13 deletions
+18 -11
View File
@@ -162,17 +162,21 @@ export const TerminalPage: React.FC = () => {
setActiveSessionId, setActiveSessionId,
]); ]);
// Exit fullscreen on Escape // Click outside terminal content/header to exit fullscreen
useEffect(() => { const handleFullscreenClick = useCallback(
if (!isFullscreen) return; (e: React.MouseEvent<HTMLElement>) => {
const handleEscape = (e: KeyboardEvent) => { if (!isFullscreen) return;
if (e.key === "Escape") { const target = e.target as Node;
setIsFullscreen(false); const current = e.currentTarget as HTMLElement;
const content = current.querySelector(".terminal-page-content");
const header = current.querySelector(".terminal-fullscreen-header");
if (content?.contains(target) || header?.contains(target)) {
return;
} }
}; setIsFullscreen(false);
window.addEventListener("keydown", handleEscape); },
return () => window.removeEventListener("keydown", handleEscape); [isFullscreen],
}, [isFullscreen]); );
const handleSelect = useCallback( const handleSelect = useCallback(
(sessionId: string) => { (sessionId: string) => {
@@ -302,7 +306,10 @@ export const TerminalPage: React.FC = () => {
} }
return ( return (
<section className={`terminal-page ${isFullscreen ? "fullscreen" : ""}`}> <section
className={`terminal-page ${isFullscreen ? "fullscreen" : ""}`}
onClick={handleFullscreenClick}
>
{!isFullscreen && ( {!isFullscreen && (
<div className="terminal-page-header"> <div className="terminal-page-header">
<button <button
+2 -2
View File
@@ -2887,8 +2887,8 @@ a.nav-item,
right: 0; right: 0;
bottom: 0; bottom: 0;
z-index: 1000; z-index: 1000;
padding: 0; padding: 8px;
gap: 0; gap: 8px;
background: #1e1e1e; background: #1e1e1e;
} }