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'; import { AstralBackground } from '../ui/AstralBackground'; interface DashboardLayoutProps { children: ReactNode; } /** * Layout principal "App Shell" - Veza Professional V2 * * Architecture: * - Body: Fixed viewport (overflow-hidden) * - Sidebar: Fixed left, z-index high * - Main: Scrollable container independent of window * - Header: Sticky top within Main */ export function DashboardLayout({ children }: DashboardLayoutProps) { const { sidebarOpen } = useUIStore(); return (
{/* 1. Global Background (Fixed z-0) */} {/* 2. Fixed Sidebar (z-90) */} {/* 3. Main Content Area (The only thing that scrolls) */}
{/* Header is part of the flow but stays at top */}
{/* Scrollable Content Container */}
{children}
{/* Floating Player: wrapper constrains width to main area; GlobalPlayer is fixed inside */}
); }