'use client'; /** * سکشن اول سایت (Hero) — ایده کلی از صفحه وندینگ سایت Sielaff گرفته شده: * یک اسلایدر تمام‌عرض که هر ۵ ثانیه به‌صورت خودکار به اسلاید بعدی می‌رود، * همراه با یک شکل مورب رنگی (به‌جای قرمز آن‌ها، رنگ سبز برند خودمان #00a693)، * عنوان بزرگ دو خطی، و دکمه‌های فلش قبلی/بعدی برای ناوبری دستی. */ import { useCallback, useEffect, useRef, useState } from 'react'; import { LeftOutlined, RightOutlined } from '@ant-design/icons'; import { useLanguage } from '@/app/context/LanguageContext'; const AUTOPLAY_DELAY = 5000; // هر ۵ ثانیه اسلاید عوض می‌شود export default function HeroSection() { const { t, dir } = useLanguage(); const slides = t.hero.slides; const [activeIndex, setActiveIndex] = useState(0); const timerRef = useRef(null); // رفتن به اسلاید بعدی (با چرخش به اول لیست وقتی به آخر رسید) const goToNext = useCallback(() => { setActiveIndex((prev) => (prev + 1) % slides.length); }, [slides.length]); const goToPrev = useCallback(() => { setActiveIndex((prev) => (prev - 1 + slides.length) % slides.length); }, [slides.length]); // تایمر پخش خودکار: هر بار که اسلاید عوض می‌شود، تایمر قبلی پاک و یک تایمر // جدید ۵ ثانیه‌ای ست می‌شود. با کلیک دستی روی فلش‌ها هم همین تابع دوباره // صدا زده می‌شود تا شمارش از نو شروع شود (تجربه کاربری بهتر). const restartAutoplay = useCallback(() => { if (timerRef.current) clearInterval(timerRef.current); timerRef.current = setInterval(goToNext, AUTOPLAY_DELAY); }, [goToNext]); useEffect(() => { restartAutoplay(); return () => { if (timerRef.current) clearInterval(timerRef.current); }; }, [restartAutoplay]); const handleManualNav = (direction) => { if (direction === 'next') goToNext(); else goToPrev(); restartAutoplay(); // شمارش ۵ ثانیه بعد از کلیک دستی از نو شروع شود }; const slide = slides[activeIndex]; return (
{/* ------------------------------------------------------------------ */} {/* شکل مورب تزئینی سمت راست/چپ — نسخه سبز برند به‌جای قرمز Sielaff */} {/* ------------------------------------------------------------------ */}
{/* ------------------------------------------------------------------ */} {/* اسلایدهای عکس — همه اسلایدها روی هم قرار دارند و فقط با opacity */} {/* محو/نمایان می‌شوند (transition نرم به‌جای پرش ناگهانی) */} {/* ------------------------------------------------------------------ */}
{slides.map((s, i) => (
{s.titleLines.join('
))}
{/* لایه‌ی نیمه‌شفاف پشت متن، برای خوانایی روی هر عکسی */}
{/* ------------------------------------------------------------------ */} {/* متن روی اسلاید: کیکر کوچک + عنوان بزرگ دو خطی + توضیح + دکمه CTA */} {/* ------------------------------------------------------------------ */}
{slide.kicker}

{slide.titleLines.map((line, i) => ( {line} ))}

{slide.sub}

{t.hero.cta}
{/* ------------------------------------------------------------------ */} {/* فلش‌های ناوبری دستی (قبلی / بعدی) — شبیه سایت Sielaff، وسط دو طرف */} {/* ------------------------------------------------------------------ */} {/* نقطه‌های شمارشگر اسلاید پایین صفحه — کلیک روی هرکدام مستقیم به همان اسلاید می‌رود */}
{slides.map((s, i) => (
); }