"use client"; import { memo, useEffect, useMemo, useState, useCallback } from "react"; import { IconX, IconChevronDown, IconPlayerPlay, IconPlus } from "@tabler/icons-react"; import { TabsContent } from "@kandev/ui/tabs"; import { Button } from "@kandev/ui/button"; import { SessionPanel, SessionPanelContent } from "@kandev/ui/pannel-session"; import { Tooltip, TooltipContent, TooltipTrigger } from "@kandev/ui/tooltip"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@kandev/ui/dropdown-menu"; import { useAppStore } from "@/components/state-provider"; import { useLayoutStore } from "@/lib/state/layout-store"; // closeDocument kept for mobile/tablet backward compat import { getWebSocketClient } from "@/lib/ws/connection"; import { useTask } from "@/hooks/use-task"; import { SessionTabs, type SessionTab } from "@/components/session-tabs"; import { TaskPlanPanel } from "../task-plan-panel"; import { TaskCreateDialog } from "@/components/task-create-dialog"; import type { ActiveDocument } from "@/lib/state/slices/ui/types"; type DocumentPanelProps = { sessionId: string | null; }; export const DocumentPanel = memo(function DocumentPanel({ sessionId }: DocumentPanelProps) { const activeDocument = useAppStore((state) => sessionId ? (state.documentPanel.activeDocumentBySessionId[sessionId] ?? null) : null, ); const setActiveDocument = useAppStore((state) => state.setActiveDocument); const closeDocument = useLayoutStore((state) => state.closeDocument); const handleClose = () => { if (!sessionId) return; closeDocument(sessionId); setActiveDocument(sessionId, null); }; // Auto-close document layout when no document is active (e.g. stale localStorage) useEffect(() => { if (!activeDocument && sessionId) { closeDocument(sessionId); } }, [activeDocument, sessionId, closeDocument]); const tabs: SessionTab[] = useMemo(() => { if (!activeDocument) return []; if (activeDocument.type === "plan") { return [{ id: "plan", label: "Plan" }]; } return [{ id: "file", label: activeDocument.name }]; }, [activeDocument]); const activeTab = activeDocument?.type === "plan" ? "plan" : "file"; if (!activeDocument) { return null; } const isPlan = activeDocument.type === "plan"; const headerActions = (