import { useState } from "react"; import { motion, AnimatePresence } from "motion/react"; import { Plus, MessageSquare, Trash2, ChevronLeft, ChevronRight, Settings, LogOut, } from "lucide-react"; import maintivalogoUrl from "../../../assets/maintiva-logo.jpg"; import type { ChatSession, StoredUser } from "./types"; interface SidebarProps { sessions: ChatSession[]; activeSessionId: string | null; isLoadingSessions: boolean; user: StoredUser | null; onNewChat: () => void; onSelectSession: (id: string) => void; onDeleteSession: (id: string) => void; onLogout: () => void; mobileOpen: boolean; onMobileClose: () => void; } function formatTime(dateStr: string | null | undefined): string { if (!dateStr) return ""; const d = new Date(dateStr); const now = new Date(); const diffMs = now.getTime() - d.getTime(); const diffDays = Math.floor(diffMs / 86400000); if (diffDays === 0) { return d.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }); } if (diffDays === 1) return "Yesterday"; if (diffDays < 7) return `${diffDays}d ago`; return d.toLocaleDateString([], { month: "short", day: "numeric" }); } export default function Sidebar({ sessions, activeSessionId, isLoadingSessions, user, onNewChat, onSelectSession, onDeleteSession, onLogout, mobileOpen, onMobileClose, }: SidebarProps) { const [collapsed, setCollapsed] = useState(false); const [hoveredSession, setHoveredSession] = useState(null); return ( <> {/* Mobile backdrop */} {mobileOpen && ( )} {/* Collapse toggle — desktop only */} {/* Header */}
Maintiva {!collapsed && (

Maintiva Agent

AI Data Assistant

)}
{/* New Chat button */}
{/* Sessions */}
{!collapsed && sessions.length > 0 && (

Recent

)} {isLoadingSessions ? (
) : (
{sessions.map((session) => { const isActive = session.id === activeSessionId; return (
{ onSelectSession(session.id); onMobileClose(); }} onMouseEnter={() => setHoveredSession(session.id)} onMouseLeave={() => setHoveredSession(null)} > {!collapsed && (

{session.title}

{formatTime(session.updatedAt ?? session.createdAt)}

)}
{!collapsed && hoveredSession === session.id && ( )}
); })}
)}
{/* Footer */}
{user?.name?.[0]?.toUpperCase() ?? "U"}
{!collapsed && (

{user?.name ?? "User"}

{user?.email ?? ""}

)}
{!collapsed && (
)} {collapsed && ( )}
); }