/* Copyright 2026 Marimo. All rights reserved. */
import { useAtomValue } from "jotai";
import { HourglassIcon, UnlinkIcon } from "lucide-react";
import React from "react";
import { Tooltip } from "@/components/ui/tooltip";
import { notebookScrollToRunning } from "@/core/cells/actions";
import { onlyScratchpadIsRunningAtom } from "@/core/cells/cells";
import { viewStateAtom } from "@/core/mode";
import {
type ConnectionStatus,
WebSocketClosedReason,
WebSocketState,
} from "@/core/websocket/types";
import { cn } from "@/utils/cn";
export const StatusOverlay: React.FC<{
connection: ConnectionStatus;
isRunning: boolean;
onReconnect?: () => void;
}> = ({ connection, isRunning, onReconnect }) => {
const { mode } = useAtomValue(viewStateAtom);
const isClosed =
connection.state === WebSocketState.CLOSED &&
(mode === "read" ||
connection.code !== WebSocketClosedReason.KERNEL_STARTUP_ERROR);
const isOpen = connection.state === WebSocketState.OPEN;
// Editor startup failures have their own recovery UI.
const canReconnect =
isClosed && connection.code === WebSocketClosedReason.KERNEL_DISCONNECTED;
return (
<>
{isClosed &&