/* Copyright 2026 Marimo. All rights reserved. */ import { useAtomValue } from "jotai"; import { HourglassIcon, LockIcon, 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, WebSocketState } from "@/core/websocket/types"; import { cn } from "@/utils/cn"; export const StatusOverlay: React.FC<{ connection: ConnectionStatus; isRunning: boolean; }> = ({ connection, isRunning }) => { const { mode } = useAtomValue(viewStateAtom); const isClosed = connection.state === WebSocketState.CLOSED; const isOpen = connection.state === WebSocketState.OPEN; return ( <> {isClosed && !connection.canTakeover && }
{isOpen && isRunning && } {isClosed && !connection.canTakeover && } {isClosed && connection.canTakeover && }
); }; const topLeftStatus = "print:hidden pointer-events-auto hover:cursor-pointer"; const DisconnectedIcon = () => (
); const LockedIcon = () => (
); const RunningIcon = () => { const scratchpadOnly = useAtomValue(onlyScratchpadIsRunningAtom); const tooltip = scratchpadOnly ? "Scratchpad is running" : "Jump to running cell"; return (
); }; const NoiseBackground = () => ( <>
);