From 174a33227bd84b94509444d5dc7322d8d840d156 Mon Sep 17 00:00:00 2001 From: nyxb Date: Sat, 20 May 2023 18:52:53 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20feat(README.md):=20add=20documen?= =?UTF-8?q?tation=20for=20tabletron=20package=20=F0=9F=90=9B=20fix(auto-re?= =?UTF-8?q?size.ts):=20replace=20deprecated=20terminalColumns=20function?= =?UTF-8?q?=20with=20tabletron=20The=20README.md=20file=20now=20includes?= =?UTF-8?q?=20comprehensive=20documentation=20for=20the=20tabletron=20pack?= =?UTF-8?q?age,=20including=20installation=20instructions,=20usage=20examp?= =?UTF-8?q?les,=20and=20API=20documentation.=20The=20auto-resize.ts=20exam?= =?UTF-8?q?ple=20file=20has=20been=20updated=20to=20use=20the=20tabletron?= =?UTF-8?q?=20function=20instead=20of=20the=20deprecated=20terminalColumns?= =?UTF-8?q?=20function.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🚀 chore(lorem-ipsum.ts): update dependencies and fix formatting 🚀 chore(responsive-table.ts): update dependencies and fix formatting 🚀 chore(package.json): add prepack script and update release script The changes in these files are purely cosmetic and do not affect the functionality of the application. The commit updates the dependencies and fixes the formatting of the code. Additionally, a prepack script has been added to build the application before packaging it, and the release script has been updated to include testing and changelog generation before publishing the package and pushing the tags to the main branch. 🎨 style(terminal-columns.test.ts): rename terminalColumns to tabletron The import statement for the table formatting library was changed from `terminalColumns` to `tabletron` to improve the semantics of the code. The variable name was changed in all the test cases and the function calls. --- README.md | 402 +++++++++++++++++++++++++++++++++ examples/auto-resize.ts | 4 +- examples/lorem-ipsum.ts | 93 ++++---- examples/responsive-table.ts | 280 +++++++++++------------ package.json | 7 +- tests/terminal-columns.test.ts | 66 +++--- 6 files changed, 628 insertions(+), 224 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..b4044e5 --- /dev/null +++ b/README.md @@ -0,0 +1,402 @@ +[![cover][cover-src]][cover-href] +[![npm version][npm-version-src]][npm-version-href] +[![npm downloads][npm-downloads-src]][npm-downloads-href] +[![bundle][bundle-src]][bundle-href] [![JSDocs][jsdocs-src]][jsdocs-href] +[![License][license-src]][license-href] + +# tabletron + +> 🎨✨ Transform your terminal output into a clear, easily readable table with just one command! 📊🔍 + +

+ +
+ Tables can be automatically responsive! +

+ +### ✨ Features +- 📏 Content wrapped to fit column width +- 📐 Column widths `auto`, `content-width`, viewport percents & static values +- ↔️ Align left & right +- 🧱 Horizontal & vertical padding +- 🌊 Rows can overflow into multiple rows +- 📱 Easy to make responsive tables + +➡️ [Try it out online](https://stackblitz.com/edit/tabletron-demo?devtoolsheight=50&file=examples/tabletron.js&view=editor) + +> Support this project by ⭐️ starring and sharing it. [Follow me](https://github.com/nyxb) to see what other cool projects I'm working on! 💙 + +## 🚀 Install: + +```bash +# nyxi +nyxi tabletron + +# pnpm +pnpm add tabletron + +# npm +npm i tabletron + +# yarn +yarn add tabletron +``` + +## ⏱️ Quick start +Render a table by passing table data into `tabletron` and writing it to stdout. + +```ts +import tabletron from 'tabletron' + +// Create table data +const tableData = [ + ['Cell A1', 'Cell B1', 'Cell C1'], + ['Cell A2', 'Cell B2', 'Cell C2'], + ['Cell A3', 'Cell B3', 'Cell C3'] +] + +// Render table +const tableString = tabletron(tableData) +console.log(tableString) +``` + +By default, the columns will be rendered with the `auto` width, which splits the available width with other `auto` columns. To configure the width of each column, pass them in as the second argument. + +```ts +const tableString = tabletron( + tableData, + + // Configure column widths + [ + 'content-width', // Use the width of the content + '50%', // Fill 50% of viewport width + 'auto' // Fill remaining width + ] +) +``` + +## 📖 Examples + +### 📏 Fixed width table +You can set a fixed width for each column by passing in a the number of columns. + +However, note that this will wrap the row to the next line if the viewport width is smaller than the table width. + +```ts +tabletron( + tableData, + [ + 30, + 30, + 30 + ] +) +``` + +### 📏 Fixed width table with no row-wrapping +You can change the row-wrapping behavior by telling `tabletron` to use a different viewport width via the `stdoutColumns` option. For example, passing in `Infinity` will trick it into thinking the table is never overflowing the viewport width. + +```ts +tabletron( + tableData, + { + stdoutColumns: Number.POSITIVE_INFINITY, + columns: [ + 30, + 30, + 30 + ] + } +) +``` + +### 🧱 Padding +You can add padding to each column by setting `paddingLeft`, `paddingRight`, `paddingTop`, or `paddingBottom` on the column. + +```ts +tabletron( + tableData, + [ + { + paddingLeft: 2 // Pad the left side of the cell with 2 spaces + }, + { + paddingRight: 2 // Pad the right side of the cell with 2 spaces + }, + { + paddingTop: 2 // Pad the top of the cell with 2 lines + }, + { + paddingBottom: 2 // Pad the bottom of the cell with 2 lines + } + ] +) +``` + +### ➡️ Right align text +You can align the content of the column by setting `align: 'right'`. + +```ts +tabletron( + tableData, + [ + { + align: 'right' + } + ] +) +``` + +### 📱 Responsive table with breakpoints function +Define breakpoints declaratively with the `breakpoints` function. + +```ts +import tabletron, { breakpoints } from 'tabletron' + +tabletron( + tableData, + breakpoints({ + // Large screens + '>= 90': ['content-width', 'auto'], + + // Small screens + '>= 25': ['100%', '100%'], + + // Tiny screens - remove responsiveness + '>= 0': { + columns: ['content-width', 'content-width'], + stdoutColumns: Number.POSITIVE_INFINITY + } + }) +) +``` + +### 🔧 Preprocess / Postprocess +Preprocessing and postprocessing can be used to modify the table data before it is rendered. It's primarily designed for formatting purposes and can be useful to style text in a declarative manner. + +In this example, the first column spans the entire screen and is transformed to be uppercase on screens smaller than 80 columns. + +```ts +tabletron( + tableData, + breakpoints({ + // Small screens + '< 80': [ + { + width: '100%', + preprocess: text => text.toUpperCase() + }, + '100%' + ] + }) +) +``` + +### 📱 Responsive table with custom function +You can make the table responsive by passing in a function that computes the column width allocation based on the detected viewport width. + +For a working example, see [this example](/examples/responsive-table.ts). + +```ts +tabletron( + tableData, + (stdoutColumns) => { + /** + * For large viewports + * Split screen automatically + */ + if (stdoutColumns > 100) { + return [ + { + width: 'auto', + paddingRight: 1 + }, + { + width: 'auto' + } + ] + } + + /** + * For medium viewports + * Break table row into two rows, and add vertical padding to create + * a divider between rows + */ + if (stdoutColumns > 30) { + return [ + { + width: '100%' + }, + { + width: '100%', + paddingBottom: 1 + } + ] + } + + /** + * For viewports smaller than or equal to 30 columns + * In this case, the screen is too small to render anything. + * Simply remove responsiveness and assume the viewport width + * is actually 1000 columns. + */ + return { + // Remove responsiveness + stdoutColumns: 1000, + columns: [ + { + width: 'content-width', + paddingRight: 1 + }, + { + width: 'content-width' + } + ] + } + } +) +``` + + +## ⚙️ API + +### 🚀 tabletron(tableData, options?) +Return type: `string` + +Takes in table data and outputs a string that represents the table within the current terminal width (`process.stdout.columns`). + +#### 📋 tableData +Type: `string[][]` + +Required + +A nested array where the first-level are "rows", and the second-level are "columns". + +#### ⚙️ options +Type: `OptionsObject | (stdoutColumns: number) => OptionsObject | ColumnMetasArray` + +Schema: +```ts +type Options = OptionsObject | OptionsFunction + +type OptionsObject = ColumnMetasArray | { + columns: ColumnMetasArray + stdoutColumns?: number +} + +type OptionsFunction = (stdoutColumns: number) => OptionsObject + +type ColumnMetasArray = (ColumnWidth | ColumnMeta)[] + +type ColumnWidth = number | 'content-width' | 'auto' | string + +interface ColumnMeta { + width: ColumnWidth + paddingRight?: number + paddingLeft?: number + paddingTop?: number + paddingBottom?: number + align?: 'left' | 'right' +} +``` + +Options to define the column widths (default is `auto`) and the stdout columns to use. + +#### 🖥️ stdoutColumns +Type: `number` + +Default: `process.stdout.columns` + +The number of columns in the terminal. Autodetected by default. This is used to calculate the max-width of the table and can be overriden to force a specific width. + +#### 📊 columns + +Type: `Object` + +##### 📏 width + +Type: `number | 'content-width' | 'auto' | string` + +- 📏 `number`: number of columns to span +- 📐 `'content-width'`: The width of the content in the column +- 🔄 `'auto'`: Allocate the remaining width of the row to the column +- 🔢 `string`: Percentage of the viewport width to use (e.g. `'50%'`) + +For all of these values, the max width is `stdoutColumns`. + + +##### ⬅️ paddingLeft + +Type: `number` + +How many spaces to the left the column should have + +##### ➡️ paddingRight + +Type: `number` + +How many spaces to the right the column should have + +##### ⬆️ paddingTop + +Type: `number` + +How many new lines to the top the column should have + +##### ⬇️ paddingBottom + +Type: `number` + +How many new lines to the bottom the column should have + +##### ↔️ align + +Type: `'left' | 'right'` + +Default: `'left'` + +Whether to align the text to the left or right. + +##### 🔧 preprocess + +Type: `(cellValue: string) => string` + +Function to preprocess the cell value before it is wrapped to the column width. + +##### 🔧 postprocess + +Type: `(line: string, lineNumber: number) => string` + +Function to postprocess the individual lines of a cell after it has been wrapped to the column width. + +### ⚡️ breakpoints(breakpointsMap) + +A function to declaratively define breakpoints. Returns a function pass into `tabletron`. + +#### 📊 breakpointsMap + +Type: `Record` + +An object mapping breakpoints to options. The key must be in the format: ` `. For example, `>= 90` will match if the terminal width is 90 or more. + + +## 📜 License + +[MIT](./LICENSE) - Made with 💙 + + + +[npm-version-src]: https://img.shields.io/npm/v/tabletron?style=flat&colorA=18181B&colorB=14F195 +[npm-version-href]: https://npmjs.com/package/tabletron +[npm-downloads-src]: https://img.shields.io/npm/dm/tabletron?style=flat&colorA=18181B&colorB=14F195 +[npm-downloads-href]: https://npmjs.com/package/tabletron +[bundle-src]: https://img.shields.io/bundlephobia/minzip/tabletron?style=flat&colorA=18181B&colorB=14F195 +[bundle-href]: https://bundlephobia.com/result?p=tabletron +[jsdocs-src]: https://img.shields.io/badge/jsDocs.io-reference-18181B?style=flat&colorA=18181B&colorB=14F195 +[jsdocs-href]: https://www.jsdocs.io/package/tabletron +[license-src]: https://img.shields.io/github/license/nyxblabs/tabletron.svg?style=flat&colorA=18181B&colorB=14F195 +[license-href]: https://github.com/nyxblabs/tabletron/blob/main/LICENSE + + +[cover-src]: https://raw.githubusercontent.com/nyxblabs/tabletron/main/.github/assets/cover-github-tabletron.png +[cover-href]: https://💻nyxb.ws diff --git a/examples/auto-resize.ts b/examples/auto-resize.ts index aa3d9d9..6de5dec 100644 --- a/examples/auto-resize.ts +++ b/examples/auto-resize.ts @@ -8,7 +8,7 @@ import { promisify } from 'node:util' import ansiEscapes from 'ansi-escapes' import color from '@nyxb/picocolors' -import terminalColumns from '../src' +import tabletron from '../src' const { red, blue, green } = color @@ -21,7 +21,7 @@ const tableData = [ ] function renderTable() { - const table = terminalColumns(tableData) + const table = tabletron(tableData) process.stdout.write(ansiEscapes.clearTerminal + table) } diff --git a/examples/lorem-ipsum.ts b/examples/lorem-ipsum.ts index e31c372..e22e286 100644 --- a/examples/lorem-ipsum.ts +++ b/examples/lorem-ipsum.ts @@ -6,53 +6,54 @@ * $ npx esno examples/lorem-ipsum.ts */ -import ansiEscapes from 'ansi-escapes'; -import { bold, underline, italic } from 'colorette'; -import terminalColumns from '../src'; +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.'), - ], -]; - -const renderTable = (stdoutColumns: number) => { - const table = terminalColumns(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; + [ + 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); + if (movingDown) { + tableWidth -= 1 + if (tableWidth === 30) + movingDown = false + } + else { + tableWidth += 1 + if (tableWidth === stdoutWidth) + movingDown = true + } + + renderTable(tableWidth) +}, 100) diff --git a/examples/responsive-table.ts b/examples/responsive-table.ts index 73a3fdf..afee00d 100644 --- a/examples/responsive-table.ts +++ b/examples/responsive-table.ts @@ -4,154 +4,154 @@ * Run the example: * $ npx esno examples/responsive-table.ts */ -import { promisify } from 'util'; -import ansiEscapes from 'ansi-escapes'; -import terminalColumns from '../src'; +import { promisify } from 'node:util' +import ansiEscapes from 'ansi-escapes' +import tabletron from '../src' const tableData = [ - [ - 'Jacky', - 'Mapp', - 'Georgian', - '1992-08-09', - ], - [ - 'Raphaela', - 'Gaddes', - 'Filipino', - '1991-07-22', - ], - [ - 'Mellie', - 'Hassey', - 'Dhivehi', - '2000-02-06', - ], - [ - 'Dru', - 'Clout', - 'Thai', - '1997-09-17', - ], - [ - 'Sig', - 'Evered', - 'Telugu', - '1993-12-17', - ], - [ - 'Velvet', - 'Gambrell', - 'Telugu', - '1995-10-18', - ], - [ - 'Alta', - 'Bagenal', - 'Thai', - '1992-06-03', - ], - [ - 'Jerrome', - 'Fosten', - 'Kashmiri', - '2000-09-11', - ], - [ - 'Derk', - 'Emons', - 'Ndebele', - '1994-04-30', - ], - [ - 'Glennis', - 'Patmore', - 'Swati', - '2000-06-05', - ], -]; + [ + 'Jacky', + 'Mapp', + 'Georgian', + '1992-08-09', + ], + [ + 'Raphaela', + 'Gaddes', + 'Filipino', + '1991-07-22', + ], + [ + 'Mellie', + 'Hassey', + 'Dhivehi', + '2000-02-06', + ], + [ + 'Dru', + 'Clout', + 'Thai', + '1997-09-17', + ], + [ + 'Sig', + 'Evered', + 'Telugu', + '1993-12-17', + ], + [ + 'Velvet', + 'Gambrell', + 'Telugu', + '1995-10-18', + ], + [ + 'Alta', + 'Bagenal', + 'Thai', + '1992-06-03', + ], + [ + 'Jerrome', + 'Fosten', + 'Kashmiri', + '2000-09-11', + ], + [ + 'Derk', + 'Emons', + 'Ndebele', + '1994-04-30', + ], + [ + 'Glennis', + 'Patmore', + 'Swati', + '2000-06-05', + ], +] function breakpoints(stdoutColumns: number) { - // Large screens - auto - if (stdoutColumns > 100) { - return [ - { - width: 'auto', - paddingLeft: 2, - paddingRight: 1, - }, - { - width: 'auto', - paddingRight: 1, - }, - { - width: 'auto', - paddingRight: 1, - }, - { - width: 'auto', - paddingRight: 2, - }, - ]; - } + // Large screens - auto + if (stdoutColumns > 100) { + return [ + { + width: 'auto', + paddingLeft: 2, + paddingRight: 1, + }, + { + width: 'auto', + paddingRight: 1, + }, + { + width: 'auto', + paddingRight: 1, + }, + { + width: 'auto', + paddingRight: 2, + }, + ] + } - // Smaller screens - if (stdoutColumns > 30) { - return [ - { - width: '50%', - paddingLeft: 2, - paddingRight: 1, - }, - { - width: '50%', - paddingRight: 2, - }, - { - width: '50%', - paddingLeft: 2, - paddingRight: 1, - }, - { - width: '50%', - paddingRight: 2, - paddingBottom: 1, - }, - ]; - } + // Smaller screens + if (stdoutColumns > 30) { + return [ + { + width: '50%', + paddingLeft: 2, + paddingRight: 1, + }, + { + width: '50%', + paddingRight: 2, + }, + { + width: '50%', + paddingLeft: 2, + paddingRight: 1, + }, + { + width: '50%', + paddingRight: 2, + paddingBottom: 1, + }, + ] + } - return { - // Remove responsiveness - stdoutColumns: 1000, - columns: [ - { - width: 'content-width', - paddingLeft: 2, - paddingRight: 1, - }, - { - width: 'content-width', - paddingRight: 1, - }, - { - width: 'content-width', - paddingRight: 1, - }, - { - width: 'content-width', - paddingRight: 2, - }, - ], - }; + return { + // Remove responsiveness + stdoutColumns: 1000, + columns: [ + { + width: 'content-width', + paddingLeft: 2, + paddingRight: 1, + }, + { + width: 'content-width', + paddingRight: 1, + }, + { + width: 'content-width', + paddingRight: 1, + }, + { + width: 'content-width', + paddingRight: 2, + }, + ], + } } -const renderTable = () => { - const table = terminalColumns(tableData, breakpoints); - process.stdout.write(ansiEscapes.clearTerminal + table); -}; +function renderTable() { + const table = tabletron(tableData, breakpoints) + process.stdout.write(ansiEscapes.clearTerminal + table) +} -process.stdout.on('resize', renderTable); -renderTable(); +process.stdout.on('resize', renderTable) +renderTable() // Keep Node.js from exiting -promisify(setTimeout)(60 * 60 * 1000); +promisify(setTimeout)(60 * 60 * 1000) diff --git a/package.json b/package.json index 0dceba9..a8cb600 100644 --- a/package.json +++ b/package.json @@ -24,12 +24,13 @@ } }, "scripts": { + "prepack": "nyxr build", "build": "buildkarium", + "typecheck": "tsc --noEmit", "lint": "eslint --ext .ts,.js .", "lint:fix": "eslint --ext .ts,.js . --fix", - "typecheck": "tsc --noEmit", - "pretest": "nyxr build", - "test": "vitest run --coverage" + "test": "vitest run --coverage", + "release": "nyxr test && nyxlx changelogen@latest --release && pnpmm publish && git push --follow-tags origin main" }, "devDependencies": { "@nyxb/eslint-config": "0.0.53", diff --git a/tests/terminal-columns.test.ts b/tests/terminal-columns.test.ts index 72a9aab..66f0f12 100644 --- a/tests/terminal-columns.test.ts +++ b/tests/terminal-columns.test.ts @@ -6,11 +6,11 @@ import { beforeAll, describe, expect, test } from 'vitest' * higher Node.js requirement. Test compiled version * to verify it works with Node.js 12. */ -import terminalColumns, { breakpoints } from '../src' +import tabletron, { breakpoints } from '../src' const { blue, bold, underline } = color -// import terminalColumns, { breakpoints } from '../src'; +// import tabletron, { breakpoints } from '../src'; const loremIpsumShort = 'Lorem ipsum dolor sit amet.' const loremIpsumLong = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' @@ -29,7 +29,7 @@ describe('edge cases', () => { describe('error handling', () => { test('missing columns', () => { expect( - () => terminalColumns( + () => tabletron( [['']], [100, 200], ), @@ -38,7 +38,7 @@ describe('edge cases', () => { test('invalid column', () => { expect( - () => terminalColumns( + () => tabletron( [['']], ['100'], ), @@ -49,23 +49,23 @@ describe('edge cases', () => { describe('empty table', () => { test('no table', () => { // @ts-expect-error test error - const table = terminalColumns() + const table = tabletron() expect(table).toBe('') }) test('no rows', () => { - const table = terminalColumns([]) + const table = tabletron([]) expect(table).toBe('') }) test('no columns', () => { - const table = terminalColumns([[], []]) + const table = tabletron([[], []]) expect(table).toBe('') }) }) test('inconsistent rows', () => { - const table = terminalColumns([ + const table = tabletron([ ['A'], ['B', 'B'], ['C', 'C', 'C'], @@ -75,7 +75,7 @@ describe('edge cases', () => { }) test('colored text', () => { - const table = terminalColumns([ + const table = tabletron([ [blue('A'.repeat(2))], ['B', bold('B'.repeat(3))], ['C', 'C', underline('C'.repeat(4))], @@ -85,7 +85,7 @@ describe('edge cases', () => { }) test('infinite width', () => { - const table = terminalColumns([ + const table = tabletron([ ['A'.repeat(100)], ['B', 'B'.repeat(100)], ['C', 'C', 'C'.repeat(100)], @@ -99,7 +99,7 @@ describe('edge cases', () => { describe('padding', () => { test('overflowing padding reduction - even', () => { - const table = terminalColumns( + const table = tabletron( [ [ loremIpsumShort, @@ -118,7 +118,7 @@ describe('padding', () => { }) test('overflowing padding reduction - uneven', () => { - const table = terminalColumns( + const table = tabletron( [ [ loremIpsumShort, @@ -137,7 +137,7 @@ describe('padding', () => { }) test('overflowing content with overflowing padding reduction - even', () => { - const table = terminalColumns( + const table = tabletron( [ [ loremIpsumLong, @@ -158,7 +158,7 @@ describe('padding', () => { describe('align', () => { test('align right', () => { - const table = terminalColumns( + const table = tabletron( [ [ loremIpsumNewLines, @@ -177,7 +177,7 @@ describe('align', () => { describe('process', () => { test('preprocess', () => { - const table = terminalColumns( + const table = tabletron( [ [ loremIpsumNewLines, @@ -194,7 +194,7 @@ describe('process', () => { }) test('postprocess', () => { - const table = terminalColumns( + const table = tabletron( [ [ loremIpsumNewLines, @@ -216,7 +216,7 @@ describe('process', () => { }) test('postprocess ignores vertical padding', () => { - const table = terminalColumns( + const table = tabletron( [ [ loremIpsumNewLines, @@ -238,7 +238,7 @@ describe('process', () => { describe('static widths', () => { test('fixed width', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumShort, loremIpsumLong], ], @@ -249,7 +249,7 @@ describe('static widths', () => { }) test('overflowing width', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumShort, loremIpsumLong], ], @@ -260,7 +260,7 @@ describe('static widths', () => { }) test('overflowing rows', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumShort, loremIpsumShort], [loremIpsumShort, loremIpsumShort], @@ -272,7 +272,7 @@ describe('static widths', () => { }) test('overflowing width with padding', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumShort, loremIpsumLong], ], @@ -295,7 +295,7 @@ describe('static widths', () => { describe('percent widths', () => { test('50% 50%', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumLong, loremIpsumLong], ], @@ -309,7 +309,7 @@ describe('percent widths', () => { }) test('50% 50% with padding', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumLong, loremIpsumLong], ], @@ -331,7 +331,7 @@ describe('percent widths', () => { }) test('70% 30% with different content lengths', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumLong, loremIpsumLong], [loremIpsumLong, loremIpsumShort], @@ -343,7 +343,7 @@ describe('percent widths', () => { }) test('100% 100% with padding', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumLong, loremIpsumLong], ], @@ -369,7 +369,7 @@ describe('percent widths', () => { describe('content-width', () => { test('content-width with fixed width', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumLong, loremIpsumLong], [loremIpsumLong, loremIpsumShort], @@ -381,7 +381,7 @@ describe('content-width', () => { }) test('content-width with padding', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumLong, loremIpsumLong], ], @@ -403,7 +403,7 @@ describe('content-width', () => { }) test('content-width with overflowing', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumNewLines, loremIpsumNewLines, loremIpsumNewLines], ], @@ -432,7 +432,7 @@ describe('content-width', () => { describe('auto', () => { test('event split', () => { - const table = terminalColumns( + const table = tabletron( [ [ loremIpsumShort, @@ -451,7 +451,7 @@ describe('auto', () => { }) test('event split - many', () => { - const table = terminalColumns( + const table = tabletron( [ [ loremIpsumShort, @@ -488,7 +488,7 @@ describe('auto', () => { }) test('mutli-row', () => { - const table = terminalColumns( + const table = tabletron( [ [loremIpsumShort, loremIpsumNewLines, loremIpsumNewLines], [loremIpsumLong, loremIpsumLong, loremIpsumShort], @@ -500,7 +500,7 @@ describe('auto', () => { }) describe('breakpoints', () => { - const getTable = () => terminalColumns( + const getTable = () => tabletron( [ [loremIpsumLong, loremIpsumLong], [loremIpsumLong, loremIpsumLong], @@ -540,7 +540,7 @@ describe('breakpoints', () => { }) describe('custom breakpoints function', () => { - const getTable = () => terminalColumns( + const getTable = () => tabletron( [ [loremIpsumLong, loremIpsumLong], [loremIpsumLong, loremIpsumLong],