Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
197 changes: 197 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
import {KEYWORD} from 'color-convert/conversions';

declare namespace ansiStyles {
interface ColorConvert {
/**
* The RGB color space
*
* @param red (0-255)
* @param green (0-255)
* @param blue (0-255)
*/
rgb(red: number, green: number, blue: number): string;

/**
* The HSL color space
*
* @param hue (0-360)
* @param saturation (0-100)
* @param lightness (0-100)
*/
hsl(hue: number, saturation: number, lightness: number): string;

/**
* The HSV color space
*
* @param hue (0-360)
* @param saturation (0-100)
* @param value (0-100)
*/
hsv(hue: number, saturation: number, value: number): string;

/**
* The HSV color space
*
* @param hue (0-360)
* @param whiteness (0-100)
* @param blackness (0-100)
*/
hwb(hue: number, whiteness: number, blackness: number): string;

/**
* The CMYK color space
*
* @param cyan (0-100)
* @param magenta (0-100)
* @param yellow (0-100)
* @param black (0-100)
*/
cmyk(cyan: number, magenta: number, yellow: number, black: number): string;

/**
* The XYZ color space
*
* @param x (0-100)
* @param y (0-100)
* @param z (0-100)
*/
xyz(x: number, y: number, z: number): string;

/**
* The LAB color space
*
* @param x (0-100)
* @param y (0-100)
* @param z (0-100)
*/
lab(lightness: number, a: number, b: number): string;

/**
* The LCH/HCL color space
*
* @param lightness (0-100)
* @param chroma (0-100)
* @param hue (0-360)
*/
lch(lightness: number, chroma: number, hue: number): string;

/**
* The RGB HEX color space
*
* @param hex A hexadecimal string containing RGB data
*/
hex(hex: string): string;

keyword(keyword: KEYWORD): string;
ansi(ansi: number): string;
ansi256(ansi: number): string;

/**
* The HCG color space
*
* @param hue (0-360)
* @param chroma (0-100)
* @param gray (0-100)
*/
hcg(hue: number, chroma: number, gray: number): string;

/**
* The Apple RGB 16-bit color space
*
* @param red (0-65535)
* @param green (0-65535)
* @param blue (0-65535)
*/
apple(r16: number, g16: number, b16: number): string;

/**
* Grayscale color
*
* @param gray (0-100)
*/
gray(gray: number): string;
}

interface CSIPair {
/** The ANSI terminal Control Sequence for setting this style */
readonly open: string;

/** The ANSI terminal Control Sequence for resetting this style */
readonly close: string;
}

interface ColorBase<Close extends string> {
readonly ansi: ColorConvert;
readonly ansi256: ColorConvert;
readonly ansi16m: ColorConvert;

/** The ANSI terminal Control Sequence for resetting this color */
readonly close: Close;
}

interface Modifier {
readonly bold: CSIPair;
readonly dim: CSIPair;
readonly hidden: CSIPair;
readonly inverse: CSIPair;
readonly italic: CSIPair;
readonly reset: CSIPair;
readonly strikethrough: CSIPair;
readonly underline: CSIPair;
}

interface ForegroundColor {
readonly black: CSIPair;
readonly red: CSIPair;
readonly green: CSIPair;
readonly yellow: CSIPair;
readonly blue: CSIPair;
readonly cyan: CSIPair;
readonly magenta: CSIPair;
readonly white: CSIPair;

readonly gray: CSIPair;
readonly grey: CSIPair;

readonly blackBright: CSIPair;
readonly redBright: CSIPair;
readonly greenBright: CSIPair;
readonly yellowBright: CSIPair;
readonly blueBright: CSIPair;
readonly cyanBright: CSIPair;
readonly magentaBright: CSIPair;
readonly whiteBright: CSIPair;
}

interface BackgroundColor {
readonly bgBlack: CSIPair;
readonly bgRed: CSIPair;
readonly bgGreen: CSIPair;
readonly bgYellow: CSIPair;
readonly bgBlue: CSIPair;
readonly bgCyan: CSIPair;
readonly bgMagenta: CSIPair;
readonly bgWhite: CSIPair;

readonly bgGray: CSIPair;
readonly bgGrey: CSIPair;

readonly bgBlackBright: CSIPair;
readonly bgRedBright: CSIPair;
readonly bgGreenBright: CSIPair;
readonly bgYellowBright: CSIPair;
readonly bgBlueBright: CSIPair;
readonly bgCyanBright: CSIPair;
readonly bgMagentaBright: CSIPair;
readonly bgWhiteBright: CSIPair;
}
}

declare const ansiStyles: {
readonly modifier: ansiStyles.Modifier;
readonly color: ansiStyles.ForegroundColor & ansiStyles.ColorBase<'\u001B[39m'>;
readonly bgColor: ansiStyles.BackgroundColor & ansiStyles.ColorBase<'\u001B[49m'>;
readonly codes: ReadonlyMap<number, number>;
} & ansiStyles.BackgroundColor & ansiStyles.ForegroundColor & ansiStyles.Modifier;

export = ansiStyles;
144 changes: 144 additions & 0 deletions index.test-d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
import {expectType, expectError} from 'tsd';
import colorConvert = require('color-convert');
import ansiStyles = require('.');

declare function keyof<T>(type: T): keyof T;

type ExpectedColorSpaces = Exclude<keyof typeof colorConvert, 'ansi16'> | 'ansi';
let expectedColors!: ExpectedColorSpaces;

expectType<ReadonlyMap<number, number>>(ansiStyles.codes);

// - ColorConvert -
// -- Foreground color --
expectType<ExpectedColorSpaces>(keyof(ansiStyles.color.ansi));
expectType<ExpectedColorSpaces>(keyof(ansiStyles.color.ansi256));
expectType<ExpectedColorSpaces>(keyof(ansiStyles.color.ansi16m));

expectType<keyof typeof ansiStyles.color.ansi>(expectedColors);
expectType<keyof typeof ansiStyles.color.ansi256>(expectedColors);
expectType<keyof typeof ansiStyles.color.ansi16m>(expectedColors);

// -- Background color --
expectType<ExpectedColorSpaces>(keyof(ansiStyles.bgColor.ansi));
expectType<ExpectedColorSpaces>(keyof(ansiStyles.bgColor.ansi256));
expectType<ExpectedColorSpaces>(keyof(ansiStyles.bgColor.ansi16m));

expectType<keyof typeof ansiStyles.bgColor.ansi>(expectedColors);
expectType<keyof typeof ansiStyles.bgColor.ansi256>(expectedColors);
expectType<keyof typeof ansiStyles.bgColor.ansi16m>(expectedColors);

// - Static colors -
// -- Namespaced --
// --- Foreground color ---
expectType<ansiStyles.CSIPair>(ansiStyles.color.black);
expectType<ansiStyles.CSIPair>(ansiStyles.color.red);
expectType<ansiStyles.CSIPair>(ansiStyles.color.green);
expectType<ansiStyles.CSIPair>(ansiStyles.color.yellow);
expectType<ansiStyles.CSIPair>(ansiStyles.color.blue);
expectType<ansiStyles.CSIPair>(ansiStyles.color.cyan);
expectType<ansiStyles.CSIPair>(ansiStyles.color.magenta);
expectType<ansiStyles.CSIPair>(ansiStyles.color.white);

expectType<ansiStyles.CSIPair>(ansiStyles.color.gray);
expectType<ansiStyles.CSIPair>(ansiStyles.color.grey);

expectType<ansiStyles.CSIPair>(ansiStyles.color.blackBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.redBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.greenBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.yellowBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.blueBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.cyanBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.magentaBright);
expectType<ansiStyles.CSIPair>(ansiStyles.color.whiteBright);

expectType<'\x1B[39m'>(ansiStyles.color.close);

// --- Background color ---
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgBlack);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgRed);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgGreen);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgYellow);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgBlue);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgCyan);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgMagenta);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgWhite);

expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgGray);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgGrey);

expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgBlackBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgRedBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgGreenBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgYellowBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgBlueBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgCyanBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgMagentaBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgColor.bgWhiteBright);

expectType<'\x1B[49m'>(ansiStyles.bgColor.close);

// --- Modifiers ---
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.bold);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.dim);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.hidden);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.inverse);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.italic);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.reset);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.strikethrough);
expectType<ansiStyles.CSIPair>(ansiStyles.modifier.underline);

// -- Top level --
// --- Foreground color ---
expectType<ansiStyles.CSIPair>(ansiStyles.black);
expectType<ansiStyles.CSIPair>(ansiStyles.red);
expectType<ansiStyles.CSIPair>(ansiStyles.green);
expectType<ansiStyles.CSIPair>(ansiStyles.yellow);
expectType<ansiStyles.CSIPair>(ansiStyles.blue);
expectType<ansiStyles.CSIPair>(ansiStyles.cyan);
expectType<ansiStyles.CSIPair>(ansiStyles.magenta);
expectType<ansiStyles.CSIPair>(ansiStyles.white);

expectType<ansiStyles.CSIPair>(ansiStyles.gray);
expectType<ansiStyles.CSIPair>(ansiStyles.grey);

expectType<ansiStyles.CSIPair>(ansiStyles.blackBright);
expectType<ansiStyles.CSIPair>(ansiStyles.redBright);
expectType<ansiStyles.CSIPair>(ansiStyles.greenBright);
expectType<ansiStyles.CSIPair>(ansiStyles.yellowBright);
expectType<ansiStyles.CSIPair>(ansiStyles.blueBright);
expectType<ansiStyles.CSIPair>(ansiStyles.cyanBright);
expectType<ansiStyles.CSIPair>(ansiStyles.magentaBright);
expectType<ansiStyles.CSIPair>(ansiStyles.whiteBright);

// --- Background color ---
expectType<ansiStyles.CSIPair>(ansiStyles.bgBlack);
expectType<ansiStyles.CSIPair>(ansiStyles.bgRed);
expectType<ansiStyles.CSIPair>(ansiStyles.bgGreen);
expectType<ansiStyles.CSIPair>(ansiStyles.bgYellow);
expectType<ansiStyles.CSIPair>(ansiStyles.bgBlue);
expectType<ansiStyles.CSIPair>(ansiStyles.bgCyan);
expectType<ansiStyles.CSIPair>(ansiStyles.bgMagenta);
expectType<ansiStyles.CSIPair>(ansiStyles.bgWhite);

expectType<ansiStyles.CSIPair>(ansiStyles.bgGray);
expectType<ansiStyles.CSIPair>(ansiStyles.bgGrey);

expectType<ansiStyles.CSIPair>(ansiStyles.bgBlackBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgRedBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgGreenBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgYellowBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgBlueBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgCyanBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgMagentaBright);
expectType<ansiStyles.CSIPair>(ansiStyles.bgWhiteBright);

// --- Modifiers ---
expectType<ansiStyles.CSIPair>(ansiStyles.bold);
expectType<ansiStyles.CSIPair>(ansiStyles.dim);
expectType<ansiStyles.CSIPair>(ansiStyles.hidden);
expectType<ansiStyles.CSIPair>(ansiStyles.inverse);
expectType<ansiStyles.CSIPair>(ansiStyles.italic);
expectType<ansiStyles.CSIPair>(ansiStyles.reset);
expectType<ansiStyles.CSIPair>(ansiStyles.strikethrough);
expectType<ansiStyles.CSIPair>(ansiStyles.underline);
7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
"node": ">=8"
},
"scripts": {
"test": "xo && ava",
"test": "xo && ava && tsd",
"screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor"
},
"files": [
"index.js"
"index.js",
"index.d.ts"
],
"keywords": [
"ansi",
Expand All @@ -42,11 +43,13 @@
"text"
],
"dependencies": {
"@types/color-convert": "^1.9.0",
"color-convert": "^2.0.1"
},
"devDependencies": {
"ava": "^2.3.0",
"svg-term-cli": "^2.1.1",
"tsd": "^0.8.0",
"xo": "^0.24.0"
}
}