UNPKG

@future-grid/fgp-graph

Version:

fgp-graph is a chart lib based on Dygraphs

149 lines (122 loc) 13.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hsvToRGB = hsvToRGB; exports.FgpColor = exports.RGB_COLOR_REGEX = void 0; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var RGB_COLOR_REGEX = /\((\d+),\s*(\d+),\s*(\d+)(,\s*(\d*.\d*))?\)/; exports.RGB_COLOR_REGEX = RGB_COLOR_REGEX; var FgpColor = /*#__PURE__*/ function () { function FgpColor(r, g, b, a) { _classCallCheck(this, FgpColor); _defineProperty(this, "r", 0); _defineProperty(this, "g", 0); _defineProperty(this, "b", 0); _defineProperty(this, "a", 1); if (typeof r === 'string') { r = r.trim(); if (r.indexOf('#') === 0) { r = r.substr(r.indexOf('#') + 1); this.r = parseInt(r.substr(0, 2), 16); this.g = parseInt(r.substr(2, 2), 16); this.b = parseInt(r.substr(4, 2), 16); } else if (r.indexOf('rgb') === 0) { var res = RGB_COLOR_REGEX.exec(r); if (res) { this.r = parseInt(res[1], 10); this.g = parseInt(res[2], 10); this.b = parseInt(res[3], 10); this.a = res[5] ? parseFloat(res[5]) : 1; } } } else { this.r = r ? r : 0; this.g = g ? g : 0; this.b = b ? b : 0; this.a = a || 1; } } _createClass(FgpColor, [{ key: "toHex", value: function toHex() { return '#' + this.r.toString(16) + this.g.toString(16) + this.b.toString(16); } }, { key: "toRgb", value: function toRgb() { return "rgb(".concat(this.r, ", ").concat(this.g, ", ").concat(this.b, ")"); } }, { key: "toRgba", value: function toRgba() { return "rgba(".concat(this.r, ", ").concat(this.g, ", ").concat(this.b, ", ").concat(this.a, ")"); } }, { key: "toRgbWithAlpha", value: function toRgbWithAlpha(a) { return "rgba(".concat(this.r, ", ").concat(this.g, ", ").concat(this.b, ", ").concat(a, ")"); } }]); return FgpColor; }(); exports.FgpColor = FgpColor; function hsvToRGB(hue, saturation, value) { var red = 0; var green = 0; var blue = 0; if (saturation === 0) { red = value; green = value; blue = value; } else { var i = Math.floor(hue * 6); var f = hue * 6 - i; var p = value * (1 - saturation); var q = value * (1 - saturation * f); var t = value * (1 - saturation * (1 - f)); switch (i) { case 1: red = q; green = value; blue = p; break; case 2: red = p; green = value; blue = t; break; case 3: red = p; green = q; blue = value; break; case 4: red = t; green = p; blue = value; break; case 5: red = value; green = p; blue = q; break; case 6: // fall through case 0: red = value; green = t; blue = p; break; } } red = Math.floor(255 * red + 0.5); green = Math.floor(255 * green + 0.5); blue = Math.floor(255 * blue + 0.5); return 'rgb(' + red + ',' + green + ',' + blue + ')'; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9jb2xvclNlcnZpY2UudHMiXSwibmFtZXMiOlsiUkdCX0NPTE9SX1JFR0VYIiwiRmdwQ29sb3IiLCJyIiwiZyIsImIiLCJhIiwidHJpbSIsImluZGV4T2YiLCJzdWJzdHIiLCJwYXJzZUludCIsInJlcyIsImV4ZWMiLCJwYXJzZUZsb2F0IiwidG9TdHJpbmciLCJoc3ZUb1JHQiIsImh1ZSIsInNhdHVyYXRpb24iLCJ2YWx1ZSIsInJlZCIsImdyZWVuIiwiYmx1ZSIsImkiLCJNYXRoIiwiZmxvb3IiLCJmIiwicCIsInEiLCJ0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQU8sSUFBTUEsZUFBZSxHQUFHLDZDQUF4Qjs7O0lBRU1DLFE7OztBQVNULG9CQUFZQyxDQUFaLEVBQWlDQyxDQUFqQyxFQUE2Q0MsQ0FBN0MsRUFBeURDLENBQXpELEVBQXFFO0FBQUE7O0FBQUEsK0JBUmxELENBUWtEOztBQUFBLCtCQVBsRCxDQU9rRDs7QUFBQSwrQkFObEQsQ0FNa0Q7O0FBQUEsK0JBTGxELENBS2tEOztBQUNqRSxRQUFJLE9BQU9ILENBQVAsS0FBYSxRQUFqQixFQUEyQjtBQUN2QkEsTUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNJLElBQUYsRUFBSjs7QUFDQSxVQUFJSixDQUFDLENBQUNLLE9BQUYsQ0FBVSxHQUFWLE1BQW1CLENBQXZCLEVBQTBCO0FBQ3RCTCxRQUFBQSxDQUFDLEdBQUdBLENBQUMsQ0FBQ00sTUFBRixDQUFTTixDQUFDLENBQUNLLE9BQUYsQ0FBVSxHQUFWLElBQWlCLENBQTFCLENBQUo7QUFDQSxhQUFLTCxDQUFMLEdBQVNPLFFBQVEsQ0FBQ1AsQ0FBQyxDQUFDTSxNQUFGLENBQVMsQ0FBVCxFQUFZLENBQVosQ0FBRCxFQUFpQixFQUFqQixDQUFqQjtBQUNBLGFBQUtMLENBQUwsR0FBU00sUUFBUSxDQUFDUCxDQUFDLENBQUNNLE1BQUYsQ0FBUyxDQUFULEVBQVksQ0FBWixDQUFELEVBQWlCLEVB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LEtBQXJCLEdBQTZCLEdBQTdCLEdBQW1DQyxJQUFuQyxHQUEwQyxHQUFqRDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFJHQl9DT0xPUl9SRUdFWCA9IC9cXCgoXFxkKyksXFxzKihcXGQrKSxcXHMqKFxcZCspKCxcXHMqKFxcZCouXFxkKikpP1xcKS87XG5cbmV4cG9ydCBjbGFzcyBGZ3BDb2xvciB7XG4gICAgcHVibGljIHI6IG51bWJlciA9IDA7XG4gICAgcHVibGljIGc6IG51bWJlciA9IDA7XG4gICAgcHVibGljIGI6IG51bWJlciA9IDA7XG4gICAgcHVibGljIGE6IG51bWJlciA9IDE7XG5cbiAgICBjb25zdHJ1Y3RvcigpXG4gICAgY29uc3RydWN0b3Iocj86IHN0cmluZylcbiAgICBjb25zdHJ1Y3RvcihyPzogc3RyaW5nIHwgbnVtYmVyLCBnPzogbnVtYmVyLCBiPzogbnVtYmVyKVxuICAgIGNvbnN0cnVjdG9yKHI/OiBzdHJpbmcgfCBudW1iZXIsIGc/OiBudW1iZXIsIGI/OiBudW1iZXIsIGE/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgciA9IHIudHJpbSgpO1xuICAgICAgICAgICAgaWYgKHIuaW5kZXhPZignIycpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgciA9IHIuc3Vic3RyKHIuaW5kZXhPZignIycpICsgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yID0gcGFyc2VJbnQoci5zdWJzdHIoMCwgMiksIDE2KTtcbiAgICAgICAgICAgICAgICB0aGlzLmcgPSBwYXJzZUludChyLnN1YnN0cigyLCAyKSwgMTYpO1xuICAgICAgICAgICAgICAgIHRoaXMuYiA9IHBhcnNlSW50KHIuc3Vic3RyKDQsIDIpLCAxNik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHIuaW5kZXhPZigncmdiJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXM6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBSR0JfQ09MT1JfUkVHRVguZXhlYyhyKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuciA9IHBhcnNlSW50KHJlc1sxXSwgMTApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmcgPSBwYXJzZUludChyZXNbMl0sIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iID0gcGFyc2VJbnQocmVzWzNdLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYSA9IHJlc1s1XSA/IHBhcnNlRmxvYXQocmVzWzVdKSA6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yID0gciA/IHIgOiAwO1xuICAgICAgICAgICAgdGhpcy5nID0gZyA/IGcgOiAwO1xuICAgICAgICAgICAgdGhpcy5iID0gYiA/IGIgOiAwO1xuICAgICAgICAgICAgdGhpcy5hID0gYSB8fCAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9IZXgoKSB7XG4gICAgICAgIHJldHVybiAnIycgKyB0aGlzLnIudG9TdHJpbmcoMTYpICsgdGhpcy5nLnRvU3RyaW5nKDE2KSArIHRoaXMuYi50b1N0cmluZygxNik7XG4gICAgfVxuXG4gICAgdG9SZ2IoKSB7XG4gICAgICAgIHJldHVybiBgcmdiKCR7dGhpcy5yfSwgJHt0aGlzLmd9LCAke3RoaXMuYn0pYDtcbiAgICB9XG5cbiAgICB0b1JnYmEoKSB7XG4gICAgICAgIHJldHVybiBgcmdiYSgke3RoaXMucn0sICR7dGhpcy5nfSwgJHt0aGlzLmJ9LCAke3RoaXMuYX0pYDtcbiAgICB9XG5cbiAgICB0b1JnYldpdGhBbHBoYShhOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGByZ2JhKCR7dGhpcy5yfSwgJHt0aGlzLmd9LCAke3RoaXMuYn0sICR7YX0pYDtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGhzdlRvUkdCKGh1ZTogbnVtYmVyLCBzYXR1cmF0aW9uOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICBsZXQgcmVkID0gMDtcbiAgICBsZXQgZ3JlZW4gPSAwO1xuICAgIGxldCBibHVlID0gMDtcbiAgICBpZiAoc2F0dXJhdGlvbiA9PT0gMCkge1xuICAgICAgICByZWQgPSB2YWx1ZTtcbiAgICAgICAgZ3JlZW4gPSB2YWx1ZTtcbiAgICAgICAgYmx1ZSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBpID0gTWF0aC5mbG9vcihodWUgKiA2KTtcbiAgICAgICAgbGV0IGYgPSAoaHVlICogNikgLSBpO1xuICAgICAgICBsZXQgcCA9IHZhbHVlICogKDEgLSBzYXR1cmF0aW9uKTtcbiAgICAgICAgbGV0IHEgPSB2YWx1ZSAqICgxIC0gKHNhdHVyYXRpb24gKiBmKSk7XG4gICAgICAgIGxldCB0ID0gdmFsdWUgKiAoMSAtIChzYXR1cmF0aW9uICogKDEgLSBmKSkpO1xuICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZWQgPSBxO1xuICAgICAgICAgICAgICAgIGdyZWVuID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgYmx1ZSA9IHA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmVkID0gcDtcbiAgICAgICAgICAgICAgICBncmVlbiA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJsdWUgPSB0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHJlZCA9IHA7XG4gICAgICAgICAgICAgICAgZ3JlZW4gPSBxO1xuICAgICAgICAgICAgICAgIGJsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICByZWQgPSB0O1xuICAgICAgICAgICAgICAgIGdyZWVuID0gcDtcbiAgICAgICAgICAgICAgICBibHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgcmVkID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgZ3JlZW4gPSBwO1xuICAgICAgICAgICAgICAgIGJsdWUgPSBxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA2OiAvLyBmYWxsIHRocm91Z2hcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICByZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBncmVlbiA9IHQ7XG4gICAgICAgICAgICAgICAgYmx1ZSA9IHA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVkID0gTWF0aC5mbG9vcigyNTUgKiByZWQgKyAwLjUpO1xuICAgIGdyZWVuID0gTWF0aC5mbG9vcigyNTUgKiBncmVlbiArIDAuNSk7XG4gICAgYmx1ZSA9IE1hdGguZmxvb3IoMjU1ICogYmx1ZSArIDAuNSk7XG4gICAgcmV0dXJuICdyZ2IoJyArIHJlZCArICcsJyArIGdyZWVuICsgJywnICsgYmx1ZSArICcpJztcbn0iXX0=