UNPKG

chroma-js

Version:

JavaScript library for color conversions

60 lines (54 loc) 1.67 kB
import Color from '../Color.js'; export default (col1, col2, f, m) => { let xyz0, xyz1; if (m === 'hsl') { xyz0 = col1.hsl(); xyz1 = col2.hsl(); } else if (m === 'hsv') { xyz0 = col1.hsv(); xyz1 = col2.hsv(); } else if (m === 'hcg') { xyz0 = col1.hcg(); xyz1 = col2.hcg(); } else if (m === 'hsi') { xyz0 = col1.hsi(); xyz1 = col2.hsi(); } else if (m === 'lch' || m === 'hcl') { m = 'hcl'; xyz0 = col1.hcl(); xyz1 = col2.hcl(); } else if (m === 'oklch') { xyz0 = col1.oklch().reverse(); xyz1 = col2.oklch().reverse(); } let hue0, hue1, sat0, sat1, lbv0, lbv1; if (m.substr(0, 1) === 'h' || m === 'oklch') { [hue0, sat0, lbv0] = xyz0; [hue1, sat1, lbv1] = xyz1; } let sat, hue, lbv, dh; if (!isNaN(hue0) && !isNaN(hue1)) { // both colors have hue if (hue1 > hue0 && hue1 - hue0 > 180) { dh = hue1 - (hue0 + 360); } else if (hue1 < hue0 && hue0 - hue1 > 180) { dh = hue1 + 360 - hue0; } else { dh = hue1 - hue0; } hue = hue0 + f * dh; } else if (!isNaN(hue0)) { hue = hue0; if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') sat = sat0; } else if (!isNaN(hue1)) { hue = hue1; if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') sat = sat1; } else { hue = Number.NaN; } if (sat === undefined) sat = sat0 + f * (sat1 - sat0); lbv = lbv0 + f * (lbv1 - lbv0); return m === 'oklch' ? new Color([lbv, sat, hue], m) : new Color([hue, sat, lbv], m); };