"use client"; import { useEffect, useRef, useState } from "react"; import { Dialog, MenuList } from "../pixel"; import { nav } from "../../lib/content"; import styles from "./top-bar.module.css"; /** Phone navigation: a MENU button that opens a pause-menu window; Escape or a pick closes it. */ export function SiteMenu() { const [open, setOpen] = useState(false); const root = useRef(null); const button = useRef(null); useEffect(() => { if (!open) return; root.current!.querySelector('[role="menuitem"]')!.focus(); const onKeyDown = (event: KeyboardEvent) => { if (event.key !== "Escape") return; setOpen(false); button.current!.focus(); }; const onPointerDown = (event: PointerEvent) => { if (!root.current!.contains(event.target as Node)) setOpen(false); }; document.addEventListener("keydown", onKeyDown); document.addEventListener("pointerdown", onPointerDown); return () => { document.removeEventListener("keydown", onKeyDown); document.removeEventListener("pointerdown", onPointerDown); }; }, [open]); return (
{open ? ( ) : null}
); }