#!/usr/bin/env node import { program } from 'commander'; import tinycolor from 'tinycolor2'; program.command('gen ') .description('Generates multiple colors from a given color') .option('-a, --amount ', 'Amount of darken', 12.5) .option('-c, --complementary', 'Generate complementary colors instead of analogous') .action((color, options) => { const amount = options.amount; const primary = tinycolor(color); if (options.complementary) { complementary(primary, amount) } else { analogous(primary, amount); } }); program.parse(process.argv); function logColor(color, name) { const { r, g, b } = color.toRgb() console.log(`\x1b[48;2;${r};${g};${b}m ${color.toHexString()} \x1b[0m [${name.toUpperCase()}]`); } function analogous(primary, amount) { _primary(primary, amount); _separator(); const analogous = primary.analogous(12, 90); _secondary(analogous[2], amount); _separator(); _secondary(analogous[5], amount); _separator(); _secondary(analogous[8], amount); _separator(); _secondary(analogous[11], amount); } function complementary(primary, amount) { _primary(primary, amount); _separator(); const secondary = primary.complement(); _secondary(secondary, amount); } function _primary(color, amount) { logColor(color, 'primary'); const darkPrimary = color.clone().darken(amount); logColor(darkPrimary, 'dark primary'); const darkerPrimary = darkPrimary.clone().darken(amount); logColor(darkerPrimary, 'darker primary'); } function _secondary(color, amount) { logColor(color, 'secondary'); const darkSecondary = color.clone().darken(amount); logColor(darkSecondary, 'dark secondary'); const darkerSecondary = darkSecondary.clone().darken(amount); logColor(darkerSecondary, 'darker secondary'); } function _separator() { console.log('------------------------------'); }