gradient
Version:
A class for generating gradients.
1,855 lines (1,570 loc) • 54.5 kB
JavaScript
/* MIT license */
var Color = (function() {var require = function (file, cwd) {
var resolved = require.resolve(file, cwd || '/');
var mod = require.modules[resolved];
if (!mod) throw new Error(
'Failed to resolve module ' + file + ', tried ' + resolved
);
var res = mod._cached ? mod._cached : mod();
return res;
}
var __require = require;
require.paths = [];
require.modules = {};
require.extensions = [".js",".coffee"];
require.resolve = (function () {
var core = [ 'assert', 'events', 'fs', 'path', 'vm' ]
.reduce(function (acc, x) {
acc[x] = true;
return acc;
}, {})
;
return function (x, cwd) {
if (!cwd) cwd = '/';
if (core[x]) return x;
var path = require.modules.path();
var y = cwd || '.';
if (x.match(/^(?:\.\.?\/|\/)/)) {
var m = loadAsFileSync(path.resolve(y, x))
|| loadAsDirectorySync(path.resolve(y, x));
if (m) return m;
}
var n = loadNodeModulesSync(x, y);
if (n) return n;
throw new Error("Cannot find module '" + x + "'");
function loadAsFileSync (x) {
if (require.modules[x]) {
return x;
}
for (var i = 0; i < require.extensions.length; i++) {
var ext = require.extensions[i];
if (require.modules[x + ext]) return x + ext;
}
}
function loadAsDirectorySync (x) {
x = x.replace(/\/+$/, '');
var pkgfile = x + '/package.json';
if (require.modules[pkgfile]) {
var pkg = require.modules[pkgfile]();
var b = pkg.browserify;
if (typeof b === 'object' && b.main) {
var m = loadAsFileSync(path.resolve(x, b.main));
if (m) return m;
}
else if (typeof b === 'string') {
var m = loadAsFileSync(path.resolve(x, b));
if (m) return m;
}
else if (pkg.main) {
var m = loadAsFileSync(path.resolve(x, pkg.main));
if (m) return m;
}
}
return loadAsFileSync(x + '/index');
}
function loadNodeModulesSync (x, start) {
var dirs = nodeModulesPathsSync(start);
for (var i = 0; i < dirs.length; i++) {
var dir = dirs[i];
var m = loadAsFileSync(dir + '/' + x);
if (m) return m;
var n = loadAsDirectorySync(dir + '/' + x);
if (n) return n;
}
var m = loadAsFileSync(x);
if (m) return m;
}
function nodeModulesPathsSync (start) {
var parts;
if (start === '/') parts = [ '' ];
else parts = path.normalize(start).split(/\/+/);
var dirs = [];
for (var i = parts.length - 1; i >= 0; i--) {
if (parts[i] === 'node_modules') continue;
var dir = parts.slice(0, i + 1).join('/') + '/node_modules';
dirs.push(dir);
}
return dirs;
}
};
})();
require.alias = function (from, to) {
var path = require.modules.path();
var res = null;
try {
res = require.resolve(from + '/package.json', '/');
}
catch (err) {
res = require.resolve(from, '/');
}
var basedir = path.dirname(res);
Object.keys(require.modules)
.forEach(function (x) {
if (x.slice(0, basedir.length + 1) === basedir + '/') {
var f = x.slice(basedir.length);
require.modules[to + f] = require.modules[basedir + f];
}
else if (x === basedir) {
require.modules[to] = require.modules[basedir];
}
})
;
};
if (typeof process === 'undefined') process = {};
if (!process.nextTick) process.nextTick = function (fn) {
setTimeout(fn, 0);
};
if (!process.title) process.title = 'browser';
if (!process.binding) process.binding = function (name) {
if (name === 'evals') return require('vm')
else throw new Error('No such module')
};
if (!process.cwd) process.cwd = function () { return '.' };
require.modules["path"] = function () {
var module = { exports : {} };
var exports = module.exports;
var __dirname = ".";
var __filename = "path";
var require = function (file) {
return __require(file, ".");
};
require.resolve = function (file) {
return __require.resolve(name, ".");
};
require.modules = __require.modules;
__require.modules["path"]._cached = module.exports;
(function () {
// resolves . and .. elements in a path array with directory names there
// must be no slashes, empty elements, or device names (c:\) in the array
// (so also no leading and trailing slashes - it does not distinguish
// relative and absolute paths)
function normalizeArray(parts, allowAboveRoot) {
// if the path tries to go above the root, `up` ends up > 0
var up = 0;
for (var i = parts.length; i >= 0; i--) {
var last = parts[i];
if (last == '.') {
parts.splice(i, 1);
} else if (last === '..') {
parts.splice(i, 1);
up++;
} else if (up) {
parts.splice(i, 1);
up--;
}
}
// if the path is allowed to go above the root, restore leading ..s
if (allowAboveRoot) {
for (; up--; up) {
parts.unshift('..');
}
}
return parts;
}
// Regex to split a filename into [*, dir, basename, ext]
// posix version
var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/;
// path.resolve([from ...], to)
// posix version
exports.resolve = function() {
var resolvedPath = '',
resolvedAbsolute = false;
for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) {
var path = (i >= 0)
? arguments[i]
: process.cwd();
// Skip empty and invalid entries
if (typeof path !== 'string' || !path) {
continue;
}
resolvedPath = path + '/' + resolvedPath;
resolvedAbsolute = path.charAt(0) === '/';
}
// At this point the path should be resolved to a full absolute path, but
// handle relative paths to be safe (might happen when process.cwd() fails)
// Normalize the path
resolvedPath = normalizeArray(resolvedPath.split('/').filter(function(p) {
return !!p;
}), !resolvedAbsolute).join('/');
return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
};
// path.normalize(path)
// posix version
exports.normalize = function(path) {
var isAbsolute = path.charAt(0) === '/',
trailingSlash = path.slice(-1) === '/';
// Normalize the path
path = normalizeArray(path.split('/').filter(function(p) {
return !!p;
}), !isAbsolute).join('/');
if (!path && !isAbsolute) {
path = '.';
}
if (path && trailingSlash) {
path += '/';
}
return (isAbsolute ? '/' : '') + path;
};
// posix version
exports.join = function() {
var paths = Array.prototype.slice.call(arguments, 0);
return exports.normalize(paths.filter(function(p, index) {
return p && typeof p === 'string';
}).join('/'));
};
exports.dirname = function(path) {
var dir = splitPathRe.exec(path)[1] || '';
var isWindows = false;
if (!dir) {
// No dirname
return '.';
} else if (dir.length === 1 ||
(isWindows && dir.length <= 3 && dir.charAt(1) === ':')) {
// It is just a slash or a drive letter with a slash
return dir;
} else {
// It is a full dirname, strip trailing slash
return dir.substring(0, dir.length - 1);
}
};
exports.basename = function(path, ext) {
var f = splitPathRe.exec(path)[2] || '';
// TODO: make this comparison case-insensitive on windows?
if (ext && f.substr(-1 * ext.length) === ext) {
f = f.substr(0, f.length - ext.length);
}
return f;
};
exports.extname = function(path) {
return splitPathRe.exec(path)[3] || '';
};
;
}).call(module.exports);
__require.modules["path"]._cached = module.exports;
return module.exports;
};
require.modules["/gradient.js"] = function () {
var module = { exports : {} };
var exports = module.exports;
var __dirname = "/";
var __filename = "/gradient.js";
var require = function (file) {
return __require(file, "/");
};
require.resolve = function (file) {
return __require.resolve(name, "/");
};
require.modules = __require.modules;
__require.modules["/gradient.js"]._cached = module.exports;
(function () {
var sets = function(xs) {
var loop = function(acc, i) {
if (i == xs.length || !xs[i+1]) { return acc; }
acc.push([xs[i], xs[i+1]]);
return loop(acc, i + 1);
}
return loop([], 0);
};
// ------------------------------------------------------------------------ //
var Color = require('color')
, Gradient = function(/* [color1, color2, steps] -or- [[array], steps] */) {
var args = arguments[0];
this.stops = [];
this.steps = 2;
// Slice up arguments
if (Object.prototype.toString.call(args[0]) === '[object Array]') {
for (var i = 0; i < (args[0].length); i++) {
this.stops.push(Color(args[0][i]));
}
this.steps = args[1];
} else {
for (var i = 0; i < (args.length - 1); i++) {
this.stops.push(Color(args[i]));
}
this.steps = args[args.length - 1];
}
};
(function(obj){
// Build given number of steps, including start and end
var buildSteps = function(start, end, span) {
var steps = [start];
if (span < 0) {
steps.push(end);
for (var i = 0; i < Math.abs(span); i++) { steps.pop(); }
} else {
var base = { h: start.hue(), s: start.saturation(), l: start.lightness(), a: start.alpha() };
var delta = {
h: (base.h - end.hue()) / span,
s: (base.s - end.saturation()) / span,
l: (base.l - end.lightness()) / span,
a: (base.a - end.alpha()) / span
};
for (var i = 1; i <= span; i++) {
var h = base.h - (delta.h * i);
var s = base.s - (delta.s * i);
var l = base.l - (delta.l * i);
var a = base.a - (delta.a * i);
// Round out values
if (h > 360) { h -= 360; } else if (h < 0) { h += 360; }
if (s > 100) { s = 100; } else if (s < 0) { s = 0; }
if (l > 100) { l = 100; } else if (l < 0) { l = 0; }
if (a > 1) { a = 1; } else if (a < 0) { a = 0; }
// Build new color object
var c = Color().hue(h).saturation(s).lightness(l).alpha(a);
steps.push(c);
}
steps.push(end);
}
return steps;
};
// To array
obj.toArray = function(format) {
// Generate gradient steps
if (typeof this.__cache === 'undefined') {
var stops = this.stops;
var steps = this.steps;
var overflow = Math.floor(stops.length / 2);
var cs = [];
sets(stops).forEach(function(x){
// Determine step span for set
var span;
if (stops.length === 2) { span = steps; }
else {
span = Math.floor(steps / (stops.length - 1));
if (overflow > 0 && steps % (stops.length - 1) != 0) { span += 1; overflow--; }
}
// Don't double count the start/end
span -= 2;
// Generate colors for this set
cs = cs.concat(buildSteps(x[0], x[1], span));
});
this.__cache = cs;
}
// Return in specified format
if (typeof format !== 'undefined') {
return this.__cache.map(function(x){ return x[format](); });
} else {
return this.__cache;
}
};
}(Gradient.prototype));
module.exports = function() {
return new Gradient(Array.prototype.slice.call(arguments,0));
};
;
}).call(module.exports);
__require.modules["/gradient.js"]._cached = module.exports;
return module.exports;
};
require.modules["color/package.json"] = function () {
var module = { exports : {} };
var exports = module.exports;
var __dirname = "color";
var __filename = "color/package.json";
var require = function (file) {
return __require(file, "color");
};
require.resolve = function (file) {
return __require.resolve(name, "color");
};
require.modules = __require.modules;
__require.modules["color/package.json"]._cached = module.exports;
(function () {
module.exports = {"name":"color","description":"Color conversion and manipulation with CSS string support","version":"0.7.1","author":{"name":"Heather Arthur","email":"fayearthur@gmail.com"},"repository":{"type":"git","url":"http://github.com/harthur/color.git"},"main":"./color","dependencies":{"color-convert":"0.5.x","color-string":"0.2.x"},"devDependencies":{"nomnom":"~1.5.2","browserify":"~2.18.1","grunt":"~0.4.1","grunt-contrib-uglify":"~0.2.0"},"keywords":["color","colour","css"],"bugs":{"url":"https://github.com/harthur/color/issues"},"homepage":"https://github.com/harthur/color","_id":"color@0.7.1","dist":{"shasum":"a2676f19c6ccb708b7586dc98b5c6e37dc9a199c","tarball":"http://registry.npmjs.org/color/-/color-0.7.1.tgz"},"_from":"color@>=0.4.0","_npmVersion":"1.3.25","_npmUser":{"name":"harth","email":"fayearthur@gmail.com"},"maintainers":[{"name":"harth","email":"fayearthur@gmail.com"}],"directories":{},"_shasum":"a2676f19c6ccb708b7586dc98b5c6e37dc9a199c","_resolved":"https://registry.npmjs.org/color/-/color-0.7.1.tgz"};
}).call(module.exports);
__require.modules["color/package.json"]._cached = module.exports;
return module.exports;
};
require.modules["color"] = function () {
var module = { exports : {} };
var exports = module.exports;
var __dirname = ".";
var __filename = "color";
var require = function (file) {
return __require(file, ".");
};
require.resolve = function (file) {
return __require.resolve(name, ".");
};
require.modules = __require.modules;
__require.modules["color"]._cached = module.exports;
(function () {
/* MIT license */
var convert = require("color-convert"),
string = require("color-string");
module.exports = function(cssString) {
return new Color(cssString);
};
var Color = function(cssString) {
this.values = {
rgb: [0, 0, 0],
hsl: [0, 0, 0],
hsv: [0, 0, 0],
hwb: [0, 0, 0],
cmyk: [0, 0, 0, 0],
alpha: 1
}
// parse Color() argument
if (typeof cssString == "string") {
var vals = string.getRgba(cssString);
if (vals) {
this.setValues("rgb", vals);
}
else if(vals = string.getHsla(cssString)) {
this.setValues("hsl", vals);
}
else if(vals = string.getHwb(cssString)) {
this.setValues("hwb", vals);
}
else {
throw new Error("Unable to parse color from string " + cssString);
}
}
else if (typeof cssString == "object") {
var vals = cssString;
if(vals["r"] !== undefined || vals["red"] !== undefined) {
this.setValues("rgb", vals)
}
else if(vals["l"] !== undefined || vals["lightness"] !== undefined) {
this.setValues("hsl", vals)
}
else if(vals["v"] !== undefined || vals["value"] !== undefined) {
this.setValues("hsv", vals)
}
else if(vals["w"] !== undefined || vals["whiteness"] !== undefined) {
this.setValues("hwb", vals)
}
else if(vals["c"] !== undefined || vals["cyan"] !== undefined) {
this.setValues("cmyk", vals)
}
else {
throw new Error("Unable to parse color from object " + JSON.stringify(cssString));
}
}
}
Color.prototype = {
rgb: function (vals) {
return this.setSpace("rgb", arguments);
},
hsl: function(vals) {
return this.setSpace("hsl", arguments);
},
hsv: function(vals) {
return this.setSpace("hsv", arguments);
},
hwb: function(vals) {
return this.setSpace("hwb", arguments);
},
cmyk: function(vals) {
return this.setSpace("cmyk", arguments);
},
rgbArray: function() {
return this.values.rgb;
},
hslArray: function() {
return this.values.hsl;
},
hsvArray: function() {
return this.values.hsv;
},
hwbArray: function() {
if (this.values.alpha !== 1) {
return this.values.hwb.concat([this.values.alpha])
}
return this.values.hwb;
},
cmykArray: function() {
return this.values.cmyk;
},
rgbaArray: function() {
var rgb = this.values.rgb;
return rgb.concat([this.values.alpha]);
},
hslaArray: function() {
var hsl = this.values.hsl;
return hsl.concat([this.values.alpha]);
},
alpha: function(val) {
if (val === undefined) {
return this.values.alpha;
}
this.setValues("alpha", val);
return this;
},
red: function(val) {
return this.setChannel("rgb", 0, val);
},
green: function(val) {
return this.setChannel("rgb", 1, val);
},
blue: function(val) {
return this.setChannel("rgb", 2, val);
},
hue: function(val) {
return this.setChannel("hsl", 0, val);
},
saturation: function(val) {
return this.setChannel("hsl", 1, val);
},
lightness: function(val) {
return this.setChannel("hsl", 2, val);
},
saturationv: function(val) {
return this.setChannel("hsv", 1, val);
},
whiteness: function(val) {
return this.setChannel("hwb", 1, val);
},
blackness: function(val) {
return this.setChannel("hwb", 2, val);
},
value: function(val) {
return this.setChannel("hsv", 2, val);
},
cyan: function(val) {
return this.setChannel("cmyk", 0, val);
},
magenta: function(val) {
return this.setChannel("cmyk", 1, val);
},
yellow: function(val) {
return this.setChannel("cmyk", 2, val);
},
black: function(val) {
return this.setChannel("cmyk", 3, val);
},
hexString: function() {
return string.hexString(this.values.rgb);
},
rgbString: function() {
return string.rgbString(this.values.rgb, this.values.alpha);
},
rgbaString: function() {
return string.rgbaString(this.values.rgb, this.values.alpha);
},
percentString: function() {
return string.percentString(this.values.rgb, this.values.alpha);
},
hslString: function() {
return string.hslString(this.values.hsl, this.values.alpha);
},
hslaString: function() {
return string.hslaString(this.values.hsl, this.values.alpha);
},
hwbString: function() {
return string.hwbString(this.values.hwb, this.values.alpha);
},
keyword: function() {
return string.keyword(this.values.rgb, this.values.alpha);
},
luminosity: function() {
// http://www.w3.org/TR/WCAG20/#relativeluminancedef
var rgb = this.values.rgb;
var lum = [];
for (var i = 0; i < rgb.length; i++) {
var chan = rgb[i] / 255;
lum[i] = (chan <= 0.03928) ? chan / 12.92
: Math.pow(((chan + 0.055) / 1.055), 2.4)
}
return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];
},
contrast: function(color2) {
// http://www.w3.org/TR/WCAG20/#contrast-ratiodef
var lum1 = this.luminosity();
var lum2 = color2.luminosity();
if (lum1 > lum2) {
return (lum1 + 0.05) / (lum2 + 0.05)
};
return (lum2 + 0.05) / (lum1 + 0.05);
},
level: function(color2) {
var contrastRatio = this.contrast(color2);
return (contrastRatio >= 7.1)
? 'AAA'
: (contrastRatio >= 4.5)
? 'AA'
: '';
},
dark: function() {
// YIQ equation from http://24ways.org/2010/calculating-color-contrast
var rgb = this.values.rgb,
yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;
return yiq < 128;
},
light: function() {
return !this.dark();
},
negate: function() {
var rgb = []
for (var i = 0; i < 3; i++) {
rgb[i] = 255 - this.values.rgb[i];
}
this.setValues("rgb", rgb);
return this;
},
lighten: function(ratio) {
this.values.hsl[2] += this.values.hsl[2] * ratio;
this.setValues("hsl", this.values.hsl);
return this;
},
darken: function(ratio) {
this.values.hsl[2] -= this.values.hsl[2] * ratio;
this.setValues("hsl", this.values.hsl);
return this;
},
saturate: function(ratio) {
this.values.hsl[1] += this.values.hsl[1] * ratio;
this.setValues("hsl", this.values.hsl);
return this;
},
desaturate: function(ratio) {
this.values.hsl[1] -= this.values.hsl[1] * ratio;
this.setValues("hsl", this.values.hsl);
return this;
},
whiten: function(ratio) {
this.values.hwb[1] += this.values.hwb[1] * ratio;
this.setValues("hwb", this.values.hwb);
return this;
},
blacken: function(ratio) {
this.values.hwb[2] += this.values.hwb[2] * ratio;
this.setValues("hwb", this.values.hwb);
return this;
},
greyscale: function() {
var rgb = this.values.rgb;
// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;
this.setValues("rgb", [val, val, val]);
return this;
},
clearer: function(ratio) {
this.setValues("alpha", this.values.alpha - (this.values.alpha * ratio));
return this;
},
opaquer: function(ratio) {
this.setValues("alpha", this.values.alpha + (this.values.alpha * ratio));
return this;
},
rotate: function(degrees) {
var hue = this.values.hsl[0];
hue = (hue + degrees) % 360;
hue = hue < 0 ? 360 + hue : hue;
this.values.hsl[0] = hue;
this.setValues("hsl", this.values.hsl);
return this;
},
mix: function(color2, weight) {
weight = 1 - (weight == null ? 0.5 : weight);
// algorithm from Sass's mix(). Ratio of first color in mix is
// determined by the alphas of both colors and the weight
var t1 = weight * 2 - 1,
d = this.alpha() - color2.alpha();
var weight1 = (((t1 * d == -1) ? t1 : (t1 + d) / (1 + t1 * d)) + 1) / 2;
var weight2 = 1 - weight1;
var rgb = this.rgbArray();
var rgb2 = color2.rgbArray();
for (var i = 0; i < rgb.length; i++) {
rgb[i] = rgb[i] * weight1 + rgb2[i] * weight2;
}
this.setValues("rgb", rgb);
var alpha = this.alpha() * weight + color2.alpha() * (1 - weight);
this.setValues("alpha", alpha);
return this;
},
toJSON: function() {
return this.rgb();
},
clone: function() {
return new Color(this.rgb());
}
}
Color.prototype.getValues = function(space) {
var vals = {};
for (var i = 0; i < space.length; i++) {
vals[space[i]] = this.values[space][i];
}
if (this.values.alpha != 1) {
vals["a"] = this.values.alpha;
}
// {r: 255, g: 255, b: 255, a: 0.4}
return vals;
}
Color.prototype.setValues = function(space, vals) {
var spaces = {
"rgb": ["red", "green", "blue"],
"hsl": ["hue", "saturation", "lightness"],
"hsv": ["hue", "saturation", "value"],
"hwb": ["hue", "whiteness", "blackness"],
"cmyk": ["cyan", "magenta", "yellow", "black"]
};
var maxes = {
"rgb": [255, 255, 255],
"hsl": [360, 100, 100],
"hsv": [360, 100, 100],
"hwb": [360, 100, 100],
"cmyk": [100, 100, 100, 100]
};
var alpha = 1;
if (space == "alpha") {
alpha = vals;
}
else if (vals.length) {
// [10, 10, 10]
this.values[space] = vals.slice(0, space.length);
alpha = vals[space.length];
}
else if (vals[space[0]] !== undefined) {
// {r: 10, g: 10, b: 10}
for (var i = 0; i < space.length; i++) {
this.values[space][i] = vals[space[i]];
}
alpha = vals.a;
}
else if (vals[spaces[space][0]] !== undefined) {
// {red: 10, green: 10, blue: 10}
var chans = spaces[space];
for (var i = 0; i < space.length; i++) {
this.values[space][i] = vals[chans[i]];
}
alpha = vals.alpha;
}
this.values.alpha = Math.max(0, Math.min(1, (alpha !== undefined ? alpha : this.values.alpha) ));
if (space == "alpha") {
return;
}
// cap values of the space prior converting all values
for (var i = 0; i < space.length; i++) {
var capped = Math.max(0, Math.min(maxes[space][i], this.values[space][i]));
this.values[space][i] = Math.round(capped);
}
// convert to all the other color spaces
for (var sname in spaces) {
if (sname != space) {
this.values[sname] = convert[space][sname](this.values[space])
}
// cap values
for (var i = 0; i < sname.length; i++) {
var capped = Math.max(0, Math.min(maxes[sname][i], this.values[sname][i]));
this.values[sname][i] = Math.round(capped);
}
}
return true;
}
Color.prototype.setSpace = function(space, args) {
var vals = args[0];
if (vals === undefined) {
// color.rgb()
return this.getValues(space);
}
// color.rgb(10, 10, 10)
if (typeof vals == "number") {
vals = Array.prototype.slice.call(args);
}
this.setValues(space, vals);
return this;
}
Color.prototype.setChannel = function(space, index, val) {
if (val === undefined) {
// color.red()
return this.values[space][index];
}
// color.red(100)
this.values[space][index] = val;
this.setValues(space, this.values[space]);
return this;
}
;
}).call(module.exports);
__require.modules["color"]._cached = module.exports;
return module.exports;
};
require.modules["color/node_modules/color-convert/package.json"] = function () {
var module = { exports : {} };
var exports = module.exports;
var __dirname = "color/node_modules/color-convert";
var __filename = "color/node_modules/color-convert/package.json";
var require = function (file) {
return __require(file, "color/node_modules/color-convert");
};
require.resolve = function (file) {
return __require.resolve(name, "color/node_modules/color-convert");
};
require.modules = __require.modules;
__require.modules["color/node_modules/color-convert/package.json"]._cached = module.exports;
(function () {
module.exports = {"name":"color-convert","description":"Plain color conversion functions","version":"0.5.0","author":{"name":"Heather Arthur","email":"fayearthur@gmail.com"},"repository":{"type":"git","url":"http://github.com/harthur/color-convert.git"},"main":"./index","devDependencies":{"browserify":">=1.0.0","uglify-js":"1.0.x"},"keywords":["color","colour","rgb"],"bugs":{"url":"https://github.com/harthur/color-convert/issues"},"homepage":"https://github.com/harthur/color-convert","_id":"color-convert@0.5.0","_shasum":"4032cab2128c81670c7b394d77b6783f49caaaf7","_from":"color-convert@>=0.5.0 <0.6.0","_npmVersion":"1.4.9","_npmUser":{"name":"harth","email":"fayearthur@gmail.com"},"maintainers":[{"name":"harth","email":"fayearthur@gmail.com"}],"dist":{"shasum":"4032cab2128c81670c7b394d77b6783f49caaaf7","tarball":"http://registry.npmjs.org/color-convert/-/color-convert-0.5.0.tgz"},"directories":{},"_resolved":"https://registry.npmjs.org/color-convert/-/color-convert-0.5.0.tgz"};
}).call(module.exports);
__require.modules["color/node_modules/color-convert/package.json"]._cached = module.exports;
return module.exports;
};
require.modules["color-convert"] = function () {
var module = { exports : {} };
var exports = module.exports;
var __dirname = ".";
var __filename = "color-convert";
var require = function (file) {
return __require(file, ".");
};
require.resolve = function (file) {
return __require.resolve(name, ".");
};
require.modules = __require.modules;
__require.modules["color-convert"]._cached = module.exports;
(function () {
var conversions = require("./conversions");
var convert = function() {
return new Converter();
}
for (var func in conversions) {
// export Raw versions
convert[func + "Raw"] = (function(func) {
// accept array or plain args
return function(arg) {
if (typeof arg == "number")
arg = Array.prototype.slice.call(arguments);
return conversions[func](arg);
}
})(func);
var pair = /(\w+)2(\w+)/.exec(func),
from = pair[1],
to = pair[2];
// export rgb2hsl and ["rgb"]["hsl"]
convert[from] = convert[from] || {};
convert[from][to] = convert[func] = (function(func) {
return function(arg) {
if (typeof arg == "number")
arg = Array.prototype.slice.call(arguments);
var val = conversions[func](arg);
if (typeof val == "string" || val === undefined)
return val; // keyword
for (var i = 0; i < val.length; i++)
val[i] = Math.round(val[i]);
return val;
}
})(func);
}
/* Converter does lazy conversion and caching */
var Converter = function() {
this.convs = {};
};
/* Either get the values for a space or
set the values for a space, depending on args */
Converter.prototype.routeSpace = function(space, args) {
var values = args[0];
if (values === undefined) {
// color.rgb()
return this.getValues(space);
}
// color.rgb(10, 10, 10)
if (typeof values == "number") {
values = Array.prototype.slice.call(args);
}
return this.setValues(space, values);
};
/* Set the values for a space, invalidating cache */
Converter.prototype.setValues = function(space, values) {
this.space = space;
this.convs = {};
this.convs[space] = values;
return this;
};
/* Get the values for a space. If there's already
a conversion for the space, fetch it, otherwise
compute it */
Converter.prototype.getValues = function(space) {
var vals = this.convs[space];
if (!vals) {
var fspace = this.space,
from = this.convs[fspace];
vals = convert[fspace][space](from);
this.convs[space] = vals;
}
return vals;
};
["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function(space) {
Converter.prototype[space] = function(vals) {
return this.routeSpace(space, arguments);
}
});
module.exports = convert;;
}).call(module.exports);
__require.modules["color-convert"]._cached = module.exports;
return module.exports;
};
require.modules["./conversions"] = function () {
var module = { exports : {} };
var exports = module.exports;
var __dirname = ".";
var __filename = "./conversions";
var require = function (file) {
return __require(file, ".");
};
require.resolve = function (file) {
return __require.resolve(name, ".");
};
require.modules = __require.modules;
__require.modules["./conversions"]._cached = module.exports;
(function () {
/* MIT license */
module.exports = {
rgb2hsl: rgb2hsl,
rgb2hsv: rgb2hsv,
rgb2hwb: rgb2hwb,
rgb2cmyk: rgb2cmyk,
rgb2keyword: rgb2keyword,
rgb2xyz: rgb2xyz,
rgb2lab: rgb2lab,
rgb2lch: rgb2lch,
hsl2rgb: hsl2rgb,
hsl2hsv: hsl2hsv,
hsl2hwb: hsl2hwb,
hsl2cmyk: hsl2cmyk,
hsl2keyword: hsl2keyword,
hsv2rgb: hsv2rgb,
hsv2hsl: hsv2hsl,
hsv2hwb: hsv2hwb,
hsv2cmyk: hsv2cmyk,
hsv2keyword: hsv2keyword,
hwb2rgb: hwb2rgb,
hwb2hsl: hwb2hsl,
hwb2hsv: hwb2hsv,
hwb2cmyk: hwb2cmyk,
hwb2keyword: hwb2keyword,
cmyk2rgb: cmyk2rgb,
cmyk2hsl: cmyk2hsl,
cmyk2hsv: cmyk2hsv,
cmyk2hwb: cmyk2hwb,
cmyk2keyword: cmyk2keyword,
keyword2rgb: keyword2rgb,
keyword2hsl: keyword2hsl,
keyword2hsv: keyword2hsv,
keyword2hwb: keyword2hwb,
keyword2cmyk: keyword2cmyk,
keyword2lab: keyword2lab,
keyword2xyz: keyword2xyz,
xyz2rgb: xyz2rgb,
xyz2lab: xyz2lab,
xyz2lch: xyz2lch,
lab2xyz: lab2xyz,
lab2rgb: lab2rgb,
lab2lch: lab2lch,
lch2lab: lch2lab,
lch2xyz: lch2xyz,
lch2rgb: lch2rgb
}
function rgb2hsl(rgb) {
var r = rgb[0]/255,
g = rgb[1]/255,
b = rgb[2]/255,
min = Math.min(r, g, b),
max = Math.max(r, g, b),
delta = max - min,
h, s, l;
if (max == min)
h = 0;
else if (r == max)
h = (g - b) / delta;
else if (g == max)
h = 2 + (b - r) / delta;
else if (b == max)
h = 4 + (r - g)/ delta;
h = Math.min(h * 60, 360);
if (h < 0)
h += 360;
l = (min + max) / 2;
if (max == min)
s = 0;
else if (l <= 0.5)
s = delta / (max + min);
else
s = delta / (2 - max - min);
return [h, s * 100, l * 100];
}
function rgb2hsv(rgb) {
var r = rgb[0],
g = rgb[1],
b = rgb[2],
min = Math.min(r, g, b),
max = Math.max(r, g, b),
delta = max - min,
h, s, v;
if (max == 0)
s = 0;
else
s = (delta/max * 1000)/10;
if (max == min)
h = 0;
else if (r == max)
h = (g - b) / delta;
else if (g == max)
h = 2 + (b - r) / delta;
else if (b == max)
h = 4 + (r - g) / delta;
h = Math.min(h * 60, 360);
if (h < 0)
h += 360;
v = ((max / 255) * 1000) / 10;
return [h, s, v];
}
function rgb2hwb(rgb) {
var r = rgb[0],
g = rgb[1],
b = rgb[2],
h = rgb2hsl(rgb)[0]
w = 1/255 * Math.min(r, Math.min(g, b))
b = 1 - 1/255 * Math.max(r, Math.max(g, b));
return [h, w * 100, b * 100];
}
function rgb2cmyk(rgb) {
var r = rgb[0] / 255,
g = rgb[1] / 255,
b = rgb[2] / 255,
c, m, y, k;
k = Math.min(1 - r, 1 - g, 1 - b);
c = (1 - r - k) / (1 - k);
m = (1 - g - k) / (1 - k);
y = (1 - b - k) / (1 - k);
return [c * 100, m * 100, y * 100, k * 100];
}
function rgb2keyword(rgb) {
return reverseKeywords[JSON.stringify(rgb)];
}
function rgb2xyz(rgb) {
var r = rgb[0] / 255,
g = rgb[1] / 255,
b = rgb[2] / 255;
// assume sRGB
r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
return [x * 100, y *100, z * 100];
}
function rgb2lab(rgb) {
var xyz = rgb2xyz(rgb),
x = xyz[0],
y = xyz[1],
z = xyz[2],
l, a, b;
x /= 95.047;
y /= 100;
z /= 108.883;
x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);
y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);
z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);
l = (116 * y) - 16;
a = 500 * (x - y);
b = 200 * (y - z);
return [l, a, b];
}
function rgb2lch(args) {
return lab2lch(rgb2lab(args));
}
function hsl2rgb(hsl) {
var h = hsl[0] / 360,
s = hsl[1] / 100,
l = hsl[2] / 100,
t1, t2, t3, rgb, val;
if (s == 0) {
val = l * 255;
return [val, val, val];
}
if (l < 0.5)
t2 = l * (1 + s);
else
t2 = l + s - l * s;
t1 = 2 * l - t2;
rgb = [0, 0, 0];
for (var i = 0; i < 3; i++) {
t3 = h + 1 / 3 * - (i - 1);
t3 < 0 && t3++;
t3 > 1 && t3--;
if (6 * t3 < 1)
val = t1 + (t2 - t1) * 6 * t3;
else if (2 * t3 < 1)
val = t2;
else if (3 * t3 < 2)
val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
else
val = t1;
rgb[i] = val * 255;
}
return rgb;
}
function hsl2hsv(hsl) {
var h = hsl[0],
s = hsl[1] / 100,
l = hsl[2] / 100,
sv, v;
l *= 2;
s *= (l <= 1) ? l : 2 - l;
v = (l + s) / 2;
sv = (2 * s) / (l + s);
return [h, sv * 100, v * 100];
}
function hsl2hwb(args) {
return rgb2hwb(hsl2rgb(args));
}
function hsl2cmyk(args) {
return rgb2cmyk(hsl2rgb(args));
}
function hsl2keyword(args) {
return rgb2keyword(hsl2rgb(args));
}
function hsv2rgb(hsv) {
var h = hsv[0] / 60,
s = hsv[1] / 100,
v = hsv[2] / 100,
hi = Math.floor(h) % 6;
var f = h - Math.floor(h),
p = 255 * v * (1 - s),
q = 255 * v * (1 - (s * f)),
t = 255 * v * (1 - (s * (1 - f))),
v = 255 * v;
switch(hi) {
case 0:
return [v, t, p];
case 1:
return [q, v, p];
case 2:
return [p, v, t];
case 3:
return [p, q, v];
case 4:
return [t, p, v];
case 5:
return [v, p, q];
}
}
function hsv2hsl(hsv) {
var h = hsv[0],
s = hsv[1] / 100,
v = hsv[2] / 100,
sl, l;
l = (2 - s) * v;
sl = s * v;
sl /= (l <= 1) ? l : 2 - l;
l /= 2;
return [h, sl * 100, l * 100];
}
function hsv2hwb(args) {
return rgb2hwb(hsv2rgb(args))
}
function hsv2cmyk(args) {
return rgb2cmyk(hsv2rgb(args));
}
function hsv2keyword(args) {
return rgb2keyword(hsv2rgb(args));
}
// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
function hwb2rgb(hwb) {
var h = hwb[0] / 360,
wh = hwb[1] / 100,
bl = hwb[2] / 100,
ratio = wh + bl,
i, v, f, n;
// wh + bl cant be > 1
if (ratio > 1) {
wh /= ratio;
bl /= ratio;
}
i = Math.floor(6 * h);
v = 1 - bl;
f = 6 * h - i;
if ((i & 0x01) != 0) {
f = 1 - f;
}
n = wh + f * (v - wh); // linear interpolation
switch (i) {
default:
case 6:
case 0: r = v; g = n; b = wh; break;
case 1: r = n; g = v; b = wh; break;
case 2: r = wh; g = v; b = n; break;
case 3: r = wh; g = n; b = v; break;
case 4: r = n; g = wh; b = v; break;
case 5: r = v; g = wh; b = n; break;
}
return [r * 255, g * 255, b * 255];
}
function hwb2hsl(args) {
return rgb2hsl(hwb2rgb(args));
}
function hwb2hsv(args) {
return rgb2hsv(hwb2rgb(args));
}
function hwb2cmyk(args) {
return rgb2cmyk(hwb2rgb(args));
}
function hwb2keyword(args) {
return rgb2keyword(hwb2rgb(args));
}
function cmyk2rgb(cmyk) {
var c = cmyk[0] / 100,
m = cmyk[1] / 100,
y = cmyk[2] / 100,
k = cmyk[3] / 100,
r, g, b;
r = 1 - Math.min(1, c * (1 - k) + k);
g = 1 - Math.min(1, m * (1 - k) + k);
b = 1 - Math.min(1, y * (1 - k) + k);
return [r * 255, g * 255, b * 255];
}
function cmyk2hsl(args) {
return rgb2hsl(cmyk2rgb(args));
}
function cmyk2hsv(args) {
return rgb2hsv(cmyk2rgb(args));
}
function cmyk2hwb(args) {
return rgb2hwb(cmyk2rgb(args));
}
function cmyk2keyword(args) {
return rgb2keyword(cmyk2rgb(args));
}
function xyz2rgb(xyz) {
var x = xyz[0] / 100,
y = xyz[1] / 100,
z = xyz[2] / 100,
r, g, b;
r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
// assume sRGB
r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
: r = (r * 12.92);
g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
: g = (g * 12.92);
b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
: b = (b * 12.92);
r = Math.min(Math.max(0, r), 1);
g = Math.min(Math.max(0, g), 1);
b = Math.min(Math.max(0, b), 1);
return [r * 255, g * 255, b * 255];
}
function xyz2lab(xyz) {
var x = xyz[0],
y = xyz[1],
z = xyz[2],
l, a, b;
x /= 95.047;
y /= 100;
z /= 108.883;
x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);
y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);
z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);
l = (116 * y) - 16;
a = 500 * (x - y);
b = 200 * (y - z);
return [l, a, b];
}
function xyz2lch(args) {
return lab2lch(xyz2lab(args));
}
function lab2xyz(lab) {
var l = lab[0],
a = lab[1],
b = lab[2],
x, y, z, y2;
if (l <= 8) {
y = (l * 100) / 903.3;
y2 = (7.787 * (y / 100)) + (16 / 116);
} else {
y = 100 * Math.pow((l + 16) / 116, 3);
y2 = Math.pow(y / 100, 1/3);
}
x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);
z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);
return [x, y, z];
}
function lab2lch(lab) {
var l = lab[0],
a = lab[1],
b = lab[2],
hr, h, c;
hr = Math.atan2(b, a);
h = hr * 360 / 2 / Math.PI;
if (h < 0) {
h += 360;
}
c = Math.sqrt(a * a + b * b);
return [l, c, h];
}
function lab2rgb(args) {
return xyz2rgb(lab2xyz(args));
}
function lch2lab(lch) {
var l = lch[0],
c = lch[1],
h = lch[2],
a, b, hr;
hr = h / 360 * 2 * Math.PI;
a = c * Math.cos(hr);
b = c * Math.sin(hr);
return [l, a, b];
}
function lch2xyz(args) {
return lab2xyz(lch2lab(args));
}
function lch2rgb(args) {
return lab2rgb(lch2lab(args));
}
function keyword2rgb(keyword) {
return cssKeywords[keyword];
}
function keyword2hsl(args) {
return rgb2hsl(keyword2rgb(args));
}
function keyword2hsv(args) {
return rgb2hsv(keyword2rgb(args));
}
function keyword2hwb(args) {
return rgb2hwb(keyword2rgb(args));
}
function keyword2cmyk(args) {
return rgb2cmyk(keyword2rgb(args));
}
function keyword2lab(args) {
return rgb2lab(keyword2rgb(args));
}
function keyword2xyz(args) {
return rgb2xyz(keyword2rgb(args));
}
var cssKeywords = {
aliceblue: [240,248,255],
antiquewhite: [250,235,215],
aqua: [0,255,255],
aquamarine: [127,255,212],
azure: [240,255,255],
beige: [245,245,220],
bisque: [255,228,196],
black: [0,0,0],
blanchedalmond: [255,235,205],
blue: [0,0,255],
blueviolet: [138,43,226],
brown: [165,42,42],
burlywood: [222,184,135],
cadetblue: [95,158,160],
chartreuse: [127,255,0],
chocolate: [210,105,30],
coral: [255,127,80],
cornflowerblue: [100,149,237],
cornsilk: [255,248,220],
crimson: [220,20,60],
cyan: [0,255,255],
darkblue: [0,0,139],
darkcyan: [0,139,139],
darkgoldenrod: [184,134,11],
darkgray: [169,169,169],
darkgreen: [0,100,0],
darkgrey: [169,169,169],
darkkhaki: [189,183,107],
darkmagenta: [139,0,139],
darkolivegreen: [85,107,47],
darkorange: [255,140,0],
darkorchid: [153,50,204],
darkred: [139,0,0],
darksalmon: [233,150,122],
darkseagreen: [143,188,143],
darkslateblue: [72,61,139],
darkslategray: [47,79,79],
darkslategrey: [47,79,79],
darkturquoise: [0,206,209],
darkviolet: [148,0,211],
deeppink: [255,20,147],
deepskyblue: [0,191,255],
dimgray: [105,105,105],
dimgrey: [105,105,105],
dodgerblue: [30,144,255],
firebrick: [178,34,34],
floralwhite: [255,250,240],
forestgreen: [34,139,34],
fuchsia: [255,0,255],
gainsboro: [220,220,220],
ghostwhite: [248,248,255],
gold: [255,215,0],
goldenrod: [218,165,32],
gray: [128,128,128],
green: [0,128,0],
greenyellow: [173,255,47],
grey: [128,128,128],
honeydew: [240,255,240],
hotpink: [255,105,180],
indianred: [205,92,92],
indigo: [75,0,130],
ivory: [255,255,240],
khaki: [240,230,140],
lavender: [230,230,250],
lavenderblush: [255,240,245],
lawngreen: [124,252,0],
lemonchiffon: [255,250,205],
lightblue: [173,216,230],
lightcoral: [240,128,128],
lightcyan: [224,255,255],
lightgoldenrodyellow: [250,250,210],
lightgray: [211,211,211],
lightgreen: [144,238,144],
lightgrey: [211,211,211],
lightpink: [255,182,193],
lightsalmon: [255,160,122],
lightseagreen: [32,178,170],
lightskyblue: [135,206,250],
lightslategray: [119,136,153],
lightslategrey: [119,136,153],
lightsteelblue: [176,196,222],
lightyellow: [255,255,224],
lime: [0,255,0],
limegreen: [50,205,50],
linen: [250,240,230],
magenta: [255,0,255],
maroon: [128,0,0],
mediumaquamarine: [102,205,170],
mediumblue: [0,0,205],
mediumorchid: [186,85,211],
mediumpurple: [147,112,219],
mediumseagreen: [60,179,113],
mediumslateblue: [123,104,238],
mediumspringgreen: [0,250,154],
mediumturquoise: [72,209,204],
mediumvioletred: [199,21,133],
midnightblue: [25,25,112],
mintcream: [245,255,250],
mistyrose: [255,228,225],
moccasin: [255,228,181],
navajowhite: [255,222,173],
navy: [0,0,128],
oldlace: [253,245,230],
olive: [128,128,0],
olivedrab: [107,142,35],
orange: [255,165,0],
orangered: [255,69,0],
orchid: [218,112,214],
palegoldenrod: [238,232,170],
palegreen: [152,251,152],
paleturquoise: [175,238,238],
palevioletred: [219,112,147],
papayawhip: [255,239,213],
peachpuff: [255,218,185],
peru: [205,133,63],
pink: [255,192,203],
plum: [221,160,221],
powderblue: [176,224,230],
purple: [128,0,128],
rebeccapurple: [102, 51, 153],
red: [255,0,0],
rosybrown: [188,143,143],
royalblue: [65,105,225],
saddlebrown: [139,69,19],
salmon: [250,128,114],
sandybrown: [244,164,96],
seagreen: [46,139,87],
seashell: [255,245,238],
sienna: [160,82,45],
silver: [192,192,192],
skyblue: [135,206,235],
slateblue: [106,90,205],
slategray: [112,128,144],
slategrey: [112,128,144],
snow: [255,250,250],
springgreen: [0,255,127],
steelblue: [70,130,180],
tan: [210,180,140],
teal: [0,128,128],
thistle: [216,191,216],
tomato: [255,99,71],
turquoise: [64,224,208],
violet: [238,130,238],
wheat: [245,222,179],
white: [255,255,255],
whitesmoke: [245,245,245],
yellow: [255,255,0],
yellowgreen: [154,205,50]
};
var reverseKeywords = {};
for (var key in cssKeywords) {
reverseKeywords[JSON.stringify(cssKeywords[key])] = key;
}
;
}).call(module.exports);
__require.modules["./conversions"]._cached = module.exports;
return module.exports;
};
require.modules["color/node_modules/color-string/package.json"] = function () {
var module = { exports : {} };
var exports = module.exports;
var __dirname = "color/node_modules/color-string";
var __filename = "color/node_modules/color-string/package.json";
var require = function (file) {
return __require(file, "color/node_modules/color-string");
};
require.resolve = function (file) {
return __require.resolve(name, "color/node_modules/color-string");
};
require.modules = __require.modules;
__require.modules["color/node_modules/color-string/package.json"]._cached = module.exports;
(function () {
module.exports = {"name":"color-string","description":"Parser and generator for CSS color strings","version":"0.2.1","author":{"name":"Heather Arthur","email":"fayearthur@gmail.com"},"repository":{"type":"git","url":"http://github.com/harthur/color-string.git"},"main":"./color-string","dependencies":{"color-convert":"0.5.x"},"devDependencies":{"browserify":">=1.0.0","uglify-js":"1.0.x"},"keywords":["color","colour","rgb","css"],"bugs":{"url":"https://github.com/harthur/color-string/issues"},"homepage":"https://github.com/harthur/color-string","_id":"color-string@0.2.1","dist":{"shasum":"2f3c1e6c1d04ddf751633b28db7fbc152055d34e","tarball":"http://registry.npmjs.org/color-string/-/color-string-0.2.1.tgz"},"_from":"color-string@>=0.2.0 <0.3.0","_npmVersion":"1.3.25","_npmUser":{"name":"harth","email":"fayearthur@gmail.com"},"maintainers":[{"name":"harth","email":"fayearthur@gmail.com"}],"directories":{},"_shasum":"2f3c1e6c1d04ddf751633b28db7fbc152055d34e","_resolved":"https://registry.npmjs.org/color-string/-/color-string-0.2.1.tgz"};
}).call(module.exports);
__require.modules["color/node_modules/color-string/package.json"]._cached = module.exports;
return module.exports;
};
require.modules["color-string"] = function () {
var module = { exports : {} };
var exports = module.exports;
var __dirname = ".";
var __filename = "color-string";
var require = function (file) {
return __require(file, ".");
};
require.resolve = function (file) {
return __require.resolve(name, ".");
};
require.modules = __require.modules;
__require.modules["color-string"]._cached = module.exports;
(function () {
/* MIT license */
var convert = require("color-convert");
module.exports = {
getRgba: getRgba,
getHsla: getHsla,
getRgb: getRgb,
getHsl: getHsl,
getHwb: getHwb,
getAlpha: getAlpha,
hexString: hexString,
rgbString: rgbString,
rgbaString: rgbaString,
percentString: percentString,
percentaString: percentaString,
hslString: hslString,
hslaString: hslaString,
hwbString: hwbString,
keyword: keyword
}
function getRgba(string) {
if (!string) {
return;
}
var abbr = /^#([a-fA-F0-9]{3})$/,
hex = /^#([a-fA-F0-9]{6})$/,
rgba = /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d\.]+)\s*)?\)$/,
per = /^rgba?\(\s*([\d\.]+)\%\s*,\s*([\d\.]+)\%\s*,\s*([\d\.]+)\%\s*(?:,\s*([\d\.]+)\s*)?\)$/,
keyword = /(\D+)/;
var rgb = [0, 0, 0],
a = 1,
match = string.match(abbr);
if (match) {
match = match[1];
for (var i = 0; i < rgb.length; i++) {
rgb[i] = parseInt(match[i] + match[i], 16);
}
}
else if (match = string.match(hex)) {
match = match[1];
for (var i = 0; i < rgb.length; i++) {
rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);
}