"use client"; import { AnimatePresence, motion } from "motion/react"; import Image from "next/image"; import { type ReactNode, useEffect, useRef, useState } from "react"; import { dropdownVariants } from "@/lib/motion"; interface NavDropdownProps { label: string; icon?: string; children: ReactNode; } export function NavDropdown({ label, icon, children }: NavDropdownProps) { const [open, setOpen] = useState(false); const ref = useRef(null); useEffect(() => { function onKeyDown(e: KeyboardEvent) { if (e.key === "Escape") setOpen(false); } if (open) document.addEventListener("keydown", onKeyDown); return () => document.removeEventListener("keydown", onKeyDown); }, [open]); useEffect(() => { function onOutsideClick(e: MouseEvent) { if (ref.current && !ref.current.contains(e.target as Node)) { setOpen(false); } } if (open) { document.addEventListener("mousedown", onOutsideClick); } return () => document.removeEventListener("mousedown", onOutsideClick); }, [open]); return (
{open && ( {children} )}
); }