// Shared components: Logo, Nav, Footer, WhatsAppFAB, Lightbox, AccentTicker // Hook destructure happens here ONCE — every other babel file relies on // these globals (declaring them in every file collides at top level). var { useState, useEffect, useRef, useCallback, useMemo } = React; function HortonLogo({ dark = false }) { // The brief says "Vectorise to SVG" — this is the prototype's interim wordmark. // Pairs the serif name with a tracked tagline. return ( Horton. Interiors ); } function ArrowRight({ size = 14 }) { return ( ); } function ArrowDown({ size = 12 }) { return ( ); } function Nav({ route, dark = false }) { const links = [ { id: "projects", label: "Projects", route: "/projects" }, { id: "sectors", label: "Sectors", route: "/projects" }, // sectors flow to filtered grid { id: "services", label: "Services", route: "/services" }, { id: "how", label: "How we work", route: "/how-we-work" }, { id: "about", label: "About", route: "/about" }, { id: "resources", label: "Journal", route: "/journal" } ]; return ( ); } function WhatsAppFAB() { return ( ); } // Footer function Footer() { return ( ); } // Lightbox function Lightbox({ images = [], index, onClose, onPrev, onNext, caption }) { useEffect(() => { if (index === null || index === undefined) return; const onKey = e => { if (e.key === "Escape") onClose(); if (e.key === "ArrowLeft") onPrev(); if (e.key === "ArrowRight") onNext(); }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [index, onClose, onPrev, onNext]); const open = index !== null && index !== undefined; return (
{open && ( <> e.stopPropagation()} />
{caption || `${index + 1} / ${images.length}`}
)}
); } // Ticker — running list of named clients (subtle social proof, attributed) function Ticker() { const items = [ "Land Sterling HQ", "Landmark Group · JAFZA", "Jamjoom Pharma", "Middlesex University · Dubai", "The Giving Movement", "Knauf Regional Office", "Watania Takaful", "Allsopp & Allsopp", "Efficio · DIFC", "Kurdos", "Amanat Holdings HQ" ]; const dup = [...items, ...items]; return (
{dup.map((x, i) => ( {x} ))}
); } function PhotoCredit({ children }) { return (
{children}
); } Object.assign(window, { HortonLogo, ArrowRight, ArrowDown, Nav, Footer, WhatsAppFAB, Lightbox, Ticker, PhotoCredit });