UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.

214 lines (213 loc) 8.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertHex8ToHsla = exports.convertHslaToHex8 = exports.convertHex8ToRgba = exports.convertRgbaToHsla = exports.convertHslaToRgba = exports.convertRgbaToHex8 = exports.convertRgbToRgba = exports.convertHexToRgb = exports.convertRgbToHex = exports.convertHexToHsl = exports.convertHslToHex = exports.convertRgbToHsl = exports.convertHslToRgb = void 0; exports.convertColorCode = convertColorCode; const guards_1 = require("./guards"); const helpers_1 = require("./helpers"); const utils_1 = require("./utils"); const convertHslToRgb = (h, s, l) => { s /= 100; l /= 100; const c = (1 - Math.abs(2 * l - 1)) * s; const x = c * (1 - Math.abs(((h / 60) % 2) - 1)); const m = l - c / 2; let r = 0, g = 0, b = 0; if (h >= 0 && h < 60) [r, g] = [c, x]; else if (h >= 60 && h < 120) [r, g] = [x, c]; else if (h >= 120 && h < 180) [g, b] = [c, x]; else if (h >= 180 && h < 240) [g, b] = [x, c]; else if (h >= 240 && h < 300) [r, b] = [x, c]; else if (h >= 300 && h < 360) [r, b] = [c, x]; r = Math.round((r + m) * 255); g = Math.round((g + m) * 255); b = Math.round((b + m) * 255); return `rgb(${r}, ${g}, ${b})`; }; exports.convertHslToRgb = convertHslToRgb; const convertRgbToHsl = (r, g, b) => { r /= 255; g /= 255; b /= 255; const max = Math.max(r, g, b); const min = Math.min(r, g, b); let h = 0, s = 0; const l = (max + min) / 2; if (max !== min) { const diff = max - min; s = l > 0.5 ? diff / (2 - max - min) : diff / (max + min); switch (max) { case r: h = (g - b) / diff + (g < b ? 6 : 0); break; case g: h = (b - r) / diff + 2; break; case b: h = (r - g) / diff + 4; break; } h *= 60; } return `hsl(${Math.round(h)}, ${Number((s * 100).toFixed(2))}%, ${Number((l * 100).toFixed(2))}%)`; }; exports.convertRgbToHsl = convertRgbToHsl; const convertHslToHex = (h, s, l) => { const rgb = (0, exports.convertHslToRgb)(h, s, l).match(/\d+/g)?.map(Number) ?? [0, 0, 0]; return (0, exports.convertRgbToHex)(rgb[0], rgb[1], rgb[2]); }; exports.convertHslToHex = convertHslToHex; const convertHexToHsl = (hex) => { let newHex = hex?.trim()?.replace('#', ''); if (newHex?.length === 3) { newHex = newHex ?.split('') ?.map((char) => char + char) ?.join(''); } const r = parseInt(newHex.slice(0, 2), 16); const g = parseInt(newHex.slice(2, 4), 16); const b = parseInt(newHex.slice(4, 6), 16); return (0, exports.convertRgbToHsl)(r, g, b); }; exports.convertHexToHsl = convertHexToHsl; const convertRgbToHex = (r, g, b) => { const hex = [r, g, b] ?.map((v) => v.toString(16).padStart(2, '0')) ?.join('') ?.toUpperCase(); return `#${hex}`; }; exports.convertRgbToHex = convertRgbToHex; const convertHexToRgb = (hex) => { let newHex = hex?.trim()?.replace('#', ''); if (newHex?.length === 3) { newHex = newHex ?.split('') ?.map((char) => char + char) ?.join(''); } const r = parseInt(newHex.slice(0, 2), 16); const g = parseInt(newHex.slice(2, 4), 16); const b = parseInt(newHex.slice(4, 6), 16); return `rgb(${r}, ${g}, ${b})`; }; exports.convertHexToRgb = convertHexToRgb; const convertRgbToRgba = (r, g, b, a = 1) => { let newAlpha = a; if (!(0, helpers_1._isValidAlpha)(a)) { newAlpha = 1; console.warn(`Alpha value must be between 0-1, ${a} converted to 1!`); } return `rgba(${r}, ${g}, ${b}, ${parseFloat(newAlpha.toFixed(1))})`; }; exports.convertRgbToRgba = convertRgbToRgba; const convertRgbaToHex8 = (r, g, b, a = 1) => { let newAlpha = a; if (!(0, helpers_1._isValidAlpha)(a)) { newAlpha = 1; console.warn(`Alpha value must be between 0-1, ${a} converted to 1!`); } const alphaHex = (0, utils_1.percentToHex)(Math.round(newAlpha * 100)); const hex = (0, exports.convertRgbToHex)(r, g, b); return `${hex}${alphaHex}`; }; exports.convertRgbaToHex8 = convertRgbaToHex8; const convertHslaToRgba = (h, s, l, a = 1) => { let newAlpha = a; if (!(0, helpers_1._isValidAlpha)(a)) { newAlpha = 1; console.warn(`Alpha value must be between 0-1, ${a} converted to 1!`); } const rgb = (0, exports.convertHslToRgb)(h, s, l); const [r, g, b] = (0, utils_1.extractSolidColorValues)(rgb); return (0, exports.convertRgbToRgba)(r, g, b, parseFloat(newAlpha.toFixed(1))); }; exports.convertHslaToRgba = convertHslaToRgba; const convertRgbaToHsla = (r, g, b, a = 1) => { let newAlpha = a; if (!(0, helpers_1._isValidAlpha)(a)) { newAlpha = 1; console.warn(`Alpha value must be between 0-1, ${a} converted to 1!`); } const hsl = (0, exports.convertRgbToHsl)(r, g, b); const [h, s, l] = (0, utils_1.extractSolidColorValues)(hsl); return `hsla(${h}, ${s}%, ${l}%, ${parseFloat(newAlpha.toFixed(1))})`; }; exports.convertRgbaToHsla = convertRgbaToHsla; const convertHex8ToRgba = (hex8) => { const hex = hex8?.trim()?.replace('#', ''); const r = parseInt(hex.slice(0, 2), 16); const g = parseInt(hex.slice(2, 4), 16); const b = parseInt(hex.slice(4, 6), 16); const a = parseInt(hex.slice(6, 8), 16) / 255; return `rgba(${r}, ${g}, ${b}, ${parseFloat(a.toFixed(1))})`; }; exports.convertHex8ToRgba = convertHex8ToRgba; const convertHslaToHex8 = (h, s, l, a = 1) => { let newAlpha = a; if (!(0, helpers_1._isValidAlpha)(a)) { newAlpha = 1; console.warn(`Alpha value must be between 0-1, ${a} converted to 1!`); } const alphaHex = (0, utils_1.percentToHex)(Math.round(newAlpha * 100)); const hex = (0, exports.convertHslToHex)(h, s, l); return `${hex}${alphaHex}`; }; exports.convertHslaToHex8 = convertHslaToHex8; const convertHex8ToHsla = (hex8) => { const rgba = (0, exports.convertHex8ToRgba)(hex8); return (0, exports.convertRgbaToHsla)(...(0, utils_1.extractAlphaColorValues)(rgba)); }; exports.convertHex8ToHsla = convertHex8ToHsla; function convertColorCode(color) { const trimmedColor = color?.trim(); if ((0, guards_1.isHex6)(trimmedColor)) { return { rgb: (0, exports.convertHexToRgb)(trimmedColor), hsl: (0, exports.convertHexToHsl)(trimmedColor), }; } if ((0, guards_1.isRGB)(trimmedColor)) { const rgbValues = (0, utils_1.extractSolidColorValues)(trimmedColor); return { hex: (0, exports.convertRgbToHex)(...rgbValues), hsl: (0, exports.convertRgbToHsl)(...rgbValues), }; } if ((0, guards_1.isHSL)(trimmedColor)) { const hslValues = (0, utils_1.extractSolidColorValues)(trimmedColor); return { hex: (0, exports.convertHslToHex)(...hslValues), rgb: (0, exports.convertHslToRgb)(...hslValues), }; } if ((0, guards_1.isHex8)(trimmedColor)) { return { rgba: (0, exports.convertHex8ToRgba)(trimmedColor), hsla: (0, exports.convertHex8ToHsla)(trimmedColor), }; } if ((0, guards_1.isRGBA)(trimmedColor)) { const rgbaValues = (0, utils_1.extractAlphaColorValues)(trimmedColor); return { hex8: (0, exports.convertRgbaToHex8)(...rgbaValues), hsla: (0, exports.convertRgbaToHsla)(...rgbaValues), }; } if ((0, guards_1.isHSLA)(trimmedColor)) { const hslaValues = (0, utils_1.extractAlphaColorValues)(trimmedColor); return { hex8: (0, exports.convertHslaToHex8)(...hslaValues), rgba: (0, exports.convertHslaToRgba)(...hslaValues), }; } throw new TypeError(`${color} is not a valid color!`, { cause: 'Unrecognized Color Format', }); }