@@ -61,7 +61,7 @@ function getColorsInString(state: State, str: string): (culori.Color | KeywordCo
61
61
62
62
function toColor ( match : RegExpMatchArray ) {
63
63
let color = match [ 1 ] . replace ( / v a r \( [ ^ ) ] + \) / , '1' )
64
- return getKeywordColor ( color ) ?? culori . parse ( color )
64
+ return getKeywordColor ( color ) ?? tryParseColor ( color )
65
65
}
66
66
67
67
str = replaceCssVarsWithFallbacks ( state , str )
@@ -275,8 +275,8 @@ export function getColorFromValue(value: unknown): culori.Color | KeywordColor |
275
275
) {
276
276
return null
277
277
}
278
- const color = culori . parse ( trimmedValue )
279
- return color ?? null
278
+
279
+ return tryParseColor ( trimmedValue )
280
280
}
281
281
282
282
let toRgb = culori . converter ( 'rgb' )
@@ -296,11 +296,21 @@ export function formatColor(color: culori.Color): string {
296
296
297
297
const COLOR_MIX_REGEX = / c o l o r - m i x \( i n [ ^ , ] + , \s * ( .* ?) \s * ( \d + | \. \d + | \d + \. \d + ) % , \s * t r a n s p a r e n t \) / g
298
298
299
+ function tryParseColor ( color : string ) {
300
+ try {
301
+ return culori . parse ( color ) ?? null
302
+ } catch ( err ) {
303
+ console . error ( 'Error parsing color' , color )
304
+ console . error ( err )
305
+ return null
306
+ }
307
+ }
308
+
299
309
function removeColorMixWherePossible ( str : string ) {
300
310
return str . replace ( COLOR_MIX_REGEX , ( match , color , percentage ) => {
301
311
if ( color . startsWith ( 'var(' ) ) return match
302
312
303
- let parsed = culori . parse ( color )
313
+ let parsed = tryParseColor ( color )
304
314
if ( ! parsed ) return match
305
315
306
316
let alpha = Number ( percentage ) / 100
0 commit comments