@@ -68,11 +68,7 @@ function reactListTree(
6868 { key : String ( i ) , flexDirection : "row" , gap : 1 } ,
6969 h ( C . Text as string , { bold : isSelected } , isSelected ? ">" : " " ) ,
7070 h ( C . Text as string , { dimColor : ! isSelected } , `${ String ( i ) . padStart ( 3 , " " ) } .` ) ,
71- h (
72- C . Text as string ,
73- { bold : isSelected , inverse : isSelected } ,
74- `entry-${ i } .log` ,
75- ) ,
71+ h ( C . Text as string , { bold : isSelected , inverse : isSelected } , `entry-${ i } .log` ) ,
7672 h ( C . Text as string , { dimColor : true } , `${ ( i * 1024 + 512 ) . toLocaleString ( ) } B` ) ,
7773 ) ,
7874 ) ;
@@ -106,14 +102,8 @@ function termkitListTree(
106102 const y = 2 + i ;
107103 const isSelected = i === selected ;
108104 buffer . put ( { x : 0 , y, attr : { bold : isSelected } } , isSelected ? ">" : " " ) ;
109- buffer . put (
110- { x : 2 , y, attr : { dim : ! isSelected } } ,
111- `${ String ( i ) . padStart ( 3 , " " ) } .` ,
112- ) ;
113- buffer . put (
114- { x : 8 , y, attr : { bold : isSelected , inverse : isSelected } } ,
115- `entry-${ i } .log` ,
116- ) ;
105+ buffer . put ( { x : 2 , y, attr : { dim : ! isSelected } } , `${ String ( i ) . padStart ( 3 , " " ) } .` ) ;
106+ buffer . put ( { x : 8 , y, attr : { bold : isSelected , inverse : isSelected } } , `entry-${ i } .log` ) ;
117107 buffer . put ( { x : 25 , y, attr : { dim : true } } , `${ ( i * 1024 + 512 ) . toLocaleString ( ) } B` ) ;
118108 }
119109}
@@ -184,9 +174,7 @@ async function runInkCompat(config: ScenarioConfig): Promise<BenchMetrics> {
184174 for ( let i = 0 ; i < config . warmup ; i ++ ) {
185175 selected = ( selected + 1 ) % LIST_SIZE ;
186176 const frameP = backend . waitForFrame ( ) ;
187- instance . rerender (
188- reactListTree ( React , InkCompat , selected ) as React . ReactNode ,
189- ) ;
177+ instance . rerender ( reactListTree ( React , InkCompat , selected ) as React . ReactNode ) ;
190178 await frameP ;
191179 }
192180
@@ -197,9 +185,7 @@ async function runInkCompat(config: ScenarioConfig): Promise<BenchMetrics> {
197185 async ( ) => {
198186 selected = ( selected + 1 ) % LIST_SIZE ;
199187 const frameP = backend . waitForFrame ( ) ;
200- instance . rerender (
201- reactListTree ( React , InkCompat , selected ) as React . ReactNode ,
202- ) ;
188+ instance . rerender ( reactListTree ( React , InkCompat , selected ) as React . ReactNode ) ;
203189 await frameP ;
204190 } ,
205191 0 ,
@@ -223,24 +209,19 @@ async function runInk(config: ScenarioConfig): Promise<BenchMetrics> {
223209
224210 let selected = 0 ;
225211 const initialWrite = stdout . waitForWrite ( ) ;
226- const instance = Ink . render (
227- reactListTree ( React , Ink , selected ) as React . ReactNode ,
228- {
229- stdout : stdout as unknown as NodeJS . WriteStream ,
230- stdin : stdin as unknown as NodeJS . ReadStream ,
231- patchConsole : false ,
232- exitOnCtrlC : false ,
233- } ,
234- ) ;
212+ const instance = Ink . render ( reactListTree ( React , Ink , selected ) as React . ReactNode , {
213+ stdout : stdout as unknown as NodeJS . WriteStream ,
214+ stdin : stdin as unknown as NodeJS . ReadStream ,
215+ patchConsole : false ,
216+ exitOnCtrlC : false ,
217+ } ) ;
235218 await initialWrite ;
236219
237220 try {
238221 for ( let i = 0 ; i < config . warmup ; i ++ ) {
239222 selected = ( selected + 1 ) % LIST_SIZE ;
240223 const writeP = stdout . waitForWrite ( ) ;
241- instance . rerender (
242- reactListTree ( React , Ink , selected ) as React . ReactNode ,
243- ) ;
224+ instance . rerender ( reactListTree ( React , Ink , selected ) as React . ReactNode ) ;
244225 await writeP ;
245226 }
246227
@@ -251,9 +232,7 @@ async function runInk(config: ScenarioConfig): Promise<BenchMetrics> {
251232 async ( ) => {
252233 selected = ( selected + 1 ) % LIST_SIZE ;
253234 const writeP = stdout . waitForWrite ( ) ;
254- instance . rerender (
255- reactListTree ( React , Ink , selected ) as React . ReactNode ,
256- ) ;
235+ instance . rerender ( reactListTree ( React , Ink , selected ) as React . ReactNode ) ;
257236 await writeP ;
258237 } ,
259238 0 ,
@@ -315,16 +294,23 @@ function buildInitialBlessedList(
315294 blessed : { text : ( opts : Record < string , unknown > ) => unknown } ,
316295 screen : { append : ( el : unknown ) => void } ,
317296 selected : number ,
318- ) : { headerSel : BlessedWidget ; markers : BlessedWidget [ ] ; indices : BlessedWidget [ ] ; names : BlessedWidget [ ] } {
297+ ) : {
298+ headerSel : BlessedWidget ;
299+ markers : BlessedWidget [ ] ;
300+ indices : BlessedWidget [ ] ;
301+ names : BlessedWidget [ ] ;
302+ } {
319303 // Header
320304 screen . append (
321305 blessed . text ( { top : 0 , left : 0 , content : "Files" , style : { bold : true } , tags : false } ) ,
322306 ) ;
323- screen . append (
324- blessed . text ( { top : 0 , left : 8 , content : `${ LIST_SIZE } items` , tags : false } ) ,
325- ) ;
307+ screen . append ( blessed . text ( { top : 0 , left : 8 , content : `${ LIST_SIZE } items` , tags : false } ) ) ;
326308 const headerSel = blessed . text ( {
327- top : 0 , left : 22 , content : `Selected: ${ selected } ` , style : { fg : "grey" } , tags : false ,
309+ top : 0 ,
310+ left : 22 ,
311+ content : `Selected: ${ selected } ` ,
312+ style : { fg : "grey" } ,
313+ tags : false ,
328314 } ) ;
329315 screen . append ( headerSel ) ;
330316
@@ -335,10 +321,34 @@ function buildInitialBlessedList(
335321 for ( let i = 0 ; i < LIST_SIZE ; i ++ ) {
336322 const y = 2 + i ;
337323 const isSel = i === selected ;
338- const marker = blessed . text ( { top : y , left : 0 , content : isSel ? ">" : " " , style : { bold : isSel } , tags : false } ) ;
339- const idx = blessed . text ( { top : y , left : 2 , content : `${ String ( i ) . padStart ( 3 , " " ) } .` , style : { fg : isSel ? "white" : "grey" } , tags : false } ) ;
340- const name = blessed . text ( { top : y , left : 8 , content : `entry-${ i } .log` , style : { bold : isSel , inverse : isSel } , tags : false } ) ;
341- const size = blessed . text ( { top : y , left : 25 , content : `${ ( i * 1024 + 512 ) . toLocaleString ( ) } B` , style : { fg : "grey" } , tags : false } ) ;
324+ const marker = blessed . text ( {
325+ top : y ,
326+ left : 0 ,
327+ content : isSel ? ">" : " " ,
328+ style : { bold : isSel } ,
329+ tags : false ,
330+ } ) ;
331+ const idx = blessed . text ( {
332+ top : y ,
333+ left : 2 ,
334+ content : `${ String ( i ) . padStart ( 3 , " " ) } .` ,
335+ style : { fg : isSel ? "white" : "grey" } ,
336+ tags : false ,
337+ } ) ;
338+ const name = blessed . text ( {
339+ top : y ,
340+ left : 8 ,
341+ content : `entry-${ i } .log` ,
342+ style : { bold : isSel , inverse : isSel } ,
343+ tags : false ,
344+ } ) ;
345+ const size = blessed . text ( {
346+ top : y ,
347+ left : 25 ,
348+ content : `${ ( i * 1024 + 512 ) . toLocaleString ( ) } B` ,
349+ style : { fg : "grey" } ,
350+ tags : false ,
351+ } ) ;
342352 screen . append ( marker ) ;
343353 screen . append ( idx ) ;
344354 screen . append ( name ) ;
@@ -356,7 +366,12 @@ function buildInitialBlessedList(
356366 * matching the partial-update behavior measured by other frameworks.
357367 */
358368function updateBlessedSelection (
359- refs : { headerSel : BlessedWidget ; markers : BlessedWidget [ ] ; indices : BlessedWidget [ ] ; names : BlessedWidget [ ] } ,
369+ refs : {
370+ headerSel : BlessedWidget ;
371+ markers : BlessedWidget [ ] ;
372+ indices : BlessedWidget [ ] ;
373+ names : BlessedWidget [ ] ;
374+ } ,
360375 oldSel : number ,
361376 newSel : number ,
362377) : void {
@@ -424,8 +439,7 @@ async function runRatatui(config: ScenarioConfig): Promise<BenchMetrics> {
424439
425440export const contentUpdateScenario : Scenario = {
426441 name : "content-update" ,
427- description :
428- "Partial screen update: move selection in a 500-row list (measures diff efficiency)" ,
442+ description : "Partial screen update: move selection in a 500-row list (measures diff efficiency)" ,
429443 defaultConfig : { warmup : 50 , iterations : 500 } ,
430444 paramSets : [ { } ] ,
431445 frameworks : [ "rezi-native" , "ink-compat" , "ink" , "terminal-kit" , "blessed" , "ratatui" ] ,
0 commit comments