import React, { useEffect, useState, useCallback } from 'react'; import useEmblaCarousel from 'embla-carousel-react'; const testimonials = [ { text: "Dieses Buch war der Wendepunkt in meiner chronischen Erschöpfung. Roberto schreibt mit einer Klarheit, die einen direkt im Herzen trifft.", author: "Stefan M.", role: "Unternehmer", stars: 5, }, { text: "Man spürt auf jeder Seite, dass hier jemand schreibt, der den Weg selbst gegangen ist. Grounded Luxury trifft es perfekt.", author: "Julia K.", role: "Ärztin", stars: 5, }, { text: "Das Retreat war lebensverändernd. Die Kombination aus Natur, Theorie und Praxis ist in dieser Form einzigartig.", author: "Markus L.", role: "Creative Director", stars: 5, }, { text: "Endlich ein Ansatz, der Wissenschaft und Spiritualität nicht als Gegensätze sieht, sondern vereint. Danke für diese Arbeit.", author: "Sarah B.", role: "Psychologin", stars: 5, }, { text: "Ich habe schon viele Methoden ausprobiert, aber erst Riboneo hat mir geholfen, wirklich zur Ruhe zu kommen und meine Energie zurückzugewinnen.", author: "Thomas W.", role: "Architekt", stars: 5, }, ]; const TestimonialCarousel: React.FC = () => { const [emblaRef, emblaApi] = useEmblaCarousel({ loop: true, align: 'start' }); const [selectedIndex, setSelectedIndex] = useState(0); const scrollTo = useCallback((index: number) => { if (emblaApi) emblaApi.scrollTo(index); }, [emblaApi]); const onSelect = useCallback(() => { if (!emblaApi) return; setSelectedIndex(emblaApi.selectedScrollSnap()); }, [emblaApi]); useEffect(() => { if (!emblaApi) return; onSelect(); emblaApi.on('select', onSelect); // Auto-play functionality const intervalId = setInterval(() => { if (emblaApi.canScrollNext()) { emblaApi.scrollNext(); } else { emblaApi.scrollTo(0); } }, 5000); return () => { emblaApi.off('select', onSelect); clearInterval(intervalId); }; }, [emblaApi, onSelect]); return (
"{testimonial.text}"
{testimonial.author}
{testimonial.role}