@tbela99/css-parser 1.1.1 → 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.
Files changed (101) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +53 -6
  3. package/dist/index-umd-web.js +4195 -3363
  4. package/dist/index.cjs +4199 -3367
  5. package/dist/index.d.ts +42 -31
  6. package/dist/lib/ast/expand.js +81 -65
  7. package/dist/lib/ast/features/calc.js +37 -35
  8. package/dist/lib/ast/features/inlinecssvariables.js +25 -17
  9. package/dist/lib/ast/features/prefix.js +22 -19
  10. package/dist/lib/ast/features/shorthand.js +1 -1
  11. package/dist/lib/ast/features/transform.js +17 -2
  12. package/dist/lib/ast/math/expression.js +184 -159
  13. package/dist/lib/ast/math/math.js +22 -20
  14. package/dist/lib/ast/minify.js +249 -199
  15. package/dist/lib/ast/transform/compute.js +48 -38
  16. package/dist/lib/ast/transform/matrix.js +6 -5
  17. package/dist/lib/ast/transform/minify.js +31 -34
  18. package/dist/lib/ast/transform/utils.js +76 -16
  19. package/dist/lib/ast/types.js +32 -1
  20. package/dist/lib/fs/resolve.js +1 -14
  21. package/dist/lib/parser/declaration/list.js +1 -1
  22. package/dist/lib/parser/declaration/map.js +1 -1
  23. package/dist/lib/parser/declaration/set.js +1 -1
  24. package/dist/lib/parser/parse.js +19 -95
  25. package/dist/lib/parser/tokenize.js +1 -13
  26. package/dist/lib/parser/utils/declaration.js +1 -1
  27. package/dist/lib/parser/utils/type.js +1 -1
  28. package/dist/lib/renderer/render.js +44 -168
  29. package/dist/lib/{renderer → syntax}/color/a98rgb.js +2 -2
  30. package/dist/lib/syntax/color/cmyk.js +104 -0
  31. package/dist/lib/{renderer → syntax}/color/color-mix.js +20 -21
  32. package/dist/lib/syntax/color/color.js +581 -0
  33. package/dist/lib/syntax/color/hex.js +179 -0
  34. package/dist/lib/syntax/color/hsl.js +201 -0
  35. package/dist/lib/syntax/color/hwb.js +185 -0
  36. package/dist/lib/syntax/color/lab.js +262 -0
  37. package/dist/lib/syntax/color/lch.js +194 -0
  38. package/dist/lib/syntax/color/oklab.js +237 -0
  39. package/dist/lib/syntax/color/oklch.js +166 -0
  40. package/dist/lib/{renderer → syntax}/color/p3.js +3 -3
  41. package/dist/lib/{renderer → syntax}/color/rec2020.js +11 -11
  42. package/dist/lib/{renderer → syntax}/color/relativecolor.js +53 -40
  43. package/dist/lib/syntax/color/rgb.js +140 -0
  44. package/dist/lib/{renderer → syntax}/color/srgb.js +58 -46
  45. package/dist/lib/{renderer → syntax}/color/utils/components.js +7 -7
  46. package/dist/lib/{renderer → syntax}/color/utils/constants.js +6 -33
  47. package/dist/lib/syntax/color/utils/distance.js +30 -0
  48. package/dist/lib/{renderer → syntax}/color/xyz.js +27 -14
  49. package/dist/lib/{renderer → syntax}/color/xyzd50.js +8 -8
  50. package/dist/lib/syntax/syntax.js +77 -67
  51. package/dist/lib/syntax/utils.js +70 -0
  52. package/dist/lib/validation/at-rules/container.js +1 -1
  53. package/dist/lib/validation/at-rules/counter-style.js +1 -1
  54. package/dist/lib/validation/at-rules/custom-media.js +1 -1
  55. package/dist/lib/validation/at-rules/document.js +1 -1
  56. package/dist/lib/validation/at-rules/font-feature-values.js +2 -2
  57. package/dist/lib/validation/at-rules/import.js +1 -1
  58. package/dist/lib/validation/at-rules/keyframes.js +14 -13
  59. package/dist/lib/validation/at-rules/layer.js +1 -1
  60. package/dist/lib/validation/at-rules/media.js +1 -1
  61. package/dist/lib/validation/at-rules/namespace.js +1 -1
  62. package/dist/lib/validation/at-rules/page-margin-box.js +1 -1
  63. package/dist/lib/validation/at-rules/page.js +1 -1
  64. package/dist/lib/validation/at-rules/supports.js +1 -1
  65. package/dist/lib/validation/at-rules/when.js +1 -1
  66. package/dist/lib/validation/atrule.js +2 -2
  67. package/dist/lib/validation/config.js +4 -3
  68. package/dist/lib/validation/config.json.js +1 -1
  69. package/dist/lib/validation/parser/parse.js +12 -7
  70. package/dist/lib/validation/selector.js +9 -8
  71. package/dist/lib/validation/syntax.js +170 -120
  72. package/dist/lib/validation/syntaxes/complex-selector-list.js +13 -19
  73. package/dist/lib/validation/syntaxes/complex-selector.js +1 -1
  74. package/dist/lib/validation/syntaxes/compound-selector.js +5 -24
  75. package/dist/lib/validation/syntaxes/family-name.js +36 -39
  76. package/dist/lib/validation/syntaxes/keyframe-selector.js +14 -22
  77. package/dist/lib/validation/syntaxes/layer-name.js +1 -1
  78. package/dist/lib/validation/syntaxes/relative-selector-list.js +27 -25
  79. package/dist/lib/validation/syntaxes/relative-selector.js +1 -1
  80. package/dist/lib/validation/syntaxes/url.js +35 -33
  81. package/dist/lib/validation/utils/list.js +10 -9
  82. package/dist/lib/validation/utils/whitespace.js +1 -1
  83. package/dist/node/index.js +4 -2
  84. package/dist/web/index.js +4 -2
  85. package/package.json +4 -4
  86. package/.editorconfig +0 -484
  87. package/dist/lib/ast/transform/convert.js +0 -33
  88. package/dist/lib/ast/utils/utils.js +0 -104
  89. package/dist/lib/renderer/color/color.js +0 -654
  90. package/dist/lib/renderer/color/hex.js +0 -105
  91. package/dist/lib/renderer/color/hsl.js +0 -125
  92. package/dist/lib/renderer/color/hwb.js +0 -103
  93. package/dist/lib/renderer/color/lab.js +0 -148
  94. package/dist/lib/renderer/color/lch.js +0 -90
  95. package/dist/lib/renderer/color/oklab.js +0 -131
  96. package/dist/lib/renderer/color/oklch.js +0 -75
  97. package/dist/lib/renderer/color/rgb.js +0 -50
  98. package/dist/lib/validation/syntaxes/keyframe-block-list.js +0 -28
  99. package/dist/lib/{renderer → syntax}/color/hsv.js +0 -0
  100. package/dist/lib/{renderer → syntax}/color/prophotorgb.js +1 -1
  101. /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 };