"use client"; import { useState, useEffect, useRef } from "react"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { Sparkles, Wand2, LayoutGrid, Layers, FolderOpen, FileText, List, Cpu, Search, Share2, Trash2, BarChart3, Settings, PanelLeftClose, PanelLeft, Home, LogOut, User, CreditCard, } from "lucide-react"; interface AppSidebarProps { user: any; creditsBalance: number | null; } interface NavItem { href: string; icon: any; label: string; } interface NavSection { label?: string; items: NavItem[]; } export function AppSidebar({ user, creditsBalance }: AppSidebarProps) { const pathname = usePathname(); const [sidebarCollapsed, setSidebarCollapsed] = useState(false); const [userMenuOpen, setUserMenuOpen] = useState(false); const userMenuRef = useRef(null); // Close dropdown when clicking outside useEffect(() => { function handleClickOutside(event: MouseEvent) { if ( userMenuRef.current && !userMenuRef.current.contains(event.target as Node) ) { setUserMenuOpen(false); } } if (userMenuOpen) { document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; } }, [userMenuOpen]); const navSections: NavSection[] = [ { items: [ { href: "/generate", icon: Home, label: "Overview" }, { href: "/generate/canvas", icon: Wand2, label: "Canvas" }, ], }, { label: "Content", items: [ { href: "/generate/gallery", icon: LayoutGrid, label: "Gallery" }, { href: "/generate/collections", icon: Layers, label: "Collections" }, { href: "/generate/projects", icon: FolderOpen, label: "Projects" }, { href: "/generate/prompts", icon: FileText, label: "Prompts" }, ], }, { label: "Tools", items: [ { href: "/generate/batch", icon: List, label: "Batch" }, { href: "/generate/models", icon: Cpu, label: "Models" }, ], }, { label: "Manage", items: [ { href: "/generate/shared", icon: Share2, label: "Shared" }, { href: "/generate/trash", icon: Trash2, label: "Trash" }, ], }, ]; const isActiveRoute = (href: string) => { if (href === "/generate") { return pathname === "/generate"; } return pathname?.startsWith(href); }; return ( ); }