Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x | import { decomposeColor } from "@mui/system"; // Slightly adapted from https://github.com/Qix-/color-convert // Using HSL (hue-saturation-lightness) values makes it easy to interpolate between colors in a natural way export const colorStringToHsl = (colorString: string) => { let rgb: [number, number, number] | [number, number, number, number] = [ 0, 0, 0, ]; try { const { values } = decomposeColor(colorString); rgb = values as [number, number, number]; } catch { console.warn(`Tried to decompose invalid color string '${colorString}'`); } const r = rgb[0] / 255; const g = rgb[1] / 255; const b = rgb[2] / 255; const min = Math.min(r, g, b); const max = Math.max(r, g, b); const delta = max - min; let h = 0; let s = 0; switch (max) { case min: { h = 0; break; } case r: { h = (g - b) / delta; break; } case g: { h = 2 + (b - r) / delta; break; } case b: { h = 4 + (r - g) / delta; break; } } h = Math.min(h * 60, 360); Iif (h < 0) { h += 360; } const l = (min + max) / 2; Iif (max === min) { s = 0; } else if (l <= 0.5) { s = delta / (max + min); } else E{ s = delta / (2 - max - min); } return [h, s * 100, l * 100]; }; |