@@ -81,10 +81,29 @@ const tests = [
8181 [ 'color-mix(in hsl shorter hue, hsl(none 50% 50%), hsl(90deg 50% 50%)' , canonicalize ( 'hsl(90deg 50% 50%)' ) ] ,
8282 [ 'color-mix(in hsl increasing hue, hsl(none 50% 50%), hsl(90deg 50% 50%)' , canonicalize ( 'hsl(90deg 50% 50%)' ) ] ,
8383 [ 'color-mix(in hsl decreasing hue, hsl(none 50% 50%), hsl(90deg 50% 50%)' , canonicalize ( 'hsl(90deg 50% 50%)' ) ] ,
84- [ 'color-mix(in hsl longer hue, hsl(none 50% 50%), hsl(none 50% 50%)' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
85- [ 'color-mix(in hsl shorter hue, hsl(none 50% 50%), hsl(none 50% 50%)' , canonicalize ( 'hsl(0deg 50% 50%)' ) ] ,
86- [ 'color-mix(in hsl increasing hue, hsl(none 50% 50%), hsl(none 50% 50%)' , canonicalize ( 'hsl(0deg 50% 50%)' ) ] ,
87- [ 'color-mix(in hsl decreasing hue, hsl(none 50% 50%), hsl(none 50% 50%)' , canonicalize ( 'hsl(0deg 50% 50%)' ) ] ,
84+
85+ [ 'color-mix(in hsl longer hue, hsl(none 50% 50%), hsl(none 50% 50%))' , canonicalize ( 'hsl(none 50% 50%)' ) ] ,
86+ [ 'color-mix(in hsl shorter hue, hsl(none 50% 50%), hsl(none 50% 50%)' , canonicalize ( 'hsl(none 50% 50%)' ) ] ,
87+ [ 'color-mix(in hsl increasing hue, hsl(none 50% 50%), hsl(none 50% 50%))' , canonicalize ( 'hsl(none 50% 50%)' ) ] ,
88+ [ 'color-mix(in hsl decreasing hue, hsl(none 50% 50%), hsl(none 50% 50%))' , canonicalize ( 'hsl(none 50% 50%)' ) ] ,
89+
90+ [ 'color-mix(in hsl, color-mix(in hsl longer hue, hsl(none 50% 50%), hsl(none 50% 50%)), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
91+ [ 'color-mix(in hsl, color-mix(in hsl shorter hue, hsl(none 50% 50%), hsl(none 50% 50%)), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
92+ [ 'color-mix(in hsl, color-mix(in hsl increasing hue, hsl(none 50% 50%), hsl(none 50% 50%)), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
93+ [ 'color-mix(in hsl, color-mix(in hsl decreasing hue, hsl(none 50% 50%), hsl(none 50% 50%)), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
94+
95+ [ 'color-mix(in hsl longer hue, color-mix(in hsl longer hue, hsl(none 50% 50%), hsl(none 50% 50%)), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(0deg 50% 50%)' ) ] ,
96+ [ 'color-mix(in hsl shorter hue, color-mix(in hsl longer hue, hsl(none 50% 50%), hsl(none 50% 50%)), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
97+ [ 'color-mix(in hsl increasing hue, color-mix(in hsl longer hue, hsl(none 50% 50%), hsl(none 50% 50%)), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
98+ [ 'color-mix(in hsl decreasing hue, color-mix(in hsl longer hue, hsl(none 50% 50%), hsl(none 50% 50%)), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
99+
100+ [ 'color-mix(in hsl longer hue, hsl(180deg 50% 50%), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(0deg 50% 50%)' ) ] ,
101+ [ 'color-mix(in hsl shorter hue, hsl(180deg 50% 50%), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
102+ [ 'color-mix(in hsl increasing hue, hsl(180deg 50% 50%), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
103+ [ 'color-mix(in hsl decreasing hue, hsl(180deg 50% 50%), hsl(180deg 50% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
104+
105+ [ 'color-mix(in hsl, color-mix(in hsl longer hue, hsl(50deg 0% 50%), hsl(50deg 0% 50%)), hsl(180deg 100% 50%))' , canonicalize ( 'hsl(180deg 50% 50%)' ) ] ,
106+
88107 [ 'color-mix(in hsl, hsl(30deg 40% 80% / 25%) 0%, hsl(90deg none none / none))' , canonicalize ( 'hsl(90deg 40% 80% / 25%)' ) ] ,
89108 [ 'color-mix(in hwb, hwb(30deg 30% 40% / 25%) 0%, hwb(90deg none none / 0.5))' , canonicalize ( 'hwb(90deg 30% 40% / 0.5)' ) ] ,
90109 [ 'color-mix(in hsl, hsl(from hsl(none 50% 50%) h s l), hsl(from hsl(120deg 50% 50%) h s l))' , canonicalize ( 'hsl(120deg 50% 50%)' ) ] ,
@@ -187,3 +206,73 @@ assert.deepStrictEqual(
187206 syntaxFlags : new Set ( [ 'color-mix' , 'color-mix-variadic' ] ) ,
188207 } ,
189208) ;
209+
210+ assert . deepStrictEqual (
211+ color ( parse ( 'color-mix(in lch, lch(100 0 40deg), lch(100 0 60deg))' ) ) ,
212+ {
213+ colorNotation : 'lch' ,
214+ channels : [ 100 , 0 , Number . NaN ] ,
215+ alpha : 1 ,
216+ syntaxFlags : new Set ( [ 'color-mix' ] ) ,
217+ } ,
218+ ) ;
219+
220+ assert . deepStrictEqual (
221+ color ( parse ( 'oklch(from lch(100 0 0deg) l c h)' ) ) ,
222+ {
223+ colorNotation : 'oklch' ,
224+ channels : [ 1 , 4.996003610813204e-16 , Number . NaN ] ,
225+ alpha : 1 ,
226+ syntaxFlags : new Set ( [ 'relative-color-syntax' , 'has-number-values' ] ) ,
227+ } ,
228+ ) ;
229+
230+ assert . deepStrictEqual (
231+ color ( parse ( 'lch(from oklch(100 0 0deg) l c h)' ) ) ,
232+ {
233+ colorNotation : 'lch' ,
234+ channels : [ 100 , 1.1102230246251565e-13 , Number . NaN ] ,
235+ alpha : 1 ,
236+ syntaxFlags : new Set ( [ 'relative-color-syntax' , 'has-number-values' ] ) ,
237+ } ,
238+ ) ;
239+
240+ assert . deepStrictEqual (
241+ color ( parse ( 'color-mix(in oklch, lch(100 0 40deg), lch(100 0 60deg))' ) ) ,
242+ {
243+ colorNotation : 'oklch' ,
244+ channels : [ 1.0000000000000002 , 4.996003610813204e-16 , Number . NaN ] ,
245+ alpha : 1 ,
246+ syntaxFlags : new Set ( [ 'color-mix' ] ) ,
247+ } ,
248+ ) ;
249+
250+ assert . deepStrictEqual (
251+ color ( parse ( 'color-mix(in lch, lch(none 20 none), lch(none 40 none))' ) ) ,
252+ {
253+ colorNotation : 'lch' ,
254+ channels : [ Number . NaN , 30 , Number . NaN ] ,
255+ alpha : 1 ,
256+ syntaxFlags : new Set ( [ 'color-mix' ] ) ,
257+ } ,
258+ ) ;
259+
260+ assert . deepStrictEqual (
261+ color ( parse ( 'color-mix(in hsl, lch(50% 50% 30), hsl(50 50% 50%))' ) ) ,
262+ {
263+ colorNotation : 'hsl' ,
264+ channels : [ 383.202603842081 , 60.179695614531866 , 51.44446807428794 ] ,
265+ alpha : 1 ,
266+ syntaxFlags : new Set ( [ 'color-mix' ] ) ,
267+ } ,
268+ ) ;
269+
270+ assert . deepStrictEqual (
271+ color ( parse ( 'color-mix(in hsl, lch(none 0 30), hsl(50 0 none))' ) ) ,
272+ {
273+ colorNotation : 'hsl' ,
274+ channels : [ Number . NaN , 0 , Number . NaN ] ,
275+ alpha : 1 ,
276+ syntaxFlags : new Set ( [ 'color-mix' ] ) ,
277+ } ,
278+ ) ;
0 commit comments