{"version":3,"file":"utils.mjs","sources":["../../../../../src/services/color/utils.ts"],"sourcesContent":["import { camelCaseToKebabCase, kebabCaseToCamelCase } from '../../utils/text-case'\n\nimport { setHSLA, shiftHSLA, parseColorToRGB, parseColorToHSL, rgbToString, hslToString, colorToString, type RGBObject, type HSLObject } from '../../utils/color'\n\nexport const isCSSVariable = (strColor: string): boolean => /var\\(--.+\\)/.test(strColor)\nexport const cssVariableName = (colorName: string) => `--va-${camelCaseToKebabCase(colorName)}`\nexport const normalizeColorName = (colorName: string) => kebabCaseToCamelCase(colorName)\n\nexport type ColorInput = string | RGBObject | HSLObject\n\nexport const colorToRgba = (color: string, opacity: number) => {\n  const { r, g, b } = parseColorToRGB(color)\n\n  return rgbToString({ r, g, b, a: opacity })\n}\n\nexport const getColorLightness = (color: ColorInput) => {\n  const { r, g, b } = parseColorToRGB(color)\n  return Math.sqrt(r * r * 0.241 + g * g * 0.691 + b * b * 0.068)\n}\n\nexport const getBoxShadowColor = (color: string, opacity = 0.4) => {\n  return colorToRgba(color, opacity)\n}\n\nexport const getBoxShadowColorFromBg = (background: string, opacity = 0.4) => {\n  return colorToRgba(background, opacity)\n}\n\nexport const getHoverColor = (color: string, opacity = 0.2) => {\n  return colorToRgba(color, opacity)\n}\n\nexport const getFocusColor = (color: string, opacity = 0.3) => {\n  return colorToRgba(color, opacity)\n}\n\nexport const shiftHSLAColor = (color: string | RGBObject | HSLObject, shift: { h?: number; s?: number; l?: number; a?: number }) => {\n  return hslToString(shiftHSLA(parseColorToHSL(color), shift))\n}\n\nexport const setHSLAColor = (color: string | RGBObject | HSLObject, shift: { h?: number; s?: number; l?: number; a?: number }) => {\n  return hslToString(setHSLA(parseColorToHSL(color), shift))\n}\n\n/**\n * This method guesses second color for gradient based on first one.\n * Calculation method should differ for different colors, so we split color circle\n * in zones.\n *\n * @param color\n */\nexport const shiftGradientColor = (color: string): string => {\n  const newColor = parseColorToHSL(color)\n\n  // Gray\n  if (newColor.s < 10) {\n    return shiftHSLAColor(newColor, { h: 2, s: 5, l: 10 })\n  }\n  // Unsaturated (too pale, gray-ish, monotone)\n  // For unsaturated color, hue change does nothing.\n  if (newColor.s < 30) {\n    return shiftHSLAColor(newColor, { s: -14, l: 11 })\n  }\n  // Red\n  if ((newColor.h >= 0 && newColor.h < 44) || (newColor.h >= 285)) {\n    return shiftHSLAColor(newColor, { h: 11, s: 27, l: 8 })\n  }\n  // Yellow\n  if (newColor.h >= 44 && newColor.h < 85) {\n    return shiftHSLAColor(newColor, { h: 3, l: 9 })\n  }\n  // Green\n  if (newColor.h >= 85 && newColor.h < 165) {\n    return shiftHSLAColor(newColor, { h: 16, l: 14 })\n  }\n  // Blue\n  if (newColor.h >= 165 && newColor.h < 285) {\n    return shiftHSLAColor(newColor, { h: -15, s: 3, l: 2 })\n  }\n\n  throw new Error('This method should handle all colors. But it didn\\'t for some reason.')\n}\n\nexport const getGradientBackground = (color: string) => {\n  const colorLeft = shiftGradientColor(color)\n\n  return `linear-gradient(to right, ${colorLeft}, ${colorToString(color)})`\n}\n\nexport const getStateMaskGradientBackground = (color: string, maskColor: string, maskOpacity: number) => {\n  const mask = colorToRgba(maskColor, maskOpacity)\n\n  return `linear-gradient(0deg, ${mask}, ${mask}), ${color}`\n}\n\nexport const applyColors = (color1: string, color2: string) => {\n  const c1 = parseColorToRGB(color1)\n  const c2 = parseColorToRGB(color2)\n  const weight = c2.a\n\n  if (weight === 1) { return rgbToString(c2) }\n  if (weight === 0) { return rgbToString(c1) }\n\n  return rgbToString({\n    r: Math.round((c1.r) * (1 - weight) + (c2.r) * weight),\n    g: Math.round((c1.g) * (1 - weight) + (c2.g) * weight),\n    b: Math.round((c1.b) * (1 - weight) + (c2.b) * weight),\n    a: c1.a,\n  })\n}\n\n/**\n * Returns `true` if color is FULLY transparent\n */\nexport const isColorTransparent = (color: string) => {\n  if (!color) { return false }\n  if (color === 'transparent') { return true }\n\n  return parseColorToRGB(color).a <= 0.1\n}\n\nexport { isColor } from './../../utils/color'\n"],"names":[],"mappings":"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"}