"use client"; import { AnimatePresence, motion } from "framer-motion"; import { useEffect, useState } from "react"; const cmsDetails = [ ["Edition", "EpicNext"], ["Interface", "Modern CMS"], ["Runtime", "Next.js App Router"], ]; const credits = [ ["Remco", "EpicNext direction and development"], ["Life", "Next.js architecture and CMS refinements"], ]; export function CmsInfoPopup() { const [open, setOpen] = useState(false); useEffect(() => { if (window.location.hash === "#cms-info") setOpen(true); }, []); useEffect(() => { if (!open) return; const onKeyDown = (event: KeyboardEvent) => { if (event.key === "Escape") setOpen(false); }; document.addEventListener("keydown", onKeyDown); return () => document.removeEventListener("keydown", onKeyDown); }, [open]); return ( <> setOpen(true)} > EpicNext Info {open ? ( setOpen(false)} initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }} transition={{ duration: 0.2 }} > event.stopPropagation()} initial={{ opacity: 0, scale: 0.95, y: 10 }} animate={{ opacity: 1, scale: 1, y: 0 }} exit={{ opacity: 0, scale: 0.95, y: 10 }} transition={{ duration: 0.2 }} > setOpen(false)} > x CMS information EpicNext Modern Next.js CMS A modern web layer for the hotel community, focused on fast navigation, clean administration, and a coherent EpicNext experience. {cmsDetails.map(([label, value]) => ( {label} {value} ))} {credits.map(([name, role]) => ( {name} {role} ))} ) : null} > ); }
A modern web layer for the hotel community, focused on fast navigation, clean administration, and a coherent EpicNext experience.