Skip to content
Open
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
1 change: 1 addition & 0 deletions .Jules/palette.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
## 2024-05-24 - Accessibility: ARIA Labels on Navigation Shell\n**Learning:** The global navigation shell contained several icon-only buttons (menu, notifications, dynamic mobile actions) missing screen reader context.\n**Action:** Always verify icon-only buttons have descriptive aria-labels, especially in high-visibility core layout components.
7 changes: 4 additions & 3 deletions src/components/layout/app-shell.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -212,13 +212,13 @@ export function AppShell({ children }: { children: React.ReactNode }) {
<span>Lottoping</span>
</div>
<div className="flex items-center gap-1.5">
<Button variant="ghost" size="icon" className="rounded-full h-10 w-10 relative" onClick={() => setIsAlertsOpen(true)}>
<Button variant="ghost" size="icon" className="rounded-full h-10 w-10 relative" onClick={() => setIsAlertsOpen(true)} aria-label="Open alerts">
<Bell className="w-5 h-5 text-primary" />
<span className="absolute top-2.5 right-2.5 w-2 h-2 rounded-full bg-secondary border-2 border-white dark:border-black" />
</Button>
<Sheet>
<SheetTrigger asChild>
<Button variant="ghost" size="icon" className="rounded-full h-10 w-10">
<Button variant="ghost" size="icon" className="rounded-full h-10 w-10" aria-label="Open menu">
<Menu className="w-6 h-6 text-primary" />
</Button>
</SheetTrigger>
Expand Down Expand Up @@ -298,6 +298,7 @@ export function AppShell({ children }: { children: React.ReactNode }) {
key={i}
onClick={item.action}
className="flex flex-col items-center justify-center -mt-12 bg-primary w-16 h-16 rounded-full border-4 border-white dark:border-black shadow-2xl transition-transform active:scale-90"
aria-label={item.label}
>
<item.icon className="w-8 h-8 text-white" />
</button>
Expand Down Expand Up @@ -341,7 +342,7 @@ export function AppShell({ children }: { children: React.ReactNode }) {
<div className="h-full flex flex-col bg-card">
<div className="p-6 border-b flex items-center justify-between bg-primary/5">
<SheetTitle className="text-xl font-black text-primary">Entry Wallet</SheetTitle>
<Button variant="ghost" size="icon" onClick={() => setIsTicketsOpen(false)}><X className="w-5 h-5" /></Button>
<Button variant="ghost" size="icon" onClick={() => setIsTicketsOpen(false)} aria-label="Close wallet"><X className="w-5 h-5" /></Button>
</div>
<ScrollArea className="flex-1 p-6"><TicketList /></ScrollArea>
</div>
Expand Down