// Home screen + Umrah entry + Services hub // Spec: // - Top promo banner slider // - Service icons grid (no search bar) // - Recommended / Last minute / Luxury / Best price carousels // - Large modern package cards with full-width images // ─── Banner slide ───────────────────────────────────────────────────── function PromoBanner({ theme, lang, variant = 'main' }) { const T = theme; const l = L[lang]; const rtl = isRTL(lang); const v = { main: { headline: rtl ? 'عمرة رمضان' : 'Ramadan Umrah', sub: rtl ? 'باقات تبدأ من 1,499 ر.س' : 'Packages from 1,499 SAR', tone: 'camel', tag: rtl ? 'حصري' : 'Exclusive' }, deal: { headline: rtl ? 'خصم 30% على الفنادق' : '30% off select hotels', sub: rtl ? 'لفترة محدودة' : 'Limited time', tone: 'dark', tag: rtl ? 'صفقة' : 'Deal' }, luxury: { headline: rtl ? 'إقامة فاخرة قرب الحرم' : 'Luxury stays near the Haram', sub: rtl ? '5 نجوم — موقع متميز' : '5★ • Prime location', tone: 'brown', tag: rtl ? 'فاخر' : 'Luxury' }, }[variant]; return (
{v.tag}
{v.headline}
{v.sub}
); } // ─── Service icon ───────────────────────────────────────────────────── function ServiceIcon({ icon, label, theme, accent }) { const T = theme; return (
{label}
); } // ─── Package card (small horizontal carousel item) ──────────────────── function PackageCard({ theme, lang, title, hotel, dates, nights, transport, price, seats, tag, tone = 'camel', width = 260, provider = 'Al-Rahma Packages' }) { const T = theme; const l = L[lang]; return (
{tag && (
{tag}
)} {/* Provider chip pinned to image */}
{hotel}
4.6
{dates}
{nights} {l.nights} · {transport === 'bus' ? l.umrahBus : l.umrahFlight}
{l.from2}
{price.toLocaleString()} {l.sar}
{seats} {l.seats}
); } // ─── Large package card (full-width hero) ───────────────────────────── function HeroPackageCard({ theme, lang, hotel, dates, nights, transport, price, seats, countdown, tone = 'dark', provider = 'Al-Rahma Packages' }) { const T = theme; const l = L[lang]; const rtl = isRTL(lang); return (
{rtl ? 'قرب الحرم' : 'Near Haram'} {rtl ? '5 نجوم' : '5★'}
02:14:38
{hotel}
4.8 · {rtl ? '320 تقييم' : '320 reviews'}
{[ { icon: 'calendar', t: dates }, { icon: 'bed', t: `${nights} ${l.nights}` }, { icon: transport === 'bus' ? 'bus' : 'plane', t: transport === 'bus' ? l.umrahBus : l.umrahFlight }, ].map((m, i) => (
{m.t}
))}
{l.from2}
{price.toLocaleString()} {l.sar} {l.perPerson}
{seats} {rtl ? 'مقاعد متبقية' : 'seats remaining'}
); } // ─── HOME screen ────────────────────────────────────────────────────── function HomeScreen({ theme, lang }) { const T = theme; const l = L[lang]; const rtl = isRTL(lang); const nav = useNav(); const serviceRoute = { umrah: 'umrah', fl: 'flights', ht: 'hotels', tr: 'transport', }; const services = [ { id: 'umrah', icon: 'kaaba', label: rtl ? 'العمرة' : 'Umrah' }, { id: 'fl', icon: 'plane', label: l.flights }, { id: 'ht', icon: 'bed', label: l.hotels }, { id: 'tr', icon: 'car', label: l.transport }, ]; const recommended = [ { hotel: rtl ? 'فندق رويال داركم' : 'Royal Dar Al Madinah', dates: rtl ? '14–24 رمضان' : '14–24 Ramadan', nights: 10, transport: 'flight', price: 2899, seats: 6, tag: rtl ? 'موصى به' : 'Top pick', tone: 'camel', provider: rtl ? 'الرحمة للحج' : 'Al-Rahma' }, { hotel: rtl ? 'انتركونتيننتال مكة' : 'InterContinental Makkah', dates: rtl ? '1–8 شوال' : '1–8 Shawwal', nights: 7, transport: 'flight', price: 3450, seats: 12, tone: 'brown', provider: rtl ? 'إيلاف ضيوف' : 'Elaf Guests' }, { hotel: rtl ? 'فندق ميلينيوم' : 'Millennium Makkah', dates: rtl ? '20 رمضان' : '20 Ramadan', nights: 14, transport: 'bus', price: 1899, seats: 3, tag: rtl ? 'حصري' : 'Exclusive', tone: 'dark', provider: rtl ? 'دار البركة' : 'Dar Albaraka' }, ]; return ( {/* Header */}
{rtl ? 'السلام عليكم،' : 'Assalamu alaikum,'}
{rtl ? 'محمد الفهد' : 'Mohammed AlFahd'}
{/* Banner carousel */}
{/* Banner dots */}
{/* Services grid */}
{services.map(s => (
nav?.nav(serviceRoute[s.id])} style={{ cursor: 'pointer' }}>
))}
{/* Recommended */}
{recommended.map((p, i) => (
nav?.nav('detail')} style={{ cursor: 'pointer' }}>
))}
{/* Last minute */}
nav?.nav('detail')}>
{/* Luxury */}
{/* Best price */}
nav?.nav(id === 'trips' ? 'bookings' : id === 'me' ? 'profile' : 'home')}/> ); } // ─── Umrah entry — two big cards ────────────────────────────────────── function UmrahEntryScreen({ theme, lang }) { const T = theme; const l = L[lang]; const rtl = isRTL(lang); const nav = useNav(); return (

{rtl ? 'العمرة' : 'Umrah'}

{rtl ? 'اختر طريقة السفر المفضّلة لديك' : 'Choose your preferred way to travel'}

{/* By Flight */}
nav?.nav('city', { mode: 'flight' })} style={{ marginBottom: 14, borderRadius: 22, overflow: 'hidden', border: `1px solid ${T.hairline}`, boxShadow: T.cardShadow, background: T.surface, cursor: 'pointer' }}>
{rtl ? 'الأسرع' : 'Fastest'}

{l.umrahFlight}

{rtl ? '24 وجهة · من 1,799 ر.س' : '24 cities · from 1,799 SAR'}
{/* By Bus */}
nav?.nav('bus-route', { mode: 'bus' })} style={{ borderRadius: 22, overflow: 'hidden', border: `1px solid ${T.hairline}`, boxShadow: T.cardShadow, background: T.surface, cursor: 'pointer' }}>
{rtl ? 'الأوفر' : 'Best value'}

{l.umrahBus}

{rtl ? 'عادي وفاخر · من 999 ر.س' : 'Regular & luxury · from 999 SAR'}
{rtl ? 'كل الباقات من مزوّدين موثوقين' : 'All packages from verified providers'}
nav?.nav(id === 'trips' ? 'bookings' : id === 'me' ? 'profile' : 'home')}/> ); } Object.assign(window, { PromoBanner, ServiceIcon, PackageCard, HeroPackageCard, HomeScreen, UmrahEntryScreen });