// Shared UI components const { useState, useEffect, useRef } = React; const cx = (...xs) => xs.filter(Boolean).join(' '); // --- Navigation --- function Navbar({ t, route, navigate, onEnquire, lang, setLang, dark }) { const [scrolled, setScrolled] = useState(false); const [open, setOpen] = useState(false); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 24); window.addEventListener('scroll', onScroll); onScroll(); return () => window.removeEventListener('scroll', onScroll); }, []); const links = [ { k: 'weddings', label: t.nav.weddings }, { k: 'services', label: t.nav.services }, { k: 'about', label: t.nav.about }, { k: 'contact', label: t.nav.contact }, ]; const onDark = dark && !scrolled; return (
navigate('home')} style={{ display: 'flex', alignItems: 'center', gap: 12, cursor: 'pointer' }}>
The Wedding Haven
Dubai · Toronto · Worldwide
); } function Logomark({ color = 'currentColor', size = 30 }) { return ( ); } // --- Buttons --- function ButtonPrimary({ children, onClick, dark, large, style }) { return ( ); } function ButtonGhost({ children, onClick, dark, large, style }) { return ( ); } // --- Section primitives --- function Section({ children, dark, tone, style, id }) { const bg = dark ? 'var(--noir)' : tone === 'cream' ? 'var(--cream)' : 'var(--paper)'; const fg = dark ? '#F6F1EA' : 'var(--ink)'; return (
{children}
); } function Eyebrow({ children, color }) { return (
{children}
); } function H2({ children, style }) { return (

{children}

); } // --- Image placeholder helper --- function Img({ src, alt, ratio, style, credit, className }) { return (
{alt {credit ? (
{credit}
) : null}
); } // --- Footer --- function Footer({ t, navigate, onEnquire, lang, setLang }) { return ( ); } function FooterCol({ title, items, navigate }) { return (
{title}
); } // --- Wedding Card --- function WeddingCard({ w, lang, t, onOpen }) { const isPending = w.status === 'pending'; if (isPending) { return (
{/* Subtle decorative pattern */}
{t.weddings.pending}
{lang === 'ar' ? w.regionAr : w.regionEn}
{lang === 'ar' ? w.seasonAr : w.seasonEn}
); } return (
onOpen(w.id)} style={{ cursor: 'pointer' }} className="card-hover">
{w.style}

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

{lang === 'ar' ? w.seasonAr : w.seasonEn}

{lang === 'ar' ? w.blurbAr : w.blurbEn}

{t.weddings.view}
); } // --- Enquiry form --- function EnquiryForm({ t, lang, compact }) { const [sent, setSent] = useState(false); const [form, setForm] = useState({ name: '', email: '', phone: '', date: '', guests: '', where: '', scope: '', message: '', consent: true }); const submit = (e) => { e.preventDefault(); setSent(true); }; if (sent) { return (
{t.contact.form.sent}
); } const Field = ({ id, label, children, span }) => (
{children}
); const inputStyle = { width: '100%', background: 'transparent', border: 'none', borderBottom: '1px solid var(--line)', padding: '10px 0 12px', fontSize: 16, fontFamily: 'inherit', color: 'var(--ink)', outline: 'none', transition: 'border-color 200ms', }; return (
setForm({ ...form, name: e.target.value })} /> setForm({ ...form, email: e.target.value })} /> setForm({ ...form, phone: e.target.value })} /> setForm({ ...form, date: e.target.value })} /> setForm({ ...form, guests: e.target.value })} />
{t.contact.form.scopeOpts.map(o => ( ))}