"use client" import { useCallback, useEffect, useRef, useState } from "react" import { ChevronsDownUp, ChevronsUpDown, Crosshair, EllipsisVertical, } from "lucide-react" import { useTranslations } from "next-intl" import { useSidebarContext } from "@/contexts/sidebar-context" import { SidebarConversationList, type SidebarConversationListHandle, } from "@/components/conversations/sidebar-conversation-list" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip" import { useIsMobile } from "@/hooks/use-mobile" import { loadShowCompleted, saveShowCompleted, } from "@/lib/sidebar-view-mode-storage" export function Sidebar() { const t = useTranslations("Folder.sidebar") const { isOpen, toggle } = useSidebarContext() const isMobile = useIsMobile() const listRef = useRef(null) const [showCompleted, setShowCompleted] = useState(false) const [allExpanded, setAllExpanded] = useState(true) useEffect(() => { // Hydrate from localStorage after mount to keep SSR/CSR markup consistent. // eslint-disable-next-line react-hooks/set-state-in-effect setShowCompleted(loadShowCompleted()) }, []) const handleSetShowCompleted = useCallback((value: boolean) => { setShowCompleted(value) saveShowCompleted(value) }, []) const handleToggleExpandAll = useCallback(() => { if (allExpanded) { listRef.current?.collapseAll() setAllExpanded(false) } else { listRef.current?.expandAll() setAllExpanded(true) } }, [allExpanded]) if (!isOpen) return null return ( ) }