11import {
2- TERMINAL_PREVIEW_COLUMNS ,
3- TERMINAL_PREVIEW_ROWS ,
4- TERMINAL_PREVIEW_SAMPLE_TEXT ,
52 terminalPreviewHeaderLines ,
63 terminalPreviewPromptCommand ,
74} from '../../domain/terminal-preview/terminal-preview-model' ;
8-
9- const LINE_BREAK = '\r\n' ;
10- const ROW_LABEL_WIDTH = 6 ;
11- const CELL_WIDTH = 7 ;
12- const CELL_SEPARATOR = ' ' ;
13- const ROW_LABEL_SEPARATOR = ' ' ;
14-
15- function sgr ( ...codes ) {
16- if ( codes . length === 0 ) {
17- return '' ;
18- }
19-
20- return `\x1b[${ codes . join ( ';' ) } m` ;
21- }
22-
23- function reset ( ) {
24- return '\x1b[0m' ;
25- }
26-
27- function padRight ( value , width ) {
28- return value . padEnd ( width , ' ' ) ;
29- }
30-
31- function padLeft ( value , width ) {
32- return value . padStart ( width , ' ' ) ;
33- }
34-
35- function padCenter ( value , width ) {
36- const availablePadding = Math . max ( width - value . length , 0 ) ;
37- const leftPadding = Math . floor ( availablePadding / 2 ) ;
38- const rightPadding = availablePadding - leftPadding ;
39-
40- return `${ ' ' . repeat ( leftPadding ) } ${ value } ${ ' ' . repeat ( rightPadding ) } ` ;
41- }
42-
43- function styledText ( text , codes ) {
44- return `${ sgr ( ...codes ) } ${ text } ${ reset ( ) } ` ;
45- }
5+ import { buildColorsPreviewCommand } from './build-colors-preview-command' ;
6+ import { joinTerminalLines , styledText } from './ansi-terminal-sequence' ;
467
478function renderPrompt ( { command = null } = { } ) {
489 const prompt = terminalPreviewPromptCommand ( ) ;
@@ -64,39 +25,14 @@ function renderHelpLine() {
6425 return `Type ${ styledText ( 'help' , [ 32 ] ) } for instructions on how to use fish` ;
6526}
6627
67- function renderTableHeader ( ) {
68- const labels = TERMINAL_PREVIEW_COLUMNS . map ( ( column ) => padCenter ( column . label , CELL_WIDTH ) ) ;
69-
70- return `${ padRight ( '' , ROW_LABEL_WIDTH ) } ${ ROW_LABEL_SEPARATOR } ${ labels . join ( CELL_SEPARATOR ) } ` ;
71- }
72-
73- function renderTableRow ( row ) {
74- const label = padLeft ( row . label , ROW_LABEL_WIDTH ) ;
75- const cells = TERMINAL_PREVIEW_COLUMNS . map ( ( column ) => {
76- const codes = [ ...row . sgr , ...column . sgr ] ;
77- const sample = padCenter ( TERMINAL_PREVIEW_SAMPLE_TEXT , CELL_WIDTH ) ;
78-
79- return styledText ( sample , codes ) ;
80- } ) ;
81-
82- return `${ label } ${ ROW_LABEL_SEPARATOR } ${ cells . join ( CELL_SEPARATOR ) } ${ reset ( ) } ` ;
83- }
84-
85- function renderPreviewTable ( ) {
86- return [
87- renderTableHeader ( ) ,
88- ...TERMINAL_PREVIEW_ROWS . map ( ( row ) => renderTableRow ( row ) ) ,
89- ] . join ( LINE_BREAK ) ;
90- }
91-
9228export function buildTerminalPreviewSequence ( ) {
93- return [
29+ return joinTerminalLines ( [
9430 terminalPreviewHeaderLines ( ) [ 0 ] ,
9531 renderHelpLine ( ) ,
9632 renderPrompt ( { command : terminalPreviewPromptCommand ( ) . command } ) ,
9733 '' ,
98- renderPreviewTable ( ) ,
34+ buildColorsPreviewCommand ( ) ,
9935 '' ,
10036 renderPrompt ( ) ,
101- ] . join ( LINE_BREAK ) ;
37+ ] ) ;
10238}
0 commit comments