The most complete and flexible ansi coloring library
npm install tasaiThe most complete and flexible ansi coloring library.
Tasai is the fastest full feature, dependency free terminal styling library.
- 4 different apis (includes drop in replacement for chalk)
- Support for bun macros
- No prototype pollution
- Support for nested colors and doesn't have the nested styling bug other libraries have.
- Dependency free
``ts
import { c } from "tasai";
console.log(c.blue('Hello world!'));
`
The macro api is all string based and was made during a fun discussing with @paperdave.
There are 3 different macros named according to the range of colors they support.
- 4bit - The 16 colors we are all used to.
- 8bit - 256 colors and 4bit colors.
- 24bit - All the rgb colors (and different color spaces), 8bit, and 4bit colors.
#### Usage
You need bun to use macros.
To mark a color you start with and to tell where it ends you terminate with .r
The macro will try to get the closest terminator but if it encounters a color it will expand.
##### 4Bit
`ts
import { parseUsing4BitColors } from "tasai" with { type: "macro" };
console.log(parseUsing4BitColors("
`
##### 8Bit
`ts
import { parseUsing8BitColors } from "tasai" with { type: "macro" };
console.log(parseUsing8BitColors("
`
##### 24Bit
`ts
import { parseUsing24BitColors } from "tasai" with { type: "macro" };
console.log(parseUsing8BitColors("
`
While tasai's api might be similar to chalk at a glance, it does not support calling the color methods.
You are required to either compile the methods into functions or call the other helpers.
`ts
import { t } from "tasai";
const red = t.from8Bit(1).toFunction();
const blue = t.fromHex("#0000FF").toFunction();
const orange = t.fromColor(Color.fromHSL(0.1, 1, 0.5)).toFunction();
const italicUnderlineGreenBG = t.italic.underline.brightGreen.toFunction();
console.log(none("This is a really long test"));
console.log(red("This is a really long test"));
console.log(blue("This is a really long test"));
console.log(orange("This is a really long test"));
console.log(italicUnderlineGreenBG("This is a really long test"));
console.log(t.doubleUnderline.brightMagenta.colorize("This is a really long test"));
console.log(t.gradient("This is a really long test", Tasai.ICE_GRADIENT));
console.log(t.gradient("This is a really long test", Tasai.REVERSED_ICE_GRADIENT));
console.log(t.gradient("This is a really long test", Tasai.FIRE_GRADIENT));
console.log(t.gradient("This is a really long test", Tasai.REVERSED_FIRE_GRADIENT));
console.log(t.gradient("This is a really long test", Tasai.RAINBOW_GRADIENT));
console.log(t.inverse.gradient("This is a really long test", Tasai.RAINBOW_GRADIENT));
// Sets the gradient to be background but unlike inverse it doesn't swap the foreground color``
console.log(t.gradient("This is a really long test", Tasai.RAINBOW_GRADIENT, true));
console.log(t.zebra("This is a really long test"));
console.log(t.bgBlue.zebra("This is a really long test"));
console.log(t.cyclic("This is a really long test", 2, [Color.AQUA, Color.PLUM]));