Breaking Change: Null Alpha Channel
Prior to Dart Sass 1.64.3, in the JS and Dart APIs, if null was passed to
the SassColor constructor it would be treated as 1. This is now deprecated.
Users should explicitly pass 1 or undefined instead.
Sass is working on adding support for the CSS Color Module Level 4. One of the
changes in this module is the idea of "missing components": if a color
component like alpha is missing, it’s mostly treated as 0, but if it’s
interpolated with another color (such as in a gradient or an animation) it will
automatically take on the other color’s value.
We need a way for users of the JS and Dart APIs to access and set missing
channels, and null is the most natural way to do that. In most cases, this
isn’t an issue; callers who intend to create opaque colors usually just leave
out the alpha parameter anyway (or pass undefined in JS). But if callers are
explicitly passing null, that will eventually be treated as a transparent
color instead of an opaque one.
To preserve the current behavior, all you need to do is explicitly pass 1 if
alpha is unset. In JS:
new sass.SassColor({
red: 102,
green: 51,
blue: 153,
alpha: alpha ?? 1,
});
And in Dart:
sass.SassColor.rgb(102, 51, 153, alpha ?? 1);
💡 Fun fact:
The TypeScript types for the Sass API already forbid passing null as
alpha; it’s only allowed to be absent, undefined, or a Number. But prior
to Dart Sass 1.64.3, if you weren’t using TypeScript and you did pass null
it would still be treated as an opaque color.
Transition PeriodTransition Period permalink
- Dart Sass
- since 1.64.3
- LibSass
- ✗
- Ruby Sass
- ✗
Between Dart Sass 1.64.3 and the upcoming release of support for CSS Colors
Level 4, Dart Sass will continue to interpret a null alpha value as an opaque
color. However, it will emit a deprecation warning to encourage authors to
explicitly pass alpha 1 instead.