UNPKG

@uiw/codemirror-extensions-color

Version:
62 lines (60 loc) 1.64 kB
export function toFullHex(color) { if (color.length === 4) { // 3-char hex return ["#" + color[1].repeat(2) + color[2].repeat(2) + color[3].repeat(2), '']; } if (color.length === 5) { // 4-char hex (alpha) return ["#" + color[1].repeat(2) + color[2].repeat(2) + color[3].repeat(2), color[4].repeat(2)]; } if (color.length === 9) { // 8-char hex (alpha) return ["#" + color.slice(1, -2), color.slice(-2)]; } return [color, '']; } /** https://stackoverflow.com/a/5624139/1334703 */ export function rgbToHex(r, g, b) { return '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); } /** https://stackoverflow.com/a/5624139/1334703 */ export function hexToRgb(hex) { var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), b: parseInt(result[3], 16) } : null; } /** https://css-tricks.com/converting-color-spaces-in-javascript/#aa-rgb-to-hsl */ export function RGBToHSL(r, g, b) { r /= 255, g /= 255, b /= 255; var max = Math.max(r, g, b), min = Math.min(r, g, b); var h = 0, s, l = (max + min) / 2; if (max == min) { h = s = 0; // achromatic } else { var 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; break; } h /= 6; } return { h: Math.floor(h * 360), s: Math.floor(s * 100), l: Math.floor(l * 100) }; }