UNPKG

narik-angular-color-picker

Version:
190 lines 8.31 kB
import { Injectable } from '@angular/core'; import { Rgba, Hsla, Hsva } from './classes'; var ColorPickerService = (function () { function ColorPickerService() { } ColorPickerService.prototype.hsla2hsva = function (hsla) { var h = Math.min(hsla.h, 1), s = Math.min(hsla.s, 1), l = Math.min(hsla.l, 1), a = Math.min(hsla.a, 1); if (l === 0) { return new Hsva(h, 0, 0, a); } else { var v = l + s * (1 - Math.abs(2 * l - 1)) / 2; return new Hsva(h, 2 * (v - l) / v, v, a); } }; ColorPickerService.prototype.hsva2hsla = function (hsva) { var h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a; if (v === 0) { return new Hsla(h, 0, 0, a); } else if (s === 0 && v === 1) { return new Hsla(h, 1, 1, a); } else { var l = v * (2 - s) / 2; return new Hsla(h, v * s / (1 - Math.abs(2 * l - 1)), l, a); } }; ColorPickerService.prototype.rgbaToHsva = function (rgba) { var r = Math.min(rgba.r, 1), g = Math.min(rgba.g, 1), b = Math.min(rgba.b, 1), a = Math.min(rgba.a, 1); var max = Math.max(r, g, b), min = Math.min(r, g, b); var h, s, v = max; var d = max - min; s = max === 0 ? 0 : d / max; if (max === min) { h = 0; } else { switch (max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return new Hsva(h, s, v, a); }; ColorPickerService.prototype.hsvaToRgba = function (hsva) { var h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a; var r, g, b; var i = Math.floor(h * 6); var f = h * 6 - i; var p = v * (1 - s); var q = v * (1 - f * s); var t = v * (1 - (1 - f) * s); switch (i % 6) { case 0: r = v, g = t, b = p; break; case 1: r = q, g = v, b = p; break; case 2: r = p, g = v, b = t; break; case 3: r = p, g = q, b = v; break; case 4: r = t, g = p, b = v; break; case 5: r = v, g = p, b = q; break; } return new Rgba(r, g, b, a); }; ColorPickerService.prototype.stringToHsva = function (colorString, hex8) { if (colorString === void 0) { colorString = ''; } if (hex8 === void 0) { hex8 = false; } var stringParsers = [ { re: /(rgb)a?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*%?,\s*(\d{1,3})\s*%?(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, parse: function (execResult) { return new Rgba(parseInt(execResult[2]) / 255, parseInt(execResult[3]) / 255, parseInt(execResult[4]) / 255, isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5])); } }, { re: /(hsl)a?\(\s*(\d{1,3})\s*,\s*(\d{1,3})%\s*,\s*(\d{1,3})%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/, parse: function (execResult) { return new Hsla(parseInt(execResult[2]) / 360, parseInt(execResult[3]) / 100, parseInt(execResult[4]) / 100, isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5])); } } ]; if (hex8) { stringParsers.push({ re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/, parse: function (execResult) { return new Rgba(parseInt(execResult[1], 16) / 255, parseInt(execResult[2], 16) / 255, parseInt(execResult[3], 16) / 255, parseInt(execResult[4], 16) / 255); } }); } else { stringParsers.push({ re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/, parse: function (execResult) { return new Rgba(parseInt(execResult[1], 16) / 255, parseInt(execResult[2], 16) / 255, parseInt(execResult[3], 16) / 255, 1); } }, { re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/, parse: function (execResult) { return new Rgba(parseInt(execResult[1] + execResult[1], 16) / 255, parseInt(execResult[2] + execResult[2], 16) / 255, parseInt(execResult[3] + execResult[3], 16) / 255, 1); } }); } colorString = colorString.toLowerCase(); var hsva = null; for (var key in stringParsers) { if (stringParsers.hasOwnProperty(key)) { var parser = stringParsers[key]; var match = parser.re.exec(colorString), color = match && parser.parse(match); if (color) { if (color instanceof Rgba) { hsva = this.rgbaToHsva(color); } else if (color instanceof Hsla) { hsva = this.hsla2hsva(color); } return hsva; } } } return hsva; }; ColorPickerService.prototype.outputFormat = function (hsva, outputFormat, allowHex8) { if (hsva.a < 1) { switch (outputFormat) { case 'hsla': var hsla = this.hsva2hsla(hsva); var hslaText = new Hsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100), Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100); return 'hsla(' + hslaText.h + ',' + hslaText.s + '%,' + hslaText.l + '%,' + hslaText.a + ')'; default: if (allowHex8 && outputFormat === 'hex') return this.hexText(this.denormalizeRGBA(this.hsvaToRgba(hsva)), allowHex8); var rgba = this.denormalizeRGBA(this.hsvaToRgba(hsva)); return 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',' + Math.round(rgba.a * 100) / 100 + ')'; } } else { switch (outputFormat) { case 'hsla': var hsla = this.hsva2hsla(hsva); var hslaText = new Hsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100), Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100); return 'hsl(' + hslaText.h + ',' + hslaText.s + '%,' + hslaText.l + '%)'; case 'rgba': var rgba = this.denormalizeRGBA(this.hsvaToRgba(hsva)); return 'rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')'; default: return this.hexText(this.denormalizeRGBA(this.hsvaToRgba(hsva)), allowHex8); } } }; ColorPickerService.prototype.hexText = function (rgba, allowHex8) { var hexText = '#' + ((1 << 24) | (rgba.r << 16) | (rgba.g << 8) | rgba.b).toString(16).substr(1); if (hexText[1] === hexText[2] && hexText[3] === hexText[4] && hexText[5] === hexText[6] && rgba.a === 1 && !allowHex8) { hexText = '#' + hexText[1] + hexText[3] + hexText[5]; } if (allowHex8) { hexText += ((1 << 8) | Math.round(rgba.a * 255)).toString(16).substr(1); } return hexText; }; ColorPickerService.prototype.denormalizeRGBA = function (rgba) { return new Rgba(Math.round(rgba.r * 255), Math.round(rgba.g * 255), Math.round(rgba.b * 255), rgba.a); }; return ColorPickerService; }()); export { ColorPickerService }; ColorPickerService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ ColorPickerService.ctorParameters = function () { return []; }; //# sourceMappingURL=color-picker.service.js.map