From 421dafacc13570f15457191c58819109289ffd9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BCdiger=20Rolf?= Date: Fri, 2 Oct 2026 16:27:14 +0200 Subject: [PATCH] fix(ui): TranslatableField hint contrast + aria-describedby (#11) Hint, outdated notice and required error get AA contrast and are linked to the input via aria-describedby; renderInput passes describedBy, which RichTextEditor applies (and updates at runtime). Bump ui to 0.7.1. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 15 +++++++++++++++ packages/ui/README.md | 8 ++++++-- packages/ui/package-lock.json | 4 ++-- packages/ui/package.json | 2 +- packages/ui/src/RichTextEditor.tsx | 23 +++++++++++++++++++++++ packages/ui/src/TranslatableField.tsx | 26 ++++++++++++++++++++++---- 6 files changed, 69 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7741157..72e5257 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,21 @@ Changelog ist die Upgrade-Anleitung für die Tools. ## [Unreleased] +### @basicbar/ui (→ wird `ui/v0.7.1`) + +**A11y-Fix `TranslatableField`** (#11): Der `hint` hatte mit +`text-slate-400` nur ~2,6:1 Kontrast und war nicht mit dem Feld verknüpft. +Jetzt `text-slate-600 dark:text-slate-300` (AA), und Hinweis, +Veraltet-Hinweis und Pflichtfeld-Fehler hängen per `aria-describedby` an der +Eingabe (Screenreader lesen sie mit dem Feld vor); Veraltet- und +Fehlertext ebenfalls auf AA-Kontrast (`amber-700`, `rose-600`). +`renderInput` bekommt dafür `describedBy`, `RichTextEditor` eine gleichnamige +Prop (auch zur Laufzeit aktualisiert). + +Migration: Tarball auf `ui/v0.7.1`. Wer `renderInput` mit `RichTextEditor` +nutzt, reicht zusätzlich `describedBy={describedBy}` durch (sonst bleibt der +Editor ohne Beschreibung — nichts bricht). + ### basicbar-integrations (→ wird `integrations/v0.3.0`) **`CapabilitiesView` entfernt** (Framework-Review: kein Tool hat diff --git a/packages/ui/README.md b/packages/ui/README.md index c8c8b0d..7336b69 100644 --- a/packages/ui/README.md +++ b/packages/ui/README.md @@ -189,7 +189,10 @@ die Maschinenübersetzung erhält die Tags). `renderInput` bekommt neben `id` auch `labelId` — die Id von `TranslatableField`s eigenem sichtbaren `