"use client" import { useState, useRef, useEffect } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Plus, MessageSquare, Trash2, X, Pencil, Check, X as XIcon } from "lucide-react" import type { ChatSession } from "./types" interface ChatSidebarProps { chatHistory: ChatSession[] currentSessionId: string | null showHistory: boolean onLoadSession: (sessionId: string) => void onDeleteSession: (sessionId: string) => void onRenameSession: (sessionId: string, newTitle: string) => void onCreateSession: () => void onCloseHistory: () => void } export function ChatSidebar({ chatHistory, currentSessionId, showHistory, onLoadSession, onDeleteSession, onRenameSession, onCreateSession, onCloseHistory }: ChatSidebarProps) { const [editingSessionId, setEditingSessionId] = useState(null) const [editTitle, setEditTitle] = useState("") const editInputRef = useRef(null) useEffect(() => { if (editingSessionId && editInputRef.current) { editInputRef.current.focus() } }, [editingSessionId]) const startEditing = (session: ChatSession, e: React.MouseEvent) => { e.stopPropagation() setEditingSessionId(session.id) setEditTitle(session.title || "") } const cancelEditing = (e?: React.MouseEvent) => { e?.stopPropagation() setEditingSessionId(null) setEditTitle("") } const saveTitle = (sessionId: string, e?: React.MouseEvent) => { e?.stopPropagation() if (editTitle.trim()) { onRenameSession(sessionId, editTitle.trim()) } setEditingSessionId(null) setEditTitle("") } const handleKeyDown = (e: React.KeyboardEvent, sessionId: string) => { if (e.key === "Enter") { saveTitle(sessionId) } else if (e.key === "Escape") { cancelEditing() } } // Prevent body scroll when mobile sidebar is open useEffect(() => { if (showHistory) { document.body.style.overflow = "hidden" } else { document.body.style.overflow = "unset" } return () => { document.body.style.overflow = "unset" } }, [showHistory]) return ( <> {/* Desktop Sidebar */}

Sessions

Chat History

{chatHistory.map((session) => (
onLoadSession(session.id)} >
{editingSessionId === session.id ? (
e.stopPropagation()}> setEditTitle(e.target.value)} onKeyDown={(e) => handleKeyDown(e, session.id)} className="h-6 text-xs py-0 px-1 bg-background/50" />
) : ( <>
{session.title || `Chat ${session.id.slice(-6)}`}
{session.message_count} messages
)}
))}
{/* Mobile Sidebar Overlay */} {showHistory && (
e.stopPropagation()}>

Chat History

{chatHistory.map((session) => (
))}
)} ) }