"use client"; import { useEffect, useState } from "react"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { Placeholder } from "@/components/Placeholder"; import { SlotLink } from "@/components/SlotLink"; import { parseAspectRatio } from "@/lib/static-images"; import type { SlotMediaItem } from "@/lib/static-images"; function circularOffset(index: number, active: number, length: number) { let diff = index - active; if (diff > length / 2) diff -= length; if (diff < -length / 2) diff += length; return diff; } const slideWidth = "min(1280px, calc(100vw - 5rem))"; export function Hero({ slides, aspectRatio }: { slides: SlotMediaItem[]; aspectRatio?: string }) { const [active, setActive] = useState(0); const [paused, setPaused] = useState(false); const ratio = parseAspectRatio(aspectRatio); useEffect(() => { setActive(0); }, [slides.length]); useEffect(() => { if (slides.length < 2 || paused) return; const timer = setInterval(() => { setActive((current) => (current + 1) % slides.length); }, 6000); return () => clearInterval(timer); }, [paused, slides.length]); const go = (direction: number) => { if (slides.length < 2) return; setActive((current) => (current + direction + slides.length) % slides.length); }; if (slides.length === 0) return null; return (
setPaused(true)} onMouseLeave={() => setPaused(false)} > {slides.map((item, i) => { const offset = circularOffset(i, active, slides.length); const isCenter = offset === 0; const isPeek = Math.abs(offset) === 1; return (
{isCenter ? (

{item.title}

{item.kicker ? (

{item.kicker}

) : null}
مشاهده قطعات
) : ( )}
); })}
{slides.map((item, i) => (
); }