"use client"; import Image from "next/image"; import Link from "next/link"; import { useEffect, useState } from "react"; import { SlotImage } from "@/components/SlotImage"; import { heroSides, heroSlides } from "@/lib/data"; import type { StaticImageWithUrl } from "@/lib/static-images"; import { slotAlt, slotAspectStyle } from "@/lib/static-images"; const overlayStyle = { background: "linear-gradient(to left, rgba(0,0,0,0.88) 0%, rgba(0,0,0,0.72) 42%, rgba(0,0,0,0.28) 72%, transparent 100%)", }; type Props = { images?: StaticImageWithUrl[]; aspectRatio?: string; sideImages?: StaticImageWithUrl[]; sideAspectRatio?: string; }; export function HeroSlider({ images = [], aspectRatio, sideImages = [], sideAspectRatio, }: Props) { const slides = images; const [index, setIndex] = useState(0); const [paused, setPaused] = useState(false); const count = slides.length > 0 ? slides.length : heroSlides.length; useEffect(() => { setIndex((current) => (count ? current % count : 0)); }, [count]); useEffect(() => { if (paused || count < 2) return; const id = window.setInterval(() => { setIndex((current) => (current + 1) % count); }, 5000); return () => window.clearInterval(id); }, [paused, count]); const sliderStyle = slotAspectStyle(aspectRatio, "21:8"); return (
setPaused(true)} onMouseLeave={() => setPaused(false)} > {slides.length > 0 ? slides.map((slide, i) => { const title = slide.titleFa?.trim(); const english = slide.titleEn?.trim(); const subtitle = slide.subtext?.trim(); const hasCopy = Boolean(title || english || subtitle); return (
{hasCopy ? ( <>
{title ? (

{title}

) : null} {english ? (

{english}

) : null} {subtitle ? (

{subtitle}

) : null}
) : null}
); }) : heroSlides.map((slide, i) => (
{slide.title}
))} {slides.length === 0 ? ( <>
{heroSlides.map((slide, i) => (

{slide.title}

{slide.english}

{slide.subtitle}

{slide.button}
))} ) : null} {count > 1 ? (
{Array.from({ length: count }, (_, i) => (
) : null}
{sideImages.length > 0 ? sideImages.map((image) => { const title = image.titleFa?.trim(); const english = image.titleEn?.trim(); const subtitle = image.subtext?.trim(); const hasCopy = Boolean(title || english || subtitle); const frame = (
{hasCopy ? ( <>
{title ? (

{title}

) : null} {english ? (

{english}

) : null} {subtitle ? (

{subtitle}

) : null}
) : null}
); return image.linkUrl ? ( {frame} ) : (
{frame}
); }) : heroSides.map((side) => (
{side.title}

{side.title}

{side.english}

{side.subtitle}

))}
); }