const { useState, useEffect, useRef, useMemo, useCallback } = React; const { DEVELOPMENTS, PARTNERS, AGENT, RESIDENCES, AMENITIES, FAQS, I18N } = window.WW_DATA; const LOCALES = [ { code: "en", label: "EN", name: "English", dir: "ltr" }, { code: "ru", label: "RU", name: "Русский", dir: "ltr" }, { code: "ar", label: "AR", name: "العربية", dir: "rtl" }, { code: "zh", label: "ZH", name: "中文", dir: "ltr" }, ]; // ----- Minor visual atoms --------------------------------------------------- function Logo({ inverted }) { // The captured logo SVG is the live primary mark — referenced via . // On dark hero we render as inverted via filter; in editorial mode unfiltered. return ( Whitewill Whitewill Dubai ); } function IconWA({size=16}) { return ( ); } function IconTG({size=16}) { return ( ); } function IconArrow({size=14, rotate=0}) { return ( ); } function IconClose({size=18}) { return ( ); } // ----- Top utility bar ------------------------------------------------------ function TopBar({ t, locale, setLocale }) { return (
{t.sample_pill}
+971 (4) 581 4595 e.preventDefault()}> WhatsApp e.preventDefault()}> Telegram
{LOCALES.map(l => ( ))}
); } // ----- Main navigation ------------------------------------------------------ function Nav({ t, scrolled, onBook, currentDev, devsList, setCurrentDev, inverted }) { const [openMenu, setOpenMenu] = useState(false); return (
)} e.preventDefault()}>{t.nav_areas} e.preventDefault()}>{t.nav_experts} e.preventDefault()}>{t.nav_brochures} e.preventDefault()}>{t.nav_about}
+971 (4) 581 4595
); } // ----- Hero ----------------------------------------------------------------- function Hero({ t, dev, locale, mode, accent, onBook, onBrochure }) { const name = locale === "ru" ? dev.nameRu : locale === "ar" ? dev.nameAr : locale === "zh" ? dev.name : dev.name; const community = locale === "ru" ? dev.communityRu : locale === "ar" ? dev.communityAr : dev.community; const tagline = locale === "ru" ? dev.taglineRu : locale === "ar" ? dev.taglineAr : dev.tagline; return (
{t.eyebrow_offplan} · {community}

{name}

{tagline}

{dev.intro}

e.preventDefault()}> {t.cta_whatsapp} e.preventDefault()}> {t.cta_telegram}
); } // ----- Facts strip ---------------------------------------------------------- function FactsStrip({ t, dev, locale }) { const community = locale === "ru" ? dev.communityRu : locale === "ar" ? dev.communityAr : dev.community; const status = locale === "ru" ? dev.statusRu : locale === "ar" ? dev.statusAr : dev.status; const rows = [ { label: t.label_status, value: status }, { label: t.label_handover, value: dev.handover }, { label: t.label_community, value: community }, { label: t.label_dept, value: t.label_dept_value }, { label: t.label_ref, value: dev.code }, ]; return (
{rows.map((r,i) => (
{r.label}
{r.value}
))}
); } // ----- Location ------------------------------------------------------------- function LocationSection({ t, dev, locale }) { const community = locale === "ru" ? dev.communityRu : locale === "ar" ? dev.communityAr : dev.community; const bullets = [ ["Drive · DXB", "12 min — confirmed at launch"], ["Drive · DIFC", "14 min — confirmed at launch"], ["Walk · Beach", "8 min — confirmed at launch"], ["Walk · Metro", "5 min — confirmed at launch"], ]; return (
02 / 07

{t.h_location}

{community} · Dubai

{t.location_body}

{bullets.map(([l,v],i) => (
{l} {v}
))}
{/* Placeholder map — production wires lazy iframe with confirmed coords */}
); } // ----- Architecture -------------------------------------------------------- function ArchitectureSection({ t, dev }) { return (
03 / 07

{t.h_arch}

{t.arch_body}

Architecture Studio — confirmed at launch
Interiors Studio — confirmed at launch
Landscape Studio — confirmed at launch
); } // ----- Residences (tabs) ---------------------------------------------------- function ResidencesSection({ t, locale }) { const [active, setActive] = useState(RESIDENCES[1].id); const r = RESIDENCES.find(x => x.id === active); const title = locale === "ru" ? r.titleRu : locale === "ar" ? r.titleAr : r.title; const range = locale === "ru" ? r.rangeRu : locale === "ar" ? r.rangeAr : r.range; const notes = locale === "ru" ? r.notesRu : locale === "ar" ? r.notesAr : r.notes; return (
04 / 07

{t.h_residences}

{RESIDENCES.map(rr => { const lab = locale === "ru" ? rr.titleRu : locale === "ar" ? rr.titleAr : rr.title; return ( ); })}
Indicative plan — replaced at launch with the developer's official drawings.
{title}
{range}
    {notes.map((n,i) =>
  • {n}
  • )}
); } function FloorPlanPlaceholder({ type }) { // Schematic line drawing — placeholder for developer-supplied floor plans. const plans = { "1br": [ { x: 10, y: 10, w: 50, h: 38, label: "LIVING" }, { x: 62, y: 10, w: 28, h: 22, label: "KITCH." }, { x: 62, y: 34, w: 28, h: 14, label: "WC" }, { x: 10, y: 50, w: 40, h: 38, label: "BED" }, { x: 52, y: 50, w: 22, h: 18, label: "BATH" }, { x: 76, y: 50, w: 14, h: 38, label: "WIR" }, ], "2br": [ { x: 10, y: 10, w: 60, h: 32, label: "LIVING" }, { x: 72, y: 10, w: 18, h: 32, label: "KITCH." }, { x: 10, y: 44, w: 30, h: 32, label: "BED 1" }, { x: 42, y: 44, w: 18, h: 16, label: "WC" }, { x: 42, y: 62, w: 18, h: 14, label: "STORE" }, { x: 62, y: 44, w: 28, h: 32, label: "BED 2" }, { x: 10, y: 78, w: 80, h: 10, label: "BALCONY" }, ], "3br": [ { x: 10, y: 10, w: 38, h: 28, label: "LIVING" }, { x: 50, y: 10, w: 24, h: 28, label: "DINE" }, { x: 76, y: 10, w: 14, h: 28, label: "KITCH." }, { x: 10, y: 40, w: 26, h: 26, label: "BED 1" }, { x: 38, y: 40, w: 18, h: 12, label: "WC" }, { x: 38, y: 54, w: 18, h: 12, label: "WC" }, { x: 58, y: 40, w: 16, h: 26, label: "BED 2" }, { x: 76, y: 40, w: 14, h: 26, label: "BED 3" }, { x: 10, y: 68, w: 80, h: 20, label: "TERRACE" }, ], "ph": [ { x: 10, y: 10, w: 80, h: 28, label: "GREAT ROOM" }, { x: 10, y: 40, w: 22, h: 26, label: "STUDY" }, { x: 34, y: 40, w: 20, h: 26, label: "KITCH." }, { x: 56, y: 40, w: 20, h: 26, label: "DINE" }, { x: 78, y: 40, w: 12, h: 26, label: "WC" }, { x: 10, y: 68, w: 26, h: 20, label: "MASTER" }, { x: 38, y: 68, w: 22, h: 20, label: "BED 2" }, { x: 62, y: 68, w: 28, h: 20, label: "ROOFTOP" }, ], }; const set = plans[type] || plans["2br"]; return ( ); } // ----- Amenities ------------------------------------------------------------ function AmenitiesSection({ t, dev, locale }) { return (
05 / 07

{t.h_amenities}

{t.amenities_body}

); } // ----- Gallery + lightbox --------------------------------------------------- function GallerySection({ t, dev }) { const [open, setOpen] = useState(-1); const close = () => setOpen(-1); const prev = () => setOpen(i => (i - 1 + dev.gallery.length) % dev.gallery.length); const next = () => setOpen(i => (i + 1) % dev.gallery.length); useEffect(() => { if (open < 0) return; const onKey = (e) => { if (e.key === "Escape") close(); if (e.key === "ArrowLeft") prev(); if (e.key === "ArrowRight") next(); }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [open]); return ( ); } // ----- Agent ---------------------------------------------------------------- function AgentSection({ t, locale, onBook }) { const role = locale === "ru" ? AGENT.roleRu : locale === "ar" ? AGENT.roleAr : AGENT.role; return (
07 / 07

{t.h_agent}

{AGENT.name}
{role}
{t.label_languages}{AGENT.languages}
RERA BRN{AGENT.brn}

Your single point of contact for this launch — selection, reservation, payment plan, DLD registration and post-handover. Replies on WhatsApp within the hour during Dubai working hours.

e.preventDefault()}> {t.cta_whatsapp} e.preventDefault()}> {t.cta_telegram}
); } // ----- Brochure gate (inline) ---------------------------------------------- function BrochureSection({ t, dev, locale }) { const [sent, setSent] = useState(false); const submit = (e) => { e.preventDefault(); setSent(true); }; return (
Brochure

{t.h_brochure}

{t.brochure_body}

  • Floor plans · {RESIDENCES.length} typologies
  • Specification schedule
  • Payment plan
  • Site plan & community context
  • Architect & studio credits
{!sent ? (
Your details go to a Whitewill consultant only. We never share data outside the brokerage.
) : (
{t.brochure_sent}
)}
); } // ----- Book a viewing modal ------------------------------------------------- function BookModal({ t, dev, locale, open, onClose }) { const [sent, setSent] = useState(false); useEffect(() => { if (!open) return; document.body.style.overflow = "hidden"; const onKey = (e) => { if (e.key === "Escape") onClose(); }; window.addEventListener("keydown", onKey); return () => { document.body.style.overflow = ""; window.removeEventListener("keydown", onKey); }; }, [open]); if (!open) return null; const submit = (e) => { e.preventDefault(); setSent(true); }; return (
e.stopPropagation()}>

{t.h_book}

{t.book_body}

{!sent ? (