/* Copyright 2026 Marimo. All rights reserved. */ import { Suspense } from "react"; import { Spinner } from "@/components/icons/spinner"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { useSandboxController } from "@/core/packages/useSandboxController"; import { LazyAnyLanguageCodeMirror } from "@/plugins/impl/code/LazyAnyLanguageCodeMirror"; import { useTheme } from "@/theme/useTheme"; import { Paths } from "@/utils/paths"; import { ConnectionErrorOutput } from "../../alerts/connection-details"; export function SandboxController({ onReconnect, }: { onReconnect: () => Promise; }) { const { filename, open, setOpen, draft, setDraft, dirty, loading, saving, pending, error, diagnostic, conflict, loadManifest, saveAndSync, } = useSandboxController(onReconnect); const { theme } = useTheme(); return ( Edit manifest {Paths.basename(filename ?? "Untitled notebook")} · script metadata {draft !== null && !loading ? ( }> ) : ( !error && )} {diagnostic && } {conflict && ( )} {loading ? "Loading…" : dirty ? "Unsaved changes" : draft !== null ? "Saved" : ""} ); }