import type { ReactNode } from 'react'; import { Header } from './Header'; import { Sidebar } from './Sidebar'; import { GlobalPlayer } from '@/features/player/components/GlobalPlayer'; import { useUIStore } from '@/stores/ui'; import { cn } from '@/lib/utils'; interface DashboardLayoutProps { children: ReactNode; } /** * Layout principal du dashboard avec sidebar et header. * Utilise une structure flex avec sidebar fixe et contenu scrollable. * * FIX: La sidebar est fixe (fixed left-6), donc le contenu principal doit avoir * un margin-left pour ne pas être masqué par la sidebar. */ export function DashboardLayout({ children }: DashboardLayoutProps) { const { sidebarOpen } = useUIStore(); // FIX: Calculer le margin-left pour compenser la sidebar fixe // Sidebar: left-6 (24px) + width (w-64 = 256px quand ouverte, w-20 = 80px quand fermée) + gap (24px) // Sur desktop (lg): sidebar est toujours visible, donc toujours besoin de margin // Sur mobile: sidebar est cachée (-translate-x-full), donc pas de margin return (
{/* FIX: Ajouter margin-left pour compenser la sidebar fixe et éviter la superposition */}
{/* FIX: Ajouter padding-top pour compenser le header fixe (h-16 + mt-4 = 80px = top-20) */}
{children}
); }