diff --git a/packages/color-helpers/dist/index.d.ts b/packages/color-helpers/dist/index.d.ts index ed7b5f462..6d03f6b62 100644 --- a/packages/color-helpers/dist/index.d.ts +++ b/packages/color-helpers/dist/index.d.ts @@ -12,7 +12,7 @@ export declare function a98_RGB_to_XYZ_D50(x: Color): Color; * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function a98_RGB_to_XYZ_D65(x: Color): Color; @@ -46,6 +46,18 @@ export declare function gam_P3(RGB: Color): Color; */ export declare function gam_sRGB(RGB: Color): Color; +/** + * @param {number} hue - Hue as degrees 0..360 + * @param {number} sat - Saturation as percentage 0..100 + * @param {number} light - Lightness as percentage 0..100 + * @return {number[]} Array of sRGB components; in-gamut colors in range [0..1] + * + * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document + * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hslToRgb.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). + * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hslToRgb.js + */ +export declare function HSL_to_sRGB(HSL: Color): Color; + /** * @param {Color} color [h, s, l] * - Hue as degrees 0..360; @@ -60,10 +72,22 @@ export declare function HSL_to_XYZ_D50(x: Color): Color; * - Hue as degrees 0..360; * - Saturation as number 0..100; * - Lightness as number 0..100; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function HSL_to_XYZ_D65(x: Color): Color; +/** + * @param {number} hue - Hue as degrees 0..360 + * @param {number} white - Whiteness as percentage 0..100 + * @param {number} black - Blackness as percentage 0..100 + * @return {number[]} Array of RGB components 0..1 + * + * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document + * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hwbToRgb.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). + * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hwbToRgb.js + */ +export declare function HWB_to_sRGB(HWB: Color): Color; + /** * @param {Color} color [h, w, b] * - Hue as degrees 0..360; @@ -78,7 +102,7 @@ export declare function HWB_to_XYZ_D50(x: Color): Color; * - Hue as degrees 0..360; * - Whiteness as number 0..100; * - Blackness as number 0..100; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function HWB_to_XYZ_D65(x: Color): Color; @@ -98,27 +122,35 @@ export declare function Lab_to_XYZ_D50(x: Color): Color; * - Lightness as number 0..100; * - a as number -160..160; * - b as number -160..160; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function Lab_to_XYZ_D65(x: Color): Color; +/** + * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document + * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). + */ +export declare function LCH_to_Lab(LCH: Color, missingHue?: boolean): Color; + /** * @param {Color} color [l, c, h] * - Lightness as number 0..100; * - Chroma as number 0..230; * - Hue as degrees 0..360; + * @param {boolean} missingHue * @return {Color} D50 XYZ [x, y, z] */ -export declare function LCH_to_XYZ_D50(x: Color): Color; +export declare function LCH_to_XYZ_D50(x: Color, missingHue?: boolean): Color; /** * @param {Color} color [l, c, h] * - Lightness as number 0..100; * - Chroma as number 0..230; * - Hue as degrees 0..360; - * @return {Color} D50 XYZ [x, y, z] + * @param {boolean} missingHue + * @return {Color} D65 XYZ [x, y, z] */ -export declare function LCH_to_XYZ_D65(x: Color): Color; +export declare function LCH_to_XYZ_D65(x: Color, missingHue?: boolean): Color; /** * Convert an array of display-p3 RGB values in the range 0.0 - 1.0 @@ -153,7 +185,7 @@ export declare function lin_P3_to_XYZ_D50(x: Color): Color; * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function lin_P3_to_XYZ_D65(x: Color): Color; @@ -193,7 +225,7 @@ export declare function lin_sRGB_to_XYZ_D50(x: Color): Color; * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function lin_sRGB_to_XYZ_D65(x: Color): Color; @@ -236,7 +268,7 @@ export declare function OKLab_to_XYZ_D50(x: Color): Color; * - Lightness as number 0..1; * - a as number 0..0.5; * - b as number 0..0.5; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function OKLab_to_XYZ_D65(x: Color): Color; @@ -245,25 +277,27 @@ export declare function OKLab_to_XYZ_D65(x: Color): Color; * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js */ -export declare function OKLCH_to_OKLab(OKLCH: Color): Color; +export declare function OKLCH_to_OKLab(OKLCH: Color, missingHue?: boolean): Color; /** * @param {Color} color [l, c, h] * - Lightness as number 0..1; * - Chroma as number 0..0.5; * - Hue as degrees 0..360; + * @param {boolean} missingHue * @return {Color} D50 XYZ [x, y, z] */ -export declare function OKLCH_to_XYZ_D50(x: Color): Color; +export declare function OKLCH_to_XYZ_D50(x: Color, missingHue?: boolean): Color; /** * @param {Color} color [l, c, h] * - Lightness as number 0..1; * - Chroma as number 0..0.5; * - Hue as degrees 0..360; - * @return {Color} D50 XYZ [x, y, z] + * @param {boolean} missingHue + * @return {Color} D65 XYZ [x, y, z] */ -export declare function OKLCH_to_XYZ_D65(x: Color): Color; +export declare function OKLCH_to_XYZ_D65(x: Color, missingHue?: boolean): Color; /** * @param {Color} color [r, g, b] @@ -279,7 +313,7 @@ export declare function P3_to_XYZ_D50(x: Color): Color; * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function P3_to_XYZ_D65(x: Color): Color; @@ -297,7 +331,7 @@ export declare function ProPhoto_RGB_to_XYZ_D50(x: Color): Color; * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function ProPhoto_RGB_to_XYZ_D65(x: Color): Color; @@ -315,7 +349,7 @@ export declare function rec_2020_to_XYZ_D50(x: Color): Color; * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function rec_2020_to_XYZ_D65(x: Color): Color; @@ -333,7 +367,7 @@ export declare function sRGB_to_XYZ_D50(x: Color): Color; * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export declare function sRGB_to_XYZ_D65(x: Color): Color; diff --git a/packages/color-helpers/dist/index.mjs b/packages/color-helpers/dist/index.mjs index e57618cee..3e749fe07 100644 --- a/packages/color-helpers/dist/index.mjs +++ b/packages/color-helpers/dist/index.mjs @@ -34,7 +34,7 @@ function multiplyMatrices(_,t){return[_[0]*t[0]+_[1]*t[1]+_[2]*t[2],_[3]*t[0]+_[ /** * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). - */function LCH_to_Lab(_){const t=_[2]*Math.PI/180;return[_[0],_[1]*Math.cos(t),_[1]*Math.sin(t)]} + */function LCH_to_Lab(_,t=!1){const n=_[2]*Math.PI/180;return[_[0],t?0:_[1]*Math.cos(n),t?0:_[1]*Math.sin(n)]} /** * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). @@ -49,7 +49,7 @@ function multiplyMatrices(_,t){return[_[0]*t[0]+_[1]*t[1]+_[2]*t[2],_[3]*t[0]+_[ * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js - */function OKLCH_to_OKLab(_){const t=_[2]*Math.PI/180;return[_[0],_[1]*Math.cos(t),_[1]*Math.sin(t)]} + */function OKLCH_to_OKLab(_,t=!1){const n=_[2]*Math.PI/180;return[_[0],t?0:_[1]*Math.cos(n),t?0:_[1]*Math.sin(n)]} /** * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). @@ -245,7 +245,7 @@ function XYZ_to_OKLab(_){const t=multiplyMatrices(i,_);return multiplyMatrices(l * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/utilities.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). * * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/better-rgbToHsl.js - */function sRGB_to_HSL(_){const t=_[0],n=_[1],o=_[2],e=Math.max(t,n,o),r=Math.min(t,n,o),a=(r+e)/2,i=e-r;let l=Number.NaN,u=0;if(0!==Math.round(1e5*i)){const _=Math.round(1e5*a);switch(u=0===_||1e5===_?0:(e-a)/Math.min(a,1-a),e){case t:l=(n-o)/i+(n=360&&(l-=360);return u<=1e-5&&(l=NaN),[l,100*u,100*a]}function sRGB_to_Hue(_){const t=_[0],n=_[1],o=_[2],e=Math.max(t,n,o),r=Math.min(t,n,o);let a=Number.NaN;const i=e-r;if(0!==i){switch(e){case t:a=(n-o)/i+(n=360&&(a-=360),a}function sRGB_to_XYZ_D50(_){let t=_;return t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_sRGB(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_sRGB(t),t=gam_sRGB(t),t}function HSL_to_XYZ_D50(_){let t=_;return t=HSL_to_sRGB(t),t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_HSL(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_sRGB(t),t=gam_sRGB(t),t=sRGB_to_HSL(t),t}function HWB_to_XYZ_D50(_){let t=_;return t=HWB_to_sRGB(t),t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_HWB(_){let t=_;t=D50_to_D65(t),t=XYZ_to_lin_sRGB(t);const n=gam_sRGB(t),o=Math.min(n[0],n[1],n[2]),e=1-Math.max(n[0],n[1],n[2]);let r=sRGB_to_Hue(n);return o+e>=.99999&&(r=NaN),[r,100*o,100*e]}function Lab_to_XYZ_D50(_){let t=_;return t=Lab_to_XYZ(t),t}function XYZ_D50_to_Lab(_){let t=_;return t=XYZ_to_Lab(t),t}function LCH_to_XYZ_D50(_){let t=_;return t=LCH_to_Lab(t),t=Lab_to_XYZ(t),t}function XYZ_D50_to_LCH(_){let t=_;return t=XYZ_to_Lab(t),t=Lab_to_LCH(t),t}function OKLab_to_XYZ_D50(_){let t=_;return t=OKLab_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_OKLab(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_OKLab(t),t}function OKLCH_to_XYZ_D50(_){let t=_;return t=OKLCH_to_OKLab(t),t=OKLab_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_OKLCH(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_OKLab(t),t=OKLab_to_OKLCH(t),t}function lin_sRGB_to_XYZ_D50(_){let t=_;return t=lin_sRGB_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_lin_sRGB(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_sRGB(t),t}function a98_RGB_to_XYZ_D50(_){let t=_;return t=lin_a98rgb(t),t=lin_a98rgb_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_a98_RGB(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_a98rgb(t),t=gam_a98rgb(t),t}function P3_to_XYZ_D50(_){let t=_;return t=lin_P3(t),t=lin_P3_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_P3(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_P3(t),t=gam_P3(t),t}function lin_P3_to_XYZ_D50(_){let t=_;return t=lin_P3_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_lin_P3(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_P3(t),t}function rec_2020_to_XYZ_D50(_){let t=_;return t=lin_2020(t),t=lin_2020_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_rec_2020(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_2020(t),t=gam_2020(t),t}function ProPhoto_RGB_to_XYZ_D50(_){let t=_;return t=lin_ProPhoto(t),t=lin_ProPhoto_to_XYZ(t),t}function XYZ_D50_to_ProPhoto(_){let t=_;return t=XYZ_to_lin_ProPhoto(t),t=gam_ProPhoto(t),t}function XYZ_D65_to_XYZ_D50(_){let t=_;return t=D65_to_D50(t),t}function XYZ_D50_to_XYZ_D65(_){let t=_;return t=D50_to_D65(t),t}function XYZ_D50_to_XYZ_D50(_){return _}function XYZ_D65_to_XYZ_D65(_){return _}function sRGB_to_XYZ_D65(_){let t=_;return t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t}function XYZ_D65_to_sRGB(_){let t=_;return t=XYZ_to_lin_sRGB(t),t=gam_sRGB(t),t}function HSL_to_XYZ_D65(_){let t=_;return t=HSL_to_sRGB(t),t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t}function XYZ_D65_to_HSL(_){let t=_;return t=XYZ_to_lin_sRGB(t),t=gam_sRGB(t),t=sRGB_to_HSL(t),t}function HWB_to_XYZ_D65(_){let t=_;return t=HWB_to_sRGB(t),t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t}function XYZ_D65_to_HWB(_){let t=_;t=XYZ_to_lin_sRGB(t);const n=gam_sRGB(t),o=Math.min(n[0],n[1],n[2]),e=1-Math.max(n[0],n[1],n[2]);let r=sRGB_to_Hue(n);return o+e>=.99999&&(r=NaN),[r,100*o,100*e]}function Lab_to_XYZ_D65(_){let t=_;return t=Lab_to_XYZ(t),t=D50_to_D65(t),t}function XYZ_D65_to_Lab(_){let t=_;return t=D65_to_D50(t),t=XYZ_to_Lab(t),t}function LCH_to_XYZ_D65(_){let t=_;return t=LCH_to_Lab(t),t=Lab_to_XYZ(t),t=D50_to_D65(t),t}function XYZ_D65_to_LCH(_){let t=_;return t=D65_to_D50(t),t=XYZ_to_Lab(t),t=Lab_to_LCH(t),t}function OKLab_to_XYZ_D65(_){let t=_;return t=OKLab_to_XYZ(t),t}function XYZ_D65_to_OKLab(_){let t=_;return t=XYZ_to_OKLab(t),t}function OKLCH_to_XYZ_D65(_){let t=_;return t=OKLCH_to_OKLab(t),t=OKLab_to_XYZ(t),t}function XYZ_D65_to_OKLCH(_){let t=_;return t=XYZ_to_OKLab(t),t=OKLab_to_OKLCH(t),t}function lin_sRGB_to_XYZ_D65(_){let t=_;return t=lin_sRGB_to_XYZ(t),t}function XYZ_D65_to_lin_sRGB(_){let t=_;return t=XYZ_to_lin_sRGB(t),t}function a98_RGB_to_XYZ_D65(_){let t=_;return t=lin_a98rgb(t),t=lin_a98rgb_to_XYZ(t),t}function XYZ_D65_to_a98_RGB(_){let t=_;return t=XYZ_to_lin_a98rgb(t),t=gam_a98rgb(t),t}function P3_to_XYZ_D65(_){let t=_;return t=lin_P3(t),t=lin_P3_to_XYZ(t),t}function XYZ_D65_to_P3(_){let t=_;return t=XYZ_to_lin_P3(t),t=gam_P3(t),t}function lin_P3_to_XYZ_D65(_){let t=_;return t=lin_P3_to_XYZ(t),t}function XYZ_D65_to_lin_P3(_){let t=_;return t=XYZ_to_lin_P3(t),t}function rec_2020_to_XYZ_D65(_){let t=_;return t=lin_2020(t),t=lin_2020_to_XYZ(t),t}function XYZ_D65_to_rec_2020(_){let t=_;return t=XYZ_to_lin_2020(t),t=gam_2020(t),t}function ProPhoto_RGB_to_XYZ_D65(_){let t=_;return t=lin_ProPhoto(t),t=lin_ProPhoto_to_XYZ(t),t=D50_to_D65(t),t}function XYZ_D65_to_ProPhoto(_){let t=_;return t=D65_to_D50(t),t=XYZ_to_lin_ProPhoto(t),t=gam_ProPhoto(t),t}function inGamut(_){return _[0]>=-1e-4&&_[0]<=1.0001&&_[1]>=-1e-4&&_[1]<=1.0001&&_[2]>=-1e-4&&_[2]<=1.0001}function clip(_){return[_[0]<0?0:_[0]>1?1:_[0],_[1]<0?0:_[1]>1?1:_[1],_[2]<0?0:_[2]>1?1:_[2]]} + */function sRGB_to_HSL(_){const t=_[0],n=_[1],o=_[2],e=Math.max(t,n,o),r=Math.min(t,n,o),a=(r+e)/2,i=e-r;let l=Number.NaN,u=0;if(0!==Math.round(1e5*i)){const _=Math.round(1e5*a);switch(u=0===_||1e5===_?0:(e-a)/Math.min(a,1-a),e){case t:l=(n-o)/i+(n=360&&(l-=360);return u<=1e-5&&(l=NaN),[l,100*u,100*a]}function sRGB_to_Hue(_){const t=_[0],n=_[1],o=_[2],e=Math.max(t,n,o),r=Math.min(t,n,o);let a=Number.NaN;const i=e-r;if(0!==i){switch(e){case t:a=(n-o)/i+(n=360&&(a-=360),a}function sRGB_to_XYZ_D50(_){let t=_;return t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_sRGB(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_sRGB(t),t=gam_sRGB(t),t}function HSL_to_XYZ_D50(_){let t=_;return t=HSL_to_sRGB(t),t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_HSL(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_sRGB(t),t=gam_sRGB(t),t=sRGB_to_HSL(t),t}function HWB_to_XYZ_D50(_){let t=_;return t=HWB_to_sRGB(t),t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_HWB(_){let t=_;t=D50_to_D65(t),t=XYZ_to_lin_sRGB(t);const n=gam_sRGB(t),o=Math.min(n[0],n[1],n[2]),e=1-Math.max(n[0],n[1],n[2]);let r=sRGB_to_Hue(n);return o+e>=.99999&&(r=NaN),[r,100*o,100*e]}function Lab_to_XYZ_D50(_){let t=_;return t=Lab_to_XYZ(t),t}function XYZ_D50_to_Lab(_){let t=_;return t=XYZ_to_Lab(t),t}function LCH_to_XYZ_D50(_,t=!1){let n=_;return n=LCH_to_Lab(n,t),n=Lab_to_XYZ(n),n}function XYZ_D50_to_LCH(_){let t=_;return t=XYZ_to_Lab(t),t=Lab_to_LCH(t),t}function OKLab_to_XYZ_D50(_){let t=_;return t=OKLab_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_OKLab(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_OKLab(t),t}function OKLCH_to_XYZ_D50(_,t=!1){let n=_;return n=OKLCH_to_OKLab(n,t),n=OKLab_to_XYZ(n),n=D65_to_D50(n),n}function XYZ_D50_to_OKLCH(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_OKLab(t),t=OKLab_to_OKLCH(t),t}function lin_sRGB_to_XYZ_D50(_){let t=_;return t=lin_sRGB_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_lin_sRGB(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_sRGB(t),t}function a98_RGB_to_XYZ_D50(_){let t=_;return t=lin_a98rgb(t),t=lin_a98rgb_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_a98_RGB(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_a98rgb(t),t=gam_a98rgb(t),t}function P3_to_XYZ_D50(_){let t=_;return t=lin_P3(t),t=lin_P3_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_P3(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_P3(t),t=gam_P3(t),t}function lin_P3_to_XYZ_D50(_){let t=_;return t=lin_P3_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_lin_P3(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_P3(t),t}function rec_2020_to_XYZ_D50(_){let t=_;return t=lin_2020(t),t=lin_2020_to_XYZ(t),t=D65_to_D50(t),t}function XYZ_D50_to_rec_2020(_){let t=_;return t=D50_to_D65(t),t=XYZ_to_lin_2020(t),t=gam_2020(t),t}function ProPhoto_RGB_to_XYZ_D50(_){let t=_;return t=lin_ProPhoto(t),t=lin_ProPhoto_to_XYZ(t),t}function XYZ_D50_to_ProPhoto(_){let t=_;return t=XYZ_to_lin_ProPhoto(t),t=gam_ProPhoto(t),t}function XYZ_D65_to_XYZ_D50(_){let t=_;return t=D65_to_D50(t),t}function XYZ_D50_to_XYZ_D65(_){let t=_;return t=D50_to_D65(t),t}function XYZ_D50_to_XYZ_D50(_){return _}function XYZ_D65_to_XYZ_D65(_){return _}function sRGB_to_XYZ_D65(_){let t=_;return t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t}function XYZ_D65_to_sRGB(_){let t=_;return t=XYZ_to_lin_sRGB(t),t=gam_sRGB(t),t}function HSL_to_XYZ_D65(_){let t=_;return t=HSL_to_sRGB(t),t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t}function XYZ_D65_to_HSL(_){let t=_;return t=XYZ_to_lin_sRGB(t),t=gam_sRGB(t),t=sRGB_to_HSL(t),t}function HWB_to_XYZ_D65(_){let t=_;return t=HWB_to_sRGB(t),t=lin_sRGB(t),t=lin_sRGB_to_XYZ(t),t}function XYZ_D65_to_HWB(_){let t=_;t=XYZ_to_lin_sRGB(t);const n=gam_sRGB(t),o=Math.min(n[0],n[1],n[2]),e=1-Math.max(n[0],n[1],n[2]);let r=sRGB_to_Hue(n);return o+e>=.99999&&(r=NaN),[r,100*o,100*e]}function Lab_to_XYZ_D65(_){let t=_;return t=Lab_to_XYZ(t),t=D50_to_D65(t),t}function XYZ_D65_to_Lab(_){let t=_;return t=D65_to_D50(t),t=XYZ_to_Lab(t),t}function LCH_to_XYZ_D65(_,t=!1){let n=_;return n=LCH_to_Lab(n,t),n=Lab_to_XYZ(n),n=D50_to_D65(n),n}function XYZ_D65_to_LCH(_){let t=_;return t=D65_to_D50(t),t=XYZ_to_Lab(t),t=Lab_to_LCH(t),t}function OKLab_to_XYZ_D65(_){let t=_;return t=OKLab_to_XYZ(t),t}function XYZ_D65_to_OKLab(_){let t=_;return t=XYZ_to_OKLab(t),t}function OKLCH_to_XYZ_D65(_,t=!1){let n=_;return n=OKLCH_to_OKLab(n,t),n=OKLab_to_XYZ(n),n}function XYZ_D65_to_OKLCH(_){let t=_;return t=XYZ_to_OKLab(t),t=OKLab_to_OKLCH(t),t}function lin_sRGB_to_XYZ_D65(_){let t=_;return t=lin_sRGB_to_XYZ(t),t}function XYZ_D65_to_lin_sRGB(_){let t=_;return t=XYZ_to_lin_sRGB(t),t}function a98_RGB_to_XYZ_D65(_){let t=_;return t=lin_a98rgb(t),t=lin_a98rgb_to_XYZ(t),t}function XYZ_D65_to_a98_RGB(_){let t=_;return t=XYZ_to_lin_a98rgb(t),t=gam_a98rgb(t),t}function P3_to_XYZ_D65(_){let t=_;return t=lin_P3(t),t=lin_P3_to_XYZ(t),t}function XYZ_D65_to_P3(_){let t=_;return t=XYZ_to_lin_P3(t),t=gam_P3(t),t}function lin_P3_to_XYZ_D65(_){let t=_;return t=lin_P3_to_XYZ(t),t}function XYZ_D65_to_lin_P3(_){let t=_;return t=XYZ_to_lin_P3(t),t}function rec_2020_to_XYZ_D65(_){let t=_;return t=lin_2020(t),t=lin_2020_to_XYZ(t),t}function XYZ_D65_to_rec_2020(_){let t=_;return t=XYZ_to_lin_2020(t),t=gam_2020(t),t}function ProPhoto_RGB_to_XYZ_D65(_){let t=_;return t=lin_ProPhoto(t),t=lin_ProPhoto_to_XYZ(t),t=D50_to_D65(t),t}function XYZ_D65_to_ProPhoto(_){let t=_;return t=D65_to_D50(t),t=XYZ_to_lin_ProPhoto(t),t=gam_ProPhoto(t),t}function inGamut(_){return _[0]>=-1e-4&&_[0]<=1.0001&&_[1]>=-1e-4&&_[1]<=1.0001&&_[2]>=-1e-4&&_[2]<=1.0001}function clip(_){return[_[0]<0?0:_[0]>1?1:_[0],_[1]<0?0:_[1]>1?1:_[1],_[2]<0?0:_[2]>1?1:_[2]]} /** * @description Calculate deltaE OK which is the simple root sum of squares * @param {number[]} reference - Array of OKLab values: L as 0..1, a and b as -1..1 @@ -258,4 +258,4 @@ function XYZ_to_OKLab(_){const t=multiplyMatrices(i,_);return multiplyMatrices(l */function deltaEOK(_,t){const[n,o,e]=_,[r,a,i]=t,l=n-r,u=o-a,c=e-i;return Math.sqrt(l**2+u**2+c**2)}const L=.02,B=1e-4;function mapGamut(_,t,n){const o=_;let e=clip(t(o)),r=deltaEOK(OKLCH_to_OKLab(n(e)),OKLCH_to_OKLab(o));if(r0&&!Number.isFinite(i)&&(i=2147483647);i-a>B;){const _=(a+i)/2;if(o[1]=_,l&&inGamut(t(o)))a=_;else if(e=clip(t(o)),r=deltaEOK(OKLCH_to_OKLab(n(e)),OKLCH_to_OKLab(o)),r0){const _=n(r);_[0]=o,_[2]=e,r=t(_)}const i=rayTraceBox(a,r);if(!i)break;r=i}return clip(r)}function rayTraceBox(_,t){let n=1/0,o=-1/0;const e=[0,0,0];for(let r=0;r<3;r++){const a=_[r],i=t[r]-a;e[r]=i;const l=0,u=1;if(Math.abs(i)>1e-12){const _=1/i,t=(l-a)*_,e=(u-a)*_;o=Math.max(Math.min(t,e),o),n=Math.min(Math.max(t,e),n)}else if(au)return!1}return!(o>n||n<0)&&(o<0&&(o=n),!!isFinite(o)&&[_[0]+e[0]*o,_[1]+e[1]*o,_[2]+e[2]*o])}const G={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};function luminance(_){const[t,n,o]=_.map(_=>_<=.04045?_/12.92:Math.pow((_+.055)/1.055,2.4));return.2126*t+.7152*n+.0722*o}function contrast_ratio_wcag_2_1(_,t){const n=luminance(_),o=luminance(t);return(Math.max(n,o)+.05)/(Math.min(n,o)+.05)}export{HSL_to_XYZ_D50,HSL_to_XYZ_D65,HWB_to_XYZ_D50,HWB_to_XYZ_D65,LCH_to_XYZ_D50,LCH_to_XYZ_D65,Lab_to_XYZ_D50,Lab_to_XYZ_D65,OKLCH_to_OKLab,OKLCH_to_XYZ_D50,OKLCH_to_XYZ_D65,OKLab_to_OKLCH,OKLab_to_XYZ,OKLab_to_XYZ_D50,OKLab_to_XYZ_D65,P3_to_XYZ_D50,P3_to_XYZ_D65,ProPhoto_RGB_to_XYZ_D50,ProPhoto_RGB_to_XYZ_D65,XYZ_D50_to_HSL,XYZ_D50_to_HWB,XYZ_D50_to_LCH,XYZ_D50_to_Lab,XYZ_D50_to_OKLCH,XYZ_D50_to_OKLab,XYZ_D50_to_P3,XYZ_D50_to_ProPhoto,XYZ_D50_to_XYZ_D50,XYZ_D50_to_XYZ_D65,XYZ_D50_to_a98_RGB,XYZ_D50_to_lin_P3,XYZ_D50_to_lin_sRGB,XYZ_D50_to_rec_2020,XYZ_D50_to_sRGB,XYZ_D65_to_HSL,XYZ_D65_to_HWB,XYZ_D65_to_LCH,XYZ_D65_to_Lab,XYZ_D65_to_OKLCH,XYZ_D65_to_OKLab,XYZ_D65_to_P3,XYZ_D65_to_ProPhoto,XYZ_D65_to_XYZ_D50,XYZ_D65_to_XYZ_D65,XYZ_D65_to_a98_RGB,XYZ_D65_to_lin_P3,XYZ_D65_to_lin_sRGB,XYZ_D65_to_rec_2020,XYZ_D65_to_sRGB,XYZ_to_OKLab,XYZ_to_lin_P3,XYZ_to_lin_sRGB,a98_RGB_to_XYZ_D50,a98_RGB_to_XYZ_D65,clip,contrast_ratio_wcag_2_1,gam_P3,gam_sRGB,inGamut,lin_P3,lin_P3_to_XYZ,lin_P3_to_XYZ_D50,lin_P3_to_XYZ_D65,lin_sRGB,lin_sRGB_to_XYZ,lin_sRGB_to_XYZ_D50,lin_sRGB_to_XYZ_D65,mapGamut,mapGamutRayTrace,G as namedColors,rec_2020_to_XYZ_D50,rec_2020_to_XYZ_D65,sRGB_to_XYZ_D50,sRGB_to_XYZ_D65}; + */function mapGamutRayTrace(_,t,n){const o=_[0],e=_[2];let r=t(_);const a=t([o,0,e]);for(let _=0;_<4;_++){if(_>0){const _=n(r);_[0]=o,_[2]=e,r=t(_)}const i=rayTraceBox(a,r);if(!i)break;r=i}return clip(r)}function rayTraceBox(_,t){let n=1/0,o=-1/0;const e=[0,0,0];for(let r=0;r<3;r++){const a=_[r],i=t[r]-a;e[r]=i;const l=0,u=1;if(Math.abs(i)>1e-12){const _=1/i,t=(l-a)*_,e=(u-a)*_;o=Math.max(Math.min(t,e),o),n=Math.min(Math.max(t,e),n)}else if(au)return!1}return!(o>n||n<0)&&(o<0&&(o=n),!!isFinite(o)&&[_[0]+e[0]*o,_[1]+e[1]*o,_[2]+e[2]*o])}const G={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};function luminance(_){const[t,n,o]=_.map(_=>_<=.04045?_/12.92:Math.pow((_+.055)/1.055,2.4));return.2126*t+.7152*n+.0722*o}function contrast_ratio_wcag_2_1(_,t){const n=luminance(_),o=luminance(t);return(Math.max(n,o)+.05)/(Math.min(n,o)+.05)}export{HSL_to_XYZ_D50,HSL_to_XYZ_D65,HSL_to_sRGB,HWB_to_XYZ_D50,HWB_to_XYZ_D65,HWB_to_sRGB,LCH_to_Lab,LCH_to_XYZ_D50,LCH_to_XYZ_D65,Lab_to_XYZ_D50,Lab_to_XYZ_D65,OKLCH_to_OKLab,OKLCH_to_XYZ_D50,OKLCH_to_XYZ_D65,OKLab_to_OKLCH,OKLab_to_XYZ,OKLab_to_XYZ_D50,OKLab_to_XYZ_D65,P3_to_XYZ_D50,P3_to_XYZ_D65,ProPhoto_RGB_to_XYZ_D50,ProPhoto_RGB_to_XYZ_D65,XYZ_D50_to_HSL,XYZ_D50_to_HWB,XYZ_D50_to_LCH,XYZ_D50_to_Lab,XYZ_D50_to_OKLCH,XYZ_D50_to_OKLab,XYZ_D50_to_P3,XYZ_D50_to_ProPhoto,XYZ_D50_to_XYZ_D50,XYZ_D50_to_XYZ_D65,XYZ_D50_to_a98_RGB,XYZ_D50_to_lin_P3,XYZ_D50_to_lin_sRGB,XYZ_D50_to_rec_2020,XYZ_D50_to_sRGB,XYZ_D65_to_HSL,XYZ_D65_to_HWB,XYZ_D65_to_LCH,XYZ_D65_to_Lab,XYZ_D65_to_OKLCH,XYZ_D65_to_OKLab,XYZ_D65_to_P3,XYZ_D65_to_ProPhoto,XYZ_D65_to_XYZ_D50,XYZ_D65_to_XYZ_D65,XYZ_D65_to_a98_RGB,XYZ_D65_to_lin_P3,XYZ_D65_to_lin_sRGB,XYZ_D65_to_rec_2020,XYZ_D65_to_sRGB,XYZ_to_OKLab,XYZ_to_lin_P3,XYZ_to_lin_sRGB,a98_RGB_to_XYZ_D50,a98_RGB_to_XYZ_D65,clip,contrast_ratio_wcag_2_1,gam_P3,gam_sRGB,inGamut,lin_P3,lin_P3_to_XYZ,lin_P3_to_XYZ_D50,lin_P3_to_XYZ_D65,lin_sRGB,lin_sRGB_to_XYZ,lin_sRGB_to_XYZ_D50,lin_sRGB_to_XYZ_D65,mapGamut,mapGamutRayTrace,G as namedColors,rec_2020_to_XYZ_D50,rec_2020_to_XYZ_D65,sRGB_to_XYZ_D50,sRGB_to_XYZ_D65}; diff --git a/packages/color-helpers/docs/color-helpers.api.json b/packages/color-helpers/docs/color-helpers.api.json index fe49722d3..411a0d85b 100644 --- a/packages/color-helpers/docs/color-helpers.api.json +++ b/packages/color-helpers/docs/color-helpers.api.json @@ -247,7 +247,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!a98_RGB_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -521,6 +521,53 @@ ], "name": "gam_sRGB" }, + { + "kind": "Function", + "canonicalReference": "@csstools/color-helpers!HSL_to_sRGB:function(1)", + "docComment": "/**\n * @param hue - Hue as degrees 0..360\n *\n * @param sat - Saturation as percentage 0..100\n *\n * @param light - Lightness as percentage 0..100 @return {number[]} Array of sRGB components; in-gamut colors in range [0..1]\n *\n * @license\n *\n * W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * @copyright\n *\n * This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hslToRgb.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n *\n * @see\n *\n * https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hslToRgb.js\n */\n", + "excerptTokens": [ + { + "kind": "Content", + "text": "export declare function HSL_to_sRGB(HSL: " + }, + { + "kind": "Reference", + "text": "Color", + "canonicalReference": "@csstools/color-helpers!Color:type" + }, + { + "kind": "Content", + "text": "): " + }, + { + "kind": "Reference", + "text": "Color", + "canonicalReference": "@csstools/color-helpers!Color:type" + }, + { + "kind": "Content", + "text": ";" + } + ], + "fileUrlPath": "dist/_types/conversions/hsl-to-srgb.d.ts", + "returnTypeTokenRange": { + "startIndex": 3, + "endIndex": 4 + }, + "releaseTag": "Public", + "overloadIndex": 1, + "parameters": [ + { + "parameterName": "HSL", + "parameterTypeTokenRange": { + "startIndex": 1, + "endIndex": 2 + }, + "isOptional": false + } + ], + "name": "HSL_to_sRGB" + }, { "kind": "Function", "canonicalReference": "@csstools/color-helpers!HSL_to_XYZ_D50:function(1)", @@ -571,7 +618,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!HSL_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [h, s, l] - Hue as degrees 0..360; - Saturation as number 0..100; - Lightness as number 0..100; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [h, s, l] - Hue as degrees 0..360; - Saturation as number 0..100; - Lightness as number 0..100; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -615,6 +662,53 @@ ], "name": "HSL_to_XYZ_D65" }, + { + "kind": "Function", + "canonicalReference": "@csstools/color-helpers!HWB_to_sRGB:function(1)", + "docComment": "/**\n * @param hue - Hue as degrees 0..360\n *\n * @param white - Whiteness as percentage 0..100\n *\n * @param black - Blackness as percentage 0..100 @return {number[]} Array of RGB components 0..1\n *\n * @license\n *\n * W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * @copyright\n *\n * This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hwbToRgb.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n *\n * @see\n *\n * https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hwbToRgb.js\n */\n", + "excerptTokens": [ + { + "kind": "Content", + "text": "export declare function HWB_to_sRGB(HWB: " + }, + { + "kind": "Reference", + "text": "Color", + "canonicalReference": "@csstools/color-helpers!Color:type" + }, + { + "kind": "Content", + "text": "): " + }, + { + "kind": "Reference", + "text": "Color", + "canonicalReference": "@csstools/color-helpers!Color:type" + }, + { + "kind": "Content", + "text": ";" + } + ], + "fileUrlPath": "dist/_types/conversions/hwb-to-srgb.d.ts", + "returnTypeTokenRange": { + "startIndex": 3, + "endIndex": 4 + }, + "releaseTag": "Public", + "overloadIndex": 1, + "parameters": [ + { + "parameterName": "HWB", + "parameterTypeTokenRange": { + "startIndex": 1, + "endIndex": 2 + }, + "isOptional": false + } + ], + "name": "HWB_to_sRGB" + }, { "kind": "Function", "canonicalReference": "@csstools/color-helpers!HWB_to_XYZ_D50:function(1)", @@ -665,7 +759,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!HWB_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [h, w, b] - Hue as degrees 0..360; - Whiteness as number 0..100; - Blackness as number 0..100; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [h, w, b] - Hue as degrees 0..360; - Whiteness as number 0..100; - Blackness as number 0..100; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -805,7 +899,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!Lab_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [l, a, b] - Lightness as number 0..100; - a as number -160..160; - b as number -160..160; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [l, a, b] - Lightness as number 0..100; - a as number -160..160; - b as number -160..160; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -849,10 +943,73 @@ ], "name": "Lab_to_XYZ_D65" }, + { + "kind": "Function", + "canonicalReference": "@csstools/color-helpers!LCH_to_Lab:function(1)", + "docComment": "/**\n * @license\n *\n * W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * @copyright\n *\n * This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */\n", + "excerptTokens": [ + { + "kind": "Content", + "text": "export declare function LCH_to_Lab(LCH: " + }, + { + "kind": "Reference", + "text": "Color", + "canonicalReference": "@csstools/color-helpers!Color:type" + }, + { + "kind": "Content", + "text": ", missingHue?: " + }, + { + "kind": "Content", + "text": "boolean" + }, + { + "kind": "Content", + "text": "): " + }, + { + "kind": "Reference", + "text": "Color", + "canonicalReference": "@csstools/color-helpers!Color:type" + }, + { + "kind": "Content", + "text": ";" + } + ], + "fileUrlPath": "dist/_types/conversions/lch-to-lab.d.ts", + "returnTypeTokenRange": { + "startIndex": 5, + "endIndex": 6 + }, + "releaseTag": "Public", + "overloadIndex": 1, + "parameters": [ + { + "parameterName": "LCH", + "parameterTypeTokenRange": { + "startIndex": 1, + "endIndex": 2 + }, + "isOptional": false + }, + { + "parameterName": "missingHue", + "parameterTypeTokenRange": { + "startIndex": 3, + "endIndex": 4 + }, + "isOptional": true + } + ], + "name": "LCH_to_Lab" + }, { "kind": "Function", "canonicalReference": "@csstools/color-helpers!LCH_to_XYZ_D50:function(1)", - "docComment": "/**\n * @param color - [l, c, h] - Lightness as number 0..100; - Chroma as number 0..230; - Hue as degrees 0..360; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [l, c, h] - Lightness as number 0..100; - Chroma as number 0..230; - Hue as degrees 0..360;\n *\n * @param missingHue - @return {Color} D50 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -863,6 +1020,14 @@ "text": "Color", "canonicalReference": "@csstools/color-helpers!Color:type" }, + { + "kind": "Content", + "text": ", missingHue?: " + }, + { + "kind": "Content", + "text": "boolean" + }, { "kind": "Content", "text": "): " @@ -879,8 +1044,8 @@ ], "fileUrlPath": "dist/_types/conversions/xyz/d50.d.ts", "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 + "startIndex": 5, + "endIndex": 6 }, "releaseTag": "Public", "overloadIndex": 1, @@ -892,6 +1057,14 @@ "endIndex": 2 }, "isOptional": false + }, + { + "parameterName": "missingHue", + "parameterTypeTokenRange": { + "startIndex": 3, + "endIndex": 4 + }, + "isOptional": true } ], "name": "LCH_to_XYZ_D50" @@ -899,7 +1072,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!LCH_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [l, c, h] - Lightness as number 0..100; - Chroma as number 0..230; - Hue as degrees 0..360; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [l, c, h] - Lightness as number 0..100; - Chroma as number 0..230; - Hue as degrees 0..360;\n *\n * @param missingHue - @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -910,6 +1083,14 @@ "text": "Color", "canonicalReference": "@csstools/color-helpers!Color:type" }, + { + "kind": "Content", + "text": ", missingHue?: " + }, + { + "kind": "Content", + "text": "boolean" + }, { "kind": "Content", "text": "): " @@ -926,8 +1107,8 @@ ], "fileUrlPath": "dist/_types/conversions/xyz/d65.d.ts", "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 + "startIndex": 5, + "endIndex": 6 }, "releaseTag": "Public", "overloadIndex": 1, @@ -939,6 +1120,14 @@ "endIndex": 2 }, "isOptional": false + }, + { + "parameterName": "missingHue", + "parameterTypeTokenRange": { + "startIndex": 3, + "endIndex": 4 + }, + "isOptional": true } ], "name": "LCH_to_XYZ_D65" @@ -993,7 +1182,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!lin_P3_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -1181,7 +1370,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!lin_sRGB_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -1667,7 +1856,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!OKLab_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [l, a, b] - Lightness as number 0..1; - a as number 0..0.5; - b as number 0..0.5; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [l, a, b] - Lightness as number 0..1; - a as number 0..0.5; - b as number 0..0.5; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -1772,6 +1961,14 @@ "text": "Color", "canonicalReference": "@csstools/color-helpers!Color:type" }, + { + "kind": "Content", + "text": ", missingHue?: " + }, + { + "kind": "Content", + "text": "boolean" + }, { "kind": "Content", "text": "): " @@ -1788,8 +1985,8 @@ ], "fileUrlPath": "dist/_types/conversions/oklch-to-oklab.d.ts", "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 + "startIndex": 5, + "endIndex": 6 }, "releaseTag": "Public", "overloadIndex": 1, @@ -1801,6 +1998,14 @@ "endIndex": 2 }, "isOptional": false + }, + { + "parameterName": "missingHue", + "parameterTypeTokenRange": { + "startIndex": 3, + "endIndex": 4 + }, + "isOptional": true } ], "name": "OKLCH_to_OKLab" @@ -1808,7 +2013,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!OKLCH_to_XYZ_D50:function(1)", - "docComment": "/**\n * @param color - [l, c, h] - Lightness as number 0..1; - Chroma as number 0..0.5; - Hue as degrees 0..360; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [l, c, h] - Lightness as number 0..1; - Chroma as number 0..0.5; - Hue as degrees 0..360;\n *\n * @param missingHue - @return {Color} D50 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -1819,6 +2024,14 @@ "text": "Color", "canonicalReference": "@csstools/color-helpers!Color:type" }, + { + "kind": "Content", + "text": ", missingHue?: " + }, + { + "kind": "Content", + "text": "boolean" + }, { "kind": "Content", "text": "): " @@ -1835,8 +2048,8 @@ ], "fileUrlPath": "dist/_types/conversions/xyz/d50.d.ts", "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 + "startIndex": 5, + "endIndex": 6 }, "releaseTag": "Public", "overloadIndex": 1, @@ -1848,6 +2061,14 @@ "endIndex": 2 }, "isOptional": false + }, + { + "parameterName": "missingHue", + "parameterTypeTokenRange": { + "startIndex": 3, + "endIndex": 4 + }, + "isOptional": true } ], "name": "OKLCH_to_XYZ_D50" @@ -1855,7 +2076,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!OKLCH_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [l, c, h] - Lightness as number 0..1; - Chroma as number 0..0.5; - Hue as degrees 0..360; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [l, c, h] - Lightness as number 0..1; - Chroma as number 0..0.5; - Hue as degrees 0..360;\n *\n * @param missingHue - @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -1866,6 +2087,14 @@ "text": "Color", "canonicalReference": "@csstools/color-helpers!Color:type" }, + { + "kind": "Content", + "text": ", missingHue?: " + }, + { + "kind": "Content", + "text": "boolean" + }, { "kind": "Content", "text": "): " @@ -1882,8 +2111,8 @@ ], "fileUrlPath": "dist/_types/conversions/xyz/d65.d.ts", "returnTypeTokenRange": { - "startIndex": 3, - "endIndex": 4 + "startIndex": 5, + "endIndex": 6 }, "releaseTag": "Public", "overloadIndex": 1, @@ -1895,6 +2124,14 @@ "endIndex": 2 }, "isOptional": false + }, + { + "parameterName": "missingHue", + "parameterTypeTokenRange": { + "startIndex": 3, + "endIndex": 4 + }, + "isOptional": true } ], "name": "OKLCH_to_XYZ_D65" @@ -1949,7 +2186,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!P3_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -2043,7 +2280,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!ProPhoto_RGB_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -2137,7 +2374,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!rec_2020_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", @@ -2231,7 +2468,7 @@ { "kind": "Function", "canonicalReference": "@csstools/color-helpers!sRGB_to_XYZ_D65:function(1)", - "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D50 XYZ [x, y, z]\n */\n", + "docComment": "/**\n * @param color - [r, g, b] - Red as number 0..1; - Green as number 0..1; - Blue as number 0..1; @return {Color} D65 XYZ [x, y, z]\n */\n", "excerptTokens": [ { "kind": "Content", diff --git a/packages/color-helpers/docs/color-helpers.hsl_to_srgb.md b/packages/color-helpers/docs/color-helpers.hsl_to_srgb.md new file mode 100644 index 000000000..88bf56761 --- /dev/null +++ b/packages/color-helpers/docs/color-helpers.hsl_to_srgb.md @@ -0,0 +1,50 @@ + + +[Home](./index.md) > [@csstools/color-helpers](./color-helpers.md) > [HSL\_to\_sRGB](./color-helpers.hsl_to_srgb.md) + +## HSL\_to\_sRGB() function + +**Signature:** + +```typescript +export declare function HSL_to_sRGB(HSL: Color): Color; +``` + +## Parameters + + + +
+ +Parameter + + + + +Type + + + + +Description + + +
+ +HSL + + + + +[Color](./color-helpers.color.md) + + + + + +
+ +**Returns:** + +[Color](./color-helpers.color.md) + diff --git a/packages/color-helpers/docs/color-helpers.hwb_to_srgb.md b/packages/color-helpers/docs/color-helpers.hwb_to_srgb.md new file mode 100644 index 000000000..7e65d413b --- /dev/null +++ b/packages/color-helpers/docs/color-helpers.hwb_to_srgb.md @@ -0,0 +1,50 @@ + + +[Home](./index.md) > [@csstools/color-helpers](./color-helpers.md) > [HWB\_to\_sRGB](./color-helpers.hwb_to_srgb.md) + +## HWB\_to\_sRGB() function + +**Signature:** + +```typescript +export declare function HWB_to_sRGB(HWB: Color): Color; +``` + +## Parameters + + + +
+ +Parameter + + + + +Type + + + + +Description + + +
+ +HWB + + + + +[Color](./color-helpers.color.md) + + + + + +
+ +**Returns:** + +[Color](./color-helpers.color.md) + diff --git a/packages/color-helpers/docs/color-helpers.lch_to_lab.md b/packages/color-helpers/docs/color-helpers.lch_to_lab.md new file mode 100644 index 000000000..77862503f --- /dev/null +++ b/packages/color-helpers/docs/color-helpers.lch_to_lab.md @@ -0,0 +1,66 @@ + + +[Home](./index.md) > [@csstools/color-helpers](./color-helpers.md) > [LCH\_to\_Lab](./color-helpers.lch_to_lab.md) + +## LCH\_to\_Lab() function + +**Signature:** + +```typescript +export declare function LCH_to_Lab(LCH: Color, missingHue?: boolean): Color; +``` + +## Parameters + + + + +
+ +Parameter + + + + +Type + + + + +Description + + +
+ +LCH + + + + +[Color](./color-helpers.color.md) + + + + + +
+ +missingHue + + + + +boolean + + + + +_(Optional)_ + + +
+ +**Returns:** + +[Color](./color-helpers.color.md) + diff --git a/packages/color-helpers/docs/color-helpers.lch_to_xyz_d50.md b/packages/color-helpers/docs/color-helpers.lch_to_xyz_d50.md index 75be805cc..73bd50958 100644 --- a/packages/color-helpers/docs/color-helpers.lch_to_xyz_d50.md +++ b/packages/color-helpers/docs/color-helpers.lch_to_xyz_d50.md @@ -7,7 +7,7 @@ **Signature:** ```typescript -export declare function LCH_to_XYZ_D50(x: Color): Color; +export declare function LCH_to_XYZ_D50(x: Color, missingHue?: boolean): Color; ``` ## Parameters @@ -41,6 +41,22 @@ x + + + +missingHue + + + + +boolean + + + + +_(Optional)_ {Color} D50 XYZ \[x, y, z\] + + diff --git a/packages/color-helpers/docs/color-helpers.lch_to_xyz_d65.md b/packages/color-helpers/docs/color-helpers.lch_to_xyz_d65.md index c93da9746..228992a3c 100644 --- a/packages/color-helpers/docs/color-helpers.lch_to_xyz_d65.md +++ b/packages/color-helpers/docs/color-helpers.lch_to_xyz_d65.md @@ -7,7 +7,7 @@ **Signature:** ```typescript -export declare function LCH_to_XYZ_D65(x: Color): Color; +export declare function LCH_to_XYZ_D65(x: Color, missingHue?: boolean): Color; ``` ## Parameters @@ -41,6 +41,22 @@ x + + + +missingHue + + + + +boolean + + + + +_(Optional)_ {Color} D65 XYZ \[x, y, z\] + + diff --git a/packages/color-helpers/docs/color-helpers.md b/packages/color-helpers/docs/color-helpers.md index 401582763..2069d76bb 100644 --- a/packages/color-helpers/docs/color-helpers.md +++ b/packages/color-helpers/docs/color-helpers.md @@ -76,6 +76,15 @@ Convert an array of linear-light display-p3 RGB in the range 0.0-1.0 to gamma co Convert an array of linear-light sRGB values in the range 0.0-1.0 to gamma corrected form Extended transfer function: For negative values, linear portion extends on reflection of axis, then uses reflected pow below that + + + +[HSL\_to\_sRGB(HSL)](./color-helpers.hsl_to_srgb.md) + + + + + @@ -94,6 +103,15 @@ Convert an array of linear-light sRGB values in the range 0.0-1.0 to gamma corre + + + +[HWB\_to\_sRGB(HWB)](./color-helpers.hwb_to_srgb.md) + + + + + @@ -142,7 +160,16 @@ Convert an array of linear-light sRGB values in the range 0.0-1.0 to gamma corre -[LCH\_to\_XYZ\_D50(x)](./color-helpers.lch_to_xyz_d50.md) +[LCH\_to\_Lab(LCH, missingHue)](./color-helpers.lch_to_lab.md) + + + + + + + + +[LCH\_to\_XYZ\_D50(x, missingHue)](./color-helpers.lch_to_xyz_d50.md) @@ -151,7 +178,7 @@ Convert an array of linear-light sRGB values in the range 0.0-1.0 to gamma corre -[LCH\_to\_XYZ\_D65(x)](./color-helpers.lch_to_xyz_d65.md) +[LCH\_to\_XYZ\_D65(x, missingHue)](./color-helpers.lch_to_xyz_d65.md) @@ -296,7 +323,7 @@ Given OKLab, convert to XYZ relative to D65 -[OKLCH\_to\_OKLab(OKLCH)](./color-helpers.oklch_to_oklab.md) +[OKLCH\_to\_OKLab(OKLCH, missingHue)](./color-helpers.oklch_to_oklab.md) @@ -305,7 +332,7 @@ Given OKLab, convert to XYZ relative to D65 -[OKLCH\_to\_XYZ\_D50(x)](./color-helpers.oklch_to_xyz_d50.md) +[OKLCH\_to\_XYZ\_D50(x, missingHue)](./color-helpers.oklch_to_xyz_d50.md) @@ -314,7 +341,7 @@ Given OKLab, convert to XYZ relative to D65 -[OKLCH\_to\_XYZ\_D65(x)](./color-helpers.oklch_to_xyz_d65.md) +[OKLCH\_to\_XYZ\_D65(x, missingHue)](./color-helpers.oklch_to_xyz_d65.md) diff --git a/packages/color-helpers/docs/color-helpers.oklch_to_oklab.md b/packages/color-helpers/docs/color-helpers.oklch_to_oklab.md index 12e607b11..e13b53ee4 100644 --- a/packages/color-helpers/docs/color-helpers.oklch_to_oklab.md +++ b/packages/color-helpers/docs/color-helpers.oklch_to_oklab.md @@ -7,7 +7,7 @@ **Signature:** ```typescript -export declare function OKLCH_to_OKLab(OKLCH: Color): Color; +export declare function OKLCH_to_OKLab(OKLCH: Color, missingHue?: boolean): Color; ``` ## Parameters @@ -41,6 +41,22 @@ OKLCH + + + +missingHue + + + + +boolean + + + + +_(Optional)_ + + diff --git a/packages/color-helpers/docs/color-helpers.oklch_to_xyz_d50.md b/packages/color-helpers/docs/color-helpers.oklch_to_xyz_d50.md index 9f0161d3e..172a95048 100644 --- a/packages/color-helpers/docs/color-helpers.oklch_to_xyz_d50.md +++ b/packages/color-helpers/docs/color-helpers.oklch_to_xyz_d50.md @@ -7,7 +7,7 @@ **Signature:** ```typescript -export declare function OKLCH_to_XYZ_D50(x: Color): Color; +export declare function OKLCH_to_XYZ_D50(x: Color, missingHue?: boolean): Color; ``` ## Parameters @@ -41,6 +41,22 @@ x + + + +missingHue + + + + +boolean + + + + +_(Optional)_ {Color} D50 XYZ \[x, y, z\] + + diff --git a/packages/color-helpers/docs/color-helpers.oklch_to_xyz_d65.md b/packages/color-helpers/docs/color-helpers.oklch_to_xyz_d65.md index ce5489e0a..5bb79d939 100644 --- a/packages/color-helpers/docs/color-helpers.oklch_to_xyz_d65.md +++ b/packages/color-helpers/docs/color-helpers.oklch_to_xyz_d65.md @@ -7,7 +7,7 @@ **Signature:** ```typescript -export declare function OKLCH_to_XYZ_D65(x: Color): Color; +export declare function OKLCH_to_XYZ_D65(x: Color, missingHue?: boolean): Color; ``` ## Parameters @@ -41,6 +41,22 @@ x + + + +missingHue + + + + +boolean + + + + +_(Optional)_ {Color} D65 XYZ \[x, y, z\] + + diff --git a/packages/color-helpers/src/conversions/lch-to-lab.ts b/packages/color-helpers/src/conversions/lch-to-lab.ts index c2154682a..4f3bc5472 100644 --- a/packages/color-helpers/src/conversions/lch-to-lab.ts +++ b/packages/color-helpers/src/conversions/lch-to-lab.ts @@ -4,13 +4,13 @@ import type { Color } from '../types/color'; * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang). */ -export function LCH_to_Lab(LCH: Color): Color { +export function LCH_to_Lab(LCH: Color, missingHue: boolean = false): Color { const h = LCH[2] * Math.PI / 180; // Convert from polar form return [ LCH[0], // L is still L - LCH[1] * Math.cos(h), // a - LCH[1] * Math.sin(h), // b + missingHue ? 0 : LCH[1] * Math.cos(h), // a + missingHue ? 0 : LCH[1] * Math.sin(h), // b ]; } diff --git a/packages/color-helpers/src/conversions/oklch-to-oklab.ts b/packages/color-helpers/src/conversions/oklch-to-oklab.ts index d6e3c6ea9..810ab1fb9 100644 --- a/packages/color-helpers/src/conversions/oklch-to-oklab.ts +++ b/packages/color-helpers/src/conversions/oklch-to-oklab.ts @@ -6,12 +6,12 @@ import type { Color } from '../types/color'; * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js */ -export function OKLCH_to_OKLab(OKLCH: Color): Color { +export function OKLCH_to_OKLab(OKLCH: Color, missingHue: boolean = false): Color { const hue = OKLCH[2] * Math.PI / 180; return [ OKLCH[0], // L is still L - OKLCH[1] * Math.cos(hue), // a - OKLCH[1] * Math.sin(hue), // b + missingHue ? 0 : OKLCH[1] * Math.cos(hue), // a + missingHue ? 0 : OKLCH[1] * Math.sin(hue), // b ]; } diff --git a/packages/color-helpers/src/conversions/xyz/d50.ts b/packages/color-helpers/src/conversions/xyz/d50.ts index bceae18dc..c3e5f7943 100644 --- a/packages/color-helpers/src/conversions/xyz/d50.ts +++ b/packages/color-helpers/src/conversions/xyz/d50.ts @@ -180,11 +180,12 @@ export function XYZ_D50_to_Lab(x: Color): Color { * - Lightness as number 0..100; * - Chroma as number 0..230; * - Hue as degrees 0..360; + * @param {boolean} missingHue * @return {Color} D50 XYZ [x, y, z] */ -export function LCH_to_XYZ_D50(x: Color): Color { +export function LCH_to_XYZ_D50(x: Color, missingHue: boolean = false): Color { let y = x; - y = LCH_to_Lab(y); + y = LCH_to_Lab(y, missingHue); y = Lab_to_XYZ(y); return y; } @@ -242,11 +243,12 @@ export function XYZ_D50_to_OKLab(x: Color): Color { * - Lightness as number 0..1; * - Chroma as number 0..0.5; * - Hue as degrees 0..360; + * @param {boolean} missingHue * @return {Color} D50 XYZ [x, y, z] */ -export function OKLCH_to_XYZ_D50(x: Color): Color { +export function OKLCH_to_XYZ_D50(x: Color, missingHue: boolean = false): Color { let y = x; - y = OKLCH_to_OKLab(y); + y = OKLCH_to_OKLab(y, missingHue); y = OKLab_to_XYZ(y); y = D65_to_D50(y); return y; diff --git a/packages/color-helpers/src/conversions/xyz/d65.ts b/packages/color-helpers/src/conversions/xyz/d65.ts index d2db5b324..e56da4e35 100644 --- a/packages/color-helpers/src/conversions/xyz/d65.ts +++ b/packages/color-helpers/src/conversions/xyz/d65.ts @@ -39,7 +39,7 @@ import { sRGB_to_Hue } from '../srgb-to-hue'; * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function sRGB_to_XYZ_D65(x: Color): Color { let y = x; @@ -70,7 +70,7 @@ export function XYZ_D65_to_sRGB(x: Color): Color { * - Hue as degrees 0..360; * - Saturation as number 0..100; * - Lightness as number 0..100; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function HSL_to_XYZ_D65(x: Color): Color { let y = x; @@ -103,7 +103,7 @@ export function XYZ_D65_to_HSL(x: Color): Color { * - Hue as degrees 0..360; * - Whiteness as number 0..100; * - Blackness as number 0..100; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function HWB_to_XYZ_D65(x: Color): Color { let y = x; @@ -145,7 +145,7 @@ export function XYZ_D65_to_HWB(x: Color): Color { * - Lightness as number 0..100; * - a as number -160..160; * - b as number -160..160; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function Lab_to_XYZ_D65(x: Color): Color { let y = x; @@ -176,11 +176,12 @@ export function XYZ_D65_to_Lab(x: Color): Color { * - Lightness as number 0..100; * - Chroma as number 0..230; * - Hue as degrees 0..360; - * @return {Color} D50 XYZ [x, y, z] + * @param {boolean} missingHue + * @return {Color} D65 XYZ [x, y, z] */ -export function LCH_to_XYZ_D65(x: Color): Color { +export function LCH_to_XYZ_D65(x: Color, missingHue: boolean = false): Color { let y = x; - y = LCH_to_Lab(y); + y = LCH_to_Lab(y, missingHue); y = Lab_to_XYZ(y); y = D50_to_D65(y); return y; @@ -209,7 +210,7 @@ export function XYZ_D65_to_LCH(x: Color): Color { * - Lightness as number 0..1; * - a as number 0..0.5; * - b as number 0..0.5; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function OKLab_to_XYZ_D65(x: Color): Color { let y = x; @@ -238,11 +239,12 @@ export function XYZ_D65_to_OKLab(x: Color): Color { * - Lightness as number 0..1; * - Chroma as number 0..0.5; * - Hue as degrees 0..360; - * @return {Color} D50 XYZ [x, y, z] + * @param {boolean} missingHue + * @return {Color} D65 XYZ [x, y, z] */ -export function OKLCH_to_XYZ_D65(x: Color): Color { +export function OKLCH_to_XYZ_D65(x: Color, missingHue: boolean = false): Color { let y = x; - y = OKLCH_to_OKLab(y); + y = OKLCH_to_OKLab(y, missingHue); y = OKLab_to_XYZ(y); return y; } @@ -269,7 +271,7 @@ export function XYZ_D65_to_OKLCH(x: Color): Color { * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function lin_sRGB_to_XYZ_D65(x: Color): Color { let y = x; @@ -298,7 +300,7 @@ export function XYZ_D65_to_lin_sRGB(x: Color): Color { * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function a98_RGB_to_XYZ_D65(x: Color): Color { let y = x; @@ -329,7 +331,7 @@ export function XYZ_D65_to_a98_RGB(x: Color): Color { * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function P3_to_XYZ_D65(x: Color): Color { let y = x; @@ -360,7 +362,7 @@ export function XYZ_D65_to_P3(x: Color): Color { * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function lin_P3_to_XYZ_D65(x: Color): Color { let y = x; @@ -389,7 +391,7 @@ export function XYZ_D65_to_lin_P3(x: Color): Color { * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function rec_2020_to_XYZ_D65(x: Color): Color { let y = x; @@ -420,7 +422,7 @@ export function XYZ_D65_to_rec_2020(x: Color): Color { * - Red as number 0..1; * - Green as number 0..1; * - Blue as number 0..1; - * @return {Color} D50 XYZ [x, y, z] + * @return {Color} D65 XYZ [x, y, z] */ export function ProPhoto_RGB_to_XYZ_D65(x: Color): Color { let y = x; diff --git a/packages/color-helpers/src/index.ts b/packages/color-helpers/src/index.ts index ad458e5d6..c398fe4c3 100644 --- a/packages/color-helpers/src/index.ts +++ b/packages/color-helpers/src/index.ts @@ -83,3 +83,7 @@ export type { Color } from './types/color'; export { namedColors } from './named-colors'; export { contrast_ratio_wcag_2_1 } from './calculations/contrast-ratio-wcag-2-1'; + +export { HSL_to_sRGB } from './conversions/hsl-to-srgb'; +export { HWB_to_sRGB } from './conversions/hwb-to-srgb'; +export { LCH_to_Lab } from './conversions/lch-to-lab'; diff --git a/packages/css-color-parser/dist/index.mjs b/packages/css-color-parser/dist/index.mjs index 849f88885..5437693d4 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 n,isTokenIdent as a,isTokenPercentage as o,isTokenNumber as r,isTokenDelim as t,isTokenNumeric as l,isTokenComma as s,isTokenDimension as c,isTokenHash as i}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D65 as u,XYZ_D50_to_XYZ_D65 as h,OKLCH_to_XYZ_D65 as N,LCH_to_XYZ_D65 as m,OKLab_to_XYZ_D65 as p,Lab_to_XYZ_D65 as b,HWB_to_XYZ_D65 as v,HSL_to_XYZ_D65 as f,ProPhoto_RGB_to_XYZ_D65 as g,a98_RGB_to_XYZ_D65 as d,rec_2020_to_XYZ_D65 as y,lin_P3_to_XYZ_D65 as _,P3_to_XYZ_D65 as C,lin_sRGB_to_XYZ_D65 as T,sRGB_to_XYZ_D65 as w,XYZ_D50_to_XYZ_D50 as x,XYZ_D65_to_OKLab as D,XYZ_D65_to_OKLCH as L,XYZ_D50_to_LCH as H,XYZ_D50_to_Lab as P,XYZ_D65_to_HWB as Z,XYZ_D65_to_HSL as M,XYZ_D65_to_a98_RGB as $,XYZ_D50_to_ProPhoto as F,XYZ_D65_to_rec_2020 as S,XYZ_D65_to_lin_P3 as z,XYZ_D65_to_P3 as R,XYZ_D65_to_lin_sRGB as k,XYZ_D65_to_sRGB as B,XYZ_D65_to_XYZ_D50 as X,OKLCH_to_XYZ_D50 as G,LCH_to_XYZ_D50 as A,OKLab_to_XYZ_D50 as Y,Lab_to_XYZ_D50 as V,HWB_to_XYZ_D50 as K,HSL_to_XYZ_D50 as I,ProPhoto_RGB_to_XYZ_D50 as O,a98_RGB_to_XYZ_D50 as W,rec_2020_to_XYZ_D50 as E,lin_P3_to_XYZ_D50 as U,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 ne,gam_sRGB as ae,mapGamutRayTrace as oe,OKLCH_to_OKLab as re,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 ie,contrast_ratio_wcag_2_1 as ue,gam_P3 as he,XYZ_to_lin_P3 as Ne,lin_P3_to_XYZ as me}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 Te,calcFromComponentValues as we}from"@csstools/css-calc";var xe,De;function normalize(e,n,a,o){return Math.min(Math.max(e/n,a),o)}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 xe.HEX:case xe.RGB:case xe.sRGB:return{...e,colorNotation:xe.XYZ_D50,channels:J(convertNaNToZero(e.channels))};case xe.Linear_sRGB:return{...e,colorNotation:xe.XYZ_D50,channels:q(convertNaNToZero(e.channels))};case xe.Display_P3:return{...e,colorNotation:xe.XYZ_D50,channels:j(convertNaNToZero(e.channels))};case xe.Linear_Display_P3:return{...e,colorNotation:xe.XYZ_D50,channels:U(convertNaNToZero(e.channels))};case xe.Rec2020:return{...e,colorNotation:xe.XYZ_D50,channels:E(convertNaNToZero(e.channels))};case xe.A98_RGB:return{...e,colorNotation:xe.XYZ_D50,channels:W(convertNaNToZero(e.channels))};case xe.ProPhoto_RGB:return{...e,colorNotation:xe.XYZ_D50,channels:O(convertNaNToZero(e.channels))};case xe.HSL:return{...e,colorNotation:xe.XYZ_D50,channels:I(convertNaNToZero(e.channels))};case xe.HWB:return{...e,colorNotation:xe.XYZ_D50,channels:K(convertNaNToZero(e.channels))};case xe.Lab:return{...e,colorNotation:xe.XYZ_D50,channels:V(convertNaNToZero(e.channels))};case xe.OKLab:return{...e,colorNotation:xe.XYZ_D50,channels:Y(convertNaNToZero(e.channels))};case xe.LCH:return{...e,colorNotation:xe.XYZ_D50,channels:A(convertNaNToZero(e.channels))};case xe.OKLCH:return{...e,colorNotation:xe.XYZ_D50,channels:G(convertNaNToZero(e.channels))};case xe.XYZ_D50:return{...e,colorNotation:xe.XYZ_D50,channels:x(convertNaNToZero(e.channels))};case xe.XYZ_D65:return{...e,colorNotation:xe.XYZ_D50,channels:X(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}function colorData_to_XYZ_D65(e){switch(e.colorNotation){case xe.HEX:case xe.RGB:case xe.sRGB:return{...e,colorNotation:xe.XYZ_D65,channels:w(convertNaNToZero(e.channels))};case xe.Linear_sRGB:return{...e,colorNotation:xe.XYZ_D65,channels:T(convertNaNToZero(e.channels))};case xe.Display_P3:return{...e,colorNotation:xe.XYZ_D65,channels:C(convertNaNToZero(e.channels))};case xe.Linear_Display_P3:return{...e,colorNotation:xe.XYZ_D65,channels:_(convertNaNToZero(e.channels))};case xe.Rec2020:return{...e,colorNotation:xe.XYZ_D65,channels:y(convertNaNToZero(e.channels))};case xe.A98_RGB:return{...e,colorNotation:xe.XYZ_D65,channels:d(convertNaNToZero(e.channels))};case xe.ProPhoto_RGB:return{...e,colorNotation:xe.XYZ_D65,channels:g(convertNaNToZero(e.channels))};case xe.HSL:return{...e,colorNotation:xe.XYZ_D65,channels:f(convertNaNToZero(e.channels))};case xe.HWB:return{...e,colorNotation:xe.XYZ_D65,channels:v(convertNaNToZero(e.channels))};case xe.Lab:return{...e,colorNotation:xe.XYZ_D65,channels:b(convertNaNToZero(e.channels))};case xe.OKLab:return{...e,colorNotation:xe.XYZ_D65,channels:p(convertNaNToZero(e.channels))};case xe.LCH:return{...e,colorNotation:xe.XYZ_D65,channels:m(convertNaNToZero(e.channels))};case xe.OKLCH:return{...e,colorNotation:xe.XYZ_D65,channels:N(convertNaNToZero(e.channels))};case xe.XYZ_D50:return{...e,colorNotation:xe.XYZ_D65,channels:h(convertNaNToZero(e.channels))};case xe.XYZ_D65:return{...e,colorNotation:xe.XYZ_D65,channels:u(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"}(xe||(xe={})),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"}(De||(De={}));const Le=new Set([xe.A98_RGB,xe.Display_P3,xe.Linear_Display_P3,xe.HEX,xe.Linear_sRGB,xe.ProPhoto_RGB,xe.RGB,xe.sRGB,xe.Rec2020,xe.XYZ_D50,xe.XYZ_D65]);function colorDataToForInterpolation(e,n){if(e.colorNotation===n)return{...e};const a=[...e.channels];let o={...e};return o.channels=convertPowerlessComponentsToMissingComponents(o.channels,e.colorNotation),o=convertToDestination(o,n),o.channels=carryForwardMissingComponentsForColorAndNotation(o,e.colorNotation,n,a),o}function colorDataToForRelativeColorSyntax(e,n){if(e.colorNotation===n)return{...e};const a=[...e.channels];let o={...e};return o.channels=convertPowerlessComponentsToMissingComponents(o.channels,e.colorNotation),o=convertToDestination(o,n),o.channels=carryForwardMissingComponentsForColorAndNotation(o,e.colorNotation,n,a),o}function convertToDestination(e,n){if(e.colorNotation===n)return e.channels=convertNaNToZero(e.channels),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n),e;switch(n){case xe.HEX:case xe.RGB:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.RGB,e.channels=B(n.channels),e.channels=e.channels.map(e=>reducePrecisionOrNaN(e,8)),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.sRGB:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.sRGB,e.channels=B(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.Linear_sRGB:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.Linear_sRGB,e.channels=k(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.Display_P3:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.Display_P3,e.channels=R(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.Linear_Display_P3:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.Linear_Display_P3,e.channels=z(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.Rec2020:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.Rec2020,e.channels=S(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.ProPhoto_RGB:{const n=colorData_to_XYZ_D50(e);e.colorNotation=xe.ProPhoto_RGB,e.channels=F(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.A98_RGB:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.A98_RGB,e.channels=$(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.HSL:{const a=colorData_to_XYZ_D65(e);e.colorNotation=xe.HSL,e.channels=M(a.channels),e.channels=e.channels.map(e=>reducePrecisionOrNaN(e,8)),e.channels=normalizeAfterColorConversion(e.channels,0),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n);break}case xe.HWB:{const a=colorData_to_XYZ_D65(e);e.colorNotation=xe.HWB,e.channels=Z(a.channels),e.channels=e.channels.map(e=>reducePrecisionOrNaN(e,8)),e.channels=normalizeAfterColorConversion(e.channels,0),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n);break}case xe.Lab:{const n=colorData_to_XYZ_D50(e);e.colorNotation=xe.Lab,e.channels=P(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.LCH:{const a=colorData_to_XYZ_D50(e);e.colorNotation=xe.LCH,e.channels=H(a.channels),e.channels=normalizeAfterColorConversion(e.channels,2),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n);break}case xe.OKLCH:{const a=colorData_to_XYZ_D65(e);e.colorNotation=xe.OKLCH,e.channels=L(a.channels),e.channels=normalizeAfterColorConversion(e.channels,2),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n);break}case xe.OKLab:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.OKLab,e.channels=D(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.XYZ_D50:{const n=colorData_to_XYZ_D50(e);e.colorNotation=xe.XYZ_D50,e.channels=x(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.XYZ_D65:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.XYZ_D65,e.channels=u(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}default:throw new Error("Unsupported color notation")}return e}function carryForwardMissingComponentsForColorAndNotation(e,n,a,o){if(n===a)return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[0,1,2],[]);if(Le.has(a)&&Le.has(n))return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[0,1,2],[]);switch(a){case xe.HSL:switch(n){case xe.HWB:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[0],[1,2]);case xe.Lab:case xe.OKLab:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[2],[0,1]);case xe.LCH:case xe.OKLCH:return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[2,1,0],[]);default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}case xe.HWB:switch(n){case xe.HSL:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[0],[1,2]);case xe.LCH:case xe.OKLCH:return carryForwardMissingComponents(o,[2],[0,1],e.channels,[0],[1,2]);default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}case xe.Lab:case xe.OKLab:switch(n){case xe.HSL:return carryForwardMissingComponents(o,[2],[0,1],e.channels,[0],[1,2]);case xe.Lab:case xe.OKLab:return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[0,1,2],[]);case xe.LCH:case xe.OKLCH:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[0],[1,2]);default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}case xe.LCH:case xe.OKLCH:switch(n){case xe.HSL:return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[2,1,0],[]);case xe.HWB:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[2],[0,1]);case xe.Lab:case xe.OKLab:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[0],[1,2]);case xe.LCH:case xe.OKLCH:return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[0,1,2],[]);default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}}function convertPowerlessComponentsToMissingComponents(e,n){const a=[...e];switch(n){case xe.HSL:(Number.isNaN(a[1])?0:a[1])<=.001&&(a[0]=Number.NaN,!Number.isNaN(a[1])&&a[1]>0&&(a[1]=0));break;case xe.HWB:Math.max(0,Number.isNaN(a[1])?0:a[1])+Math.max(0,Number.isNaN(a[2])?0:a[2])>=99.999&&(a[0]=Number.NaN,Math.max(0,Number.isNaN(a[1])?0:a[1])+Math.max(0,Number.isNaN(a[2])?0:a[2])<100&&(Number.isNaN(a[1])?a[2]=100:Number.isNaN(a[2])?a[1]=100:a[2]=100-a[1]));break;case xe.LCH:(Number.isNaN(a[1])?0:a[1])<=.0015&&(a[2]=Number.NaN,!Number.isNaN(a[1])&&a[1]>0&&(a[1]=0));break;case xe.OKLCH:(Number.isNaN(a[1])?0:a[1])<=4e-6&&(a[2]=Number.NaN,!Number.isNaN(a[1])&&a[1]>0&&(a[1]=0))}return a}function convertPowerlessComponentsToZeroValuesForDisplay(e,n){const a=[...e];switch(n){case xe.HSL:(Number.isNaN(a[1])?0:a[1])<=.001&&(a[0]=Number.NaN),(reducePrecision$1(a[2])<=0||reducePrecision$1(a[2])>=100)&&(a[0]=Number.NaN,a[1]=Number.NaN);break;case xe.HWB:Math.max(0,Number.isNaN(a[1])?0:a[1])+Math.max(0,Number.isNaN(a[2])?0:a[2])>=99.999&&(a[0]=Number.NaN);break;case xe.Lab:(reducePrecision$1(a[0])<=0||reducePrecision$1(a[0])>=100)&&(a[1]=Number.NaN,a[2]=Number.NaN);break;case xe.LCH:(Number.isNaN(a[1])?0:a[1])<=.0015&&(a[2]=Number.NaN),(reducePrecision$1(a[0])<=0||reducePrecision$1(a[0])>=100)&&(a[1]=Number.NaN,a[2]=Number.NaN);break;case xe.OKLab:(reducePrecision$1(a[0])<=0||reducePrecision$1(a[0])>=1)&&(a[1]=Number.NaN,a[2]=Number.NaN);break;case xe.OKLCH:(Number.isNaN(a[1])?0:a[1])<=4e-6&&(a[2]=Number.NaN),(reducePrecision$1(a[0])<=0||reducePrecision$1(a[0])>=1)&&(a[1]=Number.NaN,a[2]=Number.NaN)}return a}function carryForwardMissingComponents(e,n,a,o,r,t){if(n.length<3&&e.every(Number.isNaN))return[Number.NaN,Number.NaN,Number.NaN];const l=[...o];for(let a=0;aNumber.isNaN(e[n])))for(let e=0;ee<-1e-5||e>1.00001)}function colorDataFitsDisplayP3_Gamut(e){const n={...e,channels:[...e.channels]};n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);return!colorDataToForRelativeColorSyntax(n,xe.Display_P3).channels.find(e=>e<-1e-5||e>1.00001)}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(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,100,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=3===l?normalize(t[4].value,1,0,1):normalize(t[4].value,1,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.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,n){const o=[],s=[],c=[],i=[];let u,h,N=!1,m=!1;const p={colorNotation:xe.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let b=o;for(let r=0;r=0){t=i.value[4].value;continue}}return!1}if(!r)return!1;a.push({color:r,percentage:t}),r=!1,t=!1}}return!!r&&(a.push({color:r,percentage:t}),a)}function colorMixRectangular(e,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:a,leftover:o}=normalizeMixPercentages(n,!0),r=1-o/100;let t;switch(e){case"srgb":t=xe.RGB;break;case"srgb-linear":t=xe.Linear_sRGB;break;case"display-p3":t=xe.Display_P3;break;case"display-p3-linear":t=xe.Linear_Display_P3;break;case"a98-rgb":t=xe.A98_RGB;break;case"prophoto-rgb":t=xe.ProPhoto_RGB;break;case"rec2020":t=xe.Rec2020;break;case"lab":t=xe.Lab;break;case"oklab":t=xe.OKLab;break;case"xyz-d50":t=xe.XYZ_D50;break;case"xyz":case"xyz-d65":t=xe.XYZ_D65;break;default:return!1}if(1===a.length){const e=colorDataToForInterpolation(a[0].color,t);return e.colorNotation=t,e.syntaxFlags.add(De.ColorMixVariadic),e.syntaxFlags.add(De.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*r,e)}for(a.reverse();a.length>=2;){const e=a.pop(),n=a.pop();if(!e||!n)return!1;const o=e.percentage+n.percentage,r=o>0?n.percentage/o:.5,l=colorMixRectangularPair(t,e.color,n.color,r);if(!l)return!1;a.push({color:l,percentage:o})}const l=a[0]?.color;return!!l&&("number"==typeof l.alpha&&(l.alpha=l.alpha*r,n.some(e=>e.color.syntaxFlags.has(De.Experimental))&&l.syntaxFlags.add(De.Experimental),2!==n.length&&l.syntaxFlags.add(De.ColorMixVariadic),l))}function colorMixRectangularPair(e,n,a,o){let r=n.alpha;if("number"!=typeof r)return!1;let t=a.alpha;if("number"!=typeof t)return!1;r=Number.isNaN(r)?t:r,t=Number.isNaN(t)?r:t;const l=colorDataToForInterpolation(n,e).channels,s=colorDataToForInterpolation(a,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],r),l[1]=premultiply(l[1],r),l[2]=premultiply(l[2],r),s[0]=premultiply(s[0],t),s[1]=premultiply(s[1],t),s[2]=premultiply(s[2],t);const c=interpolate(r,t,o);return{colorNotation:e,channels:[un_premultiply(interpolate(l[0],s[0],o),c),un_premultiply(interpolate(l[1],s[1],o),c),un_premultiply(interpolate(l[2],s[2],o),c)],alpha:c,syntaxFlags:new Set([De.ColorMix])}}function colorMixPolar(e,n,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:o,leftover:r}=normalizeMixPercentages(a,!0),t=1-r/100;let l;switch(e){case"hsl":l=xe.HSL;break;case"hwb":l=xe.HWB;break;case"lch":l=xe.LCH;break;case"oklch":l=xe.OKLCH;break;default:return!1}if(1===o.length){const e=colorDataToForInterpolation(o[0].color,l);return e.colorNotation=l,e.syntaxFlags.add(De.ColorMixVariadic),e.syntaxFlags.add(De.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*t,e)}for(o.reverse();o.length>=2;){const e=o.pop(),a=o.pop();if(!e||!a)return!1;const r=e.percentage+a.percentage,t=r>0?a.percentage/r:.5,s=colorMixPolarPair(l,n,e.color,a.color,t);if(!s)return!1;o.push({color:s,percentage:r})}const s=o[0]?.color;return!!s&&("number"==typeof s.alpha&&(s.alpha=s.alpha*t,a.some(e=>e.color.syntaxFlags.has(De.Experimental))&&s.syntaxFlags.add(De.Experimental),2!==a.length&&s.syntaxFlags.add(De.ColorMixVariadic),s))}function colorMixPolarPair(e,n,a,o,r){let t=0,l=0,s=0,c=0,i=0,u=0,h=a.alpha;if("number"!=typeof h)return!1;let N=o.alpha;if("number"!=typeof N)return!1;h=Number.isNaN(h)?N:h,N=Number.isNaN(N)?h:N;const m=colorDataToForInterpolation(a,e).channels,p=colorDataToForInterpolation(o,e).channels;switch(e){case xe.HSL:case xe.HWB:t=m[0],l=p[0],s=m[1],c=p[1],i=m[2],u=p[2];break;case xe.LCH:case xe.OKLCH:s=m[0],c=p[0],i=m[1],u=p[1],t=m[2],l=p[2]}if(s=fillInMissingComponent(s,c),c=fillInMissingComponent(c,s),i=fillInMissingComponent(i,u),u=fillInMissingComponent(u,i),t=fillInMissingComponent(t,l),l=fillInMissingComponent(l,t),Number.isNaN(t)&&Number.isNaN(l));else{const e=l-t;switch(n){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),i=premultiply(i,h),c=premultiply(c,N),u=premultiply(u,N);let b=[0,0,0];const v=interpolate(h,N,r);switch(e){case xe.HSL:case xe.HWB:b=[interpolate(t,l,r),un_premultiply(interpolate(s,c,r),v),un_premultiply(interpolate(i,u,r),v)];break;case xe.LCH:case xe.OKLCH:b=[un_premultiply(interpolate(s,c,r),v),un_premultiply(interpolate(i,u,r),v),interpolate(t,l,r)]}return{colorNotation:e,channels:b,alpha:v,syntaxFlags:new Set([De.ColorMix])}}function fillInMissingComponent(e,n){return Number.isNaN(e)?n:e}function interpolate(e,n,a){return e*(1-a)+n*a}function premultiply(e,n){return Number.isNaN(n)?e:Number.isNaN(e)?Number.NaN:e*n}function un_premultiply(e,n){return 0===n||Number.isNaN(n)?e:Number.isNaN(e)?Number.NaN:e/n}function normalizeMixPercentages(e,n=!1){let a=0,o=0;for(const n of e)n.percentage&&(a+=n.percentage),!1===n.percentage&&o++;a=Math.min(100,a);for(const n of e)!1===n.percentage&&(n.percentage=(100-a)/o);const r=e.slice();let t=0;for(const e of r)t+=e.percentage;if(t>100||t>0&&n)for(const e of r)e.percentage=e.percentage*(100/t);let l=0;return t<100&&(l=100-t),{items:r,leftover:l}}function hex(e){const n=toLowerCaseAZ(e[4].value);if(n.match(/[^a-f0-9]/))return!1;const a={colorNotation:xe.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([De.Hex])},o=n.length;if(3===o){const e=n[0],o=n[1],r=n[2];return a.channels=[parseInt(e+e,16)/255,parseInt(o+o,16)/255,parseInt(r+r,16)/255],a}if(6===o){const e=n[0]+n[1],o=n[2]+n[3],r=n[4]+n[5];return a.channels=[parseInt(e,16)/255,parseInt(o,16)/255,parseInt(r,16)/255],a}if(4===o){const e=n[0],o=n[1],r=n[2],t=n[3];return a.channels=[parseInt(e+e,16)/255,parseInt(o+o,16)/255,parseInt(r+r,16)/255],a.alpha=parseInt(t+t,16)/255,a.syntaxFlags.add(De.HasAlpha),a}if(8===o){const e=n[0]+n[1],o=n[2]+n[3],r=n[4]+n[5],t=n[6]+n[7];return a.channels=[parseInt(e,16)/255,parseInt(o,16)/255,parseInt(r,16)/255],a.alpha=parseInt(t,16)/255,a.syntaxFlags.add(De.HasAlpha),a}return!1}function normalizeHue$1(a){if(r(a))return Number.isNaN(a[4].value)||Number.isFinite(a[4].value)||(a[4].value=0),a[4].value=a[4].value%360,a[4].value<0&&(a[4].value+=360),a[1]=a[4].value.toString(),a;if(c(a)){let o=a[4].value;switch(toLowerCaseAZ(a[4].unit)){case"deg":break;case"rad":o=180*a[4].value/Math.PI;break;case"grad":o=.9*a[4].value;break;case"turn":o=360*a[4].value;break;default:return!1}return Number.isNaN(a[4].value)||Number.isFinite(a[4].value)||(a[4].value=0),o%=360,o<0&&(o+=360),[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(a,t,l){if(0===t){const e=normalizeHue$1(a);return!1!==e&&(c(a)&&l.syntaxFlags.add(De.HasDimensionValues),e)}if(o(a)){let o;return 3===t?l.syntaxFlags.add(De.HasPercentageAlpha):l.syntaxFlags.add(De.HasPercentageValues),o=3===t?normalize(a[4].value,100,0,1):normalize(a[4].value,1,0,100),[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}if(r(a)){if(3!==t)return!1;let o;return o=normalize(a[4].value,1,0,3===t?1:100),[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}return!1}function normalize_modern_HSL_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(0===l){const e=normalizeHue$1(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(De.HasDimensionValues),e)}if(o(t)){let a;return 3===l?s.syntaxFlags.add(De.HasPercentageAlpha):s.syntaxFlags.add(De.HasPercentageValues),a=3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,1,1===l?0:-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=3===l?normalize(t[4].value,1,0,1):normalize(t[4].value,1,1===l?0:-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function threeChannelLegacySyntax(e,n,a,o){const t=[],c=[],i=[],u=[],h={colorNotation:a,channels:[0,0,0],alpha:1,syntaxFlags:new Set(o)};let N=t;for(let n=0;nve(e)&&s(e.value))){const n=hslCommaSeparated(e);if(!1!==n)return n}{const a=hslSpaceSeparated(e,n);if(!1!==a)return a}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,xe.HSL,[De.LegacyHSL])}function hslSpaceSeparated(e,n){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,xe.HSL,[],n)}function normalize_HWB_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(0===l){const e=normalizeHue$1(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(De.HasDimensionValues),e)}if(o(t)){let a;return 3===l?s.syntaxFlags.add(De.HasPercentageAlpha):s.syntaxFlags.add(De.HasPercentageValues),a=3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,1,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=3===l?normalize(t[4].value,1,0,1):normalize(t[4].value,1,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function normalize_Lab_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=1===l||2===l?normalize(t[4].value,.8,-2147483647,2147483647):3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,1,0,100),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=1===l||2===l?normalize(t[4].value,1,-2147483647,2147483647):normalize(t[4].value,1,0,3===l?1:100),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function lab(e,n){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,xe.Lab,[],n)}function normalize_LCH_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(2===l){const e=normalizeHue$1(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(De.HasDimensionValues),e)}if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=1===l?normalize(t[4].value,100/150,0,2147483647):3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,1,0,100),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=normalize(t[4].value,1,0,1===l?2147483647:3===l?1:100),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function lch(e,n){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,xe.LCH,[],n)}const Fe=new Map;for(const[e,n]of Object.entries(Q))Fe.set(e,n);function namedColor(e){const n=Fe.get(toLowerCaseAZ(e));return!!n&&{colorNotation:xe.RGB,channels:[n[0]/255,n[1]/255,n[2]/255],alpha:1,syntaxFlags:new Set([De.ColorKeyword,De.NamedColor])}}function normalize_OKLab_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=1===l||2===l?normalize(t[4].value,250,-2147483647,2147483647):normalize(t[4].value,100,0,1),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=1===l||2===l?normalize(t[4].value,1,-2147483647,2147483647):normalize(t[4].value,1,0,1),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function oklab(e,n){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,xe.OKLab,[],n)}function normalize_OKLCH_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(2===l){const e=normalizeHue$1(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(De.HasDimensionValues),e)}if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=1===l?normalize(t[4].value,250,0,2147483647):normalize(t[4].value,100,0,1),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=normalize(t[4].value,1,0,1===l?2147483647:1),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function oklch(e,n){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,xe.OKLCH,[],n)}function normalize_legacy_sRGB_ChannelValues(a,t,l){if(o(a)){3===t?l.syntaxFlags.add(De.HasPercentageAlpha):l.syntaxFlags.add(De.HasPercentageValues);const o=normalize(a[4].value,100,0,1);return[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}if(r(a)){let o;return 3!==t&&l.syntaxFlags.add(De.HasNumberValues),o=normalize(a[4].value,3===t?1:255,0,1),[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(t,l,s){if(a(t)&&"none"===t[4].value.toLowerCase())return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,100,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=3===l?normalize(t[4].value,1,0,1):normalize(t[4].value,255,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function rgb(e,n){if(e.value.some(e=>ve(e)&&s(e.value))){const n=rgbCommaSeparated(e);if(!1!==n)return(!n.syntaxFlags.has(De.HasNumberValues)||!n.syntaxFlags.has(De.HasPercentageValues))&&n}else{const a=rgbSpaceSeparated(e,n);if(!1!==a)return a}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,xe.RGB,[De.LegacyRGB])}function rgbSpaceSeparated(e,n){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,xe.RGB,[],n)}function XYZ_D65_to_sRGB_Gamut(e){const n=B(e);if(ee(n))return ne(n);let a=e;return a=L(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),ae(oe(a,oklch_to_lin_srgb,lin_srgb_to_oklch))}function oklch_to_lin_srgb(e){return e=re(e),e=te(e),le(e)}function lin_srgb_to_oklch(e){return e=se(e),e=ce(e),ie(e)}function contrastColor(e,n){let a=!1;for(let o=0;ot?[1,1,1]:[0,0,0],o}function alpha(e,n){let o,s,c=!1,i=!1,u=!1;const h={colorNotation:xe.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let N=0;N{if(ve(e)&&a(e.value)&&"alpha"===toLowerCaseAZ(e.value[4].value)&&o&&o.has("alpha"))return new ge(o.get("alpha"))});h.alpha=e[0][0],i=!0;continue}return!1}if(u)return!1;for(;pe(e.value[N+1])||be(e.value[N+1]);)N++;if(N++,m=e.value[N],u=n(m),!1===u)return!1;o=normalizeRelativeColorDataChannels(u),s=noneToZeroInRelativeColorDataChannels(o),h.syntaxFlags=new Set(u.syntaxFlags),h.syntaxFlags.add(De.RelativeAlphaSyntax),h.channels=[...u.channels],h.colorNotation=u.colorNotation,h.alpha=u.alpha}}return!!o&&(!!i&&h)}function XYZ_D65_to_P3_Gamut(e){const n=R(e);if(ee(n))return ne(n);let a=e;return a=L(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),he(oe(a,oklch_to_lin_p3,lin_p3_to_oklch))}function oklch_to_lin_p3(e){return e=re(e),e=te(e),Ne(e)}function lin_p3_to_oklch(e){return e=me(e),e=ce(e),ie(e)}function toPrecision(e,n=7){e=+e,n=+n;const a=(Math.floor(Math.abs(e))+"").length;if(n>a)return+e.toFixed(n-a);{const o=10**(a-n);return Math.round(e/o)*o}}function serializeWithAlpha(a,o,r,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof a.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(a.alpha)?0:a.alpha)));return 1===toPrecision(s,4)?new _e(o,l,t):new _e(o,l,[...t,new Ce([r]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([r]),new ge([e.Number,toPrecision(s,4).toString(),-1,-1,{value:a.alpha,type:n.Integer}])])}return new _e(o,l,[...t,new Ce([r]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([r]),a.alpha])}function serializeP3(a,o=!0){a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);let r=a.channels.map(e=>Number.isNaN(e)?0:e);o?r=XYZ_D65_to_P3_Gamut(colorData_to_XYZ_D65(a).channels):a.colorNotation!==xe.Display_P3&&(r=R(colorData_to_XYZ_D65(a).channels));const t=o?Math.min(1,Math.max(0,toPrecision(r[0],6))):toPrecision(r[0],6),l=o?Math.min(1,Math.max(0,toPrecision(r[1],6))):toPrecision(r[1],6),s=o?Math.min(1,Math.max(0,toPrecision(r[2],6))):toPrecision(r[2],6),c=[e.Function,"color(",-1,-1,{value:"color"}],i=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(a,c,i,[new ge([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new Ce([i]),new ge([e.Number,t.toString(),-1,-1,{value:r[0],type:n.Number}]),new Ce([i]),new ge([e.Number,l.toString(),-1,-1,{value:r[1],type:n.Number}]),new Ce([i]),new ge([e.Number,s.toString(),-1,-1,{value:r[2],type:n.Number}])])}function serializeRGB(a,o=!0){let r;a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation),r=o?XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(a).channels):B(colorData_to_XYZ_D65(a).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[2])))),c=[e.CloseParen,")",-1,-1,void 0],i=[e.Whitespace," ",-1,-1,void 0],u=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,r[0])),type:n.Integer}]),new ge(u),new Ce([i]),new ge([e.Number,l.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,r[1])),type:n.Integer}]),new ge(u),new Ce([i]),new ge([e.Number,s.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,r[2])),type:n.Integer}])];if("number"==typeof a.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(a.alpha)?0:a.alpha)));return 1===toPrecision(o,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(u),new Ce([i]),new ge([e.Number,toPrecision(o,4).toString(),-1,-1,{value:a.alpha,type:n.Number}])])}return new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(u),new Ce([i]),a.alpha])}function serializeHSL(a,o=!0){let r;a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation),r=M(o?w(XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(a).channels)):colorData_to_XYZ_D65(a).channels),r=r.map(e=>Number.isNaN(e)?0:e);const t=Math.min(360,Math.max(0,Math.round(toPrecision(r[0]))))%360,l=Math.min(100,Math.max(0,Math.round(toPrecision(r[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(r[2])))),c=[e.CloseParen,")",-1,-1,void 0],i=[e.Whitespace," ",-1,-1,void 0],u=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:r[0],type:n.Integer}]),new ge(u),new Ce([i]),new ge([e.Percentage,l.toString()+"%",-1,-1,{value:r[1]}]),new ge(u),new Ce([i]),new ge([e.Percentage,s.toString()+"%",-1,-1,{value:r[2]}])];if("number"==typeof a.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(a.alpha)?0:a.alpha)));return 1===toPrecision(o,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(u),new Ce([i]),new ge([e.Number,toPrecision(o,4).toString(),-1,-1,{value:a.alpha,type:n.Number}])])}return new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(u),new Ce([i]),a.alpha])}function serializeOKLCH(a){a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);let o=a.channels.map(e=>Number.isNaN(e)?0:e);a.colorNotation!==xe.OKLCH&&(o=L(colorData_to_XYZ_D65(a).channels));const r=toPrecision(o[0],6),t=toPrecision(o[1],6),l=toPrecision(o[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],c=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(a,s,c,[new ge([e.Number,r.toString(),-1,-1,{value:o[0],type:n.Number}]),new Ce([c]),new ge([e.Number,t.toString(),-1,-1,{value:o[1],type:n.Number}]),new Ce([c]),new ge([e.Number,l.toString(),-1,-1,{value:o[2],type:n.Number}])])}function computedValue(e,n=!0){const a=e.channels;switch(e.colorNotation){case xe.Lab:return a[0]=nanToNone(a[0]),a[1]=nanToNone(a[1]),a[2]=nanToNone(a[2]),1!==e.alpha?`lab(${a[0]} ${a[1]} ${a[2]} / ${nanToNone(e.alpha)})`:`lab(${a[0]} ${a[1]} ${a[2]})`;case xe.LCH:return a[0]=nanToNone(a[0]),a[1]=nanToNone(a[1]),a[2]=nanToNone(normalizeHue(a[2])),1!==e.alpha?`lch(${a[0]} ${a[1]} ${a[2]} / ${nanToNone(e.alpha)})`:`lch(${a[0]} ${a[1]} ${a[2]})`;case xe.OKLab:return a[0]=nanToNone(a[0]),a[1]=nanToNone(a[1]),a[2]=nanToNone(a[2]),1!==e.alpha?`oklab(${a[0]} ${a[1]} ${a[2]} / ${nanToNone(e.alpha)})`:`oklab(${a[0]} ${a[1]} ${a[2]})`;case xe.OKLCH:return a[0]=nanToNone(a[0]),a[1]=nanToNone(a[1]),a[2]=nanToNone(normalizeHue(a[2])),1!==e.alpha?`oklch(${a[0]} ${a[1]} ${a[2]} / ${nanToNone(e.alpha)})`:`oklch(${a[0]} ${a[1]} ${a[2]})`;case xe.RGB:case xe.HEX:return a.some(Number.isNaN)||Number.isNaN(e.alpha)?1!==e.alpha?`color(srgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(srgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`:e.syntaxFlags.has(De.RelativeColorSyntax)||e.syntaxFlags.has(De.ColorMix)||e.syntaxFlags.has(De.RelativeAlphaSyntax)?computedValue(colorDataToForRelativeColorSyntax(e,xe.sRGB)):1!==e.alpha?`rgba(${nanToNone(Math.round(255*reducePrecision(e.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(e.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(e.channels[2],5)))}, ${nanToNone(e.alpha)})`:`rgb(${nanToNone(Math.round(255*reducePrecision(e.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(e.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(e.channels[2],5)))})`;case xe.HSL:{if(a.some(Number.isNaN)||Number.isNaN(e.alpha)||!1===n)return 1!==e.alpha?`hsl(${nanToNone(normalizeHue(a[0]))} ${nanToNone(a[1],"%")} ${nanToNone(a[2],"%")} / ${nanToNone(e.alpha)})`:`hsl(${nanToNone(normalizeHue(a[0]))} ${nanToNone(a[1],"%")} ${nanToNone(a[2],"%")})`;if(e.syntaxFlags.has(De.RelativeColorSyntax)||e.syntaxFlags.has(De.ColorMix)||e.syntaxFlags.has(De.RelativeAlphaSyntax))return computedValue(colorDataToForRelativeColorSyntax(e,xe.sRGB));const o=colorDataToForRelativeColorSyntax(e,xe.RGB);return 1!==o.alpha?`rgba(${nanToNone(Math.round(255*reducePrecision(o.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[2],5)))}, ${nanToNone(o.alpha)})`:`rgb(${nanToNone(Math.round(255*reducePrecision(o.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[2],5)))})`}case xe.HWB:{if(a.some(Number.isNaN)||Number.isNaN(e.alpha)||!1===n)return 1!==e.alpha?`hwb(${nanToNone(normalizeHue(a[0]))} ${nanToNone(a[1],"%")} ${nanToNone(a[2],"%")} / ${nanToNone(e.alpha)})`:`hwb(${nanToNone(normalizeHue(a[0]))} ${nanToNone(a[1],"%")} ${nanToNone(a[2],"%")})`;if(e.syntaxFlags.has(De.RelativeColorSyntax)||e.syntaxFlags.has(De.ColorMix)||e.syntaxFlags.has(De.RelativeAlphaSyntax))return computedValue(colorDataToForRelativeColorSyntax(e,xe.sRGB));const o=colorDataToForRelativeColorSyntax(e,xe.RGB);return 1!==o.alpha?`rgba(${nanToNone(Math.round(255*reducePrecision(o.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[2],5)))}, ${nanToNone(o.alpha)})`:`rgb(${nanToNone(Math.round(255*reducePrecision(o.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[2],5)))})`}case xe.sRGB:return 1!==e.alpha?`color(srgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(srgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.Linear_sRGB:return 1!==e.alpha?`color(srgb-linear ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(srgb-linear ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.Display_P3:return 1!==e.alpha?`color(display-p3 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(display-p3 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.Linear_Display_P3:return 1!==e.alpha?`color(display-p3-linear ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(display-p3-linear ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.A98_RGB:return 1!==e.alpha?`color(a98-rgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(a98-rgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.ProPhoto_RGB:return 1!==e.alpha?`color(prophoto-rgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(prophoto-rgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.Rec2020:return 1!==e.alpha?`color(rec2020 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(rec2020 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.XYZ_D65:return 1!==e.alpha?`color(xyz-d65 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(xyz-d65 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.XYZ_D50:return 1!==e.alpha?`color(xyz-d50 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(xyz-d50 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`}throw new Error("unsupported color")}function nanToNone(e,n=""){return"string"==typeof e?e:"number"!=typeof e?e.toString():Number.isNaN(e)?"none":n?e.toString()+n:e.toString()}function normalizeHue(e){return"number"!=typeof e||Number.isNaN(e)?e:e%360}function reducePrecision(e,n=8){return Number.isNaN(e)||!Number.isFinite(e)?e:(n=Math.pow(10,n),Math.round(e*n)/n)}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 n=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,xe.HWB,[],n);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 n;if(ve(e)){if(i(e.value))return hex(e.value);if(a(e.value)){const n=namedColor(e.value[4].value);return!1!==n?n:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:xe.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([De.ColorKeyword])}}}return!1}export{xe as ColorNotation,De as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,computedValue,serializeHSL,serializeOKLCH,serializeP3,serializeRGB}; +import{TokenType as e,NumberType as n,isTokenIdent as a,isTokenPercentage as o,isTokenNumber as r,isTokenDelim as t,isTokenNumeric as l,isTokenComma as s,isTokenDimension as c,isTokenHash as i}from"@csstools/css-tokenizer";import{XYZ_D65_to_XYZ_D65 as u,XYZ_D50_to_XYZ_D65 as h,OKLCH_to_XYZ_D65 as N,LCH_to_XYZ_D65 as m,OKLab_to_XYZ_D65 as p,Lab_to_XYZ_D65 as b,HWB_to_XYZ_D65 as v,HSL_to_XYZ_D65 as f,ProPhoto_RGB_to_XYZ_D65 as g,a98_RGB_to_XYZ_D65 as d,rec_2020_to_XYZ_D65 as y,lin_P3_to_XYZ_D65 as _,P3_to_XYZ_D65 as C,lin_sRGB_to_XYZ_D65 as T,sRGB_to_XYZ_D65 as w,XYZ_D50_to_XYZ_D50 as x,XYZ_D65_to_OKLab as D,XYZ_D65_to_OKLCH as L,XYZ_D50_to_LCH as H,XYZ_D50_to_Lab as P,XYZ_D65_to_HWB as Z,XYZ_D65_to_HSL as M,XYZ_D65_to_a98_RGB as $,XYZ_D50_to_ProPhoto as F,XYZ_D65_to_rec_2020 as S,XYZ_D65_to_lin_P3 as z,XYZ_D65_to_P3 as R,XYZ_D65_to_lin_sRGB as k,XYZ_D65_to_sRGB as B,XYZ_D65_to_XYZ_D50 as X,OKLCH_to_XYZ_D50 as G,LCH_to_XYZ_D50 as A,OKLab_to_XYZ_D50 as Y,Lab_to_XYZ_D50 as V,HWB_to_XYZ_D50 as K,HSL_to_XYZ_D50 as I,ProPhoto_RGB_to_XYZ_D50 as O,a98_RGB_to_XYZ_D50 as W,rec_2020_to_XYZ_D50 as E,lin_P3_to_XYZ_D50 as U,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 ne,gam_sRGB as ae,mapGamutRayTrace as oe,OKLCH_to_OKLab as re,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 ie,contrast_ratio_wcag_2_1 as ue,gam_P3 as he,XYZ_to_lin_P3 as Ne,lin_P3_to_XYZ as me}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 Te,calcFromComponentValues as we}from"@csstools/css-calc";var xe,De;function normalize(e,n,a,o){return Math.min(Math.max(e/n,a),o)}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 xe.HEX:case xe.RGB:case xe.sRGB:return{...e,colorNotation:xe.XYZ_D50,channels:J(convertNaNToZero(e.channels))};case xe.Linear_sRGB:return{...e,colorNotation:xe.XYZ_D50,channels:q(convertNaNToZero(e.channels))};case xe.Display_P3:return{...e,colorNotation:xe.XYZ_D50,channels:j(convertNaNToZero(e.channels))};case xe.Linear_Display_P3:return{...e,colorNotation:xe.XYZ_D50,channels:U(convertNaNToZero(e.channels))};case xe.Rec2020:return{...e,colorNotation:xe.XYZ_D50,channels:E(convertNaNToZero(e.channels))};case xe.A98_RGB:return{...e,colorNotation:xe.XYZ_D50,channels:W(convertNaNToZero(e.channels))};case xe.ProPhoto_RGB:return{...e,colorNotation:xe.XYZ_D50,channels:O(convertNaNToZero(e.channels))};case xe.HSL:return{...e,colorNotation:xe.XYZ_D50,channels:I(convertNaNToZero(e.channels))};case xe.HWB:return{...e,colorNotation:xe.XYZ_D50,channels:K(convertNaNToZero(e.channels))};case xe.Lab:return{...e,colorNotation:xe.XYZ_D50,channels:V(convertNaNToZero(e.channels))};case xe.OKLab:return{...e,colorNotation:xe.XYZ_D50,channels:Y(convertNaNToZero(e.channels))};case xe.LCH:return{...e,colorNotation:xe.XYZ_D50,channels:A(convertNaNToZero(e.channels),Number.isNaN(e.channels[2]))};case xe.OKLCH:return{...e,colorNotation:xe.XYZ_D50,channels:G(convertNaNToZero(e.channels),Number.isNaN(e.channels[2]))};case xe.XYZ_D50:return{...e,colorNotation:xe.XYZ_D50,channels:x(convertNaNToZero(e.channels))};case xe.XYZ_D65:return{...e,colorNotation:xe.XYZ_D50,channels:X(convertNaNToZero(e.channels))};default:throw new Error("Unsupported color notation")}}function colorData_to_XYZ_D65(e){switch(e.colorNotation){case xe.HEX:case xe.RGB:case xe.sRGB:return{...e,colorNotation:xe.XYZ_D65,channels:w(convertNaNToZero(e.channels))};case xe.Linear_sRGB:return{...e,colorNotation:xe.XYZ_D65,channels:T(convertNaNToZero(e.channels))};case xe.Display_P3:return{...e,colorNotation:xe.XYZ_D65,channels:C(convertNaNToZero(e.channels))};case xe.Linear_Display_P3:return{...e,colorNotation:xe.XYZ_D65,channels:_(convertNaNToZero(e.channels))};case xe.Rec2020:return{...e,colorNotation:xe.XYZ_D65,channels:y(convertNaNToZero(e.channels))};case xe.A98_RGB:return{...e,colorNotation:xe.XYZ_D65,channels:d(convertNaNToZero(e.channels))};case xe.ProPhoto_RGB:return{...e,colorNotation:xe.XYZ_D65,channels:g(convertNaNToZero(e.channels))};case xe.HSL:return{...e,colorNotation:xe.XYZ_D65,channels:f(convertNaNToZero(e.channels))};case xe.HWB:return{...e,colorNotation:xe.XYZ_D65,channels:v(convertNaNToZero(e.channels))};case xe.Lab:return{...e,colorNotation:xe.XYZ_D65,channels:b(convertNaNToZero(e.channels))};case xe.OKLab:return{...e,colorNotation:xe.XYZ_D65,channels:p(convertNaNToZero(e.channels))};case xe.LCH:return{...e,colorNotation:xe.XYZ_D65,channels:m(convertNaNToZero(e.channels),Number.isNaN(e.channels[2]))};case xe.OKLCH:return{...e,colorNotation:xe.XYZ_D65,channels:N(convertNaNToZero(e.channels),Number.isNaN(e.channels[2]))};case xe.XYZ_D50:return{...e,colorNotation:xe.XYZ_D65,channels:h(convertNaNToZero(e.channels))};case xe.XYZ_D65:return{...e,colorNotation:xe.XYZ_D65,channels:u(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"}(xe||(xe={})),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"}(De||(De={}));const Le=new Set([xe.A98_RGB,xe.Display_P3,xe.Linear_Display_P3,xe.HEX,xe.Linear_sRGB,xe.ProPhoto_RGB,xe.RGB,xe.sRGB,xe.Rec2020,xe.XYZ_D50,xe.XYZ_D65]);function colorDataToForInterpolation(e,n){if(e.colorNotation===n)return{...e};const a=[...e.channels];let o={...e};return o.channels=convertPowerlessComponentsToMissingComponents(o.channels,e.colorNotation),o=convertToDestination(o,n),o.channels=carryForwardMissingComponentsForColorAndNotation(o,e.colorNotation,n,a),o}function colorDataToForRelativeColorSyntax(e,n){if(e.colorNotation===n)return{...e};const a=[...e.channels];let o={...e};return o.channels=convertPowerlessComponentsToMissingComponents(o.channels,e.colorNotation),o=convertToDestination(o,n),o.channels=carryForwardMissingComponentsForColorAndNotation(o,e.colorNotation,n,a),o}function convertToDestination(e,n){if(e.colorNotation===n)return e.channels=convertNaNToZero(e.channels),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n),e;switch(n){case xe.HEX:case xe.RGB:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.RGB,e.channels=B(n.channels),e.channels=e.channels.map(e=>reducePrecisionOrNaN(e,8)),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.sRGB:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.sRGB,e.channels=B(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.Linear_sRGB:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.Linear_sRGB,e.channels=k(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.Display_P3:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.Display_P3,e.channels=R(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.Linear_Display_P3:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.Linear_Display_P3,e.channels=z(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.Rec2020:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.Rec2020,e.channels=S(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.ProPhoto_RGB:{const n=colorData_to_XYZ_D50(e);e.colorNotation=xe.ProPhoto_RGB,e.channels=F(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.A98_RGB:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.A98_RGB,e.channels=$(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.HSL:{const a=colorData_to_XYZ_D65(e);e.colorNotation=xe.HSL,e.channels=M(a.channels),e.channels=e.channels.map(e=>reducePrecisionOrNaN(e,8)),e.channels=normalizeAfterColorConversion(e.channels,0),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n);break}case xe.HWB:{const a=colorData_to_XYZ_D65(e);e.colorNotation=xe.HWB,e.channels=Z(a.channels),e.channels=e.channels.map(e=>reducePrecisionOrNaN(e,8)),e.channels=normalizeAfterColorConversion(e.channels,0),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n);break}case xe.Lab:{const n=colorData_to_XYZ_D50(e);e.colorNotation=xe.Lab,e.channels=P(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.LCH:{const a=colorData_to_XYZ_D50(e);e.colorNotation=xe.LCH,e.channels=H(a.channels),e.channels=normalizeAfterColorConversion(e.channels,2),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n);break}case xe.OKLCH:{const a=colorData_to_XYZ_D65(e);e.colorNotation=xe.OKLCH,e.channels=L(a.channels),e.channels=normalizeAfterColorConversion(e.channels,2),e.channels=convertPowerlessComponentsToMissingComponents(e.channels,n);break}case xe.OKLab:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.OKLab,e.channels=D(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.XYZ_D50:{const n=colorData_to_XYZ_D50(e);e.colorNotation=xe.XYZ_D50,e.channels=x(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}case xe.XYZ_D65:{const n=colorData_to_XYZ_D65(e);e.colorNotation=xe.XYZ_D65,e.channels=u(n.channels),e.channels=normalizeAfterColorConversion(e.channels);break}default:throw new Error("Unsupported color notation")}return e}function carryForwardMissingComponentsForColorAndNotation(e,n,a,o){if(n===a)return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[0,1,2],[]);if(Le.has(a)&&Le.has(n))return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[0,1,2],[]);switch(a){case xe.HSL:switch(n){case xe.HWB:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[0],[1,2]);case xe.Lab:case xe.OKLab:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[2],[0,1]);case xe.LCH:case xe.OKLCH:return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[2,1,0],[]);default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}case xe.HWB:switch(n){case xe.HSL:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[0],[1,2]);case xe.LCH:case xe.OKLCH:return carryForwardMissingComponents(o,[2],[0,1],e.channels,[0],[1,2]);default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}case xe.Lab:case xe.OKLab:switch(n){case xe.HSL:return carryForwardMissingComponents(o,[2],[0,1],e.channels,[0],[1,2]);case xe.Lab:case xe.OKLab:return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[0,1,2],[]);case xe.LCH:case xe.OKLCH:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[0],[1,2]);default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}case xe.LCH:case xe.OKLCH:switch(n){case xe.HSL:return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[2,1,0],[]);case xe.HWB:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[2],[0,1]);case xe.Lab:case xe.OKLab:return carryForwardMissingComponents(o,[0],[1,2],e.channels,[0],[1,2]);case xe.LCH:case xe.OKLCH:return carryForwardMissingComponents(o,[0,1,2],[],e.channels,[0,1,2],[]);default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}default:return carryForwardMissingComponents(o,[],[],e.channels,[],[])}}function convertPowerlessComponentsToMissingComponents(e,n){const a=[...e];switch(n){case xe.HSL:(Number.isNaN(a[1])?0:a[1])<=.001&&(a[0]=Number.NaN,!Number.isNaN(a[1])&&a[1]>0&&(a[1]=0));break;case xe.HWB:Math.max(0,Number.isNaN(a[1])?0:a[1])+Math.max(0,Number.isNaN(a[2])?0:a[2])>=99.999&&(a[0]=Number.NaN,Math.max(0,Number.isNaN(a[1])?0:a[1])+Math.max(0,Number.isNaN(a[2])?0:a[2])<100&&(Number.isNaN(a[1])?a[2]=100:Number.isNaN(a[2])?a[1]=100:a[2]=100-a[1]));break;case xe.LCH:(Number.isNaN(a[1])?0:a[1])<=.0015&&(a[2]=Number.NaN,!Number.isNaN(a[1])&&a[1]>0&&(a[1]=0));break;case xe.OKLCH:(Number.isNaN(a[1])?0:a[1])<=4e-6&&(a[2]=Number.NaN,!Number.isNaN(a[1])&&a[1]>0&&(a[1]=0))}return a}function convertPowerlessComponentsToZeroValuesForDisplay(e,n){const a=[...e];switch(n){case xe.HSL:(Number.isNaN(a[1])?0:a[1])<=.001&&(a[0]=Number.NaN),(reducePrecision$1(a[2])<=0||reducePrecision$1(a[2])>=100)&&(a[0]=Number.NaN,a[1]=Number.NaN);break;case xe.HWB:Math.max(0,Number.isNaN(a[1])?0:a[1])+Math.max(0,Number.isNaN(a[2])?0:a[2])>=99.999&&(a[0]=Number.NaN);break;case xe.Lab:(reducePrecision$1(a[0])<=0||reducePrecision$1(a[0])>=100)&&(a[1]=Number.NaN,a[2]=Number.NaN);break;case xe.LCH:(Number.isNaN(a[1])?0:a[1])<=.0015&&(a[2]=Number.NaN),(reducePrecision$1(a[0])<=0||reducePrecision$1(a[0])>=100)&&(a[1]=Number.NaN,a[2]=Number.NaN);break;case xe.OKLab:(reducePrecision$1(a[0])<=0||reducePrecision$1(a[0])>=1)&&(a[1]=Number.NaN,a[2]=Number.NaN);break;case xe.OKLCH:(Number.isNaN(a[1])?0:a[1])<=4e-6&&(a[2]=Number.NaN),(reducePrecision$1(a[0])<=0||reducePrecision$1(a[0])>=1)&&(a[1]=Number.NaN,a[2]=Number.NaN)}return a}function carryForwardMissingComponents(e,n,a,o,r,t){if(n.length<3&&e.every(Number.isNaN))return[Number.NaN,Number.NaN,Number.NaN];const l=[...o];for(let a=0;aNumber.isNaN(e[n])))for(let e=0;ee<-1e-5||e>1.00001)}function colorDataFitsDisplayP3_Gamut(e){const n={...e,channels:[...e.channels]};n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);return!colorDataToForRelativeColorSyntax(n,xe.Display_P3).channels.find(e=>e<-1e-5||e>1.00001)}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(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,100,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=3===l?normalize(t[4].value,1,0,1):normalize(t[4].value,1,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.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,n){const o=[],s=[],c=[],i=[];let u,h,N=!1,m=!1;const p={colorNotation:xe.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let b=o;for(let r=0;r=0){t=i.value[4].value;continue}}return!1}if(!r)return!1;a.push({color:r,percentage:t}),r=!1,t=!1}}return!!r&&(a.push({color:r,percentage:t}),a)}function colorMixRectangular(e,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:a,leftover:o}=normalizeMixPercentages(n,!0),r=1-o/100;let t;switch(e){case"srgb":t=xe.RGB;break;case"srgb-linear":t=xe.Linear_sRGB;break;case"display-p3":t=xe.Display_P3;break;case"display-p3-linear":t=xe.Linear_Display_P3;break;case"a98-rgb":t=xe.A98_RGB;break;case"prophoto-rgb":t=xe.ProPhoto_RGB;break;case"rec2020":t=xe.Rec2020;break;case"lab":t=xe.Lab;break;case"oklab":t=xe.OKLab;break;case"xyz-d50":t=xe.XYZ_D50;break;case"xyz":case"xyz-d65":t=xe.XYZ_D65;break;default:return!1}if(1===a.length){const e=colorDataToForInterpolation(a[0].color,t);return e.colorNotation=t,e.syntaxFlags.add(De.ColorMixVariadic),e.syntaxFlags.add(De.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*r,e)}for(a.reverse();a.length>=2;){const e=a.pop(),n=a.pop();if(!e||!n)return!1;const o=e.percentage+n.percentage,r=o>0?n.percentage/o:.5,l=colorMixRectangularPair(t,e.color,n.color,r);if(!l)return!1;a.push({color:l,percentage:o})}const l=a[0]?.color;return!!l&&("number"==typeof l.alpha&&(l.alpha=l.alpha*r,n.some(e=>e.color.syntaxFlags.has(De.Experimental))&&l.syntaxFlags.add(De.Experimental),2!==n.length&&l.syntaxFlags.add(De.ColorMixVariadic),l))}function colorMixRectangularPair(e,n,a,o){let r=n.alpha;if("number"!=typeof r)return!1;let t=a.alpha;if("number"!=typeof t)return!1;r=Number.isNaN(r)?t:r,t=Number.isNaN(t)?r:t;const l=colorDataToForInterpolation(n,e).channels,s=colorDataToForInterpolation(a,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],r),l[1]=premultiply(l[1],r),l[2]=premultiply(l[2],r),s[0]=premultiply(s[0],t),s[1]=premultiply(s[1],t),s[2]=premultiply(s[2],t);const c=interpolate(r,t,o);return{colorNotation:e,channels:[un_premultiply(interpolate(l[0],s[0],o),c),un_premultiply(interpolate(l[1],s[1],o),c),un_premultiply(interpolate(l[2],s[2],o),c)],alpha:c,syntaxFlags:new Set([De.ColorMix])}}function colorMixPolar(e,n,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:o,leftover:r}=normalizeMixPercentages(a,!0),t=1-r/100;let l;switch(e){case"hsl":l=xe.HSL;break;case"hwb":l=xe.HWB;break;case"lch":l=xe.LCH;break;case"oklch":l=xe.OKLCH;break;default:return!1}if(1===o.length){const e=colorDataToForInterpolation(o[0].color,l);return e.colorNotation=l,e.syntaxFlags.add(De.ColorMixVariadic),e.syntaxFlags.add(De.ColorMix),"number"!=typeof e.alpha?!1:(e.alpha=e.alpha*t,e)}for(o.reverse();o.length>=2;){const e=o.pop(),a=o.pop();if(!e||!a)return!1;const r=e.percentage+a.percentage,t=r>0?a.percentage/r:.5,s=colorMixPolarPair(l,n,e.color,a.color,t);if(!s)return!1;o.push({color:s,percentage:r})}const s=o[0]?.color;return!!s&&("number"==typeof s.alpha&&(s.alpha=s.alpha*t,a.some(e=>e.color.syntaxFlags.has(De.Experimental))&&s.syntaxFlags.add(De.Experimental),2!==a.length&&s.syntaxFlags.add(De.ColorMixVariadic),s))}function colorMixPolarPair(e,n,a,o,r){let t=0,l=0,s=0,c=0,i=0,u=0,h=a.alpha;if("number"!=typeof h)return!1;let N=o.alpha;if("number"!=typeof N)return!1;h=Number.isNaN(h)?N:h,N=Number.isNaN(N)?h:N;const m=colorDataToForInterpolation(a,e).channels,p=colorDataToForInterpolation(o,e).channels;switch(e){case xe.HSL:case xe.HWB:t=m[0],l=p[0],s=m[1],c=p[1],i=m[2],u=p[2];break;case xe.LCH:case xe.OKLCH:s=m[0],c=p[0],i=m[1],u=p[1],t=m[2],l=p[2]}if(s=fillInMissingComponent(s,c),c=fillInMissingComponent(c,s),i=fillInMissingComponent(i,u),u=fillInMissingComponent(u,i),t=fillInMissingComponent(t,l),l=fillInMissingComponent(l,t),Number.isNaN(t)&&Number.isNaN(l));else{const e=l-t;switch(n){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),i=premultiply(i,h),c=premultiply(c,N),u=premultiply(u,N);let b=[0,0,0];const v=interpolate(h,N,r);switch(e){case xe.HSL:case xe.HWB:b=[interpolate(t,l,r),un_premultiply(interpolate(s,c,r),v),un_premultiply(interpolate(i,u,r),v)];break;case xe.LCH:case xe.OKLCH:b=[un_premultiply(interpolate(s,c,r),v),un_premultiply(interpolate(i,u,r),v),interpolate(t,l,r)]}return{colorNotation:e,channels:b,alpha:v,syntaxFlags:new Set([De.ColorMix])}}function fillInMissingComponent(e,n){return Number.isNaN(e)?n:e}function interpolate(e,n,a){return e*(1-a)+n*a}function premultiply(e,n){return Number.isNaN(n)?e:Number.isNaN(e)?Number.NaN:e*n}function un_premultiply(e,n){return 0===n||Number.isNaN(n)?e:Number.isNaN(e)?Number.NaN:e/n}function normalizeMixPercentages(e,n=!1){let a=0,o=0;for(const n of e)n.percentage&&(a+=n.percentage),!1===n.percentage&&o++;a=Math.min(100,a);for(const n of e)!1===n.percentage&&(n.percentage=(100-a)/o);const r=e.slice();let t=0;for(const e of r)t+=e.percentage;if(t>100||t>0&&n)for(const e of r)e.percentage=e.percentage*(100/t);let l=0;return t<100&&(l=100-t),{items:r,leftover:l}}function hex(e){const n=toLowerCaseAZ(e[4].value);if(n.match(/[^a-f0-9]/))return!1;const a={colorNotation:xe.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([De.Hex])},o=n.length;if(3===o){const e=n[0],o=n[1],r=n[2];return a.channels=[parseInt(e+e,16)/255,parseInt(o+o,16)/255,parseInt(r+r,16)/255],a}if(6===o){const e=n[0]+n[1],o=n[2]+n[3],r=n[4]+n[5];return a.channels=[parseInt(e,16)/255,parseInt(o,16)/255,parseInt(r,16)/255],a}if(4===o){const e=n[0],o=n[1],r=n[2],t=n[3];return a.channels=[parseInt(e+e,16)/255,parseInt(o+o,16)/255,parseInt(r+r,16)/255],a.alpha=parseInt(t+t,16)/255,a.syntaxFlags.add(De.HasAlpha),a}if(8===o){const e=n[0]+n[1],o=n[2]+n[3],r=n[4]+n[5],t=n[6]+n[7];return a.channels=[parseInt(e,16)/255,parseInt(o,16)/255,parseInt(r,16)/255],a.alpha=parseInt(t,16)/255,a.syntaxFlags.add(De.HasAlpha),a}return!1}function normalizeHue$1(a){if(r(a))return Number.isNaN(a[4].value)||Number.isFinite(a[4].value)||(a[4].value=0),a[4].value=a[4].value%360,a[4].value<0&&(a[4].value+=360),a[1]=a[4].value.toString(),a;if(c(a)){let o=a[4].value;switch(toLowerCaseAZ(a[4].unit)){case"deg":break;case"rad":o=180*a[4].value/Math.PI;break;case"grad":o=.9*a[4].value;break;case"turn":o=360*a[4].value;break;default:return!1}return Number.isNaN(a[4].value)||Number.isFinite(a[4].value)||(a[4].value=0),o%=360,o<0&&(o+=360),[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(a,t,l){if(0===t){const e=normalizeHue$1(a);return!1!==e&&(c(a)&&l.syntaxFlags.add(De.HasDimensionValues),e)}if(o(a)){let o;return 3===t?l.syntaxFlags.add(De.HasPercentageAlpha):l.syntaxFlags.add(De.HasPercentageValues),o=3===t?normalize(a[4].value,100,0,1):normalize(a[4].value,1,0,100),[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}if(r(a)){if(3!==t)return!1;let o;return o=normalize(a[4].value,1,0,3===t?1:100),[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}return!1}function normalize_modern_HSL_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(0===l){const e=normalizeHue$1(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(De.HasDimensionValues),e)}if(o(t)){let a;return 3===l?s.syntaxFlags.add(De.HasPercentageAlpha):s.syntaxFlags.add(De.HasPercentageValues),a=3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,1,1===l?0:-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=3===l?normalize(t[4].value,1,0,1):normalize(t[4].value,1,1===l?0:-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function threeChannelLegacySyntax(e,n,a,o){const t=[],c=[],i=[],u=[],h={colorNotation:a,channels:[0,0,0],alpha:1,syntaxFlags:new Set(o)};let N=t;for(let n=0;nve(e)&&s(e.value))){const n=hslCommaSeparated(e);if(!1!==n)return n}{const a=hslSpaceSeparated(e,n);if(!1!==a)return a}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,xe.HSL,[De.LegacyHSL])}function hslSpaceSeparated(e,n){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,xe.HSL,[],n)}function normalize_HWB_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(0===l){const e=normalizeHue$1(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(De.HasDimensionValues),e)}if(o(t)){let a;return 3===l?s.syntaxFlags.add(De.HasPercentageAlpha):s.syntaxFlags.add(De.HasPercentageValues),a=3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,1,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=3===l?normalize(t[4].value,1,0,1):normalize(t[4].value,1,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function normalize_Lab_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=1===l||2===l?normalize(t[4].value,.8,-2147483647,2147483647):3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,1,0,100),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=1===l||2===l?normalize(t[4].value,1,-2147483647,2147483647):normalize(t[4].value,1,0,3===l?1:100),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function lab(e,n){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,xe.Lab,[],n)}function normalize_LCH_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(2===l){const e=normalizeHue$1(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(De.HasDimensionValues),e)}if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=1===l?normalize(t[4].value,100/150,0,2147483647):3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,1,0,100),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=normalize(t[4].value,1,0,1===l?2147483647:3===l?1:100),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function lch(e,n){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,xe.LCH,[],n)}const Fe=new Map;for(const[e,n]of Object.entries(Q))Fe.set(e,n);function namedColor(e){const n=Fe.get(toLowerCaseAZ(e));return!!n&&{colorNotation:xe.RGB,channels:[n[0]/255,n[1]/255,n[2]/255],alpha:1,syntaxFlags:new Set([De.ColorKeyword,De.NamedColor])}}function normalize_OKLab_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=1===l||2===l?normalize(t[4].value,250,-2147483647,2147483647):normalize(t[4].value,100,0,1),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=1===l||2===l?normalize(t[4].value,1,-2147483647,2147483647):normalize(t[4].value,1,0,1),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function oklab(e,n){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,xe.OKLab,[],n)}function normalize_OKLCH_ChannelValues(t,l,s){if(a(t)&&"none"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(2===l){const e=normalizeHue$1(t);return!1!==e&&(c(t)&&s.syntaxFlags.add(De.HasDimensionValues),e)}if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=1===l?normalize(t[4].value,250,0,2147483647):normalize(t[4].value,100,0,1),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=normalize(t[4].value,1,0,1===l?2147483647:1),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function oklch(e,n){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,xe.OKLCH,[],n)}function normalize_legacy_sRGB_ChannelValues(a,t,l){if(o(a)){3===t?l.syntaxFlags.add(De.HasPercentageAlpha):l.syntaxFlags.add(De.HasPercentageValues);const o=normalize(a[4].value,100,0,1);return[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}if(r(a)){let o;return 3!==t&&l.syntaxFlags.add(De.HasNumberValues),o=normalize(a[4].value,3===t?1:255,0,1),[e.Number,o.toString(),a[2],a[3],{value:o,type:n.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(t,l,s){if(a(t)&&"none"===t[4].value.toLowerCase())return s.syntaxFlags.add(De.HasNoneKeywords),[e.Number,"none",t[2],t[3],{value:Number.NaN,type:n.Number}];if(o(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasPercentageValues),a=3===l?normalize(t[4].value,100,0,1):normalize(t[4].value,100,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}if(r(t)){let a;return 3!==l&&s.syntaxFlags.add(De.HasNumberValues),a=3===l?normalize(t[4].value,1,0,1):normalize(t[4].value,255,-2147483647,2147483647),[e.Number,a.toString(),t[2],t[3],{value:a,type:n.Number}]}return!1}function rgb(e,n){if(e.value.some(e=>ve(e)&&s(e.value))){const n=rgbCommaSeparated(e);if(!1!==n)return(!n.syntaxFlags.has(De.HasNumberValues)||!n.syntaxFlags.has(De.HasPercentageValues))&&n}else{const a=rgbSpaceSeparated(e,n);if(!1!==a)return a}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,xe.RGB,[De.LegacyRGB])}function rgbSpaceSeparated(e,n){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,xe.RGB,[],n)}function XYZ_D65_to_sRGB_Gamut(e){const n=B(e);if(ee(n))return ne(n);let a=e;return a=L(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),ae(oe(a,oklch_to_lin_srgb,lin_srgb_to_oklch))}function oklch_to_lin_srgb(e){return e=re(e),e=te(e),le(e)}function lin_srgb_to_oklch(e){return e=se(e),e=ce(e),ie(e)}function contrastColor(e,n){let a=!1;for(let o=0;ot?[1,1,1]:[0,0,0],o}function alpha(e,n){let o,s,c=!1,i=!1,u=!1;const h={colorNotation:xe.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let N=0;N{if(ve(e)&&a(e.value)&&"alpha"===toLowerCaseAZ(e.value[4].value)&&o&&o.has("alpha"))return new ge(o.get("alpha"))});h.alpha=e[0][0],i=!0;continue}return!1}if(u)return!1;for(;pe(e.value[N+1])||be(e.value[N+1]);)N++;if(N++,m=e.value[N],u=n(m),!1===u)return!1;o=normalizeRelativeColorDataChannels(u),s=noneToZeroInRelativeColorDataChannels(o),h.syntaxFlags=new Set(u.syntaxFlags),h.syntaxFlags.add(De.RelativeAlphaSyntax),h.channels=[...u.channels],h.colorNotation=u.colorNotation,h.alpha=u.alpha}}return!!o&&(!!i&&h)}function XYZ_D65_to_P3_Gamut(e){const n=R(e);if(ee(n))return ne(n);let a=e;return a=L(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),he(oe(a,oklch_to_lin_p3,lin_p3_to_oklch))}function oklch_to_lin_p3(e){return e=re(e),e=te(e),Ne(e)}function lin_p3_to_oklch(e){return e=me(e),e=ce(e),ie(e)}function toPrecision(e,n=7){e=+e,n=+n;const a=(Math.floor(Math.abs(e))+"").length;if(n>a)return+e.toFixed(n-a);{const o=10**(a-n);return Math.round(e/o)*o}}function serializeWithAlpha(a,o,r,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof a.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(a.alpha)?0:a.alpha)));return 1===toPrecision(s,4)?new _e(o,l,t):new _e(o,l,[...t,new Ce([r]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([r]),new ge([e.Number,toPrecision(s,4).toString(),-1,-1,{value:a.alpha,type:n.Integer}])])}return new _e(o,l,[...t,new Ce([r]),new ge([e.Delim,"/",-1,-1,{value:"/"}]),new Ce([r]),a.alpha])}function serializeP3(a,o=!0){a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);let r=a.channels.map(e=>Number.isNaN(e)?0:e);o?r=XYZ_D65_to_P3_Gamut(colorData_to_XYZ_D65(a).channels):a.colorNotation!==xe.Display_P3&&(r=R(colorData_to_XYZ_D65(a).channels));const t=o?Math.min(1,Math.max(0,toPrecision(r[0],6))):toPrecision(r[0],6),l=o?Math.min(1,Math.max(0,toPrecision(r[1],6))):toPrecision(r[1],6),s=o?Math.min(1,Math.max(0,toPrecision(r[2],6))):toPrecision(r[2],6),c=[e.Function,"color(",-1,-1,{value:"color"}],i=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(a,c,i,[new ge([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new Ce([i]),new ge([e.Number,t.toString(),-1,-1,{value:r[0],type:n.Number}]),new Ce([i]),new ge([e.Number,l.toString(),-1,-1,{value:r[1],type:n.Number}]),new Ce([i]),new ge([e.Number,s.toString(),-1,-1,{value:r[2],type:n.Number}])])}function serializeRGB(a,o=!0){let r;a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation),r=o?XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(a).channels):B(colorData_to_XYZ_D65(a).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[2])))),c=[e.CloseParen,")",-1,-1,void 0],i=[e.Whitespace," ",-1,-1,void 0],u=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,r[0])),type:n.Integer}]),new ge(u),new Ce([i]),new ge([e.Number,l.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,r[1])),type:n.Integer}]),new ge(u),new Ce([i]),new ge([e.Number,s.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,r[2])),type:n.Integer}])];if("number"==typeof a.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(a.alpha)?0:a.alpha)));return 1===toPrecision(o,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(u),new Ce([i]),new ge([e.Number,toPrecision(o,4).toString(),-1,-1,{value:a.alpha,type:n.Number}])])}return new _e([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...h,new ge(u),new Ce([i]),a.alpha])}function serializeHSL(a,o=!0){let r;a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation),r=M(o?w(XYZ_D65_to_sRGB_Gamut(colorData_to_XYZ_D65(a).channels)):colorData_to_XYZ_D65(a).channels),r=r.map(e=>Number.isNaN(e)?0:e);const t=Math.min(360,Math.max(0,Math.round(toPrecision(r[0]))))%360,l=Math.min(100,Math.max(0,Math.round(toPrecision(r[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(r[2])))),c=[e.CloseParen,")",-1,-1,void 0],i=[e.Whitespace," ",-1,-1,void 0],u=[e.Comma,",",-1,-1,void 0],h=[new ge([e.Number,t.toString(),-1,-1,{value:r[0],type:n.Integer}]),new ge(u),new Ce([i]),new ge([e.Percentage,l.toString()+"%",-1,-1,{value:r[1]}]),new ge(u),new Ce([i]),new ge([e.Percentage,s.toString()+"%",-1,-1,{value:r[2]}])];if("number"==typeof a.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(a.alpha)?0:a.alpha)));return 1===toPrecision(o,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(u),new Ce([i]),new ge([e.Number,toPrecision(o,4).toString(),-1,-1,{value:a.alpha,type:n.Number}])])}return new _e([e.Function,"hsla(",-1,-1,{value:"hsla"}],c,[...h,new ge(u),new Ce([i]),a.alpha])}function serializeOKLCH(a){a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);let o=a.channels.map(e=>Number.isNaN(e)?0:e);a.colorNotation!==xe.OKLCH&&(o=L(colorData_to_XYZ_D65(a).channels));const r=toPrecision(o[0],6),t=toPrecision(o[1],6),l=toPrecision(o[2],6),s=[e.Function,"oklch(",-1,-1,{value:"oklch"}],c=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(a,s,c,[new ge([e.Number,r.toString(),-1,-1,{value:o[0],type:n.Number}]),new Ce([c]),new ge([e.Number,t.toString(),-1,-1,{value:o[1],type:n.Number}]),new Ce([c]),new ge([e.Number,l.toString(),-1,-1,{value:o[2],type:n.Number}])])}function computedValue(e,n=!0){const a=e.channels;switch(e.colorNotation){case xe.Lab:return a[0]=nanToNone(a[0]),a[1]=nanToNone(a[1]),a[2]=nanToNone(a[2]),1!==e.alpha?`lab(${a[0]} ${a[1]} ${a[2]} / ${nanToNone(e.alpha)})`:`lab(${a[0]} ${a[1]} ${a[2]})`;case xe.LCH:return a[0]=nanToNone(a[0]),a[1]=nanToNone(a[1]),a[2]=nanToNone(normalizeHue(a[2])),1!==e.alpha?`lch(${a[0]} ${a[1]} ${a[2]} / ${nanToNone(e.alpha)})`:`lch(${a[0]} ${a[1]} ${a[2]})`;case xe.OKLab:return a[0]=nanToNone(a[0]),a[1]=nanToNone(a[1]),a[2]=nanToNone(a[2]),1!==e.alpha?`oklab(${a[0]} ${a[1]} ${a[2]} / ${nanToNone(e.alpha)})`:`oklab(${a[0]} ${a[1]} ${a[2]})`;case xe.OKLCH:return a[0]=nanToNone(a[0]),a[1]=nanToNone(a[1]),a[2]=nanToNone(normalizeHue(a[2])),1!==e.alpha?`oklch(${a[0]} ${a[1]} ${a[2]} / ${nanToNone(e.alpha)})`:`oklch(${a[0]} ${a[1]} ${a[2]})`;case xe.RGB:case xe.HEX:return a.some(Number.isNaN)||Number.isNaN(e.alpha)?1!==e.alpha?`color(srgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(srgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`:e.syntaxFlags.has(De.RelativeColorSyntax)||e.syntaxFlags.has(De.ColorMix)||e.syntaxFlags.has(De.RelativeAlphaSyntax)?computedValue(colorDataToForRelativeColorSyntax(e,xe.sRGB)):1!==e.alpha?`rgba(${nanToNone(Math.round(255*reducePrecision(e.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(e.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(e.channels[2],5)))}, ${nanToNone(e.alpha)})`:`rgb(${nanToNone(Math.round(255*reducePrecision(e.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(e.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(e.channels[2],5)))})`;case xe.HSL:{if(a.some(Number.isNaN)||Number.isNaN(e.alpha)||!1===n)return 1!==e.alpha?`hsl(${nanToNone(normalizeHue(a[0]))} ${nanToNone(a[1],"%")} ${nanToNone(a[2],"%")} / ${nanToNone(e.alpha)})`:`hsl(${nanToNone(normalizeHue(a[0]))} ${nanToNone(a[1],"%")} ${nanToNone(a[2],"%")})`;if(e.syntaxFlags.has(De.RelativeColorSyntax)||e.syntaxFlags.has(De.ColorMix)||e.syntaxFlags.has(De.RelativeAlphaSyntax))return computedValue(colorDataToForRelativeColorSyntax(e,xe.sRGB));const o=colorDataToForRelativeColorSyntax(e,xe.RGB);return 1!==o.alpha?`rgba(${nanToNone(Math.round(255*reducePrecision(o.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[2],5)))}, ${nanToNone(o.alpha)})`:`rgb(${nanToNone(Math.round(255*reducePrecision(o.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[2],5)))})`}case xe.HWB:{if(a.some(Number.isNaN)||Number.isNaN(e.alpha)||!1===n)return 1!==e.alpha?`hwb(${nanToNone(normalizeHue(a[0]))} ${nanToNone(a[1],"%")} ${nanToNone(a[2],"%")} / ${nanToNone(e.alpha)})`:`hwb(${nanToNone(normalizeHue(a[0]))} ${nanToNone(a[1],"%")} ${nanToNone(a[2],"%")})`;if(e.syntaxFlags.has(De.RelativeColorSyntax)||e.syntaxFlags.has(De.ColorMix)||e.syntaxFlags.has(De.RelativeAlphaSyntax))return computedValue(colorDataToForRelativeColorSyntax(e,xe.sRGB));const o=colorDataToForRelativeColorSyntax(e,xe.RGB);return 1!==o.alpha?`rgba(${nanToNone(Math.round(255*reducePrecision(o.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[2],5)))}, ${nanToNone(o.alpha)})`:`rgb(${nanToNone(Math.round(255*reducePrecision(o.channels[0],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[1],5)))}, ${nanToNone(Math.round(255*reducePrecision(o.channels[2],5)))})`}case xe.sRGB:return 1!==e.alpha?`color(srgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(srgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.Linear_sRGB:return 1!==e.alpha?`color(srgb-linear ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(srgb-linear ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.Display_P3:return 1!==e.alpha?`color(display-p3 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(display-p3 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.Linear_Display_P3:return 1!==e.alpha?`color(display-p3-linear ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(display-p3-linear ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.A98_RGB:return 1!==e.alpha?`color(a98-rgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(a98-rgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.ProPhoto_RGB:return 1!==e.alpha?`color(prophoto-rgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(prophoto-rgb ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.Rec2020:return 1!==e.alpha?`color(rec2020 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(rec2020 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.XYZ_D65:return 1!==e.alpha?`color(xyz-d65 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(xyz-d65 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`;case xe.XYZ_D50:return 1!==e.alpha?`color(xyz-d50 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])} / ${nanToNone(e.alpha)})`:`color(xyz-d50 ${nanToNone(a[0])} ${nanToNone(a[1])} ${nanToNone(a[2])})`}throw new Error("unsupported color")}function nanToNone(e,n=""){return"string"==typeof e?e:"number"!=typeof e?e.toString():Number.isNaN(e)?"none":n?e.toString()+n:e.toString()}function normalizeHue(e){return"number"!=typeof e||Number.isNaN(e)?e:e%360}function reducePrecision(e,n=8){return Number.isNaN(e)||!Number.isFinite(e)?e:(n=Math.pow(10,n),Math.round(e*n)/n)}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 n=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,xe.HWB,[],n);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 n;if(ve(e)){if(i(e.value))return hex(e.value);if(a(e.value)){const n=namedColor(e.value[4].value);return!1!==n?n:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:xe.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([De.ColorKeyword])}}}return!1}export{xe as ColorNotation,De as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,computedValue,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 a040b9c97..a3db21fd1 100644 --- a/packages/css-color-parser/src/color-data.ts +++ b/packages/css-color-parser/src/color-data.ts @@ -165,13 +165,13 @@ function colorData_to_XYZ_D50(colorData: ColorData): ColorData { return { ...colorData, colorNotation: ColorNotation.XYZ_D50, - channels: LCH_to_XYZ_D50(convertNaNToZero(colorData.channels)), + channels: LCH_to_XYZ_D50(convertNaNToZero(colorData.channels), Number.isNaN(colorData.channels[2])), }; case ColorNotation.OKLCH: return { ...colorData, colorNotation: ColorNotation.XYZ_D50, - channels: OKLCH_to_XYZ_D50(convertNaNToZero(colorData.channels)), + channels: OKLCH_to_XYZ_D50(convertNaNToZero(colorData.channels), Number.isNaN(colorData.channels[2])), }; case ColorNotation.XYZ_D50: return { @@ -270,13 +270,13 @@ export function colorData_to_XYZ_D65(colorData: ColorData): ColorData { return { ...colorData, colorNotation: ColorNotation.XYZ_D65, - channels: LCH_to_XYZ_D65(convertNaNToZero(colorData.channels)), + channels: LCH_to_XYZ_D65(convertNaNToZero(colorData.channels), Number.isNaN(colorData.channels[2])), }; case ColorNotation.OKLCH: return { ...colorData, colorNotation: ColorNotation.XYZ_D65, - channels: OKLCH_to_XYZ_D65(convertNaNToZero(colorData.channels)), + channels: OKLCH_to_XYZ_D65(convertNaNToZero(colorData.channels), Number.isNaN(colorData.channels[2])), }; case ColorNotation.XYZ_D50: return { diff --git a/packages/css-color-parser/test/basic/none-exhaustive.mjs b/packages/css-color-parser/test/basic/none-exhaustive.mjs index 76f5d7601..b2208c924 100644 --- a/packages/css-color-parser/test/basic/none-exhaustive.mjs +++ b/packages/css-color-parser/test/basic/none-exhaustive.mjs @@ -36,18 +36,18 @@ import { parse } from '../util/parse.mjs'; ['hsl(from lch(none 20 180) h s l)', 'hsl(339.80326134 266.58541811% none)'], ['hsl(from lch(20 none 180) h s l)', 'hsl(none none 18.93757452%)'], - ['hsl(from lch(20 20 none) h s l)', 'hsl(none 35.05613281% 21.64776943%)'], + ['hsl(from lch(20 20 none) h s l)', 'hsl(none 0% 18.93757452%)'], ['hsl(from lch(none none 180) h s l)', 'hsl(none none none)'], ['hsl(from lch(20 none none) h s l)', 'hsl(none none 18.93757452%)'], - ['hsl(from lch(none 20 none) h s l)', 'hsl(none 266.58541811% none)'], + ['hsl(from lch(none 20 none) h s l)', 'hsl(none 0% none)'], ['hsl(from lch(none none none) h s l)', 'hsl(none none none)'], ['hsl(from oklch(none 0.2 180) h s l)', 'hsl(345.65323987 193.08743918% none)'], ['hsl(from oklch(0.2 none 180) h s l)', 'hsl(none none 8.61042044%)'], - ['hsl(from oklch(0.2 0.2 none) h s l)', 'hsl(none 250.47260791% 8.44443686%)'], + ['hsl(from oklch(0.2 0.2 none) h s l)', 'hsl(none 0% 8.61042044%)'], ['hsl(from oklch(none none 180) h s l)', 'hsl(none none none)'], ['hsl(from oklch(0.2 none none) h s l)', 'hsl(none none 8.61042044%)'], - ['hsl(from oklch(none 0.2 none) h s l)', 'hsl(none 193.08743918% none)'], + ['hsl(from oklch(none 0.2 none) h s l)', 'hsl(none 0% none)'], ['hsl(from oklch(none none none) h s l)', 'hsl(none none none)'], ['hsl(from lab(none 10 10) h s l)', 'hsl(15.41935071 846.24593338% none)'], @@ -88,18 +88,18 @@ import { parse } from '../util/parse.mjs'; ['color-mix(in hsl, lch(none 20 180), hsl(11 33 44))', 'color(srgb 1.09908792 -0.21908792 -0.1180636)', 'hsl(355.40163067 149.79270905% 44%)'], ['color-mix(in hsl, lch(20 none 180), hsl(11 33 44))', 'color(srgb 0.41853487 0.24891811 0.21084087)', 'hsl(11 33% 31.46878726%)'], - ['color-mix(in hsl, lch(20 20 none), hsl(11 33 44))', 'color(srgb 0.43993218 0.25749974 0.21654551)', 'hsl(11 34.02806641% 32.82388472%)'], + ['color-mix(in hsl, lch(20 20 none), hsl(11 33 44))', 'color(srgb 0.36661137 0.28180299 0.26276437)', 'hsl(11 16.5% 31.46878726%)'], ['color-mix(in hsl, lch(none none 180), hsl(11 33 44))', 'color(srgb 0.5852 0.34804 0.2948)', 'hsl(11 33% 44%)'], ['color-mix(in hsl, lch(20 none none), hsl(11 33 44))', 'color(srgb 0.41853487 0.24891811 0.21084087)', 'hsl(11 33% 31.46878726%)'], - ['color-mix(in hsl, lch(none 20 none), hsl(11 33 44))', 'color(srgb 1.09908792 0.02257765 -0.21908792)', 'hsl(11 149.79270905% 44%)'], + ['color-mix(in hsl, lch(none 20 none), hsl(11 33 44))', 'color(srgb 0.5126 0.39402 0.3674)', 'hsl(11 16.5% 44%)'], ['color-mix(in hsl, lch(none none none), hsl(11 33 44))', 'color(srgb 0.5852 0.34804 0.2948)', 'hsl(11 33% 44%)'], ['color-mix(in hsl, oklch(none 0.2 180), hsl(11 33 44))', 'color(srgb 0.93739237 -0.05739237 -0.02964815)', 'hsl(358.32661994 113.04371959% 44%)'], ['color-mix(in hsl, oklch(0.2 none 180), hsl(11 33 44))', 'color(srgb 0.3498593 0.20807421 0.17624491)', 'hsl(11 33% 26.30521022%)'], - ['color-mix(in hsl, oklch(0.2 0.2 none), hsl(11 33 44))', 'color(srgb 0.63388622 0.02683496 -0.10944185)', 'hsl(11 141.73630395% 26.22221843%)'], + ['color-mix(in hsl, oklch(0.2 0.2 none), hsl(11 33 44))', 'color(srgb 0.3064557 0.23556316 0.21964851)', 'hsl(11 16.5% 26.30521022%)'], ['color-mix(in hsl, oklch(none none 180), hsl(11 33 44))', 'color(srgb 0.5852 0.34804 0.2948)', 'hsl(11 33% 44%)'], ['color-mix(in hsl, oklch(0.2 none none), hsl(11 33 44))', 'color(srgb 0.3498593 0.20807421 0.17624491)', 'hsl(11 33% 26.30521022%)'], - ['color-mix(in hsl, oklch(none 0.2 none), hsl(11 33 44))', 'color(srgb 0.93739237 0.12498483 -0.05739237)', 'hsl(11 113.04371959% 44%)'], + ['color-mix(in hsl, oklch(none 0.2 none), hsl(11 33 44))', 'color(srgb 0.5126 0.39402 0.3674)', 'hsl(11 16.5% 44%)'], ['color-mix(in hsl, oklch(none none none), hsl(11 33 44))', 'color(srgb 0.5852 0.34804 0.2948)', 'hsl(11 33% 44%)'], ['color-mix(in hsl, lab(none 10 10), hsl(11 33 44))', 'color(srgb 2.37434105 -0.64260714 -1.49434105)', 'hsl(13.20967536 439.62296669% 44%)'], @@ -140,18 +140,18 @@ import { parse } from '../util/parse.mjs'; ['color-mix(in hsl, lch(none 20 180))', 'hsl(339.80326134 266.58541811% none)', 'hsl(339.80326134 266.58541811% none)'], ['color-mix(in hsl, lch(20 none 180))', 'hsl(none none 18.93757452%)', 'hsl(none none 18.93757452%)'], - ['color-mix(in hsl, lch(20 20 none))', 'hsl(none 35.05613281% 21.64776943%)', 'hsl(none 35.05613281% 21.64776943%)'], + ['color-mix(in hsl, lch(20 20 none))', 'hsl(none 0% 18.93757452%)', 'hsl(none 0% 18.93757452%)'], ['color-mix(in hsl, lch(none none 180))', 'hsl(none none none)', 'hsl(none none none)'], ['color-mix(in hsl, lch(20 none none))', 'hsl(none none 18.93757452%)', 'hsl(none none 18.93757452%)'], - ['color-mix(in hsl, lch(none 20 none))', 'hsl(none 266.58541811% none)', 'hsl(none 266.58541811% none)'], + ['color-mix(in hsl, lch(none 20 none))', 'hsl(none 0% none)', 'hsl(none 0% none)'], ['color-mix(in hsl, lch(none none none))', 'hsl(none none none)', 'hsl(none none none)'], ['color-mix(in hsl, oklch(none 0.2 180))', 'hsl(345.65323987 193.08743918% none)', 'hsl(345.65323987 193.08743918% none)'], ['color-mix(in hsl, oklch(0.2 none 180))', 'hsl(none none 8.61042044%)', 'hsl(none none 8.61042044%)'], - ['color-mix(in hsl, oklch(0.2 0.2 none))', 'hsl(none 250.47260791% 8.44443686%)', 'hsl(none 250.47260791% 8.44443686%)'], + ['color-mix(in hsl, oklch(0.2 0.2 none))', 'hsl(none 0% 8.61042044%)', 'hsl(none 0% 8.61042044%)'], ['color-mix(in hsl, oklch(none none 180))', 'hsl(none none none)', 'hsl(none none none)'], ['color-mix(in hsl, oklch(0.2 none none))', 'hsl(none none 8.61042044%)', 'hsl(none none 8.61042044%)'], - ['color-mix(in hsl, oklch(none 0.2 none))', 'hsl(none 193.08743918% none)', 'hsl(none 193.08743918% none)'], + ['color-mix(in hsl, oklch(none 0.2 none))', 'hsl(none 0% none)', 'hsl(none 0% none)'], ['color-mix(in hsl, oklch(none none none))', 'hsl(none none none)', 'hsl(none none none)'], ['color-mix(in hsl, lab(none 10 10))', 'hsl(15.41935071 846.24593338% none)', 'hsl(15.41935071 846.24593338% none)'], @@ -192,18 +192,18 @@ import { parse } from '../util/parse.mjs'; ['hwb(from lch(none 20 180) h w b)', 'color(srgb -0.13099833 0.05952886 -0.00460494)'], ['hwb(from lch(20 none 180) h w b)', 'hwb(none 18.93757452% 81.06242548%)'], - ['hwb(from lch(20 20 none) h w b)', 'hwb(none 14.05889863% 70.76335977%)'], + ['hwb(from lch(20 20 none) h w b)', 'hwb(none 18.93757452% 81.06242548%)'], ['hwb(from lch(none none 180) h w b)', 'hwb(none none none)'], ['hwb(from lch(20 none none) h w b)', 'hwb(none 18.93757452% 81.06242548%)'], - ['hwb(from lch(none 20 none) h w b)', 'hwb(none -5.95288574% 86.90016729%)'], + ['hwb(from lch(none 20 none) h w b)', 'hwb(none 0% 100%)'], ['hwb(from lch(none none none) h w b)', 'hwb(none none none)'], ['hwb(from oklch(none 0.2 180) h w b)', 'color(srgb -0.0266189 0.00845442 0.00006795)'], ['hwb(from oklch(0.2 none 180) h w b)', 'hwb(none 8.61042044% 91.38957956%)'], - ['hwb(from oklch(0.2 0.2 none) h w b)', 'hwb(none -12.70656437% 70.40456191%)'], + ['hwb(from oklch(0.2 0.2 none) h w b)', 'hwb(none 8.61042044% 91.38957956%)'], ['hwb(from oklch(none none 180) h w b)', 'hwb(none none none)'], ['hwb(from oklch(0.2 none none) h w b)', 'hwb(none 8.61042044% 91.38957956%)'], - ['hwb(from oklch(none 0.2 none) h w b)', 'hwb(none -0.84544246% 97.33810956%)'], + ['hwb(from oklch(none 0.2 none) h w b)', 'hwb(none 0% 100%)'], ['hwb(from oklch(none none none) h w b)', 'hwb(none none none)'], ['hwb(from lab(none 10 10) h w b)', 'color(srgb 0.10216252 -0.03360919 -0.08056929)'], @@ -244,18 +244,18 @@ import { parse } from '../util/parse.mjs'; ['color-mix(in hwb, lch(none 20 180), hwb(11 33 44))', 'color(srgb 0.22074713 0.30976443 0.09950084)', 'hwb(85.40163067 9.95008365% 69.02355713%)'], ['color-mix(in hwb, lch(20 none 180), hwb(11 33 44))', 'color(srgb 0.37468787 0.28077121 0.25968787)', 'hwb(11 25.96878726% 62.53121274%)'], - ['color-mix(in hwb, lch(20 20 none), hwb(11 33 44))', 'color(srgb 0.4261832 0.27029076 0.23529449)', 'hwb(11 23.52944932% 57.38167989%)'], + ['color-mix(in hwb, lch(20 20 none), hwb(11 33 44))', 'color(srgb 0.37468787 0.28077121 0.25968787)', 'hwb(11 25.96878726% 62.53121274%)'], ['color-mix(in hwb, lch(none none 180), hwb(11 33 44))', 'color(srgb 0.56 0.37216667 0.33)', 'hwb(11 33% 44%)'], ['color-mix(in hwb, lch(20 none none), hwb(11 33 44))', 'color(srgb 0.37468787 0.28077121 0.25968787)', 'hwb(11 25.96878726% 62.53121274%)'], - ['color-mix(in hwb, lch(none 20 none), hwb(11 33 44))', 'color(srgb 0.34549916 0.1737839 0.13523557)', 'hwb(11 13.52355713% 65.45008365%)'], + ['color-mix(in hwb, lch(none 20 none), hwb(11 33 44))', 'color(srgb 0.28 0.18608333 0.165)', 'hwb(11 16.5% 72%)'], ['color-mix(in hwb, lch(none none none), hwb(11 33 44))', 'color(srgb 0.56 0.37216667 0.33)', 'hwb(11 33% 44%)'], ['color-mix(in hwb, oklch(none 0.2 180), hwb(11 33 44))', 'color(srgb 0.22165528 0.28422721 0.15169055)', 'hwb(88.32661994 15.16905478% 71.57727877%)'], ['color-mix(in hwb, oklch(0.2 none 180), hwb(11 33 44))', 'color(srgb 0.3230521 0.22913544 0.2080521)', 'hwb(11 20.80521022% 67.69478978%)'], - ['color-mix(in hwb, oklch(0.2 0.2 none), hwb(11 33 44))', 'color(srgb 0.42797719 0.16132735 0.10146718)', 'hwb(11 10.14671781% 57.20228096%)'], + ['color-mix(in hwb, oklch(0.2 0.2 none), hwb(11 33 44))', 'color(srgb 0.3230521 0.22913544 0.2080521)', 'hwb(11 20.80521022% 67.69478978%)'], ['color-mix(in hwb, oklch(none none 180), hwb(11 33 44))', 'color(srgb 0.56 0.37216667 0.33)', 'hwb(11 33% 44%)'], ['color-mix(in hwb, oklch(0.2 none none), hwb(11 33 44))', 'color(srgb 0.3230521 0.22913544 0.2080521)', 'hwb(11 20.80521022% 67.69478978%)'], - ['color-mix(in hwb, oklch(none 0.2 none), hwb(11 33 44))', 'color(srgb 0.29330945 0.18507118 0.16077279)', 'hwb(11 16.07727877% 70.66905478%)'], + ['color-mix(in hwb, oklch(none 0.2 none), hwb(11 33 44))', 'color(srgb 0.28 0.18608333 0.165)', 'hwb(11 16.5% 72%)'], ['color-mix(in hwb, oklch(none none none), hwb(11 33 44))', 'color(srgb 0.56 0.37216667 0.33)', 'hwb(11 33% 44%)'], ['color-mix(in hwb, lab(none 10 10), hwb(11 33 44))', 'color(srgb 0.33108126 0.17014913 0.12471536)', 'hwb(13.20967536 12.47153557% 66.89187423%)'], @@ -296,18 +296,18 @@ import { parse } from '../util/parse.mjs'; ['color-mix(in hwb, lch(none 20 180))', 'color(srgb -0.13099833 0.05952886 -0.00460494)', 'hwb(159.80326134 -13.09983271% 94.04711426%)'], ['color-mix(in hwb, lch(20 none 180))', 'hwb(none 18.93757452% 81.06242548%)', 'hwb(none 18.93757452% 81.06242548%)'], - ['color-mix(in hwb, lch(20 20 none))', 'hwb(none 14.05889863% 70.76335977%)', 'hwb(none 14.05889863% 70.76335977%)'], + ['color-mix(in hwb, lch(20 20 none))', 'hwb(none 18.93757452% 81.06242548%)', 'hwb(none 18.93757452% 81.06242548%)'], ['color-mix(in hwb, lch(none none 180))', 'hwb(none none none)', 'hwb(none none none)'], ['color-mix(in hwb, lch(20 none none))', 'hwb(none 18.93757452% 81.06242548%)', 'hwb(none 18.93757452% 81.06242548%)'], - ['color-mix(in hwb, lch(none 20 none))', 'hwb(none -5.95288574% 86.90016729%)', 'hwb(none -5.95288574% 86.90016729%)'], + ['color-mix(in hwb, lch(none 20 none))', 'hwb(none 0% 100%)', 'hwb(none 0% 100%)'], ['color-mix(in hwb, lch(none none none))', 'hwb(none none none)', 'hwb(none none none)'], ['color-mix(in hwb, oklch(none 0.2 180))', 'color(srgb -0.0266189 0.00845442 0.00006795)', 'hwb(165.65323987 -2.66189044% 99.15455754%)'], ['color-mix(in hwb, oklch(0.2 none 180))', 'hwb(none 8.61042044% 91.38957956%)', 'hwb(none 8.61042044% 91.38957956%)'], - ['color-mix(in hwb, oklch(0.2 0.2 none))', 'hwb(none -12.70656437% 70.40456191%)', 'hwb(none -12.70656437% 70.40456191%)'], + ['color-mix(in hwb, oklch(0.2 0.2 none))', 'hwb(none 8.61042044% 91.38957956%)', 'hwb(none 8.61042044% 91.38957956%)'], ['color-mix(in hwb, oklch(none none 180))', 'hwb(none none none)', 'hwb(none none none)'], ['color-mix(in hwb, oklch(0.2 none none))', 'hwb(none 8.61042044% 91.38957956%)', 'hwb(none 8.61042044% 91.38957956%)'], - ['color-mix(in hwb, oklch(none 0.2 none))', 'hwb(none -0.84544246% 97.33810956%)', 'hwb(none -0.84544246% 97.33810956%)'], + ['color-mix(in hwb, oklch(none 0.2 none))', 'hwb(none 0% 100%)', 'hwb(none 0% 100%)'], ['color-mix(in hwb, oklch(none none none))', 'hwb(none none none)', 'hwb(none none none)'], ['color-mix(in hwb, lab(none 10 10))', 'color(srgb 0.10216252 -0.03360919 -0.08056929)', 'hwb(15.41935071 -8.05692886% 89.78374845%)'], @@ -356,10 +356,10 @@ import { parse } from '../util/parse.mjs'; ['lch(from oklch(none 0.2 180) l c h)', 'lch(none 2.6503948 181.20369565)'], ['lch(from oklch(0.2 none 180) l c h)', 'lch(7.22637037 none none)'], - ['lch(from oklch(0.2 0.2 none) l c h)', 'lch(5.10873217 59.48824051 none)'], + ['lch(from oklch(0.2 0.2 none) l c h)', 'lch(7.22637037 0 none)'], ['lch(from oklch(none none 180) l c h)', 'lch(none none none)'], ['lch(from oklch(0.2 none none) l c h)', 'lch(7.22637037 none none)'], - ['lch(from oklch(none 0.2 none) l c h)', 'lch(none 2.6503948 none)'], + ['lch(from oklch(none 0.2 none) l c h)', 'lch(none 0 none)'], ['lch(from oklch(none none none) l c h)', 'lch(none none none)'], ['lch(from lab(none 10 10) l c h)', 'lch(none 14.14213562 45)'], @@ -408,10 +408,10 @@ import { parse } from '../util/parse.mjs'; ['color-mix(in lch, oklch(none 0.2 180), lch(11 33 44))', 'lch(11 17.8251974 112.60184783)'], ['color-mix(in lch, oklch(0.2 none 180), lch(11 33 44))', 'lch(9.11318519 33 44)'], - ['color-mix(in lch, oklch(0.2 0.2 none), lch(11 33 44))', 'lch(8.05436608 46.24412025 44)'], + ['color-mix(in lch, oklch(0.2 0.2 none), lch(11 33 44))', 'lch(9.11318519 16.5 44)'], ['color-mix(in lch, oklch(none none 180), lch(11 33 44))', 'lch(11 33 44)'], ['color-mix(in lch, oklch(0.2 none none), lch(11 33 44))', 'lch(9.11318519 33 44)'], - ['color-mix(in lch, oklch(none 0.2 none), lch(11 33 44))', 'lch(11 17.8251974 44)'], + ['color-mix(in lch, oklch(none 0.2 none), lch(11 33 44))', 'lch(11 16.5 44)'], ['color-mix(in lch, oklch(none none none), lch(11 33 44))', 'lch(11 33 44)'], ['color-mix(in lch, lab(none 10 10), lch(11 33 44))', 'lch(11 23.57106781 44.5)'], @@ -460,10 +460,10 @@ import { parse } from '../util/parse.mjs'; ['color-mix(in lch, oklch(none 0.2 180))', 'lch(none 2.6503948 181.20369565)'], ['color-mix(in lch, oklch(0.2 none 180))', 'lch(7.22637037 none none)'], - ['color-mix(in lch, oklch(0.2 0.2 none))', 'lch(5.10873217 59.48824051 none)'], + ['color-mix(in lch, oklch(0.2 0.2 none))', 'lch(7.22637037 0 none)'], ['color-mix(in lch, oklch(none none 180))', 'lch(none none none)'], ['color-mix(in lch, oklch(0.2 none none))', 'lch(7.22637037 none none)'], - ['color-mix(in lch, oklch(none 0.2 none))', 'lch(none 2.6503948 none)'], + ['color-mix(in lch, oklch(none 0.2 none))', 'lch(none 0 none)'], ['color-mix(in lch, oklch(none none none))', 'lch(none none none)'], ['color-mix(in lch, lab(none 10 10))', 'lch(none 14.14213562 45)'], @@ -504,10 +504,10 @@ import { parse } from '../util/parse.mjs'; ['oklch(from lch(none 20 180) l c h)', 'oklch(none 0.26412556 175.27132911)'], ['oklch(from lch(20 none 180) l c h)', 'oklch(0.31034483 none none)'], - ['oklch(from lch(20 20 none) l c h)', 'oklch(0.31697196 0.06085528 none)'], + ['oklch(from lch(20 20 none) l c h)', 'oklch(0.31034483 0 none)'], ['oklch(from lch(none none 180) l c h)', 'oklch(none none none)'], ['oklch(from lch(20 none none) l c h)', 'oklch(0.31034483 none none)'], - ['oklch(from lch(none 20 none) l c h)', 'oklch(none 0.26412556 none)'], + ['oklch(from lch(none 20 none) l c h)', 'oklch(none 0 none)'], ['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)'], @@ -556,10 +556,10 @@ import { parse } from '../util/parse.mjs'; ['color-mix(in oklch, lch(none 20 180), oklch(0.11 0.33 44))', 'oklch(0.11 0.29706278 109.63566456)'], ['color-mix(in oklch, lch(20 none 180), oklch(0.11 0.33 44))', 'oklch(0.21017241 0.33 44)'], - ['color-mix(in oklch, lch(20 20 none), oklch(0.11 0.33 44))', 'oklch(0.21348598 0.19542764 44)'], + ['color-mix(in oklch, lch(20 20 none), oklch(0.11 0.33 44))', 'oklch(0.21017241 0.165 44)'], ['color-mix(in oklch, lch(none none 180), oklch(0.11 0.33 44))', 'oklch(0.11 0.33 44)'], ['color-mix(in oklch, lch(20 none none), oklch(0.11 0.33 44))', 'oklch(0.21017241 0.33 44)'], - ['color-mix(in oklch, lch(none 20 none), oklch(0.11 0.33 44))', 'oklch(0.11 0.29706278 44)'], + ['color-mix(in oklch, lch(none 20 none), oklch(0.11 0.33 44))', 'oklch(0.11 0.165 44)'], ['color-mix(in oklch, lch(none none none), oklch(0.11 0.33 44))', 'oklch(0.11 0.33 44)'], ['color-mix(in oklch, oklch(none 0.2 180), oklch(0.11 0.33 44))', 'oklch(0.11 0.265 112)'], @@ -608,10 +608,10 @@ import { parse } from '../util/parse.mjs'; ['color-mix(in oklch, lch(none 20 180))', 'oklch(none 0.26412556 175.27132911)'], ['color-mix(in oklch, lch(20 none 180))', 'oklch(0.31034483 none none)'], - ['color-mix(in oklch, lch(20 20 none))', 'oklch(0.31697196 0.06085528 none)'], + ['color-mix(in oklch, lch(20 20 none))', 'oklch(0.31034483 0 none)'], ['color-mix(in oklch, lch(none none 180))', 'oklch(none none none)'], ['color-mix(in oklch, lch(20 none none))', 'oklch(0.31034483 none none)'], - ['color-mix(in oklch, lch(none 20 none))', 'oklch(none 0.26412556 none)'], + ['color-mix(in oklch, lch(none 20 none))', 'oklch(none 0 none)'], ['color-mix(in oklch, lch(none none none))', 'oklch(none none none)'], ['color-mix(in oklch, oklch(none 0.2 180))', 'oklch(none 0.2 180)'], diff --git a/plugins/postcss-relative-color-syntax/test/basic.expect.css b/plugins/postcss-relative-color-syntax/test/basic.expect.css index 19a3cd7c0..8fce2030c 100644 --- a/plugins/postcss-relative-color-syntax/test/basic.expect.css +++ b/plugins/postcss-relative-color-syntax/test/basic.expect.css @@ -67,7 +67,7 @@ } .spec-example-16 { - background: linear-gradient(in Oklab to right, rgb(97, 90, 91), #4C3); + background: linear-gradient(in Oklab to right, rgb(92, 92, 92), #4C3); } .spec-example-17 { 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 3daab7ae1..c6ed71f2c 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 @@ -131,7 +131,7 @@ } .spec-example-16 { - background: linear-gradient(in Oklab to right, rgb(97, 90, 91), #4C3); + background: linear-gradient(in Oklab to right, rgb(92, 92, 92), #4C3); background: linear-gradient(in Oklab to right, oklch(from hsl(none 3% 50%) calc(l * 0.8) c h), #4C3); }