| import React, { useState, useEffect } from "react"; |
| import ThemedImage from "@theme/ThemedImage"; |
| import useBaseUrl from "@docusaurus/useBaseUrl"; |
|
|
| const ZoomableImage = ({ alt, sources, style }) => { |
| |
| 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]); |
|
|
| |
| 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; |
|
|