UNPKG

viridis

Version:

Color gradients for data visualization

74 lines (73 loc) 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.rgb2hsl = rgb2hsl; exports.hsl2rgb = hsl2rgb; var SMath = require("smath"); /** * Convert RGB to HSL */ function rgb2hsl(rgb) { var r = SMath.clamp(SMath.normalize(rgb.red, 0, 255), 0, 1); var g = SMath.clamp(SMath.normalize(rgb.green, 0, 255), 0, 1); var b = SMath.clamp(SMath.normalize(rgb.blue, 0, 255), 0, 1); var M = Math.max(r, g, b); var m = Math.min(r, g, b); var C = M - m; var H = 0; if (C !== 0) { if (M === r) { H = (g - b) / C + 6; } else if (M === g) { H = (b - r) / C + 2; } else if (M === b) { H = (r - g) / C + 4; } } var L = (M + m) / 2; var S = 0; if (L > 0 && L < 1) { S = C / (1 - Math.abs(2 * L - 1)); } return { hue: (H % 6) * 60, saturation: S * 100, lightness: L * 100 }; } /** * Convert HSL to RGB */ function hsl2rgb(hsl) { var H = hsl.hue % 360; var S = SMath.clamp(SMath.normalize(hsl.saturation, 0, 100), 0, 1); var L = SMath.clamp(SMath.normalize(hsl.lightness, 0, 100), 0, 1); var C = (1 - Math.abs(2 * L - 1)) * S; var X = C * (1 - Math.abs(((H / 60) % 2) - 1)); var m = L - C / 2; var r = 0; var g = 0; var b = 0; if (H < 60) { r = C; g = X; } else if (H < 120) { r = X; g = C; } else if (H < 180) { g = C; b = X; } else if (H < 240) { g = X; b = C; } else if (H < 300) { b = C; r = X; } else { b = X; r = C; } return { red: (r + m) * 255, green: (g + m) * 255, blue: (b + m) * 255 }; }