// Page components for The Wedding Haven // ============ HOME ============ function HomePage({ t, lang, navigate, onEnquire }) { const heroes = ['stock-decor-arch-beach.webp', 'stock-decor-floral-arch.webp', 'stock-decor-tablescape-candles.webp']; const [heroIdx, setHeroIdx] = useState(0); useEffect(() => { const id = setInterval(() => setHeroIdx(i => (i + 1) % heroes.length), 7500); return () => clearInterval(id); }, []); return (
{/* HERO */}
{heroes.map((src, i) => (
))}
{t.hero.eyebrow}

{t.hero.title[0]}
{t.hero.title[1]}

{t.hero.sub}

{t.hero.ctaA} navigate('weddings')}>{t.hero.ctaB}
{/* Slide indicators */}
{heroes.map((_, i) => (
{/* Scroll indicator */}
{t.hero.scroll} ↑
{/* FOUNDER NOTE */}
{t.intro.eyebrow}

"{t.intro.body}"

{t.intro.sign}
{/* SELECTED WEDDINGS */}
{t.weddings.eyebrow}

{t.weddings.title}

{t.weddings.sub}

navigate('weddings')}>{t.weddings.seeAll} →
{WEDDINGS.slice(0, 3).map(w => ( navigate('detail', { id })} /> ))}
{/* WHY US */}
{t.why.eyebrow}

Built for couples planning across borders.

Four reasons couples in Dubai, Riyadh, London and Toronto have trusted us with their day since 2015.

{t.why.items.map((it, i) => (
{it.k}
{it.t}

{it.d}

))}
{/* SERVICES */}
{t.services.eyebrow}

{t.services.title}

{t.services.sub}

{t.services.items.map((s, i) => (
navigate('services')}>
0{i+1}

{s.t}

{s.d}

))}
{/* EDITORIAL SPLIT */}
The book
{t.about.book.title}
{t.about.eyebrow}

{t.about.title}

{t.about.body[0]}

{t.about.body[1]}

{t.about.creds.map(c => ( {c} ))}
navigate('about')}>{t.nav.about} →
{/* ENQUIRY BAND */}
{t.band.whisper}

{t.band.title}

{t.band.sub}

{t.band.cta} navigate('weddings')}>{t.weddings.seeAll}
); } // ============ REAL WEDDINGS ============ function WeddingsPage({ t, lang, navigate }) { const [filter, setFilter] = useState('all'); const filtered = WEDDINGS.filter(w => filter === 'all' || w.region === filter); return (
{/* Filters */}
{[ { k: 'all', label: t.weddings.all }, { k: 'uae', label: t.weddings.uae }, { k: 'intl', label: t.weddings.intl }, ].map(f => ( ))}
{filtered.length} {filtered.length === 1 ? 'wedding' : 'weddings'}
{filtered.map(w => ( navigate('detail', { id })} /> ))}
A note on consent

We only publish a wedding once the couple has given written consent and the photographer has confirmed usage rights and credit. Some of the most beautiful weddings we have planned will never appear here — and we are at peace with that.

); } function PageHero({ t, eyebrow, title, sub, image }) { return (
{eyebrow}

{title}

{sub ?

{sub}

: null}
); } // ============ WEDDING DETAIL ============ function WeddingDetailPage({ t, lang, navigate, id, onEnquire }) { const w = WEDDINGS.find(x => x.id === id) || WEDDINGS[0]; if (w.status === 'pending') { return
Pending
; } return (
{/* Cover */}
{w.style} · {lang === 'ar' ? w.seasonAr : w.seasonEn}

{lang === 'ar' ? w.locationAr : w.locationEn}

{/* Story */}
{t.detail.ofTwelve}
{lang === 'ar' ? 'الموقع' : 'Location'}
{lang === 'ar' ? w.locationAr : w.locationEn}
{lang === 'ar' ? 'الموسم' : 'Season'}
{lang === 'ar' ? w.seasonAr : w.seasonEn}
{lang === 'ar' ? 'الطابع' : 'Style'}
{w.style}
{t.detail.credit}
{w.photographer}
{(lang === 'ar' ? w.storyAr : w.storyEn).map((p, i) => (

{p}

))}
{/* Gallery */}
{w.gallery[5] ?
: null}
{t.detail.credit} — {w.photographer}
{/* CTA */}

{t.detail.planLike}

{t.band.sub}

{t.band.cta}
); } // ============ SERVICES ============ function ServicesPage({ t, lang, onEnquire }) { return (
{t.services.items.map((s, i) => (
0{i+1}

{s.t}

{s.d}

    {['Venue & destination scouting', 'Vendor curation & contracts', 'Design & creative direction', 'Production & coordination'].slice(0, 3 + (i % 2)).map(item => (
  • {item}
  • ))}
))}
{lang === 'ar' ? 'الباقات والاستثمار' : 'Packages & investment'}

{lang === 'ar' ? 'كلّ حفل زفافٍ مختلف — ولذلك العرض كذلك.' : 'Every wedding is different. So is every quote.'}

{lang === 'ar' ? 'لا نُدرج أسعاراً ثابتة لأنّنا لا نعمل بقوالب جاهزة. بعد جلسة الاستشارة الأولى نُعدّ عرضاً مخصصاً يعكس مكان زفافكما، عدد ضيوفكما، ونطاق ما تحتاجانه منا — لا أكثر، لا أقلّ.' : 'We don\'t publish fixed packages, because we don\'t plan from templates. After your first consultation we prepare a bespoke proposal that reflects your venue, your guest count, and the scope you need from us — nothing more, nothing less.'}

{t.services.enquireCta}
); } // ============ ABOUT ============ function AboutPage({ t, lang, onEnquire, navigate }) { return (
{/* Founder portrait placeholder */}
Founder portrait
Awaiting hi-res from client
May Abu Jaber-Halasa · Founder
{t.about.body.map((p, i) => (

{p}

))}
{[ { t: 'WPIC', s: 'Wedding Planners Institute of Canada' }, { t: 'TICO', s: 'Travel Industry Council of Ontario' }, ].map(c => (
{c.t}
{c.s}
))}
{lang === 'ar' ? 'نخطّط بـ' : 'We plan in'}
{t.about.langs.map(l => ( {l} ))}
{/* Book section */}
The Wedding Haven
A Guide to
Destination
Weddings
May Abu Jaber-Halasa
ISBN 978-0-46417231-4
{lang === 'ar' ? 'الكتاب' : 'The book'}

{t.about.book.title}

{lang === 'ar' ? 'كتبَتْها ماي عام 2018 بعد عقدٍ من تخطيط حفلات الزفاف عبر الحدود. اعتبره الدليل الذي نعمل به نحن — لكن مفتوحٌ لكم لتقرأوه قبل المحادثة الأولى.' : 'May wrote it in 2018, after a decade of planning weddings across borders. Think of it as the playbook we plan from — but yours to read before our first conversation.'}

{t.about.book.cta} →

{t.band.title}

{t.band.cta}
); } // ============ CONTACT ============ function ContactPage({ t, lang }) { return (
); } function InfoBlock({ label, value, note, href }) { return (
{label}
{href ? e.currentTarget.style.borderBottomColor = 'var(--champagne)'} onMouseLeave={e => e.currentTarget.style.borderBottomColor = 'transparent'}>{value} :
{value}
} {note ?
{note}
: null}
); } Object.assign(window, { HomePage, WeddingsPage, WeddingDetailPage, ServicesPage, AboutPage, ContactPage, PageHero });