1
- /* MIT license */
2
- var colorNames = require ( 'color-name' ) ;
3
- var swizzle = require ( 'simple-swizzle' ) ;
4
- var hasOwnProperty = Object . hasOwnProperty ;
1
+ import colorNames from 'color-name' ;
5
2
6
- var reverseNames = Object . create ( null ) ;
3
+ const reverseNames = Object . create ( null ) ;
7
4
8
- // create a list of reverse color names
9
- for ( var name in colorNames ) {
10
- if ( hasOwnProperty . call ( colorNames , name ) ) {
5
+ // Create a list of reverse color names
6
+ for ( const name in colorNames ) {
7
+ if ( Object . hasOwn ( colorNames , name ) ) {
11
8
reverseNames [ colorNames [ name ] ] = name ;
12
9
}
13
10
}
14
11
15
- var cs = module . exports = {
12
+ const cs = {
16
13
to : { } ,
17
- get : { }
14
+ get : { } ,
18
15
} ;
19
16
20
17
cs . get = function ( string ) {
21
- var prefix = string . substring ( 0 , 3 ) . toLowerCase ( ) ;
22
- var val ;
23
- var model ;
18
+ const prefix = string . slice ( 0 , 3 ) . toLowerCase ( ) ;
19
+ let value ;
20
+ let model ;
24
21
switch ( prefix ) {
25
- case 'hsl' :
26
- val = cs . get . hsl ( string ) ;
22
+ case 'hsl' : {
23
+ value = cs . get . hsl ( string ) ;
27
24
model = 'hsl' ;
28
25
break ;
29
- case 'hwb' :
30
- val = cs . get . hwb ( string ) ;
26
+ }
27
+
28
+ case 'hwb' : {
29
+ value = cs . get . hwb ( string ) ;
31
30
model = 'hwb' ;
32
31
break ;
33
- default :
34
- val = cs . get . rgb ( string ) ;
32
+ }
33
+
34
+ default : {
35
+ value = cs . get . rgb ( string ) ;
35
36
model = 'rgb' ;
36
37
break ;
38
+ }
37
39
}
38
40
39
- if ( ! val ) {
41
+ if ( ! value ) {
40
42
return null ;
41
43
}
42
44
43
- return { model : model , value : val } ;
45
+ return { model, value} ;
44
46
} ;
45
47
46
48
cs . get . rgb = function ( string ) {
47
49
if ( ! string ) {
48
50
return null ;
49
51
}
50
52
51
- var abbr = / ^ # ( [ a - f 0 - 9 ] { 3 , 4 } ) $ / i;
52
- var hex = / ^ # ( [ a - f 0 - 9 ] { 6 } ) ( [ a - f 0 - 9 ] { 2 } ) ? $ / i;
53
- var rgba = / ^ r g b a ? \( \s * ( [ + - ] ? \d + ) (? = [ \s , ] ) \s * (?: , \s * ) ? ( [ + - ] ? \d + ) (? = [ \s , ] ) \s * (?: , \s * ) ? ( [ + - ] ? \d + ) \s * (?: [ , | \ /] \s * ( [ + - ] ? [ \d \ .] + ) ( % ? ) \s * ) ? \) $ / ;
54
- var per = / ^ r g b a ? \( \s * ( [ + - ] ? [ \d \ .] + ) \ %\s * , ? \s * ( [ + - ] ? [ \d \ .] + ) \ %\s * , ? \s * ( [ + - ] ? [ \d \ .] + ) \ %\s * (?: [ , | \ /] \s * ( [ + - ] ? [ \d \ .] + ) ( % ? ) \s * ) ? \) $ / ;
55
- var keyword = / ^ ( \w + ) $ / ;
53
+ const abbr = / ^ # ( [ a - f \d ] { 3 , 4 } ) $ / i;
54
+ const hex = / ^ # ( [ a - f \d ] { 6 } ) ( [ a - f \d ] { 2 } ) ? $ / i;
55
+ const rgba = / ^ r g b a ? \( \s * ( [ + - ] ? \d + ) (? = [ \s , ] ) \s * (?: , \s * ) ? ( [ + - ] ? \d + ) (? = [ \s , ] ) \s * (?: , \s * ) ? ( [ + - ] ? \d + ) \s * (?: [ , | / ] \s * ( [ + - ] ? [ \d . ] + ) ( % ? ) \s * ) ? \) $ / ;
56
+ const per = / ^ r g b a ? \( \s * ( [ + - ] ? [ \d . ] + ) % \s * , ? \s * ( [ + - ] ? [ \d . ] + ) % \s * , ? \s * ( [ + - ] ? [ \d . ] + ) % \s * (?: [ , | / ] \s * ( [ + - ] ? [ \d . ] + ) ( % ? ) \s * ) ? \) $ / ;
57
+ const keyword = / ^ ( \w + ) $ / ;
56
58
57
- var rgb = [ 0 , 0 , 0 , 1 ] ;
58
- var match ;
59
- var i ;
60
- var hexAlpha ;
59
+ let rgb = [ 0 , 0 , 0 , 1 ] ;
60
+ let match ;
61
+ let i ;
62
+ let hexAlpha ;
61
63
62
64
if ( match = string . match ( hex ) ) {
63
65
hexAlpha = match [ 2 ] ;
64
66
match = match [ 1 ] ;
65
67
66
68
for ( i = 0 ; i < 3 ; i ++ ) {
67
69
// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19
68
- var i2 = i * 2 ;
69
- rgb [ i ] = parseInt ( match . slice ( i2 , i2 + 2 ) , 16 ) ;
70
+ const i2 = i * 2 ;
71
+ rgb [ i ] = Number . parseInt ( match . slice ( i2 , i2 + 2 ) , 16 ) ;
70
72
}
71
73
72
74
if ( hexAlpha ) {
73
- rgb [ 3 ] = parseInt ( hexAlpha , 16 ) / 255 ;
75
+ rgb [ 3 ] = Number . parseInt ( hexAlpha , 16 ) / 255 ;
74
76
}
75
77
} else if ( match = string . match ( abbr ) ) {
76
78
match = match [ 1 ] ;
77
79
hexAlpha = match [ 3 ] ;
78
80
79
81
for ( i = 0 ; i < 3 ; i ++ ) {
80
- rgb [ i ] = parseInt ( match [ i ] + match [ i ] , 16 ) ;
82
+ rgb [ i ] = Number . parseInt ( match [ i ] + match [ i ] , 16 ) ;
81
83
}
82
84
83
85
if ( hexAlpha ) {
84
- rgb [ 3 ] = parseInt ( hexAlpha + hexAlpha , 16 ) / 255 ;
86
+ rgb [ 3 ] = Number . parseInt ( hexAlpha + hexAlpha , 16 ) / 255 ;
85
87
}
86
88
} else if ( match = string . match ( rgba ) ) {
87
89
for ( i = 0 ; i < 3 ; i ++ ) {
88
- rgb [ i ] = parseInt ( match [ i + 1 ] , 0 ) ;
90
+ rgb [ i ] = Number . parseInt ( match [ i + 1 ] , 10 ) ;
89
91
}
90
92
91
93
if ( match [ 4 ] ) {
92
- if ( match [ 5 ] ) {
93
- rgb [ 3 ] = parseFloat ( match [ 4 ] ) * 0.01 ;
94
- } else {
95
- rgb [ 3 ] = parseFloat ( match [ 4 ] ) ;
96
- }
94
+ rgb [ 3 ] = match [ 5 ] ? Number . parseFloat ( match [ 4 ] ) * 0.01 : Number . parseFloat ( match [ 4 ] ) ;
97
95
}
98
96
} else if ( match = string . match ( per ) ) {
99
97
for ( i = 0 ; i < 3 ; i ++ ) {
100
- rgb [ i ] = Math . round ( parseFloat ( match [ i + 1 ] ) * 2.55 ) ;
98
+ rgb [ i ] = Math . round ( Number . parseFloat ( match [ i + 1 ] ) * 2.55 ) ;
101
99
}
102
100
103
101
if ( match [ 4 ] ) {
104
- if ( match [ 5 ] ) {
105
- rgb [ 3 ] = parseFloat ( match [ 4 ] ) * 0.01 ;
106
- } else {
107
- rgb [ 3 ] = parseFloat ( match [ 4 ] ) ;
108
- }
102
+ rgb [ 3 ] = match [ 5 ] ? Number . parseFloat ( match [ 4 ] ) * 0.01 : Number . parseFloat ( match [ 4 ] ) ;
109
103
}
110
104
} else if ( match = string . match ( keyword ) ) {
111
105
if ( match [ 1 ] === 'transparent' ) {
112
106
return [ 0 , 0 , 0 , 0 ] ;
113
107
}
114
108
115
- if ( ! hasOwnProperty . call ( colorNames , match [ 1 ] ) ) {
109
+ if ( ! Object . hasOwn ( colorNames , match [ 1 ] ) ) {
116
110
return null ;
117
111
}
118
112
@@ -127,6 +121,7 @@ cs.get.rgb = function (string) {
127
121
for ( i = 0 ; i < 3 ; i ++ ) {
128
122
rgb [ i ] = clamp ( rgb [ i ] , 0 , 255 ) ;
129
123
}
124
+
130
125
rgb [ 3 ] = clamp ( rgb [ 3 ] , 0 , 1 ) ;
131
126
132
127
return rgb ;
@@ -137,15 +132,15 @@ cs.get.hsl = function (string) {
137
132
return null ;
138
133
}
139
134
140
- var hsl = / ^ h s l a ? \( \s * ( [ + - ] ? (?: \d { 0 , 3 } \. ) ? \d + ) (?: d e g ) ? \s * , ? \s * ( [ + - ] ? [ \d \ .] + ) % \s * , ? \s * ( [ + - ] ? [ \d \ .] + ) % \s * (?: [ , | \ /] \s * ( [ + - ] ? (? = \. \d | \d ) (?: 0 | [ 1 - 9 ] \d * ) ? (?: \. \d * ) ? (?: [ e E ] [ + - ] ? \d + ) ? ) \s * ) ? \) $ / ;
141
- var match = string . match ( hsl ) ;
135
+ const hsl = / ^ h s l a ? \( \s * ( [ + - ] ? (?: \d { 0 , 3 } \. ) ? \d + ) (?: d e g ) ? \s * , ? \s * ( [ + - ] ? [ \d . ] + ) % \s * , ? \s * ( [ + - ] ? [ \d . ] + ) % \s * (?: [ , | / ] \s * ( [ + - ] ? (? = \. \d | \d ) (?: 0 | [ 1 - 9 ] \d * ) ? (?: \. \d * ) ? (?: [ e E ] [ + - ] ? \d + ) ? ) \s * ) ? \) $ / ;
136
+ const match = string . match ( hsl ) ;
142
137
143
138
if ( match ) {
144
- var alpha = parseFloat ( match [ 4 ] ) ;
145
- var h = ( ( parseFloat ( match [ 1 ] ) % 360 ) + 360 ) % 360 ;
146
- var s = clamp ( parseFloat ( match [ 2 ] ) , 0 , 100 ) ;
147
- var l = clamp ( parseFloat ( match [ 3 ] ) , 0 , 100 ) ;
148
- var a = clamp ( isNaN ( alpha ) ? 1 : alpha , 0 , 1 ) ;
139
+ const alpha = Number . parseFloat ( match [ 4 ] ) ;
140
+ const h = ( ( Number . parseFloat ( match [ 1 ] ) % 360 ) + 360 ) % 360 ;
141
+ const s = clamp ( Number . parseFloat ( match [ 2 ] ) , 0 , 100 ) ;
142
+ const l = clamp ( Number . parseFloat ( match [ 3 ] ) , 0 , 100 ) ;
143
+ const a = clamp ( Number . isNaN ( alpha ) ? 1 : alpha , 0 , 1 ) ;
149
144
150
145
return [ h , s , l , a ] ;
151
146
}
@@ -158,24 +153,22 @@ cs.get.hwb = function (string) {
158
153
return null ;
159
154
}
160
155
161
- var hwb = / ^ h w b \( \s * ( [ + - ] ? \d { 0 , 3 } (?: \. \d + ) ? ) (?: d e g ) ? \s * , \s * ( [ + - ] ? [ \d \ .] + ) % \s * , \s * ( [ + - ] ? [ \d \ .] + ) % \s * (?: , \s * ( [ + - ] ? (? = \. \d | \d ) (?: 0 | [ 1 - 9 ] \d * ) ? (?: \. \d * ) ? (?: [ e E ] [ + - ] ? \d + ) ? ) \s * ) ? \) $ / ;
162
- var match = string . match ( hwb ) ;
156
+ const hwb = / ^ h w b \( \s * ( [ + - ] ? \d { 0 , 3 } (?: \. \d + ) ? ) (?: d e g ) ? \s * , \s * ( [ + - ] ? [ \d . ] + ) % \s * , \s * ( [ + - ] ? [ \d . ] + ) % \s * (?: , \s * ( [ + - ] ? (? = \. \d | \d ) (?: 0 | [ 1 - 9 ] \d * ) ? (?: \. \d * ) ? (?: [ e E ] [ + - ] ? \d + ) ? ) \s * ) ? \) $ / ;
157
+ const match = string . match ( hwb ) ;
163
158
164
159
if ( match ) {
165
- var alpha = parseFloat ( match [ 4 ] ) ;
166
- var h = ( ( parseFloat ( match [ 1 ] ) % 360 ) + 360 ) % 360 ;
167
- var w = clamp ( parseFloat ( match [ 2 ] ) , 0 , 100 ) ;
168
- var b = clamp ( parseFloat ( match [ 3 ] ) , 0 , 100 ) ;
169
- var a = clamp ( isNaN ( alpha ) ? 1 : alpha , 0 , 1 ) ;
160
+ const alpha = Number . parseFloat ( match [ 4 ] ) ;
161
+ const h = ( ( Number . parseFloat ( match [ 1 ] ) % 360 ) + 360 ) % 360 ;
162
+ const w = clamp ( Number . parseFloat ( match [ 2 ] ) , 0 , 100 ) ;
163
+ const b = clamp ( Number . parseFloat ( match [ 3 ] ) , 0 , 100 ) ;
164
+ const a = clamp ( Number . isNaN ( alpha ) ? 1 : alpha , 0 , 1 ) ;
170
165
return [ h , w , b , a ] ;
171
166
}
172
167
173
168
return null ;
174
169
} ;
175
170
176
- cs . to . hex = function ( ) {
177
- var rgba = swizzle ( arguments ) ;
178
-
171
+ cs . to . hex = function ( ...rgba ) {
179
172
return (
180
173
'#' +
181
174
hexDouble ( rgba [ 0 ] ) +
@@ -187,56 +180,51 @@ cs.to.hex = function () {
187
180
) ;
188
181
} ;
189
182
190
- cs . to . rgb = function ( ) {
191
- var rgba = swizzle ( arguments ) ;
192
-
183
+ cs . to . rgb = function ( ...rgba ) {
193
184
return rgba . length < 4 || rgba [ 3 ] === 1
194
185
? 'rgb(' + Math . round ( rgba [ 0 ] ) + ', ' + Math . round ( rgba [ 1 ] ) + ', ' + Math . round ( rgba [ 2 ] ) + ')'
195
186
: 'rgba(' + Math . round ( rgba [ 0 ] ) + ', ' + Math . round ( rgba [ 1 ] ) + ', ' + Math . round ( rgba [ 2 ] ) + ', ' + rgba [ 3 ] + ')' ;
196
187
} ;
197
188
198
- cs . to . rgb . percent = function ( ) {
199
- var rgba = swizzle ( arguments ) ;
200
-
201
- var r = Math . round ( rgba [ 0 ] / 255 * 100 ) ;
202
- var g = Math . round ( rgba [ 1 ] / 255 * 100 ) ;
203
- var b = Math . round ( rgba [ 2 ] / 255 * 100 ) ;
189
+ cs . to . rgb . percent = function ( ...rgba ) {
190
+ const r = Math . round ( rgba [ 0 ] / 255 * 100 ) ;
191
+ const g = Math . round ( rgba [ 1 ] / 255 * 100 ) ;
192
+ const b = Math . round ( rgba [ 2 ] / 255 * 100 ) ;
204
193
205
194
return rgba . length < 4 || rgba [ 3 ] === 1
206
195
? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'
207
196
: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba [ 3 ] + ')' ;
208
197
} ;
209
198
210
- cs . to . hsl = function ( ) {
211
- var hsla = swizzle ( arguments ) ;
199
+ cs . to . hsl = function ( ...hsla ) {
212
200
return hsla . length < 4 || hsla [ 3 ] === 1
213
201
? 'hsl(' + hsla [ 0 ] + ', ' + hsla [ 1 ] + '%, ' + hsla [ 2 ] + '%)'
214
202
: 'hsla(' + hsla [ 0 ] + ', ' + hsla [ 1 ] + '%, ' + hsla [ 2 ] + '%, ' + hsla [ 3 ] + ')' ;
215
203
} ;
216
204
217
- // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax
205
+ // Hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax
218
206
// (hwb have alpha optional & 1 is default value)
219
- cs . to . hwb = function ( ) {
220
- var hwba = swizzle ( arguments ) ;
221
-
222
- var a = '' ;
207
+ cs . to . hwb = function ( ...hwba ) {
208
+ let a = '' ;
223
209
if ( hwba . length >= 4 && hwba [ 3 ] !== 1 ) {
224
210
a = ', ' + hwba [ 3 ] ;
225
211
}
226
212
227
213
return 'hwb(' + hwba [ 0 ] + ', ' + hwba [ 1 ] + '%, ' + hwba [ 2 ] + '%' + a + ')' ;
228
214
} ;
229
215
230
- cs . to . keyword = function ( rgb ) {
216
+ cs . to . keyword = function ( ... rgb ) {
231
217
return reverseNames [ rgb . slice ( 0 , 3 ) ] ;
232
218
} ;
233
219
234
- // helpers
235
- function clamp ( num , min , max ) {
236
- return Math . min ( Math . max ( min , num ) , max ) ;
220
+ // Helpers
221
+ function clamp ( number_ , min , max ) {
222
+ return Math . min ( Math . max ( min , number_ ) , max ) ;
237
223
}
238
224
239
- function hexDouble ( num ) {
240
- var str = Math . round ( num ) . toString ( 16 ) . toUpperCase ( ) ;
241
- return ( str . length < 2 ) ? '0' + str : str ;
225
+ function hexDouble ( number_ ) {
226
+ const string_ = Math . round ( number_ ) . toString ( 16 ) . toUpperCase ( ) ;
227
+ return ( string_ . length < 2 ) ? '0' + string_ : string_ ;
242
228
}
229
+
230
+ export default cs ;
0 commit comments