UNPKG

rybitten

Version:

A color space conversion library for transforming between RGB and RYB colors.

101 lines (100 loc) 1.84 kB
import { RYB_ITTEN as g } from "./cubes.mjs"; const m = (n) => n * n * (3 - 2 * n), f = (n, r, a) => n + a * (r - n), e = (n, r, a, o, t, s) => f(f(n, r, t), f(a, o, t), s), p = (n, r, a, o, t, s, l, T, i, k, h) => f( e(n, r, a, o, i, k), e(t, s, l, T, i, k), h ); function w(n, { cube: r = g, easingFn: a = m } = {}) { const o = a(n[0]), t = a(n[1]), s = a(n[2]); return [ p( r[0][0], r[1][0], r[2][0], r[3][0], r[4][0], r[5][0], r[6][0], r[7][0], o, t, s ), p( r[0][1], r[1][1], r[2][1], r[3][1], r[4][1], r[5][1], r[6][1], r[7][1], o, t, s ), p( r[0][2], r[1][2], r[2][2], r[3][2], r[4][2], r[5][2], r[6][2], r[7][2], o, t, s ) ]; } function M(n) { return (n % 360 + 360) % 360; } function R(n) { let [r] = n; const [, a, o] = n; r = M(r || 0); const t = o + a * (o < 0.5 ? o : 1 - o), s = t - (t - o) * 2 * Math.abs(r / 60 % 2 - 1); let l; switch (Math.floor(r / 60)) { case 0: l = [t, s, 2 * o - t]; break; case 1: l = [s, t, 2 * o - t]; break; case 2: l = [2 * o - t, t, s]; break; case 3: l = [2 * o - t, s, t]; break; case 4: l = [s, 2 * o - t, t]; break; case 5: l = [t, 2 * o - t, s]; break; default: l = [2 * o - t, 2 * o - t, 2 * o - t]; } return l; } function A(n, { cube: r = g, easingFn: a = m, invertLightness: o = !0 } = {}) { const t = o ? 1 - n[2] : n[2], s = R([n[0], n[1], t]); return w(s, { cube: r, easingFn: a }); } export { e as blerp, m as easingSmoothstep, R as hslToRgb, f as lerp, w as ryb2rgb, A as rybHsl2rgb, p as trilerp };