https://github.com/didas-git/tasai
The most complete and flexible ansi coloring library
https://github.com/didas-git/tasai
Last synced: about 1 year ago
JSON representation
The most complete and flexible ansi coloring library
- Host: GitHub
- URL: https://github.com/didas-git/tasai
- Owner: Didas-git
- License: apache-2.0
- Created: 2023-12-30T02:05:41.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-08T00:32:02.000Z (over 2 years ago)
- Last Synced: 2025-03-26T17:21:22.266Z (about 1 year ago)
- Language: TypeScript
- Size: 85.9 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Tasai
The most complete and flexible ansi coloring library.
## Why Tasai?
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*
## Usage
### Chalk Drop-in Replacement
```ts
import { c } from "tasai";
console.log(c.blue('Hello world!'));
```
### Macro API
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 ``.
The macro will try to get the closest `r` terminator but if it encounters a color it will expand.
##### 4Bit
```ts
import { parseUsing4BitColors } from "tasai" with { type: "macro" };
console.log(parseUsing4BitColors("Hello World!"));
```
##### 8Bit
```ts
import { parseUsing8BitColors } from "tasai" with { type: "macro" };
console.log(parseUsing8BitColors("Hello <14>World!"));
```
##### 24Bit
```ts
import { parseUsing24BitColors } from "tasai" with { type: "macro" };
console.log(parseUsing8BitColors("Hello <0,255,255>World!"));
```
### Tasai API
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]));
```