// ============================================================
// Tribeca Lisboa — EVENT DETAIL app (responsive, bilingual)
// Uses shared SiteHeader / SiteMenuDrawer + global lang.
// ============================================================
const { useState: useStateA, useRef: useRefA } = React;
function EdToast({ msg, icon, show }) {
return
{icon && }{msg}
;
}
function EdShareSheet({ open, onClose, onCopied, lang }) {
const opts = [
{ name: 'Instagram', icon: 'ig' },
{ name: 'WhatsApp', icon: 'wa' },
{ name: 'X', icon: 'xlogo' },
{ name: tt(lang, 'Copy link', 'Copiar link'), icon: 'link', copy: true },
];
return (
{tt(lang, 'Share', 'Partilhar')}
{opts.map(o => (
))}
);
}
function EventDetailInner() {
const lang = React.useContext(LangContext);
const rootRef = useRefA(null);
const [menu, setMenu] = useStateA(false);
const [share, setShare] = useStateA(false);
const [toast, setToast] = useStateA(null);
const toastTimer = useRefA(null);
useReveal(rootRef);
const flashToast = (msg, icon) => {
setToast({ msg, icon });
clearTimeout(toastTimer.current);
toastTimer.current = setTimeout(() => setToast(null), 2200);
};
return (
setMenu(true)} />
flashToast(tt(lang, 'Added to calendar', 'Adicionado ao calendário'), 'check')} onShare={() => setShare(true)} />
{/* TEMPORARILY HIDDEN — restore on request: */}
{/* persistent ticket CTA — no pricing, availability + action only */}
{tt(lang, EVENT.availabilityEn, EVENT.availability)}
setShare(false)}
onCopied={() => { setShare(false); flashToast(tt(lang, 'Link copied', 'Link copiado'), 'check'); }} />
setMenu(false)} />
);
}
function EventDetail() {
const [lang] = useLang();
return (
);
}
ReactDOM.createRoot(document.getElementById('root')).render();