@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.
Files changed (101) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +53 -6
  3. package/dist/index-umd-web.js +4195 -3363
  4. package/dist/index.cjs +4199 -3367
  5. package/dist/index.d.ts +42 -31
  6. package/dist/lib/ast/expand.js +81 -65
  7. package/dist/lib/ast/features/calc.js +37 -35
  8. package/dist/lib/ast/features/inlinecssvariables.js +25 -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 +184 -159
  13. package/dist/lib/ast/math/math.js +22 -20
  14. package/dist/lib/ast/minify.js +249 -199
  15. package/dist/lib/ast/transform/compute.js +48 -38
  16. package/dist/lib/ast/transform/matrix.js +6 -5
  17. package/dist/lib/ast/transform/minify.js +31 -34
  18. package/dist/lib/ast/transform/utils.js +76 -16
  19. package/dist/lib/ast/types.js +32 -1
  20. package/dist/lib/fs/resolve.js +1 -14
  21. package/dist/lib/parser/declaration/list.js +1 -1
  22. package/dist/lib/parser/declaration/map.js +1 -1
  23. package/dist/lib/parser/declaration/set.js +1 -1
  24. package/dist/lib/parser/parse.js +19 -95
  25. package/dist/lib/parser/tokenize.js +1 -13
  26. package/dist/lib/parser/utils/declaration.js +1 -1
  27. package/dist/lib/parser/utils/type.js +1 -1
  28. package/dist/lib/renderer/render.js +44 -168
  29. package/dist/lib/{renderer → syntax}/color/a98rgb.js +2 -2
  30. package/dist/lib/syntax/color/cmyk.js +104 -0
  31. package/dist/lib/{renderer → syntax}/color/color-mix.js +20 -21
  32. package/dist/lib/syntax/color/color.js +581 -0
  33. package/dist/lib/syntax/color/hex.js +179 -0
  34. package/dist/lib/syntax/color/hsl.js +201 -0
  35. package/dist/lib/syntax/color/hwb.js +185 -0
  36. package/dist/lib/syntax/color/lab.js +262 -0
  37. package/dist/lib/syntax/color/lch.js +194 -0
  38. package/dist/lib/syntax/color/oklab.js +237 -0
  39. package/dist/lib/syntax/color/oklch.js +166 -0
  40. package/dist/lib/{renderer → syntax}/color/p3.js +3 -3
  41. package/dist/lib/{renderer → syntax}/color/rec2020.js +11 -11
  42. package/dist/lib/{renderer → syntax}/color/relativecolor.js +53 -40
  43. package/dist/lib/syntax/color/rgb.js +140 -0
  44. package/dist/lib/{renderer → syntax}/color/srgb.js +58 -46
  45. package/dist/lib/{renderer → syntax}/color/utils/components.js +7 -7
  46. package/dist/lib/{renderer → syntax}/color/utils/constants.js +6 -33
  47. package/dist/lib/syntax/color/utils/distance.js +30 -0
  48. package/dist/lib/{renderer → syntax}/color/xyz.js +27 -14
  49. package/dist/lib/{renderer → syntax}/color/xyzd50.js +8 -8
  50. package/dist/lib/syntax/syntax.js +77 -67
  51. package/dist/lib/syntax/utils.js +70 -0
  52. package/dist/lib/validation/at-rules/container.js +1 -1
  53. package/dist/lib/validation/at-rules/counter-style.js +1 -1
  54. package/dist/lib/validation/at-rules/custom-media.js +1 -1
  55. package/dist/lib/validation/at-rules/document.js +1 -1
  56. package/dist/lib/validation/at-rules/font-feature-values.js +2 -2
  57. package/dist/lib/validation/at-rules/import.js +1 -1
  58. package/dist/lib/validation/at-rules/keyframes.js +14 -13
  59. package/dist/lib/validation/at-rules/layer.js +1 -1
  60. package/dist/lib/validation/at-rules/media.js +1 -1
  61. package/dist/lib/validation/at-rules/namespace.js +1 -1
  62. package/dist/lib/validation/at-rules/page-margin-box.js +1 -1
  63. package/dist/lib/validation/at-rules/page.js +1 -1
  64. package/dist/lib/validation/at-rules/supports.js +1 -1
  65. package/dist/lib/validation/at-rules/when.js +1 -1
  66. package/dist/lib/validation/atrule.js +2 -2
  67. package/dist/lib/validation/config.js +4 -3
  68. package/dist/lib/validation/config.json.js +1 -1
  69. package/dist/lib/validation/parser/parse.js +12 -7
  70. package/dist/lib/validation/selector.js +9 -8
  71. package/dist/lib/validation/syntax.js +170 -120
  72. package/dist/lib/validation/syntaxes/complex-selector-list.js +13 -19
  73. package/dist/lib/validation/syntaxes/complex-selector.js +1 -1
  74. package/dist/lib/validation/syntaxes/compound-selector.js +5 -24
  75. package/dist/lib/validation/syntaxes/family-name.js +36 -39
  76. package/dist/lib/validation/syntaxes/keyframe-selector.js +14 -22
  77. package/dist/lib/validation/syntaxes/layer-name.js +1 -1
  78. package/dist/lib/validation/syntaxes/relative-selector-list.js +27 -25
  79. package/dist/lib/validation/syntaxes/relative-selector.js +1 -1
  80. package/dist/lib/validation/syntaxes/url.js +35 -33
  81. package/dist/lib/validation/utils/list.js +10 -9
  82. package/dist/lib/validation/utils/whitespace.js +1 -1
  83. package/dist/node/index.js +4 -2
  84. package/dist/web/index.js +4 -2
  85. package/package.json +4 -4
  86. package/.editorconfig +0 -484
  87. package/dist/lib/ast/transform/convert.js +0 -33
  88. package/dist/lib/ast/utils/utils.js +0 -104
  89. package/dist/lib/renderer/color/color.js +0 -654
  90. package/dist/lib/renderer/color/hex.js +0 -105
  91. package/dist/lib/renderer/color/hsl.js +0 -125
  92. package/dist/lib/renderer/color/hwb.js +0 -103
  93. package/dist/lib/renderer/color/lab.js +0 -148
  94. package/dist/lib/renderer/color/lch.js +0 -90
  95. package/dist/lib/renderer/color/oklab.js +0 -131
  96. package/dist/lib/renderer/color/oklch.js +0 -75
  97. package/dist/lib/renderer/color/rgb.js +0 -50
  98. package/dist/lib/validation/syntaxes/keyframe-block-list.js +0 -28
  99. package/dist/lib/{renderer → syntax}/color/hsv.js +0 -0
  100. package/dist/lib/{renderer → syntax}/color/prophotorgb.js +1 -1
  101. /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 };