From 598eeeb3274d3896b819cb1184a5c5997c29ed9d Mon Sep 17 00:00:00 2001
From: Ezedike-egwom Collins
Date: Tue, 25 Aug 2026 23:55:18 +0100
Subject: [PATCH 1/4] fix(a11y): add alt-text field for embedded images in post
editor
---
src/components/editor/MediaEmbedder.tsx | 26 +++++++++++++++++++++++--
src/hooks/useContentEditor.tsx | 8 ++++++--
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/src/components/editor/MediaEmbedder.tsx b/src/components/editor/MediaEmbedder.tsx
index da285b52..5095b4f5 100644
--- a/src/components/editor/MediaEmbedder.tsx
+++ b/src/components/editor/MediaEmbedder.tsx
@@ -4,24 +4,30 @@ import { sanitizeUrl } from '@/utils/sanitize';
import { useFocusTrap } from '@/hooks/useFocusTrap';
interface MediaEmbedderProps {
- onAddImage: (url: string) => void;
+ onAddImage: (url: string, alt?: string) => void;
onAddYoutube: (url: string) => void;
}
export const MediaEmbedder: React.FC = ({ onAddImage, onAddYoutube }) => {
const [isOpen, setIsOpen] = useState(false);
const [url, setUrl] = useState('');
+ const [altText, setAltText] = useState('');
const [type, setType] = useState<'image' | 'youtube'>('image');
const [urlError, setUrlError] = useState('');
const id = useId();
const dialogTitleId = `${id}-title`;
const errorId = `${id}-error`;
const inputId = `${id}-url`;
+ const altInputId = `${id}-alt`;
const urlInputRef = useRef(null);
const dialogRef = useFocusTrap(isOpen, { initialFocusRef: urlInputRef });
const closeDialog = () => setIsOpen(false);
+ useEffect(() => {
+ if (!isOpen) setAltText('');
+ }, [isOpen]);
+
useEffect(() => {
if (!isOpen) return;
const handleEscape = (event: KeyboardEvent) => {
@@ -40,11 +46,12 @@ export const MediaEmbedder: React.FC = ({ onAddImage, onAddY
}
setUrlError('');
if (type === 'image') {
- onAddImage(safeUrl);
+ onAddImage(safeUrl, altText);
} else {
onAddYoutube(safeUrl);
}
setUrl('');
+ setAltText('');
closeDialog();
};
@@ -114,6 +121,21 @@ export const MediaEmbedder: React.FC = ({ onAddImage, onAddY
>
{urlError}
+ {type === 'image' ? (
+ <>
+
+ setAltText(e.target.value)}
+ placeholder="Describe the image..."
+ className="w-full p-2 border rounded mb-3 dark:bg-gray-700 dark:border-gray-600"
+ />
+ >
+ ) : null}