11import { type BoxShadowValue } from "react-native" ;
22
3- import Color from "colorjs.io" ;
3+ import {
4+ A98RGB ,
5+ ColorSpace ,
6+ HSL ,
7+ HWB ,
8+ Lab ,
9+ LCH ,
10+ OKLab ,
11+ OKLCH ,
12+ P3 ,
13+ ProPhoto ,
14+ REC_2020 ,
15+ serialize ,
16+ sRGB ,
17+ sRGB_Linear ,
18+ XYZ_D50 ,
19+ XYZ_D65 ,
20+ type PlainColorObject ,
21+ } from "colorjs.io/fn" ;
422import type {
523 Angle ,
624 AnimationDirection ,
@@ -47,6 +65,20 @@ import type { ValueType } from "react-native-nitro-modules";
4765import type { DeclarationBuilder } from "./declarations" ;
4866import { toRNProperty } from "./selectors-new" ;
4967
68+ ColorSpace . register ( sRGB ) ;
69+ ColorSpace . register ( P3 ) ;
70+ ColorSpace . register ( OKLab ) ;
71+ ColorSpace . register ( OKLCH ) ;
72+ ColorSpace . register ( Lab ) ;
73+ ColorSpace . register ( LCH ) ;
74+ ColorSpace . register ( HSL ) ;
75+ ColorSpace . register ( HWB ) ;
76+ ColorSpace . register ( A98RGB ) ;
77+ ColorSpace . register ( ProPhoto ) ;
78+ ColorSpace . register ( REC_2020 ) ;
79+ ColorSpace . register ( XYZ_D50 ) ;
80+ ColorSpace . register ( XYZ_D65 ) ;
81+
5082export type Parser <
5183 T extends Declaration [ "property" ] = Declaration [ "property" ] ,
5284> = (
@@ -1249,7 +1281,7 @@ function color(
12491281 return ;
12501282 }
12511283
1252- let color : Color | undefined ;
1284+ let color : PlainColorObject | undefined ;
12531285
12541286 const { hexColors = true , colorPrecision } = b . getOptions ( ) ;
12551287
@@ -1271,120 +1303,124 @@ function color(
12711303 return ;
12721304 }
12731305 case "rgb" : {
1274- color = new Color ( {
1275- space : " sRGB" ,
1306+ color = {
1307+ space : sRGB ,
12761308 coords : [ cssColor . r / 255 , cssColor . g / 255 , cssColor . b / 255 ] ,
12771309 alpha : cssColor . alpha ,
1278- } ) ;
1310+ } ;
12791311 break ;
12801312 }
12811313 case "hsl" :
1282- color = new Color ( {
1283- space : cssColor . type ,
1314+ color = {
1315+ space : HSL ,
12841316 coords : [ cssColor . h , cssColor . s , cssColor . l ] ,
12851317 alpha : cssColor . alpha ,
1286- } ) ;
1318+ } ;
12871319 break ;
12881320 case "hwb" :
1289- color = new Color ( {
1290- space : cssColor . type ,
1321+ color = {
1322+ space : HWB ,
12911323 coords : [ cssColor . h , cssColor . w , cssColor . b ] ,
12921324 alpha : cssColor . alpha ,
1293- } ) ;
1325+ } ;
12941326 break ;
12951327 case "lab" :
1296- color = new Color ( {
1297- space : cssColor . type ,
1328+ color = {
1329+ space : Lab ,
12981330 coords : [ cssColor . l , cssColor . a , cssColor . b ] ,
12991331 alpha : cssColor . alpha ,
1300- } ) ;
1332+ } ;
13011333 break ;
13021334 case "lch" :
1303- color = new Color ( {
1304- space : cssColor . type ,
1335+ color = {
1336+ space : LCH ,
13051337 coords : [ cssColor . l , cssColor . c , cssColor . h ] ,
13061338 alpha : cssColor . alpha ,
1307- } ) ;
1339+ } ;
13081340 break ;
13091341 case "oklab" :
1310- color = new Color ( {
1311- space : cssColor . type ,
1342+ color = {
1343+ space : OKLab ,
13121344 coords : [ cssColor . l , cssColor . a , cssColor . b ] ,
13131345 alpha : cssColor . alpha ,
1314- } ) ;
1346+ } ;
13151347 break ;
13161348 case "oklch" :
1317- color = new Color ( {
1318- space : cssColor . type ,
1349+ color = {
1350+ space : OKLCH ,
13191351 coords : [ cssColor . l , cssColor . c , cssColor . h ] ,
13201352 alpha : cssColor . alpha ,
1321- } ) ;
1353+ } ;
13221354 break ;
13231355 case "srgb" :
1324- color = new Color ( {
1325- space : cssColor . type ,
1356+ color = {
1357+ space : sRGB ,
13261358 coords : [ cssColor . r , cssColor . g , cssColor . b ] ,
13271359 alpha : cssColor . alpha ,
1328- } ) ;
1360+ } ;
13291361 break ;
13301362 case "srgb-linear" :
1331- color = new Color ( {
1332- space : cssColor . type ,
1363+ color = {
1364+ space : sRGB_Linear ,
13331365 coords : [ cssColor . r , cssColor . g , cssColor . b ] ,
13341366 alpha : cssColor . alpha ,
1335- } ) ;
1367+ } ;
13361368 break ;
13371369 case "display-p3" :
1338- color = new Color ( {
1339- space : "p3" ,
1370+ color = {
1371+ space : P3 ,
13401372 coords : [ cssColor . r , cssColor . g , cssColor . b ] ,
13411373 alpha : cssColor . alpha ,
1342- } ) ;
1374+ } ;
13431375 break ;
13441376 case "a98-rgb" :
1345- color = new Color ( {
1346- space : "a98rgb" ,
1377+ color = {
1378+ space : A98RGB ,
13471379 coords : [ cssColor . r , cssColor . g , cssColor . b ] ,
13481380 alpha : cssColor . alpha ,
1349- } ) ;
1381+ } ;
13501382 break ;
13511383 case "prophoto-rgb" :
1352- color = new Color ( {
1353- space : "prophoto" ,
1384+ color = {
1385+ space : ProPhoto ,
13541386 coords : [ cssColor . r , cssColor . g , cssColor . b ] ,
13551387 alpha : cssColor . alpha ,
1356- } ) ;
1388+ } ;
13571389 break ;
13581390 case "rec2020" :
1359- color = new Color ( {
1360- space : cssColor . type ,
1391+ color = {
1392+ space : REC_2020 ,
13611393 coords : [ cssColor . r , cssColor . g , cssColor . b ] ,
13621394 alpha : cssColor . alpha ,
1363- } ) ;
1395+ } ;
13641396 break ;
13651397 case "xyz-d50" :
1366- color = new Color ( {
1367- space : cssColor . type ,
1398+ color = {
1399+ space : XYZ_D50 ,
13681400 coords : [ cssColor . x , cssColor . y , cssColor . z ] ,
13691401 alpha : cssColor . alpha ,
1370- } ) ;
1402+ } ;
13711403 break ;
13721404 case "xyz-d65" :
1373- color = new Color ( {
1374- space : cssColor . type ,
1405+ color = {
1406+ space : XYZ_D65 ,
13751407 coords : [ cssColor . x , cssColor . y , cssColor . z ] ,
13761408 alpha : cssColor . alpha ,
1377- } ) ;
1409+ } ;
13781410 break ;
13791411 default : {
13801412 cssColor satisfies never ;
13811413 }
13821414 }
13831415
1416+ if ( ! color ) {
1417+ return ;
1418+ }
1419+
13841420 if ( ! hexColors || colorPrecision ) {
1385- return color ?. toString ( { precision : colorPrecision ?? 3 } ) ;
1421+ return serialize ( color , { precision : colorPrecision ?? 3 } ) ;
13861422 } else {
1387- return color ?. toString ( { format : "hex" } ) ;
1423+ return serialize ( serialize ( color , { format : "srgb" } ) , { format : "hex" } ) ;
13881424 }
13891425}
13901426
0 commit comments