From 91ad054a41c0241321efcb9569462d57cf8c8c7f Mon Sep 17 00:00:00 2001 From: Developer Date: Tue, 28 Jul 2026 08:30:43 +0700 Subject: [PATCH] feat: add floating top navigation bar Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/components/layout/top-nav.tsx | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 services/frontend/src/components/layout/top-nav.tsx diff --git a/services/frontend/src/components/layout/top-nav.tsx b/services/frontend/src/components/layout/top-nav.tsx new file mode 100644 index 0000000..5776ca8 --- /dev/null +++ b/services/frontend/src/components/layout/top-nav.tsx @@ -0,0 +1,81 @@ +"use client"; + +import { usePathname, useRouter } from "next/navigation"; +import { Moon, Sun } from "lucide-react"; +import { useEffect, useState } from "react"; +import { navItems, isActivePath } from "@/lib/navigation"; + +export function TopNav() { + const pathname = usePathname(); + const router = useRouter(); + const [theme, setTheme] = useState<"light" | "dark">("dark"); + + useEffect(() => { + const stored = localStorage.getItem("theme") as "light" | "dark" | null; + if (stored) setTheme(stored); + }, []); + + const toggleTheme = () => { + const next = theme === "dark" ? "light" : "dark"; + setTheme(next); + localStorage.setItem("theme", next); + document.documentElement.classList.remove("light", "dark"); + document.documentElement.classList.add(next); + }; + + return ( +
+ {/* Brand */} +
+
+ D + +
+ + Discord Automod + +
+ + {/* Nav links */} + + + {/* Right side */} +
+ +
+
+ ); +}