rybitten
Version:
A color space conversion library for transforming between RGB and RYB colors.
65 lines (64 loc) • 1.5 kB
JavaScript
import { RYB_ITTEN as f } from "./cubes.mjs";
const g = (t) => t * t * (3 - 2 * t), u = (t, n, s) => t + s * (n - t), m = (t, n, s, e, r, o) => u(u(t, n, r), u(s, e, r), o), p = (t, n, s, e, r, o, c, l, b, a, i) => u(
m(t, n, s, e, b, a),
m(r, o, c, l, b, a),
i
);
function k(t, { cube: n = f, easingFn: s = g } = {}) {
const e = s(t[0]), r = s(t[1]), o = s(t[2]), c = n.map((a) => a[0]), l = n.map((a) => a[1]), b = n.map((a) => a[2]);
return [
p(...c, e, r, o),
p(...l, e, r, o),
p(...b, e, r, o)
];
}
function T(t) {
return (t % 360 + 360) % 360;
}
function h(t) {
let [n] = t;
const [, s, e] = t;
n = T(n || 0);
const r = e + s * (e < 0.5 ? e : 1 - e), o = r - (r - e) * 2 * Math.abs(n / 60 % 2 - 1);
let c;
switch (Math.floor(n / 60)) {
case 0:
c = [r, o, 2 * e - r];
break;
case 1:
c = [o, r, 2 * e - r];
break;
case 2:
c = [2 * e - r, r, o];
break;
case 3:
c = [2 * e - r, o, r];
break;
case 4:
c = [o, 2 * e - r, r];
break;
case 5:
c = [r, 2 * e - r, o];
break;
default:
c = [2 * e - r, 2 * e - r, 2 * e - r];
}
return c;
}
function M(t, {
cube: n = f,
easingFn: s = g,
invertLightness: e = !0
} = {}) {
const r = e ? 1 - t[2] : t[2], o = h([t[0], t[1], r]);
return k(o, { cube: n, easingFn: s });
}
export {
m as blerp,
g as easingSmoothstep,
h as hslToRgb,
u as lerp,
k as ryb2rgb,
M as rybHsl2rgb,
p as trilerp
};