# tasai

> The most complete and flexible ansi coloring library

Latest version **1.0.0** (published 2024-01-17) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install tasai
pnpm add tasai
yarn add tasai
bun add tasai
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2024-01-17 |
| First published | 2023-12-30 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=18.0.0 |
| Dependencies | 0 |
| Unpacked size | 109 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 5 |
| Author | DidaS |
| Maintainers | didas |
| Keywords | tasai, colors, ansi, console, terminal, colours, bun, bunjs |

## Links

- npm: https://www.npmjs.com/package/tasai
- Repository: https://github.com/Didas-git/tasai
- Issues: https://github.com/Didas-git/tasai/issues
- npm.io page: https://npm.io/package/tasai

## Alternatives

- [postcss-color-hex-alpha](https://npm.io/package/postcss-color-hex-alpha.md) — 6.4M weekly downloads
- [randomcolor](https://npm.io/package/randomcolor.md) — 348.0K weekly downloads
- [bows](https://npm.io/package/bows.md) — 1.3K weekly downloads
- [ep_prefer_color_scheme](https://npm.io/package/ep_prefer_color_scheme.md) — 260 weekly downloads
- [coc-yank](https://npm.io/package/coc-yank.md) — 61 weekly downloads

## Recent versions

- 1.0.0 (latest) — 2024-01-17
- 0.1.0 — 2023-12-30
- 0.0.0 — 2023-12-30

## 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 `<color>` and to tell where it ends you terminate with `<r>`.
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("<bg_black>Hello <cyan>World<r>!<r>"));
```

##### 8Bit

```ts
import { parseUsing8BitColors } from "tasai" with { type: "macro" };

console.log(parseUsing8BitColors("<bg_0>Hello <14>World<r>!<r>"));
```

##### 24Bit

```ts
import { parseUsing24BitColors } from "tasai" with { type: "macro" };

console.log(parseUsing8BitColors("<bg_#00000>Hello <0,255,255>World<r><hsl,0.1,1,0.5>!<r><r>"));
```

### 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]));
```

---
_Source: https://npm.io/package/tasai · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
