// Eva — Collections page function PageCollections({ initialCat, go, openConsult }) { const { useState, useMemo } = React; const products = window.EVA_PRODUCTS; const [cat, setCat] = useState(initialCat || "all"); const [stone, setStone] = useState("all"); // all, natural, lab const [metal, setMetal] = useState("all"); // all, yellow, white, rose, mixed const [sort, setSort] = useState("featured"); const filtered = useMemo(() => { let r = products.slice(); if (cat !== "all") r = r.filter(p => p.cat === cat); if (stone !== "all") r = r.filter(p => p.stone === stone); if (metal !== "all") r = r.filter(p => p.metal === metal); if (sort === "asc") r.sort((a, b) => a.price - b.price); if (sort === "desc") r.sort((a, b) => b.price - a.price); return r; }, [cat, stone, metal, sort]); const cats = [["all", "All pieces"], ...window.EVA_COLLECTIONS.map(c => [c.slug, c.label])]; return (
{/* Header */}
The collection

{cat === "all" ? "Every piece, all in one velvet tray." : (window.EVA_COLLECTIONS.find(c => c.slug === cat)?.label || "Collection")}

The Eva catalogue runs from a 2-carat lab-grown solitaire at AED 4,999 to high-jewellery commissions north of AED 275,000. Below are the pieces currently on the velvet — natural and lab-grown, GIA/IGI/HRD-certified.

{/* Filter bar */}
{cats.map(([slug, label]) => ( ))}
Diamond
Metal
Sort
{filtered.length} pieces shown · prices indicative, in AED · re-confirmed in-store
{/* Grid */}
{filtered.length === 0 ? (

No pieces match this combination on the velvet today.

Eva makes most settings to order. Tell us what you have in mind — most bespoke pieces are ready in under 24 hours.

) : (
{filtered.map((p) => ( ))}
)}
{/* Bespoke nudge */}
Not quite right?

Bring us a sketch, a photo, a story — we'll make the rest.

Every Eva piece can be tuned: change the metal, swap the stone, scale it up, scale it down. Or start from a blank velvet tray.

WhatsApp us a reference
); } function ProductTile({ p, onEnquire }) { const { useState } = React; const [hover, setHover] = useState(false); const discount = p.wasPrice ? Math.round((1 - p.price / p.wasPrice) * 100) : 0; return (
setHover(true)} onMouseLeave={() => setHover(false)}>
{discount > 0 &&
−{discount}%
} {p.name}
WhatsApp
{p.catLabel} · {p.stone === "lab" ? "Lab-grown" : "Natural"}

{p.name}

{p.tags.map(t => {t})}
{window.aed(p.price)} {p.wasPrice && was {window.aed(p.wasPrice)}}
); } window.PageCollections = PageCollections;