UNPKG

color-to-vec4

Version:

:white_square_button: a color (rgb, rgba, hex) to vec4 convertor

104 lines (75 loc) 2.61 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.colorToVec4 = factory()); }(this, (function () { 'use strict'; var mapChannel = (function (channel) { return channel / 255; }); var normalize = (function (min, max, value) { if (value < min) return min;else if (value > max) return max;else return value; }); var rgbToVec4 = (function (color) { var alpha = false; if (color.startsWith('rgba(')) alpha = true;else if (color.startsWith('rgb(')) alpha = false; var split = alpha ? 'rgba(' : 'rgb('; var channels = color.split(split)[1].split(')')[0].split(','); if (channels.length < 3 || channels.length > 4) { throw new Error(color + ' is not a valid rgb(a) color'); } channels = channels.map(function (c) { return parseFloat(c); }).map(function (c) { return normalize(0, 255, c); }); var _channels = channels, r = _channels[0], g = _channels[1], b = _channels[2], _channels$ = _channels[3], a = _channels$ === undefined ? 1 : _channels$; var aa = normalize(0, 1, a); var rgb = [r, g, b].map(mapChannel); return [].concat(rgb, [aa]); }); var hexToRgb = (function (hex) { var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); result = result.slice(1, 4); result = result.map(function (r) { return parseInt(r, 16); }); var _result = result, r = _result[0], g = _result[1], b = _result[2]; var a = 1; return { r: r, g: g, b: b, a: a }; }); var hexToVec4 = (function (color) { var isValid = /^#[0-9A-F]{6}$/i.test(color); if (!isValid) { throw new Error(color + ' is not a valid hex color'); } var colorObj = hexToRgb(color); var r = colorObj.r, g = colorObj.g, b = colorObj.b; var colors = [r, g, b]; return [].concat(colors.map(function (c) { return mapChannel(c); }), [1]); }); var index = (function (color) { if (typeof color === 'string') { if (color.startsWith('rgba')) return rgbToVec4(color);else if (color.startsWith('rgb')) return rgbToVec4(color);else if (color.startsWith('#')) return hexToVec4(color);else throw new Error(color + ' is not a valid color, must be rgba, rgb, hex or vec4'); } else if (Array.isArray(color)) { if (color.length !== 4) { throw new Error('[' + color + '] is not a valid vec4'); } return color; } else { throw new Error(color + ' is not a valid color, must be rgba, rgb, hex or vec4'); } }); return index; })));