Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@terrazzo/use-color

terrazzoapp175MIT0.1.4TypeScript support: included

React hook for memoizing and transforming any web-compatible color. Uses Culori.

color, color-module-4, culori, react, hooks

readme

@terrazzo/use-color

React hook for memoizing and transforming any web-compatible color. Only 12 kB (with full support for all web colorspaces!) thanks to Culori.

Setup

npm i @terrazzo/use-color
import useColor, { formatCSS } from "@terrazzo/use-color";

const [color, setColor] = useColor("color(srgb 0.0 0.3 1.0)");

// Reading

color.css; // color(srgb 0.0 0.3 1.0)
color.original; // { mode: "srgb", r: 0, g: 0.3, b: 1.0, alpha: 1 }
color.p3; // { mode: "p3", r: 0.1184, g: 0.2956, b: 0.9611 }
formatCSS(color.p3); // color(display-p3 0.1184 0.2956 0.9611)

// Setting color

setColor("color(display-p3 0.12 0.3 0.98)");
setColor({ mode: "p3", r: 0.12, g: 0.3, b: 0.98 });

// Adjusting color relatively (lighten by 10% via Oklab)

setColor({ ...color.original.oklab, l: color.oklab.l + 0.1 });

Reading color

The color is fully memoized, so it can be used in any useEffect() hooks. This uses Culori to convert colors, but only the CSS Color Module 4 colorspaces are loaded. Further, all the properties are getters that cache their output, so even if accessing a different format, work will never be redone. You have the following property available:

Property Type Description
css string CSS-compatible color using Color Module 4
original object Culori color object using the original mode of the color (tip: use color.original.mode to see the format)
a98 object Culori A98 color object
hsl object Culori HSL color object
hsv object Culori HSV color object
lrgb object Culori LinearRGB color object
lab object Culori CIELab color object (not to be confused with Oklab)
lch object Culori CIELCh color object (not to be confused with Oklch)
luv object Culori LUV color object
okhsl object Culori Okhsl color object
okhsv object Culori Okhsv color object
oklab object Culori Oklab color object
oklch object Culori Oklch color object
p3 object Culori P3 color object
prophotoRgb object Culori ProPhotoRGB color object
rec2020 object Culori Rec2020 color object
rgb object (sRGB) Culori RGB color object
srgb object (alias of rgb)
xyz object (alias of xyz65)
xyz50 object Culori Xyz50 color object
xyz65 object Culori Xyz65 color object

Setting color

Setting color can be done by either passing in any valid CSS string:

const [color, setColor] = useColor();

setColor("color(display-p3 0.12 0.3 0.98)");

Or any Culori object:

const [color, setColor] = useColor();

setColor({ mode: "p3", r: 0.12, g: 0.3, b: 0.98 });

Or adjusting the color object relatively (tip: for most purposes, adjusting by oklab will yield the best results):

const [color, setColor] = useColor();

setColor({
  ...color.original.oklab,
  l: color.oklab.l + 0.1, // Lighten by 10% via Oklab
});

Note: if adjusting by a different colorspace, that will affect the color.original and color.css output, which pulls the most-recently-used colorspace.

changelog

@terrazzo/use-color

0.1.4

Patch Changes

0.1.3

Patch Changes

  • #510 4493731 Thanks @drwpow! - Reduce decimal places in color output.

    • [plugin-css] ⚠️ Minor breaking change: decimals have been simplified in output. To restore original behavior, pass in colorDepth: 'unlimited'
  • Updated dependencies [4493731]:

0.1.2

Patch Changes

0.1.1

Patch Changes

0.0.7

Patch Changes