// ===== RIVAMAR Group — Galería pública (v1.1) =====
const { useState, useEffect } = React;
function Lightbox({ item, onClose, onPrev, onNext }) {
useEffect(() => {
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);
}, [onClose, onPrev, onNext]);
if (!item) return null;
const local = LOCAL_MAP[item.local];
return (
e.stopPropagation()}>
{item.label}
{local.nombre} · {CAT_LABEL[item.cat]}
{item.destacada &&
}
);
}
function ExponorBadgeStar() {
return ★ Destacada;
}
function Galeria({ go, initialLocal }) {
const [filtro, setFiltro] = useState(initialLocal || 'todos');
const [lbIndex, setLbIndex] = useState(null);
const filtered = filtro === 'todos' ? GALERIA : GALERIA.filter((g) => g.local === filtro);
// Destacadas primero
const ordered = [...filtered].sort((a, b) => (b.destacada ? 1 : 0) - (a.destacada ? 1 : 0));
const pills = [{ id: 'todos', label: 'Todos' }, ...LOCALES.map((l) => ({ id: l.id, label: l.nombre }))];
const pillCls = (active) =>
`px-4 py-2 rounded-full text-sm font-medium transition-colors min-h-[40px] ${
active ? 'bg-gold text-carbon' : 'bg-iron border border-white/10 text-gray-300 hover:text-gray-50 hover:border-white/30'
}`;
return (
Galería de experiencias
Platos, ambientes y eventos
Una muestra de la cocina y los espacios de nuestros tres locales. Filtra por local y haz clic en cualquier imagen para ampliarla.
{pills.map((p) => (
))}
{ordered.map((g) => {
const realIndex = GALERIA.indexOf(g);
return (
);
})}
¿Te gustaría vivir la experiencia?
go('reservas')}>Reservar una mesa
{lbIndex !== null && (
setLbIndex(null)}
onPrev={() => setLbIndex((i) => (i - 1 + GALERIA.length) % GALERIA.length)}
onNext={() => setLbIndex((i) => (i + 1) % GALERIA.length)}
/>
)}
);
}
Object.assign(window, { Galeria });