@@ -711,7 +711,7 @@ SassColor _updateComponents(List<Value> arguments,
711
711
var spaceKeyword = keywords.remove ("space" )? .assertString ("space" )
712
712
? ..assertUnquoted ("space" );
713
713
714
- var alphaArg = keywords.remove ('alpha' )? . assertNumber ( 'alpha' ) ;
714
+ var alphaArg = keywords.remove ('alpha' );
715
715
716
716
// For backwards-compatibility, we allow legacy colors to modify channels in
717
717
// any legacy color space.
@@ -743,9 +743,10 @@ SassColor _updateComponents(List<Value> arguments,
743
743
for (var i = 0 ; i < channelInfo.length; i++ )
744
744
channelArgs[i]? .assertNumber (channelInfo[i].name)
745
745
];
746
+ var alphaNumber = alphaArg? .assertNumber ("alpha" );
746
747
result = scale
747
- ? _scaleColor (color, channelNumbers, alphaArg )
748
- : _adjustColor (color, channelNumbers, alphaArg );
748
+ ? _scaleColor (color, channelNumbers, alphaNumber )
749
+ : _adjustColor (color, channelNumbers, alphaNumber );
749
750
}
750
751
751
752
return result.toSpace (originalColor.space);
@@ -754,32 +755,33 @@ SassColor _updateComponents(List<Value> arguments,
754
755
/// Returns a copy of [color] with its channel values replaced by those in
755
756
/// [channelArgs] and [alphaArg] , if specified.
756
757
SassColor _changeColor (
757
- SassColor color, List <Value ?> channelArgs, SassNumber ? alphaArg) =>
758
+ SassColor color, List <Value ?> channelArgs, Value ? alphaArg) =>
758
759
_colorFromChannels (
759
760
color.space,
760
761
_channelForChange (channelArgs[0 ], color, 0 ),
761
762
_channelForChange (channelArgs[1 ], color, 1 ),
762
763
_channelForChange (channelArgs[2 ], color, 2 ),
763
- alphaArg.andThen ((alphaArg) {
764
- if (! alphaArg.hasUnits) {
765
- return alphaArg.valueInRange (0 , 1 , "alpha" );
766
- } else if (alphaArg.hasUnit ('%' )) {
767
- return alphaArg.valueInRangeWithUnit (0 , 100 , "alpha" , "%" ) /
768
- 100 ;
769
- } else {
770
- warnForDeprecation (
771
- "\$ alpha: Passing a unit other than % ($alphaArg ) is "
772
- "deprecated.\n "
773
- "\n "
774
- "To preserve current behavior: "
775
- "${alphaArg .unitSuggestion ('alpha' )}\n "
776
- "\n "
777
- "See https://sass-lang.com/d/function-units" ,
778
- Deprecation .functionUnits);
779
- return alphaArg.valueInRange (0 , 1 , "alpha" );
780
- }
781
- }) ??
782
- color.alpha,
764
+ switch (alphaArg) {
765
+ null => color.alpha,
766
+ _ when _isNone (alphaArg) => null ,
767
+ SassNumber (hasUnits: false ) => alphaArg.valueInRange (0 , 1 , "alpha" ),
768
+ SassNumber () when alphaArg.hasUnit ('%' ) =>
769
+ alphaArg.valueInRangeWithUnit (0 , 100 , "alpha" , "%" ) / 100 ,
770
+ SassNumber () => () {
771
+ warnForDeprecation (
772
+ "\$ alpha: Passing a unit other than % ($alphaArg ) is "
773
+ "deprecated.\n "
774
+ "\n "
775
+ "To preserve current behavior: "
776
+ "${alphaArg .unitSuggestion ('alpha' )}\n "
777
+ "\n "
778
+ "See https://sass-lang.com/d/function-units" ,
779
+ Deprecation .functionUnits);
780
+ return alphaArg.valueInRange (0 , 1 , "alpha" );
781
+ }(),
782
+ _ => throw SassScriptException (
783
+ '$alphaArg is not a number or unquoted "none".' , 'alpha' )
784
+ },
783
785
clamp: false );
784
786
785
787
/// Returns the value for a single channel in `color.change()` .
0 commit comments