{"version":3,"sources":["lib/color.js","lib/HSV.js","lib/HSL.js","minimal.js"],"names":["color","obj","Array","isArray","slice","length","RGB","lowerCased","toLowerCase","namedColors","matchCssSyntax","match","cssColorRegExp","colorSpaceName","toUpperCase","alpha","undef","parseFloat","hasHue","firstChannelDivisor","secondChannelDivisor","thirdChannelDivisor","Error","replace","hexMatch","parseInt","CMYK","cmykMatch","RegExp","percentageChannelRegExp","source","isColor","installedColorSpaces","channelRegExp","installColorSpace","propertyNames","config","installForeignMethods","targetColorSpaceName","sourceColorSpaceName","this","rgb","forEach","propertyName","shortName","charAt","value","isDelta","prop","hasOwnProperty","undefined","prototype","a1","args","arguments","i","propertyValue","_alpha","isNaN","join","_hue","Math","floor","methodName","hex","equals","otherColor","epsilon","abs","toJSON","concat","map","matchFromColorSpace","toString","constructor","otherPropertyName","otherColorSpaceName","push","pluginList","use","plugin","indexOf","installMethod","name","fn","colorSpace","hexString","round","_red","_green","_blue","substr","hexa","alphaString","css","cssa","color_1","HSV","red","green","blue","hue","saturation","_saturation","_value","min","f","p","q","t","hsl","l","sv","svDivisor","HSL","fromRgb","max","delta","require$$0","hsv","_lightness","s","require$$1","require$$2"],"mappings":"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","sourcesContent":["var installedColorSpaces = [],\n    undef = function (obj) {\n        return typeof obj === 'undefined';\n    },\n    channelRegExp = /\\s*(\\.\\d+|\\d+(?:\\.\\d+)?)(%)?\\s*/,\n    percentageChannelRegExp = /\\s*(\\.\\d+|100|\\d?\\d(?:\\.\\d+)?)%\\s*/,\n    alphaChannelRegExp = /\\s*(\\.\\d+|\\d+(?:\\.\\d+)?)\\s*/,\n    cssColorRegExp = new RegExp(\n                         '^(rgb|hsl|hsv)a?' +\n                         '\\\\(' +\n                             channelRegExp.source + ',' +\n                             channelRegExp.source + ',' +\n                             channelRegExp.source +\n                             '(?:,' + alphaChannelRegExp.source + ')?' +\n                         '\\\\)$', 'i');\n\nfunction color(obj) {\n    if (Array.isArray(obj)) {\n        if (typeof obj[0] === 'string' && typeof color[obj[0]] === 'function') {\n            // Assumed array from .toJSON()\n            return new color[obj[0]](obj.slice(1, obj.length));\n        } else if (obj.length === 4) {\n            // Assumed 4 element int RGB array from canvas with all channels [0;255]\n            return new color.RGB(obj[0] / 255, obj[1] / 255, obj[2] / 255, obj[3] / 255);\n        }\n    } else if (typeof obj === 'string') {\n        var lowerCased = obj.toLowerCase();\n        if (color.namedColors[lowerCased]) {\n            obj = '#' + color.namedColors[lowerCased];\n        }\n        if (lowerCased === 'transparent') {\n            obj = 'rgba(0,0,0,0)';\n        }\n        // Test for CSS rgb(....) string\n        var matchCssSyntax = obj.match(cssColorRegExp);\n        if (matchCssSyntax) {\n            var colorSpaceName = matchCssSyntax[1].toUpperCase(),\n                alpha = undef(matchCssSyntax[8]) ? matchCssSyntax[8] : parseFloat(matchCssSyntax[8]),\n                hasHue = colorSpaceName[0] === 'H',\n                firstChannelDivisor = matchCssSyntax[3] ? 100 : (hasHue ? 360 : 255),\n                secondChannelDivisor = (matchCssSyntax[5] || hasHue) ? 100 : 255,\n                thirdChannelDivisor = (matchCssSyntax[7] || hasHue) ? 100 : 255;\n            if (undef(color[colorSpaceName])) {\n                throw new Error('color.' + colorSpaceName + ' is not installed.');\n            }\n            return new color[colorSpaceName](\n                parseFloat(matchCssSyntax[2]) / firstChannelDivisor,\n                parseFloat(matchCssSyntax[4]) / secondChannelDivisor,\n                parseFloat(matchCssSyntax[6]) / thirdChannelDivisor,\n                alpha\n            );\n        }\n        // Assume hex syntax\n        if (obj.length < 6) {\n            // Allow CSS shorthand\n            obj = obj.replace(/^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i, '$1$1$2$2$3$3');\n        }\n        // Split obj into red, green, and blue components\n        var hexMatch = obj.match(/^#?([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$/i);\n        if (hexMatch) {\n            return new color.RGB(\n                parseInt(hexMatch[1], 16) / 255,\n                parseInt(hexMatch[2], 16) / 255,\n                parseInt(hexMatch[3], 16) / 255\n            );\n        }\n\n        // No match so far. Lets try the less likely ones\n        if (color.CMYK) {\n            var cmykMatch = obj.match(new RegExp(\n                             '^cmyk' +\n                             '\\\\(' +\n                                 percentageChannelRegExp.source + ',' +\n                                 percentageChannelRegExp.source + ',' +\n                                 percentageChannelRegExp.source + ',' +\n                                 percentageChannelRegExp.source +\n                             '\\\\)$', 'i'));\n            if (cmykMatch) {\n                return new color.CMYK(\n                    parseFloat(cmykMatch[1]) / 100,\n                    parseFloat(cmykMatch[2]) / 100,\n                    parseFloat(cmykMatch[3]) / 100,\n                    parseFloat(cmykMatch[4]) / 100\n                );\n            }\n        }\n    } else if (typeof obj === 'object' && obj.isColor) {\n        return obj;\n    }\n    return false;\n}\n\ncolor.namedColors = {};\n\ncolor.installColorSpace = function (colorSpaceName, propertyNames, config) {\n    color[colorSpaceName] = function (a1) { // ...\n        var args = Array.isArray(a1) ? a1 : arguments;\n        propertyNames.forEach(function (propertyName, i) {\n            var propertyValue = args[i];\n            if (propertyName === 'alpha') {\n                this._alpha = (isNaN(propertyValue) || propertyValue > 1) ? 1 : (propertyValue < 0 ? 0 : propertyValue);\n            } else {\n                if (isNaN(propertyValue)) {\n                    throw new Error('[' + colorSpaceName + ']: Invalid color: (' + propertyNames.join(',') + ')');\n                }\n                if (propertyName === 'hue') {\n                    this._hue = propertyValue < 0 ? propertyValue - Math.floor(propertyValue) : propertyValue % 1;\n                } else {\n                    this['_' + propertyName] = propertyValue < 0 ? 0 : (propertyValue > 1 ? 1 : propertyValue);\n                }\n            }\n        }, this);\n    };\n    color[colorSpaceName].propertyNames = propertyNames;\n\n    var prototype = color[colorSpaceName].prototype;\n\n    ['valueOf', 'hex', 'hexa', 'css', 'cssa'].forEach(function (methodName) {\n        prototype[methodName] = prototype[methodName] || (colorSpaceName === 'RGB' ? prototype.hex : function () {\n            return this.rgb()[methodName]();\n        });\n    });\n\n    prototype.isColor = true;\n\n    prototype.equals = function (otherColor, epsilon) {\n        if (undef(epsilon)) {\n            epsilon = 1e-10;\n        }\n\n        otherColor = otherColor[colorSpaceName.toLowerCase()]();\n\n        for (var i = 0; i < propertyNames.length; i = i + 1) {\n            if (Math.abs(this['_' + propertyNames[i]] - otherColor['_' + propertyNames[i]]) > epsilon) {\n                return false;\n            }\n        }\n\n        return true;\n    };\n\n    prototype.toJSON = function () {\n        return [colorSpaceName].concat(propertyNames.map(function (propertyName) {\n            return this['_' + propertyName];\n        }, this));\n    };\n\n    for (var propertyName in config) {\n        if (config.hasOwnProperty(propertyName)) {\n            var matchFromColorSpace = propertyName.match(/^from(.*)$/);\n            if (matchFromColorSpace) {\n                color[matchFromColorSpace[1].toUpperCase()].prototype[colorSpaceName.toLowerCase()] = config[propertyName];\n            } else {\n                prototype[propertyName] = config[propertyName];\n            }\n        }\n    }\n\n    // It is pretty easy to implement the conversion to the same color space:\n    prototype[colorSpaceName.toLowerCase()] = function () {\n        return this;\n    };\n    prototype.toString = function () {\n        return '[' + colorSpaceName + ' ' + propertyNames.map(function (propertyName) {\n            return this['_' + propertyName];\n        }, this).join(', ') + ']';\n    };\n\n    // Generate getters and setters\n    propertyNames.forEach(function (propertyName) {\n        var shortName = propertyName === 'black' ? 'k' : propertyName.charAt(0);\n        prototype[propertyName] = prototype[shortName] = function (value, isDelta) {\n            // Simple getter mode: color.red()\n            if (typeof value === 'undefined') {\n                return this['_' + propertyName];\n            } else if (isDelta) {\n                // Adjuster: color.red(+.2, true)\n                return new this.constructor(propertyNames.map(function (otherPropertyName) {\n                    return this['_' + otherPropertyName] + (propertyName === otherPropertyName ? value : 0);\n                }, this));\n            } else {\n                // Setter: color.red(.2);\n                return new this.constructor(propertyNames.map(function (otherPropertyName) {\n                    return (propertyName === otherPropertyName) ? value : this['_' + otherPropertyName];\n                }, this));\n            }\n        };\n    });\n\n    function installForeignMethods(targetColorSpaceName, sourceColorSpaceName) {\n        var obj = {};\n        obj[sourceColorSpaceName.toLowerCase()] = function () {\n            return this.rgb()[sourceColorSpaceName.toLowerCase()]();\n        };\n        color[sourceColorSpaceName].propertyNames.forEach(function (propertyName) {\n            var shortName = propertyName === 'black' ? 'k' : propertyName.charAt(0);\n            obj[propertyName] = obj[shortName] = function (value, isDelta) {\n                return this[sourceColorSpaceName.toLowerCase()]()[propertyName](value, isDelta);\n            };\n        });\n        for (var prop in obj) {\n            if (obj.hasOwnProperty(prop) && color[targetColorSpaceName].prototype[prop] === undefined) {\n                color[targetColorSpaceName].prototype[prop] = obj[prop];\n            }\n        }\n    }\n\n    installedColorSpaces.forEach(function (otherColorSpaceName) {\n        installForeignMethods(colorSpaceName, otherColorSpaceName);\n        installForeignMethods(otherColorSpaceName, colorSpaceName);\n    });\n\n    installedColorSpaces.push(colorSpaceName);\n    return color;\n};\n\ncolor.pluginList = [];\n\ncolor.use = function (plugin) {\n    if (color.pluginList.indexOf(plugin) === -1) {\n        this.pluginList.push(plugin);\n        plugin(color);\n    }\n    return color;\n};\n\ncolor.installMethod = function (name, fn) {\n    installedColorSpaces.forEach(function (colorSpace) {\n        color[colorSpace].prototype[name] = fn;\n    });\n    return this;\n};\n\ncolor.installColorSpace('RGB', ['red', 'green', 'blue', 'alpha'], {\n    hex: function () {\n        var hexString = (Math.round(255 * this._red) * 0x10000 + Math.round(255 * this._green) * 0x100 + Math.round(255 * this._blue)).toString(16);\n        return '#' + ('00000'.substr(0, 6 - hexString.length)) + hexString;\n    },\n\n    hexa: function () {\n        var alphaString = Math.round(this._alpha * 255).toString(16);\n        return '#' + '00'.substr(0, 2 - alphaString.length) + alphaString + this.hex().substr(1, 6);\n    },\n\n    css: function () {\n        return 'rgb(' + Math.round(255 * this._red) + ',' + Math.round(255 * this._green) + ',' + Math.round(255 * this._blue) + ')';\n    },\n\n    cssa: function () {\n        return 'rgba(' + Math.round(255 * this._red) + ',' + Math.round(255 * this._green) + ',' + Math.round(255 * this._blue) + ',' + this._alpha + ')';\n    }\n});\n\nmodule.exports = color;\n","module.exports = function HSV(color) {\n    color.installColorSpace('HSV', ['hue', 'saturation', 'value', 'alpha'], {\n        rgb: function () {\n            var hue = this._hue,\n                saturation = this._saturation,\n                value = this._value,\n                i = Math.min(5, Math.floor(hue * 6)),\n                f = hue * 6 - i,\n                p = value * (1 - saturation),\n                q = value * (1 - f * saturation),\n                t = value * (1 - (1 - f) * saturation),\n                red,\n                green,\n                blue;\n            switch (i) {\n            case 0:\n                red = value;\n                green = t;\n                blue = p;\n                break;\n            case 1:\n                red = q;\n                green = value;\n                blue = p;\n                break;\n            case 2:\n                red = p;\n                green = value;\n                blue = t;\n                break;\n            case 3:\n                red = p;\n                green = q;\n                blue = value;\n                break;\n            case 4:\n                red = t;\n                green = p;\n                blue = value;\n                break;\n            case 5:\n                red = value;\n                green = p;\n                blue = q;\n                break;\n            }\n            return new color.RGB(red, green, blue, this._alpha);\n        },\n\n        hsl: function () {\n            var l = (2 - this._saturation) * this._value,\n                sv = this._saturation * this._value,\n                svDivisor = l <= 1 ? l : (2 - l),\n                saturation;\n\n            // Avoid division by zero when lightness approaches zero:\n            if (svDivisor < 1e-9) {\n                saturation = 0;\n            } else {\n                saturation = sv / svDivisor;\n            }\n            return new color.HSL(this._hue, saturation, l / 2, this._alpha);\n        },\n\n        fromRgb: function () { // Becomes one.color.RGB.prototype.hsv\n            var red = this._red,\n                green = this._green,\n                blue = this._blue,\n                max = Math.max(red, green, blue),\n                min = Math.min(red, green, blue),\n                delta = max - min,\n                hue,\n                saturation = (max === 0) ? 0 : (delta / max),\n                value = max;\n            if (delta === 0) {\n                hue = 0;\n            } else {\n                switch (max) {\n                case red:\n                    hue = (green - blue) / delta / 6 + (green < blue ? 1 : 0);\n                    break;\n                case green:\n                    hue = (blue - red) / delta / 6 + 1 / 3;\n                    break;\n                case blue:\n                    hue = (red - green) / delta / 6 + 2 / 3;\n                    break;\n                }\n            }\n            return new color.HSV(hue, saturation, value, this._alpha);\n        }\n    });\n};\n","module.exports = function HSL(color) {\n    color.use(require('./HSV'));\n\n    color.installColorSpace('HSL', ['hue', 'saturation', 'lightness', 'alpha'], {\n        hsv: function () {\n            // Algorithm adapted from http://wiki.secondlife.com/wiki/Color_conversion_scripts\n            var l = this._lightness * 2,\n                s = this._saturation * ((l <= 1) ? l : 2 - l),\n                saturation;\n\n            // Avoid division by zero when l + s is very small (approaching black):\n            if (l + s < 1e-9) {\n                saturation = 0;\n            } else {\n                saturation = (2 * s) / (l + s);\n            }\n\n            return new color.HSV(this._hue, saturation, (l + s) / 2, this._alpha);\n        },\n\n        rgb: function () {\n            return this.hsv().rgb();\n        },\n\n        fromRgb: function () { // Becomes one.color.RGB.prototype.hsv\n            return this.hsv().hsl();\n        }\n    });\n};\n","module.exports = require('./lib/color')\n    .use(require('./lib/HSV'))\n    .use(require('./lib/HSL'));\n"]}