@carbon/charts 0.41.60 → 0.41.61

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.
Files changed (89) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/axis-chart.js +2 -2
  3. package/axis-chart.js.map +1 -1
  4. package/build/demo/data/CHART_TYPES.d.ts +5 -0
  5. package/build/demo/data/bullet.d.ts +30 -0
  6. package/build/demo/data/index.d.ts +1 -0
  7. package/build/src/charts/bullet.d.ts +6 -0
  8. package/build/src/charts/index.d.ts +1 -0
  9. package/build/src/components/graphs/bullet.d.ts +11 -0
  10. package/build/src/components/index.d.ts +1 -0
  11. package/build/src/configuration-non-customizable.d.ts +4 -1
  12. package/build/src/configuration.d.ts +2 -1
  13. package/build/src/interfaces/axis-scales.d.ts +7 -0
  14. package/build/src/interfaces/charts.d.ts +11 -0
  15. package/build/src/interfaces/enums.d.ts +2 -1
  16. package/bundle.js +1 -1
  17. package/chart.js +1 -1
  18. package/chart.js.map +1 -1
  19. package/charts/bullet.d.ts +6 -0
  20. package/charts/bullet.js +48 -0
  21. package/charts/bullet.js.map +1 -0
  22. package/charts/index.d.ts +1 -0
  23. package/charts/index.js +1 -0
  24. package/charts/index.js.map +1 -1
  25. package/components/axes/axis.js +2 -1
  26. package/components/axes/axis.js.map +1 -1
  27. package/components/axes/grid.js +2 -2
  28. package/components/axes/grid.js.map +1 -1
  29. package/components/essentials/legend.js +2 -13
  30. package/components/essentials/legend.js.map +1 -1
  31. package/components/graphs/bubble.js +7 -6
  32. package/components/graphs/bubble.js.map +1 -1
  33. package/components/graphs/bullet.d.ts +11 -0
  34. package/components/graphs/bullet.js +360 -0
  35. package/components/graphs/bullet.js.map +1 -0
  36. package/components/index.d.ts +1 -0
  37. package/components/index.js +1 -0
  38. package/components/index.js.map +1 -1
  39. package/configuration-non-customizable.d.ts +4 -1
  40. package/configuration-non-customizable.js +6 -2
  41. package/configuration-non-customizable.js.map +1 -1
  42. package/configuration.d.ts +2 -1
  43. package/configuration.js +17 -0
  44. package/configuration.js.map +1 -1
  45. package/demo/data/CHART_TYPES.d.ts +5 -0
  46. package/demo/data/CHART_TYPES.js +5 -0
  47. package/demo/data/CHART_TYPES.js.map +1 -1
  48. package/demo/data/bullet.d.ts +30 -0
  49. package/demo/data/bullet.js +75 -0
  50. package/demo/data/bullet.js.map +1 -0
  51. package/demo/data/bundle.js +1 -1
  52. package/demo/data/index.d.ts +1 -0
  53. package/demo/data/index.js +12 -5
  54. package/demo/data/index.js.map +1 -1
  55. package/demo/styles.css +124 -0
  56. package/demo/styles.css.map +1 -1
  57. package/demo/styles.min.css +1 -1
  58. package/demo/styles.min.css.map +1 -1
  59. package/demo/tsconfig.tsbuildinfo +18 -4
  60. package/interfaces/axis-scales.d.ts +7 -0
  61. package/interfaces/axis-scales.js.map +1 -1
  62. package/interfaces/charts.d.ts +11 -0
  63. package/interfaces/charts.js.map +1 -1
  64. package/interfaces/enums.d.ts +2 -1
  65. package/interfaces/enums.js +1 -0
  66. package/interfaces/enums.js.map +1 -1
  67. package/package.json +1 -1
  68. package/services/scales-cartesian.js +12 -4
  69. package/services/scales-cartesian.js.map +1 -1
  70. package/styles/colors.scss +28 -0
  71. package/styles/graphs/_bullet.scss +67 -0
  72. package/styles/graphs/index.scss +1 -0
  73. package/styles-g10.css +32 -0
  74. package/styles-g10.css.map +1 -1
  75. package/styles-g10.min.css +1 -1
  76. package/styles-g10.min.css.map +1 -1
  77. package/styles-g100.css +32 -0
  78. package/styles-g100.css.map +1 -1
  79. package/styles-g100.min.css +1 -1
  80. package/styles-g100.min.css.map +1 -1
  81. package/styles-g90.css +32 -0
  82. package/styles-g90.css.map +1 -1
  83. package/styles-g90.min.css +1 -1
  84. package/styles-g90.min.css.map +1 -1
  85. package/styles.css +32 -0
  86. package/styles.css.map +1 -1
  87. package/styles.min.css +1 -1
  88. package/styles.min.css.map +1 -1
  89. package/tsconfig.tsbuildinfo +68 -21
@@ -1 +1 @@
1
- {"version":3,"file":"legend.js","sourceRoot":"","sources":["legend.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { Tools } from '../../tools';\nimport { ColorClassNameTypes, LegendItemType } from '../../interfaces/enums';\nimport {\n\tLegendOrientations,\n\tRoles,\n\tEvents,\n\tTruncationTypes,\n} from '../../interfaces';\nimport { DOMUtils } from '../../services';\nimport * as Configuration from '../../configuration';\n\n// D3 Imports\nimport { select, event } from 'd3-selection';\n\nexport class Legend extends Component {\n\ttype = 'legend';\n\n\trender() {\n\t\tconst svg = this.getContainerSVG()\n\t\t\t.attr('role', Roles.GROUP)\n\t\t\t.attr('data-name', 'legend-items');\n\t\tconst options = this.getOptions();\n\t\tconst legendOptions = Tools.getProperty(options, 'legend');\n\t\tlet dataGroups = this.model.getDataGroups();\n\t\tconst legendOrder = Tools.getProperty(legendOptions, 'order');\n\n\t\tif (legendOrder) {\n\t\t\tdataGroups = this.sortDataGroups(dataGroups, legendOrder);\n\t\t}\n\n\t\tconst legendItems = svg\n\t\t\t.selectAll('g.legend-item')\n\t\t\t.data(dataGroups, (dataGroup) => dataGroup.name);\n\n\t\tconst addedLegendItems = legendItems\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.classed('legend-item', true)\n\t\t\t.classed('active', function (d, i) {\n\t\t\t\treturn d.status === Configuration.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\tconst legendClickable = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'legend',\n\t\t\t'clickable'\n\t\t);\n\t\tsvg.classed('clickable', legendClickable);\n\n\t\tconst checkboxRadius = Configuration.legend.checkbox.radius;\n\n\t\taddedLegendItems\n\t\t\t.append('rect')\n\t\t\t.classed('checkbox', true)\n\t\t\t.merge(legendItems.select('rect.checkbox'))\n\t\t\t.attr('role', Roles.CHECKBOX)\n\t\t\t.attr('tabindex', legendClickable ? 0 : -1)\n\t\t\t.attr('aria-label', (d) => d.name)\n\t\t\t.attr(\n\t\t\t\t'aria-checked',\n\t\t\t\t({ status }) =>\n\t\t\t\t\tstatus === Configuration.legend.items.status.ACTIVE\n\t\t\t)\n\t\t\t.attr('width', checkboxRadius * 2)\n\t\t\t.attr('height', checkboxRadius * 2)\n\t\t\t.attr('rx', 1)\n\t\t\t.attr('ry', 1)\n\t\t\t.attr('class', (d, i) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d.name,\n\t\t\t\t\toriginalClassName: 'checkbox',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) =>\n\t\t\t\td.status === Configuration.legend.items.status.ACTIVE\n\t\t\t\t\t? this.model.getFillColor(d.name) ||\n\t\t\t\t\tthis.model.getStrokeColor(d.name)\n\t\t\t\t\t: null\n\t\t\t)\n\t\t\t.classed('active', function (d, i) {\n\t\t\t\treturn d.status === Configuration.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\tconst addedLegendItemsText = addedLegendItems\n\t\t\t.append('text')\n\t\t\t.merge(legendItems.select('text'));\n\n\t\tthis.truncateLegendText(addedLegendItemsText);\n\n\t\t// Keep track of line numbers and positions\n\t\tconst itemConfig = {\n\t\t\tstartingPoint: 0,\n\t\t\titemIndexInLine: 0,\n\t\t\tlineNumber: 0,\n\t\t\tlastLegendItemTextWidth: 0,\n\t\t};\n\n\t\tthis.breakItemsIntoLines(addedLegendItems, 'legend-item', itemConfig);\n\n\t\tconst additionalItemsOption = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'legend',\n\t\t\t'additionalItems'\n\t\t);\n\n\t\t// add additional legend items\n\t\tif (additionalItemsOption && dataGroups.length) {\n\t\t\tconst self = this;\n\n\t\t\tconst additionalItems = svg\n\t\t\t\t.selectAll('g.additional-item')\n\t\t\t\t.data(additionalItemsOption);\n\n\t\t\tadditionalItems.exit().remove();\n\n\t\t\tconst addedAdditionalItems = additionalItems\n\t\t\t\t.enter()\n\t\t\t\t.append('g')\n\t\t\t\t.merge(additionalItems)\n\t\t\t\t.classed('additional-item', true);\n\n\t\t\t// remove nested child elements that no longer needed\n\t\t\taddedAdditionalItems.selectAll('*').remove();\n\n\t\t\t// get index of item with same type to assign distinct classname\n\t\t\tlet previousType;\n\t\t\tlet indexOfItem = 1;\n\n\t\t\t// add different type of legend items\n\t\t\taddedAdditionalItems\n\t\t\t\t.append('g')\n\t\t\t\t.classed('icon', true)\n\t\t\t\t.each(function (d, i) {\n\t\t\t\t\tconst additionalItem = select(this);\n\n\t\t\t\t\tif (!previousType || previousType != d.type) {\n\t\t\t\t\t\tpreviousType = d.type;\n\t\t\t\t\t\tindexOfItem = 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindexOfItem++;\n\t\t\t\t\t}\n\n\t\t\t\t\tself.addAdditionalItem(\n\t\t\t\t\t\tadditionalItem,\n\t\t\t\t\t\td,\n\t\t\t\t\t\tindexOfItem\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\tconst addedAdditionalItemsText = addedAdditionalItems\n\t\t\t\t.append('text')\n\t\t\t\t.merge(addedAdditionalItems.select('text'));\n\n\t\t\tself.truncateLegendText(addedAdditionalItemsText);\n\t\t\tthis.breakItemsIntoLines(\n\t\t\t\taddedAdditionalItems,\n\t\t\t\t'additional-item',\n\t\t\t\titemConfig\n\t\t\t);\n\t\t}\n\n\t\t// Remove old elements as needed.\n\t\tlegendItems\n\t\t\t.exit()\n\t\t\t.on('mouseover', null)\n\t\t\t.on('click', null)\n\t\t\t.on('mouseout', null)\n\t\t\t.remove();\n\n\t\tif (legendClickable && addedLegendItems.size() > 0) {\n\t\t\tthis.addEventListeners();\n\t\t}\n\n\t\tconst alignment = Tools.getProperty(legendOptions, 'alignment');\n\t\tconst alignmentOffset = DOMUtils.getAlignmentOffset(\n\t\t\talignment,\n\t\t\tsvg,\n\t\t\tthis.getParent()\n\t\t);\n\t\tsvg.attr('transform', `translate(${alignmentOffset}, 0)`);\n\t}\n\n\tsortDataGroups(dataGroups, legendOrder) {\n\t\t// Sort data in user defined order\n\t\tdataGroups.sort(\n\t\t\t(dataA, dataB) =>\n\t\t\t\tlegendOrder.indexOf(dataA.name) -\n\t\t\t\tlegendOrder.indexOf(dataB.name)\n\t\t);\n\n\t\t// If user only defined partial ordering, ordered items are placed before unordered ones\n\t\tif (legendOrder.length < dataGroups.length) {\n\t\t\tconst definedOrderIndex = dataGroups.length - legendOrder.length;\n\t\t\tconst definedOrder = dataGroups.slice(definedOrderIndex);\n\n\t\t\treturn definedOrder.concat(dataGroups.slice(0, definedOrderIndex));\n\t\t}\n\t\treturn dataGroups;\n\t}\n\n\taddAdditionalItem(additionalItem, itemConfig, indexOfItem) {\n\t\tconst { width, height } = Configuration.legend.area;\n\n\t\tif (itemConfig.type === LegendItemType.RADIUS) {\n\t\t\tconst { iconData, fill, stroke } = Configuration.legend.radius;\n\n\t\t\tconst circleEnter = additionalItem\n\t\t\t\t.attr('fill', 'none')\n\t\t\t\t.selectAll('circle')\n\t\t\t\t.data(iconData)\n\t\t\t\t.enter();\n\n\t\t\tcircleEnter\n\t\t\t\t.append('circle')\n\t\t\t\t.classed('radius', true)\n\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t.attr('aria-label', 'radius')\n\t\t\t\t.attr('cx', (d) => d.cx)\n\t\t\t\t.attr('cy', (d) => d.cy)\n\t\t\t\t.attr('r', (d) => d.r)\n\t\t\t\t.style('fill', itemConfig.fill ? itemConfig.fill : fill)\n\t\t\t\t.style(\n\t\t\t\t\t'stroke',\n\t\t\t\t\titemConfig.stroke ? itemConfig.stroke : stroke\n\t\t\t\t);\n\t\t} else if (itemConfig.type === LegendItemType.LINE) {\n\t\t\tconst lineConfig = Configuration.legend.line;\n\n\t\t\tif (additionalItem.select('line.line').empty()) {\n\t\t\t\tadditionalItem\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.classed(`line-${indexOfItem}`, true)\n\t\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t\t.attr('aria-label', 'line')\n\t\t\t\t\t.attr('x1', 0)\n\t\t\t\t\t.attr('y1', lineConfig.yPosition)\n\t\t\t\t\t.attr('x2', width)\n\t\t\t\t\t.attr('y2', lineConfig.yPosition)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'stroke',\n\t\t\t\t\t\titemConfig.stroke\n\t\t\t\t\t\t\t? itemConfig.stroke\n\t\t\t\t\t\t\t: lineConfig.stroke\n\t\t\t\t\t)\n\t\t\t\t\t.style('stroke-width', lineConfig.strokeWidth);\n\t\t\t}\n\t\t} else if (itemConfig.type === LegendItemType.AREA) {\n\t\t\tif (additionalItem.select('rect.area').empty()) {\n\t\t\t\tadditionalItem\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.classed(`area-${indexOfItem}`, true)\n\t\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t\t.attr('aria-label', 'area')\n\t\t\t\t\t.attr('width', width)\n\t\t\t\t\t.attr('height', height)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'fill',\n\t\t\t\t\t\tindexOfItem > 3 && !itemConfig.fill\n\t\t\t\t\t\t\t? Configuration.legend.area.fill\n\t\t\t\t\t\t\t: itemConfig.fill\n\t\t\t\t\t)\n\t\t\t\t\t.style('stroke', itemConfig.stroke);\n\t\t\t}\n\t\t} else if (itemConfig.type === LegendItemType.SIZE) {\n\t\t\tconst { iconData, fill, stroke } = Configuration.legend.size;\n\n\t\t\tconst sizeEnter = additionalItem\n\t\t\t\t.attr('fill', 'none')\n\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t.attr('aria-label', 'size')\n\t\t\t\t.selectAll('rect')\n\t\t\t\t.data(iconData)\n\t\t\t\t.enter();\n\n\t\t\tsizeEnter\n\t\t\t\t.append('rect')\n\t\t\t\t.classed('size', true)\n\t\t\t\t.attr('width', (d) => d.width)\n\t\t\t\t.attr('height', (d) => d.height)\n\t\t\t\t.attr('y', (d) => 24 - d.height)\n\t\t\t\t.style('fill', itemConfig.fill ? itemConfig.fill : fill)\n\t\t\t\t.style('stroke', itemConfig.stroke ? itemConfig.stroke : stroke)\n\t\t\t\t.style('stroke-width', 1);\n\t\t} else if (itemConfig.type === LegendItemType.QUARTILE) {\n\t\t\tconst { iconData } = Configuration.legend.quartile;\n\t\t\tconst { fill, stroke } = itemConfig;\n\n\t\t\tconst quartileEnter = additionalItem\n\t\t\t\t.selectAll('rect')\n\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t.attr('aria-label', 'quartile')\n\t\t\t\t.data(iconData)\n\t\t\t\t.enter();\n\n\t\t\tquartileEnter\n\t\t\t\t.append('rect')\n\t\t\t\t.classed(`quartile-${indexOfItem}`, true)\n\t\t\t\t.attr('x', (d) => d.x)\n\t\t\t\t.attr('y', (d) => d.y)\n\t\t\t\t.attr('width', (d) => d.width)\n\t\t\t\t.attr('height', (d) => d.height)\n\t\t\t\t.attr('fill', (d, i) => {\n\t\t\t\t\t// Set customized color\n\t\t\t\t\tif (i == 0 && fill) {\n\t\t\t\t\t\treturn fill;\n\t\t\t\t\t} else if (i == 1 && stroke) {\n\t\t\t\t\t\treturn stroke;\n\t\t\t\t\t}\n\t\t\t\t\treturn d.color;\n\t\t\t\t});\n\t\t}\n\t}\n\n\ttruncateLegendText(addedLegendItemsText) {\n\t\tconst trucationOptions = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'legend',\n\t\t\t'truncation'\n\t\t);\n\t\t// Truncation\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(trucationOptions, 'type');\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\ttrucationOptions,\n\t\t\t'threshold'\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\ttrucationOptions,\n\t\t\t'numCharacter'\n\t\t);\n\n\t\t// truncate the legend label if it's too long\n\t\tif (truncationType !== TruncationTypes.NONE) {\n\t\t\taddedLegendItemsText.html(function (d) {\n\t\t\t\tif (d.name.length > truncationThreshold) {\n\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\td.name,\n\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn d.name;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\taddedLegendItemsText.html((d) => d.name);\n\t\t}\n\t}\n\n\tbreakItemsIntoLines(addedLegendItems, className, itemConfig) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Check if there are disabled legend items\n\t\tconst { DISABLED } = Configuration.legend.items.status;\n\t\tconst dataGroups = this.model.getDataGroups();\n\t\tconst hasDeactivatedItems = dataGroups.some(\n\t\t\t(dataGroup) => dataGroup.status === DISABLED\n\t\t);\n\n\t\taddedLegendItems\n\t\t\t.merge(svg.selectAll(`g.${className}`))\n\t\t\t.each(function (d) {\n\t\t\t\tconst legendItem = select(this);\n\t\t\t\tconst svgDimensions = DOMUtils.getSVGElementSize(self.parent, {\n\t\t\t\t\tuseAttr: true,\n\t\t\t\t});\n\n\t\t\t\t// Set item position based on item type\n\t\t\t\tif (!d.type) {\n\t\t\t\t\titemConfig.hasDeactivatedItems = hasDeactivatedItems;\n\t\t\t\t\tself.setLegendItemPosition(\n\t\t\t\t\t\tlegendItem,\n\t\t\t\t\t\tsvgDimensions,\n\t\t\t\t\t\titemConfig,\n\t\t\t\t\t\tLegendItemType.CHECKBOX\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tself.setLegendItemPosition(\n\t\t\t\t\t\tlegendItem,\n\t\t\t\t\t\tsvgDimensions,\n\t\t\t\t\t\titemConfig,\n\t\t\t\t\t\td.type\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tsetLegendItemPosition(\n\t\tlegendItem,\n\t\tparentSVGDimension,\n\t\titemConfig,\n\t\titemType\n\t) {\n\t\tconst legendOrientation = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'legend',\n\t\t\t'orientation'\n\t\t);\n\n\t\t// Configs\n\t\tconst legendItemsHorizontalSpacing =\n\t\t\tConfiguration.legend.items.horizontalSpace;\n\t\tconst legendItemsVerticalSpacing =\n\t\t\tConfiguration.legend.items.verticalSpace;\n\n\t\tconst legendTextYOffset = Configuration.legend.items.textYOffset;\n\t\tconst iconWidth =\n\t\t\titemType === LegendItemType.CHECKBOX ||\n\t\t\t\titemType === LegendItemType.RADIUS\n\t\t\t\t? Configuration.legend.checkbox.radius * 2\n\t\t\t\t: Configuration.legend.area.width;\n\t\tconst spaceAfter = Configuration.legend.items.spaceAfter;\n\n\t\tconst legendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\tlegendItem.select('text'),\n\t\t\t{ useBBox: true }\n\t\t);\n\t\tconst translateOffset = Configuration.legend.area.width / 2 - 1;\n\t\t// Check and update position\n\t\tif (\n\t\t\titemConfig.itemIndexInLine === 0 ||\n\t\t\titemConfig.lastLegendItemTextWidth === 0 ||\n\t\t\tlegendOrientation === LegendOrientations.VERTICAL\n\t\t) {\n\t\t\tif (itemConfig.itemIndexInLine > 0) {\n\t\t\t\titemConfig.lineNumber++;\n\t\t\t}\n\t\t} else {\n\t\t\titemConfig.startingPoint +=\n\t\t\t\titemConfig.lastLegendItemTextWidth +\n\t\t\t\ticonWidth +\n\t\t\t\tspaceAfter +\n\t\t\t\tlegendItemsHorizontalSpacing;\n\n\t\t\t// Place legends in a new line if space is not enough\n\t\t\tif (\n\t\t\t\titemConfig.startingPoint +\n\t\t\t\ticonWidth +\n\t\t\t\tspaceAfter +\n\t\t\t\tlegendItemTextDimensions.width >\n\t\t\t\tparentSVGDimension.width\n\t\t\t) {\n\t\t\t\titemConfig.lineNumber++;\n\t\t\t\titemConfig.startingPoint =\n\t\t\t\t\ticonWidth === 24 ? translateOffset : 0;\n\t\t\t\titemConfig.itemIndexInLine = 0;\n\t\t\t}\n\t\t}\n\n\t\titemConfig.lastLegendItemTextWidth = legendItemTextDimensions.width;\n\n\t\tconst yPosition = itemConfig.lineNumber * legendItemsVerticalSpacing;\n\t\tconst yTextPosition = legendTextYOffset + yPosition + 3;\n\n\t\tif (itemType === LegendItemType.CHECKBOX) {\n\t\t\tlegendItem\n\t\t\t\t.select('rect.checkbox')\n\t\t\t\t.attr('x', itemConfig.startingPoint)\n\t\t\t\t.attr('y', yPosition);\n\n\t\t\t// Position text\n\t\t\tlegendItem\n\t\t\t\t.select('text')\n\t\t\t\t.attr('x', itemConfig.startingPoint + iconWidth + spaceAfter)\n\t\t\t\t.attr('y', yTextPosition);\n\n\t\t\t// Test if legendItems are placed in the correct direction\n\t\t\tconst testHorizontal =\n\t\t\t\t(!legendOrientation ||\n\t\t\t\t\tlegendOrientation === LegendOrientations.HORIZONTAL) &&\n\t\t\t\tparseInt(legendItem.select('rect.checkbox').attr('y')) % 24 ===\n\t\t\t\t0;\n\n\t\t\tconst testVertical =\n\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL &&\n\t\t\t\tlegendItem.select('rect.checkbox').attr('x') === '0';\n\n\t\t\tconst hasCorrectLegendDirection = testHorizontal || testVertical;\n\n\t\t\t// Render checkbox check icon\n\t\t\tif (\n\t\t\t\titemConfig.hasDeactivatedItems &&\n\t\t\t\tlegendItem.select('g.check').empty() &&\n\t\t\t\thasCorrectLegendDirection\n\t\t\t) {\n\t\t\t\tlegendItem.append('g').classed('check', true).html(`\n\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`);\n\n\t\t\t\tlegendItem\n\t\t\t\t\t.select('g.check svg')\n\t\t\t\t\t.attr('width', iconWidth - 1)\n\t\t\t\t\t.attr('height', iconWidth - 1)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x',\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\tlegendItem.select('rect.checkbox').attr('x')\n\t\t\t\t\t\t) + 0.5\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\tparseFloat(\n\t\t\t\t\t\t\tlegendItem.select('rect.checkbox').attr('y')\n\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\t!itemConfig.hasDeactivatedItems &&\n\t\t\t\t!legendItem.select('g.check').empty()\n\t\t\t) {\n\t\t\t\tlegendItem.select('g.check').remove();\n\t\t\t}\n\t\t} else if (itemType === LegendItemType.RADIUS) {\n\t\t\tlegendItem\n\t\t\t\t.selectAll('circle.radius')\n\t\t\t\t.attr('cx', (d) => itemConfig.startingPoint + d.cx)\n\t\t\t\t.attr('cy', (d) => yPosition + d.cy);\n\n\t\t\tlegendItem\n\t\t\t\t.select('text')\n\t\t\t\t.attr('x', itemConfig.startingPoint + iconWidth + spaceAfter)\n\t\t\t\t.attr('y', yTextPosition);\n\t\t} else if (itemType === LegendItemType.SIZE) {\n\t\t\tlegendItem\n\t\t\t\t.selectAll('g.icon')\n\t\t\t\t.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(${itemConfig.startingPoint - translateOffset}, ${yPosition - 12\n\t\t\t\t\t})`\n\t\t\t\t);\n\n\t\t\tlegendItem\n\t\t\t\t.select('text')\n\t\t\t\t.attr(\n\t\t\t\t\t'x',\n\t\t\t\t\titemConfig.startingPoint +\n\t\t\t\t\ticonWidth +\n\t\t\t\t\tspaceAfter -\n\t\t\t\t\ttranslateOffset\n\t\t\t\t)\n\t\t\t\t.attr('y', yTextPosition);\n\t\t} else {\n\t\t\tlegendItem\n\t\t\t\t.selectAll('g.icon')\n\t\t\t\t.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(${itemConfig.startingPoint - translateOffset\n\t\t\t\t\t}, ${yPosition})`\n\t\t\t\t);\n\n\t\t\tlegendItem\n\t\t\t\t.select('text')\n\t\t\t\t.attr(\n\t\t\t\t\t'x',\n\t\t\t\t\titemConfig.startingPoint +\n\t\t\t\t\ticonWidth +\n\t\t\t\t\tspaceAfter -\n\t\t\t\t\ttranslateOffset\n\t\t\t\t)\n\t\t\t\t.attr('y', yTextPosition);\n\t\t}\n\n\t\titemConfig.itemIndexInLine++;\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.getOptions();\n\t\tconst legendOptions = Tools.getProperty(options, 'legend');\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\n\t\tsvg.selectAll('g.legend-item')\n\t\t\t.on('mouseover', function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_HOVER, {\n\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t});\n\n\t\t\t\t// Configs\n\t\t\t\tconst checkboxRadius = Configuration.legend.checkbox.radius;\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select('rect.checkbox').classed('hovered', true);\n\n\t\t\t\thoveredItem\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.classed('hover-stroke', true)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x',\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select('rect.checkbox').attr('x')\n\t\t\t\t\t\t) - 2\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\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select('rect.checkbox').attr('y')\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr('width', checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr('height', checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr('rx', 3)\n\t\t\t\t\t.attr('ry', 3)\n\t\t\t\t\t.lower();\n\n\t\t\t\tconst hoveredItemData = hoveredItem.datum() as any;\n\t\t\t\tif (hoveredItemData.name.length > truncationThreshold) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: hoveredItem,\n\t\t\t\t\t\tcontent: hoveredItemData.name,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t})\n\t\t\t.on('click', function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {\n\t\t\t\t\tclickedElement: select(this),\n\t\t\t\t});\n\n\t\t\t\tconst clickedItem = select(this);\n\t\t\t\tconst clickedItemData = clickedItem.datum() as any;\n\n\t\t\t\tself.model.toggleDataLabel(clickedItemData.name);\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select('rect.hover-stroke').remove();\n\t\t\t\thoveredItem.select('rect.checkbox').classed('hovered', false);\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\t\t\t{\n\t\t\t\t\t\thoveredElement: hoveredItem,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\n\t\tsvg.selectAll('g.legend-item rect.checkbox').on('keyup', function (d) {\n\t\t\tif (event.key && (event.key === 'Enter' || event.key === ' ')) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tself.model.toggleDataLabel(d.name);\n\t\t\t}\n\t\t});\n\n\t\tsvg.selectAll('g.additional-item').on('mouseover', function () {\n\t\t\tconst hoveredItem = select(this);\n\n\t\t\tconst hoveredItemData = hoveredItem.datum() as any;\n\t\t\tif (hoveredItemData.name.length > truncationThreshold) {\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement: hoveredItem,\n\t\t\t\t\tcontent: hoveredItemData.name,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"legend.js","sourceRoot":"","sources":["legend.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { Tools } from '../../tools';\nimport { ColorClassNameTypes, LegendItemType } from '../../interfaces/enums';\nimport {\n\tLegendOrientations,\n\tRoles,\n\tEvents,\n\tTruncationTypes,\n} from '../../interfaces';\nimport { DOMUtils } from '../../services';\nimport * as Configuration from '../../configuration';\n\n// D3 Imports\nimport { select, event } from 'd3-selection';\n\nexport class Legend extends Component {\n\ttype = 'legend';\n\n\trender() {\n\t\tconst svg = this.getContainerSVG()\n\t\t\t.attr('role', Roles.GROUP)\n\t\t\t.attr('data-name', 'legend-items');\n\t\tconst options = this.getOptions();\n\t\tconst legendOptions = Tools.getProperty(options, 'legend');\n\t\tlet dataGroups = this.model.getDataGroups();\n\t\tconst legendOrder = Tools.getProperty(legendOptions, 'order');\n\n\t\tif (legendOrder) {\n\t\t\tdataGroups = this.sortDataGroups(dataGroups, legendOrder);\n\t\t}\n\n\t\tconst legendItems = svg\n\t\t\t.selectAll('g.legend-item')\n\t\t\t.data(dataGroups, (dataGroup) => dataGroup.name);\n\n\t\tconst addedLegendItems = legendItems\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.classed('legend-item', true)\n\t\t\t.classed('active', function (d, i) {\n\t\t\t\treturn d.status === Configuration.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\tconst legendClickable = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'legend',\n\t\t\t'clickable'\n\t\t);\n\t\tsvg.classed('clickable', legendClickable);\n\n\t\tconst checkboxRadius = Configuration.legend.checkbox.radius;\n\n\t\taddedLegendItems\n\t\t\t.append('rect')\n\t\t\t.classed('checkbox', true)\n\t\t\t.merge(legendItems.select('rect.checkbox'))\n\t\t\t.attr('role', Roles.CHECKBOX)\n\t\t\t.attr('tabindex', legendClickable ? 0 : -1)\n\t\t\t.attr('aria-label', (d) => d.name)\n\t\t\t.attr(\n\t\t\t\t'aria-checked',\n\t\t\t\t({ status }) =>\n\t\t\t\t\tstatus === Configuration.legend.items.status.ACTIVE\n\t\t\t)\n\t\t\t.attr('width', checkboxRadius * 2)\n\t\t\t.attr('height', checkboxRadius * 2)\n\t\t\t.attr('rx', 1)\n\t\t\t.attr('ry', 1)\n\t\t\t.attr('class', (d, i) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [ColorClassNameTypes.FILL],\n\t\t\t\t\tdataGroupName: d.name,\n\t\t\t\t\toriginalClassName: 'checkbox',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) =>\n\t\t\t\td.status === Configuration.legend.items.status.ACTIVE\n\t\t\t\t\t? this.model.getFillColor(d.name) ||\n\t\t\t\t\t this.model.getStrokeColor(d.name)\n\t\t\t\t\t: null\n\t\t\t)\n\t\t\t.classed('active', function (d, i) {\n\t\t\t\treturn d.status === Configuration.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\tconst addedLegendItemsText = addedLegendItems\n\t\t\t.append('text')\n\t\t\t.merge(legendItems.select('text'));\n\n\t\tthis.truncateLegendText(addedLegendItemsText);\n\n\t\t// Keep track of line numbers and positions\n\t\tconst itemConfig = {\n\t\t\tstartingPoint: 0,\n\t\t\titemIndexInLine: 0,\n\t\t\tlineNumber: 0,\n\t\t\tlastLegendItemTextWidth: 0,\n\t\t};\n\n\t\tthis.breakItemsIntoLines(addedLegendItems, 'legend-item', itemConfig);\n\n\t\tconst additionalItemsOption = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'legend',\n\t\t\t'additionalItems'\n\t\t);\n\n\t\t// add additional legend items\n\t\tif (additionalItemsOption && dataGroups.length) {\n\t\t\tconst self = this;\n\n\t\t\tconst additionalItems = svg\n\t\t\t\t.selectAll('g.additional-item')\n\t\t\t\t.data(additionalItemsOption);\n\n\t\t\tadditionalItems.exit().remove();\n\n\t\t\tconst addedAdditionalItems = additionalItems\n\t\t\t\t.enter()\n\t\t\t\t.append('g')\n\t\t\t\t.merge(additionalItems)\n\t\t\t\t.classed('additional-item', true);\n\n\t\t\t// remove nested child elements that no longer needed\n\t\t\taddedAdditionalItems.selectAll('*').remove();\n\n\t\t\t// get index of item with same type to assign distinct classname\n\t\t\tlet previousType;\n\t\t\tlet indexOfItem = 1;\n\n\t\t\t// add different type of legend items\n\t\t\taddedAdditionalItems\n\t\t\t\t.append('g')\n\t\t\t\t.classed('icon', true)\n\t\t\t\t.each(function (d, i) {\n\t\t\t\t\tconst additionalItem = select(this);\n\n\t\t\t\t\tif (!previousType || previousType != d.type) {\n\t\t\t\t\t\tpreviousType = d.type;\n\t\t\t\t\t\tindexOfItem = 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindexOfItem++;\n\t\t\t\t\t}\n\n\t\t\t\t\tself.addAdditionalItem(additionalItem, d, indexOfItem);\n\t\t\t\t});\n\t\t\tconst addedAdditionalItemsText = addedAdditionalItems\n\t\t\t\t.append('text')\n\t\t\t\t.merge(addedAdditionalItems.select('text'));\n\n\t\t\tself.truncateLegendText(addedAdditionalItemsText);\n\t\t\tthis.breakItemsIntoLines(\n\t\t\t\taddedAdditionalItems,\n\t\t\t\t'additional-item',\n\t\t\t\titemConfig\n\t\t\t);\n\t\t}\n\n\t\t// Remove old elements as needed.\n\t\tlegendItems\n\t\t\t.exit()\n\t\t\t.on('mouseover', null)\n\t\t\t.on('click', null)\n\t\t\t.on('mouseout', null)\n\t\t\t.remove();\n\n\t\tif (legendClickable && addedLegendItems.size() > 0) {\n\t\t\tthis.addEventListeners();\n\t\t}\n\n\t\tconst alignment = Tools.getProperty(legendOptions, 'alignment');\n\t\tconst alignmentOffset = DOMUtils.getAlignmentOffset(\n\t\t\talignment,\n\t\t\tsvg,\n\t\t\tthis.getParent()\n\t\t);\n\t\tsvg.attr('transform', `translate(${alignmentOffset}, 0)`);\n\t}\n\n\tsortDataGroups(dataGroups, legendOrder) {\n\t\t// Sort data in user defined order\n\t\tdataGroups.sort(\n\t\t\t(dataA, dataB) =>\n\t\t\t\tlegendOrder.indexOf(dataA.name) -\n\t\t\t\tlegendOrder.indexOf(dataB.name)\n\t\t);\n\n\t\t// If user only defined partial ordering, ordered items are placed before unordered ones\n\t\tif (legendOrder.length < dataGroups.length) {\n\t\t\tconst definedOrderIndex = dataGroups.length - legendOrder.length;\n\t\t\tconst definedOrder = dataGroups.slice(definedOrderIndex);\n\n\t\t\treturn definedOrder.concat(dataGroups.slice(0, definedOrderIndex));\n\t\t}\n\t\treturn dataGroups;\n\t}\n\n\taddAdditionalItem(additionalItem, itemConfig, indexOfItem) {\n\t\tconst { width, height } = Configuration.legend.area;\n\n\t\tif (itemConfig.type === LegendItemType.RADIUS) {\n\t\t\tconst { iconData, fill, stroke } = Configuration.legend.radius;\n\n\t\t\tconst circleEnter = additionalItem\n\t\t\t\t.attr('fill', 'none')\n\t\t\t\t.selectAll('circle')\n\t\t\t\t.data(iconData)\n\t\t\t\t.enter();\n\n\t\t\tcircleEnter\n\t\t\t\t.append('circle')\n\t\t\t\t.classed('radius', true)\n\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t.attr('aria-label', 'radius')\n\t\t\t\t.attr('cx', (d) => d.cx)\n\t\t\t\t.attr('cy', (d) => d.cy)\n\t\t\t\t.attr('r', (d) => d.r)\n\t\t\t\t.style('fill', itemConfig.fill ? itemConfig.fill : fill)\n\t\t\t\t.style(\n\t\t\t\t\t'stroke',\n\t\t\t\t\titemConfig.stroke ? itemConfig.stroke : stroke\n\t\t\t\t);\n\t\t} else if (itemConfig.type === LegendItemType.LINE) {\n\t\t\tconst lineConfig = Configuration.legend.line;\n\n\t\t\tif (additionalItem.select('line.line').empty()) {\n\t\t\t\tadditionalItem\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.classed(`line-${indexOfItem}`, true)\n\t\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t\t.attr('aria-label', 'line')\n\t\t\t\t\t.attr('x1', 0)\n\t\t\t\t\t.attr('y1', lineConfig.yPosition)\n\t\t\t\t\t.attr('x2', width)\n\t\t\t\t\t.attr('y2', lineConfig.yPosition)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'stroke',\n\t\t\t\t\t\titemConfig.stroke\n\t\t\t\t\t\t\t? itemConfig.stroke\n\t\t\t\t\t\t\t: lineConfig.stroke\n\t\t\t\t\t)\n\t\t\t\t\t.style('stroke-width', lineConfig.strokeWidth);\n\t\t\t}\n\t\t} else if (itemConfig.type === LegendItemType.AREA) {\n\t\t\tif (additionalItem.select('rect.area').empty()) {\n\t\t\t\tadditionalItem\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.classed(`area-${indexOfItem}`, true)\n\t\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t\t.attr('aria-label', 'area')\n\t\t\t\t\t.attr('width', width)\n\t\t\t\t\t.attr('height', height)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'fill',\n\t\t\t\t\t\tindexOfItem > 3 && !itemConfig.fill\n\t\t\t\t\t\t\t? Configuration.legend.area.fill\n\t\t\t\t\t\t\t: itemConfig.fill\n\t\t\t\t\t)\n\t\t\t\t\t.style('stroke', itemConfig.stroke);\n\t\t\t}\n\t\t} else if (itemConfig.type === LegendItemType.SIZE) {\n\t\t\tconst { iconData, fill, stroke } = Configuration.legend.size;\n\n\t\t\tconst sizeEnter = additionalItem\n\t\t\t\t.attr('fill', 'none')\n\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t.attr('aria-label', 'size')\n\t\t\t\t.selectAll('rect')\n\t\t\t\t.data(iconData)\n\t\t\t\t.enter();\n\n\t\t\tsizeEnter\n\t\t\t\t.append('rect')\n\t\t\t\t.classed('size', true)\n\t\t\t\t.attr('width', (d) => d.width)\n\t\t\t\t.attr('height', (d) => d.height)\n\t\t\t\t.attr('y', (d) => 24 - d.height)\n\t\t\t\t.style('fill', itemConfig.fill ? itemConfig.fill : fill)\n\t\t\t\t.style('stroke', itemConfig.stroke ? itemConfig.stroke : stroke)\n\t\t\t\t.style('stroke-width', 1);\n\t\t} else if (itemConfig.type === LegendItemType.QUARTILE) {\n\t\t\tconst { iconData } = Configuration.legend.quartile;\n\n\t\t\tconst quartileEnter = additionalItem\n\t\t\t\t.selectAll('rect')\n\t\t\t\t.attr('role', Roles.IMG)\n\t\t\t\t.attr('aria-label', 'quartile')\n\t\t\t\t.data(iconData)\n\t\t\t\t.enter();\n\n\t\t\tquartileEnter\n\t\t\t\t.append('rect')\n\t\t\t\t.attr(\n\t\t\t\t\t'class',\n\t\t\t\t\t(d, i) => `quartile-${i === 0 ? 'wrapper' : 'line'}`\n\t\t\t\t)\n\t\t\t\t.attr('x', (d) => d.x)\n\t\t\t\t.attr('y', (d) => d.y)\n\t\t\t\t.attr('width', (d) => d.width)\n\t\t\t\t.attr('height', (d) => d.height);\n\t\t}\n\t}\n\n\ttruncateLegendText(addedLegendItemsText) {\n\t\tconst trucationOptions = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'legend',\n\t\t\t'truncation'\n\t\t);\n\t\t// Truncation\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(trucationOptions, 'type');\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\ttrucationOptions,\n\t\t\t'threshold'\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\ttrucationOptions,\n\t\t\t'numCharacter'\n\t\t);\n\n\t\t// truncate the legend label if it's too long\n\t\tif (truncationType !== TruncationTypes.NONE) {\n\t\t\taddedLegendItemsText.html(function (d) {\n\t\t\t\tif (d.name.length > truncationThreshold) {\n\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\td.name,\n\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn d.name;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\taddedLegendItemsText.html((d) => d.name);\n\t\t}\n\t}\n\n\tbreakItemsIntoLines(addedLegendItems, className, itemConfig) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Check if there are disabled legend items\n\t\tconst { DISABLED } = Configuration.legend.items.status;\n\t\tconst dataGroups = this.model.getDataGroups();\n\t\tconst hasDeactivatedItems = dataGroups.some(\n\t\t\t(dataGroup) => dataGroup.status === DISABLED\n\t\t);\n\n\t\taddedLegendItems\n\t\t\t.merge(svg.selectAll(`g.${className}`))\n\t\t\t.each(function (d) {\n\t\t\t\tconst legendItem = select(this);\n\t\t\t\tconst svgDimensions = DOMUtils.getSVGElementSize(self.parent, {\n\t\t\t\t\tuseAttr: true,\n\t\t\t\t});\n\n\t\t\t\t// Set item position based on item type\n\t\t\t\tif (!d.type) {\n\t\t\t\t\titemConfig.hasDeactivatedItems = hasDeactivatedItems;\n\t\t\t\t\tself.setLegendItemPosition(\n\t\t\t\t\t\tlegendItem,\n\t\t\t\t\t\tsvgDimensions,\n\t\t\t\t\t\titemConfig,\n\t\t\t\t\t\tLegendItemType.CHECKBOX\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tself.setLegendItemPosition(\n\t\t\t\t\t\tlegendItem,\n\t\t\t\t\t\tsvgDimensions,\n\t\t\t\t\t\titemConfig,\n\t\t\t\t\t\td.type\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tsetLegendItemPosition(\n\t\tlegendItem,\n\t\tparentSVGDimension,\n\t\titemConfig,\n\t\titemType\n\t) {\n\t\tconst legendOrientation = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t'legend',\n\t\t\t'orientation'\n\t\t);\n\n\t\t// Configs\n\t\tconst legendItemsHorizontalSpacing =\n\t\t\tConfiguration.legend.items.horizontalSpace;\n\t\tconst legendItemsVerticalSpacing =\n\t\t\tConfiguration.legend.items.verticalSpace;\n\n\t\tconst legendTextYOffset = Configuration.legend.items.textYOffset;\n\t\tconst iconWidth =\n\t\t\titemType === LegendItemType.CHECKBOX ||\n\t\t\titemType === LegendItemType.RADIUS\n\t\t\t\t? Configuration.legend.checkbox.radius * 2\n\t\t\t\t: Configuration.legend.area.width;\n\t\tconst spaceAfter = Configuration.legend.items.spaceAfter;\n\n\t\tconst legendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\tlegendItem.select('text'),\n\t\t\t{ useBBox: true }\n\t\t);\n\t\tconst translateOffset = Configuration.legend.area.width / 2 - 1;\n\t\t// Check and update position\n\t\tif (\n\t\t\titemConfig.itemIndexInLine === 0 ||\n\t\t\titemConfig.lastLegendItemTextWidth === 0 ||\n\t\t\tlegendOrientation === LegendOrientations.VERTICAL\n\t\t) {\n\t\t\tif (itemConfig.itemIndexInLine > 0) {\n\t\t\t\titemConfig.lineNumber++;\n\t\t\t}\n\t\t} else {\n\t\t\titemConfig.startingPoint +=\n\t\t\t\titemConfig.lastLegendItemTextWidth +\n\t\t\t\ticonWidth +\n\t\t\t\tspaceAfter +\n\t\t\t\tlegendItemsHorizontalSpacing;\n\n\t\t\t// Place legends in a new line if space is not enough\n\t\t\tif (\n\t\t\t\titemConfig.startingPoint +\n\t\t\t\t\ticonWidth +\n\t\t\t\t\tspaceAfter +\n\t\t\t\t\tlegendItemTextDimensions.width >\n\t\t\t\tparentSVGDimension.width\n\t\t\t) {\n\t\t\t\titemConfig.lineNumber++;\n\t\t\t\titemConfig.startingPoint =\n\t\t\t\t\ticonWidth === 24 ? translateOffset : 0;\n\t\t\t\titemConfig.itemIndexInLine = 0;\n\t\t\t}\n\t\t}\n\n\t\titemConfig.lastLegendItemTextWidth = legendItemTextDimensions.width;\n\n\t\tconst yPosition = itemConfig.lineNumber * legendItemsVerticalSpacing;\n\t\tconst yTextPosition = legendTextYOffset + yPosition + 3;\n\n\t\tif (itemType === LegendItemType.CHECKBOX) {\n\t\t\tlegendItem\n\t\t\t\t.select('rect.checkbox')\n\t\t\t\t.attr('x', itemConfig.startingPoint)\n\t\t\t\t.attr('y', yPosition);\n\n\t\t\t// Position text\n\t\t\tlegendItem\n\t\t\t\t.select('text')\n\t\t\t\t.attr('x', itemConfig.startingPoint + iconWidth + spaceAfter)\n\t\t\t\t.attr('y', yTextPosition);\n\n\t\t\t// Test if legendItems are placed in the correct direction\n\t\t\tconst testHorizontal =\n\t\t\t\t(!legendOrientation ||\n\t\t\t\t\tlegendOrientation === LegendOrientations.HORIZONTAL) &&\n\t\t\t\tparseInt(legendItem.select('rect.checkbox').attr('y')) % 24 ===\n\t\t\t\t\t0;\n\n\t\t\tconst testVertical =\n\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL &&\n\t\t\t\tlegendItem.select('rect.checkbox').attr('x') === '0';\n\n\t\t\tconst hasCorrectLegendDirection = testHorizontal || testVertical;\n\n\t\t\t// Render checkbox check icon\n\t\t\tif (\n\t\t\t\titemConfig.hasDeactivatedItems &&\n\t\t\t\tlegendItem.select('g.check').empty() &&\n\t\t\t\thasCorrectLegendDirection\n\t\t\t) {\n\t\t\t\tlegendItem.append('g').classed('check', true).html(`\n\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`);\n\n\t\t\t\tlegendItem\n\t\t\t\t\t.select('g.check svg')\n\t\t\t\t\t.attr('width', iconWidth - 1)\n\t\t\t\t\t.attr('height', iconWidth - 1)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x',\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\tlegendItem.select('rect.checkbox').attr('x')\n\t\t\t\t\t\t) + 0.5\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\tparseFloat(\n\t\t\t\t\t\t\tlegendItem.select('rect.checkbox').attr('y')\n\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\t!itemConfig.hasDeactivatedItems &&\n\t\t\t\t!legendItem.select('g.check').empty()\n\t\t\t) {\n\t\t\t\tlegendItem.select('g.check').remove();\n\t\t\t}\n\t\t} else if (itemType === LegendItemType.RADIUS) {\n\t\t\tlegendItem\n\t\t\t\t.selectAll('circle.radius')\n\t\t\t\t.attr('cx', (d) => itemConfig.startingPoint + d.cx)\n\t\t\t\t.attr('cy', (d) => yPosition + d.cy);\n\n\t\t\tlegendItem\n\t\t\t\t.select('text')\n\t\t\t\t.attr('x', itemConfig.startingPoint + iconWidth + spaceAfter)\n\t\t\t\t.attr('y', yTextPosition);\n\t\t} else if (itemType === LegendItemType.SIZE) {\n\t\t\tlegendItem\n\t\t\t\t.selectAll('g.icon')\n\t\t\t\t.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(${itemConfig.startingPoint - translateOffset}, ${\n\t\t\t\t\t\tyPosition - 12\n\t\t\t\t\t})`\n\t\t\t\t);\n\n\t\t\tlegendItem\n\t\t\t\t.select('text')\n\t\t\t\t.attr(\n\t\t\t\t\t'x',\n\t\t\t\t\titemConfig.startingPoint +\n\t\t\t\t\t\ticonWidth +\n\t\t\t\t\t\tspaceAfter -\n\t\t\t\t\t\ttranslateOffset\n\t\t\t\t)\n\t\t\t\t.attr('y', yTextPosition);\n\t\t} else {\n\t\t\tlegendItem\n\t\t\t\t.selectAll('g.icon')\n\t\t\t\t.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(${\n\t\t\t\t\t\titemConfig.startingPoint - translateOffset\n\t\t\t\t\t}, ${yPosition})`\n\t\t\t\t);\n\n\t\t\tlegendItem\n\t\t\t\t.select('text')\n\t\t\t\t.attr(\n\t\t\t\t\t'x',\n\t\t\t\t\titemConfig.startingPoint +\n\t\t\t\t\t\ticonWidth +\n\t\t\t\t\t\tspaceAfter -\n\t\t\t\t\t\ttranslateOffset\n\t\t\t\t)\n\t\t\t\t.attr('y', yTextPosition);\n\t\t}\n\n\t\titemConfig.itemIndexInLine++;\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.getOptions();\n\t\tconst legendOptions = Tools.getProperty(options, 'legend');\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\n\t\tsvg.selectAll('g.legend-item')\n\t\t\t.on('mouseover', function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_HOVER, {\n\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t});\n\n\t\t\t\t// Configs\n\t\t\t\tconst checkboxRadius = Configuration.legend.checkbox.radius;\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select('rect.checkbox').classed('hovered', true);\n\n\t\t\t\thoveredItem\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.classed('hover-stroke', true)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'x',\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select('rect.checkbox').attr('x')\n\t\t\t\t\t\t) - 2\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\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select('rect.checkbox').attr('y')\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr('width', checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr('height', checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr('rx', 3)\n\t\t\t\t\t.attr('ry', 3)\n\t\t\t\t\t.lower();\n\n\t\t\t\tconst hoveredItemData = hoveredItem.datum() as any;\n\t\t\t\tif (hoveredItemData.name.length > truncationThreshold) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: hoveredItem,\n\t\t\t\t\t\tcontent: hoveredItemData.name,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t})\n\t\t\t.on('click', function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {\n\t\t\t\t\tclickedElement: select(this),\n\t\t\t\t});\n\n\t\t\t\tconst clickedItem = select(this);\n\t\t\t\tconst clickedItemData = clickedItem.datum() as any;\n\n\t\t\t\tself.model.toggleDataLabel(clickedItemData.name);\n\t\t\t})\n\t\t\t.on('mouseout', function () {\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select('rect.hover-stroke').remove();\n\t\t\t\thoveredItem.select('rect.checkbox').classed('hovered', false);\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\t\t\t{\n\t\t\t\t\t\thoveredElement: hoveredItem,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\n\t\tsvg.selectAll('g.legend-item rect.checkbox').on('keyup', function (d) {\n\t\t\tif (event.key && (event.key === 'Enter' || event.key === ' ')) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tself.model.toggleDataLabel(d.name);\n\t\t\t}\n\t\t});\n\n\t\tsvg.selectAll('g.additional-item').on('mouseover', function () {\n\t\t\tconst hoveredItem = select(this);\n\n\t\t\tconst hoveredItemData = hoveredItem.datum() as any;\n\t\t\tif (hoveredItemData.name.length > truncationThreshold) {\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement: hoveredItem,\n\t\t\t\t\tcontent: hoveredItemData.name,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n"]}
@@ -15,6 +15,7 @@ var __extends = (this && this.__extends) || (function () {
15
15
  import { Scatter } from './scatter';
16
16
  import { DOMUtils } from '../../services';
17
17
  import { Roles, ColorClassNameTypes } from '../../interfaces';
18
+ import { Tools } from '../../tools';
18
19
  import { extent } from 'd3-array';
19
20
  import { scaleLinear } from 'd3-scale';
20
21
  var Bubble = /** @class */ (function (_super) {
@@ -50,17 +51,17 @@ var Bubble = /** @class */ (function (_super) {
50
51
  var radiusMapsTo = options.bubble.radiusMapsTo;
51
52
  var radiusScale = this.getRadiusScale(selection);
52
53
  var groupMapsTo = options.data.groupMapsTo;
54
+ var cartesianScales = this.services.cartesianScales;
55
+ var getDomainValue = function (d, i) { return cartesianScales.getDomainValue(d, i); };
56
+ var getRangeValue = function (d, i) { return cartesianScales.getRangeValue(d, i); };
57
+ var _a = Tools.flipDomainAndRangeBasedOnOrientation(getDomainValue, getRangeValue, cartesianScales.getOrientation()), getXValue = _a[0], getYValue = _a[1];
53
58
  selection
54
59
  .raise()
55
60
  .classed('dot', true)
56
61
  .attr('role', Roles.GRAPHICS_SYMBOL)
57
62
  .transition(this.services.transitions.getTransition('bubble-update-enter', animate))
58
- .attr('cx', function (d, i) {
59
- return _this.services.cartesianScales.getDomainValue(d, i);
60
- })
61
- .attr('cy', function (d, i) {
62
- return _this.services.cartesianScales.getRangeValue(d, i);
63
- })
63
+ .attr('cx', getXValue)
64
+ .attr('cy', getYValue)
64
65
  // We need `|| 1` here in case the user doesn't provide radius values in data
65
66
  .attr('r', function (d) { return radiusScale(d[radiusMapsTo] || 1); })
66
67
  .attr('class', function (d) {
@@ -1 +1 @@
1
- {"version":3,"file":"bubble.js","sourceRoot":"","sources":["bubble.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Scatter } from './scatter';\nimport { DOMUtils } from '../../services';\nimport { Roles, ColorClassNameTypes } from '../../interfaces';\n\n// D3 Imports\nimport { Selection } from 'd3-selection';\nimport { extent } from 'd3-array';\nimport { scaleLinear } from 'd3-scale';\n\nexport class Bubble extends Scatter {\n\ttype = 'bubble';\n\n\tgetRadiusScale(selection: Selection<any, any, any, any>) {\n\t\tconst options = this.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst data = selection.data();\n\t\t// Filter out any null/undefined values\n\t\tconst allRadii = data\n\t\t\t.map((d) => d[radiusMapsTo])\n\t\t\t.filter((radius) => radius);\n\t\tconst chartSize = DOMUtils.getSVGElementSize(\n\t\t\tthis.services.domUtils.getMainSVG(),\n\t\t\t{ useAttr: true }\n\t\t);\n\n\t\t// We need the ternary operator here in case the user\n\t\t// doesn't provide radius values in data\n\t\tconst radiusDataIsValid = allRadii.length > 0;\n\t\tconst domain = radiusDataIsValid ? extent(allRadii) : [1, 1];\n\t\treturn scaleLinear()\n\t\t\t.domain(domain)\n\t\t\t.range(\n\t\t\t\tradiusDataIsValid\n\t\t\t\t\t? options.bubble.radiusRange(chartSize, data)\n\t\t\t\t\t: [4, 4]\n\t\t\t);\n\t}\n\n\tstyleCircles(selection: Selection<any, any, any, any>, animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst radiusScale = this.getRadiusScale(selection);\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tselection\n\t\t\t.raise()\n\t\t\t.classed('dot', true)\n\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t'bubble-update-enter',\n\t\t\t\t\tanimate\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr('cx', (d, i) =>\n\t\t\t\tthis.services.cartesianScales.getDomainValue(d, i)\n\t\t\t)\n\t\t\t.attr('cy', (d, i) =>\n\t\t\t\tthis.services.cartesianScales.getRangeValue(d, i)\n\t\t\t)\n\t\t\t// We need `|| 1` here in case the user doesn't provide radius values in data\n\t\t\t.attr('r', (d) => radiusScale(d[radiusMapsTo] || 1))\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [\n\t\t\t\t\t\tColorClassNameTypes.FILL,\n\t\t\t\t\t\tColorClassNameTypes.STROKE,\n\t\t\t\t\t],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: 'dot',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) => {\n\t\t\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn this.model.getFillColor(\n\t\t\t\t\td[groupMapsTo],\n\t\t\t\t\td[domainIdentifier],\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t})\n\t\t\t.style('stroke', (d) => {\n\t\t\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn this.model.getStrokeColor(\n\t\t\t\t\td[groupMapsTo],\n\t\t\t\t\td[domainIdentifier],\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr('fill-opacity', options.bubble.fillOpacity)\n\t\t\t.attr('opacity', 1);\n\t}\n}\n"]}
1
+ {"version":3,"file":"bubble.js","sourceRoot":"","sources":["bubble.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Scatter } from './scatter';\nimport { DOMUtils } from '../../services';\nimport { Roles, ColorClassNameTypes } from '../../interfaces';\nimport { Tools } from '../../tools';\n\n// D3 Imports\nimport { Selection } from 'd3-selection';\nimport { extent } from 'd3-array';\nimport { scaleLinear } from 'd3-scale';\n\nexport class Bubble extends Scatter {\n\ttype = 'bubble';\n\n\tgetRadiusScale(selection: Selection<any, any, any, any>) {\n\t\tconst options = this.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst data = selection.data();\n\t\t// Filter out any null/undefined values\n\t\tconst allRadii = data\n\t\t\t.map((d) => d[radiusMapsTo])\n\t\t\t.filter((radius) => radius);\n\t\tconst chartSize = DOMUtils.getSVGElementSize(\n\t\t\tthis.services.domUtils.getMainSVG(),\n\t\t\t{ useAttr: true }\n\t\t);\n\n\t\t// We need the ternary operator here in case the user\n\t\t// doesn't provide radius values in data\n\t\tconst radiusDataIsValid = allRadii.length > 0;\n\t\tconst domain = radiusDataIsValid ? extent(allRadii) : [1, 1];\n\t\treturn scaleLinear()\n\t\t\t.domain(domain)\n\t\t\t.range(\n\t\t\t\tradiusDataIsValid\n\t\t\t\t\t? options.bubble.radiusRange(chartSize, data)\n\t\t\t\t\t: [4, 4]\n\t\t\t);\n\t}\n\n\tstyleCircles(selection: Selection<any, any, any, any>, animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.getOptions();\n\t\tconst { radiusMapsTo } = options.bubble;\n\n\t\tconst radiusScale = this.getRadiusScale(selection);\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst { cartesianScales } = this.services;\n\t\tconst getDomainValue = (d, i) => cartesianScales.getDomainValue(d, i);\n\t\tconst getRangeValue = (d, i) => cartesianScales.getRangeValue(d, i);\n\t\tconst [\n\t\t\tgetXValue,\n\t\t\tgetYValue,\n\t\t] = Tools.flipDomainAndRangeBasedOnOrientation(\n\t\t\tgetDomainValue,\n\t\t\tgetRangeValue,\n\t\t\tcartesianScales.getOrientation()\n\t\t);\n\n\t\tselection\n\t\t\t.raise()\n\t\t\t.classed('dot', true)\n\t\t\t.attr('role', Roles.GRAPHICS_SYMBOL)\n\t\t\t.transition(\n\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t'bubble-update-enter',\n\t\t\t\t\tanimate\n\t\t\t\t)\n\t\t\t)\n\t\t\t.attr('cx', getXValue)\n\t\t\t.attr('cy', getYValue)\n\t\t\t// We need `|| 1` here in case the user doesn't provide radius values in data\n\t\t\t.attr('r', (d) => radiusScale(d[radiusMapsTo] || 1))\n\t\t\t.attr('class', (d) =>\n\t\t\t\tthis.model.getColorClassName({\n\t\t\t\t\tclassNameTypes: [\n\t\t\t\t\t\tColorClassNameTypes.FILL,\n\t\t\t\t\t\tColorClassNameTypes.STROKE,\n\t\t\t\t\t],\n\t\t\t\t\tdataGroupName: d[groupMapsTo],\n\t\t\t\t\toriginalClassName: 'dot',\n\t\t\t\t})\n\t\t\t)\n\t\t\t.style('fill', (d) => {\n\t\t\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn this.model.getFillColor(\n\t\t\t\t\td[groupMapsTo],\n\t\t\t\t\td[domainIdentifier],\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t})\n\t\t\t.style('stroke', (d) => {\n\t\t\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn this.model.getStrokeColor(\n\t\t\t\t\td[groupMapsTo],\n\t\t\t\t\td[domainIdentifier],\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr('fill-opacity', options.bubble.fillOpacity)\n\t\t\t.attr('opacity', 1);\n\t}\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { Component } from '../component';
2
+ export declare class Bullet extends Component {
3
+ type: string;
4
+ init(): void;
5
+ render(animate: boolean): void;
6
+ handleLegendOnHover: (event: CustomEvent<any>) => void;
7
+ handleLegendMouseOut: (event: CustomEvent<any>) => void;
8
+ getMatchingRangeIndexForDatapoint(datum: any): any;
9
+ addEventListeners(): void;
10
+ destroy(): void;
11
+ }
@@ -0,0 +1,360 @@
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 { Events, Roles, ColorClassNameTypes } from '../../interfaces';
17
+ import { Tools } from '../../tools';
18
+ import { DOMUtils } from '../../services';
19
+ // D3 Imports
20
+ import { select } from 'd3-selection';
21
+ var Bullet = /** @class */ (function (_super) {
22
+ __extends(Bullet, _super);
23
+ function Bullet() {
24
+ var _this = _super !== null && _super.apply(this, arguments) || this;
25
+ _this.type = 'bullet';
26
+ _this.handleLegendOnHover = function (event) {
27
+ var hoveredElement = event.detail.hoveredElement;
28
+ var groupMapsTo = _this.getOptions().data.groupMapsTo;
29
+ _this.parent
30
+ .selectAll('path.bar')
31
+ .transition(_this.services.transitions.getTransition('legend-hover-simple-bar'))
32
+ .attr('opacity', function (d) {
33
+ return d[groupMapsTo] !== hoveredElement.datum()['name'] ? 0.3 : 1;
34
+ });
35
+ };
36
+ _this.handleLegendMouseOut = function (event) {
37
+ _this.parent
38
+ .selectAll('path.bar')
39
+ .transition(_this.services.transitions.getTransition('legend-mouseout-simple-bar'))
40
+ .attr('opacity', 1);
41
+ };
42
+ return _this;
43
+ }
44
+ Bullet.prototype.init = function () {
45
+ var eventsFragment = this.services.events;
46
+ // Highlight correct circle on legend item hovers
47
+ eventsFragment.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);
48
+ // Un-highlight circles on legend item mouseouts
49
+ eventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);
50
+ };
51
+ Bullet.prototype.render = function (animate) {
52
+ var _this = this;
53
+ var options = this.getOptions();
54
+ var groupMapsTo = options.data.groupMapsTo;
55
+ // Grab container SVG
56
+ var svg = this.getContainerSVG({ withinChartClip: true });
57
+ var data = this.model.getDisplayData(this.configs.groups);
58
+ var rangeScale = this.services.cartesianScales.getRangeScale();
59
+ var rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();
60
+ var _a = rangeScale.range(), rangeScaleStart = _a[0], rangeScaleEnd = _a[1];
61
+ var _b = rangeScale.domain(), rangeScaleDomainMin = _b[0], rangeScaleDomainMax = _b[1];
62
+ var renderRangeBoxes = function () {
63
+ var rangeBoxData = [];
64
+ data.forEach(function (datum) {
65
+ if (datum.ranges) {
66
+ datum.ranges.forEach(function (range, i) {
67
+ if (range !== null &&
68
+ range !== undefined &&
69
+ range < rangeScaleDomainMax) {
70
+ rangeBoxData.push({
71
+ datum: datum,
72
+ value: range,
73
+ order: i + 1,
74
+ });
75
+ }
76
+ });
77
+ }
78
+ else {
79
+ rangeBoxData.push({
80
+ datum: datum,
81
+ order: 1,
82
+ });
83
+ }
84
+ });
85
+ // Update data on all lines
86
+ var rangeBoxes = DOMUtils.appendOrSelect(svg, 'g.range-boxes')
87
+ .selectAll('path.range-box')
88
+ .data(rangeBoxData, function (datum) { return datum[groupMapsTo] + "-" + datum.order; });
89
+ // Remove lines that are no longer needed
90
+ rangeBoxes.exit().attr('opacity', 0).remove();
91
+ // Add the paths that need to be introduced
92
+ var rangeBoxesEnter = rangeBoxes
93
+ .enter()
94
+ .append('path')
95
+ .attr('opacity', 0);
96
+ rangeBoxesEnter
97
+ .merge(rangeBoxes)
98
+ .attr('class', function (d) { return "range-box order-" + d.order; })
99
+ .transition(_this.services.transitions.getTransition('bullet-range-box-update-enter', animate))
100
+ .attr('d', function (d, i) {
101
+ /*
102
+ * Orientation support for horizontal/vertical bar charts
103
+ * Determine coordinates needed for a vertical set of paths
104
+ * to draw the bars needed, and pass those coordinates down to
105
+ * generateSVGPathString() to decide whether it needs to flip them
106
+ */
107
+ var lineHeight = 16;
108
+ var x0, x1, y0, y1;
109
+ if (d.order === 1) {
110
+ x0 =
111
+ _this.services.cartesianScales.getDomainValue(d.datum, i) -
112
+ lineHeight / 2;
113
+ x1 = x0 + lineHeight;
114
+ y0 = rangeScaleEnd - 2;
115
+ y1 = rangeScaleStart + 1;
116
+ }
117
+ else {
118
+ x0 =
119
+ _this.services.cartesianScales.getDomainValue(d.datum, i) -
120
+ lineHeight / 2;
121
+ x1 = x0 + lineHeight;
122
+ y0 = _this.services.cartesianScales.getRangeValue(d.value, i);
123
+ y1 = rangeScaleEnd;
124
+ }
125
+ return Tools.generateSVGPathString({ x0: x0, x1: x1, y0: y0, y1: y1 }, _this.services.cartesianScales.getOrientation());
126
+ })
127
+ .attr('opacity', 1);
128
+ };
129
+ var renderBars = function () {
130
+ // Update data on all bars
131
+ var bars = DOMUtils.appendOrSelect(svg, 'g.bars')
132
+ .selectAll('path.bar')
133
+ .data(data, function (datum) { return datum[groupMapsTo]; });
134
+ // Remove bars that are no longer needed
135
+ bars.exit().attr('opacity', 0).remove();
136
+ // Add the paths that need to be introduced
137
+ var barsEnter = bars.enter().append('path').attr('opacity', 0);
138
+ barsEnter
139
+ .merge(bars)
140
+ .classed('bar', true)
141
+ .transition(_this.services.transitions.getTransition('bullet-bar-update-enter', animate))
142
+ .attr('class', function (d) {
143
+ return _this.model.getColorClassName({
144
+ classNameTypes: [ColorClassNameTypes.FILL],
145
+ dataGroupName: d[groupMapsTo],
146
+ originalClassName: 'bar',
147
+ });
148
+ })
149
+ .style('fill', function (d) { return _this.model.getFillColor(d[groupMapsTo]); })
150
+ .attr('d', function (d, i) {
151
+ /*
152
+ * Orientation support for horizontal/vertical bar charts
153
+ * Determine coordinates needed for a vertical set of paths
154
+ * to draw the bars needed, and pass those coordinates down to
155
+ * generateSVGPathString() to decide whether it needs to flip them
156
+ */
157
+ var barWidth = 8;
158
+ var x0 = _this.services.cartesianScales.getDomainValue(d, i) -
159
+ barWidth / 2;
160
+ var x1 = x0 + barWidth;
161
+ var y0 = _this.services.cartesianScales.getRangeValue(0) + 1;
162
+ var y1 = _this.services.cartesianScales.getRangeValue(d, i);
163
+ return Tools.generateSVGPathString({ x0: x0, x1: x1, y0: y0, y1: y1 }, _this.services.cartesianScales.getOrientation());
164
+ })
165
+ .attr('opacity', 1)
166
+ // a11y
167
+ .attr('role', Roles.GRAPHICS_SYMBOL)
168
+ .attr('aria-roledescription', 'bar')
169
+ .attr('aria-label', function (d) { return d.value; });
170
+ };
171
+ var renderTargetLines = function () {
172
+ // Update data on all lines
173
+ var lines = DOMUtils.appendOrSelect(svg, 'g.markers')
174
+ .selectAll('path.marker')
175
+ .data(data.filter(function (d) { return Tools.getProperty(d, 'marker') !== null; }), function (datum) { return datum[groupMapsTo]; });
176
+ // Remove lines that are no longer needed
177
+ lines.exit().attr('opacity', 0).remove();
178
+ // Add the paths that need to be introduced
179
+ var linesEnter = lines.enter().append('path').attr('opacity', 0);
180
+ linesEnter
181
+ .merge(lines)
182
+ .classed('marker', true)
183
+ .transition(_this.services.transitions.getTransition('bullet-marker-update-enter', animate))
184
+ .attr('d', function (d, i) {
185
+ /*
186
+ * Orientation support for horizontal/vertical bar charts
187
+ * Determine coordinates needed for a vertical set of paths
188
+ * to draw the bars needed, and pass those coordinates down to
189
+ * generateSVGPathString() to decide whether it needs to flip them
190
+ */
191
+ var lineHeight = 24;
192
+ var x0 = _this.services.cartesianScales.getDomainValue(d, i) -
193
+ lineHeight / 2;
194
+ var x1 = x0 + lineHeight;
195
+ var y0 = _this.services.cartesianScales.getRangeValue(d.marker, i);
196
+ var y1 = y0;
197
+ return Tools.generateSVGPathString({ x0: x0, x1: x1, y0: y0, y1: y1 }, _this.services.cartesianScales.getOrientation());
198
+ })
199
+ .attr('opacity', 1);
200
+ };
201
+ var renderTargetQuartiles = function () {
202
+ var quartilesData = [];
203
+ data.filter(function (d) { return Tools.getProperty(d, 'marker') !== null; }).forEach(function (d) {
204
+ var value = d.marker;
205
+ var barValue = d[rangeIdentifier];
206
+ quartilesData = quartilesData.concat([
207
+ { datum: d, value: value * 0.25, barValue: barValue },
208
+ { datum: d, value: value * 0.5, barValue: barValue },
209
+ { datum: d, value: value * 0.75, barValue: barValue },
210
+ ]);
211
+ });
212
+ // Update data on all lines
213
+ var lines = DOMUtils.appendOrSelect(svg, 'g.quartiles')
214
+ .selectAll('path.quartile')
215
+ .data(quartilesData, function (datum) { return datum[groupMapsTo]; });
216
+ // Remove lines that are no longer needed
217
+ lines.exit().attr('opacity', 0).remove();
218
+ // Add the paths that need to be introduced
219
+ var linesEnter = lines.enter().append('path').attr('opacity', 0);
220
+ linesEnter
221
+ .merge(lines)
222
+ .attr('class', function (d) {
223
+ return "quartile " + (d.value <= d.barValue ? 'over-bar' : '');
224
+ })
225
+ .transition(_this.services.transitions.getTransition('bullet-quartile-update-enter', animate))
226
+ .attr('d', function (_a, i) {
227
+ var d = _a.datum, value = _a.value;
228
+ /*
229
+ * Orientation support for horizontal/vertical bar charts
230
+ * Determine coordinates needed for a vertical set of paths
231
+ * to draw the bars needed, and pass those coordinates down to
232
+ * generateSVGPathString() to decide whether it needs to flip them
233
+ */
234
+ var lineHeight = 4;
235
+ // if it lines up with a performance area border
236
+ // make the line taller
237
+ if (d.ranges && d.ranges.indexOf(value) !== -1) {
238
+ lineHeight = 8;
239
+ }
240
+ var x0 = _this.services.cartesianScales.getDomainValue(d, i) -
241
+ lineHeight / 2;
242
+ var x1 = x0 + lineHeight;
243
+ var y0 = _this.services.cartesianScales.getRangeValue(value, i);
244
+ var y1 = y0;
245
+ return Tools.generateSVGPathString({ x0: x0, x1: x1, y0: y0, y1: y1 }, _this.services.cartesianScales.getOrientation());
246
+ })
247
+ .attr('opacity', 1);
248
+ };
249
+ renderRangeBoxes();
250
+ renderBars();
251
+ renderTargetLines();
252
+ renderTargetQuartiles();
253
+ // Add event listeners to elements drawn
254
+ this.addEventListeners();
255
+ };
256
+ Bullet.prototype.getMatchingRangeIndexForDatapoint = function (datum) {
257
+ var matchingRangeIndex;
258
+ for (var i = datum.ranges.length - 1; i > 0; i--) {
259
+ var range = datum.ranges[i];
260
+ if (datum.value >= range) {
261
+ matchingRangeIndex = i;
262
+ return matchingRangeIndex;
263
+ }
264
+ }
265
+ return 0;
266
+ };
267
+ Bullet.prototype.addEventListeners = function () {
268
+ var self = this;
269
+ var options = this.getOptions();
270
+ var groupMapsTo = options.data.groupMapsTo;
271
+ var rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();
272
+ this.parent
273
+ .selectAll('path.bar')
274
+ .on('mouseover', function (datum) {
275
+ var hoveredElement = select(this);
276
+ hoveredElement.classed('hovered', true);
277
+ hoveredElement.transition(self.services.transitions.getTransition('graph_element_mouseover_fill_update'));
278
+ // Dispatch mouse event
279
+ self.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {
280
+ element: hoveredElement,
281
+ datum: datum,
282
+ });
283
+ var performanceAreaTitles = Tools.getProperty(options, 'bullet', 'performanceAreaTitles');
284
+ var matchingRangeIndex = self.getMatchingRangeIndexForDatapoint(datum);
285
+ self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
286
+ hoveredElement: hoveredElement,
287
+ items: [
288
+ {
289
+ label: options.tooltip.groupLabel || 'Group',
290
+ value: datum[groupMapsTo],
291
+ class: self.model.getColorClassName({
292
+ classNameTypes: [ColorClassNameTypes.TOOLTIP],
293
+ dataGroupName: datum[groupMapsTo],
294
+ }),
295
+ },
296
+ {
297
+ label: 'Value',
298
+ value: datum[rangeIdentifier],
299
+ },
300
+ {
301
+ label: 'Target',
302
+ value: datum.marker,
303
+ },
304
+ {
305
+ label: 'Percentage',
306
+ value: Math.floor((datum[rangeIdentifier] / datum.marker) * 100) + "%",
307
+ },
308
+ {
309
+ label: 'Performance',
310
+ value: performanceAreaTitles[matchingRangeIndex],
311
+ },
312
+ ],
313
+ });
314
+ })
315
+ .on('mousemove', function (datum) {
316
+ // Dispatch mouse event
317
+ self.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {
318
+ element: select(this),
319
+ datum: datum,
320
+ });
321
+ self.services.events.dispatchEvent(Events.Tooltip.MOVE);
322
+ })
323
+ .on('click', function (datum) {
324
+ // Dispatch mouse event
325
+ self.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {
326
+ element: select(this),
327
+ datum: datum,
328
+ });
329
+ })
330
+ .on('mouseout', function (datum) {
331
+ var hoveredElement = select(this);
332
+ hoveredElement.classed('hovered', false);
333
+ hoveredElement.transition(self.services.transitions.getTransition('graph_element_mouseout_fill_update'));
334
+ // Dispatch mouse event
335
+ self.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {
336
+ element: hoveredElement,
337
+ datum: datum,
338
+ });
339
+ // Hide tooltip
340
+ self.services.events.dispatchEvent(Events.Tooltip.HIDE, {
341
+ hoveredElement: hoveredElement,
342
+ });
343
+ });
344
+ };
345
+ Bullet.prototype.destroy = function () {
346
+ // Remove event listeners
347
+ this.parent
348
+ .selectAll('path.bar')
349
+ .on('mouseover', null)
350
+ .on('mousemove', null)
351
+ .on('mouseout', null);
352
+ // Remove legend listeners
353
+ var eventsFragment = this.services.events;
354
+ eventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);
355
+ eventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);
356
+ };
357
+ return Bullet;
358
+ }(Component));
359
+ export { Bullet };
360
+ //# sourceMappingURL=../../../src/components/graphs/bullet.js.map