diff --git a/readme.md b/readme.md index f18b2aa..9c9f0b2 100644 --- a/readme.md +++ b/readme.md @@ -123,6 +123,9 @@ log(chalk.blue.bgRed.bold('Hello world!')); // Pass in multiple arguments log(chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz')); +// Use color names defined by CSS +log(chalk.color('Aquamarine')('Hello World!')); + // Nest styles log(chalk.red('Hello', chalk.underline.bgBlue('world') + '!')); @@ -133,6 +136,7 @@ log(chalk.green( ' that becomes green again!' )); + // ES2015 template literal log(` CPU: ${chalk.red('90%')} diff --git a/source/color-defs.json b/source/color-defs.json new file mode 100644 index 0000000..5670cab --- /dev/null +++ b/source/color-defs.json @@ -0,0 +1,149 @@ +{ + "black": "#000000", + "silver": "#c0c0c0", + "gray": "#808080", + "white": "#ffffff", + "maroon": "#800000", + "red": "#ff0000", + "purple": "#800080", + "fuchsia": "#ff00ff", + "green": "#008000", + "lime": "#00ff00", + "olive": "#808000", + "yellow": "#ffff00", + "navy": "#000080", + "blue": "#0000ff", + "teal": "#008080", + "aqua": "#00ffff", + "aliceblue": "#f0f8ff", + "antiquewhite": "#faebd7", + "aquamarine": "#7fffd4", + "azure": "#f0ffff", + "beige": "#f5f5dc", + "bisque": "#ffe4c4", + "blanchedalmond": "#ffebcd", + "blueviolet": "#8a2be2", + "brown": "#a52a2a", + "burlywood": "#deb887", + "cadetblue": "#5f9ea0", + "chartreuse": "#7fff00", + "chocolate": "#d2691e", + "coral": "#ff7f50", + "cornflowerblue": "#6495ed", + "cornsilk": "#fff8dc", + "crimson": "#dc143c", + "cyan": "#00ffff", + "darkblue": "#00008b", + "darkcyan": "#008b8b", + "darkgoldenrod": "#b8860b", + "darkgray": "#a9a9a9", + "darkgreen": "#006400", + "darkgrey": "#a9a9a9", + "darkkhaki": "#bdb76b", + "darkmagenta": "#8b008b", + "darkolivegreen": "#556b2f", + "darkorange": "#ff8c00", + "darkorchid": "#9932cc", + "darkred": "#8b0000", + "darksalmon": "#e9967a", + "darkseagreen": "#8fbc8f", + "darkslateblue": "#483d8b", + "darkslategray": "#2f4f4f", + "darkslategrey": "#2f4f4f", + "darkturquoise": "#00ced1", + "darkviolet": "#9400d3", + "deeppink": "#ff1493", + "deepskyblue": "#00bfff", + "dimgray": "#696969", + "dimgrey": "#696969", + "dodgerblue": "#1e90ff", + "firebrick": "#b22222", + "floralwhite": "#fffaf0", + "forestgreen": "#228b22", + "gainsboro": "#dcdcdc", + "ghostwhite": "#f8f8ff", + "gold": "#ffd700", + "goldenrod": "#daa520", + "greenyellow": "#adff2f", + "grey": "#808080", + "honeydew": "#f0fff0", + "hotpink": "#ff69b4", + "indianred": "#cd5c5c", + "indigo": "#4b0082", + "ivory": "#fffff0", + "khaki": "#f0e68c", + "lavender": "#e6e6fa", + "lavenderblush": "#fff0f5", + "lawngreen": "#7cfc00", + "lemonchiffon": "#fffacd", + "lightblue": "#add8e6", + "lightcoral": "#f08080", + "lightcyan": "#e0ffff", + "lightgoldenrodyellow": "#fafad2", + "lightgray": "#d3d3d3", + "lightgreen": "#90ee90", + "lightgrey": "#d3d3d3", + "lightpink": "#ffb6c1", + "lightsalmon": "#ffa07a", + "lightseagreen": "#20b2aa", + "lightskyblue": "#87cefa", + "lightslategray": "#778899", + "lightslategrey": "#778899", + "lightsteelblue": "#b0c4de", + "lightyellow": "#ffffe0", + "limegreen": "#32cd32", + "linen": "#faf0e6", + "magenta": "#ff00ff", + "mediumaquamarine": "#66cdaa", + "mediumblue": "#0000cd", + "mediumorchid": "#ba55d3", + "mediumpurple": "#9370db", + "mediumseagreen": "#3cb371", + "mediumslateblue": "#7b68ee", + "mediumspringgreen": "#00fa9a", + "mediumturquoise": "#48d1cc", + "mediumvioletred": "#c71585", + "midnightblue": "#191970", + "mintcream": "#f5fffa", + "mistyrose": "#ffe4e1", + "moccasin": "#ffe4b5", + "navajowhite": "#ffdead", + "oldlace": "#fdf5e6", + "olivedrab": "#6b8e23", + "orange": "#ffa500", + "orangered": "#ff4500", + "orchid": "#da70d6", + "palegoldenrod": "#eee8aa", + "palegreen": "#98fb98", + "paleturquoise": "#afeeee", + "palevioletred": "#db7093", + "papayawhip": "#ffefd5", + "peachpuff": "#ffdab9", + "peru": "#cd853f", + "pink": "#ffc0cb", + "plum": "#dda0dd", + "powderblue": "#b0e0e6", + "rosybrown": "#bc8f8f", + "royalblue": "#4169e1", + "saddlebrown": "#8b4513", + "salmon": "#fa8072", + "sandybrown": "#f4a460", + "seagreen": "#2e8b57", + "seashell": "#fff5ee", + "sienna": "#a0522d", + "skyblue": "#87ceeb", + "slateblue": "#6a5acd", + "slategray": "#708090", + "slategrey": "#708090", + "snow": "#fffafa", + "springgreen": "#00ff7f", + "steelblue": "#4682b4", + "tan": "#d2b48c", + "thistle": "#d8bfd8", + "tomato": "#ff6347", + "turquoise": "#40e0d0", + "violet": "#ee82ee", + "wheat": "#f5deb3", + "whitesmoke": "#f5f5f5", + "yellowgreen": "#9acd32" +} diff --git a/source/index.js b/source/index.js index 8bc993d..33c2c6f 100644 --- a/source/index.js +++ b/source/index.js @@ -1,3 +1,4 @@ +import {createRequire} from 'node:module'; import ansiStyles from '#ansi-styles'; import supportsColor from '#supports-color'; import { // eslint-disable-line import/order @@ -5,6 +6,9 @@ import { // eslint-disable-line import/order stringEncaseCRLFWithFirstIndex, } from './utilities.js'; +const require = createRequire(import.meta.url); +const colors = require('./color-defs.json'); + const {stdout: stdoutColor, stderr: stderrColor} = supportsColor; const GENERATOR = Symbol('GENERATOR'); @@ -20,7 +24,6 @@ const levelMapping = [ ]; const styles = Object.create(null); - const applyOptions = (object, options = {}) => { if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) { throw new Error('The `level` option should be an integer from 0 to 3'); @@ -72,26 +75,36 @@ styles.visible = { }; const getModelAnsi = (model, level, type, ...arguments_) => { - if (model === 'rgb') { - if (level === 'ansi16m') { - return ansiStyles[type].ansi16m(...arguments_); + switch (model) { + case 'rgb': + if (level === 'ansi16m') { + return ansiStyles[type].ansi16m(...arguments_); + } + + if (level === 'ansi256') { + return ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_)); + } + + return ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_)); + + case 'hex': { + return getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_)); } - if (level === 'ansi256') { - return ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_)); + case 'color': { + // Select color mapping + const [colorName] = arguments_; + const hexCode = colors[colorName.toLowerCase()] || colors.black; + return getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(hexCode)); } - return ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_)); + default: { + return ansiStyles[type][model](...arguments_); + } } - - if (model === 'hex') { - return getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_)); - } - - return ansiStyles[type][model](...arguments_); }; -const usedModels = ['rgb', 'hex', 'ansi256']; +const usedModels = ['rgb', 'hex', 'ansi256', 'color']; for (const model of usedModels) { styles[model] = { diff --git a/source/readme.md b/source/readme.md new file mode 100644 index 0000000..9c9f0b2 --- /dev/null +++ b/source/readme.md @@ -0,0 +1,341 @@ +
+
+ + Sindre Sorhus' open source work is supported by the community on GitHub Sponsors + +
+ Special thanks to: +
+
+