From fefc52fb203ffc73c730ba3ebc7ae941440ec814 Mon Sep 17 00:00:00 2001 From: c0mrade Date: Tue, 26 May 2026 00:20:30 +0300 Subject: [PATCH] fix(a11y): label associations for AdminNewsCreate fields - htmlFor/id pairs for title, slug, read-time, excerpt and featured-image inputs - add an ariaLabel prop to ColoredItemCombobox (applied to the trigger button) and pass the category/tag labels so the comboboxes have an accessible name (WCAG 1.3.1/4.1.2) --- src/components/admin/ColoredItemCombobox.tsx | 3 +++ src/pages/AdminNewsCreate.tsx | 27 ++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/components/admin/ColoredItemCombobox.tsx b/src/components/admin/ColoredItemCombobox.tsx index 41fea37..074b579 100644 --- a/src/components/admin/ColoredItemCombobox.tsx +++ b/src/components/admin/ColoredItemCombobox.tsx @@ -27,6 +27,7 @@ interface ColoredItemComboboxProps { onCreateNew: (name: string, color: string) => Promise; onDelete?: (item: ColoredItem) => Promise; placeholder?: string; + ariaLabel?: string; isLoading?: boolean; colors?: string[]; className?: string; @@ -39,6 +40,7 @@ export function ColoredItemCombobox({ onCreateNew, onDelete, placeholder, + ariaLabel, isLoading = false, colors = DEFAULT_COLORS, className, @@ -190,6 +192,7 @@ export function ColoredItemCombobox({ isOpen ? 'border-accent-500/50' : 'border-dark-700 hover:border-dark-600', isLoading && 'animate-pulse', )} + aria-label={ariaLabel} aria-expanded={isOpen} aria-haspopup="listbox" > diff --git a/src/pages/AdminNewsCreate.tsx b/src/pages/AdminNewsCreate.tsx index 2da11de..db37f71 100644 --- a/src/pages/AdminNewsCreate.tsx +++ b/src/pages/AdminNewsCreate.tsx @@ -652,8 +652,11 @@ export default function AdminNewsCreate() {
{/* Title */}
- + setTitle(e.target.value)} @@ -664,8 +667,11 @@ export default function AdminNewsCreate() { {/* Slug */}
- + { @@ -688,6 +694,7 @@ export default function AdminNewsCreate() { onCreateNew={handleCreateCategory} onDelete={handleDeleteCategory} placeholder={t('news.admin.combobox.selectCategory')} + ariaLabel={t('news.admin.categoryLabel')} />
@@ -699,14 +706,18 @@ export default function AdminNewsCreate() { onCreateNew={handleCreateTag} onDelete={handleDeleteTag} placeholder={t('news.admin.combobox.selectTag')} + ariaLabel={t('news.admin.tagLabel')} />
{/* Read time */}
- + setReadTimeMinutes(Number(e.target.value) || 1)} @@ -718,8 +729,11 @@ export default function AdminNewsCreate() { {/* Excerpt */}
- +