@rickosborne/hue 2025.2.16

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 (62) hide show
  1. package/README.md +774 -0
  2. package/color-comparator.cjs +90 -0
  3. package/color-comparator.cjs.map +6 -0
  4. package/color-comparator.d.ts +26 -0
  5. package/color-comparator.d.ts.map +1 -0
  6. package/color-comparator.mjs +71 -0
  7. package/color-comparator.mjs.map +6 -0
  8. package/color-conversion-error.cjs +36 -0
  9. package/color-conversion-error.cjs.map +6 -0
  10. package/color-conversion-error.d.ts +10 -0
  11. package/color-conversion-error.d.ts.map +1 -0
  12. package/color-conversion-error.mjs +17 -0
  13. package/color-conversion-error.mjs.map +6 -0
  14. package/color-conversion.cjs +222 -0
  15. package/color-conversion.cjs.map +6 -0
  16. package/color-conversion.d.ts +25 -0
  17. package/color-conversion.d.ts.map +1 -0
  18. package/color-conversion.mjs +203 -0
  19. package/color-conversion.mjs.map +6 -0
  20. package/color-from-css.cjs +131 -0
  21. package/color-from-css.cjs.map +6 -0
  22. package/color-from-css.d.ts +8 -0
  23. package/color-from-css.d.ts.map +1 -0
  24. package/color-from-css.mjs +112 -0
  25. package/color-from-css.mjs.map +6 -0
  26. package/color.cjs +226 -0
  27. package/color.cjs.map +6 -0
  28. package/color.d.ts +66 -0
  29. package/color.d.ts.map +1 -0
  30. package/color.mjs +207 -0
  31. package/color.mjs.map +6 -0
  32. package/hsl.cjs +58 -0
  33. package/hsl.cjs.map +6 -0
  34. package/hsl.d.ts +24 -0
  35. package/hsl.d.ts.map +1 -0
  36. package/hsl.mjs +39 -0
  37. package/hsl.mjs.map +6 -0
  38. package/hsv.cjs +58 -0
  39. package/hsv.cjs.map +6 -0
  40. package/hsv.d.ts +24 -0
  41. package/hsv.d.ts.map +1 -0
  42. package/hsv.mjs +39 -0
  43. package/hsv.mjs.map +6 -0
  44. package/index.cjs +27 -0
  45. package/index.cjs.map +6 -0
  46. package/index.d.ts +10 -0
  47. package/index.d.ts.map +1 -0
  48. package/index.mjs +10 -0
  49. package/index.mjs.map +6 -0
  50. package/numbers.cjs +25 -0
  51. package/numbers.cjs.map +6 -0
  52. package/numbers.d.ts +2 -0
  53. package/numbers.d.ts.map +1 -0
  54. package/numbers.mjs +5 -0
  55. package/numbers.mjs.map +6 -0
  56. package/package.json +116 -0
  57. package/rgb.cjs +161 -0
  58. package/rgb.cjs.map +6 -0
  59. package/rgb.d.ts +83 -0
  60. package/rgb.d.ts.map +1 -0
  61. package/rgb.mjs +142 -0
  62. package/rgb.mjs.map +6 -0
@@ -0,0 +1,203 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { toReal01 } from "@rickosborne/rebound";
4
+ import { positiveMod } from "../foundation/modulo.mjs";
5
+ import { chroma01FromHSL } from "./hsl.mjs";
6
+ import { chroma01FromHSV } from "./hsv.mjs";
7
+ import { chroma01FromRGB, chroma01FromRGB01, rgb01From255 } from "./rgb.mjs";
8
+ function hslFromHSV(hsv) {
9
+ if (hsv == null) {
10
+ return void 0;
11
+ }
12
+ const { a, h, s: sv, v } = hsv;
13
+ let sl = sv * v;
14
+ let l = (2 - sv) * v;
15
+ if (l === 0 || l === 2) {
16
+ sl = 0;
17
+ } else {
18
+ sl /= l <= 1 ? l : 2 - l;
19
+ }
20
+ l /= 2;
21
+ return {
22
+ h,
23
+ s: toReal01(sl),
24
+ l: toReal01(l),
25
+ ...a == null ? {} : { a }
26
+ };
27
+ }
28
+ __name(hslFromHSV, "hslFromHSV");
29
+ function hsvFromHSL(hsl) {
30
+ if (hsl == null) {
31
+ return void 0;
32
+ }
33
+ const { a, h, s: sl, l } = hsl;
34
+ let v;
35
+ let sv;
36
+ if (sl === 0 && l === 0) {
37
+ v = 0;
38
+ sv = 0;
39
+ } else {
40
+ const l2 = l * 2;
41
+ const s2 = sl * (l2 <= 1 ? l2 : 2 - l2);
42
+ v = toReal01((l2 + s2) / 2);
43
+ sv = toReal01(2 * s2 / (l2 + s2));
44
+ }
45
+ return {
46
+ h,
47
+ s: sv,
48
+ v,
49
+ ...a == null ? {} : { a }
50
+ };
51
+ }
52
+ __name(hsvFromHSL, "hsvFromHSL");
53
+ const rgb01FromHueChromaMin = /* @__PURE__ */ __name((hue360, chroma01, min, alpha01) => {
54
+ const hPrime = hue360 / 60;
55
+ const x = chroma01 * (1 - Math.abs(hPrime % 2 - 1));
56
+ const hP = Math.trunc(hPrime);
57
+ let r, g, b;
58
+ if (hP === 0) {
59
+ [r, g, b] = [chroma01, x, 0];
60
+ } else if (hP === 1) {
61
+ [r, g, b] = [x, chroma01, 0];
62
+ } else if (hP === 2) {
63
+ [r, g, b] = [0, chroma01, x];
64
+ } else if (hP === 3) {
65
+ [r, g, b] = [0, x, chroma01];
66
+ } else if (hP === 4) {
67
+ [r, g, b] = [x, 0, chroma01];
68
+ } else if (hP === 5) {
69
+ [r, g, b] = [chroma01, 0, x];
70
+ } else {
71
+ throw new RangeError(`Expected h' to be in range [0,6): ${hPrime}`);
72
+ }
73
+ return {
74
+ r: toReal01(r + min),
75
+ g: toReal01(g + min),
76
+ b: toReal01(b + min),
77
+ ...alpha01 == null ? {} : { a: alpha01 }
78
+ };
79
+ }, "rgb01FromHueChromaMin");
80
+ function rgbFromHSL(hsl) {
81
+ if (hsl == null) {
82
+ return void 0;
83
+ }
84
+ const { a, h, l } = hsl;
85
+ const c = chroma01FromHSL(hsl);
86
+ const m = l - c / 2;
87
+ return rgb01FromHueChromaMin(h, c, m, a);
88
+ }
89
+ __name(rgbFromHSL, "rgbFromHSL");
90
+ function rgbFromHSV(hsv) {
91
+ if (hsv == null) {
92
+ return void 0;
93
+ }
94
+ const { a, h, v } = hsv;
95
+ const c = chroma01FromHSV(hsv);
96
+ const m = v - c;
97
+ return rgb01FromHueChromaMin(h, c, m, a);
98
+ }
99
+ __name(rgbFromHSV, "rgbFromHSV");
100
+ const hue360From = /* @__PURE__ */ __name((chroma, r, g, b, max) => {
101
+ if (chroma === 0) {
102
+ return 0;
103
+ }
104
+ const m255 = max ?? Math.max(r, g, b);
105
+ let hPrime;
106
+ if (m255 === r) {
107
+ hPrime = (g - b) / chroma;
108
+ } else if (m255 === g) {
109
+ hPrime = (b - r) / chroma + 2;
110
+ } else {
111
+ hPrime = (r - g) / chroma + 4;
112
+ }
113
+ return positiveMod(Math.round(hPrime * 60), 360);
114
+ }, "hue360From");
115
+ function hue360FromRGB01(rgb01, chroma01, max01) {
116
+ if (rgb01 == null) {
117
+ return void 0;
118
+ }
119
+ const c01 = chroma01 ?? chroma01FromRGB01(rgb01);
120
+ const { r: r01, g: g01, b: b01 } = rgb01;
121
+ return hue360From(c01, r01, g01, b01, max01);
122
+ }
123
+ __name(hue360FromRGB01, "hue360FromRGB01");
124
+ function hue360FromRGB(rgb, chroma01, max255) {
125
+ if (rgb == null) {
126
+ return void 0;
127
+ }
128
+ const c01 = chroma01 ?? chroma01FromRGB(rgb);
129
+ const c255 = c01 * 255;
130
+ const { r, g, b } = rgb;
131
+ return hue360From(c255, r, g, b, max255);
132
+ }
133
+ __name(hue360FromRGB, "hue360FromRGB");
134
+ function hsvFromRGB(rgb) {
135
+ if (rgb == null) {
136
+ return void 0;
137
+ }
138
+ const { r, g, b, a: a255 } = rgb;
139
+ const a01 = a255 == null ? void 0 : toReal01(a255 / 255);
140
+ const min255 = Math.min(r, g, b);
141
+ const max255 = Math.max(r, g, b);
142
+ let h;
143
+ let s;
144
+ const v = toReal01(max255 / 255);
145
+ if (max255 === min255) {
146
+ h = 0;
147
+ s = 0;
148
+ } else {
149
+ const c255 = max255 - min255;
150
+ const c01 = (max255 - min255) / 255;
151
+ h = hue360FromRGB(rgb, c01, max255);
152
+ s = toReal01(c255 / max255);
153
+ }
154
+ return { h, s, v, ...a01 == null ? {} : { a: a01 } };
155
+ }
156
+ __name(hsvFromRGB, "hsvFromRGB");
157
+ function hslFromRGB01(rgb01) {
158
+ if (rgb01 == null) {
159
+ return void 0;
160
+ }
161
+ const { r: r01, g: g01, b: b01, a: a01 } = rgb01;
162
+ const min01 = Math.min(r01, g01, b01);
163
+ const max01 = Math.max(r01, g01, b01);
164
+ const sum01 = max01 + min01;
165
+ const l = toReal01(sum01 / 2, "luminosity");
166
+ let h;
167
+ let s;
168
+ if (l === 0 || l === 1) {
169
+ h = 0;
170
+ s = 0;
171
+ } else {
172
+ const c01 = toReal01(max01 - min01);
173
+ if (l <= 0.5) {
174
+ s = toReal01(c01 / sum01, "saturation");
175
+ } else {
176
+ s = toReal01(c01 / (2 - sum01), "saturation");
177
+ }
178
+ h = hue360FromRGB01(rgb01, c01, max01);
179
+ }
180
+ return { h, s, l, ...a01 == null ? {} : { a: a01 } };
181
+ }
182
+ __name(hslFromRGB01, "hslFromRGB01");
183
+ function hslFromRGB(rgb) {
184
+ if (rgb == null) {
185
+ return void 0;
186
+ }
187
+ const rgb01 = rgb01From255(rgb);
188
+ return hslFromRGB01(rgb01);
189
+ }
190
+ __name(hslFromRGB, "hslFromRGB");
191
+ export {
192
+ hslFromHSV,
193
+ hslFromRGB,
194
+ hslFromRGB01,
195
+ hsvFromHSL,
196
+ hsvFromRGB,
197
+ hue360FromRGB,
198
+ hue360FromRGB01,
199
+ rgb01FromHueChromaMin,
200
+ rgbFromHSL,
201
+ rgbFromHSV
202
+ };
203
+ //# sourceMappingURL=color-conversion.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/packages/hue/color-conversion.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var color_from_css_exports = {};
21
+ __export(color_from_css_exports, {
22
+ colorFromCSS: () => colorFromCSS
23
+ });
24
+ module.exports = __toCommonJS(color_from_css_exports);
25
+ var import_css = require("@rickosborne/css");
26
+ var import_rebound = require("@rickosborne/rebound");
27
+ var import_color_conversion_error = require("./color-conversion-error.cjs");
28
+ var import_color = require("./color.cjs");
29
+ const to01 = /* @__PURE__ */ __name(([value, unit]) => {
30
+ if (unit === "%") {
31
+ return (0, import_rebound.toReal01)(value * 0.01);
32
+ }
33
+ return (0, import_rebound.toReal01)(value);
34
+ }, "to01");
35
+ const to255 = /* @__PURE__ */ __name(([value, unit]) => {
36
+ if (unit == null) {
37
+ return (0, import_rebound.toInt255)(value);
38
+ }
39
+ if (unit === "%") {
40
+ return (0, import_rebound.toInt255)(Math.round(value * 2.55));
41
+ }
42
+ throw new import_color_conversion_error.ColorConversionError("CSS color value", unit, { message: `Unknown color value unit: ${unit}` });
43
+ }, "to255");
44
+ const to360 = /* @__PURE__ */ __name(([value, unit = "deg"]) => {
45
+ if (!(0, import_css.isAngleUnit)(unit)) {
46
+ throw new import_color_conversion_error.ColorConversionError("CSS color angle", unit, { message: `Unknown CSS color angle unit: ${unit}` });
47
+ }
48
+ return (0, import_css.convertBetweenUnits)(value, unit, "deg", import_css.ANGLE_CONVERSIONS, (n) => (0, import_rebound.toInt360)(Math.round(n)));
49
+ }, "to360");
50
+ const colorFromCSS = /* @__PURE__ */ __name((text) => {
51
+ const tokens = (0, import_css.colorTokensFromCSS)(text);
52
+ if (tokens == null) {
53
+ return void 0;
54
+ }
55
+ const { components, functionName, hex, name, space } = tokens;
56
+ if (hex != null) {
57
+ return import_color.Color.fromHexRGB(hex);
58
+ }
59
+ if (name != null) {
60
+ const nameHex = (0, import_css.hexFromCSSName)(name);
61
+ if (nameHex != null) {
62
+ return import_color.Color.fromHexRGB(nameHex);
63
+ }
64
+ throw new import_color_conversion_error.ColorConversionError("CSS color name", text, { message: "Unknown color name" });
65
+ }
66
+ if (components == null) {
67
+ throw new import_color_conversion_error.ColorConversionError("CSS color values", text, { message: "Missing color values" });
68
+ }
69
+ switch (functionName) {
70
+ case "color": {
71
+ if (space == null) {
72
+ throw new import_color_conversion_error.ColorConversionError("CSS color space", text, { message: "Missing color space" });
73
+ }
74
+ switch (space) {
75
+ case "sRGB": {
76
+ const [r, g, b, a] = components.map(to01).map((n01) => n01 == null ? void 0 : (0, import_rebound.toInt255)(Math.round(n01 * 255)));
77
+ if (r == null || g == null || b == null) {
78
+ throw new import_color_conversion_error.ColorConversionError("CSS sRGB color", text, { message: "Missing sRGB color values" });
79
+ }
80
+ return import_color.Color.fromRGB({ r, g, b, a });
81
+ }
82
+ default: {
83
+ throw new import_color_conversion_error.ColorConversionError("CSS color space", text, { message: `Unknown color space: ${space}` });
84
+ }
85
+ }
86
+ }
87
+ case "rgb":
88
+ case "rgba": {
89
+ if (components.length === 4) {
90
+ const [alphaValue, alphaUnit] = components[3];
91
+ if (alphaValue <= 1 && alphaUnit == null) {
92
+ components[3][0] = Math.round(alphaValue * 255);
93
+ }
94
+ } else if (components.length !== 3) {
95
+ throw new import_color_conversion_error.ColorConversionError("CSS RGB Color", text, { message: "Expected 3 or 4 RGB color values" });
96
+ }
97
+ const [r, g, b, a] = components.map(to255);
98
+ if (r == null || g == null || b == null) {
99
+ throw new import_color_conversion_error.ColorConversionError("CSS RGB color", text, { message: "Missing sRGB color values" });
100
+ }
101
+ return import_color.Color.fromRGB({ r, g, b, a });
102
+ }
103
+ case "hsl":
104
+ case "hsla": {
105
+ if (components.length < 3 || components.length > 4) {
106
+ throw new import_color_conversion_error.ColorConversionError("CSS HSL color", text, { message: "Expected 3 or 4 HSL color values" });
107
+ }
108
+ const h = to360(components.shift());
109
+ const [s, l, a] = components.map(to01);
110
+ if (h == null || s == null || l == null) {
111
+ throw new import_color_conversion_error.ColorConversionError("CSS HSL color", text, { message: "Missing HSL color values" });
112
+ }
113
+ return import_color.Color.fromHSL({ h, s, l, a });
114
+ }
115
+ case "hwb": {
116
+ if (components.length < 3 || components.length > 4) {
117
+ throw new import_color_conversion_error.ColorConversionError("CSS HSV/HWB color", text, { message: "Expected 3 or 4 HSV/HWB color values" });
118
+ }
119
+ const h = to360(components.shift());
120
+ const [s, v, a] = components.map(to01);
121
+ if (h == null || s == null || v == null) {
122
+ throw new import_color_conversion_error.ColorConversionError("CSS HSV/HWB color", text, { message: "Missing HSV/HWB color values" });
123
+ }
124
+ return import_color.Color.fromHSV({ h, s, v, a });
125
+ }
126
+ default: {
127
+ throw new import_color_conversion_error.ColorConversionError("CSS color function", text, { message: "Unknown color function" });
128
+ }
129
+ }
130
+ }, "colorFromCSS");
131
+ //# sourceMappingURL=color-from-css.cjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/packages/hue/color-from-css.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,8 @@
1
+ import { Color } from "./color.js";
2
+ /**
3
+ * Try to parse a CSS color expression. Does not support anything clever.
4
+ * Intended more for "I have colors in a config file" use-cases, and
5
+ * not "accept CSS typed in by Web users".
6
+ */
7
+ export declare const colorFromCSS: (text: string) => Color | undefined;
8
+ //# sourceMappingURL=color-from-css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-from-css.d.ts","sourceRoot":"","sources":["../../../src/packages/hue/color-from-css.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AA0BnC;;;;GAIG;AACH,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,KAAK,GAAG,SAgFnD,CAAC"}
@@ -0,0 +1,112 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { ANGLE_CONVERSIONS, colorTokensFromCSS, convertBetweenUnits, hexFromCSSName, isAngleUnit } from "@rickosborne/css";
4
+ import { toInt255, toInt360, toReal01 } from "@rickosborne/rebound";
5
+ import { ColorConversionError } from "./color-conversion-error.mjs";
6
+ import { Color } from "./color.mjs";
7
+ const to01 = /* @__PURE__ */ __name(([value, unit]) => {
8
+ if (unit === "%") {
9
+ return toReal01(value * 0.01);
10
+ }
11
+ return toReal01(value);
12
+ }, "to01");
13
+ const to255 = /* @__PURE__ */ __name(([value, unit]) => {
14
+ if (unit == null) {
15
+ return toInt255(value);
16
+ }
17
+ if (unit === "%") {
18
+ return toInt255(Math.round(value * 2.55));
19
+ }
20
+ throw new ColorConversionError("CSS color value", unit, { message: `Unknown color value unit: ${unit}` });
21
+ }, "to255");
22
+ const to360 = /* @__PURE__ */ __name(([value, unit = "deg"]) => {
23
+ if (!isAngleUnit(unit)) {
24
+ throw new ColorConversionError("CSS color angle", unit, { message: `Unknown CSS color angle unit: ${unit}` });
25
+ }
26
+ return convertBetweenUnits(value, unit, "deg", ANGLE_CONVERSIONS, (n) => toInt360(Math.round(n)));
27
+ }, "to360");
28
+ const colorFromCSS = /* @__PURE__ */ __name((text) => {
29
+ const tokens = colorTokensFromCSS(text);
30
+ if (tokens == null) {
31
+ return void 0;
32
+ }
33
+ const { components, functionName, hex, name, space } = tokens;
34
+ if (hex != null) {
35
+ return Color.fromHexRGB(hex);
36
+ }
37
+ if (name != null) {
38
+ const nameHex = hexFromCSSName(name);
39
+ if (nameHex != null) {
40
+ return Color.fromHexRGB(nameHex);
41
+ }
42
+ throw new ColorConversionError("CSS color name", text, { message: "Unknown color name" });
43
+ }
44
+ if (components == null) {
45
+ throw new ColorConversionError("CSS color values", text, { message: "Missing color values" });
46
+ }
47
+ switch (functionName) {
48
+ case "color": {
49
+ if (space == null) {
50
+ throw new ColorConversionError("CSS color space", text, { message: "Missing color space" });
51
+ }
52
+ switch (space) {
53
+ case "sRGB": {
54
+ const [r, g, b, a] = components.map(to01).map((n01) => n01 == null ? void 0 : toInt255(Math.round(n01 * 255)));
55
+ if (r == null || g == null || b == null) {
56
+ throw new ColorConversionError("CSS sRGB color", text, { message: "Missing sRGB color values" });
57
+ }
58
+ return Color.fromRGB({ r, g, b, a });
59
+ }
60
+ default: {
61
+ throw new ColorConversionError("CSS color space", text, { message: `Unknown color space: ${space}` });
62
+ }
63
+ }
64
+ }
65
+ case "rgb":
66
+ case "rgba": {
67
+ if (components.length === 4) {
68
+ const [alphaValue, alphaUnit] = components[3];
69
+ if (alphaValue <= 1 && alphaUnit == null) {
70
+ components[3][0] = Math.round(alphaValue * 255);
71
+ }
72
+ } else if (components.length !== 3) {
73
+ throw new ColorConversionError("CSS RGB Color", text, { message: "Expected 3 or 4 RGB color values" });
74
+ }
75
+ const [r, g, b, a] = components.map(to255);
76
+ if (r == null || g == null || b == null) {
77
+ throw new ColorConversionError("CSS RGB color", text, { message: "Missing sRGB color values" });
78
+ }
79
+ return Color.fromRGB({ r, g, b, a });
80
+ }
81
+ case "hsl":
82
+ case "hsla": {
83
+ if (components.length < 3 || components.length > 4) {
84
+ throw new ColorConversionError("CSS HSL color", text, { message: "Expected 3 or 4 HSL color values" });
85
+ }
86
+ const h = to360(components.shift());
87
+ const [s, l, a] = components.map(to01);
88
+ if (h == null || s == null || l == null) {
89
+ throw new ColorConversionError("CSS HSL color", text, { message: "Missing HSL color values" });
90
+ }
91
+ return Color.fromHSL({ h, s, l, a });
92
+ }
93
+ case "hwb": {
94
+ if (components.length < 3 || components.length > 4) {
95
+ throw new ColorConversionError("CSS HSV/HWB color", text, { message: "Expected 3 or 4 HSV/HWB color values" });
96
+ }
97
+ const h = to360(components.shift());
98
+ const [s, v, a] = components.map(to01);
99
+ if (h == null || s == null || v == null) {
100
+ throw new ColorConversionError("CSS HSV/HWB color", text, { message: "Missing HSV/HWB color values" });
101
+ }
102
+ return Color.fromHSV({ h, s, v, a });
103
+ }
104
+ default: {
105
+ throw new ColorConversionError("CSS color function", text, { message: "Unknown color function" });
106
+ }
107
+ }
108
+ }, "colorFromCSS");
109
+ export {
110
+ colorFromCSS
111
+ };
112
+ //# sourceMappingURL=color-from-css.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/packages/hue/color-from-css.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }