@tbela99/css-parser 1.1.1 → 1.3.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 (107) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +53 -6
  3. package/dist/index-umd-web.js +5503 -5037
  4. package/dist/index.cjs +5510 -5044
  5. package/dist/index.d.ts +148 -41
  6. package/dist/lib/ast/expand.js +81 -65
  7. package/dist/lib/ast/features/calc.js +14 -36
  8. package/dist/lib/ast/features/inlinecssvariables.js +6 -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 +74 -172
  13. package/dist/lib/ast/math/math.js +24 -22
  14. package/dist/lib/ast/minify.js +249 -199
  15. package/dist/lib/ast/transform/compute.js +18 -41
  16. package/dist/lib/ast/transform/matrix.js +36 -36
  17. package/dist/lib/ast/transform/minify.js +37 -59
  18. package/dist/lib/ast/transform/perspective.js +1 -1
  19. package/dist/lib/ast/transform/rotate.js +13 -13
  20. package/dist/lib/ast/transform/scale.js +8 -8
  21. package/dist/lib/ast/transform/skew.js +4 -4
  22. package/dist/lib/ast/transform/translate.js +8 -8
  23. package/dist/lib/ast/transform/utils.js +80 -28
  24. package/dist/lib/ast/types.js +122 -2
  25. package/dist/lib/fs/resolve.js +1 -14
  26. package/dist/lib/parser/declaration/list.js +1 -1
  27. package/dist/lib/parser/declaration/map.js +1 -1
  28. package/dist/lib/parser/declaration/set.js +3 -3
  29. package/dist/lib/parser/parse.js +53 -107
  30. package/dist/lib/parser/tokenize.js +29 -53
  31. package/dist/lib/parser/utils/declaration.js +1 -1
  32. package/dist/lib/parser/utils/type.js +2 -2
  33. package/dist/lib/renderer/render.js +79 -194
  34. package/dist/lib/{renderer → syntax}/color/a98rgb.js +2 -2
  35. package/dist/lib/syntax/color/cmyk.js +104 -0
  36. package/dist/lib/{renderer → syntax}/color/color-mix.js +31 -33
  37. package/dist/lib/syntax/color/color.js +581 -0
  38. package/dist/lib/syntax/color/hex.js +179 -0
  39. package/dist/lib/syntax/color/hsl.js +201 -0
  40. package/dist/lib/syntax/color/hwb.js +204 -0
  41. package/dist/lib/syntax/color/lab.js +262 -0
  42. package/dist/lib/syntax/color/lch.js +194 -0
  43. package/dist/lib/syntax/color/oklab.js +237 -0
  44. package/dist/lib/syntax/color/oklch.js +166 -0
  45. package/dist/lib/{renderer → syntax}/color/p3.js +3 -3
  46. package/dist/lib/{renderer → syntax}/color/rec2020.js +11 -11
  47. package/dist/lib/{renderer → syntax}/color/relativecolor.js +54 -41
  48. package/dist/lib/syntax/color/rgb.js +140 -0
  49. package/dist/lib/{renderer → syntax}/color/srgb.js +58 -46
  50. package/dist/lib/syntax/color/utils/components.js +46 -0
  51. package/dist/lib/{renderer → syntax}/color/utils/constants.js +6 -33
  52. package/dist/lib/syntax/color/utils/distance.js +40 -0
  53. package/dist/lib/{renderer → syntax}/color/xyz.js +27 -14
  54. package/dist/lib/{renderer → syntax}/color/xyzd50.js +8 -8
  55. package/dist/lib/syntax/syntax.js +78 -77
  56. package/dist/lib/syntax/utils.js +70 -0
  57. package/dist/lib/validation/at-rules/container.js +1 -1
  58. package/dist/lib/validation/at-rules/counter-style.js +1 -1
  59. package/dist/lib/validation/at-rules/custom-media.js +1 -1
  60. package/dist/lib/validation/at-rules/document.js +2 -2
  61. package/dist/lib/validation/at-rules/font-feature-values.js +2 -2
  62. package/dist/lib/validation/at-rules/import.js +5 -5
  63. package/dist/lib/validation/at-rules/keyframes.js +3 -13
  64. package/dist/lib/validation/at-rules/layer.js +1 -1
  65. package/dist/lib/validation/at-rules/media.js +1 -1
  66. package/dist/lib/validation/at-rules/namespace.js +1 -1
  67. package/dist/lib/validation/at-rules/page-margin-box.js +1 -1
  68. package/dist/lib/validation/at-rules/page.js +1 -1
  69. package/dist/lib/validation/at-rules/supports.js +7 -7
  70. package/dist/lib/validation/at-rules/when.js +1 -1
  71. package/dist/lib/validation/atrule.js +2 -2
  72. package/dist/lib/validation/config.js +0 -3
  73. package/dist/lib/validation/config.json.js +1 -1
  74. package/dist/lib/validation/parser/parse.js +8 -11
  75. package/dist/lib/validation/selector.js +1 -9
  76. package/dist/lib/validation/syntax.js +67 -137
  77. package/dist/lib/validation/syntaxes/complex-selector-list.js +2 -19
  78. package/dist/lib/validation/syntaxes/complex-selector.js +1 -1
  79. package/dist/lib/validation/syntaxes/compound-selector.js +5 -24
  80. package/dist/lib/validation/syntaxes/family-name.js +5 -40
  81. package/dist/lib/validation/syntaxes/keyframe-selector.js +3 -22
  82. package/dist/lib/validation/syntaxes/layer-name.js +1 -1
  83. package/dist/lib/validation/syntaxes/relative-selector-list.js +1 -25
  84. package/dist/lib/validation/syntaxes/relative-selector.js +1 -1
  85. package/dist/lib/validation/syntaxes/url.js +3 -34
  86. package/dist/lib/validation/utils/list.js +2 -9
  87. package/dist/lib/validation/utils/whitespace.js +1 -1
  88. package/dist/node/index.js +4 -2
  89. package/dist/web/index.js +4 -2
  90. package/package.json +4 -4
  91. package/.editorconfig +0 -484
  92. package/dist/lib/ast/transform/convert.js +0 -33
  93. package/dist/lib/ast/utils/utils.js +0 -104
  94. package/dist/lib/renderer/color/color.js +0 -654
  95. package/dist/lib/renderer/color/hex.js +0 -105
  96. package/dist/lib/renderer/color/hsl.js +0 -125
  97. package/dist/lib/renderer/color/hwb.js +0 -103
  98. package/dist/lib/renderer/color/lab.js +0 -148
  99. package/dist/lib/renderer/color/lch.js +0 -90
  100. package/dist/lib/renderer/color/oklab.js +0 -131
  101. package/dist/lib/renderer/color/oklch.js +0 -75
  102. package/dist/lib/renderer/color/rgb.js +0 -50
  103. package/dist/lib/renderer/color/utils/components.js +0 -34
  104. package/dist/lib/validation/syntaxes/keyframe-block-list.js +0 -28
  105. package/dist/lib/{renderer → syntax}/color/hsv.js +0 -0
  106. package/dist/lib/{renderer → syntax}/color/prophotorgb.js +1 -1
  107. /package/dist/lib/{renderer → syntax}/color/utils/matrix.js +0 -0
@@ -1,28 +1,27 @@
1
- import { EnumToken } from '../../ast/types.js';
1
+ import { EnumToken, ColorType } from '../../ast/types.js';
2
2
  import '../../ast/minify.js';
3
3
  import '../../ast/walk.js';
4
4
  import '../../parser/parse.js';
5
5
  import '../../parser/tokenize.js';
6
6
  import '../../parser/utils/config.js';
7
- import { isRectangularOrthogonalColorspace, isPolarColorspace } from '../../syntax/syntax.js';
7
+ import { isRectangularOrthogonalColorspace, isPolarColorspace } from '../syntax.js';
8
8
  import { getNumber } from './color.js';
9
9
  import { srgb2rgb } from './rgb.js';
10
- import { ColorKind } from './utils/constants.js';
10
+ import './utils/constants.js';
11
11
  import { getComponents } from './utils/components.js';
12
- import { srgb2hwb } from './hwb.js';
13
- import { srgb2hsl } from './hsl.js';
12
+ import { srgb2oklab } from './oklab.js';
14
13
  import { srgbvalues, srgb2lsrgbvalues } from './srgb.js';
14
+ import { srgb2hwb } from './hwb.js';
15
+ import { srgb2hslvalues } from './hsl.js';
15
16
  import { srgb2lch, xyz2lchvalues } from './lch.js';
16
- import { srgb2lab } from './lab.js';
17
+ import { srgb2labvalues } from './lab.js';
17
18
  import { srgb2p3values } from './p3.js';
18
19
  import { srgb2oklch } from './oklch.js';
19
- import { srgb2oklab } from './oklab.js';
20
- import { srgb2a98values } from './a98rgb.js';
21
20
  import { srgb2prophotorgbvalues } from './prophotorgb.js';
22
- import { srgb2xyz } from './xyz.js';
21
+ import { srgb2xyz_d50 } from './xyz.js';
23
22
  import { XYZ_D65_to_D50, xyzd502lch } from './xyzd50.js';
24
23
  import { srgb2rec2020values } from './rec2020.js';
25
- import '../sourcemap/lib/encode.js';
24
+ import '../../renderer/sourcemap/lib/encode.js';
26
25
 
27
26
  function interpolateHue(interpolationMethod, h1, h2) {
28
27
  switch (interpolationMethod.val) {
@@ -58,7 +57,7 @@ function interpolateHue(interpolationMethod, h1, h2) {
58
57
  return [h1, h2];
59
58
  }
60
59
  function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color2, percentage2) {
61
- if (color1.val == 'currentcolor' || color2.val == 'currentcolor') {
60
+ if (color1.val.toLowerCase() == 'currentcolor' || color2.val == 'currentcolor'.toLowerCase()) {
62
61
  return null;
63
62
  }
64
63
  if (hueInterpolationMethod != null && isRectangularOrthogonalColorspace(colorSpace)) {
@@ -70,20 +69,19 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
70
69
  if (percentage1 == null) {
71
70
  if (percentage2 == null) {
72
71
  // @ts-ignore
73
- percentage1 = { typ: EnumToken.NumberTokenType, val: '.5' };
72
+ percentage1 = { typ: EnumToken.NumberTokenType, val: .5 };
74
73
  // @ts-ignore
75
- percentage2 = { typ: EnumToken.NumberTokenType, val: '.5' };
74
+ percentage2 = { typ: EnumToken.NumberTokenType, val: .5 };
76
75
  }
77
76
  else {
78
77
  if (+percentage2.val <= 0) {
79
78
  return null;
80
79
  }
81
80
  if (+percentage2.val >= 100) {
82
- // @ts-ignore
83
- percentage2 = { typ: EnumToken.NumberTokenType, val: '1' };
81
+ percentage2 = { typ: EnumToken.NumberTokenType, val: 1 };
84
82
  }
85
83
  // @ts-ignore
86
- percentage1 = { typ: EnumToken.NumberTokenType, val: String(1 - percentage2.val / 100) };
84
+ percentage1 = { typ: EnumToken.NumberTokenType, val: 1 - percentage2.val / 100 };
87
85
  }
88
86
  }
89
87
  else {
@@ -95,10 +93,10 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
95
93
  // @ts-ignore
96
94
  if (percentage1.val >= 100) {
97
95
  // @ts-ignore
98
- percentage1 = { typ: EnumToken.NumberTokenType, val: '1' };
96
+ percentage1 = { typ: EnumToken.NumberTokenType, val: 1 };
99
97
  }
100
98
  // @ts-ignore
101
- percentage2 = { typ: EnumToken.NumberTokenType, val: String(1 - percentage1.val / 100) };
99
+ percentage2 = { typ: EnumToken.NumberTokenType, val: 1 - percentage1.val / 100 };
102
100
  }
103
101
  else {
104
102
  // @ts-ignore
@@ -174,9 +172,9 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
174
172
  case 'xyz-d65':
175
173
  case 'xyz-d50':
176
174
  // @ts-ignore
177
- values1 = srgb2xyz(...values1);
175
+ values1 = srgb2xyz_d50(...values1);
178
176
  // @ts-ignore
179
- values2 = srgb2xyz(...values2);
177
+ values2 = srgb2xyz_d50(...values2);
180
178
  if (colorSpace.val == 'xyz-d50') {
181
179
  // @ts-ignore
182
180
  values1 = XYZ_D65_to_D50(...values1);
@@ -192,9 +190,9 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
192
190
  break;
193
191
  case 'hsl':
194
192
  // @ts-ignore
195
- values1 = srgb2hsl(...values1);
193
+ values1 = srgb2hslvalues(...values1);
196
194
  // @ts-ignore
197
- values2 = srgb2hsl(...values2);
195
+ values2 = srgb2hslvalues(...values2);
198
196
  break;
199
197
  case 'hwb':
200
198
  // @ts-ignore
@@ -204,9 +202,9 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
204
202
  break;
205
203
  case 'lab':
206
204
  // @ts-ignore
207
- values1 = srgb2lab(...values1);
205
+ values1 = srgb2labvalues(...values1);
208
206
  // @ts-ignore
209
- values2 = srgb2lab(...values2);
207
+ values2 = srgb2labvalues(...values2);
210
208
  break;
211
209
  case 'lch':
212
210
  // @ts-ignore
@@ -230,8 +228,8 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
230
228
  return null;
231
229
  }
232
230
  const lchSpaces = ['lch', 'oklch'];
233
- const colorSpace1 = ColorKind[color1.kin].toLowerCase().replaceAll('_', '-');
234
- const colorSpace2 = ColorKind[color2.kin].toLowerCase().replaceAll('_', '-');
231
+ const colorSpace1 = ColorType[color1.kin].toLowerCase().replaceAll('_', '-');
232
+ const colorSpace2 = ColorType[color2.kin].toLowerCase().replaceAll('_', '-');
235
233
  // powerless
236
234
  if (lchSpaces.includes(colorSpace1) || lchSpaces.includes(colorSpace.val)) {
237
235
  if ((components1[2].typ == EnumToken.IdenTokenType && components1[2].val == 'none') || values1[2] == 0) {
@@ -276,10 +274,10 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
276
274
  chi: values.map(v => {
277
275
  return {
278
276
  typ: EnumToken.NumberTokenType,
279
- val: String(v)
277
+ val: v
280
278
  };
281
279
  }),
282
- kin: ColorKind.LCH
280
+ kin: ColorType.LCH
283
281
  };
284
282
  case 'srgb':
285
283
  case 'srgb-linear':
@@ -290,7 +288,7 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
290
288
  typ: EnumToken.ColorTokenType,
291
289
  val: 'color',
292
290
  chi: calculate(),
293
- kin: ColorKind.COLOR,
291
+ kin: ColorType.COLOR,
294
292
  cal: 'col'
295
293
  };
296
294
  case 'rgb':
@@ -329,15 +327,15 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
329
327
  typ: EnumToken.ColorTokenType,
330
328
  val: colorSpace.val,
331
329
  chi: calculate().slice(1),
332
- kin: ColorKind[colorSpace.val.toLowerCase().replaceAll('-', '_')]
330
+ kin: ColorType[colorSpace.val.toUpperCase().replaceAll('-', '_')]
333
331
  };
334
332
  if (colorSpace.val == 'hsl' || colorSpace.val == 'hwb') {
335
333
  // @ts-ignore
336
- result.chi[0] = { typ: EnumToken.AngleTokenType, val: String(result.chi[0].val * 360), unit: 'deg' };
334
+ result.chi[0] = { typ: EnumToken.AngleTokenType, val: result.chi[0].val * 360 };
337
335
  // @ts-ignore
338
- result.chi[1] = { typ: EnumToken.PercentageTokenType, val: String(result.chi[1].val * 100) };
336
+ result.chi[1] = { typ: EnumToken.PercentageTokenType, val: result.chi[1].val * 100 };
339
337
  // @ts-ignore
340
- result.chi[2] = { typ: EnumToken.PercentageTokenType, val: String(result.chi[2].val * 100) };
338
+ result.chi[2] = { typ: EnumToken.PercentageTokenType, val: result.chi[2].val * 100 };
341
339
  }
342
340
  return result;
343
341
  }