import { Outlet } from "react-router-dom"; import { Sidebar } from "./Sidebar"; import { createContext, useContext, useState, useEffect } from "react"; import { Menu, X, Code2 } from "lucide-react"; import { cn } from "@/lib/utils"; import { CanvasBackground } from "./CanvasBackground"; export const SidebarContext = createContext<{ isCollapsed: boolean; setIsCollapsed: (v: boolean) => void; isMobileOpen: boolean; setIsMobileOpen: (v: boolean) => void; }>({ isCollapsed: false, setIsCollapsed: () => {}, isMobileOpen: false, setIsMobileOpen: () => {} }); export const useSidebar = () => useContext(SidebarContext); export const AppLayout = () => { const [isCollapsed, setIsCollapsed] = useState(false); const [isMobileOpen, setIsMobileOpen] = useState(false); // Auto-collapse on smaller screens useEffect(() => { const handleResize = () => { if (window.innerWidth < 1024) { setIsCollapsed(true); } else { setIsCollapsed(false); setIsMobileOpen(false); } }; handleResize(); window.addEventListener("resize", handleResize); return () => window.removeEventListener("resize", handleResize); }, []); return (
{/* Mobile Header */}
{/* Logo — icon + text */}
ML Learner
{/* Spacer for symmetry */}
{/* Sidebar Overlay for Mobile */} {isMobileOpen && (
setIsMobileOpen(false)} /> )} {/* 3D WebGL Background Layer */} {/* Main content shifts using margin so it never overlaps or leaves a gap */}
); };