"use client"; import { useCallback, useEffect, useState } from "react"; import { lastYearWinners, lastYearWinnersCopy } from "@/content/last-year-winners"; import { LastYearWinnerMark } from "@/components/home/LastYearWinnerMark"; import { cn } from "@/lib/utils"; type Props = { variant?: "on-green" | "on-light"; className?: string; }; export function LastYearWinnersScroll({ variant = "on-green", className }: Props) { const items = [...lastYearWinners, ...lastYearWinners]; const onLight = variant === "on-light"; const [hoverKey, setHoverKey] = useState(null); const [pinnedKey, setPinnedKey] = useState(null); const isPaused = pinnedKey !== null; const pinTip = useCallback((key: string) => { setPinnedKey(key); setHoverKey(null); }, []); const unpinTip = useCallback(() => { setPinnedKey(null); }, []); const setHover = useCallback( (key: string | null) => { if (pinnedKey) return; setHoverKey(key); }, [pinnedKey] ); useEffect(() => { if (!pinnedKey) return; const dismiss = () => setPinnedKey(null); const onPointerDown = (e: PointerEvent) => { const target = e.target as HTMLElement; if (target.closest("[data-winner-interactive]")) return; dismiss(); }; const onScroll = () => dismiss(); document.addEventListener("pointerdown", onPointerDown, true); window.addEventListener("scroll", onScroll, true); return () => { document.removeEventListener("pointerdown", onPointerDown, true); window.removeEventListener("scroll", onScroll, true); }; }, [pinnedKey]); return (

{lastYearWinnersCopy.eyebrow}

{lastYearWinnersCopy.headline}

{lastYearWinnersCopy.hoverHint}

{items.map((company, i) => { const tipKey = `${company.id}-${i}`; const isPinned = pinnedKey === tipKey; const isOpen = isPinned || (!pinnedKey && hoverKey === tipKey); return ( pinTip(tipKey)} onUnpin={unpinTip} onHover={setHover} /> ); })}
); }