@@ -1297,32 +1297,42 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
12971297 animate = { { opacity : 1 , y : 0 } }
12981298 exit = { { opacity : 0 , y : 20 } }
12991299 className = "fixed bottom-24 left-1/2 -translate-x-1/2 z-30 w-full max-w-3xl px-4"
1300+ role = "region"
1301+ aria-label = "Prompt queue"
1302+ aria-live = "polite"
13001303 >
13011304 < div className = "bg-background/95 backdrop-blur-md border rounded-lg shadow-lg p-3 space-y-2" >
13021305 < div className = "flex items-center justify-between" >
1303- < div className = "text-xs font-medium text-muted-foreground mb-1" >
1306+ < div id = "queue-header" className = "text-xs font-medium text-muted-foreground mb-1" >
13041307 Queued Prompts ({ queuedPrompts . length } )
13051308 </ div >
13061309 < TooltipSimple content = { queuedPromptsCollapsed ? "Expand queue" : "Collapse queue" } side = "top" >
13071310 < motion . div
13081311 whileTap = { { scale : 0.97 } }
13091312 transition = { { duration : 0.15 } }
13101313 >
1311- < Button variant = "ghost" size = "icon" onClick = { ( ) => setQueuedPromptsCollapsed ( prev => ! prev ) } >
1312- { queuedPromptsCollapsed ? < ChevronUp className = "h-3 w-3" /> : < ChevronDown className = "h-3 w-3" /> }
1314+ < Button
1315+ variant = "ghost"
1316+ size = "icon"
1317+ onClick = { ( ) => setQueuedPromptsCollapsed ( prev => ! prev ) }
1318+ aria-label = { queuedPromptsCollapsed ? "Expand queued prompts" : "Collapse queued prompts" }
1319+ >
1320+ { queuedPromptsCollapsed ? < ChevronUp className = "h-3 w-3" aria-hidden = "true" /> : < ChevronDown className = "h-3 w-3" aria-hidden = "true" /> }
13131321 </ Button >
13141322 </ motion . div >
13151323 </ TooltipSimple >
13161324 </ div >
1317- { ! queuedPromptsCollapsed && queuedPrompts . map ( ( queuedPrompt , index ) => (
1318- < motion . div
1319- key = { queuedPrompt . id }
1320- initial = { { opacity : 0 , y : 4 } }
1321- animate = { { opacity : 1 , y : 0 } }
1322- exit = { { opacity : 0 , y : - 4 } }
1323- transition = { { duration : 0.15 , delay : index * 0.02 } }
1324- className = "flex items-start gap-2 bg-muted/50 rounded-md p-2"
1325- >
1325+ { ! queuedPromptsCollapsed && (
1326+ < ul role = "list" aria-labelledby = "queue-header" className = "space-y-2" >
1327+ { queuedPrompts . map ( ( queuedPrompt , index ) => (
1328+ < motion . li
1329+ key = { queuedPrompt . id }
1330+ initial = { { opacity : 0 , y : 4 } }
1331+ animate = { { opacity : 1 , y : 0 } }
1332+ exit = { { opacity : 0 , y : - 4 } }
1333+ transition = { { duration : 0.15 , delay : index * 0.02 } }
1334+ className = "flex items-start gap-2 bg-muted/50 rounded-md p-2"
1335+ >
13261336 < div className = "flex-1 min-w-0" >
13271337 < div className = "flex items-center gap-2 mb-1" >
13281338 < span className = "text-xs font-medium text-muted-foreground" > #{ index + 1 } </ span >
@@ -1341,12 +1351,15 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
13411351 size = "icon"
13421352 className = "h-6 w-6 flex-shrink-0"
13431353 onClick = { ( ) => setQueuedPrompts ( prev => prev . filter ( p => p . id !== queuedPrompt . id ) ) }
1354+ aria-label = { `Remove queued prompt: ${ queuedPrompt . prompt . slice ( 0 , 50 ) } ${ queuedPrompt . prompt . length > 50 ? '...' : '' } ` }
13441355 >
13451356 < X className = "h-3 w-3" />
13461357 </ Button >
13471358 </ motion . div >
1348- </ motion . div >
1349- ) ) }
1359+ </ motion . li >
1360+ ) ) }
1361+ </ ul >
1362+ ) }
13501363 </ div >
13511364 </ motion . div >
13521365 ) }
@@ -1395,7 +1408,8 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
13951408 } }
13961409 className = "px-3 py-2 hover:bg-accent rounded-none"
13971410 >
1398- < ChevronUp className = "h-4 w-4" />
1411+ < ChevronUp className = "h-4 w-4"
1412+ aria-label = "Scroll to top" />
13991413 </ Button >
14001414 </ motion . div >
14011415 </ TooltipSimple >
@@ -1423,7 +1437,8 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
14231437 } }
14241438 className = "px-3 py-2 hover:bg-accent rounded-none"
14251439 >
1426- < ChevronDown className = "h-4 w-4" />
1440+ < ChevronDown className = "h-4 w-4"
1441+ aria-label = "Scroll to bottom" />
14271442 </ Button >
14281443 </ motion . div >
14291444 </ TooltipSimple >
@@ -1455,6 +1470,9 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
14551470 size = "icon"
14561471 onClick = { ( ) => setShowTimeline ( ! showTimeline ) }
14571472 className = "h-9 w-9 text-muted-foreground hover:text-foreground"
1473+ aria-label = "Session timeline"
1474+ aria-haspopup = "dialog"
1475+ aria-expanded = { showTimeline }
14581476 >
14591477 < GitBranch className = { cn ( "h-3.5 w-3.5" , showTimeline && "text-primary" ) } />
14601478 </ Button >
@@ -1473,6 +1491,8 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
14731491 variant = "ghost"
14741492 size = "icon"
14751493 className = "h-9 w-9 text-muted-foreground hover:text-foreground"
1494+ aria-label = "Copy Conversation"
1495+ aria-haspopup = "menu"
14761496 >
14771497 < Copy className = "h-3.5 w-3.5" />
14781498 </ Button >
@@ -1515,6 +1535,8 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
15151535 size = "icon"
15161536 onClick = { ( ) => setShowSettings ( ! showSettings ) }
15171537 className = "h-8 w-8 text-muted-foreground hover:text-foreground"
1538+ aria-label = "Checkpoint Settings"
1539+ aria-haspopup = "dialog"
15181540 >
15191541 < Wrench className = { cn ( "h-3.5 w-3.5" , showSettings && "text-primary" ) } />
15201542 </ Button >
0 commit comments