{"version":3,"file":"index.exports.import.es.mjs","sources":["../src/guard.ts","../src/ColorError.ts","../src/parseToRgba.ts","../src/parseToHsla.ts","../src/hsla.ts","../src/adjustHue.ts","../src/darken.ts","../src/desaturate.ts","../src/getLuminance.ts","../src/getContrast.ts","../src/rgba.ts","../src/mix.ts","../src/getScale.ts","../src/hasBadContrast.ts","../src/lighten.ts","../src/transparentize.ts","../src/opacify.ts","../src/readableColorIsBlack.ts","../src/readableColor.ts","../src/saturate.ts","../src/toHex.ts","../src/toRgba.ts","../src/toHsla.ts"],"sourcesContent":["/**\n * A simple guard function:\n *\n * ```js\n * Math.min(Math.max(low, value), high)\n * ```\n */\nfunction guard(low: number, high: number, value: number): number {\n  return Math.min(Math.max(low, value), high);\n}\n\nexport default guard;\n","class ColorError extends Error {\n  constructor(color: string) {\n    super(`Failed to parse color: \"${color}\"`);\n  }\n}\n\nexport default ColorError;\n","import guard from './guard';\nimport ColorError from './ColorError';\n\n/**\n * Parses a color into red, gree, blue, alpha parts\n *\n * @param color the input color. Can be a RGB, RBGA, HSL, HSLA, or named color\n */\nfunction parseToRgba(color: string): [number, number, number, number] {\n  if (typeof color !== 'string') throw new ColorError(color);\n  if (color.trim().toLowerCase() === 'transparent') return [0, 0, 0, 0];\n\n  let normalizedColor = color.trim();\n  normalizedColor = namedColorRegex.test(color) ? nameToHex(color) : color;\n\n  const reducedHexMatch = reducedHexRegex.exec(normalizedColor);\n  if (reducedHexMatch) {\n    const arr = Array.from(reducedHexMatch).slice(1);\n    return [\n      ...arr.slice(0, 3).map((x) => parseInt(r(x, 2), 16)),\n      parseInt(r(arr[3] || 'f', 2), 16) / 255,\n    ] as [number, number, number, number];\n  }\n\n  const hexMatch = hexRegex.exec(normalizedColor);\n  if (hexMatch) {\n    const arr = Array.from(hexMatch).slice(1);\n    return [\n      ...arr.slice(0, 3).map((x) => parseInt(x, 16)),\n      parseInt(arr[3] || 'ff', 16) / 255,\n    ] as [number, number, number, number];\n  }\n\n  const rgbaMatch = rgbaRegex.exec(normalizedColor);\n  if (rgbaMatch) {\n    const arr = Array.from(rgbaMatch).slice(1);\n    return [\n      ...arr.slice(0, 3).map((x) => parseInt(x, 10)),\n      parseFloat(arr[3] || '1'),\n    ] as [number, number, number, number];\n  }\n\n  const hslaMatch = hslaRegex.exec(normalizedColor);\n  if (hslaMatch) {\n    const [h, s, l, a] = Array.from(hslaMatch).slice(1).map(parseFloat);\n    if (guard(0, 100, s) !== s) throw new ColorError(color);\n    if (guard(0, 100, l) !== l) throw new ColorError(color);\n    return [...hslToRgb(h, s, l), a || 1] as [number, number, number, number];\n  }\n\n  throw new ColorError(color);\n}\n\nfunction hash(str: string) {\n  let hash = 5381;\n  let i = str.length;\n\n  while (i) {\n    hash = (hash * 33) ^ str.charCodeAt(--i);\n  }\n\n  /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n   * integers. Since we want the results to be always positive, convert the\n   * signed int to an unsigned by doing an unsigned bitshift. */\n  return (hash >>> 0) % 2341;\n}\n\nconst colorToInt = (x: string) => parseInt(x.replace(/_/g, ''), 36);\n\nconst compressedColorMap = '1q29ehhb 1n09sgk7 1kl1ekf_ _yl4zsno 16z9eiv3 1p29lhp8 _bd9zg04 17u0____ _iw9zhe5 _to73___ _r45e31e _7l6g016 _jh8ouiv _zn3qba8 1jy4zshs 11u87k0u 1ro9yvyo 1aj3xael 1gz9zjz0 _3w8l4xo 1bf1ekf_ _ke3v___ _4rrkb__ 13j776yz _646mbhl _nrjr4__ _le6mbhl 1n37ehkb _m75f91n _qj3bzfz 1939yygw 11i5z6x8 _1k5f8xs 1509441m 15t5lwgf _ae2th1n _tg1ugcv 1lp1ugcv 16e14up_ _h55rw7n _ny9yavn _7a11xb_ 1ih442g9 _pv442g9 1mv16xof 14e6y7tu 1oo9zkds 17d1cisi _4v9y70f _y98m8kc 1019pq0v 12o9zda8 _348j4f4 1et50i2o _8epa8__ _ts6senj 1o350i2o 1mi9eiuo 1259yrp0 1ln80gnw _632xcoy 1cn9zldc _f29edu4 1n490c8q _9f9ziet 1b94vk74 _m49zkct 1kz6s73a 1eu9dtog _q58s1rz 1dy9sjiq __u89jo3 _aj5nkwg _ld89jo3 13h9z6wx _qa9z2ii _l119xgq _bs5arju 1hj4nwk9 1qt4nwk9 1ge6wau6 14j9zlcw 11p1edc_ _ms1zcxe _439shk6 _jt9y70f _754zsow 1la40eju _oq5p___ _x279qkz 1fa5r3rv _yd2d9ip _424tcku _8y1di2_ _zi2uabw _yy7rn9h 12yz980_ __39ljp6 1b59zg0x _n39zfzp 1fy9zest _b33k___ _hp9wq92 1il50hz4 _io472ub _lj9z3eo 19z9ykg0 _8t8iu3a 12b9bl4a 1ak5yw0o _896v4ku _tb8k8lv _s59zi6t _c09ze0p 1lg80oqn 1id9z8wb _238nba5 1kq6wgdi _154zssg _tn3zk49 _da9y6tc 1sg7cv4f _r12jvtt 1gq5fmkz 1cs9rvci _lp9jn1c _xw1tdnb 13f9zje6 16f6973h _vo7ir40 _bt5arjf _rc45e4t _hr4e100 10v4e100 _hc9zke2 _w91egv_ _sj2r1kk 13c87yx8 _vqpds__ _ni8ggk8 _tj9yqfb 1ia2j4r4 _7x9b10u 1fc9ld4j 1eq9zldr _5j9lhpx _ez9zl6o _md61fzm'\n  .split(' ')\n  .reduce((acc, next) => {\n    const key = colorToInt(next.substring(0, 3));\n    const hex = colorToInt(next.substring(3)).toString(16);\n\n    // NOTE: padStart could be used here but it breaks Node 6 compat\n    // https://github.com/ricokahler/color2k/issues/351\n    let prefix = '';\n    for (let i = 0; i < 6 - hex.length; i++) {\n      prefix += '0';\n    }\n\n    acc[key] = `${prefix}${hex}`;\n    return acc;\n  }, {} as { [key: string]: string });\n\n/**\n * Checks if a string is a CSS named color and returns its equivalent hex value, otherwise returns the original color.\n */\nfunction nameToHex(color: string): string {\n  const normalizedColorName = color.toLowerCase().trim();\n  const result = compressedColorMap[hash(normalizedColorName)];\n  if (!result) throw new ColorError(color);\n  return `#${result}`;\n}\n\nconst r = (str: string, amount: number) =>\n  Array.from(Array(amount))\n    .map(() => str)\n    .join('');\n\nconst reducedHexRegex = new RegExp(`^#${r('([a-f0-9])', 3)}([a-f0-9])?$`, 'i');\nconst hexRegex = new RegExp(`^#${r('([a-f0-9]{2})', 3)}([a-f0-9]{2})?$`, 'i');\nconst rgbaRegex = new RegExp(\n  `^rgba?\\\\(\\\\s*(\\\\d+)\\\\s*${r(\n    ',\\\\s*(\\\\d+)\\\\s*',\n    2\n  )}(?:,\\\\s*([\\\\d.]+))?\\\\s*\\\\)$`,\n  'i'\n);\nconst hslaRegex = /^hsla?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i;\nconst namedColorRegex = /^[a-z]+$/i;\n\nconst roundColor = (color: number): number => {\n  return Math.round(color * 255);\n};\n\nconst hslToRgb = (\n  hue: number,\n  saturation: number,\n  lightness: number\n): [number, number, number] => {\n  let l = lightness / 100;\n  if (saturation === 0) {\n    // achromatic\n    return [l, l, l].map(roundColor) as [number, number, number];\n  }\n\n  // formulae from https://en.wikipedia.org/wiki/HSL_and_HSV\n  const huePrime = (((hue % 360) + 360) % 360) / 60;\n  const chroma = (1 - Math.abs(2 * l - 1)) * (saturation / 100);\n  const secondComponent = chroma * (1 - Math.abs((huePrime % 2) - 1));\n\n  let red = 0;\n  let green = 0;\n  let blue = 0;\n\n  if (huePrime >= 0 && huePrime < 1) {\n    red = chroma;\n    green = secondComponent;\n  } else if (huePrime >= 1 && huePrime < 2) {\n    red = secondComponent;\n    green = chroma;\n  } else if (huePrime >= 2 && huePrime < 3) {\n    green = chroma;\n    blue = secondComponent;\n  } else if (huePrime >= 3 && huePrime < 4) {\n    green = secondComponent;\n    blue = chroma;\n  } else if (huePrime >= 4 && huePrime < 5) {\n    red = secondComponent;\n    blue = chroma;\n  } else if (huePrime >= 5 && huePrime < 6) {\n    red = chroma;\n    blue = secondComponent;\n  }\n\n  const lightnessModification = l - chroma / 2;\n  const finalRed = red + lightnessModification;\n  const finalGreen = green + lightnessModification;\n  const finalBlue = blue + lightnessModification;\n\n  return [finalRed, finalGreen, finalBlue].map(roundColor) as [\n    number,\n    number,\n    number\n  ];\n};\n\nexport default parseToRgba;\n","// taken from:\n// https://github.com/styled-components/polished/blob/a23a6a2bb26802b3d922d9c3b67bac3f3a54a310/src/internalHelpers/_rgbToHsl.js\nimport parseToRgba from './parseToRgba';\n\n/**\n * Parses a color in hue, saturation, lightness, and the alpha channel.\n *\n * Hue is a number between 0 and 360, saturation, lightness, and alpha are\n * decimal percentages between 0 and 1\n */\nfunction parseToHsla(color: string): [number, number, number, number] {\n  const [red, green, blue, alpha] = parseToRgba(color).map((value, index) =>\n    // 3rd index is alpha channel which is already normalized\n    index === 3 ? value : value / 255\n  );\n\n  const max = Math.max(red, green, blue);\n  const min = Math.min(red, green, blue);\n  const lightness = (max + min) / 2;\n\n  // achromatic\n  if (max === min) return [0, 0, lightness, alpha];\n\n  const delta = max - min;\n  const saturation =\n    lightness > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n  const hue =\n    60 *\n    (red === max\n      ? (green - blue) / delta + (green < blue ? 6 : 0)\n      : green === max\n      ? (blue - red) / delta + 2\n      : (red - green) / delta + 4);\n\n  return [hue, saturation, lightness, alpha];\n}\n\nexport default parseToHsla;\n","import guard from './guard';\n\n/**\n * Takes in hsla parts and constructs an hsla string\n *\n * @param hue The color circle (from 0 to 360) - 0 (or 360) is red, 120 is green, 240 is blue\n * @param saturation Percentage of saturation, given as a decimal between 0 and 1\n * @param lightness Percentage of lightness, given as a decimal between 0 and 1\n * @param alpha Percentage of opacity, given as a decimal between 0 and 1\n */\nfunction hsla(\n  hue: number,\n  saturation: number,\n  lightness: number,\n  alpha: number\n): string {\n  return `hsla(${(hue % 360).toFixed()}, ${guard(\n    0,\n    100,\n    saturation * 100\n  ).toFixed()}%, ${guard(0, 100, lightness * 100).toFixed()}%, ${parseFloat(\n    guard(0, 1, alpha).toFixed(3)\n  )})`;\n}\n\nexport default hsla;\n","import parseToHsla from './parseToHsla';\nimport hsla from './hsla';\n\n/**\n * Adjusts the current hue of the color by the given degrees. Wraps around when\n * over 360.\n *\n * @param color input color\n * @param degrees degrees to adjust the input color, accepts degree integers\n * (0 - 360) and wraps around on overflow\n */\nfunction adjustHue(color: string, degrees: number): string {\n  const [h, s, l, a] = parseToHsla(color);\n  return hsla(h + degrees, s, l, a);\n}\n\nexport default adjustHue;\n","import parseToHsla from './parseToHsla';\nimport hsla from './hsla';\n\n/**\n * Darkens using lightness. This is equivalent to subtracting the lightness\n * from the L in HSL.\n *\n * @param amount The amount to darken, given as a decimal between 0 and 1\n */\nfunction darken(color: string, amount: number): string {\n  const [hue, saturation, lightness, alpha] = parseToHsla(color);\n  return hsla(hue, saturation, lightness - amount, alpha);\n}\n\nexport default darken;\n","import parseToHsla from './parseToHsla';\nimport hsla from './hsla';\n\n/**\n * Desaturates the input color by the given amount via subtracting from the `s`\n * in `hsla`.\n *\n * @param amount The amount to desaturate, given as a decimal between 0 and 1\n */\nfunction desaturate(color: string, amount: number): string {\n  const [h, s, l, a] = parseToHsla(color);\n  return hsla(h, s - amount, l, a);\n}\n\nexport default desaturate;\n","import parseToRgba from './parseToRgba';\n// taken from:\n// https://github.com/styled-components/polished/blob/0764c982551b487469043acb56281b0358b3107b/src/color/getLuminance.js\n\n/**\n * Returns a number (float) representing the luminance of a color.\n */\nfunction getLuminance(color: string): number {\n  if (color === 'transparent') return 0;\n\n  function f(x: number) {\n    const channel = x / 255;\n    return channel <= 0.03928\n      ? channel / 12.92\n      : Math.pow(((channel + 0.055) / 1.055), 2.4);\n  }\n\n  const [r, g, b] = parseToRgba(color);\n  return 0.2126 * f(r) + 0.7152 * f(g) + 0.0722 * f(b);\n}\n\nexport default getLuminance;\n","// taken from:\n// https://github.com/styled-components/polished/blob/0764c982551b487469043acb56281b0358b3107b/src/color/getContrast.js\nimport getLuminance from './getLuminance';\n\n/**\n * Returns the contrast ratio between two colors based on\n * [W3's recommended equation for calculating contrast](http://www.w3.org/TR/WCAG20/#contrast-ratiodef).\n */\nfunction getContrast(color1: string, color2: string): number {\n  const luminance1 = getLuminance(color1);\n  const luminance2 = getLuminance(color2);\n\n  return luminance1 > luminance2\n    ? (luminance1 + 0.05) / (luminance2 + 0.05)\n    : (luminance2 + 0.05) / (luminance1 + 0.05);\n}\n\nexport default getContrast;\n","import guard from './guard';\n\n/**\n * Takes in rgba parts and returns an rgba string\n *\n * @param red The amount of red in the red channel, given in a number between 0 and 255 inclusive\n * @param green The amount of green in the red channel, given in a number between 0 and 255 inclusive\n * @param blue The amount of blue in the red channel, given in a number between 0 and 255 inclusive\n * @param alpha Percentage of opacity, given as a decimal between 0 and 1\n */\nfunction rgba(red: number, green: number, blue: number, alpha: number): string {\n  return `rgba(${guard(0, 255, red).toFixed()}, ${guard(\n    0,\n    255,\n    green\n  ).toFixed()}, ${guard(0, 255, blue).toFixed()}, ${parseFloat(\n    guard(0, 1, alpha).toFixed(3)\n  )})`;\n}\n\nexport default rgba;\n","import parseToRgba from './parseToRgba';\nimport rgba from './rgba';\n\n/**\n * Mixes two colors together. Taken from sass's implementation.\n */\nfunction mix(color1: string, color2: string, weight: number): string {\n  const normalize = (n: number, index: number) =>\n    // 3rd index is alpha channel which is already normalized\n    index === 3 ? n : n / 255;\n\n  const [r1, g1, b1, a1] = parseToRgba(color1).map(normalize);\n  const [r2, g2, b2, a2] = parseToRgba(color2).map(normalize);\n\n  // The formula is copied from the original Sass implementation:\n  // http://sass-lang.com/documentation/Sass/Script/Functions.html#mix-instance_method\n  const alphaDelta = a2 - a1;\n  const normalizedWeight = weight * 2 - 1;\n  const combinedWeight =\n    normalizedWeight * alphaDelta === -1\n      ? normalizedWeight\n      : normalizedWeight + alphaDelta / (1 + normalizedWeight * alphaDelta);\n  const weight2 = (combinedWeight + 1) / 2;\n  const weight1 = 1 - weight2;\n\n  const r = (r1 * weight1 + r2 * weight2) * 255;\n  const g = (g1 * weight1 + g2 * weight2) * 255;\n  const b = (b1 * weight1 + b2 * weight2) * 255;\n  const a = a2 * weight + a1 * (1 - weight);\n\n  return rgba(r, g, b, a);\n}\n\nexport default mix;\n","import mix from './mix';\nimport guard from './guard';\n\n/**\n * Given a series colors, this function will return a `scale(x)` function that\n * accepts a percentage as a decimal between 0 and 1 and returns the color at\n * that percentage in the scale.\n *\n * ```js\n * const scale = getScale('red', 'yellow', 'green');\n * console.log(scale(0)); // rgba(255, 0, 0, 1)\n * console.log(scale(0.5)); // rgba(255, 255, 0, 1)\n * console.log(scale(1)); // rgba(0, 128, 0, 1)\n * ```\n *\n * If you'd like to limit the domain and range like chroma-js, we recommend\n * wrapping scale again.\n *\n * ```js\n * const _scale = getScale('red', 'yellow', 'green');\n * const scale = x => _scale(x / 100);\n *\n * console.log(scale(0)); // rgba(255, 0, 0, 1)\n * console.log(scale(50)); // rgba(255, 255, 0, 1)\n * console.log(scale(100)); // rgba(0, 128, 0, 1)\n * ```\n */\nfunction getScale(...colors: string[]): (n: number) => string {\n  return (n) => {\n    const lastIndex = colors.length - 1;\n    const lowIndex = guard(0, lastIndex, Math.floor(n * lastIndex));\n    const highIndex = guard(0, lastIndex, Math.ceil(n * lastIndex));\n\n    const color1 = colors[lowIndex];\n    const color2 = colors[highIndex];\n\n    const unit = 1 / lastIndex;\n    const weight = (n - unit * lowIndex) / unit;\n\n    return mix(color1, color2, weight);\n  };\n}\n\nexport default getScale;\n","import getContrast from './getContrast';\n\nconst guidelines = {\n  decorative: 1.5,\n  readable: 3,\n  aa: 4.5,\n  aaa: 7,\n};\n\n/**\n * Returns whether or not a color has bad contrast against \n * a white background according to a given standard\n */\nfunction hasBadContrast(\n  color: string,\n  standard: 'decorative' | 'readable' | 'aa' | 'aaa' = 'aa'\n): boolean {\n  return getContrast(color, '#fff') < guidelines[standard];\n}\n\nexport default hasBadContrast;\n","import darken from './darken';\n/**\n * Lightens a color by a given amount. This is equivalent to\n * `darken(color, -amount)`\n *\n * @param amount The amount to darken, given as a decimal between 0 and 1\n */\nfunction lighten(color: string, amount: number): string {\n  return darken(color, -amount);\n}\n\nexport default lighten;\n","import parseToRgba from './parseToRgba';\nimport rgba from './rgba';\n\n/**\n * Takes in a color and makes it more transparent by convert to `rgba` and\n * decreasing the amount in the alpha channel.\n *\n * @param amount The amount to increase the transparency by, given as a decimal between 0 and 1\n */\nfunction transparentize(color: string, amount: number): string {\n  const [r, g, b, a] = parseToRgba(color);\n  return rgba(r, g, b, a - amount);\n}\n\nexport default transparentize;\n","import transparentize from './transparentize';\n\n/**\n * Takes a color and un-transparentizes it. Equivalent to\n * `transparentize(color, -amount)`\n *\n * @param amount The amount to increase the opacity by, given as a decimal between 0 and 1\n */\nfunction opacify(color: string, amount: number): string {\n  return transparentize(color, -amount);\n}\n\nexport default opacify;\n","import getLuminance from './getLuminance';\n\n/**\n * An alternative function to `readableColor`. Returns whether or not the \n * readable color (i.e. the color to be place on top the input color) should be\n * black.\n */\nfunction readableColorIsBlack(color: string): boolean {\n  return getLuminance(color) > 0.179;\n}\n\nexport default readableColorIsBlack;\n","import readableColorIsBlack from './readableColorIsBlack';\n\n/**\n * Returns black or white for best contrast depending on the luminosity of the\n * given color.\n */\nfunction readableColor(color: string): string {\n  return readableColorIsBlack(color) ? '#000' : '#fff';\n}\n\nexport default readableColor;\n","import desaturate from './desaturate';\n\n/**\n * Saturates a color by converting it to `hsl` and increasing the saturation\n * amount. Equivalent to `desaturate(color, -amount)`\n * \n * @param color Input color\n * @param amount The amount to darken, given as a decimal between 0 and 1\n */\nfunction saturate(color: string, amount: number): string {\n  return desaturate(color, -amount);\n}\n\nexport default saturate;\n","import parseToRgba from './parseToRgba';\nimport guard from './guard';\n\n/**\n * Takes in any color and returns it as a hex code.\n */\nfunction toHex(color: string): string {\n  const [r, g, b, a] = parseToRgba(color);\n\n  let hex = (x: number) => {\n    const h = guard(0, 255, x).toString(16);\n    // NOTE: padStart could be used here but it breaks Node 6 compat\n    // https://github.com/ricokahler/color2k/issues/351\n    return h.length === 1 ? `0${h}` : h;\n  };\n\n  return `#${hex(r)}${hex(g)}${hex(b)}${a < 1 ? hex(Math.round(a * 255)) : ''}`;\n}\n\nexport default toHex;\n","import parseToRgba from './parseToRgba';\nimport rgba from './rgba';\n\n/**\n * Takes in any color and returns it as an rgba string.\n */\nfunction toRgba(color: string): string {\n  return rgba(...parseToRgba(color));\n}\n\nexport default toRgba;\n","import parseToHsla from './parseToHsla';\nimport hsla from './hsla';\n\n/**\n * Takes in any color and returns it as an hsla string.\n */\nfunction toHsla(color: string): string {\n  return hsla(...parseToHsla(color));\n}\n\nexport default toHsla;\n"],"names":["guard","low","high","value","Math","min","max","ColorError","Error","constructor","color","parseToRgba","trim","toLowerCase","normalizedColor","namedColorRegex","test","nameToHex","reducedHexMatch","reducedHexRegex","exec","arr","Array","from","slice","map","x","parseInt","r","hexMatch","hexRegex","rgbaMatch","rgbaRegex","parseFloat","hslaMatch","hslaRegex","h","s","l","a","hslToRgb","hash","str","i","length","charCodeAt","colorToInt","replace","compressedColorMap","split","reduce","acc","next","key","substring","hex","toString","prefix","normalizedColorName","result","amount","join","RegExp","roundColor","round","hue","saturation","lightness","huePrime","chroma","abs","secondComponent","red","green","blue","lightnessModification","finalRed","finalGreen","finalBlue","parseToHsla","alpha","index","delta","hsla","toFixed","adjustHue","degrees","darken","desaturate","getLuminance","f","channel","pow","g","b","getContrast","color1","color2","luminance1","luminance2","rgba","mix","weight","normalize","n","r1","g1","b1","a1","r2","g2","b2","a2","alphaDelta","normalizedWeight","combinedWeight","weight2","weight1","getScale","colors","lastIndex","lowIndex","floor","highIndex","ceil","unit","guidelines","decorative","readable","aa","aaa","hasBadContrast","standard","lighten","transparentize","opacify","readableColorIsBlack","readableColor","saturate","toHex","toRgba","toHsla"],"mappings":"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"}