adaptive-extender 0.2.5 → 0.2.6

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 (139) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/dist/core/color.js +6 -7
  3. package/dist/core/color.js.map +1 -1
  4. package/dist/core/core/array.d.ts +42 -0
  5. package/dist/core/core/array.js +40 -0
  6. package/dist/core/core/array.js.map +1 -0
  7. package/dist/core/core/boolean.d.ts +14 -0
  8. package/dist/core/core/boolean.js +8 -0
  9. package/dist/core/core/boolean.js.map +1 -0
  10. package/dist/core/core/color.d.ts +369 -0
  11. package/dist/core/core/color.js +540 -0
  12. package/dist/core/core/color.js.map +1 -0
  13. package/dist/core/core/date.d.ts +27 -0
  14. package/dist/core/core/date.js +18 -0
  15. package/dist/core/core/date.js.map +1 -0
  16. package/dist/core/core/error.d.ts +20 -0
  17. package/dist/core/core/error.js +20 -0
  18. package/dist/core/core/error.js.map +1 -0
  19. package/dist/core/core/global.d.ts +14 -0
  20. package/dist/core/core/global.js +13 -0
  21. package/dist/core/core/global.js.map +1 -0
  22. package/dist/core/core/index.d.ts +17 -0
  23. package/dist/core/core/index.js +16 -0
  24. package/dist/core/core/index.js.map +1 -0
  25. package/dist/core/core/math.d.ts +44 -0
  26. package/dist/core/core/math.js +43 -0
  27. package/dist/core/core/math.js.map +1 -0
  28. package/dist/core/core/number.d.ts +59 -0
  29. package/dist/core/core/number.js +51 -0
  30. package/dist/core/core/number.js.map +1 -0
  31. package/dist/core/core/object.d.ts +30 -0
  32. package/dist/core/core/object.js +21 -0
  33. package/dist/core/core/object.js.map +1 -0
  34. package/dist/core/core/primitives.d.ts +10 -0
  35. package/dist/core/core/primitives.js +3 -0
  36. package/dist/core/core/primitives.js.map +1 -0
  37. package/dist/core/core/promise.d.ts +28 -0
  38. package/dist/core/core/promise.js +58 -0
  39. package/dist/core/core/promise.js.map +1 -0
  40. package/dist/core/core/random.d.ts +103 -0
  41. package/dist/core/core/random.js +114 -0
  42. package/dist/core/core/random.js.map +1 -0
  43. package/dist/core/core/string.d.ts +67 -0
  44. package/dist/core/core/string.js +44 -0
  45. package/dist/core/core/string.js.map +1 -0
  46. package/dist/dom/core/array.d.ts +42 -0
  47. package/dist/dom/core/array.js +40 -0
  48. package/dist/dom/core/array.js.map +1 -0
  49. package/dist/dom/core/boolean.d.ts +14 -0
  50. package/dist/dom/core/boolean.js +8 -0
  51. package/dist/dom/core/boolean.js.map +1 -0
  52. package/dist/dom/core/color.d.ts +369 -0
  53. package/dist/dom/core/color.js +540 -0
  54. package/dist/dom/core/color.js.map +1 -0
  55. package/dist/dom/core/date.d.ts +27 -0
  56. package/dist/dom/core/date.js +18 -0
  57. package/dist/dom/core/date.js.map +1 -0
  58. package/dist/dom/core/error.d.ts +20 -0
  59. package/dist/dom/core/error.js +20 -0
  60. package/dist/dom/core/error.js.map +1 -0
  61. package/dist/dom/core/global.d.ts +14 -0
  62. package/dist/dom/core/global.js +13 -0
  63. package/dist/dom/core/global.js.map +1 -0
  64. package/dist/dom/core/index.d.ts +17 -0
  65. package/dist/dom/core/index.js +16 -0
  66. package/dist/dom/core/index.js.map +1 -0
  67. package/dist/dom/core/math.d.ts +44 -0
  68. package/dist/dom/core/math.js +43 -0
  69. package/dist/dom/core/math.js.map +1 -0
  70. package/dist/dom/core/number.d.ts +59 -0
  71. package/dist/dom/core/number.js +51 -0
  72. package/dist/dom/core/number.js.map +1 -0
  73. package/dist/dom/core/object.d.ts +30 -0
  74. package/dist/dom/core/object.js +21 -0
  75. package/dist/dom/core/object.js.map +1 -0
  76. package/dist/dom/core/primitives.d.ts +10 -0
  77. package/dist/dom/core/primitives.js +3 -0
  78. package/dist/dom/core/primitives.js.map +1 -0
  79. package/dist/dom/core/promise.d.ts +28 -0
  80. package/dist/dom/core/promise.js +58 -0
  81. package/dist/dom/core/promise.js.map +1 -0
  82. package/dist/dom/core/random.d.ts +103 -0
  83. package/dist/dom/core/random.js +114 -0
  84. package/dist/dom/core/random.js.map +1 -0
  85. package/dist/dom/core/string.d.ts +67 -0
  86. package/dist/dom/core/string.js +44 -0
  87. package/dist/dom/core/string.js.map +1 -0
  88. package/dist/dom/dom/index.d.ts +8 -0
  89. package/dist/dom/dom/index.js +7 -0
  90. package/dist/dom/dom/index.js.map +1 -0
  91. package/dist/node/core/array.d.ts +42 -0
  92. package/dist/node/core/array.js +40 -0
  93. package/dist/node/core/array.js.map +1 -0
  94. package/dist/node/core/boolean.d.ts +14 -0
  95. package/dist/node/core/boolean.js +8 -0
  96. package/dist/node/core/boolean.js.map +1 -0
  97. package/dist/node/core/color.d.ts +369 -0
  98. package/dist/node/core/color.js +540 -0
  99. package/dist/node/core/color.js.map +1 -0
  100. package/dist/node/core/date.d.ts +27 -0
  101. package/dist/node/core/date.js +18 -0
  102. package/dist/node/core/date.js.map +1 -0
  103. package/dist/node/core/error.d.ts +20 -0
  104. package/dist/node/core/error.js +20 -0
  105. package/dist/node/core/error.js.map +1 -0
  106. package/dist/node/core/global.d.ts +14 -0
  107. package/dist/node/core/global.js +13 -0
  108. package/dist/node/core/global.js.map +1 -0
  109. package/dist/node/core/index.d.ts +17 -0
  110. package/dist/node/core/index.js +16 -0
  111. package/dist/node/core/index.js.map +1 -0
  112. package/dist/node/core/math.d.ts +44 -0
  113. package/dist/node/core/math.js +43 -0
  114. package/dist/node/core/math.js.map +1 -0
  115. package/dist/node/core/number.d.ts +59 -0
  116. package/dist/node/core/number.js +51 -0
  117. package/dist/node/core/number.js.map +1 -0
  118. package/dist/node/core/object.d.ts +30 -0
  119. package/dist/node/core/object.js +21 -0
  120. package/dist/node/core/object.js.map +1 -0
  121. package/dist/node/core/primitives.d.ts +10 -0
  122. package/dist/node/core/primitives.js +3 -0
  123. package/dist/node/core/primitives.js.map +1 -0
  124. package/dist/node/core/promise.d.ts +28 -0
  125. package/dist/node/core/promise.js +58 -0
  126. package/dist/node/core/promise.js.map +1 -0
  127. package/dist/node/core/random.d.ts +103 -0
  128. package/dist/node/core/random.js +114 -0
  129. package/dist/node/core/random.js.map +1 -0
  130. package/dist/node/core/string.d.ts +67 -0
  131. package/dist/node/core/string.js +44 -0
  132. package/dist/node/core/string.js.map +1 -0
  133. package/dist/node/index.d.ts +8 -0
  134. package/dist/node/index.js +7 -0
  135. package/dist/node/index.js.map +1 -0
  136. package/dist/node/node/index.d.ts +8 -0
  137. package/dist/node/node/index.js +7 -0
  138. package/dist/node/node/index.js.map +1 -0
  139. package/package.json +1 -1
@@ -0,0 +1,540 @@
1
+ "use strict";
2
+ import "./number.js";
3
+ import "./string.js";
4
+ const { min, max, trunc, abs } = Math;
5
+ //#region Color formats
6
+ /**
7
+ * Represents available color formats.
8
+ */
9
+ var ColorFormats;
10
+ (function (ColorFormats) {
11
+ ColorFormats["rgb"] = "RGB";
12
+ ColorFormats["hsl"] = "HSL";
13
+ ColorFormats["hex"] = "HEX";
14
+ })(ColorFormats || (ColorFormats = {}));
15
+ /**
16
+ * Represents a color in RGB, HSL, or HEX format with support for alpha channel,
17
+ * conversion between formats, creation from components, and parsing from strings.
18
+ */
19
+ class Color {
20
+ //#region Properties
21
+ #rgb = new Uint8ClampedArray([0, 0, 0]);
22
+ /**
23
+ * Gets the red color component.
24
+ */
25
+ get red() {
26
+ return this.#rgb[0];
27
+ }
28
+ /**
29
+ * Sets the red color component.
30
+ */
31
+ set red(value) {
32
+ if (!Number.isFinite(value))
33
+ return;
34
+ this.#rgb[0] = value;
35
+ Color.#RGBtoHSL(this.#rgb, this.#hsl);
36
+ }
37
+ /**
38
+ * Gets the green color component.
39
+ */
40
+ get green() {
41
+ return this.#rgb[1];
42
+ }
43
+ /**
44
+ * Sets the green color component.
45
+ */
46
+ set green(value) {
47
+ if (!Number.isFinite(value))
48
+ return;
49
+ this.#rgb[1] = value;
50
+ Color.#RGBtoHSL(this.#rgb, this.#hsl);
51
+ }
52
+ /**
53
+ * Gets the blue color component.
54
+ */
55
+ get blue() {
56
+ return this.#rgb[2];
57
+ }
58
+ /**
59
+ * Sets the blue color component.
60
+ */
61
+ set blue(value) {
62
+ if (!Number.isFinite(value))
63
+ return;
64
+ this.#rgb[2] = value;
65
+ Color.#RGBtoHSL(this.#rgb, this.#hsl);
66
+ }
67
+ #hsl = new Uint16Array([0, 0, 0]);
68
+ /**
69
+ * Gets the hue color component.
70
+ */
71
+ get hue() {
72
+ return this.#hsl[0];
73
+ }
74
+ /**
75
+ * Sets the hue color component.
76
+ */
77
+ set hue(value) {
78
+ if (!Number.isFinite(value))
79
+ return;
80
+ this.#hsl[0] = value.modulate(360);
81
+ Color.#HSLtoRGB(this.#hsl, this.#rgb);
82
+ }
83
+ /**
84
+ * Gets the saturation color component.
85
+ */
86
+ get saturation() {
87
+ return this.#hsl[1];
88
+ }
89
+ /**
90
+ * Sets the saturation color component.
91
+ */
92
+ set saturation(value) {
93
+ if (!Number.isFinite(value))
94
+ return;
95
+ this.#hsl[1] = value.clamp(0, 100);
96
+ Color.#HSLtoRGB(this.#hsl, this.#rgb);
97
+ }
98
+ /**
99
+ * Gets the lightness color component.
100
+ */
101
+ get lightness() {
102
+ return this.#hsl[2];
103
+ }
104
+ /**
105
+ * Sets the lightness color component.
106
+ */
107
+ set lightness(value) {
108
+ if (!Number.isFinite(value))
109
+ return;
110
+ this.#hsl[2] = value.clamp(0, 100);
111
+ Color.#HSLtoRGB(this.#hsl, this.#rgb);
112
+ }
113
+ #alpha = 1;
114
+ /**
115
+ * Gets the alpha color component.
116
+ */
117
+ get alpha() {
118
+ return this.#alpha;
119
+ }
120
+ /**
121
+ * Sets the alpha color component.
122
+ */
123
+ set alpha(value) {
124
+ if (!Number.isFinite(value))
125
+ return;
126
+ this.#alpha = value.clamp(0, 1);
127
+ }
128
+ //#endregion
129
+ //#region Builders
130
+ static #patternRGB = /^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i;
131
+ static #patternRGBA = /^rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\S+)\s*\)$/i;
132
+ static #patternHSL = /^hsl\(\s*(\d+)(?:deg)?\s*,\s*(\d+)(?:%)?\s*,\s*(\d+)(?:%)?\s*\)$/i;
133
+ static #patternHSLA = /^hsla\(\s*(\d+)(?:deg)?\s*,\s*(\d+)(?:%)?\s*,\s*(\d+)(?:%)?\s*,\s*(\S+)\s*\)$/i;
134
+ static #patternHEX = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i;
135
+ static #patternHEXA = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i;
136
+ static #variations = Object.values(ColorFormats).flatMap(format => [{ format, deep: false }, { format, deep: true }]);
137
+ constructor(source) {
138
+ if (!(source instanceof Color))
139
+ return;
140
+ this.#rgb = Uint8ClampedArray.from(source.#rgb);
141
+ this.#hsl = Uint16Array.from(source.#hsl);
142
+ this.#alpha = source.#alpha;
143
+ }
144
+ static fromRGB(red, green, blue, alpha = 1) {
145
+ if (!Number.isFinite(red))
146
+ throw new Error(`The red ${red} must be a finite number`);
147
+ if (!Number.isFinite(green))
148
+ throw new Error(`The green ${green} must be a finite number`);
149
+ if (!Number.isFinite(blue))
150
+ throw new Error(`The blue ${blue} must be a finite number`);
151
+ if (!Number.isFinite(alpha))
152
+ throw new Error(`The alpha ${alpha} must be a finite number`);
153
+ const color = new Color();
154
+ color.#rgb[0] = red;
155
+ color.#rgb[1] = green;
156
+ color.#rgb[2] = blue;
157
+ color.#alpha = alpha.clamp(0, 1);
158
+ Color.#RGBtoHSL(color.#rgb, color.#hsl);
159
+ return color;
160
+ }
161
+ static fromHSL(hue, saturation, lightness, alpha = 1) {
162
+ if (!Number.isFinite(hue))
163
+ throw new Error(`The hue ${hue} must be a finite number`);
164
+ if (!Number.isFinite(saturation))
165
+ throw new Error(`The saturation ${saturation} must be a finite number`);
166
+ if (!Number.isFinite(lightness))
167
+ throw new Error(`The lightness ${lightness} must be a finite number`);
168
+ if (!Number.isFinite(alpha))
169
+ throw new Error(`The alpha ${alpha} must be a finite number`);
170
+ const color = new Color();
171
+ hue %= 360;
172
+ if (hue < 0)
173
+ hue += 360;
174
+ color.#hsl[0] = hue;
175
+ color.#hsl[1] = saturation.clamp(0, 100);
176
+ color.#hsl[2] = lightness.clamp(0, 100);
177
+ color.#alpha = alpha.clamp(0, 1);
178
+ Color.#HSLtoRGB(color.#hsl, color.#rgb);
179
+ return color;
180
+ }
181
+ static #parse(string, deep, format) {
182
+ switch (format) {
183
+ case ColorFormats.rgb:
184
+ {
185
+ const regex = (deep ? Color.#patternRGBA : Color.#patternRGB);
186
+ const match = regex.exec(string.trim());
187
+ if (match === null)
188
+ throw new SyntaxError(`Invalid ${format} color '${string}' syntax`);
189
+ const [, red, green, blue, alpha] = match.map(part => Number(part));
190
+ return Color.fromRGB(red, green, blue, deep ? alpha : 1);
191
+ }
192
+ ;
193
+ case ColorFormats.hsl:
194
+ {
195
+ const regex = (deep ? Color.#patternHSLA : Color.#patternHSL);
196
+ const match = regex.exec(string.trim());
197
+ if (match === null)
198
+ throw new SyntaxError(`Invalid ${format} color '${string}' syntax`);
199
+ const [, hue, saturation, lightness, alpha] = match.map(part => Number(part));
200
+ return Color.fromHSL(hue, saturation, lightness, deep ? alpha : 1);
201
+ }
202
+ ;
203
+ case ColorFormats.hex:
204
+ {
205
+ const regex = (deep ? Color.#patternHEXA : Color.#patternHEX);
206
+ const match = regex.exec(string.trim());
207
+ if (match === null)
208
+ throw new SyntaxError(`Invalid ${format} color '${string}' syntax`);
209
+ const [, red, green, blue, alpha] = match.map(part => Number.parseInt(part, 16));
210
+ return Color.fromRGB(red, green, blue, deep ? (alpha / 255) : 1);
211
+ }
212
+ ;
213
+ default: throw new Error(`Invalid '${format}' format for color`);
214
+ }
215
+ }
216
+ static tryParse(string, options = {}) {
217
+ let variations = Color.#variations;
218
+ for (const key in options) {
219
+ const value = Reflect.get(options, key);
220
+ if (value === undefined)
221
+ continue;
222
+ variations = variations.filter(properties => Reflect.get(properties, key) === value);
223
+ }
224
+ for (const { format, deep } of variations) {
225
+ try {
226
+ return Color.#parse(string, deep, format);
227
+ }
228
+ catch {
229
+ continue;
230
+ }
231
+ }
232
+ return null;
233
+ }
234
+ static parse(string, options = {}) {
235
+ const color = Color.tryParse(string, options);
236
+ if (color === null)
237
+ throw new SyntaxError(`Unable to parse '${string}' of any selected variation`);
238
+ return color;
239
+ }
240
+ //#endregion
241
+ //#region Converters
242
+ static #toChannel(offset, hue, saturation, lightness) {
243
+ const sector = (offset + hue) % 12;
244
+ return lightness - (saturation * min(lightness, 1 - lightness)) * min(sector - 3, 9 - sector).clamp(-1, 1);
245
+ }
246
+ /**
247
+ * @param hsl [0 - 360], [0 - 100], [0 - 100]
248
+ * @param rgb [0 - 255], [0 - 255], [0 - 255]
249
+ */
250
+ static #HSLtoRGB(hsl, rgb) {
251
+ const hue = hsl[0] / 30;
252
+ const saturation = hsl[1] / 100;
253
+ const lightness = hsl[2] / 100;
254
+ rgb[0] = Color.#toChannel(0, hue, saturation, lightness) * 255;
255
+ rgb[1] = Color.#toChannel(8, hue, saturation, lightness) * 255;
256
+ rgb[2] = Color.#toChannel(4, hue, saturation, lightness) * 255;
257
+ }
258
+ static #toHue(maximum, red, green, blue, difference) {
259
+ switch (maximum) {
260
+ case red: return (green - blue) / difference + 0;
261
+ case green: return (blue - red) / difference + 2;
262
+ case blue: return (red - green) / difference + 4;
263
+ default: throw new Error(`Invalid '${maximum}' maximum for colors`);
264
+ }
265
+ }
266
+ /**
267
+ * @param rgb [0 - 255], [0 - 255], [0 - 255]
268
+ * @param hsl [0 - 360], [0 - 100], [0 - 100]
269
+ */
270
+ static #RGBtoHSL(rgb, hsl) {
271
+ const red = rgb[0] / 255;
272
+ const green = rgb[1] / 255;
273
+ const blue = rgb[2] / 255;
274
+ const minimum = min(red, green, blue);
275
+ const maximum = max(red, green, blue);
276
+ const difference = maximum - minimum;
277
+ let hue = Color.#toHue(maximum, red, green, blue, difference);
278
+ hue = difference && hue;
279
+ if (hue < 0)
280
+ hue += 6;
281
+ hsl[0] = hue * 60;
282
+ const median = 1 - abs(maximum + minimum - 1);
283
+ hsl[1] = (median && (difference / median)) * 100;
284
+ hsl[2] = (maximum + minimum) / 2 * 100;
285
+ }
286
+ static #toHEXString(byte) {
287
+ return byte.toString(16).padStart(2, "0");
288
+ }
289
+ toString(options = {}) {
290
+ let { format, deep } = options;
291
+ format ??= ColorFormats.rgb;
292
+ deep ??= true;
293
+ switch (format) {
294
+ case ColorFormats.rgb: return `rgb${deep ? "a" : String.empty}(${this.red}, ${this.green}, ${this.blue}${deep ? `, ${this.alpha}` : String.empty})`;
295
+ case ColorFormats.hsl: return `hsl${deep ? "a" : String.empty}(${this.hue}deg, ${this.saturation}%, ${this.lightness}%${deep ? `, ${this.alpha}` : String.empty})`;
296
+ case ColorFormats.hex: return `#${Color.#toHEXString(this.red)}${Color.#toHEXString(this.green)}${Color.#toHEXString(this.blue)}${deep ? Color.#toHEXString(trunc(this.alpha * 255)) : String.empty}`;
297
+ default: throw new Error(`Invalid '${format}' format for color`);
298
+ }
299
+ }
300
+ //#endregion
301
+ //#region Presets
302
+ /**
303
+ * Transparent color preset.
304
+ * @readonly
305
+ */
306
+ static get newTransparent() { return Color.fromRGB(0, 0, 0, 0); }
307
+ ;
308
+ /**
309
+ * Maroon color preset.
310
+ * @readonly
311
+ */
312
+ static get newMaroon() { return Color.fromRGB(128, 0, 0); }
313
+ ;
314
+ /**
315
+ * Red color preset.
316
+ * @readonly
317
+ */
318
+ static get newRed() { return Color.fromRGB(255, 0, 0); }
319
+ ;
320
+ /**
321
+ * Orange color preset.
322
+ * @readonly
323
+ */
324
+ static get newOrange() { return Color.fromRGB(255, 165, 0); }
325
+ ;
326
+ /**
327
+ * Yellow color preset.
328
+ * @readonly
329
+ */
330
+ static get newYellow() { return Color.fromRGB(255, 255, 0); }
331
+ ;
332
+ /**
333
+ * Olive color preset.
334
+ * @readonly
335
+ */
336
+ static get newOlive() { return Color.fromRGB(128, 128, 0); }
337
+ ;
338
+ /**
339
+ * Green color preset.
340
+ * @readonly
341
+ */
342
+ static get newGreen() { return Color.fromRGB(0, 128, 0); }
343
+ ;
344
+ /**
345
+ * Purple color preset.
346
+ * @readonly
347
+ */
348
+ static get newPurple() { return Color.fromRGB(128, 0, 128); }
349
+ ;
350
+ /**
351
+ * Fuchsia color preset.
352
+ * @readonly
353
+ */
354
+ static get newFuchsia() { return Color.fromRGB(255, 0, 255); }
355
+ ;
356
+ /**
357
+ * Lime color preset.
358
+ * @readonly
359
+ */
360
+ static get newLime() { return Color.fromRGB(0, 255, 0); }
361
+ ;
362
+ /**
363
+ * Teal color preset.
364
+ * @readonly
365
+ */
366
+ static get newTeal() { return Color.fromRGB(0, 128, 128); }
367
+ ;
368
+ /**
369
+ * Aqua color preset.
370
+ * @readonly
371
+ */
372
+ static get newAqua() { return Color.fromRGB(0, 255, 255); }
373
+ ;
374
+ /**
375
+ * Blue color preset.
376
+ * @readonly
377
+ */
378
+ static get newBlue() { return Color.fromRGB(0, 0, 255); }
379
+ ;
380
+ /**
381
+ * Navy color preset.
382
+ * @readonly
383
+ */
384
+ static get newNavy() { return Color.fromRGB(0, 0, 128); }
385
+ ;
386
+ /**
387
+ * Black color preset.
388
+ * @readonly
389
+ */
390
+ static get newBlack() { return Color.fromRGB(0, 0, 0); }
391
+ ;
392
+ /**
393
+ * Gray color preset.
394
+ * @readonly
395
+ */
396
+ static get newGray() { return Color.fromRGB(128, 128, 128); }
397
+ ;
398
+ /**
399
+ * Silver color preset.
400
+ * @readonly
401
+ */
402
+ static get newSilver() { return Color.fromRGB(192, 192, 192); }
403
+ ;
404
+ /**
405
+ * White color preset.
406
+ * @readonly
407
+ */
408
+ static get newWhite() { return Color.fromRGB(255, 255, 255); }
409
+ ;
410
+ static mix(first, second, ratio = 0.5) {
411
+ if (!Number.isFinite(ratio))
412
+ throw new Error(`The ratio ${ratio} must be a finite number`);
413
+ ratio = ratio.clamp(0, 1);
414
+ const red = first.red + (second.red - first.red) * ratio;
415
+ const green = first.green + (second.green - first.green) * ratio;
416
+ const blue = first.blue + (second.blue - first.blue) * ratio;
417
+ const alpha = first.alpha + (second.alpha - first.alpha) * ratio;
418
+ return Color.fromRGB(red, green, blue, alpha);
419
+ }
420
+ grayscale(scale = 1) {
421
+ if (!Number.isFinite(scale))
422
+ throw new Error(`The scale ${scale} must be a finite number`);
423
+ scale = scale.clamp(0, 1);
424
+ const { red, green, blue } = this;
425
+ const achromatic = (red + green + blue) / 3;
426
+ this.#rgb[0] = red + (achromatic - red) * scale;
427
+ this.#rgb[1] = green + (achromatic - green) * scale;
428
+ this.#rgb[2] = blue + (achromatic - blue) * scale;
429
+ Color.#RGBtoHSL(this.#rgb, this.#hsl);
430
+ return this;
431
+ }
432
+ redEmphasis(scale = 1) {
433
+ if (!Number.isFinite(scale))
434
+ throw new Error(`The scale ${scale} must be a finite number`);
435
+ scale = scale.clamp(0, 1);
436
+ const { green, blue } = this;
437
+ const average = (green + blue) / 2;
438
+ this.#rgb[1] = green + (average - green) * scale;
439
+ this.#rgb[2] = blue + (average - blue) * scale;
440
+ Color.#RGBtoHSL(this.#rgb, this.#hsl);
441
+ return this;
442
+ }
443
+ greenEmphasis(scale = 1) {
444
+ if (!Number.isFinite(scale))
445
+ throw new Error(`The scale ${scale} must be a finite number`);
446
+ scale = scale.clamp(0, 1);
447
+ const { red, blue } = this;
448
+ const average = (red + blue) / 2;
449
+ this.#rgb[0] = red + (average - red) * scale;
450
+ this.#rgb[2] = blue + (average - blue) * scale;
451
+ Color.#RGBtoHSL(this.#rgb, this.#hsl);
452
+ return this;
453
+ }
454
+ blueEmphasis(scale = 1) {
455
+ if (!Number.isFinite(scale))
456
+ throw new Error(`The scale ${scale} must be a finite number`);
457
+ scale = scale.clamp(0, 1);
458
+ const { red, green } = this;
459
+ const average = (red + green) / 2;
460
+ this.#rgb[0] = red + (average - red) * scale;
461
+ this.#rgb[1] = green + (average - green) * scale;
462
+ Color.#RGBtoHSL(this.#rgb, this.#hsl);
463
+ return this;
464
+ }
465
+ invert(scale = 1) {
466
+ if (!Number.isFinite(scale))
467
+ throw new Error(`The scale ${scale} must be a finite number`);
468
+ scale = scale.clamp(0, 1);
469
+ const { red, green, blue } = this;
470
+ this.#rgb[0] = red + ((255 - red) - red) * scale;
471
+ this.#rgb[1] = green + ((255 - green) - green) * scale;
472
+ this.#rgb[2] = blue + ((255 - blue) - blue) * scale;
473
+ Color.#RGBtoHSL(this.#rgb, this.#hsl);
474
+ return this;
475
+ }
476
+ sepia(scale = 1) {
477
+ if (!Number.isFinite(scale))
478
+ throw new Error(`The scale ${scale} must be a finite number`);
479
+ scale = scale.clamp(0, 1);
480
+ const { red, green, blue } = this;
481
+ const redness = (red * 0.393) + (green * 0.769) + (blue * 0.189);
482
+ const greenness = (red * 0.349) + (green * 0.686) + (blue * 0.168);
483
+ const blueness = (red * 0.272) + (green * 0.534) + (blue * 0.131);
484
+ this.#rgb[0] = red + (redness - red) * scale;
485
+ this.#rgb[1] = green + (greenness - green) * scale;
486
+ this.#rgb[2] = blue + (blueness - blue) * scale;
487
+ Color.#RGBtoHSL(this.#rgb, this.#hsl);
488
+ return this;
489
+ }
490
+ /**
491
+ * Rotates the hue of the current color by the given angle in degrees.
492
+ * @param angle Rotation angle in degrees.
493
+ * @returns The modified current color.
494
+ * @throws {Error} If `angle` is not a finite number.
495
+ */
496
+ rotate(angle) {
497
+ if (!Number.isFinite(angle))
498
+ throw new Error(`The angle ${angle} must be a finite number`);
499
+ this.hue += angle;
500
+ return this;
501
+ }
502
+ /**
503
+ * Sets the saturation of the current color by scale.
504
+ * @param scale Saturation scale [0 - 1].
505
+ * @returns The modified current color.
506
+ * @throws {Error} If `scale` is not a finite number.
507
+ */
508
+ saturate(scale) {
509
+ if (!Number.isFinite(scale))
510
+ throw new Error(`The scale ${scale} must be a finite number`);
511
+ this.saturation = 100 * scale;
512
+ return this;
513
+ }
514
+ /**
515
+ * Sets the lightness of the current color by scale.
516
+ * @param scale Lightness scale [0 - 1].
517
+ * @returns The modified current color.
518
+ * @throws {Error} If `scale` is not a finite number.
519
+ */
520
+ illuminate(scale) {
521
+ if (!Number.isFinite(scale))
522
+ throw new Error(`The scale ${scale} must be a finite number`);
523
+ this.lightness = 100 * scale;
524
+ return this;
525
+ }
526
+ /**
527
+ * Sets the alpha of the current color.
528
+ * @param scale Alpha value [0 - 1].
529
+ * @returns The modified current color.
530
+ * @throws {Error} If `scale` is not a finite number.
531
+ */
532
+ pass(scale) {
533
+ if (!Number.isFinite(scale))
534
+ throw new Error(`The scale ${scale} must be a finite number`);
535
+ this.alpha = scale;
536
+ return this;
537
+ }
538
+ }
539
+ export { ColorFormats, Color };
540
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../../src/core/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import "./global.js";
2
+ declare global {
3
+ interface DateConstructor {
4
+ /**
5
+ * Imports a date from a source.
6
+ * @param source The source value to import.
7
+ * @param name The name of the source value.
8
+ * @returns The imported date value.
9
+ * @throws {TypeError} If the source is not a date.
10
+ */
11
+ import(source: any, name?: string): Date;
12
+ /**
13
+ * Checks whether a given date is invalid.
14
+ * @returns `true` if the value is a `Date` and is invalid; otherwise, `false`.
15
+ */
16
+ isInvalid(date: unknown): boolean;
17
+ }
18
+ interface Date {
19
+ /**
20
+ * Returns the current date unless it is invalid, replacing it with the provided value.
21
+ * @param value The fallback value.
22
+ * @returns The original date or the fallback.
23
+ */
24
+ insteadInvalid<T>(value: T): Date | T;
25
+ }
26
+ }
27
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ import "./global.js";
3
+ Date.import = function (source, name = "[source]") {
4
+ if (!(source instanceof Date))
5
+ throw new TypeError(`Unable to import date from ${name} due its ${typename(source)} type`);
6
+ return source;
7
+ };
8
+ Date.isInvalid = function (date) {
9
+ if (!(date instanceof Date))
10
+ return false;
11
+ return Number.isNaN(date.getTime());
12
+ };
13
+ Date.prototype.insteadInvalid = function (value) {
14
+ if (Date.isInvalid(this))
15
+ return value;
16
+ return this;
17
+ };
18
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../src/core/date.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,aAAa,CAAC;AA6BrB,IAAI,CAAC,MAAM,GAAG,UAAU,MAAW,EAAE,OAAe,UAAU;IAC7D,IAAI,CAAC,CAAC,MAAM,YAAY,IAAI,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,8BAA8B,IAAI,YAAY,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1H,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,IAAI,CAAC,SAAS,GAAG,UAAU,IAAa;IACvC,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,UAAa,KAAQ;IACpD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,IAAI,CAAC;AACb,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ declare global {
2
+ interface ErrorConstructor {
3
+ /**
4
+ * Generates an error object from the provided input.
5
+ * @param reason The reason input.
6
+ */
7
+ from(reason: any): Error;
8
+ }
9
+ interface Error {
10
+ /**
11
+ * Returns a string representation of the Error object.
12
+ * @returns A string representation of the Error object.
13
+ */
14
+ toString(): string;
15
+ }
16
+ }
17
+ declare class ImplementationError extends Error {
18
+ constructor();
19
+ }
20
+ export { ImplementationError };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Error.from = function (reason) {
3
+ if (reason instanceof Error)
4
+ return reason;
5
+ return new Error(reason ?? "Undefined reason");
6
+ };
7
+ Error.prototype.toString = function () {
8
+ let text = this.stack ?? `${this.name}: ${this.message}`;
9
+ return text;
10
+ };
11
+ class ImplementationError extends Error {
12
+ constructor() {
13
+ super("Method not implemented");
14
+ if (new.target !== ImplementationError)
15
+ throw new TypeError("Unable to create an instance of sealed-extended class");
16
+ this.name = "ImplementationError";
17
+ }
18
+ }
19
+ export { ImplementationError };
20
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/core/error.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAoBb,KAAK,CAAC,IAAI,GAAG,UAAU,MAAW;IACjC,IAAI,MAAM,YAAY,KAAK;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,kBAAkB,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG;IAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;IACzD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,mBAAoB,SAAQ,KAAK;IACtC;QACC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAChC,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAmB;YAAE,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;QACrH,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACnC,CAAC;CACD;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}