import { useMemo } from "react"; import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels"; import { PanelLeftClose, PanelLeftOpen, Play, RotateCw, Square, Terminal } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Separator } from "@/components/ui/separator"; import { cn } from "@/lib/utils"; import { EditorPanel } from "@/components/editor/EditorPanel"; import { TerminalPanel } from "@/components/terminal/TerminalPanel"; import { FileExplorerPanel } from "@/components/workspace/FileExplorerPanel"; import { StatusBar } from "@/components/workspace/StatusBar"; import { WorkspaceSelector } from "@/components/workspace/WorkspaceSelector"; import { useWorkspaceUiStore } from "@/lib/store/workspace-ui-store"; import { useProcessRestart, useProcessStart, useProcessStatus, useProcessStop, } from "@/lib/api/process"; interface WorkspaceShellProps { workspaceId: string | null; } export function WorkspaceShell({ workspaceId }: WorkspaceShellProps) { const activeFilePath = useWorkspaceUiStore((s) => s.activeFilePath); const sidebarCollapsed = useWorkspaceUiStore((s) => s.sidebarCollapsed); const terminalVisible = useWorkspaceUiStore((s) => s.terminalVisible); const toggleSidebar = useWorkspaceUiStore((s) => s.toggleSidebar); const toggleTerminal = useWorkspaceUiStore((s) => s.toggleTerminal); const status = useProcessStatus(workspaceId); const start = useProcessStart(); const stop = useProcessStop(); const restart = useProcessRestart(); const isRunning = status.data?.running ?? false; const statusUnknown = status.isPending || status.isError; const mutationError = useMemo( () => start.error ?? stop.error ?? restart.error, [start.error, stop.error, restart.error], ); return (
{/* Toolbar */}

codespace

{mutationError && ( {mutationError.message} )}
{/* Main layout */} {workspaceId ? (
{/* Sidebar */} {!sidebarCollapsed && ( <> )} {/* Main content area */} {/* Editor */} {/* Terminal panel */} {terminalVisible && ( <> )}
) : (

No workspace selected

Select or create a workspace to get started.

Use the workspace selector in the toolbar to choose one.

)} {/* Status bar */}
); }