UNPKG

@swimlane/ngx-charts

Version:

Declarative Charting Framework for Angular2 and beyond!

119 lines 4.05 kB
"use strict"; var d3_1 = require('../d3'); var color_sets_1 = require('../utils/color-sets'); var ColorHelper = (function () { function ColorHelper(scheme, type, domain, customColors) { if (typeof (scheme) === 'string') { scheme = color_sets_1.colorSets.find(function (cs) { return cs.name === scheme; }); } this.colorDomain = scheme.domain; this.scaleType = type; this.domain = domain; this.scale = this.generateColorScheme(scheme, type, domain); } ColorHelper.prototype.generateColorScheme = function (scheme, type, domain) { if (typeof (scheme) === 'string') { scheme = color_sets_1.colorSets.find(function (cs) { return cs.name === scheme; }); } var colorScale; if (type === 'quantile') { colorScale = d3_1.default.scaleQuantile() .range(scheme.domain) .domain(domain); } else if (type === 'ordinal') { colorScale = d3_1.default.scaleOrdinal() .range(scheme.domain) .domain(domain); } else if (type === 'linear') { colorScale = d3_1.default.scaleLinear() .domain(d3_1.default.range(0, 1, 1.0 / (scheme.domain.length - 1))) .range(scheme.domain); } return colorScale; }; ColorHelper.prototype.getColor = function (value) { if (this.scaleType === 'linear') { var valueScale = d3_1.default.scaleLinear() .domain(this.domain) .range([0, 1]); return (this.scale(valueScale(value))); } else { var formattedValue_1 = value.toString(); var found = undefined; // todo type customColors if (this.customColors && this.customColors.length > 0) { found = this.customColors.find(function (mapping) { return mapping.name === formattedValue_1.toLowerCase(); }); } if (found) { return found.value; } else { return this.scale(value); } } }; ColorHelper.prototype.getLinearGradientStops = function (value, start) { if (!start) { start = this.domain[0]; } var valueScale = d3_1.default.scaleLinear() .domain(this.domain) .range([0, 1]); var colorValueScale = d3_1.default.scaleBand() .domain(this.colorDomain) .range([0, 1]); var endColor = this.getColor(value); // generate the stops var startVal = valueScale(start); var startColor = this.getColor(start); var endVal = valueScale(value); var i = 0; var currentVal = startVal; var stops = []; stops.push({ color: startColor, offset: 0, opacity: 1 }); while (currentVal < endVal && i < this.colorDomain.length) { var color = this.colorDomain[i]; var offset = colorValueScale(color); if (offset <= startVal) { i++; continue; } if (offset >= endVal) { break; } stops.push({ color: color, offset: offset, opacity: 1 }); currentVal = offset; i++; } stops.push({ color: endColor, offset: endVal, opacity: 1 }); // normalize the offsets into percentages for (var _i = 0, stops_1 = stops; _i < stops_1.length; _i++) { var s = stops_1[_i]; s.offset = Math.floor(((s.offset - startVal) / (endVal - startVal)) * 100); } return stops; }; return ColorHelper; }()); exports.ColorHelper = ColorHelper; //# sourceMappingURL=color.helper.js.map