'use client' import * as Headless from '@headlessui/react' import { ArrowLongRightIcon } from '@heroicons/react/20/solid' import { clsx } from 'clsx' import { motion, useMotionValueEvent, useScroll, useSpring, } from 'framer-motion' import { useCallback, useLayoutEffect, useRef, useState } from 'react' import useMeasure from 'react-use-measure' import { Container } from './Container' import { Link } from './link' import { Heading, Subheading } from './text' const testimonials = [ { img: '/images/veda1.jpg', name: '0 - 6 Years Old', title: 'From birth to age 6, we offer ECD programs that change lives forever.', subtitle: 'A beautiful 50-meter dahabiya offering a tranquil and organic platform for personalized cruises.', quote: 'VEDA 1', href: '/phases/phase1', }, { img: '/images/veda2.jpg', name: '6 - 15 Years Old', title: 'Unlock the Potential of Youth with transformational learning experiences', subtitle: 'An elegant 45-meter dahabiya, ideal for hosting larger groups, healing retreats, company getaways, and more.', quote: 'VEDA 2', href: '/phases/phase2', }, { img: '/images/veda3.jpg', name: '15 - 25 Years Old', title: 'Skills that Earn & Regenerate Vocational paths that equip young people to live with purpose.', subtitle: 'A cozy 18-meter dahabiya offering a serene floating home, perfect for private groups seeking tranquility and comfort on the Nile.', quote: 'VEDA 3', href: '/phases/phase3', }, { img: '/images/veda4.jpg', name: 'All Ages', title: 'A unique portfolio of impact proven Community-led solutions worth implementing', subtitle: 'A spaciou 55-meter dahabeya offering a serene retreat, perfect for bigger groups seeking tranquility and comfort on the Nile.', quote: 'VEDA 4', href: '/phases/phase4', }, ] function TestimonialCard({ subtitle, name, title, img, href, children, bounds, scrollX, ...props }) { let ref = useRef(null) let computeOpacity = useCallback(() => { let element = ref.current if (!element || bounds.width === 0) return 1 let rect = element.getBoundingClientRect() if (rect.left < bounds.left) { let diff = bounds.left - rect.left let percent = diff / rect.width return Math.max(0.5, 1 - percent) } else if (rect.right > bounds.right) { let diff = rect.right - bounds.right let percent = diff / rect.width return Math.max(0.5, 1 - percent) } else { return 1 } }, [ref, bounds.width, bounds.left, bounds.right]) let opacity = useSpring(computeOpacity(), { stiffness: 154, damping: 23, }) useLayoutEffect(() => { opacity.set(computeOpacity()) }, [computeOpacity, opacity]) useMotionValueEvent(scrollX, 'change', () => { opacity.set(computeOpacity()) }) return ( {/* Image Section */}
{/* Content Section Below Image */}

{children}

{subtitle}

Learn More
) } export function Boat() { let scrollRef = useRef(null) let { scrollX } = useScroll({ container: scrollRef }) let [setReferenceWindowRef, bounds] = useMeasure() let [activeIndex, setActiveIndex] = useState(0) useMotionValueEvent(scrollX, 'change', (x) => { if (scrollRef.current && scrollRef.current.children[0]) { setActiveIndex(Math.floor(x / scrollRef.current.children[0].clientWidth)) } }) function scrollTo(index) { let gap = 32 let width = scrollRef.current.children[0].offsetWidth scrollRef.current.scrollTo({ left: (width + gap) * index }) } return (
{/* Text Content - Left Side */}

Dahabiyas

Discover peaceful platforms where every detail ensures a truly memorable stay. Our fleet of traditional dahabiyas combines authentic Nile heritage with modern comfort, offering intimate sailing experiences that connect you with Egypt's timeless river culture.

{/* Carousel - Right Side */}
{testimonials.map(({ img, name, title, quote, href, subtitle }, testimonialIndex) => ( scrollTo(testimonialIndex)} > {quote} ))}
) }