{"version":3,"sources":["jsdelivr-header.js","/npm/@instructure/tinycolor2@1.4.1/tinycolor.js"],"names":[],"mappings":"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","file":"/npm/@instructure/tinycolor2@1.4.1/tinycolor.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@instructure/tinycolor2@1.4.1/tinycolor.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// TinyColor v1.4.1\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n(function(Math) {\n\nvar trimLeft = /^\\s+/,\n    trimRight = /\\s+$/,\n    tinyCounter = 0,\n    mathRound = Math.round,\n    mathMin = Math.min,\n    mathMax = Math.max;\n\nfunction tinycolor (color) {\n\n    color = (color) ? color : '';\n\n    // If input is already a tinycolor, return itself\n    if (color instanceof tinycolor) {\n       return color;\n    }\n    // If we are called as a function, call using new instead\n    if (!(this instanceof tinycolor)) {\n        return new tinycolor(color);\n    }\n\n    var rgb = inputToRGB(color);\n    this._originalInput = color,\n    this._r = rgb.r,\n    this._g = rgb.g,\n    this._b = rgb.b,\n    this._a = rgb.a,\n    this._roundA = mathRound(100*this._a) / 100,\n    this._format = rgb.format;\n    this._gradientType = opts.gradientType;\n\n    // Don't let the range of [0,255] come back in [0,1].\n    // Potentially lose a little bit of precision here, but will fix issues where\n    // .5 gets interpreted as half of the total, instead of half of 1\n    // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n    if (this._r < 1) { this._r = mathRound(this._r); }\n    if (this._g < 1) { this._g = mathRound(this._g); }\n    if (this._b < 1) { this._b = mathRound(this._b); }\n\n    this._ok = rgb.ok;\n    this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n    isValid: function() {\n        return this._ok;\n    },\n    getLuminance: function() {\n        //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n        var rgb = this.toRgb();\n        var RsRGB, GsRGB, BsRGB, R, G, B;\n        RsRGB = rgb.r/255;\n        GsRGB = rgb.g/255;\n        BsRGB = rgb.b/255;\n\n        if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n        if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n        if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n        return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n    },\n    setAlpha: function(value) {\n        this._a = boundAlpha(value);\n        this._roundA = mathRound(100*this._a) / 100;\n        return this;\n    },\n    toHsl: function() {\n        var hsl = rgbToHsl(this._r, this._g, this._b);\n        return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n    },\n    toRgb: function() {\n        return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n    },\n    toRgbString: function() {\n        return (this._a == 1) ?\n          \"rgb(\"  + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n          \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n    },\n\n    _applyModification: function(fn, args) {\n        var color = fn.apply(null, [this].concat([].slice.call(args)));\n        this._r = color._r;\n        this._g = color._g;\n        this._b = color._b;\n        this.setAlpha(color._a);\n        return this;\n    },\n    lighten: function() {\n        return this._applyModification(lighten, arguments);\n    },\n    darken: function() {\n        return this._applyModification(darken, arguments);\n    },\n    _applyCombination: function(fn, args) {\n        return fn.apply(null, [this].concat([].slice.call(args)));\n    }\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n//     \"red\"\n//     \"#f00\" or \"f00\"\n//     \"#ff0000\" or \"ff0000\"\n//     \"#ff000000\" or \"ff000000\"\n//     \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n//     \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n//     \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n//     \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n//     \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n//     \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n//     \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n    var rgb = { r: 0, g: 0, b: 0 };\n    var a = 1;\n    var s = null;\n    var v = null;\n    var l = null;\n    var ok = false;\n    var format = false;\n\n    if (typeof color == \"string\") {\n        color = stringInputToObject(color);\n    }\n\n    if (typeof color == \"object\") {\n        if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n            rgb = rgbToRgb(color.r, color.g, color.b);\n            ok = true;\n            format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n        }\n        else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n            s = convertToPercentage(color.s);\n            v = convertToPercentage(color.v);\n            rgb = hsvToRgb(color.h, s, v);\n            ok = true;\n            format = \"hsv\";\n        }\n        else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n            s = convertToPercentage(color.s);\n            l = convertToPercentage(color.l);\n            rgb = hslToRgb(color.h, s, l);\n            ok = true;\n            format = \"hsl\";\n        }\n\n        if (color.hasOwnProperty(\"a\")) {\n            a = color.a;\n        }\n    }\n\n    a = boundAlpha(a);\n\n    return {\n        ok: ok,\n        format: color.format || format,\n        r: mathMin(255, mathMax(rgb.r, 0)),\n        g: mathMin(255, mathMax(rgb.g, 0)),\n        b: mathMin(255, mathMax(rgb.b, 0)),\n        a: a\n    };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// <http://www.w3.org/TR/css3-color/>\n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n    return {\n        r: bound01(r, 255) * 255,\n        g: bound01(g, 255) * 255,\n        b: bound01(b, 255) * 255\n    };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n    r = bound01(r, 255);\n    g = bound01(g, 255);\n    b = bound01(b, 255);\n\n    var max = mathMax(r, g, b), min = mathMin(r, g, b);\n    var h, s, l = (max + min) / 2;\n\n    if(max == min) {\n        h = s = 0; // achromatic\n    }\n    else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n        switch(max) {\n            case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n            case g: h = (b - r) / d + 2; break;\n            case b: h = (r - g) / d + 4; break;\n        }\n\n        h /= 6;\n    }\n\n    return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n    var r, g, b;\n\n    h = bound01(h, 360);\n    s = bound01(s, 100);\n    l = bound01(l, 100);\n\n    function hue2rgb(p, q, t) {\n        if(t < 0) t += 1;\n        if(t > 1) t -= 1;\n        if(t < 1/6) return p + (q - p) * 6 * t;\n        if(t < 1/2) return q;\n        if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n        return p;\n    }\n\n    if(s === 0) {\n        r = g = b = l; // achromatic\n    }\n    else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1/3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1/3);\n    }\n\n    return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n    h = bound01(h, 360) * 6;\n    s = bound01(s, 100);\n    v = bound01(v, 100);\n\n    var i = Math.floor(h),\n        f = h - i,\n        p = v * (1 - s),\n        q = v * (1 - f * s),\n        t = v * (1 - (1 - f) * s),\n        mod = i % 6,\n        r = [v, q, p, p, t, v][mod],\n        g = [t, v, v, q, p, p][mod],\n        b = [p, p, t, v, v, q][mod];\n\n    return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\nfunction lighten (color, amount) {\n    amount = (amount === 0) ? 0 : (amount || 10);\n    var hsl = tinycolor(color).toHsl();\n    hsl.l += amount / 100;\n    hsl.l = clamp01(hsl.l);\n    return tinycolor(hsl);\n}\n\nfunction darken (color, amount) {\n    amount = (amount === 0) ? 0 : (amount || 10);\n    var hsl = tinycolor(color).toHsl();\n    hsl.l -= amount / 100;\n    hsl.l = clamp01(hsl.l);\n    return tinycolor(hsl);\n}\n\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n// `contrast`\n// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\ntinycolor.readability = function(color1, color2) {\n    var c1 = tinycolor(color1);\n    var c2 = tinycolor(color2);\n    return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05);\n};\n\n// Big List of Colors\n// ------------------\n// <http://www.w3.org/TR/css3-color/#svg-color>\nvar names = tinycolor.names = {\n    aqua: \"0ff\",\n    black: \"000\",\n    blue: \"00f\",\n    cyan: \"0ff\",\n    gray: \"808080\",\n    green: \"008000\",\n    lime: \"0f0\",\n    magenta: \"f0f\",\n    maroon: \"800000\",\n    navy: \"000080\",\n    orange: \"ffa500\",\n    pink: \"ffc0cb\",\n    purple: \"800080\",\n    red: \"f00\",\n    tomato: \"ff6347\",\n    white: \"fff\",\n};\n\n\n// Utilities\n// ---------\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n    a = parseFloat(a);\n\n    if (isNaN(a) || a < 0 || a > 1) {\n        a = 1;\n    }\n\n    return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n    if (isOnePointZero(n)) { n = \"100%\"; }\n\n    var processPercent = isPercentage(n);\n    n = mathMin(max, mathMax(0, parseFloat(n)));\n\n    // Automatically convert percentage into number\n    if (processPercent) {\n        n = parseInt(n * max, 10) / 100;\n    }\n\n    // Handle floating point rounding errors\n    if ((Math.abs(n - max) < 0.000001)) {\n        return 1;\n    }\n\n    // Convert into [0, 1] range if it isn't already\n    return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n    return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n    return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nfunction isOnePointZero(n) {\n    return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n    return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n    if (n <= 1) {\n        n = (n * 100) + \"%\";\n    }\n\n    return n;\n}\n\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n    return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n    // <http://www.w3.org/TR/css3-values/#integers>\n    var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n    // <http://www.w3.org/TR/css3-values/#number-value>\n    var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n    // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.\n    var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n    // Actual matching.\n    // Parentheses and commas are optional, but not required.\n    // Whitespace can take the place of commas or opening paren\n    var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n    var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n    return {\n        CSS_UNIT: new RegExp(CSS_UNIT),\n        rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n        rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n        hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n        hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n        hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n        hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n        hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n        hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n        hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n        hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n    };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n    return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing.  Take in a number of formats, and output an object\n// based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n    color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n    var named = false;\n    if (names[color]) {\n        color = names[color];\n        named = true;\n    }\n    else if (color == 'transparent') {\n        return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n    }\n\n    // Try to match string input using regular expressions.\n    // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n    // Just return an object and let the conversion functions handle that.\n    // This way the result will be the same whether the tinycolor is initialized with string or object.\n    var match;\n    if ((match = matchers.rgb.exec(color))) {\n        return { r: match[1], g: match[2], b: match[3] };\n    }\n    if ((match = matchers.rgba.exec(color))) {\n        return { r: match[1], g: match[2], b: match[3], a: match[4] };\n    }\n    if ((match = matchers.hsl.exec(color))) {\n        return { h: match[1], s: match[2], l: match[3] };\n    }\n    if ((match = matchers.hsla.exec(color))) {\n        return { h: match[1], s: match[2], l: match[3], a: match[4] };\n    }\n    if ((match = matchers.hsv.exec(color))) {\n        return { h: match[1], s: match[2], v: match[3] };\n    }\n    if ((match = matchers.hsva.exec(color))) {\n        return { h: match[1], s: match[2], v: match[3], a: match[4] };\n    }\n    if ((match = matchers.hex8.exec(color))) {\n        return {\n            r: parseIntFromHex(match[1]),\n            g: parseIntFromHex(match[2]),\n            b: parseIntFromHex(match[3]),\n            a: convertHexToDecimal(match[4]),\n            format: named ? \"name\" : \"hex8\"\n        };\n    }\n    if ((match = matchers.hex6.exec(color))) {\n        return {\n            r: parseIntFromHex(match[1]),\n            g: parseIntFromHex(match[2]),\n            b: parseIntFromHex(match[3]),\n            format: named ? \"name\" : \"hex\"\n        };\n    }\n    if ((match = matchers.hex4.exec(color))) {\n        return {\n            r: parseIntFromHex(match[1] + '' + match[1]),\n            g: parseIntFromHex(match[2] + '' + match[2]),\n            b: parseIntFromHex(match[3] + '' + match[3]),\n            a: convertHexToDecimal(match[4] + '' + match[4]),\n            format: named ? \"name\" : \"hex8\"\n        };\n    }\n    if ((match = matchers.hex3.exec(color))) {\n        return {\n            r: parseIntFromHex(match[1] + '' + match[1]),\n            g: parseIntFromHex(match[2] + '' + match[2]),\n            b: parseIntFromHex(match[3] + '' + match[3]),\n            format: named ? \"name\" : \"hex\"\n        };\n    }\n\n    return false;\n}\n\nmodule.exports = tinycolor;\n\n})(Math);\n"]}