"use client"; import { useEffect, useState } from "react"; import { grantFundingCycle } from "@/content/grants"; import { cn } from "@/lib/utils"; type Figure = (typeof grantFundingCycle)[number]; type Props = { figures?: readonly Figure[]; intervalMs?: number; className?: string; valueClassName?: string; showCaption?: boolean; captionClassName?: string; }; export function CyclingGrantAmount({ figures = grantFundingCycle, intervalMs = 3200, className, valueClassName, showCaption = false, captionClassName, }: Props) { const [index, setIndex] = useState(0); const [visible, setVisible] = useState(true); useEffect(() => { let swapTimer: ReturnType; const tick = setInterval(() => { setVisible(false); swapTimer = setTimeout(() => { setIndex((i) => (i + 1) % figures.length); setVisible(true); }, 220); }, intervalMs); return () => { clearInterval(tick); clearTimeout(swapTimer); }; }, [figures.length, intervalMs]); const current = figures[index]; return ( {current.label}: {current.display} {showCaption && ( {current.label} )} ); }