{"version":3,"file":"color.mjs","sources":["../../../../packages/utils/color.ts"],"sourcesContent":["import { unref } from 'vue'\nimport {\n  hexFullRE,\n  hexShorthandRE,\n  leadingHashRE,\n  rgbNumberRE,\n  rgbRE,\n  vuesaxColors,\n} from '@vuesax-alpha/constants'\nimport { debugWarn } from './error'\nimport type { MaybeRef } from './typescript'\nimport type { VuesaxColor } from '@vuesax-alpha/constants'\n\nexport const getCssVariable = (el: HTMLElement, property: string) => {\n  return getComputedStyle(el).getPropertyValue(property)\n}\n\nexport const isColorDark = (color?: string | boolean): boolean => {\n  if (color === undefined || color === false) return false\n  return color === 'dark' || color === true\n}\n\nexport const isVsColor = (color: string): boolean =>\n  vuesaxColors.includes(color as any)\n\n/**\n * #eee -> length hex shorthand, shorthand with alpha, classic, hex alpha\n */\nexport const isHexColor = (color: string) =>\n  leadingHashRE.test(color) && [4, 7, 5, 9].includes(color.length)\n\nexport const isRgbColor = (color: string) => rgbRE.test(color)\n\nexport const isRGBNumbers = (color: string) => rgbNumberRE.test(color)\n\nexport const hexToRgb = (color: string) => {\n  color = color.replace(\n    hexShorthandRE,\n    (_, r: string, g: string, b: string) => r + r + g + g + b + b\n  )\n  const res = hexFullRE.exec(color)\n\n  return res\n    ? {\n        r: Number.parseInt(res[1], 16),\n        g: Number.parseInt(res[2], 16),\n        b: Number.parseInt(res[3], 16),\n      }\n    : null\n}\n\nexport const setColor = (\n  colorName: string,\n  color: string,\n  el: HTMLElement,\n  addClass?: boolean,\n  namespace = 'vs'\n) => {\n  let newColor\n  if (color == 'dark' && el) {\n    if (addClass) {\n      el.classList.add(`${namespace}-component-dark`)\n    }\n  }\n  if (isRgbColor(color)) {\n    const arrayColor = color.replace(/[rgba()]/g, '').split(',')\n    newColor = `${arrayColor[0]},${arrayColor[1]},${arrayColor[2]}`\n    setCssVar(colorName, newColor, el)\n    if (addClass) {\n      el.classList.add(`${namespace}-change-color`)\n    }\n  } else if (isHexColor(color)) {\n    const rgb = hexToRgb(color)\n    newColor = `${rgb!.r},${rgb!.g},${rgb!.b}`\n    setCssVar(colorName, newColor, el)\n    if (addClass) {\n      el.classList.add(`${namespace}-change-color`)\n    }\n  } else if (isVsColor(color)) {\n    const style = window.getComputedStyle(document.body)\n    newColor = style.getPropertyValue(`--${namespace}-${color}`)\n    setCssVar(colorName, newColor, el)\n    if (addClass) {\n      el.classList.add(`${namespace}-change-color`)\n    }\n  } else if (isRGBNumbers(color)) {\n    setCssVar(colorName, color, el)\n    if (addClass) {\n      el.classList.add(`${namespace}-change-color`)\n    }\n  }\n}\n\n/**\n * accept Vuesax's color, hex color, rgb color\n * @param color string\n */\nexport const acceptColor = (color: string) => {\n  const isValid = isVsColor(color) || isHexColor(color) || isRgbColor(color)\n\n  if (isValid) return true\n  debugWarn(\n    'Invalid Color',\n    'Vuesax only accepts colors like hex, rgb, rgba or rgb number'\n  )\n  return false\n}\n\n/**\n * Convert color to rgb number, accept Vuesax's color, hex color, rgb color\n *\n * e.g 'rgb(23,34,34)' -> '23, 34, 34'\n */\nexport const getVsColor = (\n  colorRef: MaybeRef<string | undefined>,\n  namespace = 'vs'\n): string => {\n  const color = unref(colorRef)\n  if (!color) return ''\n\n  const isRGB = rgbRE.test(color)\n  const isRGBNumbers = rgbNumberRE.test(color)\n  const isHEX = leadingHashRE.test(color)\n\n  let newColor = ''\n\n  if (isRGB) {\n    const arrayColor = color.replace(/[rgba()]/g, '').split(',')\n    newColor = `${arrayColor[0]}, ${arrayColor[1]}, ${arrayColor[2]}`\n  } else if (isHEX) {\n    const rgb = hexToRgb(color)\n    newColor = `${rgb?.r}, ${rgb?.g}, ${rgb?.b}`\n  } else if (isVsColor(color as VuesaxColor)) {\n    newColor = `var(--${namespace}-${color})`\n  } else if (isRGBNumbers) {\n    newColor = color\n  }\n  return newColor\n}\n\n/**\n * @param propertyName The name of the property\n * @param value The value of the property\n * @param el The element to set the property. Default document.documentElement\n * @param namespace The namespace of vs app. Default'vs'\n */\nexport const setCssVar = (\n  propertyName: string,\n  value: string,\n  el?: HTMLElement,\n  namespace = 'vs'\n) => {\n  if (!el && document?.documentElement) {\n    document.documentElement.style.setProperty(\n      `--${namespace}-${propertyName}`,\n      value\n    )\n  } else {\n    if (el?.nodeName !== '#comment') {\n      el?.style.setProperty(`--${namespace}-${propertyName}`, value)\n    }\n  }\n}\n"],"names":["isRGBNumbers"],"mappings":"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"}