import { useEffect, useState } from "react"; import clsx from "clsx"; type HTMLImageElementProps = React.ComponentProps<"img">; function ZoomableImage(props: HTMLImageElementProps) { const [modalOpen, setModalOpen] = useState(false); const [zoom, setZoom] = useState(false); const openModal = () => { setZoom(false); setModalOpen(true); }; const closeModal = () => { setModalOpen(false); }; useEffect(() => { function handleEscKey(e: KeyboardEvent) { if (modalOpen && e.key === "Escape") { closeModal(); } } document.addEventListener("keydown", handleEscKey); return () => { document.removeEventListener("keydown", handleEscKey); }; }, [modalOpen]); return (
{modalOpen && (
× setZoom(!zoom)} className={clsx({ "m-0 h-full max-h-full min-h-full w-full max-w-full cursor-zoom-in object-contain": !zoom, "m-0 ml-auto mr-auto max-h-none min-h-full max-w-none cursor-zoom-out object-contain": zoom, })} />
)}
); } export { ZoomableImage };