Spaces:
Running
Running
import React, { useState, useEffect } from "react"; | |
import ThemedImage from "@theme/ThemedImage"; | |
import useBaseUrl from "@docusaurus/useBaseUrl"; | |
const ZoomableImage = ({ alt, sources, style }) => { | |
// add style here | |
const [isFullscreen, setIsFullscreen] = useState(false); | |
const toggleFullscreen = () => { | |
setIsFullscreen(!isFullscreen); | |
}; | |
const handleKeyPress = (event) => { | |
if (event.key === "Escape") { | |
setIsFullscreen(false); | |
} | |
}; | |
useEffect(() => { | |
if (isFullscreen) { | |
document.addEventListener("keydown", handleKeyPress); | |
} else { | |
document.removeEventListener("keydown", handleKeyPress); | |
} | |
return () => { | |
document.removeEventListener("keydown", handleKeyPress); | |
}; | |
}, [isFullscreen]); | |
// Default style | |
const defaultStyle = { | |
width: "50%", | |
margin: "0 auto", | |
display: "flex", | |
justifyContent: "center", | |
}; | |
return ( | |
<div | |
className={`zoomable-image ${isFullscreen ? "fullscreen" : ""}`} | |
onClick={toggleFullscreen} | |
style={{ ...defaultStyle, ...style }} | |
> | |
<ThemedImage | |
className="zoomable-image-inner" | |
alt={alt} | |
sources={{ | |
light: useBaseUrl(sources.light), | |
dark: useBaseUrl(sources.dark), | |
}} | |
/> | |
</div> | |
); | |
}; | |
export default ZoomableImage; | |