From e24c203730c4f1bc89f6f18f54715ae8947dd8b6 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 30 Jan 2026 17:37:33 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20Improve=20GoalsList?= =?UTF-8?q?=20accessibility=20and=20keyboard=20nav?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💡 What: Added aria-labels to Edit/Delete buttons and enabled keyboard visibility. 🎯 Why: Icon-only buttons were inaccessible to screen readers. Action buttons were invisible to keyboard users (tab focus). ♿ Accessibility: Added aria-labels and group-focus-within styles. Co-authored-by: criptogus <128640021+criptogus@users.noreply.github.com> --- .Jules/palette.md | 4 ++ src/components/goals/GoalsList.tsx | 6 +-- src/tests/components/GoalsList.test.tsx | 60 +++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/tests/components/GoalsList.test.tsx diff --git a/.Jules/palette.md b/.Jules/palette.md index bbbd06dfd..3c352a63d 100644 --- a/.Jules/palette.md +++ b/.Jules/palette.md @@ -29,3 +29,7 @@ ## 2026-01-22 - Replacing Text Characters with Semantic Icons **Learning:** In `AppSidebar.tsx`, a text character "▼" was used for the expand/collapse arrow. Screen readers might announce this as "Black Down-Pointing Triangle" or similar, which is distracting. Text characters also don't scale or style as consistently as SVGs. **Action:** Replace decorative text characters with `CyberIcon` (or proper SVG icons) and add `aria-hidden="true"` to ensure they are treated as visual decoration only. + +## 2026-01-24 - Keyboard Visibility for Hover Actions +**Learning:** In `GoalsList.tsx`, action buttons were hidden using `opacity-0 group-hover:opacity-100`, making them invisible to keyboard users who tabbed into the card. Focus does not trigger hover styles by default. +**Action:** Always add `group-focus-within:opacity-100` alongside `group-hover:opacity-100` for containers of interactive elements to ensure they become visible when a user focuses on them. diff --git a/src/components/goals/GoalsList.tsx b/src/components/goals/GoalsList.tsx index 7e6053de0..20ea71bea 100644 --- a/src/components/goals/GoalsList.tsx +++ b/src/components/goals/GoalsList.tsx @@ -75,13 +75,13 @@ export function GoalsList({ goals, onEdit, onDelete, onPlan, onStatusChange, onA -