@carbon/charts 0.33.0 → 0.34.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/axis-chart.d.ts +2 -2
  3. package/axis-chart.js +6 -4
  4. package/axis-chart.js.map +1 -1
  5. package/build/demo/data/bar.d.ts +12 -48
  6. package/build/demo/data/bubble.d.ts +1 -0
  7. package/build/src/axis-chart.d.ts +2 -2
  8. package/build/src/chart.d.ts +2 -2
  9. package/build/src/components/axes/ruler-stacked-bar.d.ts +4 -0
  10. package/build/src/components/axes/ruler.d.ts +6 -1
  11. package/build/src/components/essentials/tooltip-axis.d.ts +4 -0
  12. package/build/src/components/essentials/tooltip.d.ts +4 -10
  13. package/build/src/components/index.d.ts +2 -4
  14. package/build/src/configuration.d.ts +1 -3
  15. package/build/src/interfaces/a11y.d.ts +2 -1
  16. package/build/src/interfaces/charts.d.ts +1 -3
  17. package/build/src/interfaces/components.d.ts +7 -52
  18. package/build/src/interfaces/enums.d.ts +0 -10
  19. package/build/src/interfaces/events.d.ts +1 -0
  20. package/build/src/services/scales-cartesian.d.ts +6 -1
  21. package/bundle.js +1 -1
  22. package/chart.d.ts +2 -2
  23. package/chart.js +2 -1
  24. package/chart.js.map +1 -1
  25. package/charts/area-stacked.js +1 -3
  26. package/charts/area-stacked.js.map +1 -1
  27. package/charts/area.js +1 -2
  28. package/charts/area.js.map +1 -1
  29. package/charts/bar-grouped.js +1 -2
  30. package/charts/bar-grouped.js.map +1 -1
  31. package/charts/bar-simple.js +1 -2
  32. package/charts/bar-simple.js.map +1 -1
  33. package/charts/bar-stacked.js +2 -2
  34. package/charts/bar-stacked.js.map +1 -1
  35. package/charts/bubble.js +1 -2
  36. package/charts/bubble.js.map +1 -1
  37. package/charts/donut.js +1 -2
  38. package/charts/donut.js.map +1 -1
  39. package/charts/gauge.js +1 -2
  40. package/charts/gauge.js.map +1 -1
  41. package/charts/line.js +1 -2
  42. package/charts/line.js.map +1 -1
  43. package/charts/pie.js +1 -4
  44. package/charts/pie.js.map +1 -1
  45. package/charts/radar.js +0 -3
  46. package/charts/radar.js.map +1 -1
  47. package/charts/scatter.js +1 -2
  48. package/charts/scatter.js.map +1 -1
  49. package/components/axes/axis.js +23 -8
  50. package/components/axes/axis.js.map +1 -1
  51. package/components/axes/grid.js.map +1 -1
  52. package/components/axes/ruler-stacked-bar.d.ts +4 -0
  53. package/components/axes/ruler-stacked-bar.js +26 -0
  54. package/components/axes/ruler-stacked-bar.js.map +1 -0
  55. package/components/axes/ruler.d.ts +6 -1
  56. package/components/axes/ruler.js +25 -13
  57. package/components/axes/ruler.js.map +1 -1
  58. package/components/essentials/legend.js +15 -14
  59. package/components/essentials/legend.js.map +1 -1
  60. package/components/essentials/threshold.js +2 -2
  61. package/components/essentials/threshold.js.map +1 -1
  62. package/components/essentials/title.js +10 -9
  63. package/components/essentials/title.js.map +1 -1
  64. package/components/essentials/tooltip-axis.d.ts +4 -0
  65. package/components/essentials/tooltip-axis.js +120 -0
  66. package/components/essentials/tooltip-axis.js.map +1 -0
  67. package/components/essentials/tooltip.d.ts +4 -10
  68. package/components/essentials/tooltip.js +73 -100
  69. package/components/essentials/tooltip.js.map +1 -1
  70. package/components/graphs/area-stacked.js.map +1 -1
  71. package/components/graphs/bar-grouped.js +5 -3
  72. package/components/graphs/bar-grouped.js.map +1 -1
  73. package/components/graphs/bar-simple.js +4 -2
  74. package/components/graphs/bar-simple.js.map +1 -1
  75. package/components/graphs/bar-stacked.js +17 -14
  76. package/components/graphs/bar-stacked.js.map +1 -1
  77. package/components/graphs/pie.js +31 -12
  78. package/components/graphs/pie.js.map +1 -1
  79. package/components/graphs/radar.js +23 -18
  80. package/components/graphs/radar.js.map +1 -1
  81. package/components/graphs/scatter-stacked.js.map +1 -1
  82. package/components/graphs/scatter.js +18 -13
  83. package/components/graphs/scatter.js.map +1 -1
  84. package/components/graphs/skeleton.js +2 -5
  85. package/components/graphs/skeleton.js.map +1 -1
  86. package/components/index.d.ts +2 -4
  87. package/components/index.js +2 -4
  88. package/components/index.js.map +1 -1
  89. package/components/layout/layout.js +3 -1
  90. package/components/layout/layout.js.map +1 -1
  91. package/configuration.d.ts +1 -3
  92. package/configuration.js +6 -26
  93. package/configuration.js.map +1 -1
  94. package/demo/data/bar.d.ts +12 -48
  95. package/demo/data/bar.js +22 -58
  96. package/demo/data/bar.js.map +1 -1
  97. package/demo/data/bubble.d.ts +1 -0
  98. package/demo/data/bubble.js +2 -1
  99. package/demo/data/bubble.js.map +1 -1
  100. package/demo/data/bundle.js +1 -1
  101. package/demo/data/index.js +1 -1
  102. package/demo/data/index.js.map +1 -1
  103. package/demo/data/line.js +5 -5
  104. package/demo/data/line.js.map +1 -1
  105. package/demo/styles.css +48 -100
  106. package/demo/styles.css.map +1 -1
  107. package/demo/styles.min.css +1 -1
  108. package/demo/styles.min.css.map +1 -1
  109. package/demo/tsconfig.tsbuildinfo +16 -16
  110. package/interfaces/a11y.d.ts +2 -1
  111. package/interfaces/a11y.js +1 -0
  112. package/interfaces/a11y.js.map +1 -1
  113. package/interfaces/charts.d.ts +1 -3
  114. package/interfaces/charts.js.map +1 -1
  115. package/interfaces/components.d.ts +7 -52
  116. package/interfaces/components.js.map +1 -1
  117. package/interfaces/enums.d.ts +0 -10
  118. package/interfaces/enums.js +0 -11
  119. package/interfaces/enums.js.map +1 -1
  120. package/interfaces/events.d.ts +1 -0
  121. package/interfaces/events.js +1 -0
  122. package/interfaces/events.js.map +1 -1
  123. package/model.js +3 -5
  124. package/model.js.map +1 -1
  125. package/package.json +1 -1
  126. package/services/essentials/dom-utils.js +3 -1
  127. package/services/essentials/dom-utils.js.map +1 -1
  128. package/services/scales-cartesian.d.ts +6 -1
  129. package/services/scales-cartesian.js +20 -1
  130. package/services/scales-cartesian.js.map +1 -1
  131. package/styles/components/_ruler.scss +0 -6
  132. package/styles/components/_tooltip.scss +3 -9
  133. package/styles/graphs/_scatter-stacked.scss +10 -0
  134. package/styles/graphs/index.scss +1 -0
  135. package/styles-g10.css +13 -25
  136. package/styles-g10.css.map +1 -1
  137. package/styles-g10.min.css +1 -1
  138. package/styles-g10.min.css.map +1 -1
  139. package/styles-g100.css +13 -25
  140. package/styles-g100.css.map +1 -1
  141. package/styles-g100.min.css +1 -1
  142. package/styles-g100.min.css.map +1 -1
  143. package/styles-g90.css +13 -25
  144. package/styles-g90.css.map +1 -1
  145. package/styles-g90.min.css +1 -1
  146. package/styles-g90.min.css.map +1 -1
  147. package/styles.css +13 -25
  148. package/styles.css.map +1 -1
  149. package/styles.min.css +1 -1
  150. package/styles.min.css.map +1 -1
  151. package/tsconfig.tsbuildinfo +81 -138
  152. package/build/src/components/essentials/tooltip-bar.d.ts +0 -27
  153. package/build/src/components/essentials/tooltip-pie.d.ts +0 -5
  154. package/build/src/components/essentials/tooltip-radar.d.ts +0 -5
  155. package/build/src/components/essentials/tooltip-scatter.d.ts +0 -5
  156. package/components/essentials/tooltip-bar.d.ts +0 -27
  157. package/components/essentials/tooltip-bar.js +0 -193
  158. package/components/essentials/tooltip-bar.js.map +0 -1
  159. package/components/essentials/tooltip-pie.d.ts +0 -5
  160. package/components/essentials/tooltip-pie.js +0 -44
  161. package/components/essentials/tooltip-pie.js.map +0 -1
  162. package/components/essentials/tooltip-radar.d.ts +0 -5
  163. package/components/essentials/tooltip-radar.js +0 -45
  164. package/components/essentials/tooltip-radar.js.map +0 -1
  165. package/components/essentials/tooltip-scatter.d.ts +0 -5
  166. package/components/essentials/tooltip-scatter.js +0 -46
  167. package/components/essentials/tooltip-scatter.js.map +0 -1
@@ -13,7 +13,7 @@ var __extends = (this && this.__extends) || (function () {
13
13
  })();
14
14
  // Internal Imports
15
15
  import { Component } from "../component";
16
- import { AxisPositions, Events, ScaleTypes, Roles, TooltipTypes, TruncationTypes } from "../../interfaces";
16
+ import { AxisPositions, Events, ScaleTypes, Roles, TruncationTypes } from "../../interfaces";
17
17
  import { Tools } from "../../tools";
18
18
  import { DOMUtils } from "../../services";
19
19
  import * as Configuration from "../../configuration";
@@ -38,6 +38,7 @@ var Axis = /** @class */ (function (_super) {
38
38
  var options = this.model.getOptions();
39
39
  var axisOptions = Tools.getProperty(options, "axes", axisPosition);
40
40
  var axisScaleType = Tools.getProperty(axisOptions, "scaleType");
41
+ var isDataLoading = Tools.getProperty(options, "data", "loading");
41
42
  var numberOfTicksProvided = Tools.getProperty(axisOptions, "ticks", "number");
42
43
  // get user provided custom values for truncation
43
44
  var truncationType = Tools.getProperty(axisOptions, "truncation", "type");
@@ -91,10 +92,12 @@ var Axis = /** @class */ (function (_super) {
91
92
  }
92
93
  // Add axis into the parent
93
94
  var container = DOMUtils.appendOrSelect(svg, "g.axis." + axisPosition);
95
+ container.attr("aria-label", axisPosition + " axis");
94
96
  var axisRefExists = !container.select("g.ticks").empty();
95
97
  var axisRef = DOMUtils.appendOrSelect(container, "g.ticks");
96
98
  if (!axisRefExists) {
97
99
  axisRef.attr("role", Roles.GRAPHICS_OBJECT + " " + Roles.GROUP);
100
+ axisRef.attr("aria-label", axisPosition + " ticks");
98
101
  }
99
102
  // We draw the invisible axis because of the async nature of d3 transitions
100
103
  // To be able to tell the final width & height of the axis when initiaing the transition
@@ -102,7 +105,8 @@ var Axis = /** @class */ (function (_super) {
102
105
  var invisibleAxisRef = DOMUtils.appendOrSelect(container, "g.ticks.invisible")
103
106
  .style("opacity", "0")
104
107
  .style("pointer-events", "none")
105
- .attr("aria-hidden", true);
108
+ .attr("aria-hidden", true)
109
+ .attr("aria-label", "invisible " + axisPosition + " ticks");
106
110
  // Append to DOM a fake tick to get the right computed font height
107
111
  var fakeTick = DOMUtils.appendOrSelect(invisibleAxisRef, "g.tick");
108
112
  var fakeTickText = DOMUtils.appendOrSelect(fakeTick, "text").text("0");
@@ -200,8 +204,9 @@ var Axis = /** @class */ (function (_super) {
200
204
  }
201
205
  // Position the axis title
202
206
  // check that data exists, if they don't, doesn't show the title axis
207
+ var isDataEmpty = this.model.isDataEmpty();
203
208
  if (axisOptions.title) {
204
- var axisTitleRef = DOMUtils.appendOrSelect(container, "text.axis-title").html(this.model.isDataEmpty() ? "" : axisOptions.title);
209
+ var axisTitleRef = DOMUtils.appendOrSelect(container, "text.axis-title").html(isDataEmpty || isDataLoading ? "" : axisOptions.title);
205
210
  switch (axisPosition) {
206
211
  case AxisPositions.LEFT:
207
212
  axisTitleRef
@@ -311,9 +316,15 @@ var Axis = /** @class */ (function (_super) {
311
316
  }
312
317
  // we don't need to show axes on empty state and on skeleton state
313
318
  // because the Skeleton component draws them
314
- if (this.model.isDataEmpty()) {
319
+ if (isDataLoading) {
315
320
  container.attr("opacity", 0);
316
321
  }
322
+ axisRef
323
+ .selectAll("g.tick")
324
+ .attr("aria-label", function (d) { return d; });
325
+ invisibleAxisRef
326
+ .selectAll("g.tick")
327
+ .attr("aria-label", function (d) { return d; });
317
328
  // truncate the label if it's too long
318
329
  // only applies to discrete type
319
330
  if (truncationType !== TruncationTypes.NONE &&
@@ -375,6 +386,13 @@ var Axis = /** @class */ (function (_super) {
375
386
  element: select(this),
376
387
  datum: datum
377
388
  });
389
+ if (axisScaleType === ScaleTypes.LABELS &&
390
+ datum.length > truncationThreshold) {
391
+ self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
392
+ hoveredElement: select(this),
393
+ content: datum
394
+ });
395
+ }
378
396
  })
379
397
  .on("mousemove", function (datum) {
380
398
  // Dispatch mouse event
@@ -384,10 +402,7 @@ var Axis = /** @class */ (function (_super) {
384
402
  });
385
403
  if (axisScaleType === ScaleTypes.LABELS &&
386
404
  datum.length > truncationThreshold) {
387
- self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
388
- hoveredElement: select(this),
389
- type: TooltipTypes.AXISLABEL
390
- });
405
+ self.services.events.dispatchEvent(Events.Tooltip.MOVE);
391
406
  }
392
407
  })
393
408
  .on("click", function (datum) {
@@ -1 +1 @@
1
- {"version":3,"file":"axis.js","sourceRoot":"","sources":["axis.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport {\n\tAxisPositions,\n\tEvents,\n\tScaleTypes,\n\tRoles,\n\tTooltipTypes,\n\tTruncationTypes\n} from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\nimport { ChartModel } from \"../../model\";\nimport { DOMUtils } from \"../../services\";\nimport * as Configuration from \"../../configuration\";\nimport {\n\tcomputeTimeIntervalName,\n\tformatTick,\n\tisTickPrimary\n} from \"../../services/time-series\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { axisBottom, axisLeft, axisRight, axisTop } from \"d3-axis\";\n\nexport class Axis extends Component {\n\ttype = \"axes\";\n\n\tmargins: any;\n\n\tscale: any;\n\tscaleType: ScaleTypes;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\tthis.margins = this.configs.margins;\n\t}\n\n\trender(animate = true) {\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst numberOfTicksProvided = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"number\"\n\t\t);\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"type\"\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"numCharacter\"\n\t\t);\n\n\t\tconst isNumberOfTicksProvided = numberOfTicksProvided !== null;\n\t\tconst isVerticalAxis =\n\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\taxisPosition === AxisPositions.RIGHT;\n\t\tconst timeScaleOptions = Tools.getProperty(options, \"timeScale\");\n\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true\n\t\t});\n\n\t\tlet startPosition, endPosition;\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tstartPosition = this.configs.axes[AxisPositions.LEFT]\n\t\t\t\t? this.margins.left\n\t\t\t\t: 0;\n\t\t\tendPosition = this.configs.axes[AxisPositions.RIGHT]\n\t\t\t\t? width - this.margins.right\n\t\t\t\t: width;\n\t\t} else {\n\t\t\tstartPosition = height - this.margins.bottom;\n\t\t\tendPosition = this.margins.top;\n\t\t}\n\n\t\t// Grab the scale off of the Scales service\n\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\taxisPosition\n\t\t);\n\n\t\tif (this.scaleType === ScaleTypes.LABELS) {\n\t\t\tscale.rangeRound([startPosition, endPosition]);\n\t\t} else {\n\t\t\tscale.range([startPosition, endPosition]);\n\t\t}\n\n\t\t// Identify the corresponding d3 axis function\n\t\tlet axisFunction;\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisFunction = axisLeft;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisFunction = axisBottom;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisFunction = axisRight;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisFunction = axisTop;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Add axis into the parent\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst axisRefExists = !container.select(`g.ticks`).empty();\n\t\tlet axisRef = DOMUtils.appendOrSelect(container, `g.ticks`);\n\t\tif (!axisRefExists) {\n\t\t\taxisRef.attr(\"role\", `${Roles.GRAPHICS_OBJECT} ${Roles.GROUP}`);\n\t\t}\n\n\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t// The invisible axis is updated instantly and without a transition\n\t\tconst invisibleAxisRef = DOMUtils.appendOrSelect(\n\t\t\tcontainer,\n\t\t\t`g.ticks.invisible`\n\t\t)\n\t\t\t.style(\"opacity\", \"0\")\n\t\t\t.style(\"pointer-events\", \"none\")\n\t\t\t.attr(\"aria-hidden\", true);\n\n\t\t// Append to DOM a fake tick to get the right computed font height\n\t\tconst fakeTick = DOMUtils.appendOrSelect(invisibleAxisRef, `g.tick`);\n\t\tconst fakeTickText = DOMUtils.appendOrSelect(fakeTick, `text`).text(\n\t\t\t\"0\"\n\t\t);\n\t\tconst tickHeight = DOMUtils.getSVGElementSize(fakeTickText.node(), {\n\t\t\tuseBBox: true\n\t\t}).height;\n\t\tfakeTick.remove();\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\t\tconst scaleType =\n\t\t\tthis.scaleType || axisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\t// Initialize axis object\n\t\tconst axis = axisFunction(scale).tickSizeOuter(0);\n\n\t\tif (scale.ticks) {\n\t\t\tlet numberOfTicks;\n\n\t\t\tif (isNumberOfTicksProvided) {\n\t\t\t\tnumberOfTicks = numberOfTicksProvided;\n\t\t\t} else {\n\t\t\t\tnumberOfTicks = Configuration.axis.ticks.number;\n\t\t\t\tif (isVerticalAxis) {\n\t\t\t\t\t// Set how many ticks based on height\n\t\t\t\t\tnumberOfTicks = this.getNumberOfFittingTicks(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\tConfiguration.tickSpaceRatioVertical\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// scale continuous\n\t\t\t// remove 0 ticks for skeleton\n\t\t\tif (scale.ticks().length === 1 && scale.ticks()[0] === 0) {\n\t\t\t\tnumberOfTicks = 0;\n\t\t\t}\n\n\t\t\taxis.ticks(numberOfTicks);\n\n\t\t\tif (isTimeScaleType) {\n\t\t\t\tif (!scale.ticks(numberOfTicks).length) {\n\t\t\t\t\taxis.tickValues([]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addSpaceOnEdges = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\"timeScale\",\n\t\t\t\t\t\t\"addSpaceOnEdges\"\n\t\t\t\t\t);\n\n\t\t\t\t\tlet tickValues;\n\t\t\t\t\tif (addSpaceOnEdges) {\n\t\t\t\t\t\ttickValues = scale.nice(numberOfTicks);\n\t\t\t\t\t}\n\t\t\t\t\ttickValues = scale.ticks(numberOfTicks);\n\n\t\t\t\t\t// Remove labels on the edges\n\t\t\t\t\t// If there are more than 2 labels to show\n\t\t\t\t\tif (addSpaceOnEdges && tickValues.length > 2) {\n\t\t\t\t\t\ttickValues.splice(tickValues.length - 1, 1);\n\t\t\t\t\t\ttickValues.splice(0, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\taxis.tickValues(tickValues);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// create the right ticks formatter\n\t\tlet formatter;\n\t\tconst userProvidedFormatter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"formatter\"\n\t\t);\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tformatter = (t: number, i: number) =>\n\t\t\t\t\tformatTick(t, i, timeInterval, timeScaleOptions);\n\t\t\t} else {\n\t\t\t\tformatter = (t: number, i: number) => {\n\t\t\t\t\tconst defaultFormattedValue = formatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t\t\treturn userProvidedFormatter(t, i, defaultFormattedValue);\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tif (scaleType === ScaleTypes.LINEAR) {\n\t\t\t\t\tformatter = (t) => t.toLocaleString();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tformatter = userProvidedFormatter;\n\t\t\t}\n\t\t}\n\n\t\t// Set ticks formatter\n\t\taxis.tickFormat(formatter);\n\n\t\t// Position and transition the axis\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisRef.attr(\"transform\", `translate(${this.margins.left}, 0)`);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(0, ${height - this.margins.bottom})`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(${width - this.margins.right}, 0)`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisRef.attr(\"transform\", `translate(0, ${this.margins.top})`);\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Position the axis title\n\t\t// check that data exists, if they don't, doesn't show the title axis\n\t\tif (axisOptions.title) {\n\t\t\tconst axisTitleRef = DOMUtils.appendOrSelect(\n\t\t\t\tcontainer,\n\t\t\t\t`text.axis-title`\n\t\t\t).html(this.model.isDataEmpty() ? \"\" : axisOptions.title);\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(-90)\")\n\t\t\t\t\t\t.attr(\"y\", 0)\n\t\t\t\t\t\t.attr(\"x\", -(scale.range()[0] / 2))\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${height})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(90)\")\n\t\t\t\t\t\t.attr(\"y\", -width)\n\t\t\t\t\t\t.attr(\"x\", scale.range()[0] / 2)\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tconst { height: titleHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\taxisTitleRef,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseBBox: true\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${titleHeight / 2})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Apply new axis to the axis element\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tconst showDayName = timeScaleOptions.showDayName;\n\t\t\tconst axisRefSelection = axisRef;\n\n\t\t\tif (animate) {\n\t\t\t\taxisRef = axisRef.transition(\n\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\"axis-update\",\n\t\t\t\t\t\tanimate\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t\taxisRef = axisRef.call(axis);\n\n\t\t\t// Manipulate tick labels to make bold those that are in long format\n\t\t\tconst ticks = axisRefSelection\n\t\t\t\t.selectAll(\".tick\")\n\t\t\t\t.data(axis.tickValues(), scale)\n\t\t\t\t.order()\n\t\t\t\t.select(\"text\");\n\t\t\tticks.style(\"font-weight\", (tickValue: number, i: number) => {\n\t\t\t\treturn isTickPrimary(tickValue, i, timeInterval, showDayName)\n\t\t\t\t\t? \"bold\"\n\t\t\t\t\t: \"normal\";\n\t\t\t});\n\t\t} else {\n\t\t\tif (!animate || !axisRefExists) {\n\t\t\t\taxisRef = axisRef.call(axis);\n\t\t\t} else {\n\t\t\t\taxisRef = axisRef\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tthis.services.transitions.getTransition(\"axis-update\")\n\t\t\t\t\t)\n\t\t\t\t\t.call(axis);\n\t\t\t}\n\t\t}\n\n\t\tinvisibleAxisRef.call(axis);\n\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tlet rotateTicks = false;\n\n\t\t\t// If we're dealing with a discrete scale type\n\t\t\t// We're able to grab the spacing between the ticks\n\t\t\tif (scale.step) {\n\t\t\t\tconst textNodes = invisibleAxisRef\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.nodes();\n\n\t\t\t\t// If any ticks are any larger than the scale step size\n\t\t\t\trotateTicks = textNodes.some(\n\t\t\t\t\t(textNode) =>\n\t\t\t\t\t\tDOMUtils.getSVGElementSize(textNode, { useBBox: true })\n\t\t\t\t\t\t\t.width >= scale.step()\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// When dealing with a continuous scale\n\t\t\t\t// We need to calculate an estimated size of the ticks\n\t\t\t\tconst minTickSize =\n\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\taxisOptions,\n\t\t\t\t\t\t\"ticks\",\n\t\t\t\t\t\t\"rotateIfSmallerThan\"\n\t\t\t\t\t) || Configuration.axis.ticks.rotateIfSmallerThan;\n\t\t\t\tconst ticksNumber = isTimeScaleType\n\t\t\t\t\t? axis.tickValues().length\n\t\t\t\t\t: scale.ticks().length;\n\t\t\t\tconst estimatedTickSize = width / ticksNumber / 2;\n\n\t\t\t\trotateTicks = estimatedTickSize < minTickSize;\n\t\t\t}\n\n\t\t\tif (rotateTicks) {\n\t\t\t\tif (!isNumberOfTicksProvided) {\n\t\t\t\t\taxis.ticks(\n\t\t\t\t\t\tthis.getNumberOfFittingTicks(\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\t\tConfiguration.tickSpaceRatioHorizontal\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tinvisibleAxisRef.call(axis);\n\t\t\t\t\taxisRef.call(axis);\n\t\t\t\t}\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", `rotate(-45)`)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t\"text-anchor\",\n\t\t\t\t\t\taxisPosition === AxisPositions.TOP ? \"start\" : \"end\"\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", null)\n\t\t\t\t\t.style(\"text-anchor\", null);\n\t\t\t}\n\t\t}\n\n\t\t// we don't need to show axes on empty state and on skeleton state\n\t\t// because the Skeleton component draws them\n\t\tif (this.model.isDataEmpty()) {\n\t\t\tcontainer.attr(\"opacity\", 0);\n\t\t}\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (\n\t\t\ttruncationType !== TruncationTypes.NONE &&\n\t\t\taxisScaleType === ScaleTypes.LABELS\n\t\t) {\n\t\t\tconst dataGroups = this.model.getDataValuesGroupedByKeys();\n\t\t\tif (dataGroups.length > 0) {\n\t\t\t\tconst activeDataGroups = dataGroups.map(\n\t\t\t\t\t(d) => d.sharedStackKey\n\t\t\t\t);\n\t\t\t\tconst tick_html = svg\n\t\t\t\t\t.select(`g.axis.${axisPosition} g.ticks g.tick`)\n\t\t\t\t\t.html();\n\n\t\t\t\tcontainer.selectAll(\"g.ticks g.tick\").html(tick_html);\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(activeDataGroups)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tthis.getInvisibleAxisRef()\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(activeDataGroups)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks\")\n\t\t\t\t\t.html(this.getInvisibleAxisRef().html());\n\n\t\t\t\tcontainer.selectAll(\"g.tick text\").data(activeDataGroups);\n\t\t\t}\n\t\t}\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\taddEventListeners() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\n\t\tconst self = this;\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t\t\ttype: TooltipTypes.AXISLABEL\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tgetInvisibleAxisRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} g.ticks.invisible`\n\t\t);\n\t}\n\n\tgetTitleRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} text.axis-title`\n\t\t);\n\t}\n\n\tgetNumberOfFittingTicks(size, tickSize, spaceRatio) {\n\t\tconst numberOfTicksFit = Math.floor(size / (tickSize * spaceRatio));\n\t\treturn Tools.clamp(\n\t\t\tnumberOfTicksFit,\n\t\t\t2,\n\t\t\tConfiguration.axis.ticks.number\n\t\t);\n\t}\n\n\tdestroy() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\t// Remove event listeners\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\t}\n}\n"]}
1
+ {"version":3,"file":"axis.js","sourceRoot":"","sources":["axis.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport {\n\tAxisPositions,\n\tEvents,\n\tScaleTypes,\n\tRoles,\n\tTruncationTypes\n} from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\nimport { ChartModel } from \"../../model\";\nimport { DOMUtils } from \"../../services\";\nimport * as Configuration from \"../../configuration\";\nimport {\n\tcomputeTimeIntervalName,\n\tformatTick,\n\tisTickPrimary\n} from \"../../services/time-series\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { axisBottom, axisLeft, axisRight, axisTop } from \"d3-axis\";\n\nexport class Axis extends Component {\n\ttype = \"axes\";\n\n\tmargins: any;\n\n\tscale: any;\n\tscaleType: ScaleTypes;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\tthis.margins = this.configs.margins;\n\t}\n\n\trender(animate = true) {\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst isDataLoading = Tools.getProperty(options, \"data\", \"loading\");\n\t\tconst numberOfTicksProvided = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"number\"\n\t\t);\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"type\"\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"numCharacter\"\n\t\t);\n\n\t\tconst isNumberOfTicksProvided = numberOfTicksProvided !== null;\n\t\tconst isVerticalAxis =\n\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\taxisPosition === AxisPositions.RIGHT;\n\t\tconst timeScaleOptions = Tools.getProperty(options, \"timeScale\");\n\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true\n\t\t});\n\n\t\tlet startPosition, endPosition;\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tstartPosition = this.configs.axes[AxisPositions.LEFT]\n\t\t\t\t? this.margins.left\n\t\t\t\t: 0;\n\t\t\tendPosition = this.configs.axes[AxisPositions.RIGHT]\n\t\t\t\t? width - this.margins.right\n\t\t\t\t: width;\n\t\t} else {\n\t\t\tstartPosition = height - this.margins.bottom;\n\t\t\tendPosition = this.margins.top;\n\t\t}\n\n\t\t// Grab the scale off of the Scales service\n\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\taxisPosition\n\t\t);\n\n\t\tif (this.scaleType === ScaleTypes.LABELS) {\n\t\t\tscale.rangeRound([startPosition, endPosition]);\n\t\t} else {\n\t\t\tscale.range([startPosition, endPosition]);\n\t\t}\n\n\t\t// Identify the corresponding d3 axis function\n\t\tlet axisFunction;\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisFunction = axisLeft;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisFunction = axisBottom;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisFunction = axisRight;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisFunction = axisTop;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Add axis into the parent\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tcontainer.attr(\"aria-label\", `${axisPosition} axis`);\n\t\tconst axisRefExists = !container.select(`g.ticks`).empty();\n\t\tlet axisRef = DOMUtils.appendOrSelect(container, `g.ticks`);\n\t\tif (!axisRefExists) {\n\t\t\taxisRef.attr(\"role\", `${Roles.GRAPHICS_OBJECT} ${Roles.GROUP}`);\n\t\t\taxisRef.attr(\"aria-label\", `${axisPosition} ticks`);\n\t\t}\n\n\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t// The invisible axis is updated instantly and without a transition\n\t\tconst invisibleAxisRef = DOMUtils.appendOrSelect(\n\t\t\tcontainer,\n\t\t\t`g.ticks.invisible`\n\t\t)\n\t\t\t.style(\"opacity\", \"0\")\n\t\t\t.style(\"pointer-events\", \"none\")\n\t\t\t.attr(\"aria-hidden\", true)\n\t\t\t.attr(\"aria-label\", `invisible ${axisPosition} ticks`);\n\n\t\t// Append to DOM a fake tick to get the right computed font height\n\t\tconst fakeTick = DOMUtils.appendOrSelect(invisibleAxisRef, `g.tick`);\n\t\tconst fakeTickText = DOMUtils.appendOrSelect(fakeTick, `text`).text(\n\t\t\t\"0\"\n\t\t);\n\t\tconst tickHeight = DOMUtils.getSVGElementSize(fakeTickText.node(), {\n\t\t\tuseBBox: true\n\t\t}).height;\n\t\tfakeTick.remove();\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\t\tconst scaleType =\n\t\t\tthis.scaleType || axisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\t// Initialize axis object\n\t\tconst axis = axisFunction(scale).tickSizeOuter(0);\n\n\t\tif (scale.ticks) {\n\t\t\tlet numberOfTicks;\n\n\t\t\tif (isNumberOfTicksProvided) {\n\t\t\t\tnumberOfTicks = numberOfTicksProvided;\n\t\t\t} else {\n\t\t\t\tnumberOfTicks = Configuration.axis.ticks.number;\n\t\t\t\tif (isVerticalAxis) {\n\t\t\t\t\t// Set how many ticks based on height\n\t\t\t\t\tnumberOfTicks = this.getNumberOfFittingTicks(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\tConfiguration.tickSpaceRatioVertical\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// scale continuous\n\t\t\t// remove 0 ticks for skeleton\n\t\t\tif (scale.ticks().length === 1 && scale.ticks()[0] === 0) {\n\t\t\t\tnumberOfTicks = 0;\n\t\t\t}\n\n\t\t\taxis.ticks(numberOfTicks);\n\n\t\t\tif (isTimeScaleType) {\n\t\t\t\tif (!scale.ticks(numberOfTicks).length) {\n\t\t\t\t\taxis.tickValues([]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addSpaceOnEdges = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\"timeScale\",\n\t\t\t\t\t\t\"addSpaceOnEdges\"\n\t\t\t\t\t);\n\n\t\t\t\t\tlet tickValues;\n\t\t\t\t\tif (addSpaceOnEdges) {\n\t\t\t\t\t\ttickValues = scale.nice(numberOfTicks);\n\t\t\t\t\t}\n\t\t\t\t\ttickValues = scale.ticks(numberOfTicks);\n\n\t\t\t\t\t// Remove labels on the edges\n\t\t\t\t\t// If there are more than 2 labels to show\n\t\t\t\t\tif (addSpaceOnEdges && tickValues.length > 2) {\n\t\t\t\t\t\ttickValues.splice(tickValues.length - 1, 1);\n\t\t\t\t\t\ttickValues.splice(0, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\taxis.tickValues(tickValues);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// create the right ticks formatter\n\t\tlet formatter;\n\t\tconst userProvidedFormatter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"formatter\"\n\t\t);\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tformatter = (t: number, i: number) =>\n\t\t\t\t\tformatTick(t, i, timeInterval, timeScaleOptions);\n\t\t\t} else {\n\t\t\t\tformatter = (t: number, i: number) => {\n\t\t\t\t\tconst defaultFormattedValue = formatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t\t\treturn userProvidedFormatter(t, i, defaultFormattedValue);\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tif (scaleType === ScaleTypes.LINEAR) {\n\t\t\t\t\tformatter = (t) => t.toLocaleString();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tformatter = userProvidedFormatter;\n\t\t\t}\n\t\t}\n\n\t\t// Set ticks formatter\n\t\taxis.tickFormat(formatter);\n\n\t\t// Position and transition the axis\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisRef.attr(\"transform\", `translate(${this.margins.left}, 0)`);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(0, ${height - this.margins.bottom})`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(${width - this.margins.right}, 0)`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisRef.attr(\"transform\", `translate(0, ${this.margins.top})`);\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Position the axis title\n\t\t// check that data exists, if they don't, doesn't show the title axis\n\t\tconst isDataEmpty = this.model.isDataEmpty();\n\t\tif (axisOptions.title) {\n\t\t\tconst axisTitleRef = DOMUtils.appendOrSelect(\n\t\t\t\tcontainer,\n\t\t\t\t`text.axis-title`\n\t\t\t).html(isDataEmpty || isDataLoading ? \"\" : axisOptions.title);\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(-90)\")\n\t\t\t\t\t\t.attr(\"y\", 0)\n\t\t\t\t\t\t.attr(\"x\", -(scale.range()[0] / 2))\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${height})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(90)\")\n\t\t\t\t\t\t.attr(\"y\", -width)\n\t\t\t\t\t\t.attr(\"x\", scale.range()[0] / 2)\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tconst { height: titleHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\taxisTitleRef,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseBBox: true\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${titleHeight / 2})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Apply new axis to the axis element\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tconst showDayName = timeScaleOptions.showDayName;\n\t\t\tconst axisRefSelection = axisRef;\n\n\t\t\tif (animate) {\n\t\t\t\taxisRef = axisRef.transition(\n\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\"axis-update\",\n\t\t\t\t\t\tanimate\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t\taxisRef = axisRef.call(axis);\n\n\t\t\t// Manipulate tick labels to make bold those that are in long format\n\t\t\tconst ticks = axisRefSelection\n\t\t\t\t.selectAll(\".tick\")\n\t\t\t\t.data(axis.tickValues(), scale)\n\t\t\t\t.order()\n\t\t\t\t.select(\"text\");\n\t\t\tticks.style(\"font-weight\", (tickValue: number, i: number) => {\n\t\t\t\treturn isTickPrimary(tickValue, i, timeInterval, showDayName)\n\t\t\t\t\t? \"bold\"\n\t\t\t\t\t: \"normal\";\n\t\t\t});\n\t\t} else {\n\t\t\tif (!animate || !axisRefExists) {\n\t\t\t\taxisRef = axisRef.call(axis);\n\t\t\t} else {\n\t\t\t\taxisRef = axisRef\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tthis.services.transitions.getTransition(\"axis-update\")\n\t\t\t\t\t)\n\t\t\t\t\t.call(axis);\n\t\t\t}\n\t\t}\n\n\t\tinvisibleAxisRef.call(axis);\n\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tlet rotateTicks = false;\n\n\t\t\t// If we're dealing with a discrete scale type\n\t\t\t// We're able to grab the spacing between the ticks\n\t\t\tif (scale.step) {\n\t\t\t\tconst textNodes = invisibleAxisRef\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.nodes();\n\n\t\t\t\t// If any ticks are any larger than the scale step size\n\t\t\t\trotateTicks = textNodes.some(\n\t\t\t\t\t(textNode) =>\n\t\t\t\t\t\tDOMUtils.getSVGElementSize(textNode, { useBBox: true })\n\t\t\t\t\t\t\t.width >= scale.step()\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// When dealing with a continuous scale\n\t\t\t\t// We need to calculate an estimated size of the ticks\n\t\t\t\tconst minTickSize =\n\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\taxisOptions,\n\t\t\t\t\t\t\"ticks\",\n\t\t\t\t\t\t\"rotateIfSmallerThan\"\n\t\t\t\t\t) || Configuration.axis.ticks.rotateIfSmallerThan;\n\t\t\t\tconst ticksNumber = isTimeScaleType\n\t\t\t\t\t? axis.tickValues().length\n\t\t\t\t\t: scale.ticks().length;\n\t\t\t\tconst estimatedTickSize = width / ticksNumber / 2;\n\n\t\t\t\trotateTicks = estimatedTickSize < minTickSize;\n\t\t\t}\n\n\t\t\tif (rotateTicks) {\n\t\t\t\tif (!isNumberOfTicksProvided) {\n\t\t\t\t\taxis.ticks(\n\t\t\t\t\t\tthis.getNumberOfFittingTicks(\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\t\tConfiguration.tickSpaceRatioHorizontal\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tinvisibleAxisRef.call(axis);\n\t\t\t\t\taxisRef.call(axis);\n\t\t\t\t}\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", `rotate(-45)`)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t\"text-anchor\",\n\t\t\t\t\t\taxisPosition === AxisPositions.TOP ? \"start\" : \"end\"\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", null)\n\t\t\t\t\t.style(\"text-anchor\", null);\n\t\t\t}\n\t\t}\n\n\t\t// we don't need to show axes on empty state and on skeleton state\n\t\t// because the Skeleton component draws them\n\t\tif (isDataLoading) {\n\t\t\tcontainer.attr(\"opacity\", 0);\n\t\t}\n\n\t\taxisRef\n\t\t\t.selectAll(\"g.tick\")\n\t\t\t.attr(\"aria-label\", d => d);\n\n\t\tinvisibleAxisRef\n\t\t\t.selectAll(\"g.tick\")\n\t\t\t.attr(\"aria-label\", d => d);\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (\n\t\t\ttruncationType !== TruncationTypes.NONE &&\n\t\t\taxisScaleType === ScaleTypes.LABELS\n\t\t) {\n\t\t\tconst dataGroups = this.model.getDataValuesGroupedByKeys();\n\t\t\tif (dataGroups.length > 0) {\n\t\t\t\tconst activeDataGroups = dataGroups.map(\n\t\t\t\t\t(d) => d.sharedStackKey\n\t\t\t\t);\n\t\t\t\tconst tick_html = svg\n\t\t\t\t\t.select(`g.axis.${axisPosition} g.ticks g.tick`)\n\t\t\t\t\t.html();\n\n\t\t\t\tcontainer.selectAll(\"g.ticks g.tick\").html(tick_html);\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(activeDataGroups)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tthis.getInvisibleAxisRef()\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(activeDataGroups)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks\")\n\t\t\t\t\t.html(this.getInvisibleAxisRef().html());\n\n\t\t\t\tcontainer.selectAll(\"g.tick text\").data(activeDataGroups);\n\t\t\t}\n\t\t}\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\taddEventListeners() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst options = this.model.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\n\t\tconst self = this;\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t\t\tcontent: datum\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tgetInvisibleAxisRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} g.ticks.invisible`\n\t\t);\n\t}\n\n\tgetTitleRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} text.axis-title`\n\t\t);\n\t}\n\n\tgetNumberOfFittingTicks(size, tickSize, spaceRatio) {\n\t\tconst numberOfTicksFit = Math.floor(size / (tickSize * spaceRatio));\n\t\treturn Tools.clamp(\n\t\t\tnumberOfTicksFit,\n\t\t\t2,\n\t\t\tConfiguration.axis.ticks.number\n\t\t);\n\t}\n\n\tdestroy() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\t// Remove event listeners\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","sourceRoot":"","sources":["grid.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { axisBottom, axisLeft } from \"d3-axis\";\nimport { mouse, select } from \"d3-selection\";\nimport { TooltipTypes, Events } from \"../../interfaces\";\n\nexport class Grid extends Component {\n\ttype = \"grid\";\n\n\tbackdrop: any;\n\n\trender(animate = true) {\n\t\t// Draw the backdrop\n\t\tthis.drawBackdrop();\n\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.x.grid\");\n\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.y.grid\");\n\n\t\tthis.drawXGrid(animate);\n\t\tthis.drawYGrid(animate);\n\t}\n\n\tdrawXGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\n\t\tconst height = this.backdrop.attr(\"height\");\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst xGrid = axisBottom(mainXScale)\n\t\t\t.tickSizeInner(-height)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"x\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\txGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".x.grid\")\n\t\t\t.attr(\n\t\t\t\t\"transform\",\n\t\t\t\t`translate(${-this.backdrop.attr(\"x\")}, ${height})`\n\t\t\t);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(xGrid);\n\t\t} else {\n\t\t\tg.call(xGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\tdrawYGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\t\tconst width = this.backdrop.attr(\"width\");\n\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\t\tconst yGrid = axisLeft(mainYScale)\n\t\t\t.tickSizeInner(-width)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"y\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\tyGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".y.grid\")\n\t\t\t.attr(\"transform\", `translate(0, ${-this.backdrop.attr(\"y\")})`);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(yGrid);\n\t\t} else {\n\t\t\tg.call(yGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\t/**\n\t * Returns the threshold for the gridline tooltips based on the mouse location.\n\t * Calculated based on the mouse position between the two closest gridlines or edges of chart.\n\t */\n\tgetGridlineThreshold(mousePos) {\n\t\t// use the space between axis grid ticks to adjust the threshold for the tooltips\n\t\tconst svg = this.parent;\n\n\t\t// sort in ascending x translation value order\n\t\tconst gridlinesX = svg\n\t\t\t.selectAll(\".x.grid .tick\")\n\t\t\t.nodes()\n\t\t\t.sort((a, b) => {\n\t\t\t\treturn (\n\t\t\t\t\tNumber(Tools.getTranslationValues(a).tx) -\n\t\t\t\t\tNumber(Tools.getTranslationValues(b).tx)\n\t\t\t\t);\n\t\t\t});\n\n\t\t// find the 2 gridlines on either side of the mouse\n\t\tlet floor = -1;\n\t\tlet ceiling;\n\t\tif (!gridlinesX.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tgridlinesX.forEach((line: HTMLElement, i: any) => {\n\t\t\tif (mousePos[0] >= +Tools.getTranslationValues(line).tx) {\n\t\t\t\tfloor++;\n\t\t\t}\n\t\t});\n\t\tceiling = floor + 1 < gridlinesX.length ? floor + 1 : gridlinesX.length;\n\n\t\t// get the 'step' between chart gridlines\n\t\tconst line1 = gridlinesX[floor];\n\t\tconst line2 = gridlinesX[ceiling];\n\t\tlet lineSpacing;\n\n\t\t// if the mouse is on edge of charts (mouseX < first gridline || mouseX > last gridline)\n\t\t// we can use the chart edge to determind the threshold for the gridlines\n\t\tif (!line1) {\n\t\t\t// we are between the first gridline and the chart edge\n\t\t\tlineSpacing = +Tools.getTranslationValues(line2).tx;\n\t\t} else if (!line2) {\n\t\t\t// we need to use the chart right bounds in case there isnt a domain axis\n\t\t\tconst gridElement = svg.select(\"rect.chart-grid-backdrop\").node();\n\t\t\tconst width = DOMUtils.getSVGElementSize(gridElement).width;\n\n\t\t\tlineSpacing = width - +Tools.getTranslationValues(line1).tx;\n\t\t} else {\n\t\t\t// there are two gridlines to use\n\t\t\tlineSpacing =\n\t\t\t\t+Tools.getTranslationValues(line2).tx -\n\t\t\t\t+Tools.getTranslationValues(line1).tx;\n\t\t}\n\t\tconst { threshold } = this.model.getOptions().tooltip.gridline;\n\t\t// return the threshold\n\t\treturn lineSpacing * threshold;\n\t}\n\n\t/**\n\t * Returns the active gridlines based on the gridline threshold and mouse position.\n\t * @param position mouse positon\n\t */\n\tgetActiveGridline(position) {\n\t\tconst userSpecifiedThreshold = Tools.getProperty(\n\t\t\tthis.model.getOptions,\n\t\t\t\"tooltip\",\n\t\t\t\"gridline\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst threshold = userSpecifiedThreshold\n\t\t\t? userSpecifiedThreshold\n\t\t\t: this.getGridlineThreshold(position);\n\t\tconst svg = this.parent;\n\n\t\tconst xGridlines = svg.selectAll(\".x.grid .tick\").filter(function () {\n\t\t\tconst translations = Tools.getTranslationValues(this);\n\n\t\t\t// threshold for when to display a gridline tooltip\n\t\t\tconst bounds = {\n\t\t\t\tmin: Number(translations.tx) - threshold,\n\t\t\t\tmax: Number(translations.tx) + threshold\n\t\t\t};\n\n\t\t\treturn bounds.min <= position[0] && position[0] <= bounds.max;\n\t\t});\n\n\t\treturn xGridlines;\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\t\"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n\n\tcleanGrid(g) {\n\t\tconst options = this.model.getOptions();\n\t\tg.selectAll(\"line\").attr(\"stroke\", options.grid.strokeColor);\n\n\t\t// Remove extra elements\n\t\tg.selectAll(\"text\").remove();\n\t\tg.select(\".domain\").remove();\n\t}\n}\n"]}
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["grid.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { axisBottom, axisLeft } from \"d3-axis\";\n\nexport class Grid extends Component {\n\ttype = \"grid\";\n\n\tbackdrop: any;\n\n\trender(animate = true) {\n\t\t// Draw the backdrop\n\t\tthis.drawBackdrop();\n\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.x.grid\");\n\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.y.grid\");\n\n\t\tthis.drawXGrid(animate);\n\t\tthis.drawYGrid(animate);\n\t}\n\n\tdrawXGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\n\t\tconst height = this.backdrop.attr(\"height\");\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst xGrid = axisBottom(mainXScale)\n\t\t\t.tickSizeInner(-height)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"x\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\txGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".x.grid\")\n\t\t\t.attr(\n\t\t\t\t\"transform\",\n\t\t\t\t`translate(${-this.backdrop.attr(\"x\")}, ${height})`\n\t\t\t);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(xGrid);\n\t\t} else {\n\t\t\tg.call(xGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\tdrawYGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\t\tconst width = this.backdrop.attr(\"width\");\n\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\t\tconst yGrid = axisLeft(mainYScale)\n\t\t\t.tickSizeInner(-width)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"y\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\tyGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".y.grid\")\n\t\t\t.attr(\"transform\", `translate(0, ${-this.backdrop.attr(\"y\")})`);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(yGrid);\n\t\t} else {\n\t\t\tg.call(yGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\t/**\n\t * Returns the threshold for the gridline tooltips based on the mouse location.\n\t * Calculated based on the mouse position between the two closest gridlines or edges of chart.\n\t */\n\tgetGridlineThreshold(mousePos) {\n\t\t// use the space between axis grid ticks to adjust the threshold for the tooltips\n\t\tconst svg = this.parent;\n\n\t\t// sort in ascending x translation value order\n\t\tconst gridlinesX = svg\n\t\t\t.selectAll(\".x.grid .tick\")\n\t\t\t.nodes()\n\t\t\t.sort((a, b) => {\n\t\t\t\treturn (\n\t\t\t\t\tNumber(Tools.getTranslationValues(a).tx) -\n\t\t\t\t\tNumber(Tools.getTranslationValues(b).tx)\n\t\t\t\t);\n\t\t\t});\n\n\t\t// find the 2 gridlines on either side of the mouse\n\t\tlet floor = -1;\n\t\tlet ceiling;\n\t\tif (!gridlinesX.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tgridlinesX.forEach((line: HTMLElement, i: any) => {\n\t\t\tif (mousePos[0] >= +Tools.getTranslationValues(line).tx) {\n\t\t\t\tfloor++;\n\t\t\t}\n\t\t});\n\t\tceiling = floor + 1 < gridlinesX.length ? floor + 1 : gridlinesX.length;\n\n\t\t// get the 'step' between chart gridlines\n\t\tconst line1 = gridlinesX[floor];\n\t\tconst line2 = gridlinesX[ceiling];\n\t\tlet lineSpacing;\n\n\t\t// if the mouse is on edge of charts (mouseX < first gridline || mouseX > last gridline)\n\t\t// we can use the chart edge to determind the threshold for the gridlines\n\t\tif (!line1) {\n\t\t\t// we are between the first gridline and the chart edge\n\t\t\tlineSpacing = +Tools.getTranslationValues(line2).tx;\n\t\t} else if (!line2) {\n\t\t\t// we need to use the chart right bounds in case there isnt a domain axis\n\t\t\tconst gridElement = svg.select(\"rect.chart-grid-backdrop\").node();\n\t\t\tconst width = DOMUtils.getSVGElementSize(gridElement).width;\n\n\t\t\tlineSpacing = width - +Tools.getTranslationValues(line1).tx;\n\t\t} else {\n\t\t\t// there are two gridlines to use\n\t\t\tlineSpacing =\n\t\t\t\t+Tools.getTranslationValues(line2).tx -\n\t\t\t\t+Tools.getTranslationValues(line1).tx;\n\t\t}\n\t\tconst { threshold } = this.model.getOptions().tooltip.gridline;\n\t\t// return the threshold\n\t\treturn lineSpacing * threshold;\n\t}\n\n\t/**\n\t * Returns the active gridlines based on the gridline threshold and mouse position.\n\t * @param position mouse positon\n\t */\n\tgetActiveGridline(position) {\n\t\tconst userSpecifiedThreshold = Tools.getProperty(\n\t\t\tthis.model.getOptions,\n\t\t\t\"tooltip\",\n\t\t\t\"gridline\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst threshold = userSpecifiedThreshold\n\t\t\t? userSpecifiedThreshold\n\t\t\t: this.getGridlineThreshold(position);\n\t\tconst svg = this.parent;\n\n\t\tconst xGridlines = svg.selectAll(\".x.grid .tick\").filter(function () {\n\t\t\tconst translations = Tools.getTranslationValues(this);\n\n\t\t\t// threshold for when to display a gridline tooltip\n\t\t\tconst bounds = {\n\t\t\t\tmin: Number(translations.tx) - threshold,\n\t\t\t\tmax: Number(translations.tx) + threshold\n\t\t\t};\n\n\t\t\treturn bounds.min <= position[0] && position[0] <= bounds.max;\n\t\t});\n\n\t\treturn xGridlines;\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\t\"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n\n\tcleanGrid(g) {\n\t\tconst options = this.model.getOptions();\n\t\tg.selectAll(\"line\").attr(\"stroke\", options.grid.strokeColor);\n\n\t\t// Remove extra elements\n\t\tg.selectAll(\"text\").remove();\n\t\tg.select(\".domain\").remove();\n\t}\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import { Ruler } from "./ruler";
2
+ export declare class StackedBarRuler extends Ruler {
3
+ formatTooltipData(tooltipData: any): any;
4
+ }
@@ -0,0 +1,26 @@
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
+ import { Ruler } from "./ruler";
15
+ var StackedBarRuler = /** @class */ (function (_super) {
16
+ __extends(StackedBarRuler, _super);
17
+ function StackedBarRuler() {
18
+ return _super !== null && _super.apply(this, arguments) || this;
19
+ }
20
+ StackedBarRuler.prototype.formatTooltipData = function (tooltipData) {
21
+ return tooltipData.reverse();
22
+ };
23
+ return StackedBarRuler;
24
+ }(Ruler));
25
+ export { StackedBarRuler };
26
+ //# sourceMappingURL=../../../src/components/axes/ruler-stacked-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruler-stacked-bar.js","sourceRoot":"","sources":["ruler-stacked-bar.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;IAAqC,mCAAK;IAA1C;;IAIA,CAAC;IAHA,2CAAiB,GAAjB,UAAkB,WAAW;QAC5B,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IACF,sBAAC;AAAD,CAAC,AAJD,CAAqC,KAAK,GAIzC","sourcesContent":["import { Ruler } from \"./ruler\";\n\nexport class StackedBarRuler extends Ruler {\n\tformatTooltipData(tooltipData) {\n\t\treturn tooltipData.reverse();\n\t}\n}\n"]}
@@ -5,8 +5,13 @@ export declare class Ruler extends Component {
5
5
  type: string;
6
6
  backdrop: GenericSvgSelection;
7
7
  elementsToHighlight: GenericSvgSelection;
8
+ pointsWithinLine: {
9
+ domainValue: number;
10
+ originalData: any;
11
+ }[];
8
12
  render(): void;
9
- showRuler([x, y]: [number, number]): void;
13
+ formatTooltipData(tooltipData: any): any;
14
+ showRuler([x, y]: [number, number]): any;
10
15
  hideRuler(): void;
11
16
  /**
12
17
  * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.
@@ -14,7 +14,7 @@ var __extends = (this && this.__extends) || (function () {
14
14
  // Internal Imports
15
15
  import { Component } from "../component";
16
16
  import { DOMUtils } from "../../services";
17
- import { TooltipTypes, CartesianOrientations } from "../../interfaces";
17
+ import { CartesianOrientations, Events } from "../../interfaces";
18
18
  import { Tools } from "../../tools";
19
19
  // D3 Imports
20
20
  import { mouse } from "d3-selection";
@@ -34,31 +34,44 @@ var Ruler = /** @class */ (function (_super) {
34
34
  this.drawBackdrop();
35
35
  this.addBackdropEventListeners();
36
36
  };
37
+ Ruler.prototype.formatTooltipData = function (tooltipData) {
38
+ return tooltipData;
39
+ };
37
40
  Ruler.prototype.showRuler = function (_a) {
38
41
  var _this = this;
39
42
  var x = _a[0], y = _a[1];
40
43
  var svg = this.parent;
41
44
  var orientation = this.services.cartesianScales.getOrientation();
42
45
  var mouseCoordinate = orientation === CartesianOrientations.HORIZONTAL ? y : x;
43
- var ruler = DOMUtils.appendOrSelect(svg, "g.ruler");
46
+ var ruler = DOMUtils
47
+ .appendOrSelect(svg, "g.ruler")
48
+ .attr("aria-label", "ruler");
44
49
  var rulerLine = DOMUtils.appendOrSelect(ruler, "line.ruler-line");
45
50
  var dataPointElements = svg.selectAll("[role=graphics-symbol]");
46
51
  var displayData = this.model.getDisplayData();
47
52
  var rangeScale = this.services.cartesianScales.getRangeScale();
48
53
  var _b = rangeScale.range(), yScaleEnd = _b[0], yScaleStart = _b[1];
49
- var scaledData = displayData.map(function (d) { return ({
54
+ var pointsWithinLine = displayData
55
+ .map(function (d) { return ({
50
56
  domainValue: _this.services.cartesianScales.getDomainValue(d),
51
57
  originalData: d
52
- }); });
58
+ }); })
59
+ .filter(function (d) {
60
+ return pointIsWithinThreshold(d.domainValue, mouseCoordinate);
61
+ });
62
+ if (this.pointsWithinLine &&
63
+ pointsWithinLine.length === this.pointsWithinLine.length &&
64
+ pointsWithinLine.map(function (point) { return point.domainValue; }).join() ===
65
+ this.pointsWithinLine.map(function (point) { return point.domainValue; }).join()) {
66
+ this.pointsWithinLine = pointsWithinLine;
67
+ return this.services.events.dispatchEvent(Events.Tooltip.MOVE);
68
+ }
69
+ this.pointsWithinLine = pointsWithinLine;
53
70
  /**
54
71
  * Find matches, reduce is used instead of filter
55
72
  * to only get elements which belong to the same axis coordinate
56
73
  */
57
- var dataPointsMatchingRulerLine = scaledData
58
- .filter(function (d) {
59
- return pointIsWithinThreshold(d.domainValue, mouseCoordinate);
60
- })
61
- .reduce(function (accum, currentValue) {
74
+ var dataPointsMatchingRulerLine = this.pointsWithinLine.reduce(function (accum, currentValue) {
62
75
  if (accum.length === 0) {
63
76
  accum.push(currentValue);
64
77
  return accum;
@@ -108,10 +121,9 @@ var Ruler = /** @class */ (function (_super) {
108
121
  elementsToHighlight.dispatch("mouseover");
109
122
  // set current hovered elements
110
123
  this.elementsToHighlight = elementsToHighlight;
111
- this.services.events.dispatchEvent("show-tooltip", {
124
+ this.services.events.dispatchEvent(Events.Tooltip.SHOW, {
112
125
  hoveredElement: rulerLine,
113
- multidata: tooltipData,
114
- type: TooltipTypes.GRIDLINE
126
+ data: this.formatTooltipData(tooltipData)
115
127
  });
116
128
  ruler.attr("opacity", 1);
117
129
  // line snaps to matching point
@@ -140,7 +152,7 @@ var Ruler = /** @class */ (function (_super) {
140
152
  var ruler = DOMUtils.appendOrSelect(svg, "g.ruler");
141
153
  var dataPointElements = svg.selectAll("[role=graphics-symbol]");
142
154
  dataPointElements.dispatch("mouseout");
143
- this.services.events.dispatchEvent("hide-tooltip");
155
+ this.services.events.dispatchEvent(Events.Tooltip.HIDE);
144
156
  ruler.attr("opacity", 0);
145
157
  };
146
158
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,aAAa;AACb,OAAO,EAAE,KAAK,EAAa,MAAM,cAAc,CAAC;AAIhD,IAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,mDAAmD;AACnD,SAAS,sBAAsB,CAAC,EAAU,EAAE,CAAS;IACpD,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,IAAI,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AACjD,CAAC;AAED;IAA2B,yBAAS;IAApC;QAAA,qEA+LC;QA9LA,UAAI,GAAG,OAAO,CAAC;;IA8LhB,CAAC;IA1LA,sBAAM,GAAN;QACC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,yBAAyB,EAAE,CAAC;IAClC,CAAC;IAED,yBAAS,GAAT,UAAU,EAAwB;QAAlC,iBA8HC;YA9HU,SAAC,EAAE,SAAC;QACd,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAM,WAAW,GAA0B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;QAC1F,IAAM,eAAe,GACpB,WAAW,KAAK,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtD,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACpE,IAAM,iBAAiB,GAAwB,GAAG,CAAC,SAAS,CAC3D,wBAAwB,CACxB,CAAC;QACF,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAChD,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAC3D,IAAA,uBAA6C,EAA5C,iBAAS,EAAE,mBAAiC,CAAC;QACpD,IAAM,UAAU,GAGV,WAAW,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC;YAC7B,WAAW,EAAE,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,YAAY,EAAE,CAAC;SACf,CAAC,EAH2B,CAG3B,CAAC,CAAC;QAEJ;;;WAGG;QACH,IAAM,2BAA2B,GAG3B,UAAU;aACd,MAAM,CAAC,UAAC,CAAC;YACT,OAAA,sBAAsB,CAAC,CAAC,CAAC,WAAW,EAAE,eAAe,CAAC;QAAtD,CAAsD,CACtD;aACA,MAAM,CAAC,UAAC,KAAK,EAAE,YAAY;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzB,OAAO,KAAK,CAAC;aACb;YAED,sGAAsG;YACtG,IAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAE9C,IAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,CACtC,eAAe,GAAG,YAAY,CAAC,WAAW,CAC1C,CAAC;YACF,IAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CACpC,eAAe,GAAG,gBAAgB,CAClC,CAAC;YAEF,IAAI,sBAAsB,GAAG,oBAAoB,EAAE;gBAClD,kHAAkH;gBAClH,OAAO,KAAK,CAAC;aACb;iBAAM,IAAI,sBAAsB,GAAG,oBAAoB,EAAE;gBACzD,+FAA+F;gBAC/F,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC;aACvB;iBAAM;gBACN,2GAA2G;gBAC3G,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aACzB;YAED,OAAO,KAAK,CAAC;QACd,CAAC,EAAE,EAAE,CAAC,CAAC;QAER,wBAAwB;QACxB,IAAI,2BAA2B,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,IAAM,iBAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;YAC3E,IAAM,WAAW,GAAG,2BAA2B;iBAC7C,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,YAAY,EAAd,CAAc,CAAC;iBAC1B,MAAM,CAAC,UAAC,CAAC;gBACT,IAAM,KAAK,GAAG,CAAC,CAAC,iBAAe,CAAC,CAAC;gBACjC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;YAC9C,CAAC,CAAC,CAAC;YAEJ,uDAAuD;YACvD,IAAM,+BAA6B,GAAG,2BAA2B,CAAC,GAAG,CACpE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,EAAb,CAAa,CACpB,CAAC;YACF,IAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAC,CAAC;gBACtD,IAAM,WAAW,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAC/D,CAAC,CACD,CAAC;gBACF,OAAO,+BAA6B,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH;;;eAGG;YACH,IACC,IAAI,CAAC,mBAAmB;gBACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC;gBACnC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,EAC5D;gBACD,IAAI,CAAC,SAAS,EAAE,CAAC;aACjB;YAED,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAE1C,+BAA+B;YAC/B,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;YAE/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE;gBAClD,cAAc,EAAE,SAAS;gBACzB,SAAS,EAAE,WAAW;gBACtB,IAAI,EAAE,YAAY,CAAC,QAAQ;aAC3B,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAEzB,+BAA+B;YAC/B,IAAM,WAAW,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,WAAW,KAAK,YAAY,EAAE;gBACjC,SAAS;qBACP,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;qBACvB,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;qBACrB,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;qBACnC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;aACtC;iBAAM;gBACN,SAAS;qBACP,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;qBACvB,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;qBACrB,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;qBACnC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;aACtC;SACD;aAAM;YACN,IAAI,CAAC,SAAS,EAAE,CAAC;SACjB;IACF,CAAC;IAED,yBAAS,GAAT;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtD,IAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAElE,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,yCAAyB,GAAzB;QACC,IAAM,IAAI,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,QAAQ;aACX,EAAE,CAAC,qBAAqB,EAAE;YAC1B,IAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAEtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,SAAS,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4BAAY,GAAZ;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QACjE,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAE3D,IAAA,uBAA6C,EAA5C,mBAAW,EAAE,iBAA+B,CAAC;QAC9C,IAAA,uBAA6C,EAA5C,iBAAS,EAAE,mBAAiC,CAAC;QAEpD,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;QACxE,IAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAC3C,IAAI,CAAC,QAAQ,EACb,0BAA0B,CAC1B,CAAC;QAEF,IAAI,CAAC,QAAQ;aACX,KAAK,CAAC,YAAY,CAAC;aACnB,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;aACtC,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC;aACvC,KAAK,EAAE,CAAC;QAEV,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IACF,YAAC;AAAD,CAAC,AA/LD,CAA2B,SAAS,GA+LnC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { TooltipTypes, CartesianOrientations } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { mouse, Selection } from \"d3-selection\";\n\ntype GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = \"ruler\";\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\n\trender() {\n\t\tthis.drawBackdrop();\n\t\tthis.addBackdropEventListeners();\n\t}\n\n\tshowRuler([x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\t\tconst mouseCoordinate =\n\t\t\torientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, \"line.ruler-line\");\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t\"[role=graphics-symbol]\"\n\t\t);\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\t\tconst scaledData: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = displayData.map((d) => ({\n\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\toriginalData: d\n\t\t}));\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = scaledData\n\t\t\t.filter((d) =>\n\t\t\t\tpointIsWithinThreshold(d.domainValue, mouseCoordinate)\n\t\t\t)\n\t\t\t.reduce((accum, currentValue) => {\n\t\t\t\tif (accum.length === 0) {\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t\treturn accum;\n\t\t\t\t}\n\n\t\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\t\tconst distanceToCurrentValue = Math.abs(\n\t\t\t\t\tmouseCoordinate - currentValue.domainValue\n\t\t\t\t);\n\t\t\t\tconst distanceToAccumValue = Math.abs(\n\t\t\t\t\tmouseCoordinate - sampleAccumValue\n\t\t\t\t);\n\n\t\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\t\treturn accum;\n\t\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\t\taccum = [currentValue];\n\t\t\t\t} else {\n\t\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\t\taccum.push(currentValue);\n\t\t\t\t}\n\n\t\t\t\treturn accum;\n\t\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map((d) => d.originalData)\n\t\t\t\t.filter((d) => {\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(\n\t\t\t\t(d) => d.domainValue\n\t\t\t);\n\t\t\tconst elementsToHighlight = dataPointElements.filter((d) => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch(\"mouseover\");\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(\"show-tooltip\", {\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tmultidata: tooltipData,\n\t\t\t\ttype: TooltipTypes.GRIDLINE\n\t\t\t});\n\n\t\t\truler.attr(\"opacity\", 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"x1\", yScaleStart)\n\t\t\t\t\t.attr(\"x2\", yScaleEnd)\n\t\t\t\t\t.attr(\"y1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"y2\", sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"y1\", yScaleStart)\n\t\t\t\t\t.attr(\"y2\", yScaleEnd)\n\t\t\t\t\t.attr(\"x1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"x2\", sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst dataPointElements = svg.selectAll(\"[role=graphics-symbol]\");\n\n\t\tdataPointElements.dispatch(\"mouseout\");\n\t\tthis.services.events.dispatchEvent(\"hide-tooltip\");\n\t\truler.attr(\"opacity\", 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tconst self = this;\n\n\t\tthis.backdrop\n\t\t\t.on(\"mousemove mouseover\", function () {\n\t\t\t\tconst pos = mouse(self.parent.node());\n\n\t\t\t\tself.showRuler(pos);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function () {\n\t\t\t\tself.hideRuler();\n\t\t\t});\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\t\"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n}\n"]}
1
+ {"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { CartesianOrientations, Events } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { mouse, Selection } from \"d3-selection\";\n\ntype GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = \"ruler\";\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\tpointsWithinLine: {\n\t\tdomainValue: number;\n\t\toriginalData: any;\n\t}[];\n\n\trender() {\n\t\tthis.drawBackdrop();\n\t\tthis.addBackdropEventListeners();\n\t}\n\n\tformatTooltipData(tooltipData) {\n\t\treturn tooltipData;\n\t}\n\n\tshowRuler([x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\t\tconst mouseCoordinate =\n\t\t\torientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils\n\t\t\t.appendOrSelect(svg, \"g.ruler\")\n\t\t\t.attr(\"aria-label\", \"ruler\");\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, \"line.ruler-line\");\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t\"[role=graphics-symbol]\"\n\t\t);\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\n\t\tconst pointsWithinLine = displayData\n\t\t\t.map((d) => ({\n\t\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\t\toriginalData: d\n\t\t\t}))\n\t\t\t.filter((d) =>\n\t\t\t\tpointIsWithinThreshold(d.domainValue, mouseCoordinate)\n\t\t\t);\n\n\t\tif (\n\t\t\tthis.pointsWithinLine &&\n\t\t\tpointsWithinLine.length === this.pointsWithinLine.length &&\n\t\t\tpointsWithinLine.map((point) => point.domainValue).join() ===\n\t\t\t\tthis.pointsWithinLine.map((point) => point.domainValue).join()\n\t\t) {\n\t\t\tthis.pointsWithinLine = pointsWithinLine;\n\t\t\treturn this.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t}\n\n\t\tthis.pointsWithinLine = pointsWithinLine;\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = this.pointsWithinLine.reduce((accum, currentValue) => {\n\t\t\tif (accum.length === 0) {\n\t\t\t\taccum.push(currentValue);\n\t\t\t\treturn accum;\n\t\t\t}\n\n\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\tconst distanceToCurrentValue = Math.abs(\n\t\t\t\tmouseCoordinate - currentValue.domainValue\n\t\t\t);\n\t\t\tconst distanceToAccumValue = Math.abs(\n\t\t\t\tmouseCoordinate - sampleAccumValue\n\t\t\t);\n\n\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\treturn accum;\n\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\taccum = [currentValue];\n\t\t\t} else {\n\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\taccum.push(currentValue);\n\t\t\t}\n\n\t\t\treturn accum;\n\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map((d) => d.originalData)\n\t\t\t\t.filter((d) => {\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(\n\t\t\t\t(d) => d.domainValue\n\t\t\t);\n\t\t\tconst elementsToHighlight = dataPointElements.filter((d) => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch(\"mouseover\");\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tdata: this.formatTooltipData(tooltipData)\n\t\t\t});\n\n\t\t\truler.attr(\"opacity\", 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"x1\", yScaleStart)\n\t\t\t\t\t.attr(\"x2\", yScaleEnd)\n\t\t\t\t\t.attr(\"y1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"y2\", sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"y1\", yScaleStart)\n\t\t\t\t\t.attr(\"y2\", yScaleEnd)\n\t\t\t\t\t.attr(\"x1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"x2\", sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst dataPointElements = svg.selectAll(\"[role=graphics-symbol]\");\n\n\t\tdataPointElements.dispatch(\"mouseout\");\n\t\tthis.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\truler.attr(\"opacity\", 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tconst self = this;\n\n\t\tthis.backdrop\n\t\t\t.on(\"mousemove mouseover\", function () {\n\t\t\t\tconst pos = mouse(self.parent.node());\n\n\t\t\t\tself.showRuler(pos);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function () {\n\t\t\t\tself.hideRuler();\n\t\t\t});\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\t\"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart)\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n}\n"]}
@@ -11,9 +11,10 @@ var __extends = (this && this.__extends) || (function () {
11
11
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
12
  };
13
13
  })();
14
+ // Internal Imports
14
15
  import { Component } from "../component";
15
16
  import { Tools } from "../../tools";
16
- import { LegendOrientations, Roles, Events, TooltipTypes, TruncationTypes } from "../../interfaces";
17
+ import { LegendOrientations, Roles, Events, TruncationTypes } from "../../interfaces";
17
18
  import { DOMUtils } from "../../services";
18
19
  // D3 Imports
19
20
  import { select } from "d3-selection";
@@ -26,7 +27,7 @@ var Legend = /** @class */ (function (_super) {
26
27
  }
27
28
  Legend.prototype.render = function () {
28
29
  var _this = this;
29
- var svg = this.getContainerSVG().attr("role", Roles.GRAPHICS_DOCUMENT);
30
+ var svg = this.getContainerSVG().attr("role", Roles.GRAPHICS_DOCUMENT + " " + Roles.DOCUMENT);
30
31
  var options = this.model.getOptions();
31
32
  var legendOptions = Tools.getProperty(options, "legend");
32
33
  var legendItems = svg
@@ -163,9 +164,9 @@ var Legend = /** @class */ (function (_super) {
163
164
  // Test if legendItems are placed in the correct direction
164
165
  var testHorizontal = (!legendOrientation ||
165
166
  legendOrientation === LegendOrientations.HORIZONTAL) &&
166
- legendItem.select("rect.checkbox").attr("y") === '0';
167
+ legendItem.select("rect.checkbox").attr("y") === "0";
167
168
  var testVertical = legendOrientation === LegendOrientations.VERTICAL &&
168
- legendItem.select("rect.checkbox").attr("x") === '0';
169
+ legendItem.select("rect.checkbox").attr("x") === "0";
169
170
  var hasCorrectLegendDirection = testHorizontal || testVertical;
170
171
  // Render checkbox check icon
171
172
  if (hasDeactivatedItems &&
@@ -210,6 +211,16 @@ var Legend = /** @class */ (function (_super) {
210
211
  .attr("rx", 3)
211
212
  .attr("ry", 3)
212
213
  .lower();
214
+ var hoveredItemData = hoveredItem.datum();
215
+ if (hoveredItemData.name.length > truncationThreshold) {
216
+ self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
217
+ hoveredElement: hoveredItem,
218
+ content: hoveredItemData.name
219
+ });
220
+ }
221
+ })
222
+ .on("mousemove", function () {
223
+ self.services.events.dispatchEvent(Events.Tooltip.MOVE);
213
224
  })
214
225
  .on("click", function () {
215
226
  self.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {
@@ -218,16 +229,6 @@ var Legend = /** @class */ (function (_super) {
218
229
  var clickedItem = select(this);
219
230
  var clickedItemData = clickedItem.datum();
220
231
  self.model.toggleDataLabel(clickedItemData.name);
221
- })
222
- .on("mousemove", function () {
223
- var hoveredItem = select(this);
224
- var hoveredItemData = hoveredItem.datum();
225
- if (hoveredItemData.name.length > truncationThreshold) {
226
- self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
227
- hoveredElement: hoveredItem,
228
- type: TooltipTypes.LEGEND
229
- });
230
- }
231
232
  })
232
233
  .on("mouseout", function () {
233
234
  var hoveredItem = select(this);