Skip to content

kwhitley/itty-chroma

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


itty-chroma

Version Bundle Size Coverage Status Issues Discord


Easy, flexible styling in the browser console.

...for the rest of us (and only 500 bytes).

Example

// keep it simple
chroma.red.log('This will be red.')

// or play a little
chroma.log(
  chroma.green,                // set the color to green
  'This is green',
  '{ foo: 'bar' }',
  chroma.blue.underline.bold,  // now switch to blue
  'Now this is blue.',
)

image


Quick Start

Option 1: Import

import { chroma } from 'itty-chroma'

Option 2: Just copy this snippet:

let t=(e="",o)=>new Proxy((...t)=>{if(!t.length&&!e)return;let r,i=[e],n="%c",l=e.match(/pad|dec/);for(let e of t)e?.zq&&(e=e()),e?.[0]?.startsWith?.("%c")?(r=e[1].match(/pad|dec/),l&&(n=n.slice(0,-1)),l&&!r&&(n+="%c ",i.push("")),n+=e[0],i.push(...e.slice(1)),l=r):(n+="object"==typeof e?"%o ":"%s ",i.push(e));return o?console[o](n.trim(),...i):[n,...i]},{get(r,i){let n=r=>i=>t(e+(r?r+":"+i:i)+";",o);return"color"==i?n(i):"bold"==i?n("font-weight")(i):"italic"==i?n("font-style")(i):"underline"==i?n("text-decoration")(i):"strike"==i?n("text-decoration")("line-through"):"font"==i?n("font-family"):"size"==i?n("font-size"):"bg"==i?n("background"):"radius"==i?n("border-radius"):"padding"==i||"border"==i?n(i):"style"==i?n(""):"log"==i||"warn"==i||"error"==i?t(e,i):n("color")(i)}}),chroma=t();

Note: This will lose TypeScript support, but is great for adding to your browser console (via script extensions, etc).


How it Works

Chroma is just a passthrough for console, handling the style assembly, shorthand style props, and chaining. This means you can pass in any number of args, of any type. However, only non-objects (strings, numbers, etc) will be colored.

If used with log/warn/error, it will assemble and print the statement, just like console.log/warn/error. If you don't include log/warn/error, it will output a style token instead.

With that in mind:

1. Use chroma instead of console to print something

chroma.log('text') // console.log('text')
chroma.warn('text') // console.warn('text')
chroma.error('text') // console.error('text')

image

2. Add styles by chaining style properties

// call a segment directly, using .log
chroma.bold.red.log('This will be red.')

image

3. Or compose using chroma segments

chroma.log(
  chroma.bold.green,
  'This will be green.'
)

image

These can be saved for re-use:

const blue = chroma.bold.blue

chroma.log(
  blue,
  'This will be blue.'
)

image

They can also be saved with the .log as a custom logger:

const ittyLogger = chroma.bold.color("#f0c").log

ittyLogger('This will be itty-colored.')

image

4. Any valid CSS color name works (100% support)

chroma.salmon.log('This is salmon.')
chroma.cornflowerblue.log('This is cornflowerblue.')
chroma.cornFlowerBlue.log('Case does not matter here...')

image

5. All valid CSS works within properties that expect a value

chroma
  .color('rgba(255,0,100,0.4)')
  .log('This works just fine')

image

6. ...or use your own custom CSS with .style(css: string)

chroma
  .size('2em')
  .padding('0.5em')
  .style('text-transform:uppercase; text-shadow:0 0 0.5em magenta;')
  .log('So does this')

image

7. A style will continue until replaced, or cleared using chroma.clear

chroma.log(
  chroma.red('this will be red'),
  '...but so will this',
  chroma.clear,
  'back to unformatted text'
)

image

8. Example: Creating custom log functions

// we define a curried function to accept some args now, some later
const createLogger = (type = 'log', label, badge = 'grey', text = 'grey') =>
  (...args) =>
    chroma[type](
      chroma.bg(badge).white.bold.padding('2px 5px 1px').radius('0.2rem')(label),
      chroma.color(text).italic,
      ...args,
    )

// our loggers are partial executions
const info = createLogger('log', 'INFO', 'green')
const warning = createLogger('warn', 'WARNING', 'orange', 'brown')

// and we finally call them to log messages
info('This is just a helpful bit of info!')
warning('But this is a more serious warning text...')

image


Supported Properties

PROPERTY DESCRIPTION EXAMPLE(s)
.log once executed, will output to console.log chroma.log('hello')
.warn once executed, will output to console.warn chroma.warn('warning text')
.error once executed, will output to console.error chroma.error('error text')
.bold bold text chroma.bold('this is bold'), chroma.bold.red('this is bold and red')
.italic italicized text chroma.italic('this is italic')
.underline underlined text chroma.underline('text')
.strike text with a line through it chroma.strike('this text was removed')
.{colorName} sets text color, supports any valid CSS color name chroma.magenta, chroma.lightGreen
.color(value) sets font color, supports any valid CSS color chroma.color('white'), chroma.color('rgba(255,0,0,0.2)')
.font(value) sets font, supports any valid CSS font-family chroma.font('Georgia')
.size(value) sets font size chroma.size('0.8rem')
.bg(value) sets background, supports any valid CSS background chroma.bg('salmon')
.radius(value) sets border-radius (for badges) chroma.radius('4px')
.border(value) sets border style chroma.border('double 5px red')
.padding(value) sets padding chroma.padding('2px 5px')
.style(value) sets custom CSS, allowing any valid sequence chroma.style('text-transform:uppercase;text-shadow:0 0 0.5rem rgba(255,0,100,0.5)')
.none1 clears styling for subsequent arguments chroma.red('red text', chroma.clear, 'plain text')

About

Ultra-tiny powerful styling for browser consoles.

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

 
 
 

Contributors

Generated from kwhitley/itty-time