UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

143 lines (141 loc) 4.47 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); //#region src/color.ts const IS_HEX_COLOR_REGEX = /^#?([A-F0-9]{6}|[A-F0-9]{3})$/i; const IS_RGB_COLOR_REGEX = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/i; const IS_RGBA_COLOR_REGEX = /^rgba\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+(\.\d+)?)\)$/i; const IS_HSL_COLOR_REGEX = /^hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)$/i; const IS_HSLA_COLOR_REGEX = /^hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%(,\s*\d+(\.\d+)?)*\)$/i; const isValidHexString = (s) => { return !!s.match(IS_HEX_COLOR_REGEX); }; const isValidRgbaString = (s) => { return !!(s.match(IS_RGB_COLOR_REGEX) || s.match(IS_RGBA_COLOR_REGEX)); }; const isValidHslaString = (s) => { return !!s.match(IS_HSL_COLOR_REGEX) || !!s.match(IS_HSLA_COLOR_REGEX); }; const isRGBColor = (c) => { return typeof c !== "string" && "r" in c; }; const isHSLColor = (c) => { return typeof c !== "string" && "h" in c; }; const isTransparent = (c) => { return c === "transparent"; }; const hasAlpha = (color) => { return typeof color !== "string" && color.a != void 0 && color.a < 1; }; const CLEAN_HSLA_REGEX = /[hsla()]/g; const CLEAN_RGBA_REGEX = /[rgba()]/g; const stringToHslaColor = (value) => { if (value === "transparent") return { h: 0, s: 0, l: 0, a: 0 }; if (isValidHexString(value)) return hexStringToHslaColor(value); if (isValidHslaString(value)) return parseHslaString(value); if (isValidRgbaString(value)) return rgbaStringToHslaColor(value); return null; }; const stringToSameTypeColor = (value) => { value = value.trim(); if (isValidHexString(value)) return value.startsWith("#") ? value : `#${value}`; if (isValidRgbaString(value)) return parseRgbaString(value); if (isValidHslaString(value)) return parseHslaString(value); if (isTransparent(value)) return value; return ""; }; const colorToSameTypeString = (color) => { if (typeof color === "string" && (isValidHexString(color) || isTransparent(color))) return color; if (isRGBColor(color)) return rgbaColorToRgbaString(color); if (isHSLColor(color)) return hslaColorToHslaString(color); return ""; }; const hexStringToRgbaColor = (hex) => { hex = hex.replace("#", ""); return { r: parseInt(hex.substring(0, 2), 16), g: parseInt(hex.substring(2, 4), 16), b: parseInt(hex.substring(4, 6), 16) }; }; const rgbaColorToRgbaString = (color) => { const { a, b, g, r } = color; return color.a === 0 ? "transparent" : color.a != void 0 ? `rgba(${r},${g},${b},${a})` : `rgb(${r},${g},${b})`; }; const hslaColorToHslaString = (color) => { const { h, s, l, a } = color; const sPerc = Math.round(s * 100); const lPerc = Math.round(l * 100); return color.a === 0 ? "transparent" : color.a != void 0 ? `hsla(${h},${sPerc}%,${lPerc}%,${a})` : `hsl(${h},${sPerc}%,${lPerc}%)`; }; const hexStringToHslaColor = (hex) => { return rgbaStringToHslaColor(colorToSameTypeString(hexStringToRgbaColor(hex))); }; const rgbaStringToHslaColor = (rgba) => { const rgbaColor = parseRgbaString(rgba); const r = rgbaColor.r / 255; const g = rgbaColor.g / 255; const b = rgbaColor.b / 255; const max = Math.max(r, g, b), min = Math.min(r, g, b); let h, s; const l = (max + min) / 2; if (max == min) h = s = 0; else { const d = max - min; s = l >= .5 ? d / (2 - (max + min)) : d / (max + min); switch (max) { case r: h = (g - b) / d * 60; break; case g: h = ((b - r) / d + 2) * 60; break; default: h = ((r - g) / d + 4) * 60; break; } } const res = { h: Math.round(h), s, l }; const a = rgbaColor.a; if (a != void 0) res.a = a; return res; }; const parseRgbaString = (str) => { const [r, g, b, a] = str.replace(CLEAN_RGBA_REGEX, "").split(",").map((c) => Number.parseFloat(c)); return { r, g, b, a }; }; const parseHslaString = (str) => { const [h, s, l, a] = str.replace(CLEAN_HSLA_REGEX, "").split(",").map((c) => Number.parseFloat(c)); return { h, s: s / 100, l: l / 100, a }; }; //#endregion exports.colorToSameTypeString = colorToSameTypeString; exports.hasAlpha = hasAlpha; exports.hexStringToRgbaColor = hexStringToRgbaColor; exports.isHSLColor = isHSLColor; exports.isRGBColor = isRGBColor; exports.isTransparent = isTransparent; exports.isValidHexString = isValidHexString; exports.isValidHslaString = isValidHslaString; exports.isValidRgbaString = isValidRgbaString; exports.stringToHslaColor = stringToHslaColor; exports.stringToSameTypeColor = stringToSameTypeColor; //# sourceMappingURL=color.js.map