@tbela99/css-parser 0.9.1 → 1.1.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 (99) hide show
  1. package/CHANGELOG.md +265 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +29 -17
  4. package/dist/index-umd-web.js +7461 -4360
  5. package/dist/index.cjs +8608 -5507
  6. package/dist/index.d.ts +203 -61
  7. package/dist/lib/ast/expand.js +2 -1
  8. package/dist/lib/ast/features/calc.js +19 -11
  9. package/dist/lib/ast/features/index.js +1 -0
  10. package/dist/lib/ast/features/inlinecssvariables.js +47 -29
  11. package/dist/lib/ast/features/prefix.js +117 -91
  12. package/dist/lib/ast/features/shorthand.js +34 -14
  13. package/dist/lib/ast/features/transform.js +67 -0
  14. package/dist/lib/ast/features/type.js +7 -0
  15. package/dist/lib/ast/math/expression.js +20 -10
  16. package/dist/lib/ast/math/math.js +20 -2
  17. package/dist/lib/ast/minify.js +209 -80
  18. package/dist/lib/ast/transform/compute.js +337 -0
  19. package/dist/lib/ast/transform/convert.js +33 -0
  20. package/dist/lib/ast/transform/matrix.js +112 -0
  21. package/dist/lib/ast/transform/minify.js +296 -0
  22. package/dist/lib/ast/transform/perspective.js +10 -0
  23. package/dist/lib/ast/transform/rotate.js +40 -0
  24. package/dist/lib/ast/transform/scale.js +32 -0
  25. package/dist/lib/ast/transform/skew.js +23 -0
  26. package/dist/lib/ast/transform/translate.js +32 -0
  27. package/dist/lib/ast/transform/utils.js +198 -0
  28. package/dist/lib/ast/types.js +18 -15
  29. package/dist/lib/ast/walk.js +54 -22
  30. package/dist/lib/fs/resolve.js +10 -0
  31. package/dist/lib/parser/declaration/list.js +48 -45
  32. package/dist/lib/parser/declaration/map.js +1 -0
  33. package/dist/lib/parser/declaration/set.js +2 -1
  34. package/dist/lib/parser/parse.js +449 -340
  35. package/dist/lib/parser/tokenize.js +147 -72
  36. package/dist/lib/parser/utils/declaration.js +5 -4
  37. package/dist/lib/parser/utils/type.js +2 -1
  38. package/dist/lib/renderer/color/a98rgb.js +2 -1
  39. package/dist/lib/renderer/color/{colormix.js → color-mix.js} +16 -7
  40. package/dist/lib/renderer/color/color.js +264 -170
  41. package/dist/lib/renderer/color/hex.js +19 -8
  42. package/dist/lib/renderer/color/hsl.js +9 -3
  43. package/dist/lib/renderer/color/hwb.js +2 -1
  44. package/dist/lib/renderer/color/lab.js +10 -1
  45. package/dist/lib/renderer/color/lch.js +10 -1
  46. package/dist/lib/renderer/color/oklab.js +10 -1
  47. package/dist/lib/renderer/color/oklch.js +10 -1
  48. package/dist/lib/renderer/color/p3.js +2 -1
  49. package/dist/lib/renderer/color/rec2020.js +2 -1
  50. package/dist/lib/renderer/color/relativecolor.js +27 -32
  51. package/dist/lib/renderer/color/rgb.js +14 -10
  52. package/dist/lib/renderer/color/srgb.js +48 -23
  53. package/dist/lib/renderer/color/utils/components.js +18 -6
  54. package/dist/lib/renderer/color/utils/constants.js +47 -3
  55. package/dist/lib/renderer/color/xyz.js +2 -1
  56. package/dist/lib/renderer/color/xyzd50.js +2 -1
  57. package/dist/lib/renderer/render.js +108 -43
  58. package/dist/lib/syntax/syntax.js +267 -136
  59. package/dist/lib/validation/at-rules/container.js +81 -103
  60. package/dist/lib/validation/at-rules/counter-style.js +9 -8
  61. package/dist/lib/validation/at-rules/custom-media.js +13 -15
  62. package/dist/lib/validation/at-rules/document.js +22 -27
  63. package/dist/lib/validation/at-rules/font-feature-values.js +8 -8
  64. package/dist/lib/validation/at-rules/import.js +30 -81
  65. package/dist/lib/validation/at-rules/keyframes.js +19 -23
  66. package/dist/lib/validation/at-rules/layer.js +5 -5
  67. package/dist/lib/validation/at-rules/media.js +42 -53
  68. package/dist/lib/validation/at-rules/namespace.js +19 -23
  69. package/dist/lib/validation/at-rules/page-margin-box.js +15 -18
  70. package/dist/lib/validation/at-rules/page.js +8 -7
  71. package/dist/lib/validation/at-rules/supports.js +73 -82
  72. package/dist/lib/validation/at-rules/when.js +32 -36
  73. package/dist/lib/validation/atrule.js +15 -18
  74. package/dist/lib/validation/config.js +24 -1
  75. package/dist/lib/validation/config.json.js +563 -63
  76. package/dist/lib/validation/parser/parse.js +196 -185
  77. package/dist/lib/validation/parser/types.js +1 -1
  78. package/dist/lib/validation/selector.js +8 -5
  79. package/dist/lib/validation/syntax.js +724 -1405
  80. package/dist/lib/validation/syntaxes/complex-selector-list.js +10 -11
  81. package/dist/lib/validation/syntaxes/complex-selector.js +10 -11
  82. package/dist/lib/validation/syntaxes/compound-selector.js +40 -50
  83. package/dist/lib/validation/syntaxes/family-name.js +9 -8
  84. package/dist/lib/validation/syntaxes/keyframe-block-list.js +6 -5
  85. package/dist/lib/validation/syntaxes/keyframe-selector.js +23 -105
  86. package/dist/lib/validation/syntaxes/layer-name.js +6 -5
  87. package/dist/lib/validation/syntaxes/relative-selector-list.js +7 -6
  88. package/dist/lib/validation/syntaxes/relative-selector.js +17 -15
  89. package/dist/lib/validation/syntaxes/url.js +18 -22
  90. package/dist/lib/validation/utils/list.js +20 -2
  91. package/dist/lib/validation/utils/whitespace.js +2 -1
  92. package/dist/node/index.js +4 -2
  93. package/dist/node/load.js +6 -1
  94. package/dist/web/index.js +4 -2
  95. package/dist/web/load.js +5 -0
  96. package/package.json +16 -15
  97. package/dist/lib/renderer/color/prophotoRgb.js +0 -56
  98. package/dist/lib/validation/declaration.js +0 -94
  99. package/dist/lib/validation/syntaxes/image.js +0 -29
@@ -2,14 +2,16 @@ import { EnumToken } from '../../ast/types.js';
2
2
  import '../../ast/minify.js';
3
3
  import '../../ast/walk.js';
4
4
  import '../../parser/parse.js';
5
+ import '../../parser/tokenize.js';
6
+ import '../../parser/utils/config.js';
5
7
  import { srgb2rgb, lch2rgb, lab2rgb, oklch2rgb, oklab2rgb, hwb2rgb, hsl2rgb, hex2rgb } from './rgb.js';
6
8
  import { srgb2hsl, lch2hsl, lab2hsl, oklch2hsl, oklab2hsl, hwb2hsl, hex2hsl, rgb2hsl } from './hsl.js';
7
9
  import { lch2hwb, lab2hwb, oklch2hwb, oklab2hwb, hsl2hwb, rgb2hwb } from './hwb.js';
8
10
  import { srgb2lab, oklch2lab, oklab2lab, lch2lab, hwb2lab, hsl2lab, rgb2lab, hex2lab } from './lab.js';
9
11
  import { srgb2lch, oklch2lch, oklab2lch, lab2lch, hwb2lch, hsl2lch, rgb2lch, hex2lch } from './lch.js';
10
12
  import { srgb2oklab, oklch2oklab, lch2oklab, lab2oklab, hwb2oklab, hsl2oklab, rgb2oklab, hex2oklab } from './oklab.js';
11
- import { lch2oklch, oklab2oklch, lab2oklch, hwb2oklch, hsl2oklch, rgb2oklch, hex2oklch, srgb2oklch } from './oklch.js';
12
- import { colorFuncColorSpace } from './utils/constants.js';
13
+ import { srgb2oklch, lch2oklch, oklab2oklch, lab2oklch, hwb2oklch, hsl2oklch, rgb2oklch, hex2oklch } from './oklch.js';
14
+ import { ColorKind, colorFuncColorSpace } from './utils/constants.js';
13
15
  import { getComponents } from './utils/components.js';
14
16
  import { xyz2srgb, lsrgb2srgbvalues, srgb2lsrgbvalues, lch2srgb, oklab2srgb, lab2srgb, hwb2srgb, hsl2srgb, rgb2srgb, hex2srgb } from './srgb.js';
15
17
  import { prophotorgb2srgbvalues, srgb2prophotorgbvalues } from './prophotorgb.js';
@@ -19,45 +21,57 @@ import { srgb2xyz } from './xyz.js';
19
21
  import { p32srgbvalues, srgb2p3values } from './p3.js';
20
22
  import { xyzd502srgb, XYZ_D65_to_D50 } from './xyzd50.js';
21
23
  import '../sourcemap/lib/encode.js';
22
- import '../../parser/utils/config.js';
23
24
 
24
25
  function convert(token, to) {
25
26
  if (token.kin == to) {
26
27
  return token;
27
28
  }
28
- if (token.kin == 'color') {
29
+ if (token.kin == ColorKind.COLOR) {
29
30
  const colorSpace = token.chi.find(t => ![EnumToken.WhitespaceTokenType, EnumToken.CommentTokenType].includes(t.typ));
30
- if (colorSpace.val == to) {
31
+ if (colorSpace.val == ColorKind[to].toLowerCase().replaceAll('_', '-')) {
31
32
  return token;
32
33
  }
33
34
  }
34
35
  let values = [];
35
- if (to == 'hsl') {
36
+ if (to == ColorKind.HSL) {
37
+ let t;
36
38
  switch (token.kin) {
37
- case 'rgb':
38
- case 'rgba':
39
- values.push(...rgb2hsl(token));
39
+ case ColorKind.RGB:
40
+ case ColorKind.RGBA:
41
+ t = rgb2hsl(token);
42
+ if (t == null) {
43
+ return null;
44
+ }
45
+ values.push(...t);
40
46
  break;
41
- case 'hex':
42
- case 'lit':
47
+ case ColorKind.HEX:
48
+ case ColorKind.LIT:
43
49
  values.push(...hex2hsl(token));
44
50
  break;
45
- case 'hwb':
51
+ case ColorKind.HWB:
46
52
  values.push(...hwb2hsl(token));
47
53
  break;
48
- case 'oklab':
49
- values.push(...oklab2hsl(token));
54
+ case ColorKind.OKLAB:
55
+ t = oklab2hsl(token);
56
+ if (t == null) {
57
+ return null;
58
+ }
59
+ values.push(...t);
50
60
  break;
51
- case 'oklch':
52
- values.push(...oklch2hsl(token));
61
+ case ColorKind.OKLCH:
62
+ t = oklch2hsl(token);
63
+ if (t == null) {
64
+ return null;
65
+ }
66
+ values.push(...t);
53
67
  break;
54
- case 'lab':
68
+ case ColorKind.LAB:
55
69
  values.push(...lab2hsl(token));
56
70
  break;
57
- case 'lch':
71
+ case ColorKind.LCH:
58
72
  values.push(...lch2hsl(token));
59
73
  break;
60
- case 'color':
74
+ case ColorKind.COLOR:
61
75
  // @ts-ignore
62
76
  values.push(...srgb2hsl(...color2srgbvalues(token)));
63
77
  break;
@@ -66,30 +80,30 @@ function convert(token, to) {
66
80
  return values2hsltoken(values);
67
81
  }
68
82
  }
69
- else if (to == 'hwb') {
83
+ else if (to == ColorKind.HWB) {
70
84
  switch (token.kin) {
71
- case 'rgb':
72
- case 'rgba':
85
+ case ColorKind.RGB:
86
+ case ColorKind.RGBA:
73
87
  values.push(...rgb2hwb(token));
74
88
  break;
75
- case 'hex':
76
- case 'lit':
89
+ case ColorKind.HEX:
90
+ case ColorKind.LIT:
77
91
  values.push(...hex2hsl(token));
78
92
  break;
79
- case 'hsl':
80
- case 'hsla':
93
+ case ColorKind.HSL:
94
+ case ColorKind.HSLA:
81
95
  values.push(...hsl2hwb(token));
82
96
  break;
83
- case 'oklab':
97
+ case ColorKind.OKLAB:
84
98
  values.push(...oklab2hwb(token));
85
99
  break;
86
- case 'oklch':
100
+ case ColorKind.OKLCH:
87
101
  values.push(...oklch2hwb(token));
88
102
  break;
89
- case 'lab':
103
+ case ColorKind.LAB:
90
104
  values.push(...lab2hwb(token));
91
105
  break;
92
- case 'lch':
106
+ case ColorKind.LCH:
93
107
  values.push(...lch2hwb(token));
94
108
  break;
95
109
  }
@@ -97,31 +111,56 @@ function convert(token, to) {
97
111
  return values2hwbtoken(values);
98
112
  }
99
113
  }
100
- else if (to == 'rgb') {
114
+ else if (to == ColorKind.RGB) {
115
+ let t;
101
116
  switch (token.kin) {
102
- case 'hex':
103
- case 'lit':
117
+ case ColorKind.HEX:
118
+ case ColorKind.LIT:
104
119
  values.push(...hex2rgb(token));
105
120
  break;
106
- case 'hsl':
107
- values.push(...hsl2rgb(token));
121
+ case ColorKind.HSL:
122
+ t = hsl2rgb(token);
123
+ if (t == null) {
124
+ return null;
125
+ }
126
+ values.push(...t);
108
127
  break;
109
- case 'hwb':
110
- values.push(...hwb2rgb(token));
128
+ case ColorKind.HWB:
129
+ t = hwb2rgb(token);
130
+ if (t == null) {
131
+ return null;
132
+ }
133
+ values.push(...t);
111
134
  break;
112
- case 'oklab':
113
- values.push(...oklab2rgb(token));
135
+ case ColorKind.OKLAB:
136
+ t = oklab2rgb(token);
137
+ if (t == null) {
138
+ return null;
139
+ }
140
+ values.push(...t);
114
141
  break;
115
- case 'oklch':
116
- values.push(...oklch2rgb(token));
142
+ case ColorKind.OKLCH:
143
+ t = oklch2rgb(token);
144
+ if (t == null) {
145
+ return null;
146
+ }
147
+ values.push(...t);
117
148
  break;
118
- case 'lab':
119
- values.push(...lab2rgb(token));
149
+ case ColorKind.LAB:
150
+ t = lab2rgb(token);
151
+ if (t == null) {
152
+ return null;
153
+ }
154
+ values.push(...t);
120
155
  break;
121
- case 'lch':
122
- values.push(...lch2rgb(token));
156
+ case ColorKind.LCH:
157
+ t = lch2rgb(token);
158
+ if (t == null) {
159
+ return null;
160
+ }
161
+ values.push(...t);
123
162
  break;
124
- case 'color':
163
+ case ColorKind.COLOR:
125
164
  // @ts-ignore
126
165
  values.push(...srgb2rgb(...color2srgbvalues(token)));
127
166
  break;
@@ -130,33 +169,33 @@ function convert(token, to) {
130
169
  return values2rgbtoken(values);
131
170
  }
132
171
  }
133
- else if (to == 'lab') {
172
+ else if (to == ColorKind.LAB) {
134
173
  switch (token.kin) {
135
- case 'hex':
136
- case 'lit':
174
+ case ColorKind.HEX:
175
+ case ColorKind.LIT:
137
176
  values.push(...hex2lab(token));
138
177
  break;
139
- case 'rgb':
140
- case 'rgba':
178
+ case ColorKind.RGB:
179
+ case ColorKind.RGBA:
141
180
  values.push(...rgb2lab(token));
142
181
  break;
143
- case 'hsl':
144
- case 'hsla':
182
+ case ColorKind.HSL:
183
+ case ColorKind.HSLA:
145
184
  values.push(...hsl2lab(token));
146
185
  break;
147
- case 'hwb':
186
+ case ColorKind.HWB:
148
187
  values.push(...hwb2lab(token));
149
188
  break;
150
- case 'lch':
189
+ case ColorKind.LCH:
151
190
  values.push(...lch2lab(token));
152
191
  break;
153
- case 'oklab':
192
+ case ColorKind.OKLAB:
154
193
  values.push(...oklab2lab(token));
155
194
  break;
156
- case 'oklch':
195
+ case ColorKind.OKLCH:
157
196
  values.push(...oklch2lab(token));
158
197
  break;
159
- case 'color':
198
+ case ColorKind.COLOR:
160
199
  // @ts-ignore
161
200
  values.push(...srgb2lab(...color2srgbvalues(token)));
162
201
  break;
@@ -165,33 +204,33 @@ function convert(token, to) {
165
204
  return values2colortoken(values, to);
166
205
  }
167
206
  }
168
- else if (to == 'lch') {
207
+ else if (to == ColorKind.LCH) {
169
208
  switch (token.kin) {
170
- case 'hex':
171
- case 'lit':
209
+ case ColorKind.HEX:
210
+ case ColorKind.LIT:
172
211
  values.push(...hex2lch(token));
173
212
  break;
174
- case 'rgb':
175
- case 'rgba':
213
+ case ColorKind.RGB:
214
+ case ColorKind.RGBA:
176
215
  values.push(...rgb2lch(token));
177
216
  break;
178
- case 'hsl':
179
- case 'hsla':
217
+ case ColorKind.HSL:
218
+ case ColorKind.HSLA:
180
219
  values.push(...hsl2lch(token));
181
220
  break;
182
- case 'hwb':
221
+ case ColorKind.HWB:
183
222
  values.push(...hwb2lch(token));
184
223
  break;
185
- case 'lab':
224
+ case ColorKind.LAB:
186
225
  values.push(...lab2lch(token));
187
226
  break;
188
- case 'oklab':
227
+ case ColorKind.OKLAB:
189
228
  values.push(...oklab2lch(token));
190
229
  break;
191
- case 'oklch':
230
+ case ColorKind.OKLCH:
192
231
  values.push(...oklch2lch(token));
193
232
  break;
194
- case 'color':
233
+ case ColorKind.COLOR:
195
234
  // @ts-ignore
196
235
  values.push(...srgb2lch(...color2srgbvalues(token)));
197
236
  break;
@@ -200,33 +239,33 @@ function convert(token, to) {
200
239
  return values2colortoken(values, to);
201
240
  }
202
241
  }
203
- else if (to == 'oklab') {
242
+ else if (to == ColorKind.OKLAB) {
204
243
  switch (token.kin) {
205
- case 'hex':
206
- case 'lit':
244
+ case ColorKind.HEX:
245
+ case ColorKind.LIT:
207
246
  values.push(...hex2oklab(token));
208
247
  break;
209
- case 'rgb':
210
- case 'rgba':
248
+ case ColorKind.RGB:
249
+ case ColorKind.RGBA:
211
250
  values.push(...rgb2oklab(token));
212
251
  break;
213
- case 'hsl':
214
- case 'hsla':
252
+ case ColorKind.HSL:
253
+ case ColorKind.HSLA:
215
254
  values.push(...hsl2oklab(token));
216
255
  break;
217
- case 'hwb':
256
+ case ColorKind.HWB:
218
257
  values.push(...hwb2oklab(token));
219
258
  break;
220
- case 'lab':
259
+ case ColorKind.LAB:
221
260
  values.push(...lab2oklab(token));
222
261
  break;
223
- case 'lch':
262
+ case ColorKind.LCH:
224
263
  values.push(...lch2oklab(token));
225
264
  break;
226
- case 'oklch':
265
+ case ColorKind.OKLCH:
227
266
  values.push(...oklch2oklab(token));
228
267
  break;
229
- case 'color':
268
+ case ColorKind.COLOR:
230
269
  // @ts-ignore
231
270
  values.push(...srgb2oklab(...color2srgbvalues(token)));
232
271
  break;
@@ -235,137 +274,184 @@ function convert(token, to) {
235
274
  return values2colortoken(values, to);
236
275
  }
237
276
  }
238
- else if (to == 'oklch') {
277
+ else if (to == ColorKind.OKLCH) {
239
278
  switch (token.kin) {
240
- case 'hex':
241
- case 'lit':
279
+ case ColorKind.HEX:
280
+ case ColorKind.LIT:
242
281
  values.push(...hex2oklch(token));
243
282
  break;
244
- case 'rgb':
245
- case 'rgba':
283
+ case ColorKind.RGB:
284
+ case ColorKind.RGBA:
246
285
  values.push(...rgb2oklch(token));
247
286
  break;
248
- case 'hsl':
249
- case 'hsla':
287
+ case ColorKind.HSL:
288
+ case ColorKind.HSLA:
250
289
  values.push(...hsl2oklch(token));
251
290
  break;
252
- case 'hwb':
291
+ case ColorKind.HWB:
253
292
  values.push(...hwb2oklch(token));
254
293
  break;
255
- case 'lab':
294
+ case ColorKind.LAB:
256
295
  values.push(...lab2oklch(token));
257
296
  break;
258
- case 'oklab':
297
+ case ColorKind.OKLAB:
259
298
  values.push(...oklab2oklch(token));
260
299
  break;
261
- case 'lch':
300
+ case ColorKind.LCH:
262
301
  values.push(...lch2oklch(token));
263
302
  break;
264
- case 'color':
303
+ case ColorKind.COLOR:
265
304
  // @ts-ignore
266
- let val = color2srgbvalues(token);
267
- switch (to) {
268
- case 'srgb':
269
- values.push(...val);
270
- break;
271
- case 'srgb-linear':
272
- // @ts-ignore
273
- values.push(...srgb2lsrgbvalues(...val));
274
- break;
275
- case 'display-p3':
276
- // @ts-ignore
277
- values.push(...srgb2p3values(...val));
278
- break;
279
- case 'prophoto-rgb':
280
- // @ts-ignore
281
- values.push(...srgb2prophotorgbvalues(...val));
282
- break;
283
- case 'a98-rgb':
284
- // @ts-ignore
285
- values.push(...srgb2a98values(...val));
286
- break;
287
- case 'rec2020':
288
- // @ts-ignore
289
- values.push(...srgb2rec2020values(...val));
290
- break;
291
- case 'xyz':
292
- case 'xyz-d65':
293
- // @ts-ignore
294
- values.push(...srgb2xyz(...val));
295
- break;
296
- case 'xyz-d50':
297
- // @ts-ignore
298
- values.push(...(XYZ_D65_to_D50(...srgb2xyz(...val))));
299
- break;
300
- }
305
+ values.push(...srgb2oklch(...color2srgbvalues(token)));
306
+ // switch (to) {
307
+ //
308
+ // case ColorKind.SRGB:
309
+ //
310
+ // values.push(...val);
311
+ // break;
312
+ //
313
+ // case ColorKind.SRGB_LINEAR:
314
+ //
315
+ // // @ts-ignore
316
+ // values.push(...srgb2lsrgbvalues(...val));
317
+ // break;
318
+ //
319
+ // case ColorKind.DISPLAY_P3:
320
+ //
321
+ // // @ts-ignore
322
+ // values.push(...srgb2p3values(...val));
323
+ // break;
324
+ //
325
+ // case ColorKind.PROPHOTO_RGB:
326
+ //
327
+ // // @ts-ignore
328
+ // values.push(...srgb2prophotorgbvalues(...val));
329
+ // break;
330
+ //
331
+ // case ColorKind.A98_RGB:
332
+ //
333
+ // // @ts-ignore
334
+ // values.push(...srgb2a98values(...val));
335
+ // break;
336
+ //
337
+ // case ColorKind.REC2020:
338
+ //
339
+ // // @ts-ignore
340
+ // values.push(...srgb2rec2020values(...val));
341
+ // break;
342
+ //
343
+ // case ColorKind.XYZ:
344
+ // case ColorKind.XYZ_D65:
345
+ //
346
+ // // @ts-ignore
347
+ // values.push(...srgb2xyz(...val));
348
+ // break;
349
+ //
350
+ // case ColorKind.XYZ_D50:
351
+ //
352
+ // // @ts-ignore
353
+ // values.push(...(XYZ_D65_to_D50(...srgb2xyz(...val))));
354
+ // break;
355
+ // }
301
356
  break;
302
357
  }
303
358
  if (values.length > 0) {
304
359
  return values2colortoken(values, to);
305
360
  }
306
361
  }
307
- else if (colorFuncColorSpace.includes(to)) {
362
+ else if (colorFuncColorSpace.includes(ColorKind[to].toLowerCase().replaceAll('_', '-'))) {
363
+ let t;
308
364
  switch (token.kin) {
309
- case 'hex':
310
- case 'lit':
365
+ case ColorKind.HEX:
366
+ case ColorKind.LIT:
311
367
  values.push(...hex2srgb(token));
312
368
  break;
313
- case 'rgb':
314
- case 'rgba':
315
- values.push(...rgb2srgb(token));
369
+ case ColorKind.RGB:
370
+ case ColorKind.RGBA:
371
+ t = rgb2srgb(token);
372
+ if (t == null) {
373
+ return null;
374
+ }
375
+ values.push(...t);
316
376
  break;
317
- case 'hsl':
318
- case 'hsla':
319
- values.push(...hsl2srgb(token));
377
+ case ColorKind.HSL:
378
+ case ColorKind.HSLA:
379
+ t = hsl2srgb(token);
380
+ if (t == null) {
381
+ return null;
382
+ }
383
+ values.push(...t);
320
384
  break;
321
- case 'hwb':
322
- values.push(...hwb2srgb(token));
385
+ case ColorKind.HWB:
386
+ t = hwb2srgb(token);
387
+ if (t == null) {
388
+ return null;
389
+ }
390
+ values.push(...t);
323
391
  break;
324
- case 'lab':
325
- values.push(...lab2srgb(token));
392
+ case ColorKind.LAB:
393
+ t = lab2srgb(token);
394
+ if (t == null) {
395
+ return null;
396
+ }
397
+ values.push(...t);
326
398
  break;
327
- case 'oklab':
328
- values.push(...oklab2srgb(token));
399
+ case ColorKind.OKLAB:
400
+ t = oklab2srgb(token);
401
+ if (t == null) {
402
+ return null;
403
+ }
404
+ values.push(...t);
329
405
  break;
330
- case 'lch':
331
- values.push(...lch2srgb(token));
406
+ case ColorKind.LCH:
407
+ t = lch2srgb(token);
408
+ if (t == null) {
409
+ return null;
410
+ }
411
+ values.push(...t);
332
412
  break;
333
- case 'oklch':
334
- // @ts-ignore
335
- values.push(...srgb2oklch(...color2srgbvalues(token)));
413
+ case ColorKind.OKLCH:
414
+ t = color2srgbvalues(token);
415
+ if (t == null) {
416
+ return null;
417
+ }
418
+ values.push(...t);
336
419
  break;
337
- case 'color':
420
+ case ColorKind.COLOR:
338
421
  const val = color2srgbvalues(token);
422
+ if (val == null) {
423
+ return null;
424
+ }
339
425
  switch (to) {
340
- case 'srgb':
426
+ case ColorKind.SRGB:
341
427
  values.push(...val);
342
428
  break;
343
- case 'srgb-linear':
429
+ case ColorKind.SRGB_LINEAR:
344
430
  // @ts-ignore
345
431
  values.push(...srgb2lsrgbvalues(...val));
346
432
  break;
347
- case 'display-p3':
433
+ case ColorKind.DISPLAY_P3:
348
434
  // @ts-ignore
349
435
  values.push(...srgb2p3values(...val));
350
436
  break;
351
- case 'prophoto-rgb':
437
+ case ColorKind.PROPHOTO_RGB:
352
438
  // @ts-ignore
353
439
  values.push(...srgb2prophotorgbvalues(...val));
354
440
  break;
355
- case 'a98-rgb':
441
+ case ColorKind.A98_RGB:
356
442
  // @ts-ignore
357
443
  values.push(...srgb2a98values(...val));
358
444
  break;
359
- case 'rec2020':
445
+ case ColorKind.REC2020:
360
446
  // @ts-ignore
361
447
  values.push(...srgb2rec2020values(...val));
362
448
  break;
363
- case 'xyz':
364
- case 'xyz-d65':
449
+ case ColorKind.XYZ:
450
+ case ColorKind.XYZ_D65:
365
451
  // @ts-ignore
366
452
  values.push(...srgb2xyz(...val));
367
453
  break;
368
- case 'xyz-d50':
454
+ case ColorKind.XYZ_D50:
369
455
  // @ts-ignore
370
456
  values.push(...(XYZ_D65_to_D50(...srgb2xyz(...val))));
371
457
  break;
@@ -389,6 +475,9 @@ function minmax(value, min, max) {
389
475
  }
390
476
  function color2srgbvalues(token) {
391
477
  const components = getComponents(token);
478
+ if (components == null) {
479
+ return null;
480
+ }
392
481
  const colorSpace = components.shift();
393
482
  let values = components.map((val) => getNumber(val));
394
483
  switch (colorSpace.val) {
@@ -426,7 +515,7 @@ function color2srgbvalues(token) {
426
515
  return values;
427
516
  }
428
517
  function values2hsltoken(values) {
429
- const to = 'hsl';
518
+ const to = ColorKind.HSL;
430
519
  const chi = [
431
520
  { typ: EnumToken.AngleTokenType, val: String(values[0] * 360), unit: 'deg' },
432
521
  { typ: EnumToken.PercentageTokenType, val: String(values[1] * 100) },
@@ -437,13 +526,13 @@ function values2hsltoken(values) {
437
526
  }
438
527
  return {
439
528
  typ: EnumToken.ColorTokenType,
440
- val: to,
529
+ val: ColorKind[to].toLowerCase().replaceAll('_', '-'),
441
530
  chi,
442
531
  kin: to
443
532
  };
444
533
  }
445
534
  function values2rgbtoken(values) {
446
- const to = 'rgb';
535
+ const to = ColorKind.RGB;
447
536
  const chi = [
448
537
  { typ: EnumToken.NumberTokenType, val: String(values[0]) },
449
538
  { typ: EnumToken.NumberTokenType, val: String(values[1]) },
@@ -454,13 +543,13 @@ function values2rgbtoken(values) {
454
543
  }
455
544
  return {
456
545
  typ: EnumToken.ColorTokenType,
457
- val: to,
546
+ val: ColorKind[to],
458
547
  chi,
459
548
  kin: to
460
549
  };
461
550
  }
462
551
  function values2hwbtoken(values) {
463
- const to = 'hwb';
552
+ const to = ColorKind.HWB;
464
553
  const chi = [
465
554
  { typ: EnumToken.AngleTokenType, val: String(values[0] * 360), unit: 'deg' },
466
555
  { typ: EnumToken.PercentageTokenType, val: String(values[1] * 100) },
@@ -471,7 +560,7 @@ function values2hwbtoken(values) {
471
560
  }
472
561
  return {
473
562
  typ: EnumToken.ColorTokenType,
474
- val: to,
563
+ val: ColorKind[to],
475
564
  chi,
476
565
  kin: to
477
566
  };
@@ -485,14 +574,15 @@ function values2colortoken(values, to) {
485
574
  if (values.length == 4) {
486
575
  chi.push({ typ: EnumToken.PercentageTokenType, val: String(values[3] * 100) });
487
576
  }
488
- return colorFuncColorSpace.includes(to) ? {
577
+ const colorSpace = ColorKind[to].toLowerCase().replaceAll('_', '-');
578
+ return colorFuncColorSpace.includes(colorSpace) ? {
489
579
  typ: EnumToken.ColorTokenType,
490
580
  val: 'color',
491
- chi: [{ typ: EnumToken.IdenTokenType, val: to }].concat(chi),
492
- kin: 'color'
581
+ chi: [{ typ: EnumToken.IdenTokenType, val: colorSpace }].concat(chi),
582
+ kin: ColorKind.COLOR
493
583
  } : {
494
584
  typ: EnumToken.ColorTokenType,
495
- val: to,
585
+ val: colorSpace,
496
586
  chi,
497
587
  kin: to
498
588
  };
@@ -502,7 +592,7 @@ function values2colortoken(values, to) {
502
592
  * @param token
503
593
  */
504
594
  function clamp(token) {
505
- if (token.kin == 'rgb' || token.kin == 'rgba') {
595
+ if (token.kin == ColorKind.RGB || token.kin == ColorKind.RGBA) {
506
596
  token.chi.filter((token) => ![EnumToken.LiteralTokenType, EnumToken.CommaTokenType, EnumToken.WhitespaceTokenType].includes(token.typ)).forEach((token, index) => {
507
597
  if (index <= 2) {
508
598
  if (token.typ == EnumToken.NumberTokenType) {
@@ -531,6 +621,10 @@ function getNumber(token) {
531
621
  // @ts-ignore
532
622
  return token.typ == EnumToken.PercentageTokenType ? token.val / 100 : +token.val;
533
623
  }
624
+ /**
625
+ * convert angle to turn
626
+ * @param token
627
+ */
534
628
  function getAngle(token) {
535
629
  if (token.typ == EnumToken.IdenTokenType) {
536
630
  if (token.val == 'none') {