UNPKG

@spellix/magic-color-transformer

Version:

Magic color transform library

79 lines (74 loc) 1.99 kB
'use strict'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const rgb = require('./rgb.js'); const hexRegex = /^#?([\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/i; function isHex(color) { return hexRegex.test(color); } function parseHex(color) { let value; let alpha = 1; const match = hexRegex.exec(color); if (!match) throw new Error("Invalid HEX color format."); if (match[1].length === 3) { value = match[1].split("").map((c) => c + c).join(""); } else if (match[1].length === 6) { value = match[1]; } else { value = match[1].slice(0, 6); alpha = Number.parseInt(match[1].slice(6, 8), 16) / 255; } return { values: `#${value}`, alpha }; } function hexToRgb(color) { color = color.slice(1); const r = Number.parseInt(color.slice(0, 2), 16); const g = Number.parseInt(color.slice(2, 4), 16); const b = Number.parseInt(color.slice(4, 6), 16); return [r, g, b]; } function hexToHsl(color) { const [r, g, b] = hexToRgb(color).map((i) => i / 255); const max = Math.max(r, g, b); const min = Math.min(r, g, b); let h = 0; let s = 0; const l = (max + min) / 2; if (max !== min) { const delta = max - min; s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min); switch (max) { case r: { h = (g - b) / delta + (g < b ? 6 : 0); break; } case g: { h = (b - r) / delta + 2; break; } case b: { h = (r - g) / delta + 4; break; } } h *= 60; } return [h, s * 100, l * 100]; } function hexToHsb(color) { return rgb.rgbToHsb(hexToRgb(color)); } function hexToLab(color) { return rgb.rgbToLab(hexToRgb(color)); } function toHex(c) { const hex = Math.round(c).toString(16); return hex.length === 1 ? `0${hex}` : hex; } exports.hexToHsb = hexToHsb; exports.hexToHsl = hexToHsl; exports.hexToLab = hexToLab; exports.hexToRgb = hexToRgb; exports.isHex = isHex; exports.parseHex = parseHex; exports.toHex = toHex;