@auaust/jaune 0.0.3 → 0.0.5

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 (66) hide show
  1. package/dist/chunk-Q3GK6DZM.js +2 -0
  2. package/dist/chunk-Q3GK6DZM.js.map +1 -0
  3. package/dist/chunk-X6GMJCOG.cjs +2 -0
  4. package/dist/chunk-X6GMJCOG.cjs.map +1 -0
  5. package/dist/{index-VyiURM-J.d.cts → index-7Xs589Bo.d.cts} +37 -90
  6. package/dist/{index-VyiURM-J.d.ts → index-7Xs589Bo.d.ts} +37 -90
  7. package/dist/index.cjs +1 -1
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +1 -1
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/utils.cjs +1 -1
  14. package/dist/utils.cjs.map +1 -1
  15. package/dist/utils.d.cts +115 -26
  16. package/dist/utils.d.ts +115 -26
  17. package/dist/utils.js +1 -1
  18. package/dist/utils.js.map +1 -1
  19. package/package.json +14 -10
  20. package/src/classes/Color.ts +26 -14
  21. package/src/data/fallbackColor.ts +10 -0
  22. package/src/{utils → data}/namedColors.ts +5 -109
  23. package/src/types/index.ts +2 -0
  24. package/src/utils/brightness.ts +17 -0
  25. package/src/utils/closestNamedColor.ts +25 -0
  26. package/src/utils/contrast.ts +17 -0
  27. package/src/utils/couldBeRgb.ts +13 -0
  28. package/src/utils/grayscale.ts +12 -0
  29. package/src/utils/index.ts +45 -34
  30. package/src/utils/invert.ts +11 -0
  31. package/src/utils/isAliasToNamedColor.ts +12 -0
  32. package/src/utils/isAlphaChannel.ts +5 -0
  33. package/src/utils/isBright.ts +7 -0
  34. package/src/utils/isColor.ts +7 -0
  35. package/src/utils/isColorChannels.ts +13 -0
  36. package/src/utils/isDark.ts +7 -0
  37. package/src/utils/isHex.ts +27 -0
  38. package/src/utils/isNamedColor.ts +12 -0
  39. package/src/utils/isOpaque.ts +6 -0
  40. package/src/utils/isRgb.ts +15 -0
  41. package/src/utils/isRgbChannel.ts +5 -0
  42. package/src/utils/isTranslucent.ts +7 -0
  43. package/src/utils/isTransparent.ts +6 -0
  44. package/src/utils/linearTosRGB.ts +10 -0
  45. package/src/utils/luminance.ts +1 -77
  46. package/src/utils/namedColorAliases.ts +33 -0
  47. package/src/utils/namedColorChannels.ts +13 -0
  48. package/src/utils/namedColorToHex.ts +11 -0
  49. package/src/utils/parseColor.ts +44 -0
  50. package/src/utils/parseHex.ts +23 -0
  51. package/src/utils/parseNamedColor.ts +13 -0
  52. package/src/utils/parseRgb.ts +14 -0
  53. package/src/utils/random.ts +2 -29
  54. package/src/utils/randomAlphaChannel.ts +15 -0
  55. package/src/utils/randomRgbChannel.ts +15 -0
  56. package/src/utils/sRGBtoLinear.ts +12 -0
  57. package/src/utils/toAlphaChannel.ts +5 -0
  58. package/src/utils/{channels.ts → toColorChannels.ts} +4 -31
  59. package/src/utils/toHex.ts +29 -0
  60. package/src/utils/toRgb.ts +13 -0
  61. package/src/utils/toRgbChannel.ts +5 -0
  62. package/src/utils/type.ts +32 -0
  63. package/src/utils/colors.ts +0 -72
  64. package/src/utils/hex.ts +0 -75
  65. package/src/utils/opacity.ts +0 -16
  66. package/src/utils/rgb.ts +0 -51
@@ -1,5 +1,14 @@
1
1
  import { Writable } from 'type-fest';
2
2
 
3
+ /**
4
+ * Used to privately store the cached channels of a color.
5
+ */
6
+ declare const channels: unique symbol;
7
+ /**
8
+ * Used to privately store the cached data of a color.
9
+ */
10
+ declare const cache: unique symbol;
11
+
3
12
  type ColorTypeMap = {
4
13
  channels: ColorChannels;
5
14
  color: Color;
@@ -68,48 +77,7 @@ type ColorChannels = {
68
77
  */
69
78
  readonly isFallback?: boolean;
70
79
  };
71
-
72
- declare function isRgbChannel(value: unknown): value is number;
73
- declare function toRgbChannel(value: number | undefined | null): number;
74
- declare function isAlphaChannel(value: unknown): value is number;
75
- declare function toAlphaChannel(value: number | undefined | null): number;
76
- declare function isColorChannels(value: unknown): value is ColorChannels;
77
- /**
78
- * Formats the input into a readonly object of color channels.
79
- *
80
- * It clamps the values to the valid range and sets the alpha channel to 1 if not provided.
81
- * If the passed `isTransformed` isn't already `true`, it will set it to `true` if any of the values were clamped.
82
- * If some channels are missing, it will return the fallback color.
83
- */
84
- declare function toColorChannels(value: ColorChannels): Required<ColorChannels>;
85
- declare function toColorChannels(r: number, g: number, b: number, a?: number | null, isTransformed?: boolean, isFallback?: boolean): Required<ColorChannels>;
86
- declare const fallbackColor: Required<ColorChannels>;
87
-
88
- /** Returns true if the value is any format of supported color. */
89
- declare function isColor(value: unknown): value is ColorValue;
90
- /** Returns the color type of the value, or undefined if it's not a color. */
91
- declare function type(value: unknown): ColorType | undefined;
92
- /** Tries to parse the value as a color. If it fails, returns the fallback color. */
93
- declare function parseColor(value: unknown): ColorChannels;
94
-
95
- /**
96
- * Whether the input is a valid HEX color. With or without the alpha channel, and with single or double digits.
97
- *
98
- * It may or may not start with a hash character, which will be ignored.
99
- */
100
- declare function isHex(value: unknown): value is Hex;
101
- /**
102
- * Parses a hex string into an object of color channels.
103
- *
104
- * The input must already be a valid HEX color, otherwise the result will be unexpected.
105
- */
106
- declare function parseHex(value: Hex): ColorChannels;
107
- /**
108
- * Returns the corresponding hex string of a color channels object.
109
- *
110
- * If the alpha channel is 1, it will be omitted.
111
- */
112
- declare function toHex(channels: ColorChannels): Hex;
80
+ type ChannelRange = number | [min: number, max: number];
113
81
 
114
82
  /**
115
83
  * A map of named colors and their HEX values.
@@ -267,39 +235,42 @@ declare const namedColorsMap: Readonly<{
267
235
  yellow: "#ffff00ff";
268
236
  yellowgreen: "#9acd32ff";
269
237
  }>;
238
+ declare const namedColors: Set<"aliceblue" | "antiquewhite" | "aqua" | "aquamarine" | "azure" | "beige" | "bisque" | "black" | "blanchedalmond" | "blue" | "blueviolet" | "brown" | "burlywood" | "cadetblue" | "chartreuse" | "chocolate" | "coral" | "cornflowerblue" | "cornsilk" | "crimson" | "cyan" | "darkblue" | "darkcyan" | "darkgoldenrod" | "darkgray" | "darkgreen" | "darkgrey" | "darkkhaki" | "darkmagenta" | "darkolivegreen" | "darkorange" | "darkorchid" | "darkred" | "darksalmon" | "darkseagreen" | "darkslateblue" | "darkslategray" | "darkslategrey" | "darkturquoise" | "darkviolet" | "deeppink" | "deepskyblue" | "dimgray" | "dimgrey" | "dodgerblue" | "firebrick" | "floralwhite" | "forestgreen" | "fuchsia" | "gainsboro" | "ghostwhite" | "gold" | "goldenrod" | "gray" | "green" | "greenyellow" | "grey" | "honeydew" | "hotpink" | "indianred" | "indigo" | "ivory" | "khaki" | "lavender" | "lavenderblush" | "lawngreen" | "lemonchiffon" | "lightblue" | "lightcoral" | "lightcyan" | "lightgoldenrodyellow" | "lightgray" | "lightgreen" | "lightgrey" | "lightpink" | "lightsalmon" | "lightseagreen" | "lightskyblue" | "lightslategray" | "lightslategrey" | "lightsteelblue" | "lightyellow" | "lime" | "limegreen" | "linen" | "magenta" | "maroon" | "mediumaquamarine" | "mediumblue" | "mediumorchid" | "mediumpurple" | "mediumseagreen" | "mediumslateblue" | "mediumspringgreen" | "mediumturquoise" | "mediumvioletred" | "midnightblue" | "mintcream" | "mistyrose" | "moccasin" | "navajowhite" | "navy" | "oldlace" | "olive" | "olivedrab" | "orange" | "orangered" | "orchid" | "palegoldenrod" | "palegreen" | "paleturquoise" | "palevioletred" | "papayawhip" | "peachpuff" | "peru" | "pink" | "plum" | "powderblue" | "purple" | "rebeccapurple" | "red" | "rosybrown" | "royalblue" | "saddlebrown" | "salmon" | "sandybrown" | "seagreen" | "seashell" | "sienna" | "silver" | "skyblue" | "slateblue" | "slategray" | "slategrey" | "snow" | "springgreen" | "steelblue" | "tan" | "teal" | "thistle" | "tomato" | "transparent" | "turquoise" | "violet" | "wheat" | "white" | "whitesmoke" | "yellow" | "yellowgreen">;
239
+
270
240
  /**
271
- * Whether the input is a valid named color.
272
- *
273
- * The check is case-sensitive.
241
+ * Returns a boolean indicating whether two named colors are aliases.
274
242
  */
275
- declare function isNamedColor(value: unknown): value is NamedColor;
243
+ declare function isAliasToNamedColor(name: NamedColor, alias: NamedColor): boolean;
244
+
245
+ /** Returns true if the value is any format of supported color. */
246
+ declare function isColor(value: unknown): value is ColorValue;
247
+
248
+ declare function isColorChannels(value: unknown): value is ColorChannels;
249
+
276
250
  /**
277
- * Returns the color channels from a named color. Must be a valid named color, already lowercased.
251
+ * Whether the input is a valid HEX color. With or without the alpha channel, and with single or double digits.
278
252
  *
279
- * @internal
253
+ * It may or may not start with a hash character, which will be ignored.
280
254
  */
281
- declare function namedColorChannels(name: NamedColor): ColorChannels;
255
+ declare function isHex(value: unknown): value is Hex;
256
+
282
257
  /**
283
- * Returns the color channels from a named color.
258
+ * Whether the input is a valid named color.
259
+ *
260
+ * The check is case-insensitive.
284
261
  */
285
- declare function parseNamedColor(name: MaybeNamedColor): ColorChannels;
262
+ declare function isNamedColor(value: unknown): value is NamedColor;
263
+
286
264
  /**
287
- * Returns the corresponding HEX value of a named color.
265
+ * Whether the input is a valid RGB color.
288
266
  */
289
- declare function namedColorToHex(name: NamedColor): string;
290
- declare function namedColorToHex(name: MaybeNamedColor): string | undefined;
291
- /** Returns the closest named color to the passed color channels. */
292
- declare function closestNamedColor(channels: ColorChannels): NamedColor;
267
+ declare function isRgb(value: unknown): value is Rgb;
268
+
293
269
  /**
294
270
  * Returns all the aliases of a named color.
295
271
  */
296
272
  declare function namedColorAliases(name: NamedColor): readonly NamedColor[];
297
- /**
298
- * Returns a boolean indicating whether two named colors are aliases.
299
- */
300
- declare function isAliasToNamedColor(name: NamedColor, alias: NamedColor): boolean;
301
273
 
302
- type ChannelRange = number | [min: number, max: number];
303
274
  /**
304
275
  * Generates a random color.
305
276
  *
@@ -315,34 +286,8 @@ declare function random({ r, g, b, a, }?: {
315
286
  a?: ChannelRange;
316
287
  }): ColorChannels;
317
288
 
318
- /**
319
- * Whether the input is a valid RGB color.
320
- */
321
- declare function isRgb(value: unknown): value is Rgb;
322
- /**
323
- * Whether the input could be a valid RGB color.
324
- * As in, it checks if the input is an array of numbers without validating the values range.
325
- */
326
- declare function couldBeRgb(value: unknown): value is Rgb;
327
- /**
328
- * Parses a RGB tuple into an object of color channels.
329
- *
330
- * The input must already be a valid RGB tuple, otherwise the result will be unexpected.
331
- */
332
- declare function parseRgb(value: Rgb): ColorChannels;
333
- /**
334
- * Returns the corresponding RGB tuple of a color channels object.
335
- */
336
- declare function toRgb(channels: ColorChannels): Rgb;
337
-
338
- /**
339
- * Used to privately store the cached channels of a color.
340
- */
341
- declare const channels: unique symbol;
342
- /**
343
- * Used to privately store the cached data of a color.
344
- */
345
- declare const cache: unique symbol;
289
+ /** Returns the color type of the value, or undefined if it's not a color. */
290
+ declare function type(value: unknown): ColorType | undefined;
346
291
 
347
292
  declare class Color {
348
293
  protected [channels]: Required<Writable<ColorChannels>>;
@@ -354,6 +299,7 @@ declare class Color {
354
299
  static fromRgb(rgb: Rgb): Color;
355
300
  static fromHex(hex: string): Color;
356
301
  static fromName(name: MaybeNamedColor): Color;
302
+ static parse(value: ColorValue): ColorChannels | undefined;
357
303
  static random(presets?: Parameters<typeof random>[0]): Color;
358
304
  /**
359
305
  * Returns the color type of the passed value, or `undefined` if it's not a color.
@@ -460,6 +406,7 @@ declare class Color {
460
406
  distance(color: ColorValue, alpha?: boolean): number;
461
407
  /** Returns a new color with the grayscale equivalent of the current color, preserving the alpha channel. */
462
408
  toGrayscale(): Color;
409
+ toInvert(): Color;
463
410
  toHex(): string;
464
411
  toRgb(): Rgb;
465
412
  toChannels(): ColorChannels;
@@ -469,4 +416,4 @@ declare class Color {
469
416
  toJSON(): string;
470
417
  }
471
418
 
472
- export { toRgb as A, Color as B, type ColorChannels as C, type ColorType as D, type ColorValue as E, type Hex as H, type MaybeNamedColor as M, type NamedColor as N, type Rgb as R, isColorChannels as a, isRgbChannel as b, toColorChannels as c, toRgbChannel as d, isColor as e, fallbackColor as f, type as g, isHex as h, isAlphaChannel as i, parseHex as j, toHex as k, closestNamedColor as l, isAliasToNamedColor as m, isNamedColor as n, namedColorAliases as o, parseColor as p, namedColorChannels as q, namedColorsMap as r, namedColorToHex as s, toAlphaChannel as t, parseNamedColor as u, random as v, type ChannelRange as w, couldBeRgb as x, isRgb as y, parseRgb as z };
419
+ export { type ColorChannels as C, type Hex as H, type MaybeNamedColor as M, type NamedColor as N, type Rgb as R, type ChannelRange as a, channels as b, cache as c, namedColorsMap as d, isColor as e, isColorChannels as f, isHex as g, isNamedColor as h, isAliasToNamedColor as i, isRgb as j, namedColorAliases as k, Color as l, type ColorType as m, namedColors as n, type ColorValue as o, random as r, type as t };
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var L=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var me=Object.prototype.hasOwnProperty;var ue=(e,r)=>{for(var o in r)L(e,o,{get:r[o],enumerable:!0})},Ce=(e,r,o,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let f of le(r))!me.call(e,f)&&f!==o&&L(e,f,{get:()=>r[f],enumerable:!(n=ie(r,f))||n.enumerable});return e};var de=e=>Ce(L({},"__esModule",{value:!0}),e);var pe={};ue(pe,{Color:()=>p});module.exports=de(pe);var se=require("@auaust/primitive-kit");var a=require("@auaust/primitive-kit");function y(e){return a.N.is(e)&&a.N.isBetween(e,0,255)}function i(e){return a.N.clamp(a.N.round(e),0,255)}function q(e){return a.N.is(e)&&a.N.isBetween(e,0,1)}function x(e){return a.N.is(e)?a.N.clamp(e,0,1):1}function w(e){return a.O.is(e,!1)&&y(e.r)&&y(e.g)&&y(e.b)&&q(e.a??1)}function s(e,r,o,n,f,m){a.O.is(e,!1)&&({r:e,g:r,b:o,a:n,isTransformed:f,isFallback:m}=e);let h=i(e),F=i(r),I=i(o);if(isNaN(h)||isNaN(F)||isNaN(I))return l;let oe=x(n);return a.O.freeze({r:h,g:F,b:I,a:oe,isTransformed:!!(f||h!==e||F!==r||I!==o||oe!==(n??1)),isFallback:!!m})}var l=s(0,0,0,1,!1,!0);var c=require("@auaust/primitive-kit");var he=/^[0-9a-f]+$/i;function k(e){if(e=c.S.is(e)&&(e.startsWith("#")?e.slice(1):e),!c.S.isStrict(e))return!1;switch(e.length){case 3:case 4:case 6:case 8:return he.test(e);default:return!1}}function b(e){e=e.startsWith("#")?e.slice(1):e;let r=e.length<6,o=r?e.length===4:e.length===8,n=parseInt(r?e[0].repeat(2):e.slice(0,2),16),f=parseInt(r?e[1].repeat(2):e.slice(2,4),16),m=parseInt(r?e[2].repeat(2):e.slice(4,6),16),h=o?parseInt(r?e[3].repeat(2):e.slice(6,8),16)/255:1;return s(n,f,m,h)}function D(e){let{r,g:o,b:n,a:f}=e;return"#"+((1<<24)+(i(r)<<16)+(i(o)<<8)+i(n)).toString(16).substring(1)+(c.N.is(f)&&f<1?c.N.round(c.N.max(0,f)*255).toString(16).padStart(2,"0"):"")}var N=require("@auaust/primitive-kit");var z=N.O.freeze({aliceblue:"#f0f8ffff",antiquewhite:"#faebd7ff",aqua:"#00ffffff",aquamarine:"#7fffd4ff",azure:"#f0ffffff",beige:"#f5f5dcff",bisque:"#ffe4c4ff",black:"#000000ff",blanchedalmond:"#ffebcdff",blue:"#0000ffff",blueviolet:"#8a2be2ff",brown:"#a52a2aff",burlywood:"#deb887ff",cadetblue:"#5f9ea0ff",chartreuse:"#7fff00ff",chocolate:"#d2691eff",coral:"#ff7f50ff",cornflowerblue:"#6495edff",cornsilk:"#fff8dcff",crimson:"#dc143cff",cyan:"#00ffffff",darkblue:"#00008bff",darkcyan:"#008b8bff",darkgoldenrod:"#b8860bff",darkgray:"#a9a9a9ff",darkgreen:"#006400ff",darkgrey:"#a9a9a9ff",darkkhaki:"#bdb76bff",darkmagenta:"#8b008bff",darkolivegreen:"#556b2fff",darkorange:"#ff8c00ff",darkorchid:"#9932ccff",darkred:"#8b0000ff",darksalmon:"#e9967aff",darkseagreen:"#8fbc8fff",darkslateblue:"#483d8bff",darkslategray:"#2f4f4fff",darkslategrey:"#2f4f4fff",darkturquoise:"#00ced1ff",darkviolet:"#9400d3ff",deeppink:"#ff1493ff",deepskyblue:"#00bfffff",dimgray:"#696969ff",dimgrey:"#696969ff",dodgerblue:"#1e90ffff",firebrick:"#b22222ff",floralwhite:"#fffaf0ff",forestgreen:"#228b22ff",fuchsia:"#ff00ffff",gainsboro:"#dcdcdcff",ghostwhite:"#f8f8ffff",gold:"#ffd700ff",goldenrod:"#daa520ff",gray:"#808080ff",green:"#008000ff",greenyellow:"#adff2fff",grey:"#808080ff",honeydew:"#f0fff0ff",hotpink:"#ff69b4ff",indianred:"#cd5c5cff",indigo:"#4b0082ff",ivory:"#fffff0ff",khaki:"#f0e68cff",lavender:"#e6e6faff",lavenderblush:"#fff0f5ff",lawngreen:"#7cfc00ff",lemonchiffon:"#fffacdff",lightblue:"#add8e6ff",lightcoral:"#f08080ff",lightcyan:"#e0ffffff",lightgoldenrodyellow:"#fafad2ff",lightgray:"#d3d3d3ff",lightgreen:"#90ee90ff",lightgrey:"#d3d3d3ff",lightpink:"#ffb6c1ff",lightsalmon:"#ffa07aff",lightseagreen:"#20b2aaff",lightskyblue:"#87cefaff",lightslategray:"#778899ff",lightslategrey:"#778899ff",lightsteelblue:"#b0c4deff",lightyellow:"#ffffe0ff",lime:"#00ff00ff",limegreen:"#32cd32ff",linen:"#faf0e6ff",magenta:"#ff00ffff",maroon:"#800000ff",mediumaquamarine:"#66cdaaff",mediumblue:"#0000cdff",mediumorchid:"#ba55d3ff",mediumpurple:"#9370dbff",mediumseagreen:"#3cb371ff",mediumslateblue:"#7b68eeff",mediumspringgreen:"#00fa9aff",mediumturquoise:"#48d1ccff",mediumvioletred:"#c71585ff",midnightblue:"#191970ff",mintcream:"#f5fffaff",mistyrose:"#ffe4e1ff",moccasin:"#ffe4b5ff",navajowhite:"#ffdeadff",navy:"#000080ff",oldlace:"#fdf5e6ff",olive:"#808000ff",olivedrab:"#6b8e23ff",orange:"#ffa500ff",orangered:"#ff4500ff",orchid:"#da70d6ff",palegoldenrod:"#eee8aaff",palegreen:"#98fb98ff",paleturquoise:"#afeeeeff",palevioletred:"#db7093ff",papayawhip:"#ffefd5ff",peachpuff:"#ffdab9ff",peru:"#cd853fff",pink:"#ffc0cbff",plum:"#dda0ddff",powderblue:"#b0e0e6ff",purple:"#800080ff",rebeccapurple:"#663399ff",red:"#ff0000ff",rosybrown:"#bc8f8fff",royalblue:"#4169e1ff",saddlebrown:"#8b4513ff",salmon:"#fa8072ff",sandybrown:"#f4a460ff",seagreen:"#2e8b57ff",seashell:"#fff5eeff",sienna:"#a0522dff",silver:"#c0c0c0ff",skyblue:"#87ceebff",slateblue:"#6a5acdff",slategray:"#708090ff",slategrey:"#708090ff",snow:"#fffafaff",springgreen:"#00ff7fff",steelblue:"#4682b4ff",tan:"#d2b48cff",teal:"#008080ff",thistle:"#d8bfd8ff",tomato:"#ff6347ff",transparent:"#00000000",turquoise:"#40e0d0ff",violet:"#ee82eeff",wheat:"#f5deb3ff",white:"#ffffffff",whitesmoke:"#f5f5f5ff",yellow:"#ffff00ff",yellowgreen:"#9acd32ff"}),ne=new Set(N.O.keys(z)),ce={},P={};function C(e){return N.S.is(e)&&ne.has(e.toLowerCase())}function W(e){return ce[e]??=b(j(e))}function T(e){return C(e)?W(e.toLowerCase()):l}function j(e){return z[e.toLowerCase()]||void 0}function J(e){let r,o=1/0;for(let n of ne){let f=W(n),m=H(f,e,f.a===1);m<o&&(r=n,o=m)}return r}function S(e){if(e=e.toLowerCase(),!C(e))return[];if(P[e])return P[e];let r=[],o=j(e);for(let[n,f]of N.O.entries(z))f===o&&r.push(n);return P[e]=Object.freeze(r)}function K(e,r){return S(e).includes(r.toLowerCase())}var d=require("@auaust/primitive-kit");function A(e){return d.A.is(e)&&d.N.isBetween(e.length,3,4)&&e.every((r,o)=>o===3?q(r):y(r))}function $(e){return d.A.is(e)&&d.N.isBetween(e.length,3,4)&&e.every(d.N.is)}function M(e){return d.A.is(e)?s(e[0],e[1],e[2],e[3]):l}function E(e){let{r,g:o,b:n,a:f}=e;return Array.from([r,o,n,f],(m,h)=>h===3?x(m):i(m))}var t=Symbol("Color.channels"),R=Symbol("Color.cache");function G(e){return O(e)!==void 0}function O(e){if(e){if(e instanceof p)return"color";if(C(e))return"named";if(k(e))return"hex";if(A(e))return"rgb";if(w(e))return"channels"}}function Q(e){return e?e instanceof p?e[t]:w(e)?e:C(e)?T(e):k(e)?b(e):$(e)?M(e):l:l}function H(e,r,o=!1){return Math.sqrt(Math.pow(e.r-r.r,2)+Math.pow(e.g-r.g,2)+Math.pow(e.b-r.b,2)+(o?Math.pow((e.a??1)-(r.a??1),2):0))}var te=require("@auaust/primitive-kit");function fe(e){return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function ae(e){return e<=.04045/12.92?e*12.92:1.055*Math.pow(e,1/2.4)-.055}function g(e){let{r,g:o,b:n}=e;return[r,o,n]=[r,o,n].map(f=>fe(f/255)),r*.2126+o*.7152+n*.0722}function B(e){let r=g(e);return r<=216/24389?r*(24389/27)/100:(Math.pow(r,1/3)*116-16)/100}function U(e,r=.5){return B(e)>r}function X(e,r=.5){return B(e)<=r}function Y(e,r){let[o,n]=te.N.minMax(g(e),g(r));return(n+.05)/(o+.05)}function Z(e){let r=ae(g(e))*255;return s(r,r,r,e.a)}function V(e){return e.a===1||e.a==null}function _(e){return e.a===0}function v(e){return!V(e)}var u=require("@auaust/primitive-kit");function ee(e){return u.N.is(e)?e:u.A.is(e)?u.N.randInt(e[0],e[1]):u.N.randInt(0,255)}function be(e){return u.N.is(e)?e:u.A.is(e)?u.N.randFloat(e[0],e[1]):1}function re({r:e,g:r,b:o,a:n}={}){return s(ee(e),ee(r),ee(o),be(n))}var p=class e{[t]=void 0;[R]=new Map;constructor(r){this[t]={...s(r)}}static from(r,...o){return se.N.is(r)?new this({r,g:o[0],b:o[1],a:o[2]}):new this(Q(r??l))}static fromChannels(r){return new this(r)}static fromRgb(r){return new this(M(r))}static fromHex(r){return new this(b(r))}static fromName(r){return new this(T(r))}static random(r={}){return new this(re(r))}static type=O;static isColor=G;static is=G;static isHex=k;static isNamedColor=C;static isColorChannels=w;static isRgb=A;static namedColorAliases=S;static isAliasToNamedColor=K;clone(){return e.fromChannels(this[t])}with(r){return e.fromChannels({...this[t],...r,isFallback:!1,isTransformed:!1})}withRed(r){return this.with({r})}withGreen(r){return this.with({g:r})}withBlue(r){return this.with({b:r})}withAlpha(r){return this.with({a:r})}updated(){return this[R].clear(),this[t].isFallback=!1,this[t].isTransformed=!1,this}set(r,o){return this[t][r]=r==="a"?x(o):i(o),this.updated()}get red(){return this[t].r}get r(){return this[t].r}set red(r){this.setRed(r)}setRed(r){return this.set("r",r)}get green(){return this[t].g}get g(){return this[t].g}set green(r){this.setGreen(r)}setGreen(r){return this.set("g",r)}get blue(){return this[t].b}get b(){return this[t].b}set blue(r){this.setBlue(r)}setBlue(r){return this.set("b",r)}get alpha(){return this[t].a}get a(){return this[t].a}set alpha(r){this.setAlpha(r)}setAlpha(r){return this.set("a",r)}get isFallback(){return this[t].isFallback}get isTransformed(){return this[t].isTransformed}memoize(r,o){let n=o??r;return this[R].has(n)||this[R].set(n,r(this[t])),this[R].get(n)}get isOpaque(){return this.memoize(V)}get isTransparent(){return this.memoize(_)}get isTranslucent(){return this.memoize(v)}get closestNamedColor(){return this.memoize(J)}get brightness(){return this.memoize(B)}get isBright(){return this.memoize(U)}get isDark(){return this.memoize(X)}isBrighterThan(r){return this.brightness>(r instanceof e?r.brightness:r)}isDarkerThan(r){return this.brightness<(r instanceof e?r.brightness:r)}get luminance(){return this.memoize(g)}contrast(r){return Y(this[t],e.from(r)[t])}distance(r,o=!1){return H(this[t],e.from(r)[t],o)}toGrayscale(){return e.fromChannels(Z(this[t]))}toHex(){return this.memoize(D)}toRgb(){return this.memoize(E)}toChannels(){return this.memoize(s)}toString(){return this.toHex()}valueOf(){return this.toString()}[Symbol.toPrimitive](){return this.toString()}toJSON(){return this.toString()}};0&&(module.exports={Color});
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkX6GMJCOGcjs = require('./chunk-X6GMJCOG.cjs');exports.Color = _chunkX6GMJCOGcjs.S;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/classes/Color.ts","../src/utils/channels.ts","../src/utils/hex.ts","../src/utils/namedColors.ts","../src/utils/rgb.ts","../src/utils/symbols.ts","../src/utils/colors.ts","../src/utils/distance.ts","../src/utils/luminance.ts","../src/utils/opacity.ts","../src/utils/random.ts"],"sourcesContent":["export { Color } from \"~/classes/Color\";\nexport type {\n ColorChannels,\n ColorType,\n ColorValue,\n Hex,\n MaybeNamedColor,\n NamedColor,\n Rgb,\n} from \"~/types\";\n","import { N } from \"@auaust/primitive-kit\";\nimport type { Writable } from \"type-fest\";\nimport type {\n ColorChannels,\n ColorValue,\n MaybeNamedColor,\n NamedColor,\n Rgb,\n} from \"~\";\nimport {\n brightness,\n closestNamedColor,\n contrast,\n distance,\n fallbackColor,\n grayscale,\n isAliasToNamedColor,\n isBright,\n isColor,\n isColorChannels,\n isDark,\n isHex,\n isNamedColor,\n isOpaque,\n isRgb,\n isTranslucent,\n isTransparent,\n luminance,\n namedColorAliases,\n parseColor,\n parseHex,\n parseNamedColor,\n parseRgb,\n toAlphaChannel,\n toColorChannels,\n toHex,\n toRgb,\n toRgbChannel,\n type,\n} from \"~/utils\";\nimport { random } from \"~/utils/random\";\nimport { cache, channels } from \"~/utils/symbols\";\n\nexport class Color {\n protected [channels]: Required<Writable<ColorChannels>> = undefined!;\n protected [cache]: Map<string | Function, any> = new Map();\n\n constructor(value: ColorChannels) {\n this[channels] = { ...toColorChannels(value) };\n }\n\n static from(value: ColorValue): Color;\n static from(red: number, green: number, blue: number, alpha?: number): Color;\n static from(value: ColorValue | number, ...rest: number[]): Color {\n if (N.is(value)) {\n return new this({ r: value, g: rest[0], b: rest[1], a: rest[2] });\n }\n\n return new this(parseColor(value ?? fallbackColor));\n }\n\n static fromChannels(channels: ColorChannels): Color {\n return new this(channels);\n }\n\n static fromRgb(rgb: Rgb): Color {\n return new this(parseRgb(rgb));\n }\n\n static fromHex(hex: string): Color {\n return new this(parseHex(hex));\n }\n\n static fromName(name: MaybeNamedColor): Color {\n return new this(parseNamedColor(name));\n }\n\n static random(presets: Parameters<typeof random>[0] = {}): Color {\n return new this(random(presets));\n }\n\n /**\n * Returns the color type of the passed value, or `undefined` if it's not a color.\n *\n * It is slightly stricter than the logic used to parse colors.\n * It would return false for an array of channels which values are not within the expected range, where `parseColor` would return a color with the invalid values clamped.\n */\n static type = type;\n\n /** Returns a boolean indicating whether the passed value is a color. */\n static isColor = isColor;\n\n /** @alias Color#isColor */\n static is = isColor;\n\n /** Returns a boolean indicating whether the passed value is a HEX color string. */\n static isHex = isHex;\n\n /** Returns a boolean indicating whether the passed value is a named color. */\n static isNamedColor = isNamedColor;\n\n /** Returns a boolean indicating whether the passed value is a color channel object. */\n static isColorChannels = isColorChannels;\n\n /** Returns a boolean indicating whether the passed value is a RGB color tuple. */\n static isRgb = isRgb;\n\n /** Returns all the aliases of a named color, including the name itself. */\n static namedColorAliases = namedColorAliases;\n\n /** Returns a boolean whether two named colors are aliases, meaning they have the same HEX value. */\n static isAliasToNamedColor = isAliasToNamedColor;\n\n /**\n * Returns a new `Color` instance with the same channels as the current one.\n * If you want the clone to have different channels, use the `with` method.\n */\n clone(): Color {\n return Color.fromChannels(this[channels]);\n }\n\n /** Returns a new `Color` instance with the passed channels overriding the current ones. */\n with(value: Partial<Pick<ColorChannels, \"r\" | \"g\" | \"b\" | \"a\">>): Color {\n return Color.fromChannels({\n ...this[channels],\n ...value,\n isFallback: false,\n isTransformed: false,\n });\n }\n\n /** Returns a new `Color` instance with the specified red channel. */\n withRed(value: number): Color {\n return this.with({ r: value });\n }\n\n /** Returns a new `Color` instance with the specified green channel. */\n withGreen(value: number): Color {\n return this.with({ g: value });\n }\n\n /** Returns a new `Color` instance with the specified blue channel. */\n withBlue(value: number): Color {\n return this.with({ b: value });\n }\n\n /** Returns a new `Color` instance with the specified alpha channel. */\n withAlpha(value: number): Color {\n return this.with({ a: value });\n }\n\n private updated(): this {\n this[cache].clear();\n this[channels].isFallback = false; // once updated, it's no longer a fallback\n this[channels].isTransformed = false;\n return this;\n }\n\n set(channel: \"r\" | \"g\" | \"b\" | \"a\", value: number): this {\n this[channels][channel] =\n channel === \"a\" ? toAlphaChannel(value) : toRgbChannel(value);\n return this.updated();\n }\n\n /** The red channel of the color. */\n get red(): number {\n return this[channels].r;\n }\n\n /** @see Color#red */\n get r(): number {\n return this[channels].r;\n }\n\n set red(value: number) {\n this.setRed(value);\n }\n\n setRed(value: number): this {\n return this.set(\"r\", value);\n }\n\n /** The green channel of the color. */\n get green(): number {\n return this[channels].g;\n }\n\n /** @see Color#green */\n get g(): number {\n return this[channels].g;\n }\n\n set green(value: number) {\n this.setGreen(value);\n }\n\n setGreen(value: number): this {\n return this.set(\"g\", value);\n }\n\n /** The blue channel of the color. */\n get blue(): number {\n return this[channels].b;\n }\n\n /** @see Color#blue */\n get b(): number {\n return this[channels].b;\n }\n\n set blue(value: number) {\n this.setBlue(value);\n }\n\n setBlue(value: number): this {\n return this.set(\"b\", value);\n }\n\n /** The alpha channel of the color. */\n get alpha(): number {\n return this[channels].a;\n }\n\n /** @see Color#alpha */\n get a(): number {\n return this[channels].a;\n }\n\n set alpha(value: number) {\n this.setAlpha(value);\n }\n\n setAlpha(value: number): this {\n return this.set(\"a\", value);\n }\n\n /**\n * Whether the color is the fallback color, which is used when the input is invalid.\n * As soon as a color channel is updated, this will always be `false`.\n */\n get isFallback(): boolean {\n return this[channels].isFallback;\n }\n\n /**\n * Whether any of the channels have been transformed by the color parser.\n * As soon as a color channel is updated, this will always be `false`.\n */\n get isTransformed(): boolean {\n return this[channels].isTransformed;\n }\n\n /** Helper to cache data until the channels are updated. */\n private memoize<T>(getter: (channels: ColorChannels) => T, key?: string): T {\n // If no key is passed, we use the getter function as the key\n // This means no key is required when the getter is a named function, while allowing to use anonymous functions within getters as well by passing a key\n const cacheKey = key ?? getter;\n\n if (!this[cache].has(cacheKey)) {\n this[cache].set(cacheKey, getter(this[channels]));\n }\n\n return this[cache].get(cacheKey);\n }\n\n /** Checks if the color is fully opaque. */\n get isOpaque(): boolean {\n return this.memoize(isOpaque);\n }\n\n /** Checks if the color is fully transparent. */\n get isTransparent(): boolean {\n return this.memoize(isTransparent);\n }\n\n /** Checks if the color is at least partially transparent. */\n get isTranslucent(): boolean {\n return this.memoize(isTranslucent);\n }\n\n /**\n * Returns the closest named color. If aliases exist, which one is returned is not guaranteed.\n * In some cases, calling `namedColorAliases()` on the result might help achieve the desired result.\n */\n get closestNamedColor(): NamedColor {\n return this.memoize(closestNamedColor);\n }\n\n /** The relative brightness of the color. */\n get brightness(): number {\n return this.memoize(brightness);\n }\n\n /** Whether the color is considered bright. */\n get isBright(): boolean {\n return this.memoize(isBright);\n }\n\n /** Whether the color is considered dark. */\n get isDark(): boolean {\n return this.memoize(isDark);\n }\n\n /** Whether the color is brighter than the passed threshold or color. */\n isBrighterThan(threshold: Color | number): boolean {\n return (\n this.brightness >\n (threshold instanceof Color ? threshold.brightness : threshold)\n );\n }\n\n /** Whether the color is darker than the passed threshold or color. */\n isDarkerThan(threshold: Color | number): boolean {\n return (\n this.brightness <\n (threshold instanceof Color ? threshold.brightness : threshold)\n );\n }\n\n /** Returns the relative luminance of the color. */\n get luminance(): number {\n return this.memoize(luminance);\n }\n\n /** Returns the contrast ratio between this color and another. */\n contrast(color: ColorValue): number {\n return contrast(this[channels], Color.from(color)[channels]);\n }\n\n /** Returns the distance between this color and another. If `alpha` is `true`, the alpha channel is included in the calculation. */\n distance(color: ColorValue, alpha = false): number {\n return distance(this[channels], Color.from(color)[channels], alpha);\n }\n\n /** Returns a new color with the grayscale equivalent of the current color, preserving the alpha channel. */\n toGrayscale(): Color {\n return Color.fromChannels(grayscale(this[channels]));\n }\n\n toHex(): string {\n return this.memoize(toHex);\n }\n\n toRgb(): Rgb {\n return this.memoize(toRgb);\n }\n\n toChannels(): ColorChannels {\n return this.memoize(toColorChannels); // can't return `this[channels]` directly as it's writable, and could cause unexpected behavior\n }\n\n toString(): string {\n return this.toHex();\n }\n\n valueOf(): string {\n return this.toString();\n }\n\n [Symbol.toPrimitive](): string {\n return this.toString();\n }\n\n toJSON(): string {\n return this.toString();\n }\n}\n","import { N, O } from \"@auaust/primitive-kit\";\nimport type { ColorChannels } from \"~/types\";\n\nexport function isRgbChannel(value: unknown): value is number {\n return N.is(value) && N.isBetween(value, 0, 255);\n}\n\nexport function toRgbChannel(value: number | undefined | null): number {\n return N.clamp(N.round(value), 0, 255);\n}\n\nexport function isAlphaChannel(value: unknown): value is number {\n return N.is(value) && N.isBetween(value, 0, 1);\n}\n\nexport function toAlphaChannel(value: number | undefined | null): number {\n return N.is(value) ? N.clamp(value, 0, 1) : 1;\n}\n\nexport function isColorChannels(value: unknown): value is ColorChannels {\n return (\n O.is(value, false) &&\n isRgbChannel(value.r) &&\n isRgbChannel(value.g) &&\n isRgbChannel(value.b) &&\n isAlphaChannel(value.a ?? 1)\n );\n}\n\n/**\n * Formats the input into a readonly object of color channels.\n *\n * It clamps the values to the valid range and sets the alpha channel to 1 if not provided.\n * If the passed `isTransformed` isn't already `true`, it will set it to `true` if any of the values were clamped.\n * If some channels are missing, it will return the fallback color.\n */\nexport function toColorChannels(value: ColorChannels): Required<ColorChannels>;\nexport function toColorChannels(\n r: number,\n g: number,\n b: number,\n a?: number | null,\n isTransformed?: boolean,\n isFallback?: boolean\n): Required<ColorChannels>;\nexport function toColorChannels(\n r: number | ColorChannels,\n g?: number,\n b?: number,\n a?: number | null,\n isTransformed?: boolean,\n isFallback?: boolean\n): Required<ColorChannels> {\n if (O.is(r, false)) {\n ({ r, g, b, a, isTransformed, isFallback } = r);\n }\n\n const finalR = toRgbChannel(r);\n const finalG = toRgbChannel(g);\n const finalB = toRgbChannel(b);\n\n if (isNaN(finalR) || isNaN(finalG) || isNaN(finalB)) {\n return fallbackColor;\n }\n\n const finalA = toAlphaChannel(a);\n\n return O.freeze({\n r: finalR,\n g: finalG,\n b: finalB,\n a: finalA,\n isTransformed: !!(\n isTransformed ||\n finalR !== r ||\n finalG !== g ||\n finalB !== b ||\n finalA !== (a ?? 1)\n ),\n isFallback: !!isFallback,\n });\n}\n\nexport const fallbackColor = toColorChannels(0, 0, 0, 1, false, true);\n","import { N, S } from \"@auaust/primitive-kit\";\nimport type { ColorChannels, Hex } from \"~/types\";\nimport { toColorChannels, toRgbChannel } from \"./channels\";\n\nconst hexadecimalRegex = /^[0-9a-f]+$/i;\n\n/**\n * Whether the input is a valid HEX color. With or without the alpha channel, and with single or double digits.\n *\n * It may or may not start with a hash character, which will be ignored.\n */\nexport function isHex(value: unknown): value is Hex {\n value = S.is(value) && (value.startsWith(\"#\") ? value.slice(1) : value);\n\n if (!S.isStrict(value)) {\n return false;\n }\n\n switch (value.length) {\n case 3: // RGB\n case 4: // RGBA\n case 6: // RRGGBB\n case 8: // RRGGBBAA\n return hexadecimalRegex.test(value);\n default:\n return false;\n }\n}\n\n/**\n * Parses a hex string into an object of color channels.\n *\n * The input must already be a valid HEX color, otherwise the result will be unexpected.\n */\nexport function parseHex(value: Hex): ColorChannels {\n value = value.startsWith(\"#\") ? value.slice(1) : value;\n\n const isShort = value.length < 6;\n const hasAlpha = isShort ? value.length === 4 : value.length === 8;\n\n const r = parseInt(isShort ? value[0].repeat(2) : value.slice(0, 2), 16);\n const g = parseInt(isShort ? value[1].repeat(2) : value.slice(2, 4), 16);\n const b = parseInt(isShort ? value[2].repeat(2) : value.slice(4, 6), 16);\n const a = hasAlpha\n ? parseInt(isShort ? value[3].repeat(2) : value.slice(6, 8), 16) / 255\n : 1;\n\n return toColorChannels(r, g, b, a);\n}\n\n/**\n * Returns the corresponding hex string of a color channels object.\n *\n * If the alpha channel is 1, it will be omitted.\n */\nexport function toHex(channels: ColorChannels): Hex {\n const { r, g, b, a } = channels;\n\n return (\n \"#\" +\n (\n (1 << 24) +\n (toRgbChannel(r) << 16) +\n (toRgbChannel(g) << 8) +\n toRgbChannel(b)\n )\n .toString(16)\n .substring(1) +\n (N.is(a) && a < 1\n ? N.round(N.max(0, a) * 255)\n .toString(16)\n .padStart(2, \"0\")\n : \"\")\n );\n}\n","import { O, S } from \"@auaust/primitive-kit\";\nimport type { ColorChannels, MaybeNamedColor, NamedColor } from \"~/types\";\nimport { distance, fallbackColor, parseHex } from \"~/utils\";\n\n/**\n * A map of named colors and their HEX values.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/named-color\n */\nexport const namedColorsMap = O.freeze({\n aliceblue: \"#f0f8ffff\",\n antiquewhite: \"#faebd7ff\",\n aqua: \"#00ffffff\",\n aquamarine: \"#7fffd4ff\",\n azure: \"#f0ffffff\",\n beige: \"#f5f5dcff\",\n bisque: \"#ffe4c4ff\",\n black: \"#000000ff\",\n blanchedalmond: \"#ffebcdff\",\n blue: \"#0000ffff\",\n blueviolet: \"#8a2be2ff\",\n brown: \"#a52a2aff\",\n burlywood: \"#deb887ff\",\n cadetblue: \"#5f9ea0ff\",\n chartreuse: \"#7fff00ff\",\n chocolate: \"#d2691eff\",\n coral: \"#ff7f50ff\",\n cornflowerblue: \"#6495edff\",\n cornsilk: \"#fff8dcff\",\n crimson: \"#dc143cff\",\n cyan: \"#00ffffff\",\n darkblue: \"#00008bff\",\n darkcyan: \"#008b8bff\",\n darkgoldenrod: \"#b8860bff\",\n darkgray: \"#a9a9a9ff\",\n darkgreen: \"#006400ff\",\n darkgrey: \"#a9a9a9ff\",\n darkkhaki: \"#bdb76bff\",\n darkmagenta: \"#8b008bff\",\n darkolivegreen: \"#556b2fff\",\n darkorange: \"#ff8c00ff\",\n darkorchid: \"#9932ccff\",\n darkred: \"#8b0000ff\",\n darksalmon: \"#e9967aff\",\n darkseagreen: \"#8fbc8fff\",\n darkslateblue: \"#483d8bff\",\n darkslategray: \"#2f4f4fff\",\n darkslategrey: \"#2f4f4fff\",\n darkturquoise: \"#00ced1ff\",\n darkviolet: \"#9400d3ff\",\n deeppink: \"#ff1493ff\",\n deepskyblue: \"#00bfffff\",\n dimgray: \"#696969ff\",\n dimgrey: \"#696969ff\",\n dodgerblue: \"#1e90ffff\",\n firebrick: \"#b22222ff\",\n floralwhite: \"#fffaf0ff\",\n forestgreen: \"#228b22ff\",\n fuchsia: \"#ff00ffff\",\n gainsboro: \"#dcdcdcff\",\n ghostwhite: \"#f8f8ffff\",\n gold: \"#ffd700ff\",\n goldenrod: \"#daa520ff\",\n gray: \"#808080ff\",\n green: \"#008000ff\",\n greenyellow: \"#adff2fff\",\n grey: \"#808080ff\",\n honeydew: \"#f0fff0ff\",\n hotpink: \"#ff69b4ff\",\n indianred: \"#cd5c5cff\",\n indigo: \"#4b0082ff\",\n ivory: \"#fffff0ff\",\n khaki: \"#f0e68cff\",\n lavender: \"#e6e6faff\",\n lavenderblush: \"#fff0f5ff\",\n lawngreen: \"#7cfc00ff\",\n lemonchiffon: \"#fffacdff\",\n lightblue: \"#add8e6ff\",\n lightcoral: \"#f08080ff\",\n lightcyan: \"#e0ffffff\",\n lightgoldenrodyellow: \"#fafad2ff\",\n lightgray: \"#d3d3d3ff\",\n lightgreen: \"#90ee90ff\",\n lightgrey: \"#d3d3d3ff\",\n lightpink: \"#ffb6c1ff\",\n lightsalmon: \"#ffa07aff\",\n lightseagreen: \"#20b2aaff\",\n lightskyblue: \"#87cefaff\",\n lightslategray: \"#778899ff\",\n lightslategrey: \"#778899ff\",\n lightsteelblue: \"#b0c4deff\",\n lightyellow: \"#ffffe0ff\",\n lime: \"#00ff00ff\",\n limegreen: \"#32cd32ff\",\n linen: \"#faf0e6ff\",\n magenta: \"#ff00ffff\",\n maroon: \"#800000ff\",\n mediumaquamarine: \"#66cdaaff\",\n mediumblue: \"#0000cdff\",\n mediumorchid: \"#ba55d3ff\",\n mediumpurple: \"#9370dbff\",\n mediumseagreen: \"#3cb371ff\",\n mediumslateblue: \"#7b68eeff\",\n mediumspringgreen: \"#00fa9aff\",\n mediumturquoise: \"#48d1ccff\",\n mediumvioletred: \"#c71585ff\",\n midnightblue: \"#191970ff\",\n mintcream: \"#f5fffaff\",\n mistyrose: \"#ffe4e1ff\",\n moccasin: \"#ffe4b5ff\",\n navajowhite: \"#ffdeadff\",\n navy: \"#000080ff\",\n oldlace: \"#fdf5e6ff\",\n olive: \"#808000ff\",\n olivedrab: \"#6b8e23ff\",\n orange: \"#ffa500ff\",\n orangered: \"#ff4500ff\",\n orchid: \"#da70d6ff\",\n palegoldenrod: \"#eee8aaff\",\n palegreen: \"#98fb98ff\",\n paleturquoise: \"#afeeeeff\",\n palevioletred: \"#db7093ff\",\n papayawhip: \"#ffefd5ff\",\n peachpuff: \"#ffdab9ff\",\n peru: \"#cd853fff\",\n pink: \"#ffc0cbff\",\n plum: \"#dda0ddff\",\n powderblue: \"#b0e0e6ff\",\n purple: \"#800080ff\",\n rebeccapurple: \"#663399ff\",\n red: \"#ff0000ff\",\n rosybrown: \"#bc8f8fff\",\n royalblue: \"#4169e1ff\",\n saddlebrown: \"#8b4513ff\",\n salmon: \"#fa8072ff\",\n sandybrown: \"#f4a460ff\",\n seagreen: \"#2e8b57ff\",\n seashell: \"#fff5eeff\",\n sienna: \"#a0522dff\",\n silver: \"#c0c0c0ff\",\n skyblue: \"#87ceebff\",\n slateblue: \"#6a5acdff\",\n slategray: \"#708090ff\",\n slategrey: \"#708090ff\",\n snow: \"#fffafaff\",\n springgreen: \"#00ff7fff\",\n steelblue: \"#4682b4ff\",\n tan: \"#d2b48cff\",\n teal: \"#008080ff\",\n thistle: \"#d8bfd8ff\",\n tomato: \"#ff6347ff\",\n transparent: \"#00000000\",\n turquoise: \"#40e0d0ff\",\n violet: \"#ee82eeff\",\n wheat: \"#f5deb3ff\",\n white: \"#ffffffff\",\n whitesmoke: \"#f5f5f5ff\",\n yellow: \"#ffff00ff\",\n yellowgreen: \"#9acd32ff\",\n});\n\nconst namedColors = new Set<NamedColor>(O.keys(namedColorsMap));\n\nconst namedColorsChannelsCache: Partial<Record<NamedColor, ColorChannels>> = {};\n\nconst namedColorsAliasesCache: Partial<\n Record<NamedColor, readonly NamedColor[]>\n> = {};\n\n/**\n * Whether the input is a valid named color.\n *\n * The check is case-sensitive.\n */\nexport function isNamedColor(value: unknown): value is NamedColor {\n return S.is(value) && namedColors.has(<NamedColor>value.toLowerCase());\n}\n\n/**\n * Returns the color channels from a named color. Must be a valid named color, already lowercased.\n *\n * @internal\n */\nexport function namedColorChannels(name: NamedColor): ColorChannels {\n return (namedColorsChannelsCache[name] ??= parseHex(namedColorToHex(name)!));\n}\n\n/**\n * Returns the color channels from a named color.\n */\nexport function parseNamedColor(name: MaybeNamedColor): ColorChannels {\n if (!isNamedColor(name)) {\n return fallbackColor;\n }\n\n return namedColorChannels(<NamedColor>name.toLowerCase());\n}\n\n/**\n * Returns the corresponding HEX value of a named color.\n */\nexport function namedColorToHex(name: NamedColor): string;\nexport function namedColorToHex(name: MaybeNamedColor): string | undefined;\nexport function namedColorToHex(name: MaybeNamedColor): string | undefined {\n return (\n namedColorsMap[<keyof typeof namedColorsMap>name.toLowerCase()] || undefined\n );\n}\n\n/** Returns the closest named color to the passed color channels. */\nexport function closestNamedColor(channels: ColorChannels): NamedColor {\n let closest: NamedColor | undefined;\n let smallestDistance = Infinity;\n\n for (const name of namedColors) {\n const value = namedColorChannels(name);\n const d = distance(\n value,\n channels,\n value.a === 1 // Ignore alpha channel only if it's 1 -> allows to match transparent/black correctly\n );\n\n if (d < smallestDistance) {\n closest = name;\n smallestDistance = d;\n }\n }\n\n return closest!;\n}\n\n/**\n * Returns all the aliases of a named color.\n */\nexport function namedColorAliases(name: NamedColor): readonly NamedColor[] {\n name = <NamedColor>name.toLowerCase();\n\n if (!isNamedColor(name)) {\n return [];\n }\n\n if (namedColorsAliasesCache[name]) {\n return namedColorsAliasesCache[name]!;\n }\n\n const aliases: NamedColor[] = [];\n const targetHex = namedColorToHex(name);\n\n for (const [name, hex] of O.entries(namedColorsMap)) {\n if (hex === targetHex) {\n aliases.push(name);\n }\n }\n\n return (namedColorsAliasesCache[name] = Object.freeze(aliases));\n}\n\n/**\n * Returns a boolean indicating whether two named colors are aliases.\n */\nexport function isAliasToNamedColor(\n name: NamedColor,\n alias: NamedColor\n): boolean {\n return namedColorAliases(name).includes(<NamedColor>alias.toLowerCase());\n}\n","import { A, N } from \"@auaust/primitive-kit\";\nimport type { ColorChannels, Rgb } from \"~/types\";\nimport {\n fallbackColor,\n isAlphaChannel,\n isRgbChannel,\n toAlphaChannel,\n toColorChannels,\n toRgbChannel,\n} from \"./channels\";\n\n/**\n * Whether the input is a valid RGB color.\n */\nexport function isRgb(value: unknown): value is Rgb {\n return (\n A.is(value) &&\n N.isBetween(value.length, 3, 4) &&\n value.every((n, i) => (i === 3 ? isAlphaChannel(n) : isRgbChannel(n)))\n );\n}\n\n/**\n * Whether the input could be a valid RGB color.\n * As in, it checks if the input is an array of numbers without validating the values range.\n */\nexport function couldBeRgb(value: unknown): value is Rgb {\n return A.is(value) && N.isBetween(value.length, 3, 4) && value.every(N.is);\n}\n\n/**\n * Parses a RGB tuple into an object of color channels.\n *\n * The input must already be a valid RGB tuple, otherwise the result will be unexpected.\n */\nexport function parseRgb(value: Rgb): ColorChannels {\n return A.is(value)\n ? toColorChannels(value[0], value[1], value[2], value[3]) // Don't spread to avoid mistakenly forwarding `isTransformed` and `isFallback`\n : fallbackColor;\n}\n\n/**\n * Returns the corresponding RGB tuple of a color channels object.\n */\nexport function toRgb(channels: ColorChannels): Rgb {\n const { r, g, b, a } = channels;\n\n return Array.from([r, g, b, a], (value, i) =>\n i === 3 ? toAlphaChannel(value) : toRgbChannel(value)\n );\n}\n","/**\n * Used to privately store the cached channels of a color.\n */\nexport const channels = Symbol(\"Color.channels\");\n\n/**\n * Used to privately store the cached data of a color.\n */\nexport const cache = Symbol(\"Color.cache\");\n","import { Color } from \"~/classes/Color\";\nimport type { ColorChannels, ColorType, ColorValue } from \"~/types\";\nimport { fallbackColor, isColorChannels } from \"./channels\";\nimport { isHex, parseHex } from \"./hex\";\nimport { isNamedColor, parseNamedColor } from \"./namedColors\";\nimport { couldBeRgb, isRgb, parseRgb } from \"./rgb\";\nimport { channels } from \"./symbols\";\n\n/** Returns true if the value is any format of supported color. */\nexport function isColor(value: unknown): value is ColorValue {\n return type(value) !== undefined;\n}\n\n/** Returns the color type of the value, or undefined if it's not a color. */\nexport function type(value: unknown): ColorType | undefined {\n if (!value) {\n return undefined;\n }\n\n if (value instanceof Color) {\n return \"color\";\n }\n\n if (isNamedColor(value)) {\n return \"named\";\n }\n\n if (isHex(value)) {\n return \"hex\";\n }\n\n if (isRgb(value)) {\n return \"rgb\";\n }\n\n if (isColorChannels(value)) {\n return \"channels\";\n }\n\n return undefined;\n}\n\n/** Tries to parse the value as a color. If it fails, returns the fallback color. */\nexport function parseColor(value: unknown): ColorChannels {\n if (!value) {\n return fallbackColor;\n }\n\n if (value instanceof Color) {\n return value[channels];\n }\n\n if (isColorChannels(value)) {\n return value;\n }\n\n if (isNamedColor(value)) {\n return parseNamedColor(value);\n }\n\n if (isHex(value)) {\n return parseHex(value);\n }\n\n if (couldBeRgb(value)) {\n // It might not be a valid RGB, in which case `parseRgb` is responsible for returning the fallback color\n // In case more color types are added, it might be required to only return the result of `parseRgb` if `isFallback` is false\n return parseRgb(value);\n }\n\n return fallbackColor;\n}\n","import type { ColorChannels } from \"~/types\";\n\n/** Calculate the distance between two colors. It is mostly useful for comparing distances between colors, but the value itself is not very meaningful. */\nexport function distance(\n a: ColorChannels,\n b: ColorChannels,\n alpha = false\n): number {\n return Math.sqrt(\n Math.pow(a.r - b.r, 2) +\n Math.pow(a.g - b.g, 2) +\n Math.pow(a.b - b.b, 2) +\n (alpha ? Math.pow((a.a ?? 1) - (b.a ?? 1), 2) : 0)\n );\n}\n","import { N } from \"@auaust/primitive-kit\";\nimport type { ColorChannels } from \"~/types\";\nimport { toColorChannels } from \"./channels\";\n\n/**\n * Returns the linearized value of a sRGB channel.\n *\n * @see https://stackoverflow.com/a/56678483\n */\nexport function sRGBtoLinear(channel: number) {\n if (channel <= 0.04045) {\n return channel / 12.92;\n }\n\n return Math.pow((channel + 0.055) / 1.055, 2.4);\n}\n\n/**\n * Returns the gamma corrected sRGB value of a linear channel.\n *\n * @see sRGBtoLinear\n */\nexport function linearTosRGB(channel: number) {\n if (channel <= 0.04045 / 12.92) {\n return channel * 12.92;\n }\n\n return 1.055 * Math.pow(channel, 1 / 2.4) - 0.055;\n}\n\n/**\n * Returns the luminance of a color normalized to the range [0, 1].\n *\n * @see https://stackoverflow.com/a/56678483\n * @see https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n */\nexport function luminance(channels: ColorChannels) {\n let { r, g, b } = channels;\n\n [r, g, b] = [r, g, b].map((v) => sRGBtoLinear(v / 255));\n\n return r * 0.2126 + g * 0.7152 + b * 0.0722;\n}\n\n/**\n * Returns the perceived brightness of a color normalized to the range [0, 1].\n *\n * @see https://stackoverflow.com/a/56678483\n */\nexport function brightness(channels: ColorChannels): number {\n const l = luminance(channels);\n\n if (l <= 216 / 24389) {\n return (l * (24389 / 27)) / 100;\n }\n\n return (Math.pow(l, 1 / 3) * 116 - 16) / 100;\n}\n\n/** Returns whether the color is bright, as in its brightness is greater than 0.5 or the provided threshold. */\nexport function isBright(channels: ColorChannels, threshold = 0.5): boolean {\n return brightness(channels) > threshold;\n}\n\n/** Returns whether the color is dark, as in its brightness is less than or equal to 0.5 or the provided threshold. */\nexport function isDark(channels: ColorChannels, threshold = 0.5): boolean {\n return brightness(channels) <= threshold;\n}\n\n/**\n * Returns the contrast ratio between two colors.\n *\n * @see https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n */\nexport function contrast(channelsA: ColorChannels, channelsB: ColorChannels) {\n const [darkest, brightest] = N.minMax(\n luminance(channelsA),\n luminance(channelsB)\n );\n\n return (brightest + 0.05) / (darkest + 0.05);\n}\n\n/**\n * Returns the grayscale equivalent of a color as a new color channels object.\n */\nexport function grayscale(channels: ColorChannels): ColorChannels {\n // Reverse gamma correction from luminance\n const gray = linearTosRGB(luminance(channels)) * 255;\n\n return toColorChannels(gray, gray, gray, channels.a);\n}\n","import type { ColorChannels } from \"~/types\";\n\n/** Checks if the color is fully opaque. */\nexport function isOpaque(channels: ColorChannels) {\n return channels.a === 1 || channels.a == undefined;\n}\n\n/** Checks if the color is fully transparent. */\nexport function isTransparent(channels: ColorChannels) {\n return channels.a === 0;\n}\n\n/** Checks if the color is at least partially transparent. */\nexport function isTranslucent(channels: ColorChannels) {\n return !isOpaque(channels);\n}\n","import { A, N } from \"@auaust/primitive-kit\";\nimport type { ColorChannels } from \"~/types\";\nimport { toColorChannels } from \"~/utils\";\n\nexport type ChannelRange = number | [min: number, max: number];\n\nfunction randomRgbChannel(range?: ChannelRange | undefined): number {\n if (N.is(range)) {\n return range;\n }\n\n if (A.is(range)) {\n return N.randInt(range[0], range[1]);\n }\n\n return N.randInt(0, 255);\n}\n\nfunction randomAlphaChannel(range?: ChannelRange | undefined): number {\n if (N.is(range)) {\n return range;\n }\n\n if (A.is(range)) {\n return N.randFloat(range[0], range[1]);\n }\n\n return 1;\n}\n\n/**\n * Generates a random color.\n *\n * Specific values or ranges can be provided for each channel.\n * If a range is provided, the value will be randomly selected from within that range.\n * If a single value is provided, that value will be used for the channel.\n * If no value is provided, the channel will be randomly selected from 0 to 255 for RGB channels and be set to 1 for the alpha channel.\n */\nexport function random({\n r,\n g,\n b,\n a,\n}: {\n r?: ChannelRange;\n g?: ChannelRange;\n b?: ChannelRange;\n a?: ChannelRange;\n} = {}): ColorChannels {\n return toColorChannels(\n randomRgbChannel(r),\n randomRgbChannel(g),\n randomRgbChannel(b),\n randomAlphaChannel(a)\n );\n}\n"],"mappings":"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","names":["src_exports","__export","Color","__toCommonJS","import_primitive_kit","import_primitive_kit","isRgbChannel","value","toRgbChannel","isAlphaChannel","toAlphaChannel","isColorChannels","toColorChannels","r","g","b","a","isTransformed","isFallback","finalR","finalG","finalB","fallbackColor","finalA","import_primitive_kit","hexadecimalRegex","isHex","value","parseHex","isShort","hasAlpha","r","g","b","a","toColorChannels","toHex","channels","toRgbChannel","import_primitive_kit","namedColorsMap","namedColors","namedColorsChannelsCache","namedColorsAliasesCache","isNamedColor","value","namedColorChannels","name","parseHex","namedColorToHex","parseNamedColor","fallbackColor","closestNamedColor","channels","closest","smallestDistance","d","distance","namedColorAliases","aliases","targetHex","hex","isAliasToNamedColor","alias","import_primitive_kit","isRgb","value","n","i","isAlphaChannel","isRgbChannel","couldBeRgb","parseRgb","toColorChannels","fallbackColor","toRgb","channels","g","b","a","toAlphaChannel","toRgbChannel","channels","cache","isColor","value","type","Color","isNamedColor","isHex","isRgb","isColorChannels","parseColor","channels","parseNamedColor","parseHex","couldBeRgb","parseRgb","fallbackColor","distance","a","b","alpha","import_primitive_kit","sRGBtoLinear","channel","linearTosRGB","luminance","channels","g","b","v","brightness","l","isBright","threshold","isDark","contrast","channelsA","channelsB","darkest","brightest","grayscale","gray","toColorChannels","isOpaque","channels","isTransparent","isTranslucent","import_primitive_kit","randomRgbChannel","range","randomAlphaChannel","random","r","g","b","a","toColorChannels","Color","_Color","channels","cache","value","toColorChannels","rest","parseColor","fallbackColor","rgb","parseRgb","hex","parseHex","name","parseNamedColor","presets","random","type","isColor","isHex","isNamedColor","isColorChannels","isRgb","namedColorAliases","isAliasToNamedColor","channel","toAlphaChannel","toRgbChannel","getter","key","cacheKey","isOpaque","isTransparent","isTranslucent","closestNamedColor","brightness","isBright","isDark","threshold","luminance","color","contrast","alpha","distance","grayscale","toHex","toRgb"]}
1
+ {"version":3,"sources":["/home/runner/work/lib-js-jaune/lib-js-jaune/dist/index.cjs"],"names":[],"mappings":"AAAA,iIAAwC,oCAAmB","file":"/home/runner/work/lib-js-jaune/lib-js-jaune/dist/index.cjs"}
package/dist/index.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- export { B as Color, C as ColorChannels, D as ColorType, E as ColorValue, H as Hex, M as MaybeNamedColor, N as NamedColor, R as Rgb } from './index-VyiURM-J.cjs';
1
+ export { l as Color, C as ColorChannels, m as ColorType, o as ColorValue, H as Hex, M as MaybeNamedColor, N as NamedColor, R as Rgb } from './index-7Xs589Bo.cjs';
2
2
  import 'type-fest';
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { B as Color, C as ColorChannels, D as ColorType, E as ColorValue, H as Hex, M as MaybeNamedColor, N as NamedColor, R as Rgb } from './index-VyiURM-J.js';
1
+ export { l as Color, C as ColorChannels, m as ColorType, o as ColorValue, H as Hex, M as MaybeNamedColor, N as NamedColor, R as Rgb } from './index-7Xs589Bo.js';
2
2
  import 'type-fest';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{N as he}from"@auaust/primitive-kit";import{N as m,O as V}from"@auaust/primitive-kit";function c(e){return m.is(e)&&m.isBetween(e,0,255)}function s(e){return m.clamp(m.round(e),0,255)}function A(e){return m.is(e)&&m.isBetween(e,0,1)}function b(e){return m.is(e)?m.clamp(e,0,1):1}function p(e){return V.is(e,!1)&&c(e.r)&&c(e.g)&&c(e.b)&&A(e.a??1)}function a(e,r,o,n,f,l){V.is(e,!1)&&({r:e,g:r,b:o,a:n,isTransformed:f,isFallback:l}=e);let C=s(e),G=s(r),O=s(o);if(isNaN(C)||isNaN(G)||isNaN(O))return i;let ne=b(n);return V.freeze({r:C,g:G,b:O,a:ne,isTransformed:!!(f||C!==e||G!==r||O!==o||ne!==(n??1)),isFallback:!!l})}var i=a(0,0,0,1,!1,!0);import{N as F,S as te}from"@auaust/primitive-kit";var le=/^[0-9a-f]+$/i;function g(e){if(e=te.is(e)&&(e.startsWith("#")?e.slice(1):e),!te.isStrict(e))return!1;switch(e.length){case 3:case 4:case 6:case 8:return le.test(e);default:return!1}}function d(e){e=e.startsWith("#")?e.slice(1):e;let r=e.length<6,o=r?e.length===4:e.length===8,n=parseInt(r?e[0].repeat(2):e.slice(0,2),16),f=parseInt(r?e[1].repeat(2):e.slice(2,4),16),l=parseInt(r?e[2].repeat(2):e.slice(4,6),16),C=o?parseInt(r?e[3].repeat(2):e.slice(6,8),16)/255:1;return a(n,f,l,C)}function I(e){let{r,g:o,b:n,a:f}=e;return"#"+((1<<24)+(s(r)<<16)+(s(o)<<8)+s(n)).toString(16).substring(1)+(F.is(f)&&f<1?F.round(F.max(0,f)*255).toString(16).padStart(2,"0"):"")}import{O as D,S as me}from"@auaust/primitive-kit";var M=D.freeze({aliceblue:"#f0f8ffff",antiquewhite:"#faebd7ff",aqua:"#00ffffff",aquamarine:"#7fffd4ff",azure:"#f0ffffff",beige:"#f5f5dcff",bisque:"#ffe4c4ff",black:"#000000ff",blanchedalmond:"#ffebcdff",blue:"#0000ffff",blueviolet:"#8a2be2ff",brown:"#a52a2aff",burlywood:"#deb887ff",cadetblue:"#5f9ea0ff",chartreuse:"#7fff00ff",chocolate:"#d2691eff",coral:"#ff7f50ff",cornflowerblue:"#6495edff",cornsilk:"#fff8dcff",crimson:"#dc143cff",cyan:"#00ffffff",darkblue:"#00008bff",darkcyan:"#008b8bff",darkgoldenrod:"#b8860bff",darkgray:"#a9a9a9ff",darkgreen:"#006400ff",darkgrey:"#a9a9a9ff",darkkhaki:"#bdb76bff",darkmagenta:"#8b008bff",darkolivegreen:"#556b2fff",darkorange:"#ff8c00ff",darkorchid:"#9932ccff",darkred:"#8b0000ff",darksalmon:"#e9967aff",darkseagreen:"#8fbc8fff",darkslateblue:"#483d8bff",darkslategray:"#2f4f4fff",darkslategrey:"#2f4f4fff",darkturquoise:"#00ced1ff",darkviolet:"#9400d3ff",deeppink:"#ff1493ff",deepskyblue:"#00bfffff",dimgray:"#696969ff",dimgrey:"#696969ff",dodgerblue:"#1e90ffff",firebrick:"#b22222ff",floralwhite:"#fffaf0ff",forestgreen:"#228b22ff",fuchsia:"#ff00ffff",gainsboro:"#dcdcdcff",ghostwhite:"#f8f8ffff",gold:"#ffd700ff",goldenrod:"#daa520ff",gray:"#808080ff",green:"#008000ff",greenyellow:"#adff2fff",grey:"#808080ff",honeydew:"#f0fff0ff",hotpink:"#ff69b4ff",indianred:"#cd5c5cff",indigo:"#4b0082ff",ivory:"#fffff0ff",khaki:"#f0e68cff",lavender:"#e6e6faff",lavenderblush:"#fff0f5ff",lawngreen:"#7cfc00ff",lemonchiffon:"#fffacdff",lightblue:"#add8e6ff",lightcoral:"#f08080ff",lightcyan:"#e0ffffff",lightgoldenrodyellow:"#fafad2ff",lightgray:"#d3d3d3ff",lightgreen:"#90ee90ff",lightgrey:"#d3d3d3ff",lightpink:"#ffb6c1ff",lightsalmon:"#ffa07aff",lightseagreen:"#20b2aaff",lightskyblue:"#87cefaff",lightslategray:"#778899ff",lightslategrey:"#778899ff",lightsteelblue:"#b0c4deff",lightyellow:"#ffffe0ff",lime:"#00ff00ff",limegreen:"#32cd32ff",linen:"#faf0e6ff",magenta:"#ff00ffff",maroon:"#800000ff",mediumaquamarine:"#66cdaaff",mediumblue:"#0000cdff",mediumorchid:"#ba55d3ff",mediumpurple:"#9370dbff",mediumseagreen:"#3cb371ff",mediumslateblue:"#7b68eeff",mediumspringgreen:"#00fa9aff",mediumturquoise:"#48d1ccff",mediumvioletred:"#c71585ff",midnightblue:"#191970ff",mintcream:"#f5fffaff",mistyrose:"#ffe4e1ff",moccasin:"#ffe4b5ff",navajowhite:"#ffdeadff",navy:"#000080ff",oldlace:"#fdf5e6ff",olive:"#808000ff",olivedrab:"#6b8e23ff",orange:"#ffa500ff",orangered:"#ff4500ff",orchid:"#da70d6ff",palegoldenrod:"#eee8aaff",palegreen:"#98fb98ff",paleturquoise:"#afeeeeff",palevioletred:"#db7093ff",papayawhip:"#ffefd5ff",peachpuff:"#ffdab9ff",peru:"#cd853fff",pink:"#ffc0cbff",plum:"#dda0ddff",powderblue:"#b0e0e6ff",purple:"#800080ff",rebeccapurple:"#663399ff",red:"#ff0000ff",rosybrown:"#bc8f8fff",royalblue:"#4169e1ff",saddlebrown:"#8b4513ff",salmon:"#fa8072ff",sandybrown:"#f4a460ff",seagreen:"#2e8b57ff",seashell:"#fff5eeff",sienna:"#a0522dff",silver:"#c0c0c0ff",skyblue:"#87ceebff",slateblue:"#6a5acdff",slategray:"#708090ff",slategrey:"#708090ff",snow:"#fffafaff",springgreen:"#00ff7fff",steelblue:"#4682b4ff",tan:"#d2b48cff",teal:"#008080ff",thistle:"#d8bfd8ff",tomato:"#ff6347ff",transparent:"#00000000",turquoise:"#40e0d0ff",violet:"#ee82eeff",wheat:"#f5deb3ff",white:"#ffffffff",whitesmoke:"#f5f5f5ff",yellow:"#ffff00ff",yellowgreen:"#9acd32ff"}),fe=new Set(D.keys(M)),ue={},L={};function u(e){return me.is(e)&&fe.has(e.toLowerCase())}function P(e){return ue[e]??=d(W(e))}function w(e){return u(e)?P(e.toLowerCase()):i}function W(e){return M[e.toLowerCase()]||void 0}function j(e){let r,o=1/0;for(let n of fe){let f=P(n),l=k(f,e,f.a===1);l<o&&(r=n,o=l)}return r}function B(e){if(e=e.toLowerCase(),!u(e))return[];if(L[e])return L[e];let r=[],o=W(e);for(let[n,f]of D.entries(M))f===o&&r.push(n);return L[e]=Object.freeze(r)}function J(e,r){return B(e).includes(r.toLowerCase())}import{A as $,N as K}from"@auaust/primitive-kit";function N(e){return $.is(e)&&K.isBetween(e.length,3,4)&&e.every((r,o)=>o===3?A(r):c(r))}function E(e){return $.is(e)&&K.isBetween(e.length,3,4)&&e.every(K.is)}function R(e){return $.is(e)?a(e[0],e[1],e[2],e[3]):i}function Q(e){let{r,g:o,b:n,a:f}=e;return Array.from([r,o,n,f],(l,C)=>C===3?b(l):s(l))}var t=Symbol("Color.channels"),y=Symbol("Color.cache");function q(e){return z(e)!==void 0}function z(e){if(e){if(e instanceof x)return"color";if(u(e))return"named";if(g(e))return"hex";if(N(e))return"rgb";if(p(e))return"channels"}}function U(e){return e?e instanceof x?e[t]:p(e)?e:u(e)?w(e):g(e)?d(e):E(e)?R(e):i:i}function k(e,r,o=!1){return Math.sqrt(Math.pow(e.r-r.r,2)+Math.pow(e.g-r.g,2)+Math.pow(e.b-r.b,2)+(o?Math.pow((e.a??1)-(r.a??1),2):0))}import{N as Ce}from"@auaust/primitive-kit";function ae(e){return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function se(e){return e<=.04045/12.92?e*12.92:1.055*Math.pow(e,1/2.4)-.055}function h(e){let{r,g:o,b:n}=e;return[r,o,n]=[r,o,n].map(f=>ae(f/255)),r*.2126+o*.7152+n*.0722}function T(e){let r=h(e);return r<=216/24389?r*(24389/27)/100:(Math.pow(r,1/3)*116-16)/100}function X(e,r=.5){return T(e)>r}function Y(e,r=.5){return T(e)<=r}function Z(e,r){let[o,n]=Ce.minMax(h(e),h(r));return(n+.05)/(o+.05)}function _(e){let r=se(h(e))*255;return a(r,r,r,e.a)}function S(e){return e.a===1||e.a==null}function v(e){return e.a===0}function ee(e){return!S(e)}import{A as ie,N as H}from"@auaust/primitive-kit";function re(e){return H.is(e)?e:ie.is(e)?H.randInt(e[0],e[1]):H.randInt(0,255)}function de(e){return H.is(e)?e:ie.is(e)?H.randFloat(e[0],e[1]):1}function oe({r:e,g:r,b:o,a:n}={}){return a(re(e),re(r),re(o),de(n))}var x=class e{[t]=void 0;[y]=new Map;constructor(r){this[t]={...a(r)}}static from(r,...o){return he.is(r)?new this({r,g:o[0],b:o[1],a:o[2]}):new this(U(r??i))}static fromChannels(r){return new this(r)}static fromRgb(r){return new this(R(r))}static fromHex(r){return new this(d(r))}static fromName(r){return new this(w(r))}static random(r={}){return new this(oe(r))}static type=z;static isColor=q;static is=q;static isHex=g;static isNamedColor=u;static isColorChannels=p;static isRgb=N;static namedColorAliases=B;static isAliasToNamedColor=J;clone(){return e.fromChannels(this[t])}with(r){return e.fromChannels({...this[t],...r,isFallback:!1,isTransformed:!1})}withRed(r){return this.with({r})}withGreen(r){return this.with({g:r})}withBlue(r){return this.with({b:r})}withAlpha(r){return this.with({a:r})}updated(){return this[y].clear(),this[t].isFallback=!1,this[t].isTransformed=!1,this}set(r,o){return this[t][r]=r==="a"?b(o):s(o),this.updated()}get red(){return this[t].r}get r(){return this[t].r}set red(r){this.setRed(r)}setRed(r){return this.set("r",r)}get green(){return this[t].g}get g(){return this[t].g}set green(r){this.setGreen(r)}setGreen(r){return this.set("g",r)}get blue(){return this[t].b}get b(){return this[t].b}set blue(r){this.setBlue(r)}setBlue(r){return this.set("b",r)}get alpha(){return this[t].a}get a(){return this[t].a}set alpha(r){this.setAlpha(r)}setAlpha(r){return this.set("a",r)}get isFallback(){return this[t].isFallback}get isTransformed(){return this[t].isTransformed}memoize(r,o){let n=o??r;return this[y].has(n)||this[y].set(n,r(this[t])),this[y].get(n)}get isOpaque(){return this.memoize(S)}get isTransparent(){return this.memoize(v)}get isTranslucent(){return this.memoize(ee)}get closestNamedColor(){return this.memoize(j)}get brightness(){return this.memoize(T)}get isBright(){return this.memoize(X)}get isDark(){return this.memoize(Y)}isBrighterThan(r){return this.brightness>(r instanceof e?r.brightness:r)}isDarkerThan(r){return this.brightness<(r instanceof e?r.brightness:r)}get luminance(){return this.memoize(h)}contrast(r){return Z(this[t],e.from(r)[t])}distance(r,o=!1){return k(this[t],e.from(r)[t],o)}toGrayscale(){return e.fromChannels(_(this[t]))}toHex(){return this.memoize(I)}toRgb(){return this.memoize(Q)}toChannels(){return this.memoize(a)}toString(){return this.toHex()}valueOf(){return this.toString()}[Symbol.toPrimitive](){return this.toString()}toJSON(){return this.toString()}};export{x as Color};
1
+ import{S as o}from"./chunk-Q3GK6DZM.js";export{o as Color};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/classes/Color.ts","../src/utils/channels.ts","../src/utils/hex.ts","../src/utils/namedColors.ts","../src/utils/rgb.ts","../src/utils/symbols.ts","../src/utils/colors.ts","../src/utils/distance.ts","../src/utils/luminance.ts","../src/utils/opacity.ts","../src/utils/random.ts"],"sourcesContent":["import { N } from \"@auaust/primitive-kit\";\nimport type { Writable } from \"type-fest\";\nimport type {\n ColorChannels,\n ColorValue,\n MaybeNamedColor,\n NamedColor,\n Rgb,\n} from \"~\";\nimport {\n brightness,\n closestNamedColor,\n contrast,\n distance,\n fallbackColor,\n grayscale,\n isAliasToNamedColor,\n isBright,\n isColor,\n isColorChannels,\n isDark,\n isHex,\n isNamedColor,\n isOpaque,\n isRgb,\n isTranslucent,\n isTransparent,\n luminance,\n namedColorAliases,\n parseColor,\n parseHex,\n parseNamedColor,\n parseRgb,\n toAlphaChannel,\n toColorChannels,\n toHex,\n toRgb,\n toRgbChannel,\n type,\n} from \"~/utils\";\nimport { random } from \"~/utils/random\";\nimport { cache, channels } from \"~/utils/symbols\";\n\nexport class Color {\n protected [channels]: Required<Writable<ColorChannels>> = undefined!;\n protected [cache]: Map<string | Function, any> = new Map();\n\n constructor(value: ColorChannels) {\n this[channels] = { ...toColorChannels(value) };\n }\n\n static from(value: ColorValue): Color;\n static from(red: number, green: number, blue: number, alpha?: number): Color;\n static from(value: ColorValue | number, ...rest: number[]): Color {\n if (N.is(value)) {\n return new this({ r: value, g: rest[0], b: rest[1], a: rest[2] });\n }\n\n return new this(parseColor(value ?? fallbackColor));\n }\n\n static fromChannels(channels: ColorChannels): Color {\n return new this(channels);\n }\n\n static fromRgb(rgb: Rgb): Color {\n return new this(parseRgb(rgb));\n }\n\n static fromHex(hex: string): Color {\n return new this(parseHex(hex));\n }\n\n static fromName(name: MaybeNamedColor): Color {\n return new this(parseNamedColor(name));\n }\n\n static random(presets: Parameters<typeof random>[0] = {}): Color {\n return new this(random(presets));\n }\n\n /**\n * Returns the color type of the passed value, or `undefined` if it's not a color.\n *\n * It is slightly stricter than the logic used to parse colors.\n * It would return false for an array of channels which values are not within the expected range, where `parseColor` would return a color with the invalid values clamped.\n */\n static type = type;\n\n /** Returns a boolean indicating whether the passed value is a color. */\n static isColor = isColor;\n\n /** @alias Color#isColor */\n static is = isColor;\n\n /** Returns a boolean indicating whether the passed value is a HEX color string. */\n static isHex = isHex;\n\n /** Returns a boolean indicating whether the passed value is a named color. */\n static isNamedColor = isNamedColor;\n\n /** Returns a boolean indicating whether the passed value is a color channel object. */\n static isColorChannels = isColorChannels;\n\n /** Returns a boolean indicating whether the passed value is a RGB color tuple. */\n static isRgb = isRgb;\n\n /** Returns all the aliases of a named color, including the name itself. */\n static namedColorAliases = namedColorAliases;\n\n /** Returns a boolean whether two named colors are aliases, meaning they have the same HEX value. */\n static isAliasToNamedColor = isAliasToNamedColor;\n\n /**\n * Returns a new `Color` instance with the same channels as the current one.\n * If you want the clone to have different channels, use the `with` method.\n */\n clone(): Color {\n return Color.fromChannels(this[channels]);\n }\n\n /** Returns a new `Color` instance with the passed channels overriding the current ones. */\n with(value: Partial<Pick<ColorChannels, \"r\" | \"g\" | \"b\" | \"a\">>): Color {\n return Color.fromChannels({\n ...this[channels],\n ...value,\n isFallback: false,\n isTransformed: false,\n });\n }\n\n /** Returns a new `Color` instance with the specified red channel. */\n withRed(value: number): Color {\n return this.with({ r: value });\n }\n\n /** Returns a new `Color` instance with the specified green channel. */\n withGreen(value: number): Color {\n return this.with({ g: value });\n }\n\n /** Returns a new `Color` instance with the specified blue channel. */\n withBlue(value: number): Color {\n return this.with({ b: value });\n }\n\n /** Returns a new `Color` instance with the specified alpha channel. */\n withAlpha(value: number): Color {\n return this.with({ a: value });\n }\n\n private updated(): this {\n this[cache].clear();\n this[channels].isFallback = false; // once updated, it's no longer a fallback\n this[channels].isTransformed = false;\n return this;\n }\n\n set(channel: \"r\" | \"g\" | \"b\" | \"a\", value: number): this {\n this[channels][channel] =\n channel === \"a\" ? toAlphaChannel(value) : toRgbChannel(value);\n return this.updated();\n }\n\n /** The red channel of the color. */\n get red(): number {\n return this[channels].r;\n }\n\n /** @see Color#red */\n get r(): number {\n return this[channels].r;\n }\n\n set red(value: number) {\n this.setRed(value);\n }\n\n setRed(value: number): this {\n return this.set(\"r\", value);\n }\n\n /** The green channel of the color. */\n get green(): number {\n return this[channels].g;\n }\n\n /** @see Color#green */\n get g(): number {\n return this[channels].g;\n }\n\n set green(value: number) {\n this.setGreen(value);\n }\n\n setGreen(value: number): this {\n return this.set(\"g\", value);\n }\n\n /** The blue channel of the color. */\n get blue(): number {\n return this[channels].b;\n }\n\n /** @see Color#blue */\n get b(): number {\n return this[channels].b;\n }\n\n set blue(value: number) {\n this.setBlue(value);\n }\n\n setBlue(value: number): this {\n return this.set(\"b\", value);\n }\n\n /** The alpha channel of the color. */\n get alpha(): number {\n return this[channels].a;\n }\n\n /** @see Color#alpha */\n get a(): number {\n return this[channels].a;\n }\n\n set alpha(value: number) {\n this.setAlpha(value);\n }\n\n setAlpha(value: number): this {\n return this.set(\"a\", value);\n }\n\n /**\n * Whether the color is the fallback color, which is used when the input is invalid.\n * As soon as a color channel is updated, this will always be `false`.\n */\n get isFallback(): boolean {\n return this[channels].isFallback;\n }\n\n /**\n * Whether any of the channels have been transformed by the color parser.\n * As soon as a color channel is updated, this will always be `false`.\n */\n get isTransformed(): boolean {\n return this[channels].isTransformed;\n }\n\n /** Helper to cache data until the channels are updated. */\n private memoize<T>(getter: (channels: ColorChannels) => T, key?: string): T {\n // If no key is passed, we use the getter function as the key\n // This means no key is required when the getter is a named function, while allowing to use anonymous functions within getters as well by passing a key\n const cacheKey = key ?? getter;\n\n if (!this[cache].has(cacheKey)) {\n this[cache].set(cacheKey, getter(this[channels]));\n }\n\n return this[cache].get(cacheKey);\n }\n\n /** Checks if the color is fully opaque. */\n get isOpaque(): boolean {\n return this.memoize(isOpaque);\n }\n\n /** Checks if the color is fully transparent. */\n get isTransparent(): boolean {\n return this.memoize(isTransparent);\n }\n\n /** Checks if the color is at least partially transparent. */\n get isTranslucent(): boolean {\n return this.memoize(isTranslucent);\n }\n\n /**\n * Returns the closest named color. If aliases exist, which one is returned is not guaranteed.\n * In some cases, calling `namedColorAliases()` on the result might help achieve the desired result.\n */\n get closestNamedColor(): NamedColor {\n return this.memoize(closestNamedColor);\n }\n\n /** The relative brightness of the color. */\n get brightness(): number {\n return this.memoize(brightness);\n }\n\n /** Whether the color is considered bright. */\n get isBright(): boolean {\n return this.memoize(isBright);\n }\n\n /** Whether the color is considered dark. */\n get isDark(): boolean {\n return this.memoize(isDark);\n }\n\n /** Whether the color is brighter than the passed threshold or color. */\n isBrighterThan(threshold: Color | number): boolean {\n return (\n this.brightness >\n (threshold instanceof Color ? threshold.brightness : threshold)\n );\n }\n\n /** Whether the color is darker than the passed threshold or color. */\n isDarkerThan(threshold: Color | number): boolean {\n return (\n this.brightness <\n (threshold instanceof Color ? threshold.brightness : threshold)\n );\n }\n\n /** Returns the relative luminance of the color. */\n get luminance(): number {\n return this.memoize(luminance);\n }\n\n /** Returns the contrast ratio between this color and another. */\n contrast(color: ColorValue): number {\n return contrast(this[channels], Color.from(color)[channels]);\n }\n\n /** Returns the distance between this color and another. If `alpha` is `true`, the alpha channel is included in the calculation. */\n distance(color: ColorValue, alpha = false): number {\n return distance(this[channels], Color.from(color)[channels], alpha);\n }\n\n /** Returns a new color with the grayscale equivalent of the current color, preserving the alpha channel. */\n toGrayscale(): Color {\n return Color.fromChannels(grayscale(this[channels]));\n }\n\n toHex(): string {\n return this.memoize(toHex);\n }\n\n toRgb(): Rgb {\n return this.memoize(toRgb);\n }\n\n toChannels(): ColorChannels {\n return this.memoize(toColorChannels); // can't return `this[channels]` directly as it's writable, and could cause unexpected behavior\n }\n\n toString(): string {\n return this.toHex();\n }\n\n valueOf(): string {\n return this.toString();\n }\n\n [Symbol.toPrimitive](): string {\n return this.toString();\n }\n\n toJSON(): string {\n return this.toString();\n }\n}\n","import { N, O } from \"@auaust/primitive-kit\";\nimport type { ColorChannels } from \"~/types\";\n\nexport function isRgbChannel(value: unknown): value is number {\n return N.is(value) && N.isBetween(value, 0, 255);\n}\n\nexport function toRgbChannel(value: number | undefined | null): number {\n return N.clamp(N.round(value), 0, 255);\n}\n\nexport function isAlphaChannel(value: unknown): value is number {\n return N.is(value) && N.isBetween(value, 0, 1);\n}\n\nexport function toAlphaChannel(value: number | undefined | null): number {\n return N.is(value) ? N.clamp(value, 0, 1) : 1;\n}\n\nexport function isColorChannels(value: unknown): value is ColorChannels {\n return (\n O.is(value, false) &&\n isRgbChannel(value.r) &&\n isRgbChannel(value.g) &&\n isRgbChannel(value.b) &&\n isAlphaChannel(value.a ?? 1)\n );\n}\n\n/**\n * Formats the input into a readonly object of color channels.\n *\n * It clamps the values to the valid range and sets the alpha channel to 1 if not provided.\n * If the passed `isTransformed` isn't already `true`, it will set it to `true` if any of the values were clamped.\n * If some channels are missing, it will return the fallback color.\n */\nexport function toColorChannels(value: ColorChannels): Required<ColorChannels>;\nexport function toColorChannels(\n r: number,\n g: number,\n b: number,\n a?: number | null,\n isTransformed?: boolean,\n isFallback?: boolean\n): Required<ColorChannels>;\nexport function toColorChannels(\n r: number | ColorChannels,\n g?: number,\n b?: number,\n a?: number | null,\n isTransformed?: boolean,\n isFallback?: boolean\n): Required<ColorChannels> {\n if (O.is(r, false)) {\n ({ r, g, b, a, isTransformed, isFallback } = r);\n }\n\n const finalR = toRgbChannel(r);\n const finalG = toRgbChannel(g);\n const finalB = toRgbChannel(b);\n\n if (isNaN(finalR) || isNaN(finalG) || isNaN(finalB)) {\n return fallbackColor;\n }\n\n const finalA = toAlphaChannel(a);\n\n return O.freeze({\n r: finalR,\n g: finalG,\n b: finalB,\n a: finalA,\n isTransformed: !!(\n isTransformed ||\n finalR !== r ||\n finalG !== g ||\n finalB !== b ||\n finalA !== (a ?? 1)\n ),\n isFallback: !!isFallback,\n });\n}\n\nexport const fallbackColor = toColorChannels(0, 0, 0, 1, false, true);\n","import { N, S } from \"@auaust/primitive-kit\";\nimport type { ColorChannels, Hex } from \"~/types\";\nimport { toColorChannels, toRgbChannel } from \"./channels\";\n\nconst hexadecimalRegex = /^[0-9a-f]+$/i;\n\n/**\n * Whether the input is a valid HEX color. With or without the alpha channel, and with single or double digits.\n *\n * It may or may not start with a hash character, which will be ignored.\n */\nexport function isHex(value: unknown): value is Hex {\n value = S.is(value) && (value.startsWith(\"#\") ? value.slice(1) : value);\n\n if (!S.isStrict(value)) {\n return false;\n }\n\n switch (value.length) {\n case 3: // RGB\n case 4: // RGBA\n case 6: // RRGGBB\n case 8: // RRGGBBAA\n return hexadecimalRegex.test(value);\n default:\n return false;\n }\n}\n\n/**\n * Parses a hex string into an object of color channels.\n *\n * The input must already be a valid HEX color, otherwise the result will be unexpected.\n */\nexport function parseHex(value: Hex): ColorChannels {\n value = value.startsWith(\"#\") ? value.slice(1) : value;\n\n const isShort = value.length < 6;\n const hasAlpha = isShort ? value.length === 4 : value.length === 8;\n\n const r = parseInt(isShort ? value[0].repeat(2) : value.slice(0, 2), 16);\n const g = parseInt(isShort ? value[1].repeat(2) : value.slice(2, 4), 16);\n const b = parseInt(isShort ? value[2].repeat(2) : value.slice(4, 6), 16);\n const a = hasAlpha\n ? parseInt(isShort ? value[3].repeat(2) : value.slice(6, 8), 16) / 255\n : 1;\n\n return toColorChannels(r, g, b, a);\n}\n\n/**\n * Returns the corresponding hex string of a color channels object.\n *\n * If the alpha channel is 1, it will be omitted.\n */\nexport function toHex(channels: ColorChannels): Hex {\n const { r, g, b, a } = channels;\n\n return (\n \"#\" +\n (\n (1 << 24) +\n (toRgbChannel(r) << 16) +\n (toRgbChannel(g) << 8) +\n toRgbChannel(b)\n )\n .toString(16)\n .substring(1) +\n (N.is(a) && a < 1\n ? N.round(N.max(0, a) * 255)\n .toString(16)\n .padStart(2, \"0\")\n : \"\")\n );\n}\n","import { O, S } from \"@auaust/primitive-kit\";\nimport type { ColorChannels, MaybeNamedColor, NamedColor } from \"~/types\";\nimport { distance, fallbackColor, parseHex } from \"~/utils\";\n\n/**\n * A map of named colors and their HEX values.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/named-color\n */\nexport const namedColorsMap = O.freeze({\n aliceblue: \"#f0f8ffff\",\n antiquewhite: \"#faebd7ff\",\n aqua: \"#00ffffff\",\n aquamarine: \"#7fffd4ff\",\n azure: \"#f0ffffff\",\n beige: \"#f5f5dcff\",\n bisque: \"#ffe4c4ff\",\n black: \"#000000ff\",\n blanchedalmond: \"#ffebcdff\",\n blue: \"#0000ffff\",\n blueviolet: \"#8a2be2ff\",\n brown: \"#a52a2aff\",\n burlywood: \"#deb887ff\",\n cadetblue: \"#5f9ea0ff\",\n chartreuse: \"#7fff00ff\",\n chocolate: \"#d2691eff\",\n coral: \"#ff7f50ff\",\n cornflowerblue: \"#6495edff\",\n cornsilk: \"#fff8dcff\",\n crimson: \"#dc143cff\",\n cyan: \"#00ffffff\",\n darkblue: \"#00008bff\",\n darkcyan: \"#008b8bff\",\n darkgoldenrod: \"#b8860bff\",\n darkgray: \"#a9a9a9ff\",\n darkgreen: \"#006400ff\",\n darkgrey: \"#a9a9a9ff\",\n darkkhaki: \"#bdb76bff\",\n darkmagenta: \"#8b008bff\",\n darkolivegreen: \"#556b2fff\",\n darkorange: \"#ff8c00ff\",\n darkorchid: \"#9932ccff\",\n darkred: \"#8b0000ff\",\n darksalmon: \"#e9967aff\",\n darkseagreen: \"#8fbc8fff\",\n darkslateblue: \"#483d8bff\",\n darkslategray: \"#2f4f4fff\",\n darkslategrey: \"#2f4f4fff\",\n darkturquoise: \"#00ced1ff\",\n darkviolet: \"#9400d3ff\",\n deeppink: \"#ff1493ff\",\n deepskyblue: \"#00bfffff\",\n dimgray: \"#696969ff\",\n dimgrey: \"#696969ff\",\n dodgerblue: \"#1e90ffff\",\n firebrick: \"#b22222ff\",\n floralwhite: \"#fffaf0ff\",\n forestgreen: \"#228b22ff\",\n fuchsia: \"#ff00ffff\",\n gainsboro: \"#dcdcdcff\",\n ghostwhite: \"#f8f8ffff\",\n gold: \"#ffd700ff\",\n goldenrod: \"#daa520ff\",\n gray: \"#808080ff\",\n green: \"#008000ff\",\n greenyellow: \"#adff2fff\",\n grey: \"#808080ff\",\n honeydew: \"#f0fff0ff\",\n hotpink: \"#ff69b4ff\",\n indianred: \"#cd5c5cff\",\n indigo: \"#4b0082ff\",\n ivory: \"#fffff0ff\",\n khaki: \"#f0e68cff\",\n lavender: \"#e6e6faff\",\n lavenderblush: \"#fff0f5ff\",\n lawngreen: \"#7cfc00ff\",\n lemonchiffon: \"#fffacdff\",\n lightblue: \"#add8e6ff\",\n lightcoral: \"#f08080ff\",\n lightcyan: \"#e0ffffff\",\n lightgoldenrodyellow: \"#fafad2ff\",\n lightgray: \"#d3d3d3ff\",\n lightgreen: \"#90ee90ff\",\n lightgrey: \"#d3d3d3ff\",\n lightpink: \"#ffb6c1ff\",\n lightsalmon: \"#ffa07aff\",\n lightseagreen: \"#20b2aaff\",\n lightskyblue: \"#87cefaff\",\n lightslategray: \"#778899ff\",\n lightslategrey: \"#778899ff\",\n lightsteelblue: \"#b0c4deff\",\n lightyellow: \"#ffffe0ff\",\n lime: \"#00ff00ff\",\n limegreen: \"#32cd32ff\",\n linen: \"#faf0e6ff\",\n magenta: \"#ff00ffff\",\n maroon: \"#800000ff\",\n mediumaquamarine: \"#66cdaaff\",\n mediumblue: \"#0000cdff\",\n mediumorchid: \"#ba55d3ff\",\n mediumpurple: \"#9370dbff\",\n mediumseagreen: \"#3cb371ff\",\n mediumslateblue: \"#7b68eeff\",\n mediumspringgreen: \"#00fa9aff\",\n mediumturquoise: \"#48d1ccff\",\n mediumvioletred: \"#c71585ff\",\n midnightblue: \"#191970ff\",\n mintcream: \"#f5fffaff\",\n mistyrose: \"#ffe4e1ff\",\n moccasin: \"#ffe4b5ff\",\n navajowhite: \"#ffdeadff\",\n navy: \"#000080ff\",\n oldlace: \"#fdf5e6ff\",\n olive: \"#808000ff\",\n olivedrab: \"#6b8e23ff\",\n orange: \"#ffa500ff\",\n orangered: \"#ff4500ff\",\n orchid: \"#da70d6ff\",\n palegoldenrod: \"#eee8aaff\",\n palegreen: \"#98fb98ff\",\n paleturquoise: \"#afeeeeff\",\n palevioletred: \"#db7093ff\",\n papayawhip: \"#ffefd5ff\",\n peachpuff: \"#ffdab9ff\",\n peru: \"#cd853fff\",\n pink: \"#ffc0cbff\",\n plum: \"#dda0ddff\",\n powderblue: \"#b0e0e6ff\",\n purple: \"#800080ff\",\n rebeccapurple: \"#663399ff\",\n red: \"#ff0000ff\",\n rosybrown: \"#bc8f8fff\",\n royalblue: \"#4169e1ff\",\n saddlebrown: \"#8b4513ff\",\n salmon: \"#fa8072ff\",\n sandybrown: \"#f4a460ff\",\n seagreen: \"#2e8b57ff\",\n seashell: \"#fff5eeff\",\n sienna: \"#a0522dff\",\n silver: \"#c0c0c0ff\",\n skyblue: \"#87ceebff\",\n slateblue: \"#6a5acdff\",\n slategray: \"#708090ff\",\n slategrey: \"#708090ff\",\n snow: \"#fffafaff\",\n springgreen: \"#00ff7fff\",\n steelblue: \"#4682b4ff\",\n tan: \"#d2b48cff\",\n teal: \"#008080ff\",\n thistle: \"#d8bfd8ff\",\n tomato: \"#ff6347ff\",\n transparent: \"#00000000\",\n turquoise: \"#40e0d0ff\",\n violet: \"#ee82eeff\",\n wheat: \"#f5deb3ff\",\n white: \"#ffffffff\",\n whitesmoke: \"#f5f5f5ff\",\n yellow: \"#ffff00ff\",\n yellowgreen: \"#9acd32ff\",\n});\n\nconst namedColors = new Set<NamedColor>(O.keys(namedColorsMap));\n\nconst namedColorsChannelsCache: Partial<Record<NamedColor, ColorChannels>> = {};\n\nconst namedColorsAliasesCache: Partial<\n Record<NamedColor, readonly NamedColor[]>\n> = {};\n\n/**\n * Whether the input is a valid named color.\n *\n * The check is case-sensitive.\n */\nexport function isNamedColor(value: unknown): value is NamedColor {\n return S.is(value) && namedColors.has(<NamedColor>value.toLowerCase());\n}\n\n/**\n * Returns the color channels from a named color. Must be a valid named color, already lowercased.\n *\n * @internal\n */\nexport function namedColorChannels(name: NamedColor): ColorChannels {\n return (namedColorsChannelsCache[name] ??= parseHex(namedColorToHex(name)!));\n}\n\n/**\n * Returns the color channels from a named color.\n */\nexport function parseNamedColor(name: MaybeNamedColor): ColorChannels {\n if (!isNamedColor(name)) {\n return fallbackColor;\n }\n\n return namedColorChannels(<NamedColor>name.toLowerCase());\n}\n\n/**\n * Returns the corresponding HEX value of a named color.\n */\nexport function namedColorToHex(name: NamedColor): string;\nexport function namedColorToHex(name: MaybeNamedColor): string | undefined;\nexport function namedColorToHex(name: MaybeNamedColor): string | undefined {\n return (\n namedColorsMap[<keyof typeof namedColorsMap>name.toLowerCase()] || undefined\n );\n}\n\n/** Returns the closest named color to the passed color channels. */\nexport function closestNamedColor(channels: ColorChannels): NamedColor {\n let closest: NamedColor | undefined;\n let smallestDistance = Infinity;\n\n for (const name of namedColors) {\n const value = namedColorChannels(name);\n const d = distance(\n value,\n channels,\n value.a === 1 // Ignore alpha channel only if it's 1 -> allows to match transparent/black correctly\n );\n\n if (d < smallestDistance) {\n closest = name;\n smallestDistance = d;\n }\n }\n\n return closest!;\n}\n\n/**\n * Returns all the aliases of a named color.\n */\nexport function namedColorAliases(name: NamedColor): readonly NamedColor[] {\n name = <NamedColor>name.toLowerCase();\n\n if (!isNamedColor(name)) {\n return [];\n }\n\n if (namedColorsAliasesCache[name]) {\n return namedColorsAliasesCache[name]!;\n }\n\n const aliases: NamedColor[] = [];\n const targetHex = namedColorToHex(name);\n\n for (const [name, hex] of O.entries(namedColorsMap)) {\n if (hex === targetHex) {\n aliases.push(name);\n }\n }\n\n return (namedColorsAliasesCache[name] = Object.freeze(aliases));\n}\n\n/**\n * Returns a boolean indicating whether two named colors are aliases.\n */\nexport function isAliasToNamedColor(\n name: NamedColor,\n alias: NamedColor\n): boolean {\n return namedColorAliases(name).includes(<NamedColor>alias.toLowerCase());\n}\n","import { A, N } from \"@auaust/primitive-kit\";\nimport type { ColorChannels, Rgb } from \"~/types\";\nimport {\n fallbackColor,\n isAlphaChannel,\n isRgbChannel,\n toAlphaChannel,\n toColorChannels,\n toRgbChannel,\n} from \"./channels\";\n\n/**\n * Whether the input is a valid RGB color.\n */\nexport function isRgb(value: unknown): value is Rgb {\n return (\n A.is(value) &&\n N.isBetween(value.length, 3, 4) &&\n value.every((n, i) => (i === 3 ? isAlphaChannel(n) : isRgbChannel(n)))\n );\n}\n\n/**\n * Whether the input could be a valid RGB color.\n * As in, it checks if the input is an array of numbers without validating the values range.\n */\nexport function couldBeRgb(value: unknown): value is Rgb {\n return A.is(value) && N.isBetween(value.length, 3, 4) && value.every(N.is);\n}\n\n/**\n * Parses a RGB tuple into an object of color channels.\n *\n * The input must already be a valid RGB tuple, otherwise the result will be unexpected.\n */\nexport function parseRgb(value: Rgb): ColorChannels {\n return A.is(value)\n ? toColorChannels(value[0], value[1], value[2], value[3]) // Don't spread to avoid mistakenly forwarding `isTransformed` and `isFallback`\n : fallbackColor;\n}\n\n/**\n * Returns the corresponding RGB tuple of a color channels object.\n */\nexport function toRgb(channels: ColorChannels): Rgb {\n const { r, g, b, a } = channels;\n\n return Array.from([r, g, b, a], (value, i) =>\n i === 3 ? toAlphaChannel(value) : toRgbChannel(value)\n );\n}\n","/**\n * Used to privately store the cached channels of a color.\n */\nexport const channels = Symbol(\"Color.channels\");\n\n/**\n * Used to privately store the cached data of a color.\n */\nexport const cache = Symbol(\"Color.cache\");\n","import { Color } from \"~/classes/Color\";\nimport type { ColorChannels, ColorType, ColorValue } from \"~/types\";\nimport { fallbackColor, isColorChannels } from \"./channels\";\nimport { isHex, parseHex } from \"./hex\";\nimport { isNamedColor, parseNamedColor } from \"./namedColors\";\nimport { couldBeRgb, isRgb, parseRgb } from \"./rgb\";\nimport { channels } from \"./symbols\";\n\n/** Returns true if the value is any format of supported color. */\nexport function isColor(value: unknown): value is ColorValue {\n return type(value) !== undefined;\n}\n\n/** Returns the color type of the value, or undefined if it's not a color. */\nexport function type(value: unknown): ColorType | undefined {\n if (!value) {\n return undefined;\n }\n\n if (value instanceof Color) {\n return \"color\";\n }\n\n if (isNamedColor(value)) {\n return \"named\";\n }\n\n if (isHex(value)) {\n return \"hex\";\n }\n\n if (isRgb(value)) {\n return \"rgb\";\n }\n\n if (isColorChannels(value)) {\n return \"channels\";\n }\n\n return undefined;\n}\n\n/** Tries to parse the value as a color. If it fails, returns the fallback color. */\nexport function parseColor(value: unknown): ColorChannels {\n if (!value) {\n return fallbackColor;\n }\n\n if (value instanceof Color) {\n return value[channels];\n }\n\n if (isColorChannels(value)) {\n return value;\n }\n\n if (isNamedColor(value)) {\n return parseNamedColor(value);\n }\n\n if (isHex(value)) {\n return parseHex(value);\n }\n\n if (couldBeRgb(value)) {\n // It might not be a valid RGB, in which case `parseRgb` is responsible for returning the fallback color\n // In case more color types are added, it might be required to only return the result of `parseRgb` if `isFallback` is false\n return parseRgb(value);\n }\n\n return fallbackColor;\n}\n","import type { ColorChannels } from \"~/types\";\n\n/** Calculate the distance between two colors. It is mostly useful for comparing distances between colors, but the value itself is not very meaningful. */\nexport function distance(\n a: ColorChannels,\n b: ColorChannels,\n alpha = false\n): number {\n return Math.sqrt(\n Math.pow(a.r - b.r, 2) +\n Math.pow(a.g - b.g, 2) +\n Math.pow(a.b - b.b, 2) +\n (alpha ? Math.pow((a.a ?? 1) - (b.a ?? 1), 2) : 0)\n );\n}\n","import { N } from \"@auaust/primitive-kit\";\nimport type { ColorChannels } from \"~/types\";\nimport { toColorChannels } from \"./channels\";\n\n/**\n * Returns the linearized value of a sRGB channel.\n *\n * @see https://stackoverflow.com/a/56678483\n */\nexport function sRGBtoLinear(channel: number) {\n if (channel <= 0.04045) {\n return channel / 12.92;\n }\n\n return Math.pow((channel + 0.055) / 1.055, 2.4);\n}\n\n/**\n * Returns the gamma corrected sRGB value of a linear channel.\n *\n * @see sRGBtoLinear\n */\nexport function linearTosRGB(channel: number) {\n if (channel <= 0.04045 / 12.92) {\n return channel * 12.92;\n }\n\n return 1.055 * Math.pow(channel, 1 / 2.4) - 0.055;\n}\n\n/**\n * Returns the luminance of a color normalized to the range [0, 1].\n *\n * @see https://stackoverflow.com/a/56678483\n * @see https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n */\nexport function luminance(channels: ColorChannels) {\n let { r, g, b } = channels;\n\n [r, g, b] = [r, g, b].map((v) => sRGBtoLinear(v / 255));\n\n return r * 0.2126 + g * 0.7152 + b * 0.0722;\n}\n\n/**\n * Returns the perceived brightness of a color normalized to the range [0, 1].\n *\n * @see https://stackoverflow.com/a/56678483\n */\nexport function brightness(channels: ColorChannels): number {\n const l = luminance(channels);\n\n if (l <= 216 / 24389) {\n return (l * (24389 / 27)) / 100;\n }\n\n return (Math.pow(l, 1 / 3) * 116 - 16) / 100;\n}\n\n/** Returns whether the color is bright, as in its brightness is greater than 0.5 or the provided threshold. */\nexport function isBright(channels: ColorChannels, threshold = 0.5): boolean {\n return brightness(channels) > threshold;\n}\n\n/** Returns whether the color is dark, as in its brightness is less than or equal to 0.5 or the provided threshold. */\nexport function isDark(channels: ColorChannels, threshold = 0.5): boolean {\n return brightness(channels) <= threshold;\n}\n\n/**\n * Returns the contrast ratio between two colors.\n *\n * @see https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n */\nexport function contrast(channelsA: ColorChannels, channelsB: ColorChannels) {\n const [darkest, brightest] = N.minMax(\n luminance(channelsA),\n luminance(channelsB)\n );\n\n return (brightest + 0.05) / (darkest + 0.05);\n}\n\n/**\n * Returns the grayscale equivalent of a color as a new color channels object.\n */\nexport function grayscale(channels: ColorChannels): ColorChannels {\n // Reverse gamma correction from luminance\n const gray = linearTosRGB(luminance(channels)) * 255;\n\n return toColorChannels(gray, gray, gray, channels.a);\n}\n","import type { ColorChannels } from \"~/types\";\n\n/** Checks if the color is fully opaque. */\nexport function isOpaque(channels: ColorChannels) {\n return channels.a === 1 || channels.a == undefined;\n}\n\n/** Checks if the color is fully transparent. */\nexport function isTransparent(channels: ColorChannels) {\n return channels.a === 0;\n}\n\n/** Checks if the color is at least partially transparent. */\nexport function isTranslucent(channels: ColorChannels) {\n return !isOpaque(channels);\n}\n","import { A, N } from \"@auaust/primitive-kit\";\nimport type { ColorChannels } from \"~/types\";\nimport { toColorChannels } from \"~/utils\";\n\nexport type ChannelRange = number | [min: number, max: number];\n\nfunction randomRgbChannel(range?: ChannelRange | undefined): number {\n if (N.is(range)) {\n return range;\n }\n\n if (A.is(range)) {\n return N.randInt(range[0], range[1]);\n }\n\n return N.randInt(0, 255);\n}\n\nfunction randomAlphaChannel(range?: ChannelRange | undefined): number {\n if (N.is(range)) {\n return range;\n }\n\n if (A.is(range)) {\n return N.randFloat(range[0], range[1]);\n }\n\n return 1;\n}\n\n/**\n * Generates a random color.\n *\n * Specific values or ranges can be provided for each channel.\n * If a range is provided, the value will be randomly selected from within that range.\n * If a single value is provided, that value will be used for the channel.\n * If no value is provided, the channel will be randomly selected from 0 to 255 for RGB channels and be set to 1 for the alpha channel.\n */\nexport function random({\n r,\n g,\n b,\n a,\n}: {\n r?: ChannelRange;\n g?: ChannelRange;\n b?: ChannelRange;\n a?: ChannelRange;\n} = {}): ColorChannels {\n return toColorChannels(\n randomRgbChannel(r),\n randomRgbChannel(g),\n randomRgbChannel(b),\n randomAlphaChannel(a)\n );\n}\n"],"mappings":"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","names":["N","N","O","isRgbChannel","value","toRgbChannel","isAlphaChannel","toAlphaChannel","isColorChannels","toColorChannels","r","g","b","a","isTransformed","isFallback","finalR","finalG","finalB","fallbackColor","finalA","N","S","hexadecimalRegex","isHex","value","S","parseHex","isShort","hasAlpha","r","g","b","a","toColorChannels","toHex","channels","toRgbChannel","N","O","S","namedColorsMap","O","namedColors","namedColorsChannelsCache","namedColorsAliasesCache","isNamedColor","value","S","namedColorChannels","name","parseHex","namedColorToHex","parseNamedColor","fallbackColor","closestNamedColor","channels","closest","smallestDistance","d","distance","namedColorAliases","aliases","targetHex","hex","isAliasToNamedColor","alias","A","N","isRgb","value","A","N","n","i","isAlphaChannel","isRgbChannel","couldBeRgb","parseRgb","toColorChannels","fallbackColor","toRgb","channels","g","b","a","toAlphaChannel","toRgbChannel","channels","cache","isColor","value","type","Color","isNamedColor","isHex","isRgb","isColorChannels","parseColor","channels","parseNamedColor","parseHex","couldBeRgb","parseRgb","fallbackColor","distance","a","b","alpha","N","sRGBtoLinear","channel","linearTosRGB","luminance","channels","g","b","v","brightness","l","isBright","threshold","isDark","contrast","channelsA","channelsB","darkest","brightest","N","grayscale","gray","toColorChannels","isOpaque","channels","isTransparent","isTranslucent","A","N","randomRgbChannel","range","N","A","randomAlphaChannel","random","r","g","b","a","toColorChannels","Color","_Color","channels","cache","value","toColorChannels","rest","N","parseColor","fallbackColor","rgb","parseRgb","hex","parseHex","name","parseNamedColor","presets","random","type","isColor","isHex","isNamedColor","isColorChannels","isRgb","namedColorAliases","isAliasToNamedColor","channel","toAlphaChannel","toRgbChannel","getter","key","cacheKey","isOpaque","isTransparent","isTranslucent","closestNamedColor","brightness","isBright","isDark","threshold","luminance","color","contrast","alpha","distance","grayscale","toHex","toRgb"]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/utils.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var v=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var me=Object.prototype.hasOwnProperty;var ue=(e,r)=>{for(var o in r)v(e,o,{get:r[o],enumerable:!0})},he=(e,r,o,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let f of le(r))!me.call(e,f)&&f!==o&&v(e,f,{get:()=>r[f],enumerable:!(n=ie(r,f))||n.enumerable});return e};var de=e=>he(v({},"__esModule",{value:!0}),e);var pe={};ue(pe,{brightness:()=>H,closestNamedColor:()=>V,contrast:()=>K,couldBeRgb:()=>Y,distance:()=>A,fallbackColor:()=>l,grayscale:()=>$,isAliasToNamedColor:()=>D,isAlphaChannel:()=>M,isBright:()=>j,isColor:()=>z,isColorChannels:()=>y,isDark:()=>J,isHex:()=>x,isNamedColor:()=>h,isOpaque:()=>O,isRgb:()=>R,isRgbChannel:()=>p,isTranslucent:()=>Q,isTransparent:()=>E,linearTosRGB:()=>ne,luminance:()=>C,namedColorAliases:()=>S,namedColorChannels:()=>U,namedColorToHex:()=>X,namedColorsMap:()=>F,parseColor:()=>W,parseHex:()=>d,parseNamedColor:()=>N,parseRgb:()=>T,random:()=>I,sRGBtoLinear:()=>oe,toAlphaChannel:()=>g,toColorChannels:()=>a,toHex:()=>L,toRgb:()=>P,toRgbChannel:()=>s,type:()=>G});module.exports=de(pe);var i=require("@auaust/primitive-kit");function p(e){return i.N.is(e)&&i.N.isBetween(e,0,255)}function s(e){return i.N.clamp(i.N.round(e),0,255)}function M(e){return i.N.is(e)&&i.N.isBetween(e,0,1)}function g(e){return i.N.is(e)?i.N.clamp(e,0,1):1}function y(e){return i.O.is(e,!1)&&p(e.r)&&p(e.g)&&p(e.b)&&M(e.a??1)}function a(e,r,o,n,f,m){i.O.is(e,!1)&&({r:e,g:r,b:o,a:n,isTransformed:f,isFallback:m}=e);let b=s(e),Z=s(r),_=s(o);if(isNaN(b)||isNaN(Z)||isNaN(_))return l;let te=g(n);return i.O.freeze({r:b,g:Z,b:_,a:te,isTransformed:!!(f||b!==e||Z!==r||_!==o||te!==(n??1)),isFallback:!!m})}var l=a(0,0,0,1,!1,!0);var fe=require("@auaust/primitive-kit");var u=require("@auaust/primitive-kit");function ee(e){return u.N.is(e)?e:u.A.is(e)?u.N.randInt(e[0],e[1]):u.N.randInt(0,255)}function Ce(e){return u.N.is(e)?e:u.A.is(e)?u.N.randFloat(e[0],e[1]):1}function I({r:e,g:r,b:o,a:n}={}){return a(ee(e),ee(r),ee(o),Ce(n))}var t=Symbol("Color.channels"),k=Symbol("Color.cache");var q=class e{[t]=void 0;[k]=new Map;constructor(r){this[t]={...a(r)}}static from(r,...o){return fe.N.is(r)?new this({r,g:o[0],b:o[1],a:o[2]}):new this(W(r??l))}static fromChannels(r){return new this(r)}static fromRgb(r){return new this(T(r))}static fromHex(r){return new this(d(r))}static fromName(r){return new this(N(r))}static random(r={}){return new this(I(r))}static type=G;static isColor=z;static is=z;static isHex=x;static isNamedColor=h;static isColorChannels=y;static isRgb=R;static namedColorAliases=S;static isAliasToNamedColor=D;clone(){return e.fromChannels(this[t])}with(r){return e.fromChannels({...this[t],...r,isFallback:!1,isTransformed:!1})}withRed(r){return this.with({r})}withGreen(r){return this.with({g:r})}withBlue(r){return this.with({b:r})}withAlpha(r){return this.with({a:r})}updated(){return this[k].clear(),this[t].isFallback=!1,this[t].isTransformed=!1,this}set(r,o){return this[t][r]=r==="a"?g(o):s(o),this.updated()}get red(){return this[t].r}get r(){return this[t].r}set red(r){this.setRed(r)}setRed(r){return this.set("r",r)}get green(){return this[t].g}get g(){return this[t].g}set green(r){this.setGreen(r)}setGreen(r){return this.set("g",r)}get blue(){return this[t].b}get b(){return this[t].b}set blue(r){this.setBlue(r)}setBlue(r){return this.set("b",r)}get alpha(){return this[t].a}get a(){return this[t].a}set alpha(r){this.setAlpha(r)}setAlpha(r){return this.set("a",r)}get isFallback(){return this[t].isFallback}get isTransformed(){return this[t].isTransformed}memoize(r,o){let n=o??r;return this[k].has(n)||this[k].set(n,r(this[t])),this[k].get(n)}get isOpaque(){return this.memoize(O)}get isTransparent(){return this.memoize(E)}get isTranslucent(){return this.memoize(Q)}get closestNamedColor(){return this.memoize(V)}get brightness(){return this.memoize(H)}get isBright(){return this.memoize(j)}get isDark(){return this.memoize(J)}isBrighterThan(r){return this.brightness>(r instanceof e?r.brightness:r)}isDarkerThan(r){return this.brightness<(r instanceof e?r.brightness:r)}get luminance(){return this.memoize(C)}contrast(r){return K(this[t],e.from(r)[t])}distance(r,o=!1){return A(this[t],e.from(r)[t],o)}toGrayscale(){return e.fromChannels($(this[t]))}toHex(){return this.memoize(L)}toRgb(){return this.memoize(P)}toChannels(){return this.memoize(a)}toString(){return this.toHex()}valueOf(){return this.toString()}[Symbol.toPrimitive](){return this.toString()}toJSON(){return this.toString()}};var w=require("@auaust/primitive-kit");var ce=/^[0-9a-f]+$/i;function x(e){if(e=w.S.is(e)&&(e.startsWith("#")?e.slice(1):e),!w.S.isStrict(e))return!1;switch(e.length){case 3:case 4:case 6:case 8:return ce.test(e);default:return!1}}function d(e){e=e.startsWith("#")?e.slice(1):e;let r=e.length<6,o=r?e.length===4:e.length===8,n=parseInt(r?e[0].repeat(2):e.slice(0,2),16),f=parseInt(r?e[1].repeat(2):e.slice(2,4),16),m=parseInt(r?e[2].repeat(2):e.slice(4,6),16),b=o?parseInt(r?e[3].repeat(2):e.slice(6,8),16)/255:1;return a(n,f,m,b)}function L(e){let{r,g:o,b:n,a:f}=e;return"#"+((1<<24)+(s(r)<<16)+(s(o)<<8)+s(n)).toString(16).substring(1)+(w.N.is(f)&&f<1?w.N.round(w.N.max(0,f)*255).toString(16).padStart(2,"0"):"")}var B=require("@auaust/primitive-kit");var F=B.O.freeze({aliceblue:"#f0f8ffff",antiquewhite:"#faebd7ff",aqua:"#00ffffff",aquamarine:"#7fffd4ff",azure:"#f0ffffff",beige:"#f5f5dcff",bisque:"#ffe4c4ff",black:"#000000ff",blanchedalmond:"#ffebcdff",blue:"#0000ffff",blueviolet:"#8a2be2ff",brown:"#a52a2aff",burlywood:"#deb887ff",cadetblue:"#5f9ea0ff",chartreuse:"#7fff00ff",chocolate:"#d2691eff",coral:"#ff7f50ff",cornflowerblue:"#6495edff",cornsilk:"#fff8dcff",crimson:"#dc143cff",cyan:"#00ffffff",darkblue:"#00008bff",darkcyan:"#008b8bff",darkgoldenrod:"#b8860bff",darkgray:"#a9a9a9ff",darkgreen:"#006400ff",darkgrey:"#a9a9a9ff",darkkhaki:"#bdb76bff",darkmagenta:"#8b008bff",darkolivegreen:"#556b2fff",darkorange:"#ff8c00ff",darkorchid:"#9932ccff",darkred:"#8b0000ff",darksalmon:"#e9967aff",darkseagreen:"#8fbc8fff",darkslateblue:"#483d8bff",darkslategray:"#2f4f4fff",darkslategrey:"#2f4f4fff",darkturquoise:"#00ced1ff",darkviolet:"#9400d3ff",deeppink:"#ff1493ff",deepskyblue:"#00bfffff",dimgray:"#696969ff",dimgrey:"#696969ff",dodgerblue:"#1e90ffff",firebrick:"#b22222ff",floralwhite:"#fffaf0ff",forestgreen:"#228b22ff",fuchsia:"#ff00ffff",gainsboro:"#dcdcdcff",ghostwhite:"#f8f8ffff",gold:"#ffd700ff",goldenrod:"#daa520ff",gray:"#808080ff",green:"#008000ff",greenyellow:"#adff2fff",grey:"#808080ff",honeydew:"#f0fff0ff",hotpink:"#ff69b4ff",indianred:"#cd5c5cff",indigo:"#4b0082ff",ivory:"#fffff0ff",khaki:"#f0e68cff",lavender:"#e6e6faff",lavenderblush:"#fff0f5ff",lawngreen:"#7cfc00ff",lemonchiffon:"#fffacdff",lightblue:"#add8e6ff",lightcoral:"#f08080ff",lightcyan:"#e0ffffff",lightgoldenrodyellow:"#fafad2ff",lightgray:"#d3d3d3ff",lightgreen:"#90ee90ff",lightgrey:"#d3d3d3ff",lightpink:"#ffb6c1ff",lightsalmon:"#ffa07aff",lightseagreen:"#20b2aaff",lightskyblue:"#87cefaff",lightslategray:"#778899ff",lightslategrey:"#778899ff",lightsteelblue:"#b0c4deff",lightyellow:"#ffffe0ff",lime:"#00ff00ff",limegreen:"#32cd32ff",linen:"#faf0e6ff",magenta:"#ff00ffff",maroon:"#800000ff",mediumaquamarine:"#66cdaaff",mediumblue:"#0000cdff",mediumorchid:"#ba55d3ff",mediumpurple:"#9370dbff",mediumseagreen:"#3cb371ff",mediumslateblue:"#7b68eeff",mediumspringgreen:"#00fa9aff",mediumturquoise:"#48d1ccff",mediumvioletred:"#c71585ff",midnightblue:"#191970ff",mintcream:"#f5fffaff",mistyrose:"#ffe4e1ff",moccasin:"#ffe4b5ff",navajowhite:"#ffdeadff",navy:"#000080ff",oldlace:"#fdf5e6ff",olive:"#808000ff",olivedrab:"#6b8e23ff",orange:"#ffa500ff",orangered:"#ff4500ff",orchid:"#da70d6ff",palegoldenrod:"#eee8aaff",palegreen:"#98fb98ff",paleturquoise:"#afeeeeff",palevioletred:"#db7093ff",papayawhip:"#ffefd5ff",peachpuff:"#ffdab9ff",peru:"#cd853fff",pink:"#ffc0cbff",plum:"#dda0ddff",powderblue:"#b0e0e6ff",purple:"#800080ff",rebeccapurple:"#663399ff",red:"#ff0000ff",rosybrown:"#bc8f8fff",royalblue:"#4169e1ff",saddlebrown:"#8b4513ff",salmon:"#fa8072ff",sandybrown:"#f4a460ff",seagreen:"#2e8b57ff",seashell:"#fff5eeff",sienna:"#a0522dff",silver:"#c0c0c0ff",skyblue:"#87ceebff",slateblue:"#6a5acdff",slategray:"#708090ff",slategrey:"#708090ff",snow:"#fffafaff",springgreen:"#00ff7fff",steelblue:"#4682b4ff",tan:"#d2b48cff",teal:"#008080ff",thistle:"#d8bfd8ff",tomato:"#ff6347ff",transparent:"#00000000",turquoise:"#40e0d0ff",violet:"#ee82eeff",wheat:"#f5deb3ff",white:"#ffffffff",whitesmoke:"#f5f5f5ff",yellow:"#ffff00ff",yellowgreen:"#9acd32ff"}),ae=new Set(B.O.keys(F)),be={},re={};function h(e){return B.S.is(e)&&ae.has(e.toLowerCase())}function U(e){return be[e]??=d(X(e))}function N(e){return h(e)?U(e.toLowerCase()):l}function X(e){return F[e.toLowerCase()]||void 0}function V(e){let r,o=1/0;for(let n of ae){let f=U(n),m=A(f,e,f.a===1);m<o&&(r=n,o=m)}return r}function S(e){if(e=e.toLowerCase(),!h(e))return[];if(re[e])return re[e];let r=[],o=X(e);for(let[n,f]of B.O.entries(F))f===o&&r.push(n);return re[e]=Object.freeze(r)}function D(e,r){return S(e).includes(r.toLowerCase())}var c=require("@auaust/primitive-kit");function R(e){return c.A.is(e)&&c.N.isBetween(e.length,3,4)&&e.every((r,o)=>o===3?M(r):p(r))}function Y(e){return c.A.is(e)&&c.N.isBetween(e.length,3,4)&&e.every(c.N.is)}function T(e){return c.A.is(e)?a(e[0],e[1],e[2],e[3]):l}function P(e){let{r,g:o,b:n,a:f}=e;return Array.from([r,o,n,f],(m,b)=>b===3?g(m):s(m))}function z(e){return G(e)!==void 0}function G(e){if(e){if(e instanceof q)return"color";if(h(e))return"named";if(x(e))return"hex";if(R(e))return"rgb";if(y(e))return"channels"}}function W(e){return e?e instanceof q?e[t]:y(e)?e:h(e)?N(e):x(e)?d(e):Y(e)?T(e):l:l}function A(e,r,o=!1){return Math.sqrt(Math.pow(e.r-r.r,2)+Math.pow(e.g-r.g,2)+Math.pow(e.b-r.b,2)+(o?Math.pow((e.a??1)-(r.a??1),2):0))}var se=require("@auaust/primitive-kit");function oe(e){return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function ne(e){return e<=.04045/12.92?e*12.92:1.055*Math.pow(e,1/2.4)-.055}function C(e){let{r,g:o,b:n}=e;return[r,o,n]=[r,o,n].map(f=>oe(f/255)),r*.2126+o*.7152+n*.0722}function H(e){let r=C(e);return r<=216/24389?r*(24389/27)/100:(Math.pow(r,1/3)*116-16)/100}function j(e,r=.5){return H(e)>r}function J(e,r=.5){return H(e)<=r}function K(e,r){let[o,n]=se.N.minMax(C(e),C(r));return(n+.05)/(o+.05)}function $(e){let r=ne(C(e))*255;return a(r,r,r,e.a)}function O(e){return e.a===1||e.a==null}function E(e){return e.a===0}function Q(e){return!O(e)}0&&(module.exports={brightness,closestNamedColor,contrast,couldBeRgb,distance,fallbackColor,grayscale,isAliasToNamedColor,isAlphaChannel,isBright,isColor,isColorChannels,isDark,isHex,isNamedColor,isOpaque,isRgb,isRgbChannel,isTranslucent,isTransparent,linearTosRGB,luminance,namedColorAliases,namedColorChannels,namedColorToHex,namedColorsMap,parseColor,parseHex,parseNamedColor,parseRgb,random,sRGBtoLinear,toAlphaChannel,toColorChannels,toHex,toRgb,toRgbChannel,type});
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkX6GMJCOGcjs = require('./chunk-X6GMJCOG.cjs');exports.brightness = _chunkX6GMJCOGcjs.f; exports.cache = _chunkX6GMJCOGcjs.b; exports.channels = _chunkX6GMJCOGcjs.a; exports.closestNamedColor = _chunkX6GMJCOGcjs.g; exports.contrast = _chunkX6GMJCOGcjs.h; exports.couldBeRgb = _chunkX6GMJCOGcjs.i; exports.distance = _chunkX6GMJCOGcjs.j; exports.fallbackColor = _chunkX6GMJCOGcjs.c; exports.grayscale = _chunkX6GMJCOGcjs.k; exports.invert = _chunkX6GMJCOGcjs.m; exports.isAliasToNamedColor = _chunkX6GMJCOGcjs.n; exports.isAlphaChannel = _chunkX6GMJCOGcjs.o; exports.isBright = _chunkX6GMJCOGcjs.p; exports.isColor = _chunkX6GMJCOGcjs.q; exports.isColorChannels = _chunkX6GMJCOGcjs.r; exports.isDark = _chunkX6GMJCOGcjs.s; exports.isHex = _chunkX6GMJCOGcjs.t; exports.isNamedColor = _chunkX6GMJCOGcjs.u; exports.isOpaque = _chunkX6GMJCOGcjs.v; exports.isRgb = _chunkX6GMJCOGcjs.w; exports.isRgbChannel = _chunkX6GMJCOGcjs.x; exports.isTranslucent = _chunkX6GMJCOGcjs.y; exports.isTransparent = _chunkX6GMJCOGcjs.z; exports.linearTosRGB = _chunkX6GMJCOGcjs.A; exports.luminance = _chunkX6GMJCOGcjs.B; exports.namedColorAliases = _chunkX6GMJCOGcjs.C; exports.namedColorChannels = _chunkX6GMJCOGcjs.D; exports.namedColorToHex = _chunkX6GMJCOGcjs.E; exports.namedColors = _chunkX6GMJCOGcjs.e; exports.namedColorsMap = _chunkX6GMJCOGcjs.d; exports.parseColor = _chunkX6GMJCOGcjs.F; exports.parseHex = _chunkX6GMJCOGcjs.G; exports.parseNamedColor = _chunkX6GMJCOGcjs.H; exports.parseRgb = _chunkX6GMJCOGcjs.I; exports.random = _chunkX6GMJCOGcjs.J; exports.randomAlphaChannel = _chunkX6GMJCOGcjs.K; exports.randomRgbChannel = _chunkX6GMJCOGcjs.L; exports.sRGBtoLinear = _chunkX6GMJCOGcjs.M; exports.toAlphaChannel = _chunkX6GMJCOGcjs.N; exports.toColorChannels = _chunkX6GMJCOGcjs.l; exports.toHex = _chunkX6GMJCOGcjs.O; exports.toRgb = _chunkX6GMJCOGcjs.P; exports.toRgbChannel = _chunkX6GMJCOGcjs.Q; exports.type = _chunkX6GMJCOGcjs.R;
2
2
  //# sourceMappingURL=utils.cjs.map