@sarmal/core 0.28.1 → 0.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -383,11 +383,50 @@ function hexToRgb(hex) {
383
383
  const n = parseInt(hex.slice(1), 16);
384
384
  return { r: n >> 16, g: n >> 8 & 255, b: n & 255 };
385
385
  }
386
- var lerpRgb = (a, b, t) => ({
387
- r: Math.round(a.r + (b.r - a.r) * t),
388
- g: Math.round(a.g + (b.g - a.g) * t),
389
- b: Math.round(a.b + (b.b - a.b) * t)
390
- });
386
+ function srgbByteToLinear(c) {
387
+ const n = c / 255;
388
+ return n <= 0.04045 ? n / 12.92 : Math.pow((n + 0.055) / 1.055, 2.4);
389
+ }
390
+ function linearToSrgbByte(c) {
391
+ const v = Math.max(0, Math.min(1, c));
392
+ return Math.round((v <= 31308e-7 ? 12.92 * v : 1.055 * Math.pow(v, 1 / 2.4) - 0.055) * 255);
393
+ }
394
+ function rgbToOklab({ r, g, b }) {
395
+ const rl = srgbByteToLinear(r), gl = srgbByteToLinear(g), bl = srgbByteToLinear(b);
396
+ const l = Math.cbrt(0.4122214708 * rl + 0.5363325363 * gl + 0.0514459929 * bl);
397
+ const m = Math.cbrt(0.2119034982 * rl + 0.6806995451 * gl + 0.1073969566 * bl);
398
+ const s = Math.cbrt(0.0883024619 * rl + 0.2817188376 * gl + 0.6299787005 * bl);
399
+ return {
400
+ L: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
401
+ a: 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
402
+ b: 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s
403
+ };
404
+ }
405
+ function oklabToRgb({ L, a, b }) {
406
+ const l_ = L + 0.3963377774 * a + 0.2158037573 * b;
407
+ const m_ = L - 0.1055613458 * a - 0.0638541728 * b;
408
+ const s_ = L - 0.0894841775 * a - 1.29145603 * b;
409
+ const l = l_ * l_ * l_, m = m_ * m_ * m_, s = s_ * s_ * s_;
410
+ return {
411
+ r: linearToSrgbByte(4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s),
412
+ g: linearToSrgbByte(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s),
413
+ b: linearToSrgbByte(-0.0041960863 * l - 0.7034186147 * m + 1.6076099202 * s)
414
+ };
415
+ }
416
+ var lerpOklab = (a, b, t) => {
417
+ if (t <= 0) {
418
+ return a;
419
+ }
420
+ if (t >= 1) {
421
+ return b;
422
+ }
423
+ const la = rgbToOklab(a), lb = rgbToOklab(b);
424
+ return oklabToRgb({
425
+ L: la.L + (lb.L - la.L) * t,
426
+ a: la.a + (lb.a - la.a) * t,
427
+ b: la.b + (lb.b - la.b) * t
428
+ });
429
+ };
391
430
  function getPaletteColor(palette, position, timeOffset = 0) {
392
431
  if (palette.length === 0) {
393
432
  return { r: 255, g: 255, b: 255 };
@@ -401,7 +440,7 @@ function getPaletteColor(palette, position, timeOffset = 0) {
401
440
  const t = scaled - idx;
402
441
  const c1 = hexToRgb(palette[idx % palette.length]);
403
442
  const c2 = hexToRgb(palette[(idx + 1) % palette.length]);
404
- return lerpRgb(c1, c2, t);
443
+ return lerpOklab(c1, c2, t);
405
444
  }
406
445
  var HEX_COLOR_RE = /^#[0-9a-fA-F]{6}$/;
407
446
  var TRAIL_STYLES = ["default", "gradient-static", "gradient-animated"];