"use client"; import React, { useRef, useEffect, useState } from "react"; import { cn } from "../../lib/utils"; import { Pause, Play } from "lucide-react"; export interface SlidingLogoMarqueeItem { id: string; content: React.ReactNode; href?: string; } export interface SlidingLogoMarqueeProps { items: SlidingLogoMarqueeItem[]; speed?: number; pauseOnHover?: boolean; enableBlur?: boolean; blurIntensity?: number; height?: string; width?: string; gap?: string; scale?: number; direction?: "horizontal" | "vertical"; autoPlay?: boolean; backgroundColor?: string; showGridBackground?: boolean; className?: string; onItemClick?: (item: SlidingLogoMarqueeItem) => void; enableSpillEffect?: boolean; animationSteps?: number; showControls?: boolean; } export function SlidingLogoMarquee({ items, speed = 60, pauseOnHover = true, enableBlur = true, blurIntensity = 1, height = "100px", width = "100%", gap = "0.5rem", scale = 1, direction = "horizontal", autoPlay = true, backgroundColor, showGridBackground = false, className, onItemClick, enableSpillEffect = false, animationSteps = 8, showControls = true, }: SlidingLogoMarqueeProps) { const containerRef = useRef(null); const [isPlaying, setIsPlaying] = useState(autoPlay); const [dimensions, setDimensions] = useState({ width: 0, height: 0 }); useEffect(() => { const updateDimensions = () => { if (containerRef.current) { const rect = containerRef.current.getBoundingClientRect(); setDimensions({ width: rect.width, height: rect.height }); } }; updateDimensions(); window.addEventListener("resize", updateDimensions); return () => window.removeEventListener("resize", updateDimensions); }, []); const handleItemClick = (item: SlidingLogoMarqueeItem) => { if (item.href) { window.open(item.href, "_blank", "noopener,noreferrer"); } onItemClick?.(item); }; const togglePlayState = () => { setIsPlaying(!isPlaying); }; const blurDivs = Array.from({ length: animationSteps }, (_, index) => (
)); return ( <>
pauseOnHover && setIsPlaying(false)} onMouseLeave={() => pauseOnHover && setIsPlaying(true)} > {showGridBackground &&
}
{enableBlur && (
{blurDivs}
)}
    {items.map((item, index) => (
  • handleItemClick(item)} role="button" tabIndex={0} onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { handleItemClick(item); } }} > {item.content}
  • ))}
{enableBlur && (
{blurDivs}
)}
{showControls && ( )}
); } export default SlidingLogoMarquee;