const { useState, useEffect, useRef, useMemo, useCallback } = React;
/* =========================
LOGO (MDF wordmark)
========================= */
function MDFWordmark({ height = 22, color }) {
// Original SVG recreation of the gold-gradient wordmark
// Use a single linearGradient with the brand's exact stops.
const gid = "mdf-grad-" + height;
return (
);
}
function MDFMonogram({ size = 28, dark }) {
const gid = "mono-grad-" + size + (dark ? "-d" : "");
return (
);
}
/* =========================
ICONS
========================= */
function Icon({ name, size = 18, stroke = 1.5 }) {
const c = {
width: size,
height: size,
viewBox: "0 0 24 24",
fill: "none",
stroke: "currentColor",
strokeWidth: stroke,
strokeLinecap: "round",
strokeLinejoin: "round",
"aria-hidden": "true",
};
switch (name) {
case "search":
return (
);
case "bag":
return (
);
case "user":
return (
);
case "menu":
return (
);
case "close":
return (
);
case "arrow":
return (
);
case "arrow-left":
return (
);
case "plus":
return (
);
case "minus":
return (
);
case "whatsapp":
return (
);
case "phone":
return (
);
case "mail":
return (
);
case "pin":
return (
);
case "ig":
return (
);
case "fb":
return (
);
case "pin-pt":
return (
);
case "linkedin":
return (
);
case "check":
return (
);
case "globe":
return (
);
case "star":
return (
);
case "heart":
return (
);
case "leaf":
return (
);
default:
return null;
}
}
/* =========================
NAVBAR
========================= */
function Navbar({ go, page, cartCount, openCart, lang, setLang, dir }) {
const [scrolled, setScrolled] = useState(false);
const [openShop, setOpenShop] = useState(false);
const [openLang, setOpenLang] = useState(false);
const [mobileOpen, setMobileOpen] = useState(false);
useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 12);
onScroll();
window.addEventListener("scroll", onScroll);
return () => window.removeEventListener("scroll", onScroll);
}, []);
const NavLink = ({ to, children, onClick, sub }) => (
);
return (
{
setOpenShop(false);
setOpenLang(false);
}}
style={{
position: "sticky",
top: 0,
zIndex: 50,
background: scrolled ? "rgba(251,246,240,0.96)" : "rgba(251,246,240,0.88)",
backdropFilter: "blur(10px)",
borderBottom: scrolled ? "1px solid var(--line)" : "1px solid transparent",
transition: "all 0.3s ease",
}}
>
{/* Announcement bar */}
Same-day luxury delivery across the UAE · 7 days a week · Order by 4 pm
{/* Left — primary nav (desktop) */}
{/* Center — logo */}
{/* Right — utilities */}
Enquire
{openLang && (
{LANGS.map((l) => (
))}
)}
{/* Mega menu for SHOP */}
{openShop && (
setOpenShop(false)}
style={{
position: "absolute",
top: "100%",
left: 0,
right: 0,
background: "var(--ivory)",
borderTop: "1px solid var(--line)",
borderBottom: "1px solid var(--line)",
boxShadow: "0 18px 30px -25px rgba(42,35,32,0.25)",
}}
>
Shop by occasion
{OCCASIONS.map((o) => (
-
))}
Shop by type
{TYPES.filter((t) => t.id !== "all").map((t) => (
-
))}
)}
{/* Mobile drawer */}
{mobileOpen && (
{[
["home", "Home"],
["shop", "Shop"],
["weddings", "Weddings & Events"],
["about", "The House"],
["boutiques", "Boutiques"],
["contact", "Enquire"],
].map(([k, l]) => (
))}
)}
);
}
/* =========================
FOOTER
========================= */
function Footer({ go }) {
return (
);
}
/* =========================
PRODUCT CARD
========================= */
function ProductCard({ product, onOpen, onAdd }) {
return (
{product.sub}
{AED(product.price)}
);
}
/* =========================
CART DRAWER
========================= */
function CartDrawer({ open, onClose, items, setItems }) {
const subtotal = items.reduce((s, i) => s + i.price * i.qty, 0);
const updateQty = (id, delta) =>
setItems((arr) =>
arr
.map((i) => (i.id === id ? { ...i, qty: Math.max(0, i.qty + delta) } : i))
.filter((i) => i.qty > 0)
);
return (
<>
{open && (
)}
>
);
}
/* =========================
ADD-TO-BAG TOAST
========================= */
function Toast({ message, show }) {
return (
{message}
);
}
/* =========================
WHATSAPP FAB
========================= */
function WhatsAppFab() {
return (
);
}
/* =========================
MAP EMBED (lazy iframe)
========================= */
function MapEmbed({ q, height = 220 }) {
const src = `https://www.google.com/maps?q=${encodeURIComponent(q)}&output=embed`;
return (
);
}
Object.assign(window, {
MDFWordmark,
MDFMonogram,
Icon,
Navbar,
Footer,
ProductCard,
CartDrawer,
Toast,
WhatsAppFab,
MapEmbed,
});