// components.jsx — shared UI for Muse Design prototype const { useState, useEffect, useRef, useMemo, useCallback } = React; // ---------- Brand mark ---------- function BrandMark({ inverted }) { return (
muse
design — dubai
); } // ---------- Top bar / nav ---------- function Topbar({ route, navigate }) { const items = [ { id: "home", label: "Index" }, { id: "projects", label: "Projects" }, { id: "sectors", label: "Sectors" }, { id: "services", label: "Services" }, { id: "studio", label: "Studio" }, { id: "contact", label: "Contact" }, ]; const [locale, setLocale] = useState("EN"); const active = route.name === "case" ? "projects" : route.name === "sector" ? "sectors" : route.name; return (
navigate({ name: "home" })} style={{ cursor: "pointer" }}>
{["EN","AR","RU"].map(l => ( ))}
); } // ---------- Footer ---------- function Footer({ navigate }) { return ( ); } // ---------- WhatsApp FAB ---------- function WhatsappFab({ context }) { const text = encodeURIComponent( context === "project" ? "Hi Muse — I'd like to discuss a project similar to the one I just viewed." : "Hi Muse — I'd like to start a project. Could we set up a call?" ); return ( ); } // ---------- Section head ---------- function SectionHead({ roman, title, aside }) { return (
{roman}

{title}

{aside ?
{aside}
:
}
); } // ---------- Process strip (dark) ---------- function ProcessStrip() { return (
{PROCESS_STEPS.map(s => (
{s.num}

{s.title}

{s.body}

))}
); } // ---------- Recognition strip ---------- function RecognitionStrip() { return (
13th
Fit-Out Powerlist 2024
Design Middle East

Ranked 13th in the regional Fit-Out Powerlist — a list of practices "elevating luxury living in Dubai".

Project Feature
Jaddaf Barbershop
Commercial Interior Design

Press feature on a Jaddaf barbershop — woodwork, hanging lights, leather upholstery, exposed services.

Since
2007 · Dubai
Established practice

Husband-and-wife studio led by Michael Dudnyk and Stanislava Rudas-Dudnyk. Headquartered at Dubai Design District.

); } // ---------- Lightbox ---------- function Lightbox({ images, startIndex, onClose }) { const [i, setI] = useState(startIndex || 0); useEffect(() => { const onKey = (e) => { if (e.key === "Escape") onClose(); if (e.key === "ArrowLeft") setI(p => (p - 1 + images.length) % images.length); if (e.key === "ArrowRight") setI(p => (p + 1) % images.length); }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [images.length, onClose]); return (
e.stopPropagation()} />
{String(i + 1).padStart(2, "0")} / {String(images.length).padStart(2, "0")} · photographer credit pending
); } Object.assign(window, { BrandMark, Topbar, Footer, WhatsappFab, SectionHead, ProcessStrip, RecognitionStrip, Lightbox });