@tbela99/css-parser 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/{LICENSE → LICENSE.md} +1 -1
  2. package/README.md +191 -80
  3. package/dist/config.json.js +20 -1
  4. package/dist/index-umd-web.js +3210 -1352
  5. package/dist/index.cjs +3211 -1353
  6. package/dist/index.d.ts +910 -0
  7. package/dist/lib/ast/expand.js +1 -1
  8. package/dist/lib/ast/features/calc.js +1 -2
  9. package/dist/lib/ast/features/inlinecssvariables.js +1 -1
  10. package/dist/lib/ast/features/shorthand.js +1 -1
  11. package/dist/lib/ast/math/expression.js +38 -3
  12. package/dist/lib/ast/math/math.js +2 -2
  13. package/dist/lib/ast/minify.js +0 -1
  14. package/dist/lib/ast/types.js +1 -0
  15. package/dist/lib/ast/utils/minifyfeature.js +4 -3
  16. package/dist/lib/parser/declaration/list.js +1 -1
  17. package/dist/lib/parser/declaration/map.js +129 -26
  18. package/dist/lib/parser/declaration/set.js +1 -1
  19. package/dist/lib/parser/parse.js +325 -303
  20. package/dist/lib/parser/tokenize.js +220 -223
  21. package/dist/lib/parser/utils/declaration.js +1 -1
  22. package/dist/lib/parser/utils/syntax.js +159 -23
  23. package/dist/lib/parser/utils/type.js +2 -2
  24. package/dist/lib/renderer/color/a98rgb.js +64 -0
  25. package/dist/lib/renderer/color/color.js +521 -0
  26. package/dist/lib/renderer/color/colormix.js +337 -0
  27. package/dist/lib/renderer/color/hex.js +92 -0
  28. package/dist/lib/renderer/color/hsl.js +118 -0
  29. package/dist/lib/renderer/color/hsv.js +20 -0
  30. package/dist/lib/renderer/color/hwb.js +101 -0
  31. package/dist/lib/renderer/color/lab.js +136 -0
  32. package/dist/lib/renderer/color/lch.js +79 -0
  33. package/dist/lib/renderer/color/oklab.js +121 -0
  34. package/dist/lib/renderer/color/oklch.js +65 -0
  35. package/dist/lib/renderer/color/p3.js +57 -0
  36. package/dist/lib/renderer/color/prophotorgb.js +56 -0
  37. package/dist/lib/renderer/color/rec2020.js +70 -0
  38. package/dist/lib/renderer/color/relativecolor.js +152 -0
  39. package/dist/lib/renderer/color/rgb.js +44 -0
  40. package/dist/lib/renderer/color/srgb.js +261 -0
  41. package/dist/lib/renderer/color/utils/components.js +20 -0
  42. package/dist/lib/renderer/color/utils/constants.js +191 -0
  43. package/dist/lib/renderer/color/utils/matrix.js +35 -0
  44. package/dist/lib/renderer/color/xyz.js +64 -0
  45. package/dist/lib/renderer/color/xyzd50.js +33 -0
  46. package/dist/lib/renderer/render.js +61 -32
  47. package/dist/node/index.js +1 -1
  48. package/dist/node/load.js +1 -1
  49. package/dist/web/index.js +1 -1
  50. package/package.json +15 -14
  51. package/dist/lib/ast/features/utils/math.js +0 -95
  52. package/dist/lib/iterable/set.js +0 -48
  53. package/dist/lib/iterable/weakmap.js +0 -53
  54. package/dist/lib/renderer/utils/calccolor.js +0 -238
  55. package/dist/lib/renderer/utils/color.js +0 -371
  56. package/dist/lib/renderer/utils/hex.js +0 -124
  57. package/dist/lib/renderer/utils/hsl.js +0 -49
  58. package/dist/lib/renderer/utils/hsv.js +0 -15
  59. package/dist/lib/renderer/utils/hwb.js +0 -50
  60. package/dist/lib/renderer/utils/rgb.js +0 -66
@@ -1,124 +0,0 @@
1
- import { EnumToken } from '../../ast/types.js';
2
- import '../../ast/minify.js';
3
- import '../../parser/parse.js';
4
- import { getNumber, getAngle } from './color.js';
5
- import { hsl2rgb } from './rgb.js';
6
- import '../sourcemap/lib/encode.js';
7
-
8
- function rgb2Hex(token) {
9
- let value = '#';
10
- let t;
11
- // @ts-ignore
12
- for (let i = 0; i < 3; i++) {
13
- // @ts-ignore
14
- t = token.chi[i];
15
- // @ts-ignore
16
- value += (t.val == 'none' ? '0' : Math.round(t.typ == EnumToken.PercentageTokenType ? 255 * t.val / 100 : t.val)).toString(16).padStart(2, '0');
17
- }
18
- // @ts-ignore
19
- if (token.chi.length == 4) {
20
- // @ts-ignore
21
- t = token.chi[3];
22
- // @ts-ignore
23
- if ((t.typ == EnumToken.IdenTokenType && t.val == 'none') ||
24
- (t.typ == EnumToken.NumberTokenType && +t.val < 1) ||
25
- (t.typ == EnumToken.PercentageTokenType && +t.val < 100)) {
26
- // @ts-ignore
27
- value += Math.round(255 * getNumber(t)).toString(16).padStart(2, '0');
28
- }
29
- }
30
- return value;
31
- }
32
- function hsl2Hex(token) {
33
- let t;
34
- // @ts-ignore
35
- let h = getAngle(token.chi[0]);
36
- // @ts-ignore
37
- t = token.chi[1];
38
- // @ts-ignore
39
- let s = getNumber(t);
40
- // @ts-ignore
41
- t = token.chi[2];
42
- // @ts-ignore
43
- let l = getNumber(t);
44
- let a = null;
45
- if (token.chi?.length == 4) {
46
- // @ts-ignore
47
- t = token.chi[3];
48
- // @ts-ignore
49
- if ((t.typ == EnumToken.IdenTokenType && t.val == 'none') || (t.typ == EnumToken.PercentageTokenType && +t.val < 100) ||
50
- // @ts-ignore
51
- (t.typ == EnumToken.NumberTokenType && t.val < 1)) {
52
- // @ts-ignore
53
- a = getNumber(t);
54
- }
55
- }
56
- return `#${hsl2rgb(h, s, l, a).reduce((acc, curr) => acc + curr.toString(16).padStart(2, '0'), '')}`;
57
- }
58
- function hwb2hex(token) {
59
- let t;
60
- // @ts-ignore
61
- let h = getAngle(token.chi[0]);
62
- // @ts-ignore
63
- t = token.chi[1];
64
- // @ts-ignore
65
- let white = getNumber(t);
66
- // @ts-ignore
67
- t = token.chi[2];
68
- // @ts-ignore
69
- let black = getNumber(t);
70
- let a = null;
71
- if (token.chi?.length == 4) {
72
- // @ts-ignore
73
- t = token.chi[3];
74
- // @ts-ignore
75
- if ((t.typ == EnumToken.IdenTokenType && t.val == 'none') ||
76
- (t.typ == EnumToken.PercentageTokenType && +t.val < 100) ||
77
- (t.typ == EnumToken.NumberTokenType && +t.val < 1)) {
78
- // @ts-ignore
79
- a = getNumber(t);
80
- }
81
- }
82
- const rgb = hsl2rgb(h, 1, .5, a);
83
- let value;
84
- for (let i = 0; i < 3; i++) {
85
- value = rgb[i] / 255;
86
- value *= (1 - white - black);
87
- value += white;
88
- rgb[i] = Math.round(value * 255);
89
- }
90
- return `#${rgb.reduce((acc, curr) => acc + curr.toString(16).padStart(2, '0'), '')}`;
91
- }
92
- function cmyk2hex(token) {
93
- // @ts-ignore
94
- let t = token.chi[0];
95
- // @ts-ignore
96
- const c = getNumber(t);
97
- // @ts-ignore
98
- t = token.chi[1];
99
- // @ts-ignore
100
- const m = getNumber(t);
101
- // @ts-ignore
102
- t = token.chi[2];
103
- // @ts-ignore
104
- const y = getNumber(t);
105
- // @ts-ignore
106
- t = token.chi[3];
107
- // @ts-ignore
108
- const k = getNumber(t);
109
- const rgb = [
110
- Math.round(255 * (1 - Math.min(1, c * (1 - k) + k))),
111
- Math.round(255 * (1 - Math.min(1, m * (1 - k) + k))),
112
- Math.round(255 * (1 - Math.min(1, y * (1 - k) + k)))
113
- ];
114
- // @ts-ignore
115
- if (token.chi.length >= 9) {
116
- // @ts-ignore
117
- t = token.chi[8];
118
- // @ts-ignore
119
- rgb.push(Math.round(255 * getNumber(t)));
120
- }
121
- return `#${rgb.reduce((acc, curr) => acc + curr.toString(16).padStart(2, '0'), '')}`;
122
- }
123
-
124
- export { cmyk2hex, hsl2Hex, hwb2hex, rgb2Hex };
@@ -1,49 +0,0 @@
1
- import { hwb2hsv } from './hsv.js';
2
-
3
- function rgb2hsl(r, g, b, a) {
4
- r /= 255;
5
- g /= 255;
6
- b /= 255;
7
- let max = Math.max(r, g, b);
8
- let min = Math.min(r, g, b);
9
- let h = 0;
10
- let s = 0;
11
- let l = (max + min) / 2;
12
- if (max != min) {
13
- let d = max - min;
14
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
15
- switch (max) {
16
- case r:
17
- h = (g - b) / d + (g < b ? 6 : 0);
18
- break;
19
- case g:
20
- h = (b - r) / d + 2;
21
- break;
22
- case b:
23
- h = (r - g) / d + 4;
24
- break;
25
- }
26
- h /= 6;
27
- }
28
- return [h, s, l, a == 1 ? null : a ?? null];
29
- }
30
- // https://gist.github.com/defims/0ca2ef8832833186ed396a2f8a204117#file-annotated-js
31
- function hsv2hsl(h, s, v) {
32
- return [
33
- //[hue, saturation, lightness]
34
- //Range should be between 0 - 1
35
- h,
36
- //Saturation is very different between the two color spaces
37
- //If (2-sat)*val < 1 set it to sat*val/((2-sat)*val)
38
- //Otherwise sat*val/(2-(2-sat)*val)
39
- //Conditional is not operating with hue, it is reassigned!
40
- s * v / ((h = (2 - s) * v) < 1 ? h : 2 - h),
41
- h / 2 //Lightness is (2-sat)*val/2
42
- //See reassignment of hue above
43
- ];
44
- }
45
- function hwb2hsl(h, w, b) {
46
- return hsv2hsl(...hwb2hsv(h, w, b));
47
- }
48
-
49
- export { hsv2hsl, hwb2hsl, rgb2hsl };
@@ -1,15 +0,0 @@
1
- function hwb2hsv(h, w, b) {
2
- return [h, 1 - w / (1 - b), 1 - b];
3
- }
4
- // https://gist.github.com/defims/0ca2ef8832833186ed396a2f8a204117#file-annotated-js
5
- function hsl2hsv(h, s, l) {
6
- s *= l < .5 ? l : 1 - l;
7
- return [
8
- //Range should be between 0 - 1
9
- h,
10
- 2 * s / (l + s),
11
- l + s //Value
12
- ];
13
- }
14
-
15
- export { hsl2hsv, hwb2hsv };
@@ -1,50 +0,0 @@
1
- import { hsl2hsv } from './hsv.js';
2
-
3
- function rgb2hue(r, g, b, fallback = 0) {
4
- let value = rgb2value(r, g, b);
5
- let whiteness = rgb2whiteness(r, g, b);
6
- let delta = value - whiteness;
7
- if (delta > 0) {
8
- // calculate segment
9
- let segment = value === r ? (g - b) / delta : (value === g
10
- ? (b - r) / delta
11
- : (r - g) / delta);
12
- // calculate shift
13
- let shift = value === r ? segment < 0
14
- ? 360 / 60
15
- : 0 / 60 : (value === g
16
- ? 120 / 60
17
- : 240 / 60);
18
- // calculate hue
19
- return (segment + shift) * 60;
20
- }
21
- return fallback;
22
- }
23
- function rgb2value(r, g, b) {
24
- return Math.max(r, g, b);
25
- }
26
- function rgb2whiteness(r, g, b) {
27
- return Math.min(r, g, b);
28
- }
29
- function rgb2hwb(r, g, b, a = null, fallback = 0) {
30
- r *= 100 / 255;
31
- g *= 100 / 255;
32
- b *= 100 / 255;
33
- let hue = rgb2hue(r, g, b, fallback);
34
- let whiteness = rgb2whiteness(r, g, b);
35
- let value = Math.round(rgb2value(r, g, b));
36
- let blackness = 100 - value;
37
- const result = [hue / 360, whiteness / 100, blackness / 100];
38
- if (a != null) {
39
- result.push(a);
40
- }
41
- return result;
42
- }
43
- function hsv2hwb(h, s, v) {
44
- return [h, (1 - s) * v, 1 - v];
45
- }
46
- function hsl2hwb(h, s, l) {
47
- return hsv2hwb(...hsl2hsv(h, s, l));
48
- }
49
-
50
- export { hsl2hwb, hsv2hwb, rgb2hwb };
@@ -1,66 +0,0 @@
1
- function hwb2rgb(hue, white, black, alpha = null) {
2
- const rgb = hsl2rgb(hue, 1, .5);
3
- for (let i = 0; i < 3; i++) {
4
- rgb[i] *= (1 - white - black);
5
- rgb[i] = Math.round(rgb[i] + white);
6
- }
7
- if (alpha != null && alpha != 1) {
8
- rgb.push(alpha);
9
- }
10
- return rgb;
11
- }
12
- function hsl2rgb(h, s, l, a = null) {
13
- let v = l <= .5 ? l * (1.0 + s) : l + s - l * s;
14
- let r = l;
15
- let g = l;
16
- let b = l;
17
- if (v > 0) {
18
- let m = l + l - v;
19
- let sv = (v - m) / v;
20
- h *= 6.0;
21
- let sextant = Math.floor(h);
22
- let fract = h - sextant;
23
- let vsf = v * sv * fract;
24
- let mid1 = m + vsf;
25
- let mid2 = v - vsf;
26
- switch (sextant) {
27
- case 0:
28
- r = v;
29
- g = mid1;
30
- b = m;
31
- break;
32
- case 1:
33
- r = mid2;
34
- g = v;
35
- b = m;
36
- break;
37
- case 2:
38
- r = m;
39
- g = v;
40
- b = mid1;
41
- break;
42
- case 3:
43
- r = m;
44
- g = mid2;
45
- b = v;
46
- break;
47
- case 4:
48
- r = mid1;
49
- g = m;
50
- b = v;
51
- break;
52
- case 5:
53
- r = v;
54
- g = m;
55
- b = mid2;
56
- break;
57
- }
58
- }
59
- const values = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
60
- if (a != null && a != 1) {
61
- values.push(Math.round(a * 255));
62
- }
63
- return values;
64
- }
65
-
66
- export { hsl2rgb, hwb2rgb };