@carbon/charts 0.33.0 → 0.34.2
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 +45 -1
- package/axis-chart.d.ts +2 -2
- package/axis-chart.js +6 -4
- package/axis-chart.js.map +1 -1
- package/build/demo/data/bar.d.ts +12 -48
- package/build/demo/data/bubble.d.ts +1 -0
- package/build/src/axis-chart.d.ts +2 -2
- package/build/src/chart.d.ts +2 -2
- package/build/src/components/axes/ruler-stacked-bar.d.ts +4 -0
- package/build/src/components/axes/ruler.d.ts +6 -1
- package/build/src/components/essentials/tooltip-axis.d.ts +4 -0
- package/build/src/components/essentials/tooltip.d.ts +4 -10
- package/build/src/components/index.d.ts +2 -4
- package/build/src/configuration.d.ts +1 -3
- package/build/src/interfaces/a11y.d.ts +2 -1
- package/build/src/interfaces/charts.d.ts +1 -3
- package/build/src/interfaces/components.d.ts +7 -52
- package/build/src/interfaces/enums.d.ts +0 -10
- package/build/src/interfaces/events.d.ts +1 -0
- package/build/src/services/scales-cartesian.d.ts +6 -1
- package/bundle.js +1 -1
- package/chart.d.ts +2 -2
- package/chart.js +2 -1
- package/chart.js.map +1 -1
- package/charts/area-stacked.js +1 -3
- package/charts/area-stacked.js.map +1 -1
- package/charts/area.js +1 -2
- package/charts/area.js.map +1 -1
- package/charts/bar-grouped.js +1 -2
- package/charts/bar-grouped.js.map +1 -1
- package/charts/bar-simple.js +1 -2
- package/charts/bar-simple.js.map +1 -1
- package/charts/bar-stacked.js +2 -2
- package/charts/bar-stacked.js.map +1 -1
- package/charts/bubble.js +1 -2
- package/charts/bubble.js.map +1 -1
- package/charts/donut.js +1 -2
- package/charts/donut.js.map +1 -1
- package/charts/gauge.js +1 -2
- package/charts/gauge.js.map +1 -1
- package/charts/line.js +1 -2
- package/charts/line.js.map +1 -1
- package/charts/pie.js +1 -4
- package/charts/pie.js.map +1 -1
- package/charts/radar.js +0 -3
- package/charts/radar.js.map +1 -1
- package/charts/scatter.js +1 -2
- package/charts/scatter.js.map +1 -1
- package/components/axes/axis.js +23 -8
- package/components/axes/axis.js.map +1 -1
- package/components/axes/grid.js.map +1 -1
- package/components/axes/ruler-stacked-bar.d.ts +4 -0
- package/components/axes/ruler-stacked-bar.js +26 -0
- package/components/axes/ruler-stacked-bar.js.map +1 -0
- package/components/axes/ruler.d.ts +6 -1
- package/components/axes/ruler.js +25 -13
- package/components/axes/ruler.js.map +1 -1
- package/components/essentials/legend.js +15 -14
- package/components/essentials/legend.js.map +1 -1
- package/components/essentials/threshold.js +2 -2
- package/components/essentials/threshold.js.map +1 -1
- package/components/essentials/title.js +10 -9
- package/components/essentials/title.js.map +1 -1
- package/components/essentials/tooltip-axis.d.ts +4 -0
- package/components/essentials/tooltip-axis.js +120 -0
- package/components/essentials/tooltip-axis.js.map +1 -0
- package/components/essentials/tooltip.d.ts +4 -10
- package/components/essentials/tooltip.js +73 -100
- package/components/essentials/tooltip.js.map +1 -1
- package/components/graphs/area-stacked.js.map +1 -1
- package/components/graphs/bar-grouped.js +5 -3
- package/components/graphs/bar-grouped.js.map +1 -1
- package/components/graphs/bar-simple.js +4 -2
- package/components/graphs/bar-simple.js.map +1 -1
- package/components/graphs/bar-stacked.js +17 -14
- package/components/graphs/bar-stacked.js.map +1 -1
- package/components/graphs/pie.js +31 -12
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/radar.js +23 -18
- package/components/graphs/radar.js.map +1 -1
- package/components/graphs/scatter-stacked.js.map +1 -1
- package/components/graphs/scatter.js +18 -13
- package/components/graphs/scatter.js.map +1 -1
- package/components/graphs/skeleton.js +2 -5
- package/components/graphs/skeleton.js.map +1 -1
- package/components/index.d.ts +2 -4
- package/components/index.js +2 -4
- package/components/index.js.map +1 -1
- package/components/layout/layout.js +3 -1
- package/components/layout/layout.js.map +1 -1
- package/configuration.d.ts +1 -3
- package/configuration.js +6 -26
- package/configuration.js.map +1 -1
- package/demo/data/bar.d.ts +12 -48
- package/demo/data/bar.js +22 -58
- package/demo/data/bar.js.map +1 -1
- package/demo/data/bubble.d.ts +1 -0
- package/demo/data/bubble.js +2 -1
- package/demo/data/bubble.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/index.js +1 -1
- package/demo/data/index.js.map +1 -1
- package/demo/data/line.js +5 -5
- package/demo/data/line.js.map +1 -1
- package/demo/styles.css +48 -100
- package/demo/styles.css.map +1 -1
- package/demo/styles.min.css +1 -1
- package/demo/styles.min.css.map +1 -1
- package/demo/tsconfig.tsbuildinfo +16 -16
- package/interfaces/a11y.d.ts +2 -1
- package/interfaces/a11y.js +1 -0
- package/interfaces/a11y.js.map +1 -1
- package/interfaces/charts.d.ts +1 -3
- package/interfaces/charts.js.map +1 -1
- package/interfaces/components.d.ts +7 -52
- package/interfaces/components.js.map +1 -1
- package/interfaces/enums.d.ts +0 -10
- package/interfaces/enums.js +0 -11
- package/interfaces/enums.js.map +1 -1
- package/interfaces/events.d.ts +1 -0
- package/interfaces/events.js +1 -0
- package/interfaces/events.js.map +1 -1
- package/model.js +3 -5
- package/model.js.map +1 -1
- package/package.json +1 -1
- package/services/essentials/dom-utils.js +3 -1
- package/services/essentials/dom-utils.js.map +1 -1
- package/services/scales-cartesian.d.ts +6 -1
- package/services/scales-cartesian.js +20 -1
- package/services/scales-cartesian.js.map +1 -1
- package/styles/components/_ruler.scss +0 -6
- package/styles/components/_tooltip.scss +3 -9
- package/styles/graphs/_scatter-stacked.scss +10 -0
- package/styles/graphs/index.scss +1 -0
- package/styles-g10.css +13 -25
- package/styles-g10.css.map +1 -1
- package/styles-g10.min.css +1 -1
- package/styles-g10.min.css.map +1 -1
- package/styles-g100.css +13 -25
- package/styles-g100.css.map +1 -1
- package/styles-g100.min.css +1 -1
- package/styles-g100.min.css.map +1 -1
- package/styles-g90.css +13 -25
- package/styles-g90.css.map +1 -1
- package/styles-g90.min.css +1 -1
- package/styles-g90.min.css.map +1 -1
- package/styles.css +13 -25
- package/styles.css.map +1 -1
- package/styles.min.css +1 -1
- package/styles.min.css.map +1 -1
- package/tsconfig.tsbuildinfo +81 -138
- package/build/src/components/essentials/tooltip-bar.d.ts +0 -27
- package/build/src/components/essentials/tooltip-pie.d.ts +0 -5
- package/build/src/components/essentials/tooltip-radar.d.ts +0 -5
- package/build/src/components/essentials/tooltip-scatter.d.ts +0 -5
- package/components/essentials/tooltip-bar.d.ts +0 -27
- package/components/essentials/tooltip-bar.js +0 -193
- package/components/essentials/tooltip-bar.js.map +0 -1
- package/components/essentials/tooltip-pie.d.ts +0 -5
- package/components/essentials/tooltip-pie.js +0 -44
- package/components/essentials/tooltip-pie.js.map +0 -1
- package/components/essentials/tooltip-radar.d.ts +0 -5
- package/components/essentials/tooltip-radar.js +0 -45
- package/components/essentials/tooltip-radar.js.map +0 -1
- package/components/essentials/tooltip-scatter.d.ts +0 -5
- package/components/essentials/tooltip-scatter.js +0 -46
- package/components/essentials/tooltip-scatter.js.map +0 -1
|
@@ -14,11 +14,10 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
14
14
|
// Internal Imports
|
|
15
15
|
import { Tools } from "../../tools";
|
|
16
16
|
import { Bar } from "./bar";
|
|
17
|
-
import { Roles,
|
|
17
|
+
import { Roles, Events, CartesianOrientations } from "../../interfaces";
|
|
18
18
|
// D3 Imports
|
|
19
19
|
import { select } from "d3-selection";
|
|
20
20
|
import { color } from "d3-color";
|
|
21
|
-
import { map } from "d3-collection";
|
|
22
21
|
var StackedBar = /** @class */ (function (_super) {
|
|
23
22
|
__extends(StackedBar, _super);
|
|
24
23
|
function StackedBar() {
|
|
@@ -60,7 +59,6 @@ var StackedBar = /** @class */ (function (_super) {
|
|
|
60
59
|
var groupMapsTo = options.data.groupMapsTo;
|
|
61
60
|
var domainIdentifier = this.services.cartesianScales.getDomainIdentifier();
|
|
62
61
|
// Create the data and keys that'll be used by the stack layout
|
|
63
|
-
var stackKeys = map(displayData, function (datum) { return datum[domainIdentifier]; }).keys();
|
|
64
62
|
var stackData = this.model.getStackedData();
|
|
65
63
|
// Update data on all bar groups
|
|
66
64
|
var barGroups = svg.selectAll("g.bars").data(stackData, function (d) { return d.key; });
|
|
@@ -74,12 +72,13 @@ var StackedBar = /** @class */ (function (_super) {
|
|
|
74
72
|
.enter()
|
|
75
73
|
.append("g")
|
|
76
74
|
.classed("bars", true)
|
|
77
|
-
.attr("role", Roles.GROUP)
|
|
75
|
+
.attr("role", Roles.GROUP)
|
|
76
|
+
.attr("aria-label", "bars");
|
|
78
77
|
// Update data on all bars
|
|
79
78
|
var bars = svg
|
|
80
79
|
.selectAll("g.bars")
|
|
81
80
|
.selectAll("path.bar")
|
|
82
|
-
.data(function (
|
|
81
|
+
.data(function (d) { return d; }, function (d) { return d.data.sharedStackKey; });
|
|
83
82
|
// Remove bars that need to be removed
|
|
84
83
|
bars.exit().remove();
|
|
85
84
|
bars.enter()
|
|
@@ -89,7 +88,7 @@ var StackedBar = /** @class */ (function (_super) {
|
|
|
89
88
|
.transition(this.services.transitions.getTransition("bar-update-enter", animate))
|
|
90
89
|
.attr("fill", function (d) { return _this.model.getFillColor(d[groupMapsTo]); })
|
|
91
90
|
.attr("d", function (d, i) {
|
|
92
|
-
var key =
|
|
91
|
+
var key = d.data.sharedStackKey;
|
|
93
92
|
/*
|
|
94
93
|
* Orientation support for horizontal/vertical bar charts
|
|
95
94
|
* Determine coordinates needed for a vertical set of paths
|
|
@@ -119,7 +118,7 @@ var StackedBar = /** @class */ (function (_super) {
|
|
|
119
118
|
// a11y
|
|
120
119
|
.attr("role", Roles.GRAPHICS_SYMBOL)
|
|
121
120
|
.attr("aria-roledescription", "bar")
|
|
122
|
-
.attr("aria-label", function (d) { return d
|
|
121
|
+
.attr("aria-label", function (d) { return d[1] - d[0]; });
|
|
123
122
|
// Add event listeners for the above elements
|
|
124
123
|
this.addEventListeners();
|
|
125
124
|
};
|
|
@@ -130,6 +129,7 @@ var StackedBar = /** @class */ (function (_super) {
|
|
|
130
129
|
this.parent
|
|
131
130
|
.selectAll("path.bar")
|
|
132
131
|
.on("mouseover", function (datum) {
|
|
132
|
+
var _a;
|
|
133
133
|
var hoveredElement = select(this);
|
|
134
134
|
hoveredElement
|
|
135
135
|
.transition(self.services.transitions.getTransition("graph_element_mouseover_fill_update"))
|
|
@@ -143,14 +143,9 @@ var StackedBar = /** @class */ (function (_super) {
|
|
|
143
143
|
element: hoveredElement,
|
|
144
144
|
datum: datum
|
|
145
145
|
});
|
|
146
|
-
})
|
|
147
|
-
.on("mousemove", function (datum) {
|
|
148
|
-
var _a;
|
|
149
146
|
var displayData = self.model.getDisplayData();
|
|
150
|
-
var hoveredElement = select(this);
|
|
151
147
|
var domainIdentifier = self.services.cartesianScales.getDomainIdentifier();
|
|
152
148
|
var rangeIdentifier = self.services.cartesianScales.getRangeIdentifier();
|
|
153
|
-
var groupMapsTo = self.model.getOptions().data.groupMapsTo;
|
|
154
149
|
var matchingDataPoint = displayData.find(function (d) {
|
|
155
150
|
return (d[rangeIdentifier] === datum.data[datum.group] &&
|
|
156
151
|
d[domainIdentifier].toString() ===
|
|
@@ -167,9 +162,17 @@ var StackedBar = /** @class */ (function (_super) {
|
|
|
167
162
|
// Show tooltip
|
|
168
163
|
self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
|
|
169
164
|
hoveredElement: hoveredElement,
|
|
170
|
-
data: matchingDataPoint
|
|
171
|
-
|
|
165
|
+
data: [matchingDataPoint]
|
|
166
|
+
});
|
|
167
|
+
})
|
|
168
|
+
.on("mousemove", function (datum) {
|
|
169
|
+
var hoveredElement = select(this);
|
|
170
|
+
// Dispatch mouse event
|
|
171
|
+
self.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {
|
|
172
|
+
element: hoveredElement,
|
|
173
|
+
datum: datum
|
|
172
174
|
});
|
|
175
|
+
self.services.events.dispatchEvent(Events.Tooltip.MOVE);
|
|
173
176
|
})
|
|
174
177
|
.on("click", function (datum) {
|
|
175
178
|
// Dispatch mouse event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar-stacked.js","sourceRoot":"","sources":["bar-stacked.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Tools } from \"../../tools\";\nimport { Bar } from \"./bar\";\nimport {\n\tRoles,\n\tTooltipTypes,\n\tEvents,\n\tCartesianOrientations\n} from \"../../interfaces\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { color } from \"d3-color\";\nimport { map } from \"d3-collection\";\n\nexport class StackedBar extends Bar {\n\ttype = \"stacked-bar\";\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Chart options mixed with the internal configurations\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\n\t\t// Create the data and keys that'll be used by the stack layout\n\t\tconst stackKeys = map(\n\t\t\tdisplayData,\n\t\t\t(datum) => datum[domainIdentifier]\n\t\t).keys();\n\t\tconst stackData = this.model.getStackedData();\n\n\t\t// Update data on all bar groups\n\t\tconst barGroups = svg.selectAll(\"g.bars\").data(stackData, (d) => d.key);\n\n\t\t// Remove elements that need to be exited\n\t\t// We need exit at the top here to make sure that\n\t\t// Data filters are processed before entering new elements\n\t\t// Or updating existing ones\n\t\tbarGroups.exit().attr(\"opacity\", 0).remove();\n\n\t\t// Add bar groups that need to be introduced\n\t\tbarGroups\n\t\t\t.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"bars\", true)\n\t\t\t.attr(\"role\", Roles.GROUP);\n\n\t\t// Update data on all bars\n\t\tconst bars = svg\n\t\t\t.selectAll(\"g.bars\")\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.data((data) => data);\n\n\t\t// Remove bars that need to be removed\n\t\tbars.exit().remove();\n\n\t\tbars.enter()\n\t\t\t.append(\"path\")\n\t\t\t.merge(bars)\n\t\t\t.classed(\"bar\", true)\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\"bar-update-enter\",\n\t\t\t\t\tanimate\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr(\"fill\", (d) => this.model.getFillColor(d[groupMapsTo]))\n\t\t\t.attr(\"d\", (d, i) => {\n\t\t\t\tconst key = stackKeys[i];\n\n\t\t\t\t/*\n\t\t\t\t * Orientation support for horizontal/vertical bar charts\n\t\t\t\t * Determine coordinates needed for a vertical set of paths\n\t\t\t\t * to draw the bars needed, and pass those coordinates down to\n\t\t\t\t * generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t */\n\t\t\t\tconst barWidth = this.getBarWidth();\n\t\t\t\tconst x0 =\n\t\t\t\t\tthis.services.cartesianScales.getDomainValue(key, i) -\n\t\t\t\t\tbarWidth / 2;\n\t\t\t\tconst x1 = x0 + barWidth;\n\t\t\t\tconst y0 = this.services.cartesianScales.getRangeValue(d[0], i);\n\t\t\t\tlet y1 = this.services.cartesianScales.getRangeValue(d[1], i);\n\n\t\t\t\t// Add the divider gap\n\t\t\t\tif (\n\t\t\t\t\tMath.abs(y1 - y0) > 0 &&\n\t\t\t\t\tMath.abs(y1 - y0) > options.bars.dividerSize\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t) {\n\t\t\t\t\t\ty1 += 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"bar\")\n\t\t\t.attr(\"aria-label\", (d) => d.value);\n\n\t\t// Add event listeners for the above elements\n\t\tthis.addEventListeners();\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tthis.parent\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-hover-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", (d) =>\n\t\t\t\td.datasetLabel !== hoveredElement.datum()[\"key\"] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-mouseout-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst self = this;\n\t\tthis.parent\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"graph_element_mouseover_fill_update\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"fill\", (d: any) =>\n\t\t\t\t\t\tcolor(self.model.getFillColor(d[groupMapsTo]))\n\t\t\t\t\t\t\t.darker(0.7)\n\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\tconst displayData = self.model.getDisplayData();\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier();\n\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier();\n\t\t\t\tconst { groupMapsTo } = self.model.getOptions().data;\n\n\t\t\t\tlet matchingDataPoint = displayData.find((d) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\td[rangeIdentifier] === datum.data[datum.group] &&\n\t\t\t\t\t\td[domainIdentifier].toString() ===\n\t\t\t\t\t\t\tdatum.data.sharedStackKey &&\n\t\t\t\t\t\td[groupMapsTo] === datum.group\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tif (matchingDataPoint === undefined) {\n\t\t\t\t\tmatchingDataPoint = {\n\t\t\t\t\t\t[domainIdentifier]: datum.data.sharedStackKey,\n\t\t\t\t\t\t[rangeIdentifier]: datum.data[datum.group],\n\t\t\t\t\t\t[groupMapsTo]: datum.group\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\tdata: matchingDataPoint,\n\t\t\t\t\ttype: TooltipTypes.DATAPOINT\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", false);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"graph_element_mouseout_fill_update\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"fill\", (d: any) =>\n\t\t\t\t\t\tself.model.getFillColor(d[groupMapsTo])\n\t\t\t\t\t);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bar-stacked.js","sourceRoot":"","sources":["bar-stacked.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Tools } from \"../../tools\";\nimport { Bar } from \"./bar\";\nimport { Roles, Events, CartesianOrientations } from \"../../interfaces\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { color } from \"d3-color\";\n\nexport class StackedBar extends Bar {\n\ttype = \"stacked-bar\";\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Chart options mixed with the internal configurations\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\n\t\t// Create the data and keys that'll be used by the stack layout\n\t\tconst stackData = this.model.getStackedData();\n\n\t\t// Update data on all bar groups\n\t\tconst barGroups = svg.selectAll(\"g.bars\").data(stackData, (d) => d.key);\n\n\t\t// Remove elements that need to be exited\n\t\t// We need exit at the top here to make sure that\n\t\t// Data filters are processed before entering new elements\n\t\t// Or updating existing ones\n\t\tbarGroups.exit().attr(\"opacity\", 0).remove();\n\n\t\t// Add bar groups that need to be introduced\n\t\tbarGroups\n\t\t\t.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"bars\", true)\n\t\t\t.attr(\"role\", Roles.GROUP)\n\t\t\t.attr(\"aria-label\", \"bars\");\n\n\t\t// Update data on all bars\n\t\tconst bars = svg\n\t\t\t.selectAll(\"g.bars\")\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.data(\n\t\t\t\t(d) => d,\n\t\t\t\t(d) => d.data.sharedStackKey\n\t\t\t);\n\n\t\t// Remove bars that need to be removed\n\t\tbars.exit().remove();\n\n\t\tbars.enter()\n\t\t\t.append(\"path\")\n\t\t\t.merge(bars)\n\t\t\t.classed(\"bar\", true)\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\"bar-update-enter\",\n\t\t\t\t\tanimate\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr(\"fill\", (d) => this.model.getFillColor(d[groupMapsTo]))\n\t\t\t.attr(\"d\", (d, i) => {\n\t\t\t\tconst key = d.data.sharedStackKey;\n\n\t\t\t\t/*\n\t\t\t\t * Orientation support for horizontal/vertical bar charts\n\t\t\t\t * Determine coordinates needed for a vertical set of paths\n\t\t\t\t * to draw the bars needed, and pass those coordinates down to\n\t\t\t\t * generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t */\n\t\t\t\tconst barWidth = this.getBarWidth();\n\t\t\t\tconst x0 =\n\t\t\t\t\tthis.services.cartesianScales.getDomainValue(key, i) -\n\t\t\t\t\tbarWidth / 2;\n\t\t\t\tconst x1 = x0 + barWidth;\n\t\t\t\tconst y0 = this.services.cartesianScales.getRangeValue(d[0], i);\n\t\t\t\tlet y1 = this.services.cartesianScales.getRangeValue(d[1], i);\n\n\t\t\t\t// Add the divider gap\n\t\t\t\tif (\n\t\t\t\t\tMath.abs(y1 - y0) > 0 &&\n\t\t\t\t\tMath.abs(y1 - y0) > options.bars.dividerSize\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t) {\n\t\t\t\t\t\ty1 += 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"bar\")\n\t\t\t.attr(\"aria-label\", (d) => d[1]-d[0]);\n\n\t\t// Add event listeners for the above elements\n\t\tthis.addEventListeners();\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tthis.parent\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-hover-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", (d) =>\n\t\t\t\td.datasetLabel !== hoveredElement.datum()[\"key\"] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-mouseout-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst self = this;\n\t\tthis.parent\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"graph_element_mouseover_fill_update\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"fill\", (d) =>\n\t\t\t\t\t\tcolor(self.model.getFillColor(d[groupMapsTo]))\n\t\t\t\t\t\t\t.darker(0.7)\n\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\tconst displayData = self.model.getDisplayData();\n\n\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier();\n\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier();\n\n\t\t\t\tlet matchingDataPoint = displayData.find((d) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\td[rangeIdentifier] === datum.data[datum.group] &&\n\t\t\t\t\t\td[domainIdentifier].toString() ===\n\t\t\t\t\t\t\tdatum.data.sharedStackKey &&\n\t\t\t\t\t\td[groupMapsTo] === datum.group\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tif (matchingDataPoint === undefined) {\n\t\t\t\t\tmatchingDataPoint = {\n\t\t\t\t\t\t[domainIdentifier]: datum.data.sharedStackKey,\n\t\t\t\t\t\t[rangeIdentifier]: datum.data[datum.group],\n\t\t\t\t\t\t[groupMapsTo]: datum.group\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\tdata: [matchingDataPoint]\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", false);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"graph_element_mouseout_fill_update\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"fill\", (d: any) =>\n\t\t\t\t\t\tself.model.getFillColor(d[groupMapsTo])\n\t\t\t\t\t);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\t\teventsFragment.removeEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n}\n"]}
|
package/components/graphs/pie.js
CHANGED
|
@@ -15,7 +15,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
15
15
|
import { Component } from "../component";
|
|
16
16
|
import { DOMUtils } from "../../services";
|
|
17
17
|
import { Tools } from "../../tools";
|
|
18
|
-
import { CalloutDirections, Roles,
|
|
18
|
+
import { CalloutDirections, Roles, Events } from "../../interfaces";
|
|
19
19
|
// D3 Imports
|
|
20
20
|
import { select } from "d3-selection";
|
|
21
21
|
import { arc, pie } from "d3-shape";
|
|
@@ -87,7 +87,10 @@ var Pie = /** @class */ (function (_super) {
|
|
|
87
87
|
// Sort pie layout data based off of the indecies the layout creates
|
|
88
88
|
var pieLayoutData = pieLayout(displayData).sort(function (a, b) { return a.index - b.index; });
|
|
89
89
|
// Update data on all slices
|
|
90
|
-
var slicesGroup = DOMUtils
|
|
90
|
+
var slicesGroup = DOMUtils
|
|
91
|
+
.appendOrSelect(svg, "g.slices")
|
|
92
|
+
.attr("role", Roles.GROUP)
|
|
93
|
+
.attr("aria-label", "slices");
|
|
91
94
|
var paths = slicesGroup
|
|
92
95
|
.selectAll("path.slice")
|
|
93
96
|
.data(pieLayoutData, function (d) { return d.data[groupMapsTo]; });
|
|
@@ -118,7 +121,10 @@ var Pie = /** @class */ (function (_super) {
|
|
|
118
121
|
});
|
|
119
122
|
// Draw the slice labels
|
|
120
123
|
var labelData = pieLayoutData.filter(function (x) { return x.value > 0; });
|
|
121
|
-
var labelsGroup = DOMUtils
|
|
124
|
+
var labelsGroup = DOMUtils
|
|
125
|
+
.appendOrSelect(svg, "g.labels")
|
|
126
|
+
.attr("role", Roles.GROUP)
|
|
127
|
+
.attr("aria-label", "labels");
|
|
122
128
|
var labels = labelsGroup
|
|
123
129
|
.selectAll("text.pie-label")
|
|
124
130
|
.data(labelData, function (d) { return d.data[groupMapsTo]; });
|
|
@@ -204,7 +210,10 @@ var Pie = /** @class */ (function (_super) {
|
|
|
204
210
|
this.addEventListeners();
|
|
205
211
|
};
|
|
206
212
|
Pie.prototype.renderCallouts = function (calloutData) {
|
|
207
|
-
var svg = DOMUtils
|
|
213
|
+
var svg = DOMUtils
|
|
214
|
+
.appendOrSelect(this.getContainerSVG(), "g.callouts")
|
|
215
|
+
.attr("role", Roles.GROUP)
|
|
216
|
+
.attr("aria-label", "callouts");
|
|
208
217
|
var options = this.model.getOptions();
|
|
209
218
|
// Update data on callouts
|
|
210
219
|
var callouts = svg.selectAll("g.callout").data(calloutData);
|
|
@@ -286,28 +295,38 @@ var Pie = /** @class */ (function (_super) {
|
|
|
286
295
|
this.parent
|
|
287
296
|
.selectAll("path.slice")
|
|
288
297
|
.on("mouseover", function (datum) {
|
|
298
|
+
var hoveredElement = select(this);
|
|
299
|
+
hoveredElement
|
|
300
|
+
.classed("hovered", true)
|
|
301
|
+
.transition(self.services.transitions.getTransition("pie_slice_mouseover"))
|
|
302
|
+
.attr("d", self.hoverArc);
|
|
289
303
|
// Dispatch mouse event
|
|
290
304
|
self.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOVER, {
|
|
291
305
|
element: select(this),
|
|
292
306
|
datum: datum
|
|
293
307
|
});
|
|
308
|
+
var groupMapsTo = self.model.getOptions().data.groupMapsTo;
|
|
309
|
+
// Show tooltip
|
|
310
|
+
self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
|
|
311
|
+
hoveredElement: hoveredElement,
|
|
312
|
+
items: [
|
|
313
|
+
{
|
|
314
|
+
label: datum.data[groupMapsTo],
|
|
315
|
+
value: datum.data.value,
|
|
316
|
+
color: self.model.getStrokeColor(datum.data[groupMapsTo])
|
|
317
|
+
}
|
|
318
|
+
]
|
|
319
|
+
});
|
|
294
320
|
})
|
|
295
321
|
.on("mousemove", function (datum) {
|
|
296
322
|
var hoveredElement = select(this);
|
|
297
|
-
hoveredElement
|
|
298
|
-
.classed("hovered", true)
|
|
299
|
-
.transition(self.services.transitions.getTransition("pie_slice_mouseover"))
|
|
300
|
-
.attr("d", self.hoverArc);
|
|
301
323
|
// Dispatch mouse event
|
|
302
324
|
self.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEMOVE, {
|
|
303
325
|
element: hoveredElement,
|
|
304
326
|
datum: datum
|
|
305
327
|
});
|
|
306
328
|
// Show tooltip
|
|
307
|
-
self.services.events.dispatchEvent(Events.Tooltip.
|
|
308
|
-
hoveredElement: hoveredElement,
|
|
309
|
-
type: TooltipTypes.DATAPOINT
|
|
310
|
-
});
|
|
329
|
+
self.services.events.dispatchEvent(Events.Tooltip.MOVE);
|
|
311
330
|
})
|
|
312
331
|
.on("click", function (datum) {
|
|
313
332
|
// Dispatch mouse event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pie.js","sourceRoot":"","sources":["pie.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\nimport {\n\tCalloutDirections,\n\tRoles,\n\tTooltipTypes,\n\tEvents\n} from \"../../interfaces\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { arc, pie } from \"d3-shape\";\nimport { interpolate } from \"d3-interpolate\";\n\n// Pie slice tween function\nfunction arcTween(a, arcFunc) {\n\tconst i = interpolate(this._current, a);\n\n\treturn (t) => {\n\t\tthis._current = i(t);\n\t\treturn arcFunc(this._current);\n\t};\n}\n\nexport class Pie extends Component {\n\ttype = \"pie\";\n\n\t// We need to store our arcs\n\t// So that addEventListeners()\n\t// Can access them\n\tarc: any;\n\thoverArc: any;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\tgetInnerRadius() {\n\t\tconst options = this.model.getOptions();\n\t\treturn options.pie.innerRadius;\n\t}\n\n\trender(animate = true) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\t// Compute the outer radius needed\n\t\tconst radius = this.computeRadius();\n\n\t\tthis.arc = arc().innerRadius(this.getInnerRadius()).outerRadius(radius);\n\n\t\t// Set the hover arc radius\n\t\tthis.hoverArc = arc()\n\t\t\t.innerRadius(this.getInnerRadius())\n\t\t\t.outerRadius(radius + options.pie.hoverArc.outerRadiusOffset);\n\n\t\t// Setup the pie layout\n\t\tconst pieLayout = pie()\n\t\t\t.value((d: any) => d.value)\n\t\t\t.sort(null)\n\t\t\t.padAngle(options.pie.padAngle);\n\n\t\t// Sort pie layout data based off of the indecies the layout creates\n\t\tconst pieLayoutData = pieLayout(displayData).sort(\n\t\t\t(a: any, b: any) => a.index - b.index\n\t\t);\n\n\t\t// Update data on all slices\n\t\tconst slicesGroup = DOMUtils.appendOrSelect(svg, \"g.slices\").attr(\n\t\t\t\"role\",\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst paths = slicesGroup\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.data(pieLayoutData, (d) => d.data[groupMapsTo]);\n\n\t\t// Remove slices that need to be exited\n\t\tpaths.exit().attr(\"opacity\", 0).remove();\n\n\t\t// Add new slices that are being introduced\n\t\tconst enteringPaths = paths\n\t\t\t.enter()\n\t\t\t.append(\"path\")\n\t\t\t.classed(\"slice\", true)\n\t\t\t.attr(\"opacity\", 0);\n\n\t\t// Update styles & position on existing and entering slices\n\t\tenteringPaths\n\t\t\t.merge(paths)\n\t\t\t.attr(\"fill\", (d) => self.model.getFillColor(d.data[groupMapsTo]))\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\"pie-slice-enter-update\",\n\t\t\t\t\tanimate\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"slice\")\n\t\t\t.attr(\n\t\t\t\t\"aria-label\",\n\t\t\t\t(d) =>\n\t\t\t\t\t`${d.value}, ${\n\t\t\t\t\t\tTools.convertValueToPercentage(\n\t\t\t\t\t\t\td.data.value,\n\t\t\t\t\t\t\tdisplayData\n\t\t\t\t\t\t) + \"%\"\n\t\t\t\t\t}`\n\t\t\t)\n\t\t\t// Tween\n\t\t\t.attrTween(\"d\", function (a) {\n\t\t\t\treturn arcTween.bind(this)(a, self.arc);\n\t\t\t});\n\n\t\t// Draw the slice labels\n\t\tconst labelData = pieLayoutData.filter((x) => x.value > 0);\n\t\tconst labelsGroup = DOMUtils.appendOrSelect(svg, \"g.labels\").attr(\n\t\t\t\"role\",\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst labels = labelsGroup\n\t\t\t.selectAll(\"text.pie-label\")\n\t\t\t.data(labelData, (d: any) => d.data[groupMapsTo]);\n\n\t\t// Remove labels that are existing\n\t\tlabels.exit().attr(\"opacity\", 0).remove();\n\n\t\t// Add labels that are being introduced\n\t\tconst enteringLabels = labels\n\t\t\t.enter()\n\t\t\t.append(\"text\")\n\t\t\t.classed(\"pie-label\", true);\n\n\t\t// Update styles & position on existing & entering labels\n\t\tconst calloutData = [];\n\t\tenteringLabels\n\t\t\t.merge(labels)\n\t\t\t.style(\"text-anchor\", \"middle\")\n\t\t\t.text((d) => {\n\t\t\t\tif (options.pie.labels.formatter) {\n\t\t\t\t\treturn options.pie.labels.formatter(d);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\tTools.convertValueToPercentage(d.data.value, displayData) +\n\t\t\t\t\t\"%\"\n\t\t\t\t);\n\t\t\t})\n\t\t\t// Calculate dimensions in order to transform\n\t\t\t.datum(function (d) {\n\t\t\t\tconst marginedRadius = radius + 7;\n\n\t\t\t\tconst theta = (d.endAngle - d.startAngle) / 2 + d.startAngle;\n\t\t\t\tconst deg = (theta / Math.PI) * 180;\n\n\t\t\t\tconst textLength = this.getComputedTextLength();\n\t\t\t\td.textOffsetX = textLength / 2;\n\t\t\t\td.textOffsetY = deg > 90 && deg < 270 ? 10 : 0;\n\n\t\t\t\td.xPosition =\n\t\t\t\t\t(d.textOffsetX + marginedRadius) * Math.sin(theta);\n\t\t\t\td.yPosition =\n\t\t\t\t\t(d.textOffsetY + marginedRadius) * -Math.cos(theta);\n\n\t\t\t\treturn d;\n\t\t\t})\n\t\t\t.attr(\"transform\", function (d, i) {\n\t\t\t\tconst totalSlices = labelData.length;\n\t\t\t\tconst sliceAngleDeg =\n\t\t\t\t\t(d.endAngle - d.startAngle) * (180 / Math.PI);\n\n\t\t\t\t// check if last 2 slices (or just last) are < the threshold\n\t\t\t\tif (i >= totalSlices - 2) {\n\t\t\t\t\tif (sliceAngleDeg < options.pie.callout.minSliceDegree) {\n\t\t\t\t\t\tlet labelTranslateX, labelTranslateY;\n\t\t\t\t\t\tif (d.index === totalSlices - 1) {\n\t\t\t\t\t\t\tlabelTranslateX =\n\t\t\t\t\t\t\t\td.xPosition +\n\t\t\t\t\t\t\t\toptions.pie.callout.offsetX +\n\t\t\t\t\t\t\t\toptions.pie.callout.textMargin +\n\t\t\t\t\t\t\t\td.textOffsetX;\n\t\t\t\t\t\t\tlabelTranslateY =\n\t\t\t\t\t\t\t\td.yPosition - options.pie.callout.offsetY;\n\n\t\t\t\t\t\t\t// Set direction of callout\n\t\t\t\t\t\t\td.direction = CalloutDirections.RIGHT;\n\t\t\t\t\t\t\tcalloutData.push(d);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabelTranslateX =\n\t\t\t\t\t\t\t\td.xPosition -\n\t\t\t\t\t\t\t\toptions.pie.callout.offsetX -\n\t\t\t\t\t\t\t\td.textOffsetX -\n\t\t\t\t\t\t\t\toptions.pie.callout.textMargin;\n\t\t\t\t\t\t\tlabelTranslateY =\n\t\t\t\t\t\t\t\td.yPosition - options.pie.callout.offsetY;\n\n\t\t\t\t\t\t\t// Set direction of callout\n\t\t\t\t\t\t\td.direction = CalloutDirections.LEFT;\n\t\t\t\t\t\t\tcalloutData.push(d);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn `translate(${labelTranslateX}, ${labelTranslateY})`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn `translate(${d.xPosition}, ${d.yPosition})`;\n\t\t\t});\n\n\t\t// Render pie label callouts\n\t\tthis.renderCallouts(calloutData);\n\n\t\t// Position Pie\n\t\tconst pieTranslateX = radius + options.pie.xOffset;\n\t\tlet pieTranslateY = radius + options.pie.yOffset;\n\t\tif (calloutData.length > 0) {\n\t\t\tpieTranslateY += options.pie.yOffsetCallout;\n\t\t}\n\t\tsvg.attr(\"transform\", `translate(${pieTranslateX}, ${pieTranslateY})`);\n\n\t\t// Add event listeners\n\t\tthis.addEventListeners();\n\t}\n\n\trenderCallouts(calloutData: any[]) {\n\t\tconst svg = DOMUtils.appendOrSelect(\n\t\t\tthis.getContainerSVG(),\n\t\t\t\"g.callouts\"\n\t\t).attr(\"role\", Roles.GROUP);\n\t\tconst options = this.model.getOptions();\n\n\t\t// Update data on callouts\n\t\tconst callouts = svg.selectAll(\"g.callout\").data(calloutData);\n\n\t\tcallouts.exit().remove();\n\n\t\tconst enteringCallouts = callouts\n\t\t\t.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"callout\", true)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", `${Roles.GRAPHICS_SYMBOL} ${Roles.GROUP}`)\n\t\t\t.attr(\"aria-roledescription\", \"label callout\");\n\n\t\t// Update data values for each callout\n\t\t// For the horizontal and vertical lines to use\n\t\tenteringCallouts.merge(callouts).datum(function (d) {\n\t\t\tconst { xPosition, yPosition, direction } = d;\n\n\t\t\tif (direction === CalloutDirections.RIGHT) {\n\t\t\t\td.startPos = {\n\t\t\t\t\tx: xPosition,\n\t\t\t\t\ty: yPosition + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// end position for the callout line\n\t\t\t\td.endPos = {\n\t\t\t\t\tx: xPosition + options.pie.callout.offsetX,\n\t\t\t\t\ty: yPosition - options.pie.callout.offsetY + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// the intersection point of the vertical and horizontal line\n\t\t\t\td.intersectPointX =\n\t\t\t\t\td.endPos.x - options.pie.callout.horizontalLineLength;\n\t\t\t} else {\n\t\t\t\t// start position for the callout line\n\t\t\t\td.startPos = {\n\t\t\t\t\tx: xPosition,\n\t\t\t\t\ty: yPosition + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// end position for the callout line should be bottom aligned to the title\n\t\t\t\td.endPos = {\n\t\t\t\t\tx: xPosition - options.pie.callout.offsetX,\n\t\t\t\t\ty: yPosition - options.pie.callout.offsetY + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// the intersection point of the vertical and horizontal line\n\t\t\t\td.intersectPointX =\n\t\t\t\t\td.endPos.x + options.pie.callout.horizontalLineLength;\n\t\t\t}\n\n\t\t\t// Store the necessary data in the DOM element\n\t\t\treturn d;\n\t\t});\n\n\t\t// draw vertical line\n\t\tconst enteringVerticalLines = enteringCallouts\n\t\t\t.append(\"line\")\n\t\t\t.classed(\"vertical-line\", true);\n\n\t\tenteringVerticalLines\n\t\t\t.merge(svg.selectAll(\"line.vertical-line\"))\n\t\t\t.datum(function (d: any) {\n\t\t\t\treturn select(this.parentNode).datum();\n\t\t\t})\n\t\t\t.style(\"stroke-width\", \"1px\")\n\t\t\t.attr(\"x1\", (d) => d.startPos.x)\n\t\t\t.attr(\"y1\", (d) => d.startPos.y)\n\t\t\t.attr(\"x2\", (d) => d.intersectPointX)\n\t\t\t.attr(\"y2\", (d) => d.endPos.y);\n\n\t\t// draw horizontal line\n\t\tconst enteringHorizontalLines = enteringCallouts\n\t\t\t.append(\"line\")\n\t\t\t.classed(\"horizontal-line\", true);\n\n\t\tenteringHorizontalLines\n\t\t\t.merge(svg.selectAll(\"line.horizontal-line\"))\n\t\t\t.datum(function (d: any) {\n\t\t\t\treturn select(this.parentNode).datum();\n\t\t\t})\n\t\t\t.style(\"stroke-width\", \"1px\")\n\t\t\t.attr(\"x1\", (d) => d.intersectPointX)\n\t\t\t.attr(\"y1\", (d) => d.endPos.y)\n\t\t\t.attr(\"x2\", (d) => d.endPos.x)\n\t\t\t.attr(\"y2\", (d) => d.endPos.y);\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\t\tconst { groupMapsTo } = this.model.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-hover-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", (d) =>\n\t\t\t\td.data[groupMapsTo] !== hoveredElement.datum()[\"name\"] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-mouseout-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOVER, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed(\"hovered\", true)\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"pie_slice_mouseover\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"d\", self.hoverArc);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEMOVE, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\ttype: TooltipTypes.DATAPOINT\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed(\"hovered\", false)\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"pie_slice_mouseover\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"d\", self.arc);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t// Helper functions\n\tprotected computeRadius() {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true\n\t\t});\n\t\tconst radius: number = Math.min(width, height) / 2;\n\n\t\treturn radius + options.pie.radiusOffset;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pie.js","sourceRoot":"","sources":["pie.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\nimport { CalloutDirections, Roles, Events } from \"../../interfaces\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { arc, pie } from \"d3-shape\";\nimport { interpolate } from \"d3-interpolate\";\n\n// Pie slice tween function\nfunction arcTween(a, arcFunc) {\n\tconst i = interpolate(this._current, a);\n\n\treturn (t) => {\n\t\tthis._current = i(t);\n\t\treturn arcFunc(this._current);\n\t};\n}\n\nexport class Pie extends Component {\n\ttype = \"pie\";\n\n\t// We need to store our arcs\n\t// So that addEventListeners()\n\t// Can access them\n\tarc: any;\n\thoverArc: any;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\tgetInnerRadius() {\n\t\tconst options = this.model.getOptions();\n\t\treturn options.pie.innerRadius;\n\t}\n\n\trender(animate = true) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\t// Compute the outer radius needed\n\t\tconst radius = this.computeRadius();\n\n\t\tthis.arc = arc().innerRadius(this.getInnerRadius()).outerRadius(radius);\n\n\t\t// Set the hover arc radius\n\t\tthis.hoverArc = arc()\n\t\t\t.innerRadius(this.getInnerRadius())\n\t\t\t.outerRadius(radius + options.pie.hoverArc.outerRadiusOffset);\n\n\t\t// Setup the pie layout\n\t\tconst pieLayout = pie()\n\t\t\t.value((d: any) => d.value)\n\t\t\t.sort(null)\n\t\t\t.padAngle(options.pie.padAngle);\n\n\t\t// Sort pie layout data based off of the indecies the layout creates\n\t\tconst pieLayoutData = pieLayout(displayData).sort(\n\t\t\t(a: any, b: any) => a.index - b.index\n\t\t);\n\n\t\t// Update data on all slices\n\t\tconst slicesGroup = DOMUtils\n\t\t\t.appendOrSelect(svg, \"g.slices\")\n\t\t\t.attr(\"role\", Roles.GROUP)\n\t\t\t.attr(\"aria-label\", \"slices\");\n\n\t\tconst paths = slicesGroup\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.data(pieLayoutData, (d) => d.data[groupMapsTo]);\n\n\t\t// Remove slices that need to be exited\n\t\tpaths.exit().attr(\"opacity\", 0).remove();\n\n\t\t// Add new slices that are being introduced\n\t\tconst enteringPaths = paths\n\t\t\t.enter()\n\t\t\t.append(\"path\")\n\t\t\t.classed(\"slice\", true)\n\t\t\t.attr(\"opacity\", 0);\n\n\t\t// Update styles & position on existing and entering slices\n\t\tenteringPaths\n\t\t\t.merge(paths)\n\t\t\t.attr(\"fill\", (d) => self.model.getFillColor(d.data[groupMapsTo]))\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\"pie-slice-enter-update\",\n\t\t\t\t\tanimate\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"slice\")\n\t\t\t.attr(\n\t\t\t\t\"aria-label\",\n\t\t\t\t(d) =>\n\t\t\t\t\t`${d.value}, ${\n\t\t\t\t\t\tTools.convertValueToPercentage(\n\t\t\t\t\t\t\td.data.value,\n\t\t\t\t\t\t\tdisplayData\n\t\t\t\t\t\t) + \"%\"\n\t\t\t\t\t}`\n\t\t\t)\n\t\t\t// Tween\n\t\t\t.attrTween(\"d\", function (a) {\n\t\t\t\treturn arcTween.bind(this)(a, self.arc);\n\t\t\t});\n\n\t\t// Draw the slice labels\n\t\tconst labelData = pieLayoutData.filter((x) => x.value > 0);\n\t\tconst labelsGroup = DOMUtils\n\t\t\t.appendOrSelect(svg, \"g.labels\")\n\t\t\t.attr(\"role\", Roles.GROUP)\n\t\t\t.attr(\"aria-label\", \"labels\");\n\n\t\tconst labels = labelsGroup\n\t\t\t.selectAll(\"text.pie-label\")\n\t\t\t.data(labelData, (d: any) => d.data[groupMapsTo]);\n\n\t\t// Remove labels that are existing\n\t\tlabels.exit().attr(\"opacity\", 0).remove();\n\n\t\t// Add labels that are being introduced\n\t\tconst enteringLabels = labels\n\t\t\t.enter()\n\t\t\t.append(\"text\")\n\t\t\t.classed(\"pie-label\", true);\n\n\t\t// Update styles & position on existing & entering labels\n\t\tconst calloutData = [];\n\t\tenteringLabels\n\t\t\t.merge(labels)\n\t\t\t.style(\"text-anchor\", \"middle\")\n\t\t\t.text((d) => {\n\t\t\t\tif (options.pie.labels.formatter) {\n\t\t\t\t\treturn options.pie.labels.formatter(d);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\tTools.convertValueToPercentage(d.data.value, displayData) +\n\t\t\t\t\t\"%\"\n\t\t\t\t);\n\t\t\t})\n\t\t\t// Calculate dimensions in order to transform\n\t\t\t.datum(function (d) {\n\t\t\t\tconst marginedRadius = radius + 7;\n\n\t\t\t\tconst theta = (d.endAngle - d.startAngle) / 2 + d.startAngle;\n\t\t\t\tconst deg = (theta / Math.PI) * 180;\n\n\t\t\t\tconst textLength = this.getComputedTextLength();\n\t\t\t\td.textOffsetX = textLength / 2;\n\t\t\t\td.textOffsetY = deg > 90 && deg < 270 ? 10 : 0;\n\n\t\t\t\td.xPosition =\n\t\t\t\t\t(d.textOffsetX + marginedRadius) * Math.sin(theta);\n\t\t\t\td.yPosition =\n\t\t\t\t\t(d.textOffsetY + marginedRadius) * -Math.cos(theta);\n\n\t\t\t\treturn d;\n\t\t\t})\n\t\t\t.attr(\"transform\", function (d, i) {\n\t\t\t\tconst totalSlices = labelData.length;\n\t\t\t\tconst sliceAngleDeg =\n\t\t\t\t\t(d.endAngle - d.startAngle) * (180 / Math.PI);\n\n\t\t\t\t// check if last 2 slices (or just last) are < the threshold\n\t\t\t\tif (i >= totalSlices - 2) {\n\t\t\t\t\tif (sliceAngleDeg < options.pie.callout.minSliceDegree) {\n\t\t\t\t\t\tlet labelTranslateX, labelTranslateY;\n\t\t\t\t\t\tif (d.index === totalSlices - 1) {\n\t\t\t\t\t\t\tlabelTranslateX =\n\t\t\t\t\t\t\t\td.xPosition +\n\t\t\t\t\t\t\t\toptions.pie.callout.offsetX +\n\t\t\t\t\t\t\t\toptions.pie.callout.textMargin +\n\t\t\t\t\t\t\t\td.textOffsetX;\n\t\t\t\t\t\t\tlabelTranslateY =\n\t\t\t\t\t\t\t\td.yPosition - options.pie.callout.offsetY;\n\n\t\t\t\t\t\t\t// Set direction of callout\n\t\t\t\t\t\t\td.direction = CalloutDirections.RIGHT;\n\t\t\t\t\t\t\tcalloutData.push(d);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabelTranslateX =\n\t\t\t\t\t\t\t\td.xPosition -\n\t\t\t\t\t\t\t\toptions.pie.callout.offsetX -\n\t\t\t\t\t\t\t\td.textOffsetX -\n\t\t\t\t\t\t\t\toptions.pie.callout.textMargin;\n\t\t\t\t\t\t\tlabelTranslateY =\n\t\t\t\t\t\t\t\td.yPosition - options.pie.callout.offsetY;\n\n\t\t\t\t\t\t\t// Set direction of callout\n\t\t\t\t\t\t\td.direction = CalloutDirections.LEFT;\n\t\t\t\t\t\t\tcalloutData.push(d);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn `translate(${labelTranslateX}, ${labelTranslateY})`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn `translate(${d.xPosition}, ${d.yPosition})`;\n\t\t\t});\n\n\t\t// Render pie label callouts\n\t\tthis.renderCallouts(calloutData);\n\n\t\t// Position Pie\n\t\tconst pieTranslateX = radius + options.pie.xOffset;\n\t\tlet pieTranslateY = radius + options.pie.yOffset;\n\t\tif (calloutData.length > 0) {\n\t\t\tpieTranslateY += options.pie.yOffsetCallout;\n\t\t}\n\t\tsvg.attr(\"transform\", `translate(${pieTranslateX}, ${pieTranslateY})`);\n\n\t\t// Add event listeners\n\t\tthis.addEventListeners();\n\t}\n\n\trenderCallouts(calloutData: any[]) {\n\t\tconst svg = DOMUtils\n\t\t\t.appendOrSelect(\n\t\t\t\tthis.getContainerSVG(),\n\t\t\t\t\"g.callouts\"\n\t\t\t)\n\t\t\t.attr(\"role\", Roles.GROUP)\n\t\t\t.attr(\"aria-label\", \"callouts\");\n\n\t\tconst options = this.model.getOptions();\n\n\t\t// Update data on callouts\n\t\tconst callouts = svg.selectAll(\"g.callout\").data(calloutData);\n\n\t\tcallouts.exit().remove();\n\n\t\tconst enteringCallouts = callouts\n\t\t\t.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"callout\", true)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", `${Roles.GRAPHICS_SYMBOL} ${Roles.GROUP}`)\n\t\t\t.attr(\"aria-roledescription\", \"label callout\");\n\n\t\t// Update data values for each callout\n\t\t// For the horizontal and vertical lines to use\n\t\tenteringCallouts.merge(callouts).datum(function (d) {\n\t\t\tconst { xPosition, yPosition, direction } = d;\n\n\t\t\tif (direction === CalloutDirections.RIGHT) {\n\t\t\t\td.startPos = {\n\t\t\t\t\tx: xPosition,\n\t\t\t\t\ty: yPosition + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// end position for the callout line\n\t\t\t\td.endPos = {\n\t\t\t\t\tx: xPosition + options.pie.callout.offsetX,\n\t\t\t\t\ty: yPosition - options.pie.callout.offsetY + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// the intersection point of the vertical and horizontal line\n\t\t\t\td.intersectPointX =\n\t\t\t\t\td.endPos.x - options.pie.callout.horizontalLineLength;\n\t\t\t} else {\n\t\t\t\t// start position for the callout line\n\t\t\t\td.startPos = {\n\t\t\t\t\tx: xPosition,\n\t\t\t\t\ty: yPosition + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// end position for the callout line should be bottom aligned to the title\n\t\t\t\td.endPos = {\n\t\t\t\t\tx: xPosition - options.pie.callout.offsetX,\n\t\t\t\t\ty: yPosition - options.pie.callout.offsetY + d.textOffsetY\n\t\t\t\t};\n\n\t\t\t\t// the intersection point of the vertical and horizontal line\n\t\t\t\td.intersectPointX =\n\t\t\t\t\td.endPos.x + options.pie.callout.horizontalLineLength;\n\t\t\t}\n\n\t\t\t// Store the necessary data in the DOM element\n\t\t\treturn d;\n\t\t});\n\n\t\t// draw vertical line\n\t\tconst enteringVerticalLines = enteringCallouts\n\t\t\t.append(\"line\")\n\t\t\t.classed(\"vertical-line\", true);\n\n\t\tenteringVerticalLines\n\t\t\t.merge(svg.selectAll(\"line.vertical-line\"))\n\t\t\t.datum(function (d: any) {\n\t\t\t\treturn select(this.parentNode).datum();\n\t\t\t})\n\t\t\t.style(\"stroke-width\", \"1px\")\n\t\t\t.attr(\"x1\", (d) => d.startPos.x)\n\t\t\t.attr(\"y1\", (d) => d.startPos.y)\n\t\t\t.attr(\"x2\", (d) => d.intersectPointX)\n\t\t\t.attr(\"y2\", (d) => d.endPos.y);\n\n\t\t// draw horizontal line\n\t\tconst enteringHorizontalLines = enteringCallouts\n\t\t\t.append(\"line\")\n\t\t\t.classed(\"horizontal-line\", true);\n\n\t\tenteringHorizontalLines\n\t\t\t.merge(svg.selectAll(\"line.horizontal-line\"))\n\t\t\t.datum(function (d: any) {\n\t\t\t\treturn select(this.parentNode).datum();\n\t\t\t})\n\t\t\t.style(\"stroke-width\", \"1px\")\n\t\t\t.attr(\"x1\", (d) => d.intersectPointX)\n\t\t\t.attr(\"y1\", (d) => d.endPos.y)\n\t\t\t.attr(\"x2\", (d) => d.endPos.x)\n\t\t\t.attr(\"y2\", (d) => d.endPos.y);\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\t\tconst { groupMapsTo } = this.model.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-hover-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", (d) =>\n\t\t\t\td.data[groupMapsTo] !== hoveredElement.datum()[\"name\"] ? 0.3 : 1\n\t\t\t);\n\t};\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\"legend-mouseout-bar\")\n\t\t\t)\n\t\t\t.attr(\"opacity\", 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent\n\t\t\t.selectAll(\"path.slice\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed(\"hovered\", true)\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"pie_slice_mouseover\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"d\", self.hoverArc);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOVER, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\tconst { groupMapsTo } = self.model.getOptions().data;\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: datum.data[groupMapsTo],\n\t\t\t\t\t\t\tvalue: datum.data.value,\n\t\t\t\t\t\t\tcolor: self.model.getStrokeColor(\n\t\t\t\t\t\t\t\tdatum.data[groupMapsTo]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEMOVE, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement\n\t\t\t\t\t.classed(\"hovered\", false)\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tself.services.transitions.getTransition(\n\t\t\t\t\t\t\t\"pie_slice_mouseover\"\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"d\", self.arc);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Pie.SLICE_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, {\n\t\t\t\t\thoveredElement\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t// Helper functions\n\tprotected computeRadius() {\n\t\tconst options = this.model.getOptions();\n\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true\n\t\t});\n\t\tconst radius: number = Math.min(width, height) / 2;\n\n\t\treturn radius + options.pie.radiusOffset;\n\t}\n}\n"]}
|
|
@@ -14,7 +14,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
14
14
|
// Internal Imports
|
|
15
15
|
import { Component } from "../component";
|
|
16
16
|
import { DOMUtils } from "../../services";
|
|
17
|
-
import { Events,
|
|
17
|
+
import { Events, Roles } from "../../interfaces";
|
|
18
18
|
import { Tools } from "../../tools";
|
|
19
19
|
import { radialLabelPlacement, radToDeg, polarToCartesianCoords, distanceBetweenPointOnCircAndVerticalDiameter } from "../../services/angle-utils";
|
|
20
20
|
// D3 Imports
|
|
@@ -469,14 +469,12 @@ var Radar = /** @class */ (function (_super) {
|
|
|
469
469
|
this.parent
|
|
470
470
|
.selectAll(".x-axes-rect > rect")
|
|
471
471
|
.on("mouseover", function (datum) {
|
|
472
|
+
var hoveredElement = select(this);
|
|
472
473
|
// Dispatch mouse event
|
|
473
474
|
self.services.events.dispatchEvent(Events.Radar.X_AXIS_MOUSEOVER, {
|
|
474
|
-
element:
|
|
475
|
+
element: hoveredElement,
|
|
475
476
|
datum: datum
|
|
476
477
|
});
|
|
477
|
-
})
|
|
478
|
-
.on("mousemove", function (datum) {
|
|
479
|
-
var hoveredElement = select(this);
|
|
480
478
|
var axisLine = self.parent.select(".x-axes .x-axis-" + Tools.kebabCase(datum));
|
|
481
479
|
var dots = self.parent.selectAll(".dots circle." + Tools.kebabCase(datum));
|
|
482
480
|
// Change style
|
|
@@ -486,19 +484,31 @@ var Radar = /** @class */ (function (_super) {
|
|
|
486
484
|
dots.classed("hovered", true)
|
|
487
485
|
.attr("opacity", 1)
|
|
488
486
|
.attr("r", dotsRadius);
|
|
489
|
-
// Dispatch mouse event
|
|
490
|
-
self.services.events.dispatchEvent(Events.Radar.X_AXIS_MOUSEMOVE, {
|
|
491
|
-
element: hoveredElement,
|
|
492
|
-
datum: datum
|
|
493
|
-
});
|
|
494
487
|
// get the items that should be highlighted
|
|
495
488
|
var itemsToHighlight = self.displayDataNormalized.filter(function (d) { return d[angle] === datum; });
|
|
489
|
+
var options = self.model.getOptions();
|
|
490
|
+
var groupMapsTo = options.data.groupMapsTo;
|
|
491
|
+
var valueMapsTo = Tools.getProperty(options, "radar", "axes", "value");
|
|
496
492
|
// Show tooltip
|
|
497
493
|
self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
|
|
498
494
|
hoveredElement: hoveredElement,
|
|
499
|
-
|
|
500
|
-
|
|
495
|
+
items: itemsToHighlight
|
|
496
|
+
.filter(function (datum) { return typeof datum[valueMapsTo] === "number"; })
|
|
497
|
+
.map(function (datum) { return ({
|
|
498
|
+
label: datum[groupMapsTo],
|
|
499
|
+
value: datum[valueMapsTo],
|
|
500
|
+
color: self.model.getStrokeColor(datum[groupMapsTo])
|
|
501
|
+
}); })
|
|
501
502
|
});
|
|
503
|
+
})
|
|
504
|
+
.on("mousemove", function (datum) {
|
|
505
|
+
var hoveredElement = select(this);
|
|
506
|
+
// Dispatch mouse event
|
|
507
|
+
self.services.events.dispatchEvent(Events.Radar.X_AXIS_MOUSEMOVE, {
|
|
508
|
+
element: hoveredElement,
|
|
509
|
+
datum: datum
|
|
510
|
+
});
|
|
511
|
+
self.services.events.dispatchEvent(Events.Tooltip.MOVE);
|
|
502
512
|
})
|
|
503
513
|
.on("click", function (datum) {
|
|
504
514
|
// Dispatch mouse event
|
|
@@ -522,12 +532,7 @@ var Radar = /** @class */ (function (_super) {
|
|
|
522
532
|
datum: datum
|
|
523
533
|
});
|
|
524
534
|
// Hide tooltip
|
|
525
|
-
self.services.events.dispatchEvent(
|
|
526
|
-
hoveredElement: hoveredElement
|
|
527
|
-
});
|
|
528
|
-
self.services.events.dispatchEvent(Events.Tooltip.HIDE, {
|
|
529
|
-
hoveredElement: hoveredElement
|
|
530
|
-
});
|
|
535
|
+
self.services.events.dispatchEvent(Events.Tooltip.HIDE);
|
|
531
536
|
});
|
|
532
537
|
};
|
|
533
538
|
return Radar;
|