/* Copyright 2026 Marimo. All rights reserved. */ import { useAtom, useSetAtom } from "jotai"; import { XIcon } from "lucide-react"; import React, { memo } from "react"; import useEvent from "react-use-event-hook"; import { AiProviderIcon } from "@/components/ai/ai-provider-icon"; import { Button } from "@/components/ui/button"; import { cn } from "@/utils/cn"; import { AgentSelector } from "./agent-selector"; import { type AgentSession, agentSessionStateAtom, removeSession, selectedTabAtom, type TabId, updateSessionLastUsed, } from "./state"; interface SessionTabProps { session: AgentSession; isActive: boolean; onSelect: (sessionId: TabId) => void; onClose: (sessionId: TabId) => void; } const SessionTab: React.FC = memo( ({ session, isActive, onSelect, onClose }) => { return (
onSelect(session.tabId)} >
{session.title}
); }, ); SessionTab.displayName = "SessionTab"; interface SessionTabsProps { onAddSession?: () => void; className?: string; } interface SessionListProps { sessions: AgentSession[]; activeTabId: TabId | null; onSelectSession: (sessionId: TabId) => void; onCloseSession: (sessionId: TabId) => void; } const SessionList = memo( ({ sessions, activeTabId, onSelectSession, onCloseSession }) => (
{sessions.map((session) => ( ))}
), ); SessionList.displayName = "SessionList"; interface EmptySessionTabsProps { className?: string; } const EmptySessionTabs = memo(({ className }) => (
)); EmptySessionTabs.displayName = "EmptySessionTabs"; export const SessionTabs: React.FC = memo(({ className }) => { const [sessionState, setSessionState] = useAtom(agentSessionStateAtom); const setActiveSession = useSetAtom(selectedTabAtom); const handleSelectSession = useEvent((sessionId: TabId) => { setActiveSession(sessionId); setSessionState((prev) => updateSessionLastUsed(prev, sessionId)); }); const handleCloseSession = useEvent((sessionId: TabId) => { setSessionState((prev) => removeSession(prev, sessionId)); }); const { sessions, activeTabId } = sessionState; if (sessions.length === 0) { return ; } return (
); }); SessionTabs.displayName = "SessionTabs";