chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
export function termSize(): { cols: number; rows: number } {
|
||||
return {
|
||||
cols: process.stdout.columns || 80,
|
||||
rows: process.stdout.rows || 24,
|
||||
};
|
||||
}
|
||||
|
||||
export function truncateEnd(str: string, maxLen: number): string {
|
||||
if (str.length <= maxLen) return str;
|
||||
return str.slice(0, maxLen - 1) + '…';
|
||||
}
|
||||
|
||||
export const centerStringInWidth = (str: string, width: number): string => {
|
||||
const padding = Math.max(0, width - str.length);
|
||||
const padStart = Math.floor(padding / 2);
|
||||
const padEnd = padding - padStart;
|
||||
return ' '.repeat(padStart) + str + ' '.repeat(padEnd);
|
||||
};
|
||||
|
||||
export function asciiBlock(
|
||||
w: number,
|
||||
px: number,
|
||||
py: number,
|
||||
text: string
|
||||
): string[] {
|
||||
const lines = text.split('\n');
|
||||
const contentWidth = w - px * 2 - 2;
|
||||
const paddedLines = lines.map((line) => {
|
||||
const truncatedLine =
|
||||
line.length > contentWidth
|
||||
? line.slice(0, contentWidth - 3) + '...'
|
||||
: line;
|
||||
return centerStringInWidth(truncatedLine, w - 2);
|
||||
});
|
||||
const emptyLine = ' '.repeat(w - 2);
|
||||
const blockLines = [
|
||||
'┌' + '─'.repeat(w - 2) + '┐',
|
||||
...Array(py).fill('│' + emptyLine + '│'),
|
||||
...paddedLines.map((line) => '│' + line + '│'),
|
||||
...Array(py).fill('│' + emptyLine + '│'),
|
||||
'└' + '─'.repeat(w - 2) + '┘',
|
||||
];
|
||||
return blockLines;
|
||||
}
|
||||
Reference in New Issue
Block a user