"use client"; import { useAtom, useAtomValue, useSetAtom } from "jotai"; import { PanelRight, PanelRightClose } from "lucide-react"; import { startTransition, useEffect } from "react"; import { closeReportPanelAtom, reportPanelAtom } from "@/atoms/chat/report-panel.atom"; import { documentsSidebarOpenAtom } from "@/atoms/documents/ui.atoms"; import { rightPanelCollapsedAtom, rightPanelTabAtom } from "@/atoms/layout/right-panel.atom"; import { ReportPanelContent } from "@/components/report-panel/report-panel"; import { Button } from "@/components/ui/button"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { DocumentsSidebar } from "../sidebar"; interface RightPanelProps { documentsPanel?: { open: boolean; onOpenChange: (open: boolean) => void; }; } function CollapseButton({ onClick }: { onClick: () => void }) { return ( Collapse panel ); } /** * Absolutely positioned expand button — renders at top-right of the main * container so it occupies the same screen position as the collapse button * inside the Documents header. */ export function RightPanelExpandButton() { const [collapsed, setCollapsed] = useAtom(rightPanelCollapsedAtom); const documentsOpen = useAtomValue(documentsSidebarOpenAtom); const reportState = useAtomValue(reportPanelAtom); const reportOpen = reportState.isOpen && !!reportState.reportId; const hasContent = documentsOpen || reportOpen; if (!collapsed || !hasContent) return null; return (
Expand panel
); } const PANEL_WIDTHS = { sources: 420, report: 640 } as const; export function RightPanel({ documentsPanel }: RightPanelProps) { const [activeTab] = useAtom(rightPanelTabAtom); const reportState = useAtomValue(reportPanelAtom); const closeReport = useSetAtom(closeReportPanelAtom); const [collapsed, setCollapsed] = useAtom(rightPanelCollapsedAtom); const documentsOpen = documentsPanel?.open ?? false; const reportOpen = reportState.isOpen && !!reportState.reportId; useEffect(() => { if (!reportOpen) return; const handleKeyDown = (e: KeyboardEvent) => { if (e.key === "Escape") closeReport(); }; document.addEventListener("keydown", handleKeyDown); return () => document.removeEventListener("keydown", handleKeyDown); }, [reportOpen, closeReport]); const isVisible = (documentsOpen || reportOpen) && !collapsed; const effectiveTab = activeTab === "report" && !reportOpen ? "sources" : activeTab === "sources" && !documentsOpen ? "report" : activeTab; const targetWidth = PANEL_WIDTHS[effectiveTab]; const collapseButton = setCollapsed(true)} />; if (!isVisible) return null; return ( ); }