@carbon/charts 0.54.1 → 0.54.5

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.
@@ -70,6 +70,7 @@ var Area = /** @class */ (function (_super) {
70
70
  var _this = this;
71
71
  if (animate === void 0) { animate = true; }
72
72
  var svg = this.getComponentContainer({ withinChartClip: true });
73
+ var options = this.getOptions();
73
74
  var domain = [0, 0];
74
75
  var cartesianScales = this.services.cartesianScales;
75
76
  var orientation = cartesianScales.getOrientation();
@@ -85,15 +86,26 @@ var Area = /** @class */ (function (_super) {
85
86
  });
86
87
  // Update the bound data on area groups
87
88
  var groupedData = this.model.getGroupedData(this.configs.groups);
88
- var bounds = Tools.getProperty(this.getOptions(), 'bounds');
89
+ var bounds = Tools.getProperty(options, 'bounds');
89
90
  var boundsEnabled = bounds && groupedData && groupedData.length === 1;
90
91
  if (!boundsEnabled && bounds) {
91
92
  console.warn("Bounds can only be shown when having 1 single datagroup, you've supplied " + groupedData.length); // eslint-disable-line no-console
92
93
  }
94
+ var upperBoundRangeValue = 0;
95
+ // If includeZero is enabled, we want to replace upperBoundRange from 0 to domain value
96
+ var includeZeroInRangeValue = function (position, domain) {
97
+ if (Tools.getProperty(options, 'axes', position, 'includeZero') ===
98
+ false) {
99
+ // Replace upperBoundRangeValue if domain is positive
100
+ if (domain[0] > 0 && domain[1] > 0) {
101
+ upperBoundRangeValue = domain[0];
102
+ }
103
+ }
104
+ };
93
105
  var upperBound = function (d, i) {
94
106
  return boundsEnabled
95
107
  ? cartesianScales.getBoundedScaledValues(d, i)[0]
96
- : cartesianScales.getRangeValue(0);
108
+ : cartesianScales.getRangeValue(upperBoundRangeValue);
97
109
  };
98
110
  var lowerBound = function (d, i) {
99
111
  return boundsEnabled
@@ -101,21 +113,23 @@ var Area = /** @class */ (function (_super) {
101
113
  : cartesianScales.getRangeValue(d, i);
102
114
  };
103
115
  if (orientation === CartesianOrientations.VERTICAL) {
104
- domain = this.services.cartesianScales.getMainYScale().domain();
116
+ domain = cartesianScales.getMainYScale().domain();
117
+ includeZeroInRangeValue(cartesianScales.getMainYAxisPosition(), domain);
105
118
  areaGenerator
106
119
  .x(function (d, i) { return cartesianScales.getDomainValue(d, i); })
107
120
  .y0(function (d, i) { return upperBound(d, i); })
108
121
  .y1(function (d, i) { return lowerBound(d, i); });
109
122
  }
110
123
  else {
111
- domain = this.services.cartesianScales.getMainXScale().domain();
124
+ domain = cartesianScales.getMainXScale().domain();
125
+ includeZeroInRangeValue(cartesianScales.getMainXAxisPosition(), domain);
112
126
  areaGenerator
113
127
  .x0(function (d, i) { return upperBound(d, i); })
114
128
  .x1(function (d, i) { return lowerBound(d, i); })
115
129
  .y(function (d, i) { return cartesianScales.getDomainValue(d, i); });
116
130
  }
117
131
  // Is gradient enabled or not
118
- var isGradientEnabled = Tools.getProperty(this.getOptions(), 'color', 'gradient', 'enabled');
132
+ var isGradientEnabled = Tools.getProperty(options, 'color', 'gradient', 'enabled');
119
133
  // Should gradient style be applicable
120
134
  var isGradientAllowed = groupedData && groupedData.length === 1 && isGradientEnabled;
121
135
  if (groupedData.length > 1 && isGradientEnabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"area.js","sourceRoot":"","sources":["area.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport * as Configuration from '../../configuration';\nimport {\n\tCartesianOrientations,\n\tEvents,\n\tColorClassNameTypes,\n\tRenderTypes,\n} from '../../interfaces';\nimport { GradientUtils } from '../../services';\nimport { Tools } from '../../tools';\n\n// D3 Imports\nimport { area } from 'd3-shape';\nimport { select } from 'd3-selection';\n\nexport class Area extends Component {\n\ttype = 'area';\n\trenderType = RenderTypes.SVG;\n\n\tgradient_id = 'gradient-id-' + Math.floor(Math.random() * 99999999999);\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct area 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 area 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 = true) {\n\t\tconst svg = this.getComponentContainer({ withinChartClip: true });\n\t\tlet domain = [0, 0];\n\n\t\tconst { cartesianScales } = this.services;\n\n\t\tconst orientation = cartesianScales.getOrientation();\n\t\tconst areaGenerator = area()\n\t\t\t.curve(this.services.curves.getD3Curve())\n\t\t\t.defined((datum: any, i) => {\n\t\t\t\tconst rangeIdentifier = 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\t\t\t\treturn true;\n\t\t\t});\n\n\t\t// Update the bound data on area groups\n\t\tconst groupedData = this.model.getGroupedData(this.configs.groups);\n\n\t\tconst bounds = Tools.getProperty(this.getOptions(), 'bounds');\n\t\tconst boundsEnabled = bounds && groupedData && groupedData.length === 1;\n\n\t\tif (!boundsEnabled && bounds) {\n\t\t\tconsole.warn(\n\t\t\t\t`Bounds can only be shown when having 1 single datagroup, you've supplied ${groupedData.length}`\n\t\t\t); // eslint-disable-line no-console\n\t\t}\n\n\t\tconst upperBound = (d, i) =>\n\t\t\tboundsEnabled\n\t\t\t\t? cartesianScales.getBoundedScaledValues(d, i)[0]\n\t\t\t\t: cartesianScales.getRangeValue(0);\n\n\t\tconst lowerBound = (d, i) =>\n\t\t\tboundsEnabled\n\t\t\t\t? cartesianScales.getBoundedScaledValues(d, i)[1]\n\t\t\t\t: cartesianScales.getRangeValue(d, i);\n\n\t\tif (orientation === CartesianOrientations.VERTICAL) {\n\t\t\tdomain = this.services.cartesianScales.getMainYScale().domain();\n\t\t\tareaGenerator\n\t\t\t\t.x((d, i) => cartesianScales.getDomainValue(d, i))\n\t\t\t\t.y0((d, i) => upperBound(d, i))\n\t\t\t\t.y1((d, i) => lowerBound(d, i));\n\t\t} else {\n\t\t\tdomain = this.services.cartesianScales.getMainXScale().domain();\n\t\t\tareaGenerator\n\t\t\t\t.x0((d, i) => upperBound(d, i))\n\t\t\t\t.x1((d, i) => lowerBound(d, i))\n\t\t\t\t.y((d, i) => cartesianScales.getDomainValue(d, i));\n\t\t}\n\n\t\t// Is gradient enabled or not\n\t\tconst isGradientEnabled = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'color',\n\t\t\t'gradient',\n\t\t\t'enabled'\n\t\t);\n\n\t\t// Should gradient style be applicable\n\t\tconst isGradientAllowed =\n\t\t\tgroupedData && groupedData.length === 1 && isGradientEnabled;\n\n\t\tif (groupedData.length > 1 && isGradientEnabled) {\n\t\t\tconsole.error(\n\t\t\t\t'Gradients can only be enabled when having 1 single dataset'\n\t\t\t);\n\t\t}\n\n\t\tconst areas = svg\n\t\t\t.selectAll('path.area')\n\t\t\t.data(groupedData, (group) => group.name);\n\n\t\tconst chartMainContainer = select(\n\t\t\tthis.services.domUtils.getMainContainer()\n\t\t);\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\tareas.exit().attr('opacity', 0).remove();\n\n\t\t// if there is no grouped data (if all data groups are turned OFF with legend which can happen in the case of combo charts)\n\t\tif (!groupedData.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isGradientAllowed) {\n\t\t\t// The fill value of area has been overwritten, get color value from stroke color class instead\n\t\t\tconst strokePathElement = chartMainContainer\n\t\t\t\t.select(\n\t\t\t\t\t`path.${this.model.getColorClassName({\n\t\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.STROKE],\n\t\t\t\t\t\tdataGroupName: groupedData[0].name,\n\t\t\t\t\t})}`\n\t\t\t\t)\n\t\t\t\t.node();\n\n\t\t\tlet colorValue;\n\t\t\tif (strokePathElement) {\n\t\t\t\tcolorValue = getComputedStyle(\n\t\t\t\t\tstrokePathElement as HTMLElement,\n\t\t\t\t\tnull\n\t\t\t\t).getPropertyValue('stroke');\n\t\t\t} else {\n\t\t\t\tconst sparklineColorObject = Tools.getProperty(\n\t\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\t'color',\n\t\t\t\t\t'scale'\n\t\t\t\t);\n\n\t\t\t\tif (sparklineColorObject !== null) {\n\t\t\t\t\tconst sparklineColorObjectKeys = Object.keys(\n\t\t\t\t\t\tsparklineColorObject\n\t\t\t\t\t);\n\t\t\t\t\tcolorValue =\n\t\t\t\t\t\tsparklineColorObject[sparklineColorObjectKeys[0]];\n\t\t\t\t}\n\t\t\t}\n\t\t\tGradientUtils.appendOrUpdateLinearGradient({\n\t\t\t\tsvg: this.parent,\n\t\t\t\tid: this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`${groupedData[0].name.replace(' ', '')}_${\n\t\t\t\t\t\tthis.gradient_id\n\t\t\t\t\t}`\n\t\t\t\t),\n\t\t\t\tx1: '0%',\n\t\t\t\tx2: '0%',\n\t\t\t\ty1: '0%',\n\t\t\t\ty2: '100%',\n\t\t\t\tstops: GradientUtils.getStops(domain, colorValue),\n\t\t\t});\n\t\t} else {\n\t\t\t// make sure there is no linearGradient if no gradient is allowed\n\t\t\tif (!this.parent.selectAll('defs linearGradient').empty()) {\n\t\t\t\tthis.parent.selectAll('defs linearGradient').each(function () {\n\t\t\t\t\tthis.parentNode.remove();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst self = this;\n\n\t\t// Enter paths that need to be introduced\n\t\tconst enteringAreas = areas.enter().append('path');\n\t\tif (isGradientAllowed) {\n\t\t\tenteringAreas\n\t\t\t\t.merge(areas)\n\t\t\t\t.style(\n\t\t\t\t\t'fill',\n\t\t\t\t\t(group) =>\n\t\t\t\t\t\t`url(#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t\t\t`${group.name.replace(' ', '')}_${this.gradient_id}`\n\t\t\t\t\t\t)})`\n\t\t\t\t)\n\t\t\t\t.attr('class', 'area')\n\t\t\t\t.attr('class', (group) =>\n\t\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\t\tdataGroupName: group.name,\n\t\t\t\t\t\toriginalClassName: 'area',\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.attr('d', (group) => {\n\t\t\t\t\tconst { data } = group;\n\t\t\t\t\treturn areaGenerator(data);\n\t\t\t\t});\n\t\t} else {\n\t\t\tenteringAreas\n\t\t\t\t.attr('opacity', 0)\n\t\t\t\t.merge(areas)\n\t\t\t\t.attr('class', 'area')\n\t\t\t\t.attr('class', (group) =>\n\t\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\t\tclassNameTypes: [\n\t\t\t\t\t\t\tColorClassNameTypes.FILL,\n\t\t\t\t\t\t\tColorClassNameTypes.STROKE,\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdataGroupName: group.name,\n\t\t\t\t\t\toriginalClassName: 'area',\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.style('fill', (group) => self.model.getFillColor(group.name))\n\t\t\t\t.transition()\n\t\t\t\t.call((t) =>\n\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\tname: 'area-update-enter',\n\t\t\t\t\t\tanimate,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.attr(\n\t\t\t\t\t'opacity',\n\t\t\t\t\tboundsEnabled ? 1 : Configuration.area.opacity.selected\n\t\t\t\t)\n\t\t\t\t.attr('d', (group) => {\n\t\t\t\t\tconst { data } = group;\n\t\t\t\t\treturn areaGenerator(data);\n\t\t\t\t});\n\n\t\t\tif (boundsEnabled) {\n\t\t\t\tenteringAreas\n\t\t\t\t\t.attr('fill-opacity', Configuration.area.opacity.selected)\n\t\t\t\t\t.style('stroke', (group) =>\n\t\t\t\t\t\tself.model.getStrokeColor(group.name)\n\t\t\t\t\t)\n\t\t\t\t\t.style('stroke-dasharray', '2, 2')\n\t\t\t\t\t.attr('stroke-width', 0.7 + 'px');\n\t\t\t}\n\t\t}\n\t}\n\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.area')\n\t\t\t.transition('legend-hover-area')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-area',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', (group) => {\n\t\t\t\tif (group.name !== hoveredElement.datum()['name']) {\n\t\t\t\t\treturn Configuration.area.opacity.unselected;\n\t\t\t\t}\n\n\t\t\t\treturn Configuration.area.opacity.selected;\n\t\t\t});\n\t};\n\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll('path.area')\n\t\t\t.transition('legend-mouseout-area')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-area',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', Configuration.area.opacity.selected);\n\t};\n\n\tdestroy() {\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":"area.js","sourceRoot":"","sources":["area.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport * as Configuration from '../../configuration';\nimport {\n\tCartesianOrientations,\n\tEvents,\n\tColorClassNameTypes,\n\tRenderTypes,\n} from '../../interfaces';\nimport { GradientUtils } from '../../services';\nimport { Tools } from '../../tools';\n\n// D3 Imports\nimport { area } from 'd3-shape';\nimport { select } from 'd3-selection';\n\nexport class Area extends Component {\n\ttype = 'area';\n\trenderType = RenderTypes.SVG;\n\n\tgradient_id = 'gradient-id-' + Math.floor(Math.random() * 99999999999);\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct area 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 area 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 = true) {\n\t\tconst svg = this.getComponentContainer({ withinChartClip: true });\n\t\tconst options = this.getOptions();\n\t\tlet domain = [0, 0];\n\n\t\tconst { cartesianScales } = this.services;\n\n\t\tconst orientation = cartesianScales.getOrientation();\n\t\tconst areaGenerator = area()\n\t\t\t.curve(this.services.curves.getD3Curve())\n\t\t\t.defined((datum: any, i) => {\n\t\t\t\tconst rangeIdentifier = 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\t\t\t\treturn true;\n\t\t\t});\n\n\t\t// Update the bound data on area groups\n\t\tconst groupedData = this.model.getGroupedData(this.configs.groups);\n\n\t\tconst bounds = Tools.getProperty(options, 'bounds');\n\t\tconst boundsEnabled = bounds && groupedData && groupedData.length === 1;\n\n\t\tif (!boundsEnabled && bounds) {\n\t\t\tconsole.warn(\n\t\t\t\t`Bounds can only be shown when having 1 single datagroup, you've supplied ${groupedData.length}`\n\t\t\t); // eslint-disable-line no-console\n\t\t}\n\n\t\tlet upperBoundRangeValue = 0;\n\t\t// If includeZero is enabled, we want to replace upperBoundRange from 0 to domain value\n\t\tconst includeZeroInRangeValue = (position, domain) => {\n\t\t\tif (\n\t\t\t\tTools.getProperty(options, 'axes', position, 'includeZero') ===\n\t\t\t\tfalse\n\t\t\t) {\n\t\t\t\t// Replace upperBoundRangeValue if domain is positive\n\t\t\t\tif (domain[0] > 0 && domain[1] > 0) {\n\t\t\t\t\tupperBoundRangeValue = domain[0];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst upperBound = (d, i) =>\n\t\t\tboundsEnabled\n\t\t\t\t? cartesianScales.getBoundedScaledValues(d, i)[0]\n\t\t\t\t: cartesianScales.getRangeValue(upperBoundRangeValue);\n\n\t\tconst lowerBound = (d, i) =>\n\t\t\tboundsEnabled\n\t\t\t\t? cartesianScales.getBoundedScaledValues(d, i)[1]\n\t\t\t\t: cartesianScales.getRangeValue(d, i);\n\n\t\tif (orientation === CartesianOrientations.VERTICAL) {\n\t\t\tdomain = cartesianScales.getMainYScale().domain();\n\t\t\tincludeZeroInRangeValue(\n\t\t\t\tcartesianScales.getMainYAxisPosition(),\n\t\t\t\tdomain\n\t\t\t);\n\n\t\t\tareaGenerator\n\t\t\t\t.x((d, i) => cartesianScales.getDomainValue(d, i))\n\t\t\t\t.y0((d, i) => upperBound(d, i))\n\t\t\t\t.y1((d, i) => lowerBound(d, i));\n\t\t} else {\n\t\t\tdomain = cartesianScales.getMainXScale().domain();\n\t\t\tincludeZeroInRangeValue(\n\t\t\t\tcartesianScales.getMainXAxisPosition(),\n\t\t\t\tdomain\n\t\t\t);\n\n\t\t\tareaGenerator\n\t\t\t\t.x0((d, i) => upperBound(d, i))\n\t\t\t\t.x1((d, i) => lowerBound(d, i))\n\t\t\t\t.y((d, i) => cartesianScales.getDomainValue(d, i));\n\t\t}\n\n\t\t// Is gradient enabled or not\n\t\tconst isGradientEnabled = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'color',\n\t\t\t'gradient',\n\t\t\t'enabled'\n\t\t);\n\n\t\t// Should gradient style be applicable\n\t\tconst isGradientAllowed =\n\t\t\tgroupedData && groupedData.length === 1 && isGradientEnabled;\n\n\t\tif (groupedData.length > 1 && isGradientEnabled) {\n\t\t\tconsole.error(\n\t\t\t\t'Gradients can only be enabled when having 1 single dataset'\n\t\t\t);\n\t\t}\n\n\t\tconst areas = svg\n\t\t\t.selectAll('path.area')\n\t\t\t.data(groupedData, (group) => group.name);\n\n\t\tconst chartMainContainer = select(\n\t\t\tthis.services.domUtils.getMainContainer()\n\t\t);\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\tareas.exit().attr('opacity', 0).remove();\n\n\t\t// if there is no grouped data (if all data groups are turned OFF with legend which can happen in the case of combo charts)\n\t\tif (!groupedData.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isGradientAllowed) {\n\t\t\t// The fill value of area has been overwritten, get color value from stroke color class instead\n\t\t\tconst strokePathElement = chartMainContainer\n\t\t\t\t.select(\n\t\t\t\t\t`path.${this.model.getColorClassName({\n\t\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.STROKE],\n\t\t\t\t\t\tdataGroupName: groupedData[0].name,\n\t\t\t\t\t})}`\n\t\t\t\t)\n\t\t\t\t.node();\n\n\t\t\tlet colorValue;\n\t\t\tif (strokePathElement) {\n\t\t\t\tcolorValue = getComputedStyle(\n\t\t\t\t\tstrokePathElement as HTMLElement,\n\t\t\t\t\tnull\n\t\t\t\t).getPropertyValue('stroke');\n\t\t\t} else {\n\t\t\t\tconst sparklineColorObject = Tools.getProperty(\n\t\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\t'color',\n\t\t\t\t\t'scale'\n\t\t\t\t);\n\n\t\t\t\tif (sparklineColorObject !== null) {\n\t\t\t\t\tconst sparklineColorObjectKeys = Object.keys(\n\t\t\t\t\t\tsparklineColorObject\n\t\t\t\t\t);\n\t\t\t\t\tcolorValue =\n\t\t\t\t\t\tsparklineColorObject[sparklineColorObjectKeys[0]];\n\t\t\t\t}\n\t\t\t}\n\t\t\tGradientUtils.appendOrUpdateLinearGradient({\n\t\t\t\tsvg: this.parent,\n\t\t\t\tid: this.services.domUtils.generateElementIDString(\n\t\t\t\t\t`${groupedData[0].name.replace(' ', '')}_${\n\t\t\t\t\t\tthis.gradient_id\n\t\t\t\t\t}`\n\t\t\t\t),\n\t\t\t\tx1: '0%',\n\t\t\t\tx2: '0%',\n\t\t\t\ty1: '0%',\n\t\t\t\ty2: '100%',\n\t\t\t\tstops: GradientUtils.getStops(domain, colorValue),\n\t\t\t});\n\t\t} else {\n\t\t\t// make sure there is no linearGradient if no gradient is allowed\n\t\t\tif (!this.parent.selectAll('defs linearGradient').empty()) {\n\t\t\t\tthis.parent.selectAll('defs linearGradient').each(function () {\n\t\t\t\t\tthis.parentNode.remove();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst self = this;\n\n\t\t// Enter paths that need to be introduced\n\t\tconst enteringAreas = areas.enter().append('path');\n\t\tif (isGradientAllowed) {\n\t\t\tenteringAreas\n\t\t\t\t.merge(areas)\n\t\t\t\t.style(\n\t\t\t\t\t'fill',\n\t\t\t\t\t(group) =>\n\t\t\t\t\t\t`url(#${this.services.domUtils.generateElementIDString(\n\t\t\t\t\t\t\t`${group.name.replace(' ', '')}_${this.gradient_id}`\n\t\t\t\t\t\t)})`\n\t\t\t\t)\n\t\t\t\t.attr('class', 'area')\n\t\t\t\t.attr('class', (group) =>\n\t\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\t\tdataGroupName: group.name,\n\t\t\t\t\t\toriginalClassName: 'area',\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.attr('d', (group) => {\n\t\t\t\t\tconst { data } = group;\n\t\t\t\t\treturn areaGenerator(data);\n\t\t\t\t});\n\t\t} else {\n\t\t\tenteringAreas\n\t\t\t\t.attr('opacity', 0)\n\t\t\t\t.merge(areas)\n\t\t\t\t.attr('class', 'area')\n\t\t\t\t.attr('class', (group) =>\n\t\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\t\tclassNameTypes: [\n\t\t\t\t\t\t\tColorClassNameTypes.FILL,\n\t\t\t\t\t\t\tColorClassNameTypes.STROKE,\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdataGroupName: group.name,\n\t\t\t\t\t\toriginalClassName: 'area',\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.style('fill', (group) => self.model.getFillColor(group.name))\n\t\t\t\t.transition()\n\t\t\t\t.call((t) =>\n\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\tname: 'area-update-enter',\n\t\t\t\t\t\tanimate,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.attr(\n\t\t\t\t\t'opacity',\n\t\t\t\t\tboundsEnabled ? 1 : Configuration.area.opacity.selected\n\t\t\t\t)\n\t\t\t\t.attr('d', (group) => {\n\t\t\t\t\tconst { data } = group;\n\t\t\t\t\treturn areaGenerator(data);\n\t\t\t\t});\n\n\t\t\tif (boundsEnabled) {\n\t\t\t\tenteringAreas\n\t\t\t\t\t.attr('fill-opacity', Configuration.area.opacity.selected)\n\t\t\t\t\t.style('stroke', (group) =>\n\t\t\t\t\t\tself.model.getStrokeColor(group.name)\n\t\t\t\t\t)\n\t\t\t\t\t.style('stroke-dasharray', '2, 2')\n\t\t\t\t\t.attr('stroke-width', 0.7 + 'px');\n\t\t\t}\n\t\t}\n\t}\n\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.area')\n\t\t\t.transition('legend-hover-area')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-area',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', (group) => {\n\t\t\t\tif (group.name !== hoveredElement.datum()['name']) {\n\t\t\t\t\treturn Configuration.area.opacity.unselected;\n\t\t\t\t}\n\n\t\t\t\treturn Configuration.area.opacity.selected;\n\t\t\t});\n\t};\n\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll('path.area')\n\t\t\t.transition('legend-mouseout-area')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-area',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', Configuration.area.opacity.selected);\n\t};\n\n\tdestroy() {\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"]}
@@ -8,5 +8,6 @@ export declare class StackedBar extends Bar {
8
8
  handleLegendOnHover: (event: CustomEvent<any>) => void;
9
9
  handleLegendMouseOut: (event: CustomEvent<any>) => void;
10
10
  addEventListeners(): void;
11
+ protected getBarWidth(): any;
11
12
  destroy(): void;
12
13
  }
@@ -15,6 +15,7 @@ var __extends = (this && this.__extends) || (function () {
15
15
  import { Tools } from '../../tools';
16
16
  import { Bar } from './bar';
17
17
  import { Roles, Events, CartesianOrientations, ColorClassNameTypes, RenderTypes, } from '../../interfaces';
18
+ import { DOMUtils } from '../../services';
18
19
  // D3 Imports
19
20
  import { select } from 'd3-selection';
20
21
  var StackedBar = /** @class */ (function (_super) {
@@ -246,6 +247,21 @@ var StackedBar = /** @class */ (function (_super) {
246
247
  });
247
248
  });
248
249
  };
250
+ StackedBar.prototype.getBarWidth = function () {
251
+ var options = this.getOptions();
252
+ if (Tools.getProperty(options, "bars", "width")) {
253
+ return options.bars.width;
254
+ }
255
+ var mainXScale = this.services.cartesianScales.getMainXScale();
256
+ var chartWidth = DOMUtils.getSVGElementSize(this.parent, {
257
+ useAttrs: true,
258
+ }).width;
259
+ var numberOfDomainValues = this.model.getStackKeys().length;
260
+ if (!mainXScale.step) {
261
+ return Math.min(options.bars.maxWidth, (chartWidth * 0.25) / numberOfDomainValues);
262
+ }
263
+ return Math.min(options.bars.maxWidth, mainXScale.step() / 2);
264
+ };
249
265
  StackedBar.prototype.destroy = function () {
250
266
  // Remove event listeners
251
267
  this.parent
@@ -1 +1 @@
1
- {"version":3,"file":"bar-stacked.js","sourceRoot":"","sources":["bar-stacked.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EACN,KAAK,EACL,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,GACX,MAAM,kBAAkB,CAAC;AAE1B,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;IAAgC,8BAAG;IAAnC;QAAA,qEA2SC;QA1SA,UAAI,GAAG,aAAa,CAAC;QACrB,gBAAU,GAAG,WAAW,CAAC,GAAG,CAAC;QAqJ7B,wDAAwD;QACxD,yBAAmB,GAAG,UAAC,KAAkB;YAChC,IAAA,4CAAc,CAAkB;YAEhC,IAAA,uDAAW,CAAkC;YAErD,KAAI,CAAC,MAAM;iBACT,SAAS,CAAC,UAAU,CAAC;iBACrB,UAAU,CAAC,kBAAkB,CAAC;iBAC9B,IAAI,CAAC,UAAC,CAAC;gBACP,OAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;oBACzC,UAAU,EAAE,CAAC;oBACb,IAAI,EAAE,kBAAkB;iBACxB,CAAC;YAHF,CAGE,CACF;iBACA,IAAI,CAAC,SAAS,EAAE,UAAC,CAAC;gBAClB,OAAA,CAAC,CAAC,WAAW,CAAC,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAA3D,CAA2D,CAC3D,CAAC;QACJ,CAAC,CAAC;QAEF,4BAA4B;QAC5B,0BAAoB,GAAG,UAAC,KAAkB;YACzC,KAAI,CAAC,MAAM;iBACT,SAAS,CAAC,UAAU,CAAC;iBACrB,UAAU,CAAC,qBAAqB,CAAC;iBACjC,IAAI,CAAC,UAAC,CAAC;gBACP,OAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;oBACzC,UAAU,EAAE,CAAC;oBACb,IAAI,EAAE,qBAAqB;iBAC3B,CAAC;YAHF,CAGE,CACF;iBACA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC;;IAoHH,CAAC;IAvSA,yBAAI,GAAJ;QACC,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE5C,iDAAiD;QACjD,cAAc,CAAC,gBAAgB,CAC9B,MAAM,CAAC,MAAM,CAAC,UAAU,EACxB,IAAI,CAAC,mBAAmB,CACxB,CAAC;QAEF,gDAAgD;QAChD,cAAc,CAAC,gBAAgB,CAC9B,MAAM,CAAC,MAAM,CAAC,aAAa,EAC3B,IAAI,CAAC,oBAAoB,CACzB,CAAC;IACH,CAAC;IAED,2BAAM,GAAN,UAAO,OAAgB;QAAvB,iBAiIC;QAhIA,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAElE,uDAAuD;QACvD,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,IAAA,sCAAW,CAAkB;QAErC,+DAA+D;QAC/D,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,SAAS,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,IAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAElE,gCAAgC;QAChC,IAAM,SAAS,GAAG,GAAG;aACnB,SAAS,CAAC,QAAQ,CAAC;aACnB,IAAI,CAAC,SAAS,EAAE,UAAC,CAAC,IAAK,OAAA,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAApC,CAAoC,CAAC,CAAC;QAE/D,yCAAyC;QACzC,iDAAiD;QACjD,0DAA0D;QAC1D,4BAA4B;QAC5B,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAE7C,4CAA4C;QAC5C,SAAS;aACP,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;aACzB,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAE5B,0BAA0B;QAC1B,IAAM,IAAI,GAAG,GAAG;aACd,SAAS,CAAC,QAAQ,CAAC;aACnB,SAAS,CAAC,UAAU,CAAC;aACrB,IAAI,CACJ,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,EACR,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,cAAc,EAArB,CAAqB,CAC5B,CAAC;QAEH,sCAAsC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAErB,IAAI,CAAC,KAAK,EAAE;aACV,MAAM,CAAC,MAAM,CAAC;aACd,KAAK,CAAC,IAAI,CAAC;aACX,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,UAAU,EAAE;aACZ,IAAI,CAAC,UAAC,CAAC;YACP,OAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;gBACzC,UAAU,EAAE,CAAC;gBACb,IAAI,EAAE,kBAAkB;gBACxB,OAAO,SAAA;aACP,CAAC;QAJF,CAIE,CACF;aACA,IAAI,CAAC,OAAO,EAAE,UAAC,CAAC;YAChB,OAAA,KAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAC5B,cAAc,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC1C,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC;gBAC7B,iBAAiB,EAAE,KAAK;aACxB,CAAC;QAJF,CAIE,CACF;aACA,KAAK,CAAC,MAAM,EAAE,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAvC,CAAuC,CAAC;aAC7D,IAAI,CAAC,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC;YACf,IAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;YAElC;;;;;eAKG;YACH,IAAM,QAAQ,GAAG,KAAI,CAAC,WAAW,EAAE,CAAC;YACpC,IAAM,EAAE,GACP,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpD,QAAQ,GAAG,CAAC,CAAC;YACd,IAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;YACzB,IAAI,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,IAAI,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9D,kDAAkD;YAClD,IAAI,KAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;gBACvC,OAAO;aACP;YAED,sBAAsB;YACtB,IACC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAC3C;gBACD,IAAM,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,aAAa,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrD,IACC,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE;wBAC9C,qBAAqB,CAAC,QAAQ,EAC7B;wBACD,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACzB;yBAAM;wBACN,EAAE,IAAI,CAAC,CAAC;qBACR;iBACD;qBAAM,IAAI,CAAC,aAAa,EAAE;oBAC1B,IACC,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE;wBAC9C,qBAAqB,CAAC,QAAQ,EAC7B;wBACD,EAAE,IAAI,CAAC,CAAC;qBACR;yBAAM;wBACN,EAAE,IAAI,CAAC,CAAC;qBACR;iBACD;aACD;YAED,OAAO,KAAK,CAAC,qBAAqB,CACjC,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAClB,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACnB,OAAO;aACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC;aACnC,IAAI,CAAC,YAAY,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAX,CAAW,CAAC,CAAC;QAEzC,6CAA6C;QAC7C,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAoCD,sCAAiB,GAAjB;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,IAAA,sCAAW,CAAkB;QAErC,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM;aACT,SAAS,CAAC,UAAU,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,KAAK;;YACtC,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAExC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC5D,KAAK,OAAA;gBACL,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CACnB,CAAC;YAEF,IAAI,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC;gBAC1C,IAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,mBAAmB,CACzE,CAAC,CACD,CAAC;gBACF,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CACvE,CAAC,CACD,CAAC;gBACF,OAAO,CACN,CAAC,CAAC,eAAe,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACrD,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;wBAC7B,KAAK,CAAC,IAAI,CAAC,cAAc;oBAC1B,CAAC,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,CACrC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,iBAAiB,KAAK,SAAS,EAAE;gBACpC,uCAAuC;gBACvC,IAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC;gBAC7E,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;gBAC3E,iBAAiB;oBAChB,GAAC,gBAAgB,IAAG,KAAK,CAAC,IAAI,CAAC,cAAc;oBAC7C,GAAC,eAAe,IAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACjD,GAAC,WAAW,IAAG,KAAK,CAAC,WAAW,CAAC;uBACjC,CAAC;aACF;YAED,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,KAAK,OAAA;gBACL,cAAc,gBAAA;gBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;aACzB,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,KAAK;YACtC,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAEpC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC5D,KAAK,OAAA;gBACL,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,KAAK;YAClC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;gBACxD,KAAK,OAAA;gBACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,KAAK;YACrC,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE;gBAC3D,KAAK,OAAA;gBACL,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,cAAc,gBAAA;aACd,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4BAAO,GAAP;QACC,yBAAyB;QACzB,IAAI,CAAC,MAAM;aACT,SAAS,CAAC,UAAU,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEvB,0BAA0B;QAC1B,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,cAAc,CAAC,mBAAmB,CACjC,MAAM,CAAC,MAAM,CAAC,UAAU,EACxB,IAAI,CAAC,mBAAmB,CACxB,CAAC;QACF,cAAc,CAAC,mBAAmB,CACjC,MAAM,CAAC,MAAM,CAAC,aAAa,EAC3B,IAAI,CAAC,oBAAoB,CACzB,CAAC;IACH,CAAC;IACF,iBAAC;AAAD,CAAC,AA3SD,CAAgC,GAAG,GA2SlC","sourcesContent":["// Internal Imports\nimport { Tools } from '../../tools';\nimport { Bar } from './bar';\nimport {\n\tRoles,\n\tEvents,\n\tCartesianOrientations,\n\tColorClassNameTypes,\n\tRenderTypes,\n} from '../../interfaces';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class StackedBar extends Bar {\n\ttype = 'stacked-bar';\n\trenderType = RenderTypes.SVG;\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.getComponentContainer({ withinChartClip: true });\n\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\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\t\t\tgroups: this.configs.groups,\n\t\t\tdivergent: true,\n\t\t});\n\n\t\tconst activeDataGroupNames = this.model.getActiveDataGroupNames();\n\n\t\t// Update data on all bar groups\n\t\tconst barGroups = svg\n\t\t\t.selectAll('g.bars')\n\t\t\t.data(stackData, (d) => Tools.getProperty(d, 0, groupMapsTo));\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('data-name', '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.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'bar-update-enter',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: 'bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('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\tlet 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// don't show if part of bar is out of zoom domain\n\t\t\t\tif (this.isOutsideZoomedDomain(x0, x1)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\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\tconst barIsNegative = d[0] < 0 && d[1] <= 0;\n\t\t\t\t\tif (barIsNegative && activeDataGroupNames.length > 1) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ty1 += d[1] === 0 ? 2 : 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!barIsNegative) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ty1 += 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t\t}\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\tconst { groupMapsTo } = this.model.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-hover-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', (d) =>\n\t\t\t\td[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.bar')\n\t\t\t.transition('legend-mouseout-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst options = this.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 (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', true);\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\tevent,\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\t\t\t\t\tself.configs.groups\n\t\t\t\t);\n\n\t\t\t\tlet matchingDataPoint = displayData.find((d) => {\n\t\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\treturn (\n\t\t\t\t\t\td[rangeIdentifier] === datum.data[datum[groupMapsTo]] &&\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[groupMapsTo]\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tif (matchingDataPoint === undefined) {\n\t\t\t\t\t// use the primary range and domain ids\n\t\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier();\n\t\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier();\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[groupMapsTo]],\n\t\t\t\t\t\t[groupMapsTo]: datum[groupMapsTo],\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\tevent,\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 (event, 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\tevent,\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\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, 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\tevent,\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 (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', false);\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\tevent,\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":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EACN,KAAK,EACL,MAAM,EACN,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;IAAgC,8BAAG;IAAnC;QAAA,qEAgUC;QA/TA,UAAI,GAAG,aAAa,CAAC;QACrB,gBAAU,GAAG,WAAW,CAAC,GAAG,CAAC;QAqJ7B,wDAAwD;QACxD,yBAAmB,GAAG,UAAC,KAAkB;YAChC,IAAA,4CAAc,CAAkB;YAEhC,IAAA,uDAAW,CAAkC;YAErD,KAAI,CAAC,MAAM;iBACT,SAAS,CAAC,UAAU,CAAC;iBACrB,UAAU,CAAC,kBAAkB,CAAC;iBAC9B,IAAI,CAAC,UAAC,CAAC;gBACP,OAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;oBACzC,UAAU,EAAE,CAAC;oBACb,IAAI,EAAE,kBAAkB;iBACxB,CAAC;YAHF,CAGE,CACF;iBACA,IAAI,CAAC,SAAS,EAAE,UAAC,CAAC;gBAClB,OAAA,CAAC,CAAC,WAAW,CAAC,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAA3D,CAA2D,CAC3D,CAAC;QACJ,CAAC,CAAC;QAEF,4BAA4B;QAC5B,0BAAoB,GAAG,UAAC,KAAkB;YACzC,KAAI,CAAC,MAAM;iBACT,SAAS,CAAC,UAAU,CAAC;iBACrB,UAAU,CAAC,qBAAqB,CAAC;iBACjC,IAAI,CAAC,UAAC,CAAC;gBACP,OAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;oBACzC,UAAU,EAAE,CAAC;oBACb,IAAI,EAAE,qBAAqB;iBAC3B,CAAC;YAHF,CAGE,CACF;iBACA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC;;IAyIH,CAAC;IA5TA,yBAAI,GAAJ;QACC,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE5C,iDAAiD;QACjD,cAAc,CAAC,gBAAgB,CAC9B,MAAM,CAAC,MAAM,CAAC,UAAU,EACxB,IAAI,CAAC,mBAAmB,CACxB,CAAC;QAEF,gDAAgD;QAChD,cAAc,CAAC,gBAAgB,CAC9B,MAAM,CAAC,MAAM,CAAC,aAAa,EAC3B,IAAI,CAAC,oBAAoB,CACzB,CAAC;IACH,CAAC;IAED,2BAAM,GAAN,UAAO,OAAgB;QAAvB,iBAiIC;QAhIA,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAElE,uDAAuD;QACvD,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,IAAA,sCAAW,CAAkB;QAErC,+DAA+D;QAC/D,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,SAAS,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,IAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAElE,gCAAgC;QAChC,IAAM,SAAS,GAAG,GAAG;aACnB,SAAS,CAAC,QAAQ,CAAC;aACnB,IAAI,CAAC,SAAS,EAAE,UAAC,CAAC,IAAK,OAAA,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAApC,CAAoC,CAAC,CAAC;QAE/D,yCAAyC;QACzC,iDAAiD;QACjD,0DAA0D;QAC1D,4BAA4B;QAC5B,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAE7C,4CAA4C;QAC5C,SAAS;aACP,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;aACzB,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAE5B,0BAA0B;QAC1B,IAAM,IAAI,GAAG,GAAG;aACd,SAAS,CAAC,QAAQ,CAAC;aACnB,SAAS,CAAC,UAAU,CAAC;aACrB,IAAI,CACJ,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,EACR,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,cAAc,EAArB,CAAqB,CAC5B,CAAC;QAEH,sCAAsC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAErB,IAAI,CAAC,KAAK,EAAE;aACV,MAAM,CAAC,MAAM,CAAC;aACd,KAAK,CAAC,IAAI,CAAC;aACX,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,UAAU,EAAE;aACZ,IAAI,CAAC,UAAC,CAAC;YACP,OAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC;gBACzC,UAAU,EAAE,CAAC;gBACb,IAAI,EAAE,kBAAkB;gBACxB,OAAO,SAAA;aACP,CAAC;QAJF,CAIE,CACF;aACA,IAAI,CAAC,OAAO,EAAE,UAAC,CAAC;YAChB,OAAA,KAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAC5B,cAAc,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;gBAC1C,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC;gBAC7B,iBAAiB,EAAE,KAAK;aACxB,CAAC;QAJF,CAIE,CACF;aACA,KAAK,CAAC,MAAM,EAAE,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAvC,CAAuC,CAAC;aAC7D,IAAI,CAAC,GAAG,EAAE,UAAC,CAAC,EAAE,CAAC;YACf,IAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;YAElC;;;;;eAKG;YACH,IAAM,QAAQ,GAAG,KAAI,CAAC,WAAW,EAAE,CAAC;YACpC,IAAM,EAAE,GACP,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpD,QAAQ,GAAG,CAAC,CAAC;YACd,IAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;YACzB,IAAI,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,IAAI,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9D,kDAAkD;YAClD,IAAI,KAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;gBACvC,OAAO;aACP;YAED,sBAAsB;YACtB,IACC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAC3C;gBACD,IAAM,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,aAAa,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrD,IACC,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE;wBAC9C,qBAAqB,CAAC,QAAQ,EAC7B;wBACD,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACzB;yBAAM;wBACN,EAAE,IAAI,CAAC,CAAC;qBACR;iBACD;qBAAM,IAAI,CAAC,aAAa,EAAE;oBAC1B,IACC,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE;wBAC9C,qBAAqB,CAAC,QAAQ,EAC7B;wBACD,EAAE,IAAI,CAAC,CAAC;qBACR;yBAAM;wBACN,EAAE,IAAI,CAAC,CAAC;qBACR;iBACD;aACD;YAED,OAAO,KAAK,CAAC,qBAAqB,CACjC,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAClB,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACnB,OAAO;aACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC;aACnC,IAAI,CAAC,YAAY,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAX,CAAW,CAAC,CAAC;QAEzC,6CAA6C;QAC7C,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAoCD,sCAAiB,GAAjB;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,IAAA,sCAAW,CAAkB;QAErC,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM;aACT,SAAS,CAAC,UAAU,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,KAAK;;YACtC,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAExC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC5D,KAAK,OAAA;gBACL,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CACnB,CAAC;YAEF,IAAI,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC;gBAC1C,IAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,mBAAmB,CACzE,CAAC,CACD,CAAC;gBACF,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CACvE,CAAC,CACD,CAAC;gBACF,OAAO,CACN,CAAC,CAAC,eAAe,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACrD,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;wBAC7B,KAAK,CAAC,IAAI,CAAC,cAAc;oBAC1B,CAAC,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,CACrC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,iBAAiB,KAAK,SAAS,EAAE;gBACpC,uCAAuC;gBACvC,IAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC;gBAC7E,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;gBAC3E,iBAAiB;oBAChB,GAAC,gBAAgB,IAAG,KAAK,CAAC,IAAI,CAAC,cAAc;oBAC7C,GAAC,eAAe,IAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACjD,GAAC,WAAW,IAAG,KAAK,CAAC,WAAW,CAAC;uBACjC,CAAC;aACF;YAED,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,KAAK,OAAA;gBACL,cAAc,gBAAA;gBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;aACzB,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,KAAK;YACtC,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAEpC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC5D,KAAK,OAAA;gBACL,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,KAAK;YAClC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;gBACxD,KAAK,OAAA;gBACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,KAAK;YACrC,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE;gBAC3D,KAAK,OAAA;gBACL,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvD,cAAc,gBAAA;aACd,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAES,gCAAW,GAArB;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAChD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SAC1B;QACD,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QACjE,IAAM,UAAU,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE;YAC1D,QAAQ,EAAE,IAAI;SACd,CAAC,CAAC,KAAK,CAAC;QAET,IAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC;QAE9D,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC,GAAG,CACd,OAAO,CAAC,IAAI,CAAC,QAAQ,EACrB,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,oBAAoB,CAC1C,CAAC;SACF;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,4BAAO,GAAP;QACC,yBAAyB;QACzB,IAAI,CAAC,MAAM;aACT,SAAS,CAAC,UAAU,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEvB,0BAA0B;QAC1B,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,cAAc,CAAC,mBAAmB,CACjC,MAAM,CAAC,MAAM,CAAC,UAAU,EACxB,IAAI,CAAC,mBAAmB,CACxB,CAAC;QACF,cAAc,CAAC,mBAAmB,CACjC,MAAM,CAAC,MAAM,CAAC,aAAa,EAC3B,IAAI,CAAC,oBAAoB,CACzB,CAAC;IACH,CAAC;IACF,iBAAC;AAAD,CAAC,AAhUD,CAAgC,GAAG,GAgUlC","sourcesContent":["// Internal Imports\nimport { Tools } from '../../tools';\nimport { Bar } from './bar';\nimport {\n\tRoles,\n\tEvents,\n\tCartesianOrientations,\n\tColorClassNameTypes,\n\tRenderTypes,\n} from '../../interfaces';\nimport { DOMUtils } from '../../services';\n\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class StackedBar extends Bar {\n\ttype = 'stacked-bar';\n\trenderType = RenderTypes.SVG;\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.getComponentContainer({ withinChartClip: true });\n\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.getOptions();\n\t\tconst { groupMapsTo } = options.data;\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\t\t\tgroups: this.configs.groups,\n\t\t\tdivergent: true,\n\t\t});\n\n\t\tconst activeDataGroupNames = this.model.getActiveDataGroupNames();\n\n\t\t// Update data on all bar groups\n\t\tconst barGroups = svg\n\t\t\t.selectAll('g.bars')\n\t\t\t.data(stackData, (d) => Tools.getProperty(d, 0, groupMapsTo));\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('data-name', '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.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'bar-update-enter',\n\t\t\t\t\tanimate,\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: 'bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('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\tlet 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// don't show if part of bar is out of zoom domain\n\t\t\t\tif (this.isOutsideZoomedDomain(x0, x1)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\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\tconst barIsNegative = d[0] < 0 && d[1] <= 0;\n\t\t\t\t\tif (barIsNegative && activeDataGroupNames.length > 1) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ty1 += d[1] === 0 ? 2 : 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!barIsNegative) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.services.cartesianScales.getOrientation() ===\n\t\t\t\t\t\t\tCartesianOrientations.VERTICAL\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ty1 += 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t\t}\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\tconst { groupMapsTo } = this.model.getOptions().data;\n\n\t\tthis.parent\n\t\t\t.selectAll('path.bar')\n\t\t\t.transition('legend-hover-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', (d) =>\n\t\t\t\td[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.bar')\n\t\t\t.transition('legend-mouseout-bar')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-bar',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr('opacity', 1);\n\t};\n\n\taddEventListeners() {\n\t\tconst options = this.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 (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', true);\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\tevent,\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\t\t\t\t\tself.configs.groups\n\t\t\t\t);\n\n\t\t\t\tlet matchingDataPoint = displayData.find((d) => {\n\t\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier(\n\t\t\t\t\t\td\n\t\t\t\t\t);\n\t\t\t\t\treturn (\n\t\t\t\t\t\td[rangeIdentifier] === datum.data[datum[groupMapsTo]] &&\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[groupMapsTo]\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tif (matchingDataPoint === undefined) {\n\t\t\t\t\t// use the primary range and domain ids\n\t\t\t\t\tconst domainIdentifier = self.services.cartesianScales.getDomainIdentifier();\n\t\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier();\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[groupMapsTo]],\n\t\t\t\t\t\t[groupMapsTo]: datum[groupMapsTo],\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\tevent,\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 (event, 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\tevent,\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\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, 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\tevent,\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 (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed('hovered', false);\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\tevent,\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\tprotected getBarWidth() {\n\t\tconst options = this.getOptions();\n\t\tif (Tools.getProperty(options, \"bars\", \"width\")) {\n\t\t\treturn options.bars.width;\n\t\t}\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst chartWidth = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true,\n\t\t}).width;\n\t\n\t\tconst numberOfDomainValues = this.model.getStackKeys().length;\n\t\n\t\tif (!mainXScale.step) {\n\t\t\treturn Math.min(\n\t\t\t\toptions.bars.maxWidth,\n\t\t\t\t(chartWidth * 0.25) / numberOfDomainValues\n\t\t\t);\n\t\t}\n\t\treturn Math.min(options.bars.maxWidth, mainXScale.step() / 2);\n\t}\n\t\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"]}
@@ -381,6 +381,13 @@ var Radar = /** @class */ (function (_super) {
381
381
  })
382
382
  .attr('y', function (key) {
383
383
  return polarToCartesianCoords(xScale(key), yScale.range()[1] + xLabelPadding, c).y;
384
+ })
385
+ .end()
386
+ .finally(function () {
387
+ // Align chart horizontally after x-axies has finished rendering
388
+ var alignment = Tools.getProperty(options, 'radar', 'alignment');
389
+ var alignmentXOffset = _this.getAlignmentXOffset(alignment, svg, _this.getParent());
390
+ svg.attr('x', alignmentXOffset);
384
391
  });
385
392
  });
386
393
  }, function (exit) {
@@ -601,9 +608,6 @@ var Radar = /** @class */ (function (_super) {
601
608
  .remove();
602
609
  });
603
610
  });
604
- var alignment = Tools.getProperty(options, 'radar', 'alignment');
605
- var alignmentXOffset = this.getAlignmentXOffset(alignment, svg, this.getParent());
606
- svg.attr('x', alignmentXOffset);
607
611
  // Add event listeners
608
612
  this.addEventListeners();
609
613
  };
@@ -1 +1 @@
1
- {"version":3,"file":"radar.js","sourceRoot":"","sources":["radar.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport {\n\tEvents,\n\tRoles,\n\tColorClassNameTypes,\n\tRenderTypes,\n\tAlignments,\n} from '../../interfaces';\nimport { Tools } from '../../tools';\nimport {\n\tPoint,\n\tAngle,\n\tradialLabelPlacement,\n\tradToDeg,\n\tpolarToCartesianCoords,\n\tdistanceBetweenPointOnCircAndVerticalDiameter,\n} from '../../services/angle-utils';\nimport * as Configuration from '../../configuration';\n\n// D3 Imports\nimport { select } from 'd3-selection';\nimport { scaleBand, scaleLinear } from 'd3-scale';\nimport { max, min, extent } from 'd3-array';\nimport { lineRadial, curveLinearClosed } from 'd3-shape';\n\nexport class Radar extends Component {\n\ttype = 'radar';\n\trenderType = RenderTypes.SVG;\n\n\tsvg: SVGElement;\n\tgroupMapsTo: string;\n\tuniqueKeys: string[];\n\tuniqueGroups: string[];\n\tfullDataNormalized: any;\n\tgroupedDataNormalized: any;\n\n\tinit() {\n\t\tconst { events } = this.services;\n\t\t// Highlight correct line legend item hovers\n\t\tevents.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\t\t// Un-highlight lines on legend item mouseouts\n\t\tevents.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\trender(animate = true) {\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(svg, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\tconst data = this.model.getData();\n\t\tconst groupedData = this.model.getGroupedData();\n\n\t\tconst options = this.getOptions();\n\n\t\tconst groupMapsTo = Tools.getProperty(options, 'data', 'groupMapsTo');\n\t\tconst valueMapsTo = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'radar',\n\t\t\t'axes',\n\t\t\t'value'\n\t\t);\n\n\t\tconst { angle, value } = Tools.getProperty(options, 'radar', 'axes');\n\n\t\tconst {\n\t\t\txLabelPadding,\n\t\t\tyLabelPadding,\n\t\t\tyTicksNumber,\n\t\t\tminRange,\n\t\t\txAxisRectHeight,\n\t\t} = Configuration.radar;\n\n\t\tthis.uniqueKeys = Array.from(new Set(data.map((d) => d[angle])));\n\t\tthis.uniqueGroups = Array.from(\n\t\t\tnew Set(data.map((d) => d[groupMapsTo]))\n\t\t);\n\t\tthis.fullDataNormalized = this.normalizeFlatData(data);\n\t\tthis.groupedDataNormalized = this.normalizeGroupedData(groupedData);\n\n\t\tconst labelHeight = this.getLabelDimensions(this.uniqueKeys[0]).height;\n\t\tconst margin = 2 * (labelHeight + yLabelPadding);\n\t\tconst size = Math.min(width, height);\n\t\tconst diameter = size - margin;\n\t\tconst radius = diameter / 2;\n\n\t\tif (radius <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// given a key, return the corresponding angle in radiants\n\t\t// rotated by -PI/2 because we want angle 0° at -y (12 o’clock)\n\t\tconst xScale = scaleBand<string>()\n\t\t\t.domain(this.fullDataNormalized.map((d) => d[angle]))\n\t\t\t.range(\n\t\t\t\t[0, 2 * Math.PI].map((a) => a - Math.PI / 2) as [Angle, Angle]\n\t\t\t);\n\n\t\tconst centerPointMinValue = min(\n\t\t\tthis.fullDataNormalized.map((d) => d[value]) as number[]\n\t\t);\n\t\tconst yScale = scaleLinear()\n\t\t\t.domain([\n\t\t\t\tcenterPointMinValue >= 0 ? 0 : centerPointMinValue,\n\t\t\t\tmax(this.fullDataNormalized.map((d) => d[value]) as number[]),\n\t\t\t])\n\t\t\t.range([minRange, radius])\n\t\t\t.nice(yTicksNumber);\n\t\tconst yTicks = yScale.ticks(yTicksNumber);\n\n\t\tconst colorScale = (group: string): string =>\n\t\t\tthis.model.getFillColor(group);\n\n\t\t// constructs a new radial line generator\n\t\t// the angle accessor returns the angle in radians with 0° at -y (12 o’clock)\n\t\t// so map back the angle\n\t\tconst radialLineGenerator = lineRadial<any>()\n\t\t\t.angle((d) => xScale(d[angle]) + Math.PI / 2)\n\t\t\t.radius((d) => yScale(d[value]))\n\t\t\t.curve(curveLinearClosed);\n\n\t\t// compute the space that each x label needs\n\t\tconst horizSpaceNeededByEachXLabel = this.uniqueKeys.map((key) => {\n\t\t\tconst tickWidth = this.getLabelDimensions(key).width;\n\t\t\t// compute the distance between the point that the label rapresents and the vertical diameter\n\t\t\tconst distanceFromDiameter = distanceBetweenPointOnCircAndVerticalDiameter(\n\t\t\t\txScale(key),\n\t\t\t\tradius\n\t\t\t);\n\t\t\t// the space each label occupies is the sum of these two values\n\t\t\treturn tickWidth + distanceFromDiameter;\n\t\t});\n\t\tconst leftPadding = max(horizSpaceNeededByEachXLabel);\n\n\t\t// center coordinates\n\t\tconst c: Point = {\n\t\t\tx: leftPadding + xLabelPadding,\n\t\t\ty: height / 2,\n\t\t};\n\n\t\t/////////////////////////////\n\t\t// Drawing the radar\n\t\t/////////////////////////////\n\n\t\t// y axes\n\t\tconst yAxes = DOMUtils.appendOrSelect(svg, 'g.y-axes').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst yAxisUpdate = yAxes\n\t\t\t.selectAll('path')\n\t\t\t.data(yTicks, (tick) => tick);\n\t\t// for each tick, create array of data corresponding to the points composing the shape\n\t\tconst shapeData = (tick: number) =>\n\t\t\tthis.uniqueKeys.map((key) => ({ [angle]: key, [value]: tick }));\n\t\tyAxisUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.attr('transform', `translate(${c.x}, ${c.y})`)\n\t\t\t\t\t.attr('fill', 'none')\n\t\t\t\t\t.call((selection) =>\n\t\t\t\t\t\tselection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_y_axes_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t\t.attr('d', (tick) =>\n\t\t\t\t\t\t\t\tradialLineGenerator(shapeData(tick))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t(update) =>\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_y_axes_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr('transform', `translate(${c.x}, ${c.y})`)\n\t\t\t\t\t\t.attr('d', (tick) =>\n\t\t\t\t\t\t\tradialLineGenerator(shapeData(tick))\n\t\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_y_axes_exit',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('d', (tick) =>\n\t\t\t\t\t\t\tradialLineGenerator(shapeData(tick))\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// x axes\n\t\tconst xAxes = DOMUtils.appendOrSelect(svg, 'g.x-axes').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst xAxisUpdate = xAxes\n\t\t\t.selectAll('line')\n\t\t\t.data(this.uniqueKeys, (key) => key);\n\t\txAxisUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.attr('class', (key) => `x-axis-${Tools.kebabCase(key)}`) // replace spaces with -\n\t\t\t\t\t.attr('stroke-dasharray', '0')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x1',\n\t\t\t\t\t\t(key) => polarToCartesianCoords(xScale(key), 0, c).x\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'y1',\n\t\t\t\t\t\t(key) => polarToCartesianCoords(xScale(key), 0, c).y\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x2',\n\t\t\t\t\t\t(key) => polarToCartesianCoords(xScale(key), 0, c).x\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'y2',\n\t\t\t\t\t\t(key) => polarToCartesianCoords(xScale(key), 0, c).y\n\t\t\t\t\t)\n\t\t\t\t\t.call((selection) =>\n\t\t\t\t\t\tselection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_x_axes_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'x1',\n\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\t\tyScale.range()[0],\n\t\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'y1',\n\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\t\tyScale.range()[0],\n\t\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'x2',\n\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\t\tyScale.range()[1],\n\t\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'y2',\n\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\t\tyScale.range()[1],\n\t\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t(update) =>\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_x_axes_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'x1',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[0],\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'y1',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[0],\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'x2',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[1],\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'y2',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[1],\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_x_axes_exit',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// x labels\n\t\tconst xLabels = DOMUtils.appendOrSelect(svg, 'g.x-labels').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst xLabelUpdate = xLabels.selectAll('text').data(this.uniqueKeys);\n\t\txLabelUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text((key) => key)\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x',\n\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\tyScale.range()[1] + xLabelPadding,\n\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t).x\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'y',\n\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\tyScale.range()[1] + xLabelPadding,\n\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t).y\n\t\t\t\t\t)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'text-anchor',\n\t\t\t\t\t\t(key) => radialLabelPlacement(xScale(key)).textAnchor\n\t\t\t\t\t)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'dominant-baseline',\n\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\tradialLabelPlacement(xScale(key)).dominantBaseline\n\t\t\t\t\t)\n\t\t\t\t\t.call((selection) =>\n\t\t\t\t\t\tselection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_x_labels_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t),\n\t\t\t(update) =>\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_x_labels_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'x',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[1] + xLabelPadding,\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'y',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[1] + xLabelPadding,\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_x_labels_exit',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// blobs\n\t\tconst blobs = DOMUtils.appendOrSelect(svg, 'g.blobs').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst blobUpdate = blobs\n\t\t\t.selectAll('path')\n\t\t\t.data(this.groupedDataNormalized, (group) => group.name);\n\n\t\tblobUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.attr('class', (group) =>\n\t\t\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\t\t\tclassNameTypes: [\n\t\t\t\t\t\t\t\tColorClassNameTypes.FILL,\n\t\t\t\t\t\t\t\tColorClassNameTypes.STROKE,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdataGroupName: group.name,\n\t\t\t\t\t\t\toriginalClassName: 'blob',\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t\t\t.attr('aria-label', (d) => d['name'])\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\tanimate\n\t\t\t\t\t\t\t? () =>\n\t\t\t\t\t\t\t\t\t`translate(${c.x}, ${c.y}) scale(${\n\t\t\t\t\t\t\t\t\t\t1 + Math.random() * 0.35\n\t\t\t\t\t\t\t\t\t})`\n\t\t\t\t\t\t\t: `translate(${c.x}, ${c.y})`\n\t\t\t\t\t)\n\t\t\t\t\t.style('fill', (group) => colorScale(group.name))\n\t\t\t\t\t.style('fill-opacity', Configuration.radar.opacity.selected)\n\t\t\t\t\t.style('stroke', (group) => colorScale(group.name))\n\n\t\t\t\t\t.call((selection) => {\n\t\t\t\t\t\tconst selectionUpdate = selection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_blobs_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (animate) {\n\t\t\t\t\t\t\tselectionUpdate\n\t\t\t\t\t\t\t\t.delay(() => Math.random() * 30)\n\t\t\t\t\t\t\t\t.attr('transform', `translate(${c.x}, ${c.y})`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselectionUpdate\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t\t.attr('d', (group) =>\n\t\t\t\t\t\t\t\tradialLineGenerator(group.data)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t(update) => {\n\t\t\t\tupdate\n\t\t\t\t\t.attr('class', (group) =>\n\t\t\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\t\t\tclassNameTypes: [\n\t\t\t\t\t\t\t\tColorClassNameTypes.FILL,\n\t\t\t\t\t\t\t\tColorClassNameTypes.STROKE,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdataGroupName: group.name,\n\t\t\t\t\t\t\toriginalClassName: 'blob',\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.style('fill', (group) => colorScale(group.name))\n\t\t\t\t\t.style('stroke', (group) => colorScale(group.name));\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_blobs_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr('transform', `translate(${c.x}, ${c.y})`)\n\t\t\t\t\t\t.attr('d', (group) => radialLineGenerator(group.data))\n\t\t\t\t);\n\t\t\t},\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) => {\n\t\t\t\t\tconst selectionUpdate = selection.transition().call((t) =>\n\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\tname: 'radar_blobs_exit',\n\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tif (animate) {\n\t\t\t\t\t\tselectionUpdate\n\t\t\t\t\t\t\t.delay(() => Math.random() * 30)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\t\t`translate(${c.x}, ${c.y}) scale(${\n\t\t\t\t\t\t\t\t\t\t1 + Math.random() * 0.35\n\t\t\t\t\t\t\t\t\t})`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tselectionUpdate.attr('opacity', 0).remove();\n\t\t\t\t})\n\t\t);\n\n\t\t// data dots\n\t\tconst dots = DOMUtils.appendOrSelect(svg, 'g.dots').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\n\t\tconst dotsUpdate = dots\n\t\t\t.selectAll('circle')\n\t\t\t// Filter out dots with no value so they are not rendered\n\t\t\t.data(\n\t\t\t\tthis.fullDataNormalized.filter(\n\t\t\t\t\t(d) => Tools.getProperty(d, value) !== null\n\t\t\t\t)\n\t\t\t);\n\n\t\tdotsUpdate\n\t\t\t.join(\n\t\t\t\t(enter) =>\n\t\t\t\t\tenter\n\t\t\t\t\t\t.append('circle')\n\t\t\t\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t\t\t\t.attr('aria-label', (d) => d[valueMapsTo]),\n\t\t\t\t(update) => update,\n\t\t\t\t(exit) => exit.remove()\n\t\t\t)\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: Tools.kebabCase(d[angle]),\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr(\n\t\t\t\t'cx',\n\t\t\t\t(d) =>\n\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\txScale(d[angle]),\n\t\t\t\t\t\tyScale(d[value]),\n\t\t\t\t\t\tc\n\t\t\t\t\t).x\n\t\t\t)\n\t\t\t.attr(\n\t\t\t\t'cy',\n\t\t\t\t(d) =>\n\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\txScale(d[angle]),\n\t\t\t\t\t\tyScale(d[value]),\n\t\t\t\t\t\tc\n\t\t\t\t\t).y\n\t\t\t)\n\t\t\t.attr('r', 0)\n\t\t\t.attr('opacity', 0)\n\t\t\t.style('fill', (d) => colorScale(d[groupMapsTo]));\n\n\t\t// rectangles\n\t\tconst xAxesRect = DOMUtils.appendOrSelect(svg, 'g.x-axes-rect').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst xAxisRectUpdate = xAxesRect\n\t\t\t.selectAll('rect')\n\t\t\t.data(this.uniqueKeys);\n\t\txAxisRectUpdate\n\t\t\t.join(\n\t\t\t\t(enter) => enter.append('rect'),\n\t\t\t\t(update) => update,\n\t\t\t\t(exit) => exit.remove()\n\t\t\t)\n\t\t\t.attr('x', c.x)\n\t\t\t.attr('y', c.y - xAxisRectHeight / 2)\n\t\t\t.attr('width', yScale.range()[1])\n\t\t\t.attr('height', xAxisRectHeight)\n\t\t\t.style('fill', 'red')\n\t\t\t.style('fill-opacity', 0)\n\t\t\t.attr(\n\t\t\t\t'transform',\n\t\t\t\t(key) => `rotate(${radToDeg(xScale(key))}, ${c.x}, ${c.y})`\n\t\t\t);\n\n\t\t// y labels (show only the min and the max labels)\n\t\tconst yLabels = DOMUtils.appendOrSelect(svg, 'g.y-labels').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst yLabelUpdate = yLabels.selectAll('text').data(extent(yTicks));\n\t\tyLabelUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.text((tick) => tick)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x',\n\t\t\t\t\t\t(tick) =>\n\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t-Math.PI / 2,\n\t\t\t\t\t\t\t\tyScale(tick),\n\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t).x + yLabelPadding\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'y',\n\t\t\t\t\t\t(tick) =>\n\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t-Math.PI / 2,\n\t\t\t\t\t\t\t\tyScale(tick),\n\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t).y\n\t\t\t\t\t)\n\t\t\t\t\t.style('text-anchor', 'start')\n\t\t\t\t\t.style('dominant-baseline', 'middle')\n\t\t\t\t\t.call((selection) =>\n\t\t\t\t\t\tselection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_y_labels_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t),\n\t\t\t(update) =>\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_y_labels_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.text((tick) => tick)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'x',\n\t\t\t\t\t\t\t(tick) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t-Math.PI / 2,\n\t\t\t\t\t\t\t\t\tyScale(tick),\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).x + yLabelPadding\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'y',\n\t\t\t\t\t\t\t(tick) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t-Math.PI / 2,\n\t\t\t\t\t\t\t\t\tyScale(tick),\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_y_labels_exit',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\tconst alignment = Tools.getProperty(options, 'radar', 'alignment');\n\n\t\tconst alignmentXOffset = this.getAlignmentXOffset(\n\t\t\talignment,\n\t\t\tsvg,\n\t\t\tthis.getParent()\n\t\t);\n\t\tsvg.attr('x', alignmentXOffset);\n\n\t\t// Add event listeners\n\t\tthis.addEventListeners();\n\t}\n\n\tgetAlignmentXOffset(alignment, svg, parent) {\n\t\tconst svgDimensions = DOMUtils.getSVGElementSize(svg, {\n\t\t\tuseBBox: true,\n\t\t});\n\t\tconst { width } = DOMUtils.getSVGElementSize(parent, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\tlet alignmentOffset = 0;\n\t\tif (alignment === Alignments.CENTER) {\n\t\t\talignmentOffset = Math.floor((width - svgDimensions.width) / 2);\n\t\t} else if (alignment === Alignments.RIGHT) {\n\t\t\talignmentOffset = width - svgDimensions.width;\n\t\t}\n\n\t\treturn alignmentOffset;\n\t}\n\n\t// append temporarily the label to get the exact space that it occupies\n\tgetLabelDimensions = (label: string) => {\n\t\tconst tmpTick = DOMUtils.appendOrSelect(\n\t\t\tthis.getComponentContainer(),\n\t\t\t`g.tmp-tick`\n\t\t);\n\t\tconst tmpTickText = DOMUtils.appendOrSelect(tmpTick, `text`).text(\n\t\t\tlabel\n\t\t);\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(\n\t\t\ttmpTickText.node(),\n\t\t\t{ useBBox: true }\n\t\t);\n\t\ttmpTick.remove();\n\t\treturn { width, height };\n\t};\n\n\t// Given a flat array of objects, if there are missing data on key,\n\t// creates corresponding data with value = null\n\tnormalizeFlatData = (dataset: any) => {\n\t\tconst options = this.getOptions();\n\t\tconst { angle, value } = Tools.getProperty(options, 'radar', 'axes');\n\t\tconst groupMapsTo = Tools.getProperty(options, 'data', 'groupMapsTo');\n\t\tconst completeBlankData = Tools.flatMapDeep(\n\t\t\tthis.uniqueKeys.map((key) => {\n\t\t\t\treturn this.uniqueGroups.map((group) => ({\n\t\t\t\t\t[angle]: key,\n\t\t\t\t\t[groupMapsTo]: group,\n\t\t\t\t\t[value]: null,\n\t\t\t\t}));\n\t\t\t})\n\t\t);\n\t\treturn Tools.merge(completeBlankData, dataset);\n\t};\n\n\t// Given a a grouped array of objects, if there are missing data on key,\n\t// creates corresponding data with value = null\n\tnormalizeGroupedData = (dataset: any) => {\n\t\tconst options = this.getOptions();\n\t\tconst { angle, value } = Tools.getProperty(options, 'radar', 'axes');\n\t\tconst groupMapsTo = Tools.getProperty(options, 'data', 'groupMapsTo');\n\t\treturn dataset.map(({ name, data }) => {\n\t\t\tconst completeBlankData = this.uniqueKeys.map((k) => ({\n\t\t\t\t[groupMapsTo]: name,\n\t\t\t\t[angle]: k,\n\t\t\t\t[value]: null,\n\t\t\t}));\n\t\t\treturn { name, data: Tools.merge(completeBlankData, data) };\n\t\t});\n\t};\n\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\t\tthis.parent\n\t\t\t.selectAll('g.blobs path')\n\t\t\t.transition('legend-hover-blob')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-blob',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill-opacity', (group) => {\n\t\t\t\tif (group.name !== hoveredElement.datum().name) {\n\t\t\t\t\treturn Configuration.radar.opacity.unselected;\n\t\t\t\t}\n\t\t\t\treturn Configuration.radar.opacity.selected;\n\t\t\t})\n\t\t\t.style('stroke-opacity', (group) => {\n\t\t\t\tif (group.name !== hoveredElement.datum().name) {\n\t\t\t\t\treturn Configuration.radar.opacity.unselected;\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t});\n\t};\n\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll('g.blobs path')\n\t\t\t.transition('legend-mouseout-blob')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-blob',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill-opacity', Configuration.radar.opacity.selected)\n\t\t\t.style('stroke-opacity', 1);\n\t};\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent\n\t\t\t.selectAll('.x-axes-rect > rect')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null);\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\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst {\n\t\t\taxes: { angle },\n\t\t} = Tools.getProperty(this.getOptions(), 'radar');\n\n\t\t// events on x axes rects\n\t\tthis.parent\n\t\t\t.selectAll('.x-axes-rect > rect')\n\t\t\t.on('mouseover', function (event, 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(\n\t\t\t\t\tEvents.Radar.X_AXIS_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst axisLine = self.parent.select(\n\t\t\t\t\t`.x-axes .x-axis-${Tools.kebabCase(datum)}`\n\t\t\t\t);\n\t\t\t\tconst dots = self.parent.selectAll(\n\t\t\t\t\t`.dots circle.${Tools.kebabCase(datum)}`\n\t\t\t\t);\n\n\t\t\t\t// Change style\n\t\t\t\taxisLine\n\t\t\t\t\t.classed('hovered', true)\n\t\t\t\t\t.attr('stroke-dasharray', '4 4');\n\t\t\t\tdots.classed('hovered', true)\n\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t.attr('r', Configuration.radar.dotsRadius);\n\n\t\t\t\t// get the items that should be highlighted\n\t\t\t\tconst itemsToHighlight = self.fullDataNormalized.filter(\n\t\t\t\t\t(d) => d[angle] === datum\n\t\t\t\t);\n\n\t\t\t\tconst options = self.getOptions();\n\t\t\t\tconst { groupMapsTo } = options.data;\n\t\t\t\tconst valueMapsTo = Tools.getProperty(\n\t\t\t\t\toptions,\n\t\t\t\t\t'radar',\n\t\t\t\t\t'axes',\n\t\t\t\t\t'value'\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\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t\titems: itemsToHighlight\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(datum) => typeof datum[valueMapsTo] === 'number'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((datum) => ({\n\t\t\t\t\t\t\tlabel: datum[groupMapsTo],\n\t\t\t\t\t\t\tvalue: datum[valueMapsTo],\n\t\t\t\t\t\t\tcolor: self.model.getFillColor(datum[groupMapsTo]),\n\t\t\t\t\t\t\tclass: self.model.getColorClassName({\n\t\t\t\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.TOOLTIP],\n\t\t\t\t\t\t\t\tdataGroupName: datum[groupMapsTo],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mousemove', function (event, 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(\n\t\t\t\t\tEvents.Radar.X_AXIS_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Radar.X_AXIS_CLICK, {\n\t\t\t\t\tevent,\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 (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\tconst axisLine = self.parent.select(\n\t\t\t\t\t`.x-axes .x-axis-${Tools.kebabCase(datum)}`\n\t\t\t\t);\n\t\t\t\tconst dots = self.parent.selectAll(\n\t\t\t\t\t`.dots circle.${Tools.kebabCase(datum)}`\n\t\t\t\t);\n\n\t\t\t\t// Change style\n\t\t\t\taxisLine\n\t\t\t\t\t.classed('hovered', false)\n\t\t\t\t\t.attr('stroke-dasharray', '0');\n\n\t\t\t\tdots.classed('hovered', false).attr('opacity', 0).attr('r', 0);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Radar.X_AXIS_MOUSEOUT,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\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});\n\t}\n}\n"]}
1
+ {"version":3,"file":"radar.js","sourceRoot":"","sources":["radar.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport {\n\tEvents,\n\tRoles,\n\tColorClassNameTypes,\n\tRenderTypes,\n\tAlignments,\n} from '../../interfaces';\nimport { Tools } from '../../tools';\nimport {\n\tPoint,\n\tAngle,\n\tradialLabelPlacement,\n\tradToDeg,\n\tpolarToCartesianCoords,\n\tdistanceBetweenPointOnCircAndVerticalDiameter,\n} from '../../services/angle-utils';\nimport * as Configuration from '../../configuration';\n\n// D3 Imports\nimport { select } from 'd3-selection';\nimport { scaleBand, scaleLinear } from 'd3-scale';\nimport { max, min, extent } from 'd3-array';\nimport { lineRadial, curveLinearClosed } from 'd3-shape';\n\nexport class Radar extends Component {\n\ttype = 'radar';\n\trenderType = RenderTypes.SVG;\n\n\tsvg: SVGElement;\n\tgroupMapsTo: string;\n\tuniqueKeys: string[];\n\tuniqueGroups: string[];\n\tfullDataNormalized: any;\n\tgroupedDataNormalized: any;\n\n\tinit() {\n\t\tconst { events } = this.services;\n\t\t// Highlight correct line legend item hovers\n\t\tevents.addEventListener(\n\t\t\tEvents.Legend.ITEM_HOVER,\n\t\t\tthis.handleLegendOnHover\n\t\t);\n\t\t// Un-highlight lines on legend item mouseouts\n\t\tevents.addEventListener(\n\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\tthis.handleLegendMouseOut\n\t\t);\n\t}\n\n\trender(animate = true) {\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(svg, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\tconst data = this.model.getData();\n\t\tconst groupedData = this.model.getGroupedData();\n\n\t\tconst options = this.getOptions();\n\n\t\tconst groupMapsTo = Tools.getProperty(options, 'data', 'groupMapsTo');\n\t\tconst valueMapsTo = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'radar',\n\t\t\t'axes',\n\t\t\t'value'\n\t\t);\n\n\t\tconst { angle, value } = Tools.getProperty(options, 'radar', 'axes');\n\n\t\tconst {\n\t\t\txLabelPadding,\n\t\t\tyLabelPadding,\n\t\t\tyTicksNumber,\n\t\t\tminRange,\n\t\t\txAxisRectHeight,\n\t\t} = Configuration.radar;\n\n\t\tthis.uniqueKeys = Array.from(new Set(data.map((d) => d[angle])));\n\t\tthis.uniqueGroups = Array.from(\n\t\t\tnew Set(data.map((d) => d[groupMapsTo]))\n\t\t);\n\t\tthis.fullDataNormalized = this.normalizeFlatData(data);\n\t\tthis.groupedDataNormalized = this.normalizeGroupedData(groupedData);\n\n\t\tconst labelHeight = this.getLabelDimensions(this.uniqueKeys[0]).height;\n\t\tconst margin = 2 * (labelHeight + yLabelPadding);\n\t\tconst size = Math.min(width, height);\n\t\tconst diameter = size - margin;\n\t\tconst radius = diameter / 2;\n\n\t\tif (radius <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// given a key, return the corresponding angle in radiants\n\t\t// rotated by -PI/2 because we want angle 0° at -y (12 o’clock)\n\t\tconst xScale = scaleBand<string>()\n\t\t\t.domain(this.fullDataNormalized.map((d) => d[angle]))\n\t\t\t.range(\n\t\t\t\t[0, 2 * Math.PI].map((a) => a - Math.PI / 2) as [Angle, Angle]\n\t\t\t);\n\n\t\tconst centerPointMinValue = min(\n\t\t\tthis.fullDataNormalized.map((d) => d[value]) as number[]\n\t\t);\n\t\tconst yScale = scaleLinear()\n\t\t\t.domain([\n\t\t\t\tcenterPointMinValue >= 0 ? 0 : centerPointMinValue,\n\t\t\t\tmax(this.fullDataNormalized.map((d) => d[value]) as number[]),\n\t\t\t])\n\t\t\t.range([minRange, radius])\n\t\t\t.nice(yTicksNumber);\n\t\tconst yTicks = yScale.ticks(yTicksNumber);\n\n\t\tconst colorScale = (group: string): string =>\n\t\t\tthis.model.getFillColor(group);\n\n\t\t// constructs a new radial line generator\n\t\t// the angle accessor returns the angle in radians with 0° at -y (12 o’clock)\n\t\t// so map back the angle\n\t\tconst radialLineGenerator = lineRadial<any>()\n\t\t\t.angle((d) => xScale(d[angle]) + Math.PI / 2)\n\t\t\t.radius((d) => yScale(d[value]))\n\t\t\t.curve(curveLinearClosed);\n\n\t\t// compute the space that each x label needs\n\t\tconst horizSpaceNeededByEachXLabel = this.uniqueKeys.map((key) => {\n\t\t\tconst tickWidth = this.getLabelDimensions(key).width;\n\t\t\t// compute the distance between the point that the label rapresents and the vertical diameter\n\t\t\tconst distanceFromDiameter = distanceBetweenPointOnCircAndVerticalDiameter(\n\t\t\t\txScale(key),\n\t\t\t\tradius\n\t\t\t);\n\t\t\t// the space each label occupies is the sum of these two values\n\t\t\treturn tickWidth + distanceFromDiameter;\n\t\t});\n\t\tconst leftPadding = max(horizSpaceNeededByEachXLabel);\n\n\t\t// center coordinates\n\t\tconst c: Point = {\n\t\t\tx: leftPadding + xLabelPadding,\n\t\t\ty: height / 2,\n\t\t};\n\n\t\t/////////////////////////////\n\t\t// Drawing the radar\n\t\t/////////////////////////////\n\n\t\t// y axes\n\t\tconst yAxes = DOMUtils.appendOrSelect(svg, 'g.y-axes').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst yAxisUpdate = yAxes\n\t\t\t.selectAll('path')\n\t\t\t.data(yTicks, (tick) => tick);\n\t\t// for each tick, create array of data corresponding to the points composing the shape\n\t\tconst shapeData = (tick: number) =>\n\t\t\tthis.uniqueKeys.map((key) => ({ [angle]: key, [value]: tick }));\n\t\tyAxisUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.attr('transform', `translate(${c.x}, ${c.y})`)\n\t\t\t\t\t.attr('fill', 'none')\n\t\t\t\t\t.call((selection) =>\n\t\t\t\t\t\tselection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_y_axes_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t\t.attr('d', (tick) =>\n\t\t\t\t\t\t\t\tradialLineGenerator(shapeData(tick))\n\t\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t(update) =>\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_y_axes_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr('transform', `translate(${c.x}, ${c.y})`)\n\t\t\t\t\t\t.attr('d', (tick) =>\n\t\t\t\t\t\t\tradialLineGenerator(shapeData(tick))\n\t\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_y_axes_exit',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('d', (tick) =>\n\t\t\t\t\t\t\tradialLineGenerator(shapeData(tick))\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// x axes\n\t\tconst xAxes = DOMUtils.appendOrSelect(svg, 'g.x-axes').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst xAxisUpdate = xAxes\n\t\t\t.selectAll('line')\n\t\t\t.data(this.uniqueKeys, (key) => key);\n\t\txAxisUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.attr('class', (key) => `x-axis-${Tools.kebabCase(key)}`) // replace spaces with -\n\t\t\t\t\t.attr('stroke-dasharray', '0')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x1',\n\t\t\t\t\t\t(key) => polarToCartesianCoords(xScale(key), 0, c).x\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'y1',\n\t\t\t\t\t\t(key) => polarToCartesianCoords(xScale(key), 0, c).y\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x2',\n\t\t\t\t\t\t(key) => polarToCartesianCoords(xScale(key), 0, c).x\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'y2',\n\t\t\t\t\t\t(key) => polarToCartesianCoords(xScale(key), 0, c).y\n\t\t\t\t\t)\n\t\t\t\t\t.call((selection) =>\n\t\t\t\t\t\tselection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_x_axes_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'x1',\n\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\t\tyScale.range()[0],\n\t\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'y1',\n\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\t\tyScale.range()[0],\n\t\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'x2',\n\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\t\tyScale.range()[1],\n\t\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'y2',\n\t\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\t\tyScale.range()[1],\n\t\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t(update) =>\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_x_axes_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'x1',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[0],\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'y1',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[0],\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'x2',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[1],\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'y2',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[1],\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_x_axes_exit',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// x labels\n\t\tconst xLabels = DOMUtils.appendOrSelect(svg, 'g.x-labels').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst xLabelUpdate = xLabels.selectAll('text').data(this.uniqueKeys);\n\t\txLabelUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text((key) => key)\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x',\n\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\tyScale.range()[1] + xLabelPadding,\n\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t).x\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'y',\n\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\tyScale.range()[1] + xLabelPadding,\n\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t).y\n\t\t\t\t\t)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'text-anchor',\n\t\t\t\t\t\t(key) => radialLabelPlacement(xScale(key)).textAnchor\n\t\t\t\t\t)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'dominant-baseline',\n\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\tradialLabelPlacement(xScale(key)).dominantBaseline\n\t\t\t\t\t)\n\t\t\t\t\t.call((selection) =>\n\t\t\t\t\t\tselection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_x_labels_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t),\n\t\t\t(update) =>\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_x_labels_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'x',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[1] + xLabelPadding,\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).x\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'y',\n\t\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\txScale(key),\n\t\t\t\t\t\t\t\t\tyScale.range()[1] + xLabelPadding,\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\t// Align chart horizontally after x-axies has finished rendering\n\t\t\t\t\t\t\tconst alignment = Tools.getProperty(\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\t'radar',\n\t\t\t\t\t\t\t\t'alignment'\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst alignmentXOffset = this.getAlignmentXOffset(\n\t\t\t\t\t\t\t\talignment,\n\t\t\t\t\t\t\t\tsvg,\n\t\t\t\t\t\t\t\tthis.getParent()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tsvg.attr('x', alignmentXOffset);\n\t\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_x_labels_exit',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// blobs\n\t\tconst blobs = DOMUtils.appendOrSelect(svg, 'g.blobs').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst blobUpdate = blobs\n\t\t\t.selectAll('path')\n\t\t\t.data(this.groupedDataNormalized, (group) => group.name);\n\n\t\tblobUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.attr('class', (group) =>\n\t\t\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\t\t\tclassNameTypes: [\n\t\t\t\t\t\t\t\tColorClassNameTypes.FILL,\n\t\t\t\t\t\t\t\tColorClassNameTypes.STROKE,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdataGroupName: group.name,\n\t\t\t\t\t\t\toriginalClassName: 'blob',\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t\t\t.attr('aria-label', (d) => d['name'])\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'transform',\n\t\t\t\t\t\tanimate\n\t\t\t\t\t\t\t? () =>\n\t\t\t\t\t\t\t\t\t`translate(${c.x}, ${c.y}) scale(${\n\t\t\t\t\t\t\t\t\t\t1 + Math.random() * 0.35\n\t\t\t\t\t\t\t\t\t})`\n\t\t\t\t\t\t\t: `translate(${c.x}, ${c.y})`\n\t\t\t\t\t)\n\t\t\t\t\t.style('fill', (group) => colorScale(group.name))\n\t\t\t\t\t.style('fill-opacity', Configuration.radar.opacity.selected)\n\t\t\t\t\t.style('stroke', (group) => colorScale(group.name))\n\n\t\t\t\t\t.call((selection) => {\n\t\t\t\t\t\tconst selectionUpdate = selection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_blobs_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (animate) {\n\t\t\t\t\t\t\tselectionUpdate\n\t\t\t\t\t\t\t\t.delay(() => Math.random() * 30)\n\t\t\t\t\t\t\t\t.attr('transform', `translate(${c.x}, ${c.y})`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselectionUpdate\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t\t.attr('d', (group) =>\n\t\t\t\t\t\t\t\tradialLineGenerator(group.data)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t(update) => {\n\t\t\t\tupdate\n\t\t\t\t\t.attr('class', (group) =>\n\t\t\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\t\t\tclassNameTypes: [\n\t\t\t\t\t\t\t\tColorClassNameTypes.FILL,\n\t\t\t\t\t\t\t\tColorClassNameTypes.STROKE,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdataGroupName: group.name,\n\t\t\t\t\t\t\toriginalClassName: 'blob',\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.style('fill', (group) => colorScale(group.name))\n\t\t\t\t\t.style('stroke', (group) => colorScale(group.name));\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_blobs_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr('transform', `translate(${c.x}, ${c.y})`)\n\t\t\t\t\t\t.attr('d', (group) => radialLineGenerator(group.data))\n\t\t\t\t);\n\t\t\t},\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) => {\n\t\t\t\t\tconst selectionUpdate = selection.transition().call((t) =>\n\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\tname: 'radar_blobs_exit',\n\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tif (animate) {\n\t\t\t\t\t\tselectionUpdate\n\t\t\t\t\t\t\t.delay(() => Math.random() * 30)\n\t\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\t\t\t`translate(${c.x}, ${c.y}) scale(${\n\t\t\t\t\t\t\t\t\t\t1 + Math.random() * 0.35\n\t\t\t\t\t\t\t\t\t})`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tselectionUpdate.attr('opacity', 0).remove();\n\t\t\t\t})\n\t\t);\n\n\t\t// data dots\n\t\tconst dots = DOMUtils.appendOrSelect(svg, 'g.dots').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\n\t\tconst dotsUpdate = dots\n\t\t\t.selectAll('circle')\n\t\t\t// Filter out dots with no value so they are not rendered\n\t\t\t.data(\n\t\t\t\tthis.fullDataNormalized.filter(\n\t\t\t\t\t(d) => Tools.getProperty(d, value) !== null\n\t\t\t\t)\n\t\t\t);\n\n\t\tdotsUpdate\n\t\t\t.join(\n\t\t\t\t(enter) =>\n\t\t\t\t\tenter\n\t\t\t\t\t\t.append('circle')\n\t\t\t\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t\t\t\t.attr('aria-label', (d) => d[valueMapsTo]),\n\t\t\t\t(update) => update,\n\t\t\t\t(exit) => exit.remove()\n\t\t\t)\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: Tools.kebabCase(d[angle]),\n\t\t\t\t})\n\t\t\t)\n\t\t\t.attr(\n\t\t\t\t'cx',\n\t\t\t\t(d) =>\n\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\txScale(d[angle]),\n\t\t\t\t\t\tyScale(d[value]),\n\t\t\t\t\t\tc\n\t\t\t\t\t).x\n\t\t\t)\n\t\t\t.attr(\n\t\t\t\t'cy',\n\t\t\t\t(d) =>\n\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\txScale(d[angle]),\n\t\t\t\t\t\tyScale(d[value]),\n\t\t\t\t\t\tc\n\t\t\t\t\t).y\n\t\t\t)\n\t\t\t.attr('r', 0)\n\t\t\t.attr('opacity', 0)\n\t\t\t.style('fill', (d) => colorScale(d[groupMapsTo]));\n\n\t\t// rectangles\n\t\tconst xAxesRect = DOMUtils.appendOrSelect(svg, 'g.x-axes-rect').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst xAxisRectUpdate = xAxesRect\n\t\t\t.selectAll('rect')\n\t\t\t.data(this.uniqueKeys);\n\t\txAxisRectUpdate\n\t\t\t.join(\n\t\t\t\t(enter) => enter.append('rect'),\n\t\t\t\t(update) => update,\n\t\t\t\t(exit) => exit.remove()\n\t\t\t)\n\t\t\t.attr('x', c.x)\n\t\t\t.attr('y', c.y - xAxisRectHeight / 2)\n\t\t\t.attr('width', yScale.range()[1])\n\t\t\t.attr('height', xAxisRectHeight)\n\t\t\t.style('fill', 'red')\n\t\t\t.style('fill-opacity', 0)\n\t\t\t.attr(\n\t\t\t\t'transform',\n\t\t\t\t(key) => `rotate(${radToDeg(xScale(key))}, ${c.x}, ${c.y})`\n\t\t\t);\n\n\t\t// y labels (show only the min and the max labels)\n\t\tconst yLabels = DOMUtils.appendOrSelect(svg, 'g.y-labels').attr(\n\t\t\t'role',\n\t\t\tRoles.GROUP\n\t\t);\n\t\tconst yLabelUpdate = yLabels.selectAll('text').data(extent(yTicks));\n\t\tyLabelUpdate.join(\n\t\t\t(enter) =>\n\t\t\t\tenter\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t.text((tick) => tick)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x',\n\t\t\t\t\t\t(tick) =>\n\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t-Math.PI / 2,\n\t\t\t\t\t\t\t\tyScale(tick),\n\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t).x + yLabelPadding\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'y',\n\t\t\t\t\t\t(tick) =>\n\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t-Math.PI / 2,\n\t\t\t\t\t\t\t\tyScale(tick),\n\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t).y\n\t\t\t\t\t)\n\t\t\t\t\t.style('text-anchor', 'start')\n\t\t\t\t\t.style('dominant-baseline', 'middle')\n\t\t\t\t\t.call((selection) =>\n\t\t\t\t\t\tselection\n\t\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\t\tname: 'radar_y_labels_enter',\n\t\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t),\n\t\t\t(update) =>\n\t\t\t\tupdate.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_y_labels_update',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.text((tick) => tick)\n\t\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'x',\n\t\t\t\t\t\t\t(tick) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t-Math.PI / 2,\n\t\t\t\t\t\t\t\t\tyScale(tick),\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).x + yLabelPadding\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'y',\n\t\t\t\t\t\t\t(tick) =>\n\t\t\t\t\t\t\t\tpolarToCartesianCoords(\n\t\t\t\t\t\t\t\t\t-Math.PI / 2,\n\t\t\t\t\t\t\t\t\tyScale(tick),\n\t\t\t\t\t\t\t\t\tc\n\t\t\t\t\t\t\t\t).y\n\t\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t(exit) =>\n\t\t\t\texit.call((selection) =>\n\t\t\t\t\tselection\n\t\t\t\t\t\t.transition()\n\t\t\t\t\t\t.call((t) =>\n\t\t\t\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\t\t\t\ttransition: t,\n\t\t\t\t\t\t\t\tname: 'radar_y_labels_exit',\n\t\t\t\t\t\t\t\tanimate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('opacity', 0)\n\t\t\t\t\t\t.remove()\n\t\t\t\t)\n\t\t);\n\n\t\t// Add event listeners\n\t\tthis.addEventListeners();\n\t}\n\n\tgetAlignmentXOffset(alignment, svg, parent) {\n\t\tconst svgDimensions = DOMUtils.getSVGElementSize(svg, {\n\t\t\tuseBBox: true,\n\t\t});\n\t\tconst { width } = DOMUtils.getSVGElementSize(parent, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\tlet alignmentOffset = 0;\n\t\tif (alignment === Alignments.CENTER) {\n\t\t\talignmentOffset = Math.floor((width - svgDimensions.width) / 2);\n\t\t} else if (alignment === Alignments.RIGHT) {\n\t\t\talignmentOffset = width - svgDimensions.width;\n\t\t}\n\n\t\treturn alignmentOffset;\n\t}\n\n\t// append temporarily the label to get the exact space that it occupies\n\tgetLabelDimensions = (label: string) => {\n\t\tconst tmpTick = DOMUtils.appendOrSelect(\n\t\t\tthis.getComponentContainer(),\n\t\t\t`g.tmp-tick`\n\t\t);\n\t\tconst tmpTickText = DOMUtils.appendOrSelect(tmpTick, `text`).text(\n\t\t\tlabel\n\t\t);\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(\n\t\t\ttmpTickText.node(),\n\t\t\t{ useBBox: true }\n\t\t);\n\t\ttmpTick.remove();\n\t\treturn { width, height };\n\t};\n\n\t// Given a flat array of objects, if there are missing data on key,\n\t// creates corresponding data with value = null\n\tnormalizeFlatData = (dataset: any) => {\n\t\tconst options = this.getOptions();\n\t\tconst { angle, value } = Tools.getProperty(options, 'radar', 'axes');\n\t\tconst groupMapsTo = Tools.getProperty(options, 'data', 'groupMapsTo');\n\t\tconst completeBlankData = Tools.flatMapDeep(\n\t\t\tthis.uniqueKeys.map((key) => {\n\t\t\t\treturn this.uniqueGroups.map((group) => ({\n\t\t\t\t\t[angle]: key,\n\t\t\t\t\t[groupMapsTo]: group,\n\t\t\t\t\t[value]: null,\n\t\t\t\t}));\n\t\t\t})\n\t\t);\n\t\treturn Tools.merge(completeBlankData, dataset);\n\t};\n\n\t// Given a a grouped array of objects, if there are missing data on key,\n\t// creates corresponding data with value = null\n\tnormalizeGroupedData = (dataset: any) => {\n\t\tconst options = this.getOptions();\n\t\tconst { angle, value } = Tools.getProperty(options, 'radar', 'axes');\n\t\tconst groupMapsTo = Tools.getProperty(options, 'data', 'groupMapsTo');\n\t\treturn dataset.map(({ name, data }) => {\n\t\t\tconst completeBlankData = this.uniqueKeys.map((k) => ({\n\t\t\t\t[groupMapsTo]: name,\n\t\t\t\t[angle]: k,\n\t\t\t\t[value]: null,\n\t\t\t}));\n\t\t\treturn { name, data: Tools.merge(completeBlankData, data) };\n\t\t});\n\t};\n\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\t\tthis.parent\n\t\t\t.selectAll('g.blobs path')\n\t\t\t.transition('legend-hover-blob')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-hover-blob',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill-opacity', (group) => {\n\t\t\t\tif (group.name !== hoveredElement.datum().name) {\n\t\t\t\t\treturn Configuration.radar.opacity.unselected;\n\t\t\t\t}\n\t\t\t\treturn Configuration.radar.opacity.selected;\n\t\t\t})\n\t\t\t.style('stroke-opacity', (group) => {\n\t\t\t\tif (group.name !== hoveredElement.datum().name) {\n\t\t\t\t\treturn Configuration.radar.opacity.unselected;\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t});\n\t};\n\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent\n\t\t\t.selectAll('g.blobs path')\n\t\t\t.transition('legend-mouseout-blob')\n\t\t\t.call((t) =>\n\t\t\t\tthis.services.transitions.setupTransition({\n\t\t\t\t\ttransition: t,\n\t\t\t\t\tname: 'legend-mouseout-blob',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill-opacity', Configuration.radar.opacity.selected)\n\t\t\t.style('stroke-opacity', 1);\n\t};\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent\n\t\t\t.selectAll('.x-axes-rect > rect')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null);\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\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst {\n\t\t\taxes: { angle },\n\t\t} = Tools.getProperty(this.getOptions(), 'radar');\n\n\t\t// events on x axes rects\n\t\tthis.parent\n\t\t\t.selectAll('.x-axes-rect > rect')\n\t\t\t.on('mouseover', function (event, 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(\n\t\t\t\t\tEvents.Radar.X_AXIS_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst axisLine = self.parent.select(\n\t\t\t\t\t`.x-axes .x-axis-${Tools.kebabCase(datum)}`\n\t\t\t\t);\n\t\t\t\tconst dots = self.parent.selectAll(\n\t\t\t\t\t`.dots circle.${Tools.kebabCase(datum)}`\n\t\t\t\t);\n\n\t\t\t\t// Change style\n\t\t\t\taxisLine\n\t\t\t\t\t.classed('hovered', true)\n\t\t\t\t\t.attr('stroke-dasharray', '4 4');\n\t\t\t\tdots.classed('hovered', true)\n\t\t\t\t\t.attr('opacity', 1)\n\t\t\t\t\t.attr('r', Configuration.radar.dotsRadius);\n\n\t\t\t\t// get the items that should be highlighted\n\t\t\t\tconst itemsToHighlight = self.fullDataNormalized.filter(\n\t\t\t\t\t(d) => d[angle] === datum\n\t\t\t\t);\n\n\t\t\t\tconst options = self.getOptions();\n\t\t\t\tconst { groupMapsTo } = options.data;\n\t\t\t\tconst valueMapsTo = Tools.getProperty(\n\t\t\t\t\toptions,\n\t\t\t\t\t'radar',\n\t\t\t\t\t'axes',\n\t\t\t\t\t'value'\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\tevent,\n\t\t\t\t\thoveredElement,\n\t\t\t\t\titems: itemsToHighlight\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(datum) => typeof datum[valueMapsTo] === 'number'\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((datum) => ({\n\t\t\t\t\t\t\tlabel: datum[groupMapsTo],\n\t\t\t\t\t\t\tvalue: datum[valueMapsTo],\n\t\t\t\t\t\t\tcolor: self.model.getFillColor(datum[groupMapsTo]),\n\t\t\t\t\t\t\tclass: self.model.getColorClassName({\n\t\t\t\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.TOOLTIP],\n\t\t\t\t\t\t\t\tdataGroupName: datum[groupMapsTo],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mousemove', function (event, 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(\n\t\t\t\t\tEvents.Radar.X_AXIS_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event, datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Radar.X_AXIS_CLICK, {\n\t\t\t\t\tevent,\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 (event, datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\tconst axisLine = self.parent.select(\n\t\t\t\t\t`.x-axes .x-axis-${Tools.kebabCase(datum)}`\n\t\t\t\t);\n\t\t\t\tconst dots = self.parent.selectAll(\n\t\t\t\t\t`.dots circle.${Tools.kebabCase(datum)}`\n\t\t\t\t);\n\n\t\t\t\t// Change style\n\t\t\t\taxisLine\n\t\t\t\t\t.classed('hovered', false)\n\t\t\t\t\t.attr('stroke-dasharray', '0');\n\n\t\t\t\tdots.classed('hovered', false).attr('opacity', 0).attr('r', 0);\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Radar.X_AXIS_MOUSEOUT,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\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});\n\t}\n}\n"]}