File size: 1,456 Bytes
096c487 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import { Outlet } from "react-router-dom";
import { useState } from "react";
import Sidebar from "../components/Sidebar";
import TopBar from "../components/TopBar";
import GeometricBackground from "../components/GeometricBackground";
import BackgroundElements from "../components/BackgroundElements";
export default function AppLayout() {
const [isSidebarOpen, setIsSidebarOpen] = useState(false);
return (
<div className="flex h-screen bg-transparent text-zinc-100 overflow-hidden relative">
<GeometricBackground />
<BackgroundElements />
{/* Mobile overlay */}
{isSidebarOpen && (
<div
className="fixed inset-0 bg-black/60 z-30 md:hidden backdrop-blur-sm"
onClick={() => setIsSidebarOpen(false)}
/>
)}
{/* Sidebar with mobile slide transition */}
<div className={`fixed inset-y-0 left-0 z-40 transform transition-transform duration-300 ease-in-out md:relative md:translate-x-0 ${isSidebarOpen ? "translate-x-0" : "-translate-x-full"}`}>
<Sidebar onClose={() => setIsSidebarOpen(false)} />
</div>
<div className="flex flex-col flex-1 min-w-0 overflow-hidden w-full">
<TopBar onMenuClick={() => setIsSidebarOpen(true)} />
<main className="flex-1 overflow-y-auto bg-transparent relative z-10 w-full p-2 md:p-0">
<Outlet />
</main>
</div>
</div>
);
}
|