import ScrollReveal from "@/components/ui/ScrollReveal"; import TextAnimation from "@/components/ui/TextAnimation"; import ImageOrVideo from "@/components/ui/ImageOrVideo"; import Button from "@/components/ui/Button"; import { cls } from "@/lib/utils"; type CarouselItem = { label: string; } & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }); type FeaturesCarouselMarqueeProps = { tag: string; title: string; description: string; primaryButton?: { text: string; href: string }; secondaryButton?: { text: string; href: string }; items: CarouselItem[]; textAnimation: "slide-up" | "fade-blur" | "fade"; }; const TAG_STYLES = [ { pos: "-top-3 -left-2", rotate: "-rotate-3" }, { pos: "-bottom-3 -right-2", rotate: "rotate-3" }, { pos: "-top-3 -right-3", rotate: "rotate-6" }, { pos: "-bottom-3 -left-3", rotate: "-rotate-3" }, { pos: "-top-2 left-4", rotate: "-rotate-6" }, { pos: "-bottom-2 right-4", rotate: "rotate-3" }, ]; const FeaturesCarouselMarquee = ({ tag, title, description, primaryButton, secondaryButton, items, textAnimation, }: FeaturesCarouselMarqueeProps) => { const duplicated = [...items, ...items, ...items, ...items]; return (

{tag}

{(primaryButton || secondaryButton) && (
{primaryButton &&
)}
{duplicated.map((item, i) => { const ts = TAG_STYLES[i % TAG_STYLES.length]; return (

{item.label}

); })}
); }; export default FeaturesCarouselMarquee;