// components.jsx — chrome (logo, nav, footer, primitives) for Montroi const { useState, useEffect, useRef, useMemo, useCallback } = React; // ───────────────────────────────────────────────────────────── // Logo — typographic wordmark, no SVG mark (per brief: vector requested but not yet supplied) function Logo({ size = 22, onClick }) { return ( { if (onClick) { e.preventDefault(); onClick(); } }} className="m-logo" style={{ fontSize: size, letterSpacing: ".34em" }}> MONTROI ); } // ───────────────────────────────────────────────────────────── // Tiny utility icons (hairline, no fill) const Ic = { arrow: (p) => ( ), arrowLong: (p) => ( ), bag: (p) => ( ), close: (p) => ( ), menu: (p) => ( ), search: (p) => ( ), globe: (p) => ( ), ig: (p) => ( ), fb: (p) => ( ), vimeo: (p) => ( ), whatsapp: (p) => ( ), }; // ───────────────────────────────────────────────────────────── // Navbar function Navbar({ route, navigate, cartCount, openCart, locale, setLocale }) { const [scrolled, setScrolled] = useState(false); const [mobileOpen, setMobileOpen] = useState(false); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 20); onScroll(); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); const items = [ ["/story", "Story"], ["/provenance", "Provenance"], ["/shop", "Shop"], ["/workshops", "Workshops"], ["/gifting", "Gifting"], ["/boutiques", "Boutiques"], ["/journal", "Journal"], ]; return (
navigate("/")}/>
{/* Mobile drawer */} {mobileOpen ? (
{ navigate("/"); setMobileOpen(false); }}/>
+971 50 749 0210 info@montroi.com
) : null}
); } // ───────────────────────────────────────────────────────────── // Footer function Footer({ navigate }) { return ( ); } function FootCol({ heading, items, navigate }) { return (

{heading}

); } // ───────────────────────────────────────────────────────────── // ProductCard — editorial, no shouting CTA function ProductCard({ product, onAdd, navigate, size = "M" }) { const [adding, setAdding] = useState(false); return (
{product.atelier}

navigate(`/product/${product.handle}`)}>{product.title}

${product.price.toFixed(2)} USD
); } // ───────────────────────────────────────────────────────────── // Section primitives function SectionHeading({ eyebrow, title, lede, align = "left" }) { return (
{eyebrow ? {eyebrow} : null}

{title}

{lede ?

{lede}

: null}
); } function CTA({ children, onClick, kind = "primary", as = "button", href }) { const cn = `m-cta m-cta--${kind}`; if (as === "a") { return {children}; } return ; } // ───────────────────────────────────────────────────────────── // Cart drawer function CartDrawer({ open, onClose, items, setItems, navigate }) { const subtotal = items.reduce((s, i) => s + i.price * i.qty, 0); return (
); } window.MONTROI_COMP = { Logo, Ic, Navbar, Footer, ProductCard, SectionHeading, CTA, CartDrawer, };