'use client'; import { createContext, useContext, useState, useEffect, ReactNode } from 'react'; interface SidebarContextType { isSidebarOpen: boolean; toggleSidebar: () => void; openSidebar: () => void; closeSidebar: () => void; isMobileMenuOpen: boolean; toggleMobileMenu: () => void; openMobileMenu: () => void; closeMobileMenu: () => void; } const SidebarContext = createContext(undefined); export function SidebarProvider({ children }: { children: ReactNode }) { // Sidebar is open by default on desktop (hidden on mobile via CSS) const [isSidebarOpen, setIsSidebarOpen] = useState(true); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const toggleSidebar = () => setIsSidebarOpen(prev => !prev); const openSidebar = () => setIsSidebarOpen(true); const closeSidebar = () => setIsSidebarOpen(false); const toggleMobileMenu = () => setIsMobileMenuOpen(prev => !prev); const openMobileMenu = () => setIsMobileMenuOpen(true); const closeMobileMenu = () => setIsMobileMenuOpen(false); // Prevent body scroll when mobile menu is open useEffect(() => { if (isMobileMenuOpen) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = ''; } return () => { document.body.style.overflow = ''; }; }, [isMobileMenuOpen]); return ( {children} ); } export function useSidebar() { const context = useContext(SidebarContext); if (context === undefined) { throw new Error('useSidebar must be used within a SidebarProvider'); } return context; }