@tbela99/css-parser 0.3.0 → 0.4.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/{LICENSE → LICENSE.md} +1 -1
- package/README.md +191 -80
- package/dist/config.json.js +20 -1
- package/dist/index-umd-web.js +3210 -1352
- package/dist/index.cjs +3211 -1353
- package/dist/index.d.ts +910 -0
- package/dist/lib/ast/expand.js +1 -1
- package/dist/lib/ast/features/calc.js +1 -2
- package/dist/lib/ast/features/inlinecssvariables.js +1 -1
- package/dist/lib/ast/features/shorthand.js +1 -1
- package/dist/lib/ast/math/expression.js +38 -3
- package/dist/lib/ast/math/math.js +2 -2
- package/dist/lib/ast/minify.js +0 -1
- package/dist/lib/ast/types.js +1 -0
- package/dist/lib/ast/utils/minifyfeature.js +4 -3
- package/dist/lib/parser/declaration/list.js +1 -1
- package/dist/lib/parser/declaration/map.js +129 -26
- package/dist/lib/parser/declaration/set.js +1 -1
- package/dist/lib/parser/parse.js +325 -303
- package/dist/lib/parser/tokenize.js +220 -223
- package/dist/lib/parser/utils/declaration.js +1 -1
- package/dist/lib/parser/utils/syntax.js +159 -23
- package/dist/lib/parser/utils/type.js +2 -2
- package/dist/lib/renderer/color/a98rgb.js +64 -0
- package/dist/lib/renderer/color/color.js +521 -0
- package/dist/lib/renderer/color/colormix.js +337 -0
- package/dist/lib/renderer/color/hex.js +92 -0
- package/dist/lib/renderer/color/hsl.js +118 -0
- package/dist/lib/renderer/color/hsv.js +20 -0
- package/dist/lib/renderer/color/hwb.js +101 -0
- package/dist/lib/renderer/color/lab.js +136 -0
- package/dist/lib/renderer/color/lch.js +79 -0
- package/dist/lib/renderer/color/oklab.js +121 -0
- package/dist/lib/renderer/color/oklch.js +65 -0
- package/dist/lib/renderer/color/p3.js +57 -0
- package/dist/lib/renderer/color/prophotorgb.js +56 -0
- package/dist/lib/renderer/color/rec2020.js +70 -0
- package/dist/lib/renderer/color/relativecolor.js +152 -0
- package/dist/lib/renderer/color/rgb.js +44 -0
- package/dist/lib/renderer/color/srgb.js +261 -0
- package/dist/lib/renderer/color/utils/components.js +20 -0
- package/dist/lib/renderer/color/utils/constants.js +191 -0
- package/dist/lib/renderer/color/utils/matrix.js +35 -0
- package/dist/lib/renderer/color/xyz.js +64 -0
- package/dist/lib/renderer/color/xyzd50.js +33 -0
- package/dist/lib/renderer/render.js +61 -32
- package/dist/node/index.js +1 -1
- package/dist/node/load.js +1 -1
- package/dist/web/index.js +1 -1
- package/package.json +15 -14
- package/quickjs.sh +1 -0
- package/dist/lib/ast/features/utils/math.js +0 -95
- package/dist/lib/iterable/set.js +0 -48
- package/dist/lib/iterable/weakmap.js +0 -53
- package/dist/lib/renderer/utils/calccolor.js +0 -238
- package/dist/lib/renderer/utils/color.js +0 -371
- package/dist/lib/renderer/utils/hex.js +0 -124
- package/dist/lib/renderer/utils/hsl.js +0 -49
- package/dist/lib/renderer/utils/hsv.js +0 -15
- package/dist/lib/renderer/utils/hwb.js +0 -50
- 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 };
|