From f7b5df4db830f3cafbf511de00941a8ce4258e20 Mon Sep 17 00:00:00 2001 From: Schalli Date: Mon, 21 Sep 2026 14:56:02 +0200 Subject: [PATCH] fix(quick-260921-jt4): zwei Schaltflaechenreihen tragen role="toolbar" (D-03) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit calculator-widget.tsx Speicherzeile und favorites-widget.tsx Ansichtsumschalter waren schlichte
mit aria-label, das die Rolle generic stillschweigend verwarf. role="toolbar" ergaenzt (geprueft sauber; role="group"/"region" loesen useSemanticElements neu aus). Taschenrechner: fest verdrahteter Text wandert in calculator.memoryLabel; bei dieser Gelegenheit auch Anzeigefeld (displayLabel) und Rueckschritt-Taste (backspaceLabel) in den Katalog gezogen (D-05), da diese Datei ohnehin geaendert wird. Favoriten: die bisherige Beschriftung ("Favoriten") war sachlich falsch fuer einen Listen/Kachel-Umschalter — neuer, zutreffender Schluessel favorites.viewModeLabel statt des wiederverwendeten favorites.name. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J --- .../dashboard/widgets/calculator-widget.test.tsx | 14 ++++++++++++-- .../dashboard/widgets/calculator-widget.tsx | 10 ++++++---- .../dashboard/widgets/favorites-widget.tsx | 11 ++++++++++- apps/web/src/messages/de.json | 8 ++++++-- apps/web/src/messages/en.json | 8 ++++++-- 5 files changed, 40 insertions(+), 11 deletions(-) diff --git a/apps/web/src/components/dashboard/widgets/calculator-widget.test.tsx b/apps/web/src/components/dashboard/widgets/calculator-widget.test.tsx index 6514190..ce53642 100644 --- a/apps/web/src/components/dashboard/widgets/calculator-widget.test.tsx +++ b/apps/web/src/components/dashboard/widgets/calculator-widget.test.tsx @@ -1,9 +1,19 @@ import { render, screen, fireEvent } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; -// Mock next-intl — returns the key so tests are locale-agnostic +// Mock next-intl — returns the real de.json strings for the few keys this +// widget actually renders as accessible names/labels, the raw key otherwise +// (locale-agnostic fallback for anything not explicitly mapped here). vi.mock('next-intl', () => ({ - useTranslations: () => (key: string) => key, + useTranslations: () => (key: string) => { + const map: Record = { + 'calculator.name': 'Taschenrechner', + 'calculator.displayLabel': 'Anzeige', + 'calculator.memoryLabel': 'Speicherfunktionen', + 'calculator.backspaceLabel': 'Rückschritt', + }; + return map[key] ?? key; + }, })); // Must import after mocks diff --git a/apps/web/src/components/dashboard/widgets/calculator-widget.tsx b/apps/web/src/components/dashboard/widgets/calculator-widget.tsx index 56c61b9..f137571 100644 --- a/apps/web/src/components/dashboard/widgets/calculator-widget.tsx +++ b/apps/web/src/components/dashboard/widgets/calculator-widget.tsx @@ -336,13 +336,15 @@ export function CalculatorWidget({ isEditMode }: WidgetProps) { {/* Display */} {display} - {/* Memory row */} -
+ {/* Memory row — role="toolbar" (D-03): ohne Rolle ist das
generic + und die Vorlesehilfe verwirft aria-label stillschweigend. Geprueft + sauber (role="group"/"region" loesen useSemanticElements neu aus). */} +
@@ -356,7 +358,7 @@ export function CalculatorWidget({ isEditMode }: WidgetProps) { applyUnary('percent')} /> - + {/* Row 2: unary + divide */} applyUnary('reciprocal')} /> diff --git a/apps/web/src/components/dashboard/widgets/favorites-widget.tsx b/apps/web/src/components/dashboard/widgets/favorites-widget.tsx index fb8220f..804bdf8 100644 --- a/apps/web/src/components/dashboard/widgets/favorites-widget.tsx +++ b/apps/web/src/components/dashboard/widgets/favorites-widget.tsx @@ -263,7 +263,16 @@ export function FavoritesWidget({
{/* View mode toggle (edit mode only) */} {isEditMode && ( -
+ // role="toolbar" (D-03): die bisherige Beschriftung ("Favoriten") + // war sachlich falsch fuer einen Umschalter zwischen Listen- und + // Kachelansicht — hier greift D-03 im Sinn des Streichens (die + // Beschriftung trug keine echte Bedeutung), eine richtige + // Beschriftung ist trotzdem besser als gar keine. +