diff --git a/web/components/DocSidebar.tsx b/web/components/DocSidebar.tsx index c89ccff..261b6c7 100644 --- a/web/components/DocSidebar.tsx +++ b/web/components/DocSidebar.tsx @@ -2,8 +2,8 @@ import Link from "next/link" import { usePathname } from "next/navigation" -import { useState } from "react" -import { ChevronDown, ChevronRight } from "lucide-react" +import { useState, useEffect } from "react" +import { ChevronDown, ChevronRight, Menu, X } from "lucide-react" interface SubMenuItem { title: string @@ -55,11 +55,27 @@ const sidebarItems: MenuItem[] = [ export default function DocSidebar() { const pathname = usePathname() const [openSections, setOpenSections] = useState<{ [key: string]: boolean }>({}) + const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false) const toggleSection = (title: string) => { setOpenSections((prev) => ({ ...prev, [title]: !prev[title] })) } + const toggleMobileMenu = () => { + setIsMobileMenuOpen(!isMobileMenuOpen) + } + + useEffect(() => { + const handleResize = () => { + if (window.innerWidth >= 768) { + setIsMobileMenuOpen(false) + } + } + + window.addEventListener("resize", handleResize) + return () => window.removeEventListener("resize", handleResize) + }, []) + const renderMenuItem = (item: MenuItem) => { if (item.submenu) { const isOpen = openSections[item.title] || false @@ -83,6 +99,7 @@ export default function DocSidebar() { ? "bg-blue-500 text-white" : "text-gray-700 hover:bg-gray-200 hover:text-gray-900" }`} + onClick={() => setIsMobileMenuOpen(false)} > {subItem.title} @@ -100,6 +117,7 @@ export default function DocSidebar() { className={`block p-2 rounded ${ pathname === item.href ? "bg-blue-500 text-white" : "text-gray-700 hover:bg-gray-200 hover:text-gray-900" }`} + onClick={() => setIsMobileMenuOpen(false)} > {item.title} @@ -109,9 +127,23 @@ export default function DocSidebar() { } return ( - + <> + + + ) } +