@andrew-codes/color-functions
Version:
Collection of functions to manipulate colors in JavaScript
1 lines • 4.73 kB
JavaScript
;Object.defineProperty(exports,'__esModule',{value:true});exports.convertRgbaToHex=exports.convertHslStringToHsla=exports.convertHslaToRgba=exports.hueToRgb=exports.convertRgbaToHsl=exports.convertRgbStringToRgba=exports.convertLongHexToRgba=exports.convertShortHexToLongHex=undefined;var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};var _clamp=require('./../utilities/clamp');var _clamp2=_interopRequireDefault(_clamp);var _colorValidityChecks=require('./colorValidityChecks');function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var nonAlphaDigitsExpression=/\d+/g;var roundHslValue=function roundHslValue(value){return Math.round(value*100)/100};var getNonAlphaDigits=function getNonAlphaDigits(colorString){return colorString.match(nonAlphaDigitsExpression).slice(0,3).map(function(value){return parseInt(value,10)})};var getAlpha=function getAlpha(colorString){var hasAlpha=colorString.match(/a/);if(!hasAlpha){return 1}var alphaString=colorString.match(/0(\.\d*)?\)/);if(!alphaString){return 1}return parseFloat(alphaString[0])};var convertShortHexToLongHex=exports.convertShortHexToLongHex=function convertShortHexToLongHex(color){if(!(0,_colorValidityChecks.isShortHex)(color)){return color}var longHex=[];color.substr(1).split('').forEach(function(hexDigit){longHex.push(hexDigit);longHex.push(hexDigit)});return'#'+longHex.join('')};var convertLongHexToRgba=exports.convertLongHexToRgba=function convertLongHexToRgba(color){if(!(0,_colorValidityChecks.isLongHex)(color)){return color}var rgb=color.substr(1).match(/.{2}/g).map(function(colorNumber){return parseInt(colorNumber,16)});return{alpha:1,b:rgb[2],g:rgb[1],r:rgb[0],type:'rgba'}};var convertRgbStringToRgba=exports.convertRgbStringToRgba=function convertRgbStringToRgba(color){if(!(0,_colorValidityChecks.isRgbString)(color)){return color}var values=getNonAlphaDigits(color);var alpha=getAlpha(color);return{alpha:alpha,b:values[2],g:values[1],r:values[0],type:'rgba'}};var convertRgbaToHsl=exports.convertRgbaToHsl=function convertRgbaToHsl(color){if(!(0,_colorValidityChecks.isRgbaColorObject)(color)){return color}var rgbaToConvert=_extends({},color,{b:color.b/255,g:color.g/255,r:color.r/255});var rgb=[rgbaToConvert.r,rgbaToConvert.g,rgbaToConvert.b];var max=Math.max.apply(Math,rgb);var min=Math.min.apply(Math,rgb);var luminance=roundHslValue((max+min)/2);if(max===min){return{alpha:color.alpha,hue:0,luminance:luminance,saturation:0,type:'hsla'}}var d=max-min;var saturation=roundHslValue(luminance>0.5?d/(2-max-min):d/(max+min));var hue=void 0;switch(max){case rgbaToConvert.r:hue=(rgbaToConvert.g-rgbaToConvert.b)/d+(rgbaToConvert.g<rgbaToConvert.b?6:0);break;case rgbaToConvert.g:hue=(rgbaToConvert.b-rgbaToConvert.r)/d+2;break;default:hue=(rgbaToConvert.r-rgbaToConvert.g)/d+4;break;}hue*=60;hue=Math.round(hue);return{alpha:color.alpha,hue:hue,luminance:luminance,saturation:saturation,type:'hsla'}};var hueToRgb=exports.hueToRgb=function hueToRgb(p,q,t){var newT=t;var outputValue=void 0;if(newT<0){newT+=1}else if(newT>1){newT-=1}if(newT<1/6){outputValue=p+(q-p)*(6*newT)}else if(newT<1/2){outputValue=q}else if(newT<2/3){outputValue=p+(q-p)*(2/3-newT)*6}else{outputValue=p}return(0,_clamp2.default)(Math.round(outputValue*255),0,255)};var convertHslaToRgba=exports.convertHslaToRgba=function convertHslaToRgba(color){if(!(0,_colorValidityChecks.isHslaColorObject)(color)){return color}if(color.saturation===0){return{alpha:color.alpha,b:(0,_clamp2.default)(Math.round(color.luminance*255,0,255)),g:(0,_clamp2.default)(Math.round(color.luminance*255,0,255)),r:(0,_clamp2.default)(Math.round(color.luminance*255,0,255)),type:'rgba'}}var q=color.luminance<0.5?color.luminance*(1+color.saturation):color.luminance+color.saturation-color.luminance*color.saturation;var p=2*color.luminance-q;var hueAsPercentage=color.hue/360;return{alpha:color.alpha,b:hueToRgb(p,q,hueAsPercentage-1/3),g:hueToRgb(p,q,hueAsPercentage),r:hueToRgb(p,q,hueAsPercentage+1/3),type:'rgba'}};var convertHslStringToHsla=exports.convertHslStringToHsla=function convertHslStringToHsla(color){if(!(0,_colorValidityChecks.isHslString)(color)){return color}var digits=getNonAlphaDigits(color);var alpha=getAlpha(color);return{type:'hsla',hue:digits[0],saturation:roundHslValue(digits[1]/100),luminance:roundHslValue(digits[2]/100),alpha:alpha}};var convertRgbaToHex=exports.convertRgbaToHex=function convertRgbaToHex(color){if(!(0,_colorValidityChecks.isRgbaColorObject)(color)){return color}return'#'+color.r.toString(16)+color.g.toString(16)+color.b.toString(16)};