aboutsummaryrefslogtreecommitdiff
path: root/node_modules/color
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/color
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/color')
-rw-r--r--node_modules/color/LICENSE21
-rw-r--r--node_modules/color/README.md124
-rw-r--r--node_modules/color/index.js459
-rw-r--r--node_modules/color/package.json41
4 files changed, 645 insertions, 0 deletions
diff --git a/node_modules/color/LICENSE b/node_modules/color/LICENSE
new file mode 100644
index 00000000..68c864ee
--- /dev/null
+++ b/node_modules/color/LICENSE
@@ -0,0 +1,21 @@
+Copyright (c) 2012 Heather Arthur
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/node_modules/color/README.md b/node_modules/color/README.md
new file mode 100644
index 00000000..b52e3576
--- /dev/null
+++ b/node_modules/color/README.md
@@ -0,0 +1,124 @@
+# color [![Build Status](https://travis-ci.org/Qix-/color.svg?branch=master)](https://travis-ci.org/Qix-/color)
+
+> JavaScript library for color conversion and manipulation with support for CSS color strings.
+
+```js
+var color = Color("#7743CE");
+
+color.alpha(0.5).lighten(0.5);
+
+console.log(color.hslString()); // "hsla(262, 59%, 81%, 0.5)"
+```
+
+## Install
+
+```console
+$ npm install color
+```
+
+## Usage
+
+```js
+var Color = require("color")
+```
+
+### Setters
+
+```js
+var color = Color("rgb(255, 255, 255)")
+var color = Color({r: 255, g: 255, b: 255})
+var color = Color().rgb(255, 255, 255)
+var color = Color().rgb([255, 255, 255])
+```
+Pass any valid CSS color string into `Color()` or a hash of values. Also load in color values with `rgb()`, `hsl()`, `hsv()`, `hwb()`, and `cmyk()`.
+
+```js
+color.red(120)
+```
+Set the values for individual channels with `alpha`, `red`, `green`, `blue`, `hue`, `saturation` (hsl), `saturationv` (hsv), `lightness`, `whiteness`, `blackness`, `cyan`, `magenta`, `yellow`, `black`
+
+### Getters
+
+
+```js
+color.rgb() // {r: 255, g: 255, b: 255}
+```
+Get a hash of the rgb values with `rgb()`, similarly for `hsl()`, `hsv()`, and `cmyk()`
+
+```js
+color.rgbArray() // [255, 255, 255]
+```
+Get an array of the values with `rgbArray()`, `hslArray()`, `hsvArray()`, and `cmykArray()`.
+
+```js
+color.red() // 255
+```
+Get the value for an individual channel.
+
+### CSS Strings
+
+```js
+color.hslString() // "hsl(320, 50%, 100%)"
+```
+
+Different CSS String formats for the color are on `hexString`, `rgbString`, `percentString`, `hslString`, `hwbString`, and `keyword` (undefined if it's not a keyword color). `"rgba"` and `"hsla"` are used if the current alpha value of the color isn't `1`.
+
+### Luminosity
+
+```js
+color.luminosity(); // 0.412
+```
+The [WCAG luminosity](http://www.w3.org/TR/WCAG20/#relativeluminancedef) of the color. 0 is black, 1 is white.
+
+```js
+color.contrast(Color("blue")) // 12
+```
+The [WCAG contrast ratio](http://www.w3.org/TR/WCAG20/#contrast-ratiodef) to another color, from 1 (same color) to 21 (contrast b/w white and black).
+
+```js
+color.light(); // true
+color.dark(); // false
+```
+Get whether the color is "light" or "dark", useful for deciding text color.
+
+### Manipulation
+
+```js
+color.negate() // rgb(0, 100, 255) -> rgb(255, 155, 0)
+
+color.lighten(0.5) // hsl(100, 50%, 50%) -> hsl(100, 50%, 75%)
+color.darken(0.5) // hsl(100, 50%, 50%) -> hsl(100, 50%, 25%)
+
+color.saturate(0.5) // hsl(100, 50%, 50%) -> hsl(100, 75%, 50%)
+color.desaturate(0.5) // hsl(100, 50%, 50%) -> hsl(100, 25%, 50%)
+color.greyscale() // #5CBF54 -> #969696
+
+color.whiten(0.5) // hwb(100, 50%, 50%) -> hwb(100, 75%, 50%)
+color.blacken(0.5) // hwb(100, 50%, 50%) -> hwb(100, 50%, 75%)
+
+color.clearer(0.5) // rgba(10, 10, 10, 0.8) -> rgba(10, 10, 10, 0.4)
+color.opaquer(0.5) // rgba(10, 10, 10, 0.8) -> rgba(10, 10, 10, 1.0)
+
+color.rotate(180) // hsl(60, 20%, 20%) -> hsl(240, 20%, 20%)
+color.rotate(-90) // hsl(60, 20%, 20%) -> hsl(330, 20%, 20%)
+
+color.mix(Color("yellow")) // cyan -> rgb(128, 255, 128)
+color.mix(Color("yellow"), 0.3) // cyan -> rgb(77, 255, 179)
+
+// chaining
+color.green(100).greyscale().lighten(0.6)
+```
+
+### Clone
+
+You can can create a copy of an existing color object using `clone()`:
+
+```js
+color.clone() // -> New color object
+```
+
+And more to come...
+
+## Propers
+
+The API was inspired by [color-js](https://github.com/brehaut/color-js). Manipulation functions by CSS tools like Sass, LESS, and Stylus.
diff --git a/node_modules/color/index.js b/node_modules/color/index.js
new file mode 100644
index 00000000..8f850de4
--- /dev/null
+++ b/node_modules/color/index.js
@@ -0,0 +1,459 @@
+/* MIT license */
+var clone = require('clone');
+var convert = require('color-convert');
+var string = require('color-string');
+
+var Color = function (obj) {
+ if (obj instanceof Color) {
+ return obj;
+ }
+ if (!(this instanceof Color)) {
+ return new Color(obj);
+ }
+
+ 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
+ var vals;
+ if (typeof obj === 'string') {
+ vals = string.getRgba(obj);
+ if (vals) {
+ this.setValues('rgb', vals);
+ } else if (vals = string.getHsla(obj)) {
+ this.setValues('hsl', vals);
+ } else if (vals = string.getHwb(obj)) {
+ this.setValues('hwb', vals);
+ } else {
+ throw new Error('Unable to parse color from string "' + obj + '"');
+ }
+ } else if (typeof obj === 'object') {
+ vals = obj;
+ 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(obj));
+ }
+ }
+};
+
+Color.prototype = {
+ rgb: function () {
+ return this.setSpace('rgb', arguments);
+ },
+ hsl: function () {
+ return this.setSpace('hsl', arguments);
+ },
+ hsv: function () {
+ return this.setSpace('hsv', arguments);
+ },
+ hwb: function () {
+ return this.setSpace('hwb', arguments);
+ },
+ cmyk: function () {
+ 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]);
+ },
+ rgbaArrayNormalized: function () {
+ var rgb = this.values.rgb;
+ var glRgba = [];
+ for (var i = 0; i < 3; i++) {
+ glRgba[i] = rgb[i] / 255;
+ }
+ glRgba.push(this.values.alpha);
+ return glRgba;
+ },
+ 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) {
+ if (val) {
+ val %= 360;
+ val = val < 0 ? 360 + val : 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);
+ },
+
+ rgbNumber: function () {
+ return (this.values.rgb[0] << 16) | (this.values.rgb[1] << 8) | this.values.rgb[2];
+ },
+
+ 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);
+ if (contrastRatio >= 7.1) {
+ return 'AAA';
+ }
+
+ return (contrastRatio >= 4.5) ? 'AA' : '';
+ },
+
+ dark: function () {
+ // YIQ equation from http://24ways.org/2010/calculating-color-contrast
+ var rgb = this.values.rgb;
+ var 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;
+ },
+
+ /**
+ * Ported from sass implementation in C
+ * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209
+ */
+ mix: function (mixinColor, weight) {
+ var color1 = this;
+ var color2 = mixinColor;
+ var p = weight === undefined ? 0.5 : weight;
+
+ var w = 2 * p - 1;
+ var a = color1.alpha() - color2.alpha();
+
+ var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
+ var w2 = 1 - w1;
+
+ return this
+ .rgb(
+ w1 * color1.red() + w2 * color2.red(),
+ w1 * color1.green() + w2 * color2.green(),
+ w1 * color1.blue() + w2 * color2.blue()
+ )
+ .alpha(color1.alpha() * p + color2.alpha() * (1 - p));
+ },
+
+ toJSON: function () {
+ return this.rgb();
+ },
+
+ clone: function () {
+ var col = new Color();
+ col.values = clone(this.values);
+ return col;
+ }
+};
+
+Color.prototype.getValues = function (space) {
+ var vals = {};
+
+ for (var i = 0; i < space.length; i++) {
+ vals[space.charAt(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 i;
+ 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.charAt(0)] !== undefined) {
+ // {r: 10, g: 10, b: 10}
+ for (i = 0; i < space.length; i++) {
+ this.values[space][i] = vals[space.charAt(i)];
+ }
+
+ alpha = vals.a;
+ } else if (vals[spaces[space][0]] !== undefined) {
+ // {red: 10, green: 10, blue: 10}
+ var chans = spaces[space];
+
+ for (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 ? this.values.alpha : alpha)));
+
+ if (space === 'alpha') {
+ return false;
+ }
+
+ var capped;
+
+ // cap values of the space prior converting all values
+ for (i = 0; i < space.length; i++) {
+ 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 (i = 0; i < sname.length; i++) {
+ 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];
+ } else if (val === this.values[space][index]) {
+ // color.red(color.red())
+ return this;
+ }
+
+ // color.red(100)
+ this.values[space][index] = val;
+ this.setValues(space, this.values[space]);
+
+ return this;
+};
+
+module.exports = Color;
diff --git a/node_modules/color/package.json b/node_modules/color/package.json
new file mode 100644
index 00000000..8a7cb9a0
--- /dev/null
+++ b/node_modules/color/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "color",
+ "version": "0.11.4",
+ "description": "Color conversion and manipulation with CSS string support",
+ "keywords": [
+ "color",
+ "colour",
+ "css"
+ ],
+ "authors": [
+ "Heather Arthur <fayearthur@gmail.com>",
+ "Maxime Thirouin",
+ "Josh Junon"
+ ],
+ "license": "MIT",
+ "repository": "Qix-/color",
+ "xo": {
+ "rules": {
+ "no-cond-assign": 0,
+ "new-cap": 0
+ }
+ },
+ "files": [
+ "CHANGELOG.md",
+ "LICENSE",
+ "index.js"
+ ],
+ "scripts": {
+ "pretest": "xo",
+ "test": "mocha"
+ },
+ "dependencies": {
+ "clone": "^1.0.2",
+ "color-convert": "^1.3.0",
+ "color-string": "^0.3.0"
+ },
+ "devDependencies": {
+ "mocha": "^2.2.5",
+ "xo": "^0.12.1"
+ }
+}