@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/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,67 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.12.0](https://github.com/IBM/carbon-charts/compare/v0.11.15...v0.12.0) (2019-05-09)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **core:** Colors, themes & more design updates ([#261](https://github.com/IBM/carbon-charts/issues/261)) ([b0b9070](https://github.com/IBM/carbon-charts/commit/b0b9070))
|
|
12
|
+
* **feat(core:** Color palettes): ([edcf601](https://github.com/IBM/carbon-charts/commit/edcf601))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## [0.11.15](https://github.com/IBM/carbon-charts/compare/v0.11.14...v0.11.15) (2019-05-07)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* **core:** Fix tooltip positioning ([dd17048](https://github.com/IBM/carbon-charts/commit/dd17048))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## [0.11.14](https://github.com/IBM/carbon-charts/compare/v0.11.12...v0.11.14) (2019-05-06)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Bug Fixes
|
|
33
|
+
|
|
34
|
+
* **core:** Show empty state for when there is no data ([b5db127](https://github.com/IBM/carbon-charts/commit/b5db127))
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
## [0.11.13](https://github.com/IBM/carbon-charts/compare/v0.11.12...v0.11.13) (2019-04-30)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
### Bug Fixes
|
|
44
|
+
|
|
45
|
+
* **core:** Show empty state for when there is no data ([b5db127](https://github.com/IBM/carbon-charts/commit/b5db127))
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## [0.11.12](https://github.com/IBM/carbon-charts/compare/v0.11.11...v0.11.12) (2019-04-22)
|
|
52
|
+
|
|
53
|
+
**Note:** Version bump only for package @carbon/charts
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
## [0.11.11](https://github.com/IBM/carbon-charts/compare/v0.11.10...v0.11.11) (2019-04-15)
|
|
60
|
+
|
|
61
|
+
**Note:** Version bump only for package @carbon/charts
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
6
67
|
## [0.11.10](https://github.com/IBM/carbon-charts/compare/v0.11.9...v0.11.10) (2019-04-02)
|
|
7
68
|
|
|
8
69
|
**Note:** Version bump only for package @carbon/charts
|
package/README.md
CHANGED
|
@@ -16,3 +16,8 @@ instead:
|
|
|
16
16
|
```bash
|
|
17
17
|
yarn add @carbon/charts
|
|
18
18
|
```
|
|
19
|
+
|
|
20
|
+
## Sample Code
|
|
21
|
+
Checkout a sample app we've made on Codesandbox:
|
|
22
|
+
|
|
23
|
+
[](https://codesandbox.io/s/149vrzo62l?fontsize=14)
|
package/bar-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 { scaleBand } from "d3-scale";
|
|
14
14
|
import { min } from "d3-array";
|
|
15
15
|
import { BaseAxisChart } from "./base-axis-chart";
|
|
@@ -148,7 +148,7 @@ var BarChart = /** @class */ (function (_super) {
|
|
|
148
148
|
.attr("stroke-width", Configuration.bars.default.strokeWidth)
|
|
149
149
|
.attr("stroke-opacity", function (d) { return _this.options.accessibility ? 1 : 0; });
|
|
150
150
|
// Hide the overlay
|
|
151
|
-
this.
|
|
151
|
+
this.chartOverlay.hide();
|
|
152
152
|
// Dispatch the load event
|
|
153
153
|
this.dispatchEvent("load");
|
|
154
154
|
};
|
|
@@ -215,7 +215,7 @@ var BarChart = /** @class */ (function (_super) {
|
|
|
215
215
|
// Add slice hover actions, and clear any slice borders present
|
|
216
216
|
this.addDataPointEventListener();
|
|
217
217
|
// Hide the overlay
|
|
218
|
-
this.
|
|
218
|
+
this.chartOverlay.hide();
|
|
219
219
|
// Dispatch the update event
|
|
220
220
|
this.dispatchEvent("update");
|
|
221
221
|
};
|
|
@@ -260,12 +260,11 @@ var BarChart = /** @class */ (function (_super) {
|
|
|
260
260
|
_super.prototype.resizeChart.call(this);
|
|
261
261
|
};
|
|
262
262
|
BarChart.prototype.addDataPointEventListener = function () {
|
|
263
|
+
var _this = this;
|
|
263
264
|
var self = this;
|
|
264
265
|
var accessibility = this.options.accessibility;
|
|
265
266
|
this.svg.selectAll("rect.bar")
|
|
266
|
-
.on("click", function (d) {
|
|
267
|
-
self.dispatchEvent("bar-onClick", d);
|
|
268
|
-
})
|
|
267
|
+
.on("click", function (d) { return self.dispatchEvent("bar-onClick", d); })
|
|
269
268
|
.on("mouseover", function (d) {
|
|
270
269
|
select(this)
|
|
271
270
|
.attr("stroke-width", Configuration.bars.mouseover.strokeWidth)
|
|
@@ -274,12 +273,7 @@ var BarChart = /** @class */ (function (_super) {
|
|
|
274
273
|
self.showTooltip(d, this);
|
|
275
274
|
self.reduceOpacity(this);
|
|
276
275
|
})
|
|
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
|
-
})
|
|
276
|
+
.on("mousemove", function (d) { return _this.tooltip.positionTooltip(); })
|
|
283
277
|
.on("mouseout", function (d) {
|
|
284
278
|
var _a = Configuration.bars.mouseout, strokeWidth = _a.strokeWidth, strokeWidthAccessible = _a.strokeWidthAccessible;
|
|
285
279
|
select(this)
|
package/bar-chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar-chart.js","sourceRoot":"","sources":["src/bar-chart.ts"],"names":[],"mappings":"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","sourcesContent":["// D3 Imports\nimport { select, mouse } from \"d3-selection\";\nimport { scaleBand, ScaleBand } from \"d3-scale\";\nimport { min } from \"d3-array\";\n\nimport { BaseAxisChart } from \"./base-axis-chart\";\nimport { StackedBarChart } from \"./stacked-bar-chart\";\nimport * as Configuration from \"./configuration\";\nimport { ChartConfig, BarChartOptions, ChartType } from \"./configuration\";\n\nimport { Tools } from \"./tools\";\n\nconst getYMin = configs => {\n\tconst { datasets } = configs.data;\n\tconst { scales } = configs.options;\n\tlet yMin;\n\n\tif (datasets.length === 1) {\n\t\tyMin = min(datasets[0].data);\n\t} else {\n\t\tyMin = min(datasets, (d: any) => (min(d.data)));\n\t}\n\n\tif (scales.y.yMinAdjuster) {\n\t\tyMin = scales.y.yMinAdjuster(yMin);\n\t}\n\n\treturn yMin;\n};\n\n// returns the configured max width or the calculated bandwidth\n// whichever is lower\n// defaults to the calculated bandwidth if no maxWidth is defined\nconst getMaxBarWidth = (maxWidth, currentBandWidth) => {\n\tif (!maxWidth) {\n\t\treturn currentBandWidth;\n\t}\n\tif (currentBandWidth <= maxWidth) {\n\t\treturn currentBandWidth;\n\t}\n\treturn maxWidth;\n};\n\n// returns true if the calculated bandwidth is greater than the maxWidth (if defined)\n// i.e. if we should be constraining ourselves to a specific bar width\nconst isWidthConstrained = (maxWidth, currentBandWidth) => {\n\tif (!maxWidth) {\n\t\treturn false;\n\t}\n\tif (currentBandWidth <= maxWidth) {\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nexport class BarChart extends BaseAxisChart {\n\tx1?: ScaleBand<any>;\n\n\toptions: BarChartOptions;\n\n\tconstructor(holder: Element, configs: ChartConfig<BarChartOptions>) {\n\t\t// If this is a stacked bar chart, change the object prototype\n\t\tif (configs.options.scales.y.stacked) {\n\t\t\tif (getYMin(configs) >= 0) {\n\t\t\t\treturn new StackedBarChart(holder, configs);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Negative values are not supported in StackedBarChart, using GroupedBarChart instead to render!\");\n\t\t\t}\n\t\t}\n\n\t\tsuper(holder, configs);\n\n\t\t// initialize options\n\t\tif (configs.options) {\n\t\t\tthis.options = Tools.merge({}, Configuration.options.BAR, configs.options);\n\t\t} else {\n\t\t\tthis.options = Tools.merge({}, Configuration.options.BAR);\n\t\t}\n\n\t\t// To be used for combo chart instances of a bar chart\n\t\tconst { axis } = configs.options;\n\t\tif (axis) {\n\t\t\tconst { bar: margins } = Configuration.charts.margin;\n\t\t\tconst chartSize = this.getChartSize();\n\t\t\tconst width = chartSize.width - margins.left - margins.right;\n\n\t\t\tthis.x1 = scaleBand().rangeRound([0, width]).padding(Configuration.bars.spacing.bars);\n\t\t\tthis.x1.domain(this.data.datasets.map(dataset => dataset.label))\n\t\t\t\t.rangeRound([0, getMaxBarWidth(Tools.getProperty(this.options, \"bars\", \"maxWidth\"), this.x.bandwidth())]);\n\t\t}\n\n\t\tthis.options.type = ChartType.BAR;\n\t}\n\n\tsetXScale(xScale?: any) {\n\t\tconst { bar: margins } = Configuration.charts.margin;\n\t\tconst chartSize = this.getChartSize();\n\t\tconst width = chartSize.width - margins.left - margins.right;\n\n\t\tif (xScale) {\n\t\t\tthis.x = xScale;\n\t\t} else {\n\t\t\tthis.x = scaleBand().rangeRound([0, width]).padding(Configuration.bars.spacing.datasets);\n\t\t\tthis.x.domain(this.displayData.labels);\n\t\t}\n\n\t\t// if it's a grouped bar, use additoinal padding so the bars don't group up\n\t\tif (this.displayData.datasets.length > 1) {\n\t\t\tthis.x1 = scaleBand().rangeRound([0, width]).padding(Configuration.bars.spacing.bars);\n\t\t} else {\n\t\t\tthis.x1 = scaleBand().rangeRound([0, width]);\n\t\t}\n\n\t\tthis.x1.domain(this.displayData.datasets.map(dataset => dataset.label))\n\t\t\t.rangeRound([0, getMaxBarWidth(Tools.getProperty(this.options, \"bars\", \"maxWidth\"), this.x.bandwidth())]);\n\t}\n\n\tgetBarX(d) {\n\t\tif (!isWidthConstrained(Tools.getProperty(this.options, \"bars\", \"maxWidth\"), this.x.bandwidth())) {\n\t\t\treturn this.x1(d.datasetLabel);\n\t\t}\n\n\t\treturn (this.x.bandwidth() / 2) - (Tools.getProperty(this.options, \"bars\", \"maxWidth\") / 2);\n\t}\n\n\tdraw() {\n\t\tthis.innerWrap.style(\"width\", \"100%\")\n\t\t\t.style(\"height\", \"100%\");\n\n\t\tconst { bar: margins } = Configuration.charts.margin;\n\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\tconst gBars = this.innerWrap\n\t\t\t.attr(\"transform\", `translate(${margins.left}, ${margins.top})`)\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"bars\", true)\n\t\t\t.attr(\"width\", width);\n\n\t\tgBars.selectAll(\"g\")\n\t\t\t.data(this.displayData.labels)\n\t\t\t.enter()\n\t\t\t\t.append(\"g\")\n\t\t\t\t.attr(\"transform\", d => `translate(${this.x(d)}, 0)`)\n\t\t\t\t.selectAll(\"rect.bar\")\n\t\t\t\t.data((d, index) => this.addLabelsToDataPoints(d, index))\n\t\t\t\t\t.enter()\n\t\t\t\t\t\t.append(\"rect\")\n\t\t\t\t\t\t.classed(\"bar\", true)\n\t\t\t\t\t\t.attr(\"x\", this.getBarX.bind(this))\n\t\t\t\t\t\t.attr(\"y\", d => this.y(Math.max(0, d.value)))\n\t\t\t\t\t\t.attr(\"width\", this.x1.bandwidth())\n\t\t\t\t\t\t.attr(\"height\", d => Math.abs(this.y(d.value) - this.y(0)))\n\t\t\t\t\t\t.attr(\"fill\", d => this.getFillColor(d.datasetLabel, d.label, d.value))\n\t\t\t\t\t\t.attr(\"stroke\", d => this.options.accessibility ? this.getStrokeColor(d.datasetLabel, d.label, d.value) : null)\n\t\t\t\t\t\t.attr(\"stroke-width\", Configuration.bars.default.strokeWidth)\n\t\t\t\t\t\t.attr(\"stroke-opacity\", d => this.options.accessibility ? 1 : 0);\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\tinterpolateValues(newData: any) {\n\t\tconst { bar: 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 bars\n\t\tconst g = this.innerWrap.select(\"g.bars\")\n\t\t\t.attr(\"width\", width)\n\t\t\t.selectAll(\"g\")\n\t\t\t.data(this.displayData.labels);\n\n\t\tconst rect = g.selectAll(\"rect.bar\")\n\t\t\t.data((d, index) => this.addLabelsToDataPoints(d, index));\n\n\t\tthis.updateElements(true, rect, g);\n\n\t\t// Add bar groups that need to be added now\n\t\tconst addedBars = g.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"bars\", true)\n\t\t\t.attr(\"transform\", d => `translate(${this.x(d)}, 0)`);\n\n\t\t// Add bars that need to be added now\n\t\tg.selectAll(\"rect.bar\")\n\t\t\t.data((d, index) => this.addLabelsToDataPoints(d, index))\n\t\t\t.enter()\n\t\t\t.append(\"rect\")\n\t\t\t.attr(\"class\", \"bar\")\n\t\t\t.attr(\"x\", this.getBarX.bind(this))\n\t\t\t.attr(\"y\", d => this.y(Math.max(0, d.value)))\n\t\t\t.attr(\"width\", this.x1.bandwidth())\n\t\t\t.attr(\"height\", d => Math.abs(this.y(d.value) - this.y(0)))\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.transition(this.getFillTransition())\n\t\t\t.attr(\"fill\", d => this.getFillColor(d.datasetLabel, d.label, d.value))\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.attr(\"stroke\", (d: any) => this.getStrokeColor(d.datasetLabel, d.label, d.value))\n\t\t\t.attr(\"stroke-width\", Configuration.bars.default.strokeWidth);\n\n\t\taddedBars.selectAll(\"rect.bar\")\n\t\t\t.data((d, index) => this.addLabelsToDataPoints(d, index))\n\t\t\t.enter()\n\t\t\t.append(\"rect\")\n\t\t\t.attr(\"class\", \"bar\")\n\t\t\t.attr(\"x\", this.getBarX.bind(this))\n\t\t\t.attr(\"y\", d => this.y(Math.max(0, d.value)))\n\t\t\t.attr(\"width\", this.x1.bandwidth())\n\t\t\t.attr(\"height\", d => Math.abs(this.y(d.value) - this.y(0)))\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.transition(this.getFillTransition())\n\t\t\t.attr(\"fill\", d => this.getFillColor(d.datasetLabel, d.label, d.value))\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.attr(\"stroke\", (d: any) => this.getStrokeColor(d.datasetLabel, d.label, d.value))\n\t\t\t.attr(\"stroke-width\", Configuration.bars.default.strokeWidth);\n\n\t\t// Remove bar groups are no longer needed\n\t\tg.exit()\n\t\t\t.transition(this.getDefaultTransition())\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Remove bars that are no longer needed\n\t\trect.exit()\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, rect?: any, g?: any) {\n\t\tif (!rect) {\n\t\t\trect = this.innerWrap.selectAll(\"rect.bar\");\n\t\t}\n\n\t\tif (g) {\n\t\t\tg.transition(animate ? this.getDefaultTransition() : this.getInstantTransition())\n\t\t\t\t.attr(\"transform\", d => `translate(${this.x(d)}, 0)`)\n\t\t\t\t.style(\"opacity\", 1);\n\t\t}\n\n\t\t// Update existing bars\n\t\trect\n\t\t\t.transition(animate ? this.getFillTransition() : this.getInstantTransition())\n\t\t\t// TODO\n\t\t\t// .ease(d3.easeCircle)\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.attr(\"x\", this.getBarX.bind(this))\n\t\t\t.attr(\"y\", d => this.y(Math.max(0, d.value)))\n\t\t\t.attr(\"width\", this.x1.bandwidth())\n\t\t\t.attr(\"height\", d => Math.abs(this.y(d.value) - this.y(0)))\n\t\t\t.attr(\"fill\", d => this.getFillColor(d.datasetLabel, d.label, d.value))\n\t\t\t.attr(\"stroke\", d => this.options.accessibility ? this.getStrokeColor(d.datasetLabel, d.label, d.value) : null);\n\t}\n\n\tresizeChart() {\n\t\tconst actualChartSize: any = this.getChartSize(this.container);\n\t\tconst dimensionToUseForScale = Math.min(actualChartSize.width, actualChartSize.height);\n\n\t\t// Resize the SVG\n\t\tselect(this.holder).select(\"svg\")\n\t\t\t.attr(\"width\", `${dimensionToUseForScale}px`)\n\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\t// Apply new data to the bars\n\t\tconst g = this.innerWrap.selectAll(\"g.bars g\");\n\t\tthis.updateElements(false, null, g);\n\n\t\tsuper.resizeChart();\n\t}\n\n\taddDataPointEventListener() {\n\t\tconst self = this;\n\t\tconst { accessibility } = this.options;\n\n\t\tthis.svg.selectAll(\"rect.bar\")\n\t\t\t.on(\"click\", function(d) {\n\t\t\t\tself.dispatchEvent(\"bar-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.bars.mouseover.strokeWidth)\n\t\t\t\t\t.attr(\"stroke\", self.getStrokeColor(d.datasetLabel, d.label, d.value))\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.bars.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.bars.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\", accessibility ? self.getStrokeColor(d.datasetLabel, d.label, d.value) : \"none\")\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.bars.mouseout.strokeOpacity);\n\n\t\t\t\tself.hideTooltip();\n\t\t\t});\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bar-chart.js","sourceRoot":"","sources":["src/bar-chart.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,aAAa;AACb,OAAO,EAAE,MAAM,EAAS,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAa,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAgC,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,IAAM,OAAO,GAAG,UAAA,OAAO;IACd,IAAA,gCAAQ,CAAkB;IAC1B,IAAA,+BAAM,CAAqB;IACnC,IAAI,IAAI,CAAC;IAET,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,IAAI,CAAC,CAAC;QACP,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAb,CAAa,CAAC,CAAC;IACjD,CAAC;IAED,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,+DAA+D;AAC/D,qBAAqB;AACrB,iEAAiE;AACjE,IAAM,cAAc,GAAG,UAAC,QAAQ,EAAE,gBAAgB;IACjD,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACf,MAAM,CAAC,gBAAgB,CAAC;IACzB,CAAC;IACD,EAAE,CAAC,CAAC,gBAAgB,IAAI,QAAQ,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,gBAAgB,CAAC;IACzB,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC;AACjB,CAAC,CAAC;AAEF,qFAAqF;AACrF,sEAAsE;AACtE,IAAM,kBAAkB,GAAG,UAAC,QAAQ,EAAE,gBAAgB;IACrD,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACf,MAAM,CAAC,KAAK,CAAC;IACd,CAAC;IACD,EAAE,CAAC,CAAC,gBAAgB,IAAI,QAAQ,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC;IACd,CAAC;IACD,MAAM,CAAC,IAAI,CAAC;AACb,CAAC,CAAC;AAEF;IAA8B,4BAAa;IAK1C,kBAAY,MAAe,EAAE,OAAqC;QAAlE,iBAgCC;QA/BA,8DAA8D;QAC9D,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;YAAC,IAAI,CAAC,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,gGAAgG,CAAC,CAAC;YACjH,CAAC;QACF,CAAC;QAED,QAAA,kBAAM,MAAM,EAAE,OAAO,CAAC,SAAC;QAEvB,qBAAqB;QACrB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACrB,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5E,CAAC;QAAC,IAAI,CAAC,CAAC;YACP,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,sDAAsD;QAC9C,IAAA,2BAAI,CAAqB;QACjC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACF,IAAA,yCAAY,CAAiC;YACrD,IAAM,SAAS,GAAG,KAAI,CAAC,YAAY,EAAE,CAAC;YACtC,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;YAE7D,KAAI,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtF,KAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,KAAK,EAAb,CAAa,CAAC,CAAC;iBAC9D,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,KAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,KAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5G,CAAC;QAED,KAAI,CAAC,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC;;IACnC,CAAC;IAED,4BAAS,GAAT,UAAU,MAAY;QACb,IAAA,yCAAY,CAAiC;QACrD,IAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;QAE7D,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QACjB,CAAC;QAAC,IAAI,CAAC,CAAC;YACP,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzF,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,2EAA2E;QAC3E,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvF,CAAC;QAAC,IAAI,CAAC,CAAC;YACP,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,KAAK,EAAb,CAAa,CAAC,CAAC;aACrE,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5G,CAAC;IAED,0BAAO,GAAP,UAAQ,CAAC;QACR,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAClG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,uBAAI,GAAJ;QAAA,iBAwCC;QAvCA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;aACnC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAElB,IAAA,yCAAY,CAAiC;QAErD,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,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS;aAC1B,IAAI,CAAC,WAAW,EAAE,eAAa,OAAO,CAAC,IAAI,UAAK,OAAO,CAAC,GAAG,MAAG,CAAC;aAC/D,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEvB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;aAC7B,KAAK,EAAE;aACN,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,WAAW,EAAE,UAAA,CAAC,IAAI,OAAA,eAAa,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAM,EAA5B,CAA4B,CAAC;aACpD,SAAS,CAAC,UAAU,CAAC;aACrB,IAAI,CAAC,UAAC,CAAC,EAAE,KAAK,IAAK,OAAA,KAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,EAApC,CAAoC,CAAC;aACvD,KAAK,EAAE;aACN,MAAM,CAAC,MAAM,CAAC;aACd,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClC,IAAI,CAAC,GAAG,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAA5B,CAA4B,CAAC;aAC5C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;aAClC,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAArC,CAAqC,CAAC;aAC1D,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAnD,CAAmD,CAAC;aACtE,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAzF,CAAyF,CAAC;aAC9G,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;aAC5D,IAAI,CAAC,gBAAgB,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAlC,CAAkC,CAAC,CAAC;QAErE,mBAAmB;QACnB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAEzB,0BAA0B;QAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,oCAAiB,GAAjB,UAAkB,OAAY;QAA9B,iBA4EC;QA3EQ,IAAA,yCAAY,CAAiC;QACrD,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,6BAA6B;QAC7B,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;aACvC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;aACpB,SAAS,CAAC,GAAG,CAAC;aACd,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEhC,IAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;aAClC,IAAI,CAAC,UAAC,CAAC,EAAE,KAAK,IAAK,OAAA,KAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,EAApC,CAAoC,CAAC,CAAC;QAE3D,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAEnC,2CAA2C;QAC3C,IAAM,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE;aACzB,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,IAAI,CAAC,WAAW,EAAE,UAAA,CAAC,IAAI,OAAA,eAAa,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAM,EAA5B,CAA4B,CAAC,CAAC;QAEvD,qCAAqC;QACrC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;aACrB,IAAI,CAAC,UAAC,CAAC,EAAE,KAAK,IAAK,OAAA,KAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,EAApC,CAAoC,CAAC;aACxD,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;aACpB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClC,IAAI,CAAC,GAAG,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAA5B,CAA4B,CAAC;aAC5C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;aAClC,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAArC,CAAqC,CAAC;aAC1D,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;aACpC,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAnD,CAAmD,CAAC;aACtE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,IAAI,CAAC,QAAQ,EAAE,UAAC,CAAM,IAAK,OAAA,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAArD,CAAqD,CAAC;aACjF,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE/D,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC;aAC7B,IAAI,CAAC,UAAC,CAAC,EAAE,KAAK,IAAK,OAAA,KAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,EAApC,CAAoC,CAAC;aACxD,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;aACpB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClC,IAAI,CAAC,GAAG,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAA5B,CAA4B,CAAC;aAC5C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;aAClC,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAArC,CAAqC,CAAC;aAC1D,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;aACpC,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAnD,CAAmD,CAAC;aACtE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,IAAI,CAAC,QAAQ,EAAE,UAAC,CAAM,IAAK,OAAA,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAArD,CAAqD,CAAC;aACjF,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE/D,yCAAyC;QACzC,CAAC,CAAC,IAAI,EAAE;aACN,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aACvC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,MAAM,EAAE,CAAC;QAEX,wCAAwC;QACxC,IAAI,CAAC,IAAI,EAAE;aACT,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,iCAAc,GAAd,UAAe,OAAgB,EAAE,IAAU,EAAE,CAAO;QAApD,iBAuBC;QAtBA,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACX,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;iBAC/E,IAAI,CAAC,WAAW,EAAE,UAAA,CAAC,IAAI,OAAA,eAAa,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAM,EAA5B,CAA4B,CAAC;iBACpD,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;QAED,uBAAuB;QACvB,IAAI;aACF,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAG5E,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClC,IAAI,CAAC,GAAG,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAA5B,CAA4B,CAAC;aAC5C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;aAClC,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAArC,CAAqC,CAAC;aAC1D,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAnD,CAAmD,CAAC;aACtE,IAAI,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAzF,CAAyF,CAAC,CAAC;IAClH,CAAC;IAED,8BAAW,GAAX;QACC,IAAM,eAAe,GAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QAEvF,iBAAiB;QACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/B,IAAI,CAAC,OAAO,EAAK,sBAAsB,OAAI,CAAC;aAC5C,IAAI,CAAC,QAAQ,EAAK,sBAAsB,OAAI,CAAC,CAAC;QAEhD,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,6BAA6B;QAC7B,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAEpC,iBAAM,WAAW,WAAE,CAAC;IACrB,CAAC;IAED,4CAAyB,GAAzB;QAAA,iBAyBC;QAxBA,IAAM,IAAI,GAAG,IAAI,CAAC;QACV,IAAA,0CAAa,CAAkB;QAEvC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC;aAC5B,EAAE,CAAC,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC,EAApC,CAAoC,CAAC;aACtD,EAAE,CAAC,WAAW,EAAE,UAAS,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC;iBACV,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;iBAC9D,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;iBACrE,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAErE,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,KAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAA9B,CAA8B,CAAC;aACpD,EAAE,CAAC,UAAU,EAAE,UAAS,CAAC;YACnB,IAAA,gCAAoE,EAAlE,4BAAW,EAAE,gDAAqB,CAAiC;YAC3E,MAAM,CAAC,IAAI,CAAC;iBACV,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC;iBACzE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;iBAC9F,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAEpE,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IACF,eAAC;AAAD,CAAC,AA1QD,CAA8B,aAAa,GA0Q1C","sourcesContent":["// D3 Imports\nimport { select, mouse } from \"d3-selection\";\nimport { scaleBand, ScaleBand } from \"d3-scale\";\nimport { min } from \"d3-array\";\n\nimport { BaseAxisChart } from \"./base-axis-chart\";\nimport { StackedBarChart } from \"./stacked-bar-chart\";\nimport * as Configuration from \"./configuration\";\nimport { ChartConfig, BarChartOptions, ChartType } from \"./configuration\";\n\nimport { Tools } from \"./tools\";\n\nconst getYMin = configs => {\n\tconst { datasets } = configs.data;\n\tconst { scales } = configs.options;\n\tlet yMin;\n\n\tif (datasets.length === 1) {\n\t\tyMin = min(datasets[0].data);\n\t} else {\n\t\tyMin = min(datasets, (d: any) => (min(d.data)));\n\t}\n\n\tif (scales.y.yMinAdjuster) {\n\t\tyMin = scales.y.yMinAdjuster(yMin);\n\t}\n\n\treturn yMin;\n};\n\n// returns the configured max width or the calculated bandwidth\n// whichever is lower\n// defaults to the calculated bandwidth if no maxWidth is defined\nconst getMaxBarWidth = (maxWidth, currentBandWidth) => {\n\tif (!maxWidth) {\n\t\treturn currentBandWidth;\n\t}\n\tif (currentBandWidth <= maxWidth) {\n\t\treturn currentBandWidth;\n\t}\n\treturn maxWidth;\n};\n\n// returns true if the calculated bandwidth is greater than the maxWidth (if defined)\n// i.e. if we should be constraining ourselves to a specific bar width\nconst isWidthConstrained = (maxWidth, currentBandWidth) => {\n\tif (!maxWidth) {\n\t\treturn false;\n\t}\n\tif (currentBandWidth <= maxWidth) {\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nexport class BarChart extends BaseAxisChart {\n\tx1?: ScaleBand<any>;\n\n\toptions: BarChartOptions;\n\n\tconstructor(holder: Element, configs: ChartConfig<BarChartOptions>) {\n\t\t// If this is a stacked bar chart, change the object prototype\n\t\tif (configs.options.scales.y.stacked) {\n\t\t\tif (getYMin(configs) >= 0) {\n\t\t\t\treturn new StackedBarChart(holder, configs);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Negative values are not supported in StackedBarChart, using GroupedBarChart instead to render!\");\n\t\t\t}\n\t\t}\n\n\t\tsuper(holder, configs);\n\n\t\t// initialize options\n\t\tif (configs.options) {\n\t\t\tthis.options = Tools.merge({}, Configuration.options.BAR, configs.options);\n\t\t} else {\n\t\t\tthis.options = Tools.merge({}, Configuration.options.BAR);\n\t\t}\n\n\t\t// To be used for combo chart instances of a bar chart\n\t\tconst { axis } = configs.options;\n\t\tif (axis) {\n\t\t\tconst { bar: margins } = Configuration.charts.margin;\n\t\t\tconst chartSize = this.getChartSize();\n\t\t\tconst width = chartSize.width - margins.left - margins.right;\n\n\t\t\tthis.x1 = scaleBand().rangeRound([0, width]).padding(Configuration.bars.spacing.bars);\n\t\t\tthis.x1.domain(this.data.datasets.map(dataset => dataset.label))\n\t\t\t\t.rangeRound([0, getMaxBarWidth(Tools.getProperty(this.options, \"bars\", \"maxWidth\"), this.x.bandwidth())]);\n\t\t}\n\n\t\tthis.options.type = ChartType.BAR;\n\t}\n\n\tsetXScale(xScale?: any) {\n\t\tconst { bar: margins } = Configuration.charts.margin;\n\t\tconst chartSize = this.getChartSize();\n\t\tconst width = chartSize.width - margins.left - margins.right;\n\n\t\tif (xScale) {\n\t\t\tthis.x = xScale;\n\t\t} else {\n\t\t\tthis.x = scaleBand().rangeRound([0, width]).padding(Configuration.bars.spacing.datasets);\n\t\t\tthis.x.domain(this.displayData.labels);\n\t\t}\n\n\t\t// if it's a grouped bar, use additoinal padding so the bars don't group up\n\t\tif (this.displayData.datasets.length > 1) {\n\t\t\tthis.x1 = scaleBand().rangeRound([0, width]).padding(Configuration.bars.spacing.bars);\n\t\t} else {\n\t\t\tthis.x1 = scaleBand().rangeRound([0, width]);\n\t\t}\n\n\t\tthis.x1.domain(this.displayData.datasets.map(dataset => dataset.label))\n\t\t\t.rangeRound([0, getMaxBarWidth(Tools.getProperty(this.options, \"bars\", \"maxWidth\"), this.x.bandwidth())]);\n\t}\n\n\tgetBarX(d) {\n\t\tif (!isWidthConstrained(Tools.getProperty(this.options, \"bars\", \"maxWidth\"), this.x.bandwidth())) {\n\t\t\treturn this.x1(d.datasetLabel);\n\t\t}\n\n\t\treturn (this.x.bandwidth() / 2) - (Tools.getProperty(this.options, \"bars\", \"maxWidth\") / 2);\n\t}\n\n\tdraw() {\n\t\tthis.innerWrap.style(\"width\", \"100%\")\n\t\t\t.style(\"height\", \"100%\");\n\n\t\tconst { bar: margins } = Configuration.charts.margin;\n\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\tconst gBars = this.innerWrap\n\t\t\t.attr(\"transform\", `translate(${margins.left}, ${margins.top})`)\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"bars\", true)\n\t\t\t.attr(\"width\", width);\n\n\t\tgBars.selectAll(\"g\")\n\t\t\t.data(this.displayData.labels)\n\t\t\t.enter()\n\t\t\t\t.append(\"g\")\n\t\t\t\t.attr(\"transform\", d => `translate(${this.x(d)}, 0)`)\n\t\t\t\t.selectAll(\"rect.bar\")\n\t\t\t\t.data((d, index) => this.addLabelsToDataPoints(d, index))\n\t\t\t\t\t.enter()\n\t\t\t\t\t\t.append(\"rect\")\n\t\t\t\t\t\t.classed(\"bar\", true)\n\t\t\t\t\t\t.attr(\"x\", this.getBarX.bind(this))\n\t\t\t\t\t\t.attr(\"y\", d => this.y(Math.max(0, d.value)))\n\t\t\t\t\t\t.attr(\"width\", this.x1.bandwidth())\n\t\t\t\t\t\t.attr(\"height\", d => Math.abs(this.y(d.value) - this.y(0)))\n\t\t\t\t\t\t.attr(\"fill\", d => this.getFillColor(d.datasetLabel, d.label, d.value))\n\t\t\t\t\t\t.attr(\"stroke\", d => this.options.accessibility ? this.getStrokeColor(d.datasetLabel, d.label, d.value) : null)\n\t\t\t\t\t\t.attr(\"stroke-width\", Configuration.bars.default.strokeWidth)\n\t\t\t\t\t\t.attr(\"stroke-opacity\", d => this.options.accessibility ? 1 : 0);\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\tinterpolateValues(newData: any) {\n\t\tconst { bar: 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 bars\n\t\tconst g = this.innerWrap.select(\"g.bars\")\n\t\t\t.attr(\"width\", width)\n\t\t\t.selectAll(\"g\")\n\t\t\t.data(this.displayData.labels);\n\n\t\tconst rect = g.selectAll(\"rect.bar\")\n\t\t\t.data((d, index) => this.addLabelsToDataPoints(d, index));\n\n\t\tthis.updateElements(true, rect, g);\n\n\t\t// Add bar groups that need to be added now\n\t\tconst addedBars = g.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"bars\", true)\n\t\t\t.attr(\"transform\", d => `translate(${this.x(d)}, 0)`);\n\n\t\t// Add bars that need to be added now\n\t\tg.selectAll(\"rect.bar\")\n\t\t\t.data((d, index) => this.addLabelsToDataPoints(d, index))\n\t\t\t.enter()\n\t\t\t.append(\"rect\")\n\t\t\t.attr(\"class\", \"bar\")\n\t\t\t.attr(\"x\", this.getBarX.bind(this))\n\t\t\t.attr(\"y\", d => this.y(Math.max(0, d.value)))\n\t\t\t.attr(\"width\", this.x1.bandwidth())\n\t\t\t.attr(\"height\", d => Math.abs(this.y(d.value) - this.y(0)))\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.transition(this.getFillTransition())\n\t\t\t.attr(\"fill\", d => this.getFillColor(d.datasetLabel, d.label, d.value))\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.attr(\"stroke\", (d: any) => this.getStrokeColor(d.datasetLabel, d.label, d.value))\n\t\t\t.attr(\"stroke-width\", Configuration.bars.default.strokeWidth);\n\n\t\taddedBars.selectAll(\"rect.bar\")\n\t\t\t.data((d, index) => this.addLabelsToDataPoints(d, index))\n\t\t\t.enter()\n\t\t\t.append(\"rect\")\n\t\t\t.attr(\"class\", \"bar\")\n\t\t\t.attr(\"x\", this.getBarX.bind(this))\n\t\t\t.attr(\"y\", d => this.y(Math.max(0, d.value)))\n\t\t\t.attr(\"width\", this.x1.bandwidth())\n\t\t\t.attr(\"height\", d => Math.abs(this.y(d.value) - this.y(0)))\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.transition(this.getFillTransition())\n\t\t\t.attr(\"fill\", d => this.getFillColor(d.datasetLabel, d.label, d.value))\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.attr(\"stroke\", (d: any) => this.getStrokeColor(d.datasetLabel, d.label, d.value))\n\t\t\t.attr(\"stroke-width\", Configuration.bars.default.strokeWidth);\n\n\t\t// Remove bar groups are no longer needed\n\t\tg.exit()\n\t\t\t.transition(this.getDefaultTransition())\n\t\t\t.style(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Remove bars that are no longer needed\n\t\trect.exit()\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, rect?: any, g?: any) {\n\t\tif (!rect) {\n\t\t\trect = this.innerWrap.selectAll(\"rect.bar\");\n\t\t}\n\n\t\tif (g) {\n\t\t\tg.transition(animate ? this.getDefaultTransition() : this.getInstantTransition())\n\t\t\t\t.attr(\"transform\", d => `translate(${this.x(d)}, 0)`)\n\t\t\t\t.style(\"opacity\", 1);\n\t\t}\n\n\t\t// Update existing bars\n\t\trect\n\t\t\t.transition(animate ? this.getFillTransition() : this.getInstantTransition())\n\t\t\t// TODO\n\t\t\t// .ease(d3.easeCircle)\n\t\t\t.style(\"opacity\", 1)\n\t\t\t.attr(\"x\", this.getBarX.bind(this))\n\t\t\t.attr(\"y\", d => this.y(Math.max(0, d.value)))\n\t\t\t.attr(\"width\", this.x1.bandwidth())\n\t\t\t.attr(\"height\", d => Math.abs(this.y(d.value) - this.y(0)))\n\t\t\t.attr(\"fill\", d => this.getFillColor(d.datasetLabel, d.label, d.value))\n\t\t\t.attr(\"stroke\", d => this.options.accessibility ? this.getStrokeColor(d.datasetLabel, d.label, d.value) : null);\n\t}\n\n\tresizeChart() {\n\t\tconst actualChartSize: any = this.getChartSize(this.container);\n\t\tconst dimensionToUseForScale = Math.min(actualChartSize.width, actualChartSize.height);\n\n\t\t// Resize the SVG\n\t\tselect(this.holder).select(\"svg\")\n\t\t\t.attr(\"width\", `${dimensionToUseForScale}px`)\n\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\t// Apply new data to the bars\n\t\tconst g = this.innerWrap.selectAll(\"g.bars g\");\n\t\tthis.updateElements(false, null, g);\n\n\t\tsuper.resizeChart();\n\t}\n\n\taddDataPointEventListener() {\n\t\tconst self = this;\n\t\tconst { accessibility } = this.options;\n\n\t\tthis.svg.selectAll(\"rect.bar\")\n\t\t\t.on(\"click\", d => self.dispatchEvent(\"bar-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.bars.mouseover.strokeWidth)\n\t\t\t\t\t.attr(\"stroke\", self.getStrokeColor(d.datasetLabel, d.label, d.value))\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.bars.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 => this.tooltip.positionTooltip())\n\t\t\t.on(\"mouseout\", function(d) {\n\t\t\t\tconst { strokeWidth, strokeWidthAccessible } = Configuration.bars.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\", accessibility ? self.getStrokeColor(d.datasetLabel, d.label, d.value) : \"none\")\n\t\t\t\t\t.attr(\"stroke-opacity\", Configuration.bars.mouseout.strokeOpacity);\n\n\t\t\t\tself.hideTooltip();\n\t\t\t});\n\t}\n}\n"]}
|
package/base-chart.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Transition } from "d3-transition";
|
|
2
2
|
import { ChartConfig, BaseChartOptions, ChartData } from "./configuration";
|
|
3
3
|
import PatternsService from "./services/patterns";
|
|
4
|
+
import { ChartOverlay } from "./components/index";
|
|
5
|
+
import { ChartTooltip } from "./components/tooltip";
|
|
4
6
|
export declare class BaseChart {
|
|
5
7
|
static chartCount: number;
|
|
6
8
|
id: string;
|
|
@@ -20,6 +22,8 @@ export declare class BaseChart {
|
|
|
20
22
|
eventHandlers: {
|
|
21
23
|
tooltips: any;
|
|
22
24
|
};
|
|
25
|
+
chartOverlay: ChartOverlay;
|
|
26
|
+
tooltip: ChartTooltip;
|
|
23
27
|
constructor(holder: Element, configs: ChartConfig<BaseChartOptions>);
|
|
24
28
|
styleHolderElement(): void;
|
|
25
29
|
dispatchEvent(eventType: string, eventDetail?: object): void;
|
|
@@ -76,17 +80,12 @@ export declare class BaseChart {
|
|
|
76
80
|
openLegendTooltip(target: any): void;
|
|
77
81
|
showLabelTooltip(d: any, leftSide: any): void;
|
|
78
82
|
hideTooltip(): void;
|
|
79
|
-
addTooltipEventListeners(tooltip: any): void;
|
|
80
|
-
removeTooltipEventListeners(): void;
|
|
81
83
|
generateTooltipHTML(label: any, value: any): string;
|
|
82
|
-
|
|
84
|
+
getTooltipHTML: (d: any) => string;
|
|
85
|
+
showTooltip(d: any, clickedElement?: Element): void;
|
|
83
86
|
getFillScale(): {};
|
|
84
87
|
getDefaultTransition(): Transition<any, any, any, any>;
|
|
85
88
|
getInstantTransition(): Transition<any, any, any, any>;
|
|
86
89
|
getFillTransition(animate?: boolean): Transition<any, any, any, any>;
|
|
87
|
-
updateOverlay(): {
|
|
88
|
-
show: () => void;
|
|
89
|
-
hide: () => void;
|
|
90
|
-
};
|
|
91
90
|
getBBox(selector: any): any;
|
|
92
91
|
}
|
package/base-chart.js
CHANGED
|
@@ -6,10 +6,13 @@ import { transition } from "d3-transition";
|
|
|
6
6
|
import * as Configuration from "./configuration";
|
|
7
7
|
import { Tools } from "./tools";
|
|
8
8
|
import PatternsService from "./services/patterns";
|
|
9
|
+
import { ChartOverlay } from "./components/index";
|
|
10
|
+
import { ChartTooltip } from "./components/tooltip";
|
|
9
11
|
// Misc
|
|
10
12
|
import ResizeObserver from "resize-observer-polyfill";
|
|
11
13
|
var BaseChart = /** @class */ (function () {
|
|
12
14
|
function BaseChart(holder, configs) {
|
|
15
|
+
var _this = this;
|
|
13
16
|
this.id = "";
|
|
14
17
|
this.chartContainerID = "";
|
|
15
18
|
this.options = Tools.merge({}, Configuration.options.BASE);
|
|
@@ -19,6 +22,13 @@ var BaseChart = /** @class */ (function () {
|
|
|
19
22
|
this.eventHandlers = {
|
|
20
23
|
tooltips: null
|
|
21
24
|
};
|
|
25
|
+
this.getTooltipHTML = function (d) {
|
|
26
|
+
var formattedValue = _this.options.tooltip.formatter ? _this.options.tooltip.formatter(d.value) : d.value.toLocaleString("en");
|
|
27
|
+
if (_this.getLegendType() === Configuration.legend.basedOn.LABELS) {
|
|
28
|
+
return _this.generateTooltipHTML(d.label, formattedValue);
|
|
29
|
+
}
|
|
30
|
+
return _this.generateTooltipHTML(d.datasetLabel, formattedValue);
|
|
31
|
+
};
|
|
22
32
|
this.id = "chart-" + BaseChart.chartCount++;
|
|
23
33
|
if (configs.options) {
|
|
24
34
|
this.options = Tools.merge({}, this.options, configs.options);
|
|
@@ -33,6 +43,9 @@ var BaseChart = /** @class */ (function () {
|
|
|
33
43
|
this.resizeWhenContainerChange();
|
|
34
44
|
}
|
|
35
45
|
this.events = document.createDocumentFragment();
|
|
46
|
+
// Initialize charting components
|
|
47
|
+
this.chartOverlay = new ChartOverlay(this.holder, this.options.overlay);
|
|
48
|
+
this.tooltip = new ChartTooltip(this.container.node());
|
|
36
49
|
if (configs.data) {
|
|
37
50
|
this.setData(configs.data);
|
|
38
51
|
}
|
|
@@ -73,7 +86,7 @@ var BaseChart = /** @class */ (function () {
|
|
|
73
86
|
// Dispatch the update event
|
|
74
87
|
this.dispatchEvent("data-change");
|
|
75
88
|
if (initialDraw || newDataIsAPromise) {
|
|
76
|
-
this.
|
|
89
|
+
this.chartOverlay.show();
|
|
77
90
|
}
|
|
78
91
|
// Hide current showing tooltip
|
|
79
92
|
if (!initialDraw) {
|
|
@@ -85,31 +98,36 @@ var BaseChart = /** @class */ (function () {
|
|
|
85
98
|
// Process data
|
|
86
99
|
// this.data = this.dataProcessor(Tools.clone(value));
|
|
87
100
|
_this.data = Tools.clone(value);
|
|
88
|
-
_this.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
_this.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
101
|
+
if (_this.data.datasets && _this.data.datasets.length > 0) {
|
|
102
|
+
_this.displayData = _this.dataProcessor(Tools.clone(value));
|
|
103
|
+
var keys = _this.getKeysFromData();
|
|
104
|
+
// Grab the old legend items, the keys from the current data
|
|
105
|
+
// Compare the two, if there are any differences (additions/removals)
|
|
106
|
+
// Completely remove the legend and render again
|
|
107
|
+
var oldLegendItems = _this.getActiveLegendItems();
|
|
108
|
+
var keysArray = Object.keys(keys);
|
|
109
|
+
var _a = Tools.arrayDifferences(oldLegendItems, keysArray), removedItems = _a.missing, newItems = _a.added;
|
|
110
|
+
// Update keys for legend use the latest data keys
|
|
111
|
+
_this.options.keys = keys;
|
|
112
|
+
// Set the color scale based on the keys present in the data
|
|
113
|
+
_this.setColorScale();
|
|
114
|
+
// Add patterns to page, set pattern scales
|
|
115
|
+
if (_this.options.accessibility) {
|
|
116
|
+
_this.setPatterns();
|
|
117
|
+
}
|
|
118
|
+
// Perform the draw or update chart
|
|
119
|
+
if (initialDraw) {
|
|
120
|
+
_this.initialDraw();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
if (removedItems.length > 0 || newItems.length > 0) {
|
|
124
|
+
_this.addOrUpdateLegend();
|
|
125
|
+
}
|
|
126
|
+
_this.update();
|
|
127
|
+
}
|
|
107
128
|
}
|
|
108
129
|
else {
|
|
109
|
-
|
|
110
|
-
_this.addOrUpdateLegend();
|
|
111
|
-
}
|
|
112
|
-
_this.update();
|
|
130
|
+
_this.chartOverlay.show(Configuration.options.BASE.overlay.types.noData);
|
|
113
131
|
}
|
|
114
132
|
});
|
|
115
133
|
};
|
|
@@ -229,7 +247,8 @@ var BaseChart = /** @class */ (function () {
|
|
|
229
247
|
* removes the chart and any tooltips
|
|
230
248
|
*/
|
|
231
249
|
BaseChart.prototype.removeChart = function () {
|
|
232
|
-
this.holder.remove();
|
|
250
|
+
// this.holder.remove();
|
|
251
|
+
this.holder.querySelector("div.chart-wrapper").parentNode.removeChild(this.holder.querySelector("div.chart-wrapper"));
|
|
233
252
|
};
|
|
234
253
|
BaseChart.prototype.setSVG = function () {
|
|
235
254
|
var chartSize = this.getChartSize();
|
|
@@ -662,50 +681,7 @@ var BaseChart = /** @class */ (function () {
|
|
|
662
681
|
};
|
|
663
682
|
BaseChart.prototype.hideTooltip = function () {
|
|
664
683
|
this.resetOpacity();
|
|
665
|
-
|
|
666
|
-
tooltipRef.style("opacity", 1)
|
|
667
|
-
.transition()
|
|
668
|
-
.duration(Configuration.tooltip.fadeOut.duration)
|
|
669
|
-
.style("opacity", 0)
|
|
670
|
-
.remove();
|
|
671
|
-
this.removeTooltipEventListeners();
|
|
672
|
-
};
|
|
673
|
-
BaseChart.prototype.addTooltipEventListeners = function (tooltip) {
|
|
674
|
-
var _this = this;
|
|
675
|
-
this.eventHandlers.tooltips = function (evt) {
|
|
676
|
-
var targetTagName = evt.target["tagName"];
|
|
677
|
-
var targetsToBeSkipped = ["rect", "circle", "path"];
|
|
678
|
-
// If keyboard event
|
|
679
|
-
if (evt["key"]) {
|
|
680
|
-
if (evt["key"] === "Escape" || evt["key"] === "Esc") {
|
|
681
|
-
_this.hideTooltip();
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
else if (targetsToBeSkipped.indexOf(targetTagName) === -1) {
|
|
685
|
-
// If mouse event
|
|
686
|
-
_this.hideTooltip();
|
|
687
|
-
}
|
|
688
|
-
};
|
|
689
|
-
// Apply the event listeners to close the tooltip
|
|
690
|
-
// setTimeout is there to avoid catching the click event that opened the tooltip
|
|
691
|
-
setTimeout(function () {
|
|
692
|
-
// When ESC is pressed
|
|
693
|
-
window.addEventListener("keydown", _this.eventHandlers.tooltips);
|
|
694
|
-
// TODO - Don't bind on window
|
|
695
|
-
// If clicked outside
|
|
696
|
-
_this.holder.addEventListener("click", _this.eventHandlers.tooltips);
|
|
697
|
-
// Stop clicking inside tooltip from bubbling up to window
|
|
698
|
-
tooltip.on("click", function () {
|
|
699
|
-
event.stopPropagation();
|
|
700
|
-
});
|
|
701
|
-
}, 0);
|
|
702
|
-
};
|
|
703
|
-
BaseChart.prototype.removeTooltipEventListeners = function () {
|
|
704
|
-
// TODO - Don't bind on window
|
|
705
|
-
// Remove eventlistener to close tooltip when ESC is pressed
|
|
706
|
-
window.removeEventListener("keydown", this.eventHandlers.tooltips);
|
|
707
|
-
// Remove eventlistener to close tooltip when clicked outside
|
|
708
|
-
this.holder.removeEventListener("click", this.eventHandlers.tooltips);
|
|
684
|
+
this.tooltip.hide();
|
|
709
685
|
};
|
|
710
686
|
BaseChart.prototype.generateTooltipHTML = function (label, value) {
|
|
711
687
|
if (this.options.tooltip.size === Configuration.tooltip.size.COMPACT) {
|
|
@@ -716,36 +692,17 @@ var BaseChart = /** @class */ (function () {
|
|
|
716
692
|
}
|
|
717
693
|
};
|
|
718
694
|
BaseChart.prototype.showTooltip = function (d, clickedElement) {
|
|
719
|
-
//
|
|
695
|
+
// Reset opacity of all elements in the chart
|
|
720
696
|
this.resetOpacity();
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
var tooltip = select(this.holder).append("div")
|
|
726
|
-
.attr("class", "tooltip chart-tooltip")
|
|
727
|
-
.style("top", mouse(this.holder)[1] - Configuration.tooltip.magicTop2 + "px");
|
|
728
|
-
var tooltipHTML = "";
|
|
729
|
-
var formattedValue = this.options.tooltip.formatter ? this.options.tooltip.formatter(d.value) : d.value.toLocaleString("en");
|
|
730
|
-
if (this.getLegendType() === Configuration.legend.basedOn.LABELS) {
|
|
731
|
-
tooltipHTML += this.generateTooltipHTML(d.label, formattedValue);
|
|
732
|
-
}
|
|
733
|
-
else {
|
|
734
|
-
tooltipHTML += this.generateTooltipHTML(d.datasetLabel, formattedValue);
|
|
735
|
-
}
|
|
736
|
-
tooltip.append("div").attr("class", "text-box").html(tooltipHTML);
|
|
737
|
-
// Draw tooltip arrow in the right direction
|
|
738
|
-
if (mouse(this.holder)[0] + tooltip.node().clientWidth > this.holder.clientWidth) {
|
|
739
|
-
tooltip.style("left", mouse(this.holder)[0] - tooltip.node().clientWidth - Configuration.tooltip.magicLeft1 + "px");
|
|
697
|
+
var customHTML = this.options.tooltip.customHTML;
|
|
698
|
+
var contentHTML;
|
|
699
|
+
if (customHTML) {
|
|
700
|
+
contentHTML = customHTML;
|
|
740
701
|
}
|
|
741
702
|
else {
|
|
742
|
-
|
|
703
|
+
contentHTML = this.getTooltipHTML(d);
|
|
743
704
|
}
|
|
744
|
-
tooltip.
|
|
745
|
-
.transition()
|
|
746
|
-
.duration(Configuration.tooltip.fadeIn.duration)
|
|
747
|
-
.style("opacity", 1);
|
|
748
|
-
this.addTooltipEventListeners(tooltip);
|
|
705
|
+
this.tooltip.show(contentHTML);
|
|
749
706
|
};
|
|
750
707
|
BaseChart.prototype.getFillScale = function () {
|
|
751
708
|
return this.options.accessibility ? this.patternScale : this.colorScale;
|
|
@@ -767,31 +724,6 @@ var BaseChart = /** @class */ (function () {
|
|
|
767
724
|
}
|
|
768
725
|
return transition().duration(animate === false ? 0 : Configuration.transitions.default.duration);
|
|
769
726
|
};
|
|
770
|
-
// ================================================================================
|
|
771
|
-
// Loading overlay
|
|
772
|
-
// ================================================================================
|
|
773
|
-
BaseChart.prototype.updateOverlay = function () {
|
|
774
|
-
var _this = this;
|
|
775
|
-
var overlayElement = this.holder.querySelector("div.chart-overlay");
|
|
776
|
-
return {
|
|
777
|
-
show: function () {
|
|
778
|
-
// If overlay element has already been added to the chart container
|
|
779
|
-
// Just show it
|
|
780
|
-
if (overlayElement) {
|
|
781
|
-
overlayElement.style.display = "block";
|
|
782
|
-
}
|
|
783
|
-
else {
|
|
784
|
-
var loadingOverlay = document.createElement("div");
|
|
785
|
-
loadingOverlay.classList.add("chart-overlay");
|
|
786
|
-
loadingOverlay.innerHTML = _this.options.loadingOverlay.innerHTML;
|
|
787
|
-
_this.holder.appendChild(loadingOverlay);
|
|
788
|
-
}
|
|
789
|
-
},
|
|
790
|
-
hide: function () {
|
|
791
|
-
overlayElement.style.display = "none";
|
|
792
|
-
}
|
|
793
|
-
};
|
|
794
|
-
};
|
|
795
727
|
BaseChart.prototype.getBBox = function (selector) {
|
|
796
728
|
return this.innerWrap.select(selector).node().getBBox();
|
|
797
729
|
};
|