@csstools/css-color-parser 1.2.3 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/color-data.d.ts +3 -4
- package/dist/functions/color-normalize-channel-values.d.ts +2 -2
- package/dist/functions/hsl-normalize-channel-values.d.ts +2 -3
- package/dist/functions/hwb-normalize-channel-values.d.ts +1 -2
- package/dist/functions/lab-normalize-channel-values.d.ts +1 -2
- package/dist/functions/lch-normalize-channel-values.d.ts +1 -2
- package/dist/functions/normalize-channel-values.d.ts +1 -2
- package/dist/functions/oklab-normalize-channel-values.d.ts +1 -2
- package/dist/functions/oklch-normalize-channel-values.d.ts +1 -2
- package/dist/functions/rgb-normalize-channel-values.d.ts +2 -3
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +1 -1
- package/dist/serialize/oklch.d.ts +3 -0
- package/dist/serialize/with-alpha.d.ts +4 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changes to CSS Color Parser
|
|
2
2
|
|
|
3
|
+
### 1.3.1
|
|
4
|
+
|
|
5
|
+
_September 2, 2023_
|
|
6
|
+
|
|
7
|
+
- Fix clipping of values in `hsl`, `hwb` and `rgb` color notations.
|
|
8
|
+
- Updated [`@csstools/color-helpers`](https://github.com/csstools/postcss-plugins/tree/main/packages/color-helpers) to [`3.0.2`](https://github.com/csstools/postcss-plugins/tree/main/packages/color-helpers/CHANGELOG.md#302) (patch)
|
|
9
|
+
|
|
10
|
+
### 1.3.0
|
|
11
|
+
|
|
12
|
+
_August 28, 2023_
|
|
13
|
+
|
|
14
|
+
- Add a `serializeOKLCH` function.
|
|
15
|
+
- Always convert to the target color space, even when the input color is already in that specific color space.
|
|
16
|
+
- Correctly apply the hue interpolation method when either angle is missing.
|
|
17
|
+
- Updated [`@csstools/color-helpers`](https://github.com/csstools/postcss-plugins/tree/main/packages/color-helpers) to [`3.0.1`](https://github.com/csstools/postcss-plugins/tree/main/packages/color-helpers/CHANGELOG.md#301) (patch)
|
|
18
|
+
|
|
3
19
|
### 1.2.3
|
|
4
20
|
|
|
5
21
|
_July 24, 2023_
|
package/dist/color-data.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Color } from '@csstools/color-helpers';
|
|
2
2
|
import type { ComponentValue } from '@csstools/css-parser-algorithms';
|
|
3
3
|
import { ColorNotation } from './color-notation';
|
|
4
|
-
import {
|
|
4
|
+
import { TokenNumber } from '@csstools/css-tokenizer';
|
|
5
5
|
export type ColorData = {
|
|
6
6
|
colorNotation: ColorNotation;
|
|
7
7
|
channels: Color;
|
|
@@ -28,7 +28,6 @@ export declare function colorData_to_XYZ_D50(colorData: ColorData): ColorData;
|
|
|
28
28
|
export declare function colorDataTo(colorData: ColorData, toNotation: ColorNotation): ColorData;
|
|
29
29
|
export declare function convertPowerlessComponentsToMissingComponents(a: Color, colorNotation: ColorNotation): Color;
|
|
30
30
|
export declare function convertPowerlessComponentsToZeroValuesForDisplay(a: Color, colorNotation: ColorNotation): Color;
|
|
31
|
-
export declare function
|
|
32
|
-
export declare function
|
|
33
|
-
export declare function noneToZeroInRelativeColorDataChannels(x: Map<string, TokenNumber | TokenPercentage | TokenDimension>): Map<string, TokenNumber | TokenPercentage | TokenDimension>;
|
|
31
|
+
export declare function normalizeRelativeColorDataChannels(x: ColorData): Map<string, TokenNumber>;
|
|
32
|
+
export declare function noneToZeroInRelativeColorDataChannels(x: Map<string, TokenNumber>): Map<string, TokenNumber>;
|
|
34
33
|
export declare function colorDataFitsRGB_Gamut(x: ColorData): boolean;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ColorData } from '../color-data';
|
|
2
|
-
import { CSSToken
|
|
3
|
-
export declare function normalize_Color_ChannelValues(
|
|
2
|
+
import { CSSToken } from '@csstools/css-tokenizer';
|
|
3
|
+
export declare function normalize_Color_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ColorData } from '../color-data';
|
|
2
|
-
import type { TokenNumber } from '@csstools/css-tokenizer';
|
|
3
2
|
import { CSSToken } from '@csstools/css-tokenizer';
|
|
4
|
-
export declare function normalize_legacy_HSL_ChannelValues(
|
|
5
|
-
export declare function normalize_modern_HSL_ChannelValues(
|
|
3
|
+
export declare function normalize_legacy_HSL_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
|
4
|
+
export declare function normalize_modern_HSL_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { ColorData } from '../color-data';
|
|
2
|
-
import type { TokenNumber } from '@csstools/css-tokenizer';
|
|
3
2
|
import { CSSToken } from '@csstools/css-tokenizer';
|
|
4
|
-
export declare function normalize_HWB_ChannelValues(
|
|
3
|
+
export declare function normalize_HWB_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { ColorData } from '../color-data';
|
|
2
|
-
import type { TokenNumber } from '@csstools/css-tokenizer';
|
|
3
2
|
import { CSSToken } from '@csstools/css-tokenizer';
|
|
4
|
-
export declare function normalize_Lab_ChannelValues(
|
|
3
|
+
export declare function normalize_Lab_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { ColorData } from '../color-data';
|
|
2
|
-
import type { TokenNumber } from '@csstools/css-tokenizer';
|
|
3
2
|
import { CSSToken } from '@csstools/css-tokenizer';
|
|
4
|
-
export declare function normalize_LCH_ChannelValues(
|
|
3
|
+
export declare function normalize_LCH_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { ColorData } from '../color-data';
|
|
2
|
-
import type { TokenNumber } from '@csstools/css-tokenizer';
|
|
3
2
|
import { CSSToken } from '@csstools/css-tokenizer';
|
|
4
|
-
export type normalizeChannelValuesFn = (
|
|
3
|
+
export type normalizeChannelValuesFn = (token: CSSToken, index: number, colorData: ColorData) => CSSToken | false;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { ColorData } from '../color-data';
|
|
2
|
-
import type { TokenNumber } from '@csstools/css-tokenizer';
|
|
3
2
|
import { CSSToken } from '@csstools/css-tokenizer';
|
|
4
|
-
export declare function normalize_OKLab_ChannelValues(
|
|
3
|
+
export declare function normalize_OKLab_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { ColorData } from '../color-data';
|
|
2
|
-
import type { TokenNumber } from '@csstools/css-tokenizer';
|
|
3
2
|
import { CSSToken } from '@csstools/css-tokenizer';
|
|
4
|
-
export declare function normalize_OKLCH_ChannelValues(
|
|
3
|
+
export declare function normalize_OKLCH_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ColorData } from '../color-data';
|
|
2
|
-
import type { TokenNumber } from '@csstools/css-tokenizer';
|
|
3
2
|
import { CSSToken } from '@csstools/css-tokenizer';
|
|
4
|
-
export declare function normalize_legacy_sRGB_ChannelValues(
|
|
5
|
-
export declare function normalize_modern_sRGB_ChannelValues(
|
|
3
|
+
export declare function normalize_legacy_sRGB_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
|
4
|
+
export declare function normalize_modern_sRGB_ChannelValues(token: CSSToken, index: number, colorData: ColorData): CSSToken | false;
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,o,a=require("@csstools/css-tokenizer"),n=require("@csstools/color-helpers"),t=require("@csstools/css-parser-algorithms"),r=require("@csstools/css-calc");function colorData_to_XYZ_D50(e){switch(e.colorNotation){case exports.ColorNotation.HEX:case exports.ColorNotation.RGB:case exports.ColorNotation.sRGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Linear_sRGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.lin_sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Display_P3:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.P3_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Rec2020:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.rec_2020_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.A98_RGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.a98_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.ProPhoto_RGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.ProPhoto_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.HSL:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.HSL_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.HWB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.HWB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Lab:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.Lab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.OKLab:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.OKLab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.LCH:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.LCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.OKLCH:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.OKLCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.XYZ_D50:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.XYZ_D50_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.XYZ_D65:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.XYZ_D65_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};default:throw new Error("Unsupported color notation")}}exports.ColorNotation=void 0,(e=exports.ColorNotation||(exports.ColorNotation={})).A98_RGB="a98-rgb",e.Display_P3="display-p3",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",exports.SyntaxFlag=void 0,(o=exports.SyntaxFlag||(exports.SyntaxFlag={})).ColorKeyword="color-keyword",o.HasAlpha="has-alpha",o.HasDimensionValues="has-dimension-values",o.HasNoneKeywords="has-none-keywords",o.HasNumberValues="has-number-values",o.HasPercentageAlpha="has-percentage-alpha",o.HasPercentageValues="has-percentage-values",o.HasVariableAlpha="has-variable-alpha",o.Hex="hex",o.LegacyHSL="legacy-hsl",o.LegacyRGB="legacy-rgb",o.NamedColor="named-color",o.RelativeColorSyntax="relative-color-syntax",o.ColorMix="color-mix";const s=new Set([exports.ColorNotation.A98_RGB,exports.ColorNotation.Display_P3,exports.ColorNotation.HEX,exports.ColorNotation.Linear_sRGB,exports.ColorNotation.ProPhoto_RGB,exports.ColorNotation.RGB,exports.ColorNotation.sRGB,exports.ColorNotation.Rec2020,exports.ColorNotation.XYZ_D50,exports.ColorNotation.XYZ_D65]);function colorDataTo(e,o){const a=colorData_to_XYZ_D50(e),t={...e};switch(o){case exports.ColorNotation.HEX:case exports.ColorNotation.RGB:t.colorNotation=exports.ColorNotation.RGB,t.channels=n.xyz.XYZ_D50_to_sRGB(a.channels);break;case exports.ColorNotation.sRGB:t.colorNotation=exports.ColorNotation.sRGB,t.channels=n.xyz.XYZ_D50_to_sRGB(a.channels);break;case exports.ColorNotation.Linear_sRGB:t.colorNotation=exports.ColorNotation.Linear_sRGB,t.channels=n.xyz.XYZ_D50_to_lin_sRGB(a.channels);break;case exports.ColorNotation.Display_P3:t.colorNotation=exports.ColorNotation.Display_P3,t.channels=n.xyz.XYZ_D50_to_P3(a.channels);break;case exports.ColorNotation.Rec2020:t.colorNotation=exports.ColorNotation.Rec2020,t.channels=n.xyz.XYZ_D50_to_rec_2020(a.channels);break;case exports.ColorNotation.ProPhoto_RGB:t.colorNotation=exports.ColorNotation.ProPhoto_RGB,t.channels=n.xyz.XYZ_D50_to_ProPhoto(a.channels);break;case exports.ColorNotation.A98_RGB:t.colorNotation=exports.ColorNotation.A98_RGB,t.channels=n.xyz.XYZ_D50_to_a98_RGB(a.channels);break;case exports.ColorNotation.HSL:t.colorNotation=exports.ColorNotation.HSL,t.channels=n.xyz.XYZ_D50_to_HSL(a.channels);break;case exports.ColorNotation.HWB:t.colorNotation=exports.ColorNotation.HWB,t.channels=n.xyz.XYZ_D50_to_HWB(a.channels);break;case exports.ColorNotation.Lab:t.colorNotation=exports.ColorNotation.Lab,t.channels=n.xyz.XYZ_D50_to_Lab(a.channels);break;case exports.ColorNotation.LCH:t.colorNotation=exports.ColorNotation.LCH,t.channels=n.xyz.XYZ_D50_to_LCH(a.channels);break;case exports.ColorNotation.OKLCH:t.colorNotation=exports.ColorNotation.OKLCH,t.channels=n.xyz.XYZ_D50_to_OKLCH(a.channels);break;case exports.ColorNotation.OKLab:t.colorNotation=exports.ColorNotation.OKLab,t.channels=n.xyz.XYZ_D50_to_OKLab(a.channels);break;case exports.ColorNotation.XYZ_D50:t.colorNotation=exports.ColorNotation.XYZ_D50,t.channels=n.xyz.XYZ_D50_to_XYZ_D50(a.channels);break;case exports.ColorNotation.XYZ_D65:t.colorNotation=exports.ColorNotation.XYZ_D65,t.channels=n.xyz.XYZ_D50_to_XYZ_D65(a.channels);break;default:throw new Error("Unsupported color notation")}if(o===e.colorNotation)t.channels=carryForwardMissingComponents(e.channels,[0,1,2],t.channels,[0,1,2]);else if(s.has(o)&&s.has(e.colorNotation))t.channels=carryForwardMissingComponents(e.channels,[0,1,2],t.channels,[0,1,2]);else switch(o){case exports.ColorNotation.HSL:switch(e.colorNotation){case exports.ColorNotation.HWB:t.channels=carryForwardMissingComponents(e.channels,[0],t.channels,[0]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:t.channels=carryForwardMissingComponents(e.channels,[2],t.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:t.channels=carryForwardMissingComponents(e.channels,[0,1,2],t.channels,[2,1,0])}break;case exports.ColorNotation.HWB:switch(e.colorNotation){case exports.ColorNotation.HSL:t.channels=carryForwardMissingComponents(e.channels,[0],t.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:t.channels=carryForwardMissingComponents(e.channels,[0],t.channels,[2])}break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:switch(e.colorNotation){case exports.ColorNotation.HSL:t.channels=carryForwardMissingComponents(e.channels,[0],t.channels,[2]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:t.channels=carryForwardMissingComponents(e.channels,[0,1,2],t.channels,[0,1,2]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:t.channels=carryForwardMissingComponents(e.channels,[0],t.channels,[0])}break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:switch(e.colorNotation){case exports.ColorNotation.HSL:t.channels=carryForwardMissingComponents(e.channels,[0,1,2],t.channels,[2,1,0]);break;case exports.ColorNotation.HWB:t.channels=carryForwardMissingComponents(e.channels,[0],t.channels,[2]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:t.channels=carryForwardMissingComponents(e.channels,[0],t.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:t.channels=carryForwardMissingComponents(e.channels,[0,1,2],t.channels,[0,1,2])}}return t.channels=convertPowerlessComponentsToMissingComponents(t.channels,o),t}function convertPowerlessComponentsToMissingComponents(e,o){const a=[...e];switch(o){case exports.ColorNotation.HSL:(reducePrecision(a[2],4)<=0||reducePrecision(a[2],4)>=100)&&(a[0]=NaN,a[1]=NaN),reducePrecision(a[1],4)<=0&&(a[0]=NaN);break;case exports.ColorNotation.HWB:Math.max(0,reducePrecision(a[1],4))+Math.max(0,reducePrecision(a[2],4))>=100&&(a[0]=NaN);break;case exports.ColorNotation.LCH:reducePrecision(a[1],4)<=0&&(a[2]=NaN);break;case exports.ColorNotation.OKLCH:reducePrecision(a[1],6)<=0&&(a[2]=NaN)}return a}function convertPowerlessComponentsToZeroValuesForDisplay(e,o){const a=[...e];switch(o){case exports.ColorNotation.HSL:(reducePrecision(a[2])<=0||reducePrecision(a[2])>=100)&&(a[0]=NaN,a[1]=NaN),reducePrecision(a[1])<=0&&(a[0]=NaN);break;case exports.ColorNotation.HWB:Math.max(0,reducePrecision(a[1]))+Math.max(0,reducePrecision(a[2]))>=100&&(a[0]=NaN);break;case exports.ColorNotation.Lab:(reducePrecision(a[0])<=0||reducePrecision(a[0])>=100)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.LCH:reducePrecision(a[1])<=0&&(a[2]=NaN),(reducePrecision(a[0])<=0||reducePrecision(a[0])>=100)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.OKLab:(reducePrecision(a[0])<=0||reducePrecision(a[0])>=1)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.OKLCH:reducePrecision(a[1])<=0&&(a[2]=NaN),(reducePrecision(a[0])<=0||reducePrecision(a[0])>=1)&&(a[1]=NaN,a[2]=NaN)}return a}function carryForwardMissingComponents(e,o,a,n){const t=[...a];for(const a of o)Number.isNaN(e[o[a]])&&(t[n[a]]=NaN);return t}function fillInMissingComponents(e,o){const a=[...e];for(let n=0;n<e.length;n++)Number.isNaN(e[n])&&(a[n]=o[n]);return a}function normalizeRelativeColorDataChannels(e){const o=new Map;switch(e.colorNotation){case exports.ColorNotation.RGB:case exports.ColorNotation.HEX:o.set("r",dummyNumberToken(255*e.channels[0])),o.set("g",dummyNumberToken(255*e.channels[1])),o.set("b",dummyNumberToken(255*e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.HSL:o.set("h",dummyNumberToken(e.channels[0])),o.set("s",dummyNumberToken(e.channels[1])),o.set("l",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.HWB:o.set("h",dummyNumberToken(e.channels[0])),o.set("w",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:o.set("l",dummyNumberToken(e.channels[0])),o.set("a",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:o.set("l",dummyNumberToken(e.channels[0])),o.set("c",dummyNumberToken(e.channels[1])),o.set("h",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.sRGB:case exports.ColorNotation.A98_RGB:case exports.ColorNotation.Display_P3:case exports.ColorNotation.Rec2020:case exports.ColorNotation.Linear_sRGB:case exports.ColorNotation.ProPhoto_RGB:o.set("r",dummyNumberToken(e.channels[0])),o.set("g",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.XYZ_D50:case exports.ColorNotation.XYZ_D65:o.set("x",dummyNumberToken(e.channels[0])),o.set("y",dummyNumberToken(e.channels[1])),o.set("z",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha))}return o}function noneToZeroInRelativeColorDataChannels(e){const o=new Map;for(const[a,n]of e)Number.isNaN(n[4].value)?o.set(a,dummyNumberToken(0)):o.set(a,n);return o}function dummyNumberToken(e){return[a.TokenType.Number,e.toString(),-1,-1,{value:e,type:a.NumberType.Number}]}function reducePrecision(e,o=7){const a=Math.pow(10,o);return Math.round(e*a)/a}function normalize(e,o,a,n){return Math.min(Math.max(e/o,a),n)}const l=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(l,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function normalize_Color_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(r[0]!==a.TokenType.Ident||"none"!==toLowerCaseAZ(r[4].value))if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,1,-1/0,1/0);3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let e=normalize(r[4].value,100,-1/0,1/0);3===t&&(e=normalize(r[4].value,100,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}else o.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),n.push([a.TokenType.Number,"none",r[2],r[3],{value:NaN,type:a.NumberType.Number}])}return n}const i=new Set(["srgb","srgb-linear","display-p3","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,o){const n=[],s=[],l=[],u=[];let c,p,N=!1,m=!1;const h={colorNotation:exports.ColorNotation.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let x=n;for(let y=0;y<e.value.length;y++){let C=e.value[y];if(t.isWhitespaceNode(C)||t.isCommentNode(C))for(;t.isWhitespaceNode(e.value[y+1])||t.isCommentNode(e.value[y+1]);)y++;else if(x===n&&n.length&&(x=s),x===s&&s.length&&(x=l),t.isTokenNode(C)&&C.value[0]===a.TokenType.Delim&&"/"===C.value[4].value){if(x===u)return!1;x=u}else{if(t.isFunctionNode(C)){if(x===u&&"var"===toLowerCaseAZ(C.getName())){h.syntaxFlags.add(exports.SyntaxFlag.HasVariableAlpha),x.push(C);continue}if(!r.mathFunctionNames.has(toLowerCaseAZ(C.getName())))return!1;const[[e]]=r.calcFromComponentValues([[C]],{toCanonicalUnits:!0,precision:100,globals:p});if(!e||!t.isTokenNode(e)||(e.value[0]===a.TokenType.Percentage||e.value[0]===a.TokenType.Number||e.value[0]===a.TokenType.Dimension)&&Number.isNaN(e.value[4].value))return!1;C=e}if(x===n&&0===n.length&&t.isTokenNode(C)&&C.value[0]===a.TokenType.Ident&&i.has(toLowerCaseAZ(C.value[4].value))){if(N)return!1;N=toLowerCaseAZ(C.value[4].value),h.colorNotation=colorSpaceNameToColorNotation(N),m&&(m.colorNotation!==h.colorNotation&&(m=colorDataTo(m,h.colorNotation)),c=normalizeRelativeColorDataChannels(m),p=noneToZeroInRelativeColorDataChannels(c))}else if(x===n&&0===n.length&&t.isTokenNode(C)&&C.value[0]===a.TokenType.Ident&&"from"===toLowerCaseAZ(C.value[4].value)){if(m)return!1;if(N)return!1;for(;t.isWhitespaceNode(e.value[y+1])||t.isCommentNode(e.value[y+1]);)y++;if(y++,C=e.value[y],m=o(C),!1===m)return!1;h.syntaxFlags.add(exports.SyntaxFlag.RelativeColorSyntax)}else{if(!t.isTokenNode(C))return!1;if(C.value[0]===a.TokenType.Ident&&c&&c.has(toLowerCaseAZ(C.value[4].value))){x.push(new t.TokenNode(c.get(toLowerCaseAZ(C.value[4].value))));continue}x.push(C)}}}if(!N)return!1;if(1!==x.length)return!1;if(1!==n.length||1!==s.length||1!==l.length)return!1;if(!t.isTokenNode(n[0])||!t.isTokenNode(s[0])||!t.isTokenNode(l[0]))return!1;if(c&&!c.has("alpha"))return!1;const y=[n[0].value,s[0].value,l[0].value];1===u.length?(h.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),t.isTokenNode(u[0])?y.push(u[0].value):h.alpha=u[0]):c&&c.has("alpha")&&y.push(c.get("alpha"));const C=normalize_Color_ChannelValues(y,h);return!1!==C&&(h.channels=[C[0][4].value,C[1][4].value,C[2][4].value],4===C.length&&(h.alpha=C[3][4].value),h)}function colorSpaceNameToColorNotation(e){switch(e){case"srgb":return exports.ColorNotation.sRGB;case"srgb-linear":return exports.ColorNotation.Linear_sRGB;case"display-p3":return exports.ColorNotation.Display_P3;case"a98-rgb":return exports.ColorNotation.A98_RGB;case"prophoto-rgb":return exports.ColorNotation.ProPhoto_RGB;case"rec2020":return exports.ColorNotation.Rec2020;case"xyz":case"xyz-d65":return exports.ColorNotation.XYZ_D65;case"xyz-d50":return exports.ColorNotation.XYZ_D50;default:throw new Error("Unknown color space name: "+e)}}const u=new Set(["srgb","srgb-linear","lab","oklab","xyz","xyz-d50","xyz-d65"]),c=new Set(["hsl","hwb","lch","oklch"]),p=new Set(["shorter","longer","increasing","decreasing"]);function colorMix(e,o){let n=null,r=null,s=null,l=!1;for(let i=0;i<e.value.length;i++){const N=e.value[i];if(!t.isWhitespaceNode(N)&&!t.isCommentNode(N)){if(t.isTokenNode(N)&&N.value[0]===a.TokenType.Ident){if(!n&&"in"===toLowerCaseAZ(N.value[4].value)){n=N;continue}if(n&&!r){r=toLowerCaseAZ(N.value[4].value);continue}if(n&&r&&!s&&c.has(r)){s=toLowerCaseAZ(N.value[4].value);continue}if(n&&r&&s&&!l&&"hue"===toLowerCaseAZ(N.value[4].value)){l=!0;continue}return!1}return!(!t.isTokenNode(N)||N.value[0]!==a.TokenType.Comma)&&(!!r&&(s||l?!!(r&&s&&l&&c.has(r)&&p.has(s))&&colorMixPolar(r,s,colorMixComponents(e.value.slice(i+1),o)):u.has(r)?colorMixRectangular(r,colorMixComponents(e.value.slice(i+1),o)):!!c.has(r)&&colorMixPolar(r,"shorter",colorMixComponents(e.value.slice(i+1),o))))}}return!1}function colorMixComponents(e,o){const n=[];let s=1,l=!1,i=!1;for(let s=0;s<e.length;s++){let u=e[s];if(!t.isWhitespaceNode(u)&&!t.isCommentNode(u)){if(!t.isTokenNode(u)||u.value[0]!==a.TokenType.Comma){if(!l){const e=o(u);if(e){l=e;continue}}if(!i){if(t.isFunctionNode(u)&&r.mathFunctionNames.has(toLowerCaseAZ(u.getName()))&&([[u]]=r.calcFromComponentValues([[u]],{toCanonicalUnits:!0,precision:100}),!u||!t.isTokenNode(u)||(u.value[0]===a.TokenType.Percentage||u.value[0]===a.TokenType.Number||u.value[0]===a.TokenType.Dimension)&&Number.isNaN(u.value[4].value)))return!1;if(t.isTokenNode(u)&&u.value[0]===a.TokenType.Percentage&&u.value[4].value>=0){i=u.value[4].value;continue}}return!1}if(!l)return!1;n.push({color:l,percentage:i}),l=!1,i=!1}}if(l&&n.push({color:l,percentage:i}),2!==n.length)return!1;let u=n[0].percentage,c=n[1].percentage;return(!1===u||!(u<0||u>100))&&((!1===c||!(c<0||c>100))&&(!1===u&&!1===c?(u=50,c=50):!1!==u&&!1===c?c=100-u:!1===u&&!1!==c&&(u=100-c),(0!==u||0!==c)&&(!1!==u&&!1!==c&&(u+c>100&&(u=u/(u+c)*100,c=c/(u+c)*100),u+c<100&&(s=(u+c)/100,u=u/(u+c)*100,c=c/(u+c)*100),{a:{color:n[0].color,percentage:u},b:{color:n[1].color,percentage:c},alphaMultiplier:s}))))}function colorMixRectangular(e,o){if(!o)return!1;const a=o.a.color,n=o.b.color,t=o.a.percentage/100;let r=a.channels,s=n.channels,l=exports.ColorNotation.RGB,i=a.alpha;if("number"!=typeof i)return!1;let u=n.alpha;if("number"!=typeof u)return!1;switch(i=Number.isNaN(i)?u:i,u=Number.isNaN(u)?i:u,e){case"srgb":l=exports.ColorNotation.RGB,a.colorNotation!==exports.ColorNotation.RGB&&a.colorNotation!==exports.ColorNotation.sRGB&&a.colorNotation!==exports.ColorNotation.HEX&&(r=colorDataTo(a,exports.ColorNotation.RGB).channels),n.colorNotation!==exports.ColorNotation.RGB&&n.colorNotation!==exports.ColorNotation.sRGB&&n.colorNotation!==exports.ColorNotation.HEX&&(s=colorDataTo(n,exports.ColorNotation.RGB).channels);break;case"srgb-linear":l=exports.ColorNotation.Linear_sRGB,a.colorNotation!==exports.ColorNotation.Linear_sRGB&&(r=colorDataTo(a,exports.ColorNotation.Linear_sRGB).channels),n.colorNotation!==exports.ColorNotation.Linear_sRGB&&(s=colorDataTo(n,exports.ColorNotation.Linear_sRGB).channels);break;case"lab":l=exports.ColorNotation.Lab,a.colorNotation!==exports.ColorNotation.Lab&&(r=colorDataTo(a,exports.ColorNotation.Lab).channels),n.colorNotation!==exports.ColorNotation.Lab&&(s=colorDataTo(n,exports.ColorNotation.Lab).channels);break;case"oklab":l=exports.ColorNotation.OKLab,a.colorNotation!==exports.ColorNotation.OKLab&&(r=colorDataTo(a,exports.ColorNotation.OKLab).channels),n.colorNotation!==exports.ColorNotation.OKLab&&(s=colorDataTo(n,exports.ColorNotation.OKLab).channels);break;case"xyz-d50":l=exports.ColorNotation.XYZ_D50,a.colorNotation!==exports.ColorNotation.XYZ_D50&&(r=colorDataTo(a,exports.ColorNotation.XYZ_D50).channels),n.colorNotation!==exports.ColorNotation.XYZ_D50&&(s=colorDataTo(n,exports.ColorNotation.XYZ_D50).channels);break;case"xyz":case"xyz-d65":l=exports.ColorNotation.XYZ_D65,a.colorNotation!==exports.ColorNotation.XYZ_D65&&(r=colorDataTo(a,exports.ColorNotation.XYZ_D65).channels),n.colorNotation!==exports.ColorNotation.XYZ_D65&&(s=colorDataTo(n,exports.ColorNotation.XYZ_D65).channels)}r=fillInMissingComponents(r,s),s=fillInMissingComponents(s,r),r[0]=premultiply(r[0],i),r[1]=premultiply(r[1],i),r[2]=premultiply(r[2],i),s[0]=premultiply(s[0],u),s[1]=premultiply(s[1],u),s[2]=premultiply(s[2],u);const c=interpolate(i,u,t);return{colorNotation:l,channels:[un_premultiply(interpolate(r[0],s[0],t),c),un_premultiply(interpolate(r[1],s[1],t),c),un_premultiply(interpolate(r[2],s[2],t),c)],alpha:c*o.alphaMultiplier,syntaxFlags:new Set([exports.SyntaxFlag.ColorMix])}}function colorMixPolar(e,o,a){if(!a)return!1;const n=a.a.color,t=a.b.color,r=a.a.percentage/100;let s=n.channels,l=t.channels,i=0,u=0,c=0,p=0,N=0,m=0,h=exports.ColorNotation.RGB,x=n.alpha;if("number"!=typeof x)return!1;let y=t.alpha;if("number"!=typeof y)return!1;switch(x=Number.isNaN(x)?y:x,y=Number.isNaN(y)?x:y,e){case"hsl":h=exports.ColorNotation.HSL,n.colorNotation!==exports.ColorNotation.HSL&&(s=colorDataTo(n,exports.ColorNotation.HSL).channels),t.colorNotation!==exports.ColorNotation.HSL&&(l=colorDataTo(t,exports.ColorNotation.HSL).channels);break;case"hwb":h=exports.ColorNotation.HWB,n.colorNotation!==exports.ColorNotation.HWB&&(s=colorDataTo(n,exports.ColorNotation.HWB).channels),t.colorNotation!==exports.ColorNotation.HWB&&(l=colorDataTo(t,exports.ColorNotation.HWB).channels);break;case"lch":h=exports.ColorNotation.LCH,n.colorNotation!==exports.ColorNotation.LCH&&(s=colorDataTo(n,exports.ColorNotation.LCH).channels),t.colorNotation!==exports.ColorNotation.LCH&&(l=colorDataTo(t,exports.ColorNotation.LCH).channels);break;case"oklch":h=exports.ColorNotation.OKLCH,n.colorNotation!==exports.ColorNotation.OKLCH&&(s=colorDataTo(n,exports.ColorNotation.OKLCH).channels),t.colorNotation!==exports.ColorNotation.OKLCH&&(l=colorDataTo(t,exports.ColorNotation.OKLCH).channels)}switch(s=fillInMissingComponents(s,l),l=fillInMissingComponents(l,s),e){case"hsl":case"hwb":i=s[0],u=l[0],c=s[1],p=l[1],N=s[2],m=l[2];break;case"lch":case"oklch":c=s[0],p=l[0],N=s[1],m=l[1],i=s[2],u=l[2]}const C=u-i;switch(o){case"shorter":C>180?i+=360:C<-180&&(u+=360);break;case"longer":-180<C&&C<180&&(C>0?i+=360:u+=360);break;case"increasing":C<0&&(u+=360);break;case"decreasing":C>0&&(i+=360);break;default:throw new Error("Unknown hue interpolation method")}c=premultiply(c,x),N=premultiply(N,x),p=premultiply(p,y),m=premultiply(m,y);let b=[0,0,0];const T=interpolate(x,y,r);switch(e){case"hsl":case"hwb":b=[interpolate(i,u,r),un_premultiply(interpolate(c,p,r),T),un_premultiply(interpolate(N,m,r),T)];break;case"lch":case"oklch":b=[un_premultiply(interpolate(c,p,r),T),un_premultiply(interpolate(N,m,r),T),interpolate(i,u,r)]}return{colorNotation:h,channels:b,alpha:T*a.alphaMultiplier,syntaxFlags:new Set([exports.SyntaxFlag.ColorMix])}}function interpolate(e,o,a){return Number.isNaN(e)?o:Number.isNaN(o)?e:e*a+o*(1-a)}function premultiply(e,o){return Number.isNaN(o)?e:Number.isNaN(e)?NaN:e*o}function un_premultiply(e,o){return 0===o||Number.isNaN(o)?e:Number.isNaN(e)?NaN:e/o}function hex(e){const o=toLowerCaseAZ(e[4].value);if(o.match(/[^a-f0-9]/))return!1;const a={colorNotation:exports.ColorNotation.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([exports.SyntaxFlag.Hex])},n=o.length;if(3===n){const e=o[0],n=o[1],t=o[2];return a.channels=[parseInt(e+e,16)/255,parseInt(n+n,16)/255,parseInt(t+t,16)/255],a}if(6===n){const e=o[0]+o[1],n=o[2]+o[3],t=o[4]+o[5];return a.channels=[parseInt(e,16)/255,parseInt(n,16)/255,parseInt(t,16)/255],a}if(4===n){const e=o[0],n=o[1],t=o[2],r=o[3];return a.channels=[parseInt(e+e,16)/255,parseInt(n+n,16)/255,parseInt(t+t,16)/255],a.alpha=parseInt(r+r,16)/255,a.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),a}if(8===n){const e=o[0]+o[1],n=o[2]+o[3],t=o[4]+o[5],r=o[6]+o[7];return a.channels=[parseInt(e,16)/255,parseInt(n,16)/255,parseInt(t,16)/255],a.alpha=parseInt(r,16)/255,a.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),a}return!1}function normalizeHue(e){if(e[0]===a.TokenType.Number)return e[4].value=e[4].value%360,e[1]=e[4].value.toString(),e;if(e[0]===a.TokenType.Dimension){let o=e[4].value;switch(toLowerCaseAZ(e[4].unit)){case"deg":break;case"rad":o=180*e[4].value/Math.PI;break;case"grad":o=.9*e[4].value;break;case"turn":o=360*e[4].value;break;default:return!1}return o%=360,[a.TokenType.Number,o.toString(),e[2],e[3],{value:o,type:a.NumberType.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(0!==t)if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,1,0,100);3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3===t?o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let e=normalize(r[4].value,1,0,100);3===t&&(e=normalize(r[4].value,100,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}else{const e=normalizeHue(r);if(!1===e)return!1;r[0]===a.TokenType.Dimension&&o.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),n.push(e)}}return!o.syntaxFlags.has(exports.SyntaxFlag.HasNumberValues)&&n}function normalize_modern_HSL_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(r[0]!==a.TokenType.Ident||"none"!==toLowerCaseAZ(r[4].value))if(0!==t)if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,1,0,100);3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3===t?o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let e=normalize(r[4].value,1,0,100);3===t&&(e=normalize(r[4].value,100,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}else{const e=normalizeHue(r);if(!1===e)return!1;r[0]===a.TokenType.Dimension&&o.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),n.push(e)}else o.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),n.push([a.TokenType.Number,"none",r[2],r[3],{value:NaN,type:a.NumberType.Number}])}return n}function threeChannelLegacySyntax(e,o,n,s){const l=[],i=[],u=[],c=[],p={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(s)};let N=l;for(let o=0;o<e.value.length;o++){let n=e.value[o];if(!t.isWhitespaceNode(n)&&!t.isCommentNode(n)){if(t.isTokenNode(n)&&n.value[0]===a.TokenType.Comma){if(N===l){N=i;continue}if(N===i){N=u;continue}if(N===u){N=c;continue}if(N===c)return!1}if(t.isFunctionNode(n)){if(N===c&&"var"===toLowerCaseAZ(n.getName())){p.syntaxFlags.add(exports.SyntaxFlag.HasVariableAlpha),N.push(n);continue}if(!r.mathFunctionNames.has(toLowerCaseAZ(n.getName())))return!1;const[[e]]=r.calcFromComponentValues([[n]],{toCanonicalUnits:!0,precision:100});if(!e||!t.isTokenNode(e)||(e.value[0]===a.TokenType.Percentage||e.value[0]===a.TokenType.Number||e.value[0]===a.TokenType.Dimension)&&Number.isNaN(e.value[4].value))return!1;n=e}if(!t.isTokenNode(n))return!1;N.push(n)}}if(1!==N.length)return!1;if(1!==l.length||1!==i.length||1!==u.length)return!1;if(!t.isTokenNode(l[0])||!t.isTokenNode(i[0])||!t.isTokenNode(u[0]))return!1;const m=[l[0].value,i[0].value,u[0].value];1===c.length&&(p.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),t.isTokenNode(c[0])?m.push(c[0].value):p.alpha=c[0]);const h=o(m,p);return!1!==h&&(p.channels=[h[0][4].value,h[1][4].value,h[2][4].value],4===h.length&&(p.alpha=h[3][4].value),p)}function XYZ_D50_to_sRGB_Gamut(e){const o=n.xyz.XYZ_D50_to_sRGB(e);if(n.utils.inGamut(o))return n.utils.clip(o);let a=e.slice();return a=n.conversions.D50_to_D65(a),a=n.conversions.XYZ_to_OKLab(a),a=n.conversions.OKLab_to_OKLCH(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),n.calculations.mapGamut(a,(e=>(e=n.conversions.OKLCH_to_OKLab(e),e=n.conversions.OKLab_to_XYZ(e),e=n.conversions.XYZ_to_lin_sRGB(e),n.conversions.gam_sRGB(e))),(e=>(e=n.conversions.lin_sRGB(e),e=n.conversions.lin_sRGB_to_XYZ(e),e=n.conversions.XYZ_to_OKLab(e),n.conversions.OKLab_to_OKLCH(e))))}function threeChannelSpaceSeparated(e,o,s,l,i){const u=toLowerCaseAZ(e.getName()),c=[],p=[],N=[],m=[];let h,x,y=!1;const C={colorNotation:s,channels:[0,0,0],alpha:1,syntaxFlags:new Set(l)};let b=c;for(let o=0;o<e.value.length;o++){let l=e.value[o];if(t.isWhitespaceNode(l)||t.isCommentNode(l))for(;t.isWhitespaceNode(e.value[o+1])||t.isCommentNode(e.value[o+1]);)o++;else if(b===c&&c.length&&(b=p),b===p&&p.length&&(b=N),t.isTokenNode(l)&&l.value[0]===a.TokenType.Delim&&"/"===l.value[4].value){if(b===m)return!1;b=m}else{if(t.isFunctionNode(l)){if(b===m&&"var"===toLowerCaseAZ(l.getName())){C.syntaxFlags.add(exports.SyntaxFlag.HasVariableAlpha),b.push(l);continue}if(!r.mathFunctionNames.has(toLowerCaseAZ(l.getName())))return!1;const[[e]]=r.calcFromComponentValues([[l]],{toCanonicalUnits:!0,precision:100,globals:x});if(!e||!t.isTokenNode(e)||(e.value[0]===a.TokenType.Percentage||e.value[0]===a.TokenType.Number||e.value[0]===a.TokenType.Dimension)&&Number.isNaN(e.value[4].value))return!1;l=e}if(b===c&&0===c.length&&t.isTokenNode(l)&&l.value[0]===a.TokenType.Ident&&"from"===toLowerCaseAZ(l.value[4].value)&&"hsla"!==u&&"rgba"!==u){if(y)return!1;for(;t.isWhitespaceNode(e.value[o+1])||t.isCommentNode(e.value[o+1]);)o++;if(o++,l=e.value[o],y=i(l),!1===y)return!1;C.syntaxFlags.add(exports.SyntaxFlag.RelativeColorSyntax),y.colorNotation!==s&&(y=colorDataTo(y,s)),s===exports.ColorNotation.HEX||s===exports.ColorNotation.RGB?y.channels=XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(y).channels):s===exports.ColorNotation.HSL?y.channels=n.conversions.sRGB_to_HSL(XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(y).channels)):s===exports.ColorNotation.HWB&&(y.channels=n.conversions.sRGB_to_HWB(XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(y).channels))),h=normalizeRelativeColorDataChannels(y),x=noneToZeroInRelativeColorDataChannels(h)}else{if(!t.isTokenNode(l))return!1;if(l.value[0]===a.TokenType.Ident&&h&&h.has(toLowerCaseAZ(l.value[4].value))){b.push(new t.TokenNode(h.get(toLowerCaseAZ(l.value[4].value))));continue}b.push(l)}}}if(1!==b.length)return!1;if(1!==c.length||1!==p.length||1!==N.length)return!1;if(!t.isTokenNode(c[0])||!t.isTokenNode(p[0])||!t.isTokenNode(N[0]))return!1;if(h&&!h.has("alpha"))return!1;const T=[c[0].value,p[0].value,N[0].value];1===m.length?(C.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),t.isTokenNode(m[0])?T.push(m[0].value):C.alpha=m[0]):h&&h.has("alpha")&&T.push(h.get("alpha"));const d=o(T,C);return!1!==d&&(C.channels=[d[0][4].value,d[1][4].value,d[2][4].value],4===d.length&&(C.alpha=d[3][4].value),C)}function hsl(e,o){if(e.value.some((e=>t.isTokenNode(e)&&e.value[0]===a.TokenType.Comma))){const o=hslCommaSeparated(e);if(!1!==o)return o}{const a=hslSpaceSeparated(e,o);if(!1!==a)return a}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,exports.ColorNotation.HSL,[exports.SyntaxFlag.LegacyHSL])}function hslSpaceSeparated(e,o){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,exports.ColorNotation.HSL,[],o)}function normalize_HWB_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(r[0]!==a.TokenType.Ident||"none"!==toLowerCaseAZ(r[4].value))if(0!==t)if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,1,0,100);3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3===t?o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let e=normalize(r[4].value,1,0,100);3===t&&(e=normalize(r[4].value,100,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}else{const e=normalizeHue(r);if(!1===e)return!1;r[0]===a.TokenType.Dimension&&o.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),n.push(e)}else o.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),n.push([a.TokenType.Number,"none",r[2],r[3],{value:NaN,type:a.NumberType.Number}])}return n}function normalize_Lab_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(r[0]!==a.TokenType.Ident||"none"!==toLowerCaseAZ(r[4].value))if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,1,0,100);1===t||2===t?e=normalize(r[4].value,1,-1/0,1/0):3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let e=normalize(r[4].value,1,0,100);1===t||2===t?e=normalize(r[4].value,.8,-1/0,1/0):3===t&&(e=normalize(r[4].value,100,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}else o.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),n.push([a.TokenType.Number,"none",r[2],r[3],{value:NaN,type:a.NumberType.Number}])}return n}function lab(e,o){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,exports.ColorNotation.Lab,[],o)}function normalize_LCH_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(r[0]!==a.TokenType.Ident||"none"!==toLowerCaseAZ(r[4].value))if(2!==t)if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,1,0,100);1===t?e=normalize(r[4].value,1,0,1/0):3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let e=normalize(r[4].value,1,0,100);1===t?e=normalize(r[4].value,100/150,0,1/0):3===t&&(e=normalize(r[4].value,100,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}else{const e=normalizeHue(r);if(!1===e)return!1;r[0]===a.TokenType.Dimension&&o.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),n.push(e)}else o.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),n.push([a.TokenType.Number,"none",r[2],r[3],{value:NaN,type:a.NumberType.Number}])}return n}function lch(e,o){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,exports.ColorNotation.LCH,[],o)}const N=new Map;for(const[e,o]of Object.entries(n.namedColors))N.set(e,o);function namedColor(e){const o=N.get(toLowerCaseAZ(e));return!!o&&{colorNotation:exports.ColorNotation.RGB,channels:[o[0]/255,o[1]/255,o[2]/255],alpha:1,syntaxFlags:new Set([exports.SyntaxFlag.ColorKeyword,exports.SyntaxFlag.NamedColor])}}function normalize_OKLab_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(r[0]!==a.TokenType.Ident||"none"!==toLowerCaseAZ(r[4].value))if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,1,0,1);1===t||2===t?e=normalize(r[4].value,1,-1/0,1/0):3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let e=normalize(r[4].value,100,0,1);1===t||2===t?e=normalize(r[4].value,250,-1/0,1/0):3===t&&(e=normalize(r[4].value,100,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}else o.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),n.push([a.TokenType.Number,"none",r[2],r[3],{value:NaN,type:a.NumberType.Number}])}return n}function oklab(e,o){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,exports.ColorNotation.OKLab,[],o)}function normalize_OKLCH_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(r[0]!==a.TokenType.Ident||"none"!==toLowerCaseAZ(r[4].value))if(2!==t)if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,1,0,1);1===t?e=normalize(r[4].value,1,0,1/0):3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let e=normalize(r[4].value,100,0,1);1===t?e=normalize(r[4].value,250,0,1/0):3===t&&(e=normalize(r[4].value,100,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}else{const e=normalizeHue(r);if(!1===e)return!1;r[0]===a.TokenType.Dimension&&o.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),n.push(e)}else o.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),n.push([a.TokenType.Number,"none",r[2],r[3],{value:NaN,type:a.NumberType.Number}])}return n}function oklch(e,o){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,exports.ColorNotation.OKLCH,[],o)}function normalize_legacy_sRGB_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,255,0,1);3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3===t?o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);const e=normalize(r[4].value,100,0,1);n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}return(!o.syntaxFlags.has(exports.SyntaxFlag.HasNumberValues)||!o.syntaxFlags.has(exports.SyntaxFlag.HasPercentageValues))&&n}function normalize_modern_sRGB_ChannelValues(e,o){const n=[];for(let t=0;t<e.length;t++){const r=e[t];if(r[0]!==a.TokenType.Ident||"none"!==toLowerCaseAZ(r[4].value))if(r[0]!==a.TokenType.Percentage){if(r[0]!==a.TokenType.Number)return!1;{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let e=normalize(r[4].value,255,0,1);3===t&&(e=normalize(r[4].value,1,0,1)),n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}}else{3!==t&&o.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);const e=normalize(r[4].value,100,0,1);n.push([a.TokenType.Number,e.toString(),r[2],r[3],{value:e,type:a.NumberType.Number}])}else o.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),n.push([a.TokenType.Number,"none",r[2],r[3],{value:NaN,type:a.NumberType.Number}])}return n}function rgb(e,o){if(e.value.some((e=>t.isTokenNode(e)&&e.value[0]===a.TokenType.Comma))){const o=rgbCommaSeparated(e);if(!1!==o)return o}else{const a=rgbSpaceSeparated(e,o);if(!1!==a)return a}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,exports.ColorNotation.RGB,[exports.SyntaxFlag.LegacyRGB])}function rgbSpaceSeparated(e,o){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,exports.ColorNotation.RGB,[],o)}function toPrecision(e,o=7){e=+e,o=+o;const a=(Math.floor(e)+"").length;if(o>a)return+e.toFixed(o-a);{const n=10**(a-o);return Math.round(e/n)*n}}function XYZ_D50_to_P3_Gamut(e){const o=n.xyz.XYZ_D50_to_P3(e);if(n.utils.inGamut(o))return n.utils.clip(o);let a=e.slice();return a=n.conversions.D50_to_D65(a),a=n.conversions.XYZ_to_OKLab(a),a=n.conversions.OKLab_to_OKLCH(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),n.calculations.mapGamut(a,(e=>(e=n.conversions.OKLCH_to_OKLab(e),e=n.conversions.OKLab_to_XYZ(e),e=n.conversions.XYZ_to_lin_P3(e),n.conversions.gam_P3(e))),(e=>(e=n.conversions.lin_P3(e),e=n.conversions.lin_P3_to_XYZ(e),e=n.conversions.XYZ_to_OKLab(e),n.conversions.OKLab_to_OKLCH(e))))}exports.color=function color(e){if(t.isFunctionNode(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return o=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,exports.ColorNotation.HWB,[],o);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)}}var o;if(t.isTokenNode(e)){if(e.value[0]===a.TokenType.Hash)return hex(e.value);if(e.value[0]===a.TokenType.Ident){const o=namedColor(e.value[4].value);return!1!==o?o:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:exports.ColorNotation.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([exports.SyntaxFlag.ColorKeyword])}}}return!1},exports.colorDataFitsRGB_Gamut=function colorDataFitsRGB_Gamut(e){const o=JSON.parse(JSON.stringify(e));return o.channels=convertPowerlessComponentsToZeroValuesForDisplay(o.channels,o.colorNotation),!colorDataTo(o,exports.ColorNotation.RGB).channels.find((e=>e<-1e-5||e>1.00001))},exports.colorDataTo=colorDataTo,exports.serializeP3=function serializeP3(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));e.colorNotation!==exports.ColorNotation.Display_P3&&(r=o?XYZ_D50_to_P3_Gamut(colorData_to_XYZ_D50(e).channels):n.xyz.XYZ_D50_to_P3(colorData_to_XYZ_D50(e).channels));const s=toPrecision(r[0],6),l=toPrecision(r[1],6),i=toPrecision(r[2],6),u=[a.TokenType.Function,"color(",-1,-1,{value:"color"}],c=[a.TokenType.CloseParen,")",-1,-1,void 0],p=[a.TokenType.Whitespace," ",-1,-1,void 0],N=[new t.TokenNode([a.TokenType.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new t.TokenNode(p),new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:r[0],type:a.NumberType.Number}]),new t.TokenNode(p),new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[1],type:a.NumberType.Number}]),new t.TokenNode(p),new t.TokenNode([a.TokenType.Number,i.toString(),-1,-1,{value:r[2],type:a.NumberType.Number}])];if("number"==typeof e.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(o,4)?new t.FunctionNode(u,c,N):new t.FunctionNode(u,c,[...N,new t.TokenNode(p),new t.TokenNode([a.TokenType.Delim,"/",-1,-1,{value:"/"}]),new t.TokenNode(p),new t.TokenNode([a.TokenType.Number,toPrecision(o,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Integer}])])}return new t.FunctionNode(u,c,[...N,new t.TokenNode(p),new t.TokenNode([a.TokenType.Delim,"/",-1,-1,{value:"/"}]),new t.TokenNode(p),e.alpha])},exports.serializeRGB=function serializeRGB(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));e.colorNotation===exports.ColorNotation.HWB?r=n.conversions.HWB_to_sRGB(r):e.colorNotation===exports.ColorNotation.HSL?r=n.conversions.HSL_to_sRGB(r):e.colorNotation!==exports.ColorNotation.RGB&&e.colorNotation!==exports.ColorNotation.HEX&&(r=o?XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(e).channels):n.xyz.XYZ_D50_to_sRGB(colorData_to_XYZ_D50(e).channels));const s=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])))),i=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[2])))),u=[a.TokenType.CloseParen,")",-1,-1,void 0],c=[a.TokenType.Whitespace," ",-1,-1,void 0],p=[a.TokenType.Comma,",",-1,-1,void 0],N=[new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:r[0],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.TokenNode(c),new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[1],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.TokenNode(c),new t.TokenNode([a.TokenType.Number,i.toString(),-1,-1,{value:r[2],type:a.NumberType.Integer}])];if("number"==typeof e.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(o,4)?new t.FunctionNode([a.TokenType.Function,"rgb(",-1,-1,{value:"rgb"}],u,N):new t.FunctionNode([a.TokenType.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...N,new t.TokenNode(p),new t.TokenNode(c),new t.TokenNode([a.TokenType.Number,toPrecision(o,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Number}])])}return new t.FunctionNode([a.TokenType.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...N,new t.TokenNode(p),new t.TokenNode(c),e.alpha])};
|
|
1
|
+
"use strict";var e,o,a=require("@csstools/css-tokenizer"),n=require("@csstools/color-helpers"),t=require("@csstools/css-parser-algorithms"),r=require("@csstools/css-calc");function colorData_to_XYZ_D50(e){switch(e.colorNotation){case exports.ColorNotation.HEX:case exports.ColorNotation.RGB:case exports.ColorNotation.sRGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Linear_sRGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.lin_sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Display_P3:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.P3_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Rec2020:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.rec_2020_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.A98_RGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.a98_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.ProPhoto_RGB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.ProPhoto_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.HSL:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.HSL_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.HWB:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.HWB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.Lab:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.Lab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.OKLab:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.OKLab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.LCH:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.LCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.OKLCH:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.OKLCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.XYZ_D50:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.XYZ_D50_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case exports.ColorNotation.XYZ_D65:return{...e,colorNotation:exports.ColorNotation.XYZ_D50,channels:n.xyz.XYZ_D65_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};default:throw new Error("Unsupported color notation")}}exports.ColorNotation=void 0,(e=exports.ColorNotation||(exports.ColorNotation={})).A98_RGB="a98-rgb",e.Display_P3="display-p3",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",exports.SyntaxFlag=void 0,(o=exports.SyntaxFlag||(exports.SyntaxFlag={})).ColorKeyword="color-keyword",o.HasAlpha="has-alpha",o.HasDimensionValues="has-dimension-values",o.HasNoneKeywords="has-none-keywords",o.HasNumberValues="has-number-values",o.HasPercentageAlpha="has-percentage-alpha",o.HasPercentageValues="has-percentage-values",o.HasVariableAlpha="has-variable-alpha",o.Hex="hex",o.LegacyHSL="legacy-hsl",o.LegacyRGB="legacy-rgb",o.NamedColor="named-color",o.RelativeColorSyntax="relative-color-syntax",o.ColorMix="color-mix";const s=new Set([exports.ColorNotation.A98_RGB,exports.ColorNotation.Display_P3,exports.ColorNotation.HEX,exports.ColorNotation.Linear_sRGB,exports.ColorNotation.ProPhoto_RGB,exports.ColorNotation.RGB,exports.ColorNotation.sRGB,exports.ColorNotation.Rec2020,exports.ColorNotation.XYZ_D50,exports.ColorNotation.XYZ_D65]);function colorDataTo(e,o){const a={...e};if(e.colorNotation!==o){const e=colorData_to_XYZ_D50(a);switch(o){case exports.ColorNotation.HEX:case exports.ColorNotation.RGB:a.colorNotation=exports.ColorNotation.RGB,a.channels=n.xyz.XYZ_D50_to_sRGB(e.channels);break;case exports.ColorNotation.sRGB:a.colorNotation=exports.ColorNotation.sRGB,a.channels=n.xyz.XYZ_D50_to_sRGB(e.channels);break;case exports.ColorNotation.Linear_sRGB:a.colorNotation=exports.ColorNotation.Linear_sRGB,a.channels=n.xyz.XYZ_D50_to_lin_sRGB(e.channels);break;case exports.ColorNotation.Display_P3:a.colorNotation=exports.ColorNotation.Display_P3,a.channels=n.xyz.XYZ_D50_to_P3(e.channels);break;case exports.ColorNotation.Rec2020:a.colorNotation=exports.ColorNotation.Rec2020,a.channels=n.xyz.XYZ_D50_to_rec_2020(e.channels);break;case exports.ColorNotation.ProPhoto_RGB:a.colorNotation=exports.ColorNotation.ProPhoto_RGB,a.channels=n.xyz.XYZ_D50_to_ProPhoto(e.channels);break;case exports.ColorNotation.A98_RGB:a.colorNotation=exports.ColorNotation.A98_RGB,a.channels=n.xyz.XYZ_D50_to_a98_RGB(e.channels);break;case exports.ColorNotation.HSL:a.colorNotation=exports.ColorNotation.HSL,a.channels=n.xyz.XYZ_D50_to_HSL(e.channels);break;case exports.ColorNotation.HWB:a.colorNotation=exports.ColorNotation.HWB,a.channels=n.xyz.XYZ_D50_to_HWB(e.channels);break;case exports.ColorNotation.Lab:a.colorNotation=exports.ColorNotation.Lab,a.channels=n.xyz.XYZ_D50_to_Lab(e.channels);break;case exports.ColorNotation.LCH:a.colorNotation=exports.ColorNotation.LCH,a.channels=n.xyz.XYZ_D50_to_LCH(e.channels);break;case exports.ColorNotation.OKLCH:a.colorNotation=exports.ColorNotation.OKLCH,a.channels=n.xyz.XYZ_D50_to_OKLCH(e.channels);break;case exports.ColorNotation.OKLab:a.colorNotation=exports.ColorNotation.OKLab,a.channels=n.xyz.XYZ_D50_to_OKLab(e.channels);break;case exports.ColorNotation.XYZ_D50:a.colorNotation=exports.ColorNotation.XYZ_D50,a.channels=n.xyz.XYZ_D50_to_XYZ_D50(e.channels);break;case exports.ColorNotation.XYZ_D65:a.colorNotation=exports.ColorNotation.XYZ_D65,a.channels=n.xyz.XYZ_D50_to_XYZ_D65(e.channels);break;default:throw new Error("Unsupported color notation")}}else a.channels=e.channels.map((e=>Number.isNaN(e)?0:e));if(o===e.colorNotation)a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2]);else if(s.has(o)&&s.has(e.colorNotation))a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2]);else switch(o){case exports.ColorNotation.HSL:switch(e.colorNotation){case exports.ColorNotation.HWB:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:a.channels=carryForwardMissingComponents(e.channels,[2],a.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[2,1,0])}break;case exports.ColorNotation.HWB:switch(e.colorNotation){case exports.ColorNotation.HSL:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[2])}break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:switch(e.colorNotation){case exports.ColorNotation.HSL:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[2]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0])}break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:switch(e.colorNotation){case exports.ColorNotation.HSL:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[2,1,0]);break;case exports.ColorNotation.HWB:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[2]);break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:a.channels=carryForwardMissingComponents(e.channels,[0],a.channels,[0]);break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:a.channels=carryForwardMissingComponents(e.channels,[0,1,2],a.channels,[0,1,2])}}return a.channels=convertPowerlessComponentsToMissingComponents(a.channels,o),a}function convertPowerlessComponentsToMissingComponents(e,o){const a=[...e];switch(o){case exports.ColorNotation.HSL:reducePrecision(a[1],4)<=0&&(a[0]=NaN);break;case exports.ColorNotation.HWB:Math.max(0,reducePrecision(a[1],4))+Math.max(0,reducePrecision(a[2],4))>=100&&(a[0]=NaN);break;case exports.ColorNotation.LCH:reducePrecision(a[1],4)<=0&&(a[2]=NaN);break;case exports.ColorNotation.OKLCH:reducePrecision(a[1],6)<=0&&(a[2]=NaN)}return a}function convertPowerlessComponentsToZeroValuesForDisplay(e,o){const a=[...e];switch(o){case exports.ColorNotation.HSL:(reducePrecision(a[2])<=0||reducePrecision(a[2])>=100)&&(a[0]=NaN,a[1]=NaN),reducePrecision(a[1])<=0&&(a[0]=NaN);break;case exports.ColorNotation.HWB:Math.max(0,reducePrecision(a[1]))+Math.max(0,reducePrecision(a[2]))>=100&&(a[0]=NaN);break;case exports.ColorNotation.Lab:(reducePrecision(a[0])<=0||reducePrecision(a[0])>=100)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.LCH:reducePrecision(a[1])<=0&&(a[2]=NaN),(reducePrecision(a[0])<=0||reducePrecision(a[0])>=100)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.OKLab:(reducePrecision(a[0])<=0||reducePrecision(a[0])>=1)&&(a[1]=NaN,a[2]=NaN);break;case exports.ColorNotation.OKLCH:reducePrecision(a[1])<=0&&(a[2]=NaN),(reducePrecision(a[0])<=0||reducePrecision(a[0])>=1)&&(a[1]=NaN,a[2]=NaN)}return a}function carryForwardMissingComponents(e,o,a,n){const t=[...a];for(const a of o)Number.isNaN(e[o[a]])&&(t[n[a]]=NaN);return t}function normalizeRelativeColorDataChannels(e){const o=new Map;switch(e.colorNotation){case exports.ColorNotation.RGB:case exports.ColorNotation.HEX:o.set("r",dummyNumberToken(255*e.channels[0])),o.set("g",dummyNumberToken(255*e.channels[1])),o.set("b",dummyNumberToken(255*e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.HSL:o.set("h",dummyNumberToken(e.channels[0])),o.set("s",dummyNumberToken(e.channels[1])),o.set("l",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.HWB:o.set("h",dummyNumberToken(e.channels[0])),o.set("w",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.Lab:case exports.ColorNotation.OKLab:o.set("l",dummyNumberToken(e.channels[0])),o.set("a",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.LCH:case exports.ColorNotation.OKLCH:o.set("l",dummyNumberToken(e.channels[0])),o.set("c",dummyNumberToken(e.channels[1])),o.set("h",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.sRGB:case exports.ColorNotation.A98_RGB:case exports.ColorNotation.Display_P3:case exports.ColorNotation.Rec2020:case exports.ColorNotation.Linear_sRGB:case exports.ColorNotation.ProPhoto_RGB:o.set("r",dummyNumberToken(e.channels[0])),o.set("g",dummyNumberToken(e.channels[1])),o.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha));break;case exports.ColorNotation.XYZ_D50:case exports.ColorNotation.XYZ_D65:o.set("x",dummyNumberToken(e.channels[0])),o.set("y",dummyNumberToken(e.channels[1])),o.set("z",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&o.set("alpha",dummyNumberToken(e.alpha))}return o}function noneToZeroInRelativeColorDataChannels(e){const o=new Map;for(const[a,n]of e)Number.isNaN(n[4].value)?o.set(a,dummyNumberToken(0)):o.set(a,n);return o}function dummyNumberToken(e){return[a.TokenType.Number,e.toString(),-1,-1,{value:e,type:a.NumberType.Number}]}function reducePrecision(e,o=7){if(Number.isNaN(e))return 0;const a=Math.pow(10,o);return Math.round(e*a)/a}function normalize(e,o,a,n){return Math.min(Math.max(e/o,a),n)}const l=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(l,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function normalize_Color_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}const i=new Set(["srgb","srgb-linear","display-p3","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(e,o){const n=[],s=[],l=[],u=[];let c,p,N=!1,m=!1;const h={colorNotation:exports.ColorNotation.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let y=n;for(let x=0;x<e.value.length;x++){let b=e.value[x];if(t.isWhitespaceNode(b)||t.isCommentNode(b))for(;t.isWhitespaceNode(e.value[x+1])||t.isCommentNode(e.value[x+1]);)x++;else if(y===n&&n.length&&(y=s),y===s&&s.length&&(y=l),t.isTokenNode(b)&&b.value[0]===a.TokenType.Delim&&"/"===b.value[4].value){if(y===u)return!1;y=u}else{if(t.isFunctionNode(b)){if(y===u&&"var"===toLowerCaseAZ(b.getName())){h.syntaxFlags.add(exports.SyntaxFlag.HasVariableAlpha),y.push(b);continue}if(!r.mathFunctionNames.has(toLowerCaseAZ(b.getName())))return!1;const[[e]]=r.calcFromComponentValues([[b]],{toCanonicalUnits:!0,precision:100,globals:p});if(!e||!t.isTokenNode(e)||(e.value[0]===a.TokenType.Percentage||e.value[0]===a.TokenType.Number||e.value[0]===a.TokenType.Dimension)&&Number.isNaN(e.value[4].value))return!1;b=e}if(y===n&&0===n.length&&t.isTokenNode(b)&&b.value[0]===a.TokenType.Ident&&i.has(toLowerCaseAZ(b.value[4].value))){if(N)return!1;N=toLowerCaseAZ(b.value[4].value),h.colorNotation=colorSpaceNameToColorNotation(N),m&&(m.colorNotation!==h.colorNotation&&(m=colorDataTo(m,h.colorNotation)),c=normalizeRelativeColorDataChannels(m),p=noneToZeroInRelativeColorDataChannels(c))}else if(y===n&&0===n.length&&t.isTokenNode(b)&&b.value[0]===a.TokenType.Ident&&"from"===toLowerCaseAZ(b.value[4].value)){if(m)return!1;if(N)return!1;for(;t.isWhitespaceNode(e.value[x+1])||t.isCommentNode(e.value[x+1]);)x++;if(x++,b=e.value[x],m=o(b),!1===m)return!1;h.syntaxFlags.add(exports.SyntaxFlag.RelativeColorSyntax)}else{if(!t.isTokenNode(b))return!1;if(b.value[0]===a.TokenType.Ident&&c&&c.has(toLowerCaseAZ(b.value[4].value))){y.push(new t.TokenNode(c.get(toLowerCaseAZ(b.value[4].value))));continue}y.push(b)}}}if(!N)return!1;if(1!==y.length)return!1;if(1!==n.length||1!==s.length||1!==l.length)return!1;if(!t.isTokenNode(n[0])||!t.isTokenNode(s[0])||!t.isTokenNode(l[0]))return!1;if(c&&!c.has("alpha"))return!1;const x=normalize_Color_ChannelValues(n[0].value,0,h);if(!x||x[0]!==a.TokenType.Number)return!1;const b=normalize_Color_ChannelValues(s[0].value,1,h);if(!b||b[0]!==a.TokenType.Number)return!1;const T=normalize_Color_ChannelValues(l[0].value,2,h);if(!T||T[0]!==a.TokenType.Number)return!1;const C=[x,b,T];if(1===u.length)if(h.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),t.isTokenNode(u[0])){const e=normalize_Color_ChannelValues(u[0].value,3,h);if(!e||e[0]!==a.TokenType.Number)return!1;C.push(e)}else h.alpha=u[0];else if(c&&c.has("alpha")){const e=normalize_Color_ChannelValues(c.get("alpha"),3,h);if(!e||e[0]!==a.TokenType.Number)return!1;C.push(e)}return h.channels=[C[0][4].value,C[1][4].value,C[2][4].value],4===C.length&&(h.alpha=C[3][4].value),h}function colorSpaceNameToColorNotation(e){switch(e){case"srgb":return exports.ColorNotation.sRGB;case"srgb-linear":return exports.ColorNotation.Linear_sRGB;case"display-p3":return exports.ColorNotation.Display_P3;case"a98-rgb":return exports.ColorNotation.A98_RGB;case"prophoto-rgb":return exports.ColorNotation.ProPhoto_RGB;case"rec2020":return exports.ColorNotation.Rec2020;case"xyz":case"xyz-d65":return exports.ColorNotation.XYZ_D65;case"xyz-d50":return exports.ColorNotation.XYZ_D50;default:throw new Error("Unknown color space name: "+e)}}const u=new Set(["srgb","srgb-linear","lab","oklab","xyz","xyz-d50","xyz-d65"]),c=new Set(["hsl","hwb","lch","oklch"]),p=new Set(["shorter","longer","increasing","decreasing"]);function colorMix(e,o){let n=null,r=null,s=null,l=!1;for(let i=0;i<e.value.length;i++){const N=e.value[i];if(!t.isWhitespaceNode(N)&&!t.isCommentNode(N)){if(t.isTokenNode(N)&&N.value[0]===a.TokenType.Ident){if(!n&&"in"===toLowerCaseAZ(N.value[4].value)){n=N;continue}if(n&&!r){r=toLowerCaseAZ(N.value[4].value);continue}if(n&&r&&!s&&c.has(r)){s=toLowerCaseAZ(N.value[4].value);continue}if(n&&r&&s&&!l&&"hue"===toLowerCaseAZ(N.value[4].value)){l=!0;continue}return!1}return!(!t.isTokenNode(N)||N.value[0]!==a.TokenType.Comma)&&(!!r&&(s||l?!!(r&&s&&l&&c.has(r)&&p.has(s))&&colorMixPolar(r,s,colorMixComponents(e.value.slice(i+1),o)):u.has(r)?colorMixRectangular(r,colorMixComponents(e.value.slice(i+1),o)):!!c.has(r)&&colorMixPolar(r,"shorter",colorMixComponents(e.value.slice(i+1),o))))}}return!1}function colorMixComponents(e,o){const n=[];let s=1,l=!1,i=!1;for(let s=0;s<e.length;s++){let u=e[s];if(!t.isWhitespaceNode(u)&&!t.isCommentNode(u)){if(!t.isTokenNode(u)||u.value[0]!==a.TokenType.Comma){if(!l){const e=o(u);if(e){l=e;continue}}if(!i){if(t.isFunctionNode(u)&&r.mathFunctionNames.has(toLowerCaseAZ(u.getName()))&&([[u]]=r.calcFromComponentValues([[u]],{toCanonicalUnits:!0,precision:100}),!u||!t.isTokenNode(u)||(u.value[0]===a.TokenType.Percentage||u.value[0]===a.TokenType.Number||u.value[0]===a.TokenType.Dimension)&&Number.isNaN(u.value[4].value)))return!1;if(t.isTokenNode(u)&&u.value[0]===a.TokenType.Percentage&&u.value[4].value>=0){i=u.value[4].value;continue}}return!1}if(!l)return!1;n.push({color:l,percentage:i}),l=!1,i=!1}}if(l&&n.push({color:l,percentage:i}),2!==n.length)return!1;let u=n[0].percentage,c=n[1].percentage;return(!1===u||!(u<0||u>100))&&((!1===c||!(c<0||c>100))&&(!1===u&&!1===c?(u=50,c=50):!1!==u&&!1===c?c=100-u:!1===u&&!1!==c&&(u=100-c),(0!==u||0!==c)&&(!1!==u&&!1!==c&&(u+c>100&&(u=u/(u+c)*100,c=c/(u+c)*100),u+c<100&&(s=(u+c)/100,u=u/(u+c)*100,c=c/(u+c)*100),{a:{color:n[0].color,percentage:u},b:{color:n[1].color,percentage:c},alphaMultiplier:s}))))}function colorMixRectangular(e,o){if(!o)return!1;const a=o.a.color,n=o.b.color,t=o.a.percentage/100;let r=a.channels,s=n.channels,l=exports.ColorNotation.RGB,i=a.alpha;if("number"!=typeof i)return!1;let u=n.alpha;if("number"!=typeof u)return!1;switch(i=Number.isNaN(i)?u:i,u=Number.isNaN(u)?i:u,e){case"srgb":l=exports.ColorNotation.RGB;break;case"srgb-linear":l=exports.ColorNotation.Linear_sRGB;break;case"lab":l=exports.ColorNotation.Lab;break;case"oklab":l=exports.ColorNotation.OKLab;break;case"xyz-d50":l=exports.ColorNotation.XYZ_D50;break;case"xyz":case"xyz-d65":l=exports.ColorNotation.XYZ_D65}r=colorDataTo(a,l).channels,s=colorDataTo(n,l).channels,r[0]=premultiply(r[0],i),r[1]=premultiply(r[1],i),r[2]=premultiply(r[2],i),s[0]=premultiply(s[0],u),s[1]=premultiply(s[1],u),s[2]=premultiply(s[2],u);const c=interpolate(i,u,t);return{colorNotation:l,channels:[un_premultiply(interpolate(r[0],s[0],t),c),un_premultiply(interpolate(r[1],s[1],t),c),un_premultiply(interpolate(r[2],s[2],t),c)],alpha:c*o.alphaMultiplier,syntaxFlags:new Set([exports.SyntaxFlag.ColorMix])}}function colorMixPolar(e,o,a){if(!a)return!1;const n=a.a.color,t=a.b.color,r=a.a.percentage/100;let s=n.channels,l=t.channels,i=0,u=0,c=0,p=0,N=0,m=0,h=exports.ColorNotation.RGB,y=n.alpha;if("number"!=typeof y)return!1;let x=t.alpha;if("number"!=typeof x)return!1;switch(y=Number.isNaN(y)?x:y,x=Number.isNaN(x)?y:x,e){case"hsl":h=exports.ColorNotation.HSL;break;case"hwb":h=exports.ColorNotation.HWB;break;case"lch":h=exports.ColorNotation.LCH;break;case"oklch":h=exports.ColorNotation.OKLCH}switch(s=colorDataTo(n,h).channels,l=colorDataTo(t,h).channels,e){case"hsl":case"hwb":i=s[0],u=l[0],c=s[1],p=l[1],N=s[2],m=l[2];break;case"lch":case"oklch":c=s[0],p=l[0],N=s[1],m=l[1],i=s[2],u=l[2]}if(!Number.isNaN(i)&&!Number.isNaN(u)){const e=u-i;switch(o){case"shorter":e>180?i+=360:e<-180&&(u+=360);break;case"longer":-180<e&&e<180&&(e>0?i+=360:u+=360);break;case"increasing":e<0&&(u+=360);break;case"decreasing":e>0&&(i+=360);break;default:throw new Error("Unknown hue interpolation method")}}c=premultiply(c,y),N=premultiply(N,y),p=premultiply(p,x),m=premultiply(m,x);let b=[0,0,0];const T=interpolate(y,x,r);switch(e){case"hsl":case"hwb":b=[interpolate(i,u,r),un_premultiply(interpolate(c,p,r),T),un_premultiply(interpolate(N,m,r),T)];break;case"lch":case"oklch":b=[un_premultiply(interpolate(c,p,r),T),un_premultiply(interpolate(N,m,r),T),interpolate(i,u,r)]}return{colorNotation:h,channels:b,alpha:T*a.alphaMultiplier,syntaxFlags:new Set([exports.SyntaxFlag.ColorMix])}}function interpolate(e,o,a){return Number.isNaN(e)?o:Number.isNaN(o)?e:e*a+o*(1-a)}function premultiply(e,o){return Number.isNaN(o)?e:Number.isNaN(e)?NaN:e*o}function un_premultiply(e,o){return 0===o||Number.isNaN(o)?e:Number.isNaN(e)?NaN:e/o}function hex(e){const o=toLowerCaseAZ(e[4].value);if(o.match(/[^a-f0-9]/))return!1;const a={colorNotation:exports.ColorNotation.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([exports.SyntaxFlag.Hex])},n=o.length;if(3===n){const e=o[0],n=o[1],t=o[2];return a.channels=[parseInt(e+e,16)/255,parseInt(n+n,16)/255,parseInt(t+t,16)/255],a}if(6===n){const e=o[0]+o[1],n=o[2]+o[3],t=o[4]+o[5];return a.channels=[parseInt(e,16)/255,parseInt(n,16)/255,parseInt(t,16)/255],a}if(4===n){const e=o[0],n=o[1],t=o[2],r=o[3];return a.channels=[parseInt(e+e,16)/255,parseInt(n+n,16)/255,parseInt(t+t,16)/255],a.alpha=parseInt(r+r,16)/255,a.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),a}if(8===n){const e=o[0]+o[1],n=o[2]+o[3],t=o[4]+o[5],r=o[6]+o[7];return a.channels=[parseInt(e,16)/255,parseInt(n,16)/255,parseInt(t,16)/255],a.alpha=parseInt(r,16)/255,a.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),a}return!1}function normalizeHue(e){if(e[0]===a.TokenType.Number)return e[4].value=e[4].value%360,e[1]=e[4].value.toString(),e;if(e[0]===a.TokenType.Dimension){let o=e[4].value;switch(toLowerCaseAZ(e[4].unit)){case"deg":break;case"rad":o=180*e[4].value/Math.PI;break;case"grad":o=.9*e[4].value;break;case"turn":o=360*e[4].value;break;default:return!1}return o%=360,[a.TokenType.Number,o.toString(),e[2],e[3],{value:o,type:a.NumberType.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(e,o,n){if(0===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,1,0,100);return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){if(3!==o)return!1;let n=normalize(e[4].value,1,0,100);return 3===o&&(n=normalize(e[4].value,1,0,1)),[a.TokenType.Number,n.toString(),e[2],e[3],{value:n,type:a.NumberType.Number}]}return!1}function normalize_modern_HSL_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(0===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=e[4].value;return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=e[4].value;return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function threeChannelLegacySyntax(e,o,n,s){const l=[],i=[],u=[],c=[],p={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(s)};let N=l;for(let o=0;o<e.value.length;o++){let n=e.value[o];if(!t.isWhitespaceNode(n)&&!t.isCommentNode(n)){if(t.isTokenNode(n)&&n.value[0]===a.TokenType.Comma){if(N===l){N=i;continue}if(N===i){N=u;continue}if(N===u){N=c;continue}if(N===c)return!1}if(t.isFunctionNode(n)){if(N===c&&"var"===toLowerCaseAZ(n.getName())){p.syntaxFlags.add(exports.SyntaxFlag.HasVariableAlpha),N.push(n);continue}if(!r.mathFunctionNames.has(toLowerCaseAZ(n.getName())))return!1;const[[e]]=r.calcFromComponentValues([[n]],{toCanonicalUnits:!0,precision:100});if(!e||!t.isTokenNode(e)||(e.value[0]===a.TokenType.Percentage||e.value[0]===a.TokenType.Number||e.value[0]===a.TokenType.Dimension)&&Number.isNaN(e.value[4].value))return!1;n=e}if(!t.isTokenNode(n))return!1;N.push(n)}}if(1!==N.length)return!1;if(1!==l.length||1!==i.length||1!==u.length)return!1;if(!t.isTokenNode(l[0])||!t.isTokenNode(i[0])||!t.isTokenNode(u[0]))return!1;const m=o(l[0].value,0,p);if(!m||m[0]!==a.TokenType.Number)return!1;const h=o(i[0].value,1,p);if(!h||h[0]!==a.TokenType.Number)return!1;const y=o(u[0].value,2,p);if(!y||y[0]!==a.TokenType.Number)return!1;const x=[m,h,y];if(1===c.length)if(p.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),t.isTokenNode(c[0])){const e=o(c[0].value,3,p);if(!e||e[0]!==a.TokenType.Number)return!1;x.push(e)}else p.alpha=c[0];return p.channels=[x[0][4].value,x[1][4].value,x[2][4].value],4===x.length&&(p.alpha=x[3][4].value),p}function threeChannelSpaceSeparated(e,o,n,s,l){const i=toLowerCaseAZ(e.getName()),u=[],c=[],p=[],N=[];let m,h,y=!1;const x={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(s)};let b=u;for(let o=0;o<e.value.length;o++){let s=e.value[o];if(t.isWhitespaceNode(s)||t.isCommentNode(s))for(;t.isWhitespaceNode(e.value[o+1])||t.isCommentNode(e.value[o+1]);)o++;else if(b===u&&u.length&&(b=c),b===c&&c.length&&(b=p),t.isTokenNode(s)&&s.value[0]===a.TokenType.Delim&&"/"===s.value[4].value){if(b===N)return!1;b=N}else{if(t.isFunctionNode(s)){if(b===N&&"var"===toLowerCaseAZ(s.getName())){x.syntaxFlags.add(exports.SyntaxFlag.HasVariableAlpha),b.push(s);continue}if(!r.mathFunctionNames.has(toLowerCaseAZ(s.getName())))return!1;const[[e]]=r.calcFromComponentValues([[s]],{toCanonicalUnits:!0,precision:100,globals:h});if(!e||!t.isTokenNode(e)||(e.value[0]===a.TokenType.Percentage||e.value[0]===a.TokenType.Number||e.value[0]===a.TokenType.Dimension)&&Number.isNaN(e.value[4].value))return!1;s=e}if(b===u&&0===u.length&&t.isTokenNode(s)&&s.value[0]===a.TokenType.Ident&&"from"===toLowerCaseAZ(s.value[4].value)&&"hsla"!==i&&"rgba"!==i){if(y)return!1;for(;t.isWhitespaceNode(e.value[o+1])||t.isCommentNode(e.value[o+1]);)o++;if(o++,s=e.value[o],y=l(s),!1===y)return!1;x.syntaxFlags.add(exports.SyntaxFlag.RelativeColorSyntax),y.colorNotation!==n&&(y=colorDataTo(y,n)),m=normalizeRelativeColorDataChannels(y),h=noneToZeroInRelativeColorDataChannels(m)}else{if(!t.isTokenNode(s))return!1;if(s.value[0]===a.TokenType.Ident&&m&&m.has(toLowerCaseAZ(s.value[4].value))){b.push(new t.TokenNode(m.get(toLowerCaseAZ(s.value[4].value))));continue}b.push(s)}}}if(1!==b.length)return!1;if(1!==u.length||1!==c.length||1!==p.length)return!1;if(!t.isTokenNode(u[0])||!t.isTokenNode(c[0])||!t.isTokenNode(p[0]))return!1;if(m&&!m.has("alpha"))return!1;const T=o(u[0].value,0,x);if(!T||T[0]!==a.TokenType.Number)return!1;const C=o(c[0].value,1,x);if(!C||C[0]!==a.TokenType.Number)return!1;const d=o(p[0].value,2,x);if(!d||d[0]!==a.TokenType.Number)return!1;const g=[T,C,d];if(1===N.length)if(x.syntaxFlags.add(exports.SyntaxFlag.HasAlpha),t.isTokenNode(N[0])){const e=o(N[0].value,3,x);if(!e||e[0]!==a.TokenType.Number)return!1;g.push(e)}else x.alpha=N[0];else if(m&&m.has("alpha")){const e=o(m.get("alpha"),3,x);if(!e||e[0]!==a.TokenType.Number)return!1;g.push(e)}return x.channels=[g[0][4].value,g[1][4].value,g[2][4].value],4===g.length&&(x.alpha=g[3][4].value),x}function hsl(e,o){if(e.value.some((e=>t.isTokenNode(e)&&e.value[0]===a.TokenType.Comma))){const o=hslCommaSeparated(e);if(!1!==o)return o}{const a=hslSpaceSeparated(e,o);if(!1!==a)return a}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,exports.ColorNotation.HSL,[exports.SyntaxFlag.LegacyHSL])}function hslSpaceSeparated(e,o){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,exports.ColorNotation.HSL,[],o)}function normalize_HWB_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(0===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=e[4].value;return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=e[4].value;return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function normalize_Lab_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,1,0,100);return 1===o||2===o?t=normalize(e[4].value,.8,-1/0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,100);return 1===o||2===o?t=normalize(e[4].value,1,-1/0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function lab(e,o){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,exports.ColorNotation.Lab,[],o)}function normalize_LCH_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(2===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,1,0,100);return 1===o?t=normalize(e[4].value,100/150,0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,100);return 1===o?t=normalize(e[4].value,1,0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function lch(e,o){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,exports.ColorNotation.LCH,[],o)}const N=new Map;for(const[e,o]of Object.entries(n.namedColors))N.set(e,o);function namedColor(e){const o=N.get(toLowerCaseAZ(e));return!!o&&{colorNotation:exports.ColorNotation.RGB,channels:[o[0]/255,o[1]/255,o[2]/255],alpha:1,syntaxFlags:new Set([exports.SyntaxFlag.ColorKeyword,exports.SyntaxFlag.NamedColor])}}function normalize_OKLab_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,0,1);return 1===o||2===o?t=normalize(e[4].value,250,-1/0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,1);return 1===o||2===o?t=normalize(e[4].value,1,-1/0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function oklab(e,o){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,exports.ColorNotation.OKLab,[],o)}function normalize_OKLCH_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(2===o){const o=normalizeHue(e);return!1!==o&&(e[0]===a.TokenType.Dimension&&n.syntaxFlags.add(exports.SyntaxFlag.HasDimensionValues),o)}if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,0,1);return 1===o?t=normalize(e[4].value,250,0,1/0):3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,1,0,1);return 1===o?t=normalize(e[4].value,1,0,1/0):3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function oklch(e,o){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,exports.ColorNotation.OKLCH,[],o)}function normalize_legacy_sRGB_ChannelValues(e,o,n){if(e[0]===a.TokenType.Percentage){3===o?n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageAlpha):n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);const t=normalize(e[4].value,100,0,1);return[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,255,0,1);return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(e,o,n){if(e[0]===a.TokenType.Ident&&"none"===toLowerCaseAZ(e[4].value))return n.syntaxFlags.add(exports.SyntaxFlag.HasNoneKeywords),[a.TokenType.Number,"none",e[2],e[3],{value:NaN,type:a.NumberType.Number}];if(e[0]===a.TokenType.Percentage){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasPercentageValues);let t=normalize(e[4].value,100,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,100,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}if(e[0]===a.TokenType.Number){3!==o&&n.syntaxFlags.add(exports.SyntaxFlag.HasNumberValues);let t=normalize(e[4].value,255,-1/0,1/0);return 3===o&&(t=normalize(e[4].value,1,0,1)),[a.TokenType.Number,t.toString(),e[2],e[3],{value:t,type:a.NumberType.Number}]}return!1}function rgb(e,o){if(e.value.some((e=>t.isTokenNode(e)&&e.value[0]===a.TokenType.Comma))){const o=rgbCommaSeparated(e);if(!1!==o)return(!o.syntaxFlags.has(exports.SyntaxFlag.HasNumberValues)||!o.syntaxFlags.has(exports.SyntaxFlag.HasPercentageValues))&&o}else{const a=rgbSpaceSeparated(e,o);if(!1!==a)return a}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,exports.ColorNotation.RGB,[exports.SyntaxFlag.LegacyRGB])}function rgbSpaceSeparated(e,o){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,exports.ColorNotation.RGB,[],o)}function toPrecision(e,o=7){e=+e,o=+o;const a=(Math.floor(e)+"").length;if(o>a)return+e.toFixed(o-a);{const n=10**(a-o);return Math.round(e/n)*n}}function XYZ_D50_to_P3_Gamut(e){const o=n.xyz.XYZ_D50_to_P3(e);if(n.utils.inGamut(o))return n.utils.clip(o);let a=e.slice();return a=n.conversions.D50_to_D65(a),a=n.conversions.XYZ_to_OKLab(a),a=n.conversions.OKLab_to_OKLCH(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),n.calculations.mapGamut(a,(e=>(e=n.conversions.OKLCH_to_OKLab(e),e=n.conversions.OKLab_to_XYZ(e),e=n.conversions.XYZ_to_lin_P3(e),n.conversions.gam_P3(e))),(e=>(e=n.conversions.lin_P3(e),e=n.conversions.lin_P3_to_XYZ(e),e=n.conversions.XYZ_to_OKLab(e),n.conversions.OKLab_to_OKLCH(e))))}function serializeWithAlpha(e,o,n,r){const s=[a.TokenType.CloseParen,")",-1,-1,void 0];if("number"==typeof e.alpha){const l=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(l,4)?new t.FunctionNode(o,s,r):new t.FunctionNode(o,s,[...r,new t.WhitespaceNode([n]),new t.TokenNode([a.TokenType.Delim,"/",-1,-1,{value:"/"}]),new t.WhitespaceNode([n]),new t.TokenNode([a.TokenType.Number,toPrecision(l,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Integer}])])}return new t.FunctionNode(o,s,[...r,new t.WhitespaceNode([n]),new t.TokenNode([a.TokenType.Delim,"/",-1,-1,{value:"/"}]),new t.WhitespaceNode([n]),e.alpha])}function XYZ_D50_to_sRGB_Gamut(e){const o=n.xyz.XYZ_D50_to_sRGB(e);if(n.utils.inGamut(o))return n.utils.clip(o);let a=e.slice();return a=n.conversions.D50_to_D65(a),a=n.conversions.XYZ_to_OKLab(a),a=n.conversions.OKLab_to_OKLCH(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),n.calculations.mapGamut(a,(e=>(e=n.conversions.OKLCH_to_OKLab(e),e=n.conversions.OKLab_to_XYZ(e),e=n.conversions.XYZ_to_lin_sRGB(e),n.conversions.gam_sRGB(e))),(e=>(e=n.conversions.lin_sRGB(e),e=n.conversions.lin_sRGB_to_XYZ(e),e=n.conversions.XYZ_to_OKLab(e),n.conversions.OKLab_to_OKLCH(e))))}exports.color=function color(e){if(t.isFunctionNode(e)){switch(toLowerCaseAZ(e.getName())){case"rgb":case"rgba":return rgb(e,color);case"hsl":case"hsla":return hsl(e,color);case"hwb":return o=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,exports.ColorNotation.HWB,[],o);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)}}var o;if(t.isTokenNode(e)){if(e.value[0]===a.TokenType.Hash)return hex(e.value);if(e.value[0]===a.TokenType.Ident){const o=namedColor(e.value[4].value);return!1!==o?o:"transparent"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:exports.ColorNotation.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([exports.SyntaxFlag.ColorKeyword])}}}return!1},exports.colorDataFitsRGB_Gamut=function colorDataFitsRGB_Gamut(e){const o=JSON.parse(JSON.stringify(e));return o.channels=convertPowerlessComponentsToZeroValuesForDisplay(o.channels,o.colorNotation),!colorDataTo(o,exports.ColorNotation.RGB).channels.find((e=>e<-1e-5||e>1.00001))},exports.colorDataTo=colorDataTo,exports.serializeOKLCH=function serializeOKLCH(e){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let o=e.channels.map((e=>Number.isNaN(e)?0:e));e.colorNotation!==exports.ColorNotation.OKLCH&&(o=n.xyz.XYZ_D50_to_OKLCH(colorData_to_XYZ_D50(e).channels));const r=toPrecision(o[0],6),s=toPrecision(o[1],6),l=toPrecision(o[2],6),i=[a.TokenType.Function,"oklch(",-1,-1,{value:"oklch"}],u=[a.TokenType.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(e,i,u,[new t.TokenNode([a.TokenType.Number,r.toString(),-1,-1,{value:o[0],type:a.NumberType.Number}]),new t.WhitespaceNode([u]),new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:o[1],type:a.NumberType.Number}]),new t.WhitespaceNode([u]),new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:o[2],type:a.NumberType.Number}])])},exports.serializeP3=function serializeP3(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));e.colorNotation!==exports.ColorNotation.Display_P3&&(r=o?XYZ_D50_to_P3_Gamut(colorData_to_XYZ_D50(e).channels):n.xyz.XYZ_D50_to_P3(colorData_to_XYZ_D50(e).channels));const s=toPrecision(r[0],6),l=toPrecision(r[1],6),i=toPrecision(r[2],6),u=[a.TokenType.Function,"color(",-1,-1,{value:"color"}],c=[a.TokenType.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(e,u,c,[new t.TokenNode([a.TokenType.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:r[0],type:a.NumberType.Number}]),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[1],type:a.NumberType.Number}]),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,i.toString(),-1,-1,{value:r[2],type:a.NumberType.Number}])])},exports.serializeRGB=function serializeRGB(e,o=!0){e.channels=convertPowerlessComponentsToZeroValuesForDisplay(e.channels,e.colorNotation);let r=e.channels.map((e=>Number.isNaN(e)?0:e));r=o?XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(e).channels):n.xyz.XYZ_D50_to_sRGB(colorData_to_XYZ_D50(e).channels);const s=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])))),i=Math.min(255,Math.max(0,Math.round(255*toPrecision(r[2])))),u=[a.TokenType.CloseParen,")",-1,-1,void 0],c=[a.TokenType.Whitespace," ",-1,-1,void 0],p=[a.TokenType.Comma,",",-1,-1,void 0],N=[new t.TokenNode([a.TokenType.Number,s.toString(),-1,-1,{value:r[0],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,l.toString(),-1,-1,{value:r[1],type:a.NumberType.Integer}]),new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,i.toString(),-1,-1,{value:r[2],type:a.NumberType.Integer}])];if("number"==typeof e.alpha){const o=Math.min(1,Math.max(0,toPrecision(Number.isNaN(e.alpha)?0:e.alpha)));return 1===toPrecision(o,4)?new t.FunctionNode([a.TokenType.Function,"rgb(",-1,-1,{value:"rgb"}],u,N):new t.FunctionNode([a.TokenType.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),new t.TokenNode([a.TokenType.Number,toPrecision(o,4).toString(),-1,-1,{value:e.alpha,type:a.NumberType.Number}])])}return new t.FunctionNode([a.TokenType.Function,"rgba(",-1,-1,{value:"rgba"}],u,[...N,new t.TokenNode(p),new t.WhitespaceNode([c]),e.alpha])};
|
package/dist/index.d.ts
CHANGED
|
@@ -6,4 +6,5 @@ export { SyntaxFlag } from './color-data';
|
|
|
6
6
|
export { colorDataTo, colorDataFitsRGB_Gamut } from './color-data';
|
|
7
7
|
export { serializeP3 } from './serialize/p3';
|
|
8
8
|
export { serializeRGB } from './serialize/rgb';
|
|
9
|
+
export { serializeOKLCH } from './serialize/oklch';
|
|
9
10
|
export declare function color(colorNode: ComponentValue): ColorData | false;
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{TokenType as e,NumberType as a}from"@csstools/css-tokenizer";import{xyz as n,utils as o,conversions as r,calculations as t,namedColors as l}from"@csstools/color-helpers";import{isWhitespaceNode as s,isCommentNode as c,isTokenNode as u,isFunctionNode as i,TokenNode as h,FunctionNode as m}from"@csstools/css-parser-algorithms";import{mathFunctionNames as N,calcFromComponentValues as p}from"@csstools/css-calc";var b,_;function colorData_to_XYZ_D50(e){switch(e.colorNotation){case b.HEX:case b.RGB:case b.sRGB:return{...e,colorNotation:b.XYZ_D50,channels:n.sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.Linear_sRGB:return{...e,colorNotation:b.XYZ_D50,channels:n.lin_sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.Display_P3:return{...e,colorNotation:b.XYZ_D50,channels:n.P3_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.Rec2020:return{...e,colorNotation:b.XYZ_D50,channels:n.rec_2020_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.A98_RGB:return{...e,colorNotation:b.XYZ_D50,channels:n.a98_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.ProPhoto_RGB:return{...e,colorNotation:b.XYZ_D50,channels:n.ProPhoto_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.HSL:return{...e,colorNotation:b.XYZ_D50,channels:n.HSL_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.HWB:return{...e,colorNotation:b.XYZ_D50,channels:n.HWB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.Lab:return{...e,colorNotation:b.XYZ_D50,channels:n.Lab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.OKLab:return{...e,colorNotation:b.XYZ_D50,channels:n.OKLab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.LCH:return{...e,colorNotation:b.XYZ_D50,channels:n.LCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.OKLCH:return{...e,colorNotation:b.XYZ_D50,channels:n.OKLCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.XYZ_D50:return{...e,colorNotation:b.XYZ_D50,channels:n.XYZ_D50_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case b.XYZ_D65:return{...e,colorNotation:b.XYZ_D50,channels:n.XYZ_D65_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",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"}(b||(b={})),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"}(_||(_={}));const g=new Set([b.A98_RGB,b.Display_P3,b.HEX,b.Linear_sRGB,b.ProPhoto_RGB,b.RGB,b.sRGB,b.Rec2020,b.XYZ_D50,b.XYZ_D65]);function colorDataTo(e,a){const o=colorData_to_XYZ_D50(e),r={...e};switch(a){case b.HEX:case b.RGB:r.colorNotation=b.RGB,r.channels=n.XYZ_D50_to_sRGB(o.channels);break;case b.sRGB:r.colorNotation=b.sRGB,r.channels=n.XYZ_D50_to_sRGB(o.channels);break;case b.Linear_sRGB:r.colorNotation=b.Linear_sRGB,r.channels=n.XYZ_D50_to_lin_sRGB(o.channels);break;case b.Display_P3:r.colorNotation=b.Display_P3,r.channels=n.XYZ_D50_to_P3(o.channels);break;case b.Rec2020:r.colorNotation=b.Rec2020,r.channels=n.XYZ_D50_to_rec_2020(o.channels);break;case b.ProPhoto_RGB:r.colorNotation=b.ProPhoto_RGB,r.channels=n.XYZ_D50_to_ProPhoto(o.channels);break;case b.A98_RGB:r.colorNotation=b.A98_RGB,r.channels=n.XYZ_D50_to_a98_RGB(o.channels);break;case b.HSL:r.colorNotation=b.HSL,r.channels=n.XYZ_D50_to_HSL(o.channels);break;case b.HWB:r.colorNotation=b.HWB,r.channels=n.XYZ_D50_to_HWB(o.channels);break;case b.Lab:r.colorNotation=b.Lab,r.channels=n.XYZ_D50_to_Lab(o.channels);break;case b.LCH:r.colorNotation=b.LCH,r.channels=n.XYZ_D50_to_LCH(o.channels);break;case b.OKLCH:r.colorNotation=b.OKLCH,r.channels=n.XYZ_D50_to_OKLCH(o.channels);break;case b.OKLab:r.colorNotation=b.OKLab,r.channels=n.XYZ_D50_to_OKLab(o.channels);break;case b.XYZ_D50:r.colorNotation=b.XYZ_D50,r.channels=n.XYZ_D50_to_XYZ_D50(o.channels);break;case b.XYZ_D65:r.colorNotation=b.XYZ_D65,r.channels=n.XYZ_D50_to_XYZ_D65(o.channels);break;default:throw new Error("Unsupported color notation")}if(a===e.colorNotation)r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[0,1,2]);else if(g.has(a)&&g.has(e.colorNotation))r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[0,1,2]);else switch(a){case b.HSL:switch(e.colorNotation){case b.HWB:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[0]);break;case b.Lab:case b.OKLab:r.channels=carryForwardMissingComponents(e.channels,[2],r.channels,[0]);break;case b.LCH:case b.OKLCH:r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[2,1,0])}break;case b.HWB:switch(e.colorNotation){case b.HSL:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[0]);break;case b.LCH:case b.OKLCH:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[2])}break;case b.Lab:case b.OKLab:switch(e.colorNotation){case b.HSL:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[2]);break;case b.Lab:case b.OKLab:r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[0,1,2]);break;case b.LCH:case b.OKLCH:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[0])}break;case b.LCH:case b.OKLCH:switch(e.colorNotation){case b.HSL:r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[2,1,0]);break;case b.HWB:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[2]);break;case b.Lab:case b.OKLab:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[0]);break;case b.LCH:case b.OKLCH:r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[0,1,2])}}return r.channels=convertPowerlessComponentsToMissingComponents(r.channels,a),r}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case b.HSL:(reducePrecision(n[2],4)<=0||reducePrecision(n[2],4)>=100)&&(n[0]=NaN,n[1]=NaN),reducePrecision(n[1],4)<=0&&(n[0]=NaN);break;case b.HWB:Math.max(0,reducePrecision(n[1],4))+Math.max(0,reducePrecision(n[2],4))>=100&&(n[0]=NaN);break;case b.LCH:reducePrecision(n[1],4)<=0&&(n[2]=NaN);break;case b.OKLCH:reducePrecision(n[1],6)<=0&&(n[2]=NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case b.HSL:(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=NaN,n[1]=NaN),reducePrecision(n[1])<=0&&(n[0]=NaN);break;case b.HWB:Math.max(0,reducePrecision(n[1]))+Math.max(0,reducePrecision(n[2]))>=100&&(n[0]=NaN);break;case b.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=NaN,n[2]=NaN);break;case b.LCH:reducePrecision(n[1])<=0&&(n[2]=NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=NaN,n[2]=NaN);break;case b.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=NaN,n[2]=NaN);break;case b.OKLCH:reducePrecision(n[1])<=0&&(n[2]=NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=NaN,n[2]=NaN)}return n}function carryForwardMissingComponents(e,a,n,o){const r=[...n];for(const n of a)Number.isNaN(e[a[n]])&&(r[o[n]]=NaN);return r}function fillInMissingComponents(e,a){const n=[...e];for(let o=0;o<e.length;o++)Number.isNaN(e[o])&&(n[o]=a[o]);return n}function normalizeRelativeColorDataChannels(e){const a=new Map;switch(e.colorNotation){case b.RGB:case b.HEX:a.set("r",dummyNumberToken(255*e.channels[0])),a.set("g",dummyNumberToken(255*e.channels[1])),a.set("b",dummyNumberToken(255*e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case b.HSL:a.set("h",dummyNumberToken(e.channels[0])),a.set("s",dummyNumberToken(e.channels[1])),a.set("l",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case b.HWB:a.set("h",dummyNumberToken(e.channels[0])),a.set("w",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case b.Lab:case b.OKLab:a.set("l",dummyNumberToken(e.channels[0])),a.set("a",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case b.LCH:case b.OKLCH:a.set("l",dummyNumberToken(e.channels[0])),a.set("c",dummyNumberToken(e.channels[1])),a.set("h",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case b.sRGB:case b.A98_RGB:case b.Display_P3:case b.Rec2020:case b.Linear_sRGB:case b.ProPhoto_RGB:a.set("r",dummyNumberToken(e.channels[0])),a.set("g",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case b.XYZ_D50:case b.XYZ_D65:a.set("x",dummyNumberToken(e.channels[0])),a.set("y",dummyNumberToken(e.channels[1])),a.set("z",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha))}return a}function noneToZeroInRelativeColorDataChannels(e){const a=new Map;for(const[n,o]of e)Number.isNaN(o[4].value)?a.set(n,dummyNumberToken(0)):a.set(n,o);return a}function dummyNumberToken(n){return[e.Number,n.toString(),-1,-1,{value:n,type:a.Number}]}function reducePrecision(e,a=7){const n=Math.pow(10,a);return Math.round(e*n)/n}function colorDataFitsRGB_Gamut(e){const a=JSON.parse(JSON.stringify(e));a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,b.RGB).channels.find((e=>e<-1e-5||e>1.00001))}function normalize(e,a,n,o){return Math.min(Math.max(e/a,n),o)}const d=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(d,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function normalize_Color_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(l[0]!==e.Ident||"none"!==toLowerCaseAZ(l[4].value))if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,1,-1/0,1/0);3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3!==t&&o.syntaxFlags.add(_.HasPercentageValues);let n=normalize(l[4].value,100,-1/0,1/0);3===t&&(n=normalize(l[4].value,100,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}else o.syntaxFlags.add(_.HasNoneKeywords),r.push([e.Number,"none",l[2],l[3],{value:NaN,type:a.Number}])}return r}const v=new Set(["srgb","srgb-linear","display-p3","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(a,n){const o=[],r=[],t=[],l=[];let m,g,d=!1,f=!1;const y={colorNotation:b.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let C=o;for(let b=0;b<a.value.length;b++){let L=a.value[b];if(s(L)||c(L))for(;s(a.value[b+1])||c(a.value[b+1]);)b++;else if(C===o&&o.length&&(C=r),C===r&&r.length&&(C=t),u(L)&&L.value[0]===e.Delim&&"/"===L.value[4].value){if(C===l)return!1;C=l}else{if(i(L)){if(C===l&&"var"===toLowerCaseAZ(L.getName())){y.syntaxFlags.add(_.HasVariableAlpha),C.push(L);continue}if(!N.has(toLowerCaseAZ(L.getName())))return!1;const[[a]]=p([[L]],{toCanonicalUnits:!0,precision:100,globals:g});if(!a||!u(a)||(a.value[0]===e.Percentage||a.value[0]===e.Number||a.value[0]===e.Dimension)&&Number.isNaN(a.value[4].value))return!1;L=a}if(C===o&&0===o.length&&u(L)&&L.value[0]===e.Ident&&v.has(toLowerCaseAZ(L.value[4].value))){if(d)return!1;d=toLowerCaseAZ(L.value[4].value),y.colorNotation=colorSpaceNameToColorNotation(d),f&&(f.colorNotation!==y.colorNotation&&(f=colorDataTo(f,y.colorNotation)),m=normalizeRelativeColorDataChannels(f),g=noneToZeroInRelativeColorDataChannels(m))}else if(C===o&&0===o.length&&u(L)&&L.value[0]===e.Ident&&"from"===toLowerCaseAZ(L.value[4].value)){if(f)return!1;if(d)return!1;for(;s(a.value[b+1])||c(a.value[b+1]);)b++;if(b++,L=a.value[b],f=n(L),!1===f)return!1;y.syntaxFlags.add(_.RelativeColorSyntax)}else{if(!u(L))return!1;if(L.value[0]===e.Ident&&m&&m.has(toLowerCaseAZ(L.value[4].value))){C.push(new h(m.get(toLowerCaseAZ(L.value[4].value))));continue}C.push(L)}}}if(!d)return!1;if(1!==C.length)return!1;if(1!==o.length||1!==r.length||1!==t.length)return!1;if(!u(o[0])||!u(r[0])||!u(t[0]))return!1;if(m&&!m.has("alpha"))return!1;const L=[o[0].value,r[0].value,t[0].value];1===l.length?(y.syntaxFlags.add(_.HasAlpha),u(l[0])?L.push(l[0].value):y.alpha=l[0]):m&&m.has("alpha")&&L.push(m.get("alpha"));const H=normalize_Color_ChannelValues(L,y);return!1!==H&&(y.channels=[H[0][4].value,H[1][4].value,H[2][4].value],4===H.length&&(y.alpha=H[3][4].value),y)}function colorSpaceNameToColorNotation(e){switch(e){case"srgb":return b.sRGB;case"srgb-linear":return b.Linear_sRGB;case"display-p3":return b.Display_P3;case"a98-rgb":return b.A98_RGB;case"prophoto-rgb":return b.ProPhoto_RGB;case"rec2020":return b.Rec2020;case"xyz":case"xyz-d65":return b.XYZ_D65;case"xyz-d50":return b.XYZ_D50;default:throw new Error("Unknown color space name: "+e)}}const f=new Set(["srgb","srgb-linear","lab","oklab","xyz","xyz-d50","xyz-d65"]),y=new Set(["hsl","hwb","lch","oklch"]),C=new Set(["shorter","longer","increasing","decreasing"]);function colorMix(a,n){let o=null,r=null,t=null,l=!1;for(let i=0;i<a.value.length;i++){const h=a.value[i];if(!s(h)&&!c(h)){if(u(h)&&h.value[0]===e.Ident){if(!o&&"in"===toLowerCaseAZ(h.value[4].value)){o=h;continue}if(o&&!r){r=toLowerCaseAZ(h.value[4].value);continue}if(o&&r&&!t&&y.has(r)){t=toLowerCaseAZ(h.value[4].value);continue}if(o&&r&&t&&!l&&"hue"===toLowerCaseAZ(h.value[4].value)){l=!0;continue}return!1}return!(!u(h)||h.value[0]!==e.Comma)&&(!!r&&(t||l?!!(r&&t&&l&&y.has(r)&&C.has(t))&&colorMixPolar(r,t,colorMixComponents(a.value.slice(i+1),n)):f.has(r)?colorMixRectangular(r,colorMixComponents(a.value.slice(i+1),n)):!!y.has(r)&&colorMixPolar(r,"shorter",colorMixComponents(a.value.slice(i+1),n))))}}return!1}function colorMixComponents(a,n){const o=[];let r=1,t=!1,l=!1;for(let r=0;r<a.length;r++){let h=a[r];if(!s(h)&&!c(h)){if(!u(h)||h.value[0]!==e.Comma){if(!t){const e=n(h);if(e){t=e;continue}}if(!l){if(i(h)&&N.has(toLowerCaseAZ(h.getName()))&&([[h]]=p([[h]],{toCanonicalUnits:!0,precision:100}),!h||!u(h)||(h.value[0]===e.Percentage||h.value[0]===e.Number||h.value[0]===e.Dimension)&&Number.isNaN(h.value[4].value)))return!1;if(u(h)&&h.value[0]===e.Percentage&&h.value[4].value>=0){l=h.value[4].value;continue}}return!1}if(!t)return!1;o.push({color:t,percentage:l}),t=!1,l=!1}}if(t&&o.push({color:t,percentage:l}),2!==o.length)return!1;let h=o[0].percentage,m=o[1].percentage;return(!1===h||!(h<0||h>100))&&((!1===m||!(m<0||m>100))&&(!1===h&&!1===m?(h=50,m=50):!1!==h&&!1===m?m=100-h:!1===h&&!1!==m&&(h=100-m),(0!==h||0!==m)&&(!1!==h&&!1!==m&&(h+m>100&&(h=h/(h+m)*100,m=m/(h+m)*100),h+m<100&&(r=(h+m)/100,h=h/(h+m)*100,m=m/(h+m)*100),{a:{color:o[0].color,percentage:h},b:{color:o[1].color,percentage:m},alphaMultiplier:r}))))}function colorMixRectangular(e,a){if(!a)return!1;const n=a.a.color,o=a.b.color,r=a.a.percentage/100;let t=n.channels,l=o.channels,s=b.RGB,c=n.alpha;if("number"!=typeof c)return!1;let u=o.alpha;if("number"!=typeof u)return!1;switch(c=Number.isNaN(c)?u:c,u=Number.isNaN(u)?c:u,e){case"srgb":s=b.RGB,n.colorNotation!==b.RGB&&n.colorNotation!==b.sRGB&&n.colorNotation!==b.HEX&&(t=colorDataTo(n,b.RGB).channels),o.colorNotation!==b.RGB&&o.colorNotation!==b.sRGB&&o.colorNotation!==b.HEX&&(l=colorDataTo(o,b.RGB).channels);break;case"srgb-linear":s=b.Linear_sRGB,n.colorNotation!==b.Linear_sRGB&&(t=colorDataTo(n,b.Linear_sRGB).channels),o.colorNotation!==b.Linear_sRGB&&(l=colorDataTo(o,b.Linear_sRGB).channels);break;case"lab":s=b.Lab,n.colorNotation!==b.Lab&&(t=colorDataTo(n,b.Lab).channels),o.colorNotation!==b.Lab&&(l=colorDataTo(o,b.Lab).channels);break;case"oklab":s=b.OKLab,n.colorNotation!==b.OKLab&&(t=colorDataTo(n,b.OKLab).channels),o.colorNotation!==b.OKLab&&(l=colorDataTo(o,b.OKLab).channels);break;case"xyz-d50":s=b.XYZ_D50,n.colorNotation!==b.XYZ_D50&&(t=colorDataTo(n,b.XYZ_D50).channels),o.colorNotation!==b.XYZ_D50&&(l=colorDataTo(o,b.XYZ_D50).channels);break;case"xyz":case"xyz-d65":s=b.XYZ_D65,n.colorNotation!==b.XYZ_D65&&(t=colorDataTo(n,b.XYZ_D65).channels),o.colorNotation!==b.XYZ_D65&&(l=colorDataTo(o,b.XYZ_D65).channels)}t=fillInMissingComponents(t,l),l=fillInMissingComponents(l,t),t[0]=premultiply(t[0],c),t[1]=premultiply(t[1],c),t[2]=premultiply(t[2],c),l[0]=premultiply(l[0],u),l[1]=premultiply(l[1],u),l[2]=premultiply(l[2],u);const i=interpolate(c,u,r);return{colorNotation:s,channels:[un_premultiply(interpolate(t[0],l[0],r),i),un_premultiply(interpolate(t[1],l[1],r),i),un_premultiply(interpolate(t[2],l[2],r),i)],alpha:i*a.alphaMultiplier,syntaxFlags:new Set([_.ColorMix])}}function colorMixPolar(e,a,n){if(!n)return!1;const o=n.a.color,r=n.b.color,t=n.a.percentage/100;let l=o.channels,s=r.channels,c=0,u=0,i=0,h=0,m=0,N=0,p=b.RGB,g=o.alpha;if("number"!=typeof g)return!1;let d=r.alpha;if("number"!=typeof d)return!1;switch(g=Number.isNaN(g)?d:g,d=Number.isNaN(d)?g:d,e){case"hsl":p=b.HSL,o.colorNotation!==b.HSL&&(l=colorDataTo(o,b.HSL).channels),r.colorNotation!==b.HSL&&(s=colorDataTo(r,b.HSL).channels);break;case"hwb":p=b.HWB,o.colorNotation!==b.HWB&&(l=colorDataTo(o,b.HWB).channels),r.colorNotation!==b.HWB&&(s=colorDataTo(r,b.HWB).channels);break;case"lch":p=b.LCH,o.colorNotation!==b.LCH&&(l=colorDataTo(o,b.LCH).channels),r.colorNotation!==b.LCH&&(s=colorDataTo(r,b.LCH).channels);break;case"oklch":p=b.OKLCH,o.colorNotation!==b.OKLCH&&(l=colorDataTo(o,b.OKLCH).channels),r.colorNotation!==b.OKLCH&&(s=colorDataTo(r,b.OKLCH).channels)}switch(l=fillInMissingComponents(l,s),s=fillInMissingComponents(s,l),e){case"hsl":case"hwb":c=l[0],u=s[0],i=l[1],h=s[1],m=l[2],N=s[2];break;case"lch":case"oklch":i=l[0],h=s[0],m=l[1],N=s[1],c=l[2],u=s[2]}const v=u-c;switch(a){case"shorter":v>180?c+=360:v<-180&&(u+=360);break;case"longer":-180<v&&v<180&&(v>0?c+=360:u+=360);break;case"increasing":v<0&&(u+=360);break;case"decreasing":v>0&&(c+=360);break;default:throw new Error("Unknown hue interpolation method")}i=premultiply(i,g),m=premultiply(m,g),h=premultiply(h,d),N=premultiply(N,d);let f=[0,0,0];const y=interpolate(g,d,t);switch(e){case"hsl":case"hwb":f=[interpolate(c,u,t),un_premultiply(interpolate(i,h,t),y),un_premultiply(interpolate(m,N,t),y)];break;case"lch":case"oklch":f=[un_premultiply(interpolate(i,h,t),y),un_premultiply(interpolate(m,N,t),y),interpolate(c,u,t)]}return{colorNotation:p,channels:f,alpha:y*n.alphaMultiplier,syntaxFlags:new Set([_.ColorMix])}}function interpolate(e,a,n){return Number.isNaN(e)?a:Number.isNaN(a)?e:e*n+a*(1-n)}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?NaN:e/a}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:b.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([_.Hex])},o=a.length;if(3===o){const e=a[0],o=a[1],r=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(o+o,16)/255,parseInt(r+r,16)/255],n}if(6===o){const e=a[0]+a[1],o=a[2]+a[3],r=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(o,16)/255,parseInt(r,16)/255],n}if(4===o){const e=a[0],o=a[1],r=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(o+o,16)/255,parseInt(r+r,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(_.HasAlpha),n}if(8===o){const e=a[0]+a[1],o=a[2]+a[3],r=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(o,16)/255,parseInt(r,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(_.HasAlpha),n}return!1}function normalizeHue(n){if(n[0]===e.Number)return n[4].value=n[4].value%360,n[1]=n[4].value.toString(),n;if(n[0]===e.Dimension){let o=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":o=180*n[4].value/Math.PI;break;case"grad":o=.9*n[4].value;break;case"turn":o=360*n[4].value;break;default:return!1}return o%=360,[e.Number,o.toString(),n[2],n[3],{value:o,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(0!==t)if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,1,0,100);3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3===t?o.syntaxFlags.add(_.HasPercentageAlpha):o.syntaxFlags.add(_.HasPercentageValues);let n=normalize(l[4].value,1,0,100);3===t&&(n=normalize(l[4].value,100,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}else{const a=normalizeHue(l);if(!1===a)return!1;l[0]===e.Dimension&&o.syntaxFlags.add(_.HasDimensionValues),r.push(a)}}return!o.syntaxFlags.has(_.HasNumberValues)&&r}function normalize_modern_HSL_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(l[0]!==e.Ident||"none"!==toLowerCaseAZ(l[4].value))if(0!==t)if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,1,0,100);3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3===t?o.syntaxFlags.add(_.HasPercentageAlpha):o.syntaxFlags.add(_.HasPercentageValues);let n=normalize(l[4].value,1,0,100);3===t&&(n=normalize(l[4].value,100,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}else{const a=normalizeHue(l);if(!1===a)return!1;l[0]===e.Dimension&&o.syntaxFlags.add(_.HasDimensionValues),r.push(a)}else o.syntaxFlags.add(_.HasNoneKeywords),r.push([e.Number,"none",l[2],l[3],{value:NaN,type:a.Number}])}return r}function threeChannelLegacySyntax(a,n,o,r){const t=[],l=[],h=[],m=[],b={colorNotation:o,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let g=t;for(let n=0;n<a.value.length;n++){let o=a.value[n];if(!s(o)&&!c(o)){if(u(o)&&o.value[0]===e.Comma){if(g===t){g=l;continue}if(g===l){g=h;continue}if(g===h){g=m;continue}if(g===m)return!1}if(i(o)){if(g===m&&"var"===toLowerCaseAZ(o.getName())){b.syntaxFlags.add(_.HasVariableAlpha),g.push(o);continue}if(!N.has(toLowerCaseAZ(o.getName())))return!1;const[[a]]=p([[o]],{toCanonicalUnits:!0,precision:100});if(!a||!u(a)||(a.value[0]===e.Percentage||a.value[0]===e.Number||a.value[0]===e.Dimension)&&Number.isNaN(a.value[4].value))return!1;o=a}if(!u(o))return!1;g.push(o)}}if(1!==g.length)return!1;if(1!==t.length||1!==l.length||1!==h.length)return!1;if(!u(t[0])||!u(l[0])||!u(h[0]))return!1;const d=[t[0].value,l[0].value,h[0].value];1===m.length&&(b.syntaxFlags.add(_.HasAlpha),u(m[0])?d.push(m[0].value):b.alpha=m[0]);const v=n(d,b);return!1!==v&&(b.channels=[v[0][4].value,v[1][4].value,v[2][4].value],4===v.length&&(b.alpha=v[3][4].value),b)}function XYZ_D50_to_sRGB_Gamut(e){const a=n.XYZ_D50_to_sRGB(e);if(o.inGamut(a))return o.clip(a);let l=e.slice();return l=r.D50_to_D65(l),l=r.XYZ_to_OKLab(l),l=r.OKLab_to_OKLCH(l),l[0]<1e-6&&(l=[0,0,0]),l[0]>.999999&&(l=[1,0,0]),t.mapGamut(l,(e=>(e=r.OKLCH_to_OKLab(e),e=r.OKLab_to_XYZ(e),e=r.XYZ_to_lin_sRGB(e),r.gam_sRGB(e))),(e=>(e=r.lin_sRGB(e),e=r.lin_sRGB_to_XYZ(e),e=r.XYZ_to_OKLab(e),r.OKLab_to_OKLCH(e))))}function threeChannelSpaceSeparated(a,n,o,t,l){const m=toLowerCaseAZ(a.getName()),g=[],d=[],v=[],f=[];let y,C,L=!1;const H={colorNotation:o,channels:[0,0,0],alpha:1,syntaxFlags:new Set(t)};let D=g;for(let n=0;n<a.value.length;n++){let t=a.value[n];if(s(t)||c(t))for(;s(a.value[n+1])||c(a.value[n+1]);)n++;else if(D===g&&g.length&&(D=d),D===d&&d.length&&(D=v),u(t)&&t.value[0]===e.Delim&&"/"===t.value[4].value){if(D===f)return!1;D=f}else{if(i(t)){if(D===f&&"var"===toLowerCaseAZ(t.getName())){H.syntaxFlags.add(_.HasVariableAlpha),D.push(t);continue}if(!N.has(toLowerCaseAZ(t.getName())))return!1;const[[a]]=p([[t]],{toCanonicalUnits:!0,precision:100,globals:C});if(!a||!u(a)||(a.value[0]===e.Percentage||a.value[0]===e.Number||a.value[0]===e.Dimension)&&Number.isNaN(a.value[4].value))return!1;t=a}if(D===g&&0===g.length&&u(t)&&t.value[0]===e.Ident&&"from"===toLowerCaseAZ(t.value[4].value)&&"hsla"!==m&&"rgba"!==m){if(L)return!1;for(;s(a.value[n+1])||c(a.value[n+1]);)n++;if(n++,t=a.value[n],L=l(t),!1===L)return!1;H.syntaxFlags.add(_.RelativeColorSyntax),L.colorNotation!==o&&(L=colorDataTo(L,o)),o===b.HEX||o===b.RGB?L.channels=XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(L).channels):o===b.HSL?L.channels=r.sRGB_to_HSL(XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(L).channels)):o===b.HWB&&(L.channels=r.sRGB_to_HWB(XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(L).channels))),y=normalizeRelativeColorDataChannels(L),C=noneToZeroInRelativeColorDataChannels(y)}else{if(!u(t))return!1;if(t.value[0]===e.Ident&&y&&y.has(toLowerCaseAZ(t.value[4].value))){D.push(new h(y.get(toLowerCaseAZ(t.value[4].value))));continue}D.push(t)}}}if(1!==D.length)return!1;if(1!==g.length||1!==d.length||1!==v.length)return!1;if(!u(g[0])||!u(d[0])||!u(v[0]))return!1;if(y&&!y.has("alpha"))return!1;const w=[g[0].value,d[0].value,v[0].value];1===f.length?(H.syntaxFlags.add(_.HasAlpha),u(f[0])?w.push(f[0].value):H.alpha=f[0]):y&&y.has("alpha")&&w.push(y.get("alpha"));const Z=n(w,H);return!1!==Z&&(H.channels=[Z[0][4].value,Z[1][4].value,Z[2][4].value],4===Z.length&&(H.alpha=Z[3][4].value),H)}function hsl(a,n){if(a.value.some((a=>u(a)&&a.value[0]===e.Comma))){const e=hslCommaSeparated(a);if(!1!==e)return e}{const e=hslSpaceSeparated(a,n);if(!1!==e)return e}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,b.HSL,[_.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,b.HSL,[],a)}function normalize_HWB_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(l[0]!==e.Ident||"none"!==toLowerCaseAZ(l[4].value))if(0!==t)if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,1,0,100);3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3===t?o.syntaxFlags.add(_.HasPercentageAlpha):o.syntaxFlags.add(_.HasPercentageValues);let n=normalize(l[4].value,1,0,100);3===t&&(n=normalize(l[4].value,100,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}else{const a=normalizeHue(l);if(!1===a)return!1;l[0]===e.Dimension&&o.syntaxFlags.add(_.HasDimensionValues),r.push(a)}else o.syntaxFlags.add(_.HasNoneKeywords),r.push([e.Number,"none",l[2],l[3],{value:NaN,type:a.Number}])}return r}function normalize_Lab_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(l[0]!==e.Ident||"none"!==toLowerCaseAZ(l[4].value))if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,1,0,100);1===t||2===t?n=normalize(l[4].value,1,-1/0,1/0):3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3!==t&&o.syntaxFlags.add(_.HasPercentageValues);let n=normalize(l[4].value,1,0,100);1===t||2===t?n=normalize(l[4].value,.8,-1/0,1/0):3===t&&(n=normalize(l[4].value,100,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}else o.syntaxFlags.add(_.HasNoneKeywords),r.push([e.Number,"none",l[2],l[3],{value:NaN,type:a.Number}])}return r}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,b.Lab,[],a)}function normalize_LCH_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(l[0]!==e.Ident||"none"!==toLowerCaseAZ(l[4].value))if(2!==t)if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,1,0,100);1===t?n=normalize(l[4].value,1,0,1/0):3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3!==t&&o.syntaxFlags.add(_.HasPercentageValues);let n=normalize(l[4].value,1,0,100);1===t?n=normalize(l[4].value,100/150,0,1/0):3===t&&(n=normalize(l[4].value,100,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}else{const a=normalizeHue(l);if(!1===a)return!1;l[0]===e.Dimension&&o.syntaxFlags.add(_.HasDimensionValues),r.push(a)}else o.syntaxFlags.add(_.HasNoneKeywords),r.push([e.Number,"none",l[2],l[3],{value:NaN,type:a.Number}])}return r}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,b.LCH,[],a)}const L=new Map;for(const[e,a]of Object.entries(l))L.set(e,a);function namedColor(e){const a=L.get(toLowerCaseAZ(e));return!!a&&{colorNotation:b.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([_.ColorKeyword,_.NamedColor])}}function normalize_OKLab_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(l[0]!==e.Ident||"none"!==toLowerCaseAZ(l[4].value))if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,1,0,1);1===t||2===t?n=normalize(l[4].value,1,-1/0,1/0):3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3!==t&&o.syntaxFlags.add(_.HasPercentageValues);let n=normalize(l[4].value,100,0,1);1===t||2===t?n=normalize(l[4].value,250,-1/0,1/0):3===t&&(n=normalize(l[4].value,100,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}else o.syntaxFlags.add(_.HasNoneKeywords),r.push([e.Number,"none",l[2],l[3],{value:NaN,type:a.Number}])}return r}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,b.OKLab,[],a)}function normalize_OKLCH_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(l[0]!==e.Ident||"none"!==toLowerCaseAZ(l[4].value))if(2!==t)if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,1,0,1);1===t?n=normalize(l[4].value,1,0,1/0):3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3!==t&&o.syntaxFlags.add(_.HasPercentageValues);let n=normalize(l[4].value,100,0,1);1===t?n=normalize(l[4].value,250,0,1/0):3===t&&(n=normalize(l[4].value,100,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}else{const a=normalizeHue(l);if(!1===a)return!1;l[0]===e.Dimension&&o.syntaxFlags.add(_.HasDimensionValues),r.push(a)}else o.syntaxFlags.add(_.HasNoneKeywords),r.push([e.Number,"none",l[2],l[3],{value:NaN,type:a.Number}])}return r}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,b.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,255,0,1);3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3===t?o.syntaxFlags.add(_.HasPercentageAlpha):o.syntaxFlags.add(_.HasPercentageValues);const n=normalize(l[4].value,100,0,1);r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}return(!o.syntaxFlags.has(_.HasNumberValues)||!o.syntaxFlags.has(_.HasPercentageValues))&&r}function normalize_modern_sRGB_ChannelValues(n,o){const r=[];for(let t=0;t<n.length;t++){const l=n[t];if(l[0]!==e.Ident||"none"!==toLowerCaseAZ(l[4].value))if(l[0]!==e.Percentage){if(l[0]!==e.Number)return!1;{3!==t&&o.syntaxFlags.add(_.HasNumberValues);let n=normalize(l[4].value,255,0,1);3===t&&(n=normalize(l[4].value,1,0,1)),r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}}else{3!==t&&o.syntaxFlags.add(_.HasPercentageValues);const n=normalize(l[4].value,100,0,1);r.push([e.Number,n.toString(),l[2],l[3],{value:n,type:a.Number}])}else o.syntaxFlags.add(_.HasNoneKeywords),r.push([e.Number,"none",l[2],l[3],{value:NaN,type:a.Number}])}return r}function rgb(a,n){if(a.value.some((a=>u(a)&&a.value[0]===e.Comma))){const e=rgbCommaSeparated(a);if(!1!==e)return e}else{const e=rgbSpaceSeparated(a,n);if(!1!==e)return e}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,b.RGB,[_.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,b.RGB,[],a)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(e)+"").length;if(a>n)return+e.toFixed(a-n);{const o=10**(n-a);return Math.round(e/o)*o}}function XYZ_D50_to_P3_Gamut(e){const a=n.XYZ_D50_to_P3(e);if(o.inGamut(a))return o.clip(a);let l=e.slice();return l=r.D50_to_D65(l),l=r.XYZ_to_OKLab(l),l=r.OKLab_to_OKLCH(l),l[0]<1e-6&&(l=[0,0,0]),l[0]>.999999&&(l=[1,0,0]),t.mapGamut(l,(e=>(e=r.OKLCH_to_OKLab(e),e=r.OKLab_to_XYZ(e),e=r.XYZ_to_lin_P3(e),r.gam_P3(e))),(e=>(e=r.lin_P3(e),e=r.lin_P3_to_XYZ(e),e=r.XYZ_to_OKLab(e),r.OKLab_to_OKLCH(e))))}function serializeP3(o,r=!0){o.channels=convertPowerlessComponentsToZeroValuesForDisplay(o.channels,o.colorNotation);let t=o.channels.map((e=>Number.isNaN(e)?0:e));o.colorNotation!==b.Display_P3&&(t=r?XYZ_D50_to_P3_Gamut(colorData_to_XYZ_D50(o).channels):n.XYZ_D50_to_P3(colorData_to_XYZ_D50(o).channels));const l=toPrecision(t[0],6),s=toPrecision(t[1],6),c=toPrecision(t[2],6),u=[e.Function,"color(",-1,-1,{value:"color"}],i=[e.CloseParen,")",-1,-1,void 0],N=[e.Whitespace," ",-1,-1,void 0],p=[new h([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new h(N),new h([e.Number,l.toString(),-1,-1,{value:t[0],type:a.Number}]),new h(N),new h([e.Number,s.toString(),-1,-1,{value:t[1],type:a.Number}]),new h(N),new h([e.Number,c.toString(),-1,-1,{value:t[2],type:a.Number}])];if("number"==typeof o.alpha){const n=Math.min(1,Math.max(0,toPrecision(Number.isNaN(o.alpha)?0:o.alpha)));return 1===toPrecision(n,4)?new m(u,i,p):new m(u,i,[...p,new h(N),new h([e.Delim,"/",-1,-1,{value:"/"}]),new h(N),new h([e.Number,toPrecision(n,4).toString(),-1,-1,{value:o.alpha,type:a.Integer}])])}return new m(u,i,[...p,new h(N),new h([e.Delim,"/",-1,-1,{value:"/"}]),new h(N),o.alpha])}function serializeRGB(o,t=!0){o.channels=convertPowerlessComponentsToZeroValuesForDisplay(o.channels,o.colorNotation);let l=o.channels.map((e=>Number.isNaN(e)?0:e));o.colorNotation===b.HWB?l=r.HWB_to_sRGB(l):o.colorNotation===b.HSL?l=r.HSL_to_sRGB(l):o.colorNotation!==b.RGB&&o.colorNotation!==b.HEX&&(l=t?XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(o).channels):n.XYZ_D50_to_sRGB(colorData_to_XYZ_D50(o).channels));const s=Math.min(255,Math.max(0,Math.round(255*toPrecision(l[0])))),c=Math.min(255,Math.max(0,Math.round(255*toPrecision(l[1])))),u=Math.min(255,Math.max(0,Math.round(255*toPrecision(l[2])))),i=[e.CloseParen,")",-1,-1,void 0],N=[e.Whitespace," ",-1,-1,void 0],p=[e.Comma,",",-1,-1,void 0],_=[new h([e.Number,s.toString(),-1,-1,{value:l[0],type:a.Integer}]),new h(p),new h(N),new h([e.Number,c.toString(),-1,-1,{value:l[1],type:a.Integer}]),new h(p),new h(N),new h([e.Number,u.toString(),-1,-1,{value:l[2],type:a.Integer}])];if("number"==typeof o.alpha){const n=Math.min(1,Math.max(0,toPrecision(Number.isNaN(o.alpha)?0:o.alpha)));return 1===toPrecision(n,4)?new m([e.Function,"rgb(",-1,-1,{value:"rgb"}],i,_):new m([e.Function,"rgba(",-1,-1,{value:"rgba"}],i,[..._,new h(p),new h(N),new h([e.Number,toPrecision(n,4).toString(),-1,-1,{value:o.alpha,type:a.Number}])])}return new m([e.Function,"rgba(",-1,-1,{value:"rgba"}],i,[..._,new h(p),new h(N),o.alpha])}function color(a){if(i(a)){switch(toLowerCaseAZ(a.getName())){case"rgb":case"rgba":return rgb(a,color);case"hsl":case"hsla":return hsl(a,color);case"hwb":return n=color,threeChannelSpaceSeparated(a,normalize_HWB_ChannelValues,b.HWB,[],n);case"lab":return lab(a,color);case"lch":return lch(a,color);case"oklab":return oklab(a,color);case"oklch":return oklch(a,color);case"color":return color$1(a,color);case"color-mix":return colorMix(a,color)}}var n;if(u(a)){if(a.value[0]===e.Hash)return hex(a.value);if(a.value[0]===e.Ident){const e=namedColor(a.value[4].value);return!1!==e?e:"transparent"===toLowerCaseAZ(a.value[4].value)&&{colorNotation:b.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([_.ColorKeyword])}}}return!1}export{b as ColorNotation,_ as SyntaxFlag,color,colorDataFitsRGB_Gamut,colorDataTo,serializeP3,serializeRGB};
|
|
1
|
+
import{TokenType as e,NumberType as a}from"@csstools/css-tokenizer";import{xyz as n,namedColors as r,utils as o,conversions as t,calculations as l}from"@csstools/color-helpers";import{isWhitespaceNode as s,isCommentNode as u,isTokenNode as c,isFunctionNode as i,TokenNode as m,FunctionNode as h,WhitespaceNode as N}from"@csstools/css-parser-algorithms";import{mathFunctionNames as b,calcFromComponentValues as p}from"@csstools/css-calc";var _,g;function colorData_to_XYZ_D50(e){switch(e.colorNotation){case _.HEX:case _.RGB:case _.sRGB:return{...e,colorNotation:_.XYZ_D50,channels:n.sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.Linear_sRGB:return{...e,colorNotation:_.XYZ_D50,channels:n.lin_sRGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.Display_P3:return{...e,colorNotation:_.XYZ_D50,channels:n.P3_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.Rec2020:return{...e,colorNotation:_.XYZ_D50,channels:n.rec_2020_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.A98_RGB:return{...e,colorNotation:_.XYZ_D50,channels:n.a98_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.ProPhoto_RGB:return{...e,colorNotation:_.XYZ_D50,channels:n.ProPhoto_RGB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.HSL:return{...e,colorNotation:_.XYZ_D50,channels:n.HSL_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.HWB:return{...e,colorNotation:_.XYZ_D50,channels:n.HWB_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.Lab:return{...e,colorNotation:_.XYZ_D50,channels:n.Lab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.OKLab:return{...e,colorNotation:_.XYZ_D50,channels:n.OKLab_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.LCH:return{...e,colorNotation:_.XYZ_D50,channels:n.LCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.OKLCH:return{...e,colorNotation:_.XYZ_D50,channels:n.OKLCH_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.XYZ_D50:return{...e,colorNotation:_.XYZ_D50,channels:n.XYZ_D50_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};case _.XYZ_D65:return{...e,colorNotation:_.XYZ_D50,channels:n.XYZ_D65_to_XYZ_D50(e.channels.map((e=>Number.isNaN(e)?0:e)))};default:throw new Error("Unsupported color notation")}}!function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",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"}(_||(_={})),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"}(g||(g={}));const v=new Set([_.A98_RGB,_.Display_P3,_.HEX,_.Linear_sRGB,_.ProPhoto_RGB,_.RGB,_.sRGB,_.Rec2020,_.XYZ_D50,_.XYZ_D65]);function colorDataTo(e,a){const r={...e};if(e.colorNotation!==a){const e=colorData_to_XYZ_D50(r);switch(a){case _.HEX:case _.RGB:r.colorNotation=_.RGB,r.channels=n.XYZ_D50_to_sRGB(e.channels);break;case _.sRGB:r.colorNotation=_.sRGB,r.channels=n.XYZ_D50_to_sRGB(e.channels);break;case _.Linear_sRGB:r.colorNotation=_.Linear_sRGB,r.channels=n.XYZ_D50_to_lin_sRGB(e.channels);break;case _.Display_P3:r.colorNotation=_.Display_P3,r.channels=n.XYZ_D50_to_P3(e.channels);break;case _.Rec2020:r.colorNotation=_.Rec2020,r.channels=n.XYZ_D50_to_rec_2020(e.channels);break;case _.ProPhoto_RGB:r.colorNotation=_.ProPhoto_RGB,r.channels=n.XYZ_D50_to_ProPhoto(e.channels);break;case _.A98_RGB:r.colorNotation=_.A98_RGB,r.channels=n.XYZ_D50_to_a98_RGB(e.channels);break;case _.HSL:r.colorNotation=_.HSL,r.channels=n.XYZ_D50_to_HSL(e.channels);break;case _.HWB:r.colorNotation=_.HWB,r.channels=n.XYZ_D50_to_HWB(e.channels);break;case _.Lab:r.colorNotation=_.Lab,r.channels=n.XYZ_D50_to_Lab(e.channels);break;case _.LCH:r.colorNotation=_.LCH,r.channels=n.XYZ_D50_to_LCH(e.channels);break;case _.OKLCH:r.colorNotation=_.OKLCH,r.channels=n.XYZ_D50_to_OKLCH(e.channels);break;case _.OKLab:r.colorNotation=_.OKLab,r.channels=n.XYZ_D50_to_OKLab(e.channels);break;case _.XYZ_D50:r.colorNotation=_.XYZ_D50,r.channels=n.XYZ_D50_to_XYZ_D50(e.channels);break;case _.XYZ_D65:r.colorNotation=_.XYZ_D65,r.channels=n.XYZ_D50_to_XYZ_D65(e.channels);break;default:throw new Error("Unsupported color notation")}}else r.channels=e.channels.map((e=>Number.isNaN(e)?0:e));if(a===e.colorNotation)r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[0,1,2]);else if(v.has(a)&&v.has(e.colorNotation))r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[0,1,2]);else switch(a){case _.HSL:switch(e.colorNotation){case _.HWB:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[0]);break;case _.Lab:case _.OKLab:r.channels=carryForwardMissingComponents(e.channels,[2],r.channels,[0]);break;case _.LCH:case _.OKLCH:r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[2,1,0])}break;case _.HWB:switch(e.colorNotation){case _.HSL:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[0]);break;case _.LCH:case _.OKLCH:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[2])}break;case _.Lab:case _.OKLab:switch(e.colorNotation){case _.HSL:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[2]);break;case _.Lab:case _.OKLab:r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[0,1,2]);break;case _.LCH:case _.OKLCH:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[0])}break;case _.LCH:case _.OKLCH:switch(e.colorNotation){case _.HSL:r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[2,1,0]);break;case _.HWB:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[2]);break;case _.Lab:case _.OKLab:r.channels=carryForwardMissingComponents(e.channels,[0],r.channels,[0]);break;case _.LCH:case _.OKLCH:r.channels=carryForwardMissingComponents(e.channels,[0,1,2],r.channels,[0,1,2])}}return r.channels=convertPowerlessComponentsToMissingComponents(r.channels,a),r}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case _.HSL:reducePrecision(n[1],4)<=0&&(n[0]=NaN);break;case _.HWB:Math.max(0,reducePrecision(n[1],4))+Math.max(0,reducePrecision(n[2],4))>=100&&(n[0]=NaN);break;case _.LCH:reducePrecision(n[1],4)<=0&&(n[2]=NaN);break;case _.OKLCH:reducePrecision(n[1],6)<=0&&(n[2]=NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case _.HSL:(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=NaN,n[1]=NaN),reducePrecision(n[1])<=0&&(n[0]=NaN);break;case _.HWB:Math.max(0,reducePrecision(n[1]))+Math.max(0,reducePrecision(n[2]))>=100&&(n[0]=NaN);break;case _.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=NaN,n[2]=NaN);break;case _.LCH:reducePrecision(n[1])<=0&&(n[2]=NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=NaN,n[2]=NaN);break;case _.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=NaN,n[2]=NaN);break;case _.OKLCH:reducePrecision(n[1])<=0&&(n[2]=NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=NaN,n[2]=NaN)}return n}function carryForwardMissingComponents(e,a,n,r){const o=[...n];for(const n of a)Number.isNaN(e[a[n]])&&(o[r[n]]=NaN);return o}function normalizeRelativeColorDataChannels(e){const a=new Map;switch(e.colorNotation){case _.RGB:case _.HEX:a.set("r",dummyNumberToken(255*e.channels[0])),a.set("g",dummyNumberToken(255*e.channels[1])),a.set("b",dummyNumberToken(255*e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case _.HSL:a.set("h",dummyNumberToken(e.channels[0])),a.set("s",dummyNumberToken(e.channels[1])),a.set("l",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case _.HWB:a.set("h",dummyNumberToken(e.channels[0])),a.set("w",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case _.Lab:case _.OKLab:a.set("l",dummyNumberToken(e.channels[0])),a.set("a",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case _.LCH:case _.OKLCH:a.set("l",dummyNumberToken(e.channels[0])),a.set("c",dummyNumberToken(e.channels[1])),a.set("h",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case _.sRGB:case _.A98_RGB:case _.Display_P3:case _.Rec2020:case _.Linear_sRGB:case _.ProPhoto_RGB:a.set("r",dummyNumberToken(e.channels[0])),a.set("g",dummyNumberToken(e.channels[1])),a.set("b",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha));break;case _.XYZ_D50:case _.XYZ_D65:a.set("x",dummyNumberToken(e.channels[0])),a.set("y",dummyNumberToken(e.channels[1])),a.set("z",dummyNumberToken(e.channels[2])),"number"==typeof e.alpha&&a.set("alpha",dummyNumberToken(e.alpha))}return a}function noneToZeroInRelativeColorDataChannels(e){const a=new Map;for(const[n,r]of e)Number.isNaN(r[4].value)?a.set(n,dummyNumberToken(0)):a.set(n,r);return a}function dummyNumberToken(n){return[e.Number,n.toString(),-1,-1,{value:n,type:a.Number}]}function reducePrecision(e,a=7){if(Number.isNaN(e))return 0;const n=Math.pow(10,a);return Math.round(e*n)/n}function colorDataFitsRGB_Gamut(e){const a=JSON.parse(JSON.stringify(e));a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,_.RGB).channels.find((e=>e<-1e-5||e>1.00001))}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const d=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(d,(e=>String.fromCharCode(e.charCodeAt(0)+32)))}function normalize_Color_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(g.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(g.HasPercentageValues);let t=normalize(n[4].value,100,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(g.HasNumberValues);let t=normalize(n[4].value,1,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}const f=new Set(["srgb","srgb-linear","display-p3","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function color$1(a,n){const r=[],o=[],t=[],l=[];let h,N,v=!1,d=!1;const y={colorNotation:_.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let C=r;for(let _=0;_<a.value.length;_++){let w=a.value[_];if(s(w)||u(w))for(;s(a.value[_+1])||u(a.value[_+1]);)_++;else if(C===r&&r.length&&(C=o),C===o&&o.length&&(C=t),c(w)&&w.value[0]===e.Delim&&"/"===w.value[4].value){if(C===l)return!1;C=l}else{if(i(w)){if(C===l&&"var"===toLowerCaseAZ(w.getName())){y.syntaxFlags.add(g.HasVariableAlpha),C.push(w);continue}if(!b.has(toLowerCaseAZ(w.getName())))return!1;const[[a]]=p([[w]],{toCanonicalUnits:!0,precision:100,globals:N});if(!a||!c(a)||(a.value[0]===e.Percentage||a.value[0]===e.Number||a.value[0]===e.Dimension)&&Number.isNaN(a.value[4].value))return!1;w=a}if(C===r&&0===r.length&&c(w)&&w.value[0]===e.Ident&&f.has(toLowerCaseAZ(w.value[4].value))){if(v)return!1;v=toLowerCaseAZ(w.value[4].value),y.colorNotation=colorSpaceNameToColorNotation(v),d&&(d.colorNotation!==y.colorNotation&&(d=colorDataTo(d,y.colorNotation)),h=normalizeRelativeColorDataChannels(d),N=noneToZeroInRelativeColorDataChannels(h))}else if(C===r&&0===r.length&&c(w)&&w.value[0]===e.Ident&&"from"===toLowerCaseAZ(w.value[4].value)){if(d)return!1;if(v)return!1;for(;s(a.value[_+1])||u(a.value[_+1]);)_++;if(_++,w=a.value[_],d=n(w),!1===d)return!1;y.syntaxFlags.add(g.RelativeColorSyntax)}else{if(!c(w))return!1;if(w.value[0]===e.Ident&&h&&h.has(toLowerCaseAZ(w.value[4].value))){C.push(new m(h.get(toLowerCaseAZ(w.value[4].value))));continue}C.push(w)}}}if(!v)return!1;if(1!==C.length)return!1;if(1!==r.length||1!==o.length||1!==t.length)return!1;if(!c(r[0])||!c(o[0])||!c(t[0]))return!1;if(h&&!h.has("alpha"))return!1;const w=normalize_Color_ChannelValues(r[0].value,0,y);if(!w||w[0]!==e.Number)return!1;const L=normalize_Color_ChannelValues(o[0].value,1,y);if(!L||L[0]!==e.Number)return!1;const H=normalize_Color_ChannelValues(t[0].value,2,y);if(!H||H[0]!==e.Number)return!1;const D=[w,L,H];if(1===l.length)if(y.syntaxFlags.add(g.HasAlpha),c(l[0])){const a=normalize_Color_ChannelValues(l[0].value,3,y);if(!a||a[0]!==e.Number)return!1;D.push(a)}else y.alpha=l[0];else if(h&&h.has("alpha")){const a=normalize_Color_ChannelValues(h.get("alpha"),3,y);if(!a||a[0]!==e.Number)return!1;D.push(a)}return y.channels=[D[0][4].value,D[1][4].value,D[2][4].value],4===D.length&&(y.alpha=D[3][4].value),y}function colorSpaceNameToColorNotation(e){switch(e){case"srgb":return _.sRGB;case"srgb-linear":return _.Linear_sRGB;case"display-p3":return _.Display_P3;case"a98-rgb":return _.A98_RGB;case"prophoto-rgb":return _.ProPhoto_RGB;case"rec2020":return _.Rec2020;case"xyz":case"xyz-d65":return _.XYZ_D65;case"xyz-d50":return _.XYZ_D50;default:throw new Error("Unknown color space name: "+e)}}const y=new Set(["srgb","srgb-linear","lab","oklab","xyz","xyz-d50","xyz-d65"]),C=new Set(["hsl","hwb","lch","oklch"]),w=new Set(["shorter","longer","increasing","decreasing"]);function colorMix(a,n){let r=null,o=null,t=null,l=!1;for(let i=0;i<a.value.length;i++){const m=a.value[i];if(!s(m)&&!u(m)){if(c(m)&&m.value[0]===e.Ident){if(!r&&"in"===toLowerCaseAZ(m.value[4].value)){r=m;continue}if(r&&!o){o=toLowerCaseAZ(m.value[4].value);continue}if(r&&o&&!t&&C.has(o)){t=toLowerCaseAZ(m.value[4].value);continue}if(r&&o&&t&&!l&&"hue"===toLowerCaseAZ(m.value[4].value)){l=!0;continue}return!1}return!(!c(m)||m.value[0]!==e.Comma)&&(!!o&&(t||l?!!(o&&t&&l&&C.has(o)&&w.has(t))&&colorMixPolar(o,t,colorMixComponents(a.value.slice(i+1),n)):y.has(o)?colorMixRectangular(o,colorMixComponents(a.value.slice(i+1),n)):!!C.has(o)&&colorMixPolar(o,"shorter",colorMixComponents(a.value.slice(i+1),n))))}}return!1}function colorMixComponents(a,n){const r=[];let o=1,t=!1,l=!1;for(let o=0;o<a.length;o++){let m=a[o];if(!s(m)&&!u(m)){if(!c(m)||m.value[0]!==e.Comma){if(!t){const e=n(m);if(e){t=e;continue}}if(!l){if(i(m)&&b.has(toLowerCaseAZ(m.getName()))&&([[m]]=p([[m]],{toCanonicalUnits:!0,precision:100}),!m||!c(m)||(m.value[0]===e.Percentage||m.value[0]===e.Number||m.value[0]===e.Dimension)&&Number.isNaN(m.value[4].value)))return!1;if(c(m)&&m.value[0]===e.Percentage&&m.value[4].value>=0){l=m.value[4].value;continue}}return!1}if(!t)return!1;r.push({color:t,percentage:l}),t=!1,l=!1}}if(t&&r.push({color:t,percentage:l}),2!==r.length)return!1;let m=r[0].percentage,h=r[1].percentage;return(!1===m||!(m<0||m>100))&&((!1===h||!(h<0||h>100))&&(!1===m&&!1===h?(m=50,h=50):!1!==m&&!1===h?h=100-m:!1===m&&!1!==h&&(m=100-h),(0!==m||0!==h)&&(!1!==m&&!1!==h&&(m+h>100&&(m=m/(m+h)*100,h=h/(m+h)*100),m+h<100&&(o=(m+h)/100,m=m/(m+h)*100,h=h/(m+h)*100),{a:{color:r[0].color,percentage:m},b:{color:r[1].color,percentage:h},alphaMultiplier:o}))))}function colorMixRectangular(e,a){if(!a)return!1;const n=a.a.color,r=a.b.color,o=a.a.percentage/100;let t=n.channels,l=r.channels,s=_.RGB,u=n.alpha;if("number"!=typeof u)return!1;let c=r.alpha;if("number"!=typeof c)return!1;switch(u=Number.isNaN(u)?c:u,c=Number.isNaN(c)?u:c,e){case"srgb":s=_.RGB;break;case"srgb-linear":s=_.Linear_sRGB;break;case"lab":s=_.Lab;break;case"oklab":s=_.OKLab;break;case"xyz-d50":s=_.XYZ_D50;break;case"xyz":case"xyz-d65":s=_.XYZ_D65}t=colorDataTo(n,s).channels,l=colorDataTo(r,s).channels,t[0]=premultiply(t[0],u),t[1]=premultiply(t[1],u),t[2]=premultiply(t[2],u),l[0]=premultiply(l[0],c),l[1]=premultiply(l[1],c),l[2]=premultiply(l[2],c);const i=interpolate(u,c,o);return{colorNotation:s,channels:[un_premultiply(interpolate(t[0],l[0],o),i),un_premultiply(interpolate(t[1],l[1],o),i),un_premultiply(interpolate(t[2],l[2],o),i)],alpha:i*a.alphaMultiplier,syntaxFlags:new Set([g.ColorMix])}}function colorMixPolar(e,a,n){if(!n)return!1;const r=n.a.color,o=n.b.color,t=n.a.percentage/100;let l=r.channels,s=o.channels,u=0,c=0,i=0,m=0,h=0,N=0,b=_.RGB,p=r.alpha;if("number"!=typeof p)return!1;let v=o.alpha;if("number"!=typeof v)return!1;switch(p=Number.isNaN(p)?v:p,v=Number.isNaN(v)?p:v,e){case"hsl":b=_.HSL;break;case"hwb":b=_.HWB;break;case"lch":b=_.LCH;break;case"oklch":b=_.OKLCH}switch(l=colorDataTo(r,b).channels,s=colorDataTo(o,b).channels,e){case"hsl":case"hwb":u=l[0],c=s[0],i=l[1],m=s[1],h=l[2],N=s[2];break;case"lch":case"oklch":i=l[0],m=s[0],h=l[1],N=s[1],u=l[2],c=s[2]}if(!Number.isNaN(u)&&!Number.isNaN(c)){const e=c-u;switch(a){case"shorter":e>180?u+=360:e<-180&&(c+=360);break;case"longer":-180<e&&e<180&&(e>0?u+=360:c+=360);break;case"increasing":e<0&&(c+=360);break;case"decreasing":e>0&&(u+=360);break;default:throw new Error("Unknown hue interpolation method")}}i=premultiply(i,p),h=premultiply(h,p),m=premultiply(m,v),N=premultiply(N,v);let d=[0,0,0];const f=interpolate(p,v,t);switch(e){case"hsl":case"hwb":d=[interpolate(u,c,t),un_premultiply(interpolate(i,m,t),f),un_premultiply(interpolate(h,N,t),f)];break;case"lch":case"oklch":d=[un_premultiply(interpolate(i,m,t),f),un_premultiply(interpolate(h,N,t),f),interpolate(u,c,t)]}return{colorNotation:b,channels:d,alpha:f*n.alphaMultiplier,syntaxFlags:new Set([g.ColorMix])}}function interpolate(e,a,n){return Number.isNaN(e)?a:Number.isNaN(a)?e:e*n+a*(1-n)}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?NaN:e/a}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:_.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([g.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(g.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(g.HasAlpha),n}return!1}function normalizeHue(n){if(n[0]===e.Number)return n[4].value=n[4].value%360,n[1]=n[4].value.toString(),n;if(n[0]===e.Dimension){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case"deg":break;case"rad":r=180*n[4].value/Math.PI;break;case"grad":r=.9*n[4].value;break;case"turn":r=360*n[4].value;break;default:return!1}return r%=360,[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,r,o){if(0===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(g.HasDimensionValues),a)}if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(g.HasPercentageAlpha):o.syntaxFlags.add(g.HasPercentageValues);let t=normalize(n[4].value,1,0,100);return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){if(3!==r)return!1;let o=normalize(n[4].value,1,0,100);return 3===r&&(o=normalize(n[4].value,1,0,1)),[e.Number,o.toString(),n[2],n[3],{value:o,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(g.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(0===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(g.HasDimensionValues),a)}if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(g.HasPercentageAlpha):o.syntaxFlags.add(g.HasPercentageValues);let t=n[4].value;return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(g.HasNumberValues);let t=n[4].value;return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function threeChannelLegacySyntax(a,n,r,o){const t=[],l=[],m=[],h=[],N={colorNotation:r,channels:[0,0,0],alpha:1,syntaxFlags:new Set(o)};let _=t;for(let n=0;n<a.value.length;n++){let r=a.value[n];if(!s(r)&&!u(r)){if(c(r)&&r.value[0]===e.Comma){if(_===t){_=l;continue}if(_===l){_=m;continue}if(_===m){_=h;continue}if(_===h)return!1}if(i(r)){if(_===h&&"var"===toLowerCaseAZ(r.getName())){N.syntaxFlags.add(g.HasVariableAlpha),_.push(r);continue}if(!b.has(toLowerCaseAZ(r.getName())))return!1;const[[a]]=p([[r]],{toCanonicalUnits:!0,precision:100});if(!a||!c(a)||(a.value[0]===e.Percentage||a.value[0]===e.Number||a.value[0]===e.Dimension)&&Number.isNaN(a.value[4].value))return!1;r=a}if(!c(r))return!1;_.push(r)}}if(1!==_.length)return!1;if(1!==t.length||1!==l.length||1!==m.length)return!1;if(!c(t[0])||!c(l[0])||!c(m[0]))return!1;const v=n(t[0].value,0,N);if(!v||v[0]!==e.Number)return!1;const d=n(l[0].value,1,N);if(!d||d[0]!==e.Number)return!1;const f=n(m[0].value,2,N);if(!f||f[0]!==e.Number)return!1;const y=[v,d,f];if(1===h.length)if(N.syntaxFlags.add(g.HasAlpha),c(h[0])){const a=n(h[0].value,3,N);if(!a||a[0]!==e.Number)return!1;y.push(a)}else N.alpha=h[0];return N.channels=[y[0][4].value,y[1][4].value,y[2][4].value],4===y.length&&(N.alpha=y[3][4].value),N}function threeChannelSpaceSeparated(a,n,r,o,t){const l=toLowerCaseAZ(a.getName()),h=[],N=[],_=[],v=[];let d,f,y=!1;const C={colorNotation:r,channels:[0,0,0],alpha:1,syntaxFlags:new Set(o)};let w=h;for(let n=0;n<a.value.length;n++){let o=a.value[n];if(s(o)||u(o))for(;s(a.value[n+1])||u(a.value[n+1]);)n++;else if(w===h&&h.length&&(w=N),w===N&&N.length&&(w=_),c(o)&&o.value[0]===e.Delim&&"/"===o.value[4].value){if(w===v)return!1;w=v}else{if(i(o)){if(w===v&&"var"===toLowerCaseAZ(o.getName())){C.syntaxFlags.add(g.HasVariableAlpha),w.push(o);continue}if(!b.has(toLowerCaseAZ(o.getName())))return!1;const[[a]]=p([[o]],{toCanonicalUnits:!0,precision:100,globals:f});if(!a||!c(a)||(a.value[0]===e.Percentage||a.value[0]===e.Number||a.value[0]===e.Dimension)&&Number.isNaN(a.value[4].value))return!1;o=a}if(w===h&&0===h.length&&c(o)&&o.value[0]===e.Ident&&"from"===toLowerCaseAZ(o.value[4].value)&&"hsla"!==l&&"rgba"!==l){if(y)return!1;for(;s(a.value[n+1])||u(a.value[n+1]);)n++;if(n++,o=a.value[n],y=t(o),!1===y)return!1;C.syntaxFlags.add(g.RelativeColorSyntax),y.colorNotation!==r&&(y=colorDataTo(y,r)),d=normalizeRelativeColorDataChannels(y),f=noneToZeroInRelativeColorDataChannels(d)}else{if(!c(o))return!1;if(o.value[0]===e.Ident&&d&&d.has(toLowerCaseAZ(o.value[4].value))){w.push(new m(d.get(toLowerCaseAZ(o.value[4].value))));continue}w.push(o)}}}if(1!==w.length)return!1;if(1!==h.length||1!==N.length||1!==_.length)return!1;if(!c(h[0])||!c(N[0])||!c(_[0]))return!1;if(d&&!d.has("alpha"))return!1;const L=n(h[0].value,0,C);if(!L||L[0]!==e.Number)return!1;const H=n(N[0].value,1,C);if(!H||H[0]!==e.Number)return!1;const D=n(_[0].value,2,C);if(!D||D[0]!==e.Number)return!1;const Z=[L,H,D];if(1===v.length)if(C.syntaxFlags.add(g.HasAlpha),c(v[0])){const a=n(v[0].value,3,C);if(!a||a[0]!==e.Number)return!1;Z.push(a)}else C.alpha=v[0];else if(d&&d.has("alpha")){const a=n(d.get("alpha"),3,C);if(!a||a[0]!==e.Number)return!1;Z.push(a)}return C.channels=[Z[0][4].value,Z[1][4].value,Z[2][4].value],4===Z.length&&(C.alpha=Z[3][4].value),C}function hsl(a,n){if(a.value.some((a=>c(a)&&a.value[0]===e.Comma))){const e=hslCommaSeparated(a);if(!1!==e)return e}{const e=hslSpaceSeparated(a,n);if(!1!==e)return e}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,_.HSL,[g.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,_.HSL,[],a)}function normalize_HWB_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(g.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(0===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(g.HasDimensionValues),a)}if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(g.HasPercentageAlpha):o.syntaxFlags.add(g.HasPercentageValues);let t=n[4].value;return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(g.HasNumberValues);let t=n[4].value;return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(g.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(g.HasPercentageValues);let t=normalize(n[4].value,1,0,100);return 1===r||2===r?t=normalize(n[4].value,.8,-1/0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(g.HasNumberValues);let t=normalize(n[4].value,1,0,100);return 1===r||2===r?t=normalize(n[4].value,1,-1/0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,_.Lab,[],a)}function normalize_LCH_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(g.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(2===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(g.HasDimensionValues),a)}if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(g.HasPercentageValues);let t=normalize(n[4].value,1,0,100);return 1===r?t=normalize(n[4].value,100/150,0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(g.HasNumberValues);let t=normalize(n[4].value,1,0,100);return 1===r?t=normalize(n[4].value,1,0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,_.LCH,[],a)}const L=new Map;for(const[e,a]of Object.entries(r))L.set(e,a);function namedColor(e){const a=L.get(toLowerCaseAZ(e));return!!a&&{colorNotation:_.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([g.ColorKeyword,g.NamedColor])}}function normalize_OKLab_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(g.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(g.HasPercentageValues);let t=normalize(n[4].value,100,0,1);return 1===r||2===r?t=normalize(n[4].value,250,-1/0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(g.HasNumberValues);let t=normalize(n[4].value,1,0,1);return 1===r||2===r?t=normalize(n[4].value,1,-1/0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,_.OKLab,[],a)}function normalize_OKLCH_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(g.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(2===r){const a=normalizeHue(n);return!1!==a&&(n[0]===e.Dimension&&o.syntaxFlags.add(g.HasDimensionValues),a)}if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(g.HasPercentageValues);let t=normalize(n[4].value,100,0,1);return 1===r?t=normalize(n[4].value,250,0,1/0):3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(g.HasNumberValues);let t=normalize(n[4].value,1,0,1);return 1===r?t=normalize(n[4].value,1,0,1/0):3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,_.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,r,o){if(n[0]===e.Percentage){3===r?o.syntaxFlags.add(g.HasPercentageAlpha):o.syntaxFlags.add(g.HasPercentageValues);const t=normalize(n[4].value,100,0,1);return[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(g.HasNumberValues);let t=normalize(n[4].value,255,0,1);return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(n,r,o){if(n[0]===e.Ident&&"none"===toLowerCaseAZ(n[4].value))return o.syntaxFlags.add(g.HasNoneKeywords),[e.Number,"none",n[2],n[3],{value:NaN,type:a.Number}];if(n[0]===e.Percentage){3!==r&&o.syntaxFlags.add(g.HasPercentageValues);let t=normalize(n[4].value,100,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,100,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}if(n[0]===e.Number){3!==r&&o.syntaxFlags.add(g.HasNumberValues);let t=normalize(n[4].value,255,-1/0,1/0);return 3===r&&(t=normalize(n[4].value,1,0,1)),[e.Number,t.toString(),n[2],n[3],{value:t,type:a.Number}]}return!1}function rgb(a,n){if(a.value.some((a=>c(a)&&a.value[0]===e.Comma))){const e=rgbCommaSeparated(a);if(!1!==e)return(!e.syntaxFlags.has(g.HasNumberValues)||!e.syntaxFlags.has(g.HasPercentageValues))&&e}else{const e=rgbSpaceSeparated(a,n);if(!1!==e)return e}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,_.RGB,[g.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,_.RGB,[],a)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(e)+"").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function XYZ_D50_to_P3_Gamut(e){const a=n.XYZ_D50_to_P3(e);if(o.inGamut(a))return o.clip(a);let r=e.slice();return r=t.D50_to_D65(r),r=t.XYZ_to_OKLab(r),r=t.OKLab_to_OKLCH(r),r[0]<1e-6&&(r=[0,0,0]),r[0]>.999999&&(r=[1,0,0]),l.mapGamut(r,(e=>(e=t.OKLCH_to_OKLab(e),e=t.OKLab_to_XYZ(e),e=t.XYZ_to_lin_P3(e),t.gam_P3(e))),(e=>(e=t.lin_P3(e),e=t.lin_P3_to_XYZ(e),e=t.XYZ_to_OKLab(e),t.OKLab_to_OKLCH(e))))}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,")",-1,-1,void 0];if("number"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new h(r,l,t):new h(r,l,[...t,new N([o]),new m([e.Delim,"/",-1,-1,{value:"/"}]),new N([o]),new m([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new h(r,l,[...t,new N([o]),new m([e.Delim,"/",-1,-1,{value:"/"}]),new N([o]),n.alpha])}function serializeP3(r,o=!0){r.channels=convertPowerlessComponentsToZeroValuesForDisplay(r.channels,r.colorNotation);let t=r.channels.map((e=>Number.isNaN(e)?0:e));r.colorNotation!==_.Display_P3&&(t=o?XYZ_D50_to_P3_Gamut(colorData_to_XYZ_D50(r).channels):n.XYZ_D50_to_P3(colorData_to_XYZ_D50(r).channels));const l=toPrecision(t[0],6),s=toPrecision(t[1],6),u=toPrecision(t[2],6),c=[e.Function,"color(",-1,-1,{value:"color"}],i=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(r,c,i,[new m([e.Ident,"display-p3",-1,-1,{value:"display-p3"}]),new N([i]),new m([e.Number,l.toString(),-1,-1,{value:t[0],type:a.Number}]),new N([i]),new m([e.Number,s.toString(),-1,-1,{value:t[1],type:a.Number}]),new N([i]),new m([e.Number,u.toString(),-1,-1,{value:t[2],type:a.Number}])])}function XYZ_D50_to_sRGB_Gamut(e){const a=n.XYZ_D50_to_sRGB(e);if(o.inGamut(a))return o.clip(a);let r=e.slice();return r=t.D50_to_D65(r),r=t.XYZ_to_OKLab(r),r=t.OKLab_to_OKLCH(r),r[0]<1e-6&&(r=[0,0,0]),r[0]>.999999&&(r=[1,0,0]),l.mapGamut(r,(e=>(e=t.OKLCH_to_OKLab(e),e=t.OKLab_to_XYZ(e),e=t.XYZ_to_lin_sRGB(e),t.gam_sRGB(e))),(e=>(e=t.lin_sRGB(e),e=t.lin_sRGB_to_XYZ(e),e=t.XYZ_to_OKLab(e),t.OKLab_to_OKLCH(e))))}function serializeRGB(r,o=!0){r.channels=convertPowerlessComponentsToZeroValuesForDisplay(r.channels,r.colorNotation);let t=r.channels.map((e=>Number.isNaN(e)?0:e));t=o?XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(r).channels):n.XYZ_D50_to_sRGB(colorData_to_XYZ_D50(r).channels);const l=Math.min(255,Math.max(0,Math.round(255*toPrecision(t[0])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(t[1])))),u=Math.min(255,Math.max(0,Math.round(255*toPrecision(t[2])))),c=[e.CloseParen,")",-1,-1,void 0],i=[e.Whitespace," ",-1,-1,void 0],b=[e.Comma,",",-1,-1,void 0],p=[new m([e.Number,l.toString(),-1,-1,{value:t[0],type:a.Integer}]),new m(b),new N([i]),new m([e.Number,s.toString(),-1,-1,{value:t[1],type:a.Integer}]),new m(b),new N([i]),new m([e.Number,u.toString(),-1,-1,{value:t[2],type:a.Integer}])];if("number"==typeof r.alpha){const n=Math.min(1,Math.max(0,toPrecision(Number.isNaN(r.alpha)?0:r.alpha)));return 1===toPrecision(n,4)?new h([e.Function,"rgb(",-1,-1,{value:"rgb"}],c,p):new h([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...p,new m(b),new N([i]),new m([e.Number,toPrecision(n,4).toString(),-1,-1,{value:r.alpha,type:a.Number}])])}return new h([e.Function,"rgba(",-1,-1,{value:"rgba"}],c,[...p,new m(b),new N([i]),r.alpha])}function serializeOKLCH(r){r.channels=convertPowerlessComponentsToZeroValuesForDisplay(r.channels,r.colorNotation);let o=r.channels.map((e=>Number.isNaN(e)?0:e));r.colorNotation!==_.OKLCH&&(o=n.XYZ_D50_to_OKLCH(colorData_to_XYZ_D50(r).channels));const t=toPrecision(o[0],6),l=toPrecision(o[1],6),s=toPrecision(o[2],6),u=[e.Function,"oklch(",-1,-1,{value:"oklch"}],c=[e.Whitespace," ",-1,-1,void 0];return serializeWithAlpha(r,u,c,[new m([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new N([c]),new m([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new N([c]),new m([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function color(a){if(i(a)){switch(toLowerCaseAZ(a.getName())){case"rgb":case"rgba":return rgb(a,color);case"hsl":case"hsla":return hsl(a,color);case"hwb":return n=color,threeChannelSpaceSeparated(a,normalize_HWB_ChannelValues,_.HWB,[],n);case"lab":return lab(a,color);case"lch":return lch(a,color);case"oklab":return oklab(a,color);case"oklch":return oklch(a,color);case"color":return color$1(a,color);case"color-mix":return colorMix(a,color)}}var n;if(c(a)){if(a.value[0]===e.Hash)return hex(a.value);if(a.value[0]===e.Ident){const e=namedColor(a.value[4].value);return!1!==e?e:"transparent"===toLowerCaseAZ(a.value[4].value)&&{colorNotation:_.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([g.ColorKeyword])}}}return!1}export{_ as ColorNotation,g as SyntaxFlag,color,colorDataFitsRGB_Gamut,colorDataTo,serializeOKLCH,serializeP3,serializeRGB};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ColorData } from '../color-data';
|
|
2
|
+
import type { TokenFunction, TokenWhitespace } from '@csstools/css-tokenizer';
|
|
3
|
+
import { FunctionNode, TokenNode, WhitespaceNode } from '@csstools/css-parser-algorithms';
|
|
4
|
+
export declare function serializeWithAlpha(color: ColorData, fn: TokenFunction, space: TokenWhitespace, channels: Array<TokenNode | WhitespaceNode>): FunctionNode;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@csstools/css-color-parser",
|
|
3
3
|
"description": "Parse CSS color values",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.3.1",
|
|
5
5
|
"contributors": [
|
|
6
6
|
{
|
|
7
7
|
"name": "Antonio Laguna",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"dist"
|
|
46
46
|
],
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@csstools/color-helpers": "^3.0.
|
|
48
|
+
"@csstools/color-helpers": "^3.0.2",
|
|
49
49
|
"@csstools/css-calc": "^1.1.3"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|