highcharts 9.1.1 → 9.2.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 (718) hide show
  1. package/bower.json +1 -1
  2. package/css/annotations/popup.css +29 -28
  3. package/css/annotations/popup.scss +29 -27
  4. package/css/highcharts.css +15 -0
  5. package/css/highcharts.scss +12 -0
  6. package/css/stocktools/gui.css +1 -0
  7. package/css/stocktools/gui.scss +1 -0
  8. package/css/themes/dark-unica.css +15 -0
  9. package/css/themes/grid-light.css +15 -0
  10. package/css/themes/sand-signika.css +15 -0
  11. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +8 -2
  12. package/es-modules/Accessibility/Components/LegendComponent.js +19 -8
  13. package/es-modules/Accessibility/Components/MenuComponent.js +19 -13
  14. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +4 -8
  15. package/es-modules/Accessibility/FocusBorder.js +1 -3
  16. package/es-modules/Accessibility/Options/LangOptions.js +3 -3
  17. package/es-modules/Accessibility/Utils/Announcer.js +22 -5
  18. package/es-modules/Accessibility/Utils/ChartUtilities.js +6 -1
  19. package/es-modules/Core/Animation/AnimationUtilities.js +12 -4
  20. package/es-modules/Core/Animation/Fx.js +15 -12
  21. package/es-modules/Core/Axis/Axis.js +25 -13
  22. package/es-modules/Core/Axis/AxisDefaults.js +0 -1
  23. package/es-modules/Core/Axis/BrokenAxis.js +32 -15
  24. package/es-modules/Core/Axis/Color/ColorAxis.js +665 -0
  25. package/es-modules/Core/Axis/Color/ColorAxisComposition.js +237 -0
  26. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +434 -0
  27. package/es-modules/Core/Axis/DateTimeAxis.js +163 -133
  28. package/es-modules/Core/Axis/GridAxis.js +8 -3
  29. package/es-modules/Core/Axis/LogarithmicAxis.js +159 -117
  30. package/es-modules/Core/Axis/OrdinalAxis.js +666 -460
  31. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +874 -0
  32. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +292 -0
  33. package/es-modules/Core/Axis/RadialAxis.js +858 -745
  34. package/es-modules/Core/Axis/ScrollbarAxis.js +7 -0
  35. package/es-modules/Core/Axis/StackingAxis.js +159 -140
  36. package/es-modules/Core/Axis/Tick.js +17 -27
  37. package/es-modules/Core/Chart/Chart.js +24 -38
  38. package/es-modules/Core/Chart/ChartDefaults.js +1 -1
  39. package/es-modules/Core/Chart/StockChart.js +12 -0
  40. package/es-modules/Core/Color/Color.js +96 -104
  41. package/es-modules/Core/DefaultOptions.js +269 -248
  42. package/es-modules/Core/Foundation.js +9 -8
  43. package/es-modules/Core/Geometry/CircleUtilities.js +385 -0
  44. package/es-modules/Core/Geometry/GeometryUtilities.js +83 -0
  45. package/es-modules/Core/Globals.js +23 -1
  46. package/es-modules/{Extensions/Ajax.js → Core/HttpUtilities.js} +86 -42
  47. package/es-modules/Core/{Legend.js → Legend/Legend.js} +142 -116
  48. package/es-modules/{Mixins → Core/Legend}/LegendSymbol.js +54 -38
  49. package/es-modules/Core/Navigator.js +3 -0
  50. package/es-modules/Core/Pointer.js +9 -0
  51. package/es-modules/Core/Renderer/HTML/AST.js +100 -82
  52. package/es-modules/Core/Renderer/HTML/HTMLElement.js +17 -7
  53. package/es-modules/Core/Renderer/HTML/HTMLRenderer.js +26 -9
  54. package/es-modules/Core/Renderer/RendererRegistry.js +9 -4
  55. package/es-modules/Core/Renderer/RendererUtilities.js +159 -0
  56. package/es-modules/Core/Renderer/SVG/SVGElement.js +13 -7
  57. package/es-modules/Core/Renderer/SVG/SVGLabel.js +9 -29
  58. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +2 -2
  59. package/es-modules/Core/Renderer/SVG/TextBuilder.js +18 -16
  60. package/es-modules/Core/Responsive.js +166 -148
  61. package/es-modules/Core/Series/DataLabel.js +564 -0
  62. package/es-modules/Core/Series/Point.js +233 -209
  63. package/es-modules/Core/Series/Series.js +174 -2339
  64. package/es-modules/Core/Series/SeriesDefaults.js +2293 -0
  65. package/es-modules/Core/Series/SeriesRegistry.js +3 -9
  66. package/es-modules/Core/Time.js +78 -2
  67. package/es-modules/Core/Tooltip.js +178 -236
  68. package/es-modules/Core/Utilities.js +409 -394
  69. package/es-modules/Extensions/Annotations/Annotations.js +102 -49
  70. package/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js +9 -1
  71. package/es-modules/Extensions/Annotations/NavigationBindings.js +30 -25
  72. package/es-modules/Extensions/Annotations/Popup.js +16 -7
  73. package/es-modules/Extensions/Boost/BoostOverrides.js +5 -1
  74. package/es-modules/Extensions/Boost/WGLRenderer.js +5 -4
  75. package/es-modules/Extensions/Boost/WGLVBuffer.js +3 -0
  76. package/es-modules/Extensions/BoostCanvas.js +1 -1
  77. package/es-modules/Extensions/CurrentDateIndication.js +1 -1
  78. package/es-modules/Extensions/Data.js +82 -76
  79. package/es-modules/Extensions/DataGrouping.js +225 -184
  80. package/es-modules/Extensions/Debugger/ErrorMessages.js +2 -2
  81. package/es-modules/Extensions/DraggablePoints.js +13 -5
  82. package/es-modules/Extensions/Drilldown.js +41 -14
  83. package/es-modules/Extensions/ExportData.js +7 -4
  84. package/es-modules/Extensions/Exporting/Exporting.js +1273 -0
  85. package/es-modules/Extensions/Exporting/ExportingDefaults.js +803 -0
  86. package/es-modules/Extensions/Exporting/ExportingSymbols.js +73 -0
  87. package/es-modules/Extensions/FullScreen.js +7 -5
  88. package/es-modules/Extensions/NoDataToDisplay.js +1 -1
  89. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +617 -0
  90. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +58 -0
  91. package/es-modules/Extensions/Oldie/Oldie.js +1 -1
  92. package/es-modules/Extensions/Pane.js +0 -1
  93. package/es-modules/Extensions/PatternFill.js +23 -10
  94. package/es-modules/Extensions/Polar.js +2 -1
  95. package/es-modules/Extensions/RangeSelector.js +1 -1
  96. package/es-modules/Extensions/Themes/Avocado.js +49 -20
  97. package/es-modules/Extensions/Themes/DarkBlue.js +226 -203
  98. package/es-modules/Extensions/Themes/DarkGreen.js +231 -203
  99. package/es-modules/Extensions/Themes/DarkUnica.js +201 -172
  100. package/es-modules/Extensions/Themes/Gray.js +228 -205
  101. package/es-modules/Extensions/Themes/Grid.js +109 -81
  102. package/es-modules/Extensions/Themes/GridLight.js +83 -55
  103. package/es-modules/Extensions/Themes/HighContrastDark.js +192 -164
  104. package/es-modules/Extensions/Themes/HighContrastLight.js +49 -21
  105. package/es-modules/Extensions/Themes/SandSignika.js +115 -86
  106. package/es-modules/Extensions/Themes/Skies.js +102 -74
  107. package/es-modules/Extensions/Themes/Sunset.js +47 -19
  108. package/es-modules/Mixins/ColorSeries.js +0 -1
  109. package/es-modules/Mixins/MultipleLines.js +6 -0
  110. package/es-modules/Mixins/TreeSeries.js +1 -1
  111. package/es-modules/Series/Area/AreaSeries.js +2 -2
  112. package/es-modules/Series/AreaSpline/AreaSplineSeries.js +2 -2
  113. package/es-modules/Series/Bubble/BubbleLegendComposition.js +279 -0
  114. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +267 -0
  115. package/es-modules/Series/Bubble/BubbleLegendItem.js +472 -0
  116. package/es-modules/Series/Bubble/BubbleSeries.js +6 -2
  117. package/es-modules/Series/Column/ColumnDataLabel.js +109 -0
  118. package/es-modules/Series/Column/ColumnSeries.js +39 -26
  119. package/es-modules/Series/Column3D/Column3DComposition.js +5 -2
  120. package/es-modules/Series/Flags/FlagsSeries.js +8 -1
  121. package/es-modules/Series/Gantt/GanttSeries.js +3 -3
  122. package/es-modules/Series/Heatmap/HeatmapSeries.js +9 -5
  123. package/es-modules/Series/HeikinAshi/HeikinAshiPoint.js +60 -0
  124. package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +277 -0
  125. package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +83 -0
  126. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +370 -0
  127. package/es-modules/Series/Line/LineSeries.js +12 -8
  128. package/es-modules/Series/Map/MapSeries.js +5 -3
  129. package/es-modules/Series/MapBubble/MapBubbleSeries.js +6 -5
  130. package/es-modules/Series/OHLC/OHLCPoint.js +11 -0
  131. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +3 -1
  132. package/es-modules/Series/Pie/PieDataLabel.js +448 -0
  133. package/es-modules/Series/Pie/PiePoint.js +35 -34
  134. package/es-modules/Series/Pie/PieSeries.js +19 -16
  135. package/es-modules/Series/Polygon/PolygonSeries.js +3 -3
  136. package/es-modules/Series/Sankey/SankeySeries.js +9 -7
  137. package/es-modules/Series/SolidGauge/SolidGaugeSeries.js +2 -2
  138. package/es-modules/Series/Sunburst/SunburstSeries.js +1 -14
  139. package/es-modules/Series/Timeline/TimelinePoint.js +6 -0
  140. package/es-modules/Series/Timeline/TimelineSeries.js +14 -17
  141. package/es-modules/Series/Treemap/TreemapSeries.js +3 -3
  142. package/es-modules/Series/Venn/VennSeries.js +4 -4
  143. package/es-modules/Series/Venn/VennUtils.js +10 -16
  144. package/es-modules/Series/Waterfall/WaterfallSeries.js +40 -35
  145. package/es-modules/Series/Wordcloud/WordcloudSeries.js +1 -0
  146. package/es-modules/Series/XRange/XRangeSeries.js +4 -2
  147. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +92 -75
  148. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +20 -8
  149. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +17 -4
  150. package/es-modules/Stock/StockToolsBindings.js +77 -38
  151. package/es-modules/Stock/StockToolsGui.js +28 -3
  152. package/es-modules/masters/highcharts-3d.src.js +1 -1
  153. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  154. package/es-modules/masters/highcharts-more.src.js +11 -7
  155. package/es-modules/masters/highcharts.src.js +25 -9
  156. package/es-modules/masters/highmaps.src.js +1 -1
  157. package/es-modules/masters/highstock.src.js +1 -1
  158. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  159. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  160. package/es-modules/masters/indicators/ao.src.js +1 -1
  161. package/es-modules/masters/indicators/apo.src.js +1 -1
  162. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  163. package/es-modules/masters/indicators/aroon.src.js +1 -1
  164. package/es-modules/masters/indicators/atr.src.js +1 -1
  165. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  166. package/es-modules/masters/indicators/cci.src.js +1 -1
  167. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  168. package/es-modules/masters/indicators/cmf.src.js +1 -1
  169. package/es-modules/masters/indicators/cmo.src.js +1 -1
  170. package/es-modules/masters/indicators/dema.src.js +1 -1
  171. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  172. package/es-modules/masters/indicators/dmi.src.js +1 -1
  173. package/es-modules/masters/indicators/dpo.src.js +1 -1
  174. package/es-modules/masters/indicators/ema.src.js +1 -1
  175. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  176. package/es-modules/masters/indicators/indicators-all.src.js +1 -1
  177. package/es-modules/masters/indicators/indicators.src.js +1 -1
  178. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  179. package/es-modules/masters/indicators/klinger.src.js +1 -1
  180. package/es-modules/masters/indicators/macd.src.js +1 -1
  181. package/es-modules/masters/indicators/mfi.src.js +1 -1
  182. package/es-modules/masters/indicators/momentum.src.js +1 -1
  183. package/es-modules/masters/indicators/natr.src.js +1 -1
  184. package/es-modules/masters/indicators/obv.src.js +1 -1
  185. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  186. package/es-modules/masters/indicators/ppo.src.js +1 -1
  187. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  188. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  189. package/es-modules/masters/indicators/psar.src.js +1 -1
  190. package/es-modules/masters/indicators/regressions.src.js +1 -1
  191. package/es-modules/masters/indicators/roc.src.js +1 -1
  192. package/es-modules/masters/indicators/rsi.src.js +1 -1
  193. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  194. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  195. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  196. package/es-modules/masters/indicators/tema.src.js +1 -1
  197. package/es-modules/masters/indicators/trendline.src.js +1 -1
  198. package/es-modules/masters/indicators/trix.src.js +1 -1
  199. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  200. package/es-modules/masters/indicators/vwap.src.js +1 -1
  201. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  202. package/es-modules/masters/indicators/wma.src.js +1 -1
  203. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  204. package/es-modules/masters/modules/accessibility.src.js +1 -1
  205. package/es-modules/masters/modules/annotations-advanced.src.js +1 -1
  206. package/es-modules/masters/modules/annotations.src.js +1 -1
  207. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  208. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  209. package/es-modules/masters/modules/boost.src.js +1 -1
  210. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  211. package/es-modules/masters/modules/bullet.src.js +1 -1
  212. package/es-modules/masters/modules/coloraxis.src.js +6 -2
  213. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  214. package/es-modules/masters/modules/cylinder.src.js +1 -1
  215. package/es-modules/masters/modules/data.src.js +8 -1
  216. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  217. package/es-modules/masters/modules/debugger.src.js +1 -1
  218. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  219. package/es-modules/masters/modules/dotplot.src.js +1 -1
  220. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  221. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  222. package/es-modules/masters/modules/drilldown.src.js +1 -1
  223. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  224. package/es-modules/masters/modules/export-data.src.js +1 -1
  225. package/es-modules/masters/modules/exporting.src.js +10 -2
  226. package/es-modules/masters/modules/full-screen.src.js +1 -1
  227. package/es-modules/masters/modules/funnel.src.js +1 -1
  228. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  229. package/es-modules/masters/modules/gantt.src.js +9 -4
  230. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  231. package/es-modules/masters/modules/heatmap.src.js +6 -2
  232. package/es-modules/masters/modules/heikinashi.src.js +14 -0
  233. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  234. package/es-modules/masters/modules/hollowcandlestick.src.js +14 -0
  235. package/es-modules/masters/modules/item-series.src.js +1 -1
  236. package/es-modules/masters/modules/lollipop.src.js +1 -1
  237. package/es-modules/masters/modules/map.src.js +10 -6
  238. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  239. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  240. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  241. package/es-modules/masters/modules/offline-exporting.src.js +8 -2
  242. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  243. package/es-modules/masters/modules/oldie.src.js +1 -1
  244. package/es-modules/masters/modules/organization.src.js +1 -1
  245. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  246. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  247. package/es-modules/masters/modules/pareto.src.js +1 -1
  248. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  249. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  250. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  251. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  252. package/es-modules/masters/modules/sankey.src.js +1 -1
  253. package/es-modules/masters/modules/series-label.src.js +1 -1
  254. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  255. package/es-modules/masters/modules/sonification.src.js +1 -1
  256. package/es-modules/masters/modules/static-scale.src.js +1 -1
  257. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  258. package/es-modules/masters/modules/stock.src.js +3 -2
  259. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  260. package/es-modules/masters/modules/sunburst.src.js +1 -1
  261. package/es-modules/masters/modules/tilemap.src.js +1 -1
  262. package/es-modules/masters/modules/timeline.src.js +1 -1
  263. package/es-modules/masters/modules/treegrid.src.js +1 -1
  264. package/es-modules/masters/modules/treemap.src.js +1 -1
  265. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  266. package/es-modules/masters/modules/variwide.src.js +1 -1
  267. package/es-modules/masters/modules/vector.src.js +1 -1
  268. package/es-modules/masters/modules/venn.src.js +1 -1
  269. package/es-modules/masters/modules/windbarb.src.js +1 -1
  270. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  271. package/es-modules/masters/modules/xrange.src.js +1 -1
  272. package/es-modules/masters/themes/avocado.src.js +5 -2
  273. package/es-modules/masters/themes/dark-blue.src.js +5 -2
  274. package/es-modules/masters/themes/dark-green.src.js +5 -2
  275. package/es-modules/masters/themes/dark-unica.src.js +5 -2
  276. package/es-modules/masters/themes/gray.src.js +5 -2
  277. package/es-modules/masters/themes/grid-light.src.js +5 -2
  278. package/es-modules/masters/themes/grid.src.js +5 -2
  279. package/es-modules/masters/themes/high-contrast-dark.src.js +5 -2
  280. package/es-modules/masters/themes/high-contrast-light.src.js +5 -2
  281. package/es-modules/masters/themes/sand-signika.src.js +5 -2
  282. package/es-modules/masters/themes/skies.src.js +5 -2
  283. package/es-modules/masters/themes/sunset.src.js +5 -2
  284. package/gfx/stock-icons/annotations-hidden.svg +1 -1
  285. package/gfx/stock-icons/annotations-visible.svg +2 -2
  286. package/gfx/stock-icons/arrow-bottom.svg +1 -1
  287. package/gfx/stock-icons/arrow-left.svg +1 -1
  288. package/gfx/stock-icons/arrow-line.svg +1 -1
  289. package/gfx/stock-icons/arrow-ray.svg +1 -1
  290. package/gfx/stock-icons/arrow-right.svg +1 -1
  291. package/gfx/stock-icons/arrow-segment.svg +1 -2
  292. package/gfx/stock-icons/circle.svg +1 -1
  293. package/gfx/stock-icons/close.svg +2 -2
  294. package/gfx/stock-icons/crooked-3.svg +1 -1
  295. package/gfx/stock-icons/crooked-5.svg +1 -1
  296. package/gfx/stock-icons/current-price-hide.svg +3 -3
  297. package/gfx/stock-icons/current-price-show.svg +2 -2
  298. package/gfx/stock-icons/destroy.svg +1 -1
  299. package/gfx/stock-icons/drawing.svg +18 -0
  300. package/gfx/stock-icons/edit.svg +1 -1
  301. package/gfx/stock-icons/elliott-3.svg +1 -1
  302. package/gfx/stock-icons/elliott-5.svg +1 -1
  303. package/gfx/stock-icons/ellipse.svg +11 -0
  304. package/gfx/stock-icons/fibonacci-timezone.svg +16 -0
  305. package/gfx/stock-icons/fibonacci.svg +1 -1
  306. package/gfx/stock-icons/flag-basic.svg +1 -1
  307. package/gfx/stock-icons/flag-diamond.svg +2 -2
  308. package/gfx/stock-icons/flag-elipse.svg +1 -1
  309. package/gfx/stock-icons/flag-trapeze.svg +2 -2
  310. package/gfx/stock-icons/fullscreen.svg +4 -4
  311. package/gfx/stock-icons/horizontal-line.svg +1 -1
  312. package/gfx/stock-icons/indicators.svg +3 -3
  313. package/gfx/stock-icons/label.svg +4 -4
  314. package/gfx/stock-icons/line.svg +1 -1
  315. package/gfx/stock-icons/linear.svg +11 -0
  316. package/gfx/stock-icons/logarithmic.svg +1 -0
  317. package/gfx/stock-icons/measure-x.svg +2 -2
  318. package/gfx/stock-icons/measure-xy.svg +1 -1
  319. package/gfx/stock-icons/measure-y.svg +1 -1
  320. package/gfx/stock-icons/panning.svg +17 -0
  321. package/gfx/stock-icons/parallel-channel.svg +1 -1
  322. package/gfx/stock-icons/pitchfork.svg +1 -1
  323. package/gfx/stock-icons/ray.svg +1 -1
  324. package/gfx/stock-icons/rectangle.svg +1 -1
  325. package/gfx/stock-icons/remove-annotations.svg +2 -2
  326. package/gfx/stock-icons/save-chart.svg +3 -3
  327. package/gfx/stock-icons/segment.svg +1 -1
  328. package/gfx/stock-icons/separator.svg +1 -1
  329. package/gfx/stock-icons/series-candlestick.svg +1 -1
  330. package/gfx/stock-icons/series-heikin-ashi.svg +1 -0
  331. package/gfx/stock-icons/series-hlc.svg +1 -0
  332. package/gfx/stock-icons/series-hollow-candlestick.svg +1 -0
  333. package/gfx/stock-icons/series-line.svg +1 -1
  334. package/gfx/stock-icons/series-ohlc.svg +4 -4
  335. package/gfx/stock-icons/time-cycles.svg +35 -0
  336. package/gfx/stock-icons/vertical-arrow.svg +1 -1
  337. package/gfx/stock-icons/vertical-counter.svg +1 -1
  338. package/gfx/stock-icons/vertical-double-arrow.svg +1 -1
  339. package/gfx/stock-icons/vertical-label.svg +3 -3
  340. package/gfx/stock-icons/vertical-line.svg +1 -1
  341. package/gfx/stock-icons/zoom-x.svg +2 -2
  342. package/gfx/stock-icons/zoom-xy.svg +2 -2
  343. package/gfx/stock-icons/zoom-y.svg +2 -2
  344. package/highcharts-3d.js +24 -24
  345. package/highcharts-3d.js.map +1 -1
  346. package/highcharts-3d.src.js +6 -3
  347. package/highcharts-gantt.js +800 -792
  348. package/highcharts-gantt.js.map +1 -1
  349. package/highcharts-gantt.src.js +16535 -15918
  350. package/highcharts-more.d.ts +73 -1
  351. package/highcharts-more.js +193 -192
  352. package/highcharts-more.js.map +1 -1
  353. package/highcharts-more.src.d.ts +73 -1
  354. package/highcharts-more.src.js +8044 -7839
  355. package/highcharts.d.ts +3850 -177
  356. package/highcharts.js +589 -581
  357. package/highcharts.js.map +1 -1
  358. package/highcharts.src.d.ts +3850 -177
  359. package/highcharts.src.js +16635 -16060
  360. package/highmaps.js +708 -698
  361. package/highmaps.js.map +1 -1
  362. package/highmaps.src.js +17419 -16521
  363. package/highstock.js +782 -769
  364. package/highstock.js.map +1 -1
  365. package/highstock.src.js +28867 -27975
  366. package/indicators/acceleration-bands.js +9 -9
  367. package/indicators/acceleration-bands.js.map +1 -1
  368. package/indicators/acceleration-bands.src.js +7 -1
  369. package/indicators/accumulation-distribution.js +1 -1
  370. package/indicators/accumulation-distribution.src.js +1 -1
  371. package/indicators/ao.js +1 -1
  372. package/indicators/ao.src.js +1 -1
  373. package/indicators/apo.js +1 -1
  374. package/indicators/apo.src.js +1 -1
  375. package/indicators/aroon-oscillator.js +9 -9
  376. package/indicators/aroon-oscillator.js.map +1 -1
  377. package/indicators/aroon-oscillator.src.js +7 -1
  378. package/indicators/aroon.js +9 -9
  379. package/indicators/aroon.js.map +1 -1
  380. package/indicators/aroon.src.js +7 -1
  381. package/indicators/atr.js +1 -1
  382. package/indicators/atr.src.js +1 -1
  383. package/indicators/bollinger-bands.js +9 -9
  384. package/indicators/bollinger-bands.js.map +1 -1
  385. package/indicators/bollinger-bands.src.js +7 -1
  386. package/indicators/cci.js +1 -1
  387. package/indicators/cci.src.js +1 -1
  388. package/indicators/chaikin.js +1 -1
  389. package/indicators/chaikin.src.js +1 -1
  390. package/indicators/cmf.js +1 -1
  391. package/indicators/cmf.src.js +1 -1
  392. package/indicators/cmo.js +1 -1
  393. package/indicators/cmo.src.js +1 -1
  394. package/indicators/dema.js +1 -1
  395. package/indicators/dema.src.js +1 -1
  396. package/indicators/disparity-index.js +1 -1
  397. package/indicators/disparity-index.src.js +1 -1
  398. package/indicators/dmi.js +11 -11
  399. package/indicators/dmi.js.map +1 -1
  400. package/indicators/dmi.src.js +7 -1
  401. package/indicators/dpo.js +1 -1
  402. package/indicators/dpo.src.js +1 -1
  403. package/indicators/ema.js +1 -1
  404. package/indicators/ema.src.js +1 -1
  405. package/indicators/ichimoku-kinko-hyo.js +1 -1
  406. package/indicators/ichimoku-kinko-hyo.src.js +1 -1
  407. package/indicators/indicators-all.js +203 -200
  408. package/indicators/indicators-all.js.map +1 -1
  409. package/indicators/indicators-all.src.js +206 -104
  410. package/indicators/indicators.js +12 -11
  411. package/indicators/indicators.js.map +1 -1
  412. package/indicators/indicators.src.js +108 -90
  413. package/indicators/keltner-channels.js +9 -9
  414. package/indicators/keltner-channels.js.map +1 -1
  415. package/indicators/keltner-channels.src.js +7 -1
  416. package/indicators/klinger.js +13 -13
  417. package/indicators/klinger.js.map +1 -1
  418. package/indicators/klinger.src.js +7 -1
  419. package/indicators/macd.js +1 -1
  420. package/indicators/macd.src.js +1 -1
  421. package/indicators/mfi.js +1 -1
  422. package/indicators/mfi.src.js +1 -1
  423. package/indicators/momentum.js +1 -1
  424. package/indicators/momentum.src.js +1 -1
  425. package/indicators/natr.js +1 -1
  426. package/indicators/natr.src.js +1 -1
  427. package/indicators/obv.js +1 -1
  428. package/indicators/obv.src.js +1 -1
  429. package/indicators/pivot-points.js +1 -1
  430. package/indicators/pivot-points.src.js +1 -1
  431. package/indicators/ppo.js +1 -1
  432. package/indicators/ppo.src.js +1 -1
  433. package/indicators/price-channel.js +9 -9
  434. package/indicators/price-channel.js.map +1 -1
  435. package/indicators/price-channel.src.js +7 -1
  436. package/indicators/price-envelopes.js +1 -1
  437. package/indicators/price-envelopes.src.js +1 -1
  438. package/indicators/psar.js +1 -1
  439. package/indicators/psar.src.js +1 -1
  440. package/indicators/regressions.js +1 -1
  441. package/indicators/regressions.src.js +1 -1
  442. package/indicators/roc.js +1 -1
  443. package/indicators/roc.src.js +1 -1
  444. package/indicators/rsi.js +1 -1
  445. package/indicators/rsi.src.js +1 -1
  446. package/indicators/slow-stochastic.js +1 -1
  447. package/indicators/slow-stochastic.src.js +1 -1
  448. package/indicators/stochastic.js +10 -10
  449. package/indicators/stochastic.js.map +1 -1
  450. package/indicators/stochastic.src.js +7 -1
  451. package/indicators/supertrend.js +10 -10
  452. package/indicators/supertrend.js.map +1 -1
  453. package/indicators/supertrend.src.js +23 -10
  454. package/indicators/tema.js +1 -1
  455. package/indicators/tema.src.js +1 -1
  456. package/indicators/trendline.js +1 -1
  457. package/indicators/trendline.src.js +1 -1
  458. package/indicators/trix.js +1 -1
  459. package/indicators/trix.src.js +1 -1
  460. package/indicators/volume-by-price.js +17 -15
  461. package/indicators/volume-by-price.js.map +1 -1
  462. package/indicators/volume-by-price.src.js +71 -6
  463. package/indicators/vwap.js +1 -1
  464. package/indicators/vwap.src.js +1 -1
  465. package/indicators/williams-r.js +1 -1
  466. package/indicators/williams-r.src.js +1 -1
  467. package/indicators/wma.js +1 -1
  468. package/indicators/wma.src.js +1 -1
  469. package/indicators/zigzag.js +1 -1
  470. package/indicators/zigzag.src.js +1 -1
  471. package/modules/accessibility.js +203 -202
  472. package/modules/accessibility.js.map +1 -1
  473. package/modules/accessibility.src.js +89 -49
  474. package/modules/annotations-advanced.js +164 -163
  475. package/modules/annotations-advanced.js.map +1 -1
  476. package/modules/annotations-advanced.src.js +162 -87
  477. package/modules/annotations.js +111 -111
  478. package/modules/annotations.js.map +1 -1
  479. package/modules/annotations.src.js +162 -87
  480. package/modules/arrow-symbols.js +1 -1
  481. package/modules/arrow-symbols.src.js +1 -1
  482. package/modules/boost-canvas.js +2 -2
  483. package/modules/boost-canvas.js.map +1 -1
  484. package/modules/boost-canvas.src.js +2 -2
  485. package/modules/boost.js +52 -52
  486. package/modules/boost.js.map +1 -1
  487. package/modules/boost.src.js +15 -7
  488. package/modules/broken-axis.js +13 -13
  489. package/modules/broken-axis.js.map +1 -1
  490. package/modules/broken-axis.src.js +34 -15
  491. package/modules/bullet.js +1 -1
  492. package/modules/bullet.src.js +1 -1
  493. package/modules/coloraxis.js +24 -22
  494. package/modules/coloraxis.js.map +1 -1
  495. package/modules/coloraxis.src.js +954 -774
  496. package/modules/current-date-indicator.js +2 -2
  497. package/modules/current-date-indicator.js.map +1 -1
  498. package/modules/current-date-indicator.src.js +2 -2
  499. package/modules/cylinder.js +1 -1
  500. package/modules/cylinder.src.js +1 -1
  501. package/modules/data.js +33 -32
  502. package/modules/data.js.map +1 -1
  503. package/modules/data.src.js +182 -134
  504. package/modules/datagrouping.d.ts +5 -0
  505. package/modules/datagrouping.js +20 -20
  506. package/modules/datagrouping.js.map +1 -1
  507. package/modules/datagrouping.src.d.ts +5 -0
  508. package/modules/datagrouping.src.js +270 -228
  509. package/modules/debugger.js +3 -3
  510. package/modules/debugger.js.map +1 -1
  511. package/modules/debugger.src.js +3 -3
  512. package/modules/dependency-wheel.js +1 -1
  513. package/modules/dependency-wheel.src.js +1 -1
  514. package/modules/dotplot.js +1 -1
  515. package/modules/dotplot.src.js +1 -1
  516. package/modules/drag-panes.js +1 -1
  517. package/modules/drag-panes.src.js +1 -1
  518. package/modules/draggable-points.js +34 -34
  519. package/modules/draggable-points.js.map +1 -1
  520. package/modules/draggable-points.src.js +14 -5
  521. package/modules/drilldown.d.ts +27 -0
  522. package/modules/drilldown.js +18 -18
  523. package/modules/drilldown.js.map +1 -1
  524. package/modules/drilldown.src.d.ts +27 -0
  525. package/modules/drilldown.src.js +42 -16
  526. package/modules/dumbbell.js +1 -1
  527. package/modules/dumbbell.src.js +1 -1
  528. package/modules/export-data.js +20 -20
  529. package/modules/export-data.js.map +1 -1
  530. package/modules/export-data.src.js +8 -5
  531. package/modules/exporting.d.ts +29 -0
  532. package/modules/exporting.js +38 -35
  533. package/modules/exporting.js.map +1 -1
  534. package/modules/exporting.src.d.ts +29 -0
  535. package/modules/exporting.src.js +1937 -1614
  536. package/modules/full-screen.js +2 -2
  537. package/modules/full-screen.js.map +1 -1
  538. package/modules/full-screen.src.js +8 -6
  539. package/modules/funnel.js +1 -1
  540. package/modules/funnel.src.js +1 -1
  541. package/modules/funnel3d.js +1 -1
  542. package/modules/funnel3d.src.js +1 -1
  543. package/modules/gantt.js +218 -217
  544. package/modules/gantt.js.map +1 -1
  545. package/modules/gantt.src.js +74 -32
  546. package/modules/grid-axis.js +23 -22
  547. package/modules/grid-axis.js.map +1 -1
  548. package/modules/grid-axis.src.js +9 -4
  549. package/modules/heatmap.js +39 -37
  550. package/modules/heatmap.js.map +1 -1
  551. package/modules/heatmap.src.js +963 -779
  552. package/modules/heikinashi.js +17 -0
  553. package/modules/heikinashi.js.map +1 -0
  554. package/modules/heikinashi.src.js +394 -0
  555. package/modules/histogram-bellcurve.js +1 -1
  556. package/modules/histogram-bellcurve.src.js +1 -1
  557. package/modules/hollowcandlestick.js +18 -0
  558. package/modules/hollowcandlestick.js.map +1 -0
  559. package/modules/hollowcandlestick.src.js +504 -0
  560. package/modules/item-series.js +1 -1
  561. package/modules/item-series.src.js +1 -1
  562. package/modules/lollipop.js +1 -1
  563. package/modules/lollipop.src.js +1 -1
  564. package/modules/map.d.ts +9 -0
  565. package/modules/map.js +122 -119
  566. package/modules/map.js.map +1 -1
  567. package/modules/map.src.d.ts +9 -0
  568. package/modules/map.src.js +1655 -1332
  569. package/modules/marker-clusters.js +1 -1
  570. package/modules/marker-clusters.src.js +1 -1
  571. package/modules/networkgraph.js +1 -1
  572. package/modules/networkgraph.src.js +1 -1
  573. package/modules/no-data-to-display.js +3 -3
  574. package/modules/no-data-to-display.js.map +1 -1
  575. package/modules/no-data-to-display.src.js +2 -2
  576. package/modules/offline-exporting.js +18 -16
  577. package/modules/offline-exporting.js.map +1 -1
  578. package/modules/offline-exporting.src.js +623 -562
  579. package/modules/oldie-polyfills.js +1 -1
  580. package/modules/oldie-polyfills.src.js +1 -1
  581. package/modules/oldie.js +2 -2
  582. package/modules/oldie.src.js +2 -2
  583. package/modules/organization.js +1 -1
  584. package/modules/organization.src.js +1 -1
  585. package/modules/overlapping-datalabels.js +1 -1
  586. package/modules/overlapping-datalabels.src.js +1 -1
  587. package/modules/parallel-coordinates.js +1 -1
  588. package/modules/parallel-coordinates.src.js +1 -1
  589. package/modules/pareto.js +1 -1
  590. package/modules/pareto.src.js +1 -1
  591. package/modules/pathfinder.js +1 -1
  592. package/modules/pathfinder.src.js +1 -1
  593. package/modules/pattern-fill.js +14 -14
  594. package/modules/pattern-fill.js.map +1 -1
  595. package/modules/pattern-fill.src.js +24 -12
  596. package/modules/price-indicator.js +1 -1
  597. package/modules/price-indicator.src.js +1 -1
  598. package/modules/pyramid3d.js +1 -1
  599. package/modules/pyramid3d.src.js +1 -1
  600. package/modules/sankey.js +28 -28
  601. package/modules/sankey.js.map +1 -1
  602. package/modules/sankey.src.js +11 -11
  603. package/modules/series-label.js +1 -1
  604. package/modules/series-label.src.js +1 -1
  605. package/modules/solid-gauge.js +2 -2
  606. package/modules/solid-gauge.js.map +1 -1
  607. package/modules/solid-gauge.src.js +3 -3
  608. package/modules/sonification.js +1 -1
  609. package/modules/sonification.src.js +1 -1
  610. package/modules/static-scale.js +1 -1
  611. package/modules/static-scale.src.js +1 -1
  612. package/modules/stock-tools.js +159 -157
  613. package/modules/stock-tools.js.map +1 -1
  614. package/modules/stock-tools.src.js +253 -123
  615. package/modules/stock.d.ts +5 -0
  616. package/modules/stock.js +196 -191
  617. package/modules/stock.js.map +1 -1
  618. package/modules/stock.src.d.ts +5 -0
  619. package/modules/stock.src.js +7749 -7432
  620. package/modules/streamgraph.js +1 -1
  621. package/modules/streamgraph.src.js +1 -1
  622. package/modules/sunburst.js +5 -5
  623. package/modules/sunburst.js.map +1 -1
  624. package/modules/sunburst.src.js +6 -19
  625. package/modules/tilemap.js +1 -1
  626. package/modules/tilemap.src.js +1 -1
  627. package/modules/timeline.js +18 -17
  628. package/modules/timeline.js.map +1 -1
  629. package/modules/timeline.src.js +21 -24
  630. package/modules/treegrid.js +57 -57
  631. package/modules/treegrid.js.map +1 -1
  632. package/modules/treegrid.src.js +43 -19
  633. package/modules/treemap.js +5 -5
  634. package/modules/treemap.js.map +1 -1
  635. package/modules/treemap.src.js +5 -5
  636. package/modules/variable-pie.js +1 -1
  637. package/modules/variable-pie.src.js +1 -1
  638. package/modules/variwide.js +1 -1
  639. package/modules/variwide.src.js +1 -1
  640. package/modules/vector.js +1 -1
  641. package/modules/vector.src.js +1 -1
  642. package/modules/venn.js +31 -30
  643. package/modules/venn.js.map +1 -1
  644. package/modules/venn.src.js +508 -424
  645. package/modules/windbarb.js +1 -1
  646. package/modules/windbarb.src.js +1 -1
  647. package/modules/wordcloud.js +4 -4
  648. package/modules/wordcloud.js.map +1 -1
  649. package/modules/wordcloud.src.js +2 -1
  650. package/modules/xrange.js +17 -17
  651. package/modules/xrange.js.map +1 -1
  652. package/modules/xrange.src.js +7 -4
  653. package/package.json +1 -1
  654. package/themes/avocado.d.ts +6 -1
  655. package/themes/avocado.js +3 -3
  656. package/themes/avocado.js.map +1 -1
  657. package/themes/avocado.src.d.ts +6 -1
  658. package/themes/avocado.src.js +53 -22
  659. package/themes/dark-blue.d.ts +6 -1
  660. package/themes/dark-blue.js +3 -3
  661. package/themes/dark-blue.js.map +1 -1
  662. package/themes/dark-blue.src.d.ts +6 -1
  663. package/themes/dark-blue.src.js +231 -205
  664. package/themes/dark-green.d.ts +6 -1
  665. package/themes/dark-green.js +4 -4
  666. package/themes/dark-green.js.map +1 -1
  667. package/themes/dark-green.src.d.ts +6 -1
  668. package/themes/dark-green.src.js +236 -205
  669. package/themes/dark-unica.d.ts +6 -1
  670. package/themes/dark-unica.js +7 -7
  671. package/themes/dark-unica.js.map +1 -1
  672. package/themes/dark-unica.src.d.ts +6 -1
  673. package/themes/dark-unica.src.js +206 -174
  674. package/themes/gray.d.ts +6 -1
  675. package/themes/gray.js +3 -3
  676. package/themes/gray.js.map +1 -1
  677. package/themes/gray.src.d.ts +6 -1
  678. package/themes/gray.src.js +233 -207
  679. package/themes/grid-light.d.ts +6 -1
  680. package/themes/grid-light.js +4 -4
  681. package/themes/grid-light.js.map +1 -1
  682. package/themes/grid-light.src.d.ts +6 -1
  683. package/themes/grid-light.src.js +88 -57
  684. package/themes/grid.d.ts +6 -1
  685. package/themes/grid.js +3 -3
  686. package/themes/grid.js.map +1 -1
  687. package/themes/grid.src.d.ts +6 -1
  688. package/themes/grid.src.js +114 -83
  689. package/themes/high-contrast-dark.js +5 -4
  690. package/themes/high-contrast-dark.js.map +1 -1
  691. package/themes/high-contrast-dark.src.js +197 -166
  692. package/themes/high-contrast-light.js +3 -3
  693. package/themes/high-contrast-light.js.map +1 -1
  694. package/themes/high-contrast-light.src.js +54 -23
  695. package/themes/sand-signika.d.ts +6 -1
  696. package/themes/sand-signika.js +5 -5
  697. package/themes/sand-signika.js.map +1 -1
  698. package/themes/sand-signika.src.d.ts +6 -1
  699. package/themes/sand-signika.src.js +119 -88
  700. package/themes/skies.d.ts +6 -1
  701. package/themes/skies.js +5 -5
  702. package/themes/skies.js.map +1 -1
  703. package/themes/skies.src.d.ts +6 -1
  704. package/themes/skies.src.js +107 -76
  705. package/themes/sunset.d.ts +6 -1
  706. package/themes/sunset.js +3 -3
  707. package/themes/sunset.js.map +1 -1
  708. package/themes/sunset.src.d.ts +6 -1
  709. package/themes/sunset.src.js +52 -21
  710. package/es-modules/Core/Axis/ColorAxis.js +0 -1164
  711. package/es-modules/Core/Axis/HiddenAxis.js +0 -46
  712. package/es-modules/Core/Axis/PlotLineOrBand.js +0 -1051
  713. package/es-modules/Core/Series/DataLabels.js +0 -1173
  714. package/es-modules/Extensions/Exporting.js +0 -2024
  715. package/es-modules/Extensions/OfflineExporting.js +0 -621
  716. package/es-modules/Mixins/Geometry.js +0 -56
  717. package/es-modules/Mixins/GeometryCircles.js +0 -320
  718. package/es-modules/Series/Bubble/BubbleLegend.js +0 -893
@@ -147,6 +147,109 @@ var approximations = H.approximations = {
147
147
  // else, return is undefined
148
148
  }
149
149
  };
150
+ var applyGrouping = function () {
151
+ var series = this, chart = series.chart, options = series.options, dataGroupingOptions = options.dataGrouping, groupingEnabled = series.allowDG !== false && dataGroupingOptions &&
152
+ pick(dataGroupingOptions.enabled, chart.options.isStock), visible = (series.visible || !chart.options.chart.ignoreHiddenSeries), hasGroupedData, skip, lastDataGrouping = this.currentDataGrouping, currentDataGrouping, croppedData, revertRequireSorting = false;
153
+ // Data needs to be sorted for dataGrouping
154
+ if (groupingEnabled && !series.requireSorting) {
155
+ series.requireSorting = revertRequireSorting = true;
156
+ }
157
+ // Skip if processData returns false or if grouping is disabled (in that
158
+ // order)
159
+ skip = skipDataGrouping(series) || !groupingEnabled;
160
+ // Revert original requireSorting value if changed
161
+ if (revertRequireSorting) {
162
+ series.requireSorting = false;
163
+ }
164
+ if (!skip) {
165
+ series.destroyGroupedData();
166
+ var i = void 0, processedXData = dataGroupingOptions.groupAll ?
167
+ series.xData :
168
+ series.processedXData, processedYData = dataGroupingOptions.groupAll ?
169
+ series.yData :
170
+ series.processedYData, plotSizeX = chart.plotSizeX, xAxis = series.xAxis, ordinal = xAxis.options.ordinal, groupPixelWidth = series.groupPixelWidth;
171
+ // Execute grouping if the amount of points is greater than the limit
172
+ // defined in groupPixelWidth
173
+ if (groupPixelWidth &&
174
+ processedXData &&
175
+ processedXData.length) {
176
+ hasGroupedData = true;
177
+ // Force recreation of point instances in series.translate, #5699
178
+ series.isDirty = true;
179
+ series.points = null; // #6709
180
+ var extremes = xAxis.getExtremes(), xMin = extremes.min, xMax = extremes.max, groupIntervalFactor = (ordinal &&
181
+ xAxis.ordinal &&
182
+ xAxis.ordinal.getGroupIntervalFactor(xMin, xMax, series)) || 1, interval = (groupPixelWidth * (xMax - xMin) / plotSizeX) *
183
+ groupIntervalFactor, groupPositions = xAxis.getTimeTicks(DateTimeAxis.Additions.prototype.normalizeTimeTickInterval(interval, dataGroupingOptions.units ||
184
+ defaultDataGroupingUnits),
185
+ // Processed data may extend beyond axis (#4907)
186
+ Math.min(xMin, processedXData[0]), Math.max(xMax, processedXData[processedXData.length - 1]), xAxis.options.startOfWeek, processedXData, series.closestPointRange), groupedData = seriesProto.groupData.apply(series, [
187
+ processedXData,
188
+ processedYData,
189
+ groupPositions,
190
+ dataGroupingOptions.approximation
191
+ ]), groupedXData = groupedData.groupedXData, groupedYData = groupedData.groupedYData, gapSize = 0;
192
+ // The smoothed option is deprecated, instead,
193
+ // there is a fallback to the new anchoring mechanism. #12455.
194
+ if (dataGroupingOptions && dataGroupingOptions.smoothed && groupedXData.length) {
195
+ dataGroupingOptions.firstAnchor = 'firstPoint';
196
+ dataGroupingOptions.anchor = 'middle';
197
+ dataGroupingOptions.lastAnchor = 'lastPoint';
198
+ error(32, false, chart, { 'dataGrouping.smoothed': 'use dataGrouping.anchor' });
199
+ }
200
+ anchorPoints(series, groupedXData, xMax);
201
+ // Record what data grouping values were used
202
+ for (i = 1; i < groupPositions.length; i++) {
203
+ // The grouped gapSize needs to be the largest distance between
204
+ // the group to capture varying group sizes like months or DST
205
+ // crossing (#10000). Also check that the gap is not at the
206
+ // start of a segment.
207
+ if (!groupPositions.info.segmentStarts ||
208
+ groupPositions.info.segmentStarts.indexOf(i) === -1) {
209
+ gapSize = Math.max(groupPositions[i] - groupPositions[i - 1], gapSize);
210
+ }
211
+ }
212
+ currentDataGrouping = groupPositions.info;
213
+ currentDataGrouping.gapSize = gapSize;
214
+ series.closestPointRange = groupPositions.info.totalRange;
215
+ series.groupMap = groupedData.groupMap;
216
+ if (visible) {
217
+ adjustExtremes(xAxis, groupedXData);
218
+ }
219
+ // We calculated all group positions but we should render
220
+ // only the ones within the visible range
221
+ if (dataGroupingOptions.groupAll) {
222
+ // Keep the reference to all grouped points
223
+ // for further calculation (eg. heikinashi).
224
+ series.allGroupedData = groupedYData;
225
+ croppedData = series.cropData(groupedXData, groupedYData, xAxis.min, xAxis.max, 1 // Ordinal xAxis will remove left-most points otherwise
226
+ );
227
+ groupedXData = croppedData.xData;
228
+ groupedYData = croppedData.yData;
229
+ series.cropStart = croppedData.start; // #15005
230
+ }
231
+ // Set series props
232
+ series.processedXData = groupedXData;
233
+ series.processedYData = groupedYData;
234
+ }
235
+ else {
236
+ series.groupMap = null;
237
+ }
238
+ series.hasGroupedData = hasGroupedData;
239
+ series.currentDataGrouping = currentDataGrouping;
240
+ series.preventGraphAnimation =
241
+ (lastDataGrouping && lastDataGrouping.totalRange) !==
242
+ (currentDataGrouping && currentDataGrouping.totalRange);
243
+ }
244
+ };
245
+ var skipDataGrouping = function (series) {
246
+ if (series.isCartesian &&
247
+ !series.isDirty &&
248
+ !series.xAxis.isDirty &&
249
+ !series.yAxis.isDirty) {
250
+ return false;
251
+ }
252
+ };
150
253
  var groupData = function (xData, yData, groupPositions, approximation) {
151
254
  var series = this, data = series.data, dataOptions = series.options && series.options.data, groupedXData = [], groupedYData = [], groupMap = [], dataLength = xData.length, pointX, pointY, groupedY,
152
255
  // when grouping the fake extended axis for panning,
@@ -419,6 +522,10 @@ commonOptions = {
419
522
  },
420
523
  ohlc: {
421
524
  groupPixelWidth: 5
525
+ },
526
+ // Move to HeikinAshiSeries.ts aftre refactoring data grouping.
527
+ heikinashi: {
528
+ groupPixelWidth: 10
422
529
  }
423
530
  },
424
531
  // units are defined in a separate array to allow complete overriding in
@@ -482,106 +589,15 @@ seriesProto.getDGApproximation = function () {
482
589
  * @return {void}
483
590
  */
484
591
  seriesProto.groupData = groupData;
485
- // Extend the basic processData method, that crops the data to the current zoom
486
- // range, with data grouping logic.
487
- seriesProto.processData = function () {
488
- var series = this, chart = series.chart, options = series.options, dataGroupingOptions = options.dataGrouping, groupingEnabled = series.allowDG !== false && dataGroupingOptions &&
489
- pick(dataGroupingOptions.enabled, chart.options.isStock), visible = (series.visible || !chart.options.chart.ignoreHiddenSeries), hasGroupedData, skip, lastDataGrouping = this.currentDataGrouping, currentDataGrouping, croppedData, revertRequireSorting = false;
490
- // Run base method
491
- series.forceCrop = groupingEnabled; // #334
492
- series.groupPixelWidth = null; // #2110
493
- series.hasProcessed = true; // #2692
494
- // Data needs to be sorted for dataGrouping
495
- if (groupingEnabled && !series.requireSorting) {
496
- series.requireSorting = revertRequireSorting = true;
497
- }
498
- // Skip if processData returns false or if grouping is disabled (in that
499
- // order)
500
- skip = (baseProcessData.apply(series, arguments) === false ||
501
- !groupingEnabled);
502
- // Revert original requireSorting value if changed
503
- if (revertRequireSorting) {
504
- series.requireSorting = false;
505
- }
506
- if (!skip) {
507
- series.destroyGroupedData();
508
- var i = void 0, processedXData = dataGroupingOptions.groupAll ?
509
- series.xData :
510
- series.processedXData, processedYData = dataGroupingOptions.groupAll ?
511
- series.yData :
512
- series.processedYData, plotSizeX = chart.plotSizeX, xAxis = series.xAxis, ordinal = xAxis.options.ordinal, groupPixelWidth = series.groupPixelWidth =
513
- xAxis.getGroupPixelWidth && xAxis.getGroupPixelWidth();
514
- // Execute grouping if the amount of points is greater than the limit
515
- // defined in groupPixelWidth
516
- if (groupPixelWidth &&
517
- processedXData &&
518
- processedXData.length) {
519
- hasGroupedData = true;
520
- // Force recreation of point instances in series.translate, #5699
521
- series.isDirty = true;
522
- series.points = null; // #6709
523
- var extremes = xAxis.getExtremes(), xMin = extremes.min, xMax = extremes.max, groupIntervalFactor = (ordinal &&
524
- xAxis.ordinal &&
525
- xAxis.ordinal.getGroupIntervalFactor(xMin, xMax, series)) || 1, interval = (groupPixelWidth * (xMax - xMin) / plotSizeX) *
526
- groupIntervalFactor, groupPositions = xAxis.getTimeTicks(DateTimeAxis.AdditionsClass.prototype.normalizeTimeTickInterval(interval, dataGroupingOptions.units ||
527
- defaultDataGroupingUnits),
528
- // Processed data may extend beyond axis (#4907)
529
- Math.min(xMin, processedXData[0]), Math.max(xMax, processedXData[processedXData.length - 1]), xAxis.options.startOfWeek, processedXData, series.closestPointRange), groupedData = seriesProto.groupData.apply(series, [
530
- processedXData,
531
- processedYData,
532
- groupPositions,
533
- dataGroupingOptions.approximation
534
- ]), groupedXData = groupedData.groupedXData, groupedYData = groupedData.groupedYData, gapSize = 0;
535
- // The smoothed option is deprecated, instead,
536
- // there is a fallback to the new anchoring mechanism. #12455.
537
- if (dataGroupingOptions && dataGroupingOptions.smoothed && groupedXData.length) {
538
- dataGroupingOptions.firstAnchor = 'firstPoint';
539
- dataGroupingOptions.anchor = 'middle';
540
- dataGroupingOptions.lastAnchor = 'lastPoint';
541
- error(32, false, chart, { 'dataGrouping.smoothed': 'use dataGrouping.anchor' });
542
- }
543
- anchorPoints(series, groupedXData, xMax);
544
- // Record what data grouping values were used
545
- for (i = 1; i < groupPositions.length; i++) {
546
- // The grouped gapSize needs to be the largest distance between
547
- // the group to capture varying group sizes like months or DST
548
- // crossing (#10000). Also check that the gap is not at the
549
- // start of a segment.
550
- if (!groupPositions.info.segmentStarts ||
551
- groupPositions.info.segmentStarts.indexOf(i) === -1) {
552
- gapSize = Math.max(groupPositions[i] - groupPositions[i - 1], gapSize);
553
- }
554
- }
555
- currentDataGrouping = groupPositions.info;
556
- currentDataGrouping.gapSize = gapSize;
557
- series.closestPointRange = groupPositions.info.totalRange;
558
- series.groupMap = groupedData.groupMap;
559
- if (visible) {
560
- adjustExtremes(xAxis, groupedXData);
561
- }
562
- // We calculated all group positions but we should render
563
- // only the ones within the visible range
564
- if (dataGroupingOptions.groupAll) {
565
- croppedData = series.cropData(groupedXData, groupedYData, xAxis.min, xAxis.max, 1 // Ordinal xAxis will remove left-most points otherwise
566
- );
567
- groupedXData = croppedData.xData;
568
- groupedYData = croppedData.yData;
569
- series.cropStart = croppedData.start; // #15005
570
- }
571
- // Set series props
572
- series.processedXData = groupedXData;
573
- series.processedYData = groupedYData;
574
- }
575
- else {
576
- series.groupMap = null;
577
- }
578
- series.hasGroupedData = hasGroupedData;
579
- series.currentDataGrouping = currentDataGrouping;
580
- series.preventGraphAnimation =
581
- (lastDataGrouping && lastDataGrouping.totalRange) !==
582
- (currentDataGrouping && currentDataGrouping.totalRange);
583
- }
584
- };
592
+ /**
593
+ * For the processed data, calculate the grouped data if needed.
594
+ *
595
+ * @private
596
+ * @function Highcharts.Series#applyGrouping
597
+ *
598
+ * @return {void}
599
+ */
600
+ seriesProto.applyGrouping = applyGrouping;
585
601
  // Destroy the grouped data points. #622, #740
586
602
  seriesProto.destroyGroupedData = function () {
587
603
  // Clear previous groups
@@ -607,6 +623,112 @@ seriesProto.generatePoints = function () {
607
623
  this.destroyGroupedData(); // #622
608
624
  this.groupedData = this.hasGroupedData ? this.points : null;
609
625
  };
626
+ /**
627
+ * Check the groupPixelWidth and apply the grouping if needed.
628
+ * Fired only after processing the data.
629
+ *
630
+ * @product highstock
631
+ *
632
+ * @function Highcharts.Axis#applyGrouping
633
+ */
634
+ Axis.prototype.applyGrouping = function () {
635
+ var axis = this, series = axis.series;
636
+ series.forEach(function (series) {
637
+ // Reset the groupPixelWidth, then calculate if needed.
638
+ series.groupPixelWidth = void 0; // #2110
639
+ series.groupPixelWidth = axis.getGroupPixelWidth && axis.getGroupPixelWidth();
640
+ if (series.groupPixelWidth) {
641
+ series.hasProcessed = true; // #2692
642
+ }
643
+ // Fire independing on series.groupPixelWidth to always set a proper
644
+ // dataGrouping state, (#16238)
645
+ series.applyGrouping();
646
+ });
647
+ };
648
+ // Get the data grouping pixel width based on the greatest defined individual
649
+ // width of the axis' series, and if whether one of the axes need grouping.
650
+ Axis.prototype.getGroupPixelWidth = function () {
651
+ var series = this.series, len = series.length, i, groupPixelWidth = 0, doGrouping = false, dataLength, dgOptions;
652
+ // If multiple series are compared on the same x axis, give them the same
653
+ // group pixel width (#334)
654
+ i = len;
655
+ while (i--) {
656
+ dgOptions = series[i].options.dataGrouping;
657
+ if (dgOptions) {
658
+ groupPixelWidth = Math.max(groupPixelWidth,
659
+ // Fallback to commonOptions (#9693)
660
+ pick(dgOptions.groupPixelWidth, commonOptions.groupPixelWidth));
661
+ }
662
+ }
663
+ // If one of the series needs grouping, apply it to all (#1634)
664
+ i = len;
665
+ while (i--) {
666
+ dgOptions = series[i].options.dataGrouping;
667
+ if (dgOptions) { // #2692
668
+ dataLength = (series[i].processedXData || series[i].data).length;
669
+ // Execute grouping if the amount of points is greater than the
670
+ // limit defined in groupPixelWidth
671
+ if (series[i].groupPixelWidth ||
672
+ dataLength >
673
+ (this.chart.plotSizeX / groupPixelWidth) ||
674
+ (dataLength && dgOptions.forced)) {
675
+ doGrouping = true;
676
+ }
677
+ }
678
+ }
679
+ return doGrouping ? groupPixelWidth : 0;
680
+ };
681
+ /**
682
+ * Highcharts Stock only. Force data grouping on all the axis' series.
683
+ *
684
+ * @product highstock
685
+ *
686
+ * @function Highcharts.Axis#setDataGrouping
687
+ *
688
+ * @param {boolean|Highcharts.DataGroupingOptionsObject} [dataGrouping]
689
+ * A `dataGrouping` configuration. Use `false` to disable data grouping
690
+ * dynamically.
691
+ *
692
+ * @param {boolean} [redraw=true]
693
+ * Whether to redraw the chart or wait for a later call to
694
+ * {@link Chart#redraw}.
695
+ */
696
+ Axis.prototype.setDataGrouping = function (dataGrouping, redraw) {
697
+ var axis = this;
698
+ var i;
699
+ redraw = pick(redraw, true);
700
+ if (!dataGrouping) {
701
+ dataGrouping = {
702
+ forced: false,
703
+ units: null
704
+ };
705
+ }
706
+ // Axis is instantiated, update all series
707
+ if (this instanceof Axis) {
708
+ i = this.series.length;
709
+ while (i--) {
710
+ this.series[i].update({
711
+ dataGrouping: dataGrouping
712
+ }, false);
713
+ }
714
+ // Axis not yet instanciated, alter series options
715
+ }
716
+ else {
717
+ this.chart.options.series.forEach(function (seriesOptions) {
718
+ seriesOptions.dataGrouping = dataGrouping;
719
+ }, false);
720
+ }
721
+ // Clear ordinal slope, so we won't accidentaly use the old one (#7827)
722
+ if (axis.ordinal) {
723
+ axis.ordinal.slope = void 0;
724
+ }
725
+ if (redraw) {
726
+ this.chart.redraw();
727
+ }
728
+ };
729
+ // When all series are processed, calculate the group pixel width and then
730
+ // if this value is different than zero apply groupings.
731
+ addEvent(Axis, 'postProcessData', Axis.prototype.applyGrouping);
610
732
  // Override point prototype to throw a warning when trying to update grouped
611
733
  // points.
612
734
  addEvent(Point, 'update', function () {
@@ -618,7 +740,7 @@ addEvent(Point, 'update', function () {
618
740
  // Extend the original method, make the tooltip's header reflect the grouped
619
741
  // range.
620
742
  addEvent(Tooltip, 'headerFormatter', function (e) {
621
- var tooltip = this, chart = this.chart, time = chart.time, labelConfig = e.labelConfig, series = labelConfig.series, options = series.options, tooltipOptions = series.tooltipOptions, dataGroupingOptions = options.dataGrouping, xDateFormat = tooltipOptions.xDateFormat, xDateFormatEnd, xAxis = series.xAxis, currentDataGrouping, dateTimeLabelFormats, labelFormats, formattedKey, formatString = tooltipOptions[(e.isFooter ? 'footer' : 'header') + 'Format'];
743
+ var tooltip = this, chart = this.chart, time = chart.time, labelConfig = e.labelConfig, series = labelConfig.series, options = series.options, tooltipOptions = series.tooltipOptions, dataGroupingOptions = options.dataGrouping, xDateFormat = tooltipOptions.xDateFormat, xDateFormatEnd, xAxis = series.xAxis, currentDataGrouping, dateTimeLabelFormats, labelFormats, formattedKey, formatString = tooltipOptions[e.isFooter ? 'footerFormat' : 'headerFormat'];
622
744
  // apply only to grouped series
623
745
  if (xAxis &&
624
746
  xAxis.options.type === 'datetime' &&
@@ -645,8 +767,8 @@ addEvent(Tooltip, 'headerFormatter', function (e) {
645
767
  // best fit, so if the least distance between points is one minute, show
646
768
  // it, but if the least distance is one day, skip hours and minutes etc.
647
769
  }
648
- else if (!xDateFormat && dateTimeLabelFormats) {
649
- xDateFormat = tooltip.getXDateFormat(labelConfig, tooltipOptions, xAxis);
770
+ else if (!xDateFormat && dateTimeLabelFormats && xAxis.dateTime) {
771
+ xDateFormat = xAxis.dateTime.getXDateFormat(labelConfig.x, tooltipOptions.dateTimeLabelFormats);
650
772
  }
651
773
  // now format the key
652
774
  formattedKey = time.dateFormat(xDateFormat, labelConfig.key);
@@ -695,87 +817,6 @@ addEvent(Axis, 'afterSetScale', function () {
695
817
  series.hasProcessed = false;
696
818
  });
697
819
  });
698
- // Get the data grouping pixel width based on the greatest defined individual
699
- // width of the axis' series, and if whether one of the axes need grouping.
700
- Axis.prototype.getGroupPixelWidth = function () {
701
- var series = this.series, len = series.length, i, groupPixelWidth = 0, doGrouping = false, dataLength, dgOptions;
702
- // If multiple series are compared on the same x axis, give them the same
703
- // group pixel width (#334)
704
- i = len;
705
- while (i--) {
706
- dgOptions = series[i].options.dataGrouping;
707
- if (dgOptions) {
708
- groupPixelWidth = Math.max(groupPixelWidth,
709
- // Fallback to commonOptions (#9693)
710
- pick(dgOptions.groupPixelWidth, commonOptions.groupPixelWidth));
711
- }
712
- }
713
- // If one of the series needs grouping, apply it to all (#1634)
714
- i = len;
715
- while (i--) {
716
- dgOptions = series[i].options.dataGrouping;
717
- if (dgOptions && series[i].hasProcessed) { // #2692
718
- dataLength = (series[i].processedXData || series[i].data).length;
719
- // Execute grouping if the amount of points is greater than the
720
- // limit defined in groupPixelWidth
721
- if (series[i].groupPixelWidth ||
722
- dataLength >
723
- (this.chart.plotSizeX / groupPixelWidth) ||
724
- (dataLength && dgOptions.forced)) {
725
- doGrouping = true;
726
- }
727
- }
728
- }
729
- return doGrouping ? groupPixelWidth : 0;
730
- };
731
- /**
732
- * Highcharts Stock only. Force data grouping on all the axis' series.
733
- *
734
- * @product highstock
735
- *
736
- * @function Highcharts.Axis#setDataGrouping
737
- *
738
- * @param {boolean|Highcharts.DataGroupingOptionsObject} [dataGrouping]
739
- * A `dataGrouping` configuration. Use `false` to disable data grouping
740
- * dynamically.
741
- *
742
- * @param {boolean} [redraw=true]
743
- * Whether to redraw the chart or wait for a later call to
744
- * {@link Chart#redraw}.
745
- */
746
- Axis.prototype.setDataGrouping = function (dataGrouping, redraw) {
747
- var axis = this;
748
- var i;
749
- redraw = pick(redraw, true);
750
- if (!dataGrouping) {
751
- dataGrouping = {
752
- forced: false,
753
- units: null
754
- };
755
- }
756
- // Axis is instantiated, update all series
757
- if (this instanceof Axis) {
758
- i = this.series.length;
759
- while (i--) {
760
- this.series[i].update({
761
- dataGrouping: dataGrouping
762
- }, false);
763
- }
764
- // Axis not yet instanciated, alter series options
765
- }
766
- else {
767
- this.chart.options.series.forEach(function (seriesOptions) {
768
- seriesOptions.dataGrouping = dataGrouping;
769
- }, false);
770
- }
771
- // Clear ordinal slope, so we won't accidentaly use the old one (#7827)
772
- if (axis.ordinal) {
773
- axis.ordinal.slope = void 0;
774
- }
775
- if (redraw) {
776
- this.chart.redraw();
777
- }
778
- };
779
820
  H.dataGrouping = dataGrouping;
780
821
  export default dataGrouping;
781
822
  /* eslint-enable no-invalid-this, valid-jsdoc */
@@ -11,8 +11,8 @@
11
11
  var errorMessages = {
12
12
  "10": {
13
13
  "title": "Can't plot zero or subzero values on a logarithmic axis",
14
- "text": "<h1>Can't plot zero or subzero values on a logarithmic axis</h1><p>This error occurs in the following situations: </p><ul><li>If a zero or subzero data value is added to a logarithmic axis</li><li>If the minimum of a logarithimic axis is set to 0 or less</li><li>If the threshold is set to 0 or less</li></ul><p>Note: As of Highcharts 5.0.8 it's possible to bypass this error message by setting <code>Axis.prototype.allowNegativeLog</code> to true, and add custom conversion functions. <a href=\"https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/samples/highcharts/yaxis/type-log-negative/\">View live demo</a>. It is also possible to use a similar workaround for colorAxis. <a href=\"https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/samples/highcharts/coloraxis/logarithmic-with-emulate-negative-values/\">View live demo</a>.</p>",
15
- "enduser": "<h1>Can't plot zero or subzero values on a logarithmic axis</h1><p>This error occurs in the following situations:</p><ul><li>If a zero or subzero data value is added to a logarithmic axis</li><li>If the minimum of a logarithimic axis is set to 0 or less</li><li>If the threshold is set to 0 or less</li></ul><p>As of Highcharts 5.0.8 it's possible to bypass this error message by setting <code>Axis.prototype.allowNegativeLog</code> to <code>true</code> and add custom conversion functions. <a href=\"http://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/samples/highcharts/yaxis/type-log-negative/\">\">View Live Demo</a>. It is also possible to use a similar workaround for colorAxis. <a href=\"https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/samples/highcharts/coloraxis/logarithmic-with-emulate-negative-values/\">View live demo</a>.</p>"
14
+ "text": "<h1>Can't plot zero or subzero values on a logarithmic axis</h1><p>This error occurs in the following situations: </p><ul><li>If a zero or subzero data value is added to a logarithmic axis</li><li>If the minimum of a logarithimic axis is set to 0 or less</li><li>If the threshold is set to 0 or less</li></ul><p>Note: As of Highcharts 5.0.8 it's possible to bypass this error message by setting <code>Axis.prototype.allowNegativeLog</code> to true, and add custom conversion functions. <a href=\"https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/yaxis/type-log-negative/\">View live demo</a>. It is also possible to use a similar workaround for colorAxis. <a href=\"https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/coloraxis/logarithmic-with-emulate-negative-values/\">View live demo</a>.</p>",
15
+ "enduser": "<h1>Can't plot zero or subzero values on a logarithmic axis</h1><p>This error occurs in the following situations:</p><ul><li>If a zero or subzero data value is added to a logarithmic axis</li><li>If the minimum of a logarithimic axis is set to 0 or less</li><li>If the threshold is set to 0 or less</li></ul><p>As of Highcharts 5.0.8 it's possible to bypass this error message by setting <code>Axis.prototype.allowNegativeLog</code> to <code>true</code> and add custom conversion functions. <a href=\"http://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/yaxis/type-log-negative/\">\">View Live Demo</a>. It is also possible to use a similar workaround for colorAxis. <a href=\"https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/coloraxis/logarithmic-with-emulate-negative-values/\">View live demo</a>.</p>"
16
16
  },
17
17
  "11": {
18
18
  "title": "Can't link axes of different type",
@@ -19,7 +19,7 @@ import Series from '../Core/Series/Series.js';
19
19
  import SeriesRegistry from '../Core/Series/SeriesRegistry.js';
20
20
  var seriesTypes = SeriesRegistry.seriesTypes;
21
21
  import U from '../Core/Utilities.js';
22
- var addEvent = U.addEvent, clamp = U.clamp, merge = U.merge, objectEach = U.objectEach, pick = U.pick;
22
+ var addEvent = U.addEvent, clamp = U.clamp, isNumber = U.isNumber, merge = U.merge, objectEach = U.objectEach, pick = U.pick;
23
23
  /**
24
24
  * Flip a side property, used with resizeRect. If input side is "left", return
25
25
  * "right" etc.
@@ -1631,11 +1631,19 @@ Series.prototype.getGuideBox = function (points) {
1631
1631
  // Find bounding box of all points
1632
1632
  points.forEach(function (point) {
1633
1633
  var bBox = point.graphic && point.graphic.getBBox() || point.shapeArgs;
1634
- if (bBox && (bBox.width || bBox.height || bBox.x || bBox.y)) {
1634
+ if (bBox) {
1635
+ var plotX2 = void 0;
1636
+ var x2 = point.x2;
1637
+ if (isNumber(x2)) {
1638
+ plotX2 = point.series.xAxis.translate(x2, false, false, false, true);
1639
+ }
1640
+ // Avoid a 0 min when some of the points being dragged are
1641
+ // completely outside the plot
1642
+ var skipBBox = !(bBox.width || bBox.height || bBox.x || bBox.y);
1635
1643
  changed = true;
1636
- minX = Math.min(point.plotX || 0, bBox.x || 0, minX);
1637
- maxX = Math.max((bBox.x || 0) + (bBox.width || 0), maxX);
1638
- minY = Math.min(point.plotY || 0, bBox.y || 0, minY);
1644
+ minX = Math.min(point.plotX || 0, plotX2 || 0, skipBBox ? Infinity : bBox.x || 0, minX);
1645
+ maxX = Math.max(point.plotX || 0, plotX2 || 0, (bBox.x || 0) + (bBox.width || 0), maxX);
1646
+ minY = Math.min(point.plotY || 0, skipBBox ? Infinity : bBox.y || 0, minY);
1639
1647
  maxY = Math.max((bBox.y || 0) + (bBox.height || 0), maxY);
1640
1648
  }
1641
1649
  });
@@ -521,7 +521,7 @@ Chart.prototype.addSingleSeriesAsDrilldown = function (point, ddOptions) {
521
521
  // no graphic in line series with markers disabled
522
522
  bBox: point.graphic ? point.graphic.getBBox() : {},
523
523
  color: point.isNull ?
524
- new Color(colorProp.color).setOpacity(0).get() :
524
+ Color.parse(colorProp.color).setOpacity(0).get() :
525
525
  colorProp.color,
526
526
  lowerSeriesOptions: ddOptions,
527
527
  pointOptions: oldSeries.options.data[pointIndex],
@@ -586,7 +586,7 @@ Chart.prototype.getDrilldownBackText = function () {
586
586
  if (drilldownLevels && drilldownLevels.length > 0) { // #3352, async loading
587
587
  lastLevel = drilldownLevels[drilldownLevels.length - 1];
588
588
  lastLevel.series = lastLevel.seriesOptions;
589
- return format(this.options.lang.drillUpText, lastLevel);
589
+ return format(this.options.lang.drillUpText || '', lastLevel);
590
590
  }
591
591
  };
592
592
  Chart.prototype.showDrillUpButton = function () {
@@ -623,6 +623,9 @@ Chart.prototype.showDrillUpButton = function () {
623
623
  * @requires modules/drilldown
624
624
  *
625
625
  * @function Highcharts.Chart#drillUp
626
+ *
627
+ * @sample {highcharts} highcharts/drilldown/programmatic
628
+ * Programmatic drilldown
626
629
  */
627
630
  Chart.prototype.drillUp = function () {
628
631
  if (!this.drilldownLevels || this.drilldownLevels.length === 0) {
@@ -935,8 +938,26 @@ if (PieSeries) {
935
938
  }
936
939
  });
937
940
  }
938
- Point.prototype.doDrilldown = function (_holdRedraw, category, originalEvent) {
939
- var series = this.series, chart = series.chart, drilldown = chart.options.drilldown, i = (drilldown.series || []).length, seriesOptions;
941
+ /**
942
+ * Perform drilldown on a point instance. The [drilldown](https://api.highcharts.com/highcharts/series.line.data.drilldown)
943
+ * property must be set on the point options.
944
+ *
945
+ * To drill down multiple points in the same category, use
946
+ * `Axis.drilldownCategory` instead.
947
+ *
948
+ * @requires modules/drilldown
949
+ *
950
+ * @function Highcharts.Point#doDrilldown
951
+ *
952
+ * @sample {highcharts} highcharts/drilldown/programmatic
953
+ * Programmatic drilldown
954
+ */
955
+ Point.prototype.doDrilldown = function () {
956
+ this.runDrilldown();
957
+ };
958
+ Point.prototype.runDrilldown = function (holdRedraw, category, originalEvent) {
959
+ var series = this.series, chart = series.chart, drilldown = chart.options.drilldown;
960
+ var i = (drilldown.series || []).length, seriesOptions;
940
961
  if (!chart.ddDupes) {
941
962
  chart.ddDupes = [];
942
963
  }
@@ -959,7 +980,7 @@ Point.prototype.doDrilldown = function (_holdRedraw, category, originalEvent) {
959
980
  }, function (e) {
960
981
  var chart = e.point.series && e.point.series.chart, seriesOptions = e.seriesOptions;
961
982
  if (chart && seriesOptions) {
962
- if (_holdRedraw) {
983
+ if (holdRedraw) {
963
984
  chart.addSingleSeriesAsDrilldown(e.point, seriesOptions);
964
985
  }
965
986
  else {
@@ -970,22 +991,28 @@ Point.prototype.doDrilldown = function (_holdRedraw, category, originalEvent) {
970
991
  };
971
992
  /**
972
993
  * Drill down to a given category. This is the same as clicking on an axis
973
- * label.
994
+ * label. If multiple series with drilldown are present, all will drill down to
995
+ * the given category.
996
+ *
997
+ * See also `Point.doDrilldown` for drilling down on a single point instance.
974
998
  *
975
- * @private
976
999
  * @function Highcharts.Axis#drilldownCategory
1000
+ *
1001
+ * @sample {highcharts} highcharts/drilldown/programmatic
1002
+ * Programmatic drilldown
1003
+ *
977
1004
  * @param {number} x
978
- * Tick position
979
- * @param {global.MouseEvent} e
980
- * Click event
1005
+ * The index of the category
1006
+ * @param {global.MouseEvent} [originalEvent]
1007
+ * The original event, used internally.
981
1008
  */
982
- Axis.prototype.drilldownCategory = function (x, e) {
1009
+ Axis.prototype.drilldownCategory = function (x, originalEvent) {
983
1010
  this.getDDPoints(x).forEach(function (point) {
984
1011
  if (point &&
985
1012
  point.series &&
986
1013
  point.series.visible &&
987
- point.doDrilldown) { // #3197
988
- point.doDrilldown(true, x, e);
1014
+ point.runDrilldown) { // #3197
1015
+ point.runDrilldown(true, x, originalEvent);
989
1016
  }
990
1017
  });
991
1018
  this.chart.applyDrilldown();
@@ -1071,7 +1098,7 @@ var handlePointClick = function (e) {
1071
1098
  series.xAxis.drilldownCategory(point.x, e);
1072
1099
  }
1073
1100
  else {
1074
- point.doDrilldown(void 0, void 0, e);
1101
+ point.runDrilldown(void 0, void 0, e);
1075
1102
  }
1076
1103
  };
1077
1104
  addEvent(Series, 'afterDrawDataLabels', function () {
@@ -835,7 +835,7 @@ function getBlobFromContent(content, type) {
835
835
  nav.userAgent.indexOf('Chrome') < 0), domurl = win.URL || win.webkitURL || win;
836
836
  try {
837
837
  // MS specific
838
- if (nav.msSaveOrOpenBlob && win.MSBlobBuilder) {
838
+ if ((nav.msSaveOrOpenBlob) && win.MSBlobBuilder) {
839
839
  var blob = new win.MSBlobBuilder();
840
840
  blob.append(content);
841
841
  return blob.getBlob('image/svg+xml');
@@ -851,6 +851,7 @@ function getBlobFromContent(content, type) {
851
851
  // Ignore
852
852
  }
853
853
  }
854
+ /* eslint-disable valid-jsdoc */
854
855
  /**
855
856
  * Generates a data URL of CSV for local download in the browser. This is the
856
857
  * default action for a click on the 'Download CSV' button.
@@ -949,9 +950,11 @@ Chart.prototype.toggleDataTable = function (show) {
949
950
  lang.viewData &&
950
951
  lang.hideData &&
951
952
  menuItems &&
952
- exportDivElements &&
953
- exportDivElements.length) {
954
- AST.setElementHTML(exportDivElements[menuItems.indexOf('viewData')], this.isDataTableVisible ? lang.hideData : lang.viewData);
953
+ exportDivElements) {
954
+ var exportDivElement = exportDivElements[menuItems.indexOf('viewData')];
955
+ if (exportDivElement) {
956
+ AST.setElementHTML(exportDivElement, this.isDataTableVisible ? lang.hideData : lang.viewData);
957
+ }
955
958
  }
956
959
  };
957
960
  // Add "Download CSV" to the exporting menu.