highcharts 10.2.0 → 10.2.1

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 (763) hide show
  1. package/bower.json +1 -1
  2. package/css/highcharts.css +10 -20
  3. package/css/themes/dark-unica.css +10 -20
  4. package/css/themes/grid-light.css +10 -20
  5. package/css/themes/sand-signika.css +10 -20
  6. package/es-modules/Accessibility/Accessibility.js +6 -0
  7. package/es-modules/Accessibility/Components/LegendComponent.js +8 -8
  8. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +3 -2
  9. package/es-modules/Accessibility/Options/A11yDefaults.js +1 -1
  10. package/es-modules/Core/Axis/Axis.js +3 -0
  11. package/es-modules/Core/Axis/Axis3D.js +1 -1
  12. package/es-modules/Core/Axis/AxisDefaults.js +1 -1
  13. package/es-modules/Core/Axis/BrokenAxis.js +1 -1
  14. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +4 -0
  15. package/es-modules/Core/Axis/NavigatorAxis.js +2 -2
  16. package/es-modules/Core/Axis/OrdinalAxis.js +2 -2
  17. package/es-modules/Core/Axis/RadialAxis.js +1 -1
  18. package/es-modules/Core/Axis/Stacking/StackItem.js +262 -0
  19. package/es-modules/Core/Axis/Stacking/StackingAxis.js +468 -0
  20. package/es-modules/Core/Axis/TreeGrid/TreeGridAxis.js +732 -0
  21. package/es-modules/Core/Axis/TreeGrid/TreeGridTick.js +313 -0
  22. package/es-modules/Core/Axis/WaterfallAxis.js +1 -1
  23. package/es-modules/Core/Axis/ZAxis.js +73 -70
  24. package/es-modules/Core/Chart/Chart.js +16 -2
  25. package/es-modules/Core/Chart/Chart3D.js +2 -2
  26. package/es-modules/Core/Chart/ChartDefaults.js +151 -2
  27. package/es-modules/Core/Chart/StockChart.js +5 -3
  28. package/es-modules/Core/DefaultOptions.js +2 -1
  29. package/es-modules/Core/Geometry/CircleUtilities.js +4 -4
  30. package/es-modules/Core/Globals.js +2 -1
  31. package/es-modules/{Extensions → Core}/Math3D.js +48 -43
  32. package/es-modules/Core/Navigator.js +24 -7
  33. package/es-modules/Core/Pointer.js +7 -9
  34. package/es-modules/Core/Renderer/HTML/AST.js +4 -1
  35. package/es-modules/Core/Renderer/SVG/SVGElement.js +103 -163
  36. package/es-modules/Core/Renderer/SVG/SVGLabel.js +29 -27
  37. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +3 -3
  38. package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +1 -1
  39. package/es-modules/Core/Renderer/SVG/TextBuilder.js +5 -3
  40. package/es-modules/Core/Scrollbar.js +3 -1
  41. package/es-modules/Core/Series/DataLabel.js +8 -6
  42. package/es-modules/Core/Series/Point.js +2 -2
  43. package/es-modules/Core/Series/Series.js +36 -31
  44. package/es-modules/Core/Series/Series3D.js +1 -1
  45. package/es-modules/Core/Series/SeriesDefaults.js +8 -3
  46. package/es-modules/Core/Series/SeriesRegistry.js +6 -29
  47. package/es-modules/Core/Tooltip.js +14 -3
  48. package/es-modules/Core/Utilities.js +1 -3
  49. package/es-modules/Data/DataConverter.js +5 -0
  50. package/es-modules/Data/DataPromise.js +1 -1
  51. package/es-modules/Data/DataSeriesComposition.js +288 -0
  52. package/es-modules/Data/DataSeriesConverter.js +1 -1
  53. package/es-modules/Data/DataTable.js +2 -2
  54. package/es-modules/Data/Modifiers/ChainModifier.js +1 -1
  55. package/es-modules/Data/Modifiers/DataModifier.js +1 -1
  56. package/es-modules/Data/Modifiers/GroupModifier.js +1 -1
  57. package/es-modules/Data/Modifiers/InvertModifier.js +1 -1
  58. package/es-modules/Data/Modifiers/RangeModifier.js +1 -1
  59. package/es-modules/Data/Modifiers/SeriesPointsModifier.js +1 -1
  60. package/es-modules/Data/Modifiers/SortModifier.js +1 -1
  61. package/es-modules/Data/Parsers/DataParser.js +1 -1
  62. package/es-modules/Data/Stores/DataStore.js +1 -1
  63. package/es-modules/Extensions/Annotations/Annotation.js +347 -1156
  64. package/es-modules/Extensions/Annotations/AnnotationChart.js +291 -0
  65. package/es-modules/Extensions/Annotations/AnnotationDefaults.js +624 -0
  66. package/es-modules/Extensions/Annotations/ControlPoint.js +89 -64
  67. package/es-modules/Extensions/Annotations/{Mixins/ControllableMixin.js → Controllables/Controllable.js} +300 -241
  68. package/es-modules/Extensions/Annotations/Controllables/ControllableCircle.js +63 -50
  69. package/es-modules/Extensions/Annotations/Controllables/ControllableDefaults.js +95 -0
  70. package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +90 -61
  71. package/es-modules/Extensions/Annotations/Controllables/ControllableImage.js +50 -44
  72. package/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +95 -78
  73. package/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +167 -51
  74. package/es-modules/Extensions/Annotations/Controllables/ControllableRect.js +53 -52
  75. package/es-modules/Extensions/Annotations/{Mixins/EventEmitterMixin.js → EventEmitter.js} +136 -116
  76. package/es-modules/Extensions/Annotations/MockPoint.js +210 -145
  77. package/es-modules/Extensions/Annotations/NavigationBindings.js +272 -674
  78. package/es-modules/Extensions/Annotations/NavigationBindingsDefaults.js +396 -0
  79. package/es-modules/Extensions/Annotations/NavigationBindingsUtilities.js +98 -0
  80. package/es-modules/Extensions/Annotations/Popup/Popup.js +295 -0
  81. package/es-modules/Extensions/Annotations/Popup/PopupAnnotations.js +177 -0
  82. package/es-modules/Extensions/Annotations/Popup/PopupComposition.js +81 -0
  83. package/es-modules/Extensions/Annotations/Popup/PopupIndicators.js +609 -0
  84. package/es-modules/Extensions/Annotations/Popup/PopupTabs.js +134 -0
  85. package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +10 -14
  86. package/es-modules/Extensions/Annotations/Types/CrookedLine.js +11 -19
  87. package/es-modules/Extensions/Annotations/Types/ElliottWave.js +10 -10
  88. package/es-modules/Extensions/Annotations/Types/Fibonacci.js +28 -20
  89. package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +63 -63
  90. package/es-modules/Extensions/Annotations/Types/InfinityLine.js +10 -19
  91. package/es-modules/Extensions/Annotations/Types/Measure.js +255 -249
  92. package/es-modules/Extensions/Annotations/Types/Pitchfork.js +11 -17
  93. package/es-modules/Extensions/Annotations/Types/TimeCycles.js +20 -17
  94. package/es-modules/Extensions/Annotations/Types/Tunnel.js +12 -13
  95. package/es-modules/Extensions/Annotations/Types/VerticalLine.js +11 -15
  96. package/es-modules/Extensions/Boost/Boost.js +320 -15
  97. package/es-modules/Extensions/Boost/BoostChart.js +245 -0
  98. package/es-modules/Extensions/Boost/BoostSeries.js +927 -0
  99. package/es-modules/Extensions/Boost/BoostableMap.js +21 -5
  100. package/es-modules/Extensions/Boost/Boostables.js +13 -2
  101. package/es-modules/Extensions/Boost/NamedColors.js +15 -6
  102. package/es-modules/Extensions/Boost/WGLDrawMode.js +36 -0
  103. package/es-modules/Extensions/Boost/WGLRenderer.js +288 -295
  104. package/es-modules/Extensions/Boost/WGLShader.js +370 -376
  105. package/es-modules/Extensions/Boost/WGLVertexBuffer.js +192 -0
  106. package/es-modules/Extensions/BoostCanvas.js +62 -46
  107. package/es-modules/Extensions/Breadcrumbs.js +4 -0
  108. package/es-modules/Extensions/DataGrouping.js +65 -27
  109. package/es-modules/Extensions/Debugger/Debugger.js +60 -22
  110. package/es-modules/Extensions/DraggablePoints.js +4 -3
  111. package/es-modules/Extensions/Drilldown.js +7 -8
  112. package/es-modules/Extensions/{ExportData.js → ExportData/ExportData.js} +341 -530
  113. package/es-modules/Extensions/ExportData/ExportDataDefaults.js +272 -0
  114. package/es-modules/Extensions/Exporting/Exporting.js +5 -1
  115. package/es-modules/Extensions/Exporting/ExportingDefaults.js +3 -1
  116. package/es-modules/Extensions/{FullScreen.js → Exporting/Fullscreen.js} +72 -27
  117. package/es-modules/Extensions/MarkerClusters.js +2 -0
  118. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
  119. package/es-modules/Extensions/Oldie/Oldie.js +1 -1
  120. package/es-modules/Extensions/ParallelCoordinates.js +11 -7
  121. package/es-modules/Extensions/ScrollablePlotArea.js +1 -1
  122. package/es-modules/Extensions/SeriesLabel/SeriesLabel.js +2 -2
  123. package/es-modules/Extensions/Sonification/ChartSonify.js +1 -1
  124. package/es-modules/Maps/MapPointer.js +1 -1
  125. package/es-modules/Maps/MapView.js +2 -1
  126. package/es-modules/Series/{Area3DSeries.js → Area3D/Area3DSeries.js} +42 -20
  127. package/es-modules/Series/AreaRange/AreaRangeSeries.js +8 -2
  128. package/es-modules/Series/Bubble/BubbleLegendComposition.js +223 -231
  129. package/es-modules/Series/Bubble/BubbleLegendItem.js +46 -45
  130. package/es-modules/Series/Bubble/BubbleSeries.js +85 -66
  131. package/es-modules/Series/Column/ColumnSeries.js +2 -0
  132. package/es-modules/Series/Column3D/Column3DComposition.js +2 -2
  133. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +1 -1
  134. package/es-modules/Series/Cylinder/CylinderComposition.js +1 -1
  135. package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +24 -11
  136. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +16 -2
  137. package/es-modules/Series/DragNodesComposition.js +166 -0
  138. package/es-modules/Series/Funnel3D/Funnel3DSeries.js +1 -1
  139. package/es-modules/Series/Gantt/GanttSeries.js +1 -1
  140. package/es-modules/Series/GraphLayoutComposition.js +130 -0
  141. package/es-modules/Series/Heatmap/HeatmapSeries.js +5 -1
  142. package/es-modules/Series/Lollipop/LollipopPoint.js +21 -11
  143. package/es-modules/Series/Lollipop/LollipopSeries.js +15 -10
  144. package/es-modules/Series/Map/MapSeries.js +6 -1
  145. package/es-modules/Series/MapBubble/MapBubblePoint.js +15 -17
  146. package/es-modules/Series/MapBubble/MapBubbleSeries.js +19 -19
  147. package/es-modules/Series/Networkgraph/EulerIntegration.js +199 -0
  148. package/es-modules/Series/Networkgraph/NetworkgraphPoint.js +290 -0
  149. package/es-modules/Series/Networkgraph/NetworkgraphSeries.js +401 -0
  150. package/es-modules/Series/Networkgraph/NetworkgraphSeriesDefaults.js +545 -0
  151. package/es-modules/Series/Networkgraph/QuadTree.js +66 -272
  152. package/es-modules/Series/Networkgraph/QuadTreeNode.js +271 -0
  153. package/es-modules/Series/Networkgraph/{Layouts.js → ReingoldFruchtermanLayout.js} +240 -259
  154. package/es-modules/Series/Networkgraph/VerletIntegration.js +193 -0
  155. package/es-modules/Series/Organization/OrganizationSeries.js +9 -1
  156. package/es-modules/Series/PackedBubble/PackedBubbleIntegration.js +81 -0
  157. package/es-modules/Series/PackedBubble/{PackedBubbleComposition.js → PackedBubbleLayout.js} +114 -77
  158. package/es-modules/Series/PackedBubble/PackedBubblePoint.js +2 -2
  159. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +197 -570
  160. package/es-modules/Series/PackedBubble/PackedBubbleSeriesDefaults.js +394 -0
  161. package/es-modules/Series/Pie/PieSeries.js +3 -1
  162. package/es-modules/Series/PolarComposition.js +12 -12
  163. package/es-modules/Series/Sankey/SankeySeries.js +13 -1
  164. package/es-modules/Series/Scatter/ScatterSeries.js +4 -1
  165. package/es-modules/Series/Scatter3D/Scatter3DSeries.js +1 -1
  166. package/es-modules/Series/SeriesOnPointComposition.js +5 -1
  167. package/es-modules/Series/SolidGauge/SolidGaugeSeries.js +1 -1
  168. package/es-modules/Series/Sunburst/SunburstPoint.js +5 -6
  169. package/es-modules/Series/Sunburst/SunburstSeries.js +24 -2
  170. package/es-modules/Series/Timeline/TimelineSeries.js +2 -0
  171. package/es-modules/Series/Treemap/TreemapSeries.js +3 -3
  172. package/es-modules/Series/Vector/VectorSeries.js +2 -4
  173. package/es-modules/Series/Wordcloud/WordcloudSeries.js +1 -1
  174. package/es-modules/Series/Wordcloud/WordcloudUtils.js +1 -1
  175. package/es-modules/Series/XRange/XRangePoint.js +54 -45
  176. package/es-modules/Series/XRange/XRangeSeries.js +121 -273
  177. package/es-modules/Series/XRange/XRangeSeriesDefaults.js +211 -0
  178. package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +10 -2
  179. package/es-modules/Stock/Indicators/AD/ADIndicator.js +5 -0
  180. package/es-modules/Stock/Indicators/AO/AOIndicator.js +22 -11
  181. package/es-modules/Stock/Indicators/APO/APOIndicator.js +6 -1
  182. package/es-modules/Stock/Indicators/ATR/ATRIndicator.js +16 -3
  183. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +15 -2
  184. package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +6 -2
  185. package/es-modules/Stock/Indicators/BB/BBIndicator.js +5 -1
  186. package/es-modules/Stock/Indicators/CCI/CCIIndicator.js +16 -3
  187. package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +20 -0
  188. package/es-modules/Stock/Indicators/CMO/CMOIndicator.js +15 -1
  189. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +7 -2
  190. package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +25 -0
  191. package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +5 -0
  192. package/es-modules/Stock/Indicators/DPO/DPOIndicator.js +19 -8
  193. package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +10 -0
  194. package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +34 -15
  195. package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +25 -0
  196. package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +12 -1
  197. package/es-modules/Stock/Indicators/LinearRegression/{LinearRegression.js → LinearRegressionIndicator.js} +11 -1
  198. package/es-modules/Stock/Indicators/LinearRegressionAngle/{LinearRegressionAngle.js → LinearRegressionAngleIndicator.js} +12 -7
  199. package/es-modules/Stock/Indicators/LinearRegressionIntercept/{LinearRegressionIntercept.js → LinearRegressionInterceptIndicator.js} +11 -1
  200. package/es-modules/Stock/Indicators/LinearRegressionSlopes/{LinearRegressionSlopes.js → LinearRegressionSlopesIndicator.js} +11 -1
  201. package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +21 -10
  202. package/es-modules/Stock/Indicators/MFI/MFIIndicator.js +23 -10
  203. package/es-modules/Stock/Indicators/Momentum/MomentumIndicator.js +30 -2
  204. package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +16 -1
  205. package/es-modules/Stock/Indicators/OBV/OBVIndicator.js +10 -0
  206. package/es-modules/Stock/Indicators/PC/PCIndicator.js +13 -8
  207. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +14 -4
  208. package/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +16 -3
  209. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +16 -6
  210. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsPoint.js +16 -12
  211. package/es-modules/Stock/Indicators/PriceEnvelopes/PriceEnvelopesIndicator.js +25 -0
  212. package/es-modules/Stock/Indicators/ROC/ROCIndicator.js +15 -2
  213. package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +20 -2
  214. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +1 -1
  215. package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +25 -0
  216. package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +15 -0
  217. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +17 -3
  218. package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +25 -0
  219. package/es-modules/Stock/Indicators/TrendLine/TrendLineIndicator.js +14 -4
  220. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +32 -3
  221. package/es-modules/Stock/Indicators/VBP/VBPPoint.js +6 -6
  222. package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +11 -1
  223. package/es-modules/Stock/Indicators/WMA/WMAIndicator.js +30 -2
  224. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +10 -0
  225. package/es-modules/Stock/Indicators/Zigzag/ZigzagIndicator.js +11 -1
  226. package/es-modules/Stock/StockToolbar.js +568 -0
  227. package/es-modules/Stock/StockTools.js +256 -0
  228. package/es-modules/Stock/StockToolsBindings.js +114 -629
  229. package/es-modules/Stock/StockToolsDefaults.js +1190 -0
  230. package/es-modules/Stock/StockToolsGui.js +150 -1771
  231. package/es-modules/Stock/StockToolsUtilities.js +423 -0
  232. package/es-modules/masters/highcharts-3d.src.js +5 -4
  233. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  234. package/es-modules/masters/highcharts-more.src.js +4 -3
  235. package/es-modules/masters/highcharts.src.js +5 -2
  236. package/es-modules/masters/highmaps.src.js +1 -1
  237. package/es-modules/masters/highstock.src.js +1 -1
  238. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  239. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  240. package/es-modules/masters/indicators/ao.src.js +1 -1
  241. package/es-modules/masters/indicators/apo.src.js +1 -1
  242. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  243. package/es-modules/masters/indicators/aroon.src.js +1 -1
  244. package/es-modules/masters/indicators/atr.src.js +1 -1
  245. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  246. package/es-modules/masters/indicators/cci.src.js +1 -1
  247. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  248. package/es-modules/masters/indicators/cmf.src.js +1 -1
  249. package/es-modules/masters/indicators/cmo.src.js +1 -1
  250. package/es-modules/masters/indicators/dema.src.js +1 -1
  251. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  252. package/es-modules/masters/indicators/dmi.src.js +1 -1
  253. package/es-modules/masters/indicators/dpo.src.js +1 -1
  254. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  255. package/es-modules/masters/indicators/indicators-all.src.js +5 -7
  256. package/es-modules/masters/indicators/indicators.src.js +1 -1
  257. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  258. package/es-modules/masters/indicators/klinger.src.js +1 -1
  259. package/es-modules/masters/indicators/macd.src.js +1 -1
  260. package/es-modules/masters/indicators/mfi.src.js +1 -1
  261. package/es-modules/masters/indicators/momentum.src.js +1 -1
  262. package/es-modules/masters/indicators/natr.src.js +1 -1
  263. package/es-modules/masters/indicators/obv.src.js +1 -1
  264. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  265. package/es-modules/masters/indicators/ppo.src.js +1 -1
  266. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  267. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  268. package/es-modules/masters/indicators/psar.src.js +1 -1
  269. package/es-modules/masters/indicators/regressions.src.js +5 -5
  270. package/es-modules/masters/indicators/roc.src.js +1 -1
  271. package/es-modules/masters/indicators/rsi.src.js +1 -1
  272. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  273. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  274. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  275. package/es-modules/masters/indicators/tema.src.js +1 -1
  276. package/es-modules/masters/indicators/trendline.src.js +1 -1
  277. package/es-modules/masters/indicators/trix.src.js +1 -1
  278. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  279. package/es-modules/masters/indicators/vwap.src.js +1 -1
  280. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  281. package/es-modules/masters/indicators/wma.src.js +1 -1
  282. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  283. package/es-modules/masters/modules/accessibility.src.js +1 -1
  284. package/es-modules/masters/modules/annotations-advanced.src.js +6 -4
  285. package/es-modules/masters/modules/annotations.src.js +6 -4
  286. package/es-modules/masters/modules/arc-diagram.src.js +1 -1
  287. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  288. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  289. package/es-modules/masters/modules/boost.src.js +6 -2
  290. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  291. package/es-modules/masters/modules/bullet.src.js +1 -1
  292. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  293. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  294. package/es-modules/masters/modules/cylinder.src.js +1 -1
  295. package/es-modules/masters/modules/data.src.js +1 -1
  296. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  297. package/es-modules/masters/modules/debugger.src.js +5 -3
  298. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  299. package/es-modules/masters/modules/dotplot.src.js +1 -1
  300. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  301. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  302. package/es-modules/masters/modules/drilldown.src.js +1 -1
  303. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  304. package/es-modules/masters/modules/export-data.src.js +5 -2
  305. package/es-modules/masters/modules/exporting.src.js +1 -2
  306. package/es-modules/masters/modules/full-screen.src.js +6 -2
  307. package/es-modules/masters/modules/funnel.src.js +1 -1
  308. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  309. package/es-modules/masters/modules/gantt.src.js +3 -2
  310. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  311. package/es-modules/masters/modules/heatmap.src.js +1 -1
  312. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  313. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  314. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  315. package/es-modules/masters/modules/item-series.src.js +1 -1
  316. package/es-modules/masters/modules/lollipop.src.js +1 -1
  317. package/es-modules/masters/modules/map.src.js +2 -2
  318. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  319. package/es-modules/masters/modules/networkgraph.src.js +5 -2
  320. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  321. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  322. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  323. package/es-modules/masters/modules/oldie.src.js +1 -1
  324. package/es-modules/masters/modules/organization.src.js +1 -1
  325. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  326. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  327. package/es-modules/masters/modules/pareto.src.js +1 -1
  328. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  329. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  330. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  331. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  332. package/es-modules/masters/modules/sankey.src.js +1 -1
  333. package/es-modules/masters/modules/series-label.src.js +1 -1
  334. package/es-modules/masters/modules/series-on-point.src.js +1 -1
  335. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  336. package/es-modules/masters/modules/sonification.src.js +1 -1
  337. package/es-modules/masters/modules/static-scale.src.js +1 -1
  338. package/es-modules/masters/modules/stock-tools.src.js +10 -3
  339. package/es-modules/masters/modules/stock.src.js +1 -1
  340. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  341. package/es-modules/masters/modules/sunburst.src.js +1 -1
  342. package/es-modules/masters/modules/tilemap.src.js +1 -1
  343. package/es-modules/masters/modules/timeline.src.js +1 -1
  344. package/es-modules/masters/modules/treegrid.src.js +2 -2
  345. package/es-modules/masters/modules/treemap.src.js +1 -1
  346. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  347. package/es-modules/masters/modules/variwide.src.js +1 -1
  348. package/es-modules/masters/modules/vector.src.js +1 -1
  349. package/es-modules/masters/modules/venn.src.js +1 -1
  350. package/es-modules/masters/modules/windbarb.src.js +1 -1
  351. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  352. package/es-modules/masters/modules/xrange.src.js +5 -2
  353. package/es-modules/masters/themes/avocado.src.js +1 -1
  354. package/es-modules/masters/themes/brand-dark.src.js +1 -1
  355. package/es-modules/masters/themes/brand-light.src.js +1 -1
  356. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  357. package/es-modules/masters/themes/dark-green.src.js +1 -1
  358. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  359. package/es-modules/masters/themes/gray.src.js +1 -1
  360. package/es-modules/masters/themes/grid-light.src.js +1 -1
  361. package/es-modules/masters/themes/grid.src.js +1 -1
  362. package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  363. package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  364. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  365. package/es-modules/masters/themes/skies.src.js +1 -1
  366. package/es-modules/masters/themes/sunset.src.js +1 -1
  367. package/highcharts-3d.js +98 -99
  368. package/highcharts-3d.js.map +1 -1
  369. package/highcharts-3d.src.js +232 -211
  370. package/highcharts-gantt.js +808 -809
  371. package/highcharts-gantt.js.map +1 -1
  372. package/highcharts-gantt.src.js +2308 -2136
  373. package/highcharts-more.d.ts +5 -8
  374. package/highcharts-more.js +201 -194
  375. package/highcharts-more.js.map +1 -1
  376. package/highcharts-more.src.d.ts +5 -8
  377. package/highcharts-more.src.js +3671 -3275
  378. package/highcharts.d.ts +1400 -885
  379. package/highcharts.js +593 -595
  380. package/highcharts.js.map +1 -1
  381. package/highcharts.src.d.ts +1400 -885
  382. package/highcharts.src.js +847 -716
  383. package/highmaps.js +762 -763
  384. package/highmaps.js.map +1 -1
  385. package/highmaps.src.js +1288 -1129
  386. package/highstock.js +796 -798
  387. package/highstock.js.map +1 -1
  388. package/highstock.src.js +953 -762
  389. package/indicators/acceleration-bands.js +1 -1
  390. package/indicators/acceleration-bands.js.map +1 -1
  391. package/indicators/acceleration-bands.src.js +11 -3
  392. package/indicators/accumulation-distribution.js +1 -1
  393. package/indicators/accumulation-distribution.js.map +1 -1
  394. package/indicators/accumulation-distribution.src.js +6 -1
  395. package/indicators/ao.js +6 -6
  396. package/indicators/ao.js.map +1 -1
  397. package/indicators/ao.src.js +23 -14
  398. package/indicators/apo.js +1 -1
  399. package/indicators/apo.js.map +1 -1
  400. package/indicators/apo.src.js +6 -1
  401. package/indicators/aroon-oscillator.js +10 -10
  402. package/indicators/aroon-oscillator.js.map +1 -1
  403. package/indicators/aroon-oscillator.src.js +7 -3
  404. package/indicators/aroon.js +1 -1
  405. package/indicators/aroon.js.map +1 -1
  406. package/indicators/aroon.src.js +16 -3
  407. package/indicators/atr.js +1 -1
  408. package/indicators/atr.js.map +1 -1
  409. package/indicators/atr.src.js +17 -4
  410. package/indicators/bollinger-bands.js +1 -1
  411. package/indicators/bollinger-bands.js.map +1 -1
  412. package/indicators/bollinger-bands.src.js +6 -2
  413. package/indicators/cci.js +1 -1
  414. package/indicators/cci.js.map +1 -1
  415. package/indicators/cci.src.js +17 -4
  416. package/indicators/chaikin.js +8 -8
  417. package/indicators/chaikin.js.map +1 -1
  418. package/indicators/chaikin.src.js +13 -5
  419. package/indicators/cmf.js +1 -1
  420. package/indicators/cmf.js.map +1 -1
  421. package/indicators/cmf.src.js +21 -1
  422. package/indicators/cmo.js +1 -1
  423. package/indicators/cmo.js.map +1 -1
  424. package/indicators/cmo.src.js +16 -2
  425. package/indicators/dema.js +1 -1
  426. package/indicators/dema.js.map +1 -1
  427. package/indicators/dema.src.js +26 -1
  428. package/indicators/disparity-index.js +1 -1
  429. package/indicators/disparity-index.src.js +1 -1
  430. package/indicators/dmi.js +1 -1
  431. package/indicators/dmi.js.map +1 -1
  432. package/indicators/dmi.src.js +6 -1
  433. package/indicators/dpo.js +1 -1
  434. package/indicators/dpo.js.map +1 -1
  435. package/indicators/dpo.src.js +20 -9
  436. package/indicators/ichimoku-kinko-hyo.js +1 -1
  437. package/indicators/ichimoku-kinko-hyo.js.map +1 -1
  438. package/indicators/ichimoku-kinko-hyo.src.js +35 -16
  439. package/indicators/indicators-all.js +199 -199
  440. package/indicators/indicators-all.js.map +1 -1
  441. package/indicators/indicators-all.src.js +754 -162
  442. package/indicators/indicators.js +1 -1
  443. package/indicators/indicators.js.map +1 -1
  444. package/indicators/indicators.src.js +12 -2
  445. package/indicators/keltner-channels.js +1 -1
  446. package/indicators/keltner-channels.js.map +1 -1
  447. package/indicators/keltner-channels.src.js +26 -1
  448. package/indicators/klinger.js +12 -12
  449. package/indicators/klinger.js.map +1 -1
  450. package/indicators/klinger.src.js +13 -4
  451. package/indicators/macd.js +1 -1
  452. package/indicators/macd.js.map +1 -1
  453. package/indicators/macd.src.js +22 -13
  454. package/indicators/mfi.js +1 -1
  455. package/indicators/mfi.js.map +1 -1
  456. package/indicators/mfi.src.js +24 -11
  457. package/indicators/momentum.js +1 -1
  458. package/indicators/momentum.js.map +1 -1
  459. package/indicators/momentum.src.js +31 -3
  460. package/indicators/natr.js +1 -1
  461. package/indicators/natr.js.map +1 -1
  462. package/indicators/natr.src.js +17 -3
  463. package/indicators/obv.js +1 -1
  464. package/indicators/obv.js.map +1 -1
  465. package/indicators/obv.src.js +11 -1
  466. package/indicators/pivot-points.js +1 -1
  467. package/indicators/pivot-points.js.map +1 -1
  468. package/indicators/pivot-points.src.js +32 -19
  469. package/indicators/ppo.js +1 -1
  470. package/indicators/ppo.js.map +1 -1
  471. package/indicators/ppo.src.js +15 -5
  472. package/indicators/price-channel.js +1 -1
  473. package/indicators/price-channel.js.map +1 -1
  474. package/indicators/price-channel.src.js +14 -9
  475. package/indicators/price-envelopes.js +1 -1
  476. package/indicators/price-envelopes.js.map +1 -1
  477. package/indicators/price-envelopes.src.js +26 -1
  478. package/indicators/psar.js +1 -1
  479. package/indicators/psar.js.map +1 -1
  480. package/indicators/psar.src.js +17 -4
  481. package/indicators/regressions.js +12 -11
  482. package/indicators/regressions.js.map +1 -1
  483. package/indicators/regressions.src.js +50 -15
  484. package/indicators/roc.js +1 -1
  485. package/indicators/roc.js.map +1 -1
  486. package/indicators/roc.src.js +16 -3
  487. package/indicators/rsi.js +1 -1
  488. package/indicators/rsi.js.map +1 -1
  489. package/indicators/rsi.src.js +21 -3
  490. package/indicators/slow-stochastic.js +1 -1
  491. package/indicators/slow-stochastic.js.map +1 -1
  492. package/indicators/slow-stochastic.src.js +26 -1
  493. package/indicators/stochastic.js +1 -1
  494. package/indicators/stochastic.js.map +1 -1
  495. package/indicators/stochastic.src.js +16 -1
  496. package/indicators/supertrend.js +7 -7
  497. package/indicators/supertrend.js.map +1 -1
  498. package/indicators/supertrend.src.js +18 -6
  499. package/indicators/tema.js +1 -1
  500. package/indicators/tema.src.js +1 -1
  501. package/indicators/trendline.js +1 -1
  502. package/indicators/trendline.js.map +1 -1
  503. package/indicators/trendline.src.js +15 -5
  504. package/indicators/trix.js +1 -1
  505. package/indicators/trix.js.map +1 -1
  506. package/indicators/trix.src.js +26 -1
  507. package/indicators/volume-by-price.js +17 -17
  508. package/indicators/volume-by-price.js.map +1 -1
  509. package/indicators/volume-by-price.src.js +38 -10
  510. package/indicators/vwap.js +1 -1
  511. package/indicators/vwap.js.map +1 -1
  512. package/indicators/vwap.src.js +12 -2
  513. package/indicators/williams-r.js +1 -1
  514. package/indicators/williams-r.js.map +1 -1
  515. package/indicators/williams-r.src.js +11 -1
  516. package/indicators/wma.js +1 -1
  517. package/indicators/wma.js.map +1 -1
  518. package/indicators/wma.src.js +31 -3
  519. package/indicators/zigzag.js +1 -1
  520. package/indicators/zigzag.js.map +1 -1
  521. package/indicators/zigzag.src.js +12 -2
  522. package/modules/accessibility.js +183 -182
  523. package/modules/accessibility.js.map +1 -1
  524. package/modules/accessibility.src.js +559 -554
  525. package/modules/annotations-advanced.d.ts +1 -1
  526. package/modules/annotations-advanced.js +193 -192
  527. package/modules/annotations-advanced.js.map +1 -1
  528. package/modules/annotations-advanced.src.d.ts +1 -1
  529. package/modules/annotations-advanced.src.js +9263 -8654
  530. package/modules/annotations.d.ts +1 -1
  531. package/modules/annotations.js +128 -126
  532. package/modules/annotations.js.map +1 -1
  533. package/modules/annotations.src.d.ts +1 -1
  534. package/modules/annotations.src.js +6699 -6063
  535. package/modules/arc-diagram.js +1 -1
  536. package/modules/arc-diagram.src.js +1 -1
  537. package/modules/arrow-symbols.js +1 -1
  538. package/modules/arrow-symbols.src.js +1 -1
  539. package/modules/boost-canvas.d.ts +19 -0
  540. package/modules/boost-canvas.js +81 -16
  541. package/modules/boost-canvas.js.map +1 -1
  542. package/modules/boost-canvas.src.d.ts +19 -0
  543. package/modules/boost-canvas.src.js +3334 -50
  544. package/modules/boost.d.ts +8 -26
  545. package/modules/boost.js +84 -77
  546. package/modules/boost.js.map +1 -1
  547. package/modules/boost.src.d.ts +8 -26
  548. package/modules/boost.src.js +2423 -1888
  549. package/modules/broken-axis.js +2 -2
  550. package/modules/broken-axis.js.map +1 -1
  551. package/modules/broken-axis.src.js +2 -2
  552. package/modules/bullet.js +1 -1
  553. package/modules/bullet.src.js +1 -1
  554. package/modules/coloraxis.js +1 -1
  555. package/modules/coloraxis.js.map +1 -1
  556. package/modules/coloraxis.src.js +5 -1
  557. package/modules/current-date-indicator.js +1 -1
  558. package/modules/current-date-indicator.src.js +1 -1
  559. package/modules/cylinder.js +9 -9
  560. package/modules/cylinder.js.map +1 -1
  561. package/modules/cylinder.src.js +2 -2
  562. package/modules/data.js +1 -1
  563. package/modules/data.src.js +1 -1
  564. package/modules/datagrouping.d.ts +22 -0
  565. package/modules/datagrouping.js +4 -4
  566. package/modules/datagrouping.js.map +1 -1
  567. package/modules/datagrouping.src.d.ts +22 -0
  568. package/modules/datagrouping.src.js +66 -28
  569. package/modules/debugger.js +6 -5
  570. package/modules/debugger.js.map +1 -1
  571. package/modules/debugger.src.js +81 -40
  572. package/modules/dependency-wheel.js +12 -12
  573. package/modules/dependency-wheel.js.map +1 -1
  574. package/modules/dependency-wheel.src.js +41 -14
  575. package/modules/dotplot.js +1 -1
  576. package/modules/dotplot.src.js +1 -1
  577. package/modules/drag-panes.js +1 -1
  578. package/modules/drag-panes.src.js +1 -1
  579. package/modules/draggable-points.js +5 -5
  580. package/modules/draggable-points.js.map +1 -1
  581. package/modules/draggable-points.src.js +5 -4
  582. package/modules/drilldown.d.ts +0 -10
  583. package/modules/drilldown.js +29 -29
  584. package/modules/drilldown.js.map +1 -1
  585. package/modules/drilldown.src.d.ts +0 -10
  586. package/modules/drilldown.src.js +12 -9
  587. package/modules/dumbbell.js +1 -1
  588. package/modules/dumbbell.src.js +1 -1
  589. package/modules/export-data.js +25 -24
  590. package/modules/export-data.js.map +1 -1
  591. package/modules/export-data.src.js +607 -499
  592. package/modules/exporting.js +38 -38
  593. package/modules/exporting.js.map +1 -1
  594. package/modules/exporting.src.js +559 -507
  595. package/modules/full-screen.js +8 -8
  596. package/modules/full-screen.js.map +1 -1
  597. package/modules/full-screen.src.js +76 -26
  598. package/modules/funnel.js +1 -1
  599. package/modules/funnel.src.js +1 -1
  600. package/modules/funnel3d.js +2 -2
  601. package/modules/funnel3d.js.map +1 -1
  602. package/modules/funnel3d.src.js +2 -2
  603. package/modules/gantt.js +217 -216
  604. package/modules/gantt.js.map +1 -1
  605. package/modules/gantt.src.js +1481 -1440
  606. package/modules/grid-axis.js +1 -1
  607. package/modules/grid-axis.src.js +1 -1
  608. package/modules/heatmap.js +1 -1
  609. package/modules/heatmap.js.map +1 -1
  610. package/modules/heatmap.src.js +10 -2
  611. package/modules/heikinashi.js +1 -1
  612. package/modules/heikinashi.src.js +1 -1
  613. package/modules/histogram-bellcurve.js +1 -1
  614. package/modules/histogram-bellcurve.src.js +1 -1
  615. package/modules/hollowcandlestick.js +1 -1
  616. package/modules/hollowcandlestick.src.js +1 -1
  617. package/modules/item-series.js +1 -1
  618. package/modules/item-series.src.js +1 -1
  619. package/modules/lollipop.js +6 -6
  620. package/modules/lollipop.js.map +1 -1
  621. package/modules/lollipop.src.js +37 -22
  622. package/modules/map.d.ts +3 -3
  623. package/modules/map.js +171 -171
  624. package/modules/map.js.map +1 -1
  625. package/modules/map.src.d.ts +3 -3
  626. package/modules/map.src.js +442 -414
  627. package/modules/marker-clusters.js +1 -1
  628. package/modules/marker-clusters.js.map +1 -1
  629. package/modules/marker-clusters.src.js +3 -1
  630. package/modules/networkgraph.js +55 -50
  631. package/modules/networkgraph.js.map +1 -1
  632. package/modules/networkgraph.src.js +2259 -1938
  633. package/modules/no-data-to-display.js +1 -1
  634. package/modules/no-data-to-display.src.js +1 -1
  635. package/modules/offline-exporting.js +2 -2
  636. package/modules/offline-exporting.src.js +2 -2
  637. package/modules/oldie-polyfills.js +1 -1
  638. package/modules/oldie-polyfills.src.js +1 -1
  639. package/modules/oldie.js +2 -2
  640. package/modules/oldie.src.js +2 -2
  641. package/modules/organization.js +15 -15
  642. package/modules/organization.js.map +1 -1
  643. package/modules/organization.src.js +10 -2
  644. package/modules/overlapping-datalabels.js +1 -1
  645. package/modules/overlapping-datalabels.src.js +1 -1
  646. package/modules/parallel-coordinates.js +11 -11
  647. package/modules/parallel-coordinates.js.map +1 -1
  648. package/modules/parallel-coordinates.src.js +13 -8
  649. package/modules/pareto.js +1 -1
  650. package/modules/pareto.src.js +1 -1
  651. package/modules/pathfinder.js +1 -1
  652. package/modules/pathfinder.src.js +1 -1
  653. package/modules/pattern-fill.js +1 -1
  654. package/modules/pattern-fill.src.js +1 -1
  655. package/modules/price-indicator.js +1 -1
  656. package/modules/price-indicator.src.js +1 -1
  657. package/modules/pyramid3d.js +1 -1
  658. package/modules/pyramid3d.src.js +1 -1
  659. package/modules/sankey.js +1 -1
  660. package/modules/sankey.js.map +1 -1
  661. package/modules/sankey.src.js +14 -2
  662. package/modules/series-label.js +5 -5
  663. package/modules/series-label.js.map +1 -1
  664. package/modules/series-label.src.js +3 -3
  665. package/modules/series-on-point.js +1 -1
  666. package/modules/series-on-point.js.map +1 -1
  667. package/modules/series-on-point.src.js +6 -2
  668. package/modules/solid-gauge.js +1 -1
  669. package/modules/solid-gauge.src.js +2 -2
  670. package/modules/sonification.d.ts +2 -2
  671. package/modules/sonification.js +1 -1
  672. package/modules/sonification.src.d.ts +2 -2
  673. package/modules/sonification.src.js +2 -2
  674. package/modules/static-scale.js +1 -1
  675. package/modules/static-scale.src.js +1 -1
  676. package/modules/stock-tools.d.ts +1 -23
  677. package/modules/stock-tools.js +109 -179
  678. package/modules/stock-tools.js.map +1 -1
  679. package/modules/stock-tools.src.d.ts +1 -23
  680. package/modules/stock-tools.src.js +2605 -6335
  681. package/modules/stock.d.ts +8 -0
  682. package/modules/stock.js +105 -105
  683. package/modules/stock.js.map +1 -1
  684. package/modules/stock.src.d.ts +8 -0
  685. package/modules/stock.src.js +105 -45
  686. package/modules/streamgraph.js +1 -1
  687. package/modules/streamgraph.src.js +1 -1
  688. package/modules/sunburst.js +72 -72
  689. package/modules/sunburst.js.map +1 -1
  690. package/modules/sunburst.src.js +38 -12
  691. package/modules/tilemap.js +1 -1
  692. package/modules/tilemap.src.js +1 -1
  693. package/modules/timeline.js +1 -1
  694. package/modules/timeline.js.map +1 -1
  695. package/modules/timeline.src.js +3 -1
  696. package/modules/treegrid.js +57 -57
  697. package/modules/treegrid.js.map +1 -1
  698. package/modules/treegrid.src.js +1022 -1014
  699. package/modules/treemap.js +1 -1
  700. package/modules/treemap.js.map +1 -1
  701. package/modules/treemap.src.js +8 -4
  702. package/modules/variable-pie.js +1 -1
  703. package/modules/variable-pie.src.js +1 -1
  704. package/modules/variwide.js +1 -1
  705. package/modules/variwide.src.js +1 -1
  706. package/modules/vector.js +2 -2
  707. package/modules/vector.js.map +1 -1
  708. package/modules/vector.src.js +3 -5
  709. package/modules/venn.js +1 -1
  710. package/modules/venn.src.js +5 -5
  711. package/modules/windbarb.js +1 -1
  712. package/modules/windbarb.src.js +1 -1
  713. package/modules/wordcloud.js +1 -1
  714. package/modules/wordcloud.src.js +3 -3
  715. package/modules/xrange.js +17 -17
  716. package/modules/xrange.js.map +1 -1
  717. package/modules/xrange.src.js +411 -397
  718. package/package.json +1 -1
  719. package/themes/avocado.js +1 -1
  720. package/themes/avocado.src.js +1 -1
  721. package/themes/brand-dark.js +1 -1
  722. package/themes/brand-dark.src.js +1 -1
  723. package/themes/brand-light.js +1 -1
  724. package/themes/brand-light.src.js +1 -1
  725. package/themes/dark-blue.js +1 -1
  726. package/themes/dark-blue.src.js +1 -1
  727. package/themes/dark-green.js +1 -1
  728. package/themes/dark-green.src.js +1 -1
  729. package/themes/dark-unica.js +1 -1
  730. package/themes/dark-unica.src.js +1 -1
  731. package/themes/gray.js +1 -1
  732. package/themes/gray.src.js +1 -1
  733. package/themes/grid-light.js +1 -1
  734. package/themes/grid-light.src.js +1 -1
  735. package/themes/grid.js +1 -1
  736. package/themes/grid.src.js +1 -1
  737. package/themes/high-contrast-dark.js +1 -1
  738. package/themes/high-contrast-dark.src.js +1 -1
  739. package/themes/high-contrast-light.js +1 -1
  740. package/themes/high-contrast-light.src.js +1 -1
  741. package/themes/sand-signika.js +1 -1
  742. package/themes/sand-signika.src.js +1 -1
  743. package/themes/skies.js +1 -1
  744. package/themes/skies.src.js +1 -1
  745. package/themes/sunset.js +1 -1
  746. package/themes/sunset.src.js +1 -1
  747. package/es-modules/Core/Axis/StackingAxis.js +0 -215
  748. package/es-modules/Core/Axis/TreeGridAxis.js +0 -720
  749. package/es-modules/Core/Axis/TreeGridTick.js +0 -317
  750. package/es-modules/Extensions/Annotations/AnnotationsDefaults.js +0 -0
  751. package/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js +0 -179
  752. package/es-modules/Extensions/Annotations/Popup.js +0 -1123
  753. package/es-modules/Extensions/Boost/BoostAttach.js +0 -154
  754. package/es-modules/Extensions/Boost/BoostInit.js +0 -324
  755. package/es-modules/Extensions/Boost/BoostOptions.js +0 -245
  756. package/es-modules/Extensions/Boost/BoostOverrides.js +0 -386
  757. package/es-modules/Extensions/Boost/BoostUtils.js +0 -255
  758. package/es-modules/Extensions/Boost/WGLVBuffer.js +0 -153
  759. package/es-modules/Extensions/Stacking.js +0 -517
  760. package/es-modules/Series/Networkgraph/DraggableNodes.js +0 -132
  761. package/es-modules/Series/Networkgraph/Integrations.js +0 -348
  762. package/es-modules/Series/Networkgraph/Networkgraph.js +0 -1180
  763. package/es-modules/Series/XRange/XRangeComposition.js +0 -49
package/highmaps.src.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highmaps JS v10.2.0 (2022-07-05)
2
+ * @license Highmaps JS v10.2.1 (2022-08-29)
3
3
  *
4
4
  * (c) 2011-2021 Torstein Honsi
5
5
  *
@@ -55,6 +55,7 @@
55
55
  * */
56
56
  /**
57
57
  * Shared Highcharts properties.
58
+ * @private
58
59
  */
59
60
  var Globals;
60
61
  (function (Globals) {
@@ -63,7 +64,7 @@
63
64
  * Constants
64
65
  *
65
66
  * */
66
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '10.2.0', Globals.win = (typeof window !== 'undefined' ?
67
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '10.2.1', Globals.win = (typeof window !== 'undefined' ?
67
68
  window :
68
69
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
69
70
  Globals.doc = Globals.win.document, Globals.svg = (Globals.doc &&
@@ -1179,7 +1180,7 @@
1179
1180
  }
1180
1181
  // Otherwise, get the computed style
1181
1182
  var css = win.getComputedStyle(el,
1182
- undefined); // eslint-disable-line no-undefined
1183
+ void 0); // eslint-disable-line no-undefined
1183
1184
  if (css) {
1184
1185
  style = css.getPropertyValue(prop);
1185
1186
  if (pick(toInt, prop !== 'opacity')) {
@@ -1304,8 +1305,6 @@
1304
1305
  *
1305
1306
  * @param {T} [ctx]
1306
1307
  * The context.
1307
- *
1308
- * @return {void}
1309
1308
  */
1310
1309
  function objectEach(obj, fn, ctx) {
1311
1310
  /* eslint-enable valid-jsdoc */
@@ -2642,6 +2641,7 @@
2642
2641
  * @default {highstock} x
2643
2642
  * @since 3.0
2644
2643
  * @product highcharts highstock gantt
2644
+ * @deprecated
2645
2645
  * @validvalue ["x", "y", "xy"]
2646
2646
  * @apioption chart.pinchType
2647
2647
  */
@@ -2760,6 +2760,7 @@
2760
2760
  /**
2761
2761
  * The button that appears after a selection zoom, allowing the user
2762
2762
  * to reset zoom.
2763
+ * @deprecated
2763
2764
  */
2764
2765
  resetZoomButton: {
2765
2766
  /**
@@ -2773,6 +2774,7 @@
2773
2774
  *
2774
2775
  * @type {Highcharts.ButtonRelativeToValue}
2775
2776
  * @default plot
2777
+ * @deprecated
2776
2778
  * @since 2.2
2777
2779
  * @apioption chart.resetZoomButton.relativeTo
2778
2780
  */
@@ -2789,10 +2791,14 @@
2789
2791
  * Theming the button
2790
2792
  *
2791
2793
  * @type {Highcharts.SVGAttributes}
2794
+ * @deprecated
2792
2795
  * @since 2.2
2793
2796
  */
2794
2797
  theme: {
2795
- /** @internal */
2798
+ /**
2799
+ * @internal
2800
+ * @deprecated
2801
+ */
2796
2802
  zIndex: 6
2797
2803
  },
2798
2804
  /**
@@ -2806,26 +2812,31 @@
2806
2812
  * Above the plot area
2807
2813
  *
2808
2814
  * @type {Highcharts.AlignObject}
2815
+ * @deprecated
2809
2816
  * @since 2.2
2810
2817
  */
2811
2818
  position: {
2812
2819
  /**
2813
2820
  * The horizontal alignment of the button.
2821
+ * @deprecated
2814
2822
  */
2815
2823
  align: 'right',
2816
2824
  /**
2817
2825
  * The horizontal offset of the button.
2826
+ * @deprecated
2818
2827
  */
2819
2828
  x: -10,
2820
2829
  /**
2821
2830
  * The vertical alignment of the button.
2822
2831
  *
2823
2832
  * @type {Highcharts.VerticalAlignValue}
2833
+ * @deprecated
2824
2834
  * @default top
2825
2835
  * @apioption chart.resetZoomButton.position.verticalAlign
2826
2836
  */
2827
2837
  /**
2828
2838
  * The vertical offset of the button.
2839
+ * @deprecated
2829
2840
  */
2830
2841
  y: 10
2831
2842
  }
@@ -3107,6 +3118,7 @@
3107
3118
  *
3108
3119
  * @type {string}
3109
3120
  * @validvalue ["x", "y", "xy"]
3121
+ * @deprecated
3110
3122
  * @apioption chart.zoomType
3111
3123
  */
3112
3124
  /**
@@ -3116,12 +3128,148 @@
3116
3128
  * However, `zoomBySingleTouch` will interfere with touch-dragging the
3117
3129
  * chart to read the tooltip. And especially when vertical zooming is
3118
3130
  * enabled, it will make it hard to scroll vertically on the page.
3119
- * @since 9.0.0
3131
+ * @since 9.0.0
3120
3132
  * @sample highcharts/chart/zoombysingletouch
3121
3133
  * Zoom by single touch enabled, with buttons to toggle
3122
3134
  * @product highcharts highstock gantt
3135
+ * @deprecated
3123
3136
  */
3124
3137
  zoomBySingleTouch: false,
3138
+ /**
3139
+ * Chart zooming options.
3140
+ * @since 10.2.1
3141
+ */
3142
+ zooming: {
3143
+ /**
3144
+ * Equivalent to [type](#chart.zooming.type), but for multitouch
3145
+ * gestures only. By default, the `pinchType` is the same as the
3146
+ * `type` setting. However, pinching can be enabled separately in
3147
+ * some cases, for example in stock charts where a mouse drag pans the
3148
+ * chart, while pinching is enabled. When [tooltip.followTouchMove](
3149
+ * #tooltip.followTouchMove) is true, pinchType only applies to
3150
+ * two-finger touches.
3151
+ *
3152
+ * @type {string}
3153
+ * @default {highcharts} undefined
3154
+ * @default {highstock} x
3155
+ * @product highcharts highstock gantt
3156
+ * @since 10.2.1
3157
+ * @validvalue ["x", "y", "xy"]
3158
+ * @apioption chart.zooming.pinchType
3159
+ */
3160
+ /**
3161
+ * Decides in what dimensions the user can zoom by dragging the mouse.
3162
+ * Can be one of `x`, `y` or `xy`.
3163
+ *
3164
+ * @type {string}
3165
+ * @default {highcharts} undefined
3166
+ * @product highcharts highstock gantt
3167
+ * @validvalue ["x", "y", "xy"]
3168
+ * @since 10.2.1
3169
+ * @apioption chart.zooming.type
3170
+ */
3171
+ /**
3172
+ * Set a key to hold when dragging to zoom the chart. This is useful to
3173
+ * avoid zooming while moving points. Should be set different than
3174
+ * [chart.panKey](#chart.panKey).
3175
+ *
3176
+ * @type {string}
3177
+ * @default {highcharts} undefined
3178
+ * @since 10.2.1
3179
+ * @validvalue ["alt", "ctrl", "meta", "shift"]
3180
+ * @requires modules/draggable-points
3181
+ * @apioption chart.zooming.key
3182
+ */
3183
+ /**
3184
+ * Enables zooming by a single touch, in combination with
3185
+ * [chart.zooming.type](#chart.zooming.type). When enabled, two-finger
3186
+ * pinch will still work as set up by [chart.zooming.pinchType]
3187
+ * (#chart.zooming.pinchType). However, `singleTouch` will interfere
3188
+ * with touch-dragging the chart to read the tooltip. And especially
3189
+ * when vertical zooming is enabled, it will make it hard to scroll
3190
+ * vertically on the page.
3191
+ * @sample highcharts/chart/zoombysingletouch
3192
+ * Zoom by single touch enabled, with buttons to toggle
3193
+ * @product highcharts highstock gantt
3194
+ * @since 10.2.1
3195
+ */
3196
+ singleTouch: false,
3197
+ /**
3198
+ * The button that appears after a selection zoom, allowing the user
3199
+ * to reset zoom.
3200
+ * @since 10.2.1
3201
+ */
3202
+ resetButton: {
3203
+ /**
3204
+ * What frame the button placement should be related to. Can be
3205
+ * either `plotBox` or `spacingBox`.
3206
+ *
3207
+ * @sample {highcharts} highcharts/chart/resetzoombutton-relativeto/
3208
+ * Relative to the chart
3209
+ * @sample {highstock} highcharts/chart/resetzoombutton-relativeto/
3210
+ * Relative to the chart
3211
+ *
3212
+ * @type {Highcharts.ButtonRelativeToValue}
3213
+ * @default plot
3214
+ * @since 10.2.1
3215
+ * @apioption chart.zooming.resetButton.relativeTo
3216
+ */
3217
+ /**
3218
+ * A collection of attributes for the button. The object takes SVG
3219
+ * attributes like `fill`, `stroke`, `stroke-width` or `r`, the
3220
+ * border radius. The theme also supports `style`, a collection of
3221
+ * CSS properties for the text. Equivalent attributes for the hover
3222
+ * state are given in `theme.states.hover`.
3223
+ *
3224
+ * @sample {highcharts} highcharts/chart/resetzoombutton-theme/
3225
+ * Theming the button
3226
+ * @sample {highstock} highcharts/chart/resetzoombutton-theme/
3227
+ * Theming the button
3228
+ *
3229
+ * @type {Highcharts.SVGAttributes}
3230
+ * @since 10.2.1
3231
+ */
3232
+ theme: {
3233
+ /** @internal */
3234
+ zIndex: 6
3235
+ },
3236
+ /**
3237
+ * The position of the button.
3238
+ *
3239
+ * @sample {highcharts} highcharts/chart/resetzoombutton-position/
3240
+ * Above the plot area
3241
+ * @sample {highstock} highcharts/chart/resetzoombutton-position/
3242
+ * Above the plot area
3243
+ * @sample {highmaps} highcharts/chart/resetzoombutton-position/
3244
+ * Above the plot area
3245
+ *
3246
+ * @type {Highcharts.AlignObject}
3247
+ * @since 10.2.1
3248
+ */
3249
+ position: {
3250
+ /**
3251
+ * The horizontal alignment of the button.
3252
+ */
3253
+ align: 'right',
3254
+ /**
3255
+ * The horizontal offset of the button.
3256
+ */
3257
+ x: -10,
3258
+ /**
3259
+ * The vertical alignment of the button.
3260
+ *
3261
+ * @type {Highcharts.VerticalAlignValue}
3262
+ * @since 10.2.1
3263
+ * @default top
3264
+ * @apioption chart.zooming.resetButton.position.verticalAlign
3265
+ */
3266
+ /**
3267
+ * The vertical offset of the button.
3268
+ */
3269
+ y: 10
3270
+ }
3271
+ }
3272
+ },
3125
3273
  /**
3126
3274
  * An explicit width for the chart. By default (when `null`) the width
3127
3275
  * is calculated from the offset width of the containing element.
@@ -4520,6 +4668,7 @@
4520
4668
  * @type {Highcharts.Options}
4521
4669
  */ /**
4522
4670
  * @optionparent
4671
+ * @private
4523
4672
  */
4524
4673
  var defaultOptions = {
4525
4674
  /**
@@ -4552,7 +4701,7 @@
4552
4701
  * @sample {highcharts} highcharts/chart/colors/
4553
4702
  * Assign a global color theme
4554
4703
  *
4555
- * @type {Array<Highcharts.ColorString>}
4704
+ * @type {Array<(Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject)>}
4556
4705
  * @default ["#7cb5ec", "#434348", "#90ed7d", "#f7a35c", "#8085e9",
4557
4706
  * "#f15c80", "#e4d354", "#2b908f", "#f45b5b", "#91e8e1"]
4558
4707
  */
@@ -8112,7 +8261,8 @@
8112
8261
  .trim()
8113
8262
  // The style attribute throws a warning when parsing when CSP is
8114
8263
  // enabled (#6884), so use an alias and pick it up below
8115
- .replace(/ style="/g, ' data-style="');
8264
+ // Make all quotation marks parse correctly to DOM (#17627)
8265
+ .replace(/ style=(["'])/g, ' data-style=$1');
8116
8266
  var doc;
8117
8267
  if (hasValidDOMParser) {
8118
8268
  doc = new DOMParser().parseFromString(trustedTypesPolicy ?
@@ -8237,6 +8387,7 @@
8237
8387
  'target',
8238
8388
  'tabindex',
8239
8389
  'text-align',
8390
+ 'text-anchor',
8240
8391
  'textAnchor',
8241
8392
  'textLength',
8242
8393
  'title',
@@ -8337,6 +8488,7 @@
8337
8488
  'svg',
8338
8489
  'table',
8339
8490
  'text',
8491
+ 'textPath',
8340
8492
  'thead',
8341
8493
  'tbody',
8342
8494
  'tspan',
@@ -8835,7 +8987,7 @@
8835
8987
 
8836
8988
  return RendererUtilities;
8837
8989
  });
8838
- _registerModule(_modules, 'Core/Renderer/SVG/SVGElement.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Renderer/HTML/AST.js'], _modules['Core/Color/Color.js'], _modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (A, AST, Color, H, U) {
8990
+ _registerModule(_modules, 'Core/Renderer/SVG/SVGElement.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Color/Color.js'], _modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (A, Color, H, U) {
8839
8991
  /* *
8840
8992
  *
8841
8993
  * (c) 2010-2021 Torstein Honsi
@@ -8870,6 +9022,7 @@
8870
9022
  objectEach = U.objectEach,
8871
9023
  pick = U.pick,
8872
9024
  pInt = U.pInt,
9025
+ removeEvent = U.removeEvent,
8873
9026
  syncTimeout = U.syncTimeout,
8874
9027
  uniqueKey = U.uniqueKey;
8875
9028
  /* *
@@ -9287,27 +9440,32 @@
9287
9440
  });
9288
9441
  // For each of the tspans and text nodes, create a copy in the
9289
9442
  // outline.
9290
- [].forEach.call(elem.childNodes, function (childNode) {
9443
+ var parentElem = elem.querySelector('textPath') || elem;
9444
+ [].forEach.call(parentElem.childNodes, function (childNode) {
9291
9445
  var clone = childNode.cloneNode(true);
9292
9446
  if (clone.removeAttribute) {
9293
- ['fill', 'stroke', 'stroke-width', 'stroke'].forEach(function (prop) { return clone.removeAttribute(prop); });
9447
+ ['fill', 'stroke', 'stroke-width', 'stroke'].forEach(function (prop) { return clone
9448
+ .removeAttribute(prop); });
9294
9449
  }
9295
9450
  outline_1.appendChild(clone);
9296
9451
  });
9452
+ // Collect the sum of dy from all children, included nested ones
9453
+ var totalHeight_1 = 0;
9454
+ [].forEach.call(parentElem.querySelectorAll('text tspan'), function (element) {
9455
+ totalHeight_1 += Number(element.getAttribute('dy'));
9456
+ });
9297
9457
  // Insert an absolutely positioned break before the original text
9298
9458
  // to keep it in place
9299
- var br_1 = doc.createElementNS(SVG_NS, 'tspan');
9300
- br_1.textContent = '\u200B';
9301
- // Copy x and y if not null
9302
- ['x', 'y'].forEach(function (key) {
9303
- var value = elem.getAttribute(key);
9304
- if (value) {
9305
- br_1.setAttribute(key, value);
9306
- }
9459
+ var br = doc.createElementNS(SVG_NS, 'tspan');
9460
+ br.textContent = '\u200B';
9461
+ // Reset the position for the following text
9462
+ attr(br, {
9463
+ x: Number(elem.getAttribute('x')),
9464
+ dy: -totalHeight_1
9307
9465
  });
9308
9466
  // Insert the outline
9309
- outline_1.appendChild(br_1);
9310
- elem.insertBefore(outline_1, elem.firstChild);
9467
+ outline_1.appendChild(br);
9468
+ parentElem.insertBefore(outline_1, parentElem.firstChild);
9311
9469
  }
9312
9470
  };
9313
9471
  /**
@@ -9797,42 +9955,6 @@
9797
9955
  }, this);
9798
9956
  this.shadows = void 0;
9799
9957
  };
9800
- /**
9801
- * @private
9802
- */
9803
- SVGElement.prototype.destroyTextPath = function (elem, path) {
9804
- var textElement = elem.getElementsByTagName('text')[0];
9805
- var childNodes;
9806
- if (textElement) {
9807
- // Remove textPath attributes
9808
- textElement.removeAttribute('dx');
9809
- textElement.removeAttribute('dy');
9810
- // Remove ID's:
9811
- path.element.setAttribute('id', '');
9812
- // Check if textElement includes textPath,
9813
- if (this.textPathWrapper &&
9814
- textElement.getElementsByTagName('textPath').length) {
9815
- // Move nodes to <text>
9816
- childNodes = this.textPathWrapper.element.childNodes;
9817
- // Now move all <tspan>'s and text nodes to the <textPath> node
9818
- while (childNodes.length) {
9819
- textElement.appendChild(childNodes[0]);
9820
- }
9821
- // Remove <textPath> from the DOM
9822
- textElement.removeChild(this.textPathWrapper.element);
9823
- }
9824
- }
9825
- else if (elem.getAttribute('dx') || elem.getAttribute('dy')) {
9826
- // Remove textPath attributes from elem
9827
- // to get correct text-outline position
9828
- elem.removeAttribute('dx');
9829
- elem.removeAttribute('dy');
9830
- }
9831
- if (this.textPathWrapper) {
9832
- // Set textPathWrapper to undefined and destroy it
9833
- this.textPathWrapper = this.textPathWrapper.destroy();
9834
- }
9835
- };
9836
9958
  /**
9837
9959
  * @private
9838
9960
  * @function Highcharts.SVGElement#dSettter
@@ -9991,9 +10113,12 @@
9991
10113
  // SVG: use extend because IE9 is not allowed to change
9992
10114
  // width and height in case of rotation (below)
9993
10115
  extend({}, element.getBBox()) : {
9994
- // Legacy IE in export mode
10116
+ // HTML elements with `exporting.allowHTML` and
10117
+ // legacy IE in export mode
9995
10118
  width: element.offsetWidth,
9996
- height: element.offsetHeight
10119
+ height: element.offsetHeight,
10120
+ x: 0,
10121
+ y: 0
9997
10122
  };
9998
10123
  // #3842
9999
10124
  if (isFunction(toggleTextShadowShim)) {
@@ -10298,26 +10423,27 @@
10298
10423
  return this;
10299
10424
  };
10300
10425
  /**
10301
- * @private
10426
+ * Set a text path for a `text` or `label` element, allowing the text to
10427
+ * flow along a path.
10428
+ *
10429
+ * In order to unset the path for an existing element, call `setTextPath`
10430
+ * with `{ enabled: false }` as the second argument.
10431
+ *
10432
+ * @sample highcharts/members/renderer-textpath/ Text path demonstrated
10433
+ *
10302
10434
  * @function Highcharts.SVGElement#setTextPath
10303
- * @param {Highcharts.SVGElement} path
10304
- * Path to follow.
10435
+ *
10436
+ * @param {Highcharts.SVGElement|undefined} path
10437
+ * Path to follow. If undefined, it allows changing options for the
10438
+ * existing path.
10439
+ *
10305
10440
  * @param {Highcharts.DataLabelsTextPathOptionsObject} textPathOptions
10306
- * Options.
10307
- * @return {Highcharts.SVGElement}
10308
- * Returns the SVGElement for chaining.
10441
+ * Options.
10442
+ *
10443
+ * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.
10309
10444
  */
10310
10445
  SVGElement.prototype.setTextPath = function (path, textPathOptions) {
10311
- var elem = this.element,
10312
- textNode = this.text ? this.text.element : elem,
10313
- attribsMap = {
10314
- textAnchor: 'text-anchor'
10315
- };
10316
- var adder = false,
10317
- textPathElement,
10318
- textPathId,
10319
- textPathWrapper = this.textPathWrapper,
10320
- firstTime = !textPathWrapper;
10446
+ var _this = this;
10321
10447
  // Defaults
10322
10448
  textPathOptions = merge(true, {
10323
10449
  enabled: true,
@@ -10327,109 +10453,70 @@
10327
10453
  textAnchor: 'middle'
10328
10454
  }
10329
10455
  }, textPathOptions);
10330
- var attrs = AST.filterUserAttributes(textPathOptions.attributes);
10331
- if (path && textPathOptions && textPathOptions.enabled) {
10332
- // In case of fixed width for a text, string is rebuilt
10333
- // (e.g. ellipsis is applied), so we need to rebuild textPath too
10334
- if (textPathWrapper &&
10335
- textPathWrapper.element.parentNode === null) {
10336
- // When buildText functionality was triggered again
10337
- // and deletes textPathWrapper parentNode
10338
- firstTime = true;
10339
- textPathWrapper = textPathWrapper.destroy();
10340
- }
10341
- else if (textPathWrapper) {
10342
- // Case after drillup when spans were added into
10343
- // the DOM outside the textPathWrapper parentGroup
10344
- this.removeTextOutline.call(textPathWrapper.parentGroup);
10345
- }
10346
- // label() has padding, text() doesn't
10347
- if (this.options && this.options.padding) {
10348
- attrs.dx = -this.options.padding;
10349
- }
10350
- if (!textPathWrapper) {
10351
- // Create <textPath>, defer the DOM adder
10352
- this.textPathWrapper = textPathWrapper =
10353
- this.renderer.createElement('textPath');
10354
- adder = true;
10355
- }
10356
- textPathElement = textPathWrapper.element;
10357
- // Set ID for the path
10358
- textPathId = path.element.getAttribute('id');
10359
- if (!textPathId) {
10360
- path.element.setAttribute('id', textPathId = uniqueKey());
10361
- }
10362
- // Change DOM structure, by placing <textPath> tag in <text>
10363
- if (firstTime) {
10364
- // Adjust the position
10365
- textNode.setAttribute('y', 0); // Firefox
10366
- if (isNumber(attrs.dx)) {
10367
- textNode.setAttribute('x', -attrs.dx);
10368
- }
10369
- // Move all <tspan>'s and text nodes to the <textPath> node. Do
10370
- // not move other elements like <title> or <path>
10371
- var childNodes = [].slice.call(textNode.childNodes);
10372
- for (var i = 0; i < childNodes.length; i++) {
10373
- var childNode = childNodes[i];
10374
- if (childNode.nodeType === win.Node.TEXT_NODE ||
10375
- childNode.nodeName === 'tspan') {
10376
- textPathElement.appendChild(childNode);
10456
+ var url = this.renderer.url,
10457
+ textWrapper = this.text || this,
10458
+ textPath = textWrapper.textPath,
10459
+ attributes = textPathOptions.attributes,
10460
+ enabled = textPathOptions.enabled;
10461
+ path = path || (textPath && textPath.path);
10462
+ // Remove previously added event
10463
+ if (textPath) {
10464
+ textPath.undo();
10465
+ }
10466
+ if (path && enabled) {
10467
+ var undo = addEvent(textWrapper, 'afterModifyTree',
10468
+ function (e) {
10469
+ if (path && enabled) {
10470
+ // Set ID for the path
10471
+ var textPathId = path.attr('id');
10472
+ if (!textPathId) {
10473
+ path.attr('id', textPathId = uniqueKey());
10474
+ }
10475
+ // Set attributes for the <text>
10476
+ var textAttribs = {
10477
+ // dx/dy options must by set on <text> (parent), the
10478
+ // rest should be set on <textPath>
10479
+ x: 0,
10480
+ y: 0
10481
+ };
10482
+ if (defined(attributes.dx)) {
10483
+ textAttribs.dx = attributes.dx;
10484
+ delete attributes.dx;
10485
+ }
10486
+ if (defined(attributes.dy)) {
10487
+ textAttribs.dy = attributes.dy;
10488
+ delete attributes.dy;
10377
10489
  }
10490
+ textWrapper.attr(textAttribs);
10491
+ // Handle label properties
10492
+ _this.attr({ transform: '' });
10493
+ if (_this.box) {
10494
+ _this.box = _this.box.destroy();
10495
+ }
10496
+ // Wrap the nodes in a textPath
10497
+ var children = e.nodes.slice(0);
10498
+ e.nodes.length = 0;
10499
+ e.nodes[0] = {
10500
+ tagName: 'textPath',
10501
+ attributes: extend(attributes, {
10502
+ 'text-anchor': attributes.textAnchor,
10503
+ href: "" + url + "#".concat(textPathId)
10504
+ }),
10505
+ children: children
10506
+ };
10378
10507
  }
10379
- }
10380
- // Add <textPath> to the DOM
10381
- if (adder && textPathWrapper) {
10382
- textPathWrapper.add({ element: textNode });
10383
- }
10384
- // Set basic options:
10385
- // Use `setAttributeNS` because Safari needs this..
10386
- textPathElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', this.renderer.url + '#' + textPathId);
10387
- // Presentation attributes:
10388
- // dx/dy options must by set on <text> (parent),
10389
- // the rest should be set on <textPath>
10390
- if (defined(attrs.dy)) {
10391
- textPathElement.parentNode
10392
- .setAttribute('dy', attrs.dy);
10393
- delete attrs.dy;
10394
- }
10395
- if (defined(attrs.dx)) {
10396
- textPathElement.parentNode
10397
- .setAttribute('dx', attrs.dx);
10398
- delete attrs.dx;
10399
- }
10400
- // Additional attributes
10401
- objectEach(attrs, function (val, key) {
10402
- textPathElement.setAttribute(attribsMap[key] || key, val);
10403
10508
  });
10404
- // Remove translation, text that follows path does not need that
10405
- elem.removeAttribute('transform');
10406
- // Remove shadows and text outlines
10407
- this.removeTextOutline.call(textPathWrapper);
10408
- // Remove background and border for label(), see #10545
10409
- // Alternatively, we can disable setting background rects in
10410
- // series.drawDataLabels()
10411
- if (this.text && !this.renderer.styledMode) {
10412
- this.attr({
10413
- fill: 'none',
10414
- 'stroke-width': 0
10415
- });
10416
- }
10417
- // Disable some functions
10418
- this.updateTransform = noop;
10419
- this.applyTextOutline = noop;
10420
- }
10421
- else if (textPathWrapper) {
10422
- // Reset to prototype
10423
- delete this.updateTransform;
10424
- delete this.applyTextOutline;
10425
- // Restore DOM structure:
10426
- this.destroyTextPath(elem, path);
10427
- // Bring attributes back
10428
- this.updateTransform();
10429
- // Set textOutline back for text()
10430
- if (this.options && this.options.rotation) {
10431
- this.applyTextOutline(this.options.style.textOutline);
10432
- }
10509
+ // Set the reference
10510
+ textWrapper.textPath = { path: path, undo: undo };
10511
+ }
10512
+ else {
10513
+ textWrapper.attr({ dx: 0, dy: 0 });
10514
+ delete textWrapper.textPath;
10515
+ }
10516
+ if (this.added) {
10517
+ // Rebuild text after added
10518
+ textWrapper.textCache = '';
10519
+ this.renderer.buildText(textWrapper);
10433
10520
  }
10434
10521
  return this;
10435
10522
  };
@@ -10811,7 +10898,7 @@
10811
10898
  if (defined(scaleX) || defined(scaleY)) {
10812
10899
  transform.push('scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')');
10813
10900
  }
10814
- if (transform.length) {
10901
+ if (transform.length && !(wrapper.text || wrapper).textPath) {
10815
10902
  element.setAttribute('transform', transform.join(' '));
10816
10903
  }
10817
10904
  };
@@ -11062,6 +11149,12 @@
11062
11149
  * @name Highcharts.SVGAttributes#d
11063
11150
  * @type {string|Highcharts.SVGPathArray|undefined}
11064
11151
  */ /**
11152
+ * @name Highcharts.SVGAttributes#dx
11153
+ * @type {number|undefined}
11154
+ */ /**
11155
+ * @name Highcharts.SVGAttributes#dy
11156
+ * @type {number|undefined}
11157
+ */ /**
11065
11158
  * @name Highcharts.SVGAttributes#fill
11066
11159
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}
11067
11160
  */ /**
@@ -11474,7 +11567,8 @@
11474
11567
  * the new bounding box and reflect it in the border box.
11475
11568
  */
11476
11569
  SVGLabel.prototype.updateBoxSize = function () {
11477
- var style = this.text.element.style,
11570
+ var text = this.text,
11571
+ style = text.element.style,
11478
11572
  attribs = {},
11479
11573
  padding = this.padding,
11480
11574
  // #12165 error when width is null (auto)
@@ -11482,14 +11576,14 @@
11482
11576
  // #3295 && 3514 box failure when string equals 0
11483
11577
  bBox = this.bBox = (((!isNumber(this.widthSetting) ||
11484
11578
  !isNumber(this.heightSetting) ||
11485
- this.textAlign) && defined(this.text.textStr)) ?
11486
- this.text.getBBox() :
11579
+ this.textAlign) && defined(text.textStr)) ?
11580
+ text.getBBox() :
11487
11581
  SVGLabel.emptyBBox);
11488
11582
  var crispAdjust;
11489
11583
  this.width = this.getPaddedWidth();
11490
11584
  this.height = (this.heightSetting || bBox.height || 0) + 2 * padding;
11491
11585
  var metrics = this.renderer.fontMetrics(style && style.fontSize,
11492
- this.text);
11586
+ text);
11493
11587
  // Update the label-scoped y offset. Math.min because of inline
11494
11588
  // style (#9400)
11495
11589
  this.baselineOffset = padding + Math.min(
@@ -11502,7 +11596,7 @@
11502
11596
  if (this.heightSetting) {
11503
11597
  this.baselineOffset += (this.heightSetting - metrics.h) / 2;
11504
11598
  }
11505
- if (this.needsBox) {
11599
+ if (this.needsBox && !text.textPath) {
11506
11600
  // Create the border box if it is not already present
11507
11601
  if (!this.box) {
11508
11602
  // Symbol definition exists (#5324)
@@ -11532,32 +11626,34 @@
11532
11626
  */
11533
11627
  SVGLabel.prototype.updateTextPadding = function () {
11534
11628
  var text = this.text;
11535
- this.updateBoxSize();
11536
- // Determine y based on the baseline
11537
- var textY = this.baseline ? 0 : this.baselineOffset;
11538
- var textX = pick(this.paddingLeft,
11539
- this.padding);
11540
- // compensate for alignment
11541
- if (defined(this.widthSetting) &&
11542
- this.bBox &&
11543
- (this.textAlign === 'center' || this.textAlign === 'right')) {
11544
- textX += { center: 0.5, right: 1 }[this.textAlign] * (this.widthSetting - this.bBox.width);
11545
- }
11546
- // update if anything changed
11547
- if (textX !== text.x || textY !== text.y) {
11548
- text.attr('x', textX);
11549
- // #8159 - prevent misplaced data labels in treemap
11550
- // (useHTML: true)
11551
- if (text.hasBoxWidthChanged) {
11552
- this.bBox = text.getBBox(true);
11553
- }
11554
- if (typeof textY !== 'undefined') {
11555
- text.attr('y', textY);
11556
- }
11557
- }
11558
- // record current values
11559
- text.x = textX;
11560
- text.y = textY;
11629
+ if (!text.textPath) {
11630
+ this.updateBoxSize();
11631
+ // Determine y based on the baseline
11632
+ var textY = this.baseline ? 0 : this.baselineOffset;
11633
+ var textX = pick(this.paddingLeft,
11634
+ this.padding);
11635
+ // compensate for alignment
11636
+ if (defined(this.widthSetting) &&
11637
+ this.bBox &&
11638
+ (this.textAlign === 'center' || this.textAlign === 'right')) {
11639
+ textX += { center: 0.5, right: 1 }[this.textAlign] * (this.widthSetting - this.bBox.width);
11640
+ }
11641
+ // update if anything changed
11642
+ if (textX !== text.x || textY !== text.y) {
11643
+ text.attr('x', textX);
11644
+ // #8159 - prevent misplaced data labels in treemap
11645
+ // (useHTML: true)
11646
+ if (text.hasBoxWidthChanged) {
11647
+ this.bBox = text.getBBox(true);
11648
+ }
11649
+ if (typeof textY !== 'undefined') {
11650
+ text.attr('y', textY);
11651
+ }
11652
+ }
11653
+ // record current values
11654
+ text.x = textX;
11655
+ text.y = textY;
11656
+ }
11561
11657
  };
11562
11658
  SVGLabel.prototype.widthSetter = function (value) {
11563
11659
  // width:auto => null
@@ -11859,6 +11955,7 @@
11859
11955
  win = H.win;
11860
11956
  var attr = U.attr,
11861
11957
  extend = U.extend,
11958
+ fireEvent = U.fireEvent,
11862
11959
  isString = U.isString,
11863
11960
  objectEach = U.objectEach,
11864
11961
  pick = U.pick;
@@ -11919,6 +12016,7 @@
11919
12016
  if (!hasMarkup &&
11920
12017
  !this.ellipsis &&
11921
12018
  !this.width &&
12019
+ !wrapper.textPath &&
11922
12020
  (textStr.indexOf(' ') === -1 ||
11923
12021
  (this.noWrap && !regexMatchBreaks.test(textStr)))) {
11924
12022
  textNode.appendChild(doc.createTextNode(this.unescapeEntities(textStr)));
@@ -11935,7 +12033,7 @@
11935
12033
  // Step 2. Do as many as we can of the modifications to the tree
11936
12034
  // structure before it is added to the DOM
11937
12035
  this.modifyTree(ast.nodes);
11938
- ast.addToDOM(wrapper.element);
12036
+ ast.addToDOM(textNode);
11939
12037
  // Step 3. Some modifications can't be done until the structure is
11940
12038
  // in the DOM, because we need to read computed metrics.
11941
12039
  this.modifyDOM();
@@ -12193,6 +12291,7 @@
12193
12291
  }
12194
12292
  };
12195
12293
  nodes.forEach(modifyChild);
12294
+ fireEvent(this.svgElement, 'afterModifyTree', { nodes: nodes });
12196
12295
  };
12197
12296
  /*
12198
12297
  * Truncate the text node contents to a given length. Used when the css
@@ -12206,7 +12305,7 @@
12206
12305
  rotation = svgElement.rotation;
12207
12306
  // Cache the lengths to avoid checking the same twice
12208
12307
  var lengths = [];
12209
- // Word wrap can not be truncated to shorter than one word, ellipsis
12308
+ // Word wrap cannot be truncated to shorter than one word, ellipsis
12210
12309
  // text can be completely blank.
12211
12310
  var minIndex = words ? 1 : 0;
12212
12311
  var maxIndex = (text || words || '').length;
@@ -12524,7 +12623,7 @@
12524
12623
  this.url = this.getReferenceURL();
12525
12624
  // Add description
12526
12625
  var desc = this.createElement('desc').add();
12527
- desc.element.appendChild(doc.createTextNode('Created with Highcharts 10.2.0'));
12626
+ desc.element.appendChild(doc.createTextNode('Created with Highcharts 10.2.1'));
12528
12627
  renderer.defs = this.createElement('defs').add();
12529
12628
  renderer.allowHTML = allowHTML;
12530
12629
  renderer.forExport = forExport;
@@ -12849,7 +12948,7 @@
12849
12948
  * The shape type.
12850
12949
  *
12851
12950
  * @param {boolean} [useHTML=false]
12852
- * Wether to use HTML to render the label.
12951
+ * Whether to use HTML to render the label.
12853
12952
  *
12854
12953
  * @return {Highcharts.SVGElement}
12855
12954
  * The button element.
@@ -13976,7 +14075,7 @@
13976
14075
  * coordinates it should be pinned to.
13977
14076
  *
13978
14077
  * @param {boolean} [useHTML=false]
13979
- * Wether to use HTML to render the label.
14078
+ * Whether to use HTML to render the label.
13980
14079
  *
13981
14080
  * @param {boolean} [baseline=false]
13982
14081
  * Whether to position the label relative to the text baseline,
@@ -17669,7 +17768,7 @@
17669
17768
  formatter: function () {
17670
17769
  var numberFormatter = this.axis.chart.numberFormatter;
17671
17770
  /* eslint-enable valid-jsdoc */
17672
- return numberFormatter(this.total, -1);
17771
+ return numberFormatter(this.total || 0, -1);
17673
17772
  },
17674
17773
  /**
17675
17774
  * CSS styles for the label.
@@ -19693,6 +19792,9 @@
19693
19792
  // Backwards mapping is much faster than array searching (#7725)
19694
19793
  this.names.keys[point.name] = x;
19695
19794
  }
19795
+ else if (point.x) {
19796
+ x = point.x; // #17438
19797
+ }
19696
19798
  return x;
19697
19799
  };
19698
19800
  /**
@@ -24342,11 +24444,22 @@
24342
24444
  return this.label;
24343
24445
  };
24344
24446
  /**
24345
- * Place the tooltip in a chart without spilling over
24346
- * and not covering the point it self.
24447
+ * Place the tooltip in a chart without spilling over and not covering the
24448
+ * point itself.
24347
24449
  *
24348
- * @private
24349
24450
  * @function Highcharts.Tooltip#getPosition
24451
+ *
24452
+ * @param {number} boxWidth
24453
+ * Width of the tooltip box.
24454
+ *
24455
+ * @param {number} boxHeight
24456
+ * Height of the tooltip box.
24457
+ *
24458
+ * @param {Highcharts.Point} point
24459
+ * Tooltip related point.
24460
+ *
24461
+ * @return {Highcharts.PositionObject}
24462
+ * Recommended position of the tooltip.
24350
24463
  */
24351
24464
  Tooltip.prototype.getPosition = function (boxWidth, boxHeight, point) {
24352
24465
  var chart = this.chart,
@@ -25487,7 +25600,7 @@
25487
25600
  * point. For other axes it holds the X value.
25488
25601
  *
25489
25602
  * @name Highcharts.Point#category
25490
- * @type {string}
25603
+ * @type {number|string}
25491
25604
  */
25492
25605
  this.category = void 0;
25493
25606
  /**
@@ -25851,7 +25964,7 @@
25851
25964
  props.push('graphic', 'upperGraphic', 'shadowGroup');
25852
25965
  }
25853
25966
  if (kinds.dataLabel) {
25854
- props.push('dataLabel', 'dataLabelUpper', 'connector');
25967
+ props.push('dataLabel', 'dataLabelPath', 'dataLabelUpper', 'connector');
25855
25968
  }
25856
25969
  i = props.length;
25857
25970
  while (i--) {
@@ -27367,10 +27480,8 @@
27367
27480
  // Only search on hovered series if it has stickyTracking false
27368
27481
  [hoverSeries] :
27369
27482
  // Filter what series to look in.
27370
- series.filter(function (s) {
27371
- return eventArgs.filter ? eventArgs.filter(s) : filter(s) &&
27372
- s.stickyTracking;
27373
- });
27483
+ series.filter(function (s) { return s.stickyTracking &&
27484
+ (eventArgs.filter || filter)(s); });
27374
27485
  // Use existing hovered point or find the one closest to coordinates.
27375
27486
  var hoverPoint = useExisting || !e ?
27376
27487
  existingHoverPoint :
@@ -27398,8 +27509,8 @@
27398
27509
  * Boost returns a minimal point. Convert it to a usable
27399
27510
  * point for tooltip and states.
27400
27511
  */
27401
- if (s.chart.isBoosting) {
27402
- point = s.getPoint(point);
27512
+ if (s.boosted && s.boost) {
27513
+ point = s.boost.getPoint(point);
27403
27514
  }
27404
27515
  hoverPoints.push(point);
27405
27516
  }
@@ -28303,7 +28414,7 @@
28303
28414
  * @function Highcharts.Pointer#touchSelect
28304
28415
  */
28305
28416
  Pointer.prototype.touchSelect = function (e) {
28306
- return Boolean(this.chart.options.chart.zoomBySingleTouch &&
28417
+ return Boolean(this.chart.options.chart.zooming.singleTouch &&
28307
28418
  e.touches &&
28308
28419
  e.touches.length === 1);
28309
28420
  };
@@ -28317,12 +28428,12 @@
28317
28428
  var chart = this.chart,
28318
28429
  options = chart.options.chart,
28319
28430
  inverted = chart.inverted;
28320
- var zoomType = options.zoomType || '',
28431
+ var zoomType = options.zooming.type || '',
28321
28432
  zoomX,
28322
28433
  zoomY;
28323
28434
  // Look for the pinchType option
28324
28435
  if (/touch/.test(e.type)) {
28325
- zoomType = pick(options.pinchType, zoomType);
28436
+ zoomType = pick(options.zooming.pinchType, zoomType);
28326
28437
  }
28327
28438
  this.zoomX = zoomX = /x/.test(zoomType);
28328
28439
  this.zoomY = zoomY = /y/.test(zoomType);
@@ -30056,46 +30167,23 @@
30056
30167
  * Functions
30057
30168
  *
30058
30169
  * */
30059
- /* eslint-disable valid-jsdoc */
30060
- /**
30061
- * Internal function to initialize an individual series.
30062
- * @private
30063
- */
30064
- function getSeries(chart, options) {
30065
- if (options === void 0) { options = {}; }
30066
- var optionsChart = chart.options.chart,
30067
- type = (options.type ||
30068
- optionsChart.type ||
30069
- optionsChart.defaultSeriesType ||
30070
- ''),
30071
- SeriesClass = SeriesRegistry.seriesTypes[type];
30072
- // No such series type
30073
- if (!SeriesRegistry) {
30074
- error(17, true, chart, { missingModuleFor: type });
30075
- }
30076
- var series = new SeriesClass();
30077
- if (typeof series.init === 'function') {
30078
- series.init(chart, options);
30079
- }
30080
- return series;
30081
- }
30082
- SeriesRegistry.getSeries = getSeries;
30083
30170
  /**
30084
30171
  * Registers class pattern of a series.
30085
30172
  *
30086
30173
  * @private
30087
30174
  */
30088
- function registerSeriesType(seriesType, seriesClass) {
30175
+ function registerSeriesType(seriesType, SeriesClass) {
30089
30176
  var defaultPlotOptions = defaultOptions.plotOptions || {},
30090
- seriesOptions = seriesClass.defaultOptions;
30091
- if (!seriesClass.prototype.pointClass) {
30092
- seriesClass.prototype.pointClass = Point;
30177
+ seriesOptions = SeriesClass.defaultOptions,
30178
+ seriesProto = SeriesClass.prototype;
30179
+ seriesProto.type = seriesType;
30180
+ if (!seriesProto.pointClass) {
30181
+ seriesProto.pointClass = Point;
30093
30182
  }
30094
- seriesClass.prototype.type = seriesType;
30095
30183
  if (seriesOptions) {
30096
30184
  defaultPlotOptions[seriesType] = seriesOptions;
30097
30185
  }
30098
- SeriesRegistry.seriesTypes[seriesType] = seriesClass;
30186
+ SeriesRegistry.seriesTypes[seriesType] = SeriesClass;
30099
30187
  }
30100
30188
  SeriesRegistry.registerSeriesType = registerSeriesType;
30101
30189
  /**
@@ -30140,7 +30228,6 @@
30140
30228
  return SeriesRegistry.seriesTypes[type];
30141
30229
  }
30142
30230
  SeriesRegistry.seriesType = seriesType;
30143
- /* eslint-enable valid-jsdoc */
30144
30231
  })(SeriesRegistry || (SeriesRegistry = {}));
30145
30232
  /* *
30146
30233
  *
@@ -30389,6 +30476,15 @@
30389
30476
  this.labelCollectors = [];
30390
30477
  this.callback = callback;
30391
30478
  this.isResizing = 0;
30479
+ var zooming = optionsChart.zooming = optionsChart.zooming || {};
30480
+ // Other options have no default so just pick
30481
+ if (userOptions.chart && !userOptions.chart.zooming) {
30482
+ zooming.resetButton = optionsChart.resetZoomButton;
30483
+ }
30484
+ zooming.key = pick(zooming.key, optionsChart.zoomKey);
30485
+ zooming.pinchType = pick(zooming.pinchType, optionsChart.pinchType);
30486
+ zooming.singleTouch = pick(zooming.singleTouch, optionsChart.zoomBySingleTouch);
30487
+ zooming.type = pick(zooming.type, optionsChart.zoomType);
30392
30488
  /**
30393
30489
  * The options structure for the chart after merging
30394
30490
  * {@link #defaultOptions} and {@link #userOptions}. It contains
@@ -32820,7 +32916,7 @@
32820
32916
  Chart.prototype.showResetZoom = function () {
32821
32917
  var chart = this,
32822
32918
  lang = defaultOptions.lang,
32823
- btnOptions = chart.options.chart.resetZoomButton,
32919
+ btnOptions = chart.options.chart.zooming.resetButton,
32824
32920
  theme = btnOptions.theme,
32825
32921
  alignTo = (btnOptions.relativeTo === 'chart' ||
32826
32922
  btnOptions.relativeTo === 'spacingBox' ?
@@ -33065,6 +33161,8 @@
33065
33161
  *
33066
33162
  * Note: We need to define these references after initializers are bound to
33067
33163
  * chart's prototype.
33164
+ *
33165
+ * @private
33068
33166
  */
33069
33167
  collectionsWithInit: {
33070
33168
  // collectionName: [ initializingMethod, [extraArguments] ]
@@ -33075,6 +33173,7 @@
33075
33173
  /**
33076
33174
  * These collections (arrays) implement update() methods with support for
33077
33175
  * one-to-one option.
33176
+ * @private
33078
33177
  */
33079
33178
  collectionsWithUpdate: [
33080
33179
  'xAxis',
@@ -33084,6 +33183,7 @@
33084
33183
  /**
33085
33184
  * These properties cause isDirtyBox to be set to true when updating. Can be
33086
33185
  * extended from plugins.
33186
+ * @private
33087
33187
  */
33088
33188
  propsRequireDirtyBox: [
33089
33189
  'backgroundColor',
@@ -33100,7 +33200,7 @@
33100
33200
  /**
33101
33201
  * These properties require a full reflow of chart elements, best
33102
33202
  * implemented through running `Chart.setSize` internally (#8190).
33103
- * @type {Array}
33203
+ * @private
33104
33204
  */
33105
33205
  propsRequireReflow: [
33106
33206
  'margin',
@@ -33117,6 +33217,7 @@
33117
33217
  /**
33118
33218
  * These properties cause all series to be updated when updating. Can be
33119
33219
  * extended from plugins.
33220
+ * @private
33120
33221
  */
33121
33222
  propsRequireUpdateSeries: [
33122
33223
  'chart.inverted',
@@ -33789,6 +33890,9 @@
33789
33890
  /**
33790
33891
  * The line cap used for line ends and line joins on the graph.
33791
33892
  *
33893
+ * @sample highcharts/series-line/linecap/
33894
+ * Line cap comparison
33895
+ *
33792
33896
  * @type {Highcharts.SeriesLinecapValue}
33793
33897
  * @default round
33794
33898
  * @product highcharts highstock
@@ -35190,13 +35294,13 @@
35190
35294
  */
35191
35295
  x: 0,
35192
35296
  /**
35193
- * The Z index of the data labels. The default Z index puts it above
35194
- * the series. Use a Z index of 2 to display it behind the series.
35297
+ * The z index of the data labels. Use a `zIndex` of 6 to display it above
35298
+ * the series, or use a `zIndex` of 2 to display it behind the series.
35195
35299
  *
35196
35300
  * @type {number}
35197
35301
  * @default 6
35198
35302
  * @since 2.3.5
35199
- * @apioption plotOptions.series.dataLabels.z
35303
+ * @apioption plotOptions.series.dataLabels.zIndex
35200
35304
  */
35201
35305
  /**
35202
35306
  * The y position offset of the label relative to the point in
@@ -35634,6 +35738,8 @@
35634
35738
  *
35635
35739
  * @sample highcharts/coloraxis/custom-color-key/
35636
35740
  * Custom color key
35741
+ * @sample highcharts/coloraxis/color-key-with-stops/
35742
+ * Custom colorKey with color axis stops
35637
35743
  * @sample highcharts/coloraxis/changed-default-color-key/
35638
35744
  * Changed default color key
35639
35745
  *
@@ -35675,7 +35781,7 @@
35675
35781
 
35676
35782
  return seriesDefaults;
35677
35783
  });
35678
- _registerModule(_modules, 'Core/Series/Series.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/DefaultOptions.js'], _modules['Core/Foundation.js'], _modules['Core/Globals.js'], _modules['Core/Legend/LegendSymbol.js'], _modules['Core/Series/Point.js'], _modules['Core/Series/SeriesDefaults.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Renderer/SVG/SVGElement.js'], _modules['Core/Utilities.js']], function (A, D, F, H, LegendSymbol, Point, SeriesDefaults, SeriesRegistry, SVGElement, U) {
35784
+ _registerModule(_modules, 'Core/Series/Series.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/DefaultOptions.js'], _modules['Core/Foundation.js'], _modules['Core/Globals.js'], _modules['Core/Legend/LegendSymbol.js'], _modules['Core/Series/Point.js'], _modules['Core/Series/SeriesDefaults.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Renderer/SVG/SVGElement.js'], _modules['Core/Utilities.js']], function (A, DO, F, H, LegendSymbol, Point, SeriesDefaults, SeriesRegistry, SVGElement, U) {
35679
35785
  /* *
35680
35786
  *
35681
35787
  * (c) 2010-2021 Torstein Honsi
@@ -35687,7 +35793,7 @@
35687
35793
  * */
35688
35794
  var animObject = A.animObject,
35689
35795
  setAnimation = A.setAnimation;
35690
- var defaultOptions = D.defaultOptions;
35796
+ var defaultOptions = DO.defaultOptions;
35691
35797
  var registerEventOptions = F.registerEventOptions;
35692
35798
  var hasTouch = H.hasTouch,
35693
35799
  svg = H.svg,
@@ -36386,7 +36492,7 @@
36386
36492
  };
36387
36493
  /**
36388
36494
  * Internal function called from setData. If the point count is the same
36389
- * as is was, or if there are overlapping X values, just run
36495
+ * as it was, or if there are overlapping X values, just run
36390
36496
  * Point.update which is cheaper, allows animation, and keeps references
36391
36497
  * to points. This also allows adding or removing points if the X-es
36392
36498
  * don't match.
@@ -36552,6 +36658,7 @@
36552
36658
  * `false` to prevent.
36553
36659
  */
36554
36660
  Series.prototype.setData = function (data, redraw, animation, updatePoints) {
36661
+ if (redraw === void 0) { redraw = true; }
36555
36662
  var series = this,
36556
36663
  oldData = series.points,
36557
36664
  oldDataLength = (oldData && oldData.length) || 0,
@@ -36584,7 +36691,6 @@
36584
36691
  }
36585
36692
  data = copiedData || data || [];
36586
36693
  var dataLength = data.length;
36587
- redraw = pick(redraw, true);
36588
36694
  if (dataSorting && dataSorting.enabled) {
36589
36695
  data = this.sortData(data);
36590
36696
  }
@@ -36599,7 +36705,7 @@
36599
36705
  series.visible &&
36600
36706
  // Soft updating has no benefit in boost, and causes JS error
36601
36707
  // (#8355)
36602
- !series.isSeriesBoosting) {
36708
+ !series.boosted) {
36603
36709
  updatedData = this.updateData(data, animation);
36604
36710
  }
36605
36711
  if (!updatedData) {
@@ -36990,26 +37096,6 @@
36990
37096
  else {
36991
37097
  // splat the y data in case of ohlc data array
36992
37098
  point = (new PointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i])));
36993
- /**
36994
- * Highcharts Stock only. If a point object is created by data
36995
- * grouping, it doesn't reflect actual points in the raw
36996
- * data. In this case, the `dataGroup` property holds
36997
- * information that points back to the raw data.
36998
- *
36999
- * - `dataGroup.start` is the index of the first raw data
37000
- * point in the group.
37001
- *
37002
- * - `dataGroup.length` is the amount of points in the
37003
- * group.
37004
- *
37005
- * @product highstock
37006
- *
37007
- * @name Highcharts.Point#dataGroup
37008
- * @type {Highcharts.DataGroupingInfoObject|undefined}
37009
- *
37010
- * @sample stock/members/point-datagroup
37011
- * Click to inspect raw data points
37012
- */
37013
37099
  point.dataGroup = series.groupMap[groupCropStartIndex + i];
37014
37100
  if (point.dataGroup.options) {
37015
37101
  point.options = point.dataGroup.options;
@@ -37902,8 +37988,8 @@
37902
37988
  clips = (this.clips || []),
37903
37989
  graph = this.graph,
37904
37990
  area = this.area,
37905
- chartSizeMax = Math.max(chart.chartWidth,
37906
- chart.chartHeight),
37991
+ plotSizeMax = Math.max(chart.plotWidth,
37992
+ chart.plotHeight),
37907
37993
  axis = this[(this.zoneAxis || 'y') + 'Axis'],
37908
37994
  inverted = chart.inverted;
37909
37995
  var translatedFrom,
@@ -37940,8 +38026,8 @@
37940
38026
  translatedFrom = reversed ?
37941
38027
  (horiz ? chart.plotWidth : 0) :
37942
38028
  (horiz ? 0 : (axis.toPixels(extremes.min) || 0));
37943
- translatedFrom = clamp(pick(translatedTo, translatedFrom), 0, chartSizeMax);
37944
- translatedTo = clamp(Math.round(axis.toPixels(pick(threshold.value, extremes.max), true) || 0), 0, chartSizeMax);
38029
+ translatedFrom = clamp(pick(translatedTo, translatedFrom), 0, plotSizeMax);
38030
+ translatedTo = clamp(Math.round(axis.toPixels(pick(threshold.value, extremes.max), true) || 0), 0, plotSizeMax);
37945
38031
  if (ignoreZones) {
37946
38032
  translatedFrom = translatedTo =
37947
38033
  axis.toPixels(extremes.max);
@@ -37954,7 +38040,7 @@
37954
38040
  x: inverted ? pxPosMax : pxPosMin,
37955
38041
  y: 0,
37956
38042
  width: pxRange,
37957
- height: chartSizeMax
38043
+ height: plotSizeMax
37958
38044
  };
37959
38045
  if (!horiz) {
37960
38046
  clipAttr.x = chart.plotHeight - clipAttr.x;
@@ -37964,7 +38050,7 @@
37964
38050
  clipAttr = {
37965
38051
  x: 0,
37966
38052
  y: inverted ? pxPosMax : pxPosMin,
37967
- width: chartSizeMax,
38053
+ width: plotSizeMax,
37968
38054
  height: pxRange
37969
38055
  };
37970
38056
  if (horiz) {
@@ -38418,7 +38504,7 @@
38418
38504
  }
38419
38505
  if (tree[sideB]) {
38420
38506
  // compare distance to current best to splitting point to
38421
- // decide wether to check side B or not
38507
+ // decide whether to check side B or not
38422
38508
  if (Math.sqrt(tdist * tdist) < ret[kdComparer]) {
38423
38509
  nPoint2 = _search(search, tree[sideB], depth + 1, dimensions);
38424
38510
  ret = (nPoint2[kdComparer] <
@@ -39347,6 +39433,31 @@
39347
39433
  return this.chart.isInsidePlot(plotX, plotY, options);
39348
39434
  };
39349
39435
  Series.defaultOptions = SeriesDefaults;
39436
+ /**
39437
+ * Registry of all available series types.
39438
+ *
39439
+ * @name Highcharts.Series.types
39440
+ * @type {Highcharts.Dictionary<typeof_Highcharts.Series>}
39441
+ */
39442
+ Series.types = SeriesRegistry.seriesTypes;
39443
+ /* *
39444
+ *
39445
+ * Static Functions
39446
+ *
39447
+ * */
39448
+ /**
39449
+ * Registers a series class to be accessible via `Series.types`.
39450
+ *
39451
+ * @function Highcharts.Series.registerType
39452
+ *
39453
+ * @param {string} seriesType
39454
+ * The series type as an identifier string in lower case.
39455
+ *
39456
+ * @param {Function} SeriesClass
39457
+ * The series class as a class pattern or a constructor function with
39458
+ * prototype.
39459
+ */
39460
+ Series.registerType = SeriesRegistry.registerSeriesType;
39350
39461
  return Series;
39351
39462
  }());
39352
39463
  extend(Series.prototype, {
@@ -40095,7 +40206,7 @@
40095
40206
  * Scrollable plot area
40096
40207
  * @sample highcharts/chart/scrollable-plotarea-vertical
40097
40208
  * Vertically scrollable plot area
40098
- * @sample {gantt} highcharts/chart/scrollable-plotarea-vertical
40209
+ * @sample {gantt} gantt/chart/scrollable-plotarea-vertical
40099
40210
  * Gantt chart with vertically scrollable plot area
40100
40211
  *
40101
40212
  * @since 6.1.0
@@ -40150,7 +40261,7 @@
40150
40261
  (''); // keep doclets above in transpiled file
40151
40262
 
40152
40263
  });
40153
- _registerModule(_modules, 'Core/Axis/StackingAxis.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Axis/Axis.js'], _modules['Core/Utilities.js']], function (A, Axis, U) {
40264
+ _registerModule(_modules, 'Core/Axis/Stacking/StackItem.js', [_modules['Core/FormatUtilities.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (FU, SeriesRegistry, U) {
40154
40265
  /* *
40155
40266
  *
40156
40267
  * (c) 2010-2021 Torstein Honsi
@@ -40160,264 +40271,28 @@
40160
40271
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
40161
40272
  *
40162
40273
  * */
40163
- var getDeferredAnimation = A.getDeferredAnimation;
40164
- var addEvent = U.addEvent,
40165
- destroyObjectProperties = U.destroyObjectProperties,
40166
- fireEvent = U.fireEvent,
40167
- isNumber = U.isNumber,
40168
- objectEach = U.objectEach;
40169
- /* *
40170
- *
40171
- * Composition
40172
- *
40173
- * */
40174
- /**
40175
- * @private
40176
- */
40177
- var StackingAxis;
40178
- (function (StackingAxis) {
40179
- /* *
40180
- *
40181
- * Declarations
40182
- *
40183
- * */
40184
- /* *
40185
- *
40186
- * Constants
40187
- *
40188
- * */
40189
- var composedClasses = [];
40190
- /* *
40191
- *
40192
- * Functions
40193
- *
40194
- * */
40195
- /* eslint-disable valid-jsdoc */
40196
- /**
40197
- * Extends axis with stacking support.
40198
- * @private
40199
- */
40200
- function compose(AxisClass) {
40201
- if (composedClasses.indexOf(AxisClass) === -1) {
40202
- composedClasses.push(AxisClass);
40203
- addEvent(AxisClass, 'init', onInit);
40204
- addEvent(AxisClass, 'destroy', onDestroy);
40205
- }
40206
- return AxisClass;
40207
- }
40208
- StackingAxis.compose = compose;
40209
- /**
40210
- * @private
40211
- */
40212
- function onDestroy() {
40213
- var stacking = this.stacking;
40214
- if (!stacking) {
40215
- return;
40216
- }
40217
- var stacks = stacking.stacks;
40218
- // Destroy each stack total
40219
- objectEach(stacks, function (stack, stackKey) {
40220
- destroyObjectProperties(stack);
40221
- stacks[stackKey] = null;
40222
- });
40223
- if (stacking &&
40224
- stacking.stackTotalGroup) {
40225
- stacking.stackTotalGroup.destroy();
40226
- }
40227
- }
40228
- /**
40229
- * @private
40230
- */
40231
- function onInit() {
40232
- var axis = this;
40233
- if (!axis.stacking) {
40234
- axis.stacking = new Additions(axis);
40235
- }
40236
- }
40237
- /* *
40238
- *
40239
- * Class
40240
- *
40241
- * */
40242
- /**
40243
- * Adds stacking support to axes.
40244
- * @private
40245
- * @class
40246
- */
40247
- var Additions = /** @class */ (function () {
40248
- /* *
40249
- *
40250
- * Constructors
40251
- *
40252
- * */
40253
- function Additions(axis) {
40254
- this.oldStacks = {};
40255
- this.stacks = {};
40256
- this.stacksTouched = 0;
40257
- this.axis = axis;
40258
- }
40259
- /* *
40260
- *
40261
- * Functions
40262
- *
40263
- * */
40264
- /**
40265
- * Build the stacks from top down
40266
- * @private
40267
- */
40268
- Additions.prototype.buildStacks = function () {
40269
- var stacking = this;
40270
- var axis = stacking.axis;
40271
- var axisSeries = axis.series;
40272
- var reversedStacks = axis.options.reversedStacks;
40273
- var len = axisSeries.length;
40274
- var actualSeries,
40275
- i;
40276
- if (!axis.isXAxis) {
40277
- stacking.usePercentage = false;
40278
- i = len;
40279
- while (i--) {
40280
- actualSeries = axisSeries[reversedStacks ? i : len - i - 1];
40281
- actualSeries.setStackedPoints();
40282
- actualSeries.setGroupedPoints();
40283
- }
40284
- // Loop up again to compute percent and stream stack
40285
- for (i = 0; i < len; i++) {
40286
- axisSeries[i].modifyStacks();
40287
- }
40288
- fireEvent(axis, 'afterBuildStacks');
40289
- }
40290
- };
40291
- /**
40292
- * @private
40293
- */
40294
- Additions.prototype.cleanStacks = function () {
40295
- var stacking = this,
40296
- axis = stacking.axis;
40297
- var stacks;
40298
- if (!axis.isXAxis) {
40299
- if (stacking.oldStacks) {
40300
- stacks = stacking.stacks = stacking.oldStacks;
40301
- }
40302
- // reset stacks
40303
- objectEach(stacks, function (type) {
40304
- objectEach(type, function (stack) {
40305
- stack.cumulative = stack.total;
40306
- });
40307
- });
40308
- }
40309
- };
40310
- /**
40311
- * Set all the stacks to initial states and destroy unused ones.
40312
- * @private
40313
- */
40314
- Additions.prototype.resetStacks = function () {
40315
- var stacking = this,
40316
- axis = stacking.axis,
40317
- stacks = stacking.stacks;
40318
- if (!axis.isXAxis) {
40319
- objectEach(stacks, function (type) {
40320
- objectEach(type, function (stack, x) {
40321
- // Clean up memory after point deletion (#1044, #4320)
40322
- if (isNumber(stack.touched) &&
40323
- stack.touched < stacking.stacksTouched) {
40324
- stack.destroy();
40325
- delete type[x];
40326
- // Reset stacks
40327
- }
40328
- else {
40329
- stack.total = null;
40330
- stack.cumulative = null;
40331
- }
40332
- });
40333
- });
40334
- }
40335
- };
40336
- /**
40337
- * @private
40338
- */
40339
- Additions.prototype.renderStackTotals = function () {
40340
- var stacking = this,
40341
- axis = stacking.axis,
40342
- chart = axis.chart,
40343
- renderer = chart.renderer,
40344
- stacks = stacking.stacks,
40345
- stackLabelsAnim = axis.options.stackLabels &&
40346
- axis.options.stackLabels.animation,
40347
- animationConfig = getDeferredAnimation(chart,
40348
- stackLabelsAnim || false),
40349
- stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||
40350
- renderer
40351
- .g('stack-labels')
40352
- .attr({
40353
- zIndex: 6,
40354
- opacity: 0
40355
- })
40356
- .add());
40357
- // plotLeft/Top will change when y axis gets wider so we need to
40358
- // translate the stackTotalGroup at every render call. See bug #506
40359
- // and #516
40360
- stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
40361
- // Render each stack total
40362
- objectEach(stacks, function (type) {
40363
- objectEach(type, function (stack) {
40364
- stack.render(stackTotalGroup);
40365
- });
40366
- });
40367
- stackTotalGroup.animate({
40368
- opacity: 1
40369
- }, animationConfig);
40370
- };
40371
- return Additions;
40372
- }());
40373
- StackingAxis.Additions = Additions;
40374
- })(StackingAxis || (StackingAxis = {}));
40375
- /* *
40376
- *
40377
- * Default Export
40378
- *
40379
- * */
40380
-
40381
- return StackingAxis;
40382
- });
40383
- _registerModule(_modules, 'Extensions/Stacking.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Chart/Chart.js'], _modules['Core/FormatUtilities.js'], _modules['Core/Globals.js'], _modules['Core/Series/Series.js'], _modules['Core/Axis/StackingAxis.js'], _modules['Core/Utilities.js']], function (Axis, Chart, F, H, Series, StackingAxis, U) {
40384
- /* *
40385
- *
40386
- * (c) 2010-2021 Torstein Honsi
40387
- *
40388
- * License: www.highcharts.com/license
40389
- *
40390
- * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
40391
- *
40392
- * */
40393
- var format = F.format;
40394
- var correctFloat = U.correctFloat,
40395
- defined = U.defined,
40274
+ var format = FU.format;
40275
+ var Series = SeriesRegistry.series;
40276
+ var defined = U.defined,
40396
40277
  destroyObjectProperties = U.destroyObjectProperties,
40397
- isArray = U.isArray,
40398
40278
  isNumber = U.isNumber,
40399
- objectEach = U.objectEach,
40400
40279
  pick = U.pick;
40401
40280
  /* *
40402
40281
  *
40403
40282
  * Class
40404
40283
  *
40405
40284
  * */
40406
- /* eslint-disable no-invalid-this, valid-jsdoc */
40407
40285
  /**
40408
40286
  * The class for stacks. Each stack, on a specific X value and either negative
40409
40287
  * or positive, has its own stack item.
40410
- *
40411
40288
  * @private
40412
- * @class
40413
- * @name Highcharts.StackItem
40414
- * @param {Highcharts.Axis} axis
40415
- * @param {Highcharts.YAxisStackLabelsOptions} options
40416
- * @param {boolean} isNegative
40417
- * @param {number} x
40418
- * @param {Highcharts.OptionsStackingValue} [stackOption]
40419
40289
  */
40420
40290
  var StackItem = /** @class */ (function () {
40291
+ /* *
40292
+ *
40293
+ * Constructor
40294
+ *
40295
+ * */
40421
40296
  function StackItem(axis, options, isNegative, x, stackOption) {
40422
40297
  var inverted = axis.chart.inverted;
40423
40298
  this.axis = axis;
@@ -40429,6 +40304,7 @@
40429
40304
  this.x = x;
40430
40305
  // Initialize total value
40431
40306
  this.total = null;
40307
+ this.cumulative = null;
40432
40308
  // This will keep each points' extremes stored by series.index and point
40433
40309
  // index
40434
40310
  this.points = {};
@@ -40454,23 +40330,18 @@
40454
40330
  }
40455
40331
  /**
40456
40332
  * @private
40457
- * @function Highcharts.StackItem#destroy
40458
40333
  */
40459
40334
  StackItem.prototype.destroy = function () {
40460
40335
  destroyObjectProperties(this, this.axis);
40461
40336
  };
40462
40337
  /**
40463
40338
  * Renders the stack total label and adds it to the stack label group.
40464
- *
40465
40339
  * @private
40466
- * @function Highcharts.StackItem#render
40467
- * @param {Highcharts.SVGElement} group
40468
40340
  */
40469
40341
  StackItem.prototype.render = function (group) {
40470
40342
  var chart = this.axis.chart,
40471
40343
  options = this.options,
40472
40344
  formatOption = options.format,
40473
- attr = {},
40474
40345
  str = formatOption ? // format the text in the label
40475
40346
  format(formatOption,
40476
40347
  this,
@@ -40485,14 +40356,14 @@
40485
40356
  // Create new label
40486
40357
  this.label = chart.renderer
40487
40358
  .label(str, null, null, options.shape, null, null, options.useHTML, false, 'stack-labels');
40488
- attr = {
40489
- r: options.borderRadius || 0,
40490
- text: str,
40491
- rotation: options.rotation,
40492
- // set default padding to 5 as it is in datalabels #12308
40493
- padding: pick(options.padding, 5),
40494
- visibility: 'hidden' // hidden until setOffset is called
40495
- };
40359
+ var attr = {
40360
+ r: options.borderRadius || 0,
40361
+ text: str,
40362
+ rotation: options.rotation,
40363
+ // set default padding to 5 as it is in datalabels #12308
40364
+ padding: pick(options.padding, 5),
40365
+ visibility: 'hidden' // hidden until setOffset is called
40366
+ };
40496
40367
  if (!chart.styledMode) {
40497
40368
  attr.fill = options.backgroundColor;
40498
40369
  attr.stroke = options.borderColor;
@@ -40510,49 +40381,39 @@
40510
40381
  /**
40511
40382
  * Sets the offset that the stack has from the x value and repositions the
40512
40383
  * label.
40513
- *
40514
40384
  * @private
40515
- * @function Highcarts.StackItem#setOffset
40516
- * @param {number} xOffset
40517
- * @param {number} xWidth
40518
- * @param {number} [boxBottom]
40519
- * @param {number} [boxTop]
40520
- * @param {number} [defaultX]
40521
40385
  */
40522
40386
  StackItem.prototype.setOffset = function (xOffset, xWidth, boxBottom, boxTop, defaultX) {
40523
- var stackItem = this,
40524
- axis = stackItem.axis,
40387
+ var axis = this.axis,
40525
40388
  chart = axis.chart,
40526
40389
  // stack value translated mapped to chart coordinates
40527
40390
  y = axis.translate(axis.stacking.usePercentage ?
40528
40391
  100 :
40529
40392
  (boxTop ?
40530
40393
  boxTop :
40531
- stackItem.total), 0, 0, 0, 1),
40394
+ this.total), 0, 0, 0, 1),
40532
40395
  yZero = axis.translate(boxBottom ? boxBottom : 0), // stack origin
40533
- // stack height:
40534
- h = defined(y) && Math.abs(y - yZero),
40535
40396
  // x position:
40536
40397
  x = pick(defaultX,
40537
- chart.xAxis[0].translate(stackItem.x)) +
40398
+ chart.xAxis[0].translate(this.x)) +
40538
40399
  xOffset,
40539
- stackBox = defined(y) && stackItem.getStackBox(chart,
40540
- stackItem,
40400
+ stackBox = defined(y) && this.getStackBox(chart,
40401
+ this,
40541
40402
  x,
40542
40403
  y,
40543
- xWidth,
40544
- h,
40404
+ xWidth,
40405
+ // stack height:
40406
+ Math.abs(y - yZero),
40545
40407
  axis),
40546
- label = stackItem.label,
40547
- isNegative = stackItem.isNegative,
40548
- isJustify = pick(stackItem.options.overflow, 'justify') === 'justify',
40549
- textAlign = stackItem.textAlign,
40550
- visible;
40408
+ label = this.label,
40409
+ isNegative = this.isNegative,
40410
+ textAlign = this.textAlign;
40551
40411
  if (label && stackBox) {
40552
40412
  var bBox = label.getBBox(),
40553
- padding = label.padding,
40554
- boxOffsetX = void 0,
40555
- boxOffsetY = void 0;
40413
+ padding = label.padding;
40414
+ var boxOffsetX = void 0,
40415
+ isJustify = pick(this.options.overflow, 'justify') === 'justify',
40416
+ visible = void 0;
40556
40417
  if (textAlign === 'left') {
40557
40418
  boxOffsetX = chart.inverted ? -padding : padding;
40558
40419
  }
@@ -40569,18 +40430,18 @@
40569
40430
  bBox.width / 2;
40570
40431
  }
40571
40432
  }
40572
- boxOffsetY = chart.inverted ?
40573
- bBox.height / 2 : (isNegative ? -padding : bBox.height);
40433
+ var boxOffsetY = chart.inverted ?
40434
+ bBox.height / 2 : (isNegative ? -padding : bBox.height);
40574
40435
  // Reset alignOptions property after justify #12337
40575
- stackItem.alignOptions.x = pick(stackItem.options.x, 0);
40576
- stackItem.alignOptions.y = pick(stackItem.options.y, 0);
40436
+ this.alignOptions.x = pick(this.options.x, 0);
40437
+ this.alignOptions.y = pick(this.options.y, 0);
40577
40438
  // Set the stackBox position
40578
40439
  stackBox.x -= boxOffsetX;
40579
40440
  stackBox.y -= boxOffsetY;
40580
40441
  // Align the label to the box
40581
- label.align(stackItem.alignOptions, null, stackBox);
40442
+ label.align(this.alignOptions, null, stackBox);
40582
40443
  // Check if label is inside the plotArea #12294
40583
- if (chart.isInsidePlot(label.alignAttr.x + boxOffsetX - stackItem.alignOptions.x, label.alignAttr.y + boxOffsetY - stackItem.alignOptions.y)) {
40444
+ if (chart.isInsidePlot(label.alignAttr.x + boxOffsetX - this.alignOptions.x, label.alignAttr.y + boxOffsetY - this.alignOptions.y)) {
40584
40445
  label.show();
40585
40446
  }
40586
40447
  else {
@@ -40590,13 +40451,13 @@
40590
40451
  }
40591
40452
  if (isJustify) {
40592
40453
  // Justify stackLabel into the stackBox
40593
- Series.prototype.justifyDataLabel.call(this.axis, label, stackItem.alignOptions, label.alignAttr, bBox, stackBox);
40454
+ Series.prototype.justifyDataLabel.call(this.axis, label, this.alignOptions, label.alignAttr, bBox, stackBox);
40594
40455
  }
40595
40456
  label.attr({
40596
40457
  x: label.alignAttr.x,
40597
40458
  y: label.alignAttr.y
40598
40459
  });
40599
- if (pick(!isJustify && stackItem.options.crop, true)) {
40460
+ if (pick(!isJustify && this.options.crop, true)) {
40600
40461
  visible =
40601
40462
  isNumber(label.x) &&
40602
40463
  isNumber(label.y) &&
@@ -40634,13 +40495,92 @@
40634
40495
  };
40635
40496
  return StackItem;
40636
40497
  }());
40498
+ /* *
40499
+ *
40500
+ * Default Export
40501
+ *
40502
+ * */
40503
+ /* *
40504
+ *
40505
+ * API Declarations
40506
+ *
40507
+ * */
40508
+ /**
40509
+ * Stack of data points
40510
+ *
40511
+ * @product highcharts
40512
+ *
40513
+ * @interface Highcharts.StackItemObject
40514
+ */ /**
40515
+ * Alignment settings
40516
+ * @name Highcharts.StackItemObject#alignOptions
40517
+ * @type {Highcharts.AlignObject}
40518
+ */ /**
40519
+ * Related axis
40520
+ * @name Highcharts.StackItemObject#axis
40521
+ * @type {Highcharts.Axis}
40522
+ */ /**
40523
+ * Cumulative value of the stacked data points
40524
+ * @name Highcharts.StackItemObject#cumulative
40525
+ * @type {number}
40526
+ */ /**
40527
+ * True if on the negative side
40528
+ * @name Highcharts.StackItemObject#isNegative
40529
+ * @type {boolean}
40530
+ */ /**
40531
+ * Related SVG element
40532
+ * @name Highcharts.StackItemObject#label
40533
+ * @type {Highcharts.SVGElement}
40534
+ */ /**
40535
+ * Related stack options
40536
+ * @name Highcharts.StackItemObject#options
40537
+ * @type {Highcharts.YAxisStackLabelsOptions}
40538
+ */ /**
40539
+ * Total value of the stacked data points
40540
+ * @name Highcharts.StackItemObject#total
40541
+ * @type {number}
40542
+ */ /**
40543
+ * Shared x value of the stack
40544
+ * @name Highcharts.StackItemObject#x
40545
+ * @type {number}
40546
+ */
40547
+ ''; // keeps doclets above in JS file
40548
+
40549
+ return StackItem;
40550
+ });
40551
+ _registerModule(_modules, 'Core/Axis/Stacking/StackingAxis.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Axis/Axis.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Axis/Stacking/StackItem.js'], _modules['Core/Utilities.js']], function (A, Axis, SeriesRegistry, StackItem, U) {
40552
+ /* *
40553
+ *
40554
+ * (c) 2010-2021 Torstein Honsi
40555
+ *
40556
+ * License: www.highcharts.com/license
40557
+ *
40558
+ * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
40559
+ *
40560
+ * */
40561
+ var getDeferredAnimation = A.getDeferredAnimation;
40562
+ var seriesProto = SeriesRegistry.series.prototype;
40563
+ var addEvent = U.addEvent,
40564
+ correctFloat = U.correctFloat,
40565
+ defined = U.defined,
40566
+ destroyObjectProperties = U.destroyObjectProperties,
40567
+ fireEvent = U.fireEvent,
40568
+ isArray = U.isArray,
40569
+ isNumber = U.isNumber,
40570
+ objectEach = U.objectEach,
40571
+ pick = U.pick;
40572
+ /* *
40573
+ *
40574
+ * Functions
40575
+ *
40576
+ * */
40637
40577
  /**
40638
40578
  * Generate stacks for each series and calculate stacks total values
40639
40579
  *
40640
40580
  * @private
40641
40581
  * @function Highcharts.Chart#getStacks
40642
40582
  */
40643
- Chart.prototype.getStacks = function () {
40583
+ function chartGetStacks() {
40644
40584
  var chart = this,
40645
40585
  inverted = chart.inverted;
40646
40586
  // reset stacks for each yAxis
@@ -40662,10 +40602,111 @@
40662
40602
  ].join(',');
40663
40603
  }
40664
40604
  });
40665
- };
40666
- // Stacking methods defined on the Axis prototype
40667
- StackingAxis.compose(Axis);
40668
- // Stacking methods defined for Series prototype
40605
+ }
40606
+ /**
40607
+ * @private
40608
+ */
40609
+ function onAxisDestroy() {
40610
+ var stacking = this.stacking;
40611
+ if (!stacking) {
40612
+ return;
40613
+ }
40614
+ var stacks = stacking.stacks;
40615
+ // Destroy each stack total
40616
+ objectEach(stacks, function (stack, stackKey) {
40617
+ destroyObjectProperties(stack);
40618
+ stacks[stackKey] = null;
40619
+ });
40620
+ if (stacking &&
40621
+ stacking.stackTotalGroup) {
40622
+ stacking.stackTotalGroup.destroy();
40623
+ }
40624
+ }
40625
+ /**
40626
+ * @private
40627
+ */
40628
+ function onAxisInit() {
40629
+ var axis = this;
40630
+ if (!axis.stacking) {
40631
+ axis.stacking = new AxisAdditions(axis);
40632
+ }
40633
+ }
40634
+ /**
40635
+ * Get stack indicator, according to it's x-value, to determine points with the
40636
+ * same x-value
40637
+ *
40638
+ * @private
40639
+ * @function Highcharts.Series#getStackIndicator
40640
+ */
40641
+ function seriesGetStackIndicator(stackIndicator, x, index, key) {
40642
+ // Update stack indicator, when:
40643
+ // first point in a stack || x changed || stack type (negative vs positive)
40644
+ // changed:
40645
+ if (!defined(stackIndicator) ||
40646
+ stackIndicator.x !== x ||
40647
+ (key && stackIndicator.stackKey !== key)) {
40648
+ stackIndicator = {
40649
+ x: x,
40650
+ index: 0,
40651
+ key: key,
40652
+ stackKey: key
40653
+ };
40654
+ }
40655
+ else {
40656
+ (stackIndicator).index++;
40657
+ }
40658
+ stackIndicator.key =
40659
+ [index, x, stackIndicator.index].join(',');
40660
+ return stackIndicator;
40661
+ }
40662
+ /**
40663
+ * Iterate over all stacks and compute the absolute values to percent
40664
+ *
40665
+ * @private
40666
+ * @function Highcharts.Series#modifyStacks
40667
+ */
40668
+ function seriesModifyStacks() {
40669
+ var series = this,
40670
+ yAxis = series.yAxis,
40671
+ stackKey = series.stackKey,
40672
+ stacks = yAxis.stacking.stacks,
40673
+ processedXData = series.processedXData,
40674
+ stacking = series.options.stacking,
40675
+ stacker = series[stacking + 'Stacker'];
40676
+ var stackIndicator;
40677
+ if (stacker) { // Modifier function exists (Series.percentStacker etc.)
40678
+ [stackKey, '-' + stackKey].forEach(function (key) {
40679
+ var i = processedXData.length,
40680
+ x,
40681
+ stack,
40682
+ pointExtremes;
40683
+ while (i--) {
40684
+ x = processedXData[i];
40685
+ stackIndicator = series.getStackIndicator(stackIndicator, x, series.index, key);
40686
+ stack = stacks[key] && stacks[key][x];
40687
+ pointExtremes =
40688
+ stack && stack.points[stackIndicator.key];
40689
+ if (pointExtremes) {
40690
+ stacker.call(series, pointExtremes, stack, i);
40691
+ }
40692
+ }
40693
+ });
40694
+ }
40695
+ }
40696
+ /**
40697
+ * Modifier function for percent stacks. Blows up the stack to 100%.
40698
+ *
40699
+ * @private
40700
+ * @function Highcharts.Series#percentStacker
40701
+ */
40702
+ function seriesPercentStacker(pointExtremes, stack, i) {
40703
+ var totalFactor = stack.total ? 100 / stack.total : 0;
40704
+ // Y bottom value
40705
+ pointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor);
40706
+ // Y value
40707
+ pointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor);
40708
+ this.stackedYData[i] = pointExtremes[1];
40709
+ }
40669
40710
  /**
40670
40711
  * Set grouped points in a stack-like object. When `centerInCategory` is true,
40671
40712
  * and `stacking` is not enabled, we need a pseudo (horizontal) stack in order
@@ -40675,7 +40716,7 @@
40675
40716
  * @function Highcharts.Series#setStackedPoints
40676
40717
  * @return {void}
40677
40718
  */
40678
- Series.prototype.setGroupedPoints = function () {
40719
+ function seriesSetGroupedPoints() {
40679
40720
  var stacking = this.yAxis.stacking;
40680
40721
  if (this.options.centerInCategory &&
40681
40722
  (this.is('column') || this.is('columnrange')) &&
@@ -40684,7 +40725,7 @@
40684
40725
  !this.options.stacking &&
40685
40726
  // With only one series, we don't need to consider centerInCategory
40686
40727
  this.chart.series.length > 1) {
40687
- Series.prototype.setStackedPoints.call(this, 'group');
40728
+ seriesProto.setStackedPoints.call(this, 'group');
40688
40729
  // After updating, if we now have proper stacks, we must delete the group
40689
40730
  // pseudo stacks (#14986)
40690
40731
  }
@@ -40696,20 +40737,29 @@
40696
40737
  }
40697
40738
  });
40698
40739
  }
40699
- };
40740
+ }
40700
40741
  /**
40701
40742
  * Adds series' points value to corresponding stack
40702
40743
  *
40703
40744
  * @private
40704
40745
  * @function Highcharts.Series#setStackedPoints
40705
40746
  */
40706
- Series.prototype.setStackedPoints = function (stackingParam) {
40747
+ function seriesSetStackedPoints(stackingParam) {
40707
40748
  var stacking = stackingParam || this.options.stacking;
40708
40749
  if (!stacking || (this.visible !== true &&
40709
40750
  this.chart.options.chart.ignoreHiddenSeries !== false)) {
40710
40751
  return;
40711
40752
  }
40712
- var series = this, xData = series.processedXData, yData = series.processedYData, stackedYData = [], yDataLength = yData.length, seriesOptions = series.options, threshold = seriesOptions.threshold, stackThreshold = pick(seriesOptions.startFromThreshold && threshold, 0), stackOption = seriesOptions.stack, stackKey = stackingParam ? "" + series.type + ",".concat(stacking) : series.stackKey, negKey = '-' + stackKey, negStacks = series.negStacks, yAxis = series.yAxis, stacks = yAxis.stacking.stacks, oldStacks = yAxis.stacking.oldStacks, stackIndicator, isNegative, stack, other, key, pointKey, i, x, y;
40753
+ var series = this, xData = series.processedXData, yData = series.processedYData, stackedYData = [], yDataLength = yData.length, seriesOptions = series.options, threshold = seriesOptions.threshold, stackThreshold = pick(seriesOptions.startFromThreshold && threshold, 0), stackOption = seriesOptions.stack, stackKey = stackingParam ? "" + series.type + ",".concat(stacking) : series.stackKey, negKey = '-' + stackKey, negStacks = series.negStacks, yAxis = series.yAxis, stacks = yAxis.stacking.stacks, oldStacks = yAxis.stacking.oldStacks;
40754
+ var stackIndicator,
40755
+ isNegative,
40756
+ stack,
40757
+ other,
40758
+ key,
40759
+ pointKey,
40760
+ i,
40761
+ x,
40762
+ y;
40713
40763
  yAxis.stacking.stacksTouched += 1;
40714
40764
  // loop over the non-null y values and read them into a local array
40715
40765
  for (i = 0; i < yDataLength; i++) {
@@ -40734,7 +40784,7 @@
40734
40784
  stacks[key][x].total = null;
40735
40785
  }
40736
40786
  else {
40737
- stacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, isNegative, x, stackOption);
40787
+ stacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, !!isNegative, x, stackOption);
40738
40788
  }
40739
40789
  }
40740
40790
  // If the StackItem doesn't exist, create it first
@@ -40811,130 +40861,195 @@
40811
40861
  }
40812
40862
  // Reset old stacks
40813
40863
  yAxis.stacking.oldStacks = {};
40814
- };
40815
- /**
40816
- * Iterate over all stacks and compute the absolute values to percent
40864
+ }
40865
+ /* *
40866
+ *
40867
+ * Classes
40817
40868
  *
40869
+ * */
40870
+ /**
40871
+ * Adds stacking support to axes.
40818
40872
  * @private
40819
- * @function Highcharts.Series#modifyStacks
40873
+ * @class
40820
40874
  */
40821
- Series.prototype.modifyStacks = function () {
40822
- var series = this,
40823
- yAxis = series.yAxis,
40824
- stackKey = series.stackKey,
40825
- stacks = yAxis.stacking.stacks,
40826
- processedXData = series.processedXData,
40827
- stackIndicator,
40828
- stacking = series.options.stacking;
40829
- if (series[stacking + 'Stacker']) { // Modifier function exists
40830
- [stackKey, '-' + stackKey].forEach(function (key) {
40831
- var i = processedXData.length,
40832
- x,
40833
- stack,
40834
- pointExtremes;
40875
+ var AxisAdditions = /** @class */ (function () {
40876
+ /* *
40877
+ *
40878
+ * Constructors
40879
+ *
40880
+ * */
40881
+ function AxisAdditions(axis) {
40882
+ this.oldStacks = {};
40883
+ this.stacks = {};
40884
+ this.stacksTouched = 0;
40885
+ this.axis = axis;
40886
+ }
40887
+ /* *
40888
+ *
40889
+ * Functions
40890
+ *
40891
+ * */
40892
+ /**
40893
+ * Build the stacks from top down
40894
+ * @private
40895
+ */
40896
+ AxisAdditions.prototype.buildStacks = function () {
40897
+ var stacking = this;
40898
+ var axis = stacking.axis;
40899
+ var axisSeries = axis.series;
40900
+ var reversedStacks = axis.options.reversedStacks;
40901
+ var len = axisSeries.length;
40902
+ var actualSeries,
40903
+ i;
40904
+ if (!axis.isXAxis) {
40905
+ stacking.usePercentage = false;
40906
+ i = len;
40835
40907
  while (i--) {
40836
- x = processedXData[i];
40837
- stackIndicator = series.getStackIndicator(stackIndicator, x, series.index, key);
40838
- stack = stacks[key] && stacks[key][x];
40839
- pointExtremes =
40840
- stack && stack.points[stackIndicator.key];
40841
- if (pointExtremes) {
40842
- series[stacking + 'Stacker'](pointExtremes, stack, i);
40843
- }
40908
+ actualSeries = axisSeries[reversedStacks ? i : len - i - 1];
40909
+ actualSeries.setStackedPoints();
40910
+ actualSeries.setGroupedPoints();
40911
+ }
40912
+ // Loop up again to compute percent and stream stack
40913
+ for (i = 0; i < len; i++) {
40914
+ axisSeries[i].modifyStacks();
40844
40915
  }
40916
+ fireEvent(axis, 'afterBuildStacks');
40917
+ }
40918
+ };
40919
+ /**
40920
+ * @private
40921
+ */
40922
+ AxisAdditions.prototype.cleanStacks = function () {
40923
+ var stacking = this,
40924
+ axis = stacking.axis;
40925
+ var stacks;
40926
+ if (!axis.isXAxis) {
40927
+ if (stacking.oldStacks) {
40928
+ stacks = stacking.stacks = stacking.oldStacks;
40929
+ }
40930
+ // reset stacks
40931
+ objectEach(stacks, function (type) {
40932
+ objectEach(type, function (stack) {
40933
+ stack.cumulative = stack.total;
40934
+ });
40935
+ });
40936
+ }
40937
+ };
40938
+ /**
40939
+ * Set all the stacks to initial states and destroy unused ones.
40940
+ * @private
40941
+ */
40942
+ AxisAdditions.prototype.resetStacks = function () {
40943
+ var stacking = this,
40944
+ axis = stacking.axis,
40945
+ stacks = stacking.stacks;
40946
+ if (!axis.isXAxis) {
40947
+ objectEach(stacks, function (type) {
40948
+ objectEach(type, function (stack, x) {
40949
+ // Clean up memory after point deletion (#1044, #4320)
40950
+ if (isNumber(stack.touched) &&
40951
+ stack.touched < stacking.stacksTouched) {
40952
+ stack.destroy();
40953
+ delete type[x];
40954
+ // Reset stacks
40955
+ }
40956
+ else {
40957
+ stack.total = null;
40958
+ stack.cumulative = null;
40959
+ }
40960
+ });
40961
+ });
40962
+ }
40963
+ };
40964
+ /**
40965
+ * @private
40966
+ */
40967
+ AxisAdditions.prototype.renderStackTotals = function () {
40968
+ var stacking = this,
40969
+ axis = stacking.axis,
40970
+ chart = axis.chart,
40971
+ renderer = chart.renderer,
40972
+ stacks = stacking.stacks,
40973
+ stackLabelsAnim = axis.options.stackLabels &&
40974
+ axis.options.stackLabels.animation,
40975
+ animationConfig = getDeferredAnimation(chart,
40976
+ stackLabelsAnim || false),
40977
+ stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||
40978
+ renderer
40979
+ .g('stack-labels')
40980
+ .attr({
40981
+ zIndex: 6,
40982
+ opacity: 0
40983
+ })
40984
+ .add());
40985
+ // plotLeft/Top will change when y axis gets wider so we need to
40986
+ // translate the stackTotalGroup at every render call. See bug #506
40987
+ // and #516
40988
+ stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
40989
+ // Render each stack total
40990
+ objectEach(stacks, function (type) {
40991
+ objectEach(type, function (stack) {
40992
+ stack.render(stackTotalGroup);
40993
+ });
40845
40994
  });
40846
- }
40847
- };
40848
- /**
40849
- * Modifier function for percent stacks. Blows up the stack to 100%.
40995
+ stackTotalGroup.animate({
40996
+ opacity: 1
40997
+ }, animationConfig);
40998
+ };
40999
+ return AxisAdditions;
41000
+ }());
41001
+ /* *
40850
41002
  *
40851
- * @private
40852
- * @function Highcharts.Series#percentStacker
40853
- */
40854
- Series.prototype.percentStacker = function (pointExtremes, stack, i) {
40855
- var totalFactor = stack.total ? 100 / stack.total : 0;
40856
- // Y bottom value
40857
- pointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor);
40858
- // Y value
40859
- pointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor);
40860
- this.stackedYData[i] = pointExtremes[1];
40861
- };
40862
- /**
40863
- * Get stack indicator, according to it's x-value, to determine points with the
40864
- * same x-value
41003
+ * Composition
40865
41004
  *
40866
- * @private
40867
- * @function Highcharts.Series#getStackIndicator
40868
- */
40869
- Series.prototype.getStackIndicator = function (stackIndicator, x, index, key) {
40870
- // Update stack indicator, when:
40871
- // first point in a stack || x changed || stack type (negative vs positive)
40872
- // changed:
40873
- if (!defined(stackIndicator) ||
40874
- stackIndicator.x !== x ||
40875
- (key && stackIndicator.stackKey !== key)) {
40876
- stackIndicator = {
40877
- x: x,
40878
- index: 0,
40879
- key: key,
40880
- stackKey: key
40881
- };
40882
- }
40883
- else {
40884
- (stackIndicator).index++;
41005
+ * */
41006
+ var StackingAxis;
41007
+ (function (StackingAxis) {
41008
+ /* *
41009
+ *
41010
+ * Constants
41011
+ *
41012
+ * */
41013
+ var composedClasses = [];
41014
+ /* *
41015
+ *
41016
+ * Functions
41017
+ *
41018
+ * */
41019
+ /**
41020
+ * Extends axis with stacking support.
41021
+ * @private
41022
+ */
41023
+ function compose(AxisClass, ChartClass, SeriesClass) {
41024
+ if (composedClasses.indexOf(AxisClass) === -1) {
41025
+ composedClasses.push(AxisClass);
41026
+ addEvent(AxisClass, 'init', onAxisInit);
41027
+ addEvent(AxisClass, 'destroy', onAxisDestroy);
41028
+ }
41029
+ if (composedClasses.indexOf(ChartClass) === -1) {
41030
+ composedClasses.push(ChartClass);
41031
+ var chartProto = ChartClass.prototype;
41032
+ chartProto.getStacks = chartGetStacks;
41033
+ }
41034
+ if (composedClasses.indexOf(SeriesClass) === -1) {
41035
+ composedClasses.push(SeriesClass);
41036
+ var seriesProto_1 = SeriesClass.prototype;
41037
+ seriesProto_1.getStackIndicator = seriesGetStackIndicator;
41038
+ seriesProto_1.modifyStacks = seriesModifyStacks;
41039
+ seriesProto_1.percentStacker = seriesPercentStacker;
41040
+ seriesProto_1.setGroupedPoints = seriesSetGroupedPoints;
41041
+ seriesProto_1.setStackedPoints = seriesSetStackedPoints;
41042
+ }
40885
41043
  }
40886
- stackIndicator.key =
40887
- [index, x, stackIndicator.index].join(',');
40888
- return stackIndicator;
40889
- };
40890
- H.StackItem = StackItem; // @todo -> master
41044
+ StackingAxis.compose = compose;
41045
+ })(StackingAxis || (StackingAxis = {}));
40891
41046
  /* *
40892
41047
  *
40893
41048
  * Default Export
40894
41049
  *
40895
41050
  * */
40896
- /**
40897
- * Stack of data points
40898
- *
40899
- * @product highcharts
40900
- *
40901
- * @interface Highcharts.StackItemObject
40902
- */ /**
40903
- * Alignment settings
40904
- * @name Highcharts.StackItemObject#alignOptions
40905
- * @type {Highcharts.AlignObject}
40906
- */ /**
40907
- * Related axis
40908
- * @name Highcharts.StackItemObject#axis
40909
- * @type {Highcharts.Axis}
40910
- */ /**
40911
- * Cumulative value of the stacked data points
40912
- * @name Highcharts.StackItemObject#cumulative
40913
- * @type {number}
40914
- */ /**
40915
- * True if on the negative side
40916
- * @name Highcharts.StackItemObject#isNegative
40917
- * @type {boolean}
40918
- */ /**
40919
- * Related SVG element
40920
- * @name Highcharts.StackItemObject#label
40921
- * @type {Highcharts.SVGElement}
40922
- */ /**
40923
- * Related stack options
40924
- * @name Highcharts.StackItemObject#options
40925
- * @type {Highcharts.YAxisStackLabelsOptions}
40926
- */ /**
40927
- * Total value of the stacked data points
40928
- * @name Highcharts.StackItemObject#total
40929
- * @type {number}
40930
- */ /**
40931
- * Shared x value of the stack
40932
- * @name Highcharts.StackItemObject#x
40933
- * @type {number}
40934
- */
40935
- ''; // keeps doclets above in JS file
40936
41051
 
40937
- return H.StackItem;
41052
+ return StackingAxis;
40938
41053
  });
40939
41054
  _registerModule(_modules, 'Series/Line/LineSeries.js', [_modules['Core/Series/Series.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (Series, SeriesRegistry, U) {
40940
41055
  /* *
@@ -43327,6 +43442,8 @@
43327
43442
  * lineWidth, marker, step, useOhlcData
43328
43443
  * @product highcharts highstock
43329
43444
  * @optionparent plotOptions.column
43445
+ *
43446
+ * @private
43330
43447
  */
43331
43448
  ColumnSeries.defaultOptions = merge(Series.defaultOptions, {
43332
43449
  /**
@@ -43880,6 +43997,7 @@
43880
43997
  extend = U.extend,
43881
43998
  fireEvent = U.fireEvent,
43882
43999
  isArray = U.isArray,
44000
+ isString = U.isString,
43883
44001
  merge = U.merge,
43884
44002
  objectEach = U.objectEach,
43885
44003
  pick = U.pick,
@@ -44123,7 +44241,13 @@
44123
44241
  seriesOptions = series.options,
44124
44242
  points = series.points,
44125
44243
  hasRendered = series.hasRendered || 0,
44126
- renderer = chart.renderer;
44244
+ renderer = chart.renderer,
44245
+ _a = chart.options.chart,
44246
+ backgroundColor = _a.backgroundColor,
44247
+ plotBackgroundColor = _a.plotBackgroundColor,
44248
+ contrastColor = renderer.getContrast((isString(plotBackgroundColor) && plotBackgroundColor) ||
44249
+ (isString(backgroundColor) && backgroundColor) ||
44250
+ "#000000" /* Palette.neutralColor100 */);
44127
44251
  var seriesDlOptions = seriesOptions.dataLabels,
44128
44252
  pointOptions,
44129
44253
  dataLabelsGroup;
@@ -44210,7 +44334,7 @@
44210
44334
  labelDistance < 0 ||
44211
44335
  !!seriesOptions.stacking ?
44212
44336
  point.contrastColor :
44213
- "#000000" /* Palette.neutralColor100 */;
44337
+ contrastColor;
44214
44338
  }
44215
44339
  else {
44216
44340
  delete point.contrastColor;
@@ -44315,9 +44439,6 @@
44315
44439
  // read text bounding box
44316
44440
  dataLabel.css(style).shadow(labelOptions.shadow);
44317
44441
  }
44318
- if (!dataLabel.added) {
44319
- dataLabel.add(dataLabelsGroup);
44320
- }
44321
44442
  if (labelOptions.textPath && !labelOptions.useHTML) {
44322
44443
  dataLabel.setTextPath((point.getDataLabelPath &&
44323
44444
  point.getDataLabelPath(dataLabel)) || point.graphic, labelOptions.textPath);
@@ -44327,6 +44448,9 @@
44327
44448
  point.dataLabelPath = (point.dataLabelPath.destroy());
44328
44449
  }
44329
44450
  }
44451
+ if (!dataLabel.added) {
44452
+ dataLabel.add(dataLabelsGroup);
44453
+ }
44330
44454
  // Now the data label is created and placed at 0,0, so
44331
44455
  // we need to align it
44332
44456
  series.alignDataLabel(point, dataLabel, labelOptions, null, isNew);
@@ -45024,9 +45148,12 @@
45024
45148
  * series, in a scatter plot the series.name by default shows in the
45025
45149
  * headerFormat and point.x and point.y in the pointFormat.
45026
45150
  *
45027
- * @product highcharts highstock
45151
+ * @product highcharts highstock highmaps
45028
45152
  */
45029
45153
  tooltip: {
45154
+ /**
45155
+ * @product highcharts highstock
45156
+ */
45030
45157
  headerFormat: '<span style="color:{point.color}">\u25CF</span> ' +
45031
45158
  '<span style="font-size: 10px"> {series.name}</span><br/>',
45032
45159
  pointFormat: 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>'
@@ -46056,6 +46183,8 @@
46056
46183
  * boostBlending
46057
46184
  * @product highcharts highmaps
46058
46185
  * @optionparent plotOptions.pie
46186
+ *
46187
+ * @private
46059
46188
  */
46060
46189
  PieSeries.defaultOptions = merge(Series.defaultOptions, {
46061
46190
  /**
@@ -46164,7 +46293,7 @@
46164
46293
  /**
46165
46294
  * Alignment method for data labels. Possible values are:
46166
46295
  *
46167
- * - `toPlotEdges`: Each label touches the nearest vertical edge of
46296
+ * - `plotEdges`: Each label touches the nearest vertical edge of
46168
46297
  * the plot area.
46169
46298
  *
46170
46299
  * - `connectors`: Connectors have the same x position and the
@@ -47796,7 +47925,7 @@
47796
47925
 
47797
47926
  return Responsive;
47798
47927
  });
47799
- _registerModule(_modules, 'masters/highcharts.src.js', [_modules['Core/Globals.js'], _modules['Core/Utilities.js'], _modules['Core/DefaultOptions.js'], _modules['Core/Animation/Fx.js'], _modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Renderer/HTML/AST.js'], _modules['Core/FormatUtilities.js'], _modules['Core/Renderer/RendererUtilities.js'], _modules['Core/Renderer/SVG/SVGElement.js'], _modules['Core/Renderer/SVG/SVGRenderer.js'], _modules['Core/Renderer/HTML/HTMLElement.js'], _modules['Core/Renderer/HTML/HTMLRenderer.js'], _modules['Core/Axis/Axis.js'], _modules['Core/Axis/DateTimeAxis.js'], _modules['Core/Axis/LogarithmicAxis.js'], _modules['Core/Axis/PlotLineOrBand/PlotLineOrBand.js'], _modules['Core/Axis/Tick.js'], _modules['Core/Tooltip.js'], _modules['Core/Series/Point.js'], _modules['Core/Pointer.js'], _modules['Core/MSPointer.js'], _modules['Core/Legend/Legend.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Series/Series.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Series/Column/ColumnSeries.js'], _modules['Series/Column/ColumnDataLabel.js'], _modules['Series/Pie/PieSeries.js'], _modules['Series/Pie/PieDataLabel.js'], _modules['Core/Series/DataLabel.js'], _modules['Core/Responsive.js'], _modules['Core/Color/Color.js'], _modules['Core/Time.js']], function (Highcharts, Utilities, DefaultOptions, Fx, Animation, AST, FormatUtilities, RendererUtilities, SVGElement, SVGRenderer, HTMLElement, HTMLRenderer, Axis, DateTimeAxis, LogarithmicAxis, PlotLineOrBand, Tick, Tooltip, Point, Pointer, MSPointer, Legend, Chart, Series, SeriesRegistry, ColumnSeries, ColumnDataLabel, PieSeries, PieDataLabel, DataLabel, Responsive, Color, Time) {
47928
+ _registerModule(_modules, 'masters/highcharts.src.js', [_modules['Core/Globals.js'], _modules['Core/Utilities.js'], _modules['Core/DefaultOptions.js'], _modules['Core/Animation/Fx.js'], _modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Renderer/HTML/AST.js'], _modules['Core/FormatUtilities.js'], _modules['Core/Renderer/RendererUtilities.js'], _modules['Core/Renderer/SVG/SVGElement.js'], _modules['Core/Renderer/SVG/SVGRenderer.js'], _modules['Core/Renderer/HTML/HTMLElement.js'], _modules['Core/Renderer/HTML/HTMLRenderer.js'], _modules['Core/Axis/Axis.js'], _modules['Core/Axis/DateTimeAxis.js'], _modules['Core/Axis/LogarithmicAxis.js'], _modules['Core/Axis/PlotLineOrBand/PlotLineOrBand.js'], _modules['Core/Axis/Tick.js'], _modules['Core/Tooltip.js'], _modules['Core/Series/Point.js'], _modules['Core/Pointer.js'], _modules['Core/MSPointer.js'], _modules['Core/Legend/Legend.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Axis/Stacking/StackingAxis.js'], _modules['Core/Axis/Stacking/StackItem.js'], _modules['Core/Series/Series.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Series/Column/ColumnSeries.js'], _modules['Series/Column/ColumnDataLabel.js'], _modules['Series/Pie/PieSeries.js'], _modules['Series/Pie/PieDataLabel.js'], _modules['Core/Series/DataLabel.js'], _modules['Core/Responsive.js'], _modules['Core/Color/Color.js'], _modules['Core/Time.js']], function (Highcharts, Utilities, DefaultOptions, Fx, Animation, AST, FormatUtilities, RendererUtilities, SVGElement, SVGRenderer, HTMLElement, HTMLRenderer, Axis, DateTimeAxis, LogarithmicAxis, PlotLineOrBand, Tick, Tooltip, Point, Pointer, MSPointer, Legend, Chart, StackingAxis, StackItem, Series, SeriesRegistry, ColumnSeries, ColumnDataLabel, PieSeries, PieDataLabel, DataLabel, Responsive, Color, Time) {
47800
47929
 
47801
47930
  var G = Highcharts;
47802
47931
  // Animation
@@ -47817,6 +47946,7 @@
47817
47946
  G.Point = Point;
47818
47947
  G.Pointer = (MSPointer.isRequired() ? MSPointer : Pointer);
47819
47948
  G.Series = Series;
47949
+ G.StackItem = StackItem;
47820
47950
  G.SVGElement = SVGElement;
47821
47951
  G.SVGRenderer = SVGRenderer;
47822
47952
  G.Tick = Tick;
@@ -47892,6 +48022,7 @@
47892
48022
  PieDataLabel.compose(PieSeries);
47893
48023
  PlotLineOrBand.compose(Axis);
47894
48024
  Responsive.compose(Chart);
48025
+ StackingAxis.compose(Axis, Chart, Series);
47895
48026
  // Default Export
47896
48027
 
47897
48028
  return G;
@@ -48566,6 +48697,10 @@
48566
48697
  * first item is a float between 0 and 1 assigning the relative
48567
48698
  * position in the gradient, and the second item is the color.
48568
48699
  *
48700
+ * @sample highcharts/coloraxis/coloraxis-stops/
48701
+ * Color axis stops
48702
+ * @sample highcharts/coloraxis/color-key-with-stops/
48703
+ * Color axis stops with custom colorKey
48569
48704
  * @sample {highmaps} maps/demo/heatmap/
48570
48705
  * Heatmap with three color stops
48571
48706
  *
@@ -50039,7 +50174,7 @@
50039
50174
  var mapNavigation = this.chart.options.mapNavigation;
50040
50175
  // Pinch status
50041
50176
  if (pick(mapNavigation.enableTouchZoom, mapNavigation.enabled)) {
50042
- this.chart.options.chart.pinchType = 'xy';
50177
+ this.chart.options.chart.zooming.pinchType = 'xy';
50043
50178
  }
50044
50179
  proceed.apply(this, [].slice.call(arguments, 1));
50045
50180
  });
@@ -52523,7 +52658,8 @@
52523
52658
  relativeLength = U.relativeLength;
52524
52659
  /**
52525
52660
  * The world size in terms of 10k meters in the Web Mercator projection, to
52526
- * match a 256 square tile to zoom level 0
52661
+ * match a 256 square tile to zoom level 0.
52662
+ * @private
52527
52663
  */
52528
52664
  var worldSize = 400.979322;
52529
52665
  var tileSize = 256;
@@ -54285,6 +54421,8 @@
54285
54421
  * @excluding marker, cluster
54286
54422
  * @product highmaps
54287
54423
  * @optionparent plotOptions.map
54424
+ *
54425
+ * @private
54288
54426
  */
54289
54427
  MapSeries.defaultOptions = merge(ScatterSeries.defaultOptions, {
54290
54428
  /**
@@ -54295,6 +54433,8 @@
54295
54433
  * US map with world map backdrop
54296
54434
  *
54297
54435
  * @since 10.0.0
54436
+ *
54437
+ * @private
54298
54438
  */
54299
54439
  affectsMapView: true,
54300
54440
  animation: false,
@@ -54688,8 +54828,9 @@
54688
54828
  * The geometry type. Can be one of `LineString`, `Polygon`, `MultiLineString`
54689
54829
  * or `MultiPolygon`.
54690
54830
  *
54831
+ * @declare Highcharts.MapGeometryTypeValue
54691
54832
  * @type {string}
54692
- * @since 9.3.0
54833
+ * @since 9.3.0
54693
54834
  * @product highmaps
54694
54835
  * @validvalue ["LineString", "Polygon", "MultiLineString", "MultiPolygon"]
54695
54836
  * @apioption series.map.data.geometry.type
@@ -55716,28 +55857,11 @@
55716
55857
  merge = U.merge,
55717
55858
  pick = U.pick,
55718
55859
  stableSort = U.stableSort;
55719
- /**
55720
- * @interface Highcharts.BubbleLegendFormatterContextObject
55721
- */ /**
55722
- * The center y position of the range.
55723
- * @name Highcharts.BubbleLegendFormatterContextObject#center
55724
- * @type {number}
55725
- */ /**
55726
- * The radius of the bubble range.
55727
- * @name Highcharts.BubbleLegendFormatterContextObject#radius
55728
- * @type {number}
55729
- */ /**
55730
- * The bubble value.
55731
- * @name Highcharts.BubbleLegendFormatterContextObject#value
55732
- * @type {number}
55733
- */
55734
- ''; // detach doclets above
55735
55860
  /* *
55736
55861
  *
55737
55862
  * Class
55738
55863
  *
55739
55864
  * */
55740
- /* eslint-disable no-invalid-this, valid-jsdoc */
55741
55865
  /**
55742
55866
  * BubbleLegend class.
55743
55867
  *
@@ -55751,7 +55875,17 @@
55751
55875
  * Legend of item.
55752
55876
  */
55753
55877
  var BubbleLegendItem = /** @class */ (function () {
55878
+ /* *
55879
+ *
55880
+ * Constructor
55881
+ *
55882
+ * */
55754
55883
  function BubbleLegendItem(options, legend) {
55884
+ /* *
55885
+ *
55886
+ * Properties
55887
+ *
55888
+ * */
55755
55889
  this.chart = void 0;
55756
55890
  this.fontMetrics = void 0;
55757
55891
  this.legend = void 0;
@@ -55770,15 +55904,14 @@
55770
55904
  this.setState = noop;
55771
55905
  this.init(options, legend);
55772
55906
  }
55907
+ /* *
55908
+ *
55909
+ * Functions
55910
+ *
55911
+ * */
55773
55912
  /**
55774
55913
  * Create basic bubbleLegend properties similar to item in legend.
55775
- *
55776
55914
  * @private
55777
- * @function Highcharts.BubbleLegend#init
55778
- * @param {Highcharts.LegendBubbleLegendOptions} options
55779
- * Bubble legend options
55780
- * @param {Highcharts.Legend} legend
55781
- * Legend
55782
55915
  */
55783
55916
  BubbleLegendItem.prototype.init = function (options, legend) {
55784
55917
  this.options = options;
@@ -55790,9 +55923,9 @@
55790
55923
  * Depending on the position option, add bubbleLegend to legend items.
55791
55924
  *
55792
55925
  * @private
55793
- * @function Highcharts.BubbleLegend#addToLegend
55926
+ *
55794
55927
  * @param {Array<(Highcharts.Point|Highcharts.Series)>} items
55795
- * All legend items
55928
+ * All legend items
55796
55929
  */
55797
55930
  BubbleLegendItem.prototype.addToLegend = function (items) {
55798
55931
  // Insert bubbleLegend into legend items
@@ -55803,7 +55936,7 @@
55803
55936
  * creation.
55804
55937
  *
55805
55938
  * @private
55806
- * @function Highcharts.BubbleLegend#drawLegendSymbol
55939
+ *
55807
55940
  * @param {Highcharts.Legend} legend
55808
55941
  * Legend instance
55809
55942
  */
@@ -55845,9 +55978,7 @@
55845
55978
  };
55846
55979
  /**
55847
55980
  * Set style options for each bubbleLegend range.
55848
- *
55849
55981
  * @private
55850
- * @function Highcharts.BubbleLegend#setOptions
55851
55982
  */
55852
55983
  BubbleLegendItem.prototype.setOptions = function () {
55853
55984
  var ranges = this.ranges,
@@ -55899,9 +56030,10 @@
55899
56030
  * used code from BubbleSeries.js 'getRadius' method.
55900
56031
  *
55901
56032
  * @private
55902
- * @function Highcharts.BubbleLegend#getRangeRadius
56033
+ *
55903
56034
  * @param {number} value
55904
56035
  * Range value
56036
+ *
55905
56037
  * @return {number|null}
55906
56038
  * Radius for one range
55907
56039
  */
@@ -55917,9 +56049,7 @@
55917
56049
  };
55918
56050
  /**
55919
56051
  * Render the legendSymbol group.
55920
- *
55921
56052
  * @private
55922
- * @function Highcharts.BubbleLegend#render
55923
56053
  */
55924
56054
  BubbleLegendItem.prototype.render = function () {
55925
56055
  var renderer = this.chart.renderer,
@@ -55951,7 +56081,7 @@
55951
56081
  * Render one range, consisting of bubble symbol, connector and label.
55952
56082
  *
55953
56083
  * @private
55954
- * @function Highcharts.BubbleLegend#renderRange
56084
+ *
55955
56085
  * @param {Highcharts.LegendBubbleLegendRangesOptions} range
55956
56086
  * Range options
55957
56087
  */
@@ -56032,9 +56162,7 @@
56032
56162
  };
56033
56163
  /**
56034
56164
  * Get the label which takes up the most space.
56035
- *
56036
56165
  * @private
56037
- * @function Highcharts.BubbleLegend#getMaxLabelSize
56038
56166
  */
56039
56167
  BubbleLegendItem.prototype.getMaxLabelSize = function () {
56040
56168
  var labels = this.symbols.labels;
@@ -56056,9 +56184,10 @@
56056
56184
  * Get formatted label for range.
56057
56185
  *
56058
56186
  * @private
56059
- * @function Highcharts.BubbleLegend#formatLabel
56187
+ *
56060
56188
  * @param {Highcharts.LegendBubbleLegendRangesOptions} range
56061
56189
  * Range options
56190
+ *
56062
56191
  * @return {string}
56063
56192
  * Range label text
56064
56193
  */
@@ -56074,9 +56203,7 @@
56074
56203
  /**
56075
56204
  * By using default chart 'hideOverlappingLabels' method, hide or show
56076
56205
  * labels and connectors.
56077
- *
56078
56206
  * @private
56079
- * @function Highcharts.BubbleLegend#hideOverlappingLabels
56080
56207
  */
56081
56208
  BubbleLegendItem.prototype.hideOverlappingLabels = function () {
56082
56209
  var chart = this.chart,
@@ -56099,7 +56226,7 @@
56099
56226
  * Calculate ranges from created series.
56100
56227
  *
56101
56228
  * @private
56102
- * @function Highcharts.BubbleLegend#getRanges
56229
+ *
56103
56230
  * @return {Array<Highcharts.LegendBubbleLegendRangesOptions>}
56104
56231
  * Array of range objects
56105
56232
  */
@@ -56151,7 +56278,7 @@
56151
56278
  * Calculate bubble legend sizes from rendered series.
56152
56279
  *
56153
56280
  * @private
56154
- * @function Highcharts.BubbleLegend#predictBubbleSizes
56281
+ *
56155
56282
  * @return {Array<number,number>}
56156
56283
  * Calculated min and max bubble sizes
56157
56284
  */
@@ -56192,11 +56319,7 @@
56192
56319
  };
56193
56320
  /**
56194
56321
  * Correct ranges with calculated sizes.
56195
- *
56196
56322
  * @private
56197
- * @function Highcharts.BubbleLegend#updateRanges
56198
- * @param {number} min
56199
- * @param {number} max
56200
56323
  */
56201
56324
  BubbleLegendItem.prototype.updateRanges = function (min, max) {
56202
56325
  var bubbleLegendOptions = this.legend.options.bubbleLegend;
@@ -56208,9 +56331,7 @@
56208
56331
  * Because of the possibility of creating another legend line, predicted
56209
56332
  * bubble legend sizes may differ by a few pixels, so it is necessary to
56210
56333
  * correct them.
56211
- *
56212
56334
  * @private
56213
- * @function Highcharts.BubbleLegend#correctSizes
56214
56335
  */
56215
56336
  BubbleLegendItem.prototype.correctSizes = function () {
56216
56337
  var legend = this.legend,
@@ -56232,6 +56353,27 @@
56232
56353
  * Default Export
56233
56354
  *
56234
56355
  * */
56356
+ /* *
56357
+ *
56358
+ * API Declarations
56359
+ *
56360
+ * */
56361
+ /**
56362
+ * @interface Highcharts.BubbleLegendFormatterContextObject
56363
+ */ /**
56364
+ * The center y position of the range.
56365
+ * @name Highcharts.BubbleLegendFormatterContextObject#center
56366
+ * @type {number}
56367
+ */ /**
56368
+ * The radius of the bubble range.
56369
+ * @name Highcharts.BubbleLegendFormatterContextObject#radius
56370
+ * @type {number}
56371
+ */ /**
56372
+ * The bubble value.
56373
+ * @name Highcharts.BubbleLegendFormatterContextObject#value
56374
+ * @type {number}
56375
+ */
56376
+ ''; // detach doclets above
56235
56377
 
56236
56378
  return BubbleLegendItem;
56237
56379
  });
@@ -56253,282 +56395,274 @@
56253
56395
  wrap = U.wrap;
56254
56396
  /* *
56255
56397
  *
56256
- * Namespace
56398
+ * Constants
56257
56399
  *
56258
56400
  * */
56259
- var BubbleLegendComposition;
56260
- (function (BubbleLegendComposition) {
56261
- /* *
56262
- *
56263
- * Constants
56264
- *
56265
- * */
56266
- var composedClasses = [];
56267
- /* *
56268
- *
56269
- * Functions
56270
- *
56271
- * */
56272
- /* eslint-disable valid-jsdoc */
56273
- /**
56274
- * If ranges are not specified, determine ranges from rendered bubble series
56275
- * and render legend again.
56276
- */
56277
- function chartDrawChartBox(proceed, options, callback) {
56278
- var chart = this,
56279
- legend = chart.legend,
56280
- bubbleSeries = getVisibleBubbleSeriesIndex(chart) >= 0;
56281
- var bubbleLegendOptions,
56282
- bubbleSizes;
56283
- if (legend && legend.options.enabled && legend.bubbleLegend &&
56284
- legend.options.bubbleLegend.autoRanges && bubbleSeries) {
56285
- bubbleLegendOptions = legend.bubbleLegend.options;
56286
- bubbleSizes = legend.bubbleLegend.predictBubbleSizes();
56287
- legend.bubbleLegend.updateRanges(bubbleSizes[0], bubbleSizes[1]);
56288
- // Disable animation on init
56401
+ var composedClasses = [];
56402
+ /* *
56403
+ *
56404
+ * Functions
56405
+ *
56406
+ * */
56407
+ /**
56408
+ * If ranges are not specified, determine ranges from rendered bubble series
56409
+ * and render legend again.
56410
+ */
56411
+ function chartDrawChartBox(proceed, options, callback) {
56412
+ var chart = this,
56413
+ legend = chart.legend,
56414
+ bubbleSeries = getVisibleBubbleSeriesIndex(chart) >= 0;
56415
+ var bubbleLegendOptions,
56416
+ bubbleSizes;
56417
+ if (legend && legend.options.enabled && legend.bubbleLegend &&
56418
+ legend.options.bubbleLegend.autoRanges && bubbleSeries) {
56419
+ bubbleLegendOptions = legend.bubbleLegend.options;
56420
+ bubbleSizes = legend.bubbleLegend.predictBubbleSizes();
56421
+ legend.bubbleLegend.updateRanges(bubbleSizes[0], bubbleSizes[1]);
56422
+ // Disable animation on init
56423
+ if (!bubbleLegendOptions.placed) {
56424
+ legend.group.placed = false;
56425
+ legend.allItems.forEach(function (item) {
56426
+ item.legendGroup.translateY = null;
56427
+ });
56428
+ }
56429
+ // Create legend with bubbleLegend
56430
+ legend.render();
56431
+ chart.getMargins();
56432
+ chart.axes.forEach(function (axis) {
56433
+ if (axis.visible) { // #11448
56434
+ axis.render();
56435
+ }
56289
56436
  if (!bubbleLegendOptions.placed) {
56290
- legend.group.placed = false;
56291
- legend.allItems.forEach(function (item) {
56292
- item.legendGroup.translateY = null;
56437
+ axis.setScale();
56438
+ axis.updateNames();
56439
+ // Disable axis animation on init
56440
+ objectEach(axis.ticks, function (tick) {
56441
+ tick.isNew = true;
56442
+ tick.isNewLabel = true;
56293
56443
  });
56294
56444
  }
56295
- // Create legend with bubbleLegend
56445
+ });
56446
+ bubbleLegendOptions.placed = true;
56447
+ // After recalculate axes, calculate margins again.
56448
+ chart.getMargins();
56449
+ // Call default 'drawChartBox' method.
56450
+ proceed.call(chart, options, callback);
56451
+ // Check bubble legend sizes and correct them if necessary.
56452
+ legend.bubbleLegend.correctSizes();
56453
+ // Correct items positions with different dimensions in legend.
56454
+ retranslateItems(legend, getLinesHeights(legend));
56455
+ }
56456
+ else {
56457
+ proceed.call(chart, options, callback);
56458
+ // Allow color change on static bubble legend after click on legend
56459
+ if (legend && legend.options.enabled && legend.bubbleLegend) {
56296
56460
  legend.render();
56297
- chart.getMargins();
56298
- chart.axes.forEach(function (axis) {
56299
- if (axis.visible) { // #11448
56300
- axis.render();
56301
- }
56302
- if (!bubbleLegendOptions.placed) {
56303
- axis.setScale();
56304
- axis.updateNames();
56305
- // Disable axis animation on init
56306
- objectEach(axis.ticks, function (tick) {
56307
- tick.isNew = true;
56308
- tick.isNewLabel = true;
56309
- });
56310
- }
56311
- });
56312
- bubbleLegendOptions.placed = true;
56313
- // After recalculate axes, calculate margins again.
56314
- chart.getMargins();
56315
- // Call default 'drawChartBox' method.
56316
- proceed.call(chart, options, callback);
56317
- // Check bubble legend sizes and correct them if necessary.
56318
- legend.bubbleLegend.correctSizes();
56319
- // Correct items positions with different dimensions in legend.
56320
56461
  retranslateItems(legend, getLinesHeights(legend));
56321
56462
  }
56322
- else {
56323
- proceed.call(chart, options, callback);
56324
- // Allow color change on static bubble legend after click on legend
56325
- if (legend && legend.options.enabled && legend.bubbleLegend) {
56326
- legend.render();
56327
- retranslateItems(legend, getLinesHeights(legend));
56463
+ }
56464
+ }
56465
+ /**
56466
+ * Compose classes for use with Bubble series.
56467
+ * @private
56468
+ *
56469
+ * @param {Highcharts.Chart} ChartClass
56470
+ * Core chart class to use with Bubble series.
56471
+ *
56472
+ * @param {Highcharts.Legend} LegendClass
56473
+ * Core legend class to use with Bubble series.
56474
+ *
56475
+ * @param {Highcharts.Series} SeriesClass
56476
+ * Core series class to use with Bubble series.
56477
+ */
56478
+ function compose(ChartClass, LegendClass, SeriesClass) {
56479
+ if (composedClasses.indexOf(ChartClass) === -1) {
56480
+ composedClasses.push(ChartClass);
56481
+ setOptions({
56482
+ // Set default bubble legend options
56483
+ legend: {
56484
+ bubbleLegend: BubbleLegendDefaults
56328
56485
  }
56329
- }
56486
+ });
56487
+ wrap(ChartClass.prototype, 'drawChartBox', chartDrawChartBox);
56330
56488
  }
56331
- /**
56332
- * Compose classes for use with Bubble series.
56333
- * @private
56334
- *
56335
- * @param {Highcharts.Chart} ChartClass
56336
- * Core chart class to use with Bubble series.
56337
- *
56338
- * @param {Highcharts.Legend} LegendClass
56339
- * Core legend class to use with Bubble series.
56340
- *
56341
- * @param {Highcharts.Series} SeriesClass
56342
- * Core series class to use with Bubble series.
56343
- */
56344
- function compose(ChartClass, LegendClass, SeriesClass) {
56345
- if (composedClasses.indexOf(ChartClass) === -1) {
56346
- composedClasses.push(ChartClass);
56347
- setOptions({
56348
- // Set default bubble legend options
56349
- legend: {
56350
- bubbleLegend: BubbleLegendDefaults
56351
- }
56352
- });
56353
- wrap(ChartClass.prototype, 'drawChartBox', chartDrawChartBox);
56354
- }
56355
- if (composedClasses.indexOf(LegendClass) === -1) {
56356
- composedClasses.push(LegendClass);
56357
- addEvent(LegendClass, 'afterGetAllItems', onLegendAfterGetAllItems);
56358
- }
56359
- if (composedClasses.indexOf(SeriesClass) === -1) {
56360
- composedClasses.push(SeriesClass);
56361
- addEvent(SeriesClass, 'legendItemClick', onSeriesLegendItemClick);
56362
- }
56489
+ if (composedClasses.indexOf(LegendClass) === -1) {
56490
+ composedClasses.push(LegendClass);
56491
+ addEvent(LegendClass, 'afterGetAllItems', onLegendAfterGetAllItems);
56363
56492
  }
56364
- BubbleLegendComposition.compose = compose;
56365
- /**
56366
- * Check if there is at least one visible bubble series.
56367
- *
56368
- * @private
56369
- * @function getVisibleBubbleSeriesIndex
56370
- * @param {Highcharts.Chart} chart
56371
- * Chart to check.
56372
- * @return {number}
56373
- * First visible bubble series index
56374
- */
56375
- function getVisibleBubbleSeriesIndex(chart) {
56376
- var series = chart.series;
56377
- var i = 0;
56378
- while (i < series.length) {
56379
- if (series[i] &&
56380
- series[i].isBubble &&
56381
- series[i].visible &&
56382
- series[i].zData.length) {
56383
- return i;
56384
- }
56385
- i++;
56386
- }
56387
- return -1;
56493
+ if (composedClasses.indexOf(SeriesClass) === -1) {
56494
+ composedClasses.push(SeriesClass);
56495
+ addEvent(SeriesClass, 'legendItemClick', onSeriesLegendItemClick);
56388
56496
  }
56389
- /**
56390
- * Calculate height for each row in legend.
56391
- *
56392
- * @private
56393
- * @function getLinesHeights
56394
- *
56395
- * @param {Highcharts.Legend} legend
56396
- * Legend to calculate from.
56397
- *
56398
- * @return {Array<Highcharts.Dictionary<number>>}
56399
- * Informations about line height and items amount
56400
- */
56401
- function getLinesHeights(legend) {
56402
- var items = legend.allItems,
56403
- lines = [],
56404
- length = items.length;
56405
- var lastLine,
56406
- i = 0,
56407
- j = 0;
56408
- for (i = 0; i < length; i++) {
56409
- if (items[i].legendItemHeight) {
56410
- // for bubbleLegend
56411
- items[i].itemHeight = items[i].legendItemHeight;
56412
- }
56413
- if ( // Line break
56414
- items[i] === items[length - 1] ||
56415
- items[i + 1] &&
56416
- items[i]._legendItemPos[1] !==
56417
- items[i + 1]._legendItemPos[1]) {
56418
- lines.push({ height: 0 });
56419
- lastLine = lines[lines.length - 1];
56420
- // Find the highest item in line
56421
- for (j; j <= i; j++) {
56422
- if (items[j].itemHeight > lastLine.height) {
56423
- lastLine.height = items[j].itemHeight;
56424
- }
56497
+ }
56498
+ /**
56499
+ * Check if there is at least one visible bubble series.
56500
+ *
56501
+ * @private
56502
+ * @function getVisibleBubbleSeriesIndex
56503
+ * @param {Highcharts.Chart} chart
56504
+ * Chart to check.
56505
+ * @return {number}
56506
+ * First visible bubble series index
56507
+ */
56508
+ function getVisibleBubbleSeriesIndex(chart) {
56509
+ var series = chart.series;
56510
+ var i = 0;
56511
+ while (i < series.length) {
56512
+ if (series[i] &&
56513
+ series[i].isBubble &&
56514
+ series[i].visible &&
56515
+ series[i].zData.length) {
56516
+ return i;
56517
+ }
56518
+ i++;
56519
+ }
56520
+ return -1;
56521
+ }
56522
+ /**
56523
+ * Calculate height for each row in legend.
56524
+ *
56525
+ * @private
56526
+ * @function getLinesHeights
56527
+ *
56528
+ * @param {Highcharts.Legend} legend
56529
+ * Legend to calculate from.
56530
+ *
56531
+ * @return {Array<Highcharts.Dictionary<number>>}
56532
+ * Informations about line height and items amount
56533
+ */
56534
+ function getLinesHeights(legend) {
56535
+ var items = legend.allItems,
56536
+ lines = [],
56537
+ length = items.length;
56538
+ var lastLine,
56539
+ i = 0,
56540
+ j = 0;
56541
+ for (i = 0; i < length; i++) {
56542
+ if (items[i].legendItemHeight) {
56543
+ // for bubbleLegend
56544
+ items[i].itemHeight = items[i].legendItemHeight;
56545
+ }
56546
+ if ( // Line break
56547
+ items[i] === items[length - 1] ||
56548
+ items[i + 1] &&
56549
+ items[i]._legendItemPos[1] !==
56550
+ items[i + 1]._legendItemPos[1]) {
56551
+ lines.push({ height: 0 });
56552
+ lastLine = lines[lines.length - 1];
56553
+ // Find the highest item in line
56554
+ for (j; j <= i; j++) {
56555
+ if (items[j].itemHeight > lastLine.height) {
56556
+ lastLine.height = items[j].itemHeight;
56425
56557
  }
56426
- lastLine.step = i;
56427
56558
  }
56559
+ lastLine.step = i;
56428
56560
  }
56429
- return lines;
56430
56561
  }
56431
- /**
56432
- * Start the bubble legend creation process.
56433
- */
56434
- function onLegendAfterGetAllItems(e) {
56435
- var legend = this,
56436
- bubbleLegend = legend.bubbleLegend,
56437
- legendOptions = legend.options,
56438
- options = legendOptions.bubbleLegend,
56439
- bubbleSeriesIndex = getVisibleBubbleSeriesIndex(legend.chart);
56440
- // Remove unnecessary element
56441
- if (bubbleLegend && bubbleLegend.ranges && bubbleLegend.ranges.length) {
56442
- // Allow change the way of calculating ranges in update
56443
- if (options.ranges.length) {
56444
- options.autoRanges =
56445
- !!options.ranges[0].autoRanges;
56446
- }
56447
- // Update bubbleLegend dimensions in each redraw
56448
- legend.destroyItem(bubbleLegend);
56449
- }
56450
- // Create bubble legend
56451
- if (bubbleSeriesIndex >= 0 &&
56452
- legendOptions.enabled &&
56453
- options.enabled) {
56454
- options.seriesIndex = bubbleSeriesIndex;
56455
- legend.bubbleLegend = new BubbleLegendItem(options, legend);
56456
- legend.bubbleLegend.addToLegend(e.allItems);
56457
- }
56562
+ return lines;
56563
+ }
56564
+ /**
56565
+ * Start the bubble legend creation process.
56566
+ */
56567
+ function onLegendAfterGetAllItems(e) {
56568
+ var legend = this,
56569
+ bubbleLegend = legend.bubbleLegend,
56570
+ legendOptions = legend.options,
56571
+ options = legendOptions.bubbleLegend,
56572
+ bubbleSeriesIndex = getVisibleBubbleSeriesIndex(legend.chart);
56573
+ // Remove unnecessary element
56574
+ if (bubbleLegend && bubbleLegend.ranges && bubbleLegend.ranges.length) {
56575
+ // Allow change the way of calculating ranges in update
56576
+ if (options.ranges.length) {
56577
+ options.autoRanges =
56578
+ !!options.ranges[0].autoRanges;
56579
+ }
56580
+ // Update bubbleLegend dimensions in each redraw
56581
+ legend.destroyItem(bubbleLegend);
56458
56582
  }
56459
- /**
56460
- * Toggle bubble legend depending on the visible status of bubble series.
56461
- */
56462
- function onSeriesLegendItemClick() {
56463
- var series = this,
56464
- chart = series.chart,
56465
- visible = series.visible,
56466
- legend = series.chart.legend;
56467
- var status;
56468
- if (legend && legend.bubbleLegend) {
56469
- // Temporary correct 'visible' property
56470
- series.visible = !visible;
56471
- // Save future status for getRanges method
56472
- series.ignoreSeries = visible;
56473
- // Check if at lest one bubble series is visible
56474
- status = getVisibleBubbleSeriesIndex(chart) >= 0;
56475
- // Hide bubble legend if all bubble series are disabled
56476
- if (legend.bubbleLegend.visible !== status) {
56477
- // Show or hide bubble legend
56478
- legend.update({
56479
- bubbleLegend: { enabled: status }
56480
- });
56481
- legend.bubbleLegend.visible = status; // Restore default status
56482
- }
56483
- series.visible = visible;
56484
- }
56583
+ // Create bubble legend
56584
+ if (bubbleSeriesIndex >= 0 &&
56585
+ legendOptions.enabled &&
56586
+ options.enabled) {
56587
+ options.seriesIndex = bubbleSeriesIndex;
56588
+ legend.bubbleLegend = new BubbleLegendItem(options, legend);
56589
+ legend.bubbleLegend.addToLegend(e.allItems);
56485
56590
  }
56486
- /**
56487
- * Correct legend items translation in case of different elements heights.
56488
- *
56489
- * @private
56490
- * @function Highcharts.Legend#retranslateItems
56491
- *
56492
- * @param {Highcharts.Legend} legend
56493
- * Legend to translate in.
56494
- *
56495
- * @param {Array<Highcharts.Dictionary<number>>} lines
56496
- * Informations about line height and items amount
56497
- */
56498
- function retranslateItems(legend, lines) {
56499
- var items = legend.allItems,
56500
- rtl = legend.options.rtl;
56501
- var orgTranslateX,
56502
- orgTranslateY,
56503
- movementX,
56504
- actualLine = 0;
56505
- items.forEach(function (item, index) {
56506
- orgTranslateX = item.legendGroup.translateX;
56507
- orgTranslateY = item._legendItemPos[1];
56508
- movementX = item.movementX;
56509
- if (movementX || (rtl && item.ranges)) {
56510
- movementX = rtl ?
56511
- orgTranslateX - item.options.maxSize / 2 :
56512
- orgTranslateX + movementX;
56513
- item.legendGroup.attr({ translateX: movementX });
56514
- }
56515
- if (index > lines[actualLine].step) {
56516
- actualLine++;
56517
- }
56518
- item.legendGroup.attr({
56519
- translateY: Math.round(orgTranslateY + lines[actualLine].height / 2)
56591
+ }
56592
+ /**
56593
+ * Toggle bubble legend depending on the visible status of bubble series.
56594
+ */
56595
+ function onSeriesLegendItemClick() {
56596
+ var series = this,
56597
+ chart = series.chart,
56598
+ visible = series.visible,
56599
+ legend = series.chart.legend;
56600
+ var status;
56601
+ if (legend && legend.bubbleLegend) {
56602
+ // Temporary correct 'visible' property
56603
+ series.visible = !visible;
56604
+ // Save future status for getRanges method
56605
+ series.ignoreSeries = visible;
56606
+ // Check if at lest one bubble series is visible
56607
+ status = getVisibleBubbleSeriesIndex(chart) >= 0;
56608
+ // Hide bubble legend if all bubble series are disabled
56609
+ if (legend.bubbleLegend.visible !== status) {
56610
+ // Show or hide bubble legend
56611
+ legend.update({
56612
+ bubbleLegend: { enabled: status }
56520
56613
  });
56521
- item._legendItemPos[1] = orgTranslateY +
56522
- lines[actualLine].height / 2;
56523
- });
56614
+ legend.bubbleLegend.visible = status; // Restore default status
56615
+ }
56616
+ series.visible = visible;
56524
56617
  }
56525
- /* eslint-disable valid-jsdoc */
56526
- })(BubbleLegendComposition || (BubbleLegendComposition = {}));
56618
+ }
56619
+ /**
56620
+ * Correct legend items translation in case of different elements heights.
56621
+ *
56622
+ * @private
56623
+ * @function Highcharts.Legend#retranslateItems
56624
+ *
56625
+ * @param {Highcharts.Legend} legend
56626
+ * Legend to translate in.
56627
+ *
56628
+ * @param {Array<Highcharts.Dictionary<number>>} lines
56629
+ * Informations about line height and items amount
56630
+ */
56631
+ function retranslateItems(legend, lines) {
56632
+ var items = legend.allItems,
56633
+ rtl = legend.options.rtl;
56634
+ var orgTranslateX,
56635
+ orgTranslateY,
56636
+ movementX,
56637
+ actualLine = 0;
56638
+ items.forEach(function (item, index) {
56639
+ orgTranslateX = item.legendGroup.translateX;
56640
+ orgTranslateY = item._legendItemPos[1];
56641
+ movementX = item.movementX;
56642
+ if (movementX || (rtl && item.ranges)) {
56643
+ movementX = rtl ?
56644
+ orgTranslateX - item.options.maxSize / 2 :
56645
+ orgTranslateX + movementX;
56646
+ item.legendGroup.attr({ translateX: movementX });
56647
+ }
56648
+ if (index > lines[actualLine].step) {
56649
+ actualLine++;
56650
+ }
56651
+ item.legendGroup.attr({
56652
+ translateY: Math.round(orgTranslateY + lines[actualLine].height / 2)
56653
+ });
56654
+ item._legendItemPos[1] = orgTranslateY +
56655
+ lines[actualLine].height / 2;
56656
+ });
56657
+ }
56527
56658
  /* *
56528
56659
  *
56529
56660
  * Default Export
56530
56661
  *
56531
56662
  * */
56663
+ var BubbleLegendComposition = {
56664
+ compose: compose
56665
+ };
56532
56666
 
56533
56667
  return BubbleLegendComposition;
56534
56668
  });
@@ -56612,7 +56746,7 @@
56612
56746
 
56613
56747
  return BubblePoint;
56614
56748
  });
56615
- _registerModule(_modules, 'Series/Bubble/BubbleSeries.js', [_modules['Core/Axis/Axis.js'], _modules['Series/Bubble/BubbleLegendComposition.js'], _modules['Series/Bubble/BubblePoint.js'], _modules['Core/Color/Color.js'], _modules['Core/Globals.js'], _modules['Core/Series/Series.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (Axis, BubbleLegendComposition, BubblePoint, Color, H, Series, SeriesRegistry, U) {
56749
+ _registerModule(_modules, 'Series/Bubble/BubbleSeries.js', [_modules['Series/Bubble/BubbleLegendComposition.js'], _modules['Series/Bubble/BubblePoint.js'], _modules['Core/Color/Color.js'], _modules['Core/Globals.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (BubbleLegendComposition, BubblePoint, Color, H, SeriesRegistry, U) {
56616
56750
  /* *
56617
56751
  *
56618
56752
  * (c) 2010-2021 Torstein Honsi
@@ -56640,8 +56774,9 @@
56640
56774
  })();
56641
56775
  var color = Color.parse;
56642
56776
  var noop = H.noop;
56643
- var _a = SeriesRegistry.seriesTypes,
56644
- ColumnSeries = _a.column,
56777
+ var Series = SeriesRegistry.series,
56778
+ _a = SeriesRegistry.seriesTypes,
56779
+ columnProto = _a.column.prototype,
56645
56780
  ScatterSeries = _a.scatter;
56646
56781
  var addEvent = U.addEvent,
56647
56782
  arrayMax = U.arrayMax,
@@ -56651,6 +56786,77 @@
56651
56786
  isNumber = U.isNumber,
56652
56787
  merge = U.merge,
56653
56788
  pick = U.pick;
56789
+ /* *
56790
+ *
56791
+ * Constants
56792
+ *
56793
+ * */
56794
+ var composedClasses = [];
56795
+ /* *
56796
+ *
56797
+ * Functions
56798
+ *
56799
+ * */
56800
+ /**
56801
+ * Add logic to pad each axis with the amount of pixels necessary to avoid the
56802
+ * bubbles to overflow.
56803
+ */
56804
+ function axisBeforePadding() {
56805
+ var _this = this;
56806
+ var axisLength = this.len,
56807
+ chart = this.chart,
56808
+ isXAxis = this.isXAxis,
56809
+ dataKey = isXAxis ? 'xData' : 'yData',
56810
+ min = this.min,
56811
+ range = this.max - min;
56812
+ var pxMin = 0,
56813
+ pxMax = axisLength,
56814
+ transA = axisLength / range,
56815
+ hasActiveSeries;
56816
+ // Handle padding on the second pass, or on redraw
56817
+ this.series.forEach(function (series) {
56818
+ if (series.bubblePadding &&
56819
+ (series.visible || !chart.options.chart.ignoreHiddenSeries)) {
56820
+ // Correction for #1673
56821
+ _this.allowZoomOutside = true;
56822
+ hasActiveSeries = true;
56823
+ var data = series[dataKey];
56824
+ if (isXAxis) {
56825
+ (series.onPoint || series).getRadii(0, 0, series);
56826
+ if (series.onPoint) {
56827
+ series.radii = series.onPoint.radii;
56828
+ }
56829
+ }
56830
+ if (range > 0) {
56831
+ var i = data.length;
56832
+ while (i--) {
56833
+ if (isNumber(data[i]) &&
56834
+ _this.dataMin <= data[i] &&
56835
+ data[i] <= _this.max) {
56836
+ var radius = series.radii && series.radii[i] || 0;
56837
+ pxMin = Math.min(((data[i] - min) * transA) - radius, pxMin);
56838
+ pxMax = Math.max(((data[i] - min) * transA) + radius, pxMax);
56839
+ }
56840
+ }
56841
+ }
56842
+ }
56843
+ });
56844
+ // Apply the padding to the min and max properties
56845
+ if (hasActiveSeries && range > 0 && !this.logarithmic) {
56846
+ pxMax -= axisLength;
56847
+ transA *= (axisLength +
56848
+ Math.max(0, pxMin) - // #8901
56849
+ Math.min(pxMax, axisLength)) / axisLength;
56850
+ [
56851
+ ['min', 'userMin', pxMin],
56852
+ ['max', 'userMax', pxMax]
56853
+ ].forEach(function (keys) {
56854
+ if (typeof pick(_this.options[keys[0]], _this[keys[1]]) === 'undefined') {
56855
+ _this[keys[0]] += keys[2] / transA;
56856
+ }
56857
+ });
56858
+ }
56859
+ }
56654
56860
  /* *
56655
56861
  *
56656
56862
  * Class
@@ -56680,14 +56886,24 @@
56680
56886
  _this.yData = void 0;
56681
56887
  _this.zData = void 0;
56682
56888
  return _this;
56683
- /* eslint-enable valid-jsdoc */
56684
56889
  }
56890
+ /* *
56891
+ *
56892
+ * Static Functions
56893
+ *
56894
+ * */
56895
+ BubbleSeries.compose = function (AxisClass, ChartClass, LegendClass, SeriesClass) {
56896
+ BubbleLegendComposition.compose(ChartClass, LegendClass, SeriesClass);
56897
+ if (composedClasses.indexOf(AxisClass) === -1) {
56898
+ composedClasses.push(AxisClass);
56899
+ AxisClass.prototype.beforePadding = axisBeforePadding;
56900
+ }
56901
+ };
56685
56902
  /* *
56686
56903
  *
56687
56904
  * Functions
56688
56905
  *
56689
56906
  * */
56690
- /* eslint-disable valid-jsdoc */
56691
56907
  /**
56692
56908
  * Perform animation on the bubbles
56693
56909
  * @private
@@ -56722,11 +56938,11 @@
56722
56938
  */
56723
56939
  BubbleSeries.prototype.getRadii = function () {
56724
56940
  var _this = this;
56941
+ var zData = this.zData,
56942
+ yData = this.yData,
56943
+ radii = [];
56725
56944
  var len,
56726
56945
  i,
56727
- zData = this.zData,
56728
- yData = this.yData,
56729
- radii = [],
56730
56946
  value,
56731
56947
  zExtremes = this.chart.bubbleZExtremes;
56732
56948
  var _a = this.getPxExtremes(),
@@ -56773,8 +56989,8 @@
56773
56989
  BubbleSeries.prototype.getRadius = function (zMin, zMax, minSize, maxSize, value, yValue) {
56774
56990
  var options = this.options,
56775
56991
  sizeByArea = options.sizeBy !== 'width',
56776
- zThreshold = options.zThreshold,
56777
- zRange = zMax - zMin,
56992
+ zThreshold = options.zThreshold;
56993
+ var zRange = zMax - zMin,
56778
56994
  pos = 0.5;
56779
56995
  // #8608 - bubble should be visible when z is undefined
56780
56996
  if (yValue === null || value === null) {
@@ -56907,7 +57123,6 @@
56907
57123
  }
56908
57124
  }
56909
57125
  };
56910
- BubbleSeries.compose = BubbleLegendComposition.compose;
56911
57126
  /**
56912
57127
  * A bubble series is a three dimensional series type where each point
56913
57128
  * renders an X, Y and Z value. Each points is drawn as a bubble where the
@@ -57146,7 +57361,7 @@
57146
57361
  return BubbleSeries;
57147
57362
  }(ScatterSeries));
57148
57363
  extend(BubbleSeries.prototype, {
57149
- alignDataLabel: ColumnSeries.prototype.alignDataLabel,
57364
+ alignDataLabel: columnProto.alignDataLabel,
57150
57365
  applyZones: noop,
57151
57366
  bubblePadding: true,
57152
57367
  buildKDTree: noop,
@@ -57163,70 +57378,10 @@
57163
57378
  addEvent(BubbleSeries, 'updatedData', function (e) {
57164
57379
  delete e.target.chart.bubbleZExtremes;
57165
57380
  });
57166
- /* *
57167
- *
57168
- * Axis ?
57169
- *
57170
- * */
57171
- // Add logic to pad each axis with the amount of pixels necessary to avoid the
57172
- // bubbles to overflow.
57173
- Axis.prototype.beforePadding = function () {
57174
- var axis = this,
57175
- axisLength = this.len,
57176
- chart = this.chart,
57177
- pxMin = 0,
57178
- pxMax = axisLength,
57179
- isXAxis = this.isXAxis,
57180
- dataKey = isXAxis ? 'xData' : 'yData',
57181
- min = this.min,
57182
- range = this.max - min,
57183
- transA = axisLength / range,
57184
- hasActiveSeries;
57185
- // Handle padding on the second pass, or on redraw
57186
- this.series.forEach(function (series) {
57187
- if (series.bubblePadding &&
57188
- (series.visible || !chart.options.chart.ignoreHiddenSeries)) {
57189
- // Correction for #1673
57190
- axis.allowZoomOutside = true;
57191
- hasActiveSeries = true;
57192
- var data = series[dataKey];
57193
- if (isXAxis) {
57194
- (series.onPoint || series).getRadii(0, 0, series);
57195
- if (series.onPoint) {
57196
- series.radii = series.onPoint.radii;
57197
- }
57198
- }
57199
- if (range > 0) {
57200
- var i = data.length;
57201
- while (i--) {
57202
- if (isNumber(data[i]) &&
57203
- axis.dataMin <= data[i] &&
57204
- data[i] <= axis.max) {
57205
- var radius = series.radii && series.radii[i] || 0;
57206
- pxMin = Math.min(((data[i] - min) * transA) - radius, pxMin);
57207
- pxMax = Math.max(((data[i] - min) * transA) + radius, pxMax);
57208
- }
57209
- }
57210
- }
57211
- }
57212
- });
57213
- // Apply the padding to the min and max properties
57214
- if (hasActiveSeries && range > 0 && !this.logarithmic) {
57215
- pxMax -= axisLength;
57216
- transA *= (axisLength +
57217
- Math.max(0, pxMin) - // #8901
57218
- Math.min(pxMax, axisLength)) / axisLength;
57219
- [
57220
- ['min', 'userMin', pxMin],
57221
- ['max', 'userMax', pxMax]
57222
- ].forEach(function (keys) {
57223
- if (typeof pick(axis.options[keys[0]], axis[keys[1]]) === 'undefined') {
57224
- axis[keys[0]] += keys[2] / transA;
57225
- }
57226
- });
57227
- }
57228
- /* eslint-enable valid-jsdoc */
57229
- };
57381
+ // After removing series, delete the chart-level Z extremes cache, #17502.
57382
+ addEvent(BubbleSeries, 'remove', function (e) {
57383
+ delete e.target.chart.bubbleZExtremes;
57384
+ });
57230
57385
  SeriesRegistry.registerSeriesType('bubble', BubbleSeries);
57231
57386
  /* *
57232
57387
  *
@@ -57334,7 +57489,7 @@
57334
57489
 
57335
57490
  return BubbleSeries;
57336
57491
  });
57337
- _registerModule(_modules, 'Series/MapBubble/MapBubblePoint.js', [_modules['Series/Map/MapPoint.js'], _modules['Core/Series/SeriesRegistry.js']], function (MapPoint, SeriesRegistry) {
57492
+ _registerModule(_modules, 'Series/MapBubble/MapBubblePoint.js', [_modules['Series/Bubble/BubblePoint.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (BubblePoint, SeriesRegistry, U) {
57338
57493
  /* *
57339
57494
  *
57340
57495
  * (c) 2010-2021 Torstein Honsi
@@ -57365,9 +57520,8 @@
57365
57520
  * Imports
57366
57521
  *
57367
57522
  * */
57368
- var _a = SeriesRegistry.seriesTypes,
57369
- BubbleSeries = _a.bubble,
57370
- MapSeries = _a.map;
57523
+ var mapPointProto = SeriesRegistry.seriesTypes.map.prototype.pointClass.prototype;
57524
+ var extend = U.extend;
57371
57525
  /* *
57372
57526
  *
57373
57527
  * Class
@@ -57376,27 +57530,22 @@
57376
57530
  var MapBubblePoint = /** @class */ (function (_super) {
57377
57531
  __extends(MapBubblePoint, _super);
57378
57532
  function MapBubblePoint() {
57379
- /* *
57380
- *
57381
- * Functions
57382
- *
57383
- * */
57384
- var _this = _super !== null && _super.apply(this,
57385
- arguments) || this;
57386
- _this.applyOptions = MapSeries.prototype.pointClass.prototype.applyOptions;
57387
- _this.getProjectedBounds = MapPoint.prototype.getProjectedBounds;
57388
- return _this;
57389
- /* eslint-enable valid-jsdoc */
57533
+ return _super !== null && _super.apply(this, arguments) || this;
57390
57534
  }
57391
- /* eslint-disable valid-jsdoc */
57392
- /**
57393
- * @private
57394
- */
57535
+ /* *
57536
+ *
57537
+ * Functions
57538
+ *
57539
+ * */
57395
57540
  MapBubblePoint.prototype.isValid = function () {
57396
57541
  return typeof this.z === 'number';
57397
57542
  };
57398
57543
  return MapBubblePoint;
57399
- }(BubbleSeries.prototype.pointClass));
57544
+ }(BubblePoint));
57545
+ extend(MapBubblePoint.prototype, {
57546
+ applyOptions: mapPointProto.applyOptions,
57547
+ getProjectedBounds: mapPointProto.getProjectedBounds
57548
+ });
57400
57549
  /* *
57401
57550
  *
57402
57551
  * Default Export
@@ -57405,7 +57554,7 @@
57405
57554
 
57406
57555
  return MapBubblePoint;
57407
57556
  });
57408
- _registerModule(_modules, 'Series/MapBubble/MapBubbleSeries.js', [_modules['Series/Bubble/BubbleSeries.js'], _modules['Series/MapBubble/MapBubblePoint.js'], _modules['Series/Map/MapSeries.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (BubbleSeries, MapBubblePoint, MapSeries, SeriesRegistry, U) {
57557
+ _registerModule(_modules, 'Series/MapBubble/MapBubbleSeries.js', [_modules['Series/Bubble/BubbleSeries.js'], _modules['Series/MapBubble/MapBubblePoint.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (BubbleSeries, MapBubblePoint, SeriesRegistry, U) {
57409
57558
  /* *
57410
57559
  *
57411
57560
  * (c) 2010-2021 Torstein Honsi
@@ -57431,7 +57580,9 @@
57431
57580
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
57432
57581
  };
57433
57582
  })();
57434
- var MapPointSeries = SeriesRegistry.seriesTypes.mappoint;
57583
+ var _a = SeriesRegistry.seriesTypes,
57584
+ mapProto = _a.map.prototype,
57585
+ mapPointProto = _a.mappoint.prototype;
57435
57586
  var extend = U.extend,
57436
57587
  merge = U.merge;
57437
57588
  /* *
@@ -57445,10 +57596,18 @@
57445
57596
  * @name Highcharts.seriesTypes.mapbubble
57446
57597
  *
57447
57598
  * @augments Highcharts.Series
57599
+ *
57600
+ * @requires BubbleSeries
57601
+ * @requires MapPointSeries
57448
57602
  */
57449
57603
  var MapBubbleSeries = /** @class */ (function (_super) {
57450
57604
  __extends(MapBubbleSeries, _super);
57451
57605
  function MapBubbleSeries() {
57606
+ /* *
57607
+ *
57608
+ * Static Properties
57609
+ *
57610
+ * */
57452
57611
  var _this = _super !== null && _super.apply(this,
57453
57612
  arguments) || this;
57454
57613
  /* *
@@ -57468,16 +57627,10 @@
57468
57627
  }, compareX, e);
57469
57628
  };
57470
57629
  MapBubbleSeries.prototype.translate = function () {
57471
- MapPointSeries.prototype.translate.call(this);
57630
+ mapPointProto.translate.call(this);
57472
57631
  this.getRadii();
57473
57632
  this.translateBubble();
57474
57633
  };
57475
- /* *
57476
- *
57477
- * Static Properties
57478
- *
57479
- * */
57480
- MapBubbleSeries.compose = BubbleSeries.compose;
57481
57634
  /**
57482
57635
  * A map bubble series is a bubble series laid out on top of a map
57483
57636
  * series, where each bubble is tied to a specific map area.
@@ -57554,7 +57707,6 @@
57554
57707
  *
57555
57708
  * @product highmaps
57556
57709
  * @apioption plotOptions.mapbubble.maxSize
57557
-
57558
57710
  */
57559
57711
  /**
57560
57712
  * Minimum bubble size. Bubbles will automatically size between the
@@ -57645,6 +57797,9 @@
57645
57797
  * @default 0
57646
57798
  * @apioption plotOptions.mapbubble.zThreshold
57647
57799
  */
57800
+ /**
57801
+ * @default 500
57802
+ */
57648
57803
  animationLimit: 500,
57649
57804
  joinBy: 'hc-key',
57650
57805
  tooltip: {
@@ -57656,16 +57811,16 @@
57656
57811
  extend(MapBubbleSeries.prototype, {
57657
57812
  type: 'mapbubble',
57658
57813
  axisTypes: ['colorAxis'],
57659
- getProjectedBounds: MapSeries.prototype.getProjectedBounds,
57814
+ getProjectedBounds: mapProto.getProjectedBounds,
57660
57815
  isCartesian: false,
57661
57816
  // If one single value is passed, it is interpreted as z
57662
57817
  pointArrayMap: ['z'],
57663
57818
  pointClass: MapBubblePoint,
57664
- processData: MapSeries.prototype.processData,
57665
- projectPoint: MapPointSeries.prototype.projectPoint,
57666
- setData: MapSeries.prototype.setData,
57667
- setOptions: MapSeries.prototype.setOptions,
57668
- updateData: MapSeries.prototype.updateData,
57819
+ processData: mapProto.processData,
57820
+ projectPoint: mapPointProto.projectPoint,
57821
+ setData: mapProto.setData,
57822
+ setOptions: mapProto.setOptions,
57823
+ updateData: mapProto.updateData,
57669
57824
  useMapGeometry: true,
57670
57825
  xyFromShape: true
57671
57826
  });
@@ -58260,7 +58415,11 @@
58260
58415
  */
58261
58416
  animation: false,
58262
58417
  /**
58263
- * The border radius for each heatmap item.
58418
+ * The border radius for each heatmap item. The border's color and
58419
+ * width can be set in marker options.
58420
+ *
58421
+ * @see [lineColor](#plotOptions.heatmap.marker.lineColor)
58422
+ * @see [lineWidth](#plotOptions.heatmap.marker.lineWidth)
58264
58423
  */
58265
58424
  borderRadius: 0,
58266
58425
  /**
@@ -58907,7 +59066,7 @@
58907
59066
  G.maps = MapChart.maps;
58908
59067
  G.Projection = Projection;
58909
59068
  ColorAxis.compose(G.Chart, G.Fx, G.Legend, G.Series);
58910
- MapBubbleSeries.compose(G.Chart, G.Legend, G.Series);
59069
+ MapBubbleSeries.compose(G.Axis, G.Chart, G.Legend, G.Series);
58911
59070
 
58912
59071
  });
58913
59072
  _registerModule(_modules, 'masters/highmaps.src.js', [_modules['masters/highcharts.src.js']], function (Highcharts) {