import { useState, useEffect } from "react"; import Image from "next/image"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { motion, AnimatePresence } from "framer-motion"; // Типы для свойств компонента interface HeroProps { images?: string[]; } export default function Hero({ images = [] }: HeroProps) { // Состояние для текущего индекса слайда const [currentIndex, setCurrentIndex] = useState(0); // Состояние для автоматического воспроизведения const [autoplay, setAutoplay] = useState(true); // Состояние для направления анимации: 1 - следующий слайд, -1 - предыдущий слайд const [direction, setDirection] = useState(0); // Если изображения не переданы или массив пуст, используем стандартное изображение const heroImages = images.length > 0 ? images : ['/photos/head_photo.png']; // Функция для перехода к следующему слайду const nextSlide = () => { setDirection(1); setCurrentIndex((prevIndex) => prevIndex === heroImages.length - 1 ? 0 : prevIndex + 1 ); }; // Функция для перехода к предыдущему слайду const prevSlide = () => { setDirection(-1); setCurrentIndex((prevIndex) => prevIndex === 0 ? heroImages.length - 1 : prevIndex - 1 ); }; // Эффект для автоматического воспроизведения слайдера useEffect(() => { let interval: NodeJS.Timeout; if (autoplay) { interval = setInterval(() => { nextSlide(); }, 5000); // Смена слайда каждые 5 секунд } return () => { if (interval) clearInterval(interval); }; }, [autoplay, currentIndex]); // Определяем варианты анимации для эффекта "скольжения" const variants = { enter: (direction: number) => ({ x: direction > 0 ? "100%" : "-100%", opacity: 0 }), center: { x: 0, opacity: 1 }, exit: (direction: number) => ({ x: direction > 0 ? "-100%" : "100%", opacity: 0 }), }; return (
New Arrivals {/* Убрали затемнение изображения */} {/* Индикаторы слайдов */}
{heroImages.map((_, index) => (
); }