function Products() { const [active, setActive] = React.useState(PRODUCT_CATEGORIES[0].id); const cat = PRODUCT_CATEGORIES.find(c => c.id === active); const [lightbox, setLightbox] = React.useState(null); return (
{/* Header */}
§ 02 · Product catalogue The complete range.
One vendor.
From 10-amp terminal connectors to 63-amp plug-and-socket assemblies, silicone gaskets, push button hardware, and precision-molded fittings — all engineered in-house.
{/* Category tabs */}
{PRODUCT_CATEGORIES.map(c => ( ))}
{/* Active category panel */}
{/* Summary */}
Category {cat.kicker}
{cat.label}

{cat.summary}

{/* Product grid */}
{cat.items.filter(item => (item.images && item.images.length > 0) || item.name === 'SSE Push Button (All colours)').map((item, i) => ( setLightbox(item.images)} /> ))}
{/* CTA rail */}
Need a spec sheet or volume pricing for {cat.label.toLowerCase()}?
Most enquiries answered within one business day.
{/* Lightbox Modal */} {lightbox && ( setLightbox(null)} /> )}
); } function ProductCard({ item, idx, onZoom }) { const [hover, setHover] = React.useState(false); return (
setHover(true)} onMouseLeave={() => setHover(false)} style={{ background: 'rgba(255,255,255,0.02)', border: '1px solid rgba(255,255,255,0.08)', borderRadius: 8, padding: 16, transition: 'all 0.2s', transform: hover ? 'translateY(-2px)' : 'translateY(0)', borderColor: hover ? 'rgba(212,160,23,0.4)' : 'rgba(255,255,255,0.08)', cursor: 'pointer', }}> {item.images ? ( ) : ( )}
SKU · {String(idx + 1).padStart(2, '0')}
IN-STOCK
{item.name}
{item.spec}
); } function ProductImageSlider({ images, onZoom }) { const [currentIndex, setCurrentIndex] = React.useState(0); const [hovered, setHovered] = React.useState(false); React.useEffect(() => { const interval = setInterval(() => { setCurrentIndex((prev) => (prev + 1) % images.length); }, 4000); return () => clearInterval(interval); }, [images.length]); return (
setHovered(true)} onMouseLeave={() => setHovered(false)} onClick={(e) => { e.stopPropagation(); onZoom(); }} style={{ aspectRatio: '4/3', borderRadius: 4, position: 'relative', overflow: 'hidden', background: 'rgba(0,0,0,0.2)', }}> {images.map((img, idx) => ( {`Product ))} {/* Hover zoom icon overlay */}
{/* Indicators */}
{images.map((_, idx) => (
))}
); } // Lightbox Modal Component function Lightbox({ images, onClose }) { const [idx, setIdx] = React.useState(0); // Lock scroll React.useEffect(() => { document.body.style.overflow = 'hidden'; return () => { document.body.style.overflow = ''; }; }, []); return (
{/* Top Bar */}
{/* Main Image */}
{`View {/* Navigation Arrows */} {images.length > 1 && ( <> )}
{/* Thumbnails */} {images.length > 1 && (
{images.map((img, i) => ( ))}
)}
); } Object.assign(window, { Products });