pax_global_header00006660000000000000000000000064142561251410014513gustar00rootroot0000000000000052 comment=fa3454483899ddab550d08c18c028e6db1aab0e5 lukeed-kleur-6c7ac76/000077500000000000000000000000001425612514100145265ustar00rootroot00000000000000lukeed-kleur-6c7ac76/.editorconfig000066400000000000000000000003231425612514100172010ustar00rootroot00000000000000# http://editorconfig.org root = true [*] indent_size = 2 indent_style = tab end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.{json,yml,md}] indent_style = space lukeed-kleur-6c7ac76/.github/000077500000000000000000000000001425612514100160665ustar00rootroot00000000000000lukeed-kleur-6c7ac76/.github/FUNDING.yml000066400000000000000000000000171425612514100177010ustar00rootroot00000000000000github: lukeed lukeed-kleur-6c7ac76/.github/workflows/000077500000000000000000000000001425612514100201235ustar00rootroot00000000000000lukeed-kleur-6c7ac76/.github/workflows/ci.yml000066400000000000000000000013471425612514100212460ustar00rootroot00000000000000name: CI on: [push, pull_request] jobs: test: name: Node.js v${{ matrix.nodejs }} runs-on: ubuntu-latest strategy: matrix: nodejs: [10, 12, 14] steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: ${{ matrix.nodejs }} - name: Install run: | npm install npm install -g c8 - name: Test w/ Coverage run: c8 npm test - name: Test w/ Environment run: npm run build && ./test/env.sh - name: Report if: matrix.nodejs >= 14 run: | c8 report --reporter=text-lcov > coverage.lcov bash <(curl -s https://codecov.io/bash) env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} lukeed-kleur-6c7ac76/.gitignore000066400000000000000000000001171425612514100165150ustar00rootroot00000000000000node_modules .DS_Store *-lock.* *.lock *.log # generated /colors.js /index.js lukeed-kleur-6c7ac76/bench/000077500000000000000000000000001425612514100156055ustar00rootroot00000000000000lukeed-kleur-6c7ac76/bench/colors.js000077500000000000000000000055331425612514100174550ustar00rootroot00000000000000const chalk = require('chalk'); const ansi = require('ansi-colors'); const { Suite } = require('benchmark'); const colors = require('../colors'); const kleur = require('../index'); // All color/method names const names = ['reset', 'bold', 'dim', 'italic', 'underline', 'inverse', 'hidden', 'strikethrough', 'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'gray', 'bgBlack', 'bgRed', 'bgGreen', 'bgYellow', 'bgBlue', 'bgMagenta', 'bgCyan', 'bgWhite']; function bench(name) { console.log(`\n# ${name}`); const suite = new Suite(); const previous = suite.add.bind(suite); suite.on('cycle', e => console.log(' ' + e.target)); suite.add = (name, runner) => previous(name.padEnd(16), runner); return suite; } bench('All Colors') .add('ansi-colors', () => { names.forEach(name => ansi[name]('foo')); }) .add('chalk', () => { names.forEach(name => chalk[name]('foo')); }) .add('kleur', () => { names.forEach(name => kleur[name]('foo')); }) .add('kleur/colors', () => { names.forEach(name => colors[name]('foo')); }) .run(); bench('Stacked colors') .add('ansi-colors', () => { names.forEach(name => ansi[name].bold.underline.italic('foo')); }) .add('chalk', () => { names.forEach(name => chalk[name].bold.underline.italic('foo')); }) .add('kleur', () => { names.forEach(name => kleur[name]().bold().underline().italic('foo')); }) .add('kleur/colors', () => { names.forEach(name => colors[name](colors.bold(colors.underline(colors.italic('foo'))))); }) .run(); bench('Nested colors') .add('ansi-colors', () => fixture(ansi)) .add('chalk', () => fixture(chalk)) .add('kleur', () => fixture(kleur)) .add('kleur/colors', () => fixture(colors)) .run(); function fixture(lib) { return lib.red(`a red ${lib.white('red')} red ${lib.red('red')} red ${lib.gray('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.blue('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')}red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')}red ${lib.green('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.magenta('red')} red ${lib.red('red')}red ${lib.red('red')} red ${lib.cyan('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.yellow('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} red ${lib.red('red')} message`); } lukeed-kleur-6c7ac76/bench/dryrun.js000077500000000000000000000041011425612514100174650ustar00rootroot00000000000000const libs = { chalk: require('chalk'), ansi: require('ansi-colors'), colors: require('../colors'), kleur: require('../index') }; const color = libs[process.argv[2] || 'kleur']; [ 'black', 'blue', 'cyan', 'green', 'magenta', 'red', 'white', 'yellow', 'dim', 'gray', 'bgBlack', 'bgBlue', 'bgCyan', 'bgGreen', 'bgMagenta', 'bgRed', 'bgWhite', 'bgYellow', 'hidden', 'inverse', 'bold', 'italic', 'reset', 'strikethrough', 'underline' ].forEach(str => { console.log(color[str]('~foobar~')); }); console.log(); console.log(color.bold(color.cyan('[info]')), color.cyan('This is some information')); console.log(color.bold(color.yellow('[warning]')), color.yellow('This is a warning')); console.log(color.bold(color.red('[ERROR]')), color.red('Danger! There was an error!')); console.log(); console.log(color.red(`a red ${color.white('white')} red ${color.red('red')} red ${color.gray('gray')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.blue('blue')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')}red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')}red ${color.green('green')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.magenta('red')} red ${color.red('red')}red ${color.red('red')} red ${color.cyan('cyan')} red ${color.red('red')} red ${color.red('red')} red ${color.yellow('yellow')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.blue('blue')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} red ${color.red('red')} message`).toString()); lukeed-kleur-6c7ac76/bench/index.js000077500000000000000000000000461425612514100172550ustar00rootroot00000000000000module.exports = require('./colors'); lukeed-kleur-6c7ac76/bench/load.js000077500000000000000000000005571425612514100170740ustar00rootroot00000000000000console.time('chalk'); const chalk = require('chalk'); console.timeEnd('chalk'); console.time('kleur'); const kleur = require('../index'); console.timeEnd('kleur'); console.time('kleur/colors'); const colors = require('../colors'); console.timeEnd('kleur/colors'); console.time('ansi-colors'); const color = require('ansi-colors'); console.timeEnd('ansi-colors'); lukeed-kleur-6c7ac76/bench/package.json000077500000000000000000000001751425612514100201010ustar00rootroot00000000000000{ "private": true, "devDependencies": { "ansi-colors": "4.1.1", "benchmark": "2.1.4", "chalk": "4.0.0" } } lukeed-kleur-6c7ac76/build/000077500000000000000000000000001425612514100156255ustar00rootroot00000000000000lukeed-kleur-6c7ac76/build/index.js000066400000000000000000000006741425612514100173010ustar00rootroot00000000000000const fs = require('fs'); function transform(file, next) { console.log('convert "%s" ~> "%s"', file, next); let code = fs.readFileSync(file, 'utf8'); code = code.replace('export default', 'module.exports ='); code = code.replace(/export const /g, 'exports.'); code = code.replace('exports.$ =', 'const $ = exports.$ ='); fs.writeFileSync(next, code, 'utf8'); } transform('index.mjs', 'index.js'); transform('colors.mjs', 'colors.js'); lukeed-kleur-6c7ac76/colors.d.ts000066400000000000000000000024241425612514100166230ustar00rootroot00000000000000declare function print(input: string | boolean | number): string; declare function print(input: undefined | void): undefined; declare function print(input: null): null; type Colorize = typeof print; export declare const $: { enabled: boolean }; // Colors export declare const black: Colorize; export declare const red: Colorize; export declare const green: Colorize; export declare const yellow: Colorize; export declare const blue: Colorize; export declare const magenta: Colorize; export declare const cyan: Colorize; export declare const white: Colorize; export declare const gray: Colorize; export declare const grey: Colorize; // Backgrounds export declare const bgBlack: Colorize; export declare const bgRed: Colorize; export declare const bgGreen: Colorize; export declare const bgYellow: Colorize; export declare const bgBlue: Colorize; export declare const bgMagenta: Colorize; export declare const bgCyan: Colorize; export declare const bgWhite: Colorize; // Modifiers export declare const reset: Colorize; export declare const bold: Colorize; export declare const dim: Colorize; export declare const italic: Colorize; export declare const underline: Colorize; export declare const inverse: Colorize; export declare const hidden: Colorize; export declare const strikethrough: Colorize; lukeed-kleur-6c7ac76/colors.mjs000066400000000000000000000031551425612514100165460ustar00rootroot00000000000000let FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true; if (typeof process !== 'undefined') { ({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {}); isTTY = process.stdout && process.stdout.isTTY; } export const $ = { enabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && ( FORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY ) } function init(x, y) { let rgx = new RegExp(`\\x1b\\[${y}m`, 'g'); let open = `\x1b[${x}m`, close = `\x1b[${y}m`; return function (txt) { if (!$.enabled || txt == null) return txt; return open + (!!~(''+txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + close; }; } // modifiers export const reset = init(0, 0); export const bold = init(1, 22); export const dim = init(2, 22); export const italic = init(3, 23); export const underline = init(4, 24); export const inverse = init(7, 27); export const hidden = init(8, 28); export const strikethrough = init(9, 29); // colors export const black = init(30, 39); export const red = init(31, 39); export const green = init(32, 39); export const yellow = init(33, 39); export const blue = init(34, 39); export const magenta = init(35, 39); export const cyan = init(36, 39); export const white = init(37, 39); export const gray = init(90, 39); export const grey = init(90, 39); // background colors export const bgBlack = init(40, 49); export const bgRed = init(41, 49); export const bgGreen = init(42, 49); export const bgYellow = init(43, 49); export const bgBlue = init(44, 49); export const bgMagenta = init(45, 49); export const bgCyan = init(46, 49); export const bgWhite = init(47, 49); lukeed-kleur-6c7ac76/index.d.ts000066400000000000000000000014551425612514100164340ustar00rootroot00000000000000// Originally by: Rogier Schouten // Adapted by: Madhav Varshney declare namespace kleur { interface Color { (x: string | number): string; (): Kleur; } interface Kleur { // Colors black: Color; red: Color; green: Color; yellow: Color; blue: Color; magenta: Color; cyan: Color; white: Color; gray: Color; grey: Color; // Backgrounds bgBlack: Color; bgRed: Color; bgGreen: Color; bgYellow: Color; bgBlue: Color; bgMagenta: Color; bgCyan: Color; bgWhite: Color; // Modifiers reset: Color; bold: Color; dim: Color; italic: Color; underline: Color; inverse: Color; hidden: Color; strikethrough: Color; } } declare let kleur: kleur.Kleur & { enabled: boolean }; export = kleur; lukeed-kleur-6c7ac76/index.mjs000066400000000000000000000052671425612514100163620ustar00rootroot00000000000000'use strict'; let FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true; if (typeof process !== 'undefined') { ({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {}); isTTY = process.stdout && process.stdout.isTTY; } const $ = { enabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && ( FORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY ), // modifiers reset: init(0, 0), bold: init(1, 22), dim: init(2, 22), italic: init(3, 23), underline: init(4, 24), inverse: init(7, 27), hidden: init(8, 28), strikethrough: init(9, 29), // colors black: init(30, 39), red: init(31, 39), green: init(32, 39), yellow: init(33, 39), blue: init(34, 39), magenta: init(35, 39), cyan: init(36, 39), white: init(37, 39), gray: init(90, 39), grey: init(90, 39), // background colors bgBlack: init(40, 49), bgRed: init(41, 49), bgGreen: init(42, 49), bgYellow: init(43, 49), bgBlue: init(44, 49), bgMagenta: init(45, 49), bgCyan: init(46, 49), bgWhite: init(47, 49) }; function run(arr, str) { let i=0, tmp, beg='', end=''; for (; i < arr.length; i++) { tmp = arr[i]; beg += tmp.open; end += tmp.close; if (!!~str.indexOf(tmp.close)) { str = str.replace(tmp.rgx, tmp.close + tmp.open); } } return beg + str + end; } function chain(has, keys) { let ctx = { has, keys }; ctx.reset = $.reset.bind(ctx); ctx.bold = $.bold.bind(ctx); ctx.dim = $.dim.bind(ctx); ctx.italic = $.italic.bind(ctx); ctx.underline = $.underline.bind(ctx); ctx.inverse = $.inverse.bind(ctx); ctx.hidden = $.hidden.bind(ctx); ctx.strikethrough = $.strikethrough.bind(ctx); ctx.black = $.black.bind(ctx); ctx.red = $.red.bind(ctx); ctx.green = $.green.bind(ctx); ctx.yellow = $.yellow.bind(ctx); ctx.blue = $.blue.bind(ctx); ctx.magenta = $.magenta.bind(ctx); ctx.cyan = $.cyan.bind(ctx); ctx.white = $.white.bind(ctx); ctx.gray = $.gray.bind(ctx); ctx.grey = $.grey.bind(ctx); ctx.bgBlack = $.bgBlack.bind(ctx); ctx.bgRed = $.bgRed.bind(ctx); ctx.bgGreen = $.bgGreen.bind(ctx); ctx.bgYellow = $.bgYellow.bind(ctx); ctx.bgBlue = $.bgBlue.bind(ctx); ctx.bgMagenta = $.bgMagenta.bind(ctx); ctx.bgCyan = $.bgCyan.bind(ctx); ctx.bgWhite = $.bgWhite.bind(ctx); return ctx; } function init(open, close) { let blk = { open: `\x1b[${open}m`, close: `\x1b[${close}m`, rgx: new RegExp(`\\x1b\\[${close}m`, 'g') }; return function (txt) { if (this !== void 0 && this.has !== void 0) { !!~this.has.indexOf(open) || (this.has.push(open),this.keys.push(blk)); return txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+''; } return txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+''; }; } export default $; lukeed-kleur-6c7ac76/license000066400000000000000000000021321425612514100160710ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) Luke Edwards (lukeed.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. lukeed-kleur-6c7ac76/package.json000066400000000000000000000017361425612514100170230ustar00rootroot00000000000000{ "name": "kleur", "version": "4.1.5", "repository": "lukeed/kleur", "description": "The fastest Node.js library for formatting terminal text with ANSI colors~!", "module": "index.mjs", "types": "index.d.ts", "main": "index.js", "license": "MIT", "exports": { ".": { "types": "./index.d.ts", "import": "./index.mjs", "require": "./index.js" }, "./colors": { "types": "./colors.d.ts", "import": "./colors.mjs", "require": "./colors.js" } }, "files": [ "*.d.ts", "colors.*", "index.*" ], "author": { "name": "Luke Edwards", "email": "luke.edwards05@gmail.com", "url": "https://lukeed.com" }, "scripts": { "build": "node build", "test": "uvu -r esm -i utils -i xyz" }, "engines": { "node": ">=6" }, "keywords": [ "ansi", "cli", "color", "colors", "console", "terminal" ], "devDependencies": { "esm": "3.2.25", "uvu": "0.3.3" } } lukeed-kleur-6c7ac76/readme.md000066400000000000000000000163241425612514100163130ustar00rootroot00000000000000
kleur
version CI downloads install size
The fastest Node.js library for formatting terminal text with ANSI colors~!
## Features * No dependencies * Super [lightweight](#load-time) & [performant](#performance) * Supports [nested](#nested-methods) & [chained](#chained-methods) colors * No `String.prototype` modifications * Conditional [color support](#conditional-support) * [Fully treeshakable](#individual-colors) * Familiar [API](#api) --- As of `v3.0` the Chalk-style syntax (magical getter) is no longer used.
Please visit [History](#history) for migration paths supporting that syntax. --- ## Install ``` $ npm install --save kleur ``` ## Usage ```js import kleur from 'kleur'; // basic usage kleur.red('red text'); // chained methods kleur.blue().bold().underline('howdy partner'); // nested methods kleur.bold(`${ white().bgRed('[ERROR]') } ${ kleur.red().italic('Something happened')}`); ``` ### Chained Methods ```js const { bold, green } = require('kleur'); console.log(bold().red('this is a bold red message')); console.log(bold().italic('this is a bold italicized message')); console.log(bold().yellow().bgRed().italic('this is a bold yellow italicized message')); console.log(green().bold().underline('this is a bold green underlined message')); ``` ### Nested Methods ```js const { yellow, red, cyan } = require('kleur'); console.log(yellow(`foo ${red().bold('red')} bar ${cyan('cyan')} baz`)); console.log(yellow('foo ' + red().bold('red') + ' bar ' + cyan('cyan') + ' baz')); ``` ### Conditional Support Toggle color support as needed; `kleur` includes simple auto-detection which may not cover all cases. > **Note:** Both `kleur` and `kleur/colors` share the same detection logic. ```js import kleur from 'kleur'; // manually disable kleur.enabled = false; // or use another library to detect support kleur.enabled = require('color-support').level > 0; console.log(kleur.red('I will only be colored red if the terminal supports colors')); ``` > **Important:**
Colors will be disabled automatically in non [TTY contexts](https://nodejs.org/api/process.html#process_a_note_on_process_i_o). For example, spawning another process or piping output into another process will disable colorization automatically. To force colors in your piped output, you may do so with the `FORCE_COLOR=1` environment variable: ```sh $ node app.js #=> COLORS $ node app.js > log.txt #=> NO COLORS $ FORCE_COLOR=1 node app.js > log.txt #=> COLORS $ FORCE_COLOR=0 node app.js > log.txt #=> NO COLORS ``` ## API Any `kleur` method returns a `String` when invoked with input; otherwise chaining is expected. > It's up to the developer to pass the output to destinations like `console.log`, `process.stdout.write`, etc. The methods below are grouped by type for legibility purposes only. They each can be [chained](#chained-methods) or [nested](#nested-methods) with one another. ***Colors:*** > black — red — green — yellow — blue — magenta — cyan — white — gray — grey ***Backgrounds:*** > bgBlack — bgRed — bgGreen — bgYellow — bgBlue — bgMagenta — bgCyan — bgWhite ***Modifiers:*** > reset — bold — dim — italic* — underline — inverse — hidden — strikethrough* * Not widely supported ## Individual Colors When you only need a few colors, it doesn't make sense to import _all_ of `kleur` because, as small as it is, `kleur` is not treeshakeable, and so most of its code will be doing nothing. In order to fix this, you can import from the `kleur/colors` submodule which _fully_ supports tree-shaking. The caveat with this approach is that color functions **are not** chainable~!
Each function receives and colorizes its input. You may combine colors, backgrounds, and modifiers by nesting function calls within other functions. ```js // or: import * as kleur from 'kleur/colors'; import { red, underline, bgWhite } from 'kleur/colors'; red('red text'); //~> kleur.red('red text'); underline(red('red underlined text')); //~> kleur.underline().red('red underlined text'); bgWhite(underline(red('red underlined text w/ white background'))); //~> kleur.bgWhite().underline().red('red underlined text w/ white background'); ``` > **Note:** All the same [colors, backgrounds, and modifiers](#api) are available. ***Conditional Support*** The `kleur/colors` submodule also allows you to toggle color support, as needed.
It includes the same initial assumptions as `kleur`, in an attempt to have colors enabled by default. Unlike `kleur`, this setting exists as `kleur.$.enabled` instead of `kleur.enabled`: ```js import * as kleur from 'kleur/colors'; // or: import { $, red } from 'kleur/colors'; // manually disabled kleur.$.enabled = false; // or use another library to detect support kleur.$.enabled = require('color-support').level > 0; console.log(red('I will only be colored red if the terminal supports colors')); ``` ## Benchmarks > Using Node v10.13.0 ### Load time ``` chalk :: 5.303ms kleur :: 0.488ms kleur/colors :: 0.369ms ansi-colors :: 1.504ms ``` ### Performance ``` # All Colors ansi-colors x 177,625 ops/sec ±1.47% (92 runs sampled) chalk x 611,907 ops/sec ±0.20% (92 runs sampled) kleur x 742,509 ops/sec ±1.47% (93 runs sampled) kleur/colors x 881,742 ops/sec ±0.19% (98 runs sampled) # Stacked colors ansi-colors x 23,331 ops/sec ±1.81% (94 runs sampled) chalk x 337,178 ops/sec ±0.20% (98 runs sampled) kleur x 78,299 ops/sec ±1.01% (97 runs sampled) kleur/colors x 104,431 ops/sec ±0.22% (97 runs sampled) # Nested colors ansi-colors x 67,181 ops/sec ±1.15% (92 runs sampled) chalk x 116,361 ops/sec ±0.63% (94 runs sampled) kleur x 139,514 ops/sec ±0.76% (95 runs sampled) kleur/colors x 145,716 ops/sec ±0.97% (97 runs sampled) ``` ## History This project originally forked [`ansi-colors`](https://github.com/doowb/ansi-colors). Beginning with `kleur@3.0`, the Chalk-style syntax (magical getter) has been replaced with function calls per key: ```js // Old: c.red.bold.underline('old'); // New: c.red().bold().underline('new'); ``` > As I work more with Rust, the newer syntax feels so much better & more natural! If you prefer the old syntax, you may migrate to `ansi-colors` or newer `chalk` releases.
Versions below `kleur@3.0` have been officially deprecated. ## License MIT © [Luke Edwards](https://lukeed.com) lukeed-kleur-6c7ac76/shots/000077500000000000000000000000001425612514100156665ustar00rootroot00000000000000lukeed-kleur-6c7ac76/shots/1.png000077500000000000000000000252241425612514100165440ustar00rootroot00000000000000‰PNG  IHDRð¹BBcúPLTE(*6þ\Wÿ\WZ÷Žóù�øøø(*FZ÷†(*;<)6h˜>�~ÿ\R['5õðƒöΙôôšWU0ë�ø÷êù«�M+6OöŽÿeVÔ94`ïpúÒoÇ\Zù[Vÿ\]ÿhuóòòôù—ó÷øWò‹ÿmVœ*1ôù’jÍTUBRôK<òõžþ®_ÿXIìøøÿj`”TYôË�Ç‹ÿŒWÿ]lÿ€YhÖa()Töæ�SÝ�õÔœÿ\bþ¡_øöÝ?BRúïÆø»‘üˆƒýz|EöŽþ‹gÿuV>9;˜G.ô\WYU0î\W%2Gúé¾FµlÂ|?"=Šý¸c.K=óëž-eHg7?ôæŸ'ì�û›‰üœsjÅTÐõùòåú×�øâ€ú¾/*6áùøÞÞÝþwfC)5q&4ùÙsûPBf'5d¬ÊŒdEO¼ìúÜ¢gV87õð—[ö|MÄuKc ¬�}67%v¶ß]XäSP¨+0}Åë<˜Òá«r"LêîðˆÌðëÙ¿ôö‹ÿ–X)VE†%3[§ØÉŠeân÷ê€û¨€Xd­UX\£OÚ÷øJ Ö¡¤§ùË„ú¶Ï[Y*<:[ð†°FHÈ>:õæ˜6ô�4˜gv³ØRçˆ*¼€û¯tÖ–X‹NU =>WJ2ôÞœF™((ü‘~ZÞv()rkkæE;\e.üÅj OUôTMªW*q†™8ȃ�„}%pWÌLK?gD·76›~}s¼RUwFLÅäôÖæï%ÝŽøÚ€aÍiŸØó½ÓàöܑØtJ¨f)€cñMDEW8^t4’64ý†z_eg“nXi±I½IIïçØùÞ³E›Z`WS=tN�ÆÝp™»«³·6mŸçº†\ë€HSdÊ‹RR”NÄÄÆA掆m¹n51‡Äx¹W¡±¡š»„­wW÷èË�BGMJD`‡>¹¹¸·®©�n_’Ñð�§ÁPе\v‚9Z‚4VpM‚F¡W+…“£8ÛˆrspŒc?åÍ©Õîë�«�{ÈŽÉŽ¯[H}'UIDATxÚìÁ�€ ý©©fßjVÓˆ¢pη�t) t–Á'pD·>@7Á‚�•Lºê®;wBÜÆ­`VA0è&Ï‘çèœûëx2^[Úô~-†¹ñ|9s<瞟;FDDDDœŠd3È–(ñaÐϳ,•«D„o¿Í};»†C¢4tÆã{±ÙœA�¨à‰ø¿Ðè�ðÀŸ…èüáѦ`x´ Äÿ;ï»uã :žˆŽd¼Z}-9Ò¿º¸,q½z}}âýð 4>ŸA ÍñÁÑ+ïðmbçû›¡³GÉ'BEö8SxP ��ÞKáAøËÄ“Âãƒg�ñ¬uqi<ðn*J—úø6 W�ÏŸJµÆ_ëáìÑ2z©Yó {PG0·NË­ÛzI¬)xdöo±¯’GZC®Hkø•ñìíi “¾gŽ87’ù ˈ�0c˜6ˆÒÍ€@XÚfŒÇm©« €èq%I�J�‰«¥’çEFê-ÂóÊåߎèzÿxPú4–G²ÇèË<îªÝz´PvHæ]Ó�MsÖG3{zÜ‚Çêò¸ÍAXO`AËò<Þ†l io PÉןxIýú¤a¡ŸÉ‚ @ýoüpÅÕ�@Œµ«²A¥‚¿? #H¹Ñ¤ÕRIîôI�W”¢­ KüÒªê=úìV ¨ E»ÌSWïǫϤey@†©‚§G rvݘkÏ3púhkHû$¹½FjƒÌÚ§ñ´šÕ53,s,¶ÎŒñÛŠ÷ÂåjµšyçCcÙš]ýÉ^¿ÝßÏJ÷7f,›õñÎ.J|ÑR„=)RÏww«ñí&+5D2{ ±­o|Lóßyùzý‰@‘=\à�ÖÍÛª³G2~Ë�¼`¿³Ùã É,ÙÐq ̓ªða2V¯�éû<¬¬²Q*íSa�QþT’¡{cÞCfïg…œä´‰¯EËÞßßÏG[Ö_·Žt R A)·I‚Ò#½‡ Üž}SŸXí`ZgSöj^ÞUö†E ê›-½6ä�ÜvhV3ÍC¨ÎÝvÿ‰ ¦TñÀðpp kì3uI¸gn°–«›+3ÇA³À9'0~.$Æk®’£ON›Á¢TZ*ŒÑ�¨:÷øž™‚bnÏ,û컢57W|›ò~å4˜Ëª6´ªÏ l�BX› 3<¨,®˜BG'󥚇 �Ñp4€±FÈ>,d'Y0µ¹9›Þ¼†s„ÀYç÷¼7‡Â£–ô¸ ¥)E!)‘Ÿ<¤†É‚}Dû4ÿÔ~4½‡ýM·)ïWNƒùõýÓJUmÌìÙ˜‡»’@xÐ^xèPžƒu¬5 ¬´‡’ ÂAxÌÉ1ÇêêèÅR±ËòòA“ÍŸî¶<¢(I’ºÞeP�&:�sö=v^ö+vYë¼_Eqe6뎸_åv7¥ÑEãI�kWÏB=öaí­Ì—–yk ´5¤}¼5ðÏÇÌM»UË š– ˜} #.—=Ø£ÝzÕQu27³£e(

Î|­fï·yM ñ œ œ~ZÉË÷ò¨z¼¢Ü•ž,¤„*©"¼Üè†ó”ì¡¶úÑÐút-·."‹«à®ïã«”=pg±½²á*®Pê=Ìïy*¬!V@t`�iBÆ//FC”4ŒÐ¸|ïÁn$’J ÓŒeƒ½ÇéR5Ó!x/ ÷ægÓÍ êïWzΚJF‹äA {Àõ’GZC®ÔlŸãS3)d[Ý�'æËœ\y̹º M®¤HJùáäÉÕ(ƒš\ù©TŸ´¼,®j¹:) @…·=8U=ž'W”ê¬HžGÚPÚ§l w[s¢NÝ=>£™Ÿ«¿¦Oì �Û[áèáÖÜKKXõ³ã½ÇÚ8:Rw¦a�-s²(Îo´4ÕÈ©ÅÏŽGØyz$»yiCi3°²Ö@ÇEùÚs(æØ‘_}&7WÉjU7Î'&WõV}ÊQSoµêÚñ2Sþ©¶R/E´'ÒR@•T-מÑp,{`©&þÌ£ÄôÊY'´çÛ«d6sß\,¨G ªÌ¾^ó˜“.ÿÇy–sižã§æåÉóŠgjx¼5ˆÓš´Ï�5¨ãô£l8Þ=Í|ö�aþ»Ÿ´þG1·ƒ�¥«‡\�îúSbÀNÏÕuƯ¨è­Þ•¢í‘T†l@§ˆêìB¦üÔ}¿–�R´öí8§éŸ+„¨:{pÿ®Yš¥sB�îëü¤xN›\ù)›¸M[Ãë³½’ö1YÑÌ­`­ÑÖ¿™ÇË<3ë¿Ü{~$¶.�meöðÜ|qš›ë—ŠÄIé+e®�”Äó@ ½Ü,@ieÅÖØ@è~öOÑj}ÖÍýX2»µ›¢÷„êðÐú•Û�L/®oì_žð¹(õ<Ï3Íõµ³¡´[¤¬áJÛÑænX€U:zf0sÄ�<ß߯N™ÛÇ_ïòþu^)ÖåuÅÞÉýç1¦×ןû ­bAÜøàºñÔo¯÷³?²N!W¿:�´†\ [£¶pÉË3GDüϸÞÝ=ÙäCˆ«ˆˆ=Œ2×¶ÍãWÝ#"ıic9kÞ¾-ç¹e´3?EœÄN<"â û0SﻟW¿Ø»š�¨¢(<›'¹ì‡� ÍЬ„@Ûå&rÓ*Ú(IÙ"l1iM-riî]QÐ.qY.\…�"i¡ýH"æ?I)nzß›w<¾ùº]}6ý¼îýxçžs¾sîß9÷=ÕÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁˆéRvûx,©í‡Àç£èI`|þo¼Ée;©õ¦çc.eK Ö€¡×i1<’-;þì�çM|9g¶U °�±Dì馯 ‡šƒãî�§Ö[~kºÅ"j�ª9CFÑ« !ŸëyM-19ÛmÙõÄ·Å^8ÔÍCýÃõ¶¸·–³ŸlšbHÕhf¬Ï,-•=ïG‡Ìíkžw3ÇÇn‹õÔ">ê…KËj�Ö6Ï;ý/Å]Ú·æwÜÜÚçy…8ñ±Ûª1Ø ‡šãf_$î ©¿ÊÐ~ȼ0ø'>v[5³úƒXÿz=õ? jãûP‰{óøÉzKN6þuÊ¢:žTݬѶ2ô{M]¯Ò, |ȨæÅT/*—ØñQ†1´;›¾}‚Mh;¤þΰ n1{Š>ãë[å’\;ˆæ$âI¹”Íù�Îú¸×µW÷~z•GÍ8†èU ŸG²ä�W9¸÷�•Eªgz$ìÒòÓÊ|·ŒNïöægÀØk‹&E…È…×stY•�ÞÆ™ãà Ùë]Šé7ê£R!ô¶wz$š;°�¯JŸûP ä}Áw¤‡Ç‚[ÄÓ¬xªÖsž`°JsòÐá)&÷Ò„´„ Û'ñÿÈË€Šu²ÖRL(ý”?U† úÍ6ëæôƒ­óFÏœ9>Ì�m±Ao^äÎܧ>"%�b§õ¹úu@/Z´Sƪ§“[ ž6®à«VÌüð1LŽÝê_Íû1ìïï~&i¼_îÝÛz†ü�ý Ÿ¹"rïÑåeýìj›wæ2«µIõ™¥ZË퟇§†óBŠ¡ ·Ÿ½Æùfov6íž�Îퟳ½²¾õ˦Owr¢ÚÆ™ãà ÙëÑéùqÈuú´Î´À:š §:Îðëð4ôËîEG2•~+¡zÒÃcÁ-ìiæÄX}j-L f˜@tä©2÷ÆÂp Fö¤Óû&hÂÆ“¦ú,¾ð(Ï£¯ ãüvY1³p?œ<ƒ\-‹›ç®„}:mœ)>&†l‹õÈä› Âø¸¡�ê’ÕÑx çcXm Ћ[AF5*âˆ!=<ÜžBµŲóõ’æ¢êüìc¡í==?æ%<Ä“Â�H.oªÌ¥S°9±wË$,Pµ,_ú)ùkáLý‰!Ùb=²šî[m+˜ƒjzN�Ì‹`I`�5“·vT=<Üžº81ŠÀW1Lè=sô›Æ½¨i±,-DƒƒØ¢8®p“ç 3Ä�`R>îÿ2ƪ–å“IÚè-œ)>Ä�l‘ý¢Ûn ætu`vcÆÊä³x¡B Ází-, ÖÃcÁ-ìél™J‘„€‹æ$/�pã£Ù žëžD5vÖ8×ãKÕ…÷B4oˆ¡Éû½äþÇÕ²$#䯕3÷g†jˬGv}cmÁ\Ô³eâ-PFêB^+óî 4çA VI�…¶¤µ…{ã¿R²a˜èï9‘ ü0•yãÕ‡2+ iR<)½&,þ¬2··Û—Dû¨nxÈ=tgÔ]_.V±;Ú+sŠ�‘!Ûb=ðæ-¶°:¢©–¨5{a¯ÌY�·°§Ø� /Ê0™¹"xšªêÿfªÌÏ6/6c’\h^< Ò¥ÊéºñܻԜqçF.ÞNiseîSìÂË ’~÷¢årj㢼b$Svò8Þ+•Y¦åi³•3LJ²-ƒž:˜_ø–š]Íçç }zÑexkxØÿsµ¢6‡<ïBe.¼°V椇G�[ØSiÂ÷`¶ßÛ­OEnúš“ù«@÷. \™Ë° °r¤’)ŒR9ƒ”&(ý•¦Ê½TN ¨Æ8žçW�žV†V8KåbåÌña†dˤ§£-ò6õ�¾*Vµ°öÊœôÐr‹ÁÓGJq¡eÃ\bï­p@V¼k“ʬ3š¯xŠÂ¾wFÍÏøâKá^=N]2Õ`˜~[aüIÚäµ¸í®”×�èõ%r­?ß&'Œ…3LJ²-£ž�!ʼn]ƒ-ìGdˆj[ß¡%/ÌÏÌ¥2'=<ÜbòôÉj»�”MÖ“æ„¢gkæ3ŽóC`skii~úÅR�C>dÁëÃ?+6ú}EÕðáz´S�¯kwJÝš�Lüø0C²E°P´¢n½!#/âéá± ûX ñ–‹Õìàð?c­Ü>ŸÙ«¤ÎüÕßníàð›�·t3aùŸÌ÷«bOÈw–§f‡Ê¹àFÌÁÁ!ò<]°à~À–ƒC¯ËyHï,§¾³w5-�&Ax·Éy’Ã@@pÈ‚8q<¨$wYôðšÿ0žô6ž<å"xò7xðèÏÚ÷©ª'•N¥Íê$ŒÂÛ.Ÿ®ïªî~»_;lÝêV·ºÕ­nu«[ÝêV·ºÕ­nu«Û‡iW-áýL5®ñGÆËžI´§êC¬Õ¸Æ/}z@qšLÆ×ø#ãl®löÉ?5®ñGÆKž‰VÌR�kü‘ñÒŸ¢<ávj\ã�Œ—<=x°áV®Æ5þÈxùON?ü¤×ø#ã%O(åÔC[€¯ÿm]¤@_„¯G•Ô,½Æeœ$cú²ë[ï,þ×ãUž= \?ñóm£³eØé‡�ªíþX¥ý7ñó?�ÆÖËü÷·­ÚZŠôÏ�ÆnïÍöUs š•î¶–óü^]/åyƒ¿–Ã@ÿ£xÉÓƒû6þG\EÞØL:{¿nþ˜R�þ[X<|™¿ÙÐv1‡¾ŸÞjß5Oènk ñiÆÞâÏë륈]ÊéÃfä¿áîõ­*>Ì¥sÄœÞ� )ýû�ˆ�ö�_2ÓòÏ·¢¸©Km´/¯ .WΟY÷õ?ûºO6>¾Óqðç`Te×øae7ÄŸgLñLuB~¢?¥zᜱ-r­cÅΓÕËÚ£ 2ö‘¿ÝšÎá¼ú¬7[£kX:>Àb}˜ÃÆ�� ÅÓ‘Rÿ=¬[³zPóJ®$5¼�UXOæíàC囡ŽÃÚ\l«pÿÞ¥HϤ¿bw¨Ó›¥»‡8¡K{Þ¤Øñ„ÿÐÌ»u]j£ý“Šô øPÃ$ûášÉ/š)ï=ÄÑŸ¦˜ÔüDûyžÓLub~Jþäzx:ñØ��'¯ßÁi—Çnªgrëó �{»Bo–ÃÂøÉ{<#Uýë{“dŒO³šWp©/­n`ît<>ݨ0ν:…»w¬xÅtss½‰„ð~ý‰ÎònÕû©pÿÞ¥G©œßð—§Ý›þðN¬ºbõpm ù{ú½, íÏÈå€ü@;.ø³ß=á9þòÀ)ø®âM £Ü�­ö3>äç9Ü奇8ú#3ó³õ �çÙ÷Œ)öê\£:¥üDb½ÒñÌÝ{ÎCûßΟ¤5ܸxìÌj–Ã4¯>R”}1×ßÓâçz ã'ï�²¾H«Tà�˜ç†]<$“,5M¶O ¦ü~^F&eTz¼Ñ¾‰  ø$ó>ètüdsyí!Žþ41:+ø½?3FLoËù‰þÄzé\ùí)OnM±ÆÎZÑ5‡$íDÿ¹`µ¸¨R1ÓãNÏ?ì‰ú\h]žè cz]5³:-ÿhŽÒq¯x¹ô‹ôä’^Ë欷ð>¾I»Tä�X'i�N“N.ÖÌ;*2É+åA‘Qi }Á¾UàžÁ®ó/,¬’ÿžÉKqôGJ¥Cu«¿ḏV§œŸèO¬—‚ã`Ïm¹þ¦Ÿ×»ë—&XFÿeJ\È2s 1,-¦‡Yš;~ØôY¤€HÜèöKмô§Œ}‡ ¿?o³"™míô2 æ9ªõ¸³à>¾H¦Tçq§Ä�ü^O^NìDº+�Z�ìD K|A­BÜæÄx£¿�F3¦’ ˆÝ_hÛ”çFËåÙCýÁpYûR©ª>N0²Jö-8bz[ÊOÁŸP¯;ìx¢=áÉãÇX4<;êgŸÉ¼ŠþëÁJFëe:”}VÐ3üLz&ú¦#æb˜Nti.{zøÄS'�¹ô_ð>½o7 ãÄ„vÖ.ݿǥˆ]ªtÿDß>¶ä¥T¤Ûøæ0´;OšVîüdNÿe„x¼ûŸÁ½®�Í·šÔ<%/=ÄÑ™Õ8¨�ì;Jö-ÏŽÅÛb~¢?±^¦ä*et¯Žc}·÷@b×&0ÏñÿH\9ï>Ëq"Íè)�ïQœEj!áÈ™žùÒaÖÃ%O�üì—0#çã›™³£aü o$ž«T¾�¯RÝ¥"?rZ¿B2Ý·Ý‚›,›m‰¹L‚››(•ç©"ÆíïËAñÖ'¶_má7Í.O[ÄÁÝll6¾VÃo¼‰!R²Ï“91½-ç'úë%[¼hOx¦íËì Ž±ó€åæèÿ‰ æ@0)gô”ÇOÖ£‘V¿ R¥aÂŒZxˆ´+4/yzèô÷S0#çæUºýG¬ü÷öÞ’8§S*§Sj?��|tEzò·JxÐ ·½õ@Ú¹é>?™«f ™x£~Ù.Ÿ¸Mö?5ÓqðGè7ÕmâKjÉ>óLlÞ–óý‰õÒ¤'Ú#±ÎÇŒ�˜9äã*øïÓÙãdMõtÚB_4~ØÃHaÊ"Eòƒ6 ¶ê¤Õ~߃›]u›/ð½ßËt™ß¯ÇÁÁ”ïã»”Ó)5�Ÿ›v{9U¸ß¯Z.×§ å��Ÿgi;ÀšÓ‚¿*Tù÷0}™�O˜2yí!Žþ`¤ÜU^7å㡘/æÙ±U¡œŸèO¬uí �ãQãXb'ö7�ôªý·“yš:™S�Ð�öÌD*tè~èö‡mò«æ•~߃›Túnõð· °;^ïnLFÅÕK÷ñ©ŒRBw©ÀÏ£wï9˜C£ð¯µßqÉá2Êõs‹ò¾!ÝŒ7êGaŸX{è3ûÔœÉKqôja®oÊn«d_óìX«SÎOô'Ö óÁ{œz>1צé»ã”ç0èã~ sÓNæšC¡Çz„®=|eëç8[ Ïí©‡+þ¾Ç�8²~:îe÷øý–{jw7º(SõÙ®®tàúшîßgR ŠTÕïRñþþgM©»'·"]ßš …í$× ¶8ˆ‘æ£qÉGùù7;¹,áa øœgŸ‡ .W6:Õ€n·t”ºæTi¦|ÞýÑéq,µæ‚íg3ú�$ Õ)çÇ­Çzq’Up�†Ì|Æ3™W§Òú:g4vÜ“ké1'Ï!L…úÈÉ<ÝONæ ›ž$9œ?~ò»â€CŒ”¯¼[£Ñíîã¾ZÍ5¯èû¬ÌÝ…¿nN¶Š°]±Hl¥û÷¹Tš‘ŠüÜ!ÊtVþþ¸TèX¥­§sI~¿B4|BLªè/± àŸf»$¿kœõDx£+u“×—æÙÏ3ft¯N!?ÁŸP¯üfÝp°•L#µ-”÷§,‡sóNæ og9Œã'ö¤4© ÍM¿îe7lrÍ+Ø\yªF[ÀùÉœÒÆ?>áæ«ù½S¼�ŸK�žI~Å'ÆÑûÁÉôã™­.Ý'ý‹©~l;?oþì)6™ÓJ¼l_ µå¥VÕ=çwÍ”?dÏ|dz\Èdãž'ÚÏ3FºW'ä§àO¨–åïî+ÎxÒÌåÇOôÏcœçpnþšœkóšÒ§ôÆÏT�éË"µ}ÃÍÓíííH¯Lª=×¼ºï{tOÏÏ÷7^õ}„áõùù¸Ÿ"½Œ]ê%þõÓó›ÊlŠÒKöo~�ûÓtÄpÚÎù×Ñ7 F˜ãéEûw\ºI_ïßTr9?5»¼ö”ý¡üë±V§�ŸàOQß°ì·_ißbwºäðõñPOyüX�㤑&‰4Ó‡§È×¶bÓœÒJ¾ï‘ßׯ±lf:½wäO� _?=�ñeRà×éQÿÿ=V…y9éùSãÿØ»ca €¢+¤‹”Ò¤HšaŠ”L“’%R1 c�AÈ¢GÖ!¿ß}Ѹ³îdô7_Ço«Þ›¾GqïÞßü²0} v¾ª=MKý§íþ�4eé{÷fpïaÎó§�Qæ×ê{÷fþÑ|¸Æ9ßùøº¬ýþ©ïÁ¹¾çúœë{p^m߃óÐ~øí«ÏÀù úœŸÑ¿=bõ8Ô÷¨�‰=ói+ŠÂxàA4v²Ð€ëìšÁâÒE�B‡B§ ’êÚ:�nq0è’EJ' éb©‹Cè$„vêâ,¸”zÏë;Þ>Í»�×ô¡¶Ÿ‹9¹çÏ=ß=÷Ü{SÜõ·^gÔú�›€ÿ\Œ‡;ž7é=Ïàm}jå!†Ìû[æïìu�¨xÞ^·p»PCÌÉsß2s?µ[˜±¿…¾wÓËC#t Ìþžì‰¥ÂíB…1»ç>6.*·0ccC»×,ÆÓ8u£Wˆ˜lt–——îNy4MÌÓ�:æ>6.*¡÷f¹xK×ßMFÊ‹÷͹#d#æTsÏ„;²¡ŒuòÿRy¤$»÷±T¸1WyÜÒî‘/œü*_Pm8ô‚j5(®5i|?w–ÇdãZ„�ÞA�¼DD' ÙŒðcg¿|ý 4ÚöC³ 9t�Z³®è‹rîn_° ïØPà·Ñ(%e#pIÈ;¹PËy¡xäûž�o°×µ‹o·ì™”èQu}Çœ�[Å 3B°wA£IZ¾C«Ø¹Œ†œ$—Ç¥ :;±ÞÂx¶† å±ê´ö“Êã�£�§ŸµË03ÅÝPu¥âó§Ð—¦‡’Ãï¡æ�Ð1’É“¤žZŒ™¾!æN.¬/ßú¢ez'Öý³¡(�öËfÌ9ìpµPç½u2‚ XÎÅ'6‚úêÕâ+ǃz}œ²‘—=Å7ú?Ðz$©�ϵ̯ —Pð#›¯>¾Þñà@BÜüéeÛÌü´ÝŒû¢D"œXÐºŽˆßuo†c¦/Fȹ“ ú¢ez'¾y¿¢Þ¥òN y·/pÊ,çójud&< >ZÚÌ–Òþ\6ó} :>Þ·�KöeÈbûý¾ �¬Zëóï†Õ]ÙŒÞ&=×Ï‹»W5=)ô¿ 6¥HžŽ(�GÛòåbïÈŽWÐÌ‡ÂÆÑÕ>\ìuŒÞŽÙ±æÍW¡l]ö¸_Ô$Èabyèa�Z²h3|!BÌ\À,§ÍXM–êãpÜ1;ä�ò®\´,°œôªÚ�ÓVŸÖ+,Ùl–5ÀFÂ-!«Û Ñ™U‰PFÏüÅ#�™Kd]’ªc¦“ø_m‹ª5#ÛÕ½h£{¹ýóE}Å$Ó±>“1ŽÔÔFj1fúb„œ;¹ /Z¦w¢i¬¬ˆ³¹°˜¦˜òN y'Œ0(=ÌbÓʹÐ%!.¤×"Ö°CШlX­’4Ùsô«S”‡~ªwñƒ£æL)߈EÚ7ÖtÑœØ)áÒ8†ļD_Œ�s§C²LË)3VÇ2ði8|ŠvÈ;%ä�\Ðr@ éC|Õv[ - ƒ8ë2úHR¸¢ÔÄÍa‰è73%Ì7]yˆ»Íåá9N¿*~û� ‡Žî¡ñ0ó³Ú¡/F˜²<èK,×­ex—1DEËcVË‚wJÈ;¹ å ÝCq½; eD¢–Ÿ¬ÕÛ÷=�³‚î�ËŒ�/Ñ—à¶µK$ú_ûJýŽ Œl.¨ ‹¯‚_d(Iß=4fž1Ó#ÄÜÓvZ¦ww÷€òN y×ïf-°œúÖkêîQ­f(h%<\:î§a¾Ôz_%5;S4ÚIÔ©w=w‘lû¢rêX|oä€ã’ôw‹Š1Ó#äÜÝåÁyÁûRª»í�wJÈ;¹€å< µ �Áó;_;Ú}·ƒ¶Žy÷ƒ}3fiˆâx  ÑÍÁ‚«Ÿ ƒÒ¹PpÈÐ¥àÐï í*�qì`© t*¥³‹ÅÉA: ¢“KgÁݼzÏ$ý<‹mï7>¸÷ÞåŸ;r/ïÆž´sÎHK�Òk3®m¿T¿Yþ¥ÔÁ¥©�R’ËAê­_�éøkš'¯Õð3b³Ç¦Ûï÷+á]b[ȶ)Aj^0©îoÓ’¿Åp'�ßÁ£«y>|e‘óc1CÎ�ZpÓ3£Û}\Ñu§%ѽ¤ºC x.‰j˜QZ“¨AN7}íM’I‘åGµ}sîs—‡¢~¢ªZövÓë>݈TÖè[€ë­'Nû»´œ _t4³ùð<Àœ“�ÆB†˜;µ`†œ¢Y}\Ñu§…ºS z. i^gÜWPQ;6�“š¸®l`?е#iäiH@Û醟ÔÖz7�¶N~¦Ex5 n‰Ø¤u]éÇh¯^>!h—Ì4j9›å!ÝDÂù´$ù`r c1CÎ�Zp¤gF'eü5‡èKžî�´ð\ �^>H¢öÈ•Í[ÜRù…Q“0|«ã =ÅŽ2¸±ë§º—!˜dæÕ1c8ÔÃ~~ŽÚE ‹=£žf�³],ÎÝzfôåýPwZ¨;µH<;Š'VÂZº^á°Æi±òDÒó¦ç±ÿw!}¥ˆJN‹?ÆiUºÆõ³Þ󼿰Æi±h±ÄÜKuØã´X.LÛh7.Ë;~Ä já;Ò¸§óÁ òÿj/ p�ÃE({p äÿÚªªªªªªªªªªªªªª*íÁ!€ ÿ¯M¾XË}Mñ2êþIEND®B`‚lukeed-kleur-6c7ac76/shots/2.png000077500000000000000000000137271425612514100165520ustar00rootroot00000000000000‰PNG  IHDR  ÃöøúPLTE(*6)+7óùœþ\W›íÿ™íýÿ\W\'5ôù�(*<ôøœîÎZÓ•=ßúž()Jóù”g&5œ*1>“ŠLp>“‹��bõò~=)6‹Óÿ\R(*EšíñpR0öí{öòzÿXHX'5AÀñŒíÿåùž“SY()UXoÈ]Zú[Vþ\R•íÿµî ïù�áïœ�Å—ÜߎóöŠ˜¡m()]&2HíÇV½ð ×ÝŽåTPùNAM(5êù�õâpèÐkï]X()Q3BN74q%4´î ‰€Q™íëàúž((pÏ[YdgVÌMLEWITWCñI;Д4{#4°äŸŒâúœèÖ |ÄX£¸ê Ð÷žˆÒ�G�îê�9šŒÃЋôë†~�­°sóÚfLc4V\ÜZWÇ÷Ÿ�‰Yƒíÿtêÿlàþ9¹îšìâ“ÓÑn¹ŸÝ wÆ™´Õ–j«ŠÊÑ…•ª–•e"=bÂZZŸSXŒOVÿZMÝ®H&0BEJ<;;:ć84)6cI5S85–G3±s.Òúž²ÛœðË\Û ?›íúrÒöŠÚê�×ä"˜Ù ÝÃÚúžÝå˜Ùé—‰Á’™¼�F£Ž‚¯†((€5€{hxQŒuéØtÉÃsLl"=l"Rè!…„Uñ“½C.idjþCçAׯ_*+Q_®‚ÛM-_ HsŒ,à€'MJÕë%Ž�XðÚ]Ñ»w| OY£  žâÝÓÒÇ  ƒ|V.¿sEéû·&ÔJŒ8›Î-xëD•pM²p>T?_á*–iæÁmœªbõ¢{|¶ªxD„ ß=?„•eÙpX¨ÞÓ \!ô…€PHÜ3ÉYŒ8„ àžk@sWûJò‹�~—ãÈâ³6B£­Q¡cIœoÜÒYõz>'ßDºÀ¿� ¸ÿBa{ŸMyÀ1¦"¢cW„ñÙ½0, òþì+Á�à¡ú!…M'S½á™oµÊ50ó?“ ¡6ç¨äi]Œ%¸ÚŸ  øùU5ÍÅ9Ò¯YX `;áßo†C¹$–™�Æ/Z²vKú c™¡_ƒ!-Yζòv8–YЇ⽠„÷ëË �¡eê2–:ø_ÿÝkþçA®$LØ Ö0a„·ÉR†y|¿knùŸýΤEùz>£ó’"åx/¯Áùè1^ÞѦ¢© ¼¡‚‘�?œƒVøÁ2¼»wùÀ?µ¿Íýeb+ÒÙIV.¸BOuËj@÷÷\ä/d!.„ÇÌ‚Hq §e¥G!L³Fþüý¢éS}¤Ðc+ôÕÅö“B_Pè5)bÈeƒæàß9(]Ø÷Á§H*Ÿ±(€A~@q5%(O ^{Eõ•Öë]\Ø‘ÅëKmÞ¼âÁ�8,õ§gDV)"ZÓ%Ù…š'ÛփƒæXGø|}¾ LB¼­&äœÎ]½{o€û $Œ<@ïWæTÈMR¡Ç·“×cžqn9ï ù�ŸA ø–|TGÜ›…¿|o ²dQ¼žÈ Íò½ç>³#MäH‹Z‹2 E®ƒ|VO*SdX£OÄõ0@v£áL�ï‹YÅRå�ü…¨’š�8±Ç_P€OÉÍ÷‡P0É ¢X©As*dN…Â?˜O@\REh®äj8Äy´;C¡Š 0>µ¨K,j_I xñO/1mG€ “|óJ:.?š¥Co€•ˆ¿�3@2‘5ö[ÈÔ´2�â¾?—ÿO†n�y=zt·LEùa…@ùŽ,Aoÿûáy€'æy�ŠâI~²dQì¯Ç$”Í‘A°Ø‘ÜÆ^G1hòy=v#2ˆØVÇÃÒÌS%�-NHRï柳÷&'§Ùy�i|±é=·ïƒy$ ƒO҃⠈âõ©t(4ê0[¡/ßœ“Íò.:ï ùž¡‘Ü_Rqs6`�ŒÁ¶€ÛÅëÉ "¸¤ÄEAK‘A G#x:Tø¢ÀëÍÖq=�éÌ Å꜂7¤Ÿú»•9ˆÁ—cedMÒ­x†]b)2ˆñQÿ@!¸C!EMsÕšÿx�7>ÉüaþÛÛÝÝ$dñõ¡EÝÅ¢ˆ 4¥.–D ô}i’ÒTÝÅ ò¾G” ],*ð’Ø]¬÷2)ƒ(AÁð¨Í§5ÖRosñI(l7¯ŠSQˆZaJ¡Ð—C¡\_*§÷žü7>‰ö­¯óÿÀøÄòÍ’8† TZY÷ÚMÕ×—öbÑrt¾i–dEgœOD}#ÀT£kæ�ýÕ­‚Ϫ˜•e€,þB±dK1Iw �TÈü …Ñü²`ùôy‘ Êýð ’c ›²ŠyÊÑÈDEa�sîŠêýõh[a..¹Øi’Eúä11v kzïâ T‹ì^_<¶ò©>Í„<þy-?Ô/ót~?‘V•ô¬ºžnã-Ôñn¼Ž"­Xƪ�È|ù+4_=É4ãÑóCð©½aˆê<‚ ‰k+dPhxš•v¼Œ19ÆæÆ¦tÇyÍ•ü»2°Þ/ïÉ o6ŸÂò ¨Eå娇E æà¨¬ä欢îbùïãkÿ^",€•Ì;Uª/+]‰Ì® ùö¬8_nd-²°q^,ÓN ´FH +BOŒ¨‰ýŠ»Ù«î�¯—XPÈ>RÈl…¾HaIF€ô½i¸_Þ�¾UgÉÅnYñ«½èãýxXpMÂò™çË8ÿ@•%C³i /ÑçÝe_$Mo6á çA0êÇW=Jßµýg"s>,C¢"ì 8_¯ú¨™ þù w3-!0Vúçƒo“ãE··TÍlè,± ¾¨Fy ñý¡�\\!8)ì"á\ÀÖÇß?ï ùøaô…†•Û*,ßcò„2—†7wìøúâ@…KA3;h¨ËA3ïã6çÁÇ5Ç–­m)©È #8hÔÇï¬GæÀÏ(ÔøGahÎûU ܤGs÷p7høÛ<[5«†éÑÜ=ÜMZþµf¦™]£Gs×pW‰ùkå••e›{ôhî®ñ®ÇÛÇÓ54ôßÑ\sý÷A4×\WYoÙ;C„� ІUœ]É ph4 \ƒ3`QznÀzHR×6cw»¦³ùMÞs/kÆíˆýû²Ð‚ãôƒà8;,�•Øû{Wrˆ¡ðÞÇ•ȃà8y'‚ãäAp\À<Ž»åA¯m§¦-t«ÕUõùÆÏï·ÝZàÖMºM¨4î»eY­­q5wÆ~wÿÅ�ÎãßéÒèO3çAÞ!<ÛC÷oö%ÞßçûA$òé~¥ypï<Èf¬k*w§åûAî\óT?ˆÒ<¸÷Žu9Z¿E9ê‰~ùFž½«µ" ¢îøÔõ£(&*Š�ŠÝÝÝÝ­ØÝÝÝ�ÝÝÝÝÝÝÝXˆ(‚sïÙïèê]1À`øß;3÷­óÿß¹skÿññ;ùX·­h±'’hb7þ¹Ý£ÆçÎŽû…ßš;o®ª I=$lÑb!Ì;ÃE]èÔÙ;œ\µs}'Þ˜¹ötýœãc{ÀŒ…ˆí%B‰ý_†é<Oß±P’$Iî? »“esBî�ÿô:!™Åx÷©}Ç6ÌCïßé©R"m³äDÕæ8Ž˜×«¦ Ææ9Šãoͧʸ¹Gˆœ)³m‹h<ïŸheiþÛíËÖt‡äÔ€Wÿò��»i�s§J+�„ÆSƒ?_v@ãyW”b]fnÒÑÚ*Bxt„¶ŠðSûM©2:ÈæïxÞÁçfî…1-ZTMN•[ðË]÷¢Vö,&‹@ô¤T.æŒ��¶ü^óÌÎÇr%÷Ô¡kH£ ,‰ê0+¸ä%W^%ôCAf%¶rõZâ9prŸ¢£Y‘0º£ÄÆïðFûùKfÐÉ¿n s6·4±‚¾Š�$B "AJõÔÇßóyxH½ØúW9 ®°MÈÎÞ-DíÞD}Д-l1�¯·f?¬2t�Сcð M1î©Z’;,§Iè↰+ô¡¸Ó …öÒáJõ zÌáAa>\Í'ä{Թ訬a!šÆÜ]¸.u©H©ïŽàûÏðý�æ»uá\[V–.Ó]�kMKË: ±jÍÖ=¹j¯LˆõÞIΖüW;[§“…*ƨB¶Ž�8B¸>‹Ði?®†F3²³EÿóÏ;øÜ‹{ãNš4-³ÒøViÒ¤y KuGí;f)È€»-^:éªXLRkÙÆœoÚÏ8Þ²_ë@·ñœƒDË�>ص-3R�ýE'}ƒ*gÍJ™ ƒ‹@¢¢0”eÝ[x Ž#utˆx6Ò¾ãÐ(üéVbK=?„�–�cŽrÁ=µâ‰¦‰Eùa1\�uÒµŠ§J�àr4„è£[J’ #«„êÍ·ã‰ôIC6¹Ö�Lä0EÄúRUh‡!ž×õeÔÇ£—Ît…›~•ö•´Ü­… ²Ë$Á†ö¡¥"<ñ™ ו·Ë_³�és37·�BpÈãGtì¬âé²PMÃõ r’El;Ï(¢ÇF;YkM�¬6(éXšÈ �U¬oǃ5"ô¾q"ºÛ¤‚è»Ôº“æ !Ö𡹀eÕ¨¹I2è­Iûr¬“þ…F¡áçE"´MÍmšöWÝ>7r³ "|R¯ GV¯ÖN mÁF¢c1\OWˆu:¢·\&ŠhäÍzÐÐù,nÚÁõ$A,Î�àÿkò½HDŸË@Û©K¿WÌ&BÕsùËb$µ\ç ÚŸç+=QOÉŸ’1ma£‡DHˆPÚ�!ÊýoøÝûüמ‰ ý{é�•¡˜å9U\b‹ázœ ª@€£ ð’þ)}hI˵b¹öA,§nEø —ÐzÛJc7ÕP’BÇÙÃ�x}ñô­.«Wgµ€:…¡?§Æ²�hé[ñ´ m¸~²Ã9Ya1"$D„ѾV/J�ûÏÿò}þ]þ2Ð`œØaG鶘'é<ªÖª2ã¨ÌEÿéçApçIÏWžuÀµ¿:Qz±0`1]Dx;® GÁоãLRØ%û îx¢Q ÍÇfå5" ð°Ï?Qúg$ˆgådxÙÕåç1ÖÚKk^N/^1$A¤‚|±ÌëÞ©)¡¸Ž0‹¡öOü¬§©B¼ý÷Œ"|îâ?;ÄÂj~g78ÂsƒÅ )_î­gÊhËó‘Ãzô幓> =°ê¨qûí@v&ÿ‘!V¢¥¡úåûzo¤Ì›ú˜¼#AÖbÅ+YÀPA~:ÂÄ(ZÉ>þ-ÎÃ뮎pÌä×MdׄY,A5 çé1éP[èâo˳óÌyx�}J’C8iZ?(Õ±PHÏçAh¯Z"%g€ßº—A�åÇ…'»�Œ1º1�ïǾ`¿Ë]CÄ<ßð)+'_$û$½~I –Ú=ß™¤[˜¤[N‚˜Ÿq"´ƒ#$DX€‚ú Y¢ ܦðÔÂŒ©YþŽç|nä?´ÌËØ^­É¤ Š]R,¶X¾q=,QÉ9,Œ¹Ú(žD™Û—´�2L’0÷z$ÂPÚ�*…�›Ž±‘ˆ.UFÕš©B†e· ²)(9fF¦ºŠ×oû-KŠ·64Ça@�¦À1kÌçËôª¥{’n^æu"$�«p|Rçù+Æ>÷æÞC,Ýñ jõ&…›aIJÈmq#ovèu]$‚h—$$ùüUÇÒNóö3¼ž‰ÐƒÏaU{lº’@ññ¹Ó–§¾Á­�1¢\ÿ@@¥ÀT1-g¾OèªøÌ«»�nª•;ApÅ!¹"$‰méã¿Ãä­êu“D ó�5{Æ�¹£‹¡ãÃr 5 ö­¨ù>£1oGÍwL½Ùýƒ7Û–së¶vªoü2H` Ñ+§Áö#¦kxGh¹#ôÓá_…õ—�¿ÿ#œ×«ZþMñøü¯á>„jäwñÙ»C#„� €¢\”A ô@ÌPšrH4uÐIDL¾xß=·†9nçä}�9ßÏé'Ç53g¬_—éãqþ$ïƒÌùt{¼î¡y¸å ÌU—faN95 sÌ’¼¼Å�SŒ¹lI‹%îÛ3—=bgsÉ’$Ùa¶"­f„Ù>ˆTi0³}fû ÌöA˜ý‹.uêÜ¿g.yÄN5æ’%Ùa¶Âì;–$©ÓˆÝ¿g.Y’}fû Ò?û ÌöA˜÷wiæ”SÃð·};$@Ö¿5�»[ ³$ff+Kzóaöa¶±¤dÂñ±Ü‚×mIEND®B`‚lukeed-kleur-6c7ac76/shots/logo.png000066400000000000000000000260271425612514100173430ustar00rootroot00000000000000‰PNG  IHDR¶^†¬slúPLTEÿÿÿ”Ø-2šðÌ]èÿkkÿ©M„^÷Lnõ@ÀWÖ3lèY ¹Ýúÿ¿¿ÿÒ¡;Ÿñÿ½wñ•cät›ÿËËÐhêöóÿäÛþŸ�ùÝ’ðíÄ÷ÓrëóÃÔÿÓÓÿÏÏå}¢õüöõÊÙüþÿÿæÊÿ²²ÿŒŒæ‚¥ÿppÜóº¸æsýÿüþûÿøØãÛâþ6œñ§àR—Ú2›Û9StöïËø¢ÞHàôÀó¢vúúÿèíþñôÿEÂ\Îcê½ßûÞ[‰ÀëÈ´äkªáWøûÿõøÿÖëý×Ëý±˜ûùþúàd�±ãf¯âa¬â\èøêJÄ`®¾ûÁÍüüþøPÆeòùÿA¢òóûææ÷ΤßL^|÷¹¢ûWwöîúðãöǶåoäéþúîý–uù~—øùýòÅÐü‰Å÷kˆ÷P©óI¦òãöæpÐ�žÜAˆcøÁöÑð֛ߧŒ¢ùòûóÙ†ïØñ±‰Ù—æ®ôÚóßÚò¶ÃêˆhÎzVÈk„œùeƒ÷n¸õöüíÖ|íßõãïúßíùÚìöþßæþÞïý\ÊpæóþìðþÁ®ü‘oø`±ôëøÖ‚Ö‘wÓ‡¾è~;ü¥‰ú‘Éøé÷Ó³ç¼�Û�bÌuüõÿêãþÅãûŒhøw¼öY®ôä¨óà™ñøÊ°|ÕŒÌçü”¨úë¾öÍí›ÿmmÕÝý´Úú™¬úÅí̕ݢòîÿǶüÑlëÔñÙÿОøèü«�úf´ôýìâËîÑÿãÅÿ¹¹ïêþÏÙýÒÄýâ òÖòÛºéÂÑï£Èì’¾Ëü¶Äû©ºûÜ�ð¢á­î{=ËÕýòÕú¡Ñùu�øp‹øé¸öè´õúØÅô¬„ëfßÕýößû¥¶úž°úš{ù›Îøy’øìp-ñÏùþôðöÐÝÔðªö¸—ÛÏý­×úÿøùîÉøûäìÝP�âØþüíñýæÚ»ÈüûßÐñ¶Ë÷Â¥ôÚúò½Ð«äµ©ã´ÕÇý¢³úªÖù§Ôù¦â±Ø=<ôvÌW–wÉáËœÞÁáµ³E¨«úþ_xvÖÑ8´WIu,«nŸ•AUåȬJ¢ä¨„`"½¥“½LÁg$dÆÜ„hU2« §½wsÚ‡}÷èe+~ÚkWÿ=@oGìnÙ�ÞÅéP”ˆ.#P‡ìât•dˆÃž†›Òæ5­ÝUmÞû½¸ÑÜ®ñb"ÄC¶5É^–âƒå ™A— ª’´ŒÃ‡l·ÄÙfÝ‚ƒ.ÙîмfaG=^̽ƴL�ÐW=Û»)Ü%ƒ2Ë¥Z’––´Ù®�³Íºݲݮ¼sT•—t?Ë^p‡�$*®PÎv=qbBæ<$Æ%-Cjñ#ÛMg»Ý8蘭¥sa}9uƒiŸ!Ô³]ԯö+™µ _²Ýg›uÚfÛ£³{îRš–ÑW êÙvù3lE—#nÛ‡ð'[ˆ³µü…ƒÎÙFùš•õ¸º¸"ûÉT4þPVÏvºËû°Å¶SÒþdû*ÄÙZpÒ;Û¥£ÚqsåhÓòF ýyȶ,ÙËð`†íùéÜÃöÂZâl}ÍöVœ´ÏÖ0Ê[Ûp‘™jZ6ž…öÔ³õã_�Šh¬0l Ìöí8Û¬8E Ûžp—T{¸sÑ�r¶7R˜§R'!š ÛB³}âl·{§HdÛcº[¸™–a³Ñœr¶S(Èmòaû  v Û8[¿³½ §¨dk­õä4Òþ`ê ô¦œíÒ †íiDë…a[p¶¿@œív�à�l�†•䴢Ѵh~ÔQ9Û» >”%:~(¢Õ§%-ƒñ/ÛŸãl³žÄ)BÙƼ¶>»}�)g»¾¿†í�¯‰Â³Ýâl·{ §Hek”/Ì�ñQèV’íd×lù?lop¶5~fûÄÙÊIE+[Ãh®Žr·ÊÙ®"o#.MÈœ™Fôµ=l¯ÅÏlO†8[i+D-[£üûwë!Û Â!©à‡í:aØú’í+q¶–ëD.[ÃXR�ÜŠ Óò"ºRÎv8ùz/!5QÙÃV·l8²Pý‘íÕB�myC]S5r#MKűhJ9ÛyºYaØ.MZ×øœíûp¶ûS¸à³€ ÌÙ–¤êÛÛª—Uu·®i6¼*ý°�s§¢'Õl‡�§:ù°=®Ѷÿ†mœm Ùžƒ ôÙþO¦mek“áIk ©7LË4M¿ñB5Û)äévù°�‰h’=lŸÂïl¿€8[ù!)�²µÌÚs”—t§g�oZ6œ‚ŽT³]àï°�Œ¨lNÒr=¾g{ÄÙÊIi—-@õ¨£/óê‘ÉŒ6-÷£#Õl¯ÏsØŸ�¹‰ù°õ-Û? ζÇ7´ÌR­¥†»ÎYÈ\©óm 3úÎvxᇤêŽó>lÙÃvþgû2ÄÙöø�¦Ù™îfÃUs2/š– RÍv‘�ÃvÐ͈fÃÖÇl·Bœm�Çè›-d¾s·¡™oMË4 ›WÍvy˜˜�š¨0lýÉv ÄÙö8�ÎÙBje“á¢TÞíŽ/PF;ªÙ®CÝLù°= ‰ë“–9e�d»âlKJîE¤w¶�êvÛ¸ mH̵çígèF’í@·lk}¶—º ÛÓfH¶› ÎV~HJ÷l¡}‰Û¾mGâbÓҨݩ ÕlÓ¾ ÛÛ]{¡° }Ív3ÄÙ–”܉Hÿl¡£Éå c½ËÝÛkÐŒb¶CP69!õ¢šÅIË|ʈ³ÍqH*Ù’Yèrÿ6ƒ¨r˜iy½(f»8<Ã6�l_âls¼·+ ÙBGCîóR)—»@š½­@1Û(ª;3!sâDOÙÃvq¶�fûÑÈ–öyF.­Ñù3ÙC¶µÂ!©Â‡í] ÃÖ¿lßâlKJÎF""Ù’eäÒ�¨²Ñ´èõ’ÅlÇ¡f`BêiD5S„aëw¶/q¶%%!ŠL¶PUjÈ•/Ëý ß4­ž)PÌvJ†Ê‡íHܽcØF*Ûcö+Ðïdû0ÑÉ–ê\·y‚ÔhÓò:QÌv*Ò Ãv°0lýÏöèïlÛ½`þg{ ¢(eK[³!7Ñ ÓR¡ÓÍ[Ålסâù°½Q­=lÿ!Àlâls’Ò*ÛJܵ7ro!¯ßGÅlk¶i{Ø.%Èl÷…8Û’’7‘Ð+[sÃEsqSßé}ÞžZaZ4úf)Ålk ¶ç!ñ�ý^°²@³ý âls¼·K³l{L}™yÞçíýÚÝRËvÞ¥/HÈŒ¹ Ñ*{Ø®#ÐlO†eûÕ1 >ò1Ûs�Ð/[ÓvÑYê×Û%æÚ—ÛèB-ÛŪÃV$¶C’–m›í+žlOG‰�ÙÞ‚„ŽÙšfѧ’ˬfCjYÎ/„Ûˆ.$Ùž”;ÛxvRBj9¢tËŽa»3eûkѲ½ =³í1~69´52M)œ*íË­6ïÏô�íµÂ!©ü‡íùHŒ³‡í„ ³}“í§EËö$´Í¶gä‹\u©×O“¿5-/¡ µlÇ1l»ìa»š�)Û?)Z¶!¡q¶¦yÍYH-+7$JÛµ_·jÙþSà°½Ñp{Ø~MàÙ~¡ÉöóâeûZgkž…\·üÐ…ö÷nÕ²\ذ}‰a6–í}–lÜ\¼l�FBël+Èeº!Ó�Ó±f–&G¥Ô²]�'CÇȇmZiØúŸí–l� hÙÞŠŒÖÙN#—úfC¢ ÁFÓòZ8O)ÛZ¼HŸïý�˜c…_fû2„%ÛÊ—íd´Ê6eö¶‘œª¥óvÏ\/ákÔãÛWÕ²­Á‹gR'¹ Ûè�l·BH²ýýèâeû(2Zg;@eÞv┚fZ.BJÙ^ˆ—+ Û° 2Û-’l£xÙ^†ŒÖÙ>ˆ‹5ÞÖíë:ÝRÊv1Ü$¶¤­·ÏLNèŸl×BH²=¦ˆÙÞ‚ŒÖÙ>�‹¶rC4§+Í,-Þ-â!ÛÉZ|¶«“YcéŸl7A8²ý˜"fû$2Zgûnz;â¸A£¥”²�Ÿÿ°ˆhÂ�ÂëÀ‚Ív3„#Û_‹™íÈh�í¸É4{ºwûœi†”²—÷°½ÁeضÐ_ÙáÈö£bf{2Ze{ŠÙÛl\UÕ:LVÊv[¾ÃöÌ:D?ØÃvxeû*ŠlÏ¥˜ÙˆŒÖÙVbQ:t1 §©¦e<á§”í`Õg;~&¢uö1»Øé²ý»˜Ù^‡”ÖÙÒ‡jCÔ�ÂáYÓÒ˜"ô”²›ç°�Œ¨L¶�gû6†lÜTÌl¯FJçl‡A—Û*Mmž'PÊöZÜ]2(!s;Kía›ê¿l_Â�í~3ÛHéœíKôe™!Z¢ñgÉJÙ–å5l�«C´í¿a»óe{XQ³})�³�ŠEñÌEi‡çMËhBO%Û ý¶“Äa|¶¿!Èö÷£‹šíeHéœíýô©Ã­Äa¶6�yÈvRÒ6WËR•Íï(ŸíÏ@²ý�¢fûRZe›1{y�¾uz¹u«Ík3U²mñmØÎ·`º_³Ý øÙ¾[ÜlŸDJçl½dö¡!(¯×öayI¶—çÊv>.Fœ˜�¹´Ñ"{ØÖÒ¯ÙþPôl?¦¸Ù¾†”ÎÙŽ¤oõ冠JÛƒR*Ù>¤ð¼½mпìÝWHQÇñ//”…e<È^Ùeï½·ì½"›ì½WVv6e²C(#3;›ì=#Ô5Šÿ9ü/òwðy%yùâçž{Ï@¤þ…Ä…B¿%Û|æÙ>Ã6Ûi8•m‰/³]„ zÔ<Øq'ÛÛÔ°�Ÿíól/`›m~œBÎVUYÍ[·õE¶ñ‡‹“íf¼&¹‡m&º&ŽôÌüOf[L³m‡[ÈÙæG¡xRŸm’(2Ÿ?\œl;ĶMÃö÷e{À:Û×`šmcÜζ*í¥òä6N¶­ñiè¶£‘úWú4lÿÉl^Ól'àp¶"2õ{@ùÊîDçϦÈvÓwImIàt©ÌTñß[¿-ÛÆÙ&L³-�[ÀÙG¥ºâ…qgfŒl+Ŷ ¿9l ²�`œíMÀ4Ûº¸œm'tZÊq[œ¯äN©ÂŸ-F¶Cã ÛÛ6ñ†í$¤Ö‡m,²Ý`›mÓlïàp¶•´�€’zN*F¶cb Û-ø‡íL²½`›í)ÓlSâp¶ÛÐ$³=èK@1²]†Ëh÷°-ŠÃ”�öŒM¶WL³½HÄ2Ûõ¸œí~xܶ÷\N�ûÿÂ…7[ùYÔ?;l‹|¶­±Év-€i¶Ï‰Xf›· ²-øE¶�´çGù®ðÎ-F¶›qÈä¶µ�*~¶FÙž0ÍöÃlgàp¶ùáÿ“ªè U¶þ;ñN'pZˆ”¹ç§ak•íyËl ±Ìö(áf›­û …êžðwóGSg[h“~Ø–ÃaYâÈÔ2fÙ1Ìö5Ël'àn¶}Кî{$_&¸ÊÍ‘m-g¶“‘ªÖvVÛ¶ÒÒÏÃÖ*ÛƒD ³½LÄ2ÛÒx„›í^´†(^¹mñéV¡?š6Û®Þa+5@ªXíÓ@þw³MËlGàn¶½ÑJ/_•_칞z 4E¶Ä?m|ØvÅ.ÛDì²}ÇG†ÙŽÇ#Ülç£&/º'Î[q5�&[Ï?mº‡mùÌH¿¶6Ùî"b�­8Øh—m)<ÂÍvüøƒÛ=|e~ǤtÙ.ýÉa»îã°íð¯f›�O ³M‰O°ÙnGm–<&åɶ 4U¶q—À)/R}1l-²}BÄ,Ût|b˜ír|‚Ív7jk¾ÿÆí‘O/þÑ4Ù:/üèâ®v+Rú6bØZdû˜ˆU¶/ ²Í‚O°ÙfC­ï÷¿w÷Óý$4E¶ýë# È嬶‚bØZe›ŒˆU¶ÏùÌ.Û‘x›ípÔfÊCÉa¾K ÈÖ¥j÷Å!5ýöPˆXeûˆˆU¶YùÌ.ÛTx›mzÔÚÿþ®ÊŸÎpüÑ´Ùþü°� ³ló1ʶ0‚A¶«ñ )Ûáž[2ãJîû/eÛÝ]mÚˆ·u�²=@Ä(ÛgÙÖÅ+Ôl[ðKÿ¶Ýñ÷fë¶Å2#íLš–OþÍl/#d;¯P³m‚ÞL™m˜Ÿ\�—müaÛA[«lϱÉö‚E¶ãñ 5ÛNüÌÿ$·ÿkÿ'Y;l3"uî%†í¿™íu‹lÏâj¶GÐ%yžÛîå�+ÛøÃv¬cØZe{ƒˆA¶â`£Y¶Óð 5ÛÊèÍú~¶Kþ–ãÊa[é�kØZe;‡ˆI¶iL²M�W¨ÙVágÎ$ óÓ�Žl'ñ-U‹¹‡í¤U…> ÛnÙ¾$b’í[‹lÛáj¶‹Ð«!~ésa^ÞU!n¶=8uÇ?lß Xd»ŸˆE¶/L²‰_HÙð|.þu"Ó=ß7¿Ë-n¶ÝÕŽÃanâÈ\“l¯±Èö9‚I¶©ð 5Û¨•T|”¦Ï§ÅüG‹™mM÷°ÍQé–gØZe{…ˆE¶YL²]�_ ÙæFo±Ìv_ÉÄÅÔñ²ÍcØvó [³l×1ȶ0‚M¶uñ 4Û>è“ww¥çKÅÃør£+ÛØÃ¶ RÚ¡‰#·Œ²=IÄ Ûg6Ù®À/Ðl÷þÔ!©–|eðçÅüG‹•mÞÃvŒoØše{žˆA¶—l²Ýˆ_ Ùöþ©Ó}}÷Rçç�æÍV?lkWEšìÿ&ºU¶¿)ÛWFÙÂ/Ðl— –>©ü¸…ç :üÙbd›9ú¹BÎ�ø‡í&«l1Èö:‚Q¶Óð 4Û¨ÍK(,ó�”7[ý°=�ØÞFú粕ͲM�_ Ù^Eí˜âùO“ ¾·êËV?l3á¶cq°ÊöÂïÉ6 ‚Q¶íÀ/ÐlêpÙ‹‡ùØÖ•íè8Ã6OÓØÃÖ(Û]¿'ÛÔFÙ6¿@³Íö3Óv”ïâÜ üÙÜÙꇭë'÷ÿ8lWáò¯eû" ‚Q¶©À/¤l9oÉŒ?m›ó• ŸÕ?›6Û­ œ¶ •™*®± ²}‚ð[²}Ž`•mið 4Ûô?3m“úÉÎlõö!]ÃÖ ÛÇ¿%Û¬VÙÖ¿0³­ç­=aP˜¯íi³­ÙV?l7+†­E¶É~G¶‘¬²]~af»ïgÞ#h‰ç¤ó‡Se›¹¼{ØNBj])q¤VÙ>BøÙ>C²Êöø…™m´š+¦mÁ@þGÊ™­vØ.Ä?lwâa–m>„ß‘í$«l/�_˜ÙÎG)} ™í<¾R%Q$wqþpšl¸«-ŠÃ”Ä‘6xYe{á7d{™ŸtêzäÔ¯Èv=ø…™í]”¦Ëj“¦ç+óƒøþ›.Û~mõ7bI©V�-ÛŸ–Æ{}ülóƒ_˜Ùn׿ý#Ì”Ó6ˆO[è²õ ÛZ¦Ã6~¶gø—³�Á·„™m3t†eWHÊ´UdcØfîùýaû?[³ló-af»H}�ˆ�T,Ø«§íþÖž;Û�ša[‡eŠak–í "ÿp¶ø–0³-ðãÙ¶çk½yjëÎöG‡íRͰ5Ëvÿr¶¥ù–0³-®}ú£øäâa|GJ“m¹N �:WKYÊ·˜eû€9Û|K�ÙÖCePRYm+¾Ö,�É@±og»0Æ?‘éªù�Y¶ûø—³Ï·„”íà˜€›˜P:Æ×:…ñŠü÷³­•3�[2·I鈟]¶×ø—³-Å·™­.±!Že›]œGÎ_ïÓ3¥?Ÿ+[1l•�¨ß+qd3~fÙ^à_Î6%ßd¶�”ïÇKíñ‘ àßÈßζh¯¶5qèVIñmd£l×ð/g»œo 2Û%ʯšKCøZ“`þÙŸ­¶ò"ÿ)©^à)©“üËÙfá[‚̶2ßW½FBi ¾³Í€;[9l¥†¸ìLéY³lÏùw³É7™í6ÝI i:¾7äÓ¶Mó$ø¶­à¿¯«+fÙù‡³=Ê7™íÕ;Ò(|ç‘—_¶rØJÝqH;Uñ­Uƒlùë²�-YÉW&üþlˆßÕS¾rèWd;˜ïV#¡æ¨»Ã¸Eä{Ùn‘? úþ«%ެÃí¶ïÙ;Ó˜¸Ê( ¿Þϸ¤‰Q‹‚šè¸ÄvÔZ©R—ë®\p)¨*uE‰±¢bEÀ­¸@)`*.QÄ€ ˜¸ ¢R•ºÄ½Á=6ƨqù£ÆÄD�¹$–sÎÌæ»—Üë<ÿ¦m žù¶sÎkUÛ‘ÔëÚ ï%ÉO½ø„¶%éµU€‹´: +è )VÛx|Þ]ä`«-qÄ%‰Á�']ÿµ} ¦m·!`Ëü?ÛÖ™é4`G»Ú"mRZPŠAþÇÀ4ÿˆÚ’ƒ­ÈQ%`¸[lë»¶/�à…¶{ï•)ûñÚÊ‚¢¼¶�ðúeÃ4¾##×õÚØáX  ò Úž³…ŽyH2ââö(áÖöÁ·Ì”§ÓÓv½!´csÊɺæ9të>Ši Ó/½¶Êp«ØƒívM˜Î¡ME“N[z°•y Y•㣠̚¶¿€`A[ŠßÚöB6ç1ÿfÒÈe¹˜Æ�të®×V—’ÙXíp¼‰]×âõGÒ–le‚áò›Å*ÇÙÒög$›¶y†°A¸ü™€oÐg©ð_&•™h{?’QÚåpTS7 R I[æ`+sà�`¸þ$)Od¶´ÝqB§íCX€Íéð¿¨ÁLgüÖ}çL´} IXÒê°¬ƒÔûó‚§í<^Ѓ…?¾IZæOav´ý ¦í˜!¬ÇæD}%@‘™N�p¿=˜‰¶ÏC&²ÒaYÂþÁºFæµrlï�áæƒáG¡Êq¶´=qB§m…I½°Uú6”Fþ¥ò„"�ò™kûêóKS�j¤Ô”‚pnpmEmåÖ�„F’ŒÛÛ@˜mß@‚°iË,l1øö¤ßlÂ4ÞáNôÚ¾vò"$!B¬%ÅÈ$fo†£ÔGX6ÀKÎÝÃ1üǬ¶–µmH]�4ì[íþz�[Åž‰¶ËßZޤ,}Âá©åµ@H¥¥íRÅ£|�|;[j¶´ý B§íhêz‹!¿£»hµE„÷„^[=�]OõÎT5²B[º¾CX‹oÃ3n•ãõ ø¯í7H:m»Òrýã-1©¶‘^oy mSµÃ³]1‘k§“«­Ü_rÂ,§ŸeffV[ËÚöJWÉô±¥¶¾¥çí\¡$¹öµ-®q¤>Û3oA€àµ•Óë„ëäãæ'›wNþÒmïCœði;fR~¾9HzÉ&CèÆ4šI7¡-mÈwÒ8Ø.XY#ÑV×X{«p�\ŽÛ·‰s~kû'„NÛ “ºu-¾>ÕBžp»½Ì¶¶¥k‰Ö(¯NåäŠýÁÖeß-x>Ãîn•ãÝ ø¬íëH:mñ«TÞH×¶ÚøAÌ„÷ŸfËÚW;5�aÙ"m5ÃÞšæÏ†œÁwØ% ø«í×H>m{ a\ºj†D‹R϶@-™Ý¬ÐV¿A¦”­å¦à䇈Újo‰ç ÿðT0Øê¯“PDù©í ø¢í®ÛÚaE³a Þy;iº!ôìï µ]Û�“Ýsm‹£ˆ¶ŠƒíY‚á#Å&›Feµµ¬- Ã$†¼Ú'·÷sK~…Xká¡¶eK�â6*HãU)jç"Ý|9ê‘^4Èom?v?‡VÛ†¡¿ 9;»ÞÂ*=†aDêEªÍñrµmÏÛn"f`ï�ym傉K… Œó�SDzÑh Ÿµýq«-¿ÜÆÀQ¸ÚݦöÁ"½†£b«­—Úæ¯Çý®µ¥ÒöxÎ뤀 Œç�¾�ü7$è¦íoûdÆê6Wù—/[v‚56U©EŸûhÛaS[Ê D¦ª,تG´¥M|ÕvxNƒáËDKb§z',Ѿ‹Ñ]f—“Ù¯–µ•G™Ÿ¼Œ.½¶gƒ2ß•ípœ}€é%W9>â«¶ºŸC¬í˜‘�·”ßW»úôÁ ¹ÊžÐígøÄkmËJéj{A ‡"«´=Rˆ7Ér¤× Ñ@þhûºû9ÄÚ¢ÇpÄ¢àù.±àvÛoü¡…Z´Bʲ¶”*yxÔ)8TÛyr›ûÍÇ€ �ô¢Ñ@>jûµû9ÌÚÆ[])¹(,¯MÜLídç:Šò>-Z&¯?ži›_,Ï¡ j �Z[wFyœÇ!1ÿxE¤�òOÛ/ÝÏaÖV’gî­îà2b�‘¾0¤A«Q‹Úæ·¾²’mÚaé�n³MKÛcîG/Î,Ò+B¢�<×öI÷s¨µEƒa©ƒÈPbÅ­]–ÉŠ;VdŒ®Ò"ÚBÛ µÍ_¹±hb{ù¾—Ãlƒ\Ùàtª­4èøÞc�„‘^4È7m?p?‡[Û †§2}�½“Ø*W8ÓŸ:×°Œƒð™Öœ‘¶Õ+æ”"Î+ì­T#çºo@í�—µe¶qžAR*"½h4�_ÚN-úáÖ݆'ÉèhŽŸ8;—s3±6Ba‹"°sŽrgܶø?VFªÙ& ¹©?/ È(´½ÔÕvwÔ‘^r4�OÚÂ%äÚ"fxÖ#9}Ãåÿª[»ºy"MuÇkçVÈ‹-2Ѷ¬umÛÃÅlÎ:‡c�ØJpP Ëíi+_'ŸªŽ²¯í!ïÅy ðÁ“ f¢íŸ%ø™ñŧq¾@ *‰L7RRØqôc僫W/kžèƒ’EF{‹ŒœN2ËJ¥mþmU+ªÚÞýaãœ5Å¥àYÁî¢#á|¼µ©mÉ r¤— d[[û"¬Ø²¶ö9|Û8Çjãî(=ð‚^“Æ×Ä2Z e/¨±Ìax%œ�·µ•¯“�L ”ÕÖ¦¶¨3¹QØFþa1@lýòD[lt¶k åã­Umq«â:™Feµµ©-bF aviÏ5ZRIä½Ñ­ÃÊP>ÞÚÕû¦éuÕan4PV[›ÚVô�¹ `“ »‰1@,k,ôJÛâ|‡aqoÚ>*k«¿N>-i4PV[ ÚÒ:JwÖ—L/äû¨Oà•¶¨rj–„ðñÖ¶¶˜§ˆô¢Ñ@Ym-j‹1Y¨† »d}UÖ éŽ·®m)›âÕÂÇ[ëÚ–%GzÉÑ@Ymmj‹I#R´> äõ‘0 »ÅÈ9j‹9ü ‹ð=ÞÚÔVéE£�²ÚÚÔ½F¦a ™232¹`ès·ÈðR[<ÁºÝã­BÛ{ÒÓw)"½h4PV[›Ú¢Î$¡§™í&›pÒß+¤þ”Ã[mW峃.B÷xë�¶¸ZéE£�²ÚÚÔ#& sëf.ntüW“„†(Ô·ÈöµÅ»ü ‹°=Þz¡-žUDzÑh ¬¶–´¥ÞRŠº+0Ú×÷›¤Ö¶ƒ¡£6nmm¼Öv ÛRP¶Ç[O´Å9ŠH/ ”ÕÖš¶tŸLÅH_Úº¹&)1ÖÚœJÒøã•¶XúÙã­7Ú–H%%É¢�²ÚÚÔ–fÍRÉzÛ¡':9JδºúÉAr°õN[¬å]„ëñV¡í• mµ×ÉóÀpù5n4PV[«Ú"ÏÕL¦ht2 c=d¡^~ÄÌŸ¨um—.¡‘t®Ç[ûÚê#½h4PV[«Úâ}ê-57V7–B¨ ã£ÄYýì› ÷Ŷµ]ºÿWoŸ{íÖg Âü ‹P=Þz¥-®PDzÑh ¬¶VµÅ&¢› nwÞ¦ PÚ7LÖ±Êê'ßttÆ­­Ý ö´]~íÖqNŽ€éb#øBõx{°m3ŽôzQQå¨ÒvO<9sm÷ÚÍXѳw>-QEaèB›–£Í A´ôª-$F¹B˜µp¡Qºè’ˆ°’W*ûC&TàJ‚‚ …ɲ6å@d��A–…$Á@´ ‚>Eä™�êœ3stνsïõý}€»ûÁ¹ç9ïû8†2–ͦFób-…X~u4•N.ÊD6 $3­ðYE[õÔµS¼è"Lá­{Ú⨬ÒK[5ÓV?O”µu�z´…™5¼ iCHb�[Õ¨Y[õE! o´½½CmûË+½äÕ@¤­^m�‚e¸N bLîu”Úv ]| Qx뢶8­PéÅW‘¶ZµeeWáÈ|)¦§ÚbN¼è"<á­.m«¯ôz\ª"m5k 3m¸‰c«[«_[õ‘‚‰ð„·®j‹M…J/¾ˆ´Õ¬-°7tÃOÊ­õT[ùHA{hÂ[­Úª_'O–­"m5k˦v\!gCÁZ¯µÅŒxÑEXÂ[—µm8)¯ô’W‘¶ºµe3²ú‰· ¢µf-´í/ºKx« íý*´Eÿy¥—¼ˆ´Õ®-ÛH¡+%W2Á=DöT[´‹]„$¼u[[L*ì`å«�H[ýÚ²�D!¥n?·]Õ[m1!^tŽðV·¶ê×É›e«�H[MÚòã²z°Ò‹�óœ�ê /¡FÚʺ3çÂÞº¯-^n§Òëg©ˆ´Õ¥-¿œ¢z¬¬�2ÔO3k¿¢FÚÊ»3»CÞ*h{§’¶*½øj ÒV¿¶ 3æÕ©°ci˜­ ™E­´•wg†"¼õBÛ†SÒJ/ù+Ç+¤­.myÖR;?+[Ñå0{÷nñ´k«Ð�9qaouh«¥Ò‹¯"mµi«>ö^ýBŒ wåµ¶ò‘‚ í‚ðÖmqUá:™¯"m]Ô0 鸱¬Üª�J¼g¿µ÷Ž£öÚþ×�Ù<Ó†äï¶ï ‚7ÚâˆB¥_ DÚòÚêÅŽ)ªÉ­®¡2‰Þb…m>ÐößîÌg7 ¦uŒ}m¤ AAAÛ‹ Új©ôâ«�H[N[ýØ…TÔ± )ñd6¿%ꋹÏ#ÀÚþÕ�Ù31‡^³?Û¡]${¦-îÊ+½äÕ@¤­Ú2ì±Ñt4—tâ ÊÄ'™Kgó‹&T1o±äõYøEÛRwfó`7Ä<b¿µ]Á¹Fö-/3NÀ|Ç@ iü²E#|Læ#ÿ0Èö­vBLÛól Aø„?Ý™=¿ a¹oKÚñÀ\EÄ®`ßžK× æú ;ðÓñ€  bŽÍ'öÖÄngà,›ûA� õ<;ìAA QŒj?ŸA�àÅ8;¿A� ÕÎi›AìjŠQíJ‚MoÙ¨Ï2‚S]ŒàŒúAÄoöà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUUU•öà@ÈÿµTUUUUUUUUUUUUUUUUUUUUUUUUUUú³‰ òŸIEND®B`‚lukeed-kleur-6c7ac76/test/000077500000000000000000000000001425612514100155055ustar00rootroot00000000000000lukeed-kleur-6c7ac76/test/colors.js000066400000000000000000000101061425612514100173420ustar00rootroot00000000000000import { test } from 'uvu'; import * as assert from 'uvu/assert'; import { ANSI, CODES } from './utils'; import * as kleur from '../colors.mjs'; test('kleur', () => { assert.type(kleur, 'object', 'exports an object'); assert.type(kleur.$, 'object', 'exports a "$" object'); assert.is(kleur.$.enabled, true, '~> colors enabled by default'); }); test('codes', () => { let k, tmp, val; for (k in CODES) { tmp = CODES[k]; val = kleur[k]('~foobar~'); assert.type(kleur[k], 'function', `is a function`); assert.is(kleur[k](), undefined, '~> returns immediately'); assert.type(val, 'string', 'returns a string value'); assert.is(val, ANSI(tmp[0]) + '~foobar~' + ANSI(tmp[1]), '~> matches expected'); } }); test('wrappings', () => { let { yellow, red, bold, cyan, bgRed, dim, italic, underline } = CODES; assert.is( kleur.red(kleur.bold('~foo~')), //~> kleur.red().bold(val) ANSI(red[0]) + ANSI(bold[0]) + '~foo~' + ANSI(bold[1]) + ANSI(red[1]) ); assert.is( kleur.bold(kleur.yellow(kleur.bgRed(kleur.italic('~foo~')))), //~> kleur.bold().yellow().bgRed().italic(val) ANSI(bold[0]) + ANSI(yellow[0]) + ANSI(bgRed[0]) + ANSI(italic[0]) + '~foo~' + ANSI(italic[1]) + ANSI(bgRed[1]) + ANSI(yellow[1]) + ANSI(bold[1]) ); assert.is( kleur.cyan(kleur.bold(kleur.underline('~foo~'))), //~> kleur.cyan().bold().underline('~foo~') ANSI(cyan[0]) + ANSI(bold[0]) + ANSI(underline[0]) + '~foo~' + ANSI(underline[1]) + ANSI(bold[1]) + ANSI(cyan[1]) ); assert.is( kleur.red(`foo ${kleur.yellow('bar')} baz`), ANSI(red[0]) + 'foo ' + ANSI(yellow[0]) + 'bar' + ANSI(yellow[1]) + ANSI(red[0]) + ' baz' + ANSI(red[1]) ); assert.is( kleur.bold(`foo ${kleur.red(kleur.dim('bar'))} baz`), ANSI(bold[0]) + 'foo ' + ANSI(red[0]) + ANSI(dim[0]) + 'bar' + ANSI(dim[1]) + ANSI(bold[0]) + ANSI(red[1]) + ' baz' + ANSI(bold[1]) ); assert.is( kleur.yellow(`foo ${kleur.red(kleur.bold('red'))} bar ${kleur.cyan('cyan')} baz`), ANSI(yellow[0]) + 'foo ' + ANSI(red[0]) + ANSI(bold[0]) + 'red' + ANSI(bold[1]) + ANSI(red[1]) + ANSI(yellow[0]) + ' bar ' + ANSI(cyan[0]) + 'cyan' + ANSI(cyan[1]) + ANSI(yellow[0]) + ' baz' + ANSI(yellow[1]) ); }); test('integer', () => { let { red, blue, italic } = CODES; assert.is( kleur.blue(-1), ANSI(blue[0]) + '-1' + ANSI(blue[1]), '~> negative' ); assert.is( kleur.blue(123), ANSI(blue[0]) + '123' + ANSI(blue[1]), '~> positive' ); assert.is( kleur.blue(0), ANSI(blue[0]) + '0' + ANSI(blue[1]), '~> zero' ); assert.is( kleur.red(kleur.italic(0)), //~> kleur.red().italic(0) ANSI(red[0]) + ANSI(italic[0]) + '0' + ANSI(italic[1]) + ANSI(red[1]), '~> zero (chain)' ); assert.is( kleur.italic(`${kleur.red(123)} ${kleur.blue(0)}`), ANSI(italic[0]) + ANSI(red[0]) + '123' + ANSI(red[1]) + ' ' + ANSI(blue[0]) + '0' + ANSI(blue[1]) + ANSI(italic[1]), '~> positive (chain w/ nested)' ); }); test('nullish', () => { assert.is(kleur.red(), undefined); assert.is(kleur.red(null), null); }); test('boolean', () => { let { red } = CODES; assert.is(kleur.red(false), ANSI(red[0]) + 'false' + ANSI(red[1])); assert.is(kleur.red(true), ANSI(red[0]) + 'true' + ANSI(red[1])); }); // test('multiline', () => { // let { blue, bold, red, italic } = CODES; // assert.is(c.blue('hello\nworld'), ANSI(blue[0]) + 'hello' + ANSI(blue[1]) + '\n' + ANSI(blue[0]) + 'world' + ANSI(blue[1]), '~> basic'); // assert.is(c.blue.bold('hello\nworld'), ANSI(bold[0]) + ANSI(blue[0]) + 'hello' + ANSI(blue[1]) + ANSI(bold[1]) + '\n' + ANSI(bold[0]) + ANSI(blue[0]) + 'world' + ANSI(blue[1]) + ANSI(bold[1]), '~> simple chain'); // assert.is(c.italic.bold(`${c.red('hello')}\n${c.blue('world')}`), ANSI(bold[0]) + ANSI(italic[0]) + ANSI(red[0]) + 'hello' + ANSI(red[1]) + ANSI(italic[1]) + ANSI(bold[1]) + '\n' + ANSI(bold[0]) + ANSI(italic[0]) + ANSI(blue[0]) + 'world' + ANSI(blue[1]) + ANSI(italic[1]) + ANSI(bold[1]), '~> chain w/ nested'); // }); test('toggle support', () => { let { red } = CODES; kleur.$.enabled = false; assert.is(kleur.red('foo'), 'foo'); kleur.$.enabled = true; assert.is(kleur.red('foo'), ANSI(red[0]) + 'foo' + ANSI(red[1])); }); test.run(); lukeed-kleur-6c7ac76/test/env.sh000077500000000000000000000051551425612514100166420ustar00rootroot00000000000000#!/usr/bin/env bash code=0 fail() { printf "\x1b[31m[FAIL]\x1b[39m %s\n" "$@" >&2 code=1 } colors() { printf "\x1b[33m[DEBUG]\x1b[39m \"%s\" :: %s \n" "$2" "$1" [ "$1" != "foo" ] || fail "$2" } nocolor() { printf "\x1b[33m[DEBUG]\x1b[39m \"%s\" :: %s \n" "$2" "$1" [[ "$1" =~ foo* ]] || fail "$2" } faketty() { script -qfc "$(printf "%q " "$@")" /dev/null } # process.stdout.isTTY = undefined; printf "\nprocess.stdout.isTTY = %s;\n" `node -p "process.stdout.isTTY"` nocolor `node -p "require('.').red('foo')"` "FORCE_COLOR=?" nocolor `FORCE_COLOR=0 node -p "require('.').red('foo')"` "FORCE_COLOR=0" nocolor `NODE_DISABLE_COLORS=1 node -p "require('.').red('foo')"` "NODE_DISABLE_COLORS=1" nocolor `NODE_DISABLE_COLORS=1 FORCE_COLOR=1 node -p "require('.').red('foo')"` "NODE_DISABLE_COLORS=1; FORCE_COLOR=1" nocolor `NO_COLOR=1 node -p "require('.').red('foo')"` "NO_COLOR=1" nocolor `NO_COLOR=1 FORCE_COLOR=1 node -p "require('.').red('foo')"` "NO_COLOR=1; FORCE_COLOR=1" nocolor `NO_COLOR= FORCE_COLOR=1 node -p "require('.').red('foo')"` "NO_COLOR=; FORCE_COLOR=1" colors `FORCE_COLOR=1 node -p "require('.').red('foo')"` "FORCE_COLOR=1" colors `FORCE_COLOR= node -p "require('.').red('foo')"` "FORCE_COLOR=" nocolor `TERM=dumb FORCE_COLOR=1 node -p "require('.').red('foo')"` "TERM=dumb; FORCE_COLOR=1" nocolor `TERM=dumb node -p "require('.').red('foo')"` "TERM=dumb" # process.stdout.isTTY = true; printf "\n(faketty) process.stdout.isTTY = %s;\n" `faketty node -p "process.stdout.isTTY"` colors `faketty node -p "require('.').red('foo')"` "FORCE_COLOR=?" colors `FORCE_COLOR=0 faketty node -p "require('.').red('foo')"` "FORCE_COLOR=0" nocolor `NODE_DISABLE_COLORS=1 faketty node -p "require('.').red('foo')"` "NODE_DISABLE_COLORS=1" nocolor `NODE_DISABLE_COLORS=1 FORCE_COLOR=1 faketty node -p "require('.').red('foo')"` "NODE_DISABLE_COLORS=1; FORCE_COLOR=1" nocolor `NO_COLOR=1 faketty node -p "require('.').red('foo')"` "NO_COLOR=1" nocolor `NO_COLOR=1 FORCE_COLOR=1 faketty node -p "require('.').red('foo')"` "NO_COLOR=1; FORCE_COLOR=1" nocolor `NO_COLOR= faketty node -p "require('.').red('foo')"` "NO_COLOR=" nocolor `NO_COLOR= FORCE_COLOR=1 faketty node -p "require('.').red('foo')"` "NO_COLOR=; FORCE_COLOR=1" nocolor `TERM=dumb FORCE_COLOR=1 faketty node -p "require('.').red('foo')"` "TERM=dumb; FORCE_COLOR=1" colors `FORCE_COLOR=1 faketty node -p "require('.').red('foo')"` "FORCE_COLOR=1" colors `FORCE_COLOR= faketty node -p "require('.').red('foo')"` "FORCE_COLOR=" nocolor `TERM=dumb node -r esm test/xyz.js` "TERM=dumb" if [ "$code" == "0" ]; then printf "\x1b[32m[PASS]\x1b[39m $.enabled updates correctly \n" fi exit $code lukeed-kleur-6c7ac76/test/index.js000066400000000000000000000141061425612514100171540ustar00rootroot00000000000000import { test } from 'uvu'; import * as assert from 'uvu/assert'; import { ANSI, CODES } from './utils'; import kleur from '../index.mjs'; test('kleur', () => { assert.type(kleur, 'object', 'exports an object'); assert.ok(kleur.enabled, 'colors enabled by default'); }); test('codes', () => { let k, tmp, val; for (k in CODES) { tmp = CODES[k]; val = kleur[k]('~foobar~'); assert.type(kleur[k], 'function', `is a function`); assert.type(kleur[k]().bold, 'function', '~> and is chainable'); assert.type(val, 'string', 'returns a string value'); assert.is(val, ANSI(tmp[0]) + '~foobar~' + ANSI(tmp[1]), '~> matches expected'); } }); test('chains', () => { let val = '~foobar~'; let { bold, underline, italic, bgRed, red, green, yellow } = CODES; assert.is(kleur.red().bold(val), ANSI(red[0]) + ANSI(bold[0]) + val + ANSI(red[1]) + ANSI(bold[1])); assert.is(kleur.bold().yellow().bgRed().italic(val), ANSI(bold[0]) + ANSI(yellow[0]) + ANSI(bgRed[0]) + ANSI(italic[0]) + val + ANSI(bold[1]) + ANSI(yellow[1]) + ANSI(bgRed[1]) + ANSI(italic[1])); assert.is(kleur.green().bold().underline(val), ANSI(green[0]) + ANSI(bold[0]) + ANSI(underline[0]) + val + ANSI(green[1]) + ANSI(bold[1]) + ANSI(underline[1])); }); test('nested', () => { let { yellow, red, bold, cyan, dim } = CODES; assert.is( kleur.red(`foo ${kleur.yellow('bar')} baz`), ANSI(red[0]) + 'foo ' + ANSI(yellow[0]) + 'bar' + ANSI(yellow[1]) + ANSI(red[0]) + ' baz' + ANSI(red[1]) ); assert.is( kleur.bold(`foo ${kleur.red().dim('bar')} baz`), ANSI(bold[0]) + 'foo ' + ANSI(red[0]) + ANSI(dim[0]) + 'bar' + ANSI(red[1]) + ANSI(dim[1]) + ANSI(bold[0]) + ' baz' + ANSI(bold[1]) ); assert.is( kleur.yellow(`foo ${kleur.red().bold('red')} bar ${kleur.cyan('cyan')} baz`), ANSI(yellow[0]) + 'foo ' + ANSI(red[0]) + ANSI(bold[0]) + 'red' + ANSI(red[1]) + ANSI(yellow[0]) + ANSI(bold[1]) + ' bar ' + ANSI(cyan[0]) + 'cyan' + ANSI(cyan[1]) + ANSI(yellow[0]) + ' baz' + ANSI(yellow[1]) ); }); test('integer', () => { let { red, blue, italic } = CODES; assert.is(kleur.blue(123), ANSI(blue[0]) + '123' + ANSI(blue[1]), '~> basic'); assert.is(kleur.red().italic(0), ANSI(red[0]) + ANSI(italic[0]) + '0' + ANSI(red[1]) + ANSI(italic[1]), '~> chain w/ 0'); assert.is(kleur.italic(`${kleur.red(123)} ${kleur.blue(0)}`), ANSI(italic[0]) + ANSI(red[0]) + '123' + ANSI(red[1]) + ' ' + ANSI(blue[0]) + '0' + ANSI(blue[1]) + ANSI(italic[1]), '~> chain w/ nested & 0'); assert.is(kleur.blue(-1), ANSI(blue[0]) + '-1' + ANSI(blue[1]), '~> basic w/ negatives'); }); // test('multiline', () => { // let { blue, bold, red, italic } = CODES; // assert.is(c.blue('hello\nworld'), ANSI(blue[0]) + 'hello' + ANSI(blue[1]) + '\n' + ANSI(blue[0]) + 'world' + ANSI(blue[1]), '~> basic'); // assert.is(c.blue.bold('hello\nworld'), ANSI(bold[0]) + ANSI(blue[0]) + 'hello' + ANSI(blue[1]) + ANSI(bold[1]) + '\n' + ANSI(bold[0]) + ANSI(blue[0]) + 'world' + ANSI(blue[1]) + ANSI(bold[1]), '~> simple chain'); // assert.is(c.italic.bold(`${c.red('hello')}\n${c.blue('world')}`), ANSI(bold[0]) + ANSI(italic[0]) + ANSI(red[0]) + 'hello' + ANSI(red[1]) + ANSI(italic[1]) + ANSI(bold[1]) + '\n' + ANSI(bold[0]) + ANSI(italic[0]) + ANSI(blue[0]) + 'world' + ANSI(blue[1]) + ANSI(italic[1]) + ANSI(bold[1]), '~> chain w/ nested'); // }); test('partial require', () => { let { red, bold, italic } = CODES; let r = kleur.red; let b = kleur.bold; let i = kleur.italic; assert.is(r('foo'), ANSI(red[0]) + 'foo' + ANSI(red[1]), '~> red()'); assert.is(b('bar'), ANSI(bold[0]) + 'bar' + ANSI(bold[1]), '~> bold()'); assert.is(i('baz'), ANSI(italic[0]) + 'baz' + ANSI(italic[1]), '~> italic()'); assert.is(r().bold().italic('foo'), ANSI(red[0]) + ANSI(bold[0]) + ANSI(italic[0]) + 'foo' + ANSI(red[1]) + ANSI(bold[1]) + ANSI(italic[1]), '~> red().bold().italic()'); assert.is(r().bold().italic('foo'), ANSI(red[0]) + ANSI(bold[0]) + ANSI(italic[0]) + 'foo' + ANSI(red[1]) + ANSI(bold[1]) + ANSI(italic[1]), '~> red().bold().italic() – repeat'); assert.is(b().italic().red('bar'), ANSI(bold[0]) + ANSI(italic[0]) + ANSI(red[0]) + 'bar' + ANSI(bold[1]) + ANSI(italic[1]) + ANSI(red[1]), '~> bold().italic().red()'); assert.is(b().italic().red('bar'), ANSI(bold[0]) + ANSI(italic[0]) + ANSI(red[0]) + 'bar' + ANSI(bold[1]) + ANSI(italic[1]) + ANSI(red[1]), '~> bold().italic().red() – repeat'); assert.is(i().red().bold('baz'), ANSI(italic[0]) + ANSI(red[0]) + ANSI(bold[0]) + 'baz' + ANSI(italic[1]) + ANSI(red[1]) + ANSI(bold[1]), '~> italic().red().bold()'); assert.is(i().red().bold('baz'), ANSI(italic[0]) + ANSI(red[0]) + ANSI(bold[0]) + 'baz' + ANSI(italic[1]) + ANSI(red[1]) + ANSI(bold[1]), '~> italic().red().bold() – repeat'); assert.is(r('foo'), ANSI(red[0]) + 'foo' + ANSI(red[1]), '~> red() – clean'); assert.is(b('bar'), ANSI(bold[0]) + 'bar' + ANSI(bold[1]), '~> bold() – clean'); assert.is(i('baz'), ANSI(italic[0]) + 'baz' + ANSI(italic[1]), '~> italic() – clean'); }); test('named chains', () => { let { red, bold, italic } = CODES; let foo = kleur.red().bold; let bar = kleur.bold().italic().red; assert.is(kleur.red('foo'), ANSI(red[0]) + 'foo' + ANSI(red[1]), '~> c.red() – clean'); assert.is(kleur.bold('bar'), ANSI(bold[0]) + 'bar' + ANSI(bold[1]), '~> c.bold() – clean'); assert.is(foo('foo'), ANSI(red[0]) + ANSI(bold[0]) + 'foo' + ANSI(red[1]) + ANSI(bold[1]), '~> foo()'); assert.is(foo('foo'), ANSI(red[0]) + ANSI(bold[0]) + 'foo' + ANSI(red[1]) + ANSI(bold[1]), '~> foo() – repeat'); assert.is(bar('bar'), ANSI(bold[0]) + ANSI(italic[0]) + ANSI(red[0]) + 'bar' + ANSI(bold[1]) + ANSI(italic[1]) + ANSI(red[1]), '~> bar()'); assert.is(bar('bar'), ANSI(bold[0]) + ANSI(italic[0]) + ANSI(red[0]) + 'bar' + ANSI(bold[1]) + ANSI(italic[1]) + ANSI(red[1]), '~> bar() – repeat'); assert.is(kleur.red('foo'), ANSI(red[0]) + 'foo' + ANSI(red[1]), '~> c.red() – clean'); assert.is(kleur.bold('bar'), ANSI(bold[0]) + 'bar' + ANSI(bold[1]), '~> c.bold() – clean'); }); test('disabled', () => { kleur.enabled = false; assert.is(kleur.red('foo'), 'foo', '~> raw text only'); assert.is(kleur.red().italic().bold('foobar'), 'foobar', '~> chaining okay'); }); test.run(); lukeed-kleur-6c7ac76/test/utils.js000066400000000000000000000011631425612514100172040ustar00rootroot00000000000000export const ANSI = x => `\x1b[${x}m`; export const CODES = { // modifiers reset: [0, 0], bold: [1, 22], dim: [2, 22], italic: [3, 23], underline: [4, 24], inverse: [7, 27], hidden: [8, 28], strikethrough: [9, 29], // colors black: [30, 39], red: [31, 39], green: [32, 39], yellow: [33, 39], blue: [34, 39], magenta: [35, 39], cyan: [36, 39], white: [37, 39], gray: [90, 39], grey: [90, 39], // background colors bgBlack: [40, 49], bgRed: [41, 49], bgGreen: [42, 49], bgYellow: [43, 49], bgBlue: [44, 49], bgMagenta: [45, 49], bgCyan: [46, 49], bgWhite: [47, 49], } lukeed-kleur-6c7ac76/test/xyz.js000066400000000000000000000001011425612514100166650ustar00rootroot00000000000000import kleur from '../index.mjs'; console.log(kleur.red('foo'));