@@ -8,7 +8,7 @@ import * as proto from './vendor/embedded_sass_pb';
8
8
import * as utils from './utils' ;
9
9
import { FunctionRegistry } from './function-registry' ;
10
10
import { SassArgumentList } from './value/argument-list' ;
11
- import { SassColor } from './value/color' ;
11
+ import { SassColor , KnownColorSpace } from './value/color' ;
12
12
import { SassFunction } from './value/function' ;
13
13
import { SassList , ListSeparator } from './value/list' ;
14
14
import { SassMap } from './value/map' ;
@@ -66,21 +66,14 @@ export class Protofier {
66
66
} else if ( value instanceof SassNumber ) {
67
67
result . value = { case : 'number' , value : this . protofyNumber ( value ) } ;
68
68
} else if ( value instanceof SassColor ) {
69
- if ( value . hasCalculatedHsl ) {
70
- const color = new proto . Value_HslColor ( ) ;
71
- color . hue = value . hue ;
72
- color . saturation = value . saturation ;
73
- color . lightness = value . lightness ;
74
- color . alpha = value . alpha ;
75
- result . value = { case : 'hslColor' , value : color } ;
76
- } else {
77
- const color = new proto . Value_RgbColor ( ) ;
78
- color . red = value . red ;
79
- color . green = value . green ;
80
- color . blue = value . blue ;
81
- color . alpha = value . alpha ;
82
- result . value = { case : 'rgbColor' , value : color } ;
83
- }
69
+ const color = new proto . Value_Color ( ) ;
70
+ const channels = value . channels ;
71
+ color . channel1 = channels . get ( 0 ) as number ;
72
+ color . channel2 = channels . get ( 1 ) as number ;
73
+ color . channel3 = channels . get ( 2 ) as number ;
74
+ color . alpha = value . alpha ;
75
+ color . space = value . space ;
76
+ result . value = { case : 'color' , value : color } ;
84
77
} else if ( value instanceof SassList ) {
85
78
const list = new proto . Value_List ( ) ;
86
79
list . separator = this . protofySeparator ( value . separator ) ;
@@ -242,24 +235,76 @@ export class Protofier {
242
235
return this . deprotofyNumber ( value . value . value ) ;
243
236
}
244
237
245
- case 'rgbColor' : {
246
- const color = value . value . value ;
247
- return new SassColor ( {
248
- red : color . red ,
249
- green : color . green ,
250
- blue : color . blue ,
251
- alpha : color . alpha ,
252
- } ) ;
253
- }
254
-
255
- case 'hslColor' : {
238
+ case 'color' : {
256
239
const color = value . value . value ;
257
- return new SassColor ( {
258
- hue : color . hue ,
259
- saturation : color . saturation ,
260
- lightness : color . lightness ,
261
- alpha : color . alpha ,
262
- } ) ;
240
+ switch ( color . space . toLowerCase ( ) ) {
241
+ case 'rgb' :
242
+ case 'srgb' :
243
+ case 'srgb-linear' :
244
+ case 'display-p3' :
245
+ case 'a98-rgb' :
246
+ case 'prophoto-rgb' :
247
+ case 'rec2020' :
248
+ return new SassColor ( {
249
+ red : color . channel1 ,
250
+ green : color . channel2 ,
251
+ blue : color . channel3 ,
252
+ alpha : color . alpha ,
253
+ space : color . space as KnownColorSpace ,
254
+ } ) ;
255
+
256
+ case 'hsl' :
257
+ return new SassColor ( {
258
+ hue : color . channel1 ,
259
+ saturation : color . channel2 ,
260
+ lightness : color . channel3 ,
261
+ alpha : color . alpha ,
262
+ space : 'hsl' ,
263
+ } ) ;
264
+
265
+ case 'hwb' :
266
+ return new SassColor ( {
267
+ hue : color . channel1 ,
268
+ whiteness : color . channel2 ,
269
+ blackness : color . channel3 ,
270
+ alpha : color . alpha ,
271
+ space : 'hwb' ,
272
+ } ) ;
273
+
274
+ case 'lab' :
275
+ case 'oklab' :
276
+ return new SassColor ( {
277
+ lightness : color . channel1 ,
278
+ a : color . channel2 ,
279
+ b : color . channel3 ,
280
+ alpha : color . alpha ,
281
+ space : color . space as KnownColorSpace ,
282
+ } ) ;
283
+
284
+ case 'lch' :
285
+ case 'oklch' :
286
+ return new SassColor ( {
287
+ lightness : color . channel1 ,
288
+ chroma : color . channel2 ,
289
+ hue : color . channel3 ,
290
+ alpha : color . alpha ,
291
+ space : color . space as KnownColorSpace ,
292
+ } ) ;
293
+
294
+ case 'xyz' :
295
+ case 'xyz-d65' :
296
+ case 'xyz-d50' :
297
+ return new SassColor ( {
298
+ x : color . channel1 ,
299
+ y : color . channel2 ,
300
+ z : color . channel3 ,
301
+ alpha : color . alpha ,
302
+ space : color . space as KnownColorSpace ,
303
+ } ) ;
304
+
305
+ default :
306
+ throw utils . compilerError ( `Unknown color space "${ color . space } ".` ) ;
307
+ }
263
308
}
264
309
265
310
case 'list' : {
0 commit comments