UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

182 lines (181 loc) • 5.76 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/color.ts var color_exports = {}; __export(color_exports, { colorToSameTypeString: () => colorToSameTypeString, hasAlpha: () => hasAlpha, hexStringToRgbaColor: () => hexStringToRgbaColor, isHSLColor: () => isHSLColor, isRGBColor: () => isRGBColor, isTransparent: () => isTransparent, isValidHexString: () => isValidHexString, isValidHslaString: () => isValidHslaString, isValidRgbaString: () => isValidRgbaString, stringToHslaColor: () => stringToHslaColor, stringToSameTypeColor: () => stringToSameTypeColor }); module.exports = __toCommonJS(color_exports); var IS_HEX_COLOR_REGEX = /^#?([A-F0-9]{6}|[A-F0-9]{3})$/i; var IS_RGB_COLOR_REGEX = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/i; var IS_RGBA_COLOR_REGEX = /^rgba\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+(\.\d+)?)\)$/i; var IS_HSL_COLOR_REGEX = /^hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)$/i; var IS_HSLA_COLOR_REGEX = /^hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%(,\s*\d+(\.\d+)?)*\)$/i; var isValidHexString = (s) => { return !!s.match(IS_HEX_COLOR_REGEX); }; var isValidRgbaString = (s) => { return !!(s.match(IS_RGB_COLOR_REGEX) || s.match(IS_RGBA_COLOR_REGEX)); }; var isValidHslaString = (s) => { return !!s.match(IS_HSL_COLOR_REGEX) || !!s.match(IS_HSLA_COLOR_REGEX); }; var isRGBColor = (c) => { return typeof c !== "string" && "r" in c; }; var isHSLColor = (c) => { return typeof c !== "string" && "h" in c; }; var isTransparent = (c) => { return c === "transparent"; }; var hasAlpha = (color) => { return typeof color !== "string" && color.a != void 0 && color.a < 1; }; var CLEAN_HSLA_REGEX = /[hsla()]/g; var CLEAN_RGBA_REGEX = /[rgba()]/g; var 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; }; var 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 ""; }; var 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 ""; }; var hexStringToRgbaColor = (hex) => { hex = hex.replace("#", ""); const r = parseInt(hex.substring(0, 2), 16); const g = parseInt(hex.substring(2, 4), 16); const b = parseInt(hex.substring(4, 6), 16); return { r, g, b }; }; var 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})`; }; var 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}%)`; }; var hexStringToHslaColor = (hex) => { const rgbaString = colorToSameTypeString(hexStringToRgbaColor(hex)); return rgbaStringToHslaColor(rgbaString); }; var 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 >= 0.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; }; var parseRgbaString = (str) => { const [r, g, b, a] = str.replace(CLEAN_RGBA_REGEX, "").split(",").map((c) => Number.parseFloat(c)); return { r, g, b, a }; }; var 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 }; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { colorToSameTypeString, hasAlpha, hexStringToRgbaColor, isHSLColor, isRGBColor, isTransparent, isValidHexString, isValidHslaString, isValidRgbaString, stringToHslaColor, stringToSameTypeColor }); //# sourceMappingURL=color.js.map