"use client"; import { useI18n } from "@/components/I18nProvider"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useEffect, useRef, useState } from "react"; import { Menu, X } from "lucide-react"; const links = [ ["/servers", "Play & maps"], ["/leaderboard", "Leaderboard"], ["/tournaments", "Tournaments"], ["/changelogs", "Changelogs"], ["/downloads", "Downloads"], ["/about", "Guide"], ["/docs", "Docs"], ] as const; export function SiteNav({ forumUrl }: { forumUrl?: string | null }) { const { t } = useI18n(); const pathname = usePathname(); const [openPath, setOpenPath] = useState(null); const open = openPath === pathname; const toggle = useRef(null); const navigation = useRef(null); useEffect(() => { if (!open) return; function dismiss(event: PointerEvent) { if ( event.target instanceof Node && !navigation.current?.contains(event.target) && !toggle.current?.contains(event.target) ) setOpenPath(null); } function escape(event: KeyboardEvent) { if (event.key === "Escape") { setOpenPath(null); toggle.current?.focus(); } } document.addEventListener("pointerdown", dismiss); document.addEventListener("keydown", escape); return () => { document.removeEventListener("pointerdown", dismiss); document.removeEventListener("keydown", escape); }; }, [open]); return ( <> ); }