@tbela99/css-parser 1.1.1-alpha4 → 1.2.0
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 +8 -1
- package/README.md +53 -6
- package/dist/index-umd-web.js +4195 -3375
- package/dist/index.cjs +5468 -4648
- package/dist/index.d.ts +42 -31
- package/dist/lib/ast/expand.js +81 -65
- package/dist/lib/ast/features/calc.js +37 -35
- package/dist/lib/ast/features/inlinecssvariables.js +25 -17
- package/dist/lib/ast/features/prefix.js +22 -19
- package/dist/lib/ast/features/shorthand.js +1 -1
- package/dist/lib/ast/features/transform.js +17 -2
- package/dist/lib/ast/math/expression.js +184 -159
- package/dist/lib/ast/math/math.js +22 -20
- package/dist/lib/ast/minify.js +249 -200
- package/dist/lib/ast/transform/compute.js +48 -38
- package/dist/lib/ast/transform/matrix.js +6 -5
- package/dist/lib/ast/transform/minify.js +31 -34
- package/dist/lib/ast/transform/utils.js +76 -16
- package/dist/lib/ast/types.js +32 -1
- package/dist/lib/fs/resolve.js +1 -14
- package/dist/lib/parser/declaration/list.js +1 -1
- package/dist/lib/parser/declaration/map.js +1 -1
- package/dist/lib/parser/declaration/set.js +1 -1
- package/dist/lib/parser/parse.js +19 -95
- package/dist/lib/parser/tokenize.js +1 -13
- package/dist/lib/parser/utils/declaration.js +1 -1
- package/dist/lib/parser/utils/type.js +1 -1
- package/dist/lib/renderer/render.js +44 -168
- package/dist/lib/{renderer → syntax}/color/a98rgb.js +2 -2
- package/dist/lib/syntax/color/cmyk.js +104 -0
- package/dist/lib/{renderer → syntax}/color/color-mix.js +20 -21
- package/dist/lib/syntax/color/color.js +581 -0
- package/dist/lib/syntax/color/hex.js +179 -0
- package/dist/lib/syntax/color/hsl.js +201 -0
- package/dist/lib/syntax/color/hwb.js +185 -0
- package/dist/lib/syntax/color/lab.js +262 -0
- package/dist/lib/syntax/color/lch.js +194 -0
- package/dist/lib/syntax/color/oklab.js +237 -0
- package/dist/lib/syntax/color/oklch.js +166 -0
- package/dist/lib/{renderer → syntax}/color/p3.js +3 -3
- package/dist/lib/{renderer → syntax}/color/rec2020.js +11 -11
- package/dist/lib/{renderer → syntax}/color/relativecolor.js +53 -40
- package/dist/lib/syntax/color/rgb.js +140 -0
- package/dist/lib/{renderer → syntax}/color/srgb.js +58 -46
- package/dist/lib/{renderer → syntax}/color/utils/components.js +7 -7
- package/dist/lib/{renderer → syntax}/color/utils/constants.js +7 -34
- package/dist/lib/syntax/color/utils/distance.js +30 -0
- package/dist/lib/{renderer → syntax}/color/xyz.js +27 -14
- package/dist/lib/{renderer → syntax}/color/xyzd50.js +8 -8
- package/dist/lib/syntax/syntax.js +77 -67
- package/dist/lib/syntax/utils.js +70 -0
- package/dist/lib/validation/at-rules/container.js +1 -1
- package/dist/lib/validation/at-rules/counter-style.js +1 -1
- package/dist/lib/validation/at-rules/custom-media.js +1 -1
- package/dist/lib/validation/at-rules/document.js +1 -1
- package/dist/lib/validation/at-rules/font-feature-values.js +2 -2
- package/dist/lib/validation/at-rules/import.js +1 -1
- package/dist/lib/validation/at-rules/keyframes.js +14 -13
- package/dist/lib/validation/at-rules/layer.js +1 -1
- package/dist/lib/validation/at-rules/media.js +1 -1
- package/dist/lib/validation/at-rules/namespace.js +1 -1
- package/dist/lib/validation/at-rules/page-margin-box.js +1 -1
- package/dist/lib/validation/at-rules/page.js +1 -1
- package/dist/lib/validation/at-rules/supports.js +1 -1
- package/dist/lib/validation/at-rules/when.js +1 -1
- package/dist/lib/validation/atrule.js +2 -2
- package/dist/lib/validation/config.js +4 -3
- package/dist/lib/validation/config.json.js +1 -1
- package/dist/lib/validation/parser/parse.js +12 -7
- package/dist/lib/validation/selector.js +9 -8
- package/dist/lib/validation/syntax.js +171 -132
- package/dist/lib/validation/syntaxes/complex-selector-list.js +13 -19
- package/dist/lib/validation/syntaxes/complex-selector.js +1 -1
- package/dist/lib/validation/syntaxes/compound-selector.js +5 -24
- package/dist/lib/validation/syntaxes/family-name.js +36 -39
- package/dist/lib/validation/syntaxes/keyframe-selector.js +14 -22
- package/dist/lib/validation/syntaxes/layer-name.js +1 -1
- package/dist/lib/validation/syntaxes/relative-selector-list.js +27 -25
- package/dist/lib/validation/syntaxes/relative-selector.js +1 -1
- package/dist/lib/validation/syntaxes/url.js +35 -33
- package/dist/lib/validation/utils/list.js +10 -9
- package/dist/lib/validation/utils/whitespace.js +1 -1
- package/dist/node/index.js +4 -2
- package/dist/web/index.js +4 -2
- package/package.json +4 -4
- package/.editorconfig +0 -484
- package/dist/lib/ast/transform/convert.js +0 -33
- package/dist/lib/ast/utils/utils.js +0 -104
- package/dist/lib/renderer/color/color.js +0 -654
- package/dist/lib/renderer/color/hex.js +0 -105
- package/dist/lib/renderer/color/hsl.js +0 -125
- package/dist/lib/renderer/color/hwb.js +0 -103
- package/dist/lib/renderer/color/lab.js +0 -148
- package/dist/lib/renderer/color/lch.js +0 -90
- package/dist/lib/renderer/color/oklab.js +0 -131
- package/dist/lib/renderer/color/oklch.js +0 -75
- package/dist/lib/renderer/color/rgb.js +0 -50
- package/dist/lib/validation/syntaxes/keyframe-block-list.js +0 -28
- package/dist/lib/{renderer → syntax}/color/hsv.js +0 -0
- package/dist/lib/{renderer → syntax}/color/prophotorgb.js +1 -1
- /package/dist/lib/{renderer → syntax}/color/utils/matrix.js +0 -0
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
import { EnumToken, ColorType } from '../../ast/types.js';
|
|
2
|
+
import '../../ast/minify.js';
|
|
3
|
+
import '../../ast/walk.js';
|
|
4
|
+
import '../../parser/parse.js';
|
|
5
|
+
import '../../parser/tokenize.js';
|
|
6
|
+
import '../../parser/utils/config.js';
|
|
7
|
+
import { isIdentColor } from '../syntax.js';
|
|
8
|
+
import { color2RgbToken, lch2RgbToken, lab2RgbToken, oklch2RgbToken, oklab2RgbToken, cmyk2RgbToken, hwb2RgbToken, hsl2RgbToken, hex2RgbToken, cmyk2rgbvalues } from './rgb.js';
|
|
9
|
+
import { color2HslToken, lch2HslToken, lab2HslToken, oklch2HslToken, oklab2HslToken, cmyk2HslToken, hwb2HslToken, hex2HslToken, rgb2HslToken } from './hsl.js';
|
|
10
|
+
import { color2hwbToken, cmyk2hwbToken, lch2hwbToken, lab2hwbToken, oklch2hwbToken, oklab2hwbToken, hsl2hwbToken, rgb2hwbToken } from './hwb.js';
|
|
11
|
+
import { color2labToken, oklch2labToken, oklab2labToken, lch2labToken, cmyk2labToken, hwb2labToken, hsl2labToken, rgb2labToken, hex2labToken } from './lab.js';
|
|
12
|
+
import { color2lchToken, oklch2lchToken, oklab2lchToken, lab2lchToken, cmyk2lchToken, hwb2lchToken, hsl2lchToken, rgb2lchToken, hex2lchToken } from './lch.js';
|
|
13
|
+
import { color2oklabToken, oklch2oklabToken, lch2oklabToken, lab2oklabToken, cmyk2oklabToken, hwb2oklabToken, hsl2oklabToken, rgb2oklabToken, hex2oklabToken } from './oklab.js';
|
|
14
|
+
import { color2oklchToken, lch2oklchToken, oklab2oklchToken, lab2oklchToken, cmyk2oklchToken, hwb2oklchToken, hsl2oklchToken, rgb2oklchToken, hex2oklchToken } from './oklch.js';
|
|
15
|
+
import { colorFuncColorSpace, colorPrecision, anglePrecision } from './utils/constants.js';
|
|
16
|
+
import { getComponents } from './utils/components.js';
|
|
17
|
+
import { oklch2srgbvalues, lch2srgbvalues, oklab2srgbvalues, lab2srgbvalues, hwb2srgbvalues, hsl2srgb, rgb2srgb, hex2srgbvalues, xyz2srgb, lsrgb2srgbvalues, srgb2lsrgbvalues } from './srgb.js';
|
|
18
|
+
import { prophotorgb2srgbvalues, srgb2prophotorgbvalues } from './prophotorgb.js';
|
|
19
|
+
import { rec20202srgb, srgb2rec2020values } from './rec2020.js';
|
|
20
|
+
import { srgb2xyz_d50, srgb2xyz } from './xyz.js';
|
|
21
|
+
import { p32srgbvalues, srgb2p3values } from './p3.js';
|
|
22
|
+
import { xyzd502srgb } from './xyzd50.js';
|
|
23
|
+
import { colorMix } from './color-mix.js';
|
|
24
|
+
import { reduceHexValue, rgb2HexToken, color2HexToken, lch2HexToken, lab2HexToken, oklch2HexToken, oklab2HexToken, cmyk2HexToken, hwb2HexToken, hsl2HexToken } from './hex.js';
|
|
25
|
+
import { parseRelativeColor } from './relativecolor.js';
|
|
26
|
+
import { color2cmykToken, lch2cmykToken, lab2cmykToken, oklch2cmykToken, oklab2cmyk, hwb2cmykToken, hsl2cmykToken, rgb2cmykToken } from './cmyk.js';
|
|
27
|
+
import { a98rgb2srgbvalues, srgb2a98values } from './a98rgb.js';
|
|
28
|
+
import '../../renderer/sourcemap/lib/encode.js';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Converts a color token to another color space
|
|
32
|
+
* @param token
|
|
33
|
+
* @param to
|
|
34
|
+
*/
|
|
35
|
+
function convertColor(token, to) {
|
|
36
|
+
if (token.kin == ColorType.SYS ||
|
|
37
|
+
token.kin == ColorType.DPSYS ||
|
|
38
|
+
(isIdentColor(token) &&
|
|
39
|
+
('currentcolor'.localeCompare(token.val, undefined, { sensitivity: 'base' }) == 0))) {
|
|
40
|
+
return token;
|
|
41
|
+
}
|
|
42
|
+
if (token.kin == ColorType.COLOR_MIX && to != ColorType.COLOR_MIX) {
|
|
43
|
+
const children = token.chi.reduce((acc, t) => {
|
|
44
|
+
if (t.typ == EnumToken.ColorTokenType) {
|
|
45
|
+
acc.push([t]);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
if (![EnumToken.WhitespaceTokenType, EnumToken.CommentTokenType, EnumToken.CommaTokenType].includes(t.typ)) {
|
|
49
|
+
acc[acc.length - 1].push(t);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return acc;
|
|
53
|
+
}, [[]]);
|
|
54
|
+
token = colorMix(children[0][1], children[0][2], children[1][0], children[1][1], children[2][0], children[2][1]);
|
|
55
|
+
if (token == null) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (token.cal == 'rel' && ['rgb', 'hsl', 'hwb', 'lab', 'lch', 'oklab', 'oklch', 'color'].includes(token.val.toLowerCase())) {
|
|
60
|
+
const chi = getComponents(token);
|
|
61
|
+
const offset = token.val == 'color' ? 2 : 1;
|
|
62
|
+
if (chi != null) {
|
|
63
|
+
// @ts-ignore
|
|
64
|
+
const color = chi[1];
|
|
65
|
+
const components = parseRelativeColor(token.val.toLowerCase() == 'color' ? chi[offset].val : token.val, color, chi[offset + 1], chi[offset + 2], chi[offset + 3], chi[offset + 4]);
|
|
66
|
+
if (components != null) {
|
|
67
|
+
token = {
|
|
68
|
+
...token,
|
|
69
|
+
chi: [...(token.val == 'color' ? [chi[offset]] : []), ...Object.values(components)]
|
|
70
|
+
};
|
|
71
|
+
delete token.cal;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (token.kin == to) {
|
|
76
|
+
if (token.kin == ColorType.HEX || token.kin == ColorType.LIT) {
|
|
77
|
+
token.val = reduceHexValue(token.val);
|
|
78
|
+
token.kin = token.val[0] == '#' ? ColorType.HEX : ColorType.LIT;
|
|
79
|
+
}
|
|
80
|
+
return token;
|
|
81
|
+
}
|
|
82
|
+
if (token.kin == ColorType.COLOR) {
|
|
83
|
+
const colorSpace = token.chi.find(t => ![EnumToken.WhitespaceTokenType, EnumToken.CommentTokenType].includes(t.typ));
|
|
84
|
+
if (colorSpace.val == ColorType[to].toLowerCase().replaceAll('_', '-')) {
|
|
85
|
+
return token;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (to == ColorType.HSL) {
|
|
89
|
+
switch (token.kin) {
|
|
90
|
+
case ColorType.RGB:
|
|
91
|
+
case ColorType.RGBA:
|
|
92
|
+
return rgb2HslToken(token);
|
|
93
|
+
case ColorType.HEX:
|
|
94
|
+
case ColorType.LIT:
|
|
95
|
+
return hex2HslToken(token);
|
|
96
|
+
case ColorType.HWB:
|
|
97
|
+
return hwb2HslToken(token);
|
|
98
|
+
case ColorType.DEVICE_CMYK:
|
|
99
|
+
return cmyk2HslToken(token);
|
|
100
|
+
case ColorType.OKLAB:
|
|
101
|
+
return oklab2HslToken(token);
|
|
102
|
+
case ColorType.OKLCH:
|
|
103
|
+
return oklch2HslToken(token);
|
|
104
|
+
case ColorType.LAB:
|
|
105
|
+
return lab2HslToken(token);
|
|
106
|
+
case ColorType.LCH:
|
|
107
|
+
return lch2HslToken(token);
|
|
108
|
+
case ColorType.COLOR:
|
|
109
|
+
return color2HslToken(token);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (to == ColorType.HWB) {
|
|
113
|
+
switch (token.kin) {
|
|
114
|
+
case ColorType.RGB:
|
|
115
|
+
case ColorType.RGBA:
|
|
116
|
+
return rgb2hwbToken(token);
|
|
117
|
+
case ColorType.HEX:
|
|
118
|
+
case ColorType.LIT:
|
|
119
|
+
return rgb2hwbToken(token);
|
|
120
|
+
case ColorType.HSL:
|
|
121
|
+
case ColorType.HSLA:
|
|
122
|
+
return hsl2hwbToken(token);
|
|
123
|
+
case ColorType.OKLAB:
|
|
124
|
+
return oklab2hwbToken(token);
|
|
125
|
+
case ColorType.OKLCH:
|
|
126
|
+
return oklch2hwbToken(token);
|
|
127
|
+
case ColorType.LAB:
|
|
128
|
+
return lab2hwbToken(token);
|
|
129
|
+
case ColorType.LCH:
|
|
130
|
+
return lch2hwbToken(token);
|
|
131
|
+
case ColorType.DEVICE_CMYK:
|
|
132
|
+
return cmyk2hwbToken(token);
|
|
133
|
+
case ColorType.COLOR:
|
|
134
|
+
return color2hwbToken(token);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else if (to == ColorType.DEVICE_CMYK) {
|
|
138
|
+
switch (token.kin) {
|
|
139
|
+
case ColorType.RGB:
|
|
140
|
+
case ColorType.RGBA:
|
|
141
|
+
return rgb2cmykToken(token);
|
|
142
|
+
case ColorType.HEX:
|
|
143
|
+
case ColorType.LIT:
|
|
144
|
+
return rgb2cmykToken(token);
|
|
145
|
+
case ColorType.HSL:
|
|
146
|
+
case ColorType.HSLA:
|
|
147
|
+
return hsl2cmykToken(token);
|
|
148
|
+
case ColorType.HWB:
|
|
149
|
+
return hwb2cmykToken(token);
|
|
150
|
+
case ColorType.OKLAB:
|
|
151
|
+
return oklab2cmyk(token);
|
|
152
|
+
case ColorType.OKLCH:
|
|
153
|
+
return oklch2cmykToken(token);
|
|
154
|
+
case ColorType.LAB:
|
|
155
|
+
return lab2cmykToken(token);
|
|
156
|
+
//
|
|
157
|
+
case ColorType.LCH:
|
|
158
|
+
return lch2cmykToken(token);
|
|
159
|
+
case ColorType.COLOR:
|
|
160
|
+
return color2cmykToken(token);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else if (to == ColorType.HEX || to == ColorType.LIT) {
|
|
164
|
+
switch (token.kin) {
|
|
165
|
+
case ColorType.HEX:
|
|
166
|
+
case ColorType.LIT: {
|
|
167
|
+
const val = reduceHexValue(token.val);
|
|
168
|
+
return {
|
|
169
|
+
typ: EnumToken.ColorTokenType,
|
|
170
|
+
val,
|
|
171
|
+
kin: val[0] == '#' ? ColorType.HEX : ColorType.LIT
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
case ColorType.HSL:
|
|
175
|
+
return hsl2HexToken(token);
|
|
176
|
+
case ColorType.HWB:
|
|
177
|
+
return hwb2HexToken(token);
|
|
178
|
+
case ColorType.DEVICE_CMYK:
|
|
179
|
+
return cmyk2HexToken(token);
|
|
180
|
+
case ColorType.OKLAB:
|
|
181
|
+
return oklab2HexToken(token);
|
|
182
|
+
case ColorType.OKLCH:
|
|
183
|
+
return oklch2HexToken(token);
|
|
184
|
+
case ColorType.LAB:
|
|
185
|
+
return lab2HexToken(token);
|
|
186
|
+
case ColorType.LCH:
|
|
187
|
+
return lch2HexToken(token);
|
|
188
|
+
case ColorType.COLOR:
|
|
189
|
+
return color2HexToken(token);
|
|
190
|
+
case ColorType.RGB:
|
|
191
|
+
case ColorType.RGBA:
|
|
192
|
+
return rgb2HexToken(token);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else if (to == ColorType.RGB) {
|
|
196
|
+
switch (token.kin) {
|
|
197
|
+
case ColorType.HEX:
|
|
198
|
+
case ColorType.LIT:
|
|
199
|
+
return hex2RgbToken(token);
|
|
200
|
+
case ColorType.HSL:
|
|
201
|
+
return hsl2RgbToken(token);
|
|
202
|
+
case ColorType.HWB:
|
|
203
|
+
return hwb2RgbToken(token);
|
|
204
|
+
case ColorType.DEVICE_CMYK:
|
|
205
|
+
return cmyk2RgbToken(token);
|
|
206
|
+
case ColorType.OKLAB:
|
|
207
|
+
return oklab2RgbToken(token);
|
|
208
|
+
case ColorType.OKLCH:
|
|
209
|
+
return oklch2RgbToken(token);
|
|
210
|
+
case ColorType.LAB:
|
|
211
|
+
return lab2RgbToken(token);
|
|
212
|
+
case ColorType.LCH:
|
|
213
|
+
return lch2RgbToken(token);
|
|
214
|
+
case ColorType.COLOR:
|
|
215
|
+
return color2RgbToken(token);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else if (to == ColorType.LAB) {
|
|
219
|
+
switch (token.kin) {
|
|
220
|
+
case ColorType.HEX:
|
|
221
|
+
case ColorType.LIT:
|
|
222
|
+
return hex2labToken(token);
|
|
223
|
+
case ColorType.RGB:
|
|
224
|
+
case ColorType.RGBA:
|
|
225
|
+
return rgb2labToken(token);
|
|
226
|
+
case ColorType.HSL:
|
|
227
|
+
case ColorType.HSLA:
|
|
228
|
+
return hsl2labToken(token);
|
|
229
|
+
case ColorType.HWB:
|
|
230
|
+
return hwb2labToken(token);
|
|
231
|
+
case ColorType.DEVICE_CMYK:
|
|
232
|
+
return cmyk2labToken(token);
|
|
233
|
+
case ColorType.LCH:
|
|
234
|
+
return lch2labToken(token);
|
|
235
|
+
case ColorType.OKLAB:
|
|
236
|
+
return oklab2labToken(token);
|
|
237
|
+
case ColorType.OKLCH:
|
|
238
|
+
return oklch2labToken(token);
|
|
239
|
+
case ColorType.COLOR:
|
|
240
|
+
return color2labToken(token);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
else if (to == ColorType.LCH) {
|
|
244
|
+
switch (token.kin) {
|
|
245
|
+
case ColorType.HEX:
|
|
246
|
+
case ColorType.LIT:
|
|
247
|
+
return hex2lchToken(token);
|
|
248
|
+
case ColorType.RGB:
|
|
249
|
+
case ColorType.RGBA:
|
|
250
|
+
return rgb2lchToken(token);
|
|
251
|
+
case ColorType.HSL:
|
|
252
|
+
case ColorType.HSLA:
|
|
253
|
+
return hsl2lchToken(token);
|
|
254
|
+
case ColorType.HWB:
|
|
255
|
+
return hwb2lchToken(token);
|
|
256
|
+
case ColorType.DEVICE_CMYK:
|
|
257
|
+
return cmyk2lchToken(token);
|
|
258
|
+
case ColorType.LAB:
|
|
259
|
+
return lab2lchToken(token);
|
|
260
|
+
case ColorType.OKLAB:
|
|
261
|
+
return oklab2lchToken(token);
|
|
262
|
+
case ColorType.OKLCH:
|
|
263
|
+
return oklch2lchToken(token);
|
|
264
|
+
case ColorType.COLOR:
|
|
265
|
+
return color2lchToken(token);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else if (to == ColorType.OKLAB) {
|
|
269
|
+
switch (token.kin) {
|
|
270
|
+
case ColorType.HEX:
|
|
271
|
+
case ColorType.LIT:
|
|
272
|
+
return hex2oklabToken(token);
|
|
273
|
+
case ColorType.RGB:
|
|
274
|
+
case ColorType.RGBA:
|
|
275
|
+
return rgb2oklabToken(token);
|
|
276
|
+
case ColorType.HSL:
|
|
277
|
+
case ColorType.HSLA:
|
|
278
|
+
return hsl2oklabToken(token);
|
|
279
|
+
case ColorType.HWB:
|
|
280
|
+
return hwb2oklabToken(token);
|
|
281
|
+
case ColorType.DEVICE_CMYK:
|
|
282
|
+
return cmyk2oklabToken(token);
|
|
283
|
+
case ColorType.LAB:
|
|
284
|
+
return lab2oklabToken(token);
|
|
285
|
+
case ColorType.LCH:
|
|
286
|
+
return lch2oklabToken(token);
|
|
287
|
+
case ColorType.OKLCH:
|
|
288
|
+
return oklch2oklabToken(token);
|
|
289
|
+
case ColorType.COLOR:
|
|
290
|
+
return color2oklabToken(token);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
else if (to == ColorType.OKLCH) {
|
|
294
|
+
switch (token.kin) {
|
|
295
|
+
case ColorType.HEX:
|
|
296
|
+
case ColorType.LIT:
|
|
297
|
+
return hex2oklchToken(token);
|
|
298
|
+
case ColorType.RGB:
|
|
299
|
+
case ColorType.RGBA:
|
|
300
|
+
return rgb2oklchToken(token);
|
|
301
|
+
case ColorType.HSL:
|
|
302
|
+
case ColorType.HSLA:
|
|
303
|
+
return hsl2oklchToken(token);
|
|
304
|
+
case ColorType.HWB:
|
|
305
|
+
return hwb2oklchToken(token);
|
|
306
|
+
case ColorType.DEVICE_CMYK:
|
|
307
|
+
return cmyk2oklchToken(token);
|
|
308
|
+
case ColorType.LAB:
|
|
309
|
+
return lab2oklchToken(token);
|
|
310
|
+
case ColorType.OKLAB:
|
|
311
|
+
return oklab2oklchToken(token);
|
|
312
|
+
case ColorType.LCH:
|
|
313
|
+
return lch2oklchToken(token);
|
|
314
|
+
case ColorType.COLOR:
|
|
315
|
+
return color2oklchToken(token);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else if (colorFuncColorSpace.includes(ColorType[to].toLowerCase().replaceAll('_', '-').toLowerCase().replaceAll('_', '-'))) {
|
|
319
|
+
switch (token.kin) {
|
|
320
|
+
case ColorType.HEX:
|
|
321
|
+
case ColorType.LIT:
|
|
322
|
+
return hex2colorToken(token, to);
|
|
323
|
+
case ColorType.RGB:
|
|
324
|
+
case ColorType.RGBA:
|
|
325
|
+
return rgb2colorToken(token, to);
|
|
326
|
+
case ColorType.HSL:
|
|
327
|
+
case ColorType.HSLA:
|
|
328
|
+
return hsl2colorToken(token, to);
|
|
329
|
+
case ColorType.HWB:
|
|
330
|
+
return hwb2colorToken(token, to);
|
|
331
|
+
case ColorType.DEVICE_CMYK:
|
|
332
|
+
return cmyk2colorToken(token, to);
|
|
333
|
+
case ColorType.LAB:
|
|
334
|
+
return lab2colorToken(token, to);
|
|
335
|
+
case ColorType.OKLAB:
|
|
336
|
+
return oklab2colorToken(token, to);
|
|
337
|
+
case ColorType.LCH:
|
|
338
|
+
return lch2colorToken(token, to);
|
|
339
|
+
case ColorType.OKLCH:
|
|
340
|
+
return oklch2colorToken(token, to);
|
|
341
|
+
case ColorType.COLOR:
|
|
342
|
+
return color2colorToken(token, to);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
function hex2colorToken(token, to) {
|
|
348
|
+
const values = hex2srgbvalues(token);
|
|
349
|
+
if (values == null) {
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
return values2colortoken(values, to);
|
|
353
|
+
}
|
|
354
|
+
function rgb2colorToken(token, to) {
|
|
355
|
+
const values = rgb2srgb(token);
|
|
356
|
+
if (values == null) {
|
|
357
|
+
return null;
|
|
358
|
+
}
|
|
359
|
+
return values2colortoken(values, to);
|
|
360
|
+
}
|
|
361
|
+
function hsl2colorToken(token, to) {
|
|
362
|
+
const values = hsl2srgb(token);
|
|
363
|
+
if (values == null) {
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
366
|
+
return values2colortoken(values, to);
|
|
367
|
+
}
|
|
368
|
+
function hwb2colorToken(token, to) {
|
|
369
|
+
const values = hwb2srgbvalues(token);
|
|
370
|
+
if (values == null) {
|
|
371
|
+
return null;
|
|
372
|
+
}
|
|
373
|
+
return values2colortoken(values, to);
|
|
374
|
+
}
|
|
375
|
+
function cmyk2colorToken(token, to) {
|
|
376
|
+
const values = cmyk2rgbvalues(token);
|
|
377
|
+
if (values == null) {
|
|
378
|
+
return null;
|
|
379
|
+
}
|
|
380
|
+
return values2colortoken(values, to);
|
|
381
|
+
}
|
|
382
|
+
function lab2colorToken(token, to) {
|
|
383
|
+
const values = lab2srgbvalues(token);
|
|
384
|
+
if (values == null) {
|
|
385
|
+
return null;
|
|
386
|
+
}
|
|
387
|
+
return values2colortoken(values, to);
|
|
388
|
+
}
|
|
389
|
+
function oklab2colorToken(token, to) {
|
|
390
|
+
const values = oklab2srgbvalues(token);
|
|
391
|
+
if (values == null) {
|
|
392
|
+
return null;
|
|
393
|
+
}
|
|
394
|
+
return values2colortoken(values, to);
|
|
395
|
+
}
|
|
396
|
+
function lch2colorToken(token, to) {
|
|
397
|
+
const values = lch2srgbvalues(token);
|
|
398
|
+
if (values == null) {
|
|
399
|
+
return null;
|
|
400
|
+
}
|
|
401
|
+
return values2colortoken(values, to);
|
|
402
|
+
}
|
|
403
|
+
function oklch2colorToken(token, to) {
|
|
404
|
+
const values = oklch2srgbvalues(token);
|
|
405
|
+
if (values == null) {
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
return values2colortoken(values, to);
|
|
409
|
+
}
|
|
410
|
+
function color2colorToken(token, to) {
|
|
411
|
+
const values = color2srgbvalues(token);
|
|
412
|
+
if (values == null) {
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
return values2colortoken(values, to);
|
|
416
|
+
}
|
|
417
|
+
function srgb2srgbcolorspace(val, to) {
|
|
418
|
+
const values = [];
|
|
419
|
+
switch (to) {
|
|
420
|
+
case ColorType.SRGB:
|
|
421
|
+
values.push(...val);
|
|
422
|
+
break;
|
|
423
|
+
case ColorType.SRGB_LINEAR:
|
|
424
|
+
// @ts-ignore
|
|
425
|
+
values.push(...srgb2lsrgbvalues(...val));
|
|
426
|
+
break;
|
|
427
|
+
case ColorType.DISPLAY_P3:
|
|
428
|
+
// @ts-ignore
|
|
429
|
+
values.push(...srgb2p3values(...val));
|
|
430
|
+
break;
|
|
431
|
+
case ColorType.PROPHOTO_RGB:
|
|
432
|
+
// @ts-ignore
|
|
433
|
+
values.push(...srgb2prophotorgbvalues(...val));
|
|
434
|
+
break;
|
|
435
|
+
case ColorType.A98_RGB:
|
|
436
|
+
// @ts-ignore
|
|
437
|
+
values.push(...srgb2a98values(...val));
|
|
438
|
+
break;
|
|
439
|
+
case ColorType.REC2020:
|
|
440
|
+
// @ts-ignore
|
|
441
|
+
values.push(...srgb2rec2020values(...val));
|
|
442
|
+
break;
|
|
443
|
+
case ColorType.XYZ:
|
|
444
|
+
case ColorType.XYZ_D65:
|
|
445
|
+
// @ts-ignore
|
|
446
|
+
values.push(...srgb2xyz(...val));
|
|
447
|
+
break;
|
|
448
|
+
case ColorType.XYZ_D50:
|
|
449
|
+
// @ts-ignore
|
|
450
|
+
values.push(...srgb2xyz_d50(...val));
|
|
451
|
+
break;
|
|
452
|
+
}
|
|
453
|
+
return values;
|
|
454
|
+
}
|
|
455
|
+
function minmax(value, min, max) {
|
|
456
|
+
if (value < min) {
|
|
457
|
+
return min;
|
|
458
|
+
}
|
|
459
|
+
if (value > max) {
|
|
460
|
+
return max;
|
|
461
|
+
}
|
|
462
|
+
return value;
|
|
463
|
+
}
|
|
464
|
+
function color2srgbvalues(token) {
|
|
465
|
+
const components = getComponents(token);
|
|
466
|
+
if (components == null) {
|
|
467
|
+
return null;
|
|
468
|
+
}
|
|
469
|
+
const colorSpace = components.shift();
|
|
470
|
+
let values = components.map((val) => getNumber(val));
|
|
471
|
+
switch (colorSpace.val.toLowerCase()) {
|
|
472
|
+
case 'display-p3':
|
|
473
|
+
// @ts-ignore
|
|
474
|
+
values = p32srgbvalues(...values);
|
|
475
|
+
break;
|
|
476
|
+
case 'srgb-linear':
|
|
477
|
+
// @ts-ignore
|
|
478
|
+
values = lsrgb2srgbvalues(...values);
|
|
479
|
+
break;
|
|
480
|
+
case 'prophoto-rgb':
|
|
481
|
+
// @ts-ignore
|
|
482
|
+
values = prophotorgb2srgbvalues(...values);
|
|
483
|
+
break;
|
|
484
|
+
case 'a98-rgb':
|
|
485
|
+
// @ts-ignore
|
|
486
|
+
values = a98rgb2srgbvalues(...values);
|
|
487
|
+
break;
|
|
488
|
+
case 'rec2020':
|
|
489
|
+
// @ts-ignore
|
|
490
|
+
values = rec20202srgb(...values);
|
|
491
|
+
break;
|
|
492
|
+
case 'xyz':
|
|
493
|
+
case 'xyz-d65':
|
|
494
|
+
// @ts-ignore
|
|
495
|
+
values = xyz2srgb(...values);
|
|
496
|
+
break;
|
|
497
|
+
case 'xyz-d50':
|
|
498
|
+
// @ts-ignore
|
|
499
|
+
values = xyzd502srgb(...values);
|
|
500
|
+
break;
|
|
501
|
+
// case srgb:
|
|
502
|
+
}
|
|
503
|
+
return values;
|
|
504
|
+
}
|
|
505
|
+
function values2colortoken(values, to) {
|
|
506
|
+
values = srgb2srgbcolorspace(values, to);
|
|
507
|
+
const chi = [
|
|
508
|
+
{ typ: EnumToken.NumberTokenType, val: String(values[0]) },
|
|
509
|
+
{ typ: EnumToken.NumberTokenType, val: String(values[1]) },
|
|
510
|
+
{ typ: EnumToken.NumberTokenType, val: String(values[2]) },
|
|
511
|
+
];
|
|
512
|
+
if (values.length == 4) {
|
|
513
|
+
chi.push({ typ: EnumToken.LiteralTokenType, val: "/" }, {
|
|
514
|
+
typ: EnumToken.PercentageTokenType,
|
|
515
|
+
val: (values[3] * 100).toFixed()
|
|
516
|
+
});
|
|
517
|
+
}
|
|
518
|
+
const colorSpace = ColorType[to].toLowerCase().replaceAll('_', '-');
|
|
519
|
+
return colorFuncColorSpace.includes(colorSpace) ? {
|
|
520
|
+
typ: EnumToken.ColorTokenType,
|
|
521
|
+
val: 'color',
|
|
522
|
+
chi: [{ typ: EnumToken.IdenTokenType, val: colorSpace }].concat(chi),
|
|
523
|
+
kin: ColorType.COLOR
|
|
524
|
+
} : {
|
|
525
|
+
typ: EnumToken.ColorTokenType,
|
|
526
|
+
val: colorSpace,
|
|
527
|
+
chi,
|
|
528
|
+
kin: to
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
function getNumber(token) {
|
|
532
|
+
if (token.typ == EnumToken.IdenTokenType && token.val == 'none') {
|
|
533
|
+
return 0;
|
|
534
|
+
}
|
|
535
|
+
// @ts-ignore
|
|
536
|
+
return token.typ == EnumToken.PercentageTokenType ? token.val / 100 : +token.val;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* convert angle to turn
|
|
540
|
+
* @param token
|
|
541
|
+
*/
|
|
542
|
+
function getAngle(token) {
|
|
543
|
+
if (token.typ == EnumToken.IdenTokenType) {
|
|
544
|
+
if (token.val == 'none') {
|
|
545
|
+
return 0;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
if (token.typ == EnumToken.AngleTokenType) {
|
|
549
|
+
switch (token.unit) {
|
|
550
|
+
case 'deg':
|
|
551
|
+
// @ts-ignore
|
|
552
|
+
return token.val / 360;
|
|
553
|
+
case 'rad':
|
|
554
|
+
// @ts-ignore
|
|
555
|
+
return token.val / (2 * Math.PI);
|
|
556
|
+
case 'grad':
|
|
557
|
+
// @ts-ignore
|
|
558
|
+
return token.val / 400;
|
|
559
|
+
case 'turn':
|
|
560
|
+
// @ts-ignore
|
|
561
|
+
return +token.val;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
// @ts-ignore
|
|
565
|
+
return token.val / 360;
|
|
566
|
+
}
|
|
567
|
+
function toPrecisionAngle(angle) {
|
|
568
|
+
angle = +angle.toPrecision(colorPrecision);
|
|
569
|
+
if (Math.abs(angle) >= 360) {
|
|
570
|
+
angle %= 360;
|
|
571
|
+
}
|
|
572
|
+
if (Math.abs(angle) < anglePrecision) {
|
|
573
|
+
angle = 0;
|
|
574
|
+
}
|
|
575
|
+
if (angle < 0) {
|
|
576
|
+
angle += 360;
|
|
577
|
+
}
|
|
578
|
+
return angle;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
export { cmyk2colorToken, color2colorToken, color2srgbvalues, convertColor, getAngle, getNumber, hex2colorToken, hsl2colorToken, hwb2colorToken, lab2colorToken, lch2colorToken, minmax, oklab2colorToken, oklch2colorToken, rgb2colorToken, toPrecisionAngle };
|