@carbon/charts 0.46.3 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/axis-chart.js +2 -1
- package/axis-chart.js.map +1 -1
- package/build/demo/data/CHART_TYPES.d.ts +5 -0
- package/build/demo/data/area.d.ts +33 -0
- package/build/demo/data/tree.d.ts +30 -0
- package/build/src/chart.d.ts +2 -2
- package/build/src/charts/index.d.ts +1 -0
- package/build/src/charts/tree.d.ts +6 -0
- package/build/src/components/axes/zoom-bar.d.ts +1 -0
- package/build/src/components/essentials/highlights.d.ts +13 -0
- package/build/src/components/graphs/tree.d.ts +9 -0
- package/build/src/components/index.d.ts +2 -0
- package/build/src/configuration.d.ts +2 -1
- package/build/src/interfaces/charts.d.ts +7 -1
- package/build/src/interfaces/enums.d.ts +7 -0
- package/build/src/interfaces/events.d.ts +8 -0
- package/build/stories/utils.d.ts +1 -1
- package/bundle.js +1 -1
- package/chart.d.ts +2 -2
- package/chart.js +4 -4
- package/chart.js.map +1 -1
- package/charts/index.d.ts +1 -0
- package/charts/index.js +1 -0
- package/charts/index.js.map +1 -1
- package/charts/meter.js +3 -1
- package/charts/meter.js.map +1 -1
- package/charts/tree.d.ts +6 -0
- package/charts/tree.js +45 -0
- package/charts/tree.js.map +1 -0
- package/components/axes/zoom-bar.d.ts +1 -0
- package/components/axes/zoom-bar.js +26 -0
- package/components/axes/zoom-bar.js.map +1 -1
- package/components/essentials/highlights.d.ts +13 -0
- package/components/essentials/highlights.js +196 -0
- package/components/essentials/highlights.js.map +1 -0
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/radar.js +2 -1
- package/components/graphs/radar.js.map +1 -1
- package/components/graphs/tree.d.ts +9 -0
- package/components/graphs/tree.js +262 -0
- package/components/graphs/tree.js.map +1 -0
- package/components/index.d.ts +2 -0
- package/components/index.js +2 -0
- package/components/index.js.map +1 -1
- package/configuration.d.ts +2 -1
- package/configuration.js +10 -1
- package/configuration.js.map +1 -1
- package/demo/data/CHART_TYPES.d.ts +5 -0
- package/demo/data/CHART_TYPES.js +5 -0
- package/demo/data/CHART_TYPES.js.map +1 -1
- package/demo/data/area.d.ts +33 -0
- package/demo/data/area.js +41 -0
- package/demo/data/area.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/index.js +35 -0
- package/demo/data/index.js.map +1 -1
- package/demo/data/tree.d.ts +30 -0
- package/demo/data/tree.js +209 -0
- package/demo/data/tree.js.map +1 -0
- package/demo/styles.css +148 -0
- package/demo/styles.css.map +1 -1
- package/demo/styles.min.css +1 -1
- package/demo/styles.min.css.map +1 -1
- package/demo/tsconfig.tsbuildinfo +82 -68
- package/interfaces/charts.d.ts +7 -1
- package/interfaces/charts.js.map +1 -1
- package/interfaces/enums.d.ts +7 -0
- package/interfaces/enums.js +8 -0
- package/interfaces/enums.js.map +1 -1
- package/interfaces/events.d.ts +8 -0
- package/interfaces/events.js +9 -0
- package/interfaces/events.js.map +1 -1
- package/package.json +1 -1
- package/styles/components/_highlights.scss +6 -0
- package/styles/components/_zoom-bar.scss +5 -0
- package/styles/components/index.scss +1 -0
- package/styles/graphs/_tree.scss +43 -0
- package/styles/graphs/index.scss +1 -0
- package/styles-g10.css +39 -0
- package/styles-g10.css.map +1 -1
- package/styles-g10.min.css +1 -1
- package/styles-g10.min.css.map +1 -1
- package/styles-g100.css +39 -0
- package/styles-g100.css.map +1 -1
- package/styles-g100.min.css +1 -1
- package/styles-g100.min.css.map +1 -1
- package/styles-g90.css +39 -0
- package/styles-g90.css.map +1 -1
- package/styles-g90.min.css +1 -1
- package/styles-g90.min.css.map +1 -1
- package/styles.css +39 -0
- package/styles.css.map +1 -1
- package/styles.min.css +1 -1
- package/styles.min.css.map +1 -1
- package/tools.js +12 -6
- package/tools.js.map +1 -1
- package/tsconfig.tsbuildinfo +95 -22
|
@@ -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\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 {\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('role', Roles.GRAPHICS_SYMBOL)\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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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('role', Roles.GRAPHICS_SYMBOL)\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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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('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.transition(\n\t\t\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'radar_blobs_enter',\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\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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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(\n\t\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t'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\t\tconst dotsUpdate = dots\n\t\t\t.selectAll('circle')\n\t\t\t.data(this.fullDataNormalized);\n\t\tdotsUpdate\n\t\t\t.join(\n\t\t\t\t(enter) =>\n\t\t\t\t\tenter.append('circle').attr('role', Roles.GRAPHICS_SYMBOL),\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) =>\n\t\t\t\t\tenter.append('rect').attr('role', Roles.GRAPHICS_SYMBOL),\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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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, { useAttr: true });\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(\n\t\t\t\tthis.services.transitions.getTransition('legend-hover-blob')\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(\n\t\t\t\tthis.services.transitions.getTransition('legend-mouseout-blob')\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\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 {\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('role', Roles.GRAPHICS_SYMBOL)\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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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('role', Roles.GRAPHICS_SYMBOL)\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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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('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.transition(\n\t\t\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'radar_blobs_enter',\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\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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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(\n\t\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t'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.append('circle').attr('role', Roles.GRAPHICS_SYMBOL),\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) =>\n\t\t\t\t\tenter.append('rect').attr('role', Roles.GRAPHICS_SYMBOL),\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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\t\t'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, { useAttr: true });\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(\n\t\t\t\tthis.services.transitions.getTransition('legend-hover-blob')\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(\n\t\t\t\tthis.services.transitions.getTransition('legend-mouseout-blob')\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"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Component } from '../component';
|
|
2
|
+
import { RenderTypes } from '../../interfaces';
|
|
3
|
+
export declare class Tree extends Component {
|
|
4
|
+
type: string;
|
|
5
|
+
renderType: RenderTypes;
|
|
6
|
+
getLongestLabel(data: any): string;
|
|
7
|
+
getMockLabelWidth(svg: any, label: any): any;
|
|
8
|
+
render(animate?: boolean): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
var __extends = (this && this.__extends) || (function () {
|
|
2
|
+
var extendStatics = function (d, b) {
|
|
3
|
+
extendStatics = Object.setPrototypeOf ||
|
|
4
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
6
|
+
return extendStatics(d, b);
|
|
7
|
+
};
|
|
8
|
+
return function (d, b) {
|
|
9
|
+
extendStatics(d, b);
|
|
10
|
+
function __() { this.constructor = d; }
|
|
11
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
12
|
+
};
|
|
13
|
+
})();
|
|
14
|
+
// Internal Imports
|
|
15
|
+
import { Component } from '../component';
|
|
16
|
+
import { DOMUtils } from '../../services';
|
|
17
|
+
import { Events, RenderTypes, TreeTypes } from '../../interfaces';
|
|
18
|
+
import { Tools } from '../../tools';
|
|
19
|
+
// D3 Imports
|
|
20
|
+
import { cluster as d3Cluster, tree as d3Tree, hierarchy } from 'd3-hierarchy';
|
|
21
|
+
import { linkHorizontal } from 'd3-shape';
|
|
22
|
+
import { select } from 'd3-selection';
|
|
23
|
+
var NODE_OFFSET = 6;
|
|
24
|
+
var Tree = /** @class */ (function (_super) {
|
|
25
|
+
__extends(Tree, _super);
|
|
26
|
+
function Tree() {
|
|
27
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
28
|
+
_this.type = 'tree';
|
|
29
|
+
_this.renderType = RenderTypes.SVG;
|
|
30
|
+
return _this;
|
|
31
|
+
}
|
|
32
|
+
Tree.prototype.getLongestLabel = function (data) {
|
|
33
|
+
var _this = this;
|
|
34
|
+
var longestLabel = '';
|
|
35
|
+
data.forEach(function (d) {
|
|
36
|
+
var longestLabelInChildren = d.children
|
|
37
|
+
? _this.getLongestLabel(d.children)
|
|
38
|
+
: '';
|
|
39
|
+
if (longestLabelInChildren.length > longestLabel.length ||
|
|
40
|
+
d.name.length > longestLabel.length) {
|
|
41
|
+
longestLabel =
|
|
42
|
+
longestLabelInChildren.length > d.name.length
|
|
43
|
+
? longestLabelInChildren
|
|
44
|
+
: d.name;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return longestLabel;
|
|
48
|
+
};
|
|
49
|
+
Tree.prototype.getMockLabelWidth = function (svg, label) {
|
|
50
|
+
// Add mock label to get dimensions
|
|
51
|
+
var mockLabel = svg
|
|
52
|
+
.append('text')
|
|
53
|
+
.attr('dy', '0.31em')
|
|
54
|
+
.attr('x', 0)
|
|
55
|
+
.attr('text-anchor', 'end')
|
|
56
|
+
.text(label);
|
|
57
|
+
// Get the mock label width
|
|
58
|
+
var mockLabelWidth = DOMUtils.getSVGElementSize(mockLabel.node(), {
|
|
59
|
+
useBBox: true,
|
|
60
|
+
}).width;
|
|
61
|
+
// Remove the mock title label
|
|
62
|
+
mockLabel.remove();
|
|
63
|
+
return mockLabelWidth;
|
|
64
|
+
};
|
|
65
|
+
Tree.prototype.render = function (animate) {
|
|
66
|
+
var _this = this;
|
|
67
|
+
if (animate === void 0) { animate = true; }
|
|
68
|
+
var svg = this.getComponentContainer();
|
|
69
|
+
// Empty out the svg before rendering the tree
|
|
70
|
+
svg.html('');
|
|
71
|
+
var _a = DOMUtils.getSVGElementSize(this.parent, {
|
|
72
|
+
useAttrs: true,
|
|
73
|
+
}), width = _a.width, height = _a.height;
|
|
74
|
+
if (width < 1 || height < 1) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
var options = this.model.getOptions();
|
|
78
|
+
var displayData = this.model.getDisplayData();
|
|
79
|
+
var rootTitle = Tools.getProperty(options, 'tree', 'rootTitle') || 'Tree';
|
|
80
|
+
var mockRootTitleWidth = this.getMockLabelWidth(svg, rootTitle);
|
|
81
|
+
var longestLabel = this.getLongestLabel(displayData);
|
|
82
|
+
var mockLongestLabelWidth = this.getMockLabelWidth(svg, longestLabel);
|
|
83
|
+
var margin = {
|
|
84
|
+
top: 0,
|
|
85
|
+
right: 0,
|
|
86
|
+
bottom: 0,
|
|
87
|
+
left: mockRootTitleWidth > 0
|
|
88
|
+
? mockRootTitleWidth + NODE_OFFSET
|
|
89
|
+
: 30 - NODE_OFFSET,
|
|
90
|
+
};
|
|
91
|
+
var root = hierarchy({
|
|
92
|
+
name: rootTitle,
|
|
93
|
+
children: displayData,
|
|
94
|
+
});
|
|
95
|
+
var dx = 10;
|
|
96
|
+
var dy = width / 6;
|
|
97
|
+
var update = function (source) {
|
|
98
|
+
var nodes = root.descendants().reverse();
|
|
99
|
+
var links = root.links();
|
|
100
|
+
var left = root;
|
|
101
|
+
var right = root;
|
|
102
|
+
root.eachBefore(function (node) {
|
|
103
|
+
if (node.x < left.x)
|
|
104
|
+
left = node;
|
|
105
|
+
if (node.x > right.x)
|
|
106
|
+
right = node;
|
|
107
|
+
});
|
|
108
|
+
var height = right.x - left.x;
|
|
109
|
+
var transition = svg
|
|
110
|
+
.transition()
|
|
111
|
+
.call(function (t) {
|
|
112
|
+
return _this.services.transitions.setupTransition({
|
|
113
|
+
transition: t,
|
|
114
|
+
name: 'tree-update-viewbox',
|
|
115
|
+
animate: true,
|
|
116
|
+
});
|
|
117
|
+
})
|
|
118
|
+
.attr('viewBox', [-margin.left, left.x, width, height]);
|
|
119
|
+
// Update data on nodes
|
|
120
|
+
var nodeGroups = nodeGroup
|
|
121
|
+
.selectAll('g')
|
|
122
|
+
.data(nodes, function (d) { return d.id; });
|
|
123
|
+
var self = _this;
|
|
124
|
+
// Add any entering nodes
|
|
125
|
+
var nodeGroupsEnter = nodeGroups
|
|
126
|
+
.enter()
|
|
127
|
+
.append('g')
|
|
128
|
+
.attr('transform', function () { return "translate(" + source.y0 + "," + source.x0 + ")"; })
|
|
129
|
+
.attr('class', function (d) {
|
|
130
|
+
return d.depth !== 0 && d.children && d.children.length > 0
|
|
131
|
+
? 'clickable'
|
|
132
|
+
: null;
|
|
133
|
+
})
|
|
134
|
+
.on('mouseover', function (event, d) {
|
|
135
|
+
// Dispatch mouse event
|
|
136
|
+
self.services.events.dispatchEvent(Events.Tree.NODE_MOUSEOVER, {
|
|
137
|
+
event: event,
|
|
138
|
+
element: select(this),
|
|
139
|
+
datum: d,
|
|
140
|
+
});
|
|
141
|
+
})
|
|
142
|
+
.on('click', function (event, d) {
|
|
143
|
+
if (d.depth !== 0) {
|
|
144
|
+
d.children = d.children ? null : d._children;
|
|
145
|
+
update(d);
|
|
146
|
+
}
|
|
147
|
+
// Dispatch mouse event
|
|
148
|
+
self.services.events.dispatchEvent(Events.Tree.NODE_CLICK, {
|
|
149
|
+
event: event,
|
|
150
|
+
element: select(this),
|
|
151
|
+
datum: d,
|
|
152
|
+
});
|
|
153
|
+
})
|
|
154
|
+
.on('mouseout', function (event, d) {
|
|
155
|
+
// Dispatch mouse event
|
|
156
|
+
self.services.events.dispatchEvent(Events.Tree.NODE_MOUSEOUT, {
|
|
157
|
+
event: event,
|
|
158
|
+
element: select(this),
|
|
159
|
+
datum: d,
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
// Add node circles to entering nodes
|
|
163
|
+
nodeGroupsEnter
|
|
164
|
+
.append('circle')
|
|
165
|
+
.attr('r', 2.5)
|
|
166
|
+
.attr('class', function (d) { return (d._children ? 'parent' : 'child'); })
|
|
167
|
+
.attr('stroke-width', 10);
|
|
168
|
+
// Add node labels
|
|
169
|
+
nodeGroupsEnter
|
|
170
|
+
.append('text')
|
|
171
|
+
.attr('dy', '0.31em')
|
|
172
|
+
.attr('x', function (d) { return (d._children ? -NODE_OFFSET : NODE_OFFSET); })
|
|
173
|
+
.attr('text-anchor', function (d) { return (d._children ? 'end' : 'start'); })
|
|
174
|
+
.text(function (d) { return d.data.name; })
|
|
175
|
+
.clone(true)
|
|
176
|
+
.attr('class', 'text-stroke')
|
|
177
|
+
.lower();
|
|
178
|
+
// Reposition nodes
|
|
179
|
+
nodeGroups
|
|
180
|
+
.merge(nodeGroupsEnter)
|
|
181
|
+
.transition(transition)
|
|
182
|
+
.attr('transform', function (d) { return "translate(" + d.y + "," + d.x + ")"; })
|
|
183
|
+
.attr('fill-opacity', 1)
|
|
184
|
+
.attr('stroke-opacity', 1);
|
|
185
|
+
// Remove exiting nodes
|
|
186
|
+
nodeGroups
|
|
187
|
+
.exit()
|
|
188
|
+
.transition(transition)
|
|
189
|
+
.remove()
|
|
190
|
+
.attr('transform', function () { return "translate(" + source.y + "," + source.x + ")"; })
|
|
191
|
+
.attr('fill-opacity', 0)
|
|
192
|
+
.attr('stroke-opacity', 0);
|
|
193
|
+
// Update data on links
|
|
194
|
+
var linkPaths = linkGroup
|
|
195
|
+
.selectAll('path')
|
|
196
|
+
.data(links, function (d) { return d.target.id; });
|
|
197
|
+
// Add any entering link paths
|
|
198
|
+
var linkPathsEnter = linkPaths
|
|
199
|
+
.enter()
|
|
200
|
+
.append('path')
|
|
201
|
+
.attr('d', function (d) {
|
|
202
|
+
var o = { x: source.x0, y: source.y0 };
|
|
203
|
+
return diagonal({ source: o, target: o });
|
|
204
|
+
});
|
|
205
|
+
// Reposition updating link paths
|
|
206
|
+
linkPaths
|
|
207
|
+
.merge(linkPathsEnter)
|
|
208
|
+
.transition(transition)
|
|
209
|
+
.attr('d', diagonal);
|
|
210
|
+
// Remove any exiting link paths
|
|
211
|
+
linkPaths
|
|
212
|
+
.exit()
|
|
213
|
+
.transition(transition)
|
|
214
|
+
.remove()
|
|
215
|
+
.attr('d', function () {
|
|
216
|
+
var o = { x: source.x, y: source.y };
|
|
217
|
+
return diagonal({ source: o, target: o });
|
|
218
|
+
});
|
|
219
|
+
// Update position data for nodes
|
|
220
|
+
root.eachBefore(function (d) {
|
|
221
|
+
d.x0 = d.x;
|
|
222
|
+
d.y0 = d.y;
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
var descendants = root.descendants();
|
|
226
|
+
var maxDepth = descendants[descendants.length - 1].depth;
|
|
227
|
+
var tree = Tools.getProperty(options, 'tree', 'type') === TreeTypes.DENDROGRAM
|
|
228
|
+
? d3Cluster().size([
|
|
229
|
+
height,
|
|
230
|
+
width -
|
|
231
|
+
mockLongestLabelWidth -
|
|
232
|
+
maxDepth * NODE_OFFSET -
|
|
233
|
+
mockRootTitleWidth,
|
|
234
|
+
])
|
|
235
|
+
: d3Tree()
|
|
236
|
+
.nodeSize([dx, dy])
|
|
237
|
+
.size([
|
|
238
|
+
height,
|
|
239
|
+
width -
|
|
240
|
+
mockLongestLabelWidth -
|
|
241
|
+
maxDepth * NODE_OFFSET -
|
|
242
|
+
mockRootTitleWidth,
|
|
243
|
+
]);
|
|
244
|
+
var diagonal = linkHorizontal()
|
|
245
|
+
.x(function (d) { return d.y; })
|
|
246
|
+
.y(function (d) { return d.x; });
|
|
247
|
+
root.x0 = dy / 2;
|
|
248
|
+
root.y0 = 0;
|
|
249
|
+
root.descendants().forEach(function (d, i) {
|
|
250
|
+
d.id = i;
|
|
251
|
+
d._children = d.children;
|
|
252
|
+
});
|
|
253
|
+
tree(root);
|
|
254
|
+
svg.attr('viewBox', [-margin.left, -margin.top, width, dx]).style('user-select', 'none');
|
|
255
|
+
var linkGroup = svg.append('g').attr('class', 'links');
|
|
256
|
+
var nodeGroup = svg.append('g').attr('class', 'nodes');
|
|
257
|
+
update(root);
|
|
258
|
+
};
|
|
259
|
+
return Tree;
|
|
260
|
+
}(Component));
|
|
261
|
+
export { Tree };
|
|
262
|
+
//# sourceMappingURL=../../../src/components/graphs/tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["tree.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport { Events, RenderTypes, TreeTypes } from '../../interfaces';\nimport { Tools } from '../../tools';\n\n// D3 Imports\nimport { cluster as d3Cluster, tree as d3Tree, hierarchy } from 'd3-hierarchy';\nimport { linkHorizontal } from 'd3-shape';\nimport { select } from 'd3-selection';\n\nconst NODE_OFFSET = 6;\n\nexport class Tree extends Component {\n\ttype = 'tree';\n\trenderType = RenderTypes.SVG;\n\n\tgetLongestLabel(data) {\n\t\tlet longestLabel = '';\n\t\tdata.forEach((d) => {\n\t\t\tlet longestLabelInChildren = d.children\n\t\t\t\t? this.getLongestLabel(d.children)\n\t\t\t\t: '';\n\t\t\tif (\n\t\t\t\tlongestLabelInChildren.length > longestLabel.length ||\n\t\t\t\td.name.length > longestLabel.length\n\t\t\t) {\n\t\t\t\tlongestLabel =\n\t\t\t\t\tlongestLabelInChildren.length > d.name.length\n\t\t\t\t\t\t? longestLabelInChildren\n\t\t\t\t\t\t: d.name;\n\t\t\t}\n\t\t});\n\n\t\treturn longestLabel;\n\t}\n\n\tgetMockLabelWidth(svg, label) {\n\t\t// Add mock label to get dimensions\n\t\tconst mockLabel = svg\n\t\t\t.append('text')\n\t\t\t.attr('dy', '0.31em')\n\t\t\t.attr('x', 0)\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.text(label);\n\n\t\t// Get the mock label width\n\t\tconst { width: mockLabelWidth } = DOMUtils.getSVGElementSize(\n\t\t\tmockLabel.node(),\n\t\t\t{\n\t\t\t\tuseBBox: true,\n\t\t\t}\n\t\t);\n\n\t\t// Remove the mock title label\n\t\tmockLabel.remove();\n\n\t\treturn mockLabelWidth;\n\t}\n\n\trender(animate = true) {\n\t\tconst svg = this.getComponentContainer();\n\n\t\t// Empty out the svg before rendering the tree\n\t\tsvg.html('');\n\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\tif (width < 1 || height < 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst options = this.model.getOptions();\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tconst rootTitle =\n\t\t\tTools.getProperty(options, 'tree', 'rootTitle') || 'Tree';\n\n\t\tconst mockRootTitleWidth = this.getMockLabelWidth(svg, rootTitle);\n\n\t\tlet longestLabel = this.getLongestLabel(displayData);\n\t\tconst mockLongestLabelWidth = this.getMockLabelWidth(svg, longestLabel);\n\n\t\tconst margin = {\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\tleft:\n\t\t\t\tmockRootTitleWidth > 0\n\t\t\t\t\t? mockRootTitleWidth + NODE_OFFSET\n\t\t\t\t\t: 30 - NODE_OFFSET,\n\t\t};\n\t\tconst root = hierarchy({\n\t\t\tname: rootTitle,\n\t\t\tchildren: displayData,\n\t\t}) as any;\n\n\t\tconst dx = 10;\n\t\tconst dy = width / 6;\n\n\t\tconst update = (source) => {\n\t\t\tconst nodes = root.descendants().reverse();\n\t\t\tconst links = root.links();\n\n\t\t\tlet left = root;\n\t\t\tlet right = root;\n\t\t\troot.eachBefore((node) => {\n\t\t\t\tif (node.x < left.x) left = node;\n\t\t\t\tif (node.x > right.x) right = node;\n\t\t\t});\n\n\t\t\tconst height = right.x - left.x;\n\n\t\t\tconst transition = svg\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: 'tree-update-viewbox',\n\t\t\t\t\t\tanimate: true,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.attr('viewBox', [-margin.left, left.x, width, height]);\n\n\t\t\t// Update data on nodes\n\t\t\tconst nodeGroups = nodeGroup\n\t\t\t\t.selectAll('g')\n\t\t\t\t.data(nodes, (d) => d.id);\n\n\t\t\tconst self = this;\n\t\t\t// Add any entering nodes\n\t\t\tconst nodeGroupsEnter = nodeGroups\n\t\t\t\t.enter()\n\t\t\t\t.append('g')\n\t\t\t\t.attr('transform', () => `translate(${source.y0},${source.x0})`)\n\t\t\t\t.attr('class', (d) =>\n\t\t\t\t\td.depth !== 0 && d.children && d.children.length > 0\n\t\t\t\t\t\t? 'clickable'\n\t\t\t\t\t\t: null\n\t\t\t\t)\n\t\t\t\t.on('mouseover', function (event, d) {\n\t\t\t\t\t// Dispatch mouse event\n\t\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\t\tEvents.Tree.NODE_MOUSEOVER,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\t\tdatum: d,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.on('click', function (event, d) {\n\t\t\t\t\tif (d.depth !== 0) {\n\t\t\t\t\t\td.children = d.children ? null : d._children;\n\n\t\t\t\t\t\tupdate(d);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Dispatch mouse event\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tree.NODE_CLICK, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum: d,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.on('mouseout', function (event, d) {\n\t\t\t\t\t// Dispatch mouse event\n\t\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\t\tEvents.Tree.NODE_MOUSEOUT,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\t\tdatum: d,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t// Add node circles to entering nodes\n\t\t\tnodeGroupsEnter\n\t\t\t\t.append('circle')\n\t\t\t\t.attr('r', 2.5)\n\t\t\t\t.attr('class', (d) => (d._children ? 'parent' : 'child'))\n\t\t\t\t.attr('stroke-width', 10);\n\n\t\t\t// Add node labels\n\t\t\tnodeGroupsEnter\n\t\t\t\t.append('text')\n\t\t\t\t.attr('dy', '0.31em')\n\t\t\t\t.attr('x', (d) => (d._children ? -NODE_OFFSET : NODE_OFFSET))\n\t\t\t\t.attr('text-anchor', (d) => (d._children ? 'end' : 'start'))\n\t\t\t\t.text((d) => d.data.name)\n\t\t\t\t.clone(true)\n\t\t\t\t.attr('class', 'text-stroke')\n\t\t\t\t.lower();\n\n\t\t\t// Reposition nodes\n\t\t\tnodeGroups\n\t\t\t\t.merge(nodeGroupsEnter)\n\t\t\t\t.transition(transition)\n\t\t\t\t.attr('transform', (d) => `translate(${d.y},${d.x})`)\n\t\t\t\t.attr('fill-opacity', 1)\n\t\t\t\t.attr('stroke-opacity', 1);\n\n\t\t\t// Remove exiting nodes\n\t\t\tnodeGroups\n\t\t\t\t.exit()\n\t\t\t\t.transition(transition)\n\t\t\t\t.remove()\n\t\t\t\t.attr('transform', () => `translate(${source.y},${source.x})`)\n\t\t\t\t.attr('fill-opacity', 0)\n\t\t\t\t.attr('stroke-opacity', 0);\n\n\t\t\t// Update data on links\n\t\t\tconst linkPaths = linkGroup\n\t\t\t\t.selectAll('path')\n\t\t\t\t.data(links, (d) => d.target.id);\n\n\t\t\t// Add any entering link paths\n\t\t\tconst linkPathsEnter = linkPaths\n\t\t\t\t.enter()\n\t\t\t\t.append('path')\n\t\t\t\t.attr('d', (d) => {\n\t\t\t\t\tconst o = { x: source.x0, y: source.y0 };\n\t\t\t\t\treturn diagonal({ source: o, target: o });\n\t\t\t\t});\n\n\t\t\t// Reposition updating link paths\n\t\t\tlinkPaths\n\t\t\t\t.merge(linkPathsEnter)\n\t\t\t\t.transition(transition)\n\t\t\t\t.attr('d', diagonal);\n\n\t\t\t// Remove any exiting link paths\n\t\t\tlinkPaths\n\t\t\t\t.exit()\n\t\t\t\t.transition(transition)\n\t\t\t\t.remove()\n\t\t\t\t.attr('d', () => {\n\t\t\t\t\tconst o = { x: source.x, y: source.y };\n\t\t\t\t\treturn diagonal({ source: o, target: o });\n\t\t\t\t});\n\n\t\t\t// Update position data for nodes\n\t\t\troot.eachBefore((d) => {\n\t\t\t\td.x0 = d.x;\n\t\t\t\td.y0 = d.y;\n\t\t\t});\n\t\t};\n\n\t\tconst descendants = root.descendants();\n\t\tconst maxDepth = descendants[descendants.length - 1].depth;\n\n\t\tconst tree =\n\t\t\tTools.getProperty(options, 'tree', 'type') === TreeTypes.DENDROGRAM\n\t\t\t\t? d3Cluster().size([\n\t\t\t\t\t\theight,\n\t\t\t\t\t\twidth -\n\t\t\t\t\t\t\tmockLongestLabelWidth -\n\t\t\t\t\t\t\tmaxDepth * NODE_OFFSET -\n\t\t\t\t\t\t\tmockRootTitleWidth,\n\t\t\t\t ])\n\t\t\t\t: d3Tree()\n\t\t\t\t\t\t.nodeSize([dx, dy])\n\t\t\t\t\t\t.size([\n\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\twidth -\n\t\t\t\t\t\t\t\tmockLongestLabelWidth -\n\t\t\t\t\t\t\t\tmaxDepth * NODE_OFFSET -\n\t\t\t\t\t\t\t\tmockRootTitleWidth,\n\t\t\t\t\t\t]);\n\n\t\tconst diagonal = linkHorizontal()\n\t\t\t.x((d: any) => d.y)\n\t\t\t.y((d: any) => d.x) as any;\n\n\t\troot.x0 = dy / 2;\n\t\troot.y0 = 0;\n\t\troot.descendants().forEach((d, i) => {\n\t\t\td.id = i;\n\t\t\td._children = d.children;\n\t\t});\n\n\t\ttree(root);\n\n\t\tsvg.attr('viewBox', [-margin.left, -margin.top, width, dx]).style(\n\t\t\t'user-select',\n\t\t\t'none'\n\t\t);\n\n\t\tconst linkGroup = svg.append('g').attr('class', 'links');\n\t\tconst nodeGroup = svg.append('g').attr('class', 'nodes');\n\n\t\tupdate(root);\n\t}\n}\n"]}
|
package/components/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export * from './essentials/title-meter';
|
|
|
7
7
|
export * from './essentials/tooltip';
|
|
8
8
|
export * from './essentials/tooltip-axis';
|
|
9
9
|
export * from './essentials/canvas-chart-clip';
|
|
10
|
+
export * from './essentials/highlights';
|
|
10
11
|
export * from './graphs/area';
|
|
11
12
|
export * from './graphs/area-stacked';
|
|
12
13
|
export * from './graphs/bar-simple';
|
|
@@ -25,6 +26,7 @@ export * from './graphs/gauge';
|
|
|
25
26
|
export * from './graphs/donut';
|
|
26
27
|
export * from './graphs/skeleton';
|
|
27
28
|
export * from './graphs/skeleton-lines';
|
|
29
|
+
export * from './graphs/tree';
|
|
28
30
|
export * from './graphs/treemap';
|
|
29
31
|
export * from './graphs/radar';
|
|
30
32
|
export * from './graphs/circle-pack';
|
package/components/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export * from './essentials/title-meter';
|
|
|
8
8
|
export * from './essentials/tooltip';
|
|
9
9
|
export * from './essentials/tooltip-axis';
|
|
10
10
|
export * from './essentials/canvas-chart-clip';
|
|
11
|
+
export * from './essentials/highlights';
|
|
11
12
|
// GRAPHS
|
|
12
13
|
export * from './graphs/area';
|
|
13
14
|
export * from './graphs/area-stacked';
|
|
@@ -27,6 +28,7 @@ export * from './graphs/gauge';
|
|
|
27
28
|
export * from './graphs/donut';
|
|
28
29
|
export * from './graphs/skeleton';
|
|
29
30
|
export * from './graphs/skeleton-lines';
|
|
31
|
+
export * from './graphs/tree';
|
|
30
32
|
export * from './graphs/treemap';
|
|
31
33
|
export * from './graphs/radar';
|
|
32
34
|
export * from './graphs/circle-pack';
|
package/components/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,aAAa;AACb,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,aAAa;AACb,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AAExC,SAAS;AACT,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AAEnC,SAAS;AACT,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,OAAO;AACP,cAAc,6BAA6B,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAEhC,WAAW;AACX,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC","sourcesContent":["export * from './component';\n\n// ESSENTIALS\nexport * from './essentials/legend';\nexport * from './essentials/modal';\nexport * from './essentials/threshold';\nexport * from './essentials/title';\nexport * from './essentials/title-meter';\nexport * from './essentials/tooltip';\nexport * from './essentials/tooltip-axis';\nexport * from './essentials/canvas-chart-clip';\nexport * from './essentials/highlights';\n\n// GRAPHS\nexport * from './graphs/area';\nexport * from './graphs/area-stacked';\nexport * from './graphs/bar-simple';\nexport * from './graphs/bar-grouped';\nexport * from './graphs/bar-stacked';\nexport * from './graphs/boxplot';\nexport * from './graphs/bubble';\nexport * from './graphs/bullet';\nexport * from './graphs/histogram';\nexport * from './graphs/line';\nexport * from './graphs/lollipop';\nexport * from './graphs/scatter';\nexport * from './graphs/scatter-stacked';\nexport * from './graphs/pie';\nexport * from './graphs/gauge';\nexport * from './graphs/donut';\nexport * from './graphs/skeleton';\nexport * from './graphs/skeleton-lines';\nexport * from './graphs/tree';\nexport * from './graphs/treemap';\nexport * from './graphs/radar';\nexport * from './graphs/circle-pack';\nexport * from './graphs/wordcloud';\n\n// Layout\nexport * from './layout/spacer';\nexport * from './layout/layout';\n\n// MISC\nexport * from './axes/two-dimensional-axes';\nexport * from './axes/axis';\nexport * from './axes/grid-brush';\nexport * from './axes/chart-clip';\nexport * from './axes/grid';\nexport * from './axes/ruler';\nexport * from './axes/ruler-binned';\nexport * from './axes/ruler-stacked';\nexport * from './axes/toolbar';\nexport * from './axes/zero-line';\nexport * from './axes/zoom-bar';\n\n// Diagrams\nexport * from './diagrams/buildPaths';\nexport * from './diagrams/markerDefinitions';\n"]}
|