-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlorem-ipsum.ts
59 lines (51 loc) Β· 1.66 KB
/
lorem-ipsum.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
* Demonstrates responsive behavior by faking the terminal width
* (Demo in README)
*
* Run the example in 80x27:
* $ npx esno examples/lorem-ipsum.ts
*/
import ansiEscapes from 'ansi-escapes'
import color from '@nyxb/picocolors'
import tabletron from '../src'
const { bold, italic, underline } = color
const tableData = [
[
italic('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id neque aliquam vestibulum morbi blandit cursus risus at.'),
underline('Sit amet luctus venenatis lectus magna. Nisi porta lorem mollis aliquam ut porttitor leo a. Sem integer vitae justo eget magna. Erat pellentesque adipiscing commodo elit.'),
bold('Ultrices tincidunt arcu non sodales neque. Quis blandit turpis cursus in hac habitasse platea dictumst quisque. Libero enim sed faucibus turpis in eu mi bibendum neque.'),
],
]
function renderTable(stdoutColumns: number) {
const table = tabletron(tableData, {
stdoutColumns,
columns: [
{
align: 'right',
paddingRight: 4,
paddingBottom: 1,
},
{
paddingRight: 4,
paddingBottom: 1,
},
],
})
process.stdout.write(`${ansiEscapes.clearTerminal + table}\n\n\n`)
}
const stdoutWidth = process.stdout.columns
let tableWidth = process.stdout.columns
let movingDown = true
setInterval(() => {
if (movingDown) {
tableWidth -= 1
if (tableWidth === 30)
movingDown = false
}
else {
tableWidth += 1
if (tableWidth === stdoutWidth)
movingDown = true
}
renderTable(tableWidth)
}, 100)