From 507eab20d77a2e7c91d0d20559e9c21c3169db90 Mon Sep 17 00:00:00 2001 From: Romain Menke Date: Tue, 30 Jun 2026 17:43:19 +0200 Subject: [PATCH 1/3] make powerless to none conditional --- packages/css-color-parser/dist/index.mjs | 2 +- packages/css-color-parser/src/color-data.ts | 18 +++++----- .../css-color-parser/test/basic/basic.mjs | 2 +- .../test/basic/color-mix-function-oklch.mjs | 6 ++-- .../test/basic/color-mix-function.mjs | 9 ++--- .../test/basic/none-exhaustive.mjs | 26 +++++++------- .../test/basic/powerless-exhaustive.mjs | 36 +++++++++---------- .../wpt/color-computed-color-mix-function.mjs | 8 ++--- .../test/basic.expect.css | 2 +- .../test/basic.preserve-true.expect.css | 2 +- 10 files changed, 57 insertions(+), 54 deletions(-) diff --git a/packages/css-color-parser/dist/index.mjs b/packages/css-color-parser/dist/index.mjs index ce99edb51e..15f9154985 100644 --- a/packages/css-color-parser/dist/index.mjs +++ b/packages/css-color-parser/dist/index.mjs @@ -1 +1 @@ -import{TokenType as e,NumberType as a,isTokenIdent as n,isTokenPercentage as r,isTokenNumber as o,isTokenDelim as t,isTokenNumeric as l,isTokenComma as s,isTokenDimension as c,isTokenHash as u}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D65 as i,XYZ_D50_to_XYZ_D50 as h,XYZ_D65_to_OKLab as m,XYZ_D65_to_OKLCH as N,XYZ_D50_to_LCH as p,XYZ_D50_to_Lab as b,XYZ_D65_to_HWB as v,XYZ_D65_to_HSL as f,XYZ_D65_to_a98_RGB as g,XYZ_D50_to_ProPhoto as d,XYZ_D65_to_rec_2020 as y,XYZ_D65_to_lin_P3 as _,XYZ_D65_to_P3 as C,XYZ_D65_to_lin_sRGB as w,XYZ_D65_to_sRGB as x,XYZ_D50_to_XYZ_D65 as D,OKLCH_to_XYZ_D65 as L,LCH_to_XYZ_D65 as Z,OKLab_to_XYZ_D65 as H,Lab_to_XYZ_D65 as P,HWB_to_XYZ_D65 as k,HSL_to_XYZ_D65 as S,ProPhoto_RGB_to_XYZ_D65 as M,a98_RGB_to_XYZ_D65 as F,rec_2020_to_XYZ_D65 as z,lin_P3_to_XYZ_D65 as R,P3_to_XYZ_D65 as T,lin_sRGB_to_XYZ_D65 as X,sRGB_to_XYZ_D65 as B,XYZ_D65_to_XYZ_D50 as Y,OKLCH_to_XYZ_D50 as G,LCH_to_XYZ_D50 as V,OKLab_to_XYZ_D50 as A,Lab_to_XYZ_D50 as K,HWB_to_XYZ_D50 as I,HSL_to_XYZ_D50 as O,ProPhoto_RGB_to_XYZ_D50 as W,a98_RGB_to_XYZ_D50 as E,rec_2020_to_XYZ_D50 as U,lin_P3_to_XYZ_D50 as $,P3_to_XYZ_D50 as j,lin_sRGB_to_XYZ_D50 as q,sRGB_to_XYZ_D50 as J,namedColors as Q,inGamut as ee,clip as ae,gam_sRGB as ne,mapGamutRayTrace as re,OKLCH_to_OKLab as oe,OKLab_to_XYZ as te,XYZ_to_lin_sRGB as le,lin_sRGB_to_XYZ as se,XYZ_to_OKLab as ce,OKLab_to_OKLCH as ue,contrast_ratio_wcag_2_1 as ie,gam_P3 as he,XYZ_to_lin_P3 as me,lin_P3_to_XYZ as Ne}from"@csstools/color-helpers";import{isWhitespaceNode as pe,isCommentNode as be,isTokenNode as ve,isFunctionNode as fe,TokenNode as ge,isWhiteSpaceOrCommentNode as de,replaceComponentValues as ye,FunctionNode as _e,WhitespaceNode as Ce}from"@csstools/css-parser-algorithms";import{mathFunctionNames as we,calcFromComponentValues as xe}from"@csstools/css-calc";var De,Le;function convertNaNToZero(e){return[Number.isNaN(e[0])?0:e[0],Number.isNaN(e[1])?0:e[1],Number.isNaN(e[2])?0:e[2]]}function colorData_to_XYZ_D50(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D50,channels:J(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D50,channels:q(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:j(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:$(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D50,channels:U(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D50,channels:E(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D50,channels:W(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D50,channels:O(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D50,channels:I(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D50,channels:K(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D50,channels:A(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D50,channels:V(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D50,channels:G(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D50,channels:h(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D50,channels:Y(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}function colorData_to_XYZ_D65(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D65,channels:B(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D65,channels:X(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:T(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:R(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D65,channels:z(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D65,channels:F(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D65,channels:M(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D65,channels:S(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D65,channels:k(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D65,channels:P(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D65,channels:H(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D65,channels:Z(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D65,channels:L(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D65,channels:D(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D65,channels:i(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",e.Linear_Display_P3="display-p3-linear",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65"}(De||(De={})),function(e){e.ColorKeyword="color-keyword",e.HasAlpha="has-alpha",e.HasDimensionValues="has-dimension-values",e.HasNoneKeywords="has-none-keywords",e.HasNumberValues="has-number-values",e.HasPercentageAlpha="has-percentage-alpha",e.HasPercentageValues="has-percentage-values",e.HasVariableAlpha="has-variable-alpha",e.Hex="hex",e.LegacyHSL="legacy-hsl",e.LegacyRGB="legacy-rgb",e.NamedColor="named-color",e.RelativeColorSyntax="relative-color-syntax",e.ColorMix="color-mix",e.ColorMixVariadic="color-mix-variadic",e.ContrastColor="contrast-color",e.RelativeAlphaSyntax="relative-alpha-syntax",e.Experimental="experimental"}(Le||(Le={}));const Ze=new Set([De.A98_RGB,De.Display_P3,De.Linear_Display_P3,De.HEX,De.Linear_sRGB,De.ProPhoto_RGB,De.RGB,De.sRGB,De.Rec2020,De.XYZ_D50,De.XYZ_D65]);function colorDataTo(e,a){(e={...e}).channels=convertPowerlessComponentsToMissingComponents(e.channels,e.colorNotation);const n={...e};if(e.colorNotation!==a)switch(a){case De.HEX:case De.RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.RGB,n.channels=x(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.sRGB,n.channels=x(e.channels);break}case De.Linear_sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_sRGB,n.channels=w(e.channels);break}case De.Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Display_P3,n.channels=C(e.channels);break}case De.Linear_Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_Display_P3,n.channels=_(e.channels);break}case De.Rec2020:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Rec2020,n.channels=y(e.channels);break}case De.ProPhoto_RGB:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.ProPhoto_RGB,n.channels=d(e.channels);break}case De.A98_RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.A98_RGB,n.channels=g(e.channels);break}case De.HSL:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HSL,n.channels=f(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.HWB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HWB,n.channels=v(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.Lab:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.Lab,n.channels=b(e.channels);break}case De.LCH:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.LCH,n.channels=p(e.channels);break}case De.OKLCH:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLCH,n.channels=N(e.channels);break}case De.OKLab:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLab,n.channels=m(e.channels);break}case De.XYZ_D50:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.XYZ_D50,n.channels=h(e.channels);break}case De.XYZ_D65:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.XYZ_D65,n.channels=i(e.channels);break}default:throw new Error("Unsupported color notation")}else n.channels=convertNaNToZero(e.channels);if(a===e.colorNotation)n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else if(Ze.has(a)&&Ze.has(e.colorNotation))n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else switch(a){case De.HSL:switch(e.colorNotation){case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.HWB:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.Lab:case De.OKLab:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.LCH:case De.OKLCH:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}return n.channels=convertPowerlessComponentsToMissingComponents(n.channels,a),n}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN),(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=Number.NaN,n[1]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN)}return n}function carryForwardMissingComponents(e,a,n,r,o,t){if(a.length<3&&e.every(Number.isNaN))return[Number.NaN,Number.NaN,Number.NaN];const l=[...r];for(let n=0;nNumber.isNaN(e[a])))for(let e=0;ee<-1e-5||e>1.00001)}function colorDataFitsDisplayP3_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,De.Display_P3).channels.find(e=>e<-1e-5||e>1.00001)}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const He=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(He,e=>String.fromCharCode(e.charCodeAt(0)+32))}function normalize_Color_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}const Pe=new Set(["srgb","srgb-linear","display-p3","display-p3-linear","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,a){const r=[],s=[],c=[],u=[];let i,h,m=!1,N=!1;const p={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let b=r;for(let o=0;o=0){t=u.value[4].value;continue}}return!1}if(!o)return!1;n.push({color:o,percentage:t}),o=!1,t=!1}}return!!o&&(n.push({color:o,percentage:t}),n)}function colorMixRectangular(e,a){if(!a||!a.length)return!1;for(const e of a)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:n,leftover:r}=normalizeMixPercentages(a,!0),o=1-r/100;let t;switch(e){case"srgb":t=De.RGB;break;case"srgb-linear":t=De.Linear_sRGB;break;case"display-p3":t=De.Display_P3;break;case"display-p3-linear":t=De.Linear_Display_P3;break;case"a98-rgb":t=De.A98_RGB;break;case"prophoto-rgb":t=De.ProPhoto_RGB;break;case"rec2020":t=De.Rec2020;break;case"lab":t=De.Lab;break;case"oklab":t=De.OKLab;break;case"xyz-d50":t=De.XYZ_D50;break;case"xyz":case"xyz-d65":t=De.XYZ_D65;break;default:return!1}if(1===n.length){const e=colorDataTo(n[0].color,t);return e.colorNotation=t,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*o,e)}for(n.reverse();n.length>=2;){const e=n.pop(),a=n.pop();if(!e||!a)return!1;const r=e.percentage+a.percentage,o=r>0?a.percentage/r:.5,l=colorMixRectangularPair(t,e.color,a.color,o);if(!l)return!1;n.push({color:l,percentage:r})}const l=n[0]?.color;return!!l&&("number"==typeof l.alpha&&(l.alpha=l.alpha*o,a.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&l.syntaxFlags.add(Le.Experimental),2!==a.length&&l.syntaxFlags.add(Le.ColorMixVariadic),l))}function colorMixRectangularPair(e,a,n,r){let o=a.alpha;if("number"!=typeof o)return!1;let t=n.alpha;if("number"!=typeof t)return!1;o=Number.isNaN(o)?t:o,t=Number.isNaN(t)?o:t;const l=colorDataTo(a,e).channels,s=colorDataTo(n,e).channels;l[0]=fillInMissingComponent(l[0],s[0]),s[0]=fillInMissingComponent(s[0],l[0]),l[1]=fillInMissingComponent(l[1],s[1]),s[1]=fillInMissingComponent(s[1],l[1]),l[2]=fillInMissingComponent(l[2],s[2]),s[2]=fillInMissingComponent(s[2],l[2]),l[0]=premultiply(l[0],o),l[1]=premultiply(l[1],o),l[2]=premultiply(l[2],o),s[0]=premultiply(s[0],t),s[1]=premultiply(s[1],t),s[2]=premultiply(s[2],t);const c=interpolate(o,t,r);return{colorNotation:e,channels:[un_premultiply(interpolate(l[0],s[0],r),c),un_premultiply(interpolate(l[1],s[1],r),c),un_premultiply(interpolate(l[2],s[2],r),c)],alpha:c,syntaxFlags:new Set([Le.ColorMix])}}function colorMixPolar(e,a,n){if(!n||!n.length)return!1;for(const e of n)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:r,leftover:o}=normalizeMixPercentages(n,!0),t=1-o/100;let l;switch(e){case"hsl":l=De.HSL;break;case"hwb":l=De.HWB;break;case"lch":l=De.LCH;break;case"oklch":l=De.OKLCH;break;default:return!1}if(1===r.length){const e=colorDataTo(r[0].color,l);return e.colorNotation=l,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*t,e)}for(r.reverse();r.length>=2;){const e=r.pop(),n=r.pop();if(!e||!n)return!1;const o=e.percentage+n.percentage,t=o>0?n.percentage/o:.5,s=colorMixPolarPair(l,a,e.color,n.color,t);if(!s)return!1;r.push({color:s,percentage:o})}const s=r[0]?.color;return!!s&&("number"==typeof s.alpha&&(s.alpha=s.alpha*t,n.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&s.syntaxFlags.add(Le.Experimental),2!==n.length&&s.syntaxFlags.add(Le.ColorMixVariadic),s))}function colorMixPolarPair(e,a,n,r,o){let t=0,l=0,s=0,c=0,u=0,i=0,h=n.alpha;if("number"!=typeof h)return!1;let m=r.alpha;if("number"!=typeof m)return!1;h=Number.isNaN(h)?m:h,m=Number.isNaN(m)?h:m;const N=colorDataTo(n,e).channels,p=colorDataTo(r,e).channels;switch(e){case De.HSL:case De.HWB:t=N[0],l=p[0],s=N[1],c=p[1],u=N[2],i=p[2];break;case De.LCH:case De.OKLCH:s=N[0],c=p[0],u=N[1],i=p[1],t=N[2],l=p[2]}if(s=fillInMissingComponent(s,c),c=fillInMissingComponent(c,s),u=fillInMissingComponent(u,i),i=fillInMissingComponent(i,u),t=fillInMissingComponent(t,l),l=fillInMissingComponent(l,t),Number.isNaN(t)&&Number.isNaN(l));else{Number.isNaN(t)?t=0:Number.isNaN(l)&&(l=0);const e=l-t;switch(a){case"shorter":e>180?t+=360:e<-180&&(l+=360);break;case"longer":-1800?t+=360:l+=360);break;case"increasing":e<0&&(l+=360);break;case"decreasing":e>0&&(t+=360);break;default:throw new Error("Unknown hue interpolation method")}}s=premultiply(s,h),u=premultiply(u,h),c=premultiply(c,m),i=premultiply(i,m);let b=[0,0,0];const v=interpolate(h,m,o);switch(e){case De.HSL:case De.HWB:b=[interpolate(t,l,o),un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v)];break;case De.LCH:case De.OKLCH:b=[un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v),interpolate(t,l,o)]}return{colorNotation:e,channels:b,alpha:v,syntaxFlags:new Set([Le.ColorMix])}}function fillInMissingComponent(e,a){return Number.isNaN(e)?a:e}function interpolate(e,a,n){return e*(1-n)+a*n}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e/a}function normalizeMixPercentages(e,a=!1){let n=0,r=0;for(const a of e)a.percentage&&(n+=a.percentage),!1===a.percentage&&r++;n=Math.min(100,n);for(const a of e)!1===a.percentage&&(a.percentage=(100-n)/r);const o=e.slice();let t=0;for(const e of o)t+=e.percentage;if(t>100||t>0&&a)for(const e of o)e.percentage=e.percentage*(100/t);let l=0;return t<100&&(l=100-t),{items:o,leftover:l}}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:De.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([Le.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}return!1}function normalizeHue(n){if(o(n))return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),n[4].value=n[4].value%360,n[4].value<0&&(n[4].value+=360),n[1]=n[4].value.toString(),n;if(c(n)){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":r=180*n[4].value/Math.PI;break;case"grad":r=.9*n[4].value;break;case"turn":r=360*n[4].value;break;default:return!1}return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),r%=360,r<0&&(r+=360),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,t,l){if(0===t){const e=normalizeHue(n);return!1!==e&&(c(n)&&l.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,100,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){if(3!==t)return!1;let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,100,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,1,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function threeChannelLegacySyntax(e,a,n,r){const t=[],c=[],u=[],i=[],h={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let m=t;for(let a=0;ave(e)&&s(e.value))){const a=hslCommaSeparated(e);if(!1!==a)return a}{const n=hslSpaceSeparated(e,a);if(!1!==n)return n}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,De.HSL,[Le.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,De.HSL,[],a)}function normalize_HWB_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,.8,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,De.Lab,[],a)}function normalize_LCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,100/150,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,De.LCH,[],a)}const Fe=new Map;for(const[e,a]of Object.entries(Q))Fe.set(e,a);function namedColor(e){const a=Fe.get(toLowerCaseAZ(e));return!!a&&{colorNotation:De.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([Le.ColorKeyword,Le.NamedColor])}}function normalize_OKLab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l||2===l?n=normalize(t[4].value,250,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,De.OKLab,[],a)}function normalize_OKLCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l?n=normalize(t[4].value,250,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,De.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,t,l){if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);const r=normalize(n[4].value,100,0,1);return[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){3!==t&&l.syntaxFlags.add(Le.HasNumberValues);let r=normalize(n[4].value,255,0,1);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(t,l,s){if(n(t)&&"none"===t[4].value.toLowerCase())return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,255,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function rgb(e,a){if(e.value.some(e=>ve(e)&&s(e.value))){const a=rgbCommaSeparated(e);if(!1!==a)return(!a.syntaxFlags.has(Le.HasNumberValues)||!a.syntaxFlags.has(Le.HasPercentageValues))&&a}else{const n=rgbSpaceSeparated(e,a);if(!1!==n)return n}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,De.RGB,[Le.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,De.RGB,[],a)}function XYZ_D65_to_sRGB_Gamut(e){const a=x(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),ne(re(n,oklch_to_lin_srgb,lin_srgb_to_oklch))}function oklch_to_lin_srgb(e){return e=oe(e),e=te(e),le(e)}function lin_srgb_to_oklch(e){return e=se(e),e=ce(e),ue(e)}function contrastColor(e,a){let n=!1;for(let r=0;rt?[1,1,1]:[0,0,0],r}function alpha(e,a){let r,s,c=!1,u=!1,i=!1;const h={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let m=0;m{if(ve(e)&&n(e.value)&&"alpha"===toLowerCaseAZ(e.value[4].value)&&r&&r.has("alpha"))return new ge(r.get("alpha"))});h.alpha=e[0][0],u=!0;continue}return!1}if(i)return!1;for(;pe(e.value[m+1])||be(e.value[m+1]);)m++;if(m++,N=e.value[m],i=a(N),!1===i)return!1;r=normalizeRelativeColorDataChannels(i),s=noneToZeroInRelativeColorDataChannels(r),h.syntaxFlags=new Set(i.syntaxFlags),h.syntaxFlags.add(Le.RelativeAlphaSyntax),h.channels=[...i.channels],h.colorNotation=i.colorNotation,h.alpha=i.alpha}}return!!r&&h}function XYZ_D65_to_P3_Gamut(e){const a=C(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),he(re(n,oklch_to_lin_p3,lin_p3_to_oklch))}function oklch_to_lin_p3(e){return e=oe(e),e=te(e),me(e)}function lin_p3_to_oklch(e){return e=Ne(e),e=ce(e),ue(e)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(Math.abs(e))+"").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new _e(r,l,t):new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),new ge([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),n.alpha])}function serializeP3(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map(e=>Number.isNaN(e)?0:e);r?o=XYZ_D65_to_P3_Gamut(colorData_to_XYZ_D65(n).channels):n.colorNotation!==De.Display_P3&&(o=C(colorData_to_XYZ_D65(n).channels));const t=r?Math.min(1,Math.max(0,toPrecision(o[0],6))):toPrecision(o[0],6),l=r?Math.min(1,Math.max(0,toPrecision(o[1],6))):toPrecision(o[1],6),s=r?Math.min(1,Math.max(0,toPrecision(o[2],6))):toPrecision(o[2],6),c=[e.Function,"color(",-1,-1,{value:"color"}],u=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,c,u,[new ge([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new Ce([u]),new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function serializeRGB(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=r?XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels):x(colorData_to_XYZ_D65(n).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[0])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[1])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[2])),type:a.Integer}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"rgb(",-1,-1,{value:"rgb"}],c,h):new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeHSL(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=f(r?B(XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels)):colorData_to_XYZ_D65(n).channels),o=o.map(e=>Number.isNaN(e)?0:e);const t=Math.min(360,Math.max(0,Math.round(toPrecision(o[0]))))%360,l=Math.min(100,Math.max(0,Math.round(toPrecision(o[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Percentage,l.toString()+"%",-1,-1,{value:o[1]}]),new ge(i),new Ce([u]),new ge([e.Percentage,s.toString()+"%",-1,-1,{value:o[2]}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"hsl(",-1,-1,{value:"hsl"}],c,h):new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeOKLCH(n){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let r=n.channels.map(e=>Number.isNaN(e)?0:e);n.colorNotation!==De.OKLCH&&(r=N(colorData_to_XYZ_D65(n).channels));const o=toPrecision(r[0],6),t=toPrecision(r[1],6),l=toPrecision(r[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],c=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,s,c,[new ge([e.Number,o.toString(),-1,-1,{value:r[0],type:a.Number}]),new Ce([c]),new ge([e.Number,t.toString(),-1,-1,{value:r[1],type:a.Number}]),new Ce([c]),new ge([e.Number,l.toString(),-1,-1,{value:r[2],type:a.Number}])])}function color(e){if(fe(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return a=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,De.HWB,[],a);case"lab":return lab(e,color);case"lch":return lch(e,color);case"oklab":return oklab(e,color);case"oklch":return oklch(e,color);case"color":return color$1(e,color);case"color-mix":return colorMix(e,color);case"contrast-color":return contrastColor(e,color);case"alpha":return alpha(e,color)}}var a;if(ve(e)){if(u(e.value))return hex(e.value);if(n(e.value)){const a=namedColor(e.value[4].value);return!1!==a?a:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:De.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([Le.ColorKeyword])}}}return!1}export{De as ColorNotation,Le as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,serializeHSL,serializeOKLCH,serializeP3,serializeRGB}; +import{TokenType as e,NumberType as a,isTokenIdent as n,isTokenPercentage as r,isTokenNumber as o,isTokenDelim as t,isTokenNumeric as l,isTokenComma as s,isTokenDimension as c,isTokenHash as u}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D65 as i,XYZ_D50_to_XYZ_D50 as h,XYZ_D65_to_OKLab as m,XYZ_D65_to_OKLCH as N,XYZ_D50_to_LCH as p,XYZ_D50_to_Lab as b,XYZ_D65_to_HWB as v,XYZ_D65_to_HSL as f,XYZ_D65_to_a98_RGB as g,XYZ_D50_to_ProPhoto as d,XYZ_D65_to_rec_2020 as y,XYZ_D65_to_lin_P3 as _,XYZ_D65_to_P3 as C,XYZ_D65_to_lin_sRGB as w,XYZ_D65_to_sRGB as x,XYZ_D50_to_XYZ_D65 as D,OKLCH_to_XYZ_D65 as L,LCH_to_XYZ_D65 as H,OKLab_to_XYZ_D65 as Z,Lab_to_XYZ_D65 as P,HWB_to_XYZ_D65 as k,HSL_to_XYZ_D65 as S,ProPhoto_RGB_to_XYZ_D65 as M,a98_RGB_to_XYZ_D65 as F,rec_2020_to_XYZ_D65 as z,lin_P3_to_XYZ_D65 as R,P3_to_XYZ_D65 as T,lin_sRGB_to_XYZ_D65 as X,sRGB_to_XYZ_D65 as B,XYZ_D65_to_XYZ_D50 as Y,OKLCH_to_XYZ_D50 as G,LCH_to_XYZ_D50 as V,OKLab_to_XYZ_D50 as A,Lab_to_XYZ_D50 as K,HWB_to_XYZ_D50 as I,HSL_to_XYZ_D50 as O,ProPhoto_RGB_to_XYZ_D50 as W,a98_RGB_to_XYZ_D50 as E,rec_2020_to_XYZ_D50 as U,lin_P3_to_XYZ_D50 as $,P3_to_XYZ_D50 as j,lin_sRGB_to_XYZ_D50 as q,sRGB_to_XYZ_D50 as J,namedColors as Q,inGamut as ee,clip as ae,gam_sRGB as ne,mapGamutRayTrace as re,OKLCH_to_OKLab as oe,OKLab_to_XYZ as te,XYZ_to_lin_sRGB as le,lin_sRGB_to_XYZ as se,XYZ_to_OKLab as ce,OKLab_to_OKLCH as ue,contrast_ratio_wcag_2_1 as ie,gam_P3 as he,XYZ_to_lin_P3 as me,lin_P3_to_XYZ as Ne}from"@csstools/color-helpers";import{isWhitespaceNode as pe,isCommentNode as be,isTokenNode as ve,isFunctionNode as fe,TokenNode as ge,isWhiteSpaceOrCommentNode as de,replaceComponentValues as ye,FunctionNode as _e,WhitespaceNode as Ce}from"@csstools/css-parser-algorithms";import{mathFunctionNames as we,calcFromComponentValues as xe}from"@csstools/css-calc";var De,Le;function convertNaNToZero(e){return[Number.isNaN(e[0])?0:e[0],Number.isNaN(e[1])?0:e[1],Number.isNaN(e[2])?0:e[2]]}function colorData_to_XYZ_D50(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D50,channels:J(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D50,channels:q(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:j(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:$(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D50,channels:U(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D50,channels:E(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D50,channels:W(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D50,channels:O(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D50,channels:I(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D50,channels:K(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D50,channels:A(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D50,channels:V(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D50,channels:G(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D50,channels:h(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D50,channels:Y(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}function colorData_to_XYZ_D65(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D65,channels:B(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D65,channels:X(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:T(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:R(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D65,channels:z(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D65,channels:F(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D65,channels:M(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D65,channels:S(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D65,channels:k(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D65,channels:P(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D65,channels:Z(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D65,channels:H(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D65,channels:L(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D65,channels:D(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D65,channels:i(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",e.Linear_Display_P3="display-p3-linear",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65"}(De||(De={})),function(e){e.ColorKeyword="color-keyword",e.HasAlpha="has-alpha",e.HasDimensionValues="has-dimension-values",e.HasNoneKeywords="has-none-keywords",e.HasNumberValues="has-number-values",e.HasPercentageAlpha="has-percentage-alpha",e.HasPercentageValues="has-percentage-values",e.HasVariableAlpha="has-variable-alpha",e.Hex="hex",e.LegacyHSL="legacy-hsl",e.LegacyRGB="legacy-rgb",e.NamedColor="named-color",e.RelativeColorSyntax="relative-color-syntax",e.ColorMix="color-mix",e.ColorMixVariadic="color-mix-variadic",e.ContrastColor="contrast-color",e.RelativeAlphaSyntax="relative-alpha-syntax",e.Experimental="experimental"}(Le||(Le={}));const He=new Set([De.A98_RGB,De.Display_P3,De.Linear_Display_P3,De.HEX,De.Linear_sRGB,De.ProPhoto_RGB,De.RGB,De.sRGB,De.Rec2020,De.XYZ_D50,De.XYZ_D65]);function colorDataTo(e,a){const n={...e};if(e.colorNotation!==a)switch(a){case De.HEX:case De.RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.RGB,n.channels=x(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.sRGB,n.channels=x(e.channels);break}case De.Linear_sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_sRGB,n.channels=w(e.channels);break}case De.Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Display_P3,n.channels=C(e.channels);break}case De.Linear_Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_Display_P3,n.channels=_(e.channels);break}case De.Rec2020:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Rec2020,n.channels=y(e.channels);break}case De.ProPhoto_RGB:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.ProPhoto_RGB,n.channels=d(e.channels);break}case De.A98_RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.A98_RGB,n.channels=g(e.channels);break}case De.HSL:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HSL,n.channels=f(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.HWB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HWB,n.channels=v(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.Lab:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.Lab,n.channels=b(e.channels);break}case De.LCH:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.LCH,n.channels=p(e.channels);break}case De.OKLCH:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLCH,n.channels=N(e.channels);break}case De.OKLab:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLab,n.channels=m(e.channels);break}case De.XYZ_D50:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.XYZ_D50,n.channels=h(e.channels);break}case De.XYZ_D65:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.XYZ_D65,n.channels=i(e.channels);break}default:throw new Error("Unsupported color notation")}else n.channels=convertNaNToZero(e.channels);if(a===e.colorNotation)n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else if(He.has(a)&&He.has(e.colorNotation))n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else switch(a){case De.HSL:switch(e.colorNotation){case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.HWB:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.Lab:case De.OKLab:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.LCH:case De.OKLCH:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}switch(e.colorNotation){case De.HSL:case De.HWB:case De.LCH:case De.OKLCH:break;default:n.channels=convertPowerlessComponentsToMissingComponents(n.channels,a)}return n}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN),(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=Number.NaN,n[1]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN)}return n}function carryForwardMissingComponents(e,a,n,r,o,t){if(a.length<3&&e.every(Number.isNaN))return[Number.NaN,Number.NaN,Number.NaN];const l=[...r];for(let n=0;nNumber.isNaN(e[a])))for(let e=0;ee<-1e-5||e>1.00001)}function colorDataFitsDisplayP3_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,De.Display_P3).channels.find(e=>e<-1e-5||e>1.00001)}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const Ze=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(Ze,e=>String.fromCharCode(e.charCodeAt(0)+32))}function normalize_Color_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}const Pe=new Set(["srgb","srgb-linear","display-p3","display-p3-linear","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,a){const r=[],s=[],c=[],u=[];let i,h,m=!1,N=!1;const p={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let b=r;for(let o=0;o=0){t=u.value[4].value;continue}}return!1}if(!o)return!1;n.push({color:o,percentage:t}),o=!1,t=!1}}return!!o&&(n.push({color:o,percentage:t}),n)}function colorMixRectangular(e,a){if(!a||!a.length)return!1;for(const e of a)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:n,leftover:r}=normalizeMixPercentages(a,!0),o=1-r/100;let t;switch(e){case"srgb":t=De.RGB;break;case"srgb-linear":t=De.Linear_sRGB;break;case"display-p3":t=De.Display_P3;break;case"display-p3-linear":t=De.Linear_Display_P3;break;case"a98-rgb":t=De.A98_RGB;break;case"prophoto-rgb":t=De.ProPhoto_RGB;break;case"rec2020":t=De.Rec2020;break;case"lab":t=De.Lab;break;case"oklab":t=De.OKLab;break;case"xyz-d50":t=De.XYZ_D50;break;case"xyz":case"xyz-d65":t=De.XYZ_D65;break;default:return!1}if(1===n.length){const e=colorDataTo(n[0].color,t);return e.colorNotation=t,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*o,e)}for(n.reverse();n.length>=2;){const e=n.pop(),a=n.pop();if(!e||!a)return!1;const r=e.percentage+a.percentage,o=r>0?a.percentage/r:.5,l=colorMixRectangularPair(t,e.color,a.color,o);if(!l)return!1;n.push({color:l,percentage:r})}const l=n[0]?.color;return!!l&&("number"==typeof l.alpha&&(l.alpha=l.alpha*o,a.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&l.syntaxFlags.add(Le.Experimental),2!==a.length&&l.syntaxFlags.add(Le.ColorMixVariadic),l))}function colorMixRectangularPair(e,a,n,r){let o=a.alpha;if("number"!=typeof o)return!1;let t=n.alpha;if("number"!=typeof t)return!1;o=Number.isNaN(o)?t:o,t=Number.isNaN(t)?o:t;const l=colorDataTo(a,e).channels,s=colorDataTo(n,e).channels;l[0]=fillInMissingComponent(l[0],s[0]),s[0]=fillInMissingComponent(s[0],l[0]),l[1]=fillInMissingComponent(l[1],s[1]),s[1]=fillInMissingComponent(s[1],l[1]),l[2]=fillInMissingComponent(l[2],s[2]),s[2]=fillInMissingComponent(s[2],l[2]),l[0]=premultiply(l[0],o),l[1]=premultiply(l[1],o),l[2]=premultiply(l[2],o),s[0]=premultiply(s[0],t),s[1]=premultiply(s[1],t),s[2]=premultiply(s[2],t);const c=interpolate(o,t,r);return{colorNotation:e,channels:[un_premultiply(interpolate(l[0],s[0],r),c),un_premultiply(interpolate(l[1],s[1],r),c),un_premultiply(interpolate(l[2],s[2],r),c)],alpha:c,syntaxFlags:new Set([Le.ColorMix])}}function colorMixPolar(e,a,n){if(!n||!n.length)return!1;for(const e of n)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:r,leftover:o}=normalizeMixPercentages(n,!0),t=1-o/100;let l;switch(e){case"hsl":l=De.HSL;break;case"hwb":l=De.HWB;break;case"lch":l=De.LCH;break;case"oklch":l=De.OKLCH;break;default:return!1}if(1===r.length){const e=colorDataTo(r[0].color,l);return e.colorNotation=l,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*t,e)}for(r.reverse();r.length>=2;){const e=r.pop(),n=r.pop();if(!e||!n)return!1;const o=e.percentage+n.percentage,t=o>0?n.percentage/o:.5,s=colorMixPolarPair(l,a,e.color,n.color,t);if(!s)return!1;r.push({color:s,percentage:o})}const s=r[0]?.color;return!!s&&("number"==typeof s.alpha&&(s.alpha=s.alpha*t,n.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&s.syntaxFlags.add(Le.Experimental),2!==n.length&&s.syntaxFlags.add(Le.ColorMixVariadic),s))}function colorMixPolarPair(e,a,n,r,o){let t=0,l=0,s=0,c=0,u=0,i=0,h=n.alpha;if("number"!=typeof h)return!1;let m=r.alpha;if("number"!=typeof m)return!1;h=Number.isNaN(h)?m:h,m=Number.isNaN(m)?h:m;const N=colorDataTo(n,e).channels,p=colorDataTo(r,e).channels;switch(e){case De.HSL:case De.HWB:t=N[0],l=p[0],s=N[1],c=p[1],u=N[2],i=p[2];break;case De.LCH:case De.OKLCH:s=N[0],c=p[0],u=N[1],i=p[1],t=N[2],l=p[2]}if(s=fillInMissingComponent(s,c),c=fillInMissingComponent(c,s),u=fillInMissingComponent(u,i),i=fillInMissingComponent(i,u),t=fillInMissingComponent(t,l),l=fillInMissingComponent(l,t),Number.isNaN(t)&&Number.isNaN(l));else{Number.isNaN(t)?t=0:Number.isNaN(l)&&(l=0);const e=l-t;switch(a){case"shorter":e>180?t+=360:e<-180&&(l+=360);break;case"longer":-1800?t+=360:l+=360);break;case"increasing":e<0&&(l+=360);break;case"decreasing":e>0&&(t+=360);break;default:throw new Error("Unknown hue interpolation method")}}s=premultiply(s,h),u=premultiply(u,h),c=premultiply(c,m),i=premultiply(i,m);let b=[0,0,0];const v=interpolate(h,m,o);switch(e){case De.HSL:case De.HWB:b=[interpolate(t,l,o),un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v)];break;case De.LCH:case De.OKLCH:b=[un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v),interpolate(t,l,o)]}return{colorNotation:e,channels:b,alpha:v,syntaxFlags:new Set([Le.ColorMix])}}function fillInMissingComponent(e,a){return Number.isNaN(e)?a:e}function interpolate(e,a,n){return e*(1-n)+a*n}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e/a}function normalizeMixPercentages(e,a=!1){let n=0,r=0;for(const a of e)a.percentage&&(n+=a.percentage),!1===a.percentage&&r++;n=Math.min(100,n);for(const a of e)!1===a.percentage&&(a.percentage=(100-n)/r);const o=e.slice();let t=0;for(const e of o)t+=e.percentage;if(t>100||t>0&&a)for(const e of o)e.percentage=e.percentage*(100/t);let l=0;return t<100&&(l=100-t),{items:o,leftover:l}}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:De.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([Le.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}return!1}function normalizeHue(n){if(o(n))return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),n[4].value=n[4].value%360,n[4].value<0&&(n[4].value+=360),n[1]=n[4].value.toString(),n;if(c(n)){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":r=180*n[4].value/Math.PI;break;case"grad":r=.9*n[4].value;break;case"turn":r=360*n[4].value;break;default:return!1}return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),r%=360,r<0&&(r+=360),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,t,l){if(0===t){const e=normalizeHue(n);return!1!==e&&(c(n)&&l.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,100,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){if(3!==t)return!1;let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,100,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,1,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function threeChannelLegacySyntax(e,a,n,r){const t=[],c=[],u=[],i=[],h={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let m=t;for(let a=0;ave(e)&&s(e.value))){const a=hslCommaSeparated(e);if(!1!==a)return a}{const n=hslSpaceSeparated(e,a);if(!1!==n)return n}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,De.HSL,[Le.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,De.HSL,[],a)}function normalize_HWB_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,.8,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,De.Lab,[],a)}function normalize_LCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,100/150,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,De.LCH,[],a)}const Fe=new Map;for(const[e,a]of Object.entries(Q))Fe.set(e,a);function namedColor(e){const a=Fe.get(toLowerCaseAZ(e));return!!a&&{colorNotation:De.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([Le.ColorKeyword,Le.NamedColor])}}function normalize_OKLab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l||2===l?n=normalize(t[4].value,250,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,De.OKLab,[],a)}function normalize_OKLCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l?n=normalize(t[4].value,250,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,De.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,t,l){if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);const r=normalize(n[4].value,100,0,1);return[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){3!==t&&l.syntaxFlags.add(Le.HasNumberValues);let r=normalize(n[4].value,255,0,1);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(t,l,s){if(n(t)&&"none"===t[4].value.toLowerCase())return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,255,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function rgb(e,a){if(e.value.some(e=>ve(e)&&s(e.value))){const a=rgbCommaSeparated(e);if(!1!==a)return(!a.syntaxFlags.has(Le.HasNumberValues)||!a.syntaxFlags.has(Le.HasPercentageValues))&&a}else{const n=rgbSpaceSeparated(e,a);if(!1!==n)return n}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,De.RGB,[Le.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,De.RGB,[],a)}function XYZ_D65_to_sRGB_Gamut(e){const a=x(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),ne(re(n,oklch_to_lin_srgb,lin_srgb_to_oklch))}function oklch_to_lin_srgb(e){return e=oe(e),e=te(e),le(e)}function lin_srgb_to_oklch(e){return e=se(e),e=ce(e),ue(e)}function contrastColor(e,a){let n=!1;for(let r=0;rt?[1,1,1]:[0,0,0],r}function alpha(e,a){let r,s,c=!1,u=!1,i=!1;const h={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let m=0;m{if(ve(e)&&n(e.value)&&"alpha"===toLowerCaseAZ(e.value[4].value)&&r&&r.has("alpha"))return new ge(r.get("alpha"))});h.alpha=e[0][0],u=!0;continue}return!1}if(i)return!1;for(;pe(e.value[m+1])||be(e.value[m+1]);)m++;if(m++,N=e.value[m],i=a(N),!1===i)return!1;r=normalizeRelativeColorDataChannels(i),s=noneToZeroInRelativeColorDataChannels(r),h.syntaxFlags=new Set(i.syntaxFlags),h.syntaxFlags.add(Le.RelativeAlphaSyntax),h.channels=[...i.channels],h.colorNotation=i.colorNotation,h.alpha=i.alpha}}return!!r&&h}function XYZ_D65_to_P3_Gamut(e){const a=C(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),he(re(n,oklch_to_lin_p3,lin_p3_to_oklch))}function oklch_to_lin_p3(e){return e=oe(e),e=te(e),me(e)}function lin_p3_to_oklch(e){return e=Ne(e),e=ce(e),ue(e)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(Math.abs(e))+"").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new _e(r,l,t):new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),new ge([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),n.alpha])}function serializeP3(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map(e=>Number.isNaN(e)?0:e);r?o=XYZ_D65_to_P3_Gamut(colorData_to_XYZ_D65(n).channels):n.colorNotation!==De.Display_P3&&(o=C(colorData_to_XYZ_D65(n).channels));const t=r?Math.min(1,Math.max(0,toPrecision(o[0],6))):toPrecision(o[0],6),l=r?Math.min(1,Math.max(0,toPrecision(o[1],6))):toPrecision(o[1],6),s=r?Math.min(1,Math.max(0,toPrecision(o[2],6))):toPrecision(o[2],6),c=[e.Function,"color(",-1,-1,{value:"color"}],u=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,c,u,[new ge([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new Ce([u]),new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function serializeRGB(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=r?XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels):x(colorData_to_XYZ_D65(n).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[0])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[1])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[2])),type:a.Integer}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"rgb(",-1,-1,{value:"rgb"}],c,h):new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeHSL(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=f(r?B(XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels)):colorData_to_XYZ_D65(n).channels),o=o.map(e=>Number.isNaN(e)?0:e);const t=Math.min(360,Math.max(0,Math.round(toPrecision(o[0]))))%360,l=Math.min(100,Math.max(0,Math.round(toPrecision(o[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Percentage,l.toString()+"%",-1,-1,{value:o[1]}]),new ge(i),new Ce([u]),new ge([e.Percentage,s.toString()+"%",-1,-1,{value:o[2]}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"hsl(",-1,-1,{value:"hsl"}],c,h):new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeOKLCH(n){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let r=n.channels.map(e=>Number.isNaN(e)?0:e);n.colorNotation!==De.OKLCH&&(r=N(colorData_to_XYZ_D65(n).channels));const o=toPrecision(r[0],6),t=toPrecision(r[1],6),l=toPrecision(r[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],c=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,s,c,[new ge([e.Number,o.toString(),-1,-1,{value:r[0],type:a.Number}]),new Ce([c]),new ge([e.Number,t.toString(),-1,-1,{value:r[1],type:a.Number}]),new Ce([c]),new ge([e.Number,l.toString(),-1,-1,{value:r[2],type:a.Number}])])}function color(e){if(fe(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return a=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,De.HWB,[],a);case"lab":return lab(e,color);case"lch":return lch(e,color);case"oklab":return oklab(e,color);case"oklch":return oklch(e,color);case"color":return color$1(e,color);case"color-mix":return colorMix(e,color);case"contrast-color":return contrastColor(e,color);case"alpha":return alpha(e,color)}}var a;if(ve(e)){if(u(e.value))return hex(e.value);if(n(e.value)){const a=namedColor(e.value[4].value);return!1!==a?a:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:De.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([Le.ColorKeyword])}}}return!1}export{De as ColorNotation,Le as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,serializeHSL,serializeOKLCH,serializeP3,serializeRGB}; diff --git a/packages/css-color-parser/src/color-data.ts b/packages/css-color-parser/src/color-data.ts index 848964343e..d78c42bf21 100644 --- a/packages/css-color-parser/src/color-data.ts +++ b/packages/css-color-parser/src/color-data.ts @@ -297,13 +297,6 @@ const predefinedRGB_or_XYZ_Spaces = new Set([ ]); export function colorDataTo(colorData: ColorData, toNotation: ColorNotation): ColorData { - colorData = { - ...colorData, - }; - - // Change any powerless components in src to missing components - colorData.channels = convertPowerlessComponentsToMissingComponents(colorData.channels, colorData.colorNotation); - const outputColorData: ColorData = { ...colorData, }; @@ -582,7 +575,16 @@ export function colorDataTo(colorData: ColorData, toNotation: ColorNotation): Co } } - outputColorData.channels = convertPowerlessComponentsToMissingComponents(outputColorData.channels, toNotation); + switch (colorData.colorNotation) { + case ColorNotation.HSL: + case ColorNotation.HWB: + case ColorNotation.LCH: + case ColorNotation.OKLCH: + break; + default: + outputColorData.channels = convertPowerlessComponentsToMissingComponents(outputColorData.channels, toNotation); + break; + } return outputColorData; } diff --git a/packages/css-color-parser/test/basic/basic.mjs b/packages/css-color-parser/test/basic/basic.mjs index ba43e81a78..6db8cc417e 100644 --- a/packages/css-color-parser/test/basic/basic.mjs +++ b/packages/css-color-parser/test/basic/basic.mjs @@ -259,7 +259,7 @@ assert.deepStrictEqual( color(parse('lch(from hwb(50deg none none) l c h)')), { colorNotation: 'lch', - channels: [NaN, NaN, NaN], + channels: [NaN, NaN, 87.26522367839932], alpha: 1, syntaxFlags: new Set(['relative-color-syntax', 'has-number-values']), }, diff --git a/packages/css-color-parser/test/basic/color-mix-function-oklch.mjs b/packages/css-color-parser/test/basic/color-mix-function-oklch.mjs index eba6cbebb6..ccd02c031d 100644 --- a/packages/css-color-parser/test/basic/color-mix-function-oklch.mjs +++ b/packages/css-color-parser/test/basic/color-mix-function-oklch.mjs @@ -4,15 +4,15 @@ import { parse } from '../util/parse.mjs'; import { serialize_OKLCH_data } from '../util/serialize.mjs'; const tests = [ - ['color-mix(in oklch, oklch(100% 0% 60deg), oklch(50% 50% 0deg))', 'oklch(0.75 0.1 0)'], + ['color-mix(in oklch, oklch(100% 0% 60deg), oklch(50% 50% 0deg))', 'oklch(0.75 0.1 30)'], ['color-mix(in oklch, rgb(255, 255, 255), rgb(180, 6, 95))', 'oklch(0.75031 0.10016 359.858)'], ['color-mix(in lch, oklch(75% 0% 60deg), oklch(75% 50% 0deg))', 'oklch(0.74979 0.09824 0.10588)'], ['color-mix(in oklch, oklch(100% 0% none), oklch(50% 50% 0deg))', 'oklch(0.75 0.1 0)'], - ['color-mix(in oklch, oklch(100% none 60deg), oklch(50% 50% 0deg))', 'oklch(0.75 0.2 0)'], + ['color-mix(in oklch, oklch(100% none 60deg), oklch(50% 50% 0deg))', 'oklch(0.75 0.2 30)'], // Analogous sets ['color-mix(in oklch, rgb(none none none), oklch(0.5 0.2 50))', 'oklch(0.5 0.2 50)'], - ['color-mix(in oklch, hwb(100deg none none), oklch(0.5 0.2 50deg))', 'oklch(0.5 0.2 50)'], + ['color-mix(in oklch, hwb(100deg none none), oklch(0.5 0.2 50deg))', 'oklch(0.5 0.2 94.8876)'], ['color-mix(in oklch, lab(100 none none), oklch(0.5 0.2 50deg))', 'oklch(0.75 0.2 50)'], ]; diff --git a/packages/css-color-parser/test/basic/color-mix-function.mjs b/packages/css-color-parser/test/basic/color-mix-function.mjs index b884175f1c..3cdc06af1b 100644 --- a/packages/css-color-parser/test/basic/color-mix-function.mjs +++ b/packages/css-color-parser/test/basic/color-mix-function.mjs @@ -114,9 +114,10 @@ const tests = [ ['color-mix(in hsl increasing hue, hsl(180deg 50% 50%), hsl(180deg 50% 50%))', canonicalize('hsl(180deg 50% 50%)')], ['color-mix(in hsl decreasing hue, hsl(180deg 50% 50%), hsl(180deg 50% 50%))', canonicalize('hsl(180deg 50% 50%)')], - ['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%)')], + ['color-mix(in hsl longer hue, hsl(50deg 0% 50%), hsl(50deg 0% 50%))', canonicalize('hsl(230deg 0% 50%)')], + ['color-mix(in hsl, color-mix(in hsl longer hue, hsl(50deg 0% 50%), hsl(50deg 0% 50%)), hsl(180deg 100% 50%))', canonicalize('hsl(205deg 50% 50%)')], - ['color-mix(in hsl, hsl(30deg 40% 80% / 25%) 0%, hsl(90deg none none / none))', canonicalize('hsl(30deg 40% 80% / 25%)')], + ['color-mix(in hsl, hsl(30deg 40% 80% / 25%) 0%, hsl(90deg none none / none))', canonicalize('hsl(90deg 40% 80% / 25%)')], ['color-mix(in hwb, hwb(30deg 30% 40% / 25%) 0%, hwb(90deg none none / 0.5))', canonicalize('hwb(90deg 30% 40% / 0.5)')], ['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%)')], ['color-mix(in hsl, hsl(from hsl(0deg 50% 50%) none s l), hsl(from hsl(120deg 50% 50%) h s l))', canonicalize('hsl(120deg 50% 50%)')], @@ -223,7 +224,7 @@ assert.deepStrictEqual( color(parse('color-mix(in lch, lch(100 0 40deg), lch(100 0 60deg))')), { colorNotation: 'lch', - channels: [100, 0, Number.NaN], + channels: [100, 0, 50], alpha: 1, syntaxFlags: new Set(['color-mix']), }, @@ -283,7 +284,7 @@ assert.deepStrictEqual( color(parse('color-mix(in hsl, lch(none 0 30), hsl(50 0 none))')), { colorNotation: 'hsl', - channels: [Number.NaN, 0, Number.NaN], + channels: [50, 0, Number.NaN], alpha: 1, syntaxFlags: new Set(['color-mix']), }, diff --git a/packages/css-color-parser/test/basic/none-exhaustive.mjs b/packages/css-color-parser/test/basic/none-exhaustive.mjs index c4677d0a71..98bdd4da4c 100644 --- a/packages/css-color-parser/test/basic/none-exhaustive.mjs +++ b/packages/css-color-parser/test/basic/none-exhaustive.mjs @@ -4,23 +4,23 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' { const tests = [ // https://github.com/w3c/csswg-drafts/issues/14095 - ['hsl(from hsl(180 none 50%) h s l)', 'hsl(none none 50%)'], - ['hsl(from hsl(180 0 50%) h s l)', 'hsl(none 0% 50%)'], + ['hsl(from hsl(180 none 50%) h s l)', 'hsl(180 none 50%)'], + ['hsl(from hsl(180 0 50%) h s l)', 'color(srgb 0.5 0.5 0.5)'], ['hsl(from lch(20 none 180) h s l)', 'hsl(none none 18.93757452%)'], ['hsl(from lch(20 0 180) h s l)', 'hsl(none 0% 18.93757452%)'], // https://github.com/w3c/csswg-drafts/issues/14100 ['lch(from orchid l 0 h)', 'lch(62.75256542 0 326.96909222)'], - ['lch(from lch(from orchid l 0 h) l c h)', 'lch(62.75256542 0 none)'], - ['color-mix(in lch, lch(from orchid l 0 h))', 'lch(62.75256542 0 none)'], + ['lch(from lch(from orchid l 0 h) l c h)', 'lch(62.75256542 0 326.96909222)'], + ['color-mix(in lch, lch(from orchid l 0 h))', 'lch(62.75256542 0 326.96909222)'], // exhaustive tests // HSL ['hsl(from hsl(none 50% 50%) h s l)', 'hsl(none 50% 50%)'], - ['hsl(from hsl(180 none 50%) h s l)', 'hsl(none none 50%)'], + ['hsl(from hsl(180 none 50%) h s l)', 'hsl(180 none 50%)'], ['hsl(from hsl(180 50% none) h s l)', 'hsl(180 50% none)'], ['hsl(from hsl(none none 50%) h s l)', 'hsl(none none 50%)'], - ['hsl(from hsl(180 none none) h s l)', 'hsl(none none none)'], + ['hsl(from hsl(180 none none) h s l)', 'hsl(180 none none)'], ['hsl(from hsl(none 50% none) h s l)', 'hsl(none 50% none)'], ['hsl(from hsl(none none none) h s l)', 'hsl(none none none)'], @@ -28,7 +28,7 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['hsl(from hwb(180 none 25%) h s l)', 'color(srgb 0 0.75 0.75)'], ['hsl(from hwb(180 25% none) h s l)', 'color(srgb 0.25 1 1)'], ['hsl(from hwb(none none 25%) h s l)', 'hsl(none 100% 37.5%)'], - ['hsl(from hwb(180 none none) h s l)', 'hsl(none none none)'], + ['hsl(from hwb(180 none none) h s l)', 'hsl(180 none none)'], ['hsl(from hwb(none 25% none) h s l)', 'hsl(none 100% 62.5%)'], ['hsl(from hwb(none none none) h s l)', 'hsl(none none none)'], @@ -132,14 +132,14 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['lch(from hwb(180 none 25%) l c h)', 'lch(69.91337803 42.54334477 196.45478916)'], ['lch(from hwb(180 25% none) l c h)', 'lch(91.18116399 49.29673753 196.65803824)'], ['lch(from hwb(none none 25%) l c h)', 'lch(40.61501478 86.05118759 none)'], - ['lch(from hwb(180 none none) l c h)', 'lch(none none none)'], + ['lch(from hwb(180 none none) l c h)', 'lch(none none 196.45478916)'], ['lch(from hwb(none 25% none) l c h)', 'lch(58.23109529 85.49243054 none)'], ['lch(from hwb(none none none) l c h)', 'lch(none none none)'], ['lch(from lch(none 20 180) l c h)', 'lch(none 20 180)'], - ['lch(from lch(20 none 180) l c h)', 'lch(20 none none)'], + ['lch(from lch(20 none 180) l c h)', 'lch(20 none 180)'], ['lch(from lch(20 20 none) l c h)', 'lch(20 20 none)'], - ['lch(from lch(none none 180) l c h)', 'lch(none none none)'], + ['lch(from lch(none none 180) l c h)', 'lch(none none 180)'], ['lch(from lch(20 none none) l c h)', 'lch(20 none none)'], ['lch(from lch(none 20 none) l c h)', 'lch(none 20 none)'], ['lch(from lch(none none none) l c h)', 'lch(none none none)'], @@ -184,7 +184,7 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['oklch(from hwb(180 none 25%) l c h)', 'oklch(0.72924735 0.12448121 194.7689599)'], ['oklch(from hwb(180 25% none) l c h)', 'oklch(0.91079253 0.14429702 194.91785641)'], ['oklch(from hwb(none none 25%) l c h)', 'oklch(0.50578216 0.20754918 none)'], - ['oklch(from hwb(180 none none) l c h)', 'oklch(none none none)'], + ['oklch(from hwb(180 none none) l c h)', 'oklch(none none 194.7689599)'], ['oklch(from hwb(none 25% none) l c h)', 'oklch(0.65951623 0.22690049 none)'], ['oklch(from hwb(none none none) l c h)', 'oklch(none none none)'], @@ -197,9 +197,9 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['oklch(from lch(none none none) l c h)', 'oklch(none none none)'], ['oklch(from oklch(none 0.2 180) l c h)', 'oklch(none 0.2 180)'], - ['oklch(from oklch(0.2 none 180) l c h)', 'oklch(0.2 none none)'], + ['oklch(from oklch(0.2 none 180) l c h)', 'oklch(0.2 none 180)'], ['oklch(from oklch(0.2 0.2 none) l c h)', 'oklch(0.2 0.2 none)'], - ['oklch(from oklch(none none 180) l c h)', 'oklch(none none none)'], + ['oklch(from oklch(none none 180) l c h)', 'oklch(none none 180)'], ['oklch(from oklch(0.2 none none) l c h)', 'oklch(0.2 none none)'], ['oklch(from oklch(none 0.2 none) l c h)', 'oklch(none 0.2 none)'], ['oklch(from oklch(none none none) l c h)', 'oklch(none none none)'], diff --git a/packages/css-color-parser/test/basic/powerless-exhaustive.mjs b/packages/css-color-parser/test/basic/powerless-exhaustive.mjs index b10cf950b9..78666cdad9 100644 --- a/packages/css-color-parser/test/basic/powerless-exhaustive.mjs +++ b/packages/css-color-parser/test/basic/powerless-exhaustive.mjs @@ -6,12 +6,12 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' // exhaustive tests // HSL ['hsl(from hsl(0 50% 50%) h s l)', 'color(srgb 0.75 0.25 0.25)'], - ['hsl(from hsl(180 0 50%) h s l)', 'hsl(none 0% 50%)'], + ['hsl(from hsl(180 0 50%) h s l)', 'color(srgb 0.5 0.5 0.5)'], ['hsl(from hsl(180 50% 0) h s l)', 'color(srgb 0 0 0)'], - ['hsl(from hsl(0 0 50%) h s l)', 'hsl(none 0% 50%)'], - ['hsl(from hsl(180 0 0) h s l)', 'hsl(none 0% 0%)'], + ['hsl(from hsl(0 0 50%) h s l)', 'color(srgb 0.5 0.5 0.5)'], + ['hsl(from hsl(180 0 0) h s l)', 'color(srgb 0 0 0)'], ['hsl(from hsl(0 50% 0) h s l)', 'color(srgb 0 0 0)'], - ['hsl(from hsl(0 0 0) h s l)', 'hsl(none 0% 0%)'], + ['hsl(from hsl(0 0 0) h s l)', 'color(srgb 0 0 0)'], ['hsl(from hwb(0 25% 25%) h s l)', 'color(srgb 0.75 0.25 0.25)'], ['hsl(from hwb(180 100% 25%) h s l)', 'hsl(none 0% 80%)'], @@ -53,12 +53,12 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['hwb(from hsl(0 0 0) h w b)', 'hwb(none 0% 100%)'], ['hwb(from hwb(0 25% 25%) h w b)', 'color(srgb 0.75 0.25 0.25)'], - ['hwb(from hwb(180 100% 25%) h w b)', 'hwb(none 100% 25%)'], - ['hwb(from hwb(180 25% 100%) h w b)', 'hwb(none 25% 100%)'], - ['hwb(from hwb(0 100% 25%) h w b)', 'hwb(none 100% 25%)'], - ['hwb(from hwb(180 100% 100%) h w b)', 'hwb(none 100% 100%)'], - ['hwb(from hwb(0 25% 100%) h w b)', 'hwb(none 25% 100%)'], - ['hwb(from hwb(0 100% 100%) h w b)', 'hwb(none 100% 100%)'], + ['hwb(from hwb(180 100% 25%) h w b)', 'color(srgb 0.8 0.8 0.8)'], + ['hwb(from hwb(180 25% 100%) h w b)', 'color(srgb 0.2 0.2 0.2)'], + ['hwb(from hwb(0 100% 25%) h w b)', 'color(srgb 0.8 0.8 0.8)'], + ['hwb(from hwb(180 100% 100%) h w b)', 'color(srgb 0.5 0.5 0.5)'], + ['hwb(from hwb(0 25% 100%) h w b)', 'color(srgb 0.2 0.2 0.2)'], + ['hwb(from hwb(0 100% 100%) h w b)', 'color(srgb 0.5 0.5 0.5)'], ['hwb(from lch(0 20 180) h w b)', 'color(srgb -0.13099833 0.05952886 -0.00460494)'], ['hwb(from lch(20 0 180) h w b)', 'hwb(none 18.93757452% 81.06242548%)'], @@ -99,12 +99,12 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['lch(from hwb(0 100% 100%) l c h)', 'lch(53.38896474 0 none)'], ['lch(from lch(0 20 180) l c h)', 'lch(0 20 180)'], - ['lch(from lch(20 0 180) l c h)', 'lch(20 0 none)'], + ['lch(from lch(20 0 180) l c h)', 'lch(20 0 180)'], ['lch(from lch(20 20 0) l c h)', 'lch(20 20 0)'], - ['lch(from lch(0 0 180) l c h)', 'lch(0 0 none)'], - ['lch(from lch(20 0 0) l c h)', 'lch(20 0 none)'], + ['lch(from lch(0 0 180) l c h)', 'lch(0 0 180)'], + ['lch(from lch(20 0 0) l c h)', 'lch(20 0 0)'], ['lch(from lch(0 20 0) l c h)', 'lch(0 20 0)'], - ['lch(from lch(0 0 0) l c h)', 'lch(0 0 none)'], + ['lch(from lch(0 0 0) l c h)', 'lch(0 0 0)'], ['lch(from oklch(0 0.2 180) l c h)', 'lch(0.00996014 2.6503948 181.20369565)'], ['lch(from oklch(0.2 0 180) l c h)', 'lch(7.22637037 0 none)'], @@ -145,12 +145,12 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['oklch(from lch(0 0 0) l c h)', 'oklch(0 0 none)'], ['oklch(from oklch(0 0.2 180) l c h)', 'oklch(0 0.2 180)'], - ['oklch(from oklch(0.2 0 180) l c h)', 'oklch(0.2 0 none)'], + ['oklch(from oklch(0.2 0 180) l c h)', 'oklch(0.2 0 180)'], ['oklch(from oklch(0.2 0.2 0) l c h)', 'oklch(0.2 0.2 0)'], - ['oklch(from oklch(0 0 180) l c h)', 'oklch(0 0 none)'], - ['oklch(from oklch(0.2 0 0) l c h)', 'oklch(0.2 0 none)'], + ['oklch(from oklch(0 0 180) l c h)', 'oklch(0 0 180)'], + ['oklch(from oklch(0.2 0 0) l c h)', 'oklch(0.2 0 0)'], ['oklch(from oklch(0 0.2 0) l c h)', 'oklch(0 0.2 0)'], - ['oklch(from oklch(0 0 0) l c h)', 'oklch(0 0 none)'], + ['oklch(from oklch(0 0 0) l c h)', 'oklch(0 0 0)'], ['oklch(from rgb(0 0 0) l c h)', 'oklch(0 0 none)'], ['oklch(from color(display-p3 0 0 0) l c h)', 'oklch(0 0 none)'], diff --git a/packages/css-color-parser/test/wpt/color-computed-color-mix-function.mjs b/packages/css-color-parser/test/wpt/color-computed-color-mix-function.mjs index dc5ac025dc..a565a74e2a 100644 --- a/packages/css-color-parser/test/wpt/color-computed-color-mix-function.mjs +++ b/packages/css-color-parser/test/wpt/color-computed-color-mix-function.mjs @@ -72,7 +72,7 @@ import { serialize_sRGB_data } from '../util/serialize.mjs'; ['color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))', canonicalize('hsl(120deg 20% 40%)')], ['color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))', canonicalize('hsl(75deg 30% 60%)')], ['color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))', canonicalize('hsl(75deg 20% 40%)')], - ['color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))', canonicalize('hsl(none 20% 60%)')], + ['color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))', canonicalize('hsl(30deg 20% 60%)')], ['color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))', canonicalize('hsl(60deg 40% 40%)')], ['color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))', canonicalize('hsl(60deg 40% 40% / 0.5)')], @@ -213,7 +213,7 @@ import { serialize_sRGB_data } from '../util/serialize.mjs'; ['color-mix(in lch, lch(10 20 30deg), lch(none none none))', canonicalize('lch(10 20 30)')], ['color-mix(in lch, lch(10 20 none), lch(50 60 70deg))', canonicalize('lch(30 40 70)')], ['color-mix(in lch, lch(10 20 30deg), lch(50 60 none))', canonicalize('lch(30 40 30)')], - ['color-mix(in lch, lch(none 20 30deg), lch(50 none 70deg))', canonicalize('lch(50 20 30)')], + ['color-mix(in lch, lch(none 20 30deg), lch(50 none 70deg))', canonicalize('lch(50 20 50)')], ['color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg))', canonicalize('lch(30 40 50)')], ['color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / 0.5))', canonicalize('lch(30 40 50 / 0.5)')], ['color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / none))', canonicalize('lch(30 40 50 / none)')], @@ -293,14 +293,14 @@ import { serialize_sRGB_data } from '../util/serialize.mjs'; ['color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(none none none))', canonicalize('oklch(0.1 0.2 30)')], ['color-mix(in oklch, oklch(0.1 0.2 none), oklch(0.5 0.6 70deg))', canonicalize('oklch(0.3 0.4 70)')], ['color-mix(in oklch, oklch(0.1 0.2 30deg), oklch(0.5 0.6 none))', canonicalize('oklch(0.3 0.4 30)')], - ['color-mix(in oklch, oklch(none 0.2 30deg), oklch(0.5 none 70deg))', canonicalize('oklch(0.5 0.2 30)')], + ['color-mix(in oklch, oklch(none 0.2 30deg), oklch(0.5 none 70deg))', canonicalize('oklch(0.5 0.2 50)')], ['color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg))', canonicalize('oklch(0.3 0.4 50)')], ['color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / 0.5))', canonicalize('oklch(0.3 0.4 50 / 0.5)')], ['color-mix(in oklch, oklch(0.1 0.2 30deg / none), oklch(0.5 0.6 70deg / none))', canonicalize('oklch(0.3 0.4 50 / none)')], ['color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(0.5 none none / none))', canonicalize('oklch(0.5 0.2 30 / 0.25)')], ['color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(none 0.5 none / none))', canonicalize('oklch(0.1 0.5 30 / 0.25)')], - ['color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(none none 90deg / none))', canonicalize('oklch(0.1 0.2 30 / 0.25)')], + ['color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(none none 90deg / none))', canonicalize('oklch(0.1 0.2 90 / 0.25)')], ['color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(0.5 0.5 none / none))', canonicalize('oklch(0.5 0.5 30 / 0.25)')], ['color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(none none none / 0.5))', canonicalize('oklch(0.1 0.2 30 / 0.5)')], ['color-mix(in oklch, oklch(0.1 0.2 30deg / 25%) 0%, oklch(0.5 none none / 0.5))', canonicalize('oklch(0.5 0.2 30 / 0.5)')], diff --git a/plugins/postcss-relative-color-syntax/test/basic.expect.css b/plugins/postcss-relative-color-syntax/test/basic.expect.css index c26573df76..be819329c3 100644 --- a/plugins/postcss-relative-color-syntax/test/basic.expect.css +++ b/plugins/postcss-relative-color-syntax/test/basic.expect.css @@ -105,7 +105,7 @@ .spec-example-25 { --mygray: rgb(152, 152, 152); - --mymuted: rgb(201, 131, 153); + --mymuted: rgb(185, 136, 182); } .spec-example-26 { diff --git a/plugins/postcss-relative-color-syntax/test/basic.preserve-true.expect.css b/plugins/postcss-relative-color-syntax/test/basic.preserve-true.expect.css index d56e7aa466..c7d29ab568 100644 --- a/plugins/postcss-relative-color-syntax/test/basic.preserve-true.expect.css +++ b/plugins/postcss-relative-color-syntax/test/basic.preserve-true.expect.css @@ -188,7 +188,7 @@ .spec-example-25 { --mygray: rgb(152, 152, 152); - --mymuted: rgb(201, 131, 153); + --mymuted: rgb(185, 136, 182); } @supports (color: lab(from red l 1 1% / calc(alpha + 0.1))) { From 5f2db7bed827d7fd8a24278caeca44f97f39a50a Mon Sep 17 00:00:00 2001 From: Romain Menke Date: Tue, 30 Jun 2026 18:35:01 +0200 Subject: [PATCH 2/3] cleanup --- packages/css-color-parser/dist/index.mjs | 2 +- packages/css-color-parser/src/color-data.ts | 11 ++--------- packages/css-color-parser/test/basic/basic.mjs | 2 +- .../test/basic/color-mix-function-oklch.mjs | 2 +- .../css-color-parser/test/basic/none-exhaustive.mjs | 6 +++--- 5 files changed, 8 insertions(+), 15 deletions(-) diff --git a/packages/css-color-parser/dist/index.mjs b/packages/css-color-parser/dist/index.mjs index 15f9154985..09d31013f9 100644 --- a/packages/css-color-parser/dist/index.mjs +++ b/packages/css-color-parser/dist/index.mjs @@ -1 +1 @@ -import{TokenType as e,NumberType as a,isTokenIdent as n,isTokenPercentage as r,isTokenNumber as o,isTokenDelim as t,isTokenNumeric as l,isTokenComma as s,isTokenDimension as c,isTokenHash as u}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D65 as i,XYZ_D50_to_XYZ_D50 as h,XYZ_D65_to_OKLab as m,XYZ_D65_to_OKLCH as N,XYZ_D50_to_LCH as p,XYZ_D50_to_Lab as b,XYZ_D65_to_HWB as v,XYZ_D65_to_HSL as f,XYZ_D65_to_a98_RGB as g,XYZ_D50_to_ProPhoto as d,XYZ_D65_to_rec_2020 as y,XYZ_D65_to_lin_P3 as _,XYZ_D65_to_P3 as C,XYZ_D65_to_lin_sRGB as w,XYZ_D65_to_sRGB as x,XYZ_D50_to_XYZ_D65 as D,OKLCH_to_XYZ_D65 as L,LCH_to_XYZ_D65 as H,OKLab_to_XYZ_D65 as Z,Lab_to_XYZ_D65 as P,HWB_to_XYZ_D65 as k,HSL_to_XYZ_D65 as S,ProPhoto_RGB_to_XYZ_D65 as M,a98_RGB_to_XYZ_D65 as F,rec_2020_to_XYZ_D65 as z,lin_P3_to_XYZ_D65 as R,P3_to_XYZ_D65 as T,lin_sRGB_to_XYZ_D65 as X,sRGB_to_XYZ_D65 as B,XYZ_D65_to_XYZ_D50 as Y,OKLCH_to_XYZ_D50 as G,LCH_to_XYZ_D50 as V,OKLab_to_XYZ_D50 as A,Lab_to_XYZ_D50 as K,HWB_to_XYZ_D50 as I,HSL_to_XYZ_D50 as O,ProPhoto_RGB_to_XYZ_D50 as W,a98_RGB_to_XYZ_D50 as E,rec_2020_to_XYZ_D50 as U,lin_P3_to_XYZ_D50 as $,P3_to_XYZ_D50 as j,lin_sRGB_to_XYZ_D50 as q,sRGB_to_XYZ_D50 as J,namedColors as Q,inGamut as ee,clip as ae,gam_sRGB as ne,mapGamutRayTrace as re,OKLCH_to_OKLab as oe,OKLab_to_XYZ as te,XYZ_to_lin_sRGB as le,lin_sRGB_to_XYZ as se,XYZ_to_OKLab as ce,OKLab_to_OKLCH as ue,contrast_ratio_wcag_2_1 as ie,gam_P3 as he,XYZ_to_lin_P3 as me,lin_P3_to_XYZ as Ne}from"@csstools/color-helpers";import{isWhitespaceNode as pe,isCommentNode as be,isTokenNode as ve,isFunctionNode as fe,TokenNode as ge,isWhiteSpaceOrCommentNode as de,replaceComponentValues as ye,FunctionNode as _e,WhitespaceNode as Ce}from"@csstools/css-parser-algorithms";import{mathFunctionNames as we,calcFromComponentValues as xe}from"@csstools/css-calc";var De,Le;function convertNaNToZero(e){return[Number.isNaN(e[0])?0:e[0],Number.isNaN(e[1])?0:e[1],Number.isNaN(e[2])?0:e[2]]}function colorData_to_XYZ_D50(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D50,channels:J(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D50,channels:q(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:j(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:$(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D50,channels:U(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D50,channels:E(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D50,channels:W(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D50,channels:O(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D50,channels:I(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D50,channels:K(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D50,channels:A(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D50,channels:V(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D50,channels:G(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D50,channels:h(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D50,channels:Y(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}function colorData_to_XYZ_D65(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D65,channels:B(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D65,channels:X(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:T(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:R(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D65,channels:z(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D65,channels:F(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D65,channels:M(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D65,channels:S(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D65,channels:k(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D65,channels:P(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D65,channels:Z(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D65,channels:H(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D65,channels:L(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D65,channels:D(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D65,channels:i(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",e.Linear_Display_P3="display-p3-linear",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65"}(De||(De={})),function(e){e.ColorKeyword="color-keyword",e.HasAlpha="has-alpha",e.HasDimensionValues="has-dimension-values",e.HasNoneKeywords="has-none-keywords",e.HasNumberValues="has-number-values",e.HasPercentageAlpha="has-percentage-alpha",e.HasPercentageValues="has-percentage-values",e.HasVariableAlpha="has-variable-alpha",e.Hex="hex",e.LegacyHSL="legacy-hsl",e.LegacyRGB="legacy-rgb",e.NamedColor="named-color",e.RelativeColorSyntax="relative-color-syntax",e.ColorMix="color-mix",e.ColorMixVariadic="color-mix-variadic",e.ContrastColor="contrast-color",e.RelativeAlphaSyntax="relative-alpha-syntax",e.Experimental="experimental"}(Le||(Le={}));const He=new Set([De.A98_RGB,De.Display_P3,De.Linear_Display_P3,De.HEX,De.Linear_sRGB,De.ProPhoto_RGB,De.RGB,De.sRGB,De.Rec2020,De.XYZ_D50,De.XYZ_D65]);function colorDataTo(e,a){const n={...e};if(e.colorNotation!==a)switch(a){case De.HEX:case De.RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.RGB,n.channels=x(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.sRGB,n.channels=x(e.channels);break}case De.Linear_sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_sRGB,n.channels=w(e.channels);break}case De.Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Display_P3,n.channels=C(e.channels);break}case De.Linear_Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_Display_P3,n.channels=_(e.channels);break}case De.Rec2020:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Rec2020,n.channels=y(e.channels);break}case De.ProPhoto_RGB:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.ProPhoto_RGB,n.channels=d(e.channels);break}case De.A98_RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.A98_RGB,n.channels=g(e.channels);break}case De.HSL:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HSL,n.channels=f(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.HWB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HWB,n.channels=v(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.Lab:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.Lab,n.channels=b(e.channels);break}case De.LCH:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.LCH,n.channels=p(e.channels);break}case De.OKLCH:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLCH,n.channels=N(e.channels);break}case De.OKLab:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLab,n.channels=m(e.channels);break}case De.XYZ_D50:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.XYZ_D50,n.channels=h(e.channels);break}case De.XYZ_D65:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.XYZ_D65,n.channels=i(e.channels);break}default:throw new Error("Unsupported color notation")}else n.channels=convertNaNToZero(e.channels);if(a===e.colorNotation)n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else if(He.has(a)&&He.has(e.colorNotation))n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else switch(a){case De.HSL:switch(e.colorNotation){case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.HWB:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.Lab:case De.OKLab:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.LCH:case De.OKLCH:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}switch(e.colorNotation){case De.HSL:case De.HWB:case De.LCH:case De.OKLCH:break;default:n.channels=convertPowerlessComponentsToMissingComponents(n.channels,a)}return n}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN),(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=Number.NaN,n[1]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN)}return n}function carryForwardMissingComponents(e,a,n,r,o,t){if(a.length<3&&e.every(Number.isNaN))return[Number.NaN,Number.NaN,Number.NaN];const l=[...r];for(let n=0;nNumber.isNaN(e[a])))for(let e=0;ee<-1e-5||e>1.00001)}function colorDataFitsDisplayP3_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,De.Display_P3).channels.find(e=>e<-1e-5||e>1.00001)}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const Ze=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(Ze,e=>String.fromCharCode(e.charCodeAt(0)+32))}function normalize_Color_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}const Pe=new Set(["srgb","srgb-linear","display-p3","display-p3-linear","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,a){const r=[],s=[],c=[],u=[];let i,h,m=!1,N=!1;const p={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let b=r;for(let o=0;o=0){t=u.value[4].value;continue}}return!1}if(!o)return!1;n.push({color:o,percentage:t}),o=!1,t=!1}}return!!o&&(n.push({color:o,percentage:t}),n)}function colorMixRectangular(e,a){if(!a||!a.length)return!1;for(const e of a)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:n,leftover:r}=normalizeMixPercentages(a,!0),o=1-r/100;let t;switch(e){case"srgb":t=De.RGB;break;case"srgb-linear":t=De.Linear_sRGB;break;case"display-p3":t=De.Display_P3;break;case"display-p3-linear":t=De.Linear_Display_P3;break;case"a98-rgb":t=De.A98_RGB;break;case"prophoto-rgb":t=De.ProPhoto_RGB;break;case"rec2020":t=De.Rec2020;break;case"lab":t=De.Lab;break;case"oklab":t=De.OKLab;break;case"xyz-d50":t=De.XYZ_D50;break;case"xyz":case"xyz-d65":t=De.XYZ_D65;break;default:return!1}if(1===n.length){const e=colorDataTo(n[0].color,t);return e.colorNotation=t,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*o,e)}for(n.reverse();n.length>=2;){const e=n.pop(),a=n.pop();if(!e||!a)return!1;const r=e.percentage+a.percentage,o=r>0?a.percentage/r:.5,l=colorMixRectangularPair(t,e.color,a.color,o);if(!l)return!1;n.push({color:l,percentage:r})}const l=n[0]?.color;return!!l&&("number"==typeof l.alpha&&(l.alpha=l.alpha*o,a.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&l.syntaxFlags.add(Le.Experimental),2!==a.length&&l.syntaxFlags.add(Le.ColorMixVariadic),l))}function colorMixRectangularPair(e,a,n,r){let o=a.alpha;if("number"!=typeof o)return!1;let t=n.alpha;if("number"!=typeof t)return!1;o=Number.isNaN(o)?t:o,t=Number.isNaN(t)?o:t;const l=colorDataTo(a,e).channels,s=colorDataTo(n,e).channels;l[0]=fillInMissingComponent(l[0],s[0]),s[0]=fillInMissingComponent(s[0],l[0]),l[1]=fillInMissingComponent(l[1],s[1]),s[1]=fillInMissingComponent(s[1],l[1]),l[2]=fillInMissingComponent(l[2],s[2]),s[2]=fillInMissingComponent(s[2],l[2]),l[0]=premultiply(l[0],o),l[1]=premultiply(l[1],o),l[2]=premultiply(l[2],o),s[0]=premultiply(s[0],t),s[1]=premultiply(s[1],t),s[2]=premultiply(s[2],t);const c=interpolate(o,t,r);return{colorNotation:e,channels:[un_premultiply(interpolate(l[0],s[0],r),c),un_premultiply(interpolate(l[1],s[1],r),c),un_premultiply(interpolate(l[2],s[2],r),c)],alpha:c,syntaxFlags:new Set([Le.ColorMix])}}function colorMixPolar(e,a,n){if(!n||!n.length)return!1;for(const e of n)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:r,leftover:o}=normalizeMixPercentages(n,!0),t=1-o/100;let l;switch(e){case"hsl":l=De.HSL;break;case"hwb":l=De.HWB;break;case"lch":l=De.LCH;break;case"oklch":l=De.OKLCH;break;default:return!1}if(1===r.length){const e=colorDataTo(r[0].color,l);return e.colorNotation=l,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*t,e)}for(r.reverse();r.length>=2;){const e=r.pop(),n=r.pop();if(!e||!n)return!1;const o=e.percentage+n.percentage,t=o>0?n.percentage/o:.5,s=colorMixPolarPair(l,a,e.color,n.color,t);if(!s)return!1;r.push({color:s,percentage:o})}const s=r[0]?.color;return!!s&&("number"==typeof s.alpha&&(s.alpha=s.alpha*t,n.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&s.syntaxFlags.add(Le.Experimental),2!==n.length&&s.syntaxFlags.add(Le.ColorMixVariadic),s))}function colorMixPolarPair(e,a,n,r,o){let t=0,l=0,s=0,c=0,u=0,i=0,h=n.alpha;if("number"!=typeof h)return!1;let m=r.alpha;if("number"!=typeof m)return!1;h=Number.isNaN(h)?m:h,m=Number.isNaN(m)?h:m;const N=colorDataTo(n,e).channels,p=colorDataTo(r,e).channels;switch(e){case De.HSL:case De.HWB:t=N[0],l=p[0],s=N[1],c=p[1],u=N[2],i=p[2];break;case De.LCH:case De.OKLCH:s=N[0],c=p[0],u=N[1],i=p[1],t=N[2],l=p[2]}if(s=fillInMissingComponent(s,c),c=fillInMissingComponent(c,s),u=fillInMissingComponent(u,i),i=fillInMissingComponent(i,u),t=fillInMissingComponent(t,l),l=fillInMissingComponent(l,t),Number.isNaN(t)&&Number.isNaN(l));else{Number.isNaN(t)?t=0:Number.isNaN(l)&&(l=0);const e=l-t;switch(a){case"shorter":e>180?t+=360:e<-180&&(l+=360);break;case"longer":-1800?t+=360:l+=360);break;case"increasing":e<0&&(l+=360);break;case"decreasing":e>0&&(t+=360);break;default:throw new Error("Unknown hue interpolation method")}}s=premultiply(s,h),u=premultiply(u,h),c=premultiply(c,m),i=premultiply(i,m);let b=[0,0,0];const v=interpolate(h,m,o);switch(e){case De.HSL:case De.HWB:b=[interpolate(t,l,o),un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v)];break;case De.LCH:case De.OKLCH:b=[un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v),interpolate(t,l,o)]}return{colorNotation:e,channels:b,alpha:v,syntaxFlags:new Set([Le.ColorMix])}}function fillInMissingComponent(e,a){return Number.isNaN(e)?a:e}function interpolate(e,a,n){return e*(1-n)+a*n}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e/a}function normalizeMixPercentages(e,a=!1){let n=0,r=0;for(const a of e)a.percentage&&(n+=a.percentage),!1===a.percentage&&r++;n=Math.min(100,n);for(const a of e)!1===a.percentage&&(a.percentage=(100-n)/r);const o=e.slice();let t=0;for(const e of o)t+=e.percentage;if(t>100||t>0&&a)for(const e of o)e.percentage=e.percentage*(100/t);let l=0;return t<100&&(l=100-t),{items:o,leftover:l}}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:De.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([Le.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}return!1}function normalizeHue(n){if(o(n))return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),n[4].value=n[4].value%360,n[4].value<0&&(n[4].value+=360),n[1]=n[4].value.toString(),n;if(c(n)){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":r=180*n[4].value/Math.PI;break;case"grad":r=.9*n[4].value;break;case"turn":r=360*n[4].value;break;default:return!1}return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),r%=360,r<0&&(r+=360),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,t,l){if(0===t){const e=normalizeHue(n);return!1!==e&&(c(n)&&l.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,100,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){if(3!==t)return!1;let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,100,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,1,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function threeChannelLegacySyntax(e,a,n,r){const t=[],c=[],u=[],i=[],h={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let m=t;for(let a=0;ave(e)&&s(e.value))){const a=hslCommaSeparated(e);if(!1!==a)return a}{const n=hslSpaceSeparated(e,a);if(!1!==n)return n}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,De.HSL,[Le.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,De.HSL,[],a)}function normalize_HWB_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,.8,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,De.Lab,[],a)}function normalize_LCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,100/150,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,De.LCH,[],a)}const Fe=new Map;for(const[e,a]of Object.entries(Q))Fe.set(e,a);function namedColor(e){const a=Fe.get(toLowerCaseAZ(e));return!!a&&{colorNotation:De.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([Le.ColorKeyword,Le.NamedColor])}}function normalize_OKLab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l||2===l?n=normalize(t[4].value,250,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,De.OKLab,[],a)}function normalize_OKLCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l?n=normalize(t[4].value,250,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,De.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,t,l){if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);const r=normalize(n[4].value,100,0,1);return[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){3!==t&&l.syntaxFlags.add(Le.HasNumberValues);let r=normalize(n[4].value,255,0,1);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(t,l,s){if(n(t)&&"none"===t[4].value.toLowerCase())return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,255,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function rgb(e,a){if(e.value.some(e=>ve(e)&&s(e.value))){const a=rgbCommaSeparated(e);if(!1!==a)return(!a.syntaxFlags.has(Le.HasNumberValues)||!a.syntaxFlags.has(Le.HasPercentageValues))&&a}else{const n=rgbSpaceSeparated(e,a);if(!1!==n)return n}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,De.RGB,[Le.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,De.RGB,[],a)}function XYZ_D65_to_sRGB_Gamut(e){const a=x(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),ne(re(n,oklch_to_lin_srgb,lin_srgb_to_oklch))}function oklch_to_lin_srgb(e){return e=oe(e),e=te(e),le(e)}function lin_srgb_to_oklch(e){return e=se(e),e=ce(e),ue(e)}function contrastColor(e,a){let n=!1;for(let r=0;rt?[1,1,1]:[0,0,0],r}function alpha(e,a){let r,s,c=!1,u=!1,i=!1;const h={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let m=0;m{if(ve(e)&&n(e.value)&&"alpha"===toLowerCaseAZ(e.value[4].value)&&r&&r.has("alpha"))return new ge(r.get("alpha"))});h.alpha=e[0][0],u=!0;continue}return!1}if(i)return!1;for(;pe(e.value[m+1])||be(e.value[m+1]);)m++;if(m++,N=e.value[m],i=a(N),!1===i)return!1;r=normalizeRelativeColorDataChannels(i),s=noneToZeroInRelativeColorDataChannels(r),h.syntaxFlags=new Set(i.syntaxFlags),h.syntaxFlags.add(Le.RelativeAlphaSyntax),h.channels=[...i.channels],h.colorNotation=i.colorNotation,h.alpha=i.alpha}}return!!r&&h}function XYZ_D65_to_P3_Gamut(e){const a=C(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),he(re(n,oklch_to_lin_p3,lin_p3_to_oklch))}function oklch_to_lin_p3(e){return e=oe(e),e=te(e),me(e)}function lin_p3_to_oklch(e){return e=Ne(e),e=ce(e),ue(e)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(Math.abs(e))+"").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new _e(r,l,t):new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),new ge([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),n.alpha])}function serializeP3(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map(e=>Number.isNaN(e)?0:e);r?o=XYZ_D65_to_P3_Gamut(colorData_to_XYZ_D65(n).channels):n.colorNotation!==De.Display_P3&&(o=C(colorData_to_XYZ_D65(n).channels));const t=r?Math.min(1,Math.max(0,toPrecision(o[0],6))):toPrecision(o[0],6),l=r?Math.min(1,Math.max(0,toPrecision(o[1],6))):toPrecision(o[1],6),s=r?Math.min(1,Math.max(0,toPrecision(o[2],6))):toPrecision(o[2],6),c=[e.Function,"color(",-1,-1,{value:"color"}],u=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,c,u,[new ge([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new Ce([u]),new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function serializeRGB(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=r?XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels):x(colorData_to_XYZ_D65(n).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[0])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[1])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[2])),type:a.Integer}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"rgb(",-1,-1,{value:"rgb"}],c,h):new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeHSL(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=f(r?B(XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels)):colorData_to_XYZ_D65(n).channels),o=o.map(e=>Number.isNaN(e)?0:e);const t=Math.min(360,Math.max(0,Math.round(toPrecision(o[0]))))%360,l=Math.min(100,Math.max(0,Math.round(toPrecision(o[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Percentage,l.toString()+"%",-1,-1,{value:o[1]}]),new ge(i),new Ce([u]),new ge([e.Percentage,s.toString()+"%",-1,-1,{value:o[2]}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"hsl(",-1,-1,{value:"hsl"}],c,h):new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeOKLCH(n){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let r=n.channels.map(e=>Number.isNaN(e)?0:e);n.colorNotation!==De.OKLCH&&(r=N(colorData_to_XYZ_D65(n).channels));const o=toPrecision(r[0],6),t=toPrecision(r[1],6),l=toPrecision(r[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],c=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,s,c,[new ge([e.Number,o.toString(),-1,-1,{value:r[0],type:a.Number}]),new Ce([c]),new ge([e.Number,t.toString(),-1,-1,{value:r[1],type:a.Number}]),new Ce([c]),new ge([e.Number,l.toString(),-1,-1,{value:r[2],type:a.Number}])])}function color(e){if(fe(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return a=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,De.HWB,[],a);case"lab":return lab(e,color);case"lch":return lch(e,color);case"oklab":return oklab(e,color);case"oklch":return oklch(e,color);case"color":return color$1(e,color);case"color-mix":return colorMix(e,color);case"contrast-color":return contrastColor(e,color);case"alpha":return alpha(e,color)}}var a;if(ve(e)){if(u(e.value))return hex(e.value);if(n(e.value)){const a=namedColor(e.value[4].value);return!1!==a?a:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:De.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([Le.ColorKeyword])}}}return!1}export{De as ColorNotation,Le as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,serializeHSL,serializeOKLCH,serializeP3,serializeRGB}; +import{TokenType as e,NumberType as a,isTokenIdent as n,isTokenPercentage as r,isTokenNumber as o,isTokenDelim as t,isTokenNumeric as l,isTokenComma as s,isTokenDimension as c,isTokenHash as u}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D65 as i,XYZ_D50_to_XYZ_D50 as h,XYZ_D65_to_OKLab as m,XYZ_D65_to_OKLCH as N,XYZ_D50_to_LCH as p,XYZ_D50_to_Lab as b,XYZ_D65_to_HWB as v,XYZ_D65_to_HSL as f,XYZ_D65_to_a98_RGB as g,XYZ_D50_to_ProPhoto as d,XYZ_D65_to_rec_2020 as y,XYZ_D65_to_lin_P3 as _,XYZ_D65_to_P3 as C,XYZ_D65_to_lin_sRGB as w,XYZ_D65_to_sRGB as x,XYZ_D50_to_XYZ_D65 as D,OKLCH_to_XYZ_D65 as L,LCH_to_XYZ_D65 as Z,OKLab_to_XYZ_D65 as H,Lab_to_XYZ_D65 as P,HWB_to_XYZ_D65 as k,HSL_to_XYZ_D65 as S,ProPhoto_RGB_to_XYZ_D65 as M,a98_RGB_to_XYZ_D65 as F,rec_2020_to_XYZ_D65 as z,lin_P3_to_XYZ_D65 as R,P3_to_XYZ_D65 as T,lin_sRGB_to_XYZ_D65 as X,sRGB_to_XYZ_D65 as B,XYZ_D65_to_XYZ_D50 as Y,OKLCH_to_XYZ_D50 as G,LCH_to_XYZ_D50 as V,OKLab_to_XYZ_D50 as A,Lab_to_XYZ_D50 as K,HWB_to_XYZ_D50 as I,HSL_to_XYZ_D50 as O,ProPhoto_RGB_to_XYZ_D50 as W,a98_RGB_to_XYZ_D50 as E,rec_2020_to_XYZ_D50 as U,lin_P3_to_XYZ_D50 as $,P3_to_XYZ_D50 as j,lin_sRGB_to_XYZ_D50 as q,sRGB_to_XYZ_D50 as J,namedColors as Q,inGamut as ee,clip as ae,gam_sRGB as ne,mapGamutRayTrace as re,OKLCH_to_OKLab as oe,OKLab_to_XYZ as te,XYZ_to_lin_sRGB as le,lin_sRGB_to_XYZ as se,XYZ_to_OKLab as ce,OKLab_to_OKLCH as ue,contrast_ratio_wcag_2_1 as ie,gam_P3 as he,XYZ_to_lin_P3 as me,lin_P3_to_XYZ as Ne}from"@csstools/color-helpers";import{isWhitespaceNode as pe,isCommentNode as be,isTokenNode as ve,isFunctionNode as fe,TokenNode as ge,isWhiteSpaceOrCommentNode as de,replaceComponentValues as ye,FunctionNode as _e,WhitespaceNode as Ce}from"@csstools/css-parser-algorithms";import{mathFunctionNames as we,calcFromComponentValues as xe}from"@csstools/css-calc";var De,Le;function convertNaNToZero(e){return[Number.isNaN(e[0])?0:e[0],Number.isNaN(e[1])?0:e[1],Number.isNaN(e[2])?0:e[2]]}function colorData_to_XYZ_D50(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D50,channels:J(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D50,channels:q(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:j(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:$(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D50,channels:U(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D50,channels:E(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D50,channels:W(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D50,channels:O(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D50,channels:I(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D50,channels:K(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D50,channels:A(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D50,channels:V(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D50,channels:G(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D50,channels:h(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D50,channels:Y(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}function colorData_to_XYZ_D65(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D65,channels:B(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D65,channels:X(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:T(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:R(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D65,channels:z(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D65,channels:F(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D65,channels:M(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D65,channels:S(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D65,channels:k(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D65,channels:P(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D65,channels:H(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D65,channels:Z(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D65,channels:L(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D65,channels:D(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D65,channels:i(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",e.Linear_Display_P3="display-p3-linear",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65"}(De||(De={})),function(e){e.ColorKeyword="color-keyword",e.HasAlpha="has-alpha",e.HasDimensionValues="has-dimension-values",e.HasNoneKeywords="has-none-keywords",e.HasNumberValues="has-number-values",e.HasPercentageAlpha="has-percentage-alpha",e.HasPercentageValues="has-percentage-values",e.HasVariableAlpha="has-variable-alpha",e.Hex="hex",e.LegacyHSL="legacy-hsl",e.LegacyRGB="legacy-rgb",e.NamedColor="named-color",e.RelativeColorSyntax="relative-color-syntax",e.ColorMix="color-mix",e.ColorMixVariadic="color-mix-variadic",e.ContrastColor="contrast-color",e.RelativeAlphaSyntax="relative-alpha-syntax",e.Experimental="experimental"}(Le||(Le={}));const Ze=new Set([De.A98_RGB,De.Display_P3,De.Linear_Display_P3,De.HEX,De.Linear_sRGB,De.ProPhoto_RGB,De.RGB,De.sRGB,De.Rec2020,De.XYZ_D50,De.XYZ_D65]);function colorDataTo(e,a){const n={...e};if(e.colorNotation!==a)switch(a){case De.HEX:case De.RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.RGB,n.channels=x(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.sRGB,n.channels=x(e.channels);break}case De.Linear_sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_sRGB,n.channels=w(e.channels);break}case De.Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Display_P3,n.channels=C(e.channels);break}case De.Linear_Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_Display_P3,n.channels=_(e.channels);break}case De.Rec2020:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Rec2020,n.channels=y(e.channels);break}case De.ProPhoto_RGB:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.ProPhoto_RGB,n.channels=d(e.channels);break}case De.A98_RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.A98_RGB,n.channels=g(e.channels);break}case De.HSL:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HSL,n.channels=f(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.HWB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HWB,n.channels=v(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.Lab:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.Lab,n.channels=b(e.channels);break}case De.LCH:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.LCH,n.channels=p(e.channels);break}case De.OKLCH:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLCH,n.channels=N(e.channels);break}case De.OKLab:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLab,n.channels=m(e.channels);break}case De.XYZ_D50:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.XYZ_D50,n.channels=h(e.channels);break}case De.XYZ_D65:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.XYZ_D65,n.channels=i(e.channels);break}default:throw new Error("Unsupported color notation")}else n.channels=convertNaNToZero(e.channels);if(a===e.colorNotation)n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else if(Ze.has(a)&&Ze.has(e.colorNotation))n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else switch(a){case De.HSL:switch(e.colorNotation){case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.HWB:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.Lab:case De.OKLab:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.LCH:case De.OKLCH:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}return e.colorNotation!==n.colorNotation&&(n.channels=convertPowerlessComponentsToMissingComponents(n.channels,a)),n}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN),(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=Number.NaN,n[1]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN)}return n}function carryForwardMissingComponents(e,a,n,r,o,t){if(a.length<3&&e.every(Number.isNaN))return[Number.NaN,Number.NaN,Number.NaN];const l=[...r];for(let n=0;nNumber.isNaN(e[a])))for(let e=0;ee<-1e-5||e>1.00001)}function colorDataFitsDisplayP3_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,De.Display_P3).channels.find(e=>e<-1e-5||e>1.00001)}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const He=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(He,e=>String.fromCharCode(e.charCodeAt(0)+32))}function normalize_Color_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}const Pe=new Set(["srgb","srgb-linear","display-p3","display-p3-linear","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,a){const r=[],s=[],c=[],u=[];let i,h,m=!1,N=!1;const p={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let b=r;for(let o=0;o=0){t=u.value[4].value;continue}}return!1}if(!o)return!1;n.push({color:o,percentage:t}),o=!1,t=!1}}return!!o&&(n.push({color:o,percentage:t}),n)}function colorMixRectangular(e,a){if(!a||!a.length)return!1;for(const e of a)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:n,leftover:r}=normalizeMixPercentages(a,!0),o=1-r/100;let t;switch(e){case"srgb":t=De.RGB;break;case"srgb-linear":t=De.Linear_sRGB;break;case"display-p3":t=De.Display_P3;break;case"display-p3-linear":t=De.Linear_Display_P3;break;case"a98-rgb":t=De.A98_RGB;break;case"prophoto-rgb":t=De.ProPhoto_RGB;break;case"rec2020":t=De.Rec2020;break;case"lab":t=De.Lab;break;case"oklab":t=De.OKLab;break;case"xyz-d50":t=De.XYZ_D50;break;case"xyz":case"xyz-d65":t=De.XYZ_D65;break;default:return!1}if(1===n.length){const e=colorDataTo(n[0].color,t);return e.colorNotation=t,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*o,e)}for(n.reverse();n.length>=2;){const e=n.pop(),a=n.pop();if(!e||!a)return!1;const r=e.percentage+a.percentage,o=r>0?a.percentage/r:.5,l=colorMixRectangularPair(t,e.color,a.color,o);if(!l)return!1;n.push({color:l,percentage:r})}const l=n[0]?.color;return!!l&&("number"==typeof l.alpha&&(l.alpha=l.alpha*o,a.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&l.syntaxFlags.add(Le.Experimental),2!==a.length&&l.syntaxFlags.add(Le.ColorMixVariadic),l))}function colorMixRectangularPair(e,a,n,r){let o=a.alpha;if("number"!=typeof o)return!1;let t=n.alpha;if("number"!=typeof t)return!1;o=Number.isNaN(o)?t:o,t=Number.isNaN(t)?o:t;const l=colorDataTo(a,e).channels,s=colorDataTo(n,e).channels;l[0]=fillInMissingComponent(l[0],s[0]),s[0]=fillInMissingComponent(s[0],l[0]),l[1]=fillInMissingComponent(l[1],s[1]),s[1]=fillInMissingComponent(s[1],l[1]),l[2]=fillInMissingComponent(l[2],s[2]),s[2]=fillInMissingComponent(s[2],l[2]),l[0]=premultiply(l[0],o),l[1]=premultiply(l[1],o),l[2]=premultiply(l[2],o),s[0]=premultiply(s[0],t),s[1]=premultiply(s[1],t),s[2]=premultiply(s[2],t);const c=interpolate(o,t,r);return{colorNotation:e,channels:[un_premultiply(interpolate(l[0],s[0],r),c),un_premultiply(interpolate(l[1],s[1],r),c),un_premultiply(interpolate(l[2],s[2],r),c)],alpha:c,syntaxFlags:new Set([Le.ColorMix])}}function colorMixPolar(e,a,n){if(!n||!n.length)return!1;for(const e of n)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:r,leftover:o}=normalizeMixPercentages(n,!0),t=1-o/100;let l;switch(e){case"hsl":l=De.HSL;break;case"hwb":l=De.HWB;break;case"lch":l=De.LCH;break;case"oklch":l=De.OKLCH;break;default:return!1}if(1===r.length){const e=colorDataTo(r[0].color,l);return e.colorNotation=l,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*t,e)}for(r.reverse();r.length>=2;){const e=r.pop(),n=r.pop();if(!e||!n)return!1;const o=e.percentage+n.percentage,t=o>0?n.percentage/o:.5,s=colorMixPolarPair(l,a,e.color,n.color,t);if(!s)return!1;r.push({color:s,percentage:o})}const s=r[0]?.color;return!!s&&("number"==typeof s.alpha&&(s.alpha=s.alpha*t,n.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&s.syntaxFlags.add(Le.Experimental),2!==n.length&&s.syntaxFlags.add(Le.ColorMixVariadic),s))}function colorMixPolarPair(e,a,n,r,o){let t=0,l=0,s=0,c=0,u=0,i=0,h=n.alpha;if("number"!=typeof h)return!1;let m=r.alpha;if("number"!=typeof m)return!1;h=Number.isNaN(h)?m:h,m=Number.isNaN(m)?h:m;const N=colorDataTo(n,e).channels,p=colorDataTo(r,e).channels;switch(e){case De.HSL:case De.HWB:t=N[0],l=p[0],s=N[1],c=p[1],u=N[2],i=p[2];break;case De.LCH:case De.OKLCH:s=N[0],c=p[0],u=N[1],i=p[1],t=N[2],l=p[2]}if(s=fillInMissingComponent(s,c),c=fillInMissingComponent(c,s),u=fillInMissingComponent(u,i),i=fillInMissingComponent(i,u),t=fillInMissingComponent(t,l),l=fillInMissingComponent(l,t),Number.isNaN(t)&&Number.isNaN(l));else{Number.isNaN(t)?t=0:Number.isNaN(l)&&(l=0);const e=l-t;switch(a){case"shorter":e>180?t+=360:e<-180&&(l+=360);break;case"longer":-1800?t+=360:l+=360);break;case"increasing":e<0&&(l+=360);break;case"decreasing":e>0&&(t+=360);break;default:throw new Error("Unknown hue interpolation method")}}s=premultiply(s,h),u=premultiply(u,h),c=premultiply(c,m),i=premultiply(i,m);let b=[0,0,0];const v=interpolate(h,m,o);switch(e){case De.HSL:case De.HWB:b=[interpolate(t,l,o),un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v)];break;case De.LCH:case De.OKLCH:b=[un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v),interpolate(t,l,o)]}return{colorNotation:e,channels:b,alpha:v,syntaxFlags:new Set([Le.ColorMix])}}function fillInMissingComponent(e,a){return Number.isNaN(e)?a:e}function interpolate(e,a,n){return e*(1-n)+a*n}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e/a}function normalizeMixPercentages(e,a=!1){let n=0,r=0;for(const a of e)a.percentage&&(n+=a.percentage),!1===a.percentage&&r++;n=Math.min(100,n);for(const a of e)!1===a.percentage&&(a.percentage=(100-n)/r);const o=e.slice();let t=0;for(const e of o)t+=e.percentage;if(t>100||t>0&&a)for(const e of o)e.percentage=e.percentage*(100/t);let l=0;return t<100&&(l=100-t),{items:o,leftover:l}}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:De.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([Le.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}return!1}function normalizeHue(n){if(o(n))return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),n[4].value=n[4].value%360,n[4].value<0&&(n[4].value+=360),n[1]=n[4].value.toString(),n;if(c(n)){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":r=180*n[4].value/Math.PI;break;case"grad":r=.9*n[4].value;break;case"turn":r=360*n[4].value;break;default:return!1}return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),r%=360,r<0&&(r+=360),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,t,l){if(0===t){const e=normalizeHue(n);return!1!==e&&(c(n)&&l.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,100,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){if(3!==t)return!1;let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,100,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,1,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function threeChannelLegacySyntax(e,a,n,r){const t=[],c=[],u=[],i=[],h={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let m=t;for(let a=0;ave(e)&&s(e.value))){const a=hslCommaSeparated(e);if(!1!==a)return a}{const n=hslSpaceSeparated(e,a);if(!1!==n)return n}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,De.HSL,[Le.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,De.HSL,[],a)}function normalize_HWB_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,.8,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,De.Lab,[],a)}function normalize_LCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,100/150,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,De.LCH,[],a)}const Fe=new Map;for(const[e,a]of Object.entries(Q))Fe.set(e,a);function namedColor(e){const a=Fe.get(toLowerCaseAZ(e));return!!a&&{colorNotation:De.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([Le.ColorKeyword,Le.NamedColor])}}function normalize_OKLab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l||2===l?n=normalize(t[4].value,250,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,De.OKLab,[],a)}function normalize_OKLCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l?n=normalize(t[4].value,250,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,De.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,t,l){if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);const r=normalize(n[4].value,100,0,1);return[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){3!==t&&l.syntaxFlags.add(Le.HasNumberValues);let r=normalize(n[4].value,255,0,1);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(t,l,s){if(n(t)&&"none"===t[4].value.toLowerCase())return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,255,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function rgb(e,a){if(e.value.some(e=>ve(e)&&s(e.value))){const a=rgbCommaSeparated(e);if(!1!==a)return(!a.syntaxFlags.has(Le.HasNumberValues)||!a.syntaxFlags.has(Le.HasPercentageValues))&&a}else{const n=rgbSpaceSeparated(e,a);if(!1!==n)return n}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,De.RGB,[Le.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,De.RGB,[],a)}function XYZ_D65_to_sRGB_Gamut(e){const a=x(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),ne(re(n,oklch_to_lin_srgb,lin_srgb_to_oklch))}function oklch_to_lin_srgb(e){return e=oe(e),e=te(e),le(e)}function lin_srgb_to_oklch(e){return e=se(e),e=ce(e),ue(e)}function contrastColor(e,a){let n=!1;for(let r=0;rt?[1,1,1]:[0,0,0],r}function alpha(e,a){let r,s,c=!1,u=!1,i=!1;const h={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let m=0;m{if(ve(e)&&n(e.value)&&"alpha"===toLowerCaseAZ(e.value[4].value)&&r&&r.has("alpha"))return new ge(r.get("alpha"))});h.alpha=e[0][0],u=!0;continue}return!1}if(i)return!1;for(;pe(e.value[m+1])||be(e.value[m+1]);)m++;if(m++,N=e.value[m],i=a(N),!1===i)return!1;r=normalizeRelativeColorDataChannels(i),s=noneToZeroInRelativeColorDataChannels(r),h.syntaxFlags=new Set(i.syntaxFlags),h.syntaxFlags.add(Le.RelativeAlphaSyntax),h.channels=[...i.channels],h.colorNotation=i.colorNotation,h.alpha=i.alpha}}return!!r&&h}function XYZ_D65_to_P3_Gamut(e){const a=C(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),he(re(n,oklch_to_lin_p3,lin_p3_to_oklch))}function oklch_to_lin_p3(e){return e=oe(e),e=te(e),me(e)}function lin_p3_to_oklch(e){return e=Ne(e),e=ce(e),ue(e)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(Math.abs(e))+"").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new _e(r,l,t):new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),new ge([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),n.alpha])}function serializeP3(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map(e=>Number.isNaN(e)?0:e);r?o=XYZ_D65_to_P3_Gamut(colorData_to_XYZ_D65(n).channels):n.colorNotation!==De.Display_P3&&(o=C(colorData_to_XYZ_D65(n).channels));const t=r?Math.min(1,Math.max(0,toPrecision(o[0],6))):toPrecision(o[0],6),l=r?Math.min(1,Math.max(0,toPrecision(o[1],6))):toPrecision(o[1],6),s=r?Math.min(1,Math.max(0,toPrecision(o[2],6))):toPrecision(o[2],6),c=[e.Function,"color(",-1,-1,{value:"color"}],u=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,c,u,[new ge([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new Ce([u]),new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function serializeRGB(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=r?XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels):x(colorData_to_XYZ_D65(n).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[0])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[1])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[2])),type:a.Integer}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"rgb(",-1,-1,{value:"rgb"}],c,h):new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeHSL(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=f(r?B(XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels)):colorData_to_XYZ_D65(n).channels),o=o.map(e=>Number.isNaN(e)?0:e);const t=Math.min(360,Math.max(0,Math.round(toPrecision(o[0]))))%360,l=Math.min(100,Math.max(0,Math.round(toPrecision(o[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Percentage,l.toString()+"%",-1,-1,{value:o[1]}]),new ge(i),new Ce([u]),new ge([e.Percentage,s.toString()+"%",-1,-1,{value:o[2]}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"hsl(",-1,-1,{value:"hsl"}],c,h):new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeOKLCH(n){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let r=n.channels.map(e=>Number.isNaN(e)?0:e);n.colorNotation!==De.OKLCH&&(r=N(colorData_to_XYZ_D65(n).channels));const o=toPrecision(r[0],6),t=toPrecision(r[1],6),l=toPrecision(r[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],c=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,s,c,[new ge([e.Number,o.toString(),-1,-1,{value:r[0],type:a.Number}]),new Ce([c]),new ge([e.Number,t.toString(),-1,-1,{value:r[1],type:a.Number}]),new Ce([c]),new ge([e.Number,l.toString(),-1,-1,{value:r[2],type:a.Number}])])}function color(e){if(fe(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return a=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,De.HWB,[],a);case"lab":return lab(e,color);case"lch":return lch(e,color);case"oklab":return oklab(e,color);case"oklch":return oklch(e,color);case"color":return color$1(e,color);case"color-mix":return colorMix(e,color);case"contrast-color":return contrastColor(e,color);case"alpha":return alpha(e,color)}}var a;if(ve(e)){if(u(e.value))return hex(e.value);if(n(e.value)){const a=namedColor(e.value[4].value);return!1!==a?a:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:De.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([Le.ColorKeyword])}}}return!1}export{De as ColorNotation,Le as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,serializeHSL,serializeOKLCH,serializeP3,serializeRGB}; diff --git a/packages/css-color-parser/src/color-data.ts b/packages/css-color-parser/src/color-data.ts index d78c42bf21..28c09e0e4f 100644 --- a/packages/css-color-parser/src/color-data.ts +++ b/packages/css-color-parser/src/color-data.ts @@ -575,15 +575,8 @@ export function colorDataTo(colorData: ColorData, toNotation: ColorNotation): Co } } - switch (colorData.colorNotation) { - case ColorNotation.HSL: - case ColorNotation.HWB: - case ColorNotation.LCH: - case ColorNotation.OKLCH: - break; - default: - outputColorData.channels = convertPowerlessComponentsToMissingComponents(outputColorData.channels, toNotation); - break; + if (colorData.colorNotation !== outputColorData.colorNotation) { + outputColorData.channels = convertPowerlessComponentsToMissingComponents(outputColorData.channels, toNotation); } return outputColorData; diff --git a/packages/css-color-parser/test/basic/basic.mjs b/packages/css-color-parser/test/basic/basic.mjs index 6db8cc417e..ba43e81a78 100644 --- a/packages/css-color-parser/test/basic/basic.mjs +++ b/packages/css-color-parser/test/basic/basic.mjs @@ -259,7 +259,7 @@ assert.deepStrictEqual( color(parse('lch(from hwb(50deg none none) l c h)')), { colorNotation: 'lch', - channels: [NaN, NaN, 87.26522367839932], + channels: [NaN, NaN, NaN], alpha: 1, syntaxFlags: new Set(['relative-color-syntax', 'has-number-values']), }, diff --git a/packages/css-color-parser/test/basic/color-mix-function-oklch.mjs b/packages/css-color-parser/test/basic/color-mix-function-oklch.mjs index ccd02c031d..1008b9e014 100644 --- a/packages/css-color-parser/test/basic/color-mix-function-oklch.mjs +++ b/packages/css-color-parser/test/basic/color-mix-function-oklch.mjs @@ -12,7 +12,7 @@ const tests = [ // Analogous sets ['color-mix(in oklch, rgb(none none none), oklch(0.5 0.2 50))', 'oklch(0.5 0.2 50)'], - ['color-mix(in oklch, hwb(100deg none none), oklch(0.5 0.2 50deg))', 'oklch(0.5 0.2 94.8876)'], + ['color-mix(in oklch, hwb(100deg none none), oklch(0.5 0.2 50deg))', 'oklch(0.5 0.2 50)'], ['color-mix(in oklch, lab(100 none none), oklch(0.5 0.2 50deg))', 'oklch(0.75 0.2 50)'], ]; diff --git a/packages/css-color-parser/test/basic/none-exhaustive.mjs b/packages/css-color-parser/test/basic/none-exhaustive.mjs index 98bdd4da4c..9328bc9306 100644 --- a/packages/css-color-parser/test/basic/none-exhaustive.mjs +++ b/packages/css-color-parser/test/basic/none-exhaustive.mjs @@ -28,7 +28,7 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['hsl(from hwb(180 none 25%) h s l)', 'color(srgb 0 0.75 0.75)'], ['hsl(from hwb(180 25% none) h s l)', 'color(srgb 0.25 1 1)'], ['hsl(from hwb(none none 25%) h s l)', 'hsl(none 100% 37.5%)'], - ['hsl(from hwb(180 none none) h s l)', 'hsl(180 none none)'], + ['hsl(from hwb(180 none none) h s l)', 'hsl(none none none)'], ['hsl(from hwb(none 25% none) h s l)', 'hsl(none 100% 62.5%)'], ['hsl(from hwb(none none none) h s l)', 'hsl(none none none)'], @@ -132,7 +132,7 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['lch(from hwb(180 none 25%) l c h)', 'lch(69.91337803 42.54334477 196.45478916)'], ['lch(from hwb(180 25% none) l c h)', 'lch(91.18116399 49.29673753 196.65803824)'], ['lch(from hwb(none none 25%) l c h)', 'lch(40.61501478 86.05118759 none)'], - ['lch(from hwb(180 none none) l c h)', 'lch(none none 196.45478916)'], + ['lch(from hwb(180 none none) l c h)', 'lch(none none none)'], ['lch(from hwb(none 25% none) l c h)', 'lch(58.23109529 85.49243054 none)'], ['lch(from hwb(none none none) l c h)', 'lch(none none none)'], @@ -184,7 +184,7 @@ import { computedValue, reducePrecisionWholeValue } from '../util/serialize.mjs' ['oklch(from hwb(180 none 25%) l c h)', 'oklch(0.72924735 0.12448121 194.7689599)'], ['oklch(from hwb(180 25% none) l c h)', 'oklch(0.91079253 0.14429702 194.91785641)'], ['oklch(from hwb(none none 25%) l c h)', 'oklch(0.50578216 0.20754918 none)'], - ['oklch(from hwb(180 none none) l c h)', 'oklch(none none 194.7689599)'], + ['oklch(from hwb(180 none none) l c h)', 'oklch(none none none)'], ['oklch(from hwb(none 25% none) l c h)', 'oklch(0.65951623 0.22690049 none)'], ['oklch(from hwb(none none none) l c h)', 'oklch(none none none)'], From 6d41a87ba7f3e4a262e08abc4ea9414f870325f3 Mon Sep 17 00:00:00 2001 From: Romain Menke Date: Tue, 30 Jun 2026 18:37:38 +0200 Subject: [PATCH 3/3] preserve conversion to missing at the start --- packages/css-color-parser/dist/index.mjs | 2 +- packages/css-color-parser/src/color-data.ts | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/css-color-parser/dist/index.mjs b/packages/css-color-parser/dist/index.mjs index 09d31013f9..60974292df 100644 --- a/packages/css-color-parser/dist/index.mjs +++ b/packages/css-color-parser/dist/index.mjs @@ -1 +1 @@ -import{TokenType as e,NumberType as a,isTokenIdent as n,isTokenPercentage as r,isTokenNumber as o,isTokenDelim as t,isTokenNumeric as l,isTokenComma as s,isTokenDimension as c,isTokenHash as u}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D65 as i,XYZ_D50_to_XYZ_D50 as h,XYZ_D65_to_OKLab as m,XYZ_D65_to_OKLCH as N,XYZ_D50_to_LCH as p,XYZ_D50_to_Lab as b,XYZ_D65_to_HWB as v,XYZ_D65_to_HSL as f,XYZ_D65_to_a98_RGB as g,XYZ_D50_to_ProPhoto as d,XYZ_D65_to_rec_2020 as y,XYZ_D65_to_lin_P3 as _,XYZ_D65_to_P3 as C,XYZ_D65_to_lin_sRGB as w,XYZ_D65_to_sRGB as x,XYZ_D50_to_XYZ_D65 as D,OKLCH_to_XYZ_D65 as L,LCH_to_XYZ_D65 as Z,OKLab_to_XYZ_D65 as H,Lab_to_XYZ_D65 as P,HWB_to_XYZ_D65 as k,HSL_to_XYZ_D65 as S,ProPhoto_RGB_to_XYZ_D65 as M,a98_RGB_to_XYZ_D65 as F,rec_2020_to_XYZ_D65 as z,lin_P3_to_XYZ_D65 as R,P3_to_XYZ_D65 as T,lin_sRGB_to_XYZ_D65 as X,sRGB_to_XYZ_D65 as B,XYZ_D65_to_XYZ_D50 as Y,OKLCH_to_XYZ_D50 as G,LCH_to_XYZ_D50 as V,OKLab_to_XYZ_D50 as A,Lab_to_XYZ_D50 as K,HWB_to_XYZ_D50 as I,HSL_to_XYZ_D50 as O,ProPhoto_RGB_to_XYZ_D50 as W,a98_RGB_to_XYZ_D50 as E,rec_2020_to_XYZ_D50 as U,lin_P3_to_XYZ_D50 as $,P3_to_XYZ_D50 as j,lin_sRGB_to_XYZ_D50 as q,sRGB_to_XYZ_D50 as J,namedColors as Q,inGamut as ee,clip as ae,gam_sRGB as ne,mapGamutRayTrace as re,OKLCH_to_OKLab as oe,OKLab_to_XYZ as te,XYZ_to_lin_sRGB as le,lin_sRGB_to_XYZ as se,XYZ_to_OKLab as ce,OKLab_to_OKLCH as ue,contrast_ratio_wcag_2_1 as ie,gam_P3 as he,XYZ_to_lin_P3 as me,lin_P3_to_XYZ as Ne}from"@csstools/color-helpers";import{isWhitespaceNode as pe,isCommentNode as be,isTokenNode as ve,isFunctionNode as fe,TokenNode as ge,isWhiteSpaceOrCommentNode as de,replaceComponentValues as ye,FunctionNode as _e,WhitespaceNode as Ce}from"@csstools/css-parser-algorithms";import{mathFunctionNames as we,calcFromComponentValues as xe}from"@csstools/css-calc";var De,Le;function convertNaNToZero(e){return[Number.isNaN(e[0])?0:e[0],Number.isNaN(e[1])?0:e[1],Number.isNaN(e[2])?0:e[2]]}function colorData_to_XYZ_D50(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D50,channels:J(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D50,channels:q(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:j(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:$(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D50,channels:U(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D50,channels:E(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D50,channels:W(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D50,channels:O(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D50,channels:I(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D50,channels:K(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D50,channels:A(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D50,channels:V(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D50,channels:G(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D50,channels:h(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D50,channels:Y(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}function colorData_to_XYZ_D65(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D65,channels:B(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D65,channels:X(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:T(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:R(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D65,channels:z(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D65,channels:F(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D65,channels:M(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D65,channels:S(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D65,channels:k(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D65,channels:P(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D65,channels:H(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D65,channels:Z(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D65,channels:L(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D65,channels:D(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D65,channels:i(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",e.Linear_Display_P3="display-p3-linear",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65"}(De||(De={})),function(e){e.ColorKeyword="color-keyword",e.HasAlpha="has-alpha",e.HasDimensionValues="has-dimension-values",e.HasNoneKeywords="has-none-keywords",e.HasNumberValues="has-number-values",e.HasPercentageAlpha="has-percentage-alpha",e.HasPercentageValues="has-percentage-values",e.HasVariableAlpha="has-variable-alpha",e.Hex="hex",e.LegacyHSL="legacy-hsl",e.LegacyRGB="legacy-rgb",e.NamedColor="named-color",e.RelativeColorSyntax="relative-color-syntax",e.ColorMix="color-mix",e.ColorMixVariadic="color-mix-variadic",e.ContrastColor="contrast-color",e.RelativeAlphaSyntax="relative-alpha-syntax",e.Experimental="experimental"}(Le||(Le={}));const Ze=new Set([De.A98_RGB,De.Display_P3,De.Linear_Display_P3,De.HEX,De.Linear_sRGB,De.ProPhoto_RGB,De.RGB,De.sRGB,De.Rec2020,De.XYZ_D50,De.XYZ_D65]);function colorDataTo(e,a){const n={...e};if(e.colorNotation!==a)switch(a){case De.HEX:case De.RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.RGB,n.channels=x(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.sRGB,n.channels=x(e.channels);break}case De.Linear_sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_sRGB,n.channels=w(e.channels);break}case De.Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Display_P3,n.channels=C(e.channels);break}case De.Linear_Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_Display_P3,n.channels=_(e.channels);break}case De.Rec2020:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Rec2020,n.channels=y(e.channels);break}case De.ProPhoto_RGB:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.ProPhoto_RGB,n.channels=d(e.channels);break}case De.A98_RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.A98_RGB,n.channels=g(e.channels);break}case De.HSL:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HSL,n.channels=f(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.HWB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HWB,n.channels=v(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.Lab:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.Lab,n.channels=b(e.channels);break}case De.LCH:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.LCH,n.channels=p(e.channels);break}case De.OKLCH:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLCH,n.channels=N(e.channels);break}case De.OKLab:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLab,n.channels=m(e.channels);break}case De.XYZ_D50:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.XYZ_D50,n.channels=h(e.channels);break}case De.XYZ_D65:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.XYZ_D65,n.channels=i(e.channels);break}default:throw new Error("Unsupported color notation")}else n.channels=convertNaNToZero(e.channels);if(a===e.colorNotation)n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else if(Ze.has(a)&&Ze.has(e.colorNotation))n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else switch(a){case De.HSL:switch(e.colorNotation){case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.HWB:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.Lab:case De.OKLab:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.LCH:case De.OKLCH:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}return e.colorNotation!==n.colorNotation&&(n.channels=convertPowerlessComponentsToMissingComponents(n.channels,a)),n}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN),(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=Number.NaN,n[1]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN)}return n}function carryForwardMissingComponents(e,a,n,r,o,t){if(a.length<3&&e.every(Number.isNaN))return[Number.NaN,Number.NaN,Number.NaN];const l=[...r];for(let n=0;nNumber.isNaN(e[a])))for(let e=0;ee<-1e-5||e>1.00001)}function colorDataFitsDisplayP3_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,De.Display_P3).channels.find(e=>e<-1e-5||e>1.00001)}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const He=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(He,e=>String.fromCharCode(e.charCodeAt(0)+32))}function normalize_Color_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}const Pe=new Set(["srgb","srgb-linear","display-p3","display-p3-linear","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,a){const r=[],s=[],c=[],u=[];let i,h,m=!1,N=!1;const p={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let b=r;for(let o=0;o=0){t=u.value[4].value;continue}}return!1}if(!o)return!1;n.push({color:o,percentage:t}),o=!1,t=!1}}return!!o&&(n.push({color:o,percentage:t}),n)}function colorMixRectangular(e,a){if(!a||!a.length)return!1;for(const e of a)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:n,leftover:r}=normalizeMixPercentages(a,!0),o=1-r/100;let t;switch(e){case"srgb":t=De.RGB;break;case"srgb-linear":t=De.Linear_sRGB;break;case"display-p3":t=De.Display_P3;break;case"display-p3-linear":t=De.Linear_Display_P3;break;case"a98-rgb":t=De.A98_RGB;break;case"prophoto-rgb":t=De.ProPhoto_RGB;break;case"rec2020":t=De.Rec2020;break;case"lab":t=De.Lab;break;case"oklab":t=De.OKLab;break;case"xyz-d50":t=De.XYZ_D50;break;case"xyz":case"xyz-d65":t=De.XYZ_D65;break;default:return!1}if(1===n.length){const e=colorDataTo(n[0].color,t);return e.colorNotation=t,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*o,e)}for(n.reverse();n.length>=2;){const e=n.pop(),a=n.pop();if(!e||!a)return!1;const r=e.percentage+a.percentage,o=r>0?a.percentage/r:.5,l=colorMixRectangularPair(t,e.color,a.color,o);if(!l)return!1;n.push({color:l,percentage:r})}const l=n[0]?.color;return!!l&&("number"==typeof l.alpha&&(l.alpha=l.alpha*o,a.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&l.syntaxFlags.add(Le.Experimental),2!==a.length&&l.syntaxFlags.add(Le.ColorMixVariadic),l))}function colorMixRectangularPair(e,a,n,r){let o=a.alpha;if("number"!=typeof o)return!1;let t=n.alpha;if("number"!=typeof t)return!1;o=Number.isNaN(o)?t:o,t=Number.isNaN(t)?o:t;const l=colorDataTo(a,e).channels,s=colorDataTo(n,e).channels;l[0]=fillInMissingComponent(l[0],s[0]),s[0]=fillInMissingComponent(s[0],l[0]),l[1]=fillInMissingComponent(l[1],s[1]),s[1]=fillInMissingComponent(s[1],l[1]),l[2]=fillInMissingComponent(l[2],s[2]),s[2]=fillInMissingComponent(s[2],l[2]),l[0]=premultiply(l[0],o),l[1]=premultiply(l[1],o),l[2]=premultiply(l[2],o),s[0]=premultiply(s[0],t),s[1]=premultiply(s[1],t),s[2]=premultiply(s[2],t);const c=interpolate(o,t,r);return{colorNotation:e,channels:[un_premultiply(interpolate(l[0],s[0],r),c),un_premultiply(interpolate(l[1],s[1],r),c),un_premultiply(interpolate(l[2],s[2],r),c)],alpha:c,syntaxFlags:new Set([Le.ColorMix])}}function colorMixPolar(e,a,n){if(!n||!n.length)return!1;for(const e of n)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:r,leftover:o}=normalizeMixPercentages(n,!0),t=1-o/100;let l;switch(e){case"hsl":l=De.HSL;break;case"hwb":l=De.HWB;break;case"lch":l=De.LCH;break;case"oklch":l=De.OKLCH;break;default:return!1}if(1===r.length){const e=colorDataTo(r[0].color,l);return e.colorNotation=l,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*t,e)}for(r.reverse();r.length>=2;){const e=r.pop(),n=r.pop();if(!e||!n)return!1;const o=e.percentage+n.percentage,t=o>0?n.percentage/o:.5,s=colorMixPolarPair(l,a,e.color,n.color,t);if(!s)return!1;r.push({color:s,percentage:o})}const s=r[0]?.color;return!!s&&("number"==typeof s.alpha&&(s.alpha=s.alpha*t,n.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&s.syntaxFlags.add(Le.Experimental),2!==n.length&&s.syntaxFlags.add(Le.ColorMixVariadic),s))}function colorMixPolarPair(e,a,n,r,o){let t=0,l=0,s=0,c=0,u=0,i=0,h=n.alpha;if("number"!=typeof h)return!1;let m=r.alpha;if("number"!=typeof m)return!1;h=Number.isNaN(h)?m:h,m=Number.isNaN(m)?h:m;const N=colorDataTo(n,e).channels,p=colorDataTo(r,e).channels;switch(e){case De.HSL:case De.HWB:t=N[0],l=p[0],s=N[1],c=p[1],u=N[2],i=p[2];break;case De.LCH:case De.OKLCH:s=N[0],c=p[0],u=N[1],i=p[1],t=N[2],l=p[2]}if(s=fillInMissingComponent(s,c),c=fillInMissingComponent(c,s),u=fillInMissingComponent(u,i),i=fillInMissingComponent(i,u),t=fillInMissingComponent(t,l),l=fillInMissingComponent(l,t),Number.isNaN(t)&&Number.isNaN(l));else{Number.isNaN(t)?t=0:Number.isNaN(l)&&(l=0);const e=l-t;switch(a){case"shorter":e>180?t+=360:e<-180&&(l+=360);break;case"longer":-1800?t+=360:l+=360);break;case"increasing":e<0&&(l+=360);break;case"decreasing":e>0&&(t+=360);break;default:throw new Error("Unknown hue interpolation method")}}s=premultiply(s,h),u=premultiply(u,h),c=premultiply(c,m),i=premultiply(i,m);let b=[0,0,0];const v=interpolate(h,m,o);switch(e){case De.HSL:case De.HWB:b=[interpolate(t,l,o),un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v)];break;case De.LCH:case De.OKLCH:b=[un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v),interpolate(t,l,o)]}return{colorNotation:e,channels:b,alpha:v,syntaxFlags:new Set([Le.ColorMix])}}function fillInMissingComponent(e,a){return Number.isNaN(e)?a:e}function interpolate(e,a,n){return e*(1-n)+a*n}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e/a}function normalizeMixPercentages(e,a=!1){let n=0,r=0;for(const a of e)a.percentage&&(n+=a.percentage),!1===a.percentage&&r++;n=Math.min(100,n);for(const a of e)!1===a.percentage&&(a.percentage=(100-n)/r);const o=e.slice();let t=0;for(const e of o)t+=e.percentage;if(t>100||t>0&&a)for(const e of o)e.percentage=e.percentage*(100/t);let l=0;return t<100&&(l=100-t),{items:o,leftover:l}}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:De.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([Le.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}return!1}function normalizeHue(n){if(o(n))return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),n[4].value=n[4].value%360,n[4].value<0&&(n[4].value+=360),n[1]=n[4].value.toString(),n;if(c(n)){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":r=180*n[4].value/Math.PI;break;case"grad":r=.9*n[4].value;break;case"turn":r=360*n[4].value;break;default:return!1}return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),r%=360,r<0&&(r+=360),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,t,l){if(0===t){const e=normalizeHue(n);return!1!==e&&(c(n)&&l.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,100,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){if(3!==t)return!1;let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,100,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,1,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function threeChannelLegacySyntax(e,a,n,r){const t=[],c=[],u=[],i=[],h={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let m=t;for(let a=0;ave(e)&&s(e.value))){const a=hslCommaSeparated(e);if(!1!==a)return a}{const n=hslSpaceSeparated(e,a);if(!1!==n)return n}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,De.HSL,[Le.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,De.HSL,[],a)}function normalize_HWB_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,.8,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,De.Lab,[],a)}function normalize_LCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,100/150,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,De.LCH,[],a)}const Fe=new Map;for(const[e,a]of Object.entries(Q))Fe.set(e,a);function namedColor(e){const a=Fe.get(toLowerCaseAZ(e));return!!a&&{colorNotation:De.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([Le.ColorKeyword,Le.NamedColor])}}function normalize_OKLab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l||2===l?n=normalize(t[4].value,250,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,De.OKLab,[],a)}function normalize_OKLCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l?n=normalize(t[4].value,250,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,De.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,t,l){if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);const r=normalize(n[4].value,100,0,1);return[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){3!==t&&l.syntaxFlags.add(Le.HasNumberValues);let r=normalize(n[4].value,255,0,1);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(t,l,s){if(n(t)&&"none"===t[4].value.toLowerCase())return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,255,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function rgb(e,a){if(e.value.some(e=>ve(e)&&s(e.value))){const a=rgbCommaSeparated(e);if(!1!==a)return(!a.syntaxFlags.has(Le.HasNumberValues)||!a.syntaxFlags.has(Le.HasPercentageValues))&&a}else{const n=rgbSpaceSeparated(e,a);if(!1!==n)return n}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,De.RGB,[Le.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,De.RGB,[],a)}function XYZ_D65_to_sRGB_Gamut(e){const a=x(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),ne(re(n,oklch_to_lin_srgb,lin_srgb_to_oklch))}function oklch_to_lin_srgb(e){return e=oe(e),e=te(e),le(e)}function lin_srgb_to_oklch(e){return e=se(e),e=ce(e),ue(e)}function contrastColor(e,a){let n=!1;for(let r=0;rt?[1,1,1]:[0,0,0],r}function alpha(e,a){let r,s,c=!1,u=!1,i=!1;const h={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let m=0;m{if(ve(e)&&n(e.value)&&"alpha"===toLowerCaseAZ(e.value[4].value)&&r&&r.has("alpha"))return new ge(r.get("alpha"))});h.alpha=e[0][0],u=!0;continue}return!1}if(i)return!1;for(;pe(e.value[m+1])||be(e.value[m+1]);)m++;if(m++,N=e.value[m],i=a(N),!1===i)return!1;r=normalizeRelativeColorDataChannels(i),s=noneToZeroInRelativeColorDataChannels(r),h.syntaxFlags=new Set(i.syntaxFlags),h.syntaxFlags.add(Le.RelativeAlphaSyntax),h.channels=[...i.channels],h.colorNotation=i.colorNotation,h.alpha=i.alpha}}return!!r&&h}function XYZ_D65_to_P3_Gamut(e){const a=C(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),he(re(n,oklch_to_lin_p3,lin_p3_to_oklch))}function oklch_to_lin_p3(e){return e=oe(e),e=te(e),me(e)}function lin_p3_to_oklch(e){return e=Ne(e),e=ce(e),ue(e)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(Math.abs(e))+"").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new _e(r,l,t):new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),new ge([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),n.alpha])}function serializeP3(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map(e=>Number.isNaN(e)?0:e);r?o=XYZ_D65_to_P3_Gamut(colorData_to_XYZ_D65(n).channels):n.colorNotation!==De.Display_P3&&(o=C(colorData_to_XYZ_D65(n).channels));const t=r?Math.min(1,Math.max(0,toPrecision(o[0],6))):toPrecision(o[0],6),l=r?Math.min(1,Math.max(0,toPrecision(o[1],6))):toPrecision(o[1],6),s=r?Math.min(1,Math.max(0,toPrecision(o[2],6))):toPrecision(o[2],6),c=[e.Function,"color(",-1,-1,{value:"color"}],u=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,c,u,[new ge([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new Ce([u]),new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function serializeRGB(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=r?XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels):x(colorData_to_XYZ_D65(n).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[0])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[1])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[2])),type:a.Integer}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"rgb(",-1,-1,{value:"rgb"}],c,h):new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeHSL(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=f(r?B(XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels)):colorData_to_XYZ_D65(n).channels),o=o.map(e=>Number.isNaN(e)?0:e);const t=Math.min(360,Math.max(0,Math.round(toPrecision(o[0]))))%360,l=Math.min(100,Math.max(0,Math.round(toPrecision(o[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Percentage,l.toString()+"%",-1,-1,{value:o[1]}]),new ge(i),new Ce([u]),new ge([e.Percentage,s.toString()+"%",-1,-1,{value:o[2]}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"hsl(",-1,-1,{value:"hsl"}],c,h):new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeOKLCH(n){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let r=n.channels.map(e=>Number.isNaN(e)?0:e);n.colorNotation!==De.OKLCH&&(r=N(colorData_to_XYZ_D65(n).channels));const o=toPrecision(r[0],6),t=toPrecision(r[1],6),l=toPrecision(r[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],c=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,s,c,[new ge([e.Number,o.toString(),-1,-1,{value:r[0],type:a.Number}]),new Ce([c]),new ge([e.Number,t.toString(),-1,-1,{value:r[1],type:a.Number}]),new Ce([c]),new ge([e.Number,l.toString(),-1,-1,{value:r[2],type:a.Number}])])}function color(e){if(fe(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return a=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,De.HWB,[],a);case"lab":return lab(e,color);case"lch":return lch(e,color);case"oklab":return oklab(e,color);case"oklch":return oklch(e,color);case"color":return color$1(e,color);case"color-mix":return colorMix(e,color);case"contrast-color":return contrastColor(e,color);case"alpha":return alpha(e,color)}}var a;if(ve(e)){if(u(e.value))return hex(e.value);if(n(e.value)){const a=namedColor(e.value[4].value);return!1!==a?a:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:De.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([Le.ColorKeyword])}}}return!1}export{De as ColorNotation,Le as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,serializeHSL,serializeOKLCH,serializeP3,serializeRGB}; +import{TokenType as e,NumberType as a,isTokenIdent as n,isTokenPercentage as r,isTokenNumber as o,isTokenDelim as t,isTokenNumeric as l,isTokenComma as s,isTokenDimension as c,isTokenHash as u}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D65 as i,XYZ_D50_to_XYZ_D50 as h,XYZ_D65_to_OKLab as m,XYZ_D65_to_OKLCH as N,XYZ_D50_to_LCH as p,XYZ_D50_to_Lab as b,XYZ_D65_to_HWB as v,XYZ_D65_to_HSL as f,XYZ_D65_to_a98_RGB as g,XYZ_D50_to_ProPhoto as d,XYZ_D65_to_rec_2020 as y,XYZ_D65_to_lin_P3 as _,XYZ_D65_to_P3 as C,XYZ_D65_to_lin_sRGB as w,XYZ_D65_to_sRGB as x,XYZ_D50_to_XYZ_D65 as D,OKLCH_to_XYZ_D65 as L,LCH_to_XYZ_D65 as Z,OKLab_to_XYZ_D65 as H,Lab_to_XYZ_D65 as P,HWB_to_XYZ_D65 as k,HSL_to_XYZ_D65 as S,ProPhoto_RGB_to_XYZ_D65 as M,a98_RGB_to_XYZ_D65 as F,rec_2020_to_XYZ_D65 as z,lin_P3_to_XYZ_D65 as R,P3_to_XYZ_D65 as T,lin_sRGB_to_XYZ_D65 as X,sRGB_to_XYZ_D65 as B,XYZ_D65_to_XYZ_D50 as Y,OKLCH_to_XYZ_D50 as G,LCH_to_XYZ_D50 as V,OKLab_to_XYZ_D50 as A,Lab_to_XYZ_D50 as K,HWB_to_XYZ_D50 as I,HSL_to_XYZ_D50 as O,ProPhoto_RGB_to_XYZ_D50 as W,a98_RGB_to_XYZ_D50 as E,rec_2020_to_XYZ_D50 as U,lin_P3_to_XYZ_D50 as $,P3_to_XYZ_D50 as j,lin_sRGB_to_XYZ_D50 as q,sRGB_to_XYZ_D50 as J,namedColors as Q,inGamut as ee,clip as ae,gam_sRGB as ne,mapGamutRayTrace as re,OKLCH_to_OKLab as oe,OKLab_to_XYZ as te,XYZ_to_lin_sRGB as le,lin_sRGB_to_XYZ as se,XYZ_to_OKLab as ce,OKLab_to_OKLCH as ue,contrast_ratio_wcag_2_1 as ie,gam_P3 as he,XYZ_to_lin_P3 as me,lin_P3_to_XYZ as Ne}from"@csstools/color-helpers";import{isWhitespaceNode as pe,isCommentNode as be,isTokenNode as ve,isFunctionNode as fe,TokenNode as ge,isWhiteSpaceOrCommentNode as de,replaceComponentValues as ye,FunctionNode as _e,WhitespaceNode as Ce}from"@csstools/css-parser-algorithms";import{mathFunctionNames as we,calcFromComponentValues as xe}from"@csstools/css-calc";var De,Le;function convertNaNToZero(e){return[Number.isNaN(e[0])?0:e[0],Number.isNaN(e[1])?0:e[1],Number.isNaN(e[2])?0:e[2]]}function colorData_to_XYZ_D50(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D50,channels:J(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D50,channels:q(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:j(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D50,channels:$(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D50,channels:U(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D50,channels:E(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D50,channels:W(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D50,channels:O(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D50,channels:I(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D50,channels:K(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D50,channels:A(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D50,channels:V(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D50,channels:G(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D50,channels:h(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D50,channels:Y(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}function colorData_to_XYZ_D65(e){switch(e.colorNotation){case De.HEX:case De.RGB:case De.sRGB:return{...e,colorNotation:De.XYZ_D65,channels:B(convertNaNToZero(e.channels))};case De.Linear_sRGB:return{...e,colorNotation:De.XYZ_D65,channels:X(convertNaNToZero(e.channels))};case De.Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:T(convertNaNToZero(e.channels))};case De.Linear_Display_P3:return{...e,colorNotation:De.XYZ_D65,channels:R(convertNaNToZero(e.channels))};case De.Rec2020:return{...e,colorNotation:De.XYZ_D65,channels:z(convertNaNToZero(e.channels))};case De.A98_RGB:return{...e,colorNotation:De.XYZ_D65,channels:F(convertNaNToZero(e.channels))};case De.ProPhoto_RGB:return{...e,colorNotation:De.XYZ_D65,channels:M(convertNaNToZero(e.channels))};case De.HSL:return{...e,colorNotation:De.XYZ_D65,channels:S(convertNaNToZero(e.channels))};case De.HWB:return{...e,colorNotation:De.XYZ_D65,channels:k(convertNaNToZero(e.channels))};case De.Lab:return{...e,colorNotation:De.XYZ_D65,channels:P(convertNaNToZero(e.channels))};case De.OKLab:return{...e,colorNotation:De.XYZ_D65,channels:H(convertNaNToZero(e.channels))};case De.LCH:return{...e,colorNotation:De.XYZ_D65,channels:Z(convertNaNToZero(e.channels))};case De.OKLCH:return{...e,colorNotation:De.XYZ_D65,channels:L(convertNaNToZero(e.channels))};case De.XYZ_D50:return{...e,colorNotation:De.XYZ_D65,channels:D(convertNaNToZero(e.channels))};case De.XYZ_D65:return{...e,colorNotation:De.XYZ_D65,channels:i(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",e.Linear_Display_P3="display-p3-linear",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65"}(De||(De={})),function(e){e.ColorKeyword="color-keyword",e.HasAlpha="has-alpha",e.HasDimensionValues="has-dimension-values",e.HasNoneKeywords="has-none-keywords",e.HasNumberValues="has-number-values",e.HasPercentageAlpha="has-percentage-alpha",e.HasPercentageValues="has-percentage-values",e.HasVariableAlpha="has-variable-alpha",e.Hex="hex",e.LegacyHSL="legacy-hsl",e.LegacyRGB="legacy-rgb",e.NamedColor="named-color",e.RelativeColorSyntax="relative-color-syntax",e.ColorMix="color-mix",e.ColorMixVariadic="color-mix-variadic",e.ContrastColor="contrast-color",e.RelativeAlphaSyntax="relative-alpha-syntax",e.Experimental="experimental"}(Le||(Le={}));const Ze=new Set([De.A98_RGB,De.Display_P3,De.Linear_Display_P3,De.HEX,De.Linear_sRGB,De.ProPhoto_RGB,De.RGB,De.sRGB,De.Rec2020,De.XYZ_D50,De.XYZ_D65]);function colorDataTo(e,a){(e={...e}).colorNotation!==a&&(e.channels=convertPowerlessComponentsToMissingComponents(e.channels,e.colorNotation));const n={...e};if(e.colorNotation!==a)switch(a){case De.HEX:case De.RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.RGB,n.channels=x(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.sRGB,n.channels=x(e.channels);break}case De.Linear_sRGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_sRGB,n.channels=w(e.channels);break}case De.Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Display_P3,n.channels=C(e.channels);break}case De.Linear_Display_P3:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Linear_Display_P3,n.channels=_(e.channels);break}case De.Rec2020:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.Rec2020,n.channels=y(e.channels);break}case De.ProPhoto_RGB:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.ProPhoto_RGB,n.channels=d(e.channels);break}case De.A98_RGB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.A98_RGB,n.channels=g(e.channels);break}case De.HSL:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HSL,n.channels=f(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.HWB:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.HWB,n.channels=v(e.channels),n.channels=n.channels.map(e=>reducePrecisionOrNaN(e,8));break}case De.Lab:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.Lab,n.channels=b(e.channels);break}case De.LCH:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.LCH,n.channels=p(e.channels);break}case De.OKLCH:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLCH,n.channels=N(e.channels);break}case De.OKLab:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.OKLab,n.channels=m(e.channels);break}case De.XYZ_D50:{const e=colorData_to_XYZ_D50(n);n.colorNotation=De.XYZ_D50,n.channels=h(e.channels);break}case De.XYZ_D65:{const e=colorData_to_XYZ_D65(n);n.colorNotation=De.XYZ_D65,n.channels=i(e.channels);break}default:throw new Error("Unsupported color notation")}else n.channels=convertNaNToZero(e.channels);if(a===e.colorNotation)n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else if(Ze.has(a)&&Ze.has(e.colorNotation))n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);else switch(a){case De.HSL:switch(e.colorNotation){case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.HWB:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.Lab:case De.OKLab:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[2],[0,1],n.channels,[0],[1,2]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;case De.LCH:case De.OKLCH:switch(e.colorNotation){case De.HSL:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[2,1,0],[]);break;case De.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[2],[0,1]);break;case De.Lab:case De.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],[1,2],n.channels,[0],[1,2]);break;case De.LCH:case De.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],[],n.channels,[0,1,2],[]);break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}break;default:n.channels=carryForwardMissingComponents(e.channels,[],[],n.channels,[],[])}return e.colorNotation!==a&&(n.channels=convertPowerlessComponentsToMissingComponents(n.channels,a)),n}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case De.HSL:(Number.isNaN(n[1])?0:n[1])<=.001&&(n[0]=Number.NaN),(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=Number.NaN,n[1]=Number.NaN);break;case De.HWB:Math.max(0,Number.isNaN(n[1])?0:n[1])+Math.max(0,Number.isNaN(n[2])?0:n[2])>=99.999&&(n[0]=Number.NaN);break;case De.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.LCH:(Number.isNaN(n[1])?0:n[1])<=.0015&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case De.OKLCH:(Number.isNaN(n[1])?0:n[1])<=4e-6&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN)}return n}function carryForwardMissingComponents(e,a,n,r,o,t){if(a.length<3&&e.every(Number.isNaN))return[Number.NaN,Number.NaN,Number.NaN];const l=[...r];for(let n=0;nNumber.isNaN(e[a])))for(let e=0;ee<-1e-5||e>1.00001)}function colorDataFitsDisplayP3_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,De.Display_P3).channels.find(e=>e<-1e-5||e>1.00001)}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const He=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(He,e=>String.fromCharCode(e.charCodeAt(0)+32))}function normalize_Color_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}const Pe=new Set(["srgb","srgb-linear","display-p3","display-p3-linear","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,a){const r=[],s=[],c=[],u=[];let i,h,m=!1,N=!1;const p={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let b=r;for(let o=0;o=0){t=u.value[4].value;continue}}return!1}if(!o)return!1;n.push({color:o,percentage:t}),o=!1,t=!1}}return!!o&&(n.push({color:o,percentage:t}),n)}function colorMixRectangular(e,a){if(!a||!a.length)return!1;for(const e of a)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:n,leftover:r}=normalizeMixPercentages(a,!0),o=1-r/100;let t;switch(e){case"srgb":t=De.RGB;break;case"srgb-linear":t=De.Linear_sRGB;break;case"display-p3":t=De.Display_P3;break;case"display-p3-linear":t=De.Linear_Display_P3;break;case"a98-rgb":t=De.A98_RGB;break;case"prophoto-rgb":t=De.ProPhoto_RGB;break;case"rec2020":t=De.Rec2020;break;case"lab":t=De.Lab;break;case"oklab":t=De.OKLab;break;case"xyz-d50":t=De.XYZ_D50;break;case"xyz":case"xyz-d65":t=De.XYZ_D65;break;default:return!1}if(1===n.length){const e=colorDataTo(n[0].color,t);return e.colorNotation=t,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*o,e)}for(n.reverse();n.length>=2;){const e=n.pop(),a=n.pop();if(!e||!a)return!1;const r=e.percentage+a.percentage,o=r>0?a.percentage/r:.5,l=colorMixRectangularPair(t,e.color,a.color,o);if(!l)return!1;n.push({color:l,percentage:r})}const l=n[0]?.color;return!!l&&("number"==typeof l.alpha&&(l.alpha=l.alpha*o,a.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&l.syntaxFlags.add(Le.Experimental),2!==a.length&&l.syntaxFlags.add(Le.ColorMixVariadic),l))}function colorMixRectangularPair(e,a,n,r){let o=a.alpha;if("number"!=typeof o)return!1;let t=n.alpha;if("number"!=typeof t)return!1;o=Number.isNaN(o)?t:o,t=Number.isNaN(t)?o:t;const l=colorDataTo(a,e).channels,s=colorDataTo(n,e).channels;l[0]=fillInMissingComponent(l[0],s[0]),s[0]=fillInMissingComponent(s[0],l[0]),l[1]=fillInMissingComponent(l[1],s[1]),s[1]=fillInMissingComponent(s[1],l[1]),l[2]=fillInMissingComponent(l[2],s[2]),s[2]=fillInMissingComponent(s[2],l[2]),l[0]=premultiply(l[0],o),l[1]=premultiply(l[1],o),l[2]=premultiply(l[2],o),s[0]=premultiply(s[0],t),s[1]=premultiply(s[1],t),s[2]=premultiply(s[2],t);const c=interpolate(o,t,r);return{colorNotation:e,channels:[un_premultiply(interpolate(l[0],s[0],r),c),un_premultiply(interpolate(l[1],s[1],r),c),un_premultiply(interpolate(l[2],s[2],r),c)],alpha:c,syntaxFlags:new Set([Le.ColorMix])}}function colorMixPolar(e,a,n){if(!n||!n.length)return!1;for(const e of n)if(e.percentage&&(e.percentage<0||e.percentage>100))return!1;const{items:r,leftover:o}=normalizeMixPercentages(n,!0),t=1-o/100;let l;switch(e){case"hsl":l=De.HSL;break;case"hwb":l=De.HWB;break;case"lch":l=De.LCH;break;case"oklch":l=De.OKLCH;break;default:return!1}if(1===r.length){const e=colorDataTo(r[0].color,l);return e.colorNotation=l,e.syntaxFlags.add(Le.ColorMixVariadic),e.syntaxFlags.add(Le.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*t,e)}for(r.reverse();r.length>=2;){const e=r.pop(),n=r.pop();if(!e||!n)return!1;const o=e.percentage+n.percentage,t=o>0?n.percentage/o:.5,s=colorMixPolarPair(l,a,e.color,n.color,t);if(!s)return!1;r.push({color:s,percentage:o})}const s=r[0]?.color;return!!s&&("number"==typeof s.alpha&&(s.alpha=s.alpha*t,n.some(e=>e.color.syntaxFlags.has(Le.Experimental))&&s.syntaxFlags.add(Le.Experimental),2!==n.length&&s.syntaxFlags.add(Le.ColorMixVariadic),s))}function colorMixPolarPair(e,a,n,r,o){let t=0,l=0,s=0,c=0,u=0,i=0,h=n.alpha;if("number"!=typeof h)return!1;let m=r.alpha;if("number"!=typeof m)return!1;h=Number.isNaN(h)?m:h,m=Number.isNaN(m)?h:m;const N=colorDataTo(n,e).channels,p=colorDataTo(r,e).channels;switch(e){case De.HSL:case De.HWB:t=N[0],l=p[0],s=N[1],c=p[1],u=N[2],i=p[2];break;case De.LCH:case De.OKLCH:s=N[0],c=p[0],u=N[1],i=p[1],t=N[2],l=p[2]}if(s=fillInMissingComponent(s,c),c=fillInMissingComponent(c,s),u=fillInMissingComponent(u,i),i=fillInMissingComponent(i,u),t=fillInMissingComponent(t,l),l=fillInMissingComponent(l,t),Number.isNaN(t)&&Number.isNaN(l));else{Number.isNaN(t)?t=0:Number.isNaN(l)&&(l=0);const e=l-t;switch(a){case"shorter":e>180?t+=360:e<-180&&(l+=360);break;case"longer":-1800?t+=360:l+=360);break;case"increasing":e<0&&(l+=360);break;case"decreasing":e>0&&(t+=360);break;default:throw new Error("Unknown hue interpolation method")}}s=premultiply(s,h),u=premultiply(u,h),c=premultiply(c,m),i=premultiply(i,m);let b=[0,0,0];const v=interpolate(h,m,o);switch(e){case De.HSL:case De.HWB:b=[interpolate(t,l,o),un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v)];break;case De.LCH:case De.OKLCH:b=[un_premultiply(interpolate(s,c,o),v),un_premultiply(interpolate(u,i,o),v),interpolate(t,l,o)]}return{colorNotation:e,channels:b,alpha:v,syntaxFlags:new Set([Le.ColorMix])}}function fillInMissingComponent(e,a){return Number.isNaN(e)?a:e}function interpolate(e,a,n){return e*(1-n)+a*n}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e/a}function normalizeMixPercentages(e,a=!1){let n=0,r=0;for(const a of e)a.percentage&&(n+=a.percentage),!1===a.percentage&&r++;n=Math.min(100,n);for(const a of e)!1===a.percentage&&(a.percentage=(100-n)/r);const o=e.slice();let t=0;for(const e of o)t+=e.percentage;if(t>100||t>0&&a)for(const e of o)e.percentage=e.percentage*(100/t);let l=0;return t<100&&(l=100-t),{items:o,leftover:l}}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:De.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([Le.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(Le.HasAlpha),n}return!1}function normalizeHue(n){if(o(n))return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),n[4].value=n[4].value%360,n[4].value<0&&(n[4].value+=360),n[1]=n[4].value.toString(),n;if(c(n)){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":r=180*n[4].value/Math.PI;break;case"grad":r=.9*n[4].value;break;case"turn":r=360*n[4].value;break;default:return!1}return Number.isNaN(n[4].value)||Number.isFinite(n[4].value)||(n[4].value=0),r%=360,r<0&&(r+=360),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,t,l){if(0===t){const e=normalizeHue(n);return!1!==e&&(c(n)&&l.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,100,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){if(3!==t)return!1;let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,100,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,1,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function threeChannelLegacySyntax(e,a,n,r){const t=[],c=[],u=[],i=[],h={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let m=t;for(let a=0;ave(e)&&s(e.value))){const a=hslCommaSeparated(e);if(!1!==a)return a}{const n=hslSpaceSeparated(e,a);if(!1!==n)return n}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,De.HSL,[Le.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,De.HSL,[],a)}function normalize_HWB_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(Le.HasPercentageAlpha):s.syntaxFlags.add(Le.HasPercentageValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,.8,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,De.Lab,[],a)}function normalize_LCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,100/150,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,De.LCH,[],a)}const Fe=new Map;for(const[e,a]of Object.entries(Q))Fe.set(e,a);function namedColor(e){const a=Fe.get(toLowerCaseAZ(e));return!!a&&{colorNotation:De.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([Le.ColorKeyword,Le.NamedColor])}}function normalize_OKLab_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l||2===l?n=normalize(t[4].value,250,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,De.OKLab,[],a)}function normalize_OKLCH_ChannelValues(t,l,s){if(n(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(Le.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l?n=normalize(t[4].value,250,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,De.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,t,l){if(r(n)){3===t?l.syntaxFlags.add(Le.HasPercentageAlpha):l.syntaxFlags.add(Le.HasPercentageValues);const r=normalize(n[4].value,100,0,1);return[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){3!==t&&l.syntaxFlags.add(Le.HasNumberValues);let r=normalize(n[4].value,255,0,1);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(t,l,s){if(n(t)&&"none"===t[4].value.toLowerCase())return s.syntaxFlags.add(Le.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(Le.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(Le.HasNumberValues);let n=normalize(t[4].value,255,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function rgb(e,a){if(e.value.some(e=>ve(e)&&s(e.value))){const a=rgbCommaSeparated(e);if(!1!==a)return(!a.syntaxFlags.has(Le.HasNumberValues)||!a.syntaxFlags.has(Le.HasPercentageValues))&&a}else{const n=rgbSpaceSeparated(e,a);if(!1!==n)return n}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,De.RGB,[Le.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,De.RGB,[],a)}function XYZ_D65_to_sRGB_Gamut(e){const a=x(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),ne(re(n,oklch_to_lin_srgb,lin_srgb_to_oklch))}function oklch_to_lin_srgb(e){return e=oe(e),e=te(e),le(e)}function lin_srgb_to_oklch(e){return e=se(e),e=ce(e),ue(e)}function contrastColor(e,a){let n=!1;for(let r=0;rt?[1,1,1]:[0,0,0],r}function alpha(e,a){let r,s,c=!1,u=!1,i=!1;const h={colorNotation:De.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let m=0;m{if(ve(e)&&n(e.value)&&"alpha"===toLowerCaseAZ(e.value[4].value)&&r&&r.has("alpha"))return new ge(r.get("alpha"))});h.alpha=e[0][0],u=!0;continue}return!1}if(i)return!1;for(;pe(e.value[m+1])||be(e.value[m+1]);)m++;if(m++,N=e.value[m],i=a(N),!1===i)return!1;r=normalizeRelativeColorDataChannels(i),s=noneToZeroInRelativeColorDataChannels(r),h.syntaxFlags=new Set(i.syntaxFlags),h.syntaxFlags.add(Le.RelativeAlphaSyntax),h.channels=[...i.channels],h.colorNotation=i.colorNotation,h.alpha=i.alpha}}return!!r&&h}function XYZ_D65_to_P3_Gamut(e){const a=C(e);if(ee(a))return ae(a);let n=e;return n=N(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),he(re(n,oklch_to_lin_p3,lin_p3_to_oklch))}function oklch_to_lin_p3(e){return e=oe(e),e=te(e),me(e)}function lin_p3_to_oklch(e){return e=Ne(e),e=ce(e),ue(e)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(Math.abs(e))+"").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new _e(r,l,t):new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),new ge([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new _e(r,l,[...t,new Ce([o]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([o]),n.alpha])}function serializeP3(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map(e=>Number.isNaN(e)?0:e);r?o=XYZ_D65_to_P3_Gamut(colorData_to_XYZ_D65(n).channels):n.colorNotation!==De.Display_P3&&(o=C(colorData_to_XYZ_D65(n).channels));const t=r?Math.min(1,Math.max(0,toPrecision(o[0],6))):toPrecision(o[0],6),l=r?Math.min(1,Math.max(0,toPrecision(o[1],6))):toPrecision(o[1],6),s=r?Math.min(1,Math.max(0,toPrecision(o[2],6))):toPrecision(o[2],6),c=[e.Function,"color(",-1,-1,{value:"color"}],u=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,c,u,[new ge([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new Ce([u]),new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function serializeRGB(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=r?XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels):x(colorData_to_XYZ_D65(n).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[0])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,l.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[1])),type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Number,s.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[2])),type:a.Integer}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"rgb(",-1,-1,{value:"rgb"}],c,h):new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeHSL(n,r=!0){let o;n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation),o=f(r?B(XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(n).channels)):colorData_to_XYZ_D65(n).channels),o=o.map(e=>Number.isNaN(e)?0:e);const t=Math.min(360,Math.max(0,Math.round(toPrecision(o[0]))))%360,l=Math.min(100,Math.max(0,Math.round(toPrecision(o[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(o[2])))),c=[e.CloseParen,")",-1,-1,void 0],u=[e.Whitespace," ",-1,-1,void 0],i=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new ge(i),new Ce([u]),new ge([e.Percentage,l.toString()+"%",-1,-1,{value:o[1]}]),new ge(i),new Ce([u]),new ge([e.Percentage,s.toString()+"%",-1,-1,{value:o[2]}])];if("number"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new _e([e.Function,"hsl(",-1,-1,{value:"hsl"}],c,h):new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),new ge([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(i),new Ce([u]),n.alpha])}function serializeOKLCH(n){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let r=n.channels.map(e=>Number.isNaN(e)?0:e);n.colorNotation!==De.OKLCH&&(r=N(colorData_to_XYZ_D65(n).channels));const o=toPrecision(r[0],6),t=toPrecision(r[1],6),l=toPrecision(r[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],c=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(n,s,c,[new ge([e.Number,o.toString(),-1,-1,{value:r[0],type:a.Number}]),new Ce([c]),new ge([e.Number,t.toString(),-1,-1,{value:r[1],type:a.Number}]),new Ce([c]),new ge([e.Number,l.toString(),-1,-1,{value:r[2],type:a.Number}])])}function color(e){if(fe(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return a=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,De.HWB,[],a);case"lab":return lab(e,color);case"lch":return lch(e,color);case"oklab":return oklab(e,color);case"oklch":return oklch(e,color);case"color":return color$1(e,color);case"color-mix":return colorMix(e,color);case"contrast-color":return contrastColor(e,color);case"alpha":return alpha(e,color)}}var a;if(ve(e)){if(u(e.value))return hex(e.value);if(n(e.value)){const a=namedColor(e.value[4].value);return!1!==a?a:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:De.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([Le.ColorKeyword])}}}return!1}export{De as ColorNotation,Le as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,serializeHSL,serializeOKLCH,serializeP3,serializeRGB}; diff --git a/packages/css-color-parser/src/color-data.ts b/packages/css-color-parser/src/color-data.ts index 28c09e0e4f..18cb6415ee 100644 --- a/packages/css-color-parser/src/color-data.ts +++ b/packages/css-color-parser/src/color-data.ts @@ -297,6 +297,15 @@ const predefinedRGB_or_XYZ_Spaces = new Set([ ]); export function colorDataTo(colorData: ColorData, toNotation: ColorNotation): ColorData { + colorData = { + ...colorData, + }; + + // Change any powerless components in src to missing components + if (colorData.colorNotation !== toNotation) { + colorData.channels = convertPowerlessComponentsToMissingComponents(colorData.channels, colorData.colorNotation); + } + const outputColorData: ColorData = { ...colorData, }; @@ -575,7 +584,7 @@ export function colorDataTo(colorData: ColorData, toNotation: ColorNotation): Co } } - if (colorData.colorNotation !== outputColorData.colorNotation) { + if (colorData.colorNotation !== toNotation) { outputColorData.channels = convertPowerlessComponentsToMissingComponents(outputColorData.channels, toNotation); }