{"version":3,"file":"colorUtils.mjs","names":["APCAcontrast","consoleWarn","chunk","has","padEnd","CIELAB","sRGB","isCssColor","color","test","isParsableColor","cssColorRe","mappers","rgb","r","g","b","a","rgba","hsl","h","s","l","HSLtoRGB","hsla","hsv","v","HSVtoRGB","hsva","parseColor","isNaN","groups","match","fn","values","realValues","split","map","endsWith","includes","parseFloat","hex","startsWith","slice","length","char","join","int","parseInt","HexToRGB","HSLtoHSV","TypeError","String","constructor","name","RGBToInt","classToHex","colors","currentTheme","colorName","colorModifier","toString","trim","replace","hexColor","base","f","n","k","Math","max","min","round","RGBtoHSV","HSVtoHSL","sprime","RGBtoCSS","_ref","undefined","HSVtoCSS","toHex","substr","toUpperCase","RGBtoHex","_ref2","parseHex","c","HexToHSV","HSVtoHex","x","parseGradient","gradient","Object","lighten","value","amount","lab","fromXYZ","toXYZ","darken","getLuma","getContrast","first","second","l1","l2","light","dark","getForeground","blackContrast","abs","whiteContrast"],"sources":["../../src/util/colorUtils.ts"],"sourcesContent":["// Utilities\nimport { APCAcontrast } from './color/APCA'\nimport { consoleWarn } from './console'\nimport { chunk, has, padEnd } from './helpers'\nimport * as CIELAB from '@/util/color/transformCIELAB'\nimport * as sRGB from '@/util/color/transformSRGB'\n\n// Types\nimport type { Colors } from '@/composables/theme'\n\nexport type XYZ = [number, number, number]\nexport type LAB = [number, number, number]\nexport type HSV = { h: number, s: number, v: number, a?: number }\nexport type RGB = { r: number, g: number, b: number, a?: number }\nexport type HSL = { h: number, s: number, l: number, a?: number }\nexport type Hex = string & { __hexBrand: never }\nexport type Color = string | number | HSV | RGB | HSL\n\nexport function isCssColor (color?: string | null | false): boolean {\n return !!color && /^(#|var\\(--|(rgb|hsl)a?\\()/.test(color)\n}\n\nexport function isParsableColor (color: string): boolean {\n return isCssColor(color) && !/^((rgb|hsl)a?\\()?var\\(--/.test(color)\n}\n\nconst cssColorRe = /^(?(?:rgb|hsl)a?)\\((?.+)\\)/\nconst mappers = {\n rgb: (r: number, g: number, b: number, a?: number) => ({ r, g, b, a }),\n rgba: (r: number, g: number, b: number, a?: number) => ({ r, g, b, a }),\n hsl: (h: number, s: number, l: number, a?: number) => HSLtoRGB({ h, s, l, a }),\n hsla: (h: number, s: number, l: number, a?: number) => HSLtoRGB({ h, s, l, a }),\n hsv: (h: number, s: number, v: number, a?: number) => HSVtoRGB({ h, s, v, a }),\n hsva: (h: number, s: number, v: number, a?: number) => HSVtoRGB({ h, s, v, a }),\n}\n\nexport function parseColor (color: Color): RGB {\n if (typeof color === 'number') {\n if (isNaN(color) || color < 0 || color > 0xFFFFFF) { // int can't have opacity\n consoleWarn(`'${color}' is not a valid hex color`)\n }\n\n return {\n r: (color & 0xFF0000) >> 16,\n g: (color & 0xFF00) >> 8,\n b: (color & 0xFF),\n }\n } else if (typeof color === 'string' && cssColorRe.test(color)) {\n const { groups } = color.match(cssColorRe)!\n const { fn, values } = groups as { fn: keyof typeof mappers, values: string }\n const realValues = values.split(/,\\s*/)\n .map(v => {\n if (v.endsWith('%') && ['hsl', 'hsla', 'hsv', 'hsva'].includes(fn)) {\n return parseFloat(v) / 100\n } else {\n return parseFloat(v)\n }\n }) as [number, number, number, number?]\n\n return mappers[fn](...realValues)\n } else if (typeof color === 'string') {\n let hex = color.startsWith('#') ? color.slice(1) : color\n\n if ([3, 4].includes(hex.length)) {\n hex = hex.split('').map(char => char + char).join('')\n } else if (![6, 8].includes(hex.length)) {\n consoleWarn(`'${color}' is not a valid hex(a) color`)\n }\n\n const int = parseInt(hex, 16)\n if (isNaN(int) || int < 0 || int > 0xFFFFFFFF) {\n consoleWarn(`'${color}' is not a valid hex(a) color`)\n }\n\n return HexToRGB(hex as Hex)\n } else if (typeof color === 'object') {\n if (has(color, ['r', 'g', 'b'])) {\n return color\n } else if (has(color, ['h', 's', 'l'])) {\n return HSVtoRGB(HSLtoHSV(color))\n } else if (has(color, ['h', 's', 'v'])) {\n return HSVtoRGB(color)\n }\n }\n\n throw new TypeError(`Invalid color: ${color == null ? color : (String(color) || (color as any).constructor.name)}\\nExpected #hex, #hexa, rgb(), rgba(), hsl(), hsla(), object or number`)\n}\n\nexport function RGBToInt (color: RGB) {\n return (color.r << 16) + (color.g << 8) + color.b\n}\n\nexport function classToHex (\n color: string,\n colors: Record>,\n currentTheme: Partial,\n): string {\n const [colorName, colorModifier] = color\n .toString().trim().replace('-', '').split(' ', 2) as (string | undefined)[]\n\n let hexColor = ''\n if (colorName && colorName in colors) {\n if (colorModifier && colorModifier in colors[colorName]) {\n hexColor = colors[colorName][colorModifier]\n } else if ('base' in colors[colorName]) {\n hexColor = colors[colorName].base\n }\n } else if (colorName && colorName in currentTheme) {\n hexColor = currentTheme[colorName] as string\n }\n\n return hexColor\n}\n\n/** Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV */\nexport function HSVtoRGB (hsva: HSV): RGB {\n const { h, s, v, a } = hsva\n const f = (n: number) => {\n const k = (n + (h / 60)) % 6\n return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0)\n }\n\n const rgb = [f(5), f(3), f(1)].map(v => Math.round(v * 255))\n\n return { r: rgb[0], g: rgb[1], b: rgb[2], a }\n}\n\nexport function HSLtoRGB (hsla: HSL): RGB {\n return HSVtoRGB(HSLtoHSV(hsla))\n}\n\n/** Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV */\nexport function RGBtoHSV (rgba: RGB): HSV {\n if (!rgba) return { h: 0, s: 1, v: 1, a: 1 }\n\n const r = rgba.r / 255\n const g = rgba.g / 255\n const b = rgba.b / 255\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n\n let h = 0\n\n if (max !== min) {\n if (max === r) {\n h = 60 * (0 + ((g - b) / (max - min)))\n } else if (max === g) {\n h = 60 * (2 + ((b - r) / (max - min)))\n } else if (max === b) {\n h = 60 * (4 + ((r - g) / (max - min)))\n }\n }\n\n if (h < 0) h = h + 360\n\n const s = max === 0 ? 0 : (max - min) / max\n const hsv = [h, s, max]\n\n return { h: hsv[0], s: hsv[1], v: hsv[2], a: rgba.a }\n}\n\nexport function HSVtoHSL (hsva: HSV): HSL {\n const { h, s, v, a } = hsva\n\n const l = v - (v * s / 2)\n\n const sprime = l === 1 || l === 0 ? 0 : (v - l) / Math.min(l, 1 - l)\n\n return { h, s: sprime, l, a }\n}\n\nexport function HSLtoHSV (hsl: HSL): HSV {\n const { h, s, l, a } = hsl\n\n const v = l + s * Math.min(l, 1 - l)\n\n const sprime = v === 0 ? 0 : 2 - (2 * l / v)\n\n return { h, s: sprime, v, a }\n}\n\nexport function RGBtoCSS ({ r, g, b, a }: RGB): string {\n return a === undefined ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${a})`\n}\n\nexport function HSVtoCSS (hsva: HSV): string {\n return RGBtoCSS(HSVtoRGB(hsva))\n}\n\nfunction toHex (v: number) {\n const h = Math.round(v).toString(16)\n return ('00'.substr(0, 2 - h.length) + h).toUpperCase()\n}\n\nexport function RGBtoHex ({ r, g, b, a }: RGB): Hex {\n return `#${[\n toHex(r),\n toHex(g),\n toHex(b),\n a !== undefined ? toHex(Math.round(a * 255)) : '',\n ].join('')}` as Hex\n}\n\nexport function HexToRGB (hex: Hex): RGB {\n hex = parseHex(hex)\n let [r, g, b, a] = chunk(hex, 2).map((c: string) => parseInt(c, 16))\n a = a === undefined ? a : (a / 255)\n\n return { r, g, b, a }\n}\n\nexport function HexToHSV (hex: Hex): HSV {\n const rgb = HexToRGB(hex)\n return RGBtoHSV(rgb)\n}\n\nexport function HSVtoHex (hsva: HSV): Hex {\n return RGBtoHex(HSVtoRGB(hsva))\n}\n\nexport function parseHex (hex: string): Hex {\n if (hex.startsWith('#')) {\n hex = hex.slice(1)\n }\n\n hex = hex.replace(/([^0-9a-f])/gi, 'F')\n\n if (hex.length === 3 || hex.length === 4) {\n hex = hex.split('').map(x => x + x).join('')\n }\n\n if (hex.length !== 6) {\n hex = padEnd(padEnd(hex, 6), 8, 'F')\n }\n\n return hex as Hex\n}\n\nexport function parseGradient (\n gradient: string,\n colors: Record>,\n currentTheme: Partial,\n) {\n return gradient.replace(/([a-z]+(\\s[a-z]+-[1-5])?)(?=$|,)/gi, x => {\n return classToHex(x, colors, currentTheme) || x\n }).replace(/(rgba\\()#[0-9a-f]+(?=,)/gi, x => {\n return 'rgba(' + Object.values(HexToRGB(parseHex(x.replace(/rgba\\(/, '')))).slice(0, 3).join(',')\n })\n}\n\nexport function lighten (value: RGB, amount: number): RGB {\n const lab = CIELAB.fromXYZ(sRGB.toXYZ(value))\n lab[0] = lab[0] + amount * 10\n\n return sRGB.fromXYZ(CIELAB.toXYZ(lab))\n}\n\nexport function darken (value: RGB, amount: number): RGB {\n const lab = CIELAB.fromXYZ(sRGB.toXYZ(value))\n lab[0] = lab[0] - amount * 10\n\n return sRGB.fromXYZ(CIELAB.toXYZ(lab))\n}\n\n/**\n * Calculate the relative luminance of a given color\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\nexport function getLuma (color: Color) {\n const rgb = parseColor(color)\n\n return sRGB.toXYZ(rgb)[1]\n}\n\n/**\n * Returns the contrast ratio (1-21) between two colors.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function getContrast (first: Color, second: Color) {\n const l1 = getLuma(first)\n const l2 = getLuma(second)\n\n const light = Math.max(l1, l2)\n const dark = Math.min(l1, l2)\n\n return (light + 0.05) / (dark + 0.05)\n}\n\nexport function getForeground (color: Color) {\n const blackContrast = Math.abs(APCAcontrast(parseColor(0), parseColor(color)))\n const whiteContrast = Math.abs(APCAcontrast(parseColor(0xffffff), parseColor(color)))\n\n // TODO: warn about poor color selections\n // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))\n // const minContrast = Math.max(blackContrast, whiteContrast)\n // if (minContrast < 60) {\n // consoleInfo(`${key} theme color ${color} has poor contrast (${minContrast.toFixed()}%)`)\n // } else if (contrastAsText < 60 && !['background', 'surface'].includes(color)) {\n // consoleInfo(`${key} theme color ${color} has poor contrast as text (${contrastAsText.toFixed()}%)`)\n // }\n\n // Prefer white text if both have an acceptable contrast ratio\n return whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000'\n}\n"],"mappings":"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","ignoreList":[]}