@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.
- package/CHANGELOG.md +6 -0
- package/README.md +53 -6
- package/dist/index-umd-web.js +4195 -3363
- package/dist/index.cjs +4199 -3367
- package/dist/index.d.ts +42 -31
- package/dist/lib/ast/expand.js +81 -65
- package/dist/lib/ast/features/calc.js +37 -35
- package/dist/lib/ast/features/inlinecssvariables.js +25 -17
- package/dist/lib/ast/features/prefix.js +22 -19
- package/dist/lib/ast/features/shorthand.js +1 -1
- package/dist/lib/ast/features/transform.js +17 -2
- package/dist/lib/ast/math/expression.js +184 -159
- package/dist/lib/ast/math/math.js +22 -20
- package/dist/lib/ast/minify.js +249 -199
- package/dist/lib/ast/transform/compute.js +48 -38
- package/dist/lib/ast/transform/matrix.js +6 -5
- package/dist/lib/ast/transform/minify.js +31 -34
- package/dist/lib/ast/transform/utils.js +76 -16
- package/dist/lib/ast/types.js +32 -1
- package/dist/lib/fs/resolve.js +1 -14
- package/dist/lib/parser/declaration/list.js +1 -1
- package/dist/lib/parser/declaration/map.js +1 -1
- package/dist/lib/parser/declaration/set.js +1 -1
- package/dist/lib/parser/parse.js +19 -95
- package/dist/lib/parser/tokenize.js +1 -13
- package/dist/lib/parser/utils/declaration.js +1 -1
- package/dist/lib/parser/utils/type.js +1 -1
- package/dist/lib/renderer/render.js +44 -168
- package/dist/lib/{renderer → syntax}/color/a98rgb.js +2 -2
- package/dist/lib/syntax/color/cmyk.js +104 -0
- package/dist/lib/{renderer → syntax}/color/color-mix.js +20 -21
- package/dist/lib/syntax/color/color.js +581 -0
- package/dist/lib/syntax/color/hex.js +179 -0
- package/dist/lib/syntax/color/hsl.js +201 -0
- package/dist/lib/syntax/color/hwb.js +185 -0
- package/dist/lib/syntax/color/lab.js +262 -0
- package/dist/lib/syntax/color/lch.js +194 -0
- package/dist/lib/syntax/color/oklab.js +237 -0
- package/dist/lib/syntax/color/oklch.js +166 -0
- package/dist/lib/{renderer → syntax}/color/p3.js +3 -3
- package/dist/lib/{renderer → syntax}/color/rec2020.js +11 -11
- package/dist/lib/{renderer → syntax}/color/relativecolor.js +53 -40
- package/dist/lib/syntax/color/rgb.js +140 -0
- package/dist/lib/{renderer → syntax}/color/srgb.js +58 -46
- package/dist/lib/{renderer → syntax}/color/utils/components.js +7 -7
- package/dist/lib/{renderer → syntax}/color/utils/constants.js +6 -33
- package/dist/lib/syntax/color/utils/distance.js +30 -0
- package/dist/lib/{renderer → syntax}/color/xyz.js +27 -14
- package/dist/lib/{renderer → syntax}/color/xyzd50.js +8 -8
- package/dist/lib/syntax/syntax.js +77 -67
- package/dist/lib/syntax/utils.js +70 -0
- package/dist/lib/validation/at-rules/container.js +1 -1
- package/dist/lib/validation/at-rules/counter-style.js +1 -1
- package/dist/lib/validation/at-rules/custom-media.js +1 -1
- package/dist/lib/validation/at-rules/document.js +1 -1
- package/dist/lib/validation/at-rules/font-feature-values.js +2 -2
- package/dist/lib/validation/at-rules/import.js +1 -1
- package/dist/lib/validation/at-rules/keyframes.js +14 -13
- package/dist/lib/validation/at-rules/layer.js +1 -1
- package/dist/lib/validation/at-rules/media.js +1 -1
- package/dist/lib/validation/at-rules/namespace.js +1 -1
- package/dist/lib/validation/at-rules/page-margin-box.js +1 -1
- package/dist/lib/validation/at-rules/page.js +1 -1
- package/dist/lib/validation/at-rules/supports.js +1 -1
- package/dist/lib/validation/at-rules/when.js +1 -1
- package/dist/lib/validation/atrule.js +2 -2
- package/dist/lib/validation/config.js +4 -3
- package/dist/lib/validation/config.json.js +1 -1
- package/dist/lib/validation/parser/parse.js +12 -7
- package/dist/lib/validation/selector.js +9 -8
- package/dist/lib/validation/syntax.js +170 -120
- package/dist/lib/validation/syntaxes/complex-selector-list.js +13 -19
- package/dist/lib/validation/syntaxes/complex-selector.js +1 -1
- package/dist/lib/validation/syntaxes/compound-selector.js +5 -24
- package/dist/lib/validation/syntaxes/family-name.js +36 -39
- package/dist/lib/validation/syntaxes/keyframe-selector.js +14 -22
- package/dist/lib/validation/syntaxes/layer-name.js +1 -1
- package/dist/lib/validation/syntaxes/relative-selector-list.js +27 -25
- package/dist/lib/validation/syntaxes/relative-selector.js +1 -1
- package/dist/lib/validation/syntaxes/url.js +35 -33
- package/dist/lib/validation/utils/list.js +10 -9
- package/dist/lib/validation/utils/whitespace.js +1 -1
- package/dist/node/index.js +4 -2
- package/dist/web/index.js +4 -2
- package/package.json +4 -4
- package/.editorconfig +0 -484
- package/dist/lib/ast/transform/convert.js +0 -33
- package/dist/lib/ast/utils/utils.js +0 -104
- package/dist/lib/renderer/color/color.js +0 -654
- package/dist/lib/renderer/color/hex.js +0 -105
- package/dist/lib/renderer/color/hsl.js +0 -125
- package/dist/lib/renderer/color/hwb.js +0 -103
- package/dist/lib/renderer/color/lab.js +0 -148
- package/dist/lib/renderer/color/lch.js +0 -90
- package/dist/lib/renderer/color/oklab.js +0 -131
- package/dist/lib/renderer/color/oklch.js +0 -75
- package/dist/lib/renderer/color/rgb.js +0 -50
- package/dist/lib/validation/syntaxes/keyframe-block-list.js +0 -28
- package/dist/lib/{renderer → syntax}/color/hsv.js +0 -0
- package/dist/lib/{renderer → syntax}/color/prophotorgb.js +1 -1
- /package/dist/lib/{renderer → syntax}/color/utils/matrix.js +0 -0
|
@@ -0,0 +1,179 @@
|
|
|
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 { color2srgbvalues, getNumber } from './color.js';
|
|
8
|
+
import { srgb2rgb, cmyk2rgbvalues, hwb2rgbvalues, hsl2rgbvalues } from './rgb.js';
|
|
9
|
+
import { COLORS_NAMES, NAMES_COLORS } from './utils/constants.js';
|
|
10
|
+
import { getComponents } from './utils/components.js';
|
|
11
|
+
import { lch2srgbvalues, lab2srgbvalues, oklch2srgbvalues, oklab2srgbvalues } from './srgb.js';
|
|
12
|
+
import '../../renderer/sourcemap/lib/encode.js';
|
|
13
|
+
|
|
14
|
+
function toHexString(acc, value) {
|
|
15
|
+
return acc + value.toString(16).padStart(2, '0');
|
|
16
|
+
}
|
|
17
|
+
function reduceHexValue(value) {
|
|
18
|
+
if (value[0] != '#') {
|
|
19
|
+
value = COLORS_NAMES[value.toLowerCase()] ?? value;
|
|
20
|
+
}
|
|
21
|
+
const named_color = NAMES_COLORS[expandHexValue(value)];
|
|
22
|
+
if (value.length == 7) {
|
|
23
|
+
if (value[1] == value[2] &&
|
|
24
|
+
value[3] == value[4] &&
|
|
25
|
+
value[5] == value[6]) {
|
|
26
|
+
value = `#${value[1]}${value[3]}${value[5]}`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else if (value.length == 9) {
|
|
30
|
+
if (value[1] == value[2] &&
|
|
31
|
+
value[3] == value[4] &&
|
|
32
|
+
value[5] == value[6] &&
|
|
33
|
+
value[7] == value[8]) {
|
|
34
|
+
value = `#${value[1]}${value[3]}${value[5]}${value[7] == 'f' ? '' : value[7]}`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return named_color != null && named_color.length <= value.length ? named_color : value;
|
|
38
|
+
}
|
|
39
|
+
function expandHexValue(value) {
|
|
40
|
+
if (value.length == 4) {
|
|
41
|
+
return `#${value[1]}${value[1]}${value[2]}${value[2]}${value[3]}${value[3]}`;
|
|
42
|
+
}
|
|
43
|
+
if (value.length == 5) {
|
|
44
|
+
return `#${value[1]}${value[1]}${value[2]}${value[2]}${value[3]}${value[3]}${value[4]}${value[4]}`;
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
function rgb2HexToken(token) {
|
|
49
|
+
let value = rgb2hexvalues(token);
|
|
50
|
+
if (value == null) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return hexToken(value);
|
|
54
|
+
}
|
|
55
|
+
function hsl2HexToken(token) {
|
|
56
|
+
let value = hsl2hexvalues(token);
|
|
57
|
+
if (value == null) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return hexToken(value);
|
|
61
|
+
}
|
|
62
|
+
function cmyk2HexToken(token) {
|
|
63
|
+
let value = cmyk2hexvalues(token);
|
|
64
|
+
if (value == null) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return hexToken(value);
|
|
68
|
+
}
|
|
69
|
+
function hwb2HexToken(token) {
|
|
70
|
+
let value = hwb2hexvalues(token);
|
|
71
|
+
if (value == null) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return hexToken(value);
|
|
75
|
+
}
|
|
76
|
+
function color2HexToken(token) {
|
|
77
|
+
let value = color2srgbvalues(token);
|
|
78
|
+
if (value == null) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return hexToken(value.reduce((acc, curr) => acc + srgb2rgb(curr).toString(16).padStart(2, '0'), '#'));
|
|
82
|
+
}
|
|
83
|
+
function oklab2HexToken(token) {
|
|
84
|
+
let value = oklab2srgbvalues(token);
|
|
85
|
+
if (value == null) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return hexToken(value.reduce((acc, curr) => acc + srgb2rgb(curr).toString(16).padStart(2, '0'), '#'));
|
|
89
|
+
}
|
|
90
|
+
function oklch2HexToken(token) {
|
|
91
|
+
let value = oklch2srgbvalues(token);
|
|
92
|
+
if (value == null) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return hexToken(value.reduce((acc, curr) => acc + srgb2rgb(curr).toString(16).padStart(2, '0'), '#'));
|
|
96
|
+
}
|
|
97
|
+
function lab2HexToken(token) {
|
|
98
|
+
let value = lab2srgbvalues(token);
|
|
99
|
+
if (value == null) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
return hexToken(value.reduce((acc, curr) => acc + srgb2rgb(curr).toString(16).padStart(2, '0'), '#'));
|
|
103
|
+
}
|
|
104
|
+
function lch2HexToken(token) {
|
|
105
|
+
let value = lch2srgbvalues(token);
|
|
106
|
+
if (value == null) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
return hexToken(value.reduce((acc, curr) => acc + srgb2rgb(curr).toString(16).padStart(2, '0'), '#'));
|
|
110
|
+
}
|
|
111
|
+
function hexToken(value) {
|
|
112
|
+
value = reduceHexValue(value);
|
|
113
|
+
return {
|
|
114
|
+
typ: EnumToken.ColorTokenType,
|
|
115
|
+
val: value,
|
|
116
|
+
kin: value[0] == '#' ? ColorType.HEX : ColorType.LIT
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function rgb2hexvalues(token) {
|
|
120
|
+
let value = '#';
|
|
121
|
+
let t;
|
|
122
|
+
// @ts-ignore
|
|
123
|
+
const components = getComponents(token);
|
|
124
|
+
if (components == null || components.length < 3) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
// @ts-ignore
|
|
128
|
+
for (let i = 0; i < 3; i++) {
|
|
129
|
+
// @ts-ignore
|
|
130
|
+
t = components[i];
|
|
131
|
+
// @ts-ignore
|
|
132
|
+
value += (t.typ == EnumToken.Iden && t.val == 'none' ? '0' : Math.round(getNumber(t) * (t.typ == EnumToken.PercentageTokenType ? 255 : 1))).toString(16).padStart(2, '0');
|
|
133
|
+
}
|
|
134
|
+
// @ts-ignore
|
|
135
|
+
if (components.length == 4) {
|
|
136
|
+
// @ts-ignore
|
|
137
|
+
t = components[3];
|
|
138
|
+
// @ts-ignore
|
|
139
|
+
const v = getNumber(t);
|
|
140
|
+
// @ts-ignore
|
|
141
|
+
if (v < 1) {
|
|
142
|
+
// @ts-ignore
|
|
143
|
+
value += Math.round(255 * getNumber(t)).toString(16).padStart(2, '0');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return value;
|
|
147
|
+
}
|
|
148
|
+
function hsl2hexvalues(token) {
|
|
149
|
+
const t = hsl2rgbvalues(token);
|
|
150
|
+
if (t == null) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
if (t.length == 4) {
|
|
154
|
+
t[3] = srgb2rgb(t[3]);
|
|
155
|
+
}
|
|
156
|
+
return `${t.reduce(toHexString, '#')}`;
|
|
157
|
+
}
|
|
158
|
+
function hwb2hexvalues(token) {
|
|
159
|
+
const t = hwb2rgbvalues(token);
|
|
160
|
+
if (t == null) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
if (t.length == 4) {
|
|
164
|
+
t[3] = srgb2rgb(t[3]);
|
|
165
|
+
}
|
|
166
|
+
return `${t.reduce(toHexString, '#')}`;
|
|
167
|
+
}
|
|
168
|
+
function cmyk2hexvalues(token) {
|
|
169
|
+
const t = cmyk2rgbvalues(token);
|
|
170
|
+
if (t == null) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
if (t.length == 4) {
|
|
174
|
+
t[3] = srgb2rgb(t[3]);
|
|
175
|
+
}
|
|
176
|
+
return `#${t.reduce(toHexString, '')}`;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export { cmyk2HexToken, cmyk2hexvalues, color2HexToken, expandHexValue, hsl2HexToken, hsl2hexvalues, hwb2HexToken, hwb2hexvalues, lab2HexToken, lch2HexToken, oklab2HexToken, oklch2HexToken, reduceHexValue, rgb2HexToken, rgb2hexvalues };
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { hwb2hsv } from './hsv.js';
|
|
2
|
+
import { color2srgbvalues, toPrecisionAngle, getNumber } from './color.js';
|
|
3
|
+
import { lch2rgbvalues, lab2rgbvalues, cmyk2rgbvalues } from './rgb.js';
|
|
4
|
+
import './utils/constants.js';
|
|
5
|
+
import { getComponents } from './utils/components.js';
|
|
6
|
+
import { hex2srgbvalues, oklch2srgbvalues, oklab2srgbvalues, hslvalues } from './srgb.js';
|
|
7
|
+
import { EnumToken, ColorType } from '../../ast/types.js';
|
|
8
|
+
import '../../ast/minify.js';
|
|
9
|
+
import '../../ast/walk.js';
|
|
10
|
+
import '../../parser/parse.js';
|
|
11
|
+
import '../../parser/tokenize.js';
|
|
12
|
+
import '../../parser/utils/config.js';
|
|
13
|
+
import '../../renderer/sourcemap/lib/encode.js';
|
|
14
|
+
|
|
15
|
+
function hex2HslToken(token) {
|
|
16
|
+
// @ts-ignore
|
|
17
|
+
return hslToken(srgb2hslvalues(...hex2srgbvalues(token)));
|
|
18
|
+
}
|
|
19
|
+
function rgb2HslToken(token) {
|
|
20
|
+
const values = rgb2hslvalues(token);
|
|
21
|
+
if (values == null) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return hslToken(values);
|
|
25
|
+
}
|
|
26
|
+
function hwb2HslToken(token) {
|
|
27
|
+
const values = hwb2hslvalues(token);
|
|
28
|
+
if (values == null) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return hslToken(values);
|
|
32
|
+
}
|
|
33
|
+
function cmyk2HslToken(token) {
|
|
34
|
+
const values = cmyk2hslvalues(token);
|
|
35
|
+
if (values == null) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return hslToken(values);
|
|
39
|
+
}
|
|
40
|
+
function oklab2HslToken(token) {
|
|
41
|
+
const values = oklab2hslvalues(token);
|
|
42
|
+
if (values == null) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return hslToken(values);
|
|
46
|
+
}
|
|
47
|
+
function oklch2HslToken(token) {
|
|
48
|
+
const values = oklch2hslvalues(token);
|
|
49
|
+
if (values == null) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return hslToken(values);
|
|
53
|
+
}
|
|
54
|
+
function lab2HslToken(token) {
|
|
55
|
+
const values = lab2hslvalues(token);
|
|
56
|
+
if (values == null) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return hslToken(values);
|
|
60
|
+
}
|
|
61
|
+
function lch2HslToken(token) {
|
|
62
|
+
const values = lch2hslvalues(token);
|
|
63
|
+
if (values == null) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return hslToken(values);
|
|
67
|
+
}
|
|
68
|
+
function color2HslToken(token) {
|
|
69
|
+
const values = color2srgbvalues(token);
|
|
70
|
+
if (values == null) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
return hslToken(srgb2hslvalues(...values));
|
|
75
|
+
}
|
|
76
|
+
function hslToken(values) {
|
|
77
|
+
values[0] = toPrecisionAngle(values[0] * 360);
|
|
78
|
+
const chi = [
|
|
79
|
+
{ typ: EnumToken.NumberTokenType, val: String(values[0]), uni: 'deg' },
|
|
80
|
+
{ typ: EnumToken.PercentageTokenType, val: String(values[1] * 100) },
|
|
81
|
+
{ typ: EnumToken.PercentageTokenType, val: String(values[2] * 100) },
|
|
82
|
+
];
|
|
83
|
+
if (values.length == 4 && values[3] != 1) {
|
|
84
|
+
chi.push({ typ: EnumToken.LiteralTokenType, val: '/' }, { typ: EnumToken.PercentageTokenType, val: (values[3] * 100).toFixed() });
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
typ: EnumToken.ColorTokenType,
|
|
88
|
+
val: 'hsl',
|
|
89
|
+
chi,
|
|
90
|
+
kin: ColorType.HSL
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function rgb2hslvalues(token) {
|
|
94
|
+
const chi = getComponents(token);
|
|
95
|
+
if (chi == null || chi.length < 3) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
// @ts-ignore
|
|
99
|
+
let t = chi[0];
|
|
100
|
+
// @ts-ignore
|
|
101
|
+
let r = getNumber(t);
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
t = chi[1];
|
|
104
|
+
// @ts-ignore
|
|
105
|
+
let g = getNumber(t);
|
|
106
|
+
// @ts-ignore
|
|
107
|
+
t = chi[2];
|
|
108
|
+
// @ts-ignore
|
|
109
|
+
let b = getNumber(t);
|
|
110
|
+
// @ts-ignore
|
|
111
|
+
let a = null;
|
|
112
|
+
if (chi.length == 4) {
|
|
113
|
+
a = getNumber(chi[3]);
|
|
114
|
+
}
|
|
115
|
+
const values = [r, g, b];
|
|
116
|
+
if (a != null && a != 1) {
|
|
117
|
+
values.push(a);
|
|
118
|
+
}
|
|
119
|
+
// @ts-ignore
|
|
120
|
+
return rgbvalues2hslvalues(...values);
|
|
121
|
+
}
|
|
122
|
+
// https://gist.github.com/defims/0ca2ef8832833186ed396a2f8a204117#file-annotated-js
|
|
123
|
+
function hsv2hsl(h, s, v, a) {
|
|
124
|
+
const result = [
|
|
125
|
+
//[hue, saturation, lightness]
|
|
126
|
+
//Range should be between 0 - 1
|
|
127
|
+
h, //Hue stays the same
|
|
128
|
+
//Saturation is very different between the two color spaces
|
|
129
|
+
//If (2-sat)*val < 1 set it to sat*val/((2-sat)*val)
|
|
130
|
+
//Otherwise sat*val/(2-(2-sat)*val)
|
|
131
|
+
//Conditional is not operating with hue, it is reassigned!
|
|
132
|
+
s * v / ((h = (2 - s) * v) < 1 ? h : 2 - h),
|
|
133
|
+
h / 2, //Lightness is (2-sat)*val/2
|
|
134
|
+
];
|
|
135
|
+
if (a != null) {
|
|
136
|
+
result.push(a);
|
|
137
|
+
}
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
function cmyk2hslvalues(token) {
|
|
141
|
+
const values = cmyk2rgbvalues(token);
|
|
142
|
+
// @ts-ignore
|
|
143
|
+
return values == null ? null : rgbvalues2hslvalues(...values);
|
|
144
|
+
}
|
|
145
|
+
function hwb2hslvalues(token) {
|
|
146
|
+
// @ts-ignore
|
|
147
|
+
return hsv2hsl(...hwb2hsv(...Object.values(hslvalues(token))));
|
|
148
|
+
}
|
|
149
|
+
function lab2hslvalues(token) {
|
|
150
|
+
// @ts-ignore
|
|
151
|
+
return rgbvalues2hslvalues(...lab2rgbvalues(token));
|
|
152
|
+
}
|
|
153
|
+
function lch2hslvalues(token) {
|
|
154
|
+
// @ts-ignore
|
|
155
|
+
return rgbvalues2hslvalues(...lch2rgbvalues(token));
|
|
156
|
+
}
|
|
157
|
+
function oklab2hslvalues(token) {
|
|
158
|
+
const t = oklab2srgbvalues(token);
|
|
159
|
+
// @ts-ignore
|
|
160
|
+
return t == null ? null : srgb2hslvalues(...t);
|
|
161
|
+
}
|
|
162
|
+
function oklch2hslvalues(token) {
|
|
163
|
+
const t = oklch2srgbvalues(token);
|
|
164
|
+
// @ts-ignore
|
|
165
|
+
return t == null ? null : srgb2hslvalues(...t);
|
|
166
|
+
}
|
|
167
|
+
function rgbvalues2hslvalues(r, g, b, a = null) {
|
|
168
|
+
return srgb2hslvalues(r / 255, g / 255, b / 255, a);
|
|
169
|
+
}
|
|
170
|
+
function srgb2hslvalues(r, g, b, a = null) {
|
|
171
|
+
let max = Math.max(r, g, b);
|
|
172
|
+
let min = Math.min(r, g, b);
|
|
173
|
+
let h = 0;
|
|
174
|
+
let s = 0;
|
|
175
|
+
let l = (max + min) / 2;
|
|
176
|
+
if (max != min) {
|
|
177
|
+
let d = max - min;
|
|
178
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
179
|
+
switch (max) {
|
|
180
|
+
case r:
|
|
181
|
+
h = (g - b) / d + (g < b ? 6 : 0);
|
|
182
|
+
break;
|
|
183
|
+
case g:
|
|
184
|
+
h = (b - r) / d + 2;
|
|
185
|
+
break;
|
|
186
|
+
case b:
|
|
187
|
+
h = (r - g) / d + 4;
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
h /= 6;
|
|
191
|
+
}
|
|
192
|
+
const hsl = [h, s, l];
|
|
193
|
+
if (a != null && a < 1) {
|
|
194
|
+
// @ts-ignore
|
|
195
|
+
return hsl.concat([a]);
|
|
196
|
+
}
|
|
197
|
+
// @ts-ignore
|
|
198
|
+
return hsl;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export { cmyk2HslToken, cmyk2hslvalues, color2HslToken, hex2HslToken, hsv2hsl, hwb2HslToken, hwb2hslvalues, lab2HslToken, lab2hslvalues, lch2HslToken, lch2hslvalues, oklab2HslToken, oklab2hslvalues, oklch2HslToken, oklch2hslvalues, rgb2HslToken, rgb2hslvalues, rgbvalues2hslvalues, srgb2hslvalues };
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { hsl2hsv } from './hsv.js';
|
|
2
|
+
import './utils/constants.js';
|
|
3
|
+
import { getComponents } from './utils/components.js';
|
|
4
|
+
import { color2srgbvalues, toPrecisionAngle, getAngle, getNumber } from './color.js';
|
|
5
|
+
import { cmyk2srgbvalues, lch2srgbvalues, lab2srgbvalues, oklch2srgbvalues, oklab2srgbvalues } from './srgb.js';
|
|
6
|
+
import { EnumToken, ColorType } from '../../ast/types.js';
|
|
7
|
+
import '../../ast/minify.js';
|
|
8
|
+
import '../../ast/walk.js';
|
|
9
|
+
import '../../parser/parse.js';
|
|
10
|
+
import '../../parser/tokenize.js';
|
|
11
|
+
import '../../parser/utils/config.js';
|
|
12
|
+
import '../../renderer/sourcemap/lib/encode.js';
|
|
13
|
+
|
|
14
|
+
function rgb2hwbToken(token) {
|
|
15
|
+
const values = rgb2hwbvalues(token);
|
|
16
|
+
if (values == null) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
return hwbToken(values);
|
|
20
|
+
}
|
|
21
|
+
function hsl2hwbToken(token) {
|
|
22
|
+
const values = hsl2hwbvalues(token);
|
|
23
|
+
if (values == null) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return hwbToken(values);
|
|
27
|
+
}
|
|
28
|
+
function cmyk2hwbToken(token) {
|
|
29
|
+
const values = cmyk2hwbvalues(token);
|
|
30
|
+
if (values == null) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return hwbToken(values);
|
|
34
|
+
}
|
|
35
|
+
function oklab2hwbToken(token) {
|
|
36
|
+
const values = oklab2hwbvalues(token);
|
|
37
|
+
if (values == null) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return hwbToken(values);
|
|
41
|
+
}
|
|
42
|
+
function oklch2hwbToken(token) {
|
|
43
|
+
const values = oklch2hwbvalues(token);
|
|
44
|
+
if (values == null) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return hwbToken(values);
|
|
48
|
+
}
|
|
49
|
+
function lab2hwbToken(token) {
|
|
50
|
+
const values = lab2hwbvalues(token);
|
|
51
|
+
if (values == null) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return hwbToken(values);
|
|
55
|
+
}
|
|
56
|
+
function lch2hwbToken(token) {
|
|
57
|
+
const values = lch2hwbvalues(token);
|
|
58
|
+
if (values == null) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return hwbToken(values);
|
|
62
|
+
}
|
|
63
|
+
function color2hwbToken(token) {
|
|
64
|
+
const values = color2hwbvalues(token);
|
|
65
|
+
if (values == null) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return hwbToken(values);
|
|
69
|
+
}
|
|
70
|
+
function hwbToken(values) {
|
|
71
|
+
values[0] = toPrecisionAngle(values[0] * 360);
|
|
72
|
+
const chi = [
|
|
73
|
+
{ typ: EnumToken.NumberTokenType, val: String(values[0]) },
|
|
74
|
+
{ typ: EnumToken.PercentageTokenType, val: String(values[1] * 100) },
|
|
75
|
+
{ typ: EnumToken.PercentageTokenType, val: String(values[2] * 100) },
|
|
76
|
+
];
|
|
77
|
+
if (values.length == 4) {
|
|
78
|
+
chi.push({ typ: EnumToken.LiteralTokenType, val: '/' }, { typ: EnumToken.PercentageTokenType, val: String((values[3] * 100).toFixed()) });
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
typ: EnumToken.ColorTokenType,
|
|
82
|
+
val: 'hwb',
|
|
83
|
+
chi,
|
|
84
|
+
kin: ColorType.HWB
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function rgb2hwbvalues(token) {
|
|
88
|
+
// @ts-ignore
|
|
89
|
+
return srgb2hwb(...getComponents(token).map((t, index) => {
|
|
90
|
+
if (index == 3) {
|
|
91
|
+
return getNumber(t);
|
|
92
|
+
}
|
|
93
|
+
return getNumber(t) / 255;
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
function cmyk2hwbvalues(token) {
|
|
97
|
+
// @ts-ignore
|
|
98
|
+
return srgb2hwb(...cmyk2srgbvalues(token));
|
|
99
|
+
}
|
|
100
|
+
function hsl2hwbvalues(token) {
|
|
101
|
+
// @ts-ignore
|
|
102
|
+
return hslvalues2hwbvalues(...getComponents(token).map((t, index) => {
|
|
103
|
+
if (index == 3 && (t.typ == EnumToken.IdenTokenType && t.val == 'none')) {
|
|
104
|
+
return 1;
|
|
105
|
+
}
|
|
106
|
+
if (index == 0) {
|
|
107
|
+
return getAngle(t);
|
|
108
|
+
}
|
|
109
|
+
return getNumber(t);
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
function lab2hwbvalues(token) {
|
|
113
|
+
// @ts-ignore
|
|
114
|
+
return srgb2hwb(...lab2srgbvalues(token));
|
|
115
|
+
}
|
|
116
|
+
function lch2hwbvalues(token) {
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
return srgb2hwb(...lch2srgbvalues(token));
|
|
119
|
+
}
|
|
120
|
+
function oklab2hwbvalues(token) {
|
|
121
|
+
// @ts-ignore
|
|
122
|
+
return srgb2hwb(...oklab2srgbvalues(token));
|
|
123
|
+
}
|
|
124
|
+
function oklch2hwbvalues(token) {
|
|
125
|
+
const values = oklch2srgbvalues(token);
|
|
126
|
+
// @ts-ignore
|
|
127
|
+
return values == null ? null : srgb2hwb(...values);
|
|
128
|
+
}
|
|
129
|
+
function rgb2hue(r, g, b, fallback = 0) {
|
|
130
|
+
let value = rgb2value(r, g, b);
|
|
131
|
+
let whiteness = rgb2whiteness(r, g, b);
|
|
132
|
+
let delta = value - whiteness;
|
|
133
|
+
if (delta > 0) {
|
|
134
|
+
// calculate segment
|
|
135
|
+
let segment = value === r ? (g - b) / delta : (value === g
|
|
136
|
+
? (b - r) / delta
|
|
137
|
+
: (r - g) / delta);
|
|
138
|
+
// calculate shift
|
|
139
|
+
let shift = value === r ? segment < 0
|
|
140
|
+
? 360 / 60
|
|
141
|
+
: 0 / 60 : (value === g
|
|
142
|
+
? 120 / 60
|
|
143
|
+
: 240 / 60);
|
|
144
|
+
// calculate hue
|
|
145
|
+
return (segment + shift) * 60;
|
|
146
|
+
}
|
|
147
|
+
return fallback;
|
|
148
|
+
}
|
|
149
|
+
function rgb2value(r, g, b) {
|
|
150
|
+
return Math.max(r, g, b);
|
|
151
|
+
}
|
|
152
|
+
function rgb2whiteness(r, g, b) {
|
|
153
|
+
return Math.min(r, g, b);
|
|
154
|
+
}
|
|
155
|
+
function color2hwbvalues(token) {
|
|
156
|
+
// @ts-ignore
|
|
157
|
+
return srgb2hwb(...color2srgbvalues(token));
|
|
158
|
+
}
|
|
159
|
+
function srgb2hwb(r, g, b, a = null, fallback = 0) {
|
|
160
|
+
r *= 100;
|
|
161
|
+
g *= 100;
|
|
162
|
+
b *= 100;
|
|
163
|
+
let hue = rgb2hue(r, g, b, fallback);
|
|
164
|
+
let whiteness = rgb2whiteness(r, g, b);
|
|
165
|
+
let value = Math.round(rgb2value(r, g, b));
|
|
166
|
+
let blackness = 100 - value;
|
|
167
|
+
const result = [hue / 360, whiteness / 100, blackness / 100];
|
|
168
|
+
if (a != null) {
|
|
169
|
+
result.push(a);
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
function hsv2hwb(h, s, v, a = null) {
|
|
174
|
+
const result = [h, (1 - s) * v, 1 - v];
|
|
175
|
+
if (a != null) {
|
|
176
|
+
result.push(a);
|
|
177
|
+
}
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
function hslvalues2hwbvalues(h, s, l, a = null) {
|
|
181
|
+
// @ts-ignore
|
|
182
|
+
return hsv2hwb(...hsl2hsv(h, s, l, a));
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export { cmyk2hwbToken, cmyk2hwbvalues, color2hwbToken, color2hwbvalues, hsl2hwbToken, hsl2hwbvalues, hslvalues2hwbvalues, hsv2hwb, hwbToken, lab2hwbToken, lab2hwbvalues, lch2hwbToken, lch2hwbvalues, oklab2hwbToken, oklab2hwbvalues, oklch2hwbToken, oklch2hwbvalues, rgb2hwbToken, rgb2hwbvalues, srgb2hwb };
|