Skip to content

Releases: color-js/color.js

v0.5.0

01 Mar 03:01
58524b8
Compare
Choose a tag to compare

It’s been a while since our last release, so this is a big one!
Going forwards, we plan to make at least one release per month.

Heads ups

⚠️ Future breaking change

Color.js currently uses NaN values to represent CSS none (e.g. for achromatic colors).
However, CSS also now has a NaN value, which is currently impossible to represent in Color.js.
Therefore, In the next non-minor version, we will start using null to represent none.
If you have code that handles these values, you can prepare for the change by detecting which value is being used and using that instead of a hardcoded NaN:

const NONE_COORD = new Color("rgb(none none none)").coords[0].valueOf()

🆕 Color.js Discord server

We’ve just set up a Discord server so that people can help each other and discuss color science topics in a more immediate way. Join now!.
Do note we also have a Discussions section for more long-form help.

⬇️ 2 million downloads!

We’ve recently passed a big milestone: Color.js was downloaded 2 million times on npm!

New in v0.5.0

New Color Spaces

Improved compatibility with CSS:

  • Moving to a standard ---prefixed version for color spaces that are not built-in into CSS. To facilitate "upgrading" color spaces when they later get added to standard CSS, both ---prefixed and unprefixed versions of all color spaces are also accepted. Implemented by @jgerigmeyer in #407 and #439
  • Add support for more angle units (grad, rad and turn) improving compatibility with CSS, by @kleinfreund in #324
  • Add CSS gamut mapping algorithm by @jamesnw in #344 and #352
  • Remove gamut mapping from hsl(), hwb() and hsv() by @jamesnw in #331

Gamut mapping improvements

  • Support for HCT gamut mapping by @facelessuser in #420
  • toGamut extended to allow configuring the delta E method, the JND, and enabling white and black SDR clamp by @facelessuser in #420
  • Allow hsluv to be gamut mapped using the CSS algorithm by @lloydk in #431
  • Avoid needless two-step color conversion at the start of gamut mapping by @facelessuser in #426
  • Avoid round-trip to/from oklch in CSS mapping method for colors that are in gamut @jgerigmeyer in #455

Color space API improvements:

  • Color spaces can now override the heuristically determined color space used to check gamut via a gamutSpace parameter. Implemented by @lloydk in #369
  • Color spaces can now define a grammar for color() format. Implemented by @lloydk in #370
  • Support string ids in colorSpace.equals() by @LeaVerou in #413
  • Make the color space optional in getAll() by @LeaVerou in #413

Precision/accuracy improvements

Performance improvements

  • [deltaE] Speedup of 7th powers in DeltaE2000 by @dom1n1k in #340

Bug Fixes

  • Fix hue related mix issues by @facelessuser in #338
  • Accept "Lightness" for lab space first channel name by @jgerigmeyer in #348
  • Add CJS file to /fn entry and fix legacy builds by @jgerigmeyer in #349
  • [spaces/hsl] Better handling of negative saturation on very oog colors by @svgeesus in f20d78a
  • Fix toPrecision() (was off by one for fractional inputs) by @efergus in #384
  • Color serialization now defaults to percentage for lightness across all color spaces, by @LeaVerou in e36e183
  • Fix incorrect parsing of Jzazbz percentage values by @lloydk in #392
  • Fix Luv lightness coordinate name by @lloydk in #406
  • Ensure alpha is a number in Color constructor by @lloydk in #400
  • Workaround Next.js production bug in serialize by @lloydk in #421
  • Allow angle values for HCT hue coordinate by @lloydk in #418
  • Fix parsing of HSV color space by @lloydk in #430
  • Allow number values for HWB w/b coordinates by @lloydk in #464
  • Add missing CSS ids for a98rgb-linear, p3-linear, and prophoto-linear spaces for parsing and serialization by @jgerigmeyer in #439
  • Consistently allow any color types (string or object) throughout the codebase by @lloydk and @jgerigmeyer in #453, #451, #456, #457, and #461

TypeScript improvements

Website

Apps

  • [apps/gamut-mapping] New app to experiment with different gamut mapping algorithms and quickly see how wide a gamut a color requires by @LeaVerou
  • [apps/gradient] pin mavo to hotfix app by @clanghout in #359
  • [apps/picker] Use correct granularity in number input rather than 1 across all color spaces (by @sidewayss in #330)
  • [apps/convert] Up/down arrows to tweak color coordinates by @LeaVerou
  • [apps/convert] Pin color spaces to top by @LeaVerou

Linting & Tests

  • New JS-first testsuite that eliminates boilerplate and makes writing tests quick, by @LeaVerou (piloting her experimental testing framework htest.dev)
  • Fix Jzazbz tests by @facelessuser in #366
  • More consistent formatting across the codebase by @jgerigmeyer in #372
  • Add more ESLint recommended rules, and enforce them in CI by @jgerigmeyer in #373
  • Enforce trailing commas unless ] or } is on the same line by @jgerigmeyer in #440
  • Port parse test to new JS testsuite by @lloydk in #427
  • Add configurable verbose setting and warn function to allow customizing logging by @jgerigmeyer in #441
  • Other testing improvements by @svgeesus

New Contributors

A huge ...

Read more

v0.4.5 Fix npm dependencies

05 Jun 15:58
Compare
Choose a tag to compare

Identical to v0.4.4-patch.1, so that semver can do its thing

Fix npm dependencies

31 May 15:03
Compare
Choose a tag to compare

Due to an unknown cause, v0.4.4 was published on npm with an absurd number of nonexistent dependencies. Color.js still has 0 dependencies, and this release fixes this on npm.

v0.4.4

29 May 19:35
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.4.3...v0.4.4

v0.4.3: Several bugfixes and better typings

27 Jan 20:57
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.4.2...v0.4.3

v0.4.2

17 Nov 19:18
Compare
Choose a tag to compare

Small changes in this one.

  • Shortcut for generating legacy rgb() and rgba() syntax (format: "rgb_number" and "rgba_number").
  • Fixed bug where comma-separated arguments in string output included an extraneous space before the last comma
  • Better bundler compatibility, thanks to @ambar
  • Type fixes, thanks to @MysteryBlokHed
  • src/index-fn.js now includes exports for individual contrast functions, thanks to @MysteryBlokHed
  • Typescript fixes

All merged PRs

New Contributors

Full Changelog: v0.4.1...v0.4.2

v0.4.1 Patch 1

01 Nov 20:35
Compare
Choose a tag to compare

Fixes issue where legacy builds were not included in npm. See #232

v0.4.1: TypeScript support, legacy builds

28 Oct 20:40
Compare
Choose a tag to compare

The main new feature of this release is Typescript support, added in this Herculean PR by @MysteryBlokHed and reviewed by @jgerigmeyer.

Other new features and changes:

  • deltaPhi contrast method now supported, thanks to a PR by @Myndex
  • Node v12 and somewhat older browsers are now supported, through separate .legacy builds, thanks to a PR by @jgerigmeyer
  • The premultiplied option is now supported in mix(), thanks to a PR by @redneb
  • Support both number and percent in (ok)lab and (ok)lch lightness. Serialize as number, per spec.
  • Lab-D65 is now serialized as lab-d65() and not lab().

All merged pull requests

New Contributors

Full Changelog: v0.4.0...v0.4.1

v0.4.0: All about contrast! 🔳🔲

06 Aug 15:10
Compare
Choose a tag to compare

The most major change in this release is new contrast methods! Until v0.3.0, Color.js only supported WCAG 2.1 contrast, which has several known problems. In this release, @svgeesus implemented four more contrast methods, and wrote all about them. There are both specific methods you can use (e.g. background.contrastAPCA(foreground) / with the OO API and contrastAPCA(background, foreground) with the procedural API as well as a generic contrast() method that accepts a parameter for the contrast algorithm (e.g. color.contrast(color2, "Weber") with the OO API or contrast(color, color2, "Weber") with the procedural API).

Breaking change: color.contrast() / contrast() will now not work without an explicit contrast algorithm, which is on par with the recent changes in CSS Color's contrast-color() function. If you try to use it without an algorithm, it will produce a TypeError listing all supported contrast algorithms.

image

Demo: To celebrate this addition, we've added a new demo app that calculates if white or black produces higher contrast over a variety of colors with the contrast algorithm you select!

image

Other changes

  • The deltaE() function now imports all deltaE methods. If you need a more tree-shakable deltaE API, import the individual methods directly.
  • The method argument in deltaE() is now case-insensitive
  • The chromaticity module has been fixed to work correctly with the procedural API

Merged Pull requests

New Contributors

Full Changelog: v0.3.0...v0.4.0

v0.3.0

05 Jul 17:48
Compare
Choose a tag to compare

What's Changed

  • The tree-shakeable API is now a lot more tree-shakeable, as side effects have been removed from color space modules, thanks to @sgomes in #184
  • Custom output formats (docs
  • Breaking change: The fallback parameter has been removed from color.toString() / serialize(). The functionality has been moved to a separate color.display() / display() function. See #192
  • Don't import Color class in keywords.js by @sgomes in #182
  • Several small improvements and bugfixes

Full Changelog: v0.2.4...v0.3.0