polychrome
Advanced tools
Comparing version 4.0.0 to 4.0.1
var patterns = { | ||
hex: /^#(?:[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/, | ||
rgb: /^rgba?\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),?\s*(\d\.\d+)?\)$/, | ||
hsl: /^hsla?\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%,?\s*(\d\.\d+)?\)$/, | ||
rgb: /^rgba?\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),?\s*(\d?\.?\d+)?\)$/, | ||
hsl: /^hsla?\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%,?\s*(\d?\.?\d+)?\)$/, | ||
}; | ||
@@ -112,12 +112,23 @@ | ||
var fadeIn = function (color, percentage) { | ||
if ( percentage === void 0 ) percentage = 50; | ||
var getAbsoluteModifier = function (alpha, percentage) { | ||
var ratio = percentage / 100; | ||
return alpha ? alpha * ratio : ratio; | ||
}; | ||
var setAlpha = function (color, percentage) { | ||
if ( percentage === void 0 ) percentage = null; | ||
if (percentage === null) { return color; } | ||
var h = color.h; | ||
var s = color.s; | ||
var l = color.l; | ||
var a = (percentage > 100) ? 1 : ((percentage < 0) ? 0 : percentage / 100); | ||
return make.fromHsl(h, s, l, a); | ||
}; | ||
var fadeIn = function (color, percentage) { | ||
if ( percentage === void 0 ) percentage = 50; | ||
var a = color.a; | ||
var modifier = a ? a * (percentage / 100) : percentage / 100; | ||
var newAlpha = a + modifier; | ||
return make.fromHsl(h, s, l, (newAlpha > 1) ? 1 : newAlpha); | ||
return setAlpha(color, (a + getAbsoluteModifier(a, percentage)) * 100); | ||
}; | ||
@@ -128,8 +139,4 @@ | ||
var h = color.h; | ||
var s = color.s; | ||
var l = color.l; | ||
var a = color.a; | ||
var newAlpha = a - (a * (percentage / 100)); | ||
return make.fromHsl(h, s, l, (newAlpha < 0) ? 0 : newAlpha); | ||
return setAlpha(color, (a - getAbsoluteModifier(a, percentage)) * 100); | ||
}; | ||
@@ -207,2 +214,5 @@ | ||
}, | ||
setAlpha: function setAlpha$1(percentage) { | ||
return setAlpha(color, percentage); | ||
}, | ||
fadeIn: function fadeIn$1(percentage) { | ||
@@ -209,0 +219,0 @@ return fadeIn(color, percentage); |
@@ -1,2 +0,2 @@ | ||
!function(r,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):r.polychrome=n()}(this,function(){"use strict";var r={hex:/^#(?:[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,rgb:/^rgba?\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),?\s*(\d\.\d+)?\)$/,hsl:/^hsla?\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%,?\s*(\d\.\d+)?\)$/},n=Object.assign({},r,{asList:Object.keys(r).map(function(n){return{name:n,regex:r[n]}})}),t=function(r,n,t){return[r,n,t].map(function(r){return parseInt(r,16)})},e=function(r,n,t){return[r,n,t].map(function(r){return("0"+parseInt(r,10).toString(16)).toUpperCase().slice(-2)})},u=function(r,n,t,e){void 0===e&&(e=1);var u=[r,n,t].map(function(r){return r/255}),o=u[0],a=u[1],i=u[2],c=Math.max(o,a,i),f=Math.min(o,a,i),s=c-f,l=(c+f)/2;if(c===f)return[0,0,Math.round(100*l),e];var d=l<.5?s/(c+f):s/(2-c-f),h=[o,a,i].map(function(r){return((c-r)/6+s/2)/s}),p=h[0],v=h[1],m=h[2],g=0;switch(c){case o:g=m-v;break;case a:g=1/3+p-m;break;case i:g=2/3+v-p}return g<0&&(g+=1),g>1&&(g-=1),[360*g,100*d,100*l,e].map(function(r){return Math.round(r)})},o=function(r,n,t,e){void 0===e&&(e=1);var u=[r/360,n/100,t/100],o=u[0],a=u[1],i=u[2];if(0==a)return[i,i,i].map(function(r){return Math.round(255*r)}).concat(e);var c=function(r,n,t){return t<0&&(t+=1),t>1&&(t-=1),6*t<1?r+6*(n-r)*t:2*t<1?n:3*t<2?r+(n-r)*(2/3-t)*6:r},f=i<.5?i*(1+a):i+a-i*a,s=2*i-f;return[c(s,f,o+1/3),c(s,f,o),c(s,f,o-1/3)].map(function(r){return Math.round(255*r)}).concat(e)},a=function(r,n){void 0===n&&(n=10);var t=r.h,e=r.s,u=r.l,o=r.a,a=u-u*(n/100);return p.fromHsl(t,e,a<0?0:a,o)},i=function(r,n){void 0===n&&(n=10);var t=r.h,e=r.s,u=r.l,o=r.a,a=u?u*(n/100):n,i=u+a;return p.fromHsl(t,e,i>100?100:i,o)},c=function(r,n){void 0===n&&(n=50);var t=r.h,e=r.s,u=r.l,o=r.a,a=o?o*(n/100):n/100,i=o+a;return p.fromHsl(t,e,u,i>1?1:i)},f=function(r,n){void 0===n&&(n=50);var t=r.h,e=r.s,u=r.l,o=r.a,a=o-o*(n/100);return p.fromHsl(t,e,u,a<0?0:a)},s=function(r,n,t){void 0===n&&(n=m("#000")),void 0===t&&(t=m("#FFF"));var e="string"==typeof n?m(n):n,u="string"==typeof t?m(t):t;return m(r).luma<128?u:e},l=function(r,n){void 0===n&&(n=10);var t=r.h,e=r.s,u=r.l,o=r.a,a=e?e*(n/100):n,i=e+a;return p.fromHsl(t,i>100?100:i,u,o)},d=function(r,n){void 0===n&&(n=10);var t=r.h,e=r.s,u=r.l,o=r.a,a=e-e*(n/100);return p.fromHsl(t,a<0?0:a,u,o)},h=function(r){var n=r.rHex,t=r.gHex,e=r.bHex,u=r.r,o=r.g,h=r.b,p=r.h,v=r.s,m=r.l,g=r.a;void 0===g&&(g=1);var b=Object.assign({},r,{hex:function(){return"#"+n+t+e},rgb:function(){return g<1?"rgba("+u+","+o+","+h+","+g+")":"rgb("+u+","+o+","+h+")"},hsl:function(){return g<1?"hsla("+p+","+v+"%,"+m+"%,"+g+")":"hsl("+p+","+v+"%,"+m+"%)"},luma:(299*u+587*o+114*h)/1e3});return Object.assign({},b,{darken:function(r){return a(b,r)},lighten:function(r){return i(b,r)},fadeIn:function(r){return c(b,r)},fadeOut:function(r){return f(b,r)},contrast:function(r,n){return s(b,r,n)},saturate:function(r){return l(b,r)},desaturate:function(r){return d(b,r)}})},p={fromHex:function(r,n,e){var o=t(r,n,e),a=o[0],i=o[1],c=o[2],f=u(a,i,c);return h({rHex:r,gHex:n,bHex:e,r:a,g:i,b:c,h:f[0],s:f[1],l:f[2],a:f[3]})},fromRgb:function(r,n,t,o){void 0===o&&(o=1);var a=e(r,n,t),i=a[0],c=a[1],f=a[2],s=u(r,n,t);return h({rHex:i,gHex:c,bHex:f,r:r,g:n,b:t,h:s[0],s:s[1],l:s[2],a:o})},fromHsl:function(r,n,t,u){void 0===u&&(u=1);var a=o(r,n,t),i=a[0],c=a[1],f=a[2],s=e(i,c,f);return h({rHex:s[0],gHex:s[1],bHex:s[2],r:i,g:c,b:f,h:r,s:n,l:t,a:u})}},v={hex:function r(n){var r=n.replace("#","");return r.length<6&&(r=r.split("").map(function(r){return r.concat(r)}).join("")),[r.slice(0,2),r.slice(2,4),r.slice(4,6)]},rgb:function(r){var t=r.match(n.rgb).slice(1),e=t[0],u=t[1],o=t[2],a=t[3];return void 0===a&&(a=1),[parseInt(e),parseInt(u),parseInt(o),parseFloat(a)]},hsl:function(r){var t=r.match(n.hsl).slice(1),e=t[0],u=t[1],o=t[2],a=t[3];return void 0===a&&(a=1),[parseInt(e),parseInt(u),parseInt(o),parseFloat(a)]}},m=function(r){if(!r)return p.fromRgb(0,0,0);if("string"!=typeof r)return r;var t=n.asList.filter(function(n){return r.match(n.regex)});if(!t.length)throw new Error("No matching color patterns found for "+r);return t.reduce(function(n,t){var e=t.name;return p["from"+e.charAt(0).toUpperCase()+e.slice(1)].apply(p,v[e](r))},{})};return m}); | ||
!function(r,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):r.polychrome=n()}(this,function(){"use strict";var r={hex:/^#(?:[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,rgb:/^rgba?\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),?\s*(\d?\.?\d+)?\)$/,hsl:/^hsla?\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%,?\s*(\d?\.?\d+)?\)$/},n=Object.assign({},r,{asList:Object.keys(r).map(function(n){return{name:n,regex:r[n]}})}),t=function(r,n,t){return[r,n,t].map(function(r){return parseInt(r,16)})},e=function(r,n,t){return[r,n,t].map(function(r){return("0"+parseInt(r,10).toString(16)).toUpperCase().slice(-2)})},u=function(r,n,t,e){void 0===e&&(e=1);var u=[r,n,t].map(function(r){return r/255}),o=u[0],a=u[1],i=u[2],c=Math.max(o,a,i),f=Math.min(o,a,i),s=c-f,l=(c+f)/2;if(c===f)return[0,0,Math.round(100*l),e];var d=l<.5?s/(c+f):s/(2-c-f),v=[o,a,i].map(function(r){return((c-r)/6+s/2)/s}),h=v[0],p=v[1],m=v[2],g=0;switch(c){case o:g=m-p;break;case a:g=1/3+h-m;break;case i:g=2/3+p-h}return g<0&&(g+=1),g>1&&(g-=1),[360*g,100*d,100*l,e].map(function(r){return Math.round(r)})},o=function(r,n,t,e){void 0===e&&(e=1);var u=[r/360,n/100,t/100],o=u[0],a=u[1],i=u[2];if(0==a)return[i,i,i].map(function(r){return Math.round(255*r)}).concat(e);var c=function(r,n,t){return t<0&&(t+=1),t>1&&(t-=1),6*t<1?r+6*(n-r)*t:2*t<1?n:3*t<2?r+(n-r)*(2/3-t)*6:r},f=i<.5?i*(1+a):i+a-i*a,s=2*i-f;return[c(s,f,o+1/3),c(s,f,o),c(s,f,o-1/3)].map(function(r){return Math.round(255*r)}).concat(e)},a=function(r,n){void 0===n&&(n=10);var t=r.h,e=r.s,u=r.l,o=r.a,a=u-u*(n/100);return m.fromHsl(t,e,a<0?0:a,o)},i=function(r,n){void 0===n&&(n=10);var t=r.h,e=r.s,u=r.l,o=r.a,a=u?u*(n/100):n,i=u+a;return m.fromHsl(t,e,i>100?100:i,o)},c=function(r,n){var t=n/100;return r?r*t:t},f=function(r,n){if(void 0===n&&(n=null),null===n)return r;var t=r.h,e=r.s,u=r.l,o=n>100?1:n<0?0:n/100;return m.fromHsl(t,e,u,o)},s=function(r,n){void 0===n&&(n=50);var t=r.a;return f(r,100*(t+c(t,n)))},l=function(r,n){void 0===n&&(n=50);var t=r.a;return f(r,100*(t-c(t,n)))},d=function(r,n,t){void 0===n&&(n=b("#000")),void 0===t&&(t=b("#FFF"));var e="string"==typeof n?b(n):n,u="string"==typeof t?b(t):t;return b(r).luma<128?u:e},v=function(r,n){void 0===n&&(n=10);var t=r.h,e=r.s,u=r.l,o=r.a,a=e?e*(n/100):n,i=e+a;return m.fromHsl(t,i>100?100:i,u,o)},h=function(r,n){void 0===n&&(n=10);var t=r.h,e=r.s,u=r.l,o=r.a,a=e-e*(n/100);return m.fromHsl(t,a<0?0:a,u,o)},p=function(r){var n=r.rHex,t=r.gHex,e=r.bHex,u=r.r,o=r.g,c=r.b,p=r.h,m=r.s,g=r.l,b=r.a;void 0===b&&(b=1);var x=Object.assign({},r,{hex:function(){return"#"+n+t+e},rgb:function(){return b<1?"rgba("+u+","+o+","+c+","+b+")":"rgb("+u+","+o+","+c+")"},hsl:function(){return b<1?"hsla("+p+","+m+"%,"+g+"%,"+b+")":"hsl("+p+","+m+"%,"+g+"%)"},luma:(299*u+587*o+114*c)/1e3});return Object.assign({},x,{darken:function(r){return a(x,r)},lighten:function(r){return i(x,r)},setAlpha:function(r){return f(x,r)},fadeIn:function(r){return s(x,r)},fadeOut:function(r){return l(x,r)},contrast:function(r,n){return d(x,r,n)},saturate:function(r){return v(x,r)},desaturate:function(r){return h(x,r)}})},m={fromHex:function(r,n,e){var o=t(r,n,e),a=o[0],i=o[1],c=o[2],f=u(a,i,c);return p({rHex:r,gHex:n,bHex:e,r:a,g:i,b:c,h:f[0],s:f[1],l:f[2],a:f[3]})},fromRgb:function(r,n,t,o){void 0===o&&(o=1);var a=e(r,n,t),i=a[0],c=a[1],f=a[2],s=u(r,n,t);return p({rHex:i,gHex:c,bHex:f,r:r,g:n,b:t,h:s[0],s:s[1],l:s[2],a:o})},fromHsl:function(r,n,t,u){void 0===u&&(u=1);var a=o(r,n,t),i=a[0],c=a[1],f=a[2],s=e(i,c,f);return p({rHex:s[0],gHex:s[1],bHex:s[2],r:i,g:c,b:f,h:r,s:n,l:t,a:u})}},g={hex:function r(n){var r=n.replace("#","");return r.length<6&&(r=r.split("").map(function(r){return r.concat(r)}).join("")),[r.slice(0,2),r.slice(2,4),r.slice(4,6)]},rgb:function(r){var t=r.match(n.rgb).slice(1),e=t[0],u=t[1],o=t[2],a=t[3];return void 0===a&&(a=1),[parseInt(e),parseInt(u),parseInt(o),parseFloat(a)]},hsl:function(r){var t=r.match(n.hsl).slice(1),e=t[0],u=t[1],o=t[2],a=t[3];return void 0===a&&(a=1),[parseInt(e),parseInt(u),parseInt(o),parseFloat(a)]}},b=function(r){if(!r)return m.fromRgb(0,0,0);if("string"!=typeof r)return r;var t=n.asList.filter(function(n){return r.match(n.regex)});if(!t.length)throw new Error("No matching color patterns found for "+r);return t.reduce(function(n,t){var e=t.name;return m["from"+e.charAt(0).toUpperCase()+e.slice(1)].apply(m,g[e](r))},{})};return b}); | ||
//# sourceMappingURL=polychrome.js.map |
{ | ||
"name": "polychrome", | ||
"version": "4.0.0", | ||
"version": "4.0.1", | ||
"author": "Chad Donohue <chad.donohue@gmail.com>", | ||
@@ -5,0 +5,0 @@ "description": "A small library for parsing and manipulating colors", |
# 🎨 `polychrome` | ||
>A small `1.68kB (gzipped)` library for parsing and manipulating colors | ||
>A small `1.72kB (gzipped)` library for parsing and manipulating colors | ||
## Installation (feel free to replace `yarn add` with `npm install`) | ||
## Installation | ||
>feel free to replace `yarn add` with `npm install` | ||
```shell | ||
@@ -80,2 +81,3 @@ $> yarn add polychrome | ||
### Color Manipulation | ||
##### Utilities | ||
- `.contrast(dark, light)` | ||
@@ -93,2 +95,3 @@ | ||
##### Relative modifications | ||
- `.darken(percentage)` | ||
@@ -110,3 +113,2 @@ | ||
- `.lighten(percentage)` | ||
@@ -120,2 +122,6 @@ | ||
##### Absolute modifications | ||
- `.setAlpha(percentage)` | ||
Returns a `polychrome` with an `alpha` value _absolutely_ set to `percentage`. No change occurs if percentage is omitted. | ||
--- | ||
@@ -122,0 +128,0 @@ |
@@ -166,1 +166,19 @@ import { expect } from "chai"; | ||
}); | ||
describe("alpha", () => { | ||
it("should fade out a color by 50%", () => { | ||
const black = parse(); | ||
expect(black.fadeOut().a).to.equal(0.5); | ||
}); | ||
it("should fade in a color by 50%", () => { | ||
const transparentBlack = parse("rgba(0,0,0,.5)"); | ||
expect(transparentBlack.fadeIn().a).to.equal(0.75); | ||
}); | ||
it("should set the alpha channel absolutely", () => { | ||
const reallyTransparentWhite = parse("rgba(255,255,255,.1)"); | ||
expect(reallyTransparentWhite.setAlpha(100).a).to.equal(1); | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
161758
476
128