@carbon/charts 0.30.21 → 0.30.25

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 (215) hide show
  1. package/CHANGELOG.md +337 -1035
  2. package/README.md +3 -0
  3. package/axis-chart.js +8 -14
  4. package/axis-chart.js.map +1 -1
  5. package/build/demo/{data/create-codesandbox.d.ts → create-codesandbox.d.ts} +16 -13
  6. package/build/demo/data/bar.d.ts +175 -1
  7. package/build/demo/data/bubble.d.ts +41 -0
  8. package/build/demo/data/donut.d.ts +23 -0
  9. package/build/demo/data/line.d.ts +70 -0
  10. package/build/demo/data/pie.d.ts +13 -0
  11. package/build/demo/data/scatter.d.ts +31 -0
  12. package/build/demo/data/step.d.ts +4 -0
  13. package/build/demo/data/time-series-axis.d.ts +55 -3
  14. package/build/src/components/axes/grid.d.ts +3 -3
  15. package/build/src/components/axes/two-dimensional-axes.d.ts +3 -0
  16. package/build/src/components/essentials/threshold.d.ts +17 -0
  17. package/build/src/components/graphs/bar.d.ts +1 -1
  18. package/build/src/components/graphs/scatter.d.ts +1 -0
  19. package/build/src/components/graphs/skeleton.d.ts +22 -0
  20. package/build/src/components/index.d.ts +2 -0
  21. package/build/src/interfaces/axis-scales.d.ts +22 -11
  22. package/build/src/interfaces/charts.d.ts +5 -0
  23. package/build/src/interfaces/components.d.ts +21 -0
  24. package/build/src/interfaces/enums.d.ts +9 -0
  25. package/build/src/interfaces/events.d.ts +7 -0
  26. package/build/src/model.d.ts +1 -0
  27. package/build/src/services/scales-cartesian.d.ts +9 -1
  28. package/build/stories/tutorials/event-listeners.d.ts +1 -0
  29. package/build/stories/tutorials/index.d.ts +2 -1
  30. package/bundle.js +1 -1
  31. package/chart.js +15 -24
  32. package/chart.js.map +1 -1
  33. package/charts/bar-grouped.js +6 -2
  34. package/charts/bar-grouped.js.map +1 -1
  35. package/charts/bar-simple.js +6 -2
  36. package/charts/bar-simple.js.map +1 -1
  37. package/charts/bar-stacked.js +6 -2
  38. package/charts/bar-stacked.js.map +1 -1
  39. package/charts/bubble.js +6 -2
  40. package/charts/bubble.js.map +1 -1
  41. package/charts/donut.js +6 -2
  42. package/charts/donut.js.map +1 -1
  43. package/charts/line.js +6 -2
  44. package/charts/line.js.map +1 -1
  45. package/charts/pie.js +6 -2
  46. package/charts/pie.js.map +1 -1
  47. package/charts/radar.js +1 -3
  48. package/charts/radar.js.map +1 -1
  49. package/charts/scatter.js +6 -2
  50. package/charts/scatter.js.map +1 -1
  51. package/components/axes/axis.js +93 -43
  52. package/components/axes/axis.js.map +1 -1
  53. package/components/axes/grid.d.ts +3 -3
  54. package/components/axes/grid.js +46 -23
  55. package/components/axes/grid.js.map +1 -1
  56. package/components/axes/ruler.js +7 -5
  57. package/components/axes/ruler.js.map +1 -1
  58. package/components/axes/two-dimensional-axes.d.ts +3 -0
  59. package/components/axes/two-dimensional-axes.js +35 -2
  60. package/components/axes/two-dimensional-axes.js.map +1 -1
  61. package/components/axes/zero-line.js +16 -1
  62. package/components/axes/zero-line.js.map +1 -1
  63. package/components/component.js +2 -4
  64. package/components/component.js.map +1 -1
  65. package/components/essentials/legend.js +46 -23
  66. package/components/essentials/legend.js.map +1 -1
  67. package/components/essentials/threshold.d.ts +17 -0
  68. package/components/essentials/threshold.js +171 -0
  69. package/components/essentials/threshold.js.map +1 -0
  70. package/components/essentials/title.js +6 -4
  71. package/components/essentials/title.js.map +1 -1
  72. package/components/essentials/tooltip-bar.js +39 -20
  73. package/components/essentials/tooltip-bar.js.map +1 -1
  74. package/components/essentials/tooltip-pie.js +4 -3
  75. package/components/essentials/tooltip-pie.js.map +1 -1
  76. package/components/essentials/tooltip-radar.js +6 -3
  77. package/components/essentials/tooltip-radar.js.map +1 -1
  78. package/components/essentials/tooltip-scatter.js +3 -1
  79. package/components/essentials/tooltip-scatter.js.map +1 -1
  80. package/components/essentials/tooltip.js +35 -15
  81. package/components/essentials/tooltip.js.map +1 -1
  82. package/components/graphs/bar-grouped.js +48 -20
  83. package/components/graphs/bar-grouped.js.map +1 -1
  84. package/components/graphs/bar-simple.js +39 -19
  85. package/components/graphs/bar-simple.js.map +1 -1
  86. package/components/graphs/bar-stacked.js +50 -28
  87. package/components/graphs/bar-stacked.js.map +1 -1
  88. package/components/graphs/bar.d.ts +1 -1
  89. package/components/graphs/bar.js +1 -1
  90. package/components/graphs/bar.js.map +1 -1
  91. package/components/graphs/bubble.js +22 -8
  92. package/components/graphs/bubble.js.map +1 -1
  93. package/components/graphs/donut.js +17 -3
  94. package/components/graphs/donut.js.map +1 -1
  95. package/components/graphs/line.js +14 -7
  96. package/components/graphs/line.js.map +1 -1
  97. package/components/graphs/pie.js +80 -44
  98. package/components/graphs/pie.js.map +1 -1
  99. package/components/graphs/radar.js +271 -140
  100. package/components/graphs/radar.js.map +1 -1
  101. package/components/graphs/scatter.d.ts +1 -0
  102. package/components/graphs/scatter.js +80 -19
  103. package/components/graphs/scatter.js.map +1 -1
  104. package/components/graphs/skeleton.d.ts +22 -0
  105. package/components/graphs/skeleton.js +256 -0
  106. package/components/graphs/skeleton.js.map +1 -0
  107. package/components/index.d.ts +2 -0
  108. package/components/index.js +2 -0
  109. package/components/index.js.map +1 -1
  110. package/components/layout/layout.js +38 -26
  111. package/components/layout/layout.js.map +1 -1
  112. package/components/layout/spacer.js +2 -1
  113. package/components/layout/spacer.js.map +1 -1
  114. package/configuration.js +17 -14
  115. package/configuration.js.map +1 -1
  116. package/demo/{data/create-codesandbox.d.ts → create-codesandbox.d.ts} +16 -13
  117. package/demo/{data/create-codesandbox.js → create-codesandbox.js} +24 -21
  118. package/demo/create-codesandbox.js.map +1 -0
  119. package/demo/data/bar.d.ts +175 -1
  120. package/demo/data/bar.js +189 -3
  121. package/demo/data/bar.js.map +1 -1
  122. package/demo/data/bubble.d.ts +41 -0
  123. package/demo/data/bubble.js +48 -3
  124. package/demo/data/bubble.js.map +1 -1
  125. package/demo/data/bundle.js +1 -1
  126. package/demo/data/donut.d.ts +23 -0
  127. package/demo/data/donut.js +25 -0
  128. package/demo/data/donut.js.map +1 -1
  129. package/demo/data/index.js +189 -7
  130. package/demo/data/index.js.map +1 -1
  131. package/demo/data/line.d.ts +70 -0
  132. package/demo/data/line.js +71 -0
  133. package/demo/data/line.js.map +1 -1
  134. package/demo/data/pie.d.ts +13 -0
  135. package/demo/data/pie.js +15 -0
  136. package/demo/data/pie.js.map +1 -1
  137. package/demo/data/radar.js.map +1 -1
  138. package/demo/data/scatter.d.ts +31 -0
  139. package/demo/data/scatter.js +33 -0
  140. package/demo/data/scatter.js.map +1 -1
  141. package/demo/data/step.d.ts +4 -0
  142. package/demo/data/step.js +15 -0
  143. package/demo/data/step.js.map +1 -1
  144. package/demo/data/time-series-axis.d.ts +55 -3
  145. package/demo/data/time-series-axis.js +62 -6
  146. package/demo/data/time-series-axis.js.map +1 -1
  147. package/demo/styles.css +342 -18
  148. package/demo/styles.css.map +1 -1
  149. package/demo/styles.min.css +1 -1
  150. package/demo/styles.min.css.map +1 -1
  151. package/demo/tsconfig.tsbuildinfo +232 -229
  152. package/index.js.map +1 -1
  153. package/interfaces/axis-scales.d.ts +22 -11
  154. package/interfaces/axis-scales.js.map +1 -1
  155. package/interfaces/charts.d.ts +5 -0
  156. package/interfaces/charts.js.map +1 -1
  157. package/interfaces/components.d.ts +21 -0
  158. package/interfaces/components.js.map +1 -1
  159. package/interfaces/enums.d.ts +9 -0
  160. package/interfaces/enums.js +10 -0
  161. package/interfaces/enums.js.map +1 -1
  162. package/interfaces/events.d.ts +7 -0
  163. package/interfaces/events.js +8 -0
  164. package/interfaces/events.js.map +1 -1
  165. package/model.d.ts +1 -0
  166. package/model.js +30 -16
  167. package/model.js.map +1 -1
  168. package/package.json +4 -2
  169. package/polyfills.js +7 -2
  170. package/polyfills.js.map +1 -1
  171. package/services/angle-utils.js +34 -9
  172. package/services/angle-utils.js.map +1 -1
  173. package/services/colors.js.map +1 -1
  174. package/services/curves.js +4 -2
  175. package/services/curves.js.map +1 -1
  176. package/services/essentials/dom-utils.js +4 -3
  177. package/services/essentials/dom-utils.js.map +1 -1
  178. package/services/essentials/transitions.js +3 -4
  179. package/services/essentials/transitions.js.map +1 -1
  180. package/services/scales-cartesian.d.ts +9 -1
  181. package/services/scales-cartesian.js +96 -23
  182. package/services/scales-cartesian.js.map +1 -1
  183. package/services/time-series.js +36 -19
  184. package/services/time-series.js.map +1 -1
  185. package/styles/components/_axis.scss +4 -0
  186. package/styles/components/_layout.scss +0 -1
  187. package/styles/components/_ruler.scss +5 -2
  188. package/styles/components/_skeleton.scss +56 -0
  189. package/styles/components/_threshold.scss +49 -0
  190. package/styles/components/_tooltip.scss +6 -5
  191. package/styles/components/index.scss +2 -0
  192. package/styles/graphs/_bubble.scss +1 -1
  193. package/styles/graphs/_radar.scss +4 -2
  194. package/styles/graphs/_scatter.scss +5 -1
  195. package/styles/mixins.scss +2 -2
  196. package/styles-g10.css +87 -4
  197. package/styles-g10.css.map +1 -1
  198. package/styles-g10.min.css +1 -1
  199. package/styles-g10.min.css.map +1 -1
  200. package/styles-g100.css +87 -4
  201. package/styles-g100.css.map +1 -1
  202. package/styles-g100.min.css +1 -1
  203. package/styles-g100.min.css.map +1 -1
  204. package/styles-g90.css +87 -4
  205. package/styles-g90.css.map +1 -1
  206. package/styles-g90.min.css +1 -1
  207. package/styles-g90.min.css.map +1 -1
  208. package/styles.css +87 -4
  209. package/styles.css.map +1 -1
  210. package/styles.min.css +1 -1
  211. package/styles.min.css.map +1 -1
  212. package/tools.js +25 -7
  213. package/tools.js.map +1 -1
  214. package/tsconfig.tsbuildinfo +169 -106
  215. package/demo/data/create-codesandbox.js.map +0 -1
@@ -115,13 +115,15 @@ var Ruler = /** @class */ (function (_super) {
115
115
  // line snaps to matching point
116
116
  var sampleMatch = dataPointsMatchingRulerLine[0];
117
117
  if (orientation === "horizontal") {
118
- rulerLine.attr("x1", yScaleStart)
118
+ rulerLine
119
+ .attr("x1", yScaleStart)
119
120
  .attr("x2", yScaleEnd)
120
121
  .attr("y1", sampleMatch.domainValue)
121
122
  .attr("y2", sampleMatch.domainValue);
122
123
  }
123
124
  else {
124
- rulerLine.attr("y1", yScaleStart)
125
+ rulerLine
126
+ .attr("y1", yScaleStart)
125
127
  .attr("y2", yScaleEnd)
126
128
  .attr("x1", sampleMatch.domainValue)
127
129
  .attr("x2", sampleMatch.domainValue);
@@ -162,14 +164,14 @@ var Ruler = /** @class */ (function (_super) {
162
164
  // Get height from the grid
163
165
  this.backdrop = DOMUtils.appendOrSelect(svg, "svg.chart-grid-backdrop");
164
166
  var backdropRect = DOMUtils.appendOrSelect(this.backdrop, "rect.chart-grid-backdrop");
165
- this.backdrop.merge(backdropRect)
167
+ this.backdrop
168
+ .merge(backdropRect)
166
169
  .attr("x", xScaleStart)
167
170
  .attr("y", yScaleStart)
168
171
  .attr("width", xScaleEnd - xScaleStart)
169
172
  .attr("height", yScaleEnd - yScaleStart)
170
173
  .lower();
171
- backdropRect.attr("width", "100%")
172
- .attr("height", "100%");
174
+ backdropRect.attr("width", "100%").attr("height", "100%");
173
175
  };
174
176
  return Ruler;
175
177
  }(Component));
@@ -1 +1 @@
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 { 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 = orientation === 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: {domainValue: number, originalData: any}[] = 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: {domainValue: number, originalData: any}[] =\n\t\t\tscaledData\n\t\t\t.filter(d => pointIsWithinThreshold(d.domainValue, mouseCoordinate))\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(mouseCoordinate - currentValue.domainValue);\n\t\t\t\tconst distanceToAccumValue = Math.abs(mouseCoordinate - sampleAccumValue);\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(d => d.domainValue);\n\t\t\tconst elementsToHighlight = dataPointElements.filter(d => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(d);\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.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.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(this.backdrop, \"rect.chart-grid-backdrop\");\n\n\t\tthis.backdrop.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%\")\n\t\t\t.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 { 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 => pointIsWithinThreshold(d.domainValue, mouseCoordinate))\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\td => 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,7 +1,9 @@
1
1
  import { Component } from "../component";
2
+ import { Threshold } from "../essentials/threshold";
2
3
  export declare class TwoDimensionalAxes extends Component {
3
4
  type: string;
4
5
  children: any;
6
+ thresholds: Threshold[];
5
7
  margins: {
6
8
  top: number;
7
9
  right: number;
@@ -9,4 +11,5 @@ export declare class TwoDimensionalAxes extends Component {
9
11
  left: number;
10
12
  };
11
13
  render(animate?: boolean): void;
14
+ addAxisThresholds(animate: any, axisPosition: any): void;
12
15
  }
@@ -11,18 +11,31 @@ var __extends = (this && this.__extends) || (function () {
11
11
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
12
  };
13
13
  })();
14
+ var __assign = (this && this.__assign) || function () {
15
+ __assign = Object.assign || function(t) {
16
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
17
+ s = arguments[i];
18
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
19
+ t[p] = s[p];
20
+ }
21
+ return t;
22
+ };
23
+ return __assign.apply(this, arguments);
24
+ };
14
25
  // Internal Imports
15
26
  import { Component } from "../component";
16
27
  import { AxisPositions } from "../../interfaces";
17
28
  import { Axis } from "./axis";
18
29
  import { Tools } from "../../tools";
19
30
  import { DOMUtils } from "../../services";
31
+ import { Threshold } from "../essentials/threshold";
20
32
  var TwoDimensionalAxes = /** @class */ (function (_super) {
21
33
  __extends(TwoDimensionalAxes, _super);
22
34
  function TwoDimensionalAxes() {
23
35
  var _this = _super !== null && _super.apply(this, arguments) || this;
24
36
  _this.type = "2D-axes";
25
37
  _this.children = {};
38
+ _this.thresholds = [];
26
39
  _this.margins = {
27
40
  top: 0,
28
41
  right: 0,
@@ -47,7 +60,8 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
47
60
  // Check the configs to know which axes need to be rendered
48
61
  axisPositions.forEach(function (axisPositionKey) {
49
62
  var axisPosition = AxisPositions[axisPositionKey];
50
- if (_this.configs.axes[axisPosition] && !_this.children[axisPosition]) {
63
+ if (_this.configs.axes[axisPosition] &&
64
+ !_this.children[axisPosition]) {
51
65
  var axisComponent = new Axis(_this.model, _this.services, {
52
66
  position: axisPosition,
53
67
  axes: _this.configs.axes,
@@ -80,7 +94,9 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
80
94
  offset = 0;
81
95
  }
82
96
  else {
83
- offset = DOMUtils.getSVGElementSize(child.getTitleRef(), { useBBox: true }).height;
97
+ offset = DOMUtils.getSVGElementSize(child.getTitleRef(), {
98
+ useBBox: true
99
+ }).height;
84
100
  }
85
101
  switch (axisPosition) {
86
102
  case AxisPositions.TOP:
@@ -96,6 +112,8 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
96
112
  margins.right = width + offset;
97
113
  break;
98
114
  }
115
+ // Add thresholds
116
+ _this.addAxisThresholds(animate, axisPosition);
99
117
  });
100
118
  // If the new margins are different than the existing ones
101
119
  var isNotEqual = Object.keys(margins).some(function (marginKey) {
@@ -110,6 +128,21 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
110
128
  this.render(true);
111
129
  }
112
130
  };
131
+ TwoDimensionalAxes.prototype.addAxisThresholds = function (animate, axisPosition) {
132
+ var _this = this;
133
+ var axesOptions = Tools.getProperty(this.model.getOptions(), "axes", axisPosition);
134
+ var thresholds = axesOptions.thresholds;
135
+ if (thresholds) {
136
+ thresholds.forEach(function (thresholdConfig, i) {
137
+ var thresholdComponent = new Threshold(_this.model, _this.services, __assign(__assign({}, thresholdConfig), { axisPosition: axisPosition, index: i }));
138
+ _this.thresholds.push(thresholdComponent);
139
+ });
140
+ this.thresholds.forEach(function (threshold) {
141
+ threshold.setParent(_this.parent);
142
+ threshold.render(animate);
143
+ });
144
+ }
145
+ };
113
146
  return TwoDimensionalAxes;
114
147
  }(Component));
115
148
  export { TwoDimensionalAxes };
@@ -1 +1 @@
1
- {"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { AxisPositions, ScaleTypes, AxesOptions } from \"../../interfaces\";\nimport { Axis } from \"./axis\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\n\nexport class TwoDimensionalAxes extends Component {\n\ttype = \"2D-axes\";\n\n\tchildren: any = {};\n\n\tmargins = {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0\n\t};\n\n\trender(animate = false) {\n\t\tconst axes = {};\n\t\tconst axisPositions = Object.keys(AxisPositions);\n\t\tconst axesOptions = Tools.getProperty(this.model.getOptions(), \"axes\");\n\n\t\taxisPositions.forEach(axisPosition => {\n\t\t\tconst axisOptions = axesOptions[AxisPositions[axisPosition]];\n\t\t\tif (axisOptions) {\n\t\t\t\taxes[AxisPositions[axisPosition]] = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.configs.axes = axes;\n\n\t\t// Check the configs to know which axes need to be rendered\n\t\taxisPositions.forEach(axisPositionKey => {\n\t\t\tconst axisPosition = AxisPositions[axisPositionKey];\n\t\t\tif (this.configs.axes[axisPosition] && !this.children[axisPosition]) {\n\t\t\t\tconst axisComponent = new Axis(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t{\n\t\t\t\t\t\tposition: axisPosition,\n\t\t\t\t\t\taxes: this.configs.axes,\n\t\t\t\t\t\tmargins: this.margins\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Set model, services & parent for the new axis component\n\t\t\t\taxisComponent.setModel(this.model);\n\t\t\t\taxisComponent.setServices(this.services);\n\t\t\t\taxisComponent.setParent(this.parent);\n\n\t\t\t\tthis.children[axisPosition] = axisComponent;\n\t\t\t}\n\t\t});\n\n\t\tObject.keys(this.children).forEach(childKey => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tchild.render(animate);\n\t\t});\n\n\t\tconst margins = {} as any;\n\n\t\tObject.keys(this.children).forEach(childKey => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tconst axisPosition = child.configs.position;\n\n\t\t\t// Grab the invisibly rendered axis' width & height, and set margins\n\t\t\t// Based off of that\n\t\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t\t// The invisible axis is updated instantly and without a transition\n\t\t\tconst invisibleAxisRef = child.getInvisibleAxisRef();\n\t\t\tconst { width, height } = DOMUtils.getSVGElementSize(invisibleAxisRef, { useBBox: true });\n\n\t\t\tlet offset;\n\t\t\tif (child.getTitleRef().empty()) {\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\toffset = DOMUtils.getSVGElementSize(child.getTitleRef(), { useBBox: true }).height;\n\t\t\t}\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tmargins.top = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tmargins.bottom = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tmargins.left = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tmargins.right = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\t// If the new margins are different than the existing ones\n\t\tconst isNotEqual = Object.keys(margins).some(marginKey => {\n\t\t\treturn this.margins[marginKey] !== margins[marginKey];\n\t\t});\n\n\t\tif (isNotEqual) {\n\t\t\tthis.margins = Object.assign(this.margins, margins);\n\n\t\t\tObject.keys(this.children).forEach(childKey => {\n\t\t\t\tconst child = this.children[childKey];\n\t\t\t\tchild.margins = this.margins;\n\t\t\t});\n\n\t\t\tthis.render(true);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { AxisPositions, ScaleTypes, AxesOptions } from \"../../interfaces\";\nimport { Axis } from \"./axis\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\nimport { Threshold } from \"../essentials/threshold\";\n\nexport class TwoDimensionalAxes extends Component {\n\ttype = \"2D-axes\";\n\n\tchildren: any = {};\n\n\tthresholds: Threshold[] = [];\n\n\tmargins = {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0\n\t};\n\n\trender(animate = false) {\n\t\tconst axes = {};\n\t\tconst axisPositions = Object.keys(AxisPositions);\n\t\tconst axesOptions = Tools.getProperty(this.model.getOptions(), \"axes\");\n\n\t\taxisPositions.forEach(axisPosition => {\n\t\t\tconst axisOptions = axesOptions[AxisPositions[axisPosition]];\n\t\t\tif (axisOptions) {\n\t\t\t\taxes[AxisPositions[axisPosition]] = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.configs.axes = axes;\n\n\t\t// Check the configs to know which axes need to be rendered\n\t\taxisPositions.forEach(axisPositionKey => {\n\t\t\tconst axisPosition = AxisPositions[axisPositionKey];\n\t\t\tif (\n\t\t\t\tthis.configs.axes[axisPosition] &&\n\t\t\t\t!this.children[axisPosition]\n\t\t\t) {\n\t\t\t\tconst axisComponent = new Axis(this.model, this.services, {\n\t\t\t\t\tposition: axisPosition,\n\t\t\t\t\taxes: this.configs.axes,\n\t\t\t\t\tmargins: this.margins\n\t\t\t\t});\n\n\t\t\t\t// Set model, services & parent for the new axis component\n\t\t\t\taxisComponent.setModel(this.model);\n\t\t\t\taxisComponent.setServices(this.services);\n\t\t\t\taxisComponent.setParent(this.parent);\n\n\t\t\t\tthis.children[axisPosition] = axisComponent;\n\t\t\t}\n\t\t});\n\n\t\tObject.keys(this.children).forEach(childKey => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tchild.render(animate);\n\t\t});\n\n\t\tconst margins = {} as any;\n\n\t\tObject.keys(this.children).forEach(childKey => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tconst axisPosition = child.configs.position;\n\n\t\t\t// Grab the invisibly rendered axis' width & height, and set margins\n\t\t\t// Based off of that\n\t\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t\t// The invisible axis is updated instantly and without a transition\n\t\t\tconst invisibleAxisRef = child.getInvisibleAxisRef();\n\t\t\tconst {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t} = DOMUtils.getSVGElementSize(invisibleAxisRef, { useBBox: true });\n\n\t\t\tlet offset;\n\t\t\tif (child.getTitleRef().empty()) {\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\toffset = DOMUtils.getSVGElementSize(child.getTitleRef(), {\n\t\t\t\t\tuseBBox: true\n\t\t\t\t}).height;\n\t\t\t}\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tmargins.top = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tmargins.bottom = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tmargins.left = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tmargins.right = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Add thresholds\n\t\t\tthis.addAxisThresholds(animate, axisPosition);\n\t\t});\n\n\t\t// If the new margins are different than the existing ones\n\t\tconst isNotEqual = Object.keys(margins).some(marginKey => {\n\t\t\treturn this.margins[marginKey] !== margins[marginKey];\n\t\t});\n\n\t\tif (isNotEqual) {\n\t\t\tthis.margins = Object.assign(this.margins, margins);\n\n\t\t\tObject.keys(this.children).forEach(childKey => {\n\t\t\t\tconst child = this.children[childKey];\n\t\t\t\tchild.margins = this.margins;\n\t\t\t});\n\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\taddAxisThresholds(animate, axisPosition) {\n\t\tconst axesOptions = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"axes\",\n\t\t\taxisPosition\n\t\t);\n\t\tconst { thresholds } = axesOptions;\n\n\t\tif (thresholds) {\n\t\t\tthresholds.forEach((thresholdConfig, i) => {\n\t\t\t\tconst thresholdComponent = new Threshold(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t{ ...thresholdConfig, axisPosition, index: i }\n\t\t\t\t);\n\t\t\t\tthis.thresholds.push(thresholdComponent);\n\t\t\t});\n\n\t\t\tthis.thresholds.forEach(threshold => {\n\t\t\t\tthreshold.setParent(this.parent);\n\t\t\t\tthreshold.render(animate);\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
@@ -23,11 +23,26 @@ var ZeroLine = /** @class */ (function (_super) {
23
23
  return _this;
24
24
  }
25
25
  ZeroLine.prototype.render = function (animate) {
26
+ var _a = this.services.cartesianScales.getRangeScale().domain(), minDomainValue = _a[0], maxDomainValue = _a[1];
27
+ var drawZeroLine = (minDomainValue > 0 && maxDomainValue < 0) ||
28
+ (minDomainValue < 0 && maxDomainValue > 0);
29
+ // show zero line only if is necessary
30
+ if (!drawZeroLine) {
31
+ return;
32
+ }
26
33
  // Grab container SVG
27
34
  var svg = this.getContainerSVG();
28
35
  // Get x & y position of the line
29
- var _a = this.services.cartesianScales.getDomainScale().range(), x0 = _a[0], x1 = _a[1];
36
+ var _b = this.services.cartesianScales.getDomainScale().range(), x0 = _b[0], x1 = _b[1];
30
37
  var yPosition = +this.services.cartesianScales.getRangeValue(0) + 0.5;
38
+ // if scale domain contains NaN, return the first value of the range
39
+ // this is necessary for the zero line y position that otherwise is NaN
40
+ // so on the top of the chart while we want it on the bottom
41
+ if (!yPosition) {
42
+ var axisPosition = this.services.cartesianScales.getRangeAxisPosition();
43
+ var scale = this.services.cartesianScales.getScaleByPosition(axisPosition);
44
+ yPosition = scale.range()[0];
45
+ }
31
46
  var lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation({
32
47
  x0: x0,
33
48
  x1: x1,
@@ -1 +1 @@
1
- {"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;IAA8B,4BAAS;IAAvC;QAAA,qEAyBC;QAxBA,UAAI,GAAG,WAAW,CAAC;;IAwBpB,CAAC;IAtBA,yBAAM,GAAN,UAAO,OAAgB;QACtB,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,iCAAiC;QAC3B,IAAA,2DAAiE,EAAhE,UAAE,EAAE,UAA4D,CAAC;QACxE,IAAM,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAExE,IAAM,eAAe,GAAG,KAAK,CAAC,oCAAoC,CAAC;YAClE,EAAE,IAAA;YACF,EAAE,IAAA;YACF,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;SACb,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC;QAEnD,IAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;aACnF,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACF,eAAC;AAAD,CAAC,AAzBD,CAA8B,SAAS,GAyBtC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\n\nexport class ZeroLine extends Component {\n\ttype = \"zero-line\";\n\n\trender(animate: boolean) {\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Get x & y position of the line\n\t\tconst [x0, x1] = this.services.cartesianScales.getDomainScale().range();\n\t\tconst yPosition = +this.services.cartesianScales.getRangeValue(0) + 0.5;\n\n\t\tconst lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation({\n\t\t\tx0,\n\t\t\tx1,\n\t\t\ty0: yPosition,\n\t\t\ty1: yPosition\n\t\t}, this.services.cartesianScales.getOrientation());\n\n\t\tconst line = DOMUtils.appendOrSelect(svg, \"line.domain\");\n\t\tline.transition(this.services.transitions.getTransition(\"zero-line-update\", animate))\n\t\t\t.attr(\"y1\", lineCoordinates.y0)\n\t\t\t.attr(\"y2\", lineCoordinates.y1)\n\t\t\t.attr(\"x1\", lineCoordinates.x0)\n\t\t\t.attr(\"x2\", lineCoordinates.x1);\n\t}\n}\n"]}
1
+ {"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;IAA8B,4BAAS;IAAvC;QAAA,qEAsDC;QArDA,UAAI,GAAG,WAAW,CAAC;;IAqDpB,CAAC;IAnDA,yBAAM,GAAN,UAAO,OAAgB;QAChB,IAAA,2DAGoD,EAFzD,sBAAc,EACd,sBACyD,CAAC;QAC3D,IAAM,YAAY,GACjB,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;YAC1C,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;QAE5C,sCAAsC;QACtC,IAAI,CAAC,YAAY,EAAE;YAClB,OAAO;SACP;QAED,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,iCAAiC;QAC3B,IAAA,2DAAiE,EAAhE,UAAE,EAAE,UAA4D,CAAC;QACxE,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEtE,oEAAoE;QACpE,uEAAuE;QACvE,4DAA4D;QAC5D,IAAI,CAAC,SAAS,EAAE;YACf,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;YAC1E,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAC7D,YAAY,CACZ,CAAC;YACF,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SAC7B;QAED,IAAM,eAAe,GAAG,KAAK,CAAC,oCAAoC,CACjE;YACC,EAAE,IAAA;YACF,EAAE,IAAA;YACF,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;SACb,EACD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QAEF,IAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CACd,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CACpE;aACC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACF,eAAC;AAAD,CAAC,AAtDD,CAA8B,SAAS,GAsDtC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\n\nexport class ZeroLine extends Component {\n\ttype = \"zero-line\";\n\n\trender(animate: boolean) {\n\t\tconst [\n\t\t\tminDomainValue,\n\t\t\tmaxDomainValue\n\t\t] = this.services.cartesianScales.getRangeScale().domain();\n\t\tconst drawZeroLine =\n\t\t\t(minDomainValue > 0 && maxDomainValue < 0) ||\n\t\t\t(minDomainValue < 0 && maxDomainValue > 0);\n\n\t\t// show zero line only if is necessary\n\t\tif (!drawZeroLine) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Get x & y position of the line\n\t\tconst [x0, x1] = this.services.cartesianScales.getDomainScale().range();\n\t\tlet yPosition = +this.services.cartesianScales.getRangeValue(0) + 0.5;\n\n\t\t// if scale domain contains NaN, return the first value of the range\n\t\t// this is necessary for the zero line y position that otherwise is NaN\n\t\t// so on the top of the chart while we want it on the bottom\n\t\tif (!yPosition) {\n\t\t\tconst axisPosition = this.services.cartesianScales.getRangeAxisPosition();\n\t\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\t\taxisPosition\n\t\t\t);\n\t\t\tyPosition = scale.range()[0];\n\t\t}\n\n\t\tconst lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation(\n\t\t\t{\n\t\t\t\tx0,\n\t\t\t\tx1,\n\t\t\t\ty0: yPosition,\n\t\t\t\ty1: yPosition\n\t\t\t},\n\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t);\n\n\t\tconst line = DOMUtils.appendOrSelect(svg, \"line.domain\");\n\t\tline.transition(\n\t\t\tthis.services.transitions.getTransition(\"zero-line-update\", animate)\n\t\t)\n\t\t\t.attr(\"y1\", lineCoordinates.y0)\n\t\t\t.attr(\"y2\", lineCoordinates.y1)\n\t\t\t.attr(\"x1\", lineCoordinates.x0)\n\t\t\t.attr(\"x2\", lineCoordinates.x1);\n\t}\n}\n"]}
@@ -17,14 +17,12 @@ var Component = /** @class */ (function () {
17
17
  this.setParent(select(this.services.domUtils.getMainSVG()));
18
18
  }
19
19
  }
20
- Component.prototype.init = function () {
21
- };
20
+ Component.prototype.init = function () { };
22
21
  Component.prototype.render = function (animate) {
23
22
  if (animate === void 0) { animate = true; }
24
23
  console.error("render() method is not implemented");
25
24
  };
26
- Component.prototype.destroy = function () {
27
- };
25
+ Component.prototype.destroy = function () { };
28
26
  // Used to pass down information to the components
29
27
  Component.prototype.setModel = function (newObj) {
30
28
  this.model = newObj;
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,yCAAyC;AACzC,OAAO,QAAQ,MAAM,0CAA0C,CAAC;AAGhE;IAUC,mBAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QALjD,YAAO,GAAQ,EAAE,CAAC;QAM3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,OAAO,EAAE;YACZ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACvB;QAED,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,SAAS,CACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAC3C,CAAC;SACF;IACF,CAAC;IAED,wBAAI,GAAJ;IACA,CAAC;IAED,0BAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACpB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACrD,CAAC;IAED,2BAAO,GAAP;IACA,CAAC;IAED,kDAAkD;IAClD,4BAAQ,GAAR,UAAS,MAAM;QACd,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;IACrB,CAAC;IAED,kDAAkD;IAClD,+BAAW,GAAX,UAAY,MAAM;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,6BAAS,GAAT,UAAU,MAAM;QACf,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;YACpD,OAAO;SACP;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAI,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAAE,IAAI,CAAC,CAAC;YAE9E,IAAI,SAAS,EAAE;gBACd,SAAS,CAAC,OAAO,CAAI,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,CAAC;aAC7E;SACD;IACF,CAAC;IAED,6BAAS,GAAT;QACC,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,mCAAe,GAAf;QACC,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClF,OAAO,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAK,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,CAAC,CAAC;SAClG;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACF,gBAAC;AAAD,CAAC,AA5ED,IA4EC","sourcesContent":["// Internal Imports\nimport { ChartModel } from \"../model\";\nimport { DOMUtils } from \"../services\";\nimport { Tools } from \"../tools\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\n// import the settings for the css prefix\nimport settings from \"carbon-components/es/globals/js/settings\";\n\n\nexport class Component {\n\tpublic type: string;\n\n\tprotected parent: any;\n\n\tprotected configs: any = {};\n\n\tprotected model: ChartModel;\n\tprotected services: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tthis.model = model;\n\t\tthis.services = services;\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\t// Set parent element to shell SVG if no parent exists for component\n\t\tif (!this.parent) {\n\t\t\tthis.setParent(\n\t\t\t\tselect(this.services.domUtils.getMainSVG())\n\t\t\t);\n\t\t}\n\t}\n\n\tinit() {\n\t}\n\n\trender(animate = true) {\n\t\tconsole.error(\"render() method is not implemented\");\n\t}\n\n\tdestroy() {\n\t}\n\n\t// Used to pass down information to the components\n\tsetModel(newObj) {\n\t\tthis.model = newObj;\n\t}\n\n\t// Used to pass down information to the components\n\tsetServices(newObj) {\n\t\tthis.services = newObj;\n\t}\n\n\tsetParent(parent) {\n\t\tconst oldParent = this.parent;\n\t\tthis.parent = parent;\n\n\t\tif (oldParent && oldParent.node() === parent.node()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(this.model.getOptions(), \"style\", \"prefix\");\n\t\t\tthis.parent.classed(`${settings.prefix}--${chartprefix}--${this.type}`, true);\n\n\t\t\tif (oldParent) {\n\t\t\t\toldParent.classed(`${settings.prefix}--${chartprefix}--${this.type}`, false);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetParent() {\n\t\treturn this.parent;\n\t}\n\n\tgetContainerSVG() {\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(this.model.getOptions(), \"style\", \"prefix\");\n\t\t\treturn DOMUtils.appendOrSelect(this.parent, `g.${settings.prefix}--${chartprefix}--${this.type}`);\n\t\t}\n\n\t\treturn this.parent;\n\t}\n}\n"]}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,yCAAyC;AACzC,OAAO,QAAQ,MAAM,0CAA0C,CAAC;AAEhE;IAUC,mBAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QALjD,YAAO,GAAQ,EAAE,CAAC;QAM3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,OAAO,EAAE;YACZ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACvB;QAED,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SAC5D;IACF,CAAC;IAED,wBAAI,GAAJ,cAAQ,CAAC;IAET,0BAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACpB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACrD,CAAC;IAED,2BAAO,GAAP,cAAW,CAAC;IAEZ,kDAAkD;IAClD,4BAAQ,GAAR,UAAS,MAAM;QACd,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;IACrB,CAAC;IAED,kDAAkD;IAClD,+BAAW,GAAX,UAAY,MAAM;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,6BAAS,GAAT,UAAU,MAAM;QACf,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;YACpD,OAAO;SACP;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACpC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,OAAO,EACP,QAAQ,CACR,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,CACf,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAClD,IAAI,CACJ,CAAC;YAEF,IAAI,SAAS,EAAE;gBACd,SAAS,CAAC,OAAO,CACb,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAClD,KAAK,CACL,CAAC;aACF;SACD;IACF,CAAC;IAED,6BAAS,GAAT;QACC,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,mCAAe,GAAf;QACC,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACpC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,OAAO,EACP,QAAQ,CACR,CAAC;YACF,OAAO,QAAQ,CAAC,cAAc,CAC7B,IAAI,CAAC,MAAM,EACX,OAAK,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,CACpD,CAAC;SACF;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IACF,gBAAC;AAAD,CAAC,AAzFD,IAyFC","sourcesContent":["// Internal Imports\nimport { ChartModel } from \"../model\";\nimport { DOMUtils } from \"../services\";\nimport { Tools } from \"../tools\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\n// import the settings for the css prefix\nimport settings from \"carbon-components/es/globals/js/settings\";\n\nexport class Component {\n\tpublic type: string;\n\n\tprotected parent: any;\n\n\tprotected configs: any = {};\n\n\tprotected model: ChartModel;\n\tprotected services: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tthis.model = model;\n\t\tthis.services = services;\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\t// Set parent element to shell SVG if no parent exists for component\n\t\tif (!this.parent) {\n\t\t\tthis.setParent(select(this.services.domUtils.getMainSVG()));\n\t\t}\n\t}\n\n\tinit() {}\n\n\trender(animate = true) {\n\t\tconsole.error(\"render() method is not implemented\");\n\t}\n\n\tdestroy() {}\n\n\t// Used to pass down information to the components\n\tsetModel(newObj) {\n\t\tthis.model = newObj;\n\t}\n\n\t// Used to pass down information to the components\n\tsetServices(newObj) {\n\t\tthis.services = newObj;\n\t}\n\n\tsetParent(parent) {\n\t\tconst oldParent = this.parent;\n\t\tthis.parent = parent;\n\n\t\tif (oldParent && oldParent.node() === parent.node()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\"style\",\n\t\t\t\t\"prefix\"\n\t\t\t);\n\t\t\tthis.parent.classed(\n\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (oldParent) {\n\t\t\t\toldParent.classed(\n\t\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetParent() {\n\t\treturn this.parent;\n\t}\n\n\tgetContainerSVG() {\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\"style\",\n\t\t\t\t\"prefix\"\n\t\t\t);\n\t\t\treturn DOMUtils.appendOrSelect(\n\t\t\t\tthis.parent,\n\t\t\t\t`g.${settings.prefix}--${chartprefix}--${this.type}`\n\t\t\t);\n\t\t}\n\n\t\treturn this.parent;\n\t}\n}\n"]}
@@ -28,15 +28,18 @@ var Legend = /** @class */ (function (_super) {
28
28
  var _this = this;
29
29
  var svg = this.getContainerSVG().attr("role", Roles.GRAPHICS_DOCUMENT);
30
30
  var options = this.model.getOptions();
31
- var legendItems = svg.selectAll("g.legend-item")
31
+ var legendItems = svg
32
+ .selectAll("g.legend-item")
32
33
  .data(this.model.getDataGroups(), function (dataGroup) { return dataGroup.name; });
33
34
  // this.getLegendItemArray()
34
- var addedLegendItems = legendItems.enter()
35
+ var addedLegendItems = legendItems
36
+ .enter()
35
37
  .append("g")
36
38
  .classed("legend-item", true);
37
39
  // Configs
38
40
  var checkboxRadius = options.legend.checkbox.radius;
39
- addedLegendItems.append("rect")
41
+ addedLegendItems
42
+ .append("rect")
40
43
  .classed("checkbox", true)
41
44
  .merge(legendItems.select("rect.checkbox"))
42
45
  .attr("width", checkboxRadius * 2)
@@ -44,17 +47,22 @@ var Legend = /** @class */ (function (_super) {
44
47
  .attr("rx", 1)
45
48
  .attr("ry", 1)
46
49
  .style("fill", function (d) {
47
- return d.status === options.legend.items.status.ACTIVE ? _this.model.getStrokeColor(d.name) : null;
48
- }).classed("active", function (d, i) {
50
+ return d.status === options.legend.items.status.ACTIVE
51
+ ? _this.model.getStrokeColor(d.name)
52
+ : null;
53
+ })
54
+ .classed("active", function (d, i) {
49
55
  return d.status === options.legend.items.status.ACTIVE;
50
56
  });
51
- addedLegendItems.append("text")
57
+ addedLegendItems
58
+ .append("text")
52
59
  .merge(legendItems.select("text"))
53
60
  .html(function (d) { return d.name; })
54
61
  .attr("alignment-baseline", "middle");
55
62
  this.breakItemsIntoLines(addedLegendItems);
56
63
  // Remove old elements as needed.
57
- legendItems.exit()
64
+ legendItems
65
+ .exit()
58
66
  .on("mouseover", null)
59
67
  .on("click", null)
60
68
  .on("mouseout", null)
@@ -74,7 +82,7 @@ var Legend = /** @class */ (function (_super) {
74
82
  var legendItemsHorizontalSpacing = options.legend.items.horizontalSpace;
75
83
  var legendItemsVerticalSpacing = options.legend.items.verticalSpace;
76
84
  var legendTextYOffset = options.legend.items.textYOffset;
77
- var spaceNeededForCheckbox = (checkboxRadius * 2) + options.legend.checkbox.spaceAfter;
85
+ var spaceNeededForCheckbox = checkboxRadius * 2 + options.legend.checkbox.spaceAfter;
78
86
  // Check if there are disabled legend items
79
87
  var DISABLED = options.legend.items.status.DISABLED;
80
88
  var dataGroups = this.model.getDataGroups();
@@ -85,12 +93,16 @@ var Legend = /** @class */ (function (_super) {
85
93
  var lineNumber = 0;
86
94
  var itemIndexInLine = 0;
87
95
  var lastYPosition;
88
- addedLegendItems.merge(svg.selectAll("g.legend-item"))
96
+ addedLegendItems
97
+ .merge(svg.selectAll("g.legend-item"))
89
98
  .each(function (d, i) {
90
99
  var legendItem = select(this);
91
100
  var previousLegendItem = select(svg.selectAll("g.legend-item").nodes()[i - 1]);
92
- if (itemIndexInLine === 0 || previousLegendItem.empty() || legendOrientation === LegendOrientations.VERTICAL) {
93
- if (legendOrientation === LegendOrientations.VERTICAL && i !== 0) {
101
+ if (itemIndexInLine === 0 ||
102
+ previousLegendItem.empty() ||
103
+ legendOrientation === LegendOrientations.VERTICAL) {
104
+ if (legendOrientation === LegendOrientations.VERTICAL &&
105
+ i !== 0) {
94
106
  lineNumber++;
95
107
  }
96
108
  }
@@ -98,8 +110,15 @@ var Legend = /** @class */ (function (_super) {
98
110
  var svgDimensions = DOMUtils.getSVGElementSize(self.parent, { useAttr: true });
99
111
  var legendItemTextDimensions = DOMUtils.getSVGElementSize(select(this).select("text"), { useBBox: true });
100
112
  var lastLegendItemTextDimensions = DOMUtils.getSVGElementSize(previousLegendItem.select("text"), { useBBox: true });
101
- startingPoint = startingPoint + lastLegendItemTextDimensions.width + spaceNeededForCheckbox + legendItemsHorizontalSpacing;
102
- if (startingPoint + spaceNeededForCheckbox + legendItemTextDimensions.width > svgDimensions.width) {
113
+ startingPoint =
114
+ startingPoint +
115
+ lastLegendItemTextDimensions.width +
116
+ spaceNeededForCheckbox +
117
+ legendItemsHorizontalSpacing;
118
+ if (startingPoint +
119
+ spaceNeededForCheckbox +
120
+ legendItemTextDimensions.width >
121
+ svgDimensions.width) {
103
122
  lineNumber++;
104
123
  startingPoint = 0;
105
124
  itemIndexInLine = 0;
@@ -108,28 +127,31 @@ var Legend = /** @class */ (function (_super) {
108
127
  var yOffset = 0;
109
128
  // Position checkbox
110
129
  // TODO - Replace with layout component margins
111
- legendItem.select("rect.checkbox")
130
+ legendItem
131
+ .select("rect.checkbox")
112
132
  .attr("x", startingPoint)
113
133
  .attr("y", yOffset + lineNumber * legendItemsVerticalSpacing);
114
134
  // Position text
115
135
  // TODO - Replace with layout component margins
116
- var yPosition = legendTextYOffset + (lineNumber * legendItemsVerticalSpacing);
117
- legendItem.select("text")
136
+ var yPosition = legendTextYOffset + lineNumber * legendItemsVerticalSpacing;
137
+ legendItem
138
+ .select("text")
118
139
  .attr("x", startingPoint + spaceNeededForCheckbox)
119
140
  .attr("y", yOffset + yPosition);
120
141
  lastYPosition = yPosition;
121
142
  // Render checkbox check icon
122
- if (hasDeactivatedItems && legendItem.select("g.check").empty()) {
123
- legendItem.append("g")
124
- .classed("check", true)
125
- .html("\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t");
126
- legendItem.select("g.check svg")
143
+ if (hasDeactivatedItems &&
144
+ legendItem.select("g.check").empty()) {
145
+ legendItem.append("g").classed("check", true).html("\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t");
146
+ legendItem
147
+ .select("g.check svg")
127
148
  .attr("width", checkboxRadius * 2 - 1)
128
149
  .attr("height", checkboxRadius * 2 - 1)
129
150
  .attr("x", parseFloat(legendItem.select("rect.checkbox").attr("x")) + 0.5)
130
151
  .attr("y", parseFloat(legendItem.select("rect.checkbox").attr("y")) + 0.5);
131
152
  }
132
- else if (!hasDeactivatedItems && !legendItem.select("g.check").empty()) {
153
+ else if (!hasDeactivatedItems &&
154
+ !legendItem.select("g.check").empty()) {
133
155
  legendItem.select("g.check").remove();
134
156
  }
135
157
  itemIndexInLine++;
@@ -147,7 +169,8 @@ var Legend = /** @class */ (function (_super) {
147
169
  // Configs
148
170
  var checkboxRadius = options.legend.checkbox.radius;
149
171
  var hoveredItem = select(this);
150
- hoveredItem.append("rect")
172
+ hoveredItem
173
+ .append("rect")
151
174
  .classed("hover-stroke", true)
152
175
  .attr("x", parseFloat(hoveredItem.select("rect.checkbox").attr("x")) - 2)
153
176
  .attr("y", parseFloat(hoveredItem.select("rect.checkbox").attr("y")) - 2)
@@ -1 +1 @@
1
- {"version":3,"file":"legend.js","sourceRoot":"","sources":["legend.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"../../configuration\";\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport {\n\tLegendOrientations,\n\tRoles,\n\tEvents\n} from \"../../interfaces\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\nexport class Legend extends Component {\n\ttype = \"legend\";\n\n\trender() {\n\t\tconst svg = this.getContainerSVG().attr(\"role\", Roles.GRAPHICS_DOCUMENT);\n\t\tconst options = this.model.getOptions();\n\t\tconst legendItems = svg.selectAll(\"g.legend-item\")\n\t\t\t.data(this.model.getDataGroups(), dataGroup => dataGroup.name);\n\n\t\t\t// this.getLegendItemArray()\n\n\t\tconst addedLegendItems = legendItems.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"legend-item\", true);\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\taddedLegendItems.append(\"rect\")\n\t\t\t.classed(\"checkbox\", true)\n\t\t\t.merge(legendItems.select(\"rect.checkbox\"))\n\t\t\t.attr(\"width\", checkboxRadius * 2)\n\t\t\t.attr(\"height\", checkboxRadius * 2)\n\t\t\t.attr(\"rx\", 1)\n\t\t\t.attr(\"ry\", 1)\n\t\t\t.style(\"fill\", d => {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE ? this.model.getStrokeColor(d.name) : null;\n\t\t\t}).classed(\"active\", function (d, i) {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\taddedLegendItems.append(\"text\")\n\t\t\t.merge(legendItems.select(\"text\"))\n\t\t\t.html(d => d.name)\n\t\t\t.attr(\"alignment-baseline\", \"middle\");\n\n\t\tthis.breakItemsIntoLines(addedLegendItems);\n\n\t\t// Remove old elements as needed.\n\t\tlegendItems.exit()\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"click\", null)\n\t\t\t.on(\"mouseout\", null)\n\t\t\t.remove();\n\n\t\tconst legendClickable = Tools.getProperty(this.model.getOptions(), \"legend\", \"clickable\");\n\t\tsvg.classed(\"clickable\", legendClickable);\n\n\t\tif (legendClickable && addedLegendItems.size() > 0) {\n\t\t\tthis.addEventListeners();\n\t\t}\n\t}\n\n\tbreakItemsIntoLines(addedLegendItems) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\t\tconst legendItemsHorizontalSpacing = options.legend.items.horizontalSpace;\n\t\tconst legendItemsVerticalSpacing = options.legend.items.verticalSpace;\n\t\tconst legendTextYOffset = options.legend.items.textYOffset;\n\t\tconst spaceNeededForCheckbox = (checkboxRadius * 2) + options.legend.checkbox.spaceAfter;\n\n\t\t// Check if there are disabled legend items\n\t\tconst { DISABLED } = options.legend.items.status;\n\t\tconst dataGroups = this.model.getDataGroups();\n\t\tconst hasDeactivatedItems = dataGroups.some(dataGroup => dataGroup.status === DISABLED);\n\n\t\tconst legendOrientation = Tools.getProperty(options, \"legend\", \"orientation\");\n\n\t\t// Keep track of line numbers and positions\n\t\tlet startingPoint = 0;\n\t\tlet lineNumber = 0;\n\t\tlet itemIndexInLine = 0;\n\t\tlet lastYPosition;\n\t\taddedLegendItems.merge(svg.selectAll(\"g.legend-item\"))\n\t\t\t.each(function (d, i) {\n\t\t\t\tconst legendItem = select(this);\n\t\t\t\tconst previousLegendItem = select(svg.selectAll(\"g.legend-item\").nodes()[i - 1]);\n\n\t\t\t\tif (itemIndexInLine === 0 || previousLegendItem.empty() || legendOrientation === LegendOrientations.VERTICAL) {\n\t\t\t\t\tif (legendOrientation === LegendOrientations.VERTICAL && i !== 0) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst svgDimensions = DOMUtils.getSVGElementSize(self.parent, { useAttr: true });\n\t\t\t\t\tconst legendItemTextDimensions = DOMUtils.getSVGElementSize(select(this).select(\"text\"), { useBBox: true });\n\t\t\t\t\tconst lastLegendItemTextDimensions = DOMUtils.getSVGElementSize(previousLegendItem.select(\"text\"), { useBBox: true });\n\t\t\t\t\tstartingPoint = startingPoint + lastLegendItemTextDimensions.width + spaceNeededForCheckbox + legendItemsHorizontalSpacing;\n\n\t\t\t\t\tif (startingPoint + spaceNeededForCheckbox + legendItemTextDimensions.width > svgDimensions.width) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t\tstartingPoint = 0;\n\t\t\t\t\t\titemIndexInLine = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst yOffset = 0;\n\n\t\t\t\t// Position checkbox\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tlegendItem.select(\"rect.checkbox\")\n\t\t\t\t\t.attr(\"x\", startingPoint)\n\t\t\t\t\t.attr(\"y\", yOffset + lineNumber * legendItemsVerticalSpacing);\n\n\t\t\t\t// Position text\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tconst yPosition = legendTextYOffset + (lineNumber * legendItemsVerticalSpacing);\n\t\t\t\tlegendItem.select(\"text\")\n\t\t\t\t\t.attr(\"x\", startingPoint + spaceNeededForCheckbox)\n\t\t\t\t\t.attr(\"y\", yOffset + yPosition);\n\n\t\t\t\tlastYPosition = yPosition;\n\n\t\t\t\t// Render checkbox check icon\n\t\t\t\tif (hasDeactivatedItems && legendItem.select(\"g.check\").empty()) {\n\t\t\t\t\tlegendItem.append(\"g\")\n\t\t\t\t\t\t.classed(\"check\", true)\n\t\t\t\t\t\t.html(`\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t`);\n\n\t\t\t\t\tlegendItem.select(\"g.check svg\")\n\t\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\"x\", parseFloat(legendItem.select(\"rect.checkbox\").attr(\"x\")) + 0.5)\n\t\t\t\t\t\t.attr(\"y\", parseFloat(legendItem.select(\"rect.checkbox\").attr(\"y\")) + 0.5);\n\n\t\t\t\t} else if (!hasDeactivatedItems && !legendItem.select(\"g.check\").empty()) {\n\t\t\t\t\tlegendItem.select(\"g.check\").remove();\n\t\t\t\t}\n\n\t\t\t\titemIndexInLine++;\n\t\t\t});\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\tsvg.selectAll(\"g.legend-item\")\n\t\t\t.on(\"mouseover\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_HOVER, {\n\t\t\t\t\thoveredElement: select(this)\n\t\t\t\t});\n\n\t\t\t\t// Configs\n\t\t\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.append(\"rect\")\n\t\t\t\t\t.classed(\"hover-stroke\", true)\n\t\t\t\t\t.attr(\"x\", parseFloat(hoveredItem.select(\"rect.checkbox\").attr(\"x\")) - 2)\n\t\t\t\t\t.attr(\"y\", parseFloat(hoveredItem.select(\"rect.checkbox\").attr(\"y\")) - 2)\n\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"rx\", 3)\n\t\t\t\t\t.attr(\"ry\", 3)\n\t\t\t\t\t.lower();\n\t\t\t})\n\t\t\t.on(\"click\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {\n\t\t\t\t\tclickedElement: select(this)\n\t\t\t\t});\n\n\t\t\t\tconst clickedItem = select(this);\n\t\t\t\tconst clickedItemData = clickedItem.datum() as any;\n\n\t\t\t\tself.model.toggleDataLabel(clickedItemData.name);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function () {\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select(\"rect.hover-stroke\").remove();\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_MOUSEOUT, {\n\t\t\t\t\thoveredElement: hoveredItem\n\t\t\t\t});\n\t\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"legend.js","sourceRoot":"","sources":["legend.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport * as Configuration from \"../../configuration\";\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport { LegendOrientations, Roles, Events } from \"../../interfaces\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\nexport class Legend extends Component {\n\ttype = \"legend\";\n\n\trender() {\n\t\tconst svg = this.getContainerSVG().attr(\n\t\t\t\"role\",\n\t\t\tRoles.GRAPHICS_DOCUMENT\n\t\t);\n\t\tconst options = this.model.getOptions();\n\t\tconst legendItems = svg\n\t\t\t.selectAll(\"g.legend-item\")\n\t\t\t.data(this.model.getDataGroups(), dataGroup => dataGroup.name);\n\n\t\t// this.getLegendItemArray()\n\n\t\tconst addedLegendItems = legendItems\n\t\t\t.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"legend-item\", true);\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\taddedLegendItems\n\t\t\t.append(\"rect\")\n\t\t\t.classed(\"checkbox\", true)\n\t\t\t.merge(legendItems.select(\"rect.checkbox\"))\n\t\t\t.attr(\"width\", checkboxRadius * 2)\n\t\t\t.attr(\"height\", checkboxRadius * 2)\n\t\t\t.attr(\"rx\", 1)\n\t\t\t.attr(\"ry\", 1)\n\t\t\t.style(\"fill\", d => {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE\n\t\t\t\t\t? this.model.getStrokeColor(d.name)\n\t\t\t\t\t: null;\n\t\t\t})\n\t\t\t.classed(\"active\", function(d, i) {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\taddedLegendItems\n\t\t\t.append(\"text\")\n\t\t\t.merge(legendItems.select(\"text\"))\n\t\t\t.html(d => d.name)\n\t\t\t.attr(\"alignment-baseline\", \"middle\");\n\n\t\tthis.breakItemsIntoLines(addedLegendItems);\n\n\t\t// Remove old elements as needed.\n\t\tlegendItems\n\t\t\t.exit()\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"click\", null)\n\t\t\t.on(\"mouseout\", null)\n\t\t\t.remove();\n\n\t\tconst legendClickable = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"legend\",\n\t\t\t\"clickable\"\n\t\t);\n\t\tsvg.classed(\"clickable\", legendClickable);\n\n\t\tif (legendClickable && addedLegendItems.size() > 0) {\n\t\t\tthis.addEventListeners();\n\t\t}\n\t}\n\n\tbreakItemsIntoLines(addedLegendItems) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\t\tconst legendItemsHorizontalSpacing =\n\t\t\toptions.legend.items.horizontalSpace;\n\t\tconst legendItemsVerticalSpacing = options.legend.items.verticalSpace;\n\t\tconst legendTextYOffset = options.legend.items.textYOffset;\n\t\tconst spaceNeededForCheckbox =\n\t\t\tcheckboxRadius * 2 + options.legend.checkbox.spaceAfter;\n\n\t\t// Check if there are disabled legend items\n\t\tconst { DISABLED } = options.legend.items.status;\n\t\tconst dataGroups = this.model.getDataGroups();\n\t\tconst hasDeactivatedItems = dataGroups.some(\n\t\t\tdataGroup => dataGroup.status === DISABLED\n\t\t);\n\n\t\tconst legendOrientation = Tools.getProperty(\n\t\t\toptions,\n\t\t\t\"legend\",\n\t\t\t\"orientation\"\n\t\t);\n\n\t\t// Keep track of line numbers and positions\n\t\tlet startingPoint = 0;\n\t\tlet lineNumber = 0;\n\t\tlet itemIndexInLine = 0;\n\t\tlet lastYPosition;\n\t\taddedLegendItems\n\t\t\t.merge(svg.selectAll(\"g.legend-item\"))\n\t\t\t.each(function(d, i) {\n\t\t\t\tconst legendItem = select(this);\n\t\t\t\tconst previousLegendItem = select(\n\t\t\t\t\tsvg.selectAll(\"g.legend-item\").nodes()[i - 1]\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\titemIndexInLine === 0 ||\n\t\t\t\t\tpreviousLegendItem.empty() ||\n\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL &&\n\t\t\t\t\t\ti !== 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst svgDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tself.parent,\n\t\t\t\t\t\t{ useAttr: true }\n\t\t\t\t\t);\n\t\t\t\t\tconst legendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tselect(this).select(\"text\"),\n\t\t\t\t\t\t{ useBBox: true }\n\t\t\t\t\t);\n\t\t\t\t\tconst lastLegendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tpreviousLegendItem.select(\"text\"),\n\t\t\t\t\t\t{ useBBox: true }\n\t\t\t\t\t);\n\t\t\t\t\tstartingPoint =\n\t\t\t\t\t\tstartingPoint +\n\t\t\t\t\t\tlastLegendItemTextDimensions.width +\n\t\t\t\t\t\tspaceNeededForCheckbox +\n\t\t\t\t\t\tlegendItemsHorizontalSpacing;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tstartingPoint +\n\t\t\t\t\t\t\tspaceNeededForCheckbox +\n\t\t\t\t\t\t\tlegendItemTextDimensions.width >\n\t\t\t\t\t\tsvgDimensions.width\n\t\t\t\t\t) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t\tstartingPoint = 0;\n\t\t\t\t\t\titemIndexInLine = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst yOffset = 0;\n\n\t\t\t\t// Position checkbox\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tlegendItem\n\t\t\t\t\t.select(\"rect.checkbox\")\n\t\t\t\t\t.attr(\"x\", startingPoint)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\tyOffset + lineNumber * legendItemsVerticalSpacing\n\t\t\t\t\t);\n\n\t\t\t\t// Position text\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tconst yPosition =\n\t\t\t\t\tlegendTextYOffset + lineNumber * legendItemsVerticalSpacing;\n\t\t\t\tlegendItem\n\t\t\t\t\t.select(\"text\")\n\t\t\t\t\t.attr(\"x\", startingPoint + spaceNeededForCheckbox)\n\t\t\t\t\t.attr(\"y\", yOffset + yPosition);\n\n\t\t\t\tlastYPosition = yPosition;\n\n\t\t\t\t// Render checkbox check icon\n\t\t\t\tif (\n\t\t\t\t\thasDeactivatedItems &&\n\t\t\t\t\tlegendItem.select(\"g.check\").empty()\n\t\t\t\t) {\n\t\t\t\t\tlegendItem.append(\"g\").classed(\"check\", true).html(`\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t`);\n\n\t\t\t\t\tlegendItem\n\t\t\t\t\t\t.select(\"g.check svg\")\n\t\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"x\")\n\t\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"y\")\n\t\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\t!hasDeactivatedItems &&\n\t\t\t\t\t!legendItem.select(\"g.check\").empty()\n\t\t\t\t) {\n\t\t\t\t\tlegendItem.select(\"g.check\").remove();\n\t\t\t\t}\n\n\t\t\t\titemIndexInLine++;\n\t\t\t});\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\tsvg.selectAll(\"g.legend-item\")\n\t\t\t.on(\"mouseover\", function() {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_HOVER, {\n\t\t\t\t\thoveredElement: select(this)\n\t\t\t\t});\n\n\t\t\t\t// Configs\n\t\t\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem\n\t\t\t\t\t.append(\"rect\")\n\t\t\t\t\t.classed(\"hover-stroke\", true)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select(\"rect.checkbox\").attr(\"x\")\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select(\"rect.checkbox\").attr(\"y\")\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"rx\", 3)\n\t\t\t\t\t.attr(\"ry\", 3)\n\t\t\t\t\t.lower();\n\t\t\t})\n\t\t\t.on(\"click\", function() {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {\n\t\t\t\t\tclickedElement: select(this)\n\t\t\t\t});\n\n\t\t\t\tconst clickedItem = select(this);\n\t\t\t\tconst clickedItemData = clickedItem.datum() as any;\n\n\t\t\t\tself.model.toggleDataLabel(clickedItemData.name);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function() {\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select(\"rect.hover-stroke\").remove();\n\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\t\t\t{\n\t\t\t\t\t\thoveredElement: hoveredItem\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t}\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { Component } from "../component";
2
+ import { ChartModel } from "../../model";
3
+ import Position from "@carbon/utils-position";
4
+ export declare class Threshold extends Component {
5
+ type: string;
6
+ threshold: any;
7
+ thresholdClass: string;
8
+ thresholdIdentifierClass: string;
9
+ label: any;
10
+ positionService: Position;
11
+ constructor(model: ChartModel, services: any, configs: any);
12
+ render(animate?: boolean): void;
13
+ getFormattedValue(): any;
14
+ appendThresholdLabel(): void;
15
+ setThresholdLabelPosition(): void;
16
+ addEventListeners(): void;
17
+ }