"use client"; import { cn } from "@/lib/utils"; import React, { useEffect, useState } from "react"; export const InfiniteMovingCards = ({ direction = "left", speed = "fast", pauseOnHover = true, children, }: { direction?: "left" | "right"; speed?: "fast" | "normal" | "slow"; pauseOnHover?: boolean; children: React.ReactNode; }) => { const containerRef = React.useRef(null); const scrollerRef = React.useRef(null); const hasInitialized = React.useRef(false); const [start, setStart] = useState(false); useEffect(() => { if (!containerRef.current || !scrollerRef.current || hasInitialized.current) { return; } const scrollerContent = Array.from(scrollerRef.current.children); scrollerContent.forEach((item) => { const duplicatedItem = item.cloneNode(true); scrollerRef.current?.appendChild(duplicatedItem); }); hasInitialized.current = true; setStart(true); }, []); useEffect(() => { if (!containerRef.current) { return; } const animationDirection = direction === "left" ? "forwards" : "reverse"; containerRef.current.style.setProperty("--animation-direction", animationDirection); }, [direction]); useEffect(() => { if (!containerRef.current) { return; } const duration = speed === "fast" ? "20s" : speed === "normal" ? "40s" : "80s"; containerRef.current.style.setProperty("--animation-duration", duration); }, [speed]); return (
{children}
); };