Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .Jules/palette.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
2 changes: 1 addition & 1 deletion packages/web/src/components/copy-prompt-button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export function CopyPromptButton({
onClick={handleCopy}
className={cn("gap-1.5", className)}
>
{copied ? <Check /> : <Copy />}
{copied ? <Check aria-hidden="true" /> : <Copy aria-hidden="true" />}
{copied ? copiedLabel : label}
</Button>
);
Expand Down
3 changes: 2 additions & 1 deletion packages/web/src/components/dashboard/event-list.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -181,14 +181,15 @@ function RowView({
bg,
)}
>
<Icon className="h-3 w-3 text-background" />
<Icon className="h-3 w-3 text-background" aria-hidden="true" />
</span>
<span className="w-20 shrink-0 text-sm font-medium truncate">
{label}
</span>
<span className="flex-1 min-w-0 flex items-center gap-1 text-sm text-muted-foreground">
{chevron !== undefined && (
<ChevronRight
aria-hidden="true"
className={cn(
"h-3 w-3 shrink-0 transition-transform",
chevron === "expanded" && "rotate-90",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export function NoOrganizationState({
CLI 없이 λ¨Όμ € 쑰직만 λ§Œλ“€κ³  μ‹Άλ‹€λ©΄?
</div>
<Button size="sm" variant="outline" onClick={() => setCreateOpen(true)}>
<PlusIcon />
<PlusIcon aria-hidden="true" />
쑰직 μˆ˜λ™ 생성
</Button>
</div>
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/components/layout/org-switcher.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ export function OrgSwitcher({
className="gap-2.5 rounded-md px-2 py-1.5 pr-8 text-muted-foreground"
>
<span className="flex size-6 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground">
<PlusIcon className="size-3.5" />
<PlusIcon className="size-3.5" aria-hidden="true" />
</span>
<span className="truncate text-sm">Create organization</span>
</SelectItem>
Expand Down
4 changes: 2 additions & 2 deletions packages/web/src/components/ui/pagination.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ export function Pagination({
disabled={safePage <= 1}
aria-label="이전 νŽ˜μ΄μ§€"
>
<ChevronLeftIcon />
<ChevronLeftIcon aria-hidden="true" />
</Button>

{/* λͺ¨λ°”일: ν˜„μž¬ νŽ˜μ΄μ§€ / μ „μ²΄λ§Œ ν‘œμ‹œ */}
Expand Down Expand Up @@ -156,7 +156,7 @@ export function Pagination({
disabled={safePage >= totalPages}
aria-label="λ‹€μŒ νŽ˜μ΄μ§€"
>
<ChevronRightIcon />
<ChevronRightIcon aria-hidden="true" />
</Button>
</div>
)}
Expand Down
Loading