@carbon/charts 0.11.11 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/README.md +5 -0
- package/bar-chart.js +6 -12
- package/bar-chart.js.map +1 -1
- package/base-chart.d.ts +6 -7
- package/base-chart.js +52 -120
- package/base-chart.js.map +1 -1
- package/components/index.d.ts +1 -0
- package/components/index.js +2 -0
- package/components/index.js.map +1 -0
- package/components/overlay.d.ts +9 -0
- package/components/overlay.js +28 -0
- package/components/overlay.js.map +1 -0
- package/components/tooltip.d.ts +13 -0
- package/components/tooltip.js +110 -0
- package/components/tooltip.js.map +1 -0
- package/configuration.d.ts +28 -7
- package/configuration.js +20 -16
- package/configuration.js.map +1 -1
- package/index.d.ts +3 -2
- package/index.js +4 -3
- package/index.js.map +1 -1
- package/index.umd.js +1 -1
- package/index.umd.js.map +1 -1
- package/package.json +9 -9
- package/pie-chart.d.ts +1 -1
- package/pie-chart.js +15 -39
- package/pie-chart.js.map +1 -1
- package/scatter-chart.d.ts +1 -0
- package/scatter-chart.js +20 -14
- package/scatter-chart.js.map +1 -1
- package/services/colorPalettes.d.ts +4 -0
- package/services/colorPalettes.js +30 -0
- package/services/colorPalettes.js.map +1 -0
- package/services/colors.d.ts +9 -0
- package/services/colors.js +11 -0
- package/services/colors.js.map +1 -0
- package/stacked-bar-chart.js +5 -12
- package/stacked-bar-chart.js.map +1 -1
- package/style.css +7 -5
- package/style.scss +5 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carbon/charts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Carbon charting components",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"demo:server": "webpack-dev-server --config webpack.config.js --watch",
|
|
@@ -23,12 +23,13 @@
|
|
|
23
23
|
"author": "IBM",
|
|
24
24
|
"license": "Apache-2.0",
|
|
25
25
|
"dependencies": {
|
|
26
|
+
"@carbon/colors": "10.1.1",
|
|
27
|
+
"@carbon/utils-position": "1.1.0",
|
|
26
28
|
"babel-polyfill": "6.26.0",
|
|
27
|
-
"d3": "4.13.0",
|
|
28
29
|
"resize-observer-polyfill": "1.5.0"
|
|
29
30
|
},
|
|
30
31
|
"peerDependencies": {
|
|
31
|
-
"d3": ">=
|
|
32
|
+
"d3": ">=5.0.0 <=5.9.2"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
35
|
"@types/d3": "4.11.0",
|
|
@@ -37,7 +38,7 @@
|
|
|
37
38
|
"babel-polyfill": "6.26.0",
|
|
38
39
|
"copy-webpack-plugin": "4.5.2",
|
|
39
40
|
"css-loader": "0.28.7",
|
|
40
|
-
"d3": "
|
|
41
|
+
"d3": "5.9.2",
|
|
41
42
|
"extract-text-webpack-plugin": "3.0.2",
|
|
42
43
|
"file-loader": "1.1.5",
|
|
43
44
|
"html-loader": "0.5.1",
|
|
@@ -48,7 +49,7 @@
|
|
|
48
49
|
"karma-jasmine": "1.1.0",
|
|
49
50
|
"karma-sourcemap-loader": "0.3.7",
|
|
50
51
|
"karma-webpack": "2.0.5",
|
|
51
|
-
"lerna": "3.
|
|
52
|
+
"lerna": "3.13.4",
|
|
52
53
|
"mini-css-extract-plugin": "0.4.4",
|
|
53
54
|
"node-sass": "4.10.0",
|
|
54
55
|
"postcss-loader": "2.0.8",
|
|
@@ -61,11 +62,10 @@
|
|
|
61
62
|
"typedoc": "0.11.1",
|
|
62
63
|
"typescript": "2.7.2",
|
|
63
64
|
"url-loader": "0.6.2",
|
|
64
|
-
"webpack": "4.
|
|
65
|
+
"webpack": "4.33.0",
|
|
65
66
|
"webpack-bundle-analyzer": "2.13.1",
|
|
66
|
-
"webpack-cli": "3.
|
|
67
|
-
"webpack-dev-server": "3.
|
|
68
|
-
"webpack-node-externals": "1.6.0"
|
|
67
|
+
"webpack-cli": "3.3.2",
|
|
68
|
+
"webpack-dev-server": "3.7.0"
|
|
69
69
|
},
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
package/pie-chart.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export declare class PieChart extends BaseChart {
|
|
|
25
25
|
draw(): void;
|
|
26
26
|
interpolateValues(newData: any): void;
|
|
27
27
|
reduceOpacity(exception?: any): void;
|
|
28
|
-
|
|
28
|
+
getTooltipHTML: (d: any) => string;
|
|
29
29
|
addDataPointEventListener(): void;
|
|
30
30
|
update(newData?: any): void;
|
|
31
31
|
resizeChart(): void;
|
package/pie-chart.js
CHANGED
|
@@ -9,7 +9,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
9
9
|
};
|
|
10
10
|
})();
|
|
11
11
|
// D3 Imports
|
|
12
|
-
import { select
|
|
12
|
+
import { select } from "d3-selection";
|
|
13
13
|
import { scaleOrdinal } from "d3-scale";
|
|
14
14
|
import { pie, arc } from "d3-shape";
|
|
15
15
|
import { interpolate } from "d3-interpolate";
|
|
@@ -22,6 +22,7 @@ var PieChart = /** @class */ (function (_super) {
|
|
|
22
22
|
function PieChart(holder, configs, type) {
|
|
23
23
|
if (type === void 0) { type = ChartType.PIE; }
|
|
24
24
|
var _this = _super.call(this, holder, configs) || this;
|
|
25
|
+
_this.getTooltipHTML = function (d) { return _this.generateTooltipHTML(d.data.label, d.value.toLocaleString()); };
|
|
25
26
|
_this.options.type = type;
|
|
26
27
|
// Assign colors to each slice using their label
|
|
27
28
|
_this.colorScale = scaleOrdinal(_this.options.colors);
|
|
@@ -31,6 +32,9 @@ var PieChart = /** @class */ (function (_super) {
|
|
|
31
32
|
// Cap number of slices at a specific number, and group the remaining items into the label "Other"
|
|
32
33
|
PieChart.prototype.dataProcessor = function (dataObject) {
|
|
33
34
|
// TODO - Support multiple datasets
|
|
35
|
+
if (dataObject.datasets.length > 1) {
|
|
36
|
+
console.warn("Currently the Pie & Donut charts support a single dataset,\n\t\t\t\tyou appear to have more than that. Will only use your first provided dataset.");
|
|
37
|
+
}
|
|
34
38
|
// Check for duplicate keys in the data
|
|
35
39
|
var duplicates = Tools.getDuplicateValues(dataObject.labels);
|
|
36
40
|
if (duplicates.length > 0) {
|
|
@@ -103,11 +107,12 @@ var PieChart = /** @class */ (function (_super) {
|
|
|
103
107
|
// Compute the correct inner & outer radius
|
|
104
108
|
var marginedRadius = this.computeRadius();
|
|
105
109
|
this.arc = arc()
|
|
106
|
-
.innerRadius(this.options.type === "donut" ? (marginedRadius * (
|
|
110
|
+
.innerRadius(this.options.type === "donut" ? (marginedRadius * (3 / 4)) : 2)
|
|
107
111
|
.outerRadius(marginedRadius);
|
|
108
112
|
this.pie = pie()
|
|
109
113
|
.value(function (d) { return d.value; })
|
|
110
|
-
.sort(null)
|
|
114
|
+
.sort(null)
|
|
115
|
+
.padAngle(0.007);
|
|
111
116
|
// Draw the slices
|
|
112
117
|
this.path = this.innerWrap.selectAll("path")
|
|
113
118
|
.data(this.pie(dataList))
|
|
@@ -132,7 +137,7 @@ var PieChart = /** @class */ (function (_super) {
|
|
|
132
137
|
.text(function (d) { return Tools.convertValueToPercentage(d.data.value, dataList); })
|
|
133
138
|
.attr("transform", function (d) { return self.deriveTransformString(this, d, radius); });
|
|
134
139
|
// Hide overlay
|
|
135
|
-
this.
|
|
140
|
+
this.chartOverlay.hide();
|
|
136
141
|
};
|
|
137
142
|
// Interpolated transitions for older data points to reflect the new data changes
|
|
138
143
|
PieChart.prototype.interpolateValues = function (newData) {
|
|
@@ -221,7 +226,7 @@ var PieChart = /** @class */ (function (_super) {
|
|
|
221
226
|
this.addDataPointEventListener();
|
|
222
227
|
this.reduceOpacity();
|
|
223
228
|
// Hide the overlay
|
|
224
|
-
this.
|
|
229
|
+
this.chartOverlay.hide();
|
|
225
230
|
};
|
|
226
231
|
// TODO - Possible inherits from base-chart
|
|
227
232
|
PieChart.prototype.reduceOpacity = function (exception) {
|
|
@@ -234,52 +239,22 @@ var PieChart = /** @class */ (function (_super) {
|
|
|
234
239
|
select(exception).attr("fill", function (d) { return _this.getFillColor(_this.displayData.datasets[0].label, d.data.label, d.data.value); });
|
|
235
240
|
}
|
|
236
241
|
};
|
|
237
|
-
// TODO - Should inherit most logic from base-chart
|
|
238
|
-
PieChart.prototype.showTooltip = function (d) {
|
|
239
|
-
this.resetOpacity();
|
|
240
|
-
selectAll(".tooltip").remove();
|
|
241
|
-
var tooltip = select(this.holder).append("div")
|
|
242
|
-
.attr("class", "tooltip chart-tooltip")
|
|
243
|
-
.style("top", mouse(this.holder)[1] - Configuration.tooltip.magicTop2 + "px");
|
|
244
|
-
var dVal = d.value.toLocaleString();
|
|
245
|
-
var tooltipHTML = this.generateTooltipHTML(d.data.label, dVal);
|
|
246
|
-
tooltip.append("div").attr("class", "text-box").html(tooltipHTML);
|
|
247
|
-
if (mouse(this.holder)[0] + tooltip.node().clientWidth > this.holder.clientWidth) {
|
|
248
|
-
tooltip.style("left", mouse(this.holder)[0] - tooltip.node().clientWidth - Configuration.tooltip.magicLeft1 + "px");
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
tooltip.style("left", mouse(this.holder)[0] + Configuration.tooltip.magicLeft2 + "px");
|
|
252
|
-
}
|
|
253
|
-
tooltip.style("opacity", 0)
|
|
254
|
-
.transition()
|
|
255
|
-
.duration(Configuration.tooltip.fadeIn.duration)
|
|
256
|
-
.style("opacity", 1);
|
|
257
|
-
this.addTooltipEventListeners(tooltip);
|
|
258
|
-
};
|
|
259
242
|
// TODO - Refactor
|
|
260
243
|
PieChart.prototype.addDataPointEventListener = function () {
|
|
261
244
|
var self = this;
|
|
262
245
|
var accessibility = this.options.accessibility;
|
|
263
246
|
this.innerWrap.selectAll("path")
|
|
264
|
-
.on("click", function (d) {
|
|
265
|
-
self.dispatchEvent("pie-slice-onClick", d);
|
|
266
|
-
})
|
|
247
|
+
.on("click", function (d) { return self.dispatchEvent("pie-slice-onClick", d); })
|
|
267
248
|
.on("mouseover", function (d) {
|
|
268
249
|
var sliceElement = select(this);
|
|
269
250
|
Tools.moveToFront(sliceElement);
|
|
270
|
-
sliceElement
|
|
271
|
-
.attr("stroke-width", Configuration.pie.mouseover.strokeWidth)
|
|
251
|
+
sliceElement.attr("stroke-width", Configuration.pie.mouseover.strokeWidth)
|
|
272
252
|
.attr("stroke-opacity", Configuration.pie.mouseover.strokeOpacity)
|
|
273
253
|
.attr("stroke", self.getStrokeColor(self.displayData.datasets[0].label, d.data.label, d.data.value));
|
|
274
254
|
self.showTooltip(d);
|
|
275
255
|
self.reduceOpacity(this);
|
|
276
256
|
})
|
|
277
|
-
.on("mousemove", function (d) {
|
|
278
|
-
var tooltipRef = select(self.holder).select("div.chart-tooltip");
|
|
279
|
-
var relativeMousePosition = mouse(self.holder);
|
|
280
|
-
tooltipRef.style("left", relativeMousePosition[0] + Configuration.tooltip.magicLeft2 + "px")
|
|
281
|
-
.style("top", relativeMousePosition[1] + "px");
|
|
282
|
-
})
|
|
257
|
+
.on("mousemove", function (d) { return self.tooltip.positionTooltip(); })
|
|
283
258
|
.on("mouseout", function (d) {
|
|
284
259
|
select(this)
|
|
285
260
|
.attr("stroke-width", accessibility ? Configuration.pie.default.strokeWidth : Configuration.pie.mouseout.strokeWidth)
|
|
@@ -291,6 +266,7 @@ var PieChart = /** @class */ (function (_super) {
|
|
|
291
266
|
PieChart.prototype.update = function (newData) {
|
|
292
267
|
var oldData = Tools.clone(this.displayData);
|
|
293
268
|
var activeLegendItems = this.getActiveLegendItems();
|
|
269
|
+
// TODO - Support multiple datasets
|
|
294
270
|
var newDisplayData = Object.assign({}, oldData);
|
|
295
271
|
newDisplayData.datasets[0].data = oldData.datasets[0].data.filter(function (dataPoint) { return activeLegendItems.indexOf(dataPoint.label) !== -1; });
|
|
296
272
|
newDisplayData.labels = newDisplayData.datasets[0].data.map(function (datum) { return datum.label; });
|
|
@@ -308,7 +284,7 @@ var PieChart = /** @class */ (function (_super) {
|
|
|
308
284
|
.style("transform", "translate(" + radius + "px," + radius + "px)");
|
|
309
285
|
// Resize the arc
|
|
310
286
|
this.arc = arc()
|
|
311
|
-
.innerRadius(this.options.type === "donut" ? (radius * (
|
|
287
|
+
.innerRadius(this.options.type === "donut" ? (radius * (3 / 4)) : 2)
|
|
312
288
|
.outerRadius(radius);
|
|
313
289
|
this.innerWrap.selectAll("path")
|
|
314
290
|
.attr("d", this.arc);
|
package/pie-chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pie-chart.js","sourceRoot":"","sources":["src/pie-chart.ts"],"names":[],"mappings":"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","sourcesContent":["// D3 Imports\nimport { select, selectAll, mouse } from \"d3-selection\";\nimport { scaleOrdinal } from \"d3-scale\";\nimport { pie, arc, Pie, Arc } from \"d3-shape\";\nimport { interpolate } from \"d3-interpolate\";\n\nimport { BaseChart } from \"./base-chart\";\nimport * as Configuration from \"./configuration\";\nimport { ChartConfig, PieChartOptions, ChartType, ChartData } from \"./configuration\";\nimport { Tools } from \"./tools\";\n\nexport interface PieDatum {\n\tlabel: string;\n\tvalue: number;\n\titems?: Array<PieDatum>;\n}\n\nexport interface PieDataSet extends Configuration.DataSet {\n\tdata: Array<PieDatum>;\n}\n\nexport interface PieData {\n\tlabels: Array<string>;\n\tdatasets: Array<PieDataSet>;\n}\n\nexport class PieChart extends BaseChart {\n\tpie: Pie<PieChart, any>;\n\tarc: Arc<PieChart, any>;\n\tpath: any;\n\n\toptions: PieChartOptions;\n\n\tconstructor(holder: Element, configs: ChartConfig<PieChartOptions>, type: ChartType.PIE | ChartType.DONUT = ChartType.PIE) {\n\t\tsuper(holder, configs);\n\n\t\tthis.options.type = type;\n\n\t\t// Assign colors to each slice using their label\n\t\tthis.colorScale = scaleOrdinal(this.options.colors);\n\t}\n\n\t// Sort data by value (descending)\n\t// Cap number of slices at a specific number, and group the remaining items into the label \"Other\"\n\tdataProcessor(dataObject: ChartData): PieData {\n\t\t// TODO - Support multiple datasets\n\t\t// Check for duplicate keys in the data\n\t\tconst duplicates = Tools.getDuplicateValues(dataObject.labels);\n\t\tif (duplicates.length > 0) {\n\t\t\tconsole.error(`${Tools.capitalizeFirstLetter(this.options.type)} Chart - You have duplicate keys`, duplicates);\n\t\t}\n\n\t\t// TODO - Support multiple datasets\n\t\t// let sortedData = data.datasets[0];\n\t\tconst dataList: Array<any> = dataObject.datasets[0].data.map((datum, i) => ({\n\t\t\tlabel: dataObject.labels[i],\n\t\t\tvalue: datum,\n\t\t\t// datasetLabel: data.datasets[0].label\n\t\t}));\n\n\t\t// Sort data by value\n\t\tlet sortedData = dataList.sort((a, b) => b.value - a.value);\n\n\t\t// Keep a certain number of slices, and add an \"Other\" slice for the rest\n\t\tconst { sliceLimit: stopAt } = Configuration.pie;\n\t\tconst rest = sortedData.slice(stopAt);\n\t\tconst restAccumulatedValue = rest.reduce((accum, item) => accum + item.value, 0);\n\n\t\tconst otherLabelIndex = sortedData.findIndex(dataPoint => dataPoint.label === \"Other\");\n\t\tif (otherLabelIndex !== -1) {\n\t\t\tsortedData.push(sortedData.splice(otherLabelIndex, 1)[0]);\n\t\t} else if (rest.length > 0) {\n\t\t\tsortedData = sortedData.slice(0, stopAt)\n\t\t\t\t.concat([{\n\t\t\t\t\tlabel: Configuration.pie.label.other,\n\t\t\t\t\tvalue: restAccumulatedValue,\n\t\t\t\t\titems: rest\n\t\t\t\t}]);\n\t\t}\n\n\t\treturn {\n\t\t\t// Sort labels based on the order made above\n\t\t\tlabels: sortedData.map((datum, i) => datum.label),\n\t\t\tdatasets: [\n\t\t\t\t{\n\t\t\t\t\t// copy all the relevant properties\n\t\t\t\t\tbackgroundColors: dataObject.datasets[0].backgroundColors,\n\t\t\t\t\tchartType: dataObject.datasets[0].chartType,\n\t\t\t\t\tlabel: dataObject.datasets[0].label,\n\t\t\t\t\t// add our sorted data\n\t\t\t\t\tdata: sortedData\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t}\n\n\t// If there isn't a chart already drawn in the container\n\t// This function is called and will do that\n\tinitialDraw() {\n\t\tthis.setSVG();\n\n\t\t// Add legend\n\t\tthis.addOrUpdateLegend();\n\n\t\t// Draw slices & labels\n\t\tthis.draw();\n\n\t\t// Add event listeners to slices\n\t\tthis.addDataPointEventListener();\n\t}\n\n\tdraw() {\n\t\tconst dataList = this.displayData.datasets[0].data;\n\n\t\tconst chartSize = this.getChartSize(this.container);\n\t\tconst diameter = Math.min(chartSize.width, chartSize.height);\n\t\tconst radius: number = diameter / 2;\n\n\t\tselect(this.holder).select(\"svg\")\n\t\t\t.attr(\"width\", `${diameter}px`)\n\t\t\t.attr(\"height\", `${diameter}px`);\n\n\t\tthis.innerWrap\n\t\t\t.style(\"transform\", `translate(${radius}px,${radius}px)`)\n\t\t\t.attr(\"width\", `${diameter}px`)\n\t\t\t.attr(\"height\", `${diameter}px`)\n\t\t\t.attr(\"preserveAspectRatio\", \"xMinYMin\");\n\n\t\t// Compute the correct inner & outer radius\n\t\tconst marginedRadius = this.computeRadius();\n\t\tthis.arc = arc()\n\t\t\t\t.innerRadius(this.options.type === \"donut\" ? (marginedRadius * (2 / 3)) : 0)\n\t\t\t\t.outerRadius(marginedRadius);\n\n\t\tthis.pie = pie()\n\t\t\t.value((d: any) => d.value)\n\t\t\t.sort(null);\n\n\t\t// Draw the slices\n\t\tthis.path = this.innerWrap.selectAll(\"path\")\n\t\t\t.data(this.pie(dataList))\n\t\t\t.enter()\n\t\t\t.append(\"path\")\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.attr(\"fill\", d => this.getFillColor(this.displayData.datasets[0].label, d.data.label, d.data.value)) // Support multiple datasets\n\t\t\t.attr(\"stroke\", d => this.getStrokeColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.attr(\"stroke-width\", Configuration.pie.default.strokeWidth)\n\t\t\t.attr(\"stroke-opacity\", d => this.options.accessibility ? 1 : 0)\n\t\t\t.each(function(d) { this._current = d; });\n\n\t\t// Draw the slice labels\n\t\tconst self = this;\n\t\tthis.innerWrap\n\t\t\t.selectAll(\"text.chart-label\")\n\t\t\t.data(this.pie(dataList), (d: any) => d.data.label)\n\t\t\t.enter()\n\t\t\t.append(\"text\")\n\t\t\t.classed(\"chart-label\", true)\n\t\t\t.attr(\"dy\", Configuration.pie.label.dy)\n\t\t\t.style(\"text-anchor\", \"middle\")\n\t\t\t.text(d => Tools.convertValueToPercentage(d.data.value, dataList))\n\t\t\t.attr(\"transform\", function (d) { return self.deriveTransformString(this, d, radius); });\n\n\t\t// Hide overlay\n\t\tthis.updateOverlay().hide();\n\t}\n\n\t// Interpolated transitions for older data points to reflect the new data changes\n\tinterpolateValues(newData: any) {\n\t\tconst dataList = newData.datasets[0].data;\n\n\t\t// Apply the new data to the slices, and interpolate them\n\t\tconst self = this;\n\t\tconst path = this.innerWrap.selectAll(\"path\").data(this.pie(dataList));\n\n\t\t// Update slices\n\t\tpath\n\t\t\t.transition()\n\t\t\t.duration(0)\n\t\t\t.attr(\"stroke\", d => this.getStrokeColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.attr(\"stroke-width\", Configuration.pie.default.strokeWidth)\n\t\t\t.attr(\"stroke-opacity\", d => this.options.accessibility ? 1 : 0)\n\t\t\t.transition()\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.duration(Configuration.transitions.default.duration)\n\t\t\t.attr(\"fill\", d => this.getFillColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.attrTween(\"d\", function (a) {\n\t\t\t\treturn arcTween.bind(this)(a, self.arc);\n\t\t\t});\n\n\t\tpath.enter()\n\t\t\t.append(\"path\")\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.transition()\n\t\t\t.duration(0)\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.attr(\"stroke\", d => this.getStrokeColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.attr(\"stroke-width\", Configuration.pie.default.strokeWidth)\n\t\t\t.attr(\"stroke-opacity\", d => this.options.accessibility ? 1 : 0)\n\t\t\t.transition()\n\t\t\t.duration(Configuration.transitions.default.duration)\n\t\t\t.attr(\"fill\", d => this.getFillColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.attrTween(\"d\", function (a) {\n\t\t\t\treturn arcTween.bind(this)(a, self.arc);\n\t\t\t});\n\n\t\tpath\n\t\t\t.exit()\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.transition()\n\t\t\t.duration(Configuration.transitions.default.duration)\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Fade out all text labels\n\t\tthis.innerWrap.selectAll(\"text.chart-label\")\n\t\t\t.transition()\n\t\t\t.duration(Configuration.transitions.default.duration / 2)\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.on(\"end\", function(d) {\n\t\t\t\tselect(this)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(Configuration.transitions.default.duration / 2)\n\t\t\t\t\t.style(\"opacity\", 1);\n\t\t\t});\n\n\t\t// Move text labels to their new location, and fade them in again\n\t\tconst radius = this.computeRadius();\n\t\tsetTimeout(() => {\n\t\t\tconst text = this.innerWrap.selectAll(\"text.chart-label\")\n\t\t\t\t.data(this.pie(dataList), d => d.label );\n\n\t\t\ttext\n\t\t\t\t.enter()\n\t\t\t\t.append(\"text\")\n\t\t\t\t.classed(\"chart-label\", true)\n\t\t\t\t.attr(\"dy\", Configuration.pie.label.dy)\n\t\t\t\t.style(\"text-anchor\", \"middle\")\n\t\t\t\t.text(d => Tools.convertValueToPercentage(d.data.value, dataList))\n\t\t\t\t.attr(\"transform\", function (d) { return self.deriveTransformString(this, d, radius); })\n\t\t\t\t.style(\"opacity\", 0)\n\t\t\t\t.transition()\n\t\t\t\t.duration(Configuration.transitions.default.duration / 2)\n\t\t\t\t.style(\"opacity\", 1);\n\n\t\t\ttext\n\t\t\t\t.style(\"text-anchor\", \"middle\")\n\t\t\t\t.text(d => Tools.convertValueToPercentage(d.data.value, dataList))\n\t\t\t\t.attr(\"transform\", function (d) { return self.deriveTransformString(this, d, radius); })\n\t\t\t\t.transition()\n\t\t\t\t.duration(Configuration.transitions.default.duration / 2)\n\t\t\t\t.style(\"opacity\", 1);\n\n\t\t\ttext\n\t\t\t\t.exit()\n\t\t\t\t.remove();\n\t\t}, Configuration.transitions.default.duration / 2);\n\n\t\t// Add slice hover actions, and clear any slice borders present\n\t\tthis.addDataPointEventListener();\n\t\tthis.reduceOpacity();\n\n\t\t// Hide the overlay\n\t\tthis.updateOverlay().hide();\n\t}\n\n\t// TODO - Possible inherits from base-chart\n\treduceOpacity(exception?: any) {\n\t\tif (exception) {\n\t\t\t// this.innerWrap.selectAll(\"path\").attr(\"fill-opacity\", Configuration.charts.reduceOpacity.opacity);\n\n\t\t\t// Fade everything out except for this element\n\t\t\tselect(exception).attr(\"fill-opacity\", false);\n\t\t\tselect(exception).attr(\"stroke-opacity\", Configuration.charts.reduceOpacity.opacity);\n\t\t\tselect(exception).attr(\"fill\", (d: any) => this.getFillColor(this.displayData.datasets[0].label, d.data.label, d.data.value));\n\t\t}\n\t}\n\n\t// TODO - Should inherit most logic from base-chart\n\tshowTooltip(d) {\n\t\tthis.resetOpacity();\n\n\t\tselectAll(\".tooltip\").remove();\n\t\tconst tooltip = select(this.holder).append(\"div\")\n\t\t\t.attr(\"class\", \"tooltip chart-tooltip\")\n\t\t\t.style(\"top\", mouse(this.holder as SVGSVGElement)[1] - Configuration.tooltip.magicTop2 + \"px\");\n\n\t\tconst dVal = d.value.toLocaleString();\n\t\tconst tooltipHTML = this.generateTooltipHTML(d.data.label, dVal);\n\n\t\ttooltip.append(\"div\").attr(\"class\", \"text-box\").html(tooltipHTML);\n\t\tif (mouse(this.holder as SVGSVGElement)[0] + (tooltip.node() as Element).clientWidth > this.holder.clientWidth) {\n\t\t\ttooltip.style(\n\t\t\t\t\"left\",\n\t\t\t\tmouse(this.holder as SVGSVGElement)[0] - (tooltip.node() as Element).clientWidth - Configuration.tooltip.magicLeft1 + \"px\"\n\t\t\t);\n\t\t} else {\n\t\t\ttooltip.style(\"left\", mouse(this.holder as SVGSVGElement)[0] + Configuration.tooltip.magicLeft2 + \"px\");\n\t\t}\n\n\t\ttooltip.style(\"opacity\", 0)\n\t\t\t.transition()\n\t\t\t.duration(Configuration.tooltip.fadeIn.duration)\n\t\t\t.style(\"opacity\", 1);\n\n\t\tthis.addTooltipEventListeners(tooltip);\n\t}\n\n\t// TODO - Refactor\n\taddDataPointEventListener() {\n\t\tconst self = this;\n\t\tconst { accessibility } = this.options;\n\n\t\tthis.innerWrap.selectAll(\"path\")\n\t\t\t.on(\"click\", function(d) {\n\t\t\t\tself.dispatchEvent(\"pie-slice-onClick\", d);\n\t\t\t})\n\t\t\t.on(\"mouseover\", function(d) {\n\t\t\t\tconst sliceElement = select(this);\n\t\t\t\tTools.moveToFront(sliceElement);\n\n\t\t\t\tsliceElement\n\t\t\t\t\t.attr(\"stroke-width\", Configuration.pie.mouseover.strokeWidth)\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.pie.mouseover.strokeOpacity)\n\t\t\t\t\t.attr(\"stroke\", self.getStrokeColor(self.displayData.datasets[0].label, d.data.label, d.data.value));\n\n\t\t\t\tself.showTooltip(d);\n\t\t\t\tself.reduceOpacity(this);\n\t\t\t})\n\t\t\t.on(\"mousemove\", function(d) {\n\t\t\t\tconst tooltipRef = select(self.holder).select(\"div.chart-tooltip\");\n\n\t\t\t\tconst relativeMousePosition = mouse(self.holder as HTMLElement);\n\t\t\t\ttooltipRef.style(\"left\", relativeMousePosition[0] + Configuration.tooltip.magicLeft2 + \"px\")\n\t\t\t\t\t.style(\"top\", relativeMousePosition[1] + \"px\");\n\t\t\t})\n\t\t\t.on(\"mouseout\", function(d) {\n\t\t\t\tselect(this)\n\t\t\t\t\t.attr(\"stroke-width\", accessibility ? Configuration.pie.default.strokeWidth : Configuration.pie.mouseout.strokeWidth)\n\t\t\t\t\t.attr(\"stroke\", accessibility ? self.getStrokeColor(self.displayData.datasets[0].label, d.data.label, d.data.value) : \"none\")\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.pie.mouseout.strokeOpacity);\n\n\t\t\t\tself.hideTooltip();\n\t\t\t});\n\t}\n\n\tupdate(newData?: any) {\n\t\tconst oldData = Tools.clone(this.displayData);\n\t\tconst activeLegendItems = this.getActiveLegendItems();\n\n\t\tconst newDisplayData = Object.assign({}, oldData);\n\t\tnewDisplayData.datasets[0].data = oldData.datasets[0].data.filter(dataPoint => activeLegendItems.indexOf(dataPoint.label) !== -1);\n\n\t\tnewDisplayData.labels = newDisplayData.datasets[0].data.map(datum => datum.label);\n\n\t\tthis.interpolateValues(newDisplayData);\n\t}\n\n\tresizeChart() {\n\t\tconst chartSize: any = this.getChartSize(this.container);\n\t\tconst dimensionToUseForScale = Math.min(chartSize.width, chartSize.height);\n\t\tconst radius: number = this.computeRadius();\n\n\t\t// Resize the SVG\n\t\tselect(this.holder).select(\"svg\")\n\t\t\t\t.attr(\"width\", `${dimensionToUseForScale}px`)\n\t\t\t\t.attr(\"height\", `${dimensionToUseForScale}px`);\n\t\tthis.innerWrap\n\t\t\t.style(\"transform\", `translate(${radius}px,${radius}px)`);\n\n\t\t// Resize the arc\n\t\tthis.arc = arc()\n\t\t\t.innerRadius(this.options.type === \"donut\" ? (radius * (2 / 3)) : 0)\n\t\t\t.outerRadius(radius);\n\n\t\tthis.innerWrap.selectAll(\"path\")\n\t\t\t.attr(\"d\", this.arc);\n\n\t\tconst self = this;\n\t\tthis.innerWrap\n\t\t\t.selectAll(\"text.chart-label\")\n\t\t\t.attr(\"transform\", function (d) { return self.deriveTransformString(this, d, radius); });\n\n\t\t// Reposition the legend\n\t\tthis.positionLegend();\n\t}\n\n\t// Helper functions\n\tprivate computeRadius() {\n\t\tconst chartSize: any = this.getChartSize(this.container);\n\t\tconst radius: number = Math.min(chartSize.width, chartSize.height) / 2;\n\n\t\treturn radius;\n\t}\n\n\t/**\n\t * Return the css transform string to be used for the slice\n\t *\n\t * @private\n\t * @param {any} d - d3 data item for slice\n\t * @param {any} radius - computed radius of the chart\n\t * @returns final transform string to be applied to the <text> element\n\t * @memberof PieChart\n\t */\n\tprivate deriveTransformString(element, d, radius) {\n\t\tconst textLength = element.getComputedTextLength();\n\t\tconst textOffsetX = textLength / 2;\n\t\tconst textOffsetY = parseFloat(getComputedStyle(element).fontSize) / 2;\n\n\t\tconst marginedRadius = radius + Configuration.pie.label.margin;\n\n\t\tconst theta = ((d.endAngle - d.startAngle) / 2) + d.startAngle;\n\t\tconst xPosition = (textOffsetX + marginedRadius) * Math.sin(theta);\n\t\tconst yPosition = (textOffsetY + marginedRadius) * -Math.cos(theta);\n\n\t\treturn `translate(${xPosition}, ${yPosition})`;\n\t}\n}\n\n// d3 Tween functions\nfunction arcTween(a, arcFunc) {\n\tconst i = interpolate(this._current, a);\n\n\treturn t => {\n\t\tthis._current = i(t);\n\n\t\treturn arcFunc(this._current);\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pie-chart.js","sourceRoot":"","sources":["src/pie-chart.ts"],"names":[],"mappings":"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","sourcesContent":["// D3 Imports\nimport { select } from \"d3-selection\";\nimport { scaleOrdinal } from \"d3-scale\";\nimport { pie, arc, Pie, Arc } from \"d3-shape\";\nimport { interpolate } from \"d3-interpolate\";\n\nimport { BaseChart } from \"./base-chart\";\nimport * as Configuration from \"./configuration\";\nimport { ChartConfig, PieChartOptions, ChartType, ChartData } from \"./configuration\";\nimport { Tools } from \"./tools\";\n\nexport interface PieDatum {\n\tlabel: string;\n\tvalue: number;\n\titems?: Array<PieDatum>;\n}\n\nexport interface PieDataSet extends Configuration.DataSet {\n\tdata: Array<PieDatum>;\n}\n\nexport interface PieData {\n\tlabels: Array<string>;\n\tdatasets: Array<PieDataSet>;\n}\n\nexport class PieChart extends BaseChart {\n\tpie: Pie<PieChart, any>;\n\tarc: Arc<PieChart, any>;\n\tpath: any;\n\n\toptions: PieChartOptions;\n\n\tconstructor(holder: Element, configs: ChartConfig<PieChartOptions>, type: ChartType.PIE | ChartType.DONUT = ChartType.PIE) {\n\t\tsuper(holder, configs);\n\n\t\tthis.options.type = type;\n\n\t\t// Assign colors to each slice using their label\n\t\tthis.colorScale = scaleOrdinal(this.options.colors);\n\t}\n\n\t// Sort data by value (descending)\n\t// Cap number of slices at a specific number, and group the remaining items into the label \"Other\"\n\tdataProcessor(dataObject: ChartData): PieData {\n\t\t// TODO - Support multiple datasets\n\t\tif (dataObject.datasets.length > 1) {\n\t\t\tconsole.warn(`Currently the Pie & Donut charts support a single dataset,\n\t\t\t\tyou appear to have more than that. Will only use your first provided dataset.`);\n\t\t}\n\n\t\t// Check for duplicate keys in the data\n\t\tconst duplicates = Tools.getDuplicateValues(dataObject.labels);\n\t\tif (duplicates.length > 0) {\n\t\t\tconsole.error(`${Tools.capitalizeFirstLetter(this.options.type)} Chart - You have duplicate keys`, duplicates);\n\t\t}\n\n\t\t// TODO - Support multiple datasets\n\t\t// let sortedData = data.datasets[0];\n\t\tconst dataList: Array<any> = dataObject.datasets[0].data.map((datum, i) => ({\n\t\t\tlabel: dataObject.labels[i],\n\t\t\tvalue: datum,\n\t\t\t// datasetLabel: data.datasets[0].label\n\t\t}));\n\n\t\t// Sort data by value\n\t\tlet sortedData = dataList.sort((a, b) => b.value - a.value);\n\n\t\t// Keep a certain number of slices, and add an \"Other\" slice for the rest\n\t\tconst { sliceLimit: stopAt } = Configuration.pie;\n\t\tconst rest = sortedData.slice(stopAt);\n\t\tconst restAccumulatedValue = rest.reduce((accum, item) => accum + item.value, 0);\n\n\t\tconst otherLabelIndex = sortedData.findIndex(dataPoint => dataPoint.label === \"Other\");\n\t\tif (otherLabelIndex !== -1) {\n\t\t\tsortedData.push(sortedData.splice(otherLabelIndex, 1)[0]);\n\t\t} else if (rest.length > 0) {\n\t\t\tsortedData = sortedData.slice(0, stopAt)\n\t\t\t\t.concat([{\n\t\t\t\t\tlabel: Configuration.pie.label.other,\n\t\t\t\t\tvalue: restAccumulatedValue,\n\t\t\t\t\titems: rest\n\t\t\t\t}]);\n\t\t}\n\n\t\treturn {\n\t\t\t// Sort labels based on the order made above\n\t\t\tlabels: sortedData.map((datum, i) => datum.label),\n\t\t\tdatasets: [\n\t\t\t\t{\n\t\t\t\t\t// copy all the relevant properties\n\t\t\t\t\tbackgroundColors: dataObject.datasets[0].backgroundColors,\n\t\t\t\t\tchartType: dataObject.datasets[0].chartType,\n\t\t\t\t\tlabel: dataObject.datasets[0].label,\n\t\t\t\t\t// add our sorted data\n\t\t\t\t\tdata: sortedData\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t}\n\n\t// If there isn't a chart already drawn in the container\n\t// This function is called and will do that\n\tinitialDraw() {\n\t\tthis.setSVG();\n\n\t\t// Add legend\n\t\tthis.addOrUpdateLegend();\n\n\t\t// Draw slices & labels\n\t\tthis.draw();\n\n\t\t// Add event listeners to slices\n\t\tthis.addDataPointEventListener();\n\t}\n\n\tdraw() {\n\t\tconst dataList = this.displayData.datasets[0].data;\n\n\t\tconst chartSize = this.getChartSize(this.container);\n\t\tconst diameter = Math.min(chartSize.width, chartSize.height);\n\t\tconst radius: number = diameter / 2;\n\n\t\tselect(this.holder).select(\"svg\")\n\t\t\t.attr(\"width\", `${diameter}px`)\n\t\t\t.attr(\"height\", `${diameter}px`);\n\n\t\tthis.innerWrap\n\t\t\t.style(\"transform\", `translate(${radius}px,${radius}px)`)\n\t\t\t.attr(\"width\", `${diameter}px`)\n\t\t\t.attr(\"height\", `${diameter}px`)\n\t\t\t.attr(\"preserveAspectRatio\", \"xMinYMin\");\n\n\t\t// Compute the correct inner & outer radius\n\t\tconst marginedRadius = this.computeRadius();\n\t\tthis.arc = arc()\n\t\t\t\t.innerRadius(this.options.type === \"donut\" ? (marginedRadius * (3 / 4)) : 2)\n\t\t\t\t.outerRadius(marginedRadius);\n\n\t\tthis.pie = pie()\n\t\t\t.value((d: any) => d.value)\n\t\t\t.sort(null)\n\t\t\t.padAngle(0.007);\n\n\t\t// Draw the slices\n\t\tthis.path = this.innerWrap.selectAll(\"path\")\n\t\t\t.data(this.pie(dataList))\n\t\t\t.enter()\n\t\t\t.append(\"path\")\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.attr(\"fill\", d => this.getFillColor(this.displayData.datasets[0].label, d.data.label, d.data.value)) // Support multiple datasets\n\t\t\t.attr(\"stroke\", d => this.getStrokeColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.attr(\"stroke-width\", Configuration.pie.default.strokeWidth)\n\t\t\t.attr(\"stroke-opacity\", d => this.options.accessibility ? 1 : 0)\n\t\t\t.each(function(d) { this._current = d; });\n\n\t\t// Draw the slice labels\n\t\tconst self = this;\n\t\tthis.innerWrap\n\t\t\t.selectAll(\"text.chart-label\")\n\t\t\t.data(this.pie(dataList), (d: any) => d.data.label)\n\t\t\t.enter()\n\t\t\t.append(\"text\")\n\t\t\t.classed(\"chart-label\", true)\n\t\t\t.attr(\"dy\", Configuration.pie.label.dy)\n\t\t\t.style(\"text-anchor\", \"middle\")\n\t\t\t.text(d => Tools.convertValueToPercentage(d.data.value, dataList))\n\t\t\t.attr(\"transform\", function (d) { return self.deriveTransformString(this, d, radius); });\n\n\t\t// Hide overlay\n\t\tthis.chartOverlay.hide();\n\t}\n\n\t// Interpolated transitions for older data points to reflect the new data changes\n\tinterpolateValues(newData: any) {\n\t\tconst dataList = newData.datasets[0].data;\n\n\t\t// Apply the new data to the slices, and interpolate them\n\t\tconst self = this;\n\t\tconst path = this.innerWrap.selectAll(\"path\").data(this.pie(dataList));\n\n\t\t// Update slices\n\t\tpath\n\t\t\t.transition()\n\t\t\t.duration(0)\n\t\t\t.attr(\"stroke\", d => this.getStrokeColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.attr(\"stroke-width\", Configuration.pie.default.strokeWidth)\n\t\t\t.attr(\"stroke-opacity\", d => this.options.accessibility ? 1 : 0)\n\t\t\t.transition()\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.duration(Configuration.transitions.default.duration)\n\t\t\t.attr(\"fill\", d => this.getFillColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.attrTween(\"d\", function (a) {\n\t\t\t\treturn arcTween.bind(this)(a, self.arc);\n\t\t\t});\n\n\t\tpath.enter()\n\t\t\t.append(\"path\")\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.transition()\n\t\t\t.duration(0)\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.attr(\"stroke\", d => this.getStrokeColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.attr(\"stroke-width\", Configuration.pie.default.strokeWidth)\n\t\t\t.attr(\"stroke-opacity\", d => this.options.accessibility ? 1 : 0)\n\t\t\t.transition()\n\t\t\t.duration(Configuration.transitions.default.duration)\n\t\t\t.attr(\"fill\", d => this.getFillColor(this.displayData.datasets[0].label, d.data.label, d.data.value))\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.attrTween(\"d\", function (a) {\n\t\t\t\treturn arcTween.bind(this)(a, self.arc);\n\t\t\t});\n\n\t\tpath\n\t\t\t.exit()\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.transition()\n\t\t\t.duration(Configuration.transitions.default.duration)\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Fade out all text labels\n\t\tthis.innerWrap.selectAll(\"text.chart-label\")\n\t\t\t.transition()\n\t\t\t.duration(Configuration.transitions.default.duration / 2)\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.on(\"end\", function(d) {\n\t\t\t\tselect(this)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(Configuration.transitions.default.duration / 2)\n\t\t\t\t\t.style(\"opacity\", 1);\n\t\t\t});\n\n\t\t// Move text labels to their new location, and fade them in again\n\t\tconst radius = this.computeRadius();\n\t\tsetTimeout(() => {\n\t\t\tconst text = this.innerWrap.selectAll(\"text.chart-label\")\n\t\t\t\t.data(this.pie(dataList), d => d.label );\n\n\t\t\ttext\n\t\t\t\t.enter()\n\t\t\t\t.append(\"text\")\n\t\t\t\t.classed(\"chart-label\", true)\n\t\t\t\t.attr(\"dy\", Configuration.pie.label.dy)\n\t\t\t\t.style(\"text-anchor\", \"middle\")\n\t\t\t\t.text(d => Tools.convertValueToPercentage(d.data.value, dataList))\n\t\t\t\t.attr(\"transform\", function (d) { return self.deriveTransformString(this, d, radius); })\n\t\t\t\t.style(\"opacity\", 0)\n\t\t\t\t.transition()\n\t\t\t\t.duration(Configuration.transitions.default.duration / 2)\n\t\t\t\t.style(\"opacity\", 1);\n\n\t\t\ttext\n\t\t\t\t.style(\"text-anchor\", \"middle\")\n\t\t\t\t.text(d => Tools.convertValueToPercentage(d.data.value, dataList))\n\t\t\t\t.attr(\"transform\", function (d) { return self.deriveTransformString(this, d, radius); })\n\t\t\t\t.transition()\n\t\t\t\t.duration(Configuration.transitions.default.duration / 2)\n\t\t\t\t.style(\"opacity\", 1);\n\n\t\t\ttext\n\t\t\t\t.exit()\n\t\t\t\t.remove();\n\t\t}, Configuration.transitions.default.duration / 2);\n\n\t\t// Add slice hover actions, and clear any slice borders present\n\t\tthis.addDataPointEventListener();\n\t\tthis.reduceOpacity();\n\n\t\t// Hide the overlay\n\t\tthis.chartOverlay.hide();\n\t}\n\n\t// TODO - Possible inherits from base-chart\n\treduceOpacity(exception?: any) {\n\t\tif (exception) {\n\t\t\t// this.innerWrap.selectAll(\"path\").attr(\"fill-opacity\", Configuration.charts.reduceOpacity.opacity);\n\n\t\t\t// Fade everything out except for this element\n\t\t\tselect(exception).attr(\"fill-opacity\", false);\n\t\t\tselect(exception).attr(\"stroke-opacity\", Configuration.charts.reduceOpacity.opacity);\n\t\t\tselect(exception).attr(\"fill\", (d: any) => this.getFillColor(this.displayData.datasets[0].label, d.data.label, d.data.value));\n\t\t}\n\t}\n\n\tgetTooltipHTML = d => this.generateTooltipHTML(d.data.label, d.value.toLocaleString());\n\n\t// TODO - Refactor\n\taddDataPointEventListener() {\n\t\tconst self = this;\n\t\tconst { accessibility } = this.options;\n\n\t\tthis.innerWrap.selectAll(\"path\")\n\t\t\t.on(\"click\", d => self.dispatchEvent(\"pie-slice-onClick\", d))\n\t\t\t.on(\"mouseover\", function(d) {\n\t\t\t\tconst sliceElement = select(this);\n\t\t\t\tTools.moveToFront(sliceElement);\n\n\t\t\t\tsliceElement.attr(\"stroke-width\", Configuration.pie.mouseover.strokeWidth)\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.pie.mouseover.strokeOpacity)\n\t\t\t\t\t.attr(\"stroke\", self.getStrokeColor(self.displayData.datasets[0].label, d.data.label, d.data.value));\n\n\t\t\t\tself.showTooltip(d);\n\t\t\t\tself.reduceOpacity(this);\n\t\t\t})\n\t\t\t.on(\"mousemove\", d => self.tooltip.positionTooltip())\n\t\t\t.on(\"mouseout\", function(d) {\n\t\t\t\tselect(this)\n\t\t\t\t\t.attr(\"stroke-width\", accessibility ? Configuration.pie.default.strokeWidth : Configuration.pie.mouseout.strokeWidth)\n\t\t\t\t\t.attr(\"stroke\", accessibility ? self.getStrokeColor(self.displayData.datasets[0].label, d.data.label, d.data.value) : \"none\")\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.pie.mouseout.strokeOpacity);\n\n\t\t\t\tself.hideTooltip();\n\t\t\t});\n\t}\n\n\tupdate(newData?: any) {\n\t\tconst oldData = Tools.clone(this.displayData);\n\t\tconst activeLegendItems = this.getActiveLegendItems();\n\n\t\t// TODO - Support multiple datasets\n\t\tconst newDisplayData = Object.assign({}, oldData);\n\t\tnewDisplayData.datasets[0].data = oldData.datasets[0].data.filter(dataPoint => activeLegendItems.indexOf(dataPoint.label) !== -1);\n\n\t\tnewDisplayData.labels = newDisplayData.datasets[0].data.map(datum => datum.label);\n\n\t\tthis.interpolateValues(newDisplayData);\n\t}\n\n\tresizeChart() {\n\t\tconst chartSize: any = this.getChartSize(this.container);\n\t\tconst dimensionToUseForScale = Math.min(chartSize.width, chartSize.height);\n\t\tconst radius: number = this.computeRadius();\n\n\t\t// Resize the SVG\n\t\tselect(this.holder).select(\"svg\")\n\t\t\t\t.attr(\"width\", `${dimensionToUseForScale}px`)\n\t\t\t\t.attr(\"height\", `${dimensionToUseForScale}px`);\n\t\tthis.innerWrap\n\t\t\t.style(\"transform\", `translate(${radius}px,${radius}px)`);\n\n\t\t// Resize the arc\n\t\tthis.arc = arc()\n\t\t\t.innerRadius(this.options.type === \"donut\" ? (radius * (3 / 4)) : 2)\n\t\t\t.outerRadius(radius);\n\n\t\tthis.innerWrap.selectAll(\"path\")\n\t\t\t.attr(\"d\", this.arc);\n\n\t\tconst self = this;\n\t\tthis.innerWrap\n\t\t\t.selectAll(\"text.chart-label\")\n\t\t\t.attr(\"transform\", function (d) { return self.deriveTransformString(this, d, radius); });\n\n\t\t// Reposition the legend\n\t\tthis.positionLegend();\n\t}\n\n\t// Helper functions\n\tprivate computeRadius() {\n\t\tconst chartSize: any = this.getChartSize(this.container);\n\t\tconst radius: number = Math.min(chartSize.width, chartSize.height) / 2;\n\n\t\treturn radius;\n\t}\n\n\t/**\n\t * Return the css transform string to be used for the slice\n\t *\n\t * @private\n\t * @param {any} d - d3 data item for slice\n\t * @param {any} radius - computed radius of the chart\n\t * @returns final transform string to be applied to the <text> element\n\t * @memberof PieChart\n\t */\n\tprivate deriveTransformString(element, d, radius) {\n\t\tconst textLength = element.getComputedTextLength();\n\t\tconst textOffsetX = textLength / 2;\n\t\tconst textOffsetY = parseFloat(getComputedStyle(element).fontSize) / 2;\n\n\t\tconst marginedRadius = radius + Configuration.pie.label.margin;\n\n\t\tconst theta = ((d.endAngle - d.startAngle) / 2) + d.startAngle;\n\t\tconst xPosition = (textOffsetX + marginedRadius) * Math.sin(theta);\n\t\tconst yPosition = (textOffsetY + marginedRadius) * -Math.cos(theta);\n\n\t\treturn `translate(${xPosition}, ${yPosition})`;\n\t}\n}\n\n// d3 Tween functions\nfunction arcTween(a, arcFunc) {\n\tconst i = interpolate(this._current, a);\n\n\treturn t => {\n\t\tthis._current = i(t);\n\n\t\treturn arcFunc(this._current);\n\t};\n}\n"]}
|
package/scatter-chart.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare class ScatterChart extends BaseAxisChart {
|
|
|
8
8
|
addLabelsToDataPoints(d: any, index: any): any;
|
|
9
9
|
getCircleRadius(): number;
|
|
10
10
|
getCircleFill(radius: any, d: any): any;
|
|
11
|
+
getCircleFillOpacity(): number;
|
|
11
12
|
interpolateValues(newData: any): void;
|
|
12
13
|
updateElements(animate: boolean, gDots?: any): void;
|
|
13
14
|
resizeChart(): void;
|
package/scatter-chart.js
CHANGED
|
@@ -9,7 +9,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
9
9
|
};
|
|
10
10
|
})();
|
|
11
11
|
// D3 Imports
|
|
12
|
-
import { select
|
|
12
|
+
import { select } from "d3-selection";
|
|
13
13
|
import { BaseAxisChart } from "./base-axis-chart";
|
|
14
14
|
import * as Configuration from "./configuration";
|
|
15
15
|
import { ChartType } from "./configuration";
|
|
@@ -44,9 +44,10 @@ var ScatterChart = /** @class */ (function (_super) {
|
|
|
44
44
|
.attr("cy", function (d) { return _this.y(d.value); })
|
|
45
45
|
.attr("r", circleRadius)
|
|
46
46
|
.attr("fill", function (d) { return _this.getCircleFill(circleRadius, d); })
|
|
47
|
+
.attr("fill-opacity", function (d) { return _this.getCircleFillOpacity(); })
|
|
47
48
|
.attr("stroke", function (d) { return _this.getStrokeColor(d.datasetLabel, d.label, d.value); });
|
|
48
49
|
// Hide the overlay
|
|
49
|
-
this.
|
|
50
|
+
this.chartOverlay.hide();
|
|
50
51
|
// Dispatch the load event
|
|
51
52
|
this.dispatchEvent("load");
|
|
52
53
|
};
|
|
@@ -65,9 +66,20 @@ var ScatterChart = /** @class */ (function (_super) {
|
|
|
65
66
|
return this.options.points.radius || Configuration.charts.points.radius;
|
|
66
67
|
};
|
|
67
68
|
ScatterChart.prototype.getCircleFill = function (radius, d) {
|
|
68
|
-
|
|
69
|
+
// If the radius of the point is smaller than minimum
|
|
70
|
+
// Or the chart is only a scatter chart
|
|
71
|
+
// And not a line chart for instance
|
|
72
|
+
var circleShouldBeFilled = radius < Configuration.lines.points.minNonFilledRadius || this.constructor === ScatterChart;
|
|
69
73
|
return circleShouldBeFilled ? this.getStrokeColor(d.datasetLabel, d.label, d.value) : "white";
|
|
70
74
|
};
|
|
75
|
+
ScatterChart.prototype.getCircleFillOpacity = function () {
|
|
76
|
+
// If the chart is only a scatter chart
|
|
77
|
+
// And not a line chart for instance
|
|
78
|
+
if (this.constructor === ScatterChart) {
|
|
79
|
+
return Configuration.options.SCATTER.points.fillOpacity;
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
};
|
|
71
83
|
ScatterChart.prototype.interpolateValues = function (newData) {
|
|
72
84
|
var _this = this;
|
|
73
85
|
var margins = Configuration.charts.margin.line;
|
|
@@ -96,6 +108,7 @@ var ScatterChart = /** @class */ (function (_super) {
|
|
|
96
108
|
.transition(this.getDefaultTransition())
|
|
97
109
|
.style("opacity", 1)
|
|
98
110
|
.attr("fill", function (d) { return _this.getCircleFill(circleRadius, d); })
|
|
111
|
+
.attr("fill-opacity", function (d) { return _this.getCircleFillOpacity(); })
|
|
99
112
|
.attr("stroke", function (d) { return _this.getStrokeColor(d.datasetLabel, d.label, d.value); });
|
|
100
113
|
// Remove dots that are no longer needed
|
|
101
114
|
gDots.exit()
|
|
@@ -106,7 +119,7 @@ var ScatterChart = /** @class */ (function (_super) {
|
|
|
106
119
|
// Add slice hover actions, and clear any slice borders present
|
|
107
120
|
this.addDataPointEventListener();
|
|
108
121
|
// Hide the overlay
|
|
109
|
-
this.
|
|
122
|
+
this.chartOverlay.hide();
|
|
110
123
|
// Dispatch the update event
|
|
111
124
|
this.dispatchEvent("update");
|
|
112
125
|
};
|
|
@@ -161,7 +174,7 @@ var ScatterChart = /** @class */ (function (_super) {
|
|
|
161
174
|
ScatterChart.prototype.reduceOpacity = function (exception) {
|
|
162
175
|
var _this = this;
|
|
163
176
|
var circleRadius = this.getCircleRadius();
|
|
164
|
-
select(exception).attr("fill-opacity",
|
|
177
|
+
select(exception).attr("fill-opacity", this.getCircleFillOpacity());
|
|
165
178
|
select(exception).attr("stroke-opacity", Configuration.charts.reduceOpacity.opacity);
|
|
166
179
|
select(exception).attr("fill", function (d) { return _this.getCircleFill(circleRadius, d); });
|
|
167
180
|
};
|
|
@@ -169,9 +182,7 @@ var ScatterChart = /** @class */ (function (_super) {
|
|
|
169
182
|
var self = this;
|
|
170
183
|
var accessibility = this.options.accessibility;
|
|
171
184
|
this.svg.selectAll("circle.dot")
|
|
172
|
-
.on("click", function (d) {
|
|
173
|
-
self.dispatchEvent("line-onClick", d);
|
|
174
|
-
})
|
|
185
|
+
.on("click", function (d) { return self.dispatchEvent("line-onClick", d); })
|
|
175
186
|
.on("mouseover", function (d) {
|
|
176
187
|
select(this)
|
|
177
188
|
.attr("stroke-width", Configuration.lines.points.mouseover.strokeWidth)
|
|
@@ -180,12 +191,7 @@ var ScatterChart = /** @class */ (function (_super) {
|
|
|
180
191
|
self.showTooltip(d, this);
|
|
181
192
|
self.reduceOpacity(this);
|
|
182
193
|
})
|
|
183
|
-
.on("mousemove", function (d) {
|
|
184
|
-
var tooltipRef = select(self.holder).select("div.chart-tooltip");
|
|
185
|
-
var relativeMousePosition = mouse(self.holder);
|
|
186
|
-
tooltipRef.style("left", relativeMousePosition[0] + Configuration.tooltip.magicLeft2 + "px")
|
|
187
|
-
.style("top", relativeMousePosition[1] + "px");
|
|
188
|
-
})
|
|
194
|
+
.on("mousemove", function (d) { return self.tooltip.positionTooltip(); })
|
|
189
195
|
.on("mouseout", function (d) {
|
|
190
196
|
var _a = Configuration.lines.points.mouseout, strokeWidth = _a.strokeWidth, strokeWidthAccessible = _a.strokeWidthAccessible;
|
|
191
197
|
select(this)
|
package/scatter-chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scatter-chart.js","sourceRoot":"","sources":["src/scatter-chart.ts"],"names":[],"mappings":"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","sourcesContent":["// D3 Imports\nimport { select, mouse } from \"d3-selection\";\n\nimport { BaseAxisChart } from \"./base-axis-chart\";\nimport * as Configuration from \"./configuration\";\nimport { ChartConfig, ScatterChartOptions, ChartType } from \"./configuration\";\nimport { Tools } from \"./tools\";\n\nexport class ScatterChart extends BaseAxisChart {\n\toptions: ScatterChartOptions = Tools.merge({}, Configuration.options.SCATTER);\n\n\tconstructor(holder: Element, configs: ChartConfig<ScatterChartOptions>) {\n\t\tsuper(holder, configs);\n\n\t\tthis.options.type = ChartType.SCATTER;\n\t}\n\n\tdraw() {\n\t\tthis.innerWrap.style(\"width\", \"100%\")\n\t\t\t.style(\"height\", \"100%\");\n\n\t\tconst { line: margins } = Configuration.charts.margin;\n\n\t\tthis.innerWrap.style(\"width\", \"100%\").style(\"height\", \"100%\");\n\n\t\tthis.innerWrap.attr(\"transform\", `translate(${margins.left}, ${margins.top})`);\n\n\t\tconst gDots = this.innerWrap.selectAll(\"g.dots\")\n\t\t\t.data(this.displayData.datasets)\n\t\t\t.enter()\n\t\t\t\t.append(\"g\")\n\t\t\t\t.classed(\"dots\", true);\n\n\t\tconst circleRadius = this.getCircleRadius();\n\t\tgDots.selectAll(\"circle.dot\")\n\t\t\t.data((d, i) => this.addLabelsToDataPoints(d, i))\n\t\t\t.enter()\n\t\t\t\t.append(\"circle\")\n\t\t\t\t.attr(\"class\", \"dot\")\n\t\t\t\t.attr(\"cx\", d => this.x(d.label) + this.x.step() / 2)\n\t\t\t\t.attr(\"cy\", d => this.y(d.value))\n\t\t\t\t.attr(\"r\", circleRadius)\n\t\t\t\t.attr(\"fill\", d => this.getCircleFill(circleRadius, d))\n\t\t\t\t.attr(\"stroke\", d => this.getStrokeColor(d.datasetLabel, d.label, d.value));\n\n\t\t// Hide the overlay\n\t\tthis.updateOverlay().hide();\n\n\t\t// Dispatch the load event\n\t\tthis.dispatchEvent(\"load\");\n\t}\n\n\tgetLegendType() {\n\t\treturn Configuration.legend.basedOn.SERIES;\n\t}\n\n\taddLabelsToDataPoints(d, index) {\n\t\tconst { labels } = this.displayData;\n\n\t\treturn d.data.map((datum, i) => ({\n\t\t\tlabel: labels[i],\n\t\t\tdatasetLabel: d.label,\n\t\t\tvalue: datum\n\t\t}));\n\t}\n\n\tgetCircleRadius() {\n\t\treturn this.options.points.radius || Configuration.charts.points.radius;\n\t}\n\n\tgetCircleFill(radius, d) {\n\t\tconst circleShouldBeFilled = radius < Configuration.lines.points.minNonFilledRadius;\n\t\treturn circleShouldBeFilled ? this.getStrokeColor(d.datasetLabel, d.label, d.value) : \"white\";\n\t}\n\n\tinterpolateValues(newData: any) {\n\t\tconst { line: margins } = Configuration.charts.margin;\n\t\tconst chartSize = this.getChartSize();\n\t\tconst width = chartSize.width - margins.left - margins.right;\n\t\tconst height = chartSize.height - this.getBBox(\".x.axis\").height;\n\n\t\t// Apply new data to the lines\n\t\tconst gDots = this.innerWrap.selectAll(\"g.dots\")\n\t\t\t.data(newData.datasets);\n\n\t\tthis.updateElements(true, gDots);\n\n\t\t// Add lines that need to be added now\n\t\tconst addedDotGroups = gDots.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"dots\", true);\n\n\t\t// Add line circles\n\t\tconst circleRadius = this.getCircleRadius();\n\t\taddedDotGroups.selectAll(\"circle.dot\")\n\t\t\t.data((d, i) => this.addLabelsToDataPoints(d, i))\n\t\t\t.enter()\n\t\t\t\t.append(\"circle\")\n\t\t\t\t.attr(\"class\", \"dot\")\n\t\t\t\t.attr(\"cx\", (d, i) => this.x(d.label) + this.x.step() / 2)\n\t\t\t\t.attr(\"cy\", (d: any) => this.y(d.value))\n\t\t\t\t.attr(\"r\", circleRadius)\n\t\t\t\t.style(\"opacity\", 0)\n\t\t\t\t.transition(this.getDefaultTransition())\n\t\t\t\t.style(\"opacity\", 1)\n\t\t\t\t.attr(\"fill\", d => this.getCircleFill(circleRadius, d))\n\t\t\t\t.attr(\"stroke\", d => this.getStrokeColor(d.datasetLabel, d.label, d.value));\n\n\t\t// Remove dots that are no longer needed\n\t\tgDots.exit()\n\t\t\t.classed(\"removed\", true)\n\t\t\t.transition(this.getDefaultTransition())\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add slice hover actions, and clear any slice borders present\n\t\tthis.addDataPointEventListener();\n\n\t\t// Hide the overlay\n\t\tthis.updateOverlay().hide();\n\n\t\t// Dispatch the update event\n\t\tthis.dispatchEvent(\"update\");\n\t}\n\n\tupdateElements(animate: boolean, gDots?: any) {\n\t\tif (!gDots) {\n\t\t\tgDots = this.innerWrap.selectAll(\"g.dots\");\n\t\t}\n\n\t\tconst transitionToUse = animate ? this.getFillTransition() : this.getInstantTransition();\n\t\tconst self = this;\n\n\t\tconst circleRadius = this.getCircleRadius();\n\t\tgDots.selectAll(\"circle.dot\")\n\t\t\t.data(function(d, i) {\n\t\t\t\tconst parentDatum = select(this).datum() as any;\n\n\t\t\t\treturn self.addLabelsToDataPoints(parentDatum, i);\n\t\t\t})\n\t\t\t.transition(transitionToUse)\n\t\t\t.attr(\"cx\", d => this.x(d.label) + this.x.step() / 2)\n\t\t\t.attr(\"cy\", d => this.y(d.value))\n\t\t\t.attr(\"r\", circleRadius)\n\t\t\t.attr(\"fill\", d => this.getCircleFill(circleRadius, d))\n\t\t\t.attr(\"stroke\", d => this.getStrokeColor(d.datasetLabel, d.label, d.value));\n\t}\n\n\tresizeChart() {\n\t\tconst chartSize: any = this.getChartSize(this.container);\n\t\tconst dimensionToUseForScale = Math.min(chartSize.width, chartSize.height);\n\n\t\t// Resize the SVG\n\t\tselect(this.holder).select(\"svg\")\n\t\t\t\t.attr(\"width\", `${dimensionToUseForScale}px`)\n\t\t\t\t.attr(\"height\", `${dimensionToUseForScale}px`);\n\n\t\tthis.updateXandYGrid(true);\n\t\t// Scale out the domains\n\t\tthis.setXScale();\n\t\tthis.setYScale();\n\n\t\t// Set the x & y axis as well as their labels\n\t\tthis.setXAxis(true);\n\t\tthis.setYAxis(true);\n\n\t\tthis.updateElements(false, null);\n\n\t\tsuper.resizeChart();\n\t}\n\n\tsetXScale () {\n\t\tsuper.setXScale();\n\n\t\tthis.x.padding(0); // override BaseAxisChart padding so points aren't misaligned by a few pixels.\n\t}\n\n\tresetOpacity() {\n\t\tconst circleRadius = this.getCircleRadius();\n\t\tthis.innerWrap.selectAll(\"circle\")\n\t\t\t.attr(\"stroke-opacity\", Configuration.charts.resetOpacity.opacity)\n\t\t\t.attr(\"fill\", d => this.getCircleFill(circleRadius, d));\n\t}\n\n\treduceOpacity(exception) {\n\t\tconst circleRadius = this.getCircleRadius();\n\t\tselect(exception).attr(\"fill-opacity\", false);\n\t\tselect(exception).attr(\"stroke-opacity\", Configuration.charts.reduceOpacity.opacity);\n\t\tselect(exception).attr(\"fill\", (d: any) => this.getCircleFill(circleRadius, d));\n\t}\n\n\taddDataPointEventListener() {\n\t\tconst self = this;\n\t\tconst { accessibility } = this.options;\n\n\t\tthis.svg.selectAll(\"circle.dot\")\n\t\t\t.on(\"click\", function(d) {\n\t\t\t\tself.dispatchEvent(\"line-onClick\", d);\n\t\t\t})\n\t\t\t.on(\"mouseover\", function(d) {\n\t\t\t\tselect(this)\n\t\t\t\t\t.attr(\"stroke-width\", Configuration.lines.points.mouseover.strokeWidth)\n\t\t\t\t\t.attr(\"stroke\", self.colorScale[d.datasetLabel](d.label))\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.lines.points.mouseover.strokeOpacity);\n\n\t\t\t\tself.showTooltip(d, this);\n\t\t\t\tself.reduceOpacity(this);\n\t\t\t})\n\t\t\t.on(\"mousemove\", function(d) {\n\t\t\t\tconst tooltipRef = select(self.holder).select(\"div.chart-tooltip\");\n\n\t\t\t\tconst relativeMousePosition = mouse(self.holder as HTMLElement);\n\t\t\t\ttooltipRef.style(\"left\", relativeMousePosition[0] + Configuration.tooltip.magicLeft2 + \"px\")\n\t\t\t\t\t.style(\"top\", relativeMousePosition[1] + \"px\");\n\t\t\t})\n\t\t\t.on(\"mouseout\", function(d) {\n\t\t\t\tconst { strokeWidth, strokeWidthAccessible } = Configuration.lines.points.mouseout;\n\t\t\t\tselect(this)\n\t\t\t\t\t.attr(\"stroke-width\", accessibility ? strokeWidthAccessible : strokeWidth)\n\t\t\t\t\t.attr(\"stroke\", self.colorScale[d.datasetLabel](d.label))\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.lines.points.mouseout.strokeOpacity);\n\n\t\t\t\tself.hideTooltip();\n\t\t\t});\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"scatter-chart.js","sourceRoot":"","sources":["src/scatter-chart.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,aAAa;AACb,OAAO,EAAE,MAAM,EAAS,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAoC,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;IAAkC,gCAAa;IAG9C,sBAAY,MAAe,EAAE,OAAyC;QAAtE,YACC,kBAAM,MAAM,EAAE,OAAO,CAAC,SAGtB;QAND,aAAO,GAAwB,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAK7E,KAAI,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC;;IACvC,CAAC;IAED,2BAAI,GAAJ;QAAA,iBAkCC;QAjCA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;aACnC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAElB,IAAA,0CAAa,CAAiC;QAEtD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,eAAa,OAAO,CAAC,IAAI,UAAK,OAAO,CAAC,GAAG,MAAG,CAAC,CAAC;QAE/E,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;aAC/B,KAAK,EAAE;aACN,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEzB,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC;aAC3B,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,KAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAhC,CAAgC,CAAC;aAChD,KAAK,EAAE;aACN,MAAM,CAAC,QAAQ,CAAC;aAChB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;aACpB,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAnC,CAAmC,CAAC;aACpD,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAf,CAAe,CAAC;aAChC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC;aACvB,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,EAAnC,CAAmC,CAAC;aACtD,IAAI,CAAC,cAAc,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,oBAAoB,EAAE,EAA3B,CAA2B,CAAC;aACtD,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAArD,CAAqD,CAAC,CAAC;QAE9E,mBAAmB;QACnB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAEzB,0BAA0B;QAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,oCAAa,GAAb;QACC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5C,CAAC;IAED,4CAAqB,GAArB,UAAsB,CAAC,EAAE,KAAK;QACrB,IAAA,gCAAM,CAAsB;QAEpC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,CAAC,IAAK,OAAA,CAAC;YAChC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAChB,YAAY,EAAE,CAAC,CAAC,KAAK;YACrB,KAAK,EAAE,KAAK;SACZ,CAAC,EAJ8B,CAI9B,CAAC,CAAC;IACL,CAAC;IAED,sCAAe,GAAf;QACC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IACzE,CAAC;IAED,oCAAa,GAAb,UAAc,MAAM,EAAE,CAAC;QACtB,qDAAqD;QACrD,uCAAuC;QACvC,oCAAoC;QACpC,IAAM,oBAAoB,GAAG,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC;QAEzH,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/F,CAAC;IAED,2CAAoB,GAApB;QACC,uCAAuC;QACvC,oCAAoC;QACpC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;QACzD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;IACb,CAAC;IAED,wCAAiB,GAAjB,UAAkB,OAAY;QAA9B,iBAiDC;QAhDQ,IAAA,0CAAa,CAAiC;QACtD,IAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;QAC7D,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAEjE,8BAA8B;QAC9B,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;aAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEzB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEjC,sCAAsC;QACtC,IAAM,cAAc,GAAG,KAAK,CAAC,KAAK,EAAE;aAClC,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAExB,mBAAmB;QACnB,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC;aACpC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,KAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAhC,CAAgC,CAAC;aAChD,KAAK,EAAE;aACN,MAAM,CAAC,QAAQ,CAAC;aAChB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;aACpB,IAAI,CAAC,IAAI,EAAE,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAnC,CAAmC,CAAC;aACzD,IAAI,CAAC,IAAI,EAAE,UAAC,CAAM,IAAK,OAAA,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAf,CAAe,CAAC;aACvC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC;aACvB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aACvC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,EAAnC,CAAmC,CAAC;aACtD,IAAI,CAAC,cAAc,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,oBAAoB,EAAE,EAA3B,CAA2B,CAAC;aACtD,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAArD,CAAqD,CAAC,CAAC;QAE9E,wCAAwC;QACxC,KAAK,CAAC,IAAI,EAAE;aACV,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;aACxB,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aACvC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,MAAM,EAAE,CAAC;QAEX,+DAA+D;QAC/D,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjC,mBAAmB;QACnB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAEzB,4BAA4B;QAC5B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,qCAAc,GAAd,UAAe,OAAgB,EAAE,KAAW;QAA5C,iBAqBC;QApBA,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACZ,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,IAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACzF,IAAM,IAAI,GAAG,IAAI,CAAC;QAElB,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC;aAC3B,IAAI,CAAC,UAAS,CAAC,EAAE,CAAC;YAClB,IAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAS,CAAC;YAEhD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;aACD,UAAU,CAAC,eAAe,CAAC;aAC3B,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAnC,CAAmC,CAAC;aACpD,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAf,CAAe,CAAC;aAChC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC;aACvB,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,EAAnC,CAAmC,CAAC;aACtD,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAArD,CAAqD,CAAC,CAAC;IAC9E,CAAC;IAED,kCAAW,GAAX;QACC,IAAM,SAAS,GAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,IAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAE3E,iBAAiB;QACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9B,IAAI,CAAC,OAAO,EAAK,sBAAsB,OAAI,CAAC;aAC5C,IAAI,CAAC,QAAQ,EAAK,sBAAsB,OAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3B,wBAAwB;QACxB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,6CAA6C;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEpB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEjC,iBAAM,WAAW,WAAE,CAAC;IACrB,CAAC;IAED,gCAAS,GAAT;QACC,iBAAM,SAAS,WAAE,CAAC;QAElB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,8EAA8E;IAClG,CAAC;IAED,mCAAY,GAAZ;QAAA,iBAKC;QAJA,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;aAChC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;aACjE,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,EAAnC,CAAmC,CAAC,CAAC;IAC1D,CAAC;IAED,oCAAa,GAAb,UAAc,SAAS;QAAvB,iBAKC;QAJA,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrF,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,UAAC,CAAM,IAAK,OAAA,KAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,EAAnC,CAAmC,CAAC,CAAC;IACjF,CAAC;IAED,gDAAyB,GAAzB;QACC,IAAM,IAAI,GAAG,IAAI,CAAC;QACV,IAAA,0CAAa,CAAkB;QAEvC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC;aAC9B,EAAE,CAAC,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,EAArC,CAAqC,CAAC;aACvD,EAAE,CAAC,WAAW,EAAE,UAAS,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC;iBACV,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;iBACtE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;iBACxD,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAE7E,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAA9B,CAA8B,CAAC;aACpD,EAAE,CAAC,UAAU,EAAE,UAAS,CAAC;YACnB,IAAA,wCAA4E,EAA1E,4BAAW,EAAE,gDAAqB,CAAyC;YACnF,MAAM,CAAC,IAAI,CAAC;iBACV,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC;iBACzE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;iBACxD,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAE5E,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IACF,mBAAC;AAAD,CAAC,AAjOD,CAAkC,aAAa,GAiO9C","sourcesContent":["// D3 Imports\nimport { select, mouse } from \"d3-selection\";\n\nimport { BaseAxisChart } from \"./base-axis-chart\";\nimport * as Configuration from \"./configuration\";\nimport { ChartConfig, ScatterChartOptions, ChartType } from \"./configuration\";\nimport { Tools } from \"./tools\";\n\nexport class ScatterChart extends BaseAxisChart {\n\toptions: ScatterChartOptions = Tools.merge({}, Configuration.options.SCATTER);\n\n\tconstructor(holder: Element, configs: ChartConfig<ScatterChartOptions>) {\n\t\tsuper(holder, configs);\n\n\t\tthis.options.type = ChartType.SCATTER;\n\t}\n\n\tdraw() {\n\t\tthis.innerWrap.style(\"width\", \"100%\")\n\t\t\t.style(\"height\", \"100%\");\n\n\t\tconst { line: margins } = Configuration.charts.margin;\n\n\t\tthis.innerWrap.style(\"width\", \"100%\").style(\"height\", \"100%\");\n\n\t\tthis.innerWrap.attr(\"transform\", `translate(${margins.left}, ${margins.top})`);\n\n\t\tconst gDots = this.innerWrap.selectAll(\"g.dots\")\n\t\t\t.data(this.displayData.datasets)\n\t\t\t.enter()\n\t\t\t\t.append(\"g\")\n\t\t\t\t.classed(\"dots\", true);\n\n\t\tconst circleRadius = this.getCircleRadius();\n\t\tgDots.selectAll(\"circle.dot\")\n\t\t\t.data((d, i) => this.addLabelsToDataPoints(d, i))\n\t\t\t.enter()\n\t\t\t\t.append(\"circle\")\n\t\t\t\t.attr(\"class\", \"dot\")\n\t\t\t\t.attr(\"cx\", d => this.x(d.label) + this.x.step() / 2)\n\t\t\t\t.attr(\"cy\", d => this.y(d.value))\n\t\t\t\t.attr(\"r\", circleRadius)\n\t\t\t\t.attr(\"fill\", d => this.getCircleFill(circleRadius, d))\n\t\t\t\t.attr(\"fill-opacity\", d => this.getCircleFillOpacity())\n\t\t\t\t.attr(\"stroke\", d => this.getStrokeColor(d.datasetLabel, d.label, d.value));\n\n\t\t// Hide the overlay\n\t\tthis.chartOverlay.hide();\n\n\t\t// Dispatch the load event\n\t\tthis.dispatchEvent(\"load\");\n\t}\n\n\tgetLegendType() {\n\t\treturn Configuration.legend.basedOn.SERIES;\n\t}\n\n\taddLabelsToDataPoints(d, index) {\n\t\tconst { labels } = this.displayData;\n\n\t\treturn d.data.map((datum, i) => ({\n\t\t\tlabel: labels[i],\n\t\t\tdatasetLabel: d.label,\n\t\t\tvalue: datum\n\t\t}));\n\t}\n\n\tgetCircleRadius() {\n\t\treturn this.options.points.radius || Configuration.charts.points.radius;\n\t}\n\n\tgetCircleFill(radius, d) {\n\t\t// If the radius of the point is smaller than minimum\n\t\t// Or the chart is only a scatter chart\n\t\t// And not a line chart for instance\n\t\tconst circleShouldBeFilled = radius < Configuration.lines.points.minNonFilledRadius || this.constructor === ScatterChart;\n\n\t\treturn circleShouldBeFilled ? this.getStrokeColor(d.datasetLabel, d.label, d.value) : \"white\";\n\t}\n\n\tgetCircleFillOpacity() {\n\t\t// If the chart is only a scatter chart\n\t\t// And not a line chart for instance\n\t\tif (this.constructor === ScatterChart) {\n\t\t\treturn Configuration.options.SCATTER.points.fillOpacity;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tinterpolateValues(newData: any) {\n\t\tconst { line: margins } = Configuration.charts.margin;\n\t\tconst chartSize = this.getChartSize();\n\t\tconst width = chartSize.width - margins.left - margins.right;\n\t\tconst height = chartSize.height - this.getBBox(\".x.axis\").height;\n\n\t\t// Apply new data to the lines\n\t\tconst gDots = this.innerWrap.selectAll(\"g.dots\")\n\t\t\t.data(newData.datasets);\n\n\t\tthis.updateElements(true, gDots);\n\n\t\t// Add lines that need to be added now\n\t\tconst addedDotGroups = gDots.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"dots\", true);\n\n\t\t// Add line circles\n\t\tconst circleRadius = this.getCircleRadius();\n\t\taddedDotGroups.selectAll(\"circle.dot\")\n\t\t\t.data((d, i) => this.addLabelsToDataPoints(d, i))\n\t\t\t.enter()\n\t\t\t\t.append(\"circle\")\n\t\t\t\t.attr(\"class\", \"dot\")\n\t\t\t\t.attr(\"cx\", (d, i) => this.x(d.label) + this.x.step() / 2)\n\t\t\t\t.attr(\"cy\", (d: any) => this.y(d.value))\n\t\t\t\t.attr(\"r\", circleRadius)\n\t\t\t\t.style(\"opacity\", 0)\n\t\t\t\t.transition(this.getDefaultTransition())\n\t\t\t\t.style(\"opacity\", 1)\n\t\t\t\t.attr(\"fill\", d => this.getCircleFill(circleRadius, d))\n\t\t\t\t.attr(\"fill-opacity\", d => this.getCircleFillOpacity())\n\t\t\t\t.attr(\"stroke\", d => this.getStrokeColor(d.datasetLabel, d.label, d.value));\n\n\t\t// Remove dots that are no longer needed\n\t\tgDots.exit()\n\t\t\t.classed(\"removed\", true)\n\t\t\t.transition(this.getDefaultTransition())\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add slice hover actions, and clear any slice borders present\n\t\tthis.addDataPointEventListener();\n\n\t\t// Hide the overlay\n\t\tthis.chartOverlay.hide();\n\n\t\t// Dispatch the update event\n\t\tthis.dispatchEvent(\"update\");\n\t}\n\n\tupdateElements(animate: boolean, gDots?: any) {\n\t\tif (!gDots) {\n\t\t\tgDots = this.innerWrap.selectAll(\"g.dots\");\n\t\t}\n\n\t\tconst transitionToUse = animate ? this.getFillTransition() : this.getInstantTransition();\n\t\tconst self = this;\n\n\t\tconst circleRadius = this.getCircleRadius();\n\t\tgDots.selectAll(\"circle.dot\")\n\t\t\t.data(function(d, i) {\n\t\t\t\tconst parentDatum = select(this).datum() as any;\n\n\t\t\t\treturn self.addLabelsToDataPoints(parentDatum, i);\n\t\t\t})\n\t\t\t.transition(transitionToUse)\n\t\t\t.attr(\"cx\", d => this.x(d.label) + this.x.step() / 2)\n\t\t\t.attr(\"cy\", d => this.y(d.value))\n\t\t\t.attr(\"r\", circleRadius)\n\t\t\t.attr(\"fill\", d => this.getCircleFill(circleRadius, d))\n\t\t\t.attr(\"stroke\", d => this.getStrokeColor(d.datasetLabel, d.label, d.value));\n\t}\n\n\tresizeChart() {\n\t\tconst chartSize: any = this.getChartSize(this.container);\n\t\tconst dimensionToUseForScale = Math.min(chartSize.width, chartSize.height);\n\n\t\t// Resize the SVG\n\t\tselect(this.holder).select(\"svg\")\n\t\t\t\t.attr(\"width\", `${dimensionToUseForScale}px`)\n\t\t\t\t.attr(\"height\", `${dimensionToUseForScale}px`);\n\n\t\tthis.updateXandYGrid(true);\n\t\t// Scale out the domains\n\t\tthis.setXScale();\n\t\tthis.setYScale();\n\n\t\t// Set the x & y axis as well as their labels\n\t\tthis.setXAxis(true);\n\t\tthis.setYAxis(true);\n\n\t\tthis.updateElements(false, null);\n\n\t\tsuper.resizeChart();\n\t}\n\n\tsetXScale () {\n\t\tsuper.setXScale();\n\n\t\tthis.x.padding(0); // override BaseAxisChart padding so points aren't misaligned by a few pixels.\n\t}\n\n\tresetOpacity() {\n\t\tconst circleRadius = this.getCircleRadius();\n\t\tthis.innerWrap.selectAll(\"circle\")\n\t\t\t.attr(\"stroke-opacity\", Configuration.charts.resetOpacity.opacity)\n\t\t\t.attr(\"fill\", d => this.getCircleFill(circleRadius, d));\n\t}\n\n\treduceOpacity(exception) {\n\t\tconst circleRadius = this.getCircleRadius();\n\t\tselect(exception).attr(\"fill-opacity\", this.getCircleFillOpacity());\n\t\tselect(exception).attr(\"stroke-opacity\", Configuration.charts.reduceOpacity.opacity);\n\t\tselect(exception).attr(\"fill\", (d: any) => this.getCircleFill(circleRadius, d));\n\t}\n\n\taddDataPointEventListener() {\n\t\tconst self = this;\n\t\tconst { accessibility } = this.options;\n\n\t\tthis.svg.selectAll(\"circle.dot\")\n\t\t\t.on(\"click\", d => self.dispatchEvent(\"line-onClick\", d))\n\t\t\t.on(\"mouseover\", function(d) {\n\t\t\t\tselect(this)\n\t\t\t\t\t.attr(\"stroke-width\", Configuration.lines.points.mouseover.strokeWidth)\n\t\t\t\t\t.attr(\"stroke\", self.colorScale[d.datasetLabel](d.label))\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.lines.points.mouseover.strokeOpacity);\n\n\t\t\t\tself.showTooltip(d, this);\n\t\t\t\tself.reduceOpacity(this);\n\t\t\t})\n\t\t\t.on(\"mousemove\", d => self.tooltip.positionTooltip())\n\t\t\t.on(\"mouseout\", function(d) {\n\t\t\t\tconst { strokeWidth, strokeWidthAccessible } = Configuration.lines.points.mouseout;\n\t\t\t\tselect(this)\n\t\t\t\t\t.attr(\"stroke-width\", accessibility ? strokeWidthAccessible : strokeWidth)\n\t\t\t\t\t.attr(\"stroke\", self.colorScale[d.datasetLabel](d.label))\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.lines.points.mouseout.strokeOpacity);\n\n\t\t\t\tself.hideTooltip();\n\t\t\t});\n\t}\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import colors from "./colors";
|
|
2
|
+
export var LIGHT_1 = [
|
|
3
|
+
colors.purple(60),
|
|
4
|
+
colors.teal(30),
|
|
5
|
+
colors.magenta(50),
|
|
6
|
+
colors.cyan(40),
|
|
7
|
+
colors.magenta(80),
|
|
8
|
+
colors.purple(30),
|
|
9
|
+
colors.cyan(80)
|
|
10
|
+
];
|
|
11
|
+
export var LIGHT_2 = [
|
|
12
|
+
colors.purple(60),
|
|
13
|
+
colors.magenta(30),
|
|
14
|
+
colors.teal(70),
|
|
15
|
+
colors.cyan(40),
|
|
16
|
+
colors.magenta(70),
|
|
17
|
+
colors.teal(30),
|
|
18
|
+
colors.cyan(80)
|
|
19
|
+
];
|
|
20
|
+
export var DARK_1 = [
|
|
21
|
+
colors.purple(60),
|
|
22
|
+
colors.teal(30),
|
|
23
|
+
colors.magenta(50),
|
|
24
|
+
colors.green(40),
|
|
25
|
+
colors.purple(20),
|
|
26
|
+
colors.teal(60),
|
|
27
|
+
colors.magenta(30)
|
|
28
|
+
];
|
|
29
|
+
export var DEFAULT = LIGHT_1;
|
|
30
|
+
//# sourceMappingURL=/home/travis/build/carbon-design-system/carbon-charts/packages/core/services/colorPalettes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorPalettes.js","sourceRoot":"","sources":["../src/services/colorPalettes.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,MAAM,CAAC,IAAM,OAAO,GAAG;IACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAClB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAClB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,CAAC,IAAM,OAAO,GAAG;IACtB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACjB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAClB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACf,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAClB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACf,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,CAAC,IAAM,MAAM,GAAG;IACrB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAClB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAChB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,CAAC,IAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["import colors from \"./colors\";\n\nexport const LIGHT_1 = [\n\tcolors.purple(60),\n\tcolors.teal(30),\n\tcolors.magenta(50),\n\tcolors.cyan(40),\n\tcolors.magenta(80),\n\tcolors.purple(30),\n\tcolors.cyan(80)\n];\n\nexport const LIGHT_2 = [\n\tcolors.purple(60),\n\tcolors.magenta(30),\n\tcolors.teal(70),\n\tcolors.cyan(40),\n\tcolors.magenta(70),\n\tcolors.teal(30),\n\tcolors.cyan(80)\n];\n\nexport const DARK_1 = [\n\tcolors.purple(60),\n\tcolors.teal(30),\n\tcolors.magenta(50),\n\tcolors.green(40),\n\tcolors.purple(20),\n\tcolors.teal(60),\n\tcolors.magenta(30)\n];\n\nexport const DEFAULT = LIGHT_1;\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { cyan, green, magenta, purple, red, teal } from "@carbon/colors";
|
|
2
|
+
var getColor = function (obj, shade) { return obj[shade]; };
|
|
3
|
+
export default {
|
|
4
|
+
cyan: function (shade) { return getColor(cyan, shade); },
|
|
5
|
+
green: function (shade) { return getColor(green, shade); },
|
|
6
|
+
magenta: function (shade) { return getColor(magenta, shade); },
|
|
7
|
+
purple: function (shade) { return getColor(purple, shade); },
|
|
8
|
+
red: function (shade) { return getColor(red, shade); },
|
|
9
|
+
teal: function (shade) { return getColor(teal, shade); }
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=/home/travis/build/carbon-design-system/carbon-charts/packages/core/services/colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../src/services/colors.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,GAAG,EACH,IAAI,EACJ,MAAM,gBAAgB,CAAC;AAExB,IAAM,QAAQ,GAAG,UAAC,GAAG,EAAE,KAAK,IAAK,OAAA,GAAG,CAAC,KAAK,CAAC,EAAV,CAAU,CAAC;AAE5C,eAAe;IACd,IAAI,EAAE,UAAA,KAAK,IAAI,OAAA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAArB,CAAqB;IACpC,KAAK,EAAE,UAAA,KAAK,IAAI,OAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,EAAtB,CAAsB;IACtC,OAAO,EAAE,UAAA,KAAK,IAAI,OAAA,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAxB,CAAwB;IAC1C,MAAM,EAAE,UAAA,KAAK,IAAI,OAAA,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EAAvB,CAAuB;IACxC,GAAG,EAAE,UAAA,KAAK,IAAI,OAAA,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,EAApB,CAAoB;IAClC,IAAI,EAAE,UAAA,KAAK,IAAI,OAAA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAArB,CAAqB;CACpC,CAAC","sourcesContent":["import {\n\tcyan,\n\tgreen,\n\tmagenta,\n\tpurple,\n\tred,\n\tteal\n} from \"@carbon/colors\";\n\nconst getColor = (obj, shade) => obj[shade];\n\nexport default {\n\tcyan: shade => getColor(cyan, shade),\n\tgreen: shade => getColor(green, shade),\n\tmagenta: shade => getColor(magenta, shade),\n\tpurple: shade => getColor(purple, shade),\n\tred: shade => getColor(red, shade),\n\tteal: shade => getColor(teal, shade)\n};\n"]}
|