From 70e6660224dc8b430c163f3bcc6a55d37dce2109 Mon Sep 17 00:00:00 2001 From: Shea Duma Date: Sun, 15 Mar 2026 05:56:17 +0200 Subject: [PATCH 1/5] improved image loading logic --- .../message/content/ImageContent.tsx | 110 +++++++++++++----- 1 file changed, 79 insertions(+), 31 deletions(-) diff --git a/src/app/components/message/content/ImageContent.tsx b/src/app/components/message/content/ImageContent.tsx index 017569662..f618d434d 100644 --- a/src/app/components/message/content/ImageContent.tsx +++ b/src/app/components/message/content/ImageContent.tsx @@ -6,6 +6,8 @@ import { Chip, Icon, Icons, + Menu, + MenuItem, Modal, Overlay, OverlayBackdrop, @@ -15,6 +17,7 @@ import { Tooltip, TooltipProvider, as, + config, } from 'folds'; import classNames from 'classnames'; import { BlurhashCanvas } from 'react-blurhash'; @@ -84,6 +87,7 @@ export const ImageContent = as<'div', ImageContentProps>( const [error, setError] = useState(false); const [viewer, setViewer] = useState(false); const [blurred, setBlurred] = useState(markedAsSpoiler ?? false); + const [isHovered, setIsHovered] = useState(false); const [srcState, loadSrc] = useAsyncCallback( useCallback(async () => { @@ -119,7 +123,14 @@ export const ImageContent = as<'div', ImageContentProps>( }, [autoPlay, loadSrc]); return ( - + setIsHovered(true)} + onPointerLeave={() => setIsHovered(false)} + > + {' '} {srcState.status === AsyncStatus.Success && ( }> @@ -156,7 +167,12 @@ export const ImageContent = as<'div', ImageContentProps>( /> )} {!autoPlay && !markedAsSpoiler && srcState.status === AsyncStatus.Idle && ( - +