import { ReactNode, useState, useEffect } from 'react'; import { Link, useLocation } from 'react-router-dom'; import { useAuthStore } from '../../store/authStore'; import { useSettingsStore } from '../../store/settingsStore'; import { Button } from '../ui'; import { Menu, X, Sun, Moon, Settings, LogOut, MessageSquare, User, ChevronDown, Palette } from 'lucide-react'; interface LayoutProps { children: ReactNode; showSidebar?: boolean; sidebar?: ReactNode; className?: string; } export function Layout({ children, showSidebar = false, sidebar, className = '' }: LayoutProps) { const location = useLocation(); const { user, logout } = useAuthStore(); const { theme, toggleTheme, availableThemes, setThemeById } = useSettingsStore(); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [isUserMenuOpen, setIsUserMenuOpen] = useState(false); const [isThemeMenuOpen, setIsThemeMenuOpen] = useState(false); // Close mobile menu on route change useEffect(() => { setIsMobileMenuOpen(false); }, [location.pathname]); // Close menus on outside click useEffect(() => { const handleClickOutside = () => { setIsUserMenuOpen(false); setIsThemeMenuOpen(false); }; if (isUserMenuOpen || isThemeMenuOpen) { document.addEventListener('click', handleClickOutside); return () => document.removeEventListener('click', handleClickOutside); } }, [isUserMenuOpen, isThemeMenuOpen]); // Prevent 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]); const handleLogout = () => { logout(); setIsUserMenuOpen(false); }; const handleThemeSelect = (themeId: string) => { setThemeById(themeId); setIsThemeMenuOpen(false); }; return (
{/* Header */}
{/* Left side */}
{showSidebar && ( )}
Saast
{/* Right side */}
{/* Theme selector */}
{/* Theme dropdown */} {isThemeMenuOpen && ( <>
{availableThemes.map((t) => ( ))}
)}
{/* Quick theme toggle */} {user ? (
{/* User dropdown menu */} {isUserMenuOpen && ( <>

{user.name}

{user.email}

setIsUserMenuOpen(false)} > Profile & Settings
)}
) : (
)}
{/* Main content */}
{/* Sidebar */} {showSidebar && sidebar && ( <> {/* Mobile sidebar overlay */} {isMobileMenuOpen && (
setIsMobileMenuOpen(false)} aria-hidden="true" /> )} {/* Sidebar */} )} {/* Main content area */}
{children}
); }