···
const PostImage: React.FC<PostImageProps> = ({ image, did }) => {
const imageBlob = image.image;
const cdnUrl = isBlobWithCdn(imageBlob) ? imageBlob.cdnUrl : undefined;
const cid = cdnUrl ? undefined : extractCidFromBlob(imageBlob);
const { url: urlFromBlob, loading, error } = useBlob(did, cid);
const url = cdnUrl || urlFromBlob;
const alt = image.alt?.trim() || "Bluesky attachment";
image.aspectRatio && image.aspectRatio.height > 0
···
-
{image.alt && image.alt.trim().length > 0 && (
···
} satisfies React.CSSProperties,
···
const PostImage: React.FC<PostImageProps> = ({ image, did }) => {
+
const [showAltText, setShowAltText] = React.useState(false);
const imageBlob = image.image;
const cdnUrl = isBlobWithCdn(imageBlob) ? imageBlob.cdnUrl : undefined;
const cid = cdnUrl ? undefined : extractCidFromBlob(imageBlob);
const { url: urlFromBlob, loading, error } = useBlob(did, cid);
const url = cdnUrl || urlFromBlob;
const alt = image.alt?.trim() || "Bluesky attachment";
+
const hasAlt = image.alt && image.alt.trim().length > 0;
image.aspectRatio && image.aspectRatio.height > 0
···
+
onClick={() => setShowAltText(!showAltText)}
+
...imagesBase.altBadge,
+
background: showAltText
+
? `var(--atproto-color-text)`
+
: `var(--atproto-color-bg-secondary)`,
+
? `var(--atproto-color-bg)`
+
: `var(--atproto-color-text)`,
+
title="Toggle alt text"
+
aria-label="Toggle alt text"
+
{hasAlt && showAltText && (
···
+
} satisfies React.CSSProperties,
+
letterSpacing: "0.5px",
+
transition: "background 150ms ease, color 150ms ease",
+
fontFamily: "system-ui, sans-serif",
} satisfies React.CSSProperties,