@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.
- package/CHANGELOG.md +265 -0
- package/LICENSE.md +1 -1
- package/README.md +29 -17
- package/dist/index-umd-web.js +7461 -4360
- package/dist/index.cjs +8608 -5507
- package/dist/index.d.ts +203 -61
- package/dist/lib/ast/expand.js +2 -1
- package/dist/lib/ast/features/calc.js +19 -11
- package/dist/lib/ast/features/index.js +1 -0
- package/dist/lib/ast/features/inlinecssvariables.js +47 -29
- package/dist/lib/ast/features/prefix.js +117 -91
- package/dist/lib/ast/features/shorthand.js +34 -14
- package/dist/lib/ast/features/transform.js +67 -0
- package/dist/lib/ast/features/type.js +7 -0
- package/dist/lib/ast/math/expression.js +20 -10
- package/dist/lib/ast/math/math.js +20 -2
- package/dist/lib/ast/minify.js +209 -80
- package/dist/lib/ast/transform/compute.js +337 -0
- package/dist/lib/ast/transform/convert.js +33 -0
- package/dist/lib/ast/transform/matrix.js +112 -0
- package/dist/lib/ast/transform/minify.js +296 -0
- package/dist/lib/ast/transform/perspective.js +10 -0
- package/dist/lib/ast/transform/rotate.js +40 -0
- package/dist/lib/ast/transform/scale.js +32 -0
- package/dist/lib/ast/transform/skew.js +23 -0
- package/dist/lib/ast/transform/translate.js +32 -0
- package/dist/lib/ast/transform/utils.js +198 -0
- package/dist/lib/ast/types.js +18 -15
- package/dist/lib/ast/walk.js +54 -22
- package/dist/lib/fs/resolve.js +10 -0
- package/dist/lib/parser/declaration/list.js +48 -45
- package/dist/lib/parser/declaration/map.js +1 -0
- package/dist/lib/parser/declaration/set.js +2 -1
- package/dist/lib/parser/parse.js +449 -340
- package/dist/lib/parser/tokenize.js +147 -72
- package/dist/lib/parser/utils/declaration.js +5 -4
- package/dist/lib/parser/utils/type.js +2 -1
- package/dist/lib/renderer/color/a98rgb.js +2 -1
- package/dist/lib/renderer/color/{colormix.js → color-mix.js} +16 -7
- package/dist/lib/renderer/color/color.js +264 -170
- package/dist/lib/renderer/color/hex.js +19 -8
- package/dist/lib/renderer/color/hsl.js +9 -3
- package/dist/lib/renderer/color/hwb.js +2 -1
- package/dist/lib/renderer/color/lab.js +10 -1
- package/dist/lib/renderer/color/lch.js +10 -1
- package/dist/lib/renderer/color/oklab.js +10 -1
- package/dist/lib/renderer/color/oklch.js +10 -1
- package/dist/lib/renderer/color/p3.js +2 -1
- package/dist/lib/renderer/color/rec2020.js +2 -1
- package/dist/lib/renderer/color/relativecolor.js +27 -32
- package/dist/lib/renderer/color/rgb.js +14 -10
- package/dist/lib/renderer/color/srgb.js +48 -23
- package/dist/lib/renderer/color/utils/components.js +18 -6
- package/dist/lib/renderer/color/utils/constants.js +47 -3
- package/dist/lib/renderer/color/xyz.js +2 -1
- package/dist/lib/renderer/color/xyzd50.js +2 -1
- package/dist/lib/renderer/render.js +108 -43
- package/dist/lib/syntax/syntax.js +267 -136
- package/dist/lib/validation/at-rules/container.js +81 -103
- package/dist/lib/validation/at-rules/counter-style.js +9 -8
- package/dist/lib/validation/at-rules/custom-media.js +13 -15
- package/dist/lib/validation/at-rules/document.js +22 -27
- package/dist/lib/validation/at-rules/font-feature-values.js +8 -8
- package/dist/lib/validation/at-rules/import.js +30 -81
- package/dist/lib/validation/at-rules/keyframes.js +19 -23
- package/dist/lib/validation/at-rules/layer.js +5 -5
- package/dist/lib/validation/at-rules/media.js +42 -53
- package/dist/lib/validation/at-rules/namespace.js +19 -23
- package/dist/lib/validation/at-rules/page-margin-box.js +15 -18
- package/dist/lib/validation/at-rules/page.js +8 -7
- package/dist/lib/validation/at-rules/supports.js +73 -82
- package/dist/lib/validation/at-rules/when.js +32 -36
- package/dist/lib/validation/atrule.js +15 -18
- package/dist/lib/validation/config.js +24 -1
- package/dist/lib/validation/config.json.js +563 -63
- package/dist/lib/validation/parser/parse.js +196 -185
- package/dist/lib/validation/parser/types.js +1 -1
- package/dist/lib/validation/selector.js +8 -5
- package/dist/lib/validation/syntax.js +724 -1405
- package/dist/lib/validation/syntaxes/complex-selector-list.js +10 -11
- package/dist/lib/validation/syntaxes/complex-selector.js +10 -11
- package/dist/lib/validation/syntaxes/compound-selector.js +40 -50
- package/dist/lib/validation/syntaxes/family-name.js +9 -8
- package/dist/lib/validation/syntaxes/keyframe-block-list.js +6 -5
- package/dist/lib/validation/syntaxes/keyframe-selector.js +23 -105
- package/dist/lib/validation/syntaxes/layer-name.js +6 -5
- package/dist/lib/validation/syntaxes/relative-selector-list.js +7 -6
- package/dist/lib/validation/syntaxes/relative-selector.js +17 -15
- package/dist/lib/validation/syntaxes/url.js +18 -22
- package/dist/lib/validation/utils/list.js +20 -2
- package/dist/lib/validation/utils/whitespace.js +2 -1
- package/dist/node/index.js +4 -2
- package/dist/node/load.js +6 -1
- package/dist/web/index.js +4 -2
- package/dist/web/load.js +5 -0
- package/package.json +16 -15
- package/dist/lib/renderer/color/prophotoRgb.js +0 -56
- package/dist/lib/validation/declaration.js +0 -94
- 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
|
|
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 ==
|
|
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 ==
|
|
36
|
+
if (to == ColorKind.HSL) {
|
|
37
|
+
let t;
|
|
36
38
|
switch (token.kin) {
|
|
37
|
-
case
|
|
38
|
-
case
|
|
39
|
-
|
|
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
|
|
42
|
-
case
|
|
47
|
+
case ColorKind.HEX:
|
|
48
|
+
case ColorKind.LIT:
|
|
43
49
|
values.push(...hex2hsl(token));
|
|
44
50
|
break;
|
|
45
|
-
case
|
|
51
|
+
case ColorKind.HWB:
|
|
46
52
|
values.push(...hwb2hsl(token));
|
|
47
53
|
break;
|
|
48
|
-
case
|
|
49
|
-
|
|
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
|
|
52
|
-
|
|
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
|
|
68
|
+
case ColorKind.LAB:
|
|
55
69
|
values.push(...lab2hsl(token));
|
|
56
70
|
break;
|
|
57
|
-
case
|
|
71
|
+
case ColorKind.LCH:
|
|
58
72
|
values.push(...lch2hsl(token));
|
|
59
73
|
break;
|
|
60
|
-
case
|
|
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 ==
|
|
83
|
+
else if (to == ColorKind.HWB) {
|
|
70
84
|
switch (token.kin) {
|
|
71
|
-
case
|
|
72
|
-
case
|
|
85
|
+
case ColorKind.RGB:
|
|
86
|
+
case ColorKind.RGBA:
|
|
73
87
|
values.push(...rgb2hwb(token));
|
|
74
88
|
break;
|
|
75
|
-
case
|
|
76
|
-
case
|
|
89
|
+
case ColorKind.HEX:
|
|
90
|
+
case ColorKind.LIT:
|
|
77
91
|
values.push(...hex2hsl(token));
|
|
78
92
|
break;
|
|
79
|
-
case
|
|
80
|
-
case
|
|
93
|
+
case ColorKind.HSL:
|
|
94
|
+
case ColorKind.HSLA:
|
|
81
95
|
values.push(...hsl2hwb(token));
|
|
82
96
|
break;
|
|
83
|
-
case
|
|
97
|
+
case ColorKind.OKLAB:
|
|
84
98
|
values.push(...oklab2hwb(token));
|
|
85
99
|
break;
|
|
86
|
-
case
|
|
100
|
+
case ColorKind.OKLCH:
|
|
87
101
|
values.push(...oklch2hwb(token));
|
|
88
102
|
break;
|
|
89
|
-
case
|
|
103
|
+
case ColorKind.LAB:
|
|
90
104
|
values.push(...lab2hwb(token));
|
|
91
105
|
break;
|
|
92
|
-
case
|
|
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 ==
|
|
114
|
+
else if (to == ColorKind.RGB) {
|
|
115
|
+
let t;
|
|
101
116
|
switch (token.kin) {
|
|
102
|
-
case
|
|
103
|
-
case
|
|
117
|
+
case ColorKind.HEX:
|
|
118
|
+
case ColorKind.LIT:
|
|
104
119
|
values.push(...hex2rgb(token));
|
|
105
120
|
break;
|
|
106
|
-
case
|
|
107
|
-
|
|
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
|
|
110
|
-
|
|
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
|
|
113
|
-
|
|
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
|
|
116
|
-
|
|
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
|
|
119
|
-
|
|
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
|
|
122
|
-
|
|
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
|
|
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 ==
|
|
172
|
+
else if (to == ColorKind.LAB) {
|
|
134
173
|
switch (token.kin) {
|
|
135
|
-
case
|
|
136
|
-
case
|
|
174
|
+
case ColorKind.HEX:
|
|
175
|
+
case ColorKind.LIT:
|
|
137
176
|
values.push(...hex2lab(token));
|
|
138
177
|
break;
|
|
139
|
-
case
|
|
140
|
-
case
|
|
178
|
+
case ColorKind.RGB:
|
|
179
|
+
case ColorKind.RGBA:
|
|
141
180
|
values.push(...rgb2lab(token));
|
|
142
181
|
break;
|
|
143
|
-
case
|
|
144
|
-
case
|
|
182
|
+
case ColorKind.HSL:
|
|
183
|
+
case ColorKind.HSLA:
|
|
145
184
|
values.push(...hsl2lab(token));
|
|
146
185
|
break;
|
|
147
|
-
case
|
|
186
|
+
case ColorKind.HWB:
|
|
148
187
|
values.push(...hwb2lab(token));
|
|
149
188
|
break;
|
|
150
|
-
case
|
|
189
|
+
case ColorKind.LCH:
|
|
151
190
|
values.push(...lch2lab(token));
|
|
152
191
|
break;
|
|
153
|
-
case
|
|
192
|
+
case ColorKind.OKLAB:
|
|
154
193
|
values.push(...oklab2lab(token));
|
|
155
194
|
break;
|
|
156
|
-
case
|
|
195
|
+
case ColorKind.OKLCH:
|
|
157
196
|
values.push(...oklch2lab(token));
|
|
158
197
|
break;
|
|
159
|
-
case
|
|
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 ==
|
|
207
|
+
else if (to == ColorKind.LCH) {
|
|
169
208
|
switch (token.kin) {
|
|
170
|
-
case
|
|
171
|
-
case
|
|
209
|
+
case ColorKind.HEX:
|
|
210
|
+
case ColorKind.LIT:
|
|
172
211
|
values.push(...hex2lch(token));
|
|
173
212
|
break;
|
|
174
|
-
case
|
|
175
|
-
case
|
|
213
|
+
case ColorKind.RGB:
|
|
214
|
+
case ColorKind.RGBA:
|
|
176
215
|
values.push(...rgb2lch(token));
|
|
177
216
|
break;
|
|
178
|
-
case
|
|
179
|
-
case
|
|
217
|
+
case ColorKind.HSL:
|
|
218
|
+
case ColorKind.HSLA:
|
|
180
219
|
values.push(...hsl2lch(token));
|
|
181
220
|
break;
|
|
182
|
-
case
|
|
221
|
+
case ColorKind.HWB:
|
|
183
222
|
values.push(...hwb2lch(token));
|
|
184
223
|
break;
|
|
185
|
-
case
|
|
224
|
+
case ColorKind.LAB:
|
|
186
225
|
values.push(...lab2lch(token));
|
|
187
226
|
break;
|
|
188
|
-
case
|
|
227
|
+
case ColorKind.OKLAB:
|
|
189
228
|
values.push(...oklab2lch(token));
|
|
190
229
|
break;
|
|
191
|
-
case
|
|
230
|
+
case ColorKind.OKLCH:
|
|
192
231
|
values.push(...oklch2lch(token));
|
|
193
232
|
break;
|
|
194
|
-
case
|
|
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 ==
|
|
242
|
+
else if (to == ColorKind.OKLAB) {
|
|
204
243
|
switch (token.kin) {
|
|
205
|
-
case
|
|
206
|
-
case
|
|
244
|
+
case ColorKind.HEX:
|
|
245
|
+
case ColorKind.LIT:
|
|
207
246
|
values.push(...hex2oklab(token));
|
|
208
247
|
break;
|
|
209
|
-
case
|
|
210
|
-
case
|
|
248
|
+
case ColorKind.RGB:
|
|
249
|
+
case ColorKind.RGBA:
|
|
211
250
|
values.push(...rgb2oklab(token));
|
|
212
251
|
break;
|
|
213
|
-
case
|
|
214
|
-
case
|
|
252
|
+
case ColorKind.HSL:
|
|
253
|
+
case ColorKind.HSLA:
|
|
215
254
|
values.push(...hsl2oklab(token));
|
|
216
255
|
break;
|
|
217
|
-
case
|
|
256
|
+
case ColorKind.HWB:
|
|
218
257
|
values.push(...hwb2oklab(token));
|
|
219
258
|
break;
|
|
220
|
-
case
|
|
259
|
+
case ColorKind.LAB:
|
|
221
260
|
values.push(...lab2oklab(token));
|
|
222
261
|
break;
|
|
223
|
-
case
|
|
262
|
+
case ColorKind.LCH:
|
|
224
263
|
values.push(...lch2oklab(token));
|
|
225
264
|
break;
|
|
226
|
-
case
|
|
265
|
+
case ColorKind.OKLCH:
|
|
227
266
|
values.push(...oklch2oklab(token));
|
|
228
267
|
break;
|
|
229
|
-
case
|
|
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 ==
|
|
277
|
+
else if (to == ColorKind.OKLCH) {
|
|
239
278
|
switch (token.kin) {
|
|
240
|
-
case
|
|
241
|
-
case
|
|
279
|
+
case ColorKind.HEX:
|
|
280
|
+
case ColorKind.LIT:
|
|
242
281
|
values.push(...hex2oklch(token));
|
|
243
282
|
break;
|
|
244
|
-
case
|
|
245
|
-
case
|
|
283
|
+
case ColorKind.RGB:
|
|
284
|
+
case ColorKind.RGBA:
|
|
246
285
|
values.push(...rgb2oklch(token));
|
|
247
286
|
break;
|
|
248
|
-
case
|
|
249
|
-
case
|
|
287
|
+
case ColorKind.HSL:
|
|
288
|
+
case ColorKind.HSLA:
|
|
250
289
|
values.push(...hsl2oklch(token));
|
|
251
290
|
break;
|
|
252
|
-
case
|
|
291
|
+
case ColorKind.HWB:
|
|
253
292
|
values.push(...hwb2oklch(token));
|
|
254
293
|
break;
|
|
255
|
-
case
|
|
294
|
+
case ColorKind.LAB:
|
|
256
295
|
values.push(...lab2oklch(token));
|
|
257
296
|
break;
|
|
258
|
-
case
|
|
297
|
+
case ColorKind.OKLAB:
|
|
259
298
|
values.push(...oklab2oklch(token));
|
|
260
299
|
break;
|
|
261
|
-
case
|
|
300
|
+
case ColorKind.LCH:
|
|
262
301
|
values.push(...lch2oklch(token));
|
|
263
302
|
break;
|
|
264
|
-
case
|
|
303
|
+
case ColorKind.COLOR:
|
|
265
304
|
// @ts-ignore
|
|
266
|
-
|
|
267
|
-
switch (to) {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
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
|
|
310
|
-
case
|
|
365
|
+
case ColorKind.HEX:
|
|
366
|
+
case ColorKind.LIT:
|
|
311
367
|
values.push(...hex2srgb(token));
|
|
312
368
|
break;
|
|
313
|
-
case
|
|
314
|
-
case
|
|
315
|
-
|
|
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
|
|
318
|
-
case
|
|
319
|
-
|
|
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
|
|
322
|
-
|
|
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
|
|
325
|
-
|
|
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
|
|
328
|
-
|
|
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
|
|
331
|
-
|
|
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
|
|
334
|
-
|
|
335
|
-
|
|
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
|
|
420
|
+
case ColorKind.COLOR:
|
|
338
421
|
const val = color2srgbvalues(token);
|
|
422
|
+
if (val == null) {
|
|
423
|
+
return null;
|
|
424
|
+
}
|
|
339
425
|
switch (to) {
|
|
340
|
-
case
|
|
426
|
+
case ColorKind.SRGB:
|
|
341
427
|
values.push(...val);
|
|
342
428
|
break;
|
|
343
|
-
case
|
|
429
|
+
case ColorKind.SRGB_LINEAR:
|
|
344
430
|
// @ts-ignore
|
|
345
431
|
values.push(...srgb2lsrgbvalues(...val));
|
|
346
432
|
break;
|
|
347
|
-
case
|
|
433
|
+
case ColorKind.DISPLAY_P3:
|
|
348
434
|
// @ts-ignore
|
|
349
435
|
values.push(...srgb2p3values(...val));
|
|
350
436
|
break;
|
|
351
|
-
case
|
|
437
|
+
case ColorKind.PROPHOTO_RGB:
|
|
352
438
|
// @ts-ignore
|
|
353
439
|
values.push(...srgb2prophotorgbvalues(...val));
|
|
354
440
|
break;
|
|
355
|
-
case
|
|
441
|
+
case ColorKind.A98_RGB:
|
|
356
442
|
// @ts-ignore
|
|
357
443
|
values.push(...srgb2a98values(...val));
|
|
358
444
|
break;
|
|
359
|
-
case
|
|
445
|
+
case ColorKind.REC2020:
|
|
360
446
|
// @ts-ignore
|
|
361
447
|
values.push(...srgb2rec2020values(...val));
|
|
362
448
|
break;
|
|
363
|
-
case
|
|
364
|
-
case
|
|
449
|
+
case ColorKind.XYZ:
|
|
450
|
+
case ColorKind.XYZ_D65:
|
|
365
451
|
// @ts-ignore
|
|
366
452
|
values.push(...srgb2xyz(...val));
|
|
367
453
|
break;
|
|
368
|
-
case
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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:
|
|
492
|
-
kin:
|
|
581
|
+
chi: [{ typ: EnumToken.IdenTokenType, val: colorSpace }].concat(chi),
|
|
582
|
+
kin: ColorKind.COLOR
|
|
493
583
|
} : {
|
|
494
584
|
typ: EnumToken.ColorTokenType,
|
|
495
|
-
val:
|
|
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 ==
|
|
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') {
|