| export const RGB2Hex = (r: number, g: number, b: number) => { | 
|   let _r = Math.round(r).toString(16); | 
|   let _g = Math.round(g).toString(16); | 
|   let _b = Math.round(b).toString(16); | 
|   | 
|   if (_r.length === 1) _r = '0' + _r; | 
|   if (_g.length === 1) _g = '0' + _g; | 
|   if (_b.length === 1) _b = '0' + _b; | 
|   | 
|   return '#' + _r + _g + _b; | 
| }; | 
|   | 
| export const RGBA2HexA = (r: number, g: number, b: number, a = 1) => { | 
|   const hex = RGB2Hex(r, g, b); | 
|   | 
|   let _a = Math.round((a as number) * 255).toString(16); | 
|   if (_a.length === 1) _a = '0' + _a; | 
|   | 
|   return hex + _a; | 
| }; | 
|   | 
| export const RGB2HSL = (r: number, g: number, b: number) => { | 
|   r /= 255; | 
|   g /= 255; | 
|   b /= 255; | 
|   | 
|   const minVal = Math.min(r, g, b); | 
|   const maxVal = Math.max(r, g, b); | 
|   const delta = maxVal - minVal; | 
|   | 
|   let h = 0; | 
|   let s = 0; | 
|   const l = maxVal; | 
|   if (delta === 0) { | 
|     h = s = 0; | 
|   } else { | 
|     s = delta / maxVal; | 
|     const dr = ((maxVal - r) / 6 + delta / 2) / delta; | 
|     const dg = ((maxVal - g) / 6 + delta / 2) / delta; | 
|     const db = ((maxVal - b) / 6 + delta / 2) / delta; | 
|   | 
|     if (r === maxVal) { | 
|       h = db - dg; | 
|     } else if (g === maxVal) { | 
|       h = 1 / 3 + dr - db; | 
|     } else if (b === maxVal) { | 
|       h = 2 / 3 + dg - dr; | 
|     } | 
|   | 
|     if (h < 0) { | 
|       h += 1; | 
|     } else if (h > 1) { | 
|       h -= 1; | 
|     } | 
|   } | 
|   | 
|   return [h * 360, s * 100, l * 100]; | 
| }; | 
|   | 
| export const RGBA2HSLA = (r: number, g: number, b: number, a = 1) => [...RGB2HSL(r, g, b), a]; | 
|   | 
| export function HSL2RGB(h: number, s: number, l: number) { | 
|   h = (h / 360) * 6; | 
|   s /= 100; | 
|   l /= 100; | 
|   | 
|   const i = Math.floor(h); | 
|   | 
|   const f = h - i; | 
|   const p = l * (1 - s); | 
|   const q = l * (1 - f * s); | 
|   const t = l * (1 - (1 - f) * s); | 
|   | 
|   const mod = i % 6; | 
|   const r = [l, q, p, p, t, l][mod]; | 
|   const g = [t, l, l, q, p, p][mod]; | 
|   const b = [p, p, t, l, l, q][mod]; | 
|   | 
|   return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; | 
| } | 
|   | 
| export const HSLA2RGBA = (h: number, s: number, l: number, a = 1) => [...HSL2RGB(h, s, l), a]; | 
|   | 
| export const HSL2Hex = (h: number, s: number, l: number) => { | 
|   const [r, g, b] = HSL2RGB(h, s, l); | 
|   return RGB2Hex(r, g, b); | 
| }; | 
|   | 
| export const HSLA2HexA = (h: number, s: number, l: number, a = 1) => { | 
|   const hex = HSL2Hex(h, s, l); | 
|   return `${hex}${a === 0 ? '00' : Math.round(a * 255).toString(16)}`; | 
| }; | 
|   | 
| export const hex2RGB = (hex: string) => { | 
|   hex = hex.slice(0, 7); | 
|   | 
|   let r = 0; | 
|   let g = 0; | 
|   let b = 0; | 
|   | 
|   if (hex.length == 4) { | 
|     // 3 digits | 
|     r = Number('0x' + hex[1] + hex[1]); | 
|     g = Number('0x' + hex[2] + hex[2]); | 
|     b = Number('0x' + hex[3] + hex[3]); | 
|   } else if (hex.length == 7) { | 
|     // 6 digits | 
|     r = Number('0x' + hex[1] + hex[2]); | 
|     g = Number('0x' + hex[3] + hex[4]); | 
|     b = Number('0x' + hex[5] + hex[6]); | 
|   } | 
|   | 
|   return [r, g, b]; | 
| }; | 
|   | 
| export const hexA2RGBA = (hexA: string) => { | 
|   const rgb = hex2RGB(hexA); | 
|   const a = Number('0x' + hexA[7] + hexA[8]); | 
|   return [...rgb, Number((a / 255).toFixed(2))]; | 
| }; | 
|   | 
| export const hex2HSL = (hex: string) => { | 
|   const [r, g, b] = hex2RGB(hex); | 
|   return RGB2HSL(r, g, b); | 
| }; | 
|   | 
| export const hexA2HSLA = (hexA: string) => { | 
|   const [r, g, b, a] = hexA2RGBA(hexA); | 
|   return RGBA2HSLA(r, g, b, a); | 
| }; |