@@ -74,6 +74,7 @@ export default function BatchCreatePage() {
7474 const [ completedCount , setCompletedCount ] = useState ( 0 )
7575 const [ queuedCount , setQueuedCount ] = useState ( 0 )
7676 const [ executionErrors , setExecutionErrors ] = useState < string [ ] > ( [ ] )
77+ const [ liveStatus , setLiveStatus ] = useState ( '' )
7778 const selectedTokenInfo = TOKENS . find ( ( t ) => t . address === selectedToken ) ??
7879 TOKENS [ 0 ] ?? { address : '' , symbol : 'XLM' , decimals : 7 }
7980
@@ -190,6 +191,11 @@ export default function BatchCreatePage() {
190191 setExecutionErrors ( [ ] )
191192 setCompletedCount ( 0 )
192193 setQueuedCount ( validRows . length )
194+ // Issue #686: announce progress for screen-reader/keyboard-only users.
195+ // `createStreamsBatch` submits every row as a single on-chain
196+ // transaction (not one call per row), so there's no real per-row
197+ // progress to announce — we report the start and the final outcome.
198+ setLiveStatus ( `Creating ${ validRows . length } stream${ validRows . length === 1 ? '' : 's' } …` )
193199
194200 const failures : string [ ] = [ ]
195201
@@ -213,8 +219,10 @@ export default function BatchCreatePage() {
213219
214220 if ( failures . length > 0 ) {
215221 setExecutionErrors ( failures )
222+ setLiveStatus ( `Batch failed: ${ failures [ 0 ] } ` )
216223 toast . error ( 'Batch create failed.' )
217224 } else {
225+ setLiveStatus ( `${ validRows . length } of ${ validRows . length } streams created successfully.` )
218226 toast . success ( 'Batch create completed' , {
219227 description : `${ validRows . length } streams created successfully.` ,
220228 } )
@@ -381,6 +389,11 @@ export default function BatchCreatePage() {
381389 </ div >
382390 ) }
383391
392+ { /* Issue #686: screen-reader-only live region announcing batch progress */ }
393+ < div role = "status" aria-live = "polite" className = "sr-only" >
394+ { liveStatus }
395+ </ div >
396+
384397 < div className = "rounded-2xl border border-border bg-card p-5" >
385398 < div className = "space-y-4" >
386399 < div className = "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between" >
0 commit comments