// Si Fashion — shared UI components
const { useState, useEffect, useRef } = React;
const ArrowRight = ({ size = 14 }) => (
);
const ArrowDown = ({ size = 14 }) => (
);
const CloseIcon = ({ size = 16 }) => (
);
const InstagramIcon = () => (
);
const LinkedInIcon = () => (
);
// ---------- Wordmark / Logo ----------
function Wordmark({ inverted = false }) {
const color = inverted ? "#FFFFFF" : "var(--primary)";
return (
SI FASHION
);
}
// ---------- Eyebrow ----------
function Eyebrow({ children, onDark = false, noRule = false }) {
return (
{children}
);
}
// ---------- Section head ----------
function SectionHead({ eyebrow, title, right, dark = false }) {
return (
{eyebrow}
{title}
{right}
);
}
// ---------- Navbar ----------
function Navbar({ route, navigate, onEnquire }) {
const [drawer, setDrawer] = useState(false);
const links = [
{ id: "showroom", label: "Showroom" },
{ id: "brands", label: "Brands" },
{ id: "sports", label: "Sports Speciality" },
{ id: "brand-development", label: "Brand Development" },
{ id: "about", label: "About" },
{ id: "contact", label: "Contact" },
];
return (
<>
navigate("home")} style={{ cursor: "pointer" }}>
{links.map(l => (
navigate(l.id)}
>{l.label}
))}
EN
AR
RU
ZH
Enquire
setDrawer(true)} aria-label="Menu">
{drawer && (
setDrawer(false)} style={{
width: 40, height: 40, border: "1px solid var(--on-primary-line)",
background: "transparent", color: "var(--on-primary)", cursor: "pointer"
}}>
{ setDrawer(false); onEnquire(); }}>
Connect With Us
)}
>
);
}
// ---------- Hero ----------
function Hero({ onEnquire, navigate, heroImage }) {
return (
The Showroom by Si Fashion — Dubai Design District
Shaping the brands
for the future.
A fashion distribution and brand-development partner based at Dubai Design District.
Thirty years of regional expertise, placed at the service of the brands defining what comes next.
navigate("brands")}>
Explore Brands
Connect With Us
Editorial · Si Fashion Roster · S/S 26
{[0, 1].map(i => (
● Dubai Design District ·
● Multi-brand showroom ·
● 13 territories ·
● RVS Group since 1989 ·
● Department stores ·
● Concept stores ·
● E-commerce ·
● Sports speciality ·
))}
);
}
// ---------- Credibility ----------
function Credibility() {
return (
{SF_DATA.credibility.map(c => (
))}
);
}
// ---------- Division card ----------
function DivisionCard({ d, navigate }) {
return (
navigate(d.cta.to)}>
{d.eyebrow}
{d.title}
{d.tagline}
{d.body}
);
}
// ---------- Brand card ----------
function BrandCard({ b, onOpen, idx, showTiles }) {
const useImage = showTiles && b.tile;
return (
onOpen(b)}>
{b.category}
{useImage ? (
) : (
{b.category} · · · Tile pending rights
)}
{b.name}
{b.origin}
{b.note}
);
}
// ---------- Brand detail drawer ----------
function BrandDetail({ brand, onClose, onEnquire, showTiles }) {
if (!brand) return null;
useEffect(() => {
const h = (e) => e.key === "Escape" && onClose();
window.addEventListener("keydown", h);
return () => window.removeEventListener("keydown", h);
}, [onClose]);
return (
e.stopPropagation()}>
Represented brand · {brand.category}
{showTiles && brand.tile ? (
) : (
Permissioned imagery pending
)}
{brand.name}
Origin · {brand.origin}
Category · {brand.category}
{brand.note}
Distributed by Si Fashion across MENA. Available for placement in department stores,
concept retailers, sneaker & sports speciality channels and fashion e-commerce.
Placement Channels
{SF_DATA.channels.map(c => {c.label} )}
Territories
{["UAE","KSA","Qatar","Bahrain","Kuwait","Oman","Lebanon","Jordan","Egypt","India","CIS","South Africa"].map(t =>
{t}
)}
onEnquire({ brand: brand.name, type: "Retailer enquiry" })}>
Stock this brand
onEnquire({ brand: brand.name, type: "Press / Lookbook" })}>
Request line sheet
);
}
// ---------- Territory grid ----------
function TerritoryGrid({ dark = false }) {
return (
{SF_DATA.territories.map((t, i) => (
{t}
{String(i + 1).padStart(2, "0")}
))}
);
}
// ---------- Process strip ----------
function ProcessStrip({ dark = false }) {
return (
{SF_DATA.process.map(p => (
{p.step}
{p.title}
{p.body}
))}
);
}
// ---------- Footer ----------
function Footer({ navigate, onEnquire }) {
const c = SF_DATA.contact;
return (
);
}
// ---------- Sticky Enquire FAB ----------
function EnquireFab({ onClick }) {
return (
Connect With Us
);
}
Object.assign(window, {
ArrowRight, ArrowDown, CloseIcon, InstagramIcon, LinkedInIcon,
Wordmark, Eyebrow, SectionHead,
Navbar, Hero, Credibility,
DivisionCard, BrandCard, BrandDetail,
TerritoryGrid, ProcessStrip,
Footer, EnquireFab,
});