"use client"; import copy from "copy-to-clipboard"; import { animate, cubicBezier } from "motion"; import { AnimatePresence, motion } from "motion/react"; import Link from "next/link"; import { useCallback, useEffect, useRef, useState } from "react"; import FirecrawlIcon from "@/components/shared/firecrawl-icon/firecrawl-icon"; import Logo from "@/components/shared/header/_svg/Logo"; import { useHeaderContext } from "@/components/shared/header/HeaderContext"; import { cn } from "@/utils/cn"; import Download from "./_svg/Download"; import Guidelines from "./_svg/Guidelines"; import Icon from "./_svg/Icon"; export default function HeaderBrandKit() { const [open, setOpen] = useState(false); const { dropdownContent, clearDropdown } = useHeaderContext(); useEffect(() => { document.addEventListener("click", () => { setOpen(false); }); }, [open]); useEffect(() => { if (dropdownContent) { setOpen(false); } }, [dropdownContent]); return (
{ e.preventDefault(); setOpen(!open); if (!open) { clearDropdown(true); } }} > {open && }
); } const Menu = ({ setOpen }: { setOpen: (open: boolean) => void }) => { const backgroundRef = useRef(null); const timeoutRef = useRef(null); const onMouseEnter = useCallback((e: React.MouseEvent) => { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } const t = e.target as HTMLElement; const target = t instanceof HTMLButtonElement ? t : (t.closest("button") as HTMLButtonElement); if (backgroundRef.current) { animate(backgroundRef.current, { scale: 0.98, opacity: 1 }).then(() => { if (backgroundRef.current) { animate(backgroundRef.current!, { scale: 1 }); } }); animate( backgroundRef.current, { y: target.offsetTop - 4, }, { ease: cubicBezier(0.1, 0.1, 0.25, 1), duration: 0.2, }, ); } }, []); const onMouseLeave = useCallback(() => { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } timeoutRef.current = window.setTimeout(() => { if (backgroundRef.current) { animate(backgroundRef.current, { scale: 1, opacity: 0 }); } }, 100); }, []); return (
); }; const Button = (attributes: React.ButtonHTMLAttributes) => { return ( ); };