From 191e287de731a0e86d2cd9c7cd2e92855ed9f8b2 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Thu, 16 Jul 2026 20:19:57 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20Add=20aria-hidden=20t?= =?UTF-8?q?o=20decorative=20icons=20for=20screen=20readers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .Jules/palette.md | 4 ++++ packages/web/src/components/copy-prompt-button.tsx | 2 +- packages/web/src/components/dashboard/event-list.tsx | 3 ++- .../web/src/components/dashboard/no-organization-state.tsx | 2 +- packages/web/src/components/layout/org-switcher.tsx | 2 +- packages/web/src/components/ui/pagination.tsx | 4 ++-- 6 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.Jules/palette.md b/.Jules/palette.md index 701f22eb..85e4679d 100644 --- a/.Jules/palette.md +++ b/.Jules/palette.md @@ -5,3 +5,7 @@ ## 2024-07-10 - 접을 수 있는 영역(Collapsible Region) 접근성 개선 **Learning:** `ContextSection` 컴포넌트와 같이 아코디언 형태의 접을 수 있는 영역은 스크린 리더가 컨텐츠의 상태를 올바르게 인식하고 읽어주기 위해 토글 버튼과 컨텐츠 컨테이너 간의 명확한 ARIA 연결이 필요합니다. React의 `useId()` 훅을 사용하여 `aria-controls`, `id`, `aria-labelledby`를 동적으로 생성해 서로 연결하면 안정적입니다. 또한, 컨텐츠 영역에는 `role="region"`이 반드시 필요하다는 점을 확인했습니다. **Action:** 향후 접을 수 있는 컴포넌트(Collapsible Region)를 만들거나 수정할 때는 항상 `useId()`를 사용하여 토글 버튼(`aria-controls`)과 컨텐츠 컨테이너(`id`, `role="region"`, `aria-labelledby`)를 동적으로 연결하도록 합니다. 추가로 키보드 네비게이션 사용자를 위한 명확한 포커스 링(`focus-visible` 관련 클래스 적용) 처리도 잊지 말아야 합니다. + +## 2025-03-08 - Add aria-hidden to decorative icons for screen readers +**Learning:** Screen readers often announce the name of icons inside interactive elements like buttons, creating unnecessary noise when the button already has text or an aria-label. Adding `aria-hidden="true"` to Lucide icons (e.g., `Check`, `Copy`, `ChevronRight`, `ChevronLeftIcon`, `PlusIcon`) inside elements with text ensures a cleaner experience for users relying on assistive technologies. +**Action:** Always add `aria-hidden="true"` to decorative icons inside interactive components. diff --git a/packages/web/src/components/copy-prompt-button.tsx b/packages/web/src/components/copy-prompt-button.tsx index 046e7fac..9f1893fa 100644 --- a/packages/web/src/components/copy-prompt-button.tsx +++ b/packages/web/src/components/copy-prompt-button.tsx @@ -39,7 +39,7 @@ export function CopyPromptButton({ onClick={handleCopy} className={cn("gap-1.5", className)} > - {copied ? : } + {copied ?