/* eslint-disable prefer-const */ import { GumRgbToHsl } from '../models'; /** * Converts RGB color value to HSL * @param r Red * @param g Green * @param b Blue */ export const rgbToHsl: GumRgbToHsl = (r, g, b) => { let d, h, l, max, min, s; r /= 255; g /= 255; b /= 255; max = Math.max(r, g, b); min = Math.min(r, g, b); h = 0; s = 0; l = (max + min) / 2; if (max === min) { h = s = 0; } else { d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); switch (max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; } h /= 6; } h = Math.round(h * 360 * 100) / 100; s = Math.round(s * 100 * 100) / 100; l = Math.round(l * 100 * 100) / 100; return [h, s, l] as [number, number, number]; };