@@ -9,7 +9,7 @@ const R_SATURATION = `(?:\\d{1,3}${DOT_VALUE}?|${DOT_VALUE})`;
9
9
const R_LUMINANCE = R_SATURATION ;
10
10
const R_ALPHA = `([ ,]\\s*${ ALPHA } \\s*|\\s*\\/\\s*${ R_SATURATION } %?\\s*)?` ;
11
11
12
- const HSL_NEW_SYNTAX = `hsla?\\(\\s*${ R_HUE } (deg)?\\s*\\s*${ R_SATURATION } %?\\s*\\s*${ R_LUMINANCE } %?\\s*${ R_ALPHA } \\)` ;
12
+ const HSL_NEW_SYNTAX = `hsla?\\(\\s*${ R_HUE } (deg|turn )?\\s*\\s*${ R_SATURATION } %?\\s*\\s*${ R_LUMINANCE } %?\\s*${ R_ALPHA } \\)` ;
13
13
const HSL_LEGACY_SYNTAX = `hsl\\(\\s*${ R_HUE } \\s*,\\s*${ R_SATURATION } %\\s*,\\s*${ R_LUMINANCE } %\\s*\\)` ;
14
14
const HSLA_LEGACY_SYNTAX = `hsla\\(\\s*${ R_HUE } \\s*,\\s*${ R_SATURATION } %\\s*,\\s*${ R_LUMINANCE } %\\s*,\\s*${ ALPHA } \\s*\\)` ;
15
15
@@ -31,14 +31,37 @@ export const REGEXP_ONE = new RegExp(
31
31
* @memberof HSLColorExtractor
32
32
*/
33
33
function extractHSLValue ( value : string ) {
34
- const [ h , s , l , a ] : number [ ] = value
34
+ const values = value
35
35
. replace ( / h s l ( a ) { 0 , 1 } \( / , '' )
36
36
. replace ( / \) / , '' )
37
- . replace ( / % / g, '' )
38
- . replace ( / d e g / , '' )
37
+ . replace ( '/' , ' ' )
39
38
. replaceAll ( ',' , ' ' )
40
- . split ( / \s + / )
41
- . map ( ( c ) => parseFloat ( c ) ) ;
39
+ . split ( / \s + / ) ;
40
+
41
+ let h = parseFloat ( values [ 0 ] ) ;
42
+
43
+ if ( / t u r n / . test ( values [ 0 ] ) ) {
44
+ h = ( h % 1 ) * 360 ;
45
+ }
46
+
47
+ const [ s , l ] = values . slice ( 1 , 3 ) . map ( parseFloat ) ;
48
+
49
+ const isRelativeAlpha = / % / . test ( values [ 3 ] ) ;
50
+
51
+ let a = parseFloat ( values [ 3 ] ?? 1 ) ;
52
+
53
+ if ( ! isRelativeAlpha && a > 1 ) {
54
+ a = 1 ;
55
+ }
56
+
57
+ if ( isRelativeAlpha && a > 100 ) {
58
+ a = 1 ;
59
+ }
60
+
61
+ if ( a > 1 ) {
62
+ a = a / 100 ;
63
+ }
64
+
42
65
return [ h , s , l , a ] ;
43
66
}
44
67
0 commit comments