"use client"; import { useCallback, useRef, useState } from "react"; import Image from "next/image"; import type { LastYearWinner } from "@/content/last-year-winners"; import { LastYearWinnerTip } from "@/components/home/LastYearWinnerTip"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { cn } from "@/lib/utils"; const GRV_LOGO = "/branding/logo-icon.png"; type Props = { company: LastYearWinner; tipKey: string; isTipOpen: boolean; onTipOpen: (key: string) => void; onTipClose: () => void; variant?: "on-green" | "on-light"; className?: string; }; export function LastYearWinnerMark({ company, tipKey, isTipOpen, onTipOpen, onTipClose, variant = "on-light", className, }: Props) { const closeTimer = useRef | null>(null); const [failed, setFailed] = useState(false); const src = company.logoSrc ?? GRV_LOGO; const showImage = !failed && src; const logoOnly = !company.name; const onLight = variant === "on-light"; const clearCloseTimer = useCallback(() => { if (closeTimer.current) { clearTimeout(closeTimer.current); closeTimer.current = null; } }, []); const handleEnter = useCallback(() => { clearCloseTimer(); onTipOpen(tipKey); }, [clearCloseTimer, onTipOpen, tipKey]); const handleLeave = useCallback(() => { clearCloseTimer(); closeTimer.current = setTimeout(() => onTipClose(), 120); }, [clearCloseTimer, onTipClose]); const handleOpenChange = useCallback( (open: boolean) => { if (open) onTipOpen(tipKey); else onTipClose(); }, [onTipOpen, onTipClose, tipKey] ); return ( {isTipOpen ? ( e.preventDefault()} > ) : null} ); }