const hue_gray = 230; const hue_brown = 30; const hue_orange = 37; const hue_purple = 280; const hue_pink = 310; const hue_red = 340; const hue_red_shade = 335; const hue_yellow = 57; const hue_green = 130; const hue_green_shade = 145; const hue_sky = 203; const hue_blue = 224; const hue_blue_shade = 235; const hue_blue_shade_2 = 240; const saturation_max = 90; const saturation_normal = 60; const saturation_low = 40; const saturation_min = 13; const lightness_max = 95; const lightness_light = 67; const lightness_mediumlight = 62; const lightness_medium = 50; const lightness_mediumdark = 40; const lightness_dark = 30; const lightness_almostverydark = 25; const lightness_verydark = 20; const lightness_min = 5; /** * Converts an HSL color value to RGB. Conversion formula * adapted from http://en.wikipedia.org/wiki/HSL_color_space. * Assumes h, s, and l are contained in the set [0, 1] and * returns r, g, and b in the set [0, 255]. * * @param Number h The hue * @param Number s The saturation * @param Number l The lightness * @return Array The RGB representation */ function hsl(h: number, s: number, l: number): [number, number, number] { h = h / 360; s = s/100; l = l/100; let r, g, b; if (s == 0) { r = g = b = l; // achromatic } else { const hue2rgb = (p: number, q: number, t: number) => { if (t < 0) t += 1; if (t > 1) t -= 1; if (t < 1/6) return p + (q - p) * 6 * t; if (t < 1/2) return q; if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; return p; } const q = l < 0.5 ? l * (1 + s) : l + s - l * s; const p = 2 * l - q; r = hue2rgb(p, q, h + 1/3); g = hue2rgb(p, q, h); b = hue2rgb(p, q, h - 1/3); } return [ r , g , b ]; } const colors = { TRANSPARENT: [0, 0, 0], BLACK2: [0, 0, 0], BLACK3: [0, 0, 0], BLACK4: [0, 0, 0], WHITE: hsl(hue_gray, saturation_min, lightness_max), LIGHTGRAY: hsl(hue_gray, saturation_min, lightness_light), DARKGRAY: hsl(hue_gray, saturation_min, lightness_dark), BLACK: hsl(hue_gray, saturation_min, lightness_min), ORANGE: hsl(hue_orange, saturation_normal, lightness_medium), TAN: hsl(hue_brown, saturation_low, lightness_light), BROWN: hsl(hue_brown, saturation_low, lightness_mediumdark), DARKBROWN: hsl(hue_brown, saturation_low, lightness_almostverydark), PURPLE: hsl(hue_purple, saturation_normal, lightness_medium), PINK: hsl(hue_pink, saturation_normal, lightness_light), RED: hsl(hue_red, saturation_normal, lightness_medium), DARKRED: hsl(hue_red_shade, saturation_normal, lightness_dark), YELLOW: hsl(hue_yellow, saturation_max, lightness_mediumlight), GREEN: hsl(hue_green, saturation_normal, lightness_medium), DARKGREEN: hsl(hue_green_shade, saturation_normal, lightness_dark), DARKERGREEN: hsl(hue_green_shade, saturation_normal, lightness_verydark), CYAN: hsl(hue_sky, saturation_max, lightness_light), BLUE: hsl(hue_blue, saturation_normal, lightness_medium), DARKBLUE: hsl(hue_blue_shade, saturation_normal, lightness_mediumdark), DARKERBLUE: hsl(hue_blue_shade_2, saturation_normal, lightness_dark), } as const; // const colors = { // TRANSPARENT: [0, 0, 0], // BLACK: [0, 0, 0], // WHITE: [1, 1, 1], // RED: [1, 0, 0], // YELLOW: [1, 1, 0], // GREEN: [0, 1, 0], // BLUE: [0.1, 0.5, 1], // DARKBLUE: [0.05, 0.1, 0.3], // BROWN: [0.6, 0.5, 0.4], // GRAY: [0.5, 0.5, 0.5], // PURPLE: [0.7, 0.1, 0.85], // ORANGE: [0.95, 0.75, 0.25], // CYAN: [0, 0.9, 0.9], // LIGHTGRAY: [0.75, 0.75, 0.75], // REDDISH: [216/255, 59/255, 113/255], // DARKGREEN: [0, 0.6, 0.2], // } as const; export const palette: Array<[number, number, number, number]> = Object.values(colors).map(val => [...val, 1]); export const COLOR = Object.fromEntries(Object.keys(colors).map((name, i) => [name, Number(i)])) as {[key in keyof typeof colors]: number};