advanced-usage.md
March 31, 2022 · View on GitHub
use colSpan to span columns - (colSpan above normal cell)
┌───────────────┐
│ greetings │
├───────────────┤
│ greetings │
├───────┬───────┤
│ hello │ howdy │
└───────┴───────┘
let table = new Table({ style: { head: [], border: [] } });
table.push(
[{ colSpan: 2, content: 'greetings' }],
[{ colSpan: 2, content: 'greetings' }],
['hello', 'howdy']
);
use colSpan to span columns - (colSpan below normal cell)
┌───────┬───────┐
│ hello │ howdy │
├───────┴───────┤
│ greetings │
├───────────────┤
│ greetings │
└───────────────┘
let table = new Table({ style: { head: [], border: [] } });
table.push(
['hello', 'howdy'],
[{ colSpan: 2, content: 'greetings' }],
[{ colSpan: 2, content: 'greetings' }]
);
use rowSpan to span rows - (rowSpan on the left side)
┌───────────┬───────────┬───────┐
│ greetings │ │ hello │
│ │ greetings ├───────┤
│ │ │ howdy │
└───────────┴───────────┴───────┘
let table = new Table({ style: { head: [], border: [] } });
table.push(
[{ rowSpan: 2, content: 'greetings' }, { rowSpan: 2, content: 'greetings', vAlign: 'center' }, 'hello'],
['howdy']
);
use rowSpan to span rows - (rowSpan on the right side)
┌───────┬───────────┬───────────┐
│ hello │ greetings │ │
├───────┤ │ │
│ howdy │ │ greetings │
└───────┴───────────┴───────────┘
let table = new Table({ style: { head: [], border: [] } });
table.push(
['hello', { rowSpan: 2, content: 'greetings' }, { rowSpan: 2, content: 'greetings', vAlign: 'bottom' }],
['howdy']
);
mix rowSpan and colSpan together for complex table layouts
┌───────┬─────┬────┐
│ hello │ sup │ hi │
├───────┤ │ │
│ howdy │ │ │
├───┬───┼──┬──┤ │
│ o │ k │ │ │ │
└───┴───┴──┴──┴────┘
let table = new Table({ style: { head: [], border: [] } });
table.push(
[
{ content: 'hello', colSpan: 2 },
{ rowSpan: 2, colSpan: 2, content: 'sup' },
{ rowSpan: 3, content: 'hi' },
],
[{ content: 'howdy', colSpan: 2 }],
['o', 'k', '', '']
);
multi-line content will flow across rows in rowSpan cells
┌───────┬───────────┬───────────┐
│ hello │ greetings │ greetings │
├───────┤ friends │ friends │
│ howdy │ │ │
└───────┴───────────┴───────────┘
let table = new Table({ style: { head: [], border: [] } });
table.push(
['hello', { rowSpan: 2, content: 'greetings\nfriends' }, { rowSpan: 2, content: 'greetings\nfriends' }],
['howdy']
);
multi-line content will flow across rows in rowSpan cells - (complex layout)
┌───────┬─────┬────┐
│ hello │ sup │ hi │
├───────┤ man │ yo │
│ howdy │ hey │ │
├───┬───┼──┬──┤ │
│ o │ k │ │ │ │
└───┴───┴──┴──┴────┘
let table = new Table({ style: { head: [], border: [] } });
table.push(
[
{ content: 'hello', colSpan: 2 },
{ rowSpan: 2, colSpan: 2, content: 'sup\nman\nhey' },
{ rowSpan: 3, content: 'hi\nyo' },
],
[{ content: 'howdy', colSpan: 2 }],
['o', 'k', '', '']
);
rowSpan cells can have a staggered layout
┌───┬───┐
│ a │ b │
│ ├───┤
│ │ c │
├───┤ │
│ d │ │
└───┴───┘
let table = new Table({ style: { head: [], border: [] } });
table.push(
[{ content: 'a', rowSpan: 2 }, 'b'],
[{ content: 'c', rowSpan: 2 }],
['d']
);
the layout manager automatically create empty cells to fill in the table
┌───┬───┬──┐
│ a │ b │ │
│ ├───┤ │
│ │ │ │
│ ├───┴──┤
│ │ c │
├───┤ │
│ │ │
└───┴──────┘
let table = new Table({ style: { head: [], border: [] } });
//notice we only create 3 cells here, but the table ends up having 6.
table.push(
[{ content: 'a', rowSpan: 3, colSpan: 2 }, 'b'],
[],
[{ content: 'c', rowSpan: 2, colSpan: 2 }],
[]
);
use table rowHeights option to fix row height. The truncation symbol will be shown on the last line.
┌───────┐
│ hello │
│ hi… │
└───────┘
let table = new Table({
rowHeights: [2],
style: { head: [], border: [] },
});
table.push(['hello\nhi\nsup']);
if colWidths is not specified, the layout manager will automatically widen rows to fit the content
┌─────────────┐
│ hello there │
├──────┬──────┤
│ hi │ hi │
└──────┴──────┘
let table = new Table({ style: { head: [], border: [] } });
table.push(
[{ colSpan: 2, content: 'hello there' }],
['hi', 'hi']
);
you can specify a column width for only the first row, other rows will be automatically widened to fit content
┌─────────────┐
│ hello there │
├────┬────────┤
│ hi │ hi │
└────┴────────┘
let table = new Table({
colWidths: [4],
style: { head: [], border: [] },
});
table.push(
[{ colSpan: 2, content: 'hello there' }],
['hi', { hAlign: 'center', content: 'hi' }]
);
a column with a null column width will be automatically widened to fit content
┌─────────────┐
│ hello there │
├────────┬────┤
│ hi │ hi │
└────────┴────┘
let table = new Table({
colWidths: [null, 4],
style: { head: [], border: [] },
});
table.push(
[{ colSpan: 2, content: 'hello there' }],
[{ hAlign: 'right', content: 'hi' }, 'hi']
);
feel free to use colors in your content strings, column widths will be calculated correctly

let table = new Table({
colWidths: [5],
style: { head: [], border: [] },
});
table.push([colors.red('hello')]);