@@ -1333,32 +1333,42 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
13331333 animate = { { opacity : 1 , y : 0 } }
13341334 exit = { { opacity : 0 , y : 20 } }
13351335 className = "fixed bottom-24 left-1/2 -translate-x-1/2 z-30 w-full max-w-3xl px-4"
1336+ role = "region"
1337+ aria-label = "Prompt queue"
1338+ aria-live = "polite"
13361339 >
13371340 < div className = "bg-background/95 backdrop-blur-md border rounded-lg shadow-lg p-3 space-y-2" >
13381341 < div className = "flex items-center justify-between" >
1339- < div className = "text-xs font-medium text-muted-foreground mb-1" >
1342+ < div id = "queue-header" className = "text-xs font-medium text-muted-foreground mb-1" >
13401343 Queued Prompts ({ queuedPrompts . length } )
13411344 </ div >
13421345 < TooltipSimple content = { queuedPromptsCollapsed ? "Expand queue" : "Collapse queue" } side = "top" >
13431346 < motion . div
13441347 whileTap = { { scale : 0.97 } }
13451348 transition = { { duration : 0.15 } }
13461349 >
1347- < Button variant = "ghost" size = "icon" onClick = { ( ) => setQueuedPromptsCollapsed ( prev => ! prev ) } >
1348- { queuedPromptsCollapsed ? < ChevronUp className = "h-3 w-3" /> : < ChevronDown className = "h-3 w-3" /> }
1350+ < Button
1351+ variant = "ghost"
1352+ size = "icon"
1353+ onClick = { ( ) => setQueuedPromptsCollapsed ( prev => ! prev ) }
1354+ aria-label = { queuedPromptsCollapsed ? "Expand queued prompts" : "Collapse queued prompts" }
1355+ >
1356+ { queuedPromptsCollapsed ? < ChevronUp className = "h-3 w-3" aria-hidden = "true" /> : < ChevronDown className = "h-3 w-3" aria-hidden = "true" /> }
13491357 </ Button >
13501358 </ motion . div >
13511359 </ TooltipSimple >
13521360 </ div >
1353- { ! queuedPromptsCollapsed && queuedPrompts . map ( ( queuedPrompt , index ) => (
1354- < motion . div
1355- key = { queuedPrompt . id }
1356- initial = { { opacity : 0 , y : 4 } }
1357- animate = { { opacity : 1 , y : 0 } }
1358- exit = { { opacity : 0 , y : - 4 } }
1359- transition = { { duration : 0.15 , delay : index * 0.02 } }
1360- className = "flex items-start gap-2 bg-muted/50 rounded-md p-2"
1361- >
1361+ { ! queuedPromptsCollapsed && (
1362+ < ul role = "list" aria-labelledby = "queue-header" className = "space-y-2" >
1363+ { queuedPrompts . map ( ( queuedPrompt , index ) => (
1364+ < motion . li
1365+ key = { queuedPrompt . id }
1366+ initial = { { opacity : 0 , y : 4 } }
1367+ animate = { { opacity : 1 , y : 0 } }
1368+ exit = { { opacity : 0 , y : - 4 } }
1369+ transition = { { duration : 0.15 , delay : index * 0.02 } }
1370+ className = "flex items-start gap-2 bg-muted/50 rounded-md p-2"
1371+ >
13621372 < div className = "flex-1 min-w-0" >
13631373 < div className = "flex items-center gap-2 mb-1" >
13641374 < span className = "text-xs font-medium text-muted-foreground" > #{ index + 1 } </ span >
@@ -1377,12 +1387,15 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
13771387 size = "icon"
13781388 className = "h-6 w-6 flex-shrink-0"
13791389 onClick = { ( ) => setQueuedPrompts ( prev => prev . filter ( p => p . id !== queuedPrompt . id ) ) }
1390+ aria-label = { `Remove queued prompt: ${ queuedPrompt . prompt . slice ( 0 , 50 ) } ${ queuedPrompt . prompt . length > 50 ? '...' : '' } ` }
13801391 >
13811392 < X className = "h-3 w-3" />
13821393 </ Button >
13831394 </ motion . div >
1384- </ motion . div >
1385- ) ) }
1395+ </ motion . li >
1396+ ) ) }
1397+ </ ul >
1398+ ) }
13861399 </ div >
13871400 </ motion . div >
13881401 ) }
@@ -1431,7 +1444,8 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
14311444 } }
14321445 className = "px-3 py-2 hover:bg-accent rounded-none"
14331446 >
1434- < ChevronUp className = "h-4 w-4" />
1447+ < ChevronUp className = "h-4 w-4"
1448+ aria-label = "Scroll to top" />
14351449 </ Button >
14361450 </ motion . div >
14371451 </ TooltipSimple >
@@ -1464,7 +1478,8 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
14641478 } }
14651479 className = "px-3 py-2 hover:bg-accent rounded-none"
14661480 >
1467- < ChevronDown className = "h-4 w-4" />
1481+ < ChevronDown className = "h-4 w-4"
1482+ aria-label = "Scroll to bottom" />
14681483 </ Button >
14691484 </ motion . div >
14701485 </ TooltipSimple >
@@ -1496,6 +1511,9 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
14961511 size = "icon"
14971512 onClick = { ( ) => setShowTimeline ( ! showTimeline ) }
14981513 className = "h-9 w-9 text-muted-foreground hover:text-foreground"
1514+ aria-label = "Session timeline"
1515+ aria-haspopup = "dialog"
1516+ aria-expanded = { showTimeline }
14991517 >
15001518 < GitBranch className = { cn ( "h-3.5 w-3.5" , showTimeline && "text-primary" ) } />
15011519 </ Button >
@@ -1514,6 +1532,8 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
15141532 variant = "ghost"
15151533 size = "icon"
15161534 className = "h-9 w-9 text-muted-foreground hover:text-foreground"
1535+ aria-label = "Copy Conversation"
1536+ aria-haspopup = "menu"
15171537 >
15181538 < Copy className = "h-3.5 w-3.5" />
15191539 </ Button >
@@ -1556,6 +1576,8 @@ export const ClaudeCodeSession: React.FC<ClaudeCodeSessionProps> = ({
15561576 size = "icon"
15571577 onClick = { ( ) => setShowSettings ( ! showSettings ) }
15581578 className = "h-8 w-8 text-muted-foreground hover:text-foreground"
1579+ aria-label = "Checkpoint Settings"
1580+ aria-haspopup = "dialog"
15591581 >
15601582 < Wrench className = { cn ( "h-3.5 w-3.5" , showSettings && "text-primary" ) } />
15611583 </ Button >
0 commit comments