@@ -48,15 +48,15 @@ export function Interpolator(interpolate) {
4848}
4949
5050export function ScaleQ ( key , scale , channels , {
51+ type,
5152 nice,
5253 clamp,
5354 zero,
5455 domain = ( registry . get ( key ) === radius || registry . get ( key ) === opacity ? inferZeroDomain : inferDomain ) ( channels ) ,
5556 unknown,
5657 round,
57- range = registry . get ( key ) === radius ? inferRadialRange ( channels , domain ) : registry . get ( key ) === opacity ? unit : undefined ,
58- type,
5958 scheme,
59+ range = registry . get ( key ) === radius ? inferRadialRange ( channels , domain ) : registry . get ( key ) === opacity ? unit : undefined ,
6060 interpolate = registry . get ( key ) === color ? ( scheme == null && range !== undefined ? interpolateRgb : quantitativeScheme ( scheme !== undefined ? scheme : type === "cyclical" ? "rainbow" : "turbo" ) ) : round ? interpolateRound : interpolateNumber ,
6161 reverse,
6262 inset = 0
@@ -70,25 +70,21 @@ export function ScaleQ(key, scale, channels, {
7070 // is used in conjunction with the range. And other times the interpolate
7171 // function is a “fixed” interpolator on the [0, 1] interval, as when a
7272 // color scheme such as interpolateRdBu is used.
73- if ( interpolate !== undefined ) {
74- if ( typeof interpolate !== "function" ) {
75- interpolate = Interpolator ( interpolate ) ;
73+ if ( typeof interpolate !== "function" ) {
74+ interpolate = Interpolator ( interpolate ) ;
75+ }
76+ if ( interpolate . length === 1 ) {
77+ if ( reverse ) {
78+ interpolate = flip ( interpolate ) ;
79+ reverse = false ;
7680 }
77- if ( interpolate . length === 1 ) {
78- if ( reverse ) {
79- interpolate = flip ( interpolate ) ;
80- reverse = false ;
81- }
82- if ( range === undefined ) {
83- range = Float64Array . from ( domain , ( _ , i ) => i / ( domain . length - 1 ) ) ;
84- if ( range . length === 2 ) range = unit ; // optimize common case of [0, 1]
85- }
86- scale . interpolate ( ( range === unit ? constant : interpolatePiecewise ) ( interpolate ) ) ;
87- } else {
88- scale . interpolate ( interpolate ) ;
81+ if ( range === undefined ) {
82+ range = Float64Array . from ( domain , ( _ , i ) => i / ( domain . length - 1 ) ) ;
83+ if ( range . length === 2 ) range = unit ; // optimize common case of [0, 1]
8984 }
85+ scale . interpolate ( ( range === unit ? constant : interpolatePiecewise ) ( interpolate ) ) ;
9086 } else {
91- interpolate = scale . interpolate ( ) ;
87+ scale . interpolate ( interpolate ) ;
9288 }
9389
9490 // If a zero option is specified, we assume that the domain is numeric, and we
@@ -205,6 +201,6 @@ function inferQuantileDomain(channels) {
205201 return domain ;
206202}
207203
208- function interpolatePiecewise ( interpolate ) {
204+ export function interpolatePiecewise ( interpolate ) {
209205 return ( i , j ) => t => interpolate ( i + t * ( j - i ) ) ;
210206}
0 commit comments