@carbon/charts 0.30.5 → 0.30.9
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 +38 -0
- package/README.md +14 -8
- package/build/demo/data/bar.d.ts +56 -94
- package/build/demo/data/bubble.d.ts +58 -13
- package/build/demo/data/donut.d.ts +3 -6
- package/build/demo/data/line.d.ts +35 -35
- package/build/demo/data/pie.d.ts +3 -6
- package/build/demo/data/scatter.d.ts +33 -20
- package/build/demo/data/step.d.ts +15 -16
- package/build/demo/data/time-series-axis.d.ts +12 -48
- package/build/src/charts/bar-grouped.d.ts +2 -2
- package/build/src/charts/bar-simple.d.ts +2 -4
- package/build/src/components/essentials/legend.d.ts +0 -4
- package/build/src/components/essentials/tooltip-bar.d.ts +1 -1
- package/build/src/components/essentials/tooltip-pie.d.ts +5 -0
- package/build/src/components/essentials/tooltip-scatter.d.ts +1 -1
- package/build/src/components/graphs/bar-grouped.d.ts +6 -4
- package/build/src/components/graphs/bar-simple.d.ts +0 -1
- package/build/src/components/graphs/bar-stacked.d.ts +0 -1
- package/build/src/components/graphs/bubble.d.ts +0 -1
- package/build/src/components/graphs/line.d.ts +3 -1
- package/build/src/components/graphs/pie.d.ts +0 -1
- package/build/src/components/graphs/scatter.d.ts +0 -1
- package/build/src/components/index.d.ts +1 -0
- package/build/src/interfaces/axis-scales.d.ts +4 -16
- package/build/src/interfaces/charts.d.ts +23 -1
- package/build/src/interfaces/enums.d.ts +0 -4
- package/build/src/interfaces/events.d.ts +20 -0
- package/build/src/model-pie.d.ts +1 -7
- package/build/src/model.d.ts +31 -13
- package/build/src/services/scales-cartesian.d.ts +11 -3
- package/build/src/tools.d.ts +2 -2
- package/build/stories/tutorials.stories.d.ts +1 -0
- package/bundle.js +1 -1
- package/chart.js +2 -2
- package/chart.js.map +1 -1
- package/charts/bar-grouped.d.ts +2 -2
- package/charts/bar-grouped.js.map +1 -1
- package/charts/bar-simple.d.ts +2 -4
- package/charts/bar-simple.js +0 -2
- package/charts/bar-simple.js.map +1 -1
- package/charts/donut.js +2 -2
- package/charts/donut.js.map +1 -1
- package/charts/pie.js +2 -2
- package/charts/pie.js.map +1 -1
- package/components/axes/grid.js +12 -19
- package/components/axes/grid.js.map +1 -1
- package/components/component.js +1 -1
- package/components/component.js.map +1 -1
- package/components/essentials/legend.d.ts +0 -4
- package/components/essentials/legend.js +8 -22
- package/components/essentials/legend.js.map +1 -1
- package/components/essentials/title.js +4 -4
- package/components/essentials/title.js.map +1 -1
- package/components/essentials/tooltip-bar.d.ts +1 -1
- package/components/essentials/tooltip-bar.js +13 -5
- package/components/essentials/tooltip-bar.js.map +1 -1
- package/components/essentials/tooltip-pie.d.ts +5 -0
- package/components/essentials/tooltip-pie.js +40 -0
- package/components/essentials/tooltip-pie.js.map +1 -0
- package/components/essentials/tooltip-scatter.d.ts +1 -1
- package/components/essentials/tooltip-scatter.js +8 -6
- package/components/essentials/tooltip-scatter.js.map +1 -1
- package/components/essentials/tooltip.js +14 -17
- package/components/essentials/tooltip.js.map +1 -1
- package/components/graphs/bar-grouped.d.ts +6 -4
- package/components/graphs/bar-grouped.js +60 -32
- package/components/graphs/bar-grouped.js.map +1 -1
- package/components/graphs/bar-simple.d.ts +0 -1
- package/components/graphs/bar-simple.js +12 -30
- package/components/graphs/bar-simple.js.map +1 -1
- package/components/graphs/bar-stacked.d.ts +0 -1
- package/components/graphs/bar-stacked.js +26 -108
- package/components/graphs/bar-stacked.js.map +1 -1
- package/components/graphs/bar.js.map +1 -1
- package/components/graphs/bubble.d.ts +0 -1
- package/components/graphs/bubble.js +16 -20
- package/components/graphs/bubble.js.map +1 -1
- package/components/graphs/donut.js +1 -1
- package/components/graphs/donut.js.map +1 -1
- package/components/graphs/line.d.ts +3 -1
- package/components/graphs/line.js +41 -30
- package/components/graphs/line.js.map +1 -1
- package/components/graphs/pie.d.ts +0 -1
- package/components/graphs/pie.js +13 -20
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/scatter.d.ts +0 -1
- package/components/graphs/scatter.js +26 -41
- package/components/graphs/scatter.js.map +1 -1
- package/components/index.d.ts +1 -0
- package/components/index.js +1 -0
- package/components/index.js.map +1 -1
- package/configuration.js +7 -0
- package/configuration.js.map +1 -1
- package/demo/data/bar.d.ts +56 -94
- package/demo/data/bar.js +106 -271
- package/demo/data/bar.js.map +1 -1
- package/demo/data/bubble.d.ts +58 -13
- package/demo/data/bubble.js +74 -174
- package/demo/data/bubble.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/donut.d.ts +3 -6
- package/demo/data/index.js +22 -4
- package/demo/data/index.js.map +1 -1
- package/demo/data/line.d.ts +35 -35
- package/demo/data/line.js +70 -196
- package/demo/data/line.js.map +1 -1
- package/demo/data/pie.d.ts +3 -6
- package/demo/data/pie.js +8 -10
- package/demo/data/pie.js.map +1 -1
- package/demo/data/scatter.d.ts +33 -20
- package/demo/data/scatter.js +50 -68
- package/demo/data/scatter.js.map +1 -1
- package/demo/data/step.d.ts +15 -16
- package/demo/data/time-series-axis.d.ts +12 -48
- package/demo/data/time-series-axis.js +34 -46
- package/demo/data/time-series-axis.js.map +1 -1
- package/demo/styles.css +28 -0
- 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 +38 -37
- package/interfaces/axis-scales.d.ts +4 -16
- package/interfaces/axis-scales.js.map +1 -1
- package/interfaces/charts.d.ts +23 -1
- package/interfaces/charts.js.map +1 -1
- package/interfaces/enums.d.ts +0 -4
- package/interfaces/enums.js +0 -5
- package/interfaces/enums.js.map +1 -1
- package/interfaces/events.d.ts +20 -0
- package/interfaces/events.js +23 -0
- package/interfaces/events.js.map +1 -1
- package/model-pie.d.ts +1 -7
- package/model-pie.js +2 -107
- package/model-pie.js.map +1 -1
- package/model.d.ts +31 -13
- package/model.js +200 -76
- package/model.js.map +1 -1
- package/package.json +3 -1
- package/services/essentials/dom-utils.js +3 -2
- package/services/essentials/dom-utils.js.map +1 -1
- package/services/scales-cartesian.d.ts +11 -3
- package/services/scales-cartesian.js +104 -122
- package/services/scales-cartesian.js.map +1 -1
- package/tools.d.ts +2 -2
- package/tools.js +23 -2
- package/tools.js.map +1 -1
- package/tsconfig.tsbuildinfo +87 -88
- package/build/src/model-simple-bar.d.ts +0 -11
- package/model-simple-bar.d.ts +0 -11
- package/model-simple-bar.js +0 -88
- package/model-simple-bar.js.map +0 -1
|
@@ -24,43 +24,39 @@ var Bubble = /** @class */ (function (_super) {
|
|
|
24
24
|
return _this;
|
|
25
25
|
}
|
|
26
26
|
Bubble.prototype.getRadiusScale = function (selection) {
|
|
27
|
+
var options = this.model.getOptions();
|
|
28
|
+
var radiusMapsTo = options.bubble.radiusMapsTo;
|
|
27
29
|
var data = selection.data();
|
|
28
30
|
// Filter out any null/undefined values
|
|
29
|
-
var allRadii = data.map(function (d) { return d
|
|
30
|
-
var options = this.model.getOptions();
|
|
31
|
+
var allRadii = data.map(function (d) { return d[radiusMapsTo]; }).filter(function (radius) { return radius; });
|
|
31
32
|
var chartSize = DOMUtils.getSVGElementSize(this.services.domUtils.getMainSVG(), { useAttr: true });
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
// We need the ternary operator here in case the user
|
|
34
|
+
// doesn't provide radius values in data
|
|
35
|
+
var radiusDataIsValid = allRadii.length > 0;
|
|
36
|
+
var domain = radiusDataIsValid ? extent(allRadii) : [1, 1];
|
|
37
|
+
return scaleLinear().domain(domain)
|
|
38
|
+
.range(radiusDataIsValid ? options.bubble.radiusRange(chartSize, data) : [4, 4]);
|
|
34
39
|
};
|
|
35
40
|
Bubble.prototype.styleCircles = function (selection, animate) {
|
|
36
41
|
var _this = this;
|
|
37
42
|
// Chart options mixed with the internal configurations
|
|
38
43
|
var options = this.model.getOptions();
|
|
44
|
+
var radiusMapsTo = options.bubble.radiusMapsTo;
|
|
39
45
|
var radiusScale = this.getRadiusScale(selection);
|
|
46
|
+
var groupMapsTo = options.data.groupMapsTo;
|
|
47
|
+
var domainIdentifier = this.services.cartesianScales.getDomainIdentifier();
|
|
40
48
|
selection.raise()
|
|
41
49
|
.classed("dot", true)
|
|
42
50
|
.attr("cx", function (d, i) { return _this.services.cartesianScales.getDomainValue(d, i); })
|
|
43
51
|
.transition(this.services.transitions.getTransition("bubble-update-enter", animate))
|
|
44
52
|
.attr("cy", function (d, i) { return _this.services.cartesianScales.getRangeValue(d, i); })
|
|
45
|
-
|
|
46
|
-
.attr("
|
|
53
|
+
// We need `|| 1` here in case the user doesn't provide radius values in data
|
|
54
|
+
.attr("r", function (d) { return radiusScale(d[radiusMapsTo] || 1); })
|
|
55
|
+
.attr("fill", function (d) { return _this.model.getFillColor(d[groupMapsTo], d[domainIdentifier], d); })
|
|
47
56
|
.attr("fill-opacity", options.bubble.fillOpacity)
|
|
48
|
-
.attr("stroke", function (d) { return _this.model.getStrokeColor(d
|
|
57
|
+
.attr("stroke", function (d) { return _this.model.getStrokeColor(d[groupMapsTo], d[domainIdentifier], d); })
|
|
49
58
|
.attr("opacity", 1);
|
|
50
59
|
};
|
|
51
|
-
// TODO - This method could be re-used in more graphs
|
|
52
|
-
Bubble.prototype.addLabelsToDataPoints = function (d, index) {
|
|
53
|
-
// Chart options mixed with the internal configurations
|
|
54
|
-
var options = this.model.getOptions();
|
|
55
|
-
var labels = this.model.getDisplayData().labels;
|
|
56
|
-
return d.data.map(function (datum, i) { return ({
|
|
57
|
-
date: datum.date,
|
|
58
|
-
label: labels[i],
|
|
59
|
-
datasetLabel: d.label,
|
|
60
|
-
value: isNaN(datum) ? datum.value : datum,
|
|
61
|
-
radius: datum.radius || options.points.radius
|
|
62
|
-
}); });
|
|
63
|
-
};
|
|
64
60
|
return Bubble;
|
|
65
61
|
}(Scatter));
|
|
66
62
|
export { Bubble };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bubble.js","sourceRoot":"","sources":["bubble.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;IAA4B,0BAAO;IAAnC;QAAA,
|
|
1
|
+
{"version":3,"file":"bubble.js","sourceRoot":"","sources":["bubble.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Scatter } from \"./scatter\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { Selection } from \"d3-selection\";\nimport { extent } from \"d3-array\";\nimport { scaleLinear } from \"d3-scale\";\n\nexport class Bubble extends Scatter {\n\ttype = \"bubble\";\n\n\tgetRadiusScale(selection: Selection<any, any, any, any>) {\n\t\tconst options = this.model.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst data = selection.data();\n\t\t// Filter out any null/undefined values\n\t\tconst allRadii = data.map(d => d[radiusMapsTo]).filter(radius => radius);\n\t\tconst chartSize = DOMUtils.getSVGElementSize(this.services.domUtils.getMainSVG(), { useAttr: true });\n\n\t\t// We need the ternary operator here in case the user\n\t\t// doesn't provide radius values in data\n\t\tconst radiusDataIsValid = allRadii.length > 0;\n\t\tconst domain = radiusDataIsValid ? extent(allRadii) : [1, 1];\n\t\treturn scaleLinear().domain(domain)\n\t\t\t.range(radiusDataIsValid ? options.bubble.radiusRange(chartSize, data) : [4, 4]);\n\t}\n\n\tstyleCircles(selection: Selection<any, any, any, any>, animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.model.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst radiusScale = this.getRadiusScale(selection);\n\n\t\tconst { groupMapsTo } = options.data;\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\n\t\tselection.raise()\n\t\t\t.classed(\"dot\", true)\n\t\t\t.attr(\"cx\", (d, i) => this.services.cartesianScales.getDomainValue(d, i))\n\t\t\t.transition(this.services.transitions.getTransition(\"bubble-update-enter\", animate))\n\t\t\t.attr(\"cy\", (d, i) => this.services.cartesianScales.getRangeValue(d, i))\n\t\t\t// We need `|| 1` here in case the user doesn't provide radius values in data\n\t\t\t.attr(\"r\", d => radiusScale(d[radiusMapsTo] || 1))\n\t\t\t.attr(\"fill\", d => this.model.getFillColor(d[groupMapsTo], d[domainIdentifier], d))\n\t\t\t.attr(\"fill-opacity\", options.bubble.fillOpacity)\n\t\t\t.attr(\"stroke\", d => this.model.getStrokeColor(d[groupMapsTo], d[domainIdentifier], d))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n}\n"]}
|
|
@@ -58,7 +58,7 @@ var Donut = /** @class */ (function (_super) {
|
|
|
58
58
|
var options = this.model.getOptions();
|
|
59
59
|
var donutCenterFigure = Tools.getProperty(options, "donut", "center", "number");
|
|
60
60
|
if (!donutCenterFigure) {
|
|
61
|
-
donutCenterFigure = this.
|
|
61
|
+
donutCenterFigure = this.model.getDisplayData().reduce(function (accumulator, d) {
|
|
62
62
|
return accumulator + d.value;
|
|
63
63
|
}, 0);
|
|
64
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"donut.js","sourceRoot":"","sources":["donut.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;IAA2B,yBAAG;IAA9B;QAAA,qEA0DC;QAzDA,UAAI,GAAG,OAAO,CAAC;;IAyDhB,CAAC;IAvDA,sBAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACpB,yBAAyB;QACzB,iBAAM,MAAM,YAAC,OAAO,CAAC,CAAC;QAEtB,IAAM,IAAI,GAAG,IAAI,CAAC;QAElB,IAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,CAAC,CAAC;QACxE,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAExC,kCAAkC;QAClC,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAEpC,kDAAkD;QAClD,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,mBAAmB,CAAC;aAC/C,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;aAC7B,KAAK,CAAC,WAAW,EAAE,cAAM,OAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAA3C,CAA2C,CAAC;aACrE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;aACzF,KAAK,CAAC,MAAM,EAAE;YACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEJ,4DAA4D;QAC5D,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,kBAAkB,CAAC;aAC9C,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;aAC7B,KAAK,CAAC,WAAW,EAAE,cAAM,OAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAA1C,CAA0C,CAAC;aACpE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;aACtD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,8BAAc,GAAd;QACC,kCAAkC;QAClC,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAEpC,OAAO,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,iCAAiB,GAAjB,UAAkB,KAAK;QACtB,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAExC,IAAI,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChF,IAAI,CAAC,iBAAiB,EAAE;YACvB,iBAAiB,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"donut.js","sourceRoot":"","sources":["donut.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Pie } from \"./pie\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { interpolateNumber } from \"d3-interpolate\";\n\nexport class Donut extends Pie {\n\ttype = \"donut\";\n\n\trender(animate = true) {\n\t\t// Call render() from Pie\n\t\tsuper.render(animate);\n\n\t\tconst self = this;\n\n\t\tconst svg = DOMUtils.appendOrSelect(this.getContainerSVG(), \"g.center\");\n\t\tconst options = this.model.getOptions();\n\n\t\t// Compute the outer radius needed\n\t\tconst radius = this.computeRadius();\n\n\t\t// Add the number shown in the center of the donut\n\t\tDOMUtils.appendOrSelect(svg, \"text.donut-figure\")\n\t\t\t.attr(\"text-anchor\", \"middle\")\n\t\t\t.style(\"font-size\", () => options.donut.center.numberFontSize(radius))\n\t\t\t.transition(this.services.transitions.getTransition(\"donut-figure-enter-update\", animate))\n\t\t\t.tween(\"text\", function() {\n\t\t\t\treturn self.centerNumberTween(select(this));\n\t\t\t});\n\n\t\t// Add the label below the number in the center of the donut\n\t\tDOMUtils.appendOrSelect(svg, \"text.donut-title\")\n\t\t\t.attr(\"text-anchor\", \"middle\")\n\t\t\t.style(\"font-size\", () => options.donut.center.titleFontSize(radius))\n\t\t\t.attr(\"y\", options.donut.center.titleYPosition(radius))\n\t\t\t.text(Tools.getProperty(options, \"donut\", \"center\", \"label\"));\n\t}\n\n\tgetInnerRadius() {\n\t\t// Compute the outer radius needed\n\t\tconst radius = this.computeRadius();\n\n\t\treturn radius * (3 / 4);\n\t}\n\n\tcenterNumberTween(d3Ref) {\n\t\tconst options = this.model.getOptions();\n\n\t\tlet donutCenterFigure = Tools.getProperty(options, \"donut\", \"center\", \"number\");\n\t\tif (!donutCenterFigure) {\n\t\t\tdonutCenterFigure = this.model.getDisplayData().reduce((accumulator, d) => {\n\t\t\t\treturn accumulator + d.value;\n\t\t\t}, 0);\n\t\t}\n\n\t\t// Remove commas from the current value string, and convert to an int\n\t\tconst currentValue = parseInt(d3Ref.text().replace(/[, ]+/g, \"\"), 10) || 0;\n\t\tconst i = interpolateNumber(currentValue, donutCenterFigure);\n\n\t\treturn t => {\n\t\t\tconst { numberFormatter } = options.donut.center;\n\t\t\td3Ref.text(numberFormatter(i(t)));\n\t\t};\n\t}\n}\n"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Component } from "../component";
|
|
2
2
|
export declare class Line extends Component {
|
|
3
3
|
type: string;
|
|
4
|
-
lineGenerator: any;
|
|
5
4
|
init(): void;
|
|
6
5
|
render(animate?: boolean): void;
|
|
6
|
+
handleLegendOnHover: (event: CustomEvent<any>) => void;
|
|
7
|
+
handleLegendMouseOut: (event: CustomEvent<any>) => void;
|
|
8
|
+
destroy(): void;
|
|
7
9
|
}
|
|
@@ -15,57 +15,58 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
15
15
|
import { Component } from "../component";
|
|
16
16
|
import * as Configuration from "../../configuration";
|
|
17
17
|
import { Roles, Events } from "../../interfaces";
|
|
18
|
-
// D3 Imports
|
|
19
|
-
import { select } from "d3-selection";
|
|
20
18
|
import { line } from "d3-shape";
|
|
21
19
|
var Line = /** @class */ (function (_super) {
|
|
22
20
|
__extends(Line, _super);
|
|
23
21
|
function Line() {
|
|
24
22
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
25
23
|
_this.type = "line";
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// TODORF - Remove these listeners in destroy()
|
|
29
|
-
Line.prototype.init = function () {
|
|
30
|
-
var _this = this;
|
|
31
|
-
// Highlight correct scatter on legend item hovers
|
|
32
|
-
this.services.events.addEventListener(Events.Legend.ITEM_HOVER, function (e) {
|
|
33
|
-
var hoveredElement = e.detail.hoveredElement;
|
|
24
|
+
_this.handleLegendOnHover = function (event) {
|
|
25
|
+
var hoveredElement = event.detail.hoveredElement;
|
|
34
26
|
_this.parent.selectAll("g.lines")
|
|
35
27
|
.transition(_this.services.transitions.getTransition("legend-hover-line"))
|
|
36
|
-
.attr("opacity", function (
|
|
37
|
-
if (
|
|
28
|
+
.attr("opacity", function (group) {
|
|
29
|
+
if (group.name !== hoveredElement.datum()["name"]) {
|
|
38
30
|
return Configuration.lines.opacity.unselected;
|
|
39
31
|
}
|
|
40
32
|
return Configuration.lines.opacity.selected;
|
|
41
33
|
});
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
this.services.events.addEventListener(Events.Legend.ITEM_MOUSEOUT, function (e) {
|
|
34
|
+
};
|
|
35
|
+
_this.handleLegendMouseOut = function (event) {
|
|
45
36
|
_this.parent.selectAll("g.lines")
|
|
46
37
|
.transition(_this.services.transitions.getTransition("legend-mouseout-line"))
|
|
47
38
|
.attr("opacity", Configuration.lines.opacity.selected);
|
|
48
|
-
}
|
|
39
|
+
};
|
|
40
|
+
return _this;
|
|
41
|
+
}
|
|
42
|
+
Line.prototype.init = function () {
|
|
43
|
+
var events = this.services.events;
|
|
44
|
+
// Highlight correct line legend item hovers
|
|
45
|
+
events.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);
|
|
46
|
+
// Un-highlight lines on legend item mouseouts
|
|
47
|
+
events.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);
|
|
49
48
|
};
|
|
50
49
|
Line.prototype.render = function (animate) {
|
|
51
50
|
var _this = this;
|
|
52
51
|
if (animate === void 0) { animate = true; }
|
|
53
52
|
var svg = this.getContainerSVG();
|
|
54
53
|
// D3 line generator function
|
|
55
|
-
|
|
54
|
+
var lineGenerator = line()
|
|
56
55
|
.x(function (d, i) { return _this.services.cartesianScales.getDomainValue(d, i); })
|
|
57
56
|
.y(function (d, i) { return _this.services.cartesianScales.getRangeValue(d, i); })
|
|
58
57
|
.curve(this.services.curves.getD3Curve())
|
|
59
58
|
.defined(function (datum, i) {
|
|
60
|
-
var
|
|
59
|
+
var rangeIdentifier = _this.services.cartesianScales.getRangeIdentifier();
|
|
60
|
+
var value = datum[rangeIdentifier];
|
|
61
61
|
if (value === null || value === undefined) {
|
|
62
62
|
return false;
|
|
63
63
|
}
|
|
64
64
|
return true;
|
|
65
65
|
});
|
|
66
|
+
var groupedData = this.model.getGroupedData();
|
|
66
67
|
// Update the bound data on line groups
|
|
67
68
|
var lineGroups = svg.selectAll("g.lines")
|
|
68
|
-
.data(
|
|
69
|
+
.data(groupedData, function (group) { return group.name; });
|
|
69
70
|
// Remove elements that need to be exited
|
|
70
71
|
// We need exit at the top here to make sure that
|
|
71
72
|
// Data filters are processed before entering new elements
|
|
@@ -77,30 +78,40 @@ var Line = /** @class */ (function (_super) {
|
|
|
77
78
|
var enteringLineGroups = lineGroups.enter()
|
|
78
79
|
.append("g")
|
|
79
80
|
.classed("lines", true);
|
|
80
|
-
var self = this;
|
|
81
81
|
// Enter paths that need to be introduced
|
|
82
82
|
var enteringPaths = enteringLineGroups.append("path")
|
|
83
83
|
.attr("opacity", 0);
|
|
84
84
|
// Apply styles and datum
|
|
85
85
|
enteringPaths.merge(svg.selectAll("g.lines path"))
|
|
86
|
-
.attr("stroke", function (
|
|
87
|
-
|
|
88
|
-
return self.model.getStrokeColor(parentDatum.label);
|
|
89
|
-
})
|
|
90
|
-
.datum(function (d) {
|
|
91
|
-
var parentDatum = select(this.parentNode).datum();
|
|
92
|
-
this._datasetLabel = parentDatum.label;
|
|
93
|
-
return parentDatum.data;
|
|
86
|
+
.attr("stroke", function (group, i) {
|
|
87
|
+
return _this.model.getStrokeColor(group.name);
|
|
94
88
|
})
|
|
95
89
|
// a11y
|
|
96
90
|
.attr("role", Roles.GRAPHICS_SYMBOL)
|
|
97
91
|
.attr("aria-roledescription", "line")
|
|
98
|
-
.attr("aria-label", function (
|
|
92
|
+
.attr("aria-label", function (group) {
|
|
93
|
+
var data = group.data;
|
|
94
|
+
var rangeIdentifier = _this.services.cartesianScales.getRangeIdentifier();
|
|
95
|
+
return data.map(function (datum) { return datum[rangeIdentifier]; }).join(",");
|
|
96
|
+
})
|
|
99
97
|
// Transition
|
|
100
98
|
.transition(this.services.transitions.getTransition("line-update-enter", animate))
|
|
101
99
|
.attr("opacity", 1)
|
|
102
100
|
.attr("class", "line")
|
|
103
|
-
.attr("d",
|
|
101
|
+
.attr("d", function (group) {
|
|
102
|
+
var data = group.data;
|
|
103
|
+
return lineGenerator(data);
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
Line.prototype.destroy = function () {
|
|
107
|
+
// Remove event listeners
|
|
108
|
+
this.parent.selectAll("path")
|
|
109
|
+
.on("mousemove", null)
|
|
110
|
+
.on("mouseout", null);
|
|
111
|
+
// Remove legend listeners
|
|
112
|
+
var eventsFragment = this.services.events;
|
|
113
|
+
eventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);
|
|
114
|
+
eventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);
|
|
104
115
|
};
|
|
105
116
|
return Line;
|
|
106
117
|
}(Component));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"line.js","sourceRoot":"","sources":["line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"line.js","sourceRoot":"","sources":["line.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport * as Configuration from \"../../configuration\";\nimport { Roles, Events } from \"../../interfaces\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { line } from \"d3-shape\";\n\nexport class Line extends Component {\n\ttype = \"line\";\n\n\tinit() {\n\t\tconst { events } = this.services;\n\t\t// Highlight correct line legend item hovers\n\t\tevents.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\t// Un-highlight lines on legend item mouseouts\n\t\tevents.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\trender(animate = true) {\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// D3 line generator function\n\t\tconst lineGenerator = line()\n\t\t\t.x((d, i) => this.services.cartesianScales.getDomainValue(d, i))\n\t\t\t.y((d, i) => this.services.cartesianScales.getRangeValue(d, i))\n\t\t\t.curve(this.services.curves.getD3Curve())\n\t\t\t.defined((datum: any, i) => {\n\t\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\t\t\t\tconst value = datum[rangeIdentifier];\n\t\t\t\tif (value === null || value === undefined) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tconst groupedData = this.model.getGroupedData();\n\t\t// Update the bound data on line groups\n\t\tconst lineGroups = svg.selectAll(\"g.lines\")\n\t\t\t.data(groupedData, group => group.name);\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\tlineGroups.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add line groups that need to be introduced\n\t\tconst enteringLineGroups = lineGroups.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"lines\", true);\n\n\t\t// Enter paths that need to be introduced\n\t\tconst enteringPaths = enteringLineGroups.append(\"path\")\n\t\t\t.attr(\"opacity\", 0);\n\n\t\t// Apply styles and datum\n\t\tenteringPaths.merge(svg.selectAll(\"g.lines path\"))\n\t\t\t.attr(\"stroke\", (group, i) => {\n\t\t\t\treturn this.model.getStrokeColor(group.name)\n\t\t\t})\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"line\")\n\t\t\t.attr(\"aria-label\", group => {\n\t\t\t\tconst { data } = group;\n\t\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\t\t\t\treturn data.map(datum => datum[rangeIdentifier]).join(\",\");\n\t\t\t})\n\t\t\t// Transition\n\t\t\t.transition(this.services.transitions.getTransition(\"line-update-enter\", animate))\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t.attr(\"class\", \"line\")\n\t\t\t.attr(\"d\", group => {\n\t\t\t\tconst { data } = group;\n\t\t\t\treturn lineGenerator(data);\n\t\t\t});\n\t}\n\n\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tthis.parent.selectAll(\"g.lines\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-line\"))\n\t\t\t.attr(\"opacity\", group => {\n\t\t\t\tif (group.name !== hoveredElement.datum()[\"name\"]) {\n\t\t\t\t\treturn Configuration.lines.opacity.unselected;\n\t\t\t\t}\n\n\t\t\t\treturn Configuration.lines.opacity.selected;\n\t\t\t});\n\t}\n\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent.selectAll(\"g.lines\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-line\"))\n\t\t\t.attr(\"opacity\", Configuration.lines.opacity.selected);\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent.selectAll(\"path\")\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(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n}\n"]}
|
package/components/graphs/pie.js
CHANGED
|
@@ -37,9 +37,10 @@ var Pie = /** @class */ (function (_super) {
|
|
|
37
37
|
// Highlight elements that match the hovered legend item
|
|
38
38
|
_this.handleLegendOnHover = function (event) {
|
|
39
39
|
var hoveredElement = event.detail.hoveredElement;
|
|
40
|
+
var groupMapsTo = _this.model.getOptions().data.groupMapsTo;
|
|
40
41
|
_this.parent.selectAll("path.slice")
|
|
41
42
|
.transition(_this.services.transitions.getTransition("legend-hover-bar"))
|
|
42
|
-
.attr("opacity", function (d) { return
|
|
43
|
+
.attr("opacity", function (d) { return d.data[groupMapsTo] !== hoveredElement.datum()["name"] ? 0.3 : 1; });
|
|
43
44
|
};
|
|
44
45
|
// Un-highlight all elements
|
|
45
46
|
_this.handleLegendMouseOut = function (event) {
|
|
@@ -56,25 +57,17 @@ var Pie = /** @class */ (function (_super) {
|
|
|
56
57
|
// Un-highlight circles on legend item mouseouts
|
|
57
58
|
eventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);
|
|
58
59
|
};
|
|
59
|
-
Pie.prototype.getDataList = function () {
|
|
60
|
-
var displayData = this.model.getDisplayData();
|
|
61
|
-
var dataset = displayData.datasets[0];
|
|
62
|
-
return dataset.data.map(function (datum, i) { return ({
|
|
63
|
-
label: displayData.labels[i],
|
|
64
|
-
value: datum.value ? datum.value : datum
|
|
65
|
-
}); });
|
|
66
|
-
};
|
|
67
60
|
Pie.prototype.getInnerRadius = function () {
|
|
68
61
|
var options = this.model.getOptions();
|
|
69
62
|
return options.pie.innerRadius;
|
|
70
63
|
};
|
|
71
64
|
Pie.prototype.render = function (animate) {
|
|
72
|
-
var _this = this;
|
|
73
65
|
if (animate === void 0) { animate = true; }
|
|
74
66
|
var self = this;
|
|
75
67
|
var svg = this.getContainerSVG();
|
|
68
|
+
var displayData = this.model.getDisplayData();
|
|
76
69
|
var options = this.model.getOptions();
|
|
77
|
-
var
|
|
70
|
+
var groupMapsTo = options.data.groupMapsTo;
|
|
78
71
|
// Compute the outer radius needed
|
|
79
72
|
var radius = this.computeRadius();
|
|
80
73
|
this.arc = arc()
|
|
@@ -90,13 +83,13 @@ var Pie = /** @class */ (function (_super) {
|
|
|
90
83
|
.sort(null)
|
|
91
84
|
.padAngle(options.pie.padAngle);
|
|
92
85
|
// Sort pie layout data based off of the indecies the layout creates
|
|
93
|
-
var pieLayoutData = pieLayout(
|
|
86
|
+
var pieLayoutData = pieLayout(displayData)
|
|
94
87
|
.sort(function (a, b) { return a.index - b.index; });
|
|
95
88
|
// Update data on all slices
|
|
96
89
|
var slicesGroup = DOMUtils.appendOrSelect(svg, "g.slices")
|
|
97
90
|
.attr("role", Roles.GROUP);
|
|
98
91
|
var paths = slicesGroup.selectAll("path.slice")
|
|
99
|
-
.data(pieLayoutData, function (d) { return d.data
|
|
92
|
+
.data(pieLayoutData, function (d) { return d.data[groupMapsTo]; });
|
|
100
93
|
// Remove slices that need to be exited
|
|
101
94
|
paths.exit()
|
|
102
95
|
.attr("opacity", 0)
|
|
@@ -108,14 +101,14 @@ var Pie = /** @class */ (function (_super) {
|
|
|
108
101
|
.attr("opacity", 0);
|
|
109
102
|
// Update styles & position on existing and entering slices
|
|
110
103
|
enteringPaths.merge(paths)
|
|
111
|
-
.attr("fill", function (d) { return
|
|
104
|
+
.attr("fill", function (d) { return self.model.getFillColor(d.data[groupMapsTo]); })
|
|
112
105
|
.attr("d", this.arc)
|
|
113
106
|
.transition(this.services.transitions.getTransition("pie-slice-enter-update", animate))
|
|
114
107
|
.attr("opacity", 1)
|
|
115
108
|
// a11y
|
|
116
109
|
.attr("role", Roles.GRAPHICS_SYMBOL)
|
|
117
110
|
.attr("aria-roledescription", "slice")
|
|
118
|
-
.attr("aria-label", function (d) { return d.value + ", " + (Tools.convertValueToPercentage(d.data.value,
|
|
111
|
+
.attr("aria-label", function (d) { return d.value + ", " + (Tools.convertValueToPercentage(d.data.value, displayData) + "%"); })
|
|
119
112
|
// Tween
|
|
120
113
|
.attrTween("d", function (a) {
|
|
121
114
|
return arcTween.bind(this)(a, self.arc);
|
|
@@ -123,7 +116,7 @@ var Pie = /** @class */ (function (_super) {
|
|
|
123
116
|
// Draw the slice labels
|
|
124
117
|
var labelsGroup = DOMUtils.appendOrSelect(svg, "g.labels").attr("role", Roles.GROUP);
|
|
125
118
|
var labels = labelsGroup.selectAll("text.pie-label")
|
|
126
|
-
.data(pieLayoutData, function (d) { return d.data
|
|
119
|
+
.data(pieLayoutData, function (d) { return d.data[groupMapsTo]; });
|
|
127
120
|
// Remove labels that are existing
|
|
128
121
|
labels.exit()
|
|
129
122
|
.attr("opacity", 0)
|
|
@@ -140,7 +133,7 @@ var Pie = /** @class */ (function (_super) {
|
|
|
140
133
|
if (options.pie.labels.formatter) {
|
|
141
134
|
return options.pie.labels.formatter(d);
|
|
142
135
|
}
|
|
143
|
-
return Tools.convertValueToPercentage(d.data.value,
|
|
136
|
+
return Tools.convertValueToPercentage(d.data.value, displayData) + "%";
|
|
144
137
|
})
|
|
145
138
|
// Calculate dimensions in order to transform
|
|
146
139
|
.datum(function (d) {
|
|
@@ -154,7 +147,7 @@ var Pie = /** @class */ (function (_super) {
|
|
|
154
147
|
return d;
|
|
155
148
|
})
|
|
156
149
|
.attr("transform", function (d, i) {
|
|
157
|
-
var totalSlices =
|
|
150
|
+
var totalSlices = displayData.length;
|
|
158
151
|
var sliceAngleDeg = (d.endAngle - d.startAngle) * (180 / Math.PI);
|
|
159
152
|
// check if last 2 slices (or just last) are < the threshold
|
|
160
153
|
if (i >= totalSlices - 2) {
|
|
@@ -286,7 +279,7 @@ var Pie = /** @class */ (function (_super) {
|
|
|
286
279
|
datum: datum
|
|
287
280
|
});
|
|
288
281
|
// Show tooltip
|
|
289
|
-
self.services.events.dispatchEvent(
|
|
282
|
+
self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
|
|
290
283
|
hoveredElement: hoveredElement,
|
|
291
284
|
type: TooltipTypes.DATAPOINT
|
|
292
285
|
});
|
|
@@ -309,7 +302,7 @@ var Pie = /** @class */ (function (_super) {
|
|
|
309
302
|
datum: datum
|
|
310
303
|
});
|
|
311
304
|
// Hide tooltip
|
|
312
|
-
self.services.events.dispatchEvent(
|
|
305
|
+
self.services.events.dispatchEvent(Events.Tooltip.HIDE, { hoveredElement: hoveredElement });
|
|
313
306
|
});
|
|
314
307
|
};
|
|
315
308
|
// Helper functions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pie.js","sourceRoot":"","sources":["pie.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACN,iBAAiB,EACjB,KAAK,EACL,YAAY,EACZ,MAAM,EACN,MAAM,kBAAkB,CAAC;AAE1B,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,2BAA2B;AAC3B,SAAS,QAAQ,CAAC,CAAC,EAAE,OAAO;IAA5B,iBAOC;IANA,IAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAExC,OAAO,UAAA,CAAC;QACP,KAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,OAAO,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC,CAAC;AACH,CAAC;AAED;IAAyB,uBAAS;IAAlC;QAAA,qEA0VC;QAzVA,UAAI,GAAG,KAAK,CAAC;QA2Qb,wDAAwD;QACxD,yBAAmB,GAAG,UAAC,KAAkB;YAChC,IAAA,4CAAc,CAAkB;YAExC,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;iBACjC,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;iBACvE,IAAI,CAAC,SAAS,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAA1D,CAA0D,CAAC,CAAC;QACpF,CAAC,CAAA;QAED,4BAA4B;QAC5B,0BAAoB,GAAG,UAAC,KAAkB;YACzC,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;iBACjC,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;iBAC1E,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC,CAAA;;IAgEF,CAAC;IAjVA,kBAAI,GAAJ;QACC,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE5C,iDAAiD;QACjD,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEpF,gDAAgD;QAChD,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACzF,CAAC;IAED,yBAAW,GAAX;QACC,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAChD,IAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,CAAC,IAAK,OAAA,CAAC;YACtC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;SACxC,CAAC,EAHoC,CAGpC,CAAC,CAAC;IACL,CAAC;IAED,4BAAc,GAAd;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAChC,CAAC;IAED,oBAAM,GAAN,UAAO,OAAc;QAArB,iBAiJC;QAjJM,wBAAA,EAAA,cAAc;QACpB,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxC,IAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,kCAAkC;QAClC,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAEpC,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE;aACd,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;aAClC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEtB,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE;aACnB,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;aAClC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAE/D,uBAAuB;QACvB,IAAM,SAAS,GAAG,GAAG,EAAE;aACrB,KAAK,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO,CAAC;aAC1B,IAAI,CAAC,IAAI,CAAC;aACV,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEjC,oEAAoE;QACpE,IAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC;aACvC,IAAI,CAAC,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAjB,CAAiB,CAAC,CAAC;QAE9C,4BAA4B;QAC5B,IAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;aAC1D,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC;aAC/C,IAAI,CAAC,aAAa,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,CAAC,KAAK,EAAZ,CAAY,CAAC,CAAC;QAEzC,uCAAuC;QACvC,KAAK,CAAC,IAAI,EAAE;aACV,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,MAAM,EAAE,CAAC;QAEX,2CAA2C;QAC3C,IAAM,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE;aACjC,MAAM,CAAC,MAAM,CAAC;aACd,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;aACtB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAErB,2DAA2D;QAC3D,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;aACxB,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAvC,CAAuC,CAAC;aAC1D,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;aACnB,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;aACtF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACnB,OAAO;aACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAC;aACrC,IAAI,CAAC,YAAY,EAAE,UAAA,CAAC,IAAI,OAAG,CAAC,CAAC,KAAK,WAAK,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAE,EAA7E,CAA6E,CAAC;YACvG,QAAQ;aACP,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;YAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEJ,wBAAwB;QACxB,IAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACvF,IAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC;aACpD,IAAI,CAAC,aAAa,EAAE,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,KAAK,EAAZ,CAAY,CAAC,CAAC;QAEhD,kCAAkC;QAClC,MAAM,CAAC,IAAI,EAAE;aACX,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,MAAM,EAAE,CAAC;QAEX,uCAAuC;QACvC,IAAM,cAAc,GAAG,MAAM,CAAC,KAAK,EAAE;aACnC,MAAM,CAAC,MAAM,CAAC;aACd,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAE7B,yDAAyD;QACzD,IAAM,WAAW,GAAG,EAAE,CAAC;QACvB,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;aAC1B,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC;aAC9B,IAAI,CAAC,UAAA,CAAC;YACN,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE;gBACjC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACvC;YAED,OAAO,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC;QACrE,CAAC,CAAC;YACF,6CAA6C;aAC5C,KAAK,CAAC,UAAS,CAAC;YAChB,IAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChD,CAAC,CAAC,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;YAC/B,CAAC,CAAC,WAAW,GAAG,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAEhE,IAAM,cAAc,GAAG,MAAM,GAAG,CAAC,CAAC;YAElC,IAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;YAE/D,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAElE,OAAO,CAAC,CAAC;QACV,CAAC,CAAC;aACD,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;YAChC,IAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;YACpC,IAAM,aAAa,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;YAEpE,4DAA4D;YAC5D,IAAI,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE;gBACzB,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE;oBACvD,IAAI,eAAe,SAAA,EAAE,eAAe,SAAA,CAAC;oBACrC,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,GAAG,CAAC,EAAE;wBAChC,eAAe,GAAG,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC;wBAC7G,eAAe,GAAG,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;wBAE5D,2BAA2B;wBAC3B,CAAC,CAAC,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC;wBACtC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpB;yBAAM;wBACN,eAAe,GAAG,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;wBAC7G,eAAe,GAAG,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;wBAE5D,2BAA2B;wBAC3B,CAAC,CAAC,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC;wBACrC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpB;oBAED,OAAO,eAAa,eAAe,UAAK,eAAe,MAAG,CAAC;iBAC3D;aACD;YAED,OAAO,eAAa,CAAC,CAAC,SAAS,UAAK,CAAC,CAAC,SAAS,MAAG,CAAC;QACpD,CAAC,CAAC,CAAC;QAEJ,4BAA4B;QAC5B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjC,eAAe;QACf,IAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QACnD,IAAI,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QACjD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;SAC5C;QACD,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,eAAa,aAAa,UAAK,aAAa,MAAG,CAAC,CAAC;QAEvE,sBAAsB;QACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,4BAAc,GAAd,UAAe,WAAkB;QAChC,IAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC;aACvE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAExC,0BAA0B;QAC1B,IAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;aACzC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEpB,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAEzB,IAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,EAAE;aACvC,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;YACzB,OAAO;aACN,IAAI,CAAC,MAAM,EAAK,KAAK,CAAC,eAAe,SAAI,KAAK,CAAC,KAAO,CAAC;aACvD,IAAI,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;QAEhD,sCAAsC;QACtC,+CAA+C;QAC/C,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;aAC/B,KAAK,CAAC,UAAS,CAAC;YACR,IAAA,uBAAS,EAAE,uBAAS,EAAE,uBAAS,CAAO;YAE9C,IAAI,SAAS,KAAK,iBAAiB,CAAC,KAAK,EAAE;gBAC1C,CAAC,CAAC,QAAQ,GAAG;oBACZ,CAAC,EAAE,SAAS;oBACZ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,WAAW;iBAC5B,CAAC;gBAEF,oCAAoC;gBACpC,CAAC,CAAC,MAAM,GAAG;oBACV,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;oBAC1C,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,WAAW;iBAC1D,CAAC;gBAEF,6DAA6D;gBAC7D,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC;aAC1E;iBAAM;gBACN,sCAAsC;gBACtC,CAAC,CAAC,QAAQ,GAAG;oBACZ,CAAC,EAAE,SAAS;oBACZ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,WAAW;iBAC5B,CAAC;gBAEF,0EAA0E;gBAC1E,CAAC,CAAC,MAAM,GAAG;oBACV,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;oBAC1C,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,WAAW;iBAC1D,CAAC;gBAEF,6DAA6D;gBAC7D,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC;aAC1E;YAED,8CAA8C;YAC9C,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,IAAM,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;aAC3D,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAEjC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;aAC9D,KAAK,CAAC,UAAS,CAAM;YACrB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QACxC,CAAC,CAAC;aACD,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC;aAC5B,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAZ,CAAY,CAAC;aAC7B,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAZ,CAAY,CAAC;aAC7B,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,eAAe,EAAjB,CAAiB,CAAC;aAClC,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;QAE9B,uBAAuB;QACvB,IAAM,uBAAuB,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;aAC7D,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAEnC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;aACvE,KAAK,CAAC,UAAS,CAAM;YACrB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QACxC,CAAC,CAAC;aACD,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC;aAC5B,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,eAAe,EAAjB,CAAiB,CAAC;aAClC,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,EAAV,CAAU,CAAC;aAC3B,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,EAAV,CAAU,CAAC;aAC3B,IAAI,CAAC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;IAC/B,CAAC;IAkBD,+BAAiB,GAAjB;QACC,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;aACjC,EAAE,CAAC,WAAW,EAAE,UAAS,KAAK;YAC9B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE;gBAC9D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAS,KAAK;YAC9B,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAEpC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;iBACrC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;iBAC1E,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE3B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE;gBAC9D,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE;gBAClD,cAAc,gBAAA;gBACd,IAAI,EAAE,YAAY,CAAC,SAAS;aAC5B,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,UAAS,KAAK;YAC1B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE;gBAC1D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,UAAS,KAAK;YAC7B,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;iBACtC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;iBAC1E,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEtB,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE;gBAC7D,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,cAAc,gBAAA,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACT,2BAAa,GAAvB;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAElC,IAAA,gEAA+E,EAA7E,gBAAK,EAAE,kBAAsE,CAAC;QACtF,IAAM,MAAM,GAAW,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAEnD,OAAO,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,CAAC;IACF,UAAC;AAAD,CAAC,AA1VD,CAAyB,SAAS,GA0VjC","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(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\tgetDataList() {\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst dataset = displayData.datasets[0];\n\t\treturn dataset.data.map((datum, i) => ({\n\t\t\tlabel: displayData.labels[i],\n\t\t\tvalue: datum.value ? datum.value : datum\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\t\tconst options = this.model.getOptions();\n\t\tconst dataList = this.getDataList();\n\n\t\t// Compute the outer radius needed\n\t\tconst radius = this.computeRadius();\n\n\t\tthis.arc = arc()\n\t\t\t.innerRadius(this.getInnerRadius())\n\t\t\t.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(dataList)\n\t\t\t.sort((a: any, b: any) => a.index - b.index);\n\n\t\t// Update data on all slices\n\t\tconst slicesGroup = DOMUtils.appendOrSelect(svg, \"g.slices\")\n\t\t\t.attr(\"role\", Roles.GROUP);\n\t\tconst paths = slicesGroup.selectAll(\"path.slice\")\n\t\t\t.data(pieLayoutData, d => d.data.label);\n\n\t\t// Remove slices that need to be exited\n\t\tpaths.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add new slices that are being introduced\n\t\tconst enteringPaths = paths.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.merge(paths)\n\t\t\t.attr(\"fill\", d => this.model.getFillScale()(d.data.label))\n\t\t\t.attr(\"d\", this.arc)\n\t\t\t.transition(this.services.transitions.getTransition(\"pie-slice-enter-update\", animate))\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(\"aria-label\", d => `${d.value}, ${Tools.convertValueToPercentage(d.data.value, dataList) + \"%\"}`)\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 labelsGroup = DOMUtils.appendOrSelect(svg, \"g.labels\").attr(\"role\", Roles.GROUP);\n\t\tconst labels = labelsGroup.selectAll(\"text.pie-label\")\n\t\t\t.data(pieLayoutData, (d: any) => d.data.label);\n\n\t\t// Remove labels that are existing\n\t\tlabels.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add labels that are being introduced\n\t\tconst enteringLabels = labels.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.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 Tools.convertValueToPercentage(d.data.value, dataList) + \"%\";\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 textLength = this.getComputedTextLength();\n\t\t\t\td.textOffsetX = textLength / 2;\n\t\t\t\td.textOffsetY = parseFloat(getComputedStyle(this).fontSize) / 2;\n\n\t\t\t\tconst marginedRadius = radius + 7;\n\n\t\t\t\tconst theta = ((d.endAngle - d.startAngle) / 2) + d.startAngle;\n\n\t\t\t\td.xPosition = (d.textOffsetX + marginedRadius) * Math.sin(theta);\n\t\t\t\td.yPosition = (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 = dataList.length;\n\t\t\t\tconst sliceAngleDeg = (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 = d.xPosition + options.pie.callout.offsetX + options.pie.callout.textMargin + d.textOffsetX;\n\t\t\t\t\t\t\tlabelTranslateY = d.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 = d.xPosition - options.pie.callout.offsetX - d.textOffsetX - options.pie.callout.textMargin;\n\t\t\t\t\t\t\tlabelTranslateY = d.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(this.getContainerSVG(), \"g.callouts\")\n\t\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\")\n\t\t\t.data(calloutData);\n\n\t\tcallouts.exit().remove();\n\n\t\tconst enteringCallouts = callouts.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)\n\t\t.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 = d.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 = d.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.append(\"line\")\n\t\t\t.classed(\"vertical-line\", true);\n\n\t\tenteringVerticalLines.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.append(\"line\")\n\t\t\t.classed(\"horizontal-line\", true);\n\n\t\tenteringHorizontalLines.merge(callouts.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\n\t\tthis.parent.selectAll(\"path.slice\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-bar\"))\n\t\t\t.attr(\"opacity\", d => (d.data.label !== hoveredElement.datum()[\"key\"]) ? 0.3 : 1);\n\t}\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent.selectAll(\"path.slice\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-bar\"))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent.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.classed(\"hovered\", true)\n\t\t\t\t\t.transition(self.services.transitions.getTransition(\"pie_slice_mouseover\"))\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(\"show-tooltip\", {\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.classed(\"hovered\", false)\n\t\t\t\t\t.transition(self.services.transitions.getTransition(\"pie_slice_mouseover\"))\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(\"hide-tooltip\", { hoveredElement });\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, { useAttrs: true });\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 {\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(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\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()\n\t\t\t.innerRadius(this.getInnerRadius())\n\t\t\t.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)\n\t\t\t.sort((a: any, b: any) => a.index - b.index);\n\n\t\t// Update data on all slices\n\t\tconst slicesGroup = DOMUtils.appendOrSelect(svg, \"g.slices\")\n\t\t\t.attr(\"role\", Roles.GROUP);\n\t\tconst paths = slicesGroup.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()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add new slices that are being introduced\n\t\tconst enteringPaths = paths.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.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(this.services.transitions.getTransition(\"pie-slice-enter-update\", animate))\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(\"aria-label\", d => `${d.value}, ${Tools.convertValueToPercentage(d.data.value, displayData) + \"%\"}`)\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 labelsGroup = DOMUtils.appendOrSelect(svg, \"g.labels\").attr(\"role\", Roles.GROUP);\n\t\tconst labels = labelsGroup.selectAll(\"text.pie-label\")\n\t\t\t.data(pieLayoutData, (d: any) => d.data[groupMapsTo]);\n\n\t\t// Remove labels that are existing\n\t\tlabels.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add labels that are being introduced\n\t\tconst enteringLabels = labels.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.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 Tools.convertValueToPercentage(d.data.value, displayData) + \"%\";\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 textLength = this.getComputedTextLength();\n\t\t\t\td.textOffsetX = textLength / 2;\n\t\t\t\td.textOffsetY = parseFloat(getComputedStyle(this).fontSize) / 2;\n\n\t\t\t\tconst marginedRadius = radius + 7;\n\n\t\t\t\tconst theta = ((d.endAngle - d.startAngle) / 2) + d.startAngle;\n\n\t\t\t\td.xPosition = (d.textOffsetX + marginedRadius) * Math.sin(theta);\n\t\t\t\td.yPosition = (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 = displayData.length;\n\t\t\t\tconst sliceAngleDeg = (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 = d.xPosition + options.pie.callout.offsetX + options.pie.callout.textMargin + d.textOffsetX;\n\t\t\t\t\t\t\tlabelTranslateY = d.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 = d.xPosition - options.pie.callout.offsetX - d.textOffsetX - options.pie.callout.textMargin;\n\t\t\t\t\t\t\tlabelTranslateY = d.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(this.getContainerSVG(), \"g.callouts\")\n\t\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\")\n\t\t\t.data(calloutData);\n\n\t\tcallouts.exit().remove();\n\n\t\tconst enteringCallouts = callouts.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)\n\t\t.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 = d.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 = d.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.append(\"line\")\n\t\t\t.classed(\"vertical-line\", true);\n\n\t\tenteringVerticalLines.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.append(\"line\")\n\t\t\t.classed(\"horizontal-line\", true);\n\n\t\tenteringHorizontalLines.merge(callouts.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.selectAll(\"path.slice\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-bar\"))\n\t\t\t.attr(\"opacity\", d => d.data[groupMapsTo] !== hoveredElement.datum()[\"name\"] ? 0.3 : 1);\n\t}\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent.selectAll(\"path.slice\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-bar\"))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent.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.classed(\"hovered\", true)\n\t\t\t\t\t.transition(self.services.transitions.getTransition(\"pie_slice_mouseover\"))\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.classed(\"hovered\", false)\n\t\t\t\t\t.transition(self.services.transitions.getTransition(\"pie_slice_mouseover\"))\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, { hoveredElement });\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, { useAttrs: true });\n\t\tconst radius: number = Math.min(width, height) / 2;\n\n\t\treturn radius + options.pie.radiusOffset;\n\t}\n}\n"]}
|
|
@@ -7,7 +7,6 @@ export declare class Scatter extends Component {
|
|
|
7
7
|
styleCircles(selection: Selection<any, any, any, any>, animate: boolean): void;
|
|
8
8
|
handleLegendOnHover: (event: CustomEvent<any>) => void;
|
|
9
9
|
handleLegendMouseOut: (event: CustomEvent<any>) => void;
|
|
10
|
-
addLabelsToDataPoints(d: any, index: any): any;
|
|
11
10
|
addEventListeners(): void;
|
|
12
11
|
destroy(): void;
|
|
13
12
|
}
|