@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 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
+ [![Edit Carbon Charts - Vanilla](https://codesandbox.io/static/img/play-codesandbox.svg)](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, mouse } from "d3-selection";
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.updateOverlay().hide();
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.updateOverlay().hide();
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":"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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.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
- showTooltip(d: any, clickedElement: any): void;
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.updateOverlay().show();
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.displayData = _this.dataProcessor(Tools.clone(value));
89
- var keys = _this.getKeysFromData();
90
- // Grab the old legend items, the keys from the current data
91
- // Compare the two, if there are any differences (additions/removals)
92
- // Completely remove the legend and render again
93
- var oldLegendItems = _this.getActiveLegendItems();
94
- var keysArray = Object.keys(keys);
95
- var _a = Tools.arrayDifferences(oldLegendItems, keysArray), removedItems = _a.missing, newItems = _a.added;
96
- // Update keys for legend use the latest data keys
97
- _this.options.keys = keys;
98
- // Set the color scale based on the keys present in the data
99
- _this.setColorScale();
100
- // Add patterns to page, set pattern scales
101
- if (_this.options.accessibility) {
102
- _this.setPatterns();
103
- }
104
- // Perform the draw or update chart
105
- if (initialDraw) {
106
- _this.initialDraw();
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
- if (removedItems.length > 0 || newItems.length > 0) {
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
- var tooltipRef = select(this.holder).select("div.chart-tooltip");
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
- // Rest opacity of all elements in the chart
695
+ // Reset opacity of all elements in the chart
720
696
  this.resetOpacity();
721
- // Remove existing tooltips on the page
722
- // TODO - Update class to not conflict with other elements on page
723
- selectAll(".chart-tooltip").remove();
724
- // Draw tooltip
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
- tooltip.style("left", mouse(this.holder)[0] + Configuration.tooltip.magicLeft2 + "px");
703
+ contentHTML = this.getTooltipHTML(d);
743
704
  }
744
- tooltip.style("opacity", 0)
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
  };