github color-js/color.js v0.7.0-alpha.2

pre-release3 hours ago

⬇️ Over 220 million downloads! 🤯

This is the second pre-release of v0.7.0, with several new color spaces, and other improvements.
For the changes in v0.7.0-alpha.1, see the previous release notes.

As a reminder, we recently started an Open Collective that you can fund directly.
If your company depends on Color.js in any way, it is in your best interest to ensure its future is sustainable.

🚨 Breaking changes

These are unlikely to break things for the majority of users, but theoretically could if you were doing weird stuff with Color.js 😜.

We cleaned up dist/ quite a bit with this release and re-evaluated what actually needs to be there:

  • Removed the pre-built ESM bundles. We now only generate bundles for CJS and global builds. ESM exports point directly at the corresponding files in src/. This also fixes a dual-instance bug where importing from src/ vs. the package root could yield different Color registries (by @LeaVerou in #739).
  • Removed the minified .min.* files from the package, since packages are moving away from providing these and minification is becoming a consumer concern (by @LeaVerou in #741).

For those of you that have been importing files directly from colorjs.io, removed files now redirect to the versions still there (e.g. colorjs.io/dist/color.min.js and colorjs.io/dist/color.js now both redirect to colorjs.io/src/color.js), so your code should continue to work.

Improvements

New features

  • 🆕 New color spaces (by @LeaVerou in #736) Ever tried to use (OK)LCH and kept struggling with the irregularity of the gamut shape? You can now have your cake and eat it too, as we introduced gamut-relative versions of these spaces, where c = 1 is the most colorful in-gamut color at a given lightness and hue so you never have to worry about getting out of gamut! These new spaces are:
    • oklch-p3, oklch-srgb, oklch-rec2020,
    • lch-p3, lch-srgb, lch-rec2020.
    • All six are built on a new general GamutRelativeColorSpace class that can be easily used to generate such color spaces for any gamut and color space, as long as there is a coordinate to reduce that is guaranteed to get you in-gamut.
    • Note that this loses you some of the perceptual uniformity of the original spaces, but it is a tradeoff that is often worth it for the convenience of staying in-gamut. After all, perceptual uniformity only applies in-gamut anyway.
  • 🆕 Smarter display() fallback When a color isn't natively supported by the browser, display() now stays as close as possible to the original color: it walks up the base color space chain (closest first) and uses the first supported ancestor, preserving the color's gamut (e.g. an hsl-p3 color falls back to color(display-p3 …) rather than lab()) instead of always jumping to the widest default. Adds an opt-in displaySpaces override on ColorSpace, a parameterizable supports(), and a DisplayOptions interface (by @LeaVerou in #738)

For plugin/library/tooling authors

Exposed more internals, so you never have to duplicate stuff that Color.js already knows about:

  • Expose transformation matrices via ColorSpace.M Color spaces now expose the transformation matrices they use internally through a new M property, so consumers can reuse them instead of duplicating the data. Matrices for RGB spaces can also be supplied via the generic M option (by @LeaVerou in #749)
  • Matrix algebra utilities Added inv (matrix inversion) and solve to the math utilities, so external libraries are no longer required when developing new color spaces (by @facelessuser)

Bug fixes & performance

  • Preserve a subclass's own toBase/fromBase when options omit them, instead of clobbering prototype methods with undefined (by @LeaVerou)
  • Fix the CI install command after the lockfile removal (by @MysteryBlokHed in #744)

Full Changelog: v0.7.0-alpha.1...v0.7.0-alpha.2

Don't miss a new color.js release

NewReleases is sending notifications on new releases.