highcharts 9.3.3 → 10.2.0

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 (917) hide show
  1. package/bower.json +1 -1
  2. package/css/highcharts.css +19 -2
  3. package/css/highcharts.scss +17 -2
  4. package/css/themes/dark-unica.css +19 -2
  5. package/css/themes/grid-light.css +19 -2
  6. package/css/themes/sand-signika.css +19 -2
  7. package/es-modules/Accessibility/A11yI18n.js +4 -4
  8. package/es-modules/Accessibility/Accessibility.js +3 -4
  9. package/es-modules/Accessibility/Components/AnnotationsA11y.js +3 -3
  10. package/es-modules/Accessibility/Components/ContainerComponent.js +11 -10
  11. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +18 -11
  12. package/es-modules/Accessibility/Components/LegendComponent.js +34 -26
  13. package/es-modules/Accessibility/Components/MenuComponent.js +7 -6
  14. package/es-modules/Accessibility/Components/RangeSelectorComponent.js +5 -3
  15. package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +7 -6
  16. package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +1 -1
  17. package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +3 -2
  18. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +34 -18
  19. package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +96 -39
  20. package/es-modules/Accessibility/Components/ZoomComponent.js +43 -80
  21. package/es-modules/Accessibility/FocusBorder.js +6 -5
  22. package/es-modules/Accessibility/HighContrastMode.js +3 -3
  23. package/es-modules/Accessibility/KeyboardNavigation.js +113 -98
  24. package/es-modules/Accessibility/Options/{Options.js → A11yDefaults.js} +72 -4
  25. package/es-modules/Accessibility/Options/DeprecatedOptions.js +12 -2
  26. package/es-modules/Accessibility/Options/{LangOptions.js → LangDefaults.js} +46 -31
  27. package/es-modules/Accessibility/ProxyElement.js +14 -6
  28. package/es-modules/Accessibility/ProxyProvider.js +10 -2
  29. package/es-modules/Accessibility/Utils/ChartUtilities.js +10 -5
  30. package/es-modules/Core/Animation/Fx.js +1 -1
  31. package/es-modules/Core/Axis/Axis.js +197 -91
  32. package/es-modules/Core/Axis/AxisDefaults.js +8 -8
  33. package/es-modules/Core/Axis/Color/ColorAxis.js +26 -7
  34. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +3 -3
  35. package/es-modules/Core/Axis/DateTimeAxis.js +5 -3
  36. package/es-modules/Core/Axis/GridAxis.js +821 -821
  37. package/es-modules/Core/Axis/LogarithmicAxis.js +1 -1
  38. package/es-modules/Core/Axis/OrdinalAxis.js +26 -3
  39. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +3 -3
  40. package/es-modules/Core/Axis/StackingAxis.js +0 -1
  41. package/es-modules/Core/Axis/Tick.js +22 -18
  42. package/es-modules/Core/Axis/TreeGridTick.js +13 -2
  43. package/es-modules/Core/Axis/ZAxis.js +3 -1
  44. package/es-modules/Core/Chart/Chart.js +27 -8
  45. package/es-modules/Core/Chart/Chart3D.js +1 -11
  46. package/es-modules/Core/Chart/ChartDefaults.js +46 -14
  47. package/es-modules/Core/Chart/GanttChart.js +3 -1
  48. package/es-modules/Core/Chart/MapChart.js +4 -7
  49. package/es-modules/Core/Chart/StockChart.js +7 -5
  50. package/es-modules/Core/Color/Color.js +1 -1
  51. package/es-modules/Core/DefaultOptions.js +19 -15
  52. package/es-modules/Core/Geometry/PolygonClip.js +84 -0
  53. package/es-modules/Core/Globals.js +4 -18
  54. package/es-modules/Core/HttpUtilities.js +46 -39
  55. package/es-modules/Core/Legend/Legend.js +14 -12
  56. package/es-modules/Core/MSPointer.js +3 -1
  57. package/es-modules/Core/Navigator.js +16 -13
  58. package/es-modules/Core/Pointer.js +16 -12
  59. package/es-modules/Core/Renderer/HTML/AST.js +68 -8
  60. package/es-modules/Core/Renderer/HTML/HTMLElement.js +3 -1
  61. package/es-modules/Core/Renderer/HTML/HTMLRenderer.js +3 -1
  62. package/es-modules/Core/Renderer/SVG/SVGElement.js +54 -70
  63. package/es-modules/Core/Renderer/SVG/SVGElement3D.js +17 -5
  64. package/es-modules/Core/Renderer/SVG/SVGLabel.js +3 -1
  65. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +60 -55
  66. package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +4 -2
  67. package/es-modules/Core/Renderer/SVG/TextBuilder.js +12 -10
  68. package/es-modules/Core/Scrollbar.js +9 -5
  69. package/es-modules/Core/ScrollbarDefaults.js +8 -8
  70. package/es-modules/Core/Series/DataLabel.js +67 -38
  71. package/es-modules/Core/Series/Point.js +11 -2
  72. package/es-modules/Core/Series/Series.js +57 -27
  73. package/es-modules/Core/Series/Series3D.js +3 -1
  74. package/es-modules/Core/Series/SeriesDefaults.js +7 -4
  75. package/es-modules/Core/Time.js +6 -7
  76. package/es-modules/Core/Tooltip.js +17 -34
  77. package/es-modules/Core/Utilities.js +33 -33
  78. package/es-modules/Data/DataConverter.js +1 -1
  79. package/es-modules/Data/DataTable.js +12 -10
  80. package/es-modules/Data/Modifiers/ChainModifier.js +3 -1
  81. package/es-modules/Data/Modifiers/GroupModifier.js +3 -1
  82. package/es-modules/Data/Modifiers/InvertModifier.js +9 -7
  83. package/es-modules/Data/Modifiers/RangeModifier.js +3 -1
  84. package/es-modules/Data/Modifiers/SeriesPointsModifier.js +3 -1
  85. package/es-modules/Data/Modifiers/SortModifier.js +3 -1
  86. package/es-modules/Data/Parsers/CSVParser.js +3 -1
  87. package/es-modules/Data/Parsers/DataParser.js +1 -1
  88. package/es-modules/Data/Parsers/GoogleSheetsParser.js +3 -2
  89. package/es-modules/Data/Parsers/HTMLTableParser.js +3 -1
  90. package/es-modules/Data/Stores/CSVStore.js +8 -5
  91. package/es-modules/Data/Stores/GoogleSheetsStore.js +3 -1
  92. package/es-modules/Data/Stores/HTMLTableStore.js +3 -1
  93. package/es-modules/Extensions/Annotations/{Annotations.js → Annotation.js} +30 -11
  94. package/es-modules/Extensions/Annotations/AnnotationsDefaults.js +0 -0
  95. package/es-modules/Extensions/Annotations/ControlPoint.js +1 -1
  96. package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +5 -2
  97. package/es-modules/Extensions/Annotations/MockPoint.js +1 -1
  98. package/es-modules/Extensions/Annotations/NavigationBindings.js +16 -5
  99. package/es-modules/Extensions/Annotations/Popup.js +2 -2
  100. package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +18 -12
  101. package/es-modules/Extensions/Annotations/Types/CrookedLine.js +4 -2
  102. package/es-modules/Extensions/Annotations/Types/ElliottWave.js +4 -2
  103. package/es-modules/Extensions/Annotations/Types/Fibonacci.js +5 -3
  104. package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +4 -2
  105. package/es-modules/Extensions/Annotations/Types/InfinityLine.js +4 -2
  106. package/es-modules/Extensions/Annotations/Types/Measure.js +4 -2
  107. package/es-modules/Extensions/Annotations/Types/Pitchfork.js +4 -2
  108. package/es-modules/Extensions/Annotations/Types/TimeCycles.js +4 -2
  109. package/es-modules/Extensions/Annotations/Types/Tunnel.js +5 -2
  110. package/es-modules/Extensions/Annotations/Types/VerticalLine.js +4 -2
  111. package/es-modules/Extensions/Boost/BoostAttach.js +5 -1
  112. package/es-modules/Extensions/Boost/BoostInit.js +9 -3
  113. package/es-modules/Extensions/Boost/BoostOptions.js +26 -0
  114. package/es-modules/Extensions/Boost/Boostables.js +1 -0
  115. package/es-modules/Extensions/Boost/WGLRenderer.js +48 -37
  116. package/es-modules/Extensions/Boost/WGLShader.js +4 -3
  117. package/es-modules/Extensions/BoostCanvas.js +11 -5
  118. package/es-modules/Extensions/Breadcrumbs.js +898 -0
  119. package/es-modules/Extensions/CurrentDateIndication.js +1 -1
  120. package/es-modules/Extensions/Data.js +661 -613
  121. package/es-modules/Extensions/DataGrouping.js +8 -3
  122. package/es-modules/Extensions/Debugger/ErrorMessages.js +4 -0
  123. package/es-modules/Extensions/DownloadURL.js +3 -3
  124. package/es-modules/Extensions/DragPanes.js +1 -1
  125. package/es-modules/Extensions/DraggablePoints.js +9 -7
  126. package/es-modules/Extensions/Drilldown.js +152 -97
  127. package/es-modules/Extensions/ExportData.js +58 -9
  128. package/es-modules/Extensions/Exporting/Exporting.js +34 -23
  129. package/es-modules/Extensions/Exporting/ExportingDefaults.js +56 -8
  130. package/es-modules/Extensions/FullScreen.js +121 -54
  131. package/es-modules/Extensions/GeoJSON.js +149 -125
  132. package/es-modules/Extensions/MarkerClusters.js +36 -22
  133. package/es-modules/Extensions/NoDataToDisplay.js +1 -1
  134. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +110 -22
  135. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
  136. package/es-modules/Extensions/Oldie/Oldie.js +2 -2
  137. package/es-modules/Extensions/OverlappingDataLabels.js +5 -4
  138. package/es-modules/Extensions/Pane.js +3 -3
  139. package/es-modules/Extensions/ParallelCoordinates.js +1 -1
  140. package/es-modules/Extensions/PatternFill.js +14 -2
  141. package/es-modules/Extensions/RangeSelector.js +29 -18
  142. package/es-modules/Extensions/ScrollablePlotArea.js +8 -4
  143. package/es-modules/Extensions/{SeriesLabel.js → SeriesLabel/SeriesLabel.js} +262 -384
  144. package/es-modules/Extensions/SeriesLabel/SeriesLabelDefaults.js +124 -0
  145. package/es-modules/Extensions/SeriesLabel/SeriesLabelUtilities.js +67 -0
  146. package/es-modules/Extensions/Sonification/Earcon.js +1 -1
  147. package/es-modules/Extensions/Stacking.js +5 -4
  148. package/es-modules/Extensions/Themes/HighContrastDark.js +10 -10
  149. package/es-modules/Extensions/Themes/HighContrastLight.js +10 -10
  150. package/es-modules/Maps/MapNavigation.js +49 -12
  151. package/es-modules/Maps/MapPointer.js +16 -0
  152. package/es-modules/Maps/MapUtilities.js +56 -0
  153. package/es-modules/Maps/MapView.js +619 -137
  154. package/es-modules/Maps/MapViewInsetsOptionsDefault.js +148 -0
  155. package/es-modules/Maps/MapViewOptionsDefault.js +60 -20
  156. package/es-modules/Maps/Projection.js +182 -88
  157. package/es-modules/Maps/Projections/EqualEarth.js +15 -6
  158. package/es-modules/Maps/Projections/LambertConformalConic.js +27 -19
  159. package/es-modules/Maps/Projections/Miller.js +23 -10
  160. package/es-modules/Maps/Projections/Orthographic.js +21 -10
  161. package/es-modules/Maps/Projections/WebMercator.js +25 -13
  162. package/es-modules/Series/ArcDiagram/ArcDiagramPoint.js +79 -0
  163. package/es-modules/Series/ArcDiagram/ArcDiagramSeries.js +591 -0
  164. package/es-modules/Series/Area/AreaSeries.js +21 -14
  165. package/es-modules/Series/AreaRange/AreaRangePoint.js +24 -11
  166. package/es-modules/Series/AreaRange/AreaRangeSeries.js +154 -147
  167. package/es-modules/Series/AreaSpline/AreaSplineSeries.js +45 -41
  168. package/es-modules/Series/AreaSplineRange/AreaSplineRangeSeries.js +43 -43
  169. package/es-modules/Series/Bar/BarSeries.js +3 -1
  170. package/es-modules/Series/Bellcurve/BellcurveSeries.js +3 -1
  171. package/es-modules/Series/BoxPlot/BoxPlotSeries.js +4 -2
  172. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -1
  173. package/es-modules/Series/Bubble/BubblePoint.js +3 -1
  174. package/es-modules/Series/Bubble/BubbleSeries.js +15 -6
  175. package/es-modules/Series/Bullet/BulletPoint.js +3 -1
  176. package/es-modules/Series/Bullet/BulletSeries.js +4 -3
  177. package/es-modules/Series/Candlestick/CandlestickSeries.js +5 -3
  178. package/es-modules/Series/CenteredUtilities.js +8 -2
  179. package/es-modules/Series/ColorMapComposition.js +111 -0
  180. package/es-modules/Series/Column/ColumnSeries.js +10 -7
  181. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +3 -1
  182. package/es-modules/Series/ColumnRange/ColumnRangePoint.js +17 -13
  183. package/es-modules/Series/ColumnRange/ColumnRangeSeries.js +60 -57
  184. package/es-modules/Series/Cylinder/CylinderPoint.js +3 -1
  185. package/es-modules/Series/Cylinder/CylinderSeries.js +3 -1
  186. package/es-modules/Series/DataModifyComposition.js +1 -0
  187. package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +3 -1
  188. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +5 -3
  189. package/es-modules/Series/DotPlot/DotPlotSeries.js +3 -1
  190. package/es-modules/Series/DrawPointUtilities.js +87 -0
  191. package/es-modules/Series/Dumbbell/DumbbellPoint.js +3 -1
  192. package/es-modules/Series/Dumbbell/DumbbellSeries.js +4 -2
  193. package/es-modules/Series/ErrorBar/ErrorBarSeries.js +4 -2
  194. package/es-modules/Series/Flags/FlagsPoint.js +4 -1
  195. package/es-modules/Series/Flags/FlagsSeries.js +13 -16
  196. package/es-modules/Series/Funnel/FunnelSeries.js +5 -3
  197. package/es-modules/Series/Funnel3D/Funnel3DPoint.js +3 -1
  198. package/es-modules/Series/Funnel3D/Funnel3DSeries.js +3 -1
  199. package/es-modules/Series/Gantt/GanttPoint.js +3 -1
  200. package/es-modules/Series/Gantt/GanttSeries.js +3 -1
  201. package/es-modules/Series/Gauge/GaugePoint.js +3 -1
  202. package/es-modules/Series/Gauge/GaugeSeries.js +196 -174
  203. package/es-modules/Series/HLC/HLCPoint.js +3 -1
  204. package/es-modules/Series/HLC/HLCSeries.js +4 -2
  205. package/es-modules/Series/Heatmap/HeatmapPoint.js +7 -5
  206. package/es-modules/Series/Heatmap/HeatmapSeries.js +29 -33
  207. package/es-modules/Series/HeikinAshi/HeikinAshiPoint.js +3 -1
  208. package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +3 -1
  209. package/es-modules/Series/Histogram/HistogramSeries.js +3 -1
  210. package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +3 -1
  211. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +11 -9
  212. package/es-modules/Series/Item/ItemPoint.js +3 -1
  213. package/es-modules/Series/Item/ItemSeries.js +3 -1
  214. package/es-modules/Series/Line/LineSeries.js +4 -2
  215. package/es-modules/Series/Lollipop/LollipopPoint.js +3 -1
  216. package/es-modules/Series/Lollipop/LollipopSeries.js +4 -2
  217. package/es-modules/Series/Map/MapPoint.js +32 -7
  218. package/es-modules/Series/Map/MapSeries.js +298 -189
  219. package/es-modules/Series/MapBubble/MapBubblePoint.js +19 -25
  220. package/es-modules/Series/MapBubble/MapBubbleSeries.js +61 -2
  221. package/es-modules/Series/MapLine/MapLineSeries.js +18 -1
  222. package/es-modules/Series/MapPoint/MapPointPoint.js +6 -10
  223. package/es-modules/Series/MapPoint/MapPointSeries.js +50 -16
  224. package/es-modules/Series/Networkgraph/Networkgraph.js +3 -1
  225. package/es-modules/Series/NodesComposition.js +101 -49
  226. package/es-modules/Series/OHLC/OHLCPoint.js +3 -1
  227. package/es-modules/Series/OHLC/OHLCSeries.js +10 -1
  228. package/es-modules/Series/Organization/OrganizationPoint.js +71 -3
  229. package/es-modules/Series/Organization/OrganizationSeries.js +84 -28
  230. package/es-modules/Series/PackedBubble/PackedBubbleComposition.js +0 -2
  231. package/es-modules/Series/PackedBubble/PackedBubblePoint.js +3 -1
  232. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +3 -1
  233. package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -1
  234. package/es-modules/Series/Pie/PieDataLabel.js +4 -2
  235. package/es-modules/Series/Pie/PiePoint.js +15 -6
  236. package/es-modules/Series/Pie/PieSeries.js +51 -37
  237. package/es-modules/Series/Pie3D/Pie3DPoint.js +3 -1
  238. package/es-modules/Series/Pie3D/Pie3DSeries.js +22 -1
  239. package/es-modules/Series/PolarComposition.js +819 -0
  240. package/es-modules/Series/Polygon/PolygonSeries.js +3 -1
  241. package/es-modules/Series/Pyramid/PyramidSeries.js +3 -1
  242. package/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +3 -1
  243. package/es-modules/Series/Sankey/SankeyColumnComposition.js +193 -0
  244. package/es-modules/Series/Sankey/SankeyPoint.js +40 -2
  245. package/es-modules/Series/Sankey/SankeySeries.js +35 -136
  246. package/es-modules/Series/Scatter/ScatterSeries.js +11 -6
  247. package/es-modules/Series/Scatter3D/Scatter3DPoint.js +3 -1
  248. package/es-modules/Series/Scatter3D/Scatter3DSeries.js +3 -1
  249. package/es-modules/Series/SeriesOnPointComposition.js +391 -0
  250. package/es-modules/Series/SolidGauge/SolidGaugeSeries.js +5 -3
  251. package/es-modules/Series/Spline/SplineSeries.js +13 -4
  252. package/es-modules/Series/Streamgraph/StreamgraphSeries.js +3 -1
  253. package/es-modules/Series/Sunburst/SunburstPoint.js +3 -3
  254. package/es-modules/Series/Sunburst/SunburstSeries.js +21 -5
  255. package/es-modules/Series/Tilemap/TilemapPoint.js +3 -1
  256. package/es-modules/Series/Tilemap/TilemapSeries.js +3 -1
  257. package/es-modules/Series/Timeline/TimelinePoint.js +3 -1
  258. package/es-modules/Series/Timeline/TimelineSeries.js +6 -4
  259. package/es-modules/Series/Treemap/TreemapPoint.js +8 -4
  260. package/es-modules/Series/Treemap/TreemapSeries.js +97 -87
  261. package/es-modules/Series/VariablePie/VariablePieSeries.js +3 -1
  262. package/es-modules/Series/Variwide/VariwidePoint.js +3 -1
  263. package/es-modules/Series/Variwide/VariwideSeries.js +3 -1
  264. package/es-modules/Series/Vector/VectorSeries.js +3 -1
  265. package/es-modules/Series/Venn/VennPoint.js +5 -5
  266. package/es-modules/Series/Venn/VennSeries.js +9 -6
  267. package/es-modules/Series/Waterfall/WaterfallPoint.js +3 -1
  268. package/es-modules/Series/Waterfall/WaterfallSeries.js +16 -12
  269. package/es-modules/Series/Windbarb/WindbarbPoint.js +3 -1
  270. package/es-modules/Series/Windbarb/WindbarbSeries.js +3 -1
  271. package/es-modules/Series/Wordcloud/WordcloudPoint.js +6 -6
  272. package/es-modules/Series/Wordcloud/WordcloudSeries.js +11 -8
  273. package/es-modules/Series/XRange/XRangePoint.js +3 -1
  274. package/es-modules/Series/XRange/XRangeSeries.js +3 -1
  275. package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +3 -1
  276. package/es-modules/Stock/Indicators/AD/ADIndicator.js +3 -1
  277. package/es-modules/Stock/Indicators/AO/AOIndicator.js +5 -3
  278. package/es-modules/Stock/Indicators/APO/APOIndicator.js +3 -1
  279. package/es-modules/Stock/Indicators/ATR/ATRIndicator.js +3 -1
  280. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +3 -1
  281. package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +3 -1
  282. package/es-modules/Stock/Indicators/BB/BBIndicator.js +6 -4
  283. package/es-modules/Stock/Indicators/CCI/CCIIndicator.js +3 -1
  284. package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +3 -1
  285. package/es-modules/Stock/Indicators/CMO/CMOIndicator.js +3 -1
  286. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +3 -1
  287. package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +3 -1
  288. package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +13 -7
  289. package/es-modules/Stock/Indicators/DPO/DPOIndicator.js +3 -1
  290. package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +3 -1
  291. package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +3 -1
  292. package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +3 -1
  293. package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +3 -1
  294. package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +3 -1
  295. package/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +3 -1
  296. package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +3 -1
  297. package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +3 -1
  298. package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +3 -1
  299. package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +26 -13
  300. package/es-modules/Stock/Indicators/MFI/MFIIndicator.js +3 -1
  301. package/es-modules/Stock/Indicators/Momentum/MomentumIndicator.js +3 -1
  302. package/es-modules/Stock/Indicators/MultipleLinesComposition.js +85 -95
  303. package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +3 -1
  304. package/es-modules/Stock/Indicators/OBV/OBVIndicator.js +3 -1
  305. package/es-modules/Stock/Indicators/PC/PCIndicator.js +3 -1
  306. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +3 -1
  307. package/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +3 -1
  308. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +3 -1
  309. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsPoint.js +3 -1
  310. package/es-modules/Stock/Indicators/PriceEnvelopes/PriceEnvelopesIndicator.js +3 -1
  311. package/es-modules/Stock/Indicators/ROC/ROCIndicator.js +3 -1
  312. package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +3 -1
  313. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +12 -3
  314. package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +3 -1
  315. package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +3 -1
  316. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +6 -4
  317. package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +3 -1
  318. package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +3 -1
  319. package/es-modules/Stock/Indicators/TrendLine/TrendLineIndicator.js +3 -1
  320. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +3 -1
  321. package/es-modules/Stock/Indicators/VBP/VBPPoint.js +3 -1
  322. package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +3 -1
  323. package/es-modules/Stock/Indicators/WMA/WMAIndicator.js +3 -1
  324. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +3 -1
  325. package/es-modules/Stock/Indicators/Zigzag/ZigzagIndicator.js +3 -1
  326. package/es-modules/Stock/StockToolsBindings.js +51 -43
  327. package/es-modules/Stock/StockToolsGui.js +1 -1
  328. package/es-modules/masters/highcharts-3d.src.js +1 -1
  329. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  330. package/es-modules/masters/highcharts-more.src.js +4 -4
  331. package/es-modules/masters/highcharts.src.js +1 -1
  332. package/es-modules/masters/highmaps.src.js +1 -1
  333. package/es-modules/masters/highstock.src.js +1 -1
  334. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  335. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  336. package/es-modules/masters/indicators/ao.src.js +1 -1
  337. package/es-modules/masters/indicators/apo.src.js +1 -1
  338. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  339. package/es-modules/masters/indicators/aroon.src.js +1 -1
  340. package/es-modules/masters/indicators/atr.src.js +1 -1
  341. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  342. package/es-modules/masters/indicators/cci.src.js +1 -1
  343. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  344. package/es-modules/masters/indicators/cmf.src.js +1 -1
  345. package/es-modules/masters/indicators/cmo.src.js +1 -1
  346. package/es-modules/masters/indicators/dema.src.js +1 -1
  347. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  348. package/es-modules/masters/indicators/dmi.src.js +1 -1
  349. package/es-modules/masters/indicators/dpo.src.js +1 -1
  350. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  351. package/es-modules/masters/indicators/indicators-all.src.js +1 -1
  352. package/es-modules/masters/indicators/indicators.src.js +1 -1
  353. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  354. package/es-modules/masters/indicators/klinger.src.js +1 -1
  355. package/es-modules/masters/indicators/macd.src.js +1 -1
  356. package/es-modules/masters/indicators/mfi.src.js +1 -1
  357. package/es-modules/masters/indicators/momentum.src.js +1 -1
  358. package/es-modules/masters/indicators/natr.src.js +1 -1
  359. package/es-modules/masters/indicators/obv.src.js +1 -1
  360. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  361. package/es-modules/masters/indicators/ppo.src.js +1 -1
  362. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  363. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  364. package/es-modules/masters/indicators/psar.src.js +1 -1
  365. package/es-modules/masters/indicators/regressions.src.js +1 -1
  366. package/es-modules/masters/indicators/roc.src.js +1 -1
  367. package/es-modules/masters/indicators/rsi.src.js +1 -1
  368. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  369. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  370. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  371. package/es-modules/masters/indicators/tema.src.js +1 -1
  372. package/es-modules/masters/indicators/trendline.src.js +1 -1
  373. package/es-modules/masters/indicators/trix.src.js +1 -1
  374. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  375. package/es-modules/masters/indicators/vwap.src.js +1 -1
  376. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  377. package/es-modules/masters/indicators/wma.src.js +1 -1
  378. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  379. package/es-modules/masters/modules/accessibility.src.js +1 -1
  380. package/es-modules/masters/modules/annotations-advanced.src.js +2 -2
  381. package/es-modules/masters/modules/annotations.src.js +2 -2
  382. package/es-modules/masters/modules/arc-diagram.src.js +14 -0
  383. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  384. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  385. package/es-modules/masters/modules/boost.src.js +1 -1
  386. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  387. package/es-modules/masters/modules/bullet.src.js +1 -1
  388. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  389. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  390. package/es-modules/masters/modules/cylinder.src.js +1 -1
  391. package/es-modules/masters/modules/data.src.js +2 -1
  392. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  393. package/es-modules/masters/modules/debugger.src.js +1 -1
  394. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  395. package/es-modules/masters/modules/dotplot.src.js +1 -1
  396. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  397. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  398. package/es-modules/masters/modules/drilldown.src.js +2 -1
  399. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  400. package/es-modules/masters/modules/export-data.src.js +1 -1
  401. package/es-modules/masters/modules/exporting.src.js +1 -1
  402. package/es-modules/masters/modules/full-screen.src.js +1 -1
  403. package/es-modules/masters/modules/funnel.src.js +1 -1
  404. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  405. package/es-modules/masters/modules/gantt.src.js +1 -1
  406. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  407. package/es-modules/masters/modules/heatmap.src.js +1 -1
  408. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  409. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  410. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  411. package/es-modules/masters/modules/item-series.src.js +1 -1
  412. package/es-modules/masters/modules/lollipop.src.js +1 -1
  413. package/es-modules/masters/modules/map.src.js +5 -1
  414. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  415. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  416. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  417. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  418. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  419. package/es-modules/masters/modules/oldie.src.js +1 -1
  420. package/es-modules/masters/modules/organization.src.js +1 -1
  421. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  422. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  423. package/es-modules/masters/modules/pareto.src.js +1 -1
  424. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  425. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  426. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  427. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  428. package/es-modules/masters/modules/sankey.src.js +1 -1
  429. package/es-modules/masters/modules/series-label.src.js +5 -2
  430. package/es-modules/masters/modules/series-on-point.src.js +16 -0
  431. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  432. package/es-modules/masters/modules/sonification.src.js +2 -6
  433. package/es-modules/masters/modules/static-scale.src.js +1 -1
  434. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  435. package/es-modules/masters/modules/stock.src.js +1 -1
  436. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  437. package/es-modules/masters/modules/sunburst.src.js +1 -1
  438. package/es-modules/masters/modules/tilemap.src.js +1 -1
  439. package/es-modules/masters/modules/timeline.src.js +1 -1
  440. package/es-modules/masters/modules/treegrid.src.js +1 -1
  441. package/es-modules/masters/modules/treemap.src.js +5 -1
  442. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  443. package/es-modules/masters/modules/variwide.src.js +1 -1
  444. package/es-modules/masters/modules/vector.src.js +1 -1
  445. package/es-modules/masters/modules/venn.src.js +1 -1
  446. package/es-modules/masters/modules/windbarb.src.js +1 -1
  447. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  448. package/es-modules/masters/modules/xrange.src.js +1 -1
  449. package/es-modules/masters/themes/avocado.src.js +1 -1
  450. package/es-modules/masters/themes/brand-dark.src.js +1 -1
  451. package/es-modules/masters/themes/brand-light.src.js +1 -1
  452. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  453. package/es-modules/masters/themes/dark-green.src.js +1 -1
  454. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  455. package/es-modules/masters/themes/gray.src.js +1 -1
  456. package/es-modules/masters/themes/grid-light.src.js +1 -1
  457. package/es-modules/masters/themes/grid.src.js +1 -1
  458. package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  459. package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  460. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  461. package/es-modules/masters/themes/skies.src.js +1 -1
  462. package/es-modules/masters/themes/sunset.src.js +1 -1
  463. package/highcharts-3d.js +99 -98
  464. package/highcharts-3d.js.map +1 -1
  465. package/highcharts-3d.src.js +51 -21
  466. package/highcharts-gantt.js +811 -801
  467. package/highcharts-gantt.js.map +1 -1
  468. package/highcharts-gantt.src.js +2020 -1607
  469. package/highcharts-more.d.ts +10 -0
  470. package/highcharts-more.js +194 -194
  471. package/highcharts-more.js.map +1 -1
  472. package/highcharts-more.src.d.ts +10 -0
  473. package/highcharts-more.src.js +3512 -3364
  474. package/highcharts.d.ts +12336 -965
  475. package/highcharts.js +595 -586
  476. package/highcharts.js.map +1 -1
  477. package/highcharts.src.d.ts +12336 -965
  478. package/highcharts.src.js +1047 -665
  479. package/highmaps.js +763 -728
  480. package/highmaps.js.map +1 -1
  481. package/highmaps.src.js +4482 -2639
  482. package/highstock.js +798 -788
  483. package/highstock.js.map +1 -1
  484. package/highstock.src.js +1177 -739
  485. package/indicators/acceleration-bands.d.ts +1 -17
  486. package/indicators/acceleration-bands.js +11 -11
  487. package/indicators/acceleration-bands.js.map +1 -1
  488. package/indicators/acceleration-bands.src.d.ts +1 -17
  489. package/indicators/acceleration-bands.src.js +99 -100
  490. package/indicators/accumulation-distribution.js +5 -5
  491. package/indicators/accumulation-distribution.js.map +1 -1
  492. package/indicators/accumulation-distribution.src.js +11 -2
  493. package/indicators/ao.js +6 -6
  494. package/indicators/ao.js.map +1 -1
  495. package/indicators/ao.src.js +13 -4
  496. package/indicators/apo.js +5 -5
  497. package/indicators/apo.js.map +1 -1
  498. package/indicators/apo.src.js +11 -2
  499. package/indicators/aroon-oscillator.d.ts +1 -17
  500. package/indicators/aroon-oscillator.js +10 -10
  501. package/indicators/aroon-oscillator.js.map +1 -1
  502. package/indicators/aroon-oscillator.src.d.ts +1 -17
  503. package/indicators/aroon-oscillator.src.js +99 -100
  504. package/indicators/aroon.d.ts +1 -17
  505. package/indicators/aroon.js +11 -11
  506. package/indicators/aroon.js.map +1 -1
  507. package/indicators/aroon.src.d.ts +1 -17
  508. package/indicators/aroon.src.js +99 -100
  509. package/indicators/atr.js +5 -5
  510. package/indicators/atr.js.map +1 -1
  511. package/indicators/atr.src.js +11 -2
  512. package/indicators/bollinger-bands.d.ts +1 -17
  513. package/indicators/bollinger-bands.js +11 -12
  514. package/indicators/bollinger-bands.js.map +1 -1
  515. package/indicators/bollinger-bands.src.d.ts +1 -17
  516. package/indicators/bollinger-bands.src.js +102 -103
  517. package/indicators/cci.js +5 -5
  518. package/indicators/cci.js.map +1 -1
  519. package/indicators/cci.src.js +11 -2
  520. package/indicators/chaikin.js +8 -8
  521. package/indicators/chaikin.js.map +1 -1
  522. package/indicators/chaikin.src.js +11 -2
  523. package/indicators/cmf.js +6 -6
  524. package/indicators/cmf.js.map +1 -1
  525. package/indicators/cmf.src.js +11 -2
  526. package/indicators/cmo.js +5 -5
  527. package/indicators/cmo.js.map +1 -1
  528. package/indicators/cmo.src.js +11 -2
  529. package/indicators/dema.js +5 -5
  530. package/indicators/dema.js.map +1 -1
  531. package/indicators/dema.src.js +11 -2
  532. package/indicators/disparity-index.js +6 -6
  533. package/indicators/disparity-index.js.map +1 -1
  534. package/indicators/disparity-index.src.js +11 -2
  535. package/indicators/dmi.js +12 -12
  536. package/indicators/dmi.js.map +1 -1
  537. package/indicators/dmi.src.js +109 -106
  538. package/indicators/dpo.js +5 -5
  539. package/indicators/dpo.js.map +1 -1
  540. package/indicators/dpo.src.js +11 -2
  541. package/indicators/ema.js +2 -1
  542. package/indicators/ema.js.map +1 -1
  543. package/indicators/ema.src.js +10 -1
  544. package/indicators/ichimoku-kinko-hyo.js +16 -16
  545. package/indicators/ichimoku-kinko-hyo.js.map +1 -1
  546. package/indicators/ichimoku-kinko-hyo.src.js +11 -2
  547. package/indicators/indicators-all.d.ts +1 -17
  548. package/indicators/indicators-all.js +198 -196
  549. package/indicators/indicators-all.js.map +1 -1
  550. package/indicators/indicators-all.src.d.ts +1 -17
  551. package/indicators/indicators-all.src.js +151 -129
  552. package/indicators/indicators.js +13 -12
  553. package/indicators/indicators.js.map +1 -1
  554. package/indicators/indicators.src.js +21 -5
  555. package/indicators/keltner-channels.d.ts +1 -17
  556. package/indicators/keltner-channels.js +11 -11
  557. package/indicators/keltner-channels.js.map +1 -1
  558. package/indicators/keltner-channels.src.d.ts +1 -17
  559. package/indicators/keltner-channels.src.js +99 -100
  560. package/indicators/klinger.js +14 -14
  561. package/indicators/klinger.js.map +1 -1
  562. package/indicators/klinger.src.js +99 -100
  563. package/indicators/macd.js +13 -11
  564. package/indicators/macd.js.map +1 -1
  565. package/indicators/macd.src.js +35 -14
  566. package/indicators/mfi.js +6 -6
  567. package/indicators/mfi.js.map +1 -1
  568. package/indicators/mfi.src.js +11 -2
  569. package/indicators/momentum.js +5 -5
  570. package/indicators/momentum.js.map +1 -1
  571. package/indicators/momentum.src.js +11 -2
  572. package/indicators/natr.js +5 -4
  573. package/indicators/natr.js.map +1 -1
  574. package/indicators/natr.src.js +11 -2
  575. package/indicators/obv.js +5 -5
  576. package/indicators/obv.js.map +1 -1
  577. package/indicators/obv.src.js +11 -2
  578. package/indicators/pivot-points.js +11 -11
  579. package/indicators/pivot-points.js.map +1 -1
  580. package/indicators/pivot-points.src.js +11 -2
  581. package/indicators/ppo.js +5 -5
  582. package/indicators/ppo.js.map +1 -1
  583. package/indicators/ppo.src.js +11 -2
  584. package/indicators/price-channel.d.ts +1 -17
  585. package/indicators/price-channel.js +11 -11
  586. package/indicators/price-channel.js.map +1 -1
  587. package/indicators/price-channel.src.d.ts +1 -17
  588. package/indicators/price-channel.src.js +99 -100
  589. package/indicators/price-envelopes.js +8 -8
  590. package/indicators/price-envelopes.js.map +1 -1
  591. package/indicators/price-envelopes.src.js +11 -2
  592. package/indicators/psar.js +7 -6
  593. package/indicators/psar.js.map +1 -1
  594. package/indicators/psar.src.js +11 -2
  595. package/indicators/regressions.js +12 -12
  596. package/indicators/regressions.js.map +1 -1
  597. package/indicators/regressions.src.js +11 -2
  598. package/indicators/roc.js +5 -5
  599. package/indicators/roc.js.map +1 -1
  600. package/indicators/roc.src.js +11 -2
  601. package/indicators/rsi.js +6 -5
  602. package/indicators/rsi.js.map +1 -1
  603. package/indicators/rsi.src.js +11 -2
  604. package/indicators/slow-stochastic.js +5 -5
  605. package/indicators/slow-stochastic.js.map +1 -1
  606. package/indicators/slow-stochastic.src.js +11 -2
  607. package/indicators/stochastic.d.ts +1 -17
  608. package/indicators/stochastic.js +12 -12
  609. package/indicators/stochastic.js.map +1 -1
  610. package/indicators/stochastic.src.d.ts +1 -17
  611. package/indicators/stochastic.src.js +99 -100
  612. package/indicators/supertrend.js +10 -10
  613. package/indicators/supertrend.js.map +1 -1
  614. package/indicators/supertrend.src.js +14 -5
  615. package/indicators/tema.js +6 -6
  616. package/indicators/tema.js.map +1 -1
  617. package/indicators/tema.src.js +11 -2
  618. package/indicators/trendline.js +5 -5
  619. package/indicators/trendline.js.map +1 -1
  620. package/indicators/trendline.src.js +11 -2
  621. package/indicators/trix.js +4 -4
  622. package/indicators/trix.js.map +1 -1
  623. package/indicators/trix.src.js +11 -2
  624. package/indicators/volume-by-price.js +17 -17
  625. package/indicators/volume-by-price.js.map +1 -1
  626. package/indicators/volume-by-price.src.js +11 -2
  627. package/indicators/vwap.js +5 -5
  628. package/indicators/vwap.js.map +1 -1
  629. package/indicators/vwap.src.js +11 -2
  630. package/indicators/williams-r.js +6 -5
  631. package/indicators/williams-r.js.map +1 -1
  632. package/indicators/williams-r.src.js +11 -2
  633. package/indicators/wma.js +5 -5
  634. package/indicators/wma.js.map +1 -1
  635. package/indicators/wma.src.js +11 -2
  636. package/indicators/zigzag.js +6 -6
  637. package/indicators/zigzag.js.map +1 -1
  638. package/indicators/zigzag.src.js +11 -2
  639. package/lib/jspdf.js +299 -184
  640. package/lib/jspdf.src.js +25266 -18067
  641. package/lib/svg2pdf.js +35 -31
  642. package/lib/svg2pdf.src.js +5721 -4179
  643. package/modules/accessibility.js +242 -237
  644. package/modules/accessibility.js.map +1 -1
  645. package/modules/accessibility.src.js +599 -390
  646. package/modules/annotations-advanced.js +192 -192
  647. package/modules/annotations-advanced.js.map +1 -1
  648. package/modules/annotations-advanced.src.js +96 -47
  649. package/modules/annotations.js +126 -126
  650. package/modules/annotations.js.map +1 -1
  651. package/modules/annotations.src.js +67 -25
  652. package/modules/arc-diagram.js +25 -0
  653. package/modules/arc-diagram.js.map +1 -0
  654. package/modules/arc-diagram.src.js +778 -0
  655. package/modules/arrow-symbols.js +4 -3
  656. package/modules/arrow-symbols.js.map +1 -1
  657. package/modules/arrow-symbols.src.js +11 -2
  658. package/modules/boost-canvas.js +16 -15
  659. package/modules/boost-canvas.js.map +1 -1
  660. package/modules/boost-canvas.src.js +22 -7
  661. package/modules/boost.js +81 -79
  662. package/modules/boost.js.map +1 -1
  663. package/modules/boost.src.js +90 -51
  664. package/modules/broken-axis.js +13 -13
  665. package/modules/broken-axis.js.map +1 -1
  666. package/modules/broken-axis.src.js +11 -2
  667. package/modules/bullet.js +9 -9
  668. package/modules/bullet.js.map +1 -1
  669. package/modules/bullet.src.js +12 -6
  670. package/modules/coloraxis.js +24 -24
  671. package/modules/coloraxis.js.map +1 -1
  672. package/modules/coloraxis.src.js +37 -11
  673. package/modules/current-date-indicator.js +5 -4
  674. package/modules/current-date-indicator.js.map +1 -1
  675. package/modules/current-date-indicator.src.js +12 -3
  676. package/modules/cylinder.js +11 -11
  677. package/modules/cylinder.js.map +1 -1
  678. package/modules/cylinder.src.js +11 -2
  679. package/modules/data.d.ts +12 -12
  680. package/modules/data.js +33 -33
  681. package/modules/data.js.map +1 -1
  682. package/modules/data.src.d.ts +12 -12
  683. package/modules/data.src.js +906 -846
  684. package/modules/datagrouping.js +21 -20
  685. package/modules/datagrouping.js.map +1 -1
  686. package/modules/datagrouping.src.js +19 -5
  687. package/modules/debugger.js +8 -7
  688. package/modules/debugger.js.map +1 -1
  689. package/modules/debugger.src.js +15 -2
  690. package/modules/dependency-wheel.js +12 -11
  691. package/modules/dependency-wheel.js.map +1 -1
  692. package/modules/dependency-wheel.src.js +14 -5
  693. package/modules/dotplot.js +6 -6
  694. package/modules/dotplot.js.map +1 -1
  695. package/modules/dotplot.src.js +11 -2
  696. package/modules/drag-panes.js +10 -10
  697. package/modules/drag-panes.js.map +1 -1
  698. package/modules/drag-panes.src.js +12 -3
  699. package/modules/draggable-points.js +35 -34
  700. package/modules/draggable-points.js.map +1 -1
  701. package/modules/draggable-points.src.js +20 -9
  702. package/modules/drilldown.d.ts +19 -0
  703. package/modules/drilldown.js +37 -25
  704. package/modules/drilldown.js.map +1 -1
  705. package/modules/drilldown.src.d.ts +19 -0
  706. package/modules/drilldown.src.js +1124 -108
  707. package/modules/dumbbell.d.ts +4 -0
  708. package/modules/dumbbell.js +17 -17
  709. package/modules/dumbbell.js.map +1 -1
  710. package/modules/dumbbell.src.d.ts +4 -0
  711. package/modules/dumbbell.src.js +34 -13
  712. package/modules/export-data.js +24 -21
  713. package/modules/export-data.js.map +1 -1
  714. package/modules/export-data.src.js +87 -14
  715. package/modules/exporting.d.ts +8 -8
  716. package/modules/exporting.js +39 -39
  717. package/modules/exporting.js.map +1 -1
  718. package/modules/exporting.src.d.ts +8 -8
  719. package/modules/exporting.src.js +270 -135
  720. package/modules/full-screen.js +8 -7
  721. package/modules/full-screen.js.map +1 -1
  722. package/modules/full-screen.src.js +135 -58
  723. package/modules/funnel.js +12 -12
  724. package/modules/funnel.js.map +1 -1
  725. package/modules/funnel.src.js +13 -4
  726. package/modules/funnel3d.js +21 -21
  727. package/modules/funnel3d.js.map +1 -1
  728. package/modules/funnel3d.src.js +11 -2
  729. package/modules/gantt.js +218 -217
  730. package/modules/gantt.js.map +1 -1
  731. package/modules/gantt.src.js +983 -943
  732. package/modules/grid-axis.js +23 -23
  733. package/modules/grid-axis.js.map +1 -1
  734. package/modules/grid-axis.src.js +900 -890
  735. package/modules/heatmap.js +40 -39
  736. package/modules/heatmap.js.map +1 -1
  737. package/modules/heatmap.src.js +160 -113
  738. package/modules/heikinashi.js +8 -8
  739. package/modules/heikinashi.js.map +1 -1
  740. package/modules/heikinashi.src.js +11 -2
  741. package/modules/histogram-bellcurve.js +13 -13
  742. package/modules/histogram-bellcurve.js.map +1 -1
  743. package/modules/histogram-bellcurve.src.js +11 -2
  744. package/modules/hollowcandlestick.js +9 -9
  745. package/modules/hollowcandlestick.js.map +1 -1
  746. package/modules/hollowcandlestick.src.js +19 -10
  747. package/modules/item-series.js +12 -12
  748. package/modules/item-series.js.map +1 -1
  749. package/modules/item-series.src.js +11 -2
  750. package/modules/lollipop.js +7 -7
  751. package/modules/lollipop.js.map +1 -1
  752. package/modules/lollipop.src.js +12 -3
  753. package/modules/map.d.ts +80 -43
  754. package/modules/map.js +171 -144
  755. package/modules/map.js.map +1 -1
  756. package/modules/map.src.d.ts +80 -43
  757. package/modules/map.src.js +8292 -6822
  758. package/modules/marker-clusters.js +36 -36
  759. package/modules/marker-clusters.js.map +1 -1
  760. package/modules/marker-clusters.src.js +48 -28
  761. package/modules/networkgraph.d.ts +1 -12
  762. package/modules/networkgraph.js +46 -45
  763. package/modules/networkgraph.js.map +1 -1
  764. package/modules/networkgraph.src.d.ts +1 -12
  765. package/modules/networkgraph.src.js +127 -55
  766. package/modules/no-data-to-display.js +5 -5
  767. package/modules/no-data-to-display.js.map +1 -1
  768. package/modules/no-data-to-display.src.js +12 -3
  769. package/modules/offline-exporting.js +20 -18
  770. package/modules/offline-exporting.js.map +1 -1
  771. package/modules/offline-exporting.src.js +129 -28
  772. package/modules/oldie-polyfills.js +7 -7
  773. package/modules/oldie-polyfills.js.map +1 -1
  774. package/modules/oldie-polyfills.src.js +11 -2
  775. package/modules/oldie.js +30 -30
  776. package/modules/oldie.js.map +1 -1
  777. package/modules/oldie.src.js +13 -4
  778. package/modules/organization.js +16 -14
  779. package/modules/organization.js.map +1 -1
  780. package/modules/organization.src.js +168 -34
  781. package/modules/overlapping-datalabels.js +3 -2
  782. package/modules/overlapping-datalabels.js.map +1 -1
  783. package/modules/overlapping-datalabels.src.js +11 -2
  784. package/modules/parallel-coordinates.js +11 -11
  785. package/modules/parallel-coordinates.js.map +1 -1
  786. package/modules/parallel-coordinates.src.js +12 -3
  787. package/modules/pareto.js +7 -7
  788. package/modules/pareto.js.map +1 -1
  789. package/modules/pareto.src.js +11 -2
  790. package/modules/pathfinder.js +31 -31
  791. package/modules/pathfinder.js.map +1 -1
  792. package/modules/pathfinder.src.js +11 -2
  793. package/modules/pattern-fill.js +15 -14
  794. package/modules/pattern-fill.js.map +1 -1
  795. package/modules/pattern-fill.src.js +25 -3
  796. package/modules/price-indicator.js +5 -5
  797. package/modules/price-indicator.js.map +1 -1
  798. package/modules/price-indicator.src.js +11 -2
  799. package/modules/pyramid3d.js +4 -4
  800. package/modules/pyramid3d.js.map +1 -1
  801. package/modules/pyramid3d.src.js +11 -2
  802. package/modules/sankey.d.ts +1 -12
  803. package/modules/sankey.js +32 -29
  804. package/modules/sankey.js.map +1 -1
  805. package/modules/sankey.src.d.ts +1 -12
  806. package/modules/sankey.src.js +422 -207
  807. package/modules/series-label.js +18 -17
  808. package/modules/series-label.js.map +1 -1
  809. package/modules/series-label.src.js +482 -386
  810. package/modules/series-on-point.js +18 -0
  811. package/modules/series-on-point.js.map +1 -0
  812. package/modules/series-on-point.src.js +464 -0
  813. package/modules/solid-gauge.js +10 -10
  814. package/modules/solid-gauge.js.map +1 -1
  815. package/modules/solid-gauge.src.js +15 -6
  816. package/modules/sonification.js +59 -59
  817. package/modules/sonification.js.map +1 -1
  818. package/modules/sonification.src.js +13 -8
  819. package/modules/static-scale.js +5 -4
  820. package/modules/static-scale.js.map +1 -1
  821. package/modules/static-scale.src.js +11 -2
  822. package/modules/stock-tools.js +167 -167
  823. package/modules/stock-tools.js.map +1 -1
  824. package/modules/stock-tools.src.js +118 -67
  825. package/modules/stock.js +205 -204
  826. package/modules/stock.js.map +1 -1
  827. package/modules/stock.src.js +141 -76
  828. package/modules/streamgraph.js +5 -4
  829. package/modules/streamgraph.js.map +1 -1
  830. package/modules/streamgraph.src.js +11 -2
  831. package/modules/sunburst.d.ts +3 -0
  832. package/modules/sunburst.js +73 -60
  833. package/modules/sunburst.js.map +1 -1
  834. package/modules/sunburst.src.d.ts +3 -0
  835. package/modules/sunburst.src.js +1391 -406
  836. package/modules/tilemap.js +17 -17
  837. package/modules/tilemap.js.map +1 -1
  838. package/modules/tilemap.src.js +11 -2
  839. package/modules/timeline.js +18 -18
  840. package/modules/timeline.js.map +1 -1
  841. package/modules/timeline.src.js +14 -5
  842. package/modules/treegrid.js +57 -56
  843. package/modules/treegrid.js.map +1 -1
  844. package/modules/treegrid.src.js +913 -892
  845. package/modules/treemap.d.ts +3 -0
  846. package/modules/treemap.js +54 -41
  847. package/modules/treemap.js.map +1 -1
  848. package/modules/treemap.src.d.ts +3 -0
  849. package/modules/treemap.src.js +1229 -255
  850. package/modules/variable-pie.js +9 -9
  851. package/modules/variable-pie.js.map +1 -1
  852. package/modules/variable-pie.src.js +11 -2
  853. package/modules/variwide.js +12 -12
  854. package/modules/variwide.js.map +1 -1
  855. package/modules/variwide.src.js +11 -2
  856. package/modules/vector.js +8 -7
  857. package/modules/vector.js.map +1 -1
  858. package/modules/vector.src.js +11 -2
  859. package/modules/venn.js +31 -31
  860. package/modules/venn.js.map +1 -1
  861. package/modules/venn.src.js +88 -105
  862. package/modules/windbarb.js +15 -15
  863. package/modules/windbarb.js.map +1 -1
  864. package/modules/windbarb.src.js +11 -2
  865. package/modules/wordcloud.js +23 -23
  866. package/modules/wordcloud.js.map +1 -1
  867. package/modules/wordcloud.src.js +92 -109
  868. package/modules/xrange.js +16 -16
  869. package/modules/xrange.js.map +1 -1
  870. package/modules/xrange.src.js +11 -2
  871. package/package.json +1 -1
  872. package/themes/avocado.js +4 -3
  873. package/themes/avocado.js.map +1 -1
  874. package/themes/avocado.src.js +11 -2
  875. package/themes/brand-dark.js +9 -8
  876. package/themes/brand-dark.js.map +1 -1
  877. package/themes/brand-dark.src.js +11 -2
  878. package/themes/brand-light.js +8 -8
  879. package/themes/brand-light.js.map +1 -1
  880. package/themes/brand-light.src.js +11 -2
  881. package/themes/dark-blue.js +9 -8
  882. package/themes/dark-blue.js.map +1 -1
  883. package/themes/dark-blue.src.js +11 -2
  884. package/themes/dark-green.js +9 -8
  885. package/themes/dark-green.js.map +1 -1
  886. package/themes/dark-green.src.js +11 -2
  887. package/themes/dark-unica.js +8 -7
  888. package/themes/dark-unica.js.map +1 -1
  889. package/themes/dark-unica.src.js +11 -2
  890. package/themes/gray.js +9 -8
  891. package/themes/gray.js.map +1 -1
  892. package/themes/gray.src.js +11 -2
  893. package/themes/grid-light.js +5 -4
  894. package/themes/grid-light.js.map +1 -1
  895. package/themes/grid-light.src.js +11 -2
  896. package/themes/grid.js +5 -5
  897. package/themes/grid.js.map +1 -1
  898. package/themes/grid.src.js +11 -2
  899. package/themes/high-contrast-dark.js +7 -7
  900. package/themes/high-contrast-dark.js.map +1 -1
  901. package/themes/high-contrast-dark.src.js +21 -12
  902. package/themes/high-contrast-light.js +3 -3
  903. package/themes/high-contrast-light.js.map +1 -1
  904. package/themes/high-contrast-light.src.js +21 -12
  905. package/themes/sand-signika.js +5 -5
  906. package/themes/sand-signika.js.map +1 -1
  907. package/themes/sand-signika.src.js +11 -2
  908. package/themes/skies.js +5 -5
  909. package/themes/skies.js.map +1 -1
  910. package/themes/skies.src.js +11 -2
  911. package/themes/sunset.js +3 -3
  912. package/themes/sunset.js.map +1 -1
  913. package/themes/sunset.src.js +11 -2
  914. package/es-modules/Extensions/Polar.js +0 -740
  915. package/es-modules/Maps/ProjectionDefinition.js +0 -9
  916. package/es-modules/Series/ColorMapMixin.js +0 -84
  917. package/es-modules/Series/DrawPointComposition.js +0 -111
package/highcharts.src.js CHANGED
@@ -1,11 +1,10 @@
1
1
  /**
2
- * @license Highcharts JS v9.3.3 (2022-02-01)
2
+ * @license Highcharts JS v10.2.0 (2022-07-05)
3
3
  *
4
4
  * (c) 2009-2021 Torstein Honsi
5
5
  *
6
6
  * License: www.highcharts.com/license
7
7
  */
8
- 'use strict';
9
8
  (function (root, factory) {
10
9
  if (typeof module === 'object' && module.exports) {
11
10
  factory['default'] = factory;
@@ -22,11 +21,21 @@
22
21
  }
23
22
  root.Highcharts = factory(root);
24
23
  }
25
- }(typeof window !== 'undefined' ? window : this, function (win) {
24
+ }(typeof window !== 'undefined' ? window : this, function (window) {
25
+ 'use strict';
26
26
  var _modules = {};
27
27
  function _registerModule(obj, path, args, fn) {
28
28
  if (!obj.hasOwnProperty(path)) {
29
29
  obj[path] = fn.apply(null, args);
30
+
31
+ if (typeof CustomEvent === 'function') {
32
+ window.dispatchEvent(
33
+ new CustomEvent(
34
+ 'HighchartsModuleLoaded',
35
+ { detail: { path: path, module: obj[path] }
36
+ })
37
+ );
38
+ }
30
39
  }
31
40
  }
32
41
  _registerModule(_modules, 'Core/Globals.js', [], function () {
@@ -39,23 +48,6 @@
39
48
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
40
49
  *
41
50
  * */
42
- /* *
43
- *
44
- * Constants
45
- *
46
- * */
47
- /**
48
- * @private
49
- * @deprecated
50
- * @todo Rename UMD argument `win` to `window`; move code to `Globals.win`
51
- */
52
- var w = (typeof win !== 'undefined' ?
53
- win :
54
- typeof window !== 'undefined' ?
55
- window :
56
- {}
57
- // eslint-disable-next-line node/no-unsupported-features/es-builtins
58
- );
59
51
  /* *
60
52
  *
61
53
  * Namespace
@@ -71,7 +63,10 @@
71
63
  * Constants
72
64
  *
73
65
  * */
74
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '9.3.3', Globals.win = w, Globals.doc = Globals.win.document, Globals.svg = (Globals.doc &&
66
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '10.2.0', Globals.win = (typeof window !== 'undefined' ?
67
+ window :
68
+ {}), // eslint-disable-line node/no-unsupported-features/es-builtins
69
+ Globals.doc = Globals.win.document, Globals.svg = (Globals.doc &&
75
70
  Globals.doc.createElementNS &&
76
71
  !!Globals.doc.createElementNS(Globals.SVG_NS, 'svg').createSVGRect), Globals.userAgent = (Globals.win.navigator && Globals.win.navigator.userAgent) || '', Globals.isChrome = Globals.userAgent.indexOf('Chrome') !== -1, Globals.isFirefox = Globals.userAgent.indexOf('Firefox') !== -1, Globals.isMS = /(edge|msie|trident)/i.test(Globals.userAgent) && !Globals.win.opera, Globals.isSafari = !Globals.isChrome && Globals.userAgent.indexOf('Safari') !== -1, Globals.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(Globals.userAgent), Globals.isWebKit = Globals.userAgent.indexOf('AppleWebKit') !== -1, Globals.deg2rad = Math.PI * 2 / 360, Globals.hasBidiBug = (Globals.isFirefox &&
77
72
  parseInt(Globals.userAgent.split('Firefox/')[1], 10) < 4 // issue #38
@@ -213,11 +208,11 @@
213
208
  function error(code, stop, chart, params) {
214
209
  var severity = stop ? 'Highcharts error' : 'Highcharts warning';
215
210
  if (code === 32) {
216
- code = severity + ": Deprecated member";
211
+ code = "" + severity + ": Deprecated member";
217
212
  }
218
213
  var isCode = isNumber(code);
219
214
  var message = isCode ?
220
- severity + " #" + code + ": www.highcharts.com/errors/" + code + "/" :
215
+ "" + severity + " #" + code + ": www.highcharts.com/errors/" + code + "/" :
221
216
  code.toString();
222
217
  var defaultHandler = function () {
223
218
  if (stop) {
@@ -236,7 +231,7 @@
236
231
  message += '?';
237
232
  }
238
233
  objectEach(params, function (value, key) {
239
- additionalMessages_1 += "\n - " + key + ": " + value;
234
+ additionalMessages_1 += "\n - ".concat(key, ": ").concat(value);
240
235
  if (isCode) {
241
236
  message += encodeURI(key) + '=' + encodeURI(value);
242
237
  }
@@ -365,7 +360,9 @@
365
360
  // Arrays, primitives and DOM nodes are copied directly
366
361
  }
367
362
  else if (isObject(newer[key]) ||
368
- newer[key] !== older[key]) {
363
+ newer[key] !== older[key] ||
364
+ // If the newer key is explicitly undefined, keep it (#10525)
365
+ (key in newer && !(key in older))) {
369
366
  result[key] = newer[key];
370
367
  }
371
368
  });
@@ -533,7 +530,7 @@
533
530
  * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} elem
534
531
  * The DOM element to receive the attribute(s).
535
532
  *
536
- * @param {string|Highcharts.HTMLAttributes|Highcharts.SVGAttributes} [prop]
533
+ * @param {string|Highcharts.HTMLAttributes|Highcharts.SVGAttributes} [keyOrAttribs]
537
534
  * The property or an object of key-value pairs.
538
535
  *
539
536
  * @param {number|string} [value]
@@ -542,33 +539,36 @@
542
539
  * @return {string|null|undefined}
543
540
  * When used as a getter, return the value.
544
541
  */
545
- function attr(elem, prop, value) {
542
+ function attr(elem, keyOrAttribs, value) {
543
+ var isGetter = isString(keyOrAttribs) && !defined(value);
546
544
  var ret;
547
- // if the prop is a string
548
- if (isString(prop)) {
549
- // set the value
550
- if (defined(value)) {
551
- elem.setAttribute(prop, value);
552
- // get the value
553
- }
554
- else if (elem && elem.getAttribute) {
555
- ret = elem.getAttribute(prop);
545
+ var attrSingle = function (value,
546
+ key) {
547
+ // Set the value
548
+ if (defined(value)) {
549
+ elem.setAttribute(key,
550
+ value);
551
+ // Get the value
552
+ }
553
+ else if (isGetter) {
554
+ ret = elem.getAttribute(key);
556
555
  // IE7 and below cannot get class through getAttribute (#7850)
557
- if (!ret && prop === 'class') {
558
- ret = elem.getAttribute(prop + 'Name');
556
+ if (!ret && key === 'class') {
557
+ ret = elem.getAttribute(key + 'Name');
559
558
  }
559
+ // Remove the value
560
560
  }
561
- // else if prop is defined, it is a hash of key/value pairs
561
+ else {
562
+ elem.removeAttribute(key);
563
+ }
564
+ };
565
+ // If keyOrAttribs is a string
566
+ if (isString(keyOrAttribs)) {
567
+ attrSingle(value, keyOrAttribs);
568
+ // Else if keyOrAttribs is defined, it is a hash of key/value pairs
562
569
  }
563
570
  else {
564
- objectEach(prop, function (val, key) {
565
- if (defined(val)) {
566
- elem.setAttribute(key, val);
567
- }
568
- else {
569
- elem.removeAttribute(key);
570
- }
571
- });
571
+ objectEach(keyOrAttribs, attrSingle);
572
572
  }
573
573
  return ret;
574
574
  }
@@ -619,10 +619,8 @@
619
619
  *
620
620
  * @function Highcharts.clearTimeout
621
621
  *
622
- * @param {number} id
623
- * Id of a timeout.
624
- *
625
- * @return {void}
622
+ * @param {number|undefined} id
623
+ * Id of a timeout.
626
624
  */
627
625
  function internalClearTimeout(id) {
628
626
  if (defined(id)) {
@@ -692,9 +690,8 @@
692
690
  */
693
691
  function css(el, styles) {
694
692
  if (H.isMS && !H.svg) { // #2686
695
- if (styles && typeof styles.opacity !== 'undefined') {
696
- styles.filter =
697
- 'alpha(opacity=' + (styles.opacity * 100) + ')';
693
+ if (styles && defined(styles.opacity)) {
694
+ styles.filter = "alpha(opacity=".concat(styles.opacity * 100, ")");
698
695
  }
699
696
  }
700
697
  extend(el.style, styles);
@@ -887,7 +884,7 @@
887
884
  var i,
888
885
  retInterval = interval;
889
886
  // round to a tenfold of 1, 2, 2.5 or 5
890
- magnitude = pick(magnitude, 1);
887
+ magnitude = pick(magnitude, getMagnitude(interval));
891
888
  var normalized = interval / magnitude;
892
889
  // multiples for a linear scale
893
890
  if (!multiples) {
@@ -1417,7 +1414,7 @@
1417
1414
  }, function (val, key) {
1418
1415
  H[key] = function (arr) {
1419
1416
  var _a;
1420
- error(32, false, void 0, (_a = {}, _a["Highcharts." + key] = "use Array." + val, _a));
1417
+ error(32, false, void 0, (_a = {}, _a["Highcharts.".concat(key)] = "use Array.".concat(val), _a));
1421
1418
  return Array.prototype[val].apply(arr, [].slice.call(arguments, 1));
1422
1419
  };
1423
1420
  });
@@ -2173,19 +2170,22 @@
2173
2170
  */
2174
2171
  var ChartDefaults = {
2175
2172
  /**
2176
- * Default `mapData` for all series. If set to a string,
2177
- it functions
2178
- * as an index into the `Highcharts.maps` array. Otherwise it is
2179
- * interpreted as map data.
2173
+ * Default `mapData` for all series,
2174
+ in terms of a GeoJSON or TopoJSON
2175
+ * object. If set to a string,
2176
+ it functions as an index into the
2177
+ * `Highcharts.maps` array.
2180
2178
  *
2181
- * @see [mapData](#series.map.mapData)
2179
+ * For picking out individual shapes and geometries to use for each series
2180
+ * of the map,
2181
+ see [series.mapData](#series.map.mapData).
2182
2182
  *
2183
2183
  * @sample maps/demo/geojson
2184
- * Loading geoJSON data
2184
+ * Loading GeoJSON data
2185
2185
  * @sample maps/chart/topojson
2186
- * Loading topoJSON converted to geoJSON
2186
+ * Loading TopoJSON data
2187
2187
  *
2188
- * @type {string|Array<*>|Highcharts.GeoJSON}
2188
+ * @type {string|Array<*>|Highcharts.GeoJSON|Highcharts.TopoJSON}
2189
2189
  * @since 5.0.0
2190
2190
  * @product highmaps
2191
2191
  * @apioption chart.map
@@ -2200,7 +2200,7 @@
2200
2200
  * @apioption chart.mapTransforms
2201
2201
  */
2202
2202
  /**
2203
- * When using multiple axis,
2203
+ * When using multiple axes,
2204
2204
  the ticks of two or more opposite axes
2205
2205
  * will automatically be aligned by adding ticks to the axis or axes
2206
2206
  * with the least ticks,
@@ -2211,8 +2211,8 @@
2211
2211
  it's a good idea to hide them for the secondary
2212
2212
  * axis by setting `gridLineWidth` to 0.
2213
2213
  *
2214
- * If `startOnTick` or `endOnTick` in an Axis options are set to false,
2215
- * then the `alignTicks ` will be disabled for the Axis.
2214
+ * If `startOnTick` or `endOnTick` in the axis options are set to false,
2215
+ * then the `alignTicks ` will be disabled for the axis.
2216
2216
  *
2217
2217
  * Disabled for logarithmic axes.
2218
2218
  *
@@ -2230,6 +2230,31 @@
2230
2230
  * @product highcharts highstock gantt
2231
2231
  * @apioption chart.alignTicks
2232
2232
  */
2233
+ /**
2234
+ * When using multiple axes,
2235
+ align the thresholds. When this is true,
2236
+ other
2237
+ * ticks will also be aligned.
2238
+ *
2239
+ * Note that for line series and some other series types,
2240
+ the `threshold`
2241
+ * option is set to `null` by default. This will in turn cause their y-axis
2242
+ * to not have a threshold. In order to avoid that,
2243
+ set the series
2244
+ * `threshold` to 0 or another number.
2245
+ *
2246
+ * If `startOnTick` or `endOnTick` in the axis options are set to false,
2247
+ or
2248
+ * if the axis is logarithmic,
2249
+ the threshold will not be aligned.
2250
+ *
2251
+ * @sample {highcharts} highcharts/chart/alignthresholds/ Set to true
2252
+ *
2253
+ * @since 10.0.0
2254
+ * @product highcharts highstock gantt
2255
+ * @apioption chart.alignThresholds
2256
+ */
2257
+ alignThresholds: false,
2233
2258
  /**
2234
2259
  * Set the overall animation for all chart updating. Animation can be
2235
2260
  * disabled throughout the chart by setting it to false here. It can
@@ -2654,6 +2679,17 @@
2654
2679
  * @since 5.0.0
2655
2680
  */
2656
2681
  colorCount: 10,
2682
+ /**
2683
+ * By default, (because of memory and performance reasons) the chart does
2684
+ * not copy the data but keeps it as a reference. In some cases, this might
2685
+ * result in mutating the original data source. In order to prevent that,
2686
+ * set that property to false. Please note that changing that might decrease
2687
+ * performance, especially with bigger sets of data.
2688
+ *
2689
+ * @type {boolean}
2690
+ * @since 10.1.0
2691
+ */
2692
+ allowMutatingData: true,
2657
2693
  /**
2658
2694
  * Alias of `type`.
2659
2695
  *
@@ -3066,9 +3102,10 @@
3066
3102
  * Y
3067
3103
  * @sample {highstock} stock/chart/zoomtype-xy/
3068
3104
  * Xy
3105
+ * @sample {highmaps} maps/chart/zoomtype-xy/
3106
+ * Map with selection zoom
3069
3107
  *
3070
3108
  * @type {string}
3071
- * @product highcharts highstock gantt
3072
3109
  * @validvalue ["x", "y", "xy"]
3073
3110
  * @apioption chart.zoomType
3074
3111
  */
@@ -3137,7 +3174,7 @@
3137
3174
  *
3138
3175
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
3139
3176
  */
3140
- borderColor: "#335cad" /* highlightColor80 */,
3177
+ borderColor: "#335cad" /* Palette.highlightColor80 */,
3141
3178
  /**
3142
3179
  * The pixel width of the outer chart border.
3143
3180
  *
@@ -3176,7 +3213,7 @@
3176
3213
  *
3177
3214
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
3178
3215
  */
3179
- backgroundColor: "#ffffff" /* backgroundColor */,
3216
+ backgroundColor: "#ffffff" /* Palette.backgroundColor */,
3180
3217
  /**
3181
3218
  * The background color or gradient for the plot area.
3182
3219
  *
@@ -3233,7 +3270,7 @@
3233
3270
  *
3234
3271
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
3235
3272
  */
3236
- plotBorderColor: "#cccccc" /* neutralColor20 */
3273
+ plotBorderColor: "#cccccc" /* Palette.neutralColor20 */
3237
3274
  };
3238
3275
  /* *
3239
3276
  *
@@ -3412,7 +3449,7 @@
3412
3449
  return 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')';
3413
3450
  }
3414
3451
  if (format === 'a') {
3415
- return "" + rgba[3];
3452
+ return "".concat(rgba[3]);
3416
3453
  }
3417
3454
  return 'rgba(' + rgba.join(',') + ')';
3418
3455
  }
@@ -3908,13 +3945,12 @@
3908
3945
  */
3909
3946
  Time.prototype.update = function (options) {
3910
3947
  var useUTC = pick(options && options.useUTC,
3911
- true),
3912
- time = this;
3948
+ true);
3913
3949
  this.options = options = merge(true, this.options || {}, options);
3914
3950
  // Allow using a different Date class
3915
3951
  this.Date = options.Date || win.Date || Date;
3916
3952
  this.useUTC = useUTC;
3917
- this.timezoneOffset = (useUTC && options.timezoneOffset);
3953
+ this.timezoneOffset = (useUTC && options.timezoneOffset) || void 0;
3918
3954
  this.getTimezoneOffset = this.timezoneOffsetFunction();
3919
3955
  /*
3920
3956
  * The time object has options allowing for variable time zones, meaning
@@ -4351,17 +4387,16 @@
4351
4387
  hour: 6,
4352
4388
  day: 3
4353
4389
  };
4354
- var format,
4355
- n,
4356
- lastN = 'millisecond'; // for sub-millisecond data, #4223
4357
- for (n in timeUnits) { // eslint-disable-line guard-for-in
4358
- // If the range is exactly one week and we're looking at a
4359
- // Sunday/Monday, go for the week format
4360
- if (range === timeUnits.week &&
4361
- +this.dateFormat('%w',
4362
- timestamp) === startOfWeek &&
4363
- dateStr.substr(6) === blank.substr(6)) {
4364
- n = 'week';
4390
+ var n = 'millisecond',
4391
+ // for sub-millisecond data, #4223
4392
+ lastN = n;
4393
+ for (n in timeUnits) { // eslint-disable-line guard-for-in
4394
+ // If the range is exactly one week and we're looking at a
4395
+ // Sunday/Monday, go for the week format
4396
+ if (range === timeUnits.week &&
4397
+ +this.dateFormat('%w', timestamp) === startOfWeek &&
4398
+ dateStr.substr(6) === blank.substr(6)) {
4399
+ n = 'week';
4365
4400
  break;
4366
4401
  }
4367
4402
  // The first format that is too great for the range
@@ -4381,10 +4416,7 @@
4381
4416
  lastN = n;
4382
4417
  }
4383
4418
  }
4384
- if (n) {
4385
- format = this.resolveDTLFormat(dateTimeLabelFormats[n]).main;
4386
- }
4387
- return format;
4419
+ return this.resolveDTLFormat(dateTimeLabelFormats[n]).main;
4388
4420
  };
4389
4421
  return Time;
4390
4422
  }());
@@ -5341,7 +5373,7 @@
5341
5373
  /**
5342
5374
  * @ignore-option
5343
5375
  */
5344
- color: "#333333" /* neutralColor80 */
5376
+ color: "#333333" /* Palette.neutralColor80 */
5345
5377
  }
5346
5378
  },
5347
5379
  /**
@@ -5621,7 +5653,7 @@
5621
5653
  *
5622
5654
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
5623
5655
  */
5624
- borderColor: "#999999" /* neutralColor40 */,
5656
+ borderColor: "#999999" /* Palette.neutralColor40 */,
5625
5657
  /**
5626
5658
  * The border corner radius of the legend.
5627
5659
  *
@@ -5715,7 +5747,7 @@
5715
5747
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
5716
5748
  * @since 2.2.4
5717
5749
  */
5718
- activeColor: "#003399" /* highlightColor100 */,
5750
+ activeColor: "#003399" /* Palette.highlightColor100 */,
5719
5751
  /**
5720
5752
  * The color of the inactive up or down arrow in the legend page
5721
5753
  * navigation. .
@@ -5731,7 +5763,7 @@
5731
5763
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
5732
5764
  * @since 2.2.4
5733
5765
  */
5734
- inactiveColor: "#cccccc" /* neutralColor20 */
5766
+ inactiveColor: "#cccccc" /* Palette.neutralColor20 */
5735
5767
  },
5736
5768
  /**
5737
5769
  * The inner padding of the legend box.
@@ -5807,7 +5839,7 @@
5807
5839
  /**
5808
5840
  * @ignore
5809
5841
  */
5810
- color: "#333333" /* neutralColor80 */,
5842
+ color: "#333333" /* Palette.neutralColor80 */,
5811
5843
  /**
5812
5844
  * @ignore
5813
5845
  */
@@ -5845,7 +5877,7 @@
5845
5877
  /**
5846
5878
  * @ignore
5847
5879
  */
5848
- color: "#000000" /* neutralColor100 */
5880
+ color: "#000000" /* Palette.neutralColor100 */
5849
5881
  },
5850
5882
  /**
5851
5883
  * CSS styles for each legend item when the corresponding series or
@@ -5866,7 +5898,7 @@
5866
5898
  /**
5867
5899
  * @ignore
5868
5900
  */
5869
- color: "#cccccc" /* neutralColor20 */
5901
+ color: "#cccccc" /* Palette.neutralColor20 */
5870
5902
  },
5871
5903
  /**
5872
5904
  * Whether to apply a drop shadow to the legend. A `backgroundColor`
@@ -6170,7 +6202,7 @@
6170
6202
  /**
6171
6203
  * @ignore
6172
6204
  */
6173
- backgroundColor: "#ffffff" /* backgroundColor */,
6205
+ backgroundColor: "#ffffff" /* Palette.backgroundColor */,
6174
6206
  /**
6175
6207
  * @ignore
6176
6208
  */
@@ -6376,18 +6408,20 @@
6376
6408
  * @apioption tooltip.pointFormatter
6377
6409
  */
6378
6410
  /**
6379
- * A callback function to place the tooltip in a default position. The
6411
+ * A callback function to place the tooltip in a custom position. The
6380
6412
  * callback receives three parameters: `labelWidth`, `labelHeight` and
6381
6413
  * `point`, where point contains values for `plotX` and `plotY` telling
6382
6414
  * where the reference point is in the plot area. Add `chart.plotLeft`
6383
6415
  * and `chart.plotTop` to get the full coordinates.
6384
6416
  *
6417
+ * To find the actual hovered `Point` instance, use
6418
+ * `this.chart.hoverPoint`. For shared or split tooltips, all the hover
6419
+ * points are available in `this.chart.hoverPoints`.
6420
+ *
6385
6421
  * Since v7, when [tooltip.split](#tooltip.split) option is enabled,
6386
6422
  * positioner is called for each of the boxes separately, including
6387
6423
  * xAxis header. xAxis header is not a point, instead `point` argument
6388
- * contains info:
6389
- * `{ plotX: Number, plotY: Number, isHeader: Boolean }`
6390
- *
6424
+ * contains info: `{ plotX: Number, plotY: Number, isHeader: Boolean }`
6391
6425
  *
6392
6426
  * The return should be an object containing x and y values, for example
6393
6427
  * `{ x: 100, y: 100 }`.
@@ -6730,6 +6764,8 @@
6730
6764
  *
6731
6765
  * @sample {highcharts} highcharts/tooltip/pointformat/
6732
6766
  * A different point format with value suffix
6767
+ * @sample {highcharts|highstock} highcharts/tooltip/pointformat-extra-information/
6768
+ * Show extra information about points in the tooltip
6733
6769
  * @sample {highmaps} maps/tooltip/format/
6734
6770
  * Format demo
6735
6771
  *
@@ -6761,7 +6797,7 @@
6761
6797
  *
6762
6798
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
6763
6799
  */
6764
- backgroundColor: color("#f7f7f7" /* neutralColor3 */)
6800
+ backgroundColor: color("#f7f7f7" /* Palette.neutralColor3 */)
6765
6801
  // @todo: Disallow undefined as input for colors
6766
6802
  .setOpacity(0.85).get(),
6767
6803
  /**
@@ -6824,7 +6860,7 @@
6824
6860
  */
6825
6861
  style: {
6826
6862
  /** @internal */
6827
- color: "#333333" /* neutralColor80 */,
6863
+ color: "#333333" /* Palette.neutralColor80 */,
6828
6864
  /** @internal */
6829
6865
  cursor: 'default',
6830
6866
  /** @internal */
@@ -6939,7 +6975,7 @@
6939
6975
  /** @internal */
6940
6976
  cursor: 'pointer',
6941
6977
  /** @internal */
6942
- color: "#999999" /* neutralColor40 */,
6978
+ color: "#999999" /* Palette.neutralColor40 */,
6943
6979
  /** @internal */
6944
6980
  fontSize: '9px'
6945
6981
  },
@@ -7413,7 +7449,7 @@
7413
7449
  curAnim = options.curAnim;
7414
7450
  var ret,
7415
7451
  done;
7416
- if (elem.attr && !elem.element) { // #2616, element is destroyed
7452
+ if ((elem.attr) && !elem.element) { // #2616, element is destroyed
7417
7453
  ret = false;
7418
7454
  }
7419
7455
  else if (gotoEnd || t >= duration + this.startTime) {
@@ -7841,6 +7877,7 @@
7841
7877
  win = H.win;
7842
7878
  var attr = U.attr,
7843
7879
  createElement = U.createElement,
7880
+ css = U.css,
7844
7881
  error = U.error,
7845
7882
  isFunction = U.isFunction,
7846
7883
  isString = U.isString,
@@ -7925,12 +7962,26 @@
7925
7962
  valid = isString(val) && AST.allowedReferences.some(function (ref) { return val.indexOf(ref) === 0; });
7926
7963
  }
7927
7964
  if (!valid) {
7928
- error("Highcharts warning: Invalid attribute '" + key + "' in config");
7965
+ error(33, false, void 0, {
7966
+ 'Invalid attribute in config': "".concat(key)
7967
+ });
7929
7968
  delete attributes[key];
7930
7969
  }
7931
7970
  });
7932
7971
  return attributes;
7933
7972
  };
7973
+ AST.parseStyle = function (style) {
7974
+ return style
7975
+ .split(';')
7976
+ .reduce(function (styles, line) {
7977
+ var pair = line.split(':').map(function (s) { return s.trim(); }),
7978
+ key = pair.shift();
7979
+ if (key && pair.length) {
7980
+ styles[key.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); })] = pair.join(':'); // #17146
7981
+ }
7982
+ return styles;
7983
+ }, {});
7984
+ };
7934
7985
  /**
7935
7986
  * Utility function to set html content for an element by passing in a
7936
7987
  * markup string. The markup is safely parsed by the AST class to avoid
@@ -7986,12 +8037,15 @@
7986
8037
  var textNode = item.textContent ?
7987
8038
  H.doc.createTextNode(item.textContent) :
7988
8039
  void 0;
8040
+ // Whether to ignore the AST filtering totally, #15345
8041
+ var bypassHTMLFiltering = AST.bypassHTMLFiltering;
7989
8042
  var node;
7990
8043
  if (tagName) {
7991
8044
  if (tagName === '#text') {
7992
8045
  node = textNode;
7993
8046
  }
7994
- else if (AST.allowedTags.indexOf(tagName) !== -1) {
8047
+ else if (AST.allowedTags.indexOf(tagName) !== -1 ||
8048
+ bypassHTMLFiltering) {
7995
8049
  var NS = tagName === 'svg' ?
7996
8050
  SVG_NS :
7997
8051
  (subParent.namespaceURI || SVG_NS);
@@ -8004,11 +8058,17 @@
8004
8058
  if (key !== 'tagName' &&
8005
8059
  key !== 'attributes' &&
8006
8060
  key !== 'children' &&
8061
+ key !== 'style' &&
8007
8062
  key !== 'textContent') {
8008
8063
  attributes_1[key] = val;
8009
8064
  }
8010
8065
  });
8011
- attr(element, AST.filterUserAttributes(attributes_1));
8066
+ attr(element, bypassHTMLFiltering ?
8067
+ attributes_1 :
8068
+ AST.filterUserAttributes(attributes_1));
8069
+ if (item.style) {
8070
+ css(element, item.style);
8071
+ }
8012
8072
  // Add text content
8013
8073
  if (textNode) {
8014
8074
  element.appendChild(textNode);
@@ -8018,8 +8078,9 @@
8018
8078
  node = element;
8019
8079
  }
8020
8080
  else {
8021
- error('Highcharts warning: Invalid tagName ' +
8022
- tagName + ' in config');
8081
+ error(33, false, void 0, {
8082
+ 'Invalid tagName in config': tagName
8083
+ });
8023
8084
  }
8024
8085
  }
8025
8086
  // Add to the tree
@@ -8047,7 +8108,11 @@
8047
8108
  */
8048
8109
  AST.prototype.parseMarkup = function (markup) {
8049
8110
  var nodes = [];
8050
- markup = markup.trim();
8111
+ markup = markup
8112
+ .trim()
8113
+ // The style attribute throws a warning when parsing when CSP is
8114
+ // enabled (#6884), so use an alias and pick it up below
8115
+ .replace(/ style="/g, ' data-style="');
8051
8116
  var doc;
8052
8117
  if (hasValidDOMParser) {
8053
8118
  doc = new DOMParser().parseFromString(trustedTypesPolicy ?
@@ -8074,7 +8139,12 @@
8074
8139
  if (parsedAttributes) {
8075
8140
  var attributes_2 = {};
8076
8141
  [].forEach.call(parsedAttributes, function (attrib) {
8077
- attributes_2[attrib.name] = attrib.value;
8142
+ if (attrib.name === 'data-style') {
8143
+ astNode.style = AST.parseStyle(attrib.value);
8144
+ }
8145
+ else {
8146
+ attributes_2[attrib.name] = attrib.value;
8147
+ }
8078
8148
  });
8079
8149
  astNode.attributes = attributes_2;
8080
8150
  }
@@ -8278,6 +8348,34 @@
8278
8348
  '#text'
8279
8349
  ];
8280
8350
  AST.emptyHTML = emptyHTML;
8351
+ /**
8352
+ * Allow all custom SVG and HTML attributes, references and tags (together
8353
+ * with potentially harmful ones) to be added to the DOM from the chart
8354
+ * configuration. In other words, disable the the allow-listing which is the
8355
+ * primary functionality of the AST.
8356
+ *
8357
+ * WARNING: Setting this property to `true` while allowing untrusted user
8358
+ * data in the chart configuration will expose your application to XSS
8359
+ * security risks!
8360
+ *
8361
+ * Note that in case you want to allow a known set of tags or attributes,
8362
+ * you should allow-list them instead of disabling the filtering totally.
8363
+ * See [allowedAttributes](Highcharts.AST#.allowedAttributes),
8364
+ * [allowedReferences](Highcharts.AST#.allowedReferences) and
8365
+ * [allowedTags](Highcharts.AST#.allowedTags). The `bypassHTMLFiltering`
8366
+ * setting is intended only for those cases where allow-listing is not
8367
+ * practical, and the chart configuration already comes from a secure
8368
+ * source.
8369
+ *
8370
+ * @example
8371
+ * // Allow all custom attributes, references and tags (disable DOM XSS
8372
+ * // filtering)
8373
+ * Highcharts.AST.bypassHTMLFiltering = true;
8374
+ *
8375
+ * @name Highcharts.AST.bypassHTMLFiltering
8376
+ * @static
8377
+ */
8378
+ AST.bypassHTMLFiltering = false;
8281
8379
  return AST;
8282
8380
  }());
8283
8381
  /* *
@@ -9121,7 +9219,7 @@
9121
9219
  }, deferTime);
9122
9220
  }
9123
9221
  else {
9124
- this.attr(params, void 0, complete);
9222
+ this.attr(params, void 0, complete || animOptions.complete);
9125
9223
  // Call the end step synchronously
9126
9224
  objectEach(params, function (val, prop) {
9127
9225
  if (animOptions.step) {
@@ -9519,25 +9617,20 @@
9519
9617
  * Return the SVG element for chaining.
9520
9618
  */
9521
9619
  SVGElement.prototype.css = function (styles) {
9522
- var oldStyles = this.styles, newStyles = {}, elem = this.element,
9523
- // These CSS properties are interpreted internally by the SVG
9524
- // renderer, but are not supported by SVG and should not be added to
9525
- // the DOM. In styled mode, no CSS should find its way to the DOM
9526
- // whatsoever (#6173, #6474).
9527
- svgPseudoProps = ['textOutline', 'textOverflow', 'width'];
9620
+ var oldStyles = this.styles,
9621
+ newStyles = {},
9622
+ elem = this.element;
9528
9623
  var textWidth,
9529
- serializedCss = '',
9530
- hyphenate,
9531
9624
  hasNew = !oldStyles;
9532
9625
  // convert legacy
9533
- if (styles && styles.color) {
9626
+ if (styles.color) {
9534
9627
  styles.fill = styles.color;
9535
9628
  }
9536
9629
  // Filter out existing styles to increase performance (#2640)
9537
9630
  if (oldStyles) {
9538
- objectEach(styles, function (style, n) {
9539
- if (oldStyles && oldStyles[n] !== style) {
9540
- newStyles[n] = style;
9631
+ objectEach(styles, function (value, n) {
9632
+ if (oldStyles && oldStyles[n] !== value) {
9633
+ newStyles[n] = value;
9541
9634
  hasNew = true;
9542
9635
  }
9543
9636
  });
@@ -9548,41 +9641,30 @@
9548
9641
  styles = extend(oldStyles, newStyles);
9549
9642
  }
9550
9643
  // Get the text width from style
9551
- if (styles) {
9552
- // Previously set, unset it (#8234)
9553
- if (styles.width === null || styles.width === 'auto') {
9554
- delete this.textWidth;
9555
- // Apply new
9556
- }
9557
- else if (elem.nodeName.toLowerCase() === 'text' &&
9558
- styles.width) {
9559
- textWidth = this.textWidth = pInt(styles.width);
9560
- }
9644
+ // Previously set, unset it (#8234)
9645
+ if (styles.width === null || styles.width === 'auto') {
9646
+ delete this.textWidth;
9647
+ // Apply new
9648
+ }
9649
+ else if (elem.nodeName.toLowerCase() === 'text' &&
9650
+ styles.width) {
9651
+ textWidth = this.textWidth = pInt(styles.width);
9561
9652
  }
9562
9653
  // store object
9563
9654
  this.styles = styles;
9564
9655
  if (textWidth && (!svg && this.renderer.forExport)) {
9565
9656
  delete styles.width;
9566
9657
  }
9567
- // Serialize and set style attribute
9568
- if (elem.namespaceURI === this.SVG_NS) { // #7633
9569
- hyphenate = function (a, b) {
9570
- return '-' + b.toLowerCase();
9571
- };
9572
- objectEach(styles, function (style, n) {
9573
- if (svgPseudoProps.indexOf(n) === -1) {
9574
- serializedCss +=
9575
- n.replace(/([A-Z])/g, hyphenate) + ':' +
9576
- style + ';';
9577
- }
9578
- });
9579
- if (serializedCss) {
9580
- attr(elem, 'style', serializedCss); // #1881
9581
- }
9582
- }
9583
- else {
9584
- css(elem, styles);
9658
+ var stylesToApply_1 = merge(styles);
9659
+ if (elem.namespaceURI === this.SVG_NS) {
9660
+ // These CSS properties are interpreted internally by the SVG
9661
+ // renderer, but are not supported by SVG and should not be
9662
+ // added to the DOM. In styled mode, no CSS should find its way
9663
+ // to the DOM whatsoever (#6173, #6474).
9664
+ ['textOutline', 'textOverflow', 'width'].forEach(function (key) { return (stylesToApply_1 &&
9665
+ delete stylesToApply_1[key]); });
9585
9666
  }
9667
+ css(elem, stylesToApply_1);
9586
9668
  if (this.added) {
9587
9669
  // Rebuild text after added. Cache mechanisms in the buildText
9588
9670
  // will prevent building if there are no significant changes.
@@ -9590,7 +9672,7 @@
9590
9672
  this.renderer.buildText(this);
9591
9673
  }
9592
9674
  // Apply text outline after added
9593
- if (styles && styles.textOutline) {
9675
+ if (styles.textOutline) {
9594
9676
  this.applyTextOutline(styles.textOutline);
9595
9677
  }
9596
9678
  }
@@ -9801,7 +9883,7 @@
9801
9883
  duration: pick(duration, 150),
9802
9884
  complete: function () {
9803
9885
  // #3088, assuming we're only using this for tooltips
9804
- elemWrapper.attr({ y: -9999 }).hide();
9886
+ elemWrapper.hide();
9805
9887
  }
9806
9888
  });
9807
9889
  };
@@ -9846,8 +9928,9 @@
9846
9928
  */
9847
9929
  SVGElement.prototype.getBBox = function (reload, rot) {
9848
9930
  var wrapper = this,
9849
- renderer = wrapper.renderer,
9931
+ alignValue = wrapper.alignValue,
9850
9932
  element = wrapper.element,
9933
+ renderer = wrapper.renderer,
9851
9934
  styles = wrapper.styles,
9852
9935
  textStr = wrapper.textStr,
9853
9936
  cache = renderer.cache,
@@ -9857,7 +9940,7 @@
9857
9940
  wrapper.rotation, 0),
9858
9941
  fontSize = renderer.styledMode ? (element &&
9859
9942
  SVGElement.prototype.getStyle.call(element, 'font-size')) : (styles && styles.fontSize);
9860
- var bBox, // = wrapper.bBox,
9943
+ var bBox,
9861
9944
  width,
9862
9945
  height,
9863
9946
  toggleTextShadowShim,
@@ -9878,6 +9961,7 @@
9878
9961
  rotation,
9879
9962
  fontSize,
9880
9963
  wrapper.textWidth,
9964
+ alignValue,
9881
9965
  styles && styles.textOverflow,
9882
9966
  styles && styles.fontWeight // #12163
9883
9967
  ].join(',');
@@ -9923,7 +10007,7 @@
9923
10007
  // other condition is for Opera that returns a width of
9924
10008
  // -Infinity on hidden elements.
9925
10009
  if (!bBox || bBox.width < 0) {
9926
- bBox = { width: 0, height: 0 };
10010
+ bBox = { x: 0, y: 0, width: 0, height: 0 };
9927
10011
  }
9928
10012
  // VML Renderer or useHTML within SVG
9929
10013
  }
@@ -9947,16 +10031,40 @@
9947
10031
  bBox.height = height = ({
9948
10032
  '11px,17': 14,
9949
10033
  '13px,20': 16
9950
- }[(fontSize || '') + "," + Math.round(height)] ||
10034
+ }["" + (fontSize || '') + ",".concat(Math.round(height))] ||
9951
10035
  height);
9952
10036
  }
9953
10037
  // Adjust for rotated text
9954
10038
  if (rotation) {
9955
- var rad = rotation * deg2rad;
9956
- bBox.width = Math.abs(height * Math.sin(rad)) +
9957
- Math.abs(width * Math.cos(rad));
9958
- bBox.height = Math.abs(height * Math.cos(rad)) +
9959
- Math.abs(width * Math.sin(rad));
10039
+ var baseline = Number(element.getAttribute('y') || 0) - bBox.y,
10040
+ alignFactor = {
10041
+ 'right': 1,
10042
+ 'center': 0.5
10043
+ }[alignValue || 0] || 0,
10044
+ rad = rotation * deg2rad,
10045
+ rad90 = (rotation - 90) * deg2rad,
10046
+ wCosRad = width * Math.cos(rad),
10047
+ wSinRad = width * Math.sin(rad),
10048
+ cosRad90 = Math.cos(rad90),
10049
+ sinRad90 = Math.sin(rad90),
10050
+ // Find the starting point on the left side baseline of
10051
+ // the text
10052
+ pX = bBox.x + alignFactor * (width - wCosRad),
10053
+ pY = bBox.y + baseline - alignFactor * wSinRad,
10054
+ // Find all corners
10055
+ aX = pX + baseline * cosRad90,
10056
+ bX = aX + wCosRad,
10057
+ cX = bX - height * cosRad90,
10058
+ dX = cX - wCosRad,
10059
+ aY = pY + baseline * sinRad90,
10060
+ bY = aY + wSinRad,
10061
+ cY = bY - height * sinRad90,
10062
+ dY = cY - wSinRad;
10063
+ // Deduct the bounding box from the corners
10064
+ bBox.x = Math.min(aX, bX, cX, dX);
10065
+ bBox.y = Math.min(aY, bY, cY, dY);
10066
+ bBox.width = Math.max(aX, bX, cX, dX) - bBox.x;
10067
+ bBox.height = Math.max(aY, bY, cY, dY) - bBox.y;
9960
10068
  }
9961
10069
  }
9962
10070
  // Cache it. When loading a chart in a hidden iframe in Firefox and
@@ -10015,21 +10123,11 @@
10015
10123
  *
10016
10124
  * @function Highcharts.SVGElement#hide
10017
10125
  *
10018
- * @param {boolean} [hideByTranslation=false]
10019
- * The flag to determine if element should be hidden by moving out
10020
- * of the viewport. Used for example for dataLabels.
10021
- *
10022
10126
  * @return {Highcharts.SVGElement}
10023
10127
  * Returns the SVGElement for chaining.
10024
10128
  */
10025
- SVGElement.prototype.hide = function (hideByTranslation) {
10026
- if (hideByTranslation) {
10027
- this.attr({ y: -9999 });
10028
- }
10029
- else {
10030
- this.attr({ visibility: 'hidden' });
10031
- }
10032
- return this;
10129
+ SVGElement.prototype.hide = function () {
10130
+ return this.attr({ visibility: 'hidden' });
10033
10131
  };
10034
10132
  /**
10035
10133
  * @private
@@ -10143,7 +10241,7 @@
10143
10241
  SVGElement.prototype.removeClass = function (className) {
10144
10242
  return this.attr('class', ('' + this.attr('class'))
10145
10243
  .replace(isString(className) ?
10146
- new RegExp("(^| )" + className + "( |$)") : // #12064, #13590
10244
+ new RegExp("(^| )".concat(className, "( |$)")) : // #12064, #13590
10147
10245
  className, ' ')
10148
10246
  .replace(/ +/g, ' ')
10149
10247
  .trim());
@@ -10368,7 +10466,7 @@
10368
10466
  element = this.element,
10369
10467
  oldShadowOptions = this.oldShadowOptions,
10370
10468
  defaultShadowOptions = {
10371
- color: "#000000" /* neutralColor100 */,
10469
+ color: "#000000" /* Palette.neutralColor100 */,
10372
10470
  offsetX: this.parentInverted ? -1 : 1,
10373
10471
  offsetY: this.parentInverted ? -1 : 1,
10374
10472
  opacity: 0.15,
@@ -10409,14 +10507,14 @@
10409
10507
  else if (!this.shadows) {
10410
10508
  shadowElementOpacity = options.opacity / options.width;
10411
10509
  transform = this.parentInverted ?
10412
- "translate(" + options.offsetY + ", " + options.offsetX + ")" :
10413
- "translate(" + options.offsetX + ", " + options.offsetY + ")";
10510
+ "translate(".concat(options.offsetY, ", ").concat(options.offsetX, ")") :
10511
+ "translate(".concat(options.offsetX, ", ").concat(options.offsetY, ")");
10414
10512
  for (i = 1; i <= options.width; i++) {
10415
10513
  shadow = element.cloneNode(false);
10416
10514
  strokeWidth = (options.width * 2) + 1 - (2 * i);
10417
10515
  attr(shadow, {
10418
10516
  stroke: (shadowOptions.color ||
10419
- "#000000" /* neutralColor100 */),
10517
+ "#000000" /* Palette.neutralColor100 */),
10420
10518
  'stroke-opacity': shadowElementOpacity * i,
10421
10519
  'stroke-width': strokeWidth,
10422
10520
  transform: transform,
@@ -10444,7 +10542,7 @@
10444
10542
  *
10445
10543
  * @function Highcharts.SVGElement#show
10446
10544
  *
10447
- * @param {boolean} [inherit=false]
10545
+ * @param {boolean} [inherit=true]
10448
10546
  * Set the visibility attribute to `inherit` rather than `visible`.
10449
10547
  * The difference is that an element with `visibility="visible"`
10450
10548
  * will be visible even if the parent is hidden.
@@ -10453,6 +10551,7 @@
10453
10551
  * Returns the SVGElement for chaining.
10454
10552
  */
10455
10553
  SVGElement.prototype.show = function (inherit) {
10554
+ if (inherit === void 0) { inherit = true; }
10456
10555
  return this.attr({ visibility: inherit ? 'inherit' : 'visible' });
10457
10556
  };
10458
10557
  /**
@@ -11759,6 +11858,7 @@
11759
11858
  SVG_NS = H.SVG_NS,
11760
11859
  win = H.win;
11761
11860
  var attr = U.attr,
11861
+ extend = U.extend,
11762
11862
  isString = U.isString,
11763
11863
  objectEach = U.objectEach,
11764
11864
  pick = U.pick;
@@ -12034,28 +12134,32 @@
12034
12134
  var _a = node.attributes,
12035
12135
  attributes = _a === void 0 ? {} : _a,
12036
12136
  children = node.children,
12137
+ _b = node.style,
12138
+ style = _b === void 0 ? {} : _b,
12037
12139
  tagName = node.tagName,
12038
12140
  styledMode = _this.renderer.styledMode;
12039
12141
  // Apply styling to text tags
12040
12142
  if (tagName === 'b' || tagName === 'strong') {
12041
12143
  if (styledMode) {
12042
- attributes['class'] = 'highcharts-strong'; // eslint-disable-line dot-notation
12144
+ // eslint-disable-next-line dot-notation
12145
+ attributes['class'] = 'highcharts-strong';
12043
12146
  }
12044
12147
  else {
12045
- attributes.style = ('font-weight:bold;' + (attributes.style || ''));
12148
+ style.fontWeight = 'bold';
12046
12149
  }
12047
12150
  }
12048
12151
  else if (tagName === 'i' || tagName === 'em') {
12049
12152
  if (styledMode) {
12050
- attributes['class'] = 'highcharts-emphasized'; // eslint-disable-line dot-notation
12153
+ // eslint-disable-next-line dot-notation
12154
+ attributes['class'] = 'highcharts-emphasized';
12051
12155
  }
12052
12156
  else {
12053
- attributes.style = ('font-style:italic;' + (attributes.style || ''));
12157
+ style.fontStyle = 'italic';
12054
12158
  }
12055
12159
  }
12056
- // Modify attributes
12057
- if (isString(attributes.style)) {
12058
- attributes.style = attributes.style.replace(/(;| |^)color([ :])/, '$1fill$2');
12160
+ // Modify styling
12161
+ if (style && style.color) {
12162
+ style.fill = style.color;
12059
12163
  }
12060
12164
  // Handle breaks
12061
12165
  if (tagName === 'br') {
@@ -12080,7 +12184,7 @@
12080
12184
  if (tagName !== '#text' && tagName !== 'a') {
12081
12185
  node.tagName = 'tspan';
12082
12186
  }
12083
- node.attributes = attributes;
12187
+ extend(node, { attributes: attributes, style: style });
12084
12188
  // Recurse
12085
12189
  if (children) {
12086
12190
  children
@@ -12420,7 +12524,7 @@
12420
12524
  this.url = this.getReferenceURL();
12421
12525
  // Add description
12422
12526
  var desc = this.createElement('desc').add();
12423
- desc.element.appendChild(doc.createTextNode('Created with Highcharts 9.3.3'));
12527
+ desc.element.appendChild(doc.createTextNode('Created with Highcharts 10.2.0'));
12424
12528
  renderer.defs = this.createElement('defs').add();
12425
12529
  renderer.allowHTML = allowHTML;
12426
12530
  renderer.forExport = forExport;
@@ -12533,7 +12637,7 @@
12533
12637
  id: 'hitme',
12534
12638
  width: 8,
12535
12639
  height: 8,
12536
- 'clip-path': "url(#" + id + ")",
12640
+ 'clip-path': "url(#".concat(id, ")"),
12537
12641
  fill: 'rgba(0,0,0,0.001)'
12538
12642
  }
12539
12643
  }]
@@ -12686,27 +12790,31 @@
12686
12790
  new TextBuilder(wrapper).buildSVG();
12687
12791
  };
12688
12792
  /**
12689
- * Returns white for dark colors and black for bright colors.
12793
+ * Returns white for dark colors and black for bright colors, based on W3C's
12794
+ * definition of [Relative luminance](
12795
+ * https://www.w3.org/WAI/GL/wiki/Relative_luminance).
12690
12796
  *
12691
12797
  * @function Highcharts.SVGRenderer#getContrast
12692
12798
  *
12693
- * @param {Highcharts.ColorString} rgba
12799
+ * @param {Highcharts.ColorString} color
12694
12800
  * The color to get the contrast for.
12695
12801
  *
12696
12802
  * @return {Highcharts.ColorString}
12697
12803
  * The contrast color, either `#000000` or `#FFFFFF`.
12698
12804
  */
12699
- SVGRenderer.prototype.getContrast = function (rgba) {
12700
- rgba = Color.parse(rgba).rgba;
12701
- // The threshold may be discussed. Here's a proposal for adding
12702
- // different weight to the color channels (#6216)
12703
- rgba[0] *= 1; // red
12704
- rgba[1] *= 1.2; // green
12705
- rgba[2] *= 0.5; // blue
12706
- return rgba[0] + rgba[1] + rgba[2] >
12707
- 1.8 * 255 ?
12708
- '#000000' :
12709
- '#FFFFFF';
12805
+ SVGRenderer.prototype.getContrast = function (color) {
12806
+ // #6216, #17273
12807
+ var rgba = Color.parse(color).rgba
12808
+ .map(function (b8) {
12809
+ var c = b8 / 255;
12810
+ return c <= 0.03928 ?
12811
+ c / 12.92 :
12812
+ Math.pow((c + 0.055) / 1.055, 2.4);
12813
+ });
12814
+ // Relative luminance
12815
+ var l = 0.2126 * rgba[0] + 0.7152 * rgba[1] + 0.0722 * rgba[2];
12816
+ // Use white or black based on which provides more contrast
12817
+ return 1.05 / (l + 0.05) > (l + 0.05) / 0.05 ? '#FFFFFF' : '#000000';
12710
12818
  };
12711
12819
  /**
12712
12820
  * Create a button with preset states.
@@ -12731,7 +12839,7 @@
12731
12839
  * @param {Highcharts.SVGAttributes} [hoverState]
12732
12840
  * SVG attributes for the hover state.
12733
12841
  *
12734
- * @param {Highcharts.SVGAttributes} [pressedState]
12842
+ * @param {Highcharts.SVGAttributes} [selectState]
12735
12843
  * SVG attributes for the pressed state.
12736
12844
  *
12737
12845
  * @param {Highcharts.SVGAttributes} [disabledState]
@@ -12746,7 +12854,8 @@
12746
12854
  * @return {Highcharts.SVGElement}
12747
12855
  * The button element.
12748
12856
  */
12749
- SVGRenderer.prototype.button = function (text, x, y, callback, theme, hoverState, pressedState, disabledState, shape, useHTML) {
12857
+ SVGRenderer.prototype.button = function (text, x, y, callback, theme, hoverState, selectState, disabledState, shape, useHTML) {
12858
+ if (theme === void 0) { theme = {}; }
12750
12859
  var label = this.label(text,
12751
12860
  x,
12752
12861
  y,
@@ -12755,59 +12864,57 @@
12755
12864
  void 0,
12756
12865
  useHTML,
12757
12866
  void 0, 'button'),
12758
- styledMode = this.styledMode;
12759
- var curState = 0,
12760
- // Make a copy of normalState (#13798)
12761
- // (reference to options.rangeSelector.buttonTheme)
12762
- normalState = theme ? merge(theme) : {};
12763
- var userNormalStyle = normalState && normalState.style || {};
12764
- // Remove stylable attributes
12765
- normalState = AST.filterUserAttributes(normalState);
12867
+ styledMode = this.styledMode,
12868
+ states = theme.states || {};
12869
+ var curState = 0;
12870
+ theme = merge(theme);
12871
+ delete theme.states;
12872
+ var normalStyle = merge({
12873
+ color: "#333333" /* Palette.neutralColor80 */,
12874
+ cursor: 'pointer',
12875
+ fontWeight: 'normal'
12876
+ },
12877
+ theme.style);
12878
+ delete theme.style;
12879
+ // Remove stylable attributes. Pass in the ButtonThemeObject and get the
12880
+ // SVGAttributes subset back.
12881
+ var normalState = AST.filterUserAttributes(theme);
12766
12882
  // Default, non-stylable attributes
12767
12883
  label.attr(merge({ padding: 8, r: 2 }, normalState));
12768
- // Presentational
12769
- var normalStyle,
12770
- hoverStyle,
12771
- pressedStyle,
12884
+ // Presentational. The string type is a mistake, it is just for
12885
+ // compliance with SVGAttribute and is not used in button theme.
12886
+ var hoverStyle,
12887
+ selectStyle,
12772
12888
  disabledStyle;
12773
12889
  if (!styledMode) {
12774
12890
  // Normal state - prepare the attributes
12775
12891
  normalState = merge({
12776
- fill: "#f7f7f7" /* neutralColor3 */,
12777
- stroke: "#cccccc" /* neutralColor20 */,
12778
- 'stroke-width': 1,
12779
- style: {
12780
- color: "#333333" /* neutralColor80 */,
12781
- cursor: 'pointer',
12782
- fontWeight: 'normal'
12783
- }
12784
- }, {
12785
- style: userNormalStyle
12892
+ fill: "#f7f7f7" /* Palette.neutralColor3 */,
12893
+ stroke: "#cccccc" /* Palette.neutralColor20 */,
12894
+ 'stroke-width': 1
12786
12895
  }, normalState);
12787
- normalStyle = normalState.style;
12788
- delete normalState.style;
12789
12896
  // Hover state
12790
12897
  hoverState = merge(normalState, {
12791
- fill: "#e6e6e6" /* neutralColor10 */
12792
- }, AST.filterUserAttributes(hoverState || {}));
12898
+ fill: "#e6e6e6" /* Palette.neutralColor10 */
12899
+ }, AST.filterUserAttributes(hoverState || states.hover || {}));
12793
12900
  hoverStyle = hoverState.style;
12794
12901
  delete hoverState.style;
12795
12902
  // Pressed state
12796
- pressedState = merge(normalState, {
12797
- fill: "#e6ebf5" /* highlightColor10 */,
12903
+ selectState = merge(normalState, {
12904
+ fill: "#e6ebf5" /* Palette.highlightColor10 */,
12798
12905
  style: {
12799
- color: "#000000" /* neutralColor100 */,
12906
+ color: "#000000" /* Palette.neutralColor100 */,
12800
12907
  fontWeight: 'bold'
12801
12908
  }
12802
- }, AST.filterUserAttributes(pressedState || {}));
12803
- pressedStyle = pressedState.style;
12804
- delete pressedState.style;
12909
+ }, AST.filterUserAttributes(selectState || states.select || {}));
12910
+ selectStyle = selectState.style;
12911
+ delete selectState.style;
12805
12912
  // Disabled state
12806
12913
  disabledState = merge(normalState, {
12807
12914
  style: {
12808
- color: "#cccccc" /* neutralColor20 */
12915
+ color: "#cccccc" /* Palette.neutralColor20 */
12809
12916
  }
12810
- }, AST.filterUserAttributes(disabledState || {}));
12917
+ }, AST.filterUserAttributes(disabledState || states.disabled || {}));
12811
12918
  disabledStyle = disabledState.style;
12812
12919
  delete disabledState.style;
12813
12920
  }
@@ -12838,15 +12945,18 @@
12838
12945
  .attr([
12839
12946
  normalState,
12840
12947
  hoverState,
12841
- pressedState,
12948
+ selectState,
12842
12949
  disabledState
12843
- ][state || 0])
12844
- .css([
12845
- normalStyle,
12846
- hoverStyle,
12847
- pressedStyle,
12848
- disabledStyle
12849
12950
  ][state || 0]);
12951
+ var css_1 = [
12952
+ normalStyle,
12953
+ hoverStyle,
12954
+ selectStyle,
12955
+ disabledStyle
12956
+ ][state || 0];
12957
+ if (isObject(css_1)) {
12958
+ label.css(css_1);
12959
+ }
12850
12960
  }
12851
12961
  };
12852
12962
  // Presentational attributes
@@ -13548,7 +13658,7 @@
13548
13658
  */
13549
13659
  SVGRenderer.prototype.fontMetrics = function (fontSize, elem) {
13550
13660
  if ((this.styledMode || !/px/.test(fontSize)) &&
13551
- win.getComputedStyle // old IE doesn't support it
13661
+ (win.getComputedStyle) // old IE doesn't support it
13552
13662
  ) {
13553
13663
  fontSize = elem && SVGElement.prototype.getStyle.call(elem, 'font-size');
13554
13664
  }
@@ -15692,7 +15802,7 @@
15692
15802
  */
15693
15803
  style: {
15694
15804
  /** @internal */
15695
- color: "#666666" /* neutralColor60 */,
15805
+ color: "#666666" /* Palette.neutralColor60 */,
15696
15806
  /** @internal */
15697
15807
  cursor: 'default',
15698
15808
  /** @internal */
@@ -16527,7 +16637,7 @@
16527
16637
  */
16528
16638
  style: {
16529
16639
  /** @internal */
16530
- color: "#666666" /* neutralColor60 */
16640
+ color: "#666666" /* Palette.neutralColor60 */
16531
16641
  }
16532
16642
  },
16533
16643
  /**
@@ -16644,7 +16754,7 @@
16644
16754
  * @type {Highcharts.ColorType}
16645
16755
  * @default #f2f2f2
16646
16756
  */
16647
- minorGridLineColor: "#f2f2f2" /* neutralColor5 */,
16757
+ minorGridLineColor: "#f2f2f2" /* Palette.neutralColor5 */,
16648
16758
  /**
16649
16759
  * Width of the minor, secondary grid lines.
16650
16760
  *
@@ -16670,7 +16780,7 @@
16670
16780
  * @type {Highcharts.ColorType}
16671
16781
  * @default #999999
16672
16782
  */
16673
- minorTickColor: "#999999" /* neutralColor40 */,
16783
+ minorTickColor: "#999999" /* Palette.neutralColor40 */,
16674
16784
  /**
16675
16785
  * The color of the line marking the axis itself.
16676
16786
  *
@@ -16691,7 +16801,7 @@
16691
16801
  * @type {Highcharts.ColorType}
16692
16802
  * @default #ccd6eb
16693
16803
  */
16694
- lineColor: "#ccd6eb" /* highlightColor20 */,
16804
+ lineColor: "#ccd6eb" /* Palette.highlightColor20 */,
16695
16805
  /**
16696
16806
  * The width of the line marking the axis itself.
16697
16807
  *
@@ -16728,7 +16838,7 @@
16728
16838
  * @type {Highcharts.ColorType}
16729
16839
  * @default #e6e6e6
16730
16840
  */
16731
- gridLineColor: "#e6e6e6" /* neutralColor10 */,
16841
+ gridLineColor: "#e6e6e6" /* Palette.neutralColor10 */,
16732
16842
  /**
16733
16843
  * The width of the grid lines extending the ticks across the plot area.
16734
16844
  * Defaults to 1 on the Y axis and 0 on the X axis, except for 3d
@@ -16786,7 +16896,7 @@
16786
16896
  * @type {Highcharts.ColorType}
16787
16897
  * @default #ccd6eb
16788
16898
  */
16789
- tickColor: "#ccd6eb" /* highlightColor20 */
16899
+ tickColor: "#ccd6eb" /* Palette.highlightColor20 */
16790
16900
  // tickWidth: 1
16791
16901
  };
16792
16902
  /**
@@ -17576,7 +17686,7 @@
17576
17686
  */
17577
17687
  style: {
17578
17688
  /** @internal */
17579
- color: "#000000" /* neutralColor100 */,
17689
+ color: "#000000" /* Palette.neutralColor100 */,
17580
17690
  /** @internal */
17581
17691
  fontSize: '11px',
17582
17692
  /** @internal */
@@ -17866,7 +17976,8 @@
17866
17976
  dateTimeLabelFormat = dateTimeLabelFormats.main;
17867
17977
  }
17868
17978
  else if (isNumber(value)) { // #1441
17869
- dateTimeLabelFormat = axis.dateTime.getXDateFormat(value, (options.dateTimeLabelFormats || {}));
17979
+ dateTimeLabelFormat = axis.dateTime.getXDateFormat(value, options.dateTimeLabelFormats ||
17980
+ {});
17870
17981
  }
17871
17982
  }
17872
17983
  // set properties for access in render method
@@ -18034,8 +18145,8 @@
18034
18145
  pos = {
18035
18146
  x: horiz ?
18036
18147
  correctFloat(axis.translate(tickPos + tickmarkOffset,
18037
- null,
18038
- null,
18148
+ void 0,
18149
+ void 0,
18039
18150
  old) +
18040
18151
  axis.transB) :
18041
18152
  (axis.left +
@@ -18053,8 +18164,8 @@
18053
18164
  (axis.opposite ? axis.height : 0)) :
18054
18165
  correctFloat(cHeight -
18055
18166
  axis.translate(tickPos + tickmarkOffset,
18056
- null,
18057
- null,
18167
+ void 0,
18168
+ void 0,
18058
18169
  old) -
18059
18170
  axis.transB)
18060
18171
  };
@@ -18082,20 +18193,23 @@
18082
18193
  -axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :
18083
18194
  0),
18084
18195
  pos = {};
18085
- var yOffset = labelOptions.y,
18196
+ var yOffset,
18086
18197
  line;
18087
- if (!defined(yOffset)) {
18088
- if (axis.side === 0) {
18089
- yOffset = label.rotation ? -8 : -label.getBBox().height;
18090
- }
18091
- else if (axis.side === 2) {
18092
- yOffset = rotCorr.y + 8;
18093
- }
18094
- else {
18095
- // #3140, #3140
18096
- yOffset = Math.cos(label.rotation * deg2rad) *
18097
- (rotCorr.y - label.getBBox(false, 0).height / 2);
18098
- }
18198
+ if (axis.side === 0) {
18199
+ yOffset = label.rotation ? -8 : -label.getBBox().height;
18200
+ }
18201
+ else if (axis.side === 2) {
18202
+ yOffset = rotCorr.y + 8;
18203
+ }
18204
+ else {
18205
+ // #3140, #3140
18206
+ yOffset = Math.cos(label.rotation * deg2rad) *
18207
+ (rotCorr.y - label.getBBox(false, 0).height / 2);
18208
+ }
18209
+ if (defined(labelOptions.y)) {
18210
+ yOffset = axis.side === 0 && axis.horiz ?
18211
+ labelOptions.y + yOffset :
18212
+ labelOptions.y;
18099
18213
  }
18100
18214
  x = x +
18101
18215
  labelOptions.x +
@@ -18486,11 +18600,11 @@
18486
18600
  // Set the new position, and show or hide
18487
18601
  if (show && isNumber(xy.y)) {
18488
18602
  xy.opacity = opacity;
18489
- label[tick.isNewLabel ? 'attr' : 'animate'](xy);
18603
+ label[tick.isNewLabel ? 'attr' : 'animate'](xy).show(true);
18490
18604
  tick.isNewLabel = false;
18491
18605
  }
18492
18606
  else {
18493
- label.attr('y', -9999); // #1338
18607
+ label.hide(); // #1338, #15863
18494
18608
  tick.isNewLabel = true;
18495
18609
  }
18496
18610
  }
@@ -18590,7 +18704,6 @@
18590
18704
  error = U.error,
18591
18705
  extend = U.extend,
18592
18706
  fireEvent = U.fireEvent,
18593
- getMagnitude = U.getMagnitude,
18594
18707
  isArray = U.isArray,
18595
18708
  isNumber = U.isNumber,
18596
18709
  isString = U.isString,
@@ -18602,6 +18715,16 @@
18602
18715
  removeEvent = U.removeEvent,
18603
18716
  splat = U.splat,
18604
18717
  syncTimeout = U.syncTimeout;
18718
+ var getNormalizedTickInterval = function (axis,
18719
+ tickInterval) { return normalizeTickInterval(tickInterval,
18720
+ void 0,
18721
+ void 0,
18722
+ pick(axis.options.allowDecimals,
18723
+ // If the tick interval is greather than 0.5, avoid decimals, as
18724
+ // linear axes are often used to render discrete values (#3363). If
18725
+ // a tick amount is set, allow decimals by default, as it increases
18726
+ // the chances for a good fit.
18727
+ tickInterval < 0.5 || axis.tickAmount !== void 0), !!axis.tickAmount); };
18605
18728
  /* *
18606
18729
  *
18607
18730
  * Class
@@ -18648,7 +18771,6 @@
18648
18771
  function Axis(chart, userOptions) {
18649
18772
  this.alternateBands = void 0;
18650
18773
  this.bottom = void 0;
18651
- this.categories = void 0;
18652
18774
  this.chart = void 0;
18653
18775
  this.closestPointRange = void 0;
18654
18776
  this.coll = void 0;
@@ -18812,7 +18934,7 @@
18812
18934
  * @type {Array<string>}
18813
18935
  * @readonly
18814
18936
  */
18815
- axis.categories = options.categories || axis.hasNames;
18937
+ axis.categories = options.categories || (axis.hasNames ? [] : void 0);
18816
18938
  if (!axis.names) { // Preserve on update (#3830)
18817
18939
  axis.names = [];
18818
18940
  axis.names.keys = {};
@@ -18968,7 +19090,7 @@
18968
19090
  multi,
18969
19091
  ret;
18970
19092
  if (categories) {
18971
- ret = "" + this.value;
19093
+ ret = "".concat(this.value);
18972
19094
  }
18973
19095
  else if (dateTimeLabelFormat) { // datetime axis
18974
19096
  ret = time.dateFormat(dateTimeLabelFormat, value);
@@ -19044,7 +19166,6 @@
19044
19166
  if (axis.isXAxis) {
19045
19167
  xData = series.xData;
19046
19168
  if (xData.length) {
19047
- var isPositive = function (number) { return number > 0; };
19048
19169
  xData = axis.logarithmic ?
19049
19170
  xData.filter(axis.validatePositiveValue) :
19050
19171
  xData;
@@ -19113,8 +19234,11 @@
19113
19234
  */
19114
19235
  Axis.prototype.translate = function (val, backwards, cvsCoord, old, handleLog, pointPlacement) {
19115
19236
  var axis = (this.linkedParent || this), // #1417
19116
- localMin = old && axis.old ? axis.old.min : axis.min,
19117
- minPixelPadding = axis.minPixelPadding,
19237
+ localMin = (old && axis.old ? axis.old.min : axis.min);
19238
+ if (!isNumber(localMin)) {
19239
+ return NaN;
19240
+ }
19241
+ var minPixelPadding = axis.minPixelPadding,
19118
19242
  doPostTranslate = (axis.isOrdinal ||
19119
19243
  axis.brokenAxis && axis.brokenAxis.hasBreaks ||
19120
19244
  (axis.logarithmic && handleLog)) && axis.lin2val;
@@ -19151,14 +19275,11 @@
19151
19275
  if (doPostTranslate) { // log, ordinal and broken axis
19152
19276
  val = axis.val2lin(val);
19153
19277
  }
19154
- returnValue = isNumber(localMin) ?
19155
- (sign * (val - localMin) * localA +
19156
- cvsOffset +
19157
- (sign * minPixelPadding) +
19158
- (isNumber(pointPlacement) ?
19159
- localA * pointPlacement :
19160
- 0)) :
19161
- void 0;
19278
+ var value = sign * (val - localMin) * localA;
19279
+ returnValue = (!axis.isRadial ? correctFloat(value) : value) +
19280
+ cvsOffset +
19281
+ (sign * minPixelPadding) +
19282
+ (isNumber(pointPlacement) ? localA * pointPlacement : 0);
19162
19283
  }
19163
19284
  return returnValue;
19164
19285
  };
@@ -19178,7 +19299,7 @@
19178
19299
  * Pixel position of the value on the chart or axis.
19179
19300
  */
19180
19301
  Axis.prototype.toPixels = function (value, paneCoordinates) {
19181
- return this.translate(value, false, !this.horiz, null, true) +
19302
+ return this.translate(value, false, !this.horiz, void 0, true) +
19182
19303
  (paneCoordinates ? 0 : this.pos);
19183
19304
  };
19184
19305
  /**
@@ -19198,7 +19319,7 @@
19198
19319
  * The axis value.
19199
19320
  */
19200
19321
  Axis.prototype.toValue = function (pixel, paneCoordinates) {
19201
- return this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, null, true);
19322
+ return this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, void 0, true);
19202
19323
  };
19203
19324
  /**
19204
19325
  * Create the path for a plot line that goes from the given value on
@@ -19257,7 +19378,7 @@
19257
19378
  translatedValue: translatedValue
19258
19379
  };
19259
19380
  fireEvent(this, 'getPlotLinePath', evt, function (e) {
19260
- translatedValue = pick(translatedValue, axis.translate(value, null, null, old));
19381
+ translatedValue = pick(translatedValue, axis.translate(value, void 0, void 0, old));
19261
19382
  // Keep the translated value within sane bounds, and avoid Infinity
19262
19383
  // to fail the isNumber test (#7709).
19263
19384
  translatedValue = clamp(translatedValue, -1e5, 1e5);
@@ -19546,20 +19667,20 @@
19546
19667
  * The X value that the point is given.
19547
19668
  */
19548
19669
  Axis.prototype.nameToX = function (point) {
19549
- var explicitCategories = isArray(this.categories),
19670
+ var explicitCategories = isArray(this.options.categories),
19550
19671
  names = explicitCategories ? this.categories : this.names;
19551
19672
  var nameX = point.options.x,
19552
19673
  x;
19553
19674
  point.series.requireSorting = false;
19554
19675
  if (!defined(nameX)) {
19555
- nameX = this.options.uniqueNames ?
19676
+ nameX = this.options.uniqueNames && names ?
19556
19677
  (explicitCategories ?
19557
19678
  names.indexOf(point.name) :
19558
19679
  pick(names.keys[point.name], -1)) :
19559
19680
  point.series.autoIncrement();
19560
19681
  }
19561
19682
  if (nameX === -1) { // Not found in currenct categories
19562
- if (!explicitCategories) {
19683
+ if (!explicitCategories && names) {
19563
19684
  x = names.length;
19564
19685
  }
19565
19686
  }
@@ -19954,15 +20075,9 @@
19954
20075
  if (!tickIntervalOption && axis.tickInterval < minTickInterval) {
19955
20076
  axis.tickInterval = minTickInterval;
19956
20077
  }
19957
- // for linear axes, get magnitude and normalize the interval
20078
+ // For linear axes, normalize the interval
19958
20079
  if (!axis.dateTime && !axis.logarithmic && !tickIntervalOption) {
19959
- axis.tickInterval = normalizeTickInterval(axis.tickInterval, void 0, getMagnitude(axis.tickInterval), pick(options.allowDecimals,
19960
- // If the tick interval is greather than 0.5, avoid
19961
- // decimals, as linear axes are often used to render
19962
- // discrete values. #3363. If a tick amount is set, allow
19963
- // decimals by default, as it increases the chances for a
19964
- // good fit.
19965
- axis.tickInterval < 0.5 || this.tickAmount !== void 0), !!this.tickAmount);
20080
+ axis.tickInterval = getNormalizedTickInterval(axis, axis.tickInterval);
19966
20081
  }
19967
20082
  // Prevent ticks from getting so close that we can't draw the labels
19968
20083
  if (!this.tickAmount) {
@@ -20047,7 +20162,21 @@
20047
20162
  tickPositions = axis.logarithmic.getLogTickPositions(this.tickInterval, this.min, this.max);
20048
20163
  }
20049
20164
  else {
20050
- tickPositions = this.getLinearTickPositions(this.tickInterval, this.min, this.max);
20165
+ var startingTickInterval = this.tickInterval;
20166
+ var adjustedTickInterval = startingTickInterval;
20167
+ while (adjustedTickInterval <= startingTickInterval * 2) {
20168
+ tickPositions = this.getLinearTickPositions(this.tickInterval, this.min, this.max);
20169
+ // If there are more tick positions than the set tickAmount,
20170
+ // increase the tickInterval and continue until it fits.
20171
+ // (#17100)
20172
+ if (this.tickAmount &&
20173
+ tickPositions.length > this.tickAmount) {
20174
+ this.tickInterval = getNormalizedTickInterval(this, adjustedTickInterval *= 1.1);
20175
+ }
20176
+ else {
20177
+ break;
20178
+ }
20179
+ }
20051
20180
  }
20052
20181
  // Too dense ticks, keep only the first and last (#4477)
20053
20182
  if (tickPositions.length > this.len) {
@@ -20146,39 +20275,92 @@
20146
20275
  */
20147
20276
  Axis.prototype.alignToOthers = function () {
20148
20277
  var axis = this,
20149
- others = // Whether there is another axis to pair with this one
20150
- {},
20151
- options = axis.options;
20278
+ alignedAxes = [this],
20279
+ options = axis.options,
20280
+ alignThresholds = (this.coll === 'yAxis' &&
20281
+ this.chart.options.chart.alignThresholds),
20282
+ thresholdAlignments = [];
20152
20283
  var hasOther;
20153
- if (
20154
- // Only if alignTicks is true
20155
- this.chart.options.chart.alignTicks !== false &&
20156
- options.alignTicks &&
20284
+ axis.thresholdAlignment = void 0;
20285
+ if ((
20286
+ // Only if alignTicks or alignThresholds is true
20287
+ (this.chart.options.chart.alignTicks !== false &&
20288
+ options.alignTicks) || (alignThresholds)) &&
20157
20289
  // Disabled when startOnTick or endOnTick are false (#7604)
20158
20290
  options.startOnTick !== false &&
20159
20291
  options.endOnTick !== false &&
20160
20292
  // Don't try to align ticks on a log axis, they are not evenly
20161
20293
  // spaced (#6021)
20162
20294
  !axis.logarithmic) {
20163
- this.chart[this.coll].forEach(function (axis) {
20164
- var otherOptions = axis.options, horiz = axis.horiz, key = [
20165
- horiz ? otherOptions.left : otherOptions.top,
20166
- otherOptions.width,
20167
- otherOptions.height,
20168
- otherOptions.pane
20169
- ].join(',');
20170
- if (axis.series.length) { // #4442
20171
- if (others[key]) {
20172
- hasOther = true; // #4201
20173
- }
20174
- else {
20175
- others[key] = 1;
20176
- }
20295
+ // Get a key identifying which pane the axis belongs to
20296
+ var getKey_1 = function (axis) {
20297
+ var horiz = axis.horiz,
20298
+ options = axis.options;
20299
+ return [
20300
+ horiz ? options.left : options.top,
20301
+ options.width,
20302
+ options.height,
20303
+ options.pane
20304
+ ].join(',');
20305
+ };
20306
+ var thisKey_1 = getKey_1(this);
20307
+ this.chart[this.coll].forEach(function (otherAxis) {
20308
+ var series = otherAxis.series;
20309
+ if (
20310
+ // #4442
20311
+ series.length &&
20312
+ series.some(function (s) { return s.visible; }) &&
20313
+ otherAxis !== axis &&
20314
+ getKey_1(otherAxis) === thisKey_1) {
20315
+ hasOther = true; // #4201
20316
+ alignedAxes.push(otherAxis);
20177
20317
  }
20178
20318
  });
20179
20319
  }
20320
+ if (hasOther && alignThresholds) {
20321
+ // Handle alignThresholds. The `thresholdAlignments` array keeps
20322
+ // records of where each axis in the group wants its threshold, from
20323
+ // 0 which is on `axis.min`, to 1 which is on `axis.max`.
20324
+ alignedAxes.forEach(function (otherAxis) {
20325
+ var threshAlign = otherAxis.getThresholdAlignment(axis);
20326
+ if (isNumber(threshAlign)) {
20327
+ thresholdAlignments.push(threshAlign);
20328
+ }
20329
+ });
20330
+ // For each of the axes in the group, record the average
20331
+ // `thresholdAlignment`.
20332
+ var thresholdAlignment_1 = thresholdAlignments.length > 1 ?
20333
+ thresholdAlignments.reduce(function (sum,
20334
+ n) { return (sum += n); }, 0) / thresholdAlignments.length :
20335
+ void 0;
20336
+ alignedAxes.forEach(function (axis) {
20337
+ axis.thresholdAlignment = thresholdAlignment_1;
20338
+ });
20339
+ }
20180
20340
  return hasOther;
20181
20341
  };
20342
+ /**
20343
+ * Where the axis wants its threshold, from 0 which is on `axis.min`, to 1 which
20344
+ * is on `axis.max`.
20345
+ *
20346
+ * @private
20347
+ * @function Highcharts.Axis#getThresholdAlignment
20348
+ */
20349
+ Axis.prototype.getThresholdAlignment = function (callerAxis) {
20350
+ if (!isNumber(this.dataMin) ||
20351
+ (this !== callerAxis &&
20352
+ this.series.some(function (s) { return (s.isDirty || s.isDirtyData); }))) {
20353
+ this.getSeriesExtremes();
20354
+ }
20355
+ if (isNumber(this.threshold)) {
20356
+ var thresholdAlignment = clamp(((this.threshold - (this.dataMin || 0)) /
20357
+ ((this.dataMax || 0) - (this.dataMin || 0))), 0, 1);
20358
+ if (this.options.reversed) {
20359
+ thresholdAlignment = 1 - thresholdAlignment;
20360
+ }
20361
+ return thresholdAlignment;
20362
+ }
20363
+ };
20182
20364
  /**
20183
20365
  * Find the max ticks of either the x and y axis collection, and record it
20184
20366
  * in `this.tickAmount`.
@@ -20223,47 +20405,101 @@
20223
20405
  */
20224
20406
  Axis.prototype.adjustTickAmount = function () {
20225
20407
  var axis = this,
20226
- axisOptions = axis.options,
20227
- tickInterval = axis.tickInterval,
20408
+ finalTickAmt = axis.finalTickAmt,
20409
+ max = axis.max,
20410
+ min = axis.min,
20411
+ options = axis.options,
20228
20412
  tickPositions = axis.tickPositions,
20229
20413
  tickAmount = axis.tickAmount,
20230
- finalTickAmt = axis.finalTickAmt,
20414
+ thresholdAlignment = axis.thresholdAlignment,
20231
20415
  currentTickAmount = tickPositions && tickPositions.length,
20232
20416
  threshold = pick(axis.threshold,
20233
20417
  axis.softThreshold ? 0 : null);
20234
20418
  var len,
20235
- i;
20236
- if (axis.hasData() &&
20237
- isNumber(axis.min) &&
20238
- isNumber(axis.max)) { // #14769
20239
- if (currentTickAmount < tickAmount) {
20419
+ i,
20420
+ tickInterval = axis.tickInterval,
20421
+ thresholdTickIndex;
20422
+ var
20423
+ // Extend the tickPositions by appending a position
20424
+ append = function () { return tickPositions.push(correctFloat(tickPositions[tickPositions.length - 1] +
20425
+ tickInterval)); },
20426
+ // Extend the tickPositions by prepending a position
20427
+ prepend = function () { return tickPositions.unshift(correctFloat(tickPositions[0] - tickInterval)); };
20428
+ // If `thresholdAlignment` is a number, it means the `alignThresholds`
20429
+ // option is true. The `thresholdAlignment` is a scalar value between 0
20430
+ // and 1 for where the threshold should be relative to `axis.min` and
20431
+ // `axis.max`. Now that we know the tick amount, convert this to the
20432
+ // tick index. Unless `thresholdAlignment` is exactly 0 or 1, avoid the
20433
+ // first or last tick because that would lead to series being clipped.
20434
+ if (isNumber(thresholdAlignment)) {
20435
+ thresholdTickIndex = thresholdAlignment < 0.5 ?
20436
+ Math.ceil(thresholdAlignment * (tickAmount - 1)) :
20437
+ Math.floor(thresholdAlignment * (tickAmount - 1));
20438
+ if (options.reversed) {
20439
+ thresholdTickIndex = tickAmount - 1 - thresholdTickIndex;
20440
+ }
20441
+ }
20442
+ if (axis.hasData() && isNumber(min) && isNumber(max)) { // #14769
20443
+ // Adjust extremes and translation to the modified tick positions
20444
+ var adjustExtremes = function () {
20445
+ axis.transA *= (currentTickAmount - 1) / (tickAmount - 1);
20446
+ // Do not crop when ticks are not extremes (#9841)
20447
+ axis.min = options.startOnTick ?
20448
+ tickPositions[0] :
20449
+ Math.min(min, tickPositions[0]);
20450
+ axis.max = options.endOnTick ?
20451
+ tickPositions[tickPositions.length - 1] :
20452
+ Math.max(max, tickPositions[tickPositions.length - 1]);
20453
+ };
20454
+ // When the axis is subject to the alignThresholds option. Use
20455
+ // axis.threshold because the local threshold includes the
20456
+ // `softThreshold`.
20457
+ if (isNumber(thresholdTickIndex) && isNumber(axis.threshold)) {
20458
+ // Throw away the previously computed tickPositions and start
20459
+ // from scratch with only the threshold itself, then add ticks
20460
+ // below the threshold first, then fill up above the threshold.
20461
+ // If we are not able to fill up to axis.max, double the
20462
+ // tickInterval and run again.
20463
+ while (tickPositions[thresholdTickIndex] !== threshold ||
20464
+ tickPositions.length !== tickAmount ||
20465
+ tickPositions[0] > min ||
20466
+ tickPositions[tickPositions.length - 1] < max) {
20467
+ tickPositions.length = 0;
20468
+ tickPositions.push(axis.threshold);
20469
+ while (tickPositions.length < tickAmount) {
20470
+ if (
20471
+ // Start by prepending positions until the threshold
20472
+ // is at the required index...
20473
+ tickPositions[thresholdTickIndex] === void 0 ||
20474
+ tickPositions[thresholdTickIndex] > axis.threshold) {
20475
+ prepend();
20476
+ }
20477
+ else {
20478
+ // ... then append positions until we have the
20479
+ // required length
20480
+ append();
20481
+ }
20482
+ }
20483
+ // Safety vent
20484
+ if (tickInterval > axis.tickInterval * 8) {
20485
+ break;
20486
+ }
20487
+ tickInterval *= 2;
20488
+ }
20489
+ adjustExtremes();
20490
+ }
20491
+ else if (currentTickAmount < tickAmount) {
20240
20492
  while (tickPositions.length < tickAmount) {
20241
20493
  // Extend evenly for both sides unless we're on the
20242
20494
  // threshold (#3965)
20243
- if (tickPositions.length % 2 ||
20244
- axis.min === threshold) {
20245
- // to the end
20246
- tickPositions.push(correctFloat(tickPositions[tickPositions.length - 1] +
20247
- tickInterval));
20495
+ if (tickPositions.length % 2 || min === threshold) {
20496
+ append();
20248
20497
  }
20249
20498
  else {
20250
- // to the start
20251
- tickPositions.unshift(correctFloat(tickPositions[0] - tickInterval));
20499
+ prepend();
20252
20500
  }
20253
20501
  }
20254
- axis.transA *= (currentTickAmount - 1) / (tickAmount - 1);
20255
- // Do not crop when ticks are not extremes (#9841)
20256
- axis.min = axisOptions.startOnTick ?
20257
- tickPositions[0] :
20258
- Math.min(axis.min, tickPositions[0]);
20259
- axis.max = axisOptions.endOnTick ?
20260
- tickPositions[tickPositions.length - 1] :
20261
- Math.max(axis.max, tickPositions[tickPositions.length - 1]);
20262
- // We have too many ticks, run second pass to try to reduce ticks
20263
- }
20264
- else if (currentTickAmount > tickAmount) {
20265
- axis.tickInterval *= 2;
20266
- axis.setTickPositions();
20502
+ adjustExtremes();
20267
20503
  }
20268
20504
  // The finalTickAmt property is set in getTickAmount
20269
20505
  if (defined(finalTickAmt)) {
@@ -20530,7 +20766,7 @@
20530
20766
  * @param {number} threshold
20531
20767
  * The threshold in axis values.
20532
20768
  *
20533
- * @return {number|undefined}
20769
+ * @return {number}
20534
20770
  * The translated threshold position in terms of pixels, and corrected to
20535
20771
  * stay within the axis bounds.
20536
20772
  */
@@ -21026,12 +21262,10 @@
21026
21262
  axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;
21027
21263
  // Create the axisGroup and gridGroup elements on first iteration
21028
21264
  if (!axis.axisGroup) {
21029
- var createGroup = function (name,
21030
- suffix,
21031
- zIndex) { return renderer.g(name)
21265
+ var createGroup = function (name, suffix, zIndex) { return renderer.g(name)
21032
21266
  .attr({ zIndex: zIndex })
21033
- .addClass("highcharts-" + coll.toLowerCase() + suffix + " " +
21034
- (_this.isRadial ? "highcharts-radial-axis" + suffix + " " : '') +
21267
+ .addClass("highcharts-".concat(coll.toLowerCase()).concat(suffix, " ") +
21268
+ (_this.isRadial ? "highcharts-radial-axis".concat(suffix, " ") : '') +
21035
21269
  (className || ''))
21036
21270
  .add(axisParent); };
21037
21271
  axis.gridGroup = createGroup('grid', '-grid', options.gridZIndex);
@@ -21219,18 +21453,18 @@
21219
21453
  // The part of a multiline text that is below the baseline of the
21220
21454
  // first line. Subtract 1 to preserve pixel-perfectness from the
21221
21455
  // old behaviour (v5.0.12), where only one line was allowed.
21222
- textHeightOvershoot = Math.max(axisTitle.getBBox(null, 0).height - fontMetrics.h - 1, 0),
21456
+ textHeightOvershoot = axisTitle ? Math.max(axisTitle.getBBox(false, 0).height - fontMetrics.h - 1, 0) : 0,
21223
21457
  // the position in the length direction of the axis
21224
- alongAxis = {
21458
+ alongAxis = ({
21225
21459
  low: margin + (horiz ? 0 : axisLength),
21226
21460
  middle: margin + axisLength / 2,
21227
21461
  high: margin + (horiz ? axisLength : 0)
21228
- }[axisTitleOptions.align],
21462
+ })[axisTitleOptions.align],
21229
21463
  // the position in the perpendicular direction of the axis
21230
21464
  offAxis = (horiz ? axisTop + this.height : axisLeft) +
21231
21465
  (horiz ? 1 : -1) * // horizontal axis reverses the margin
21232
21466
  (opposite ? -1 : 1) * // so does opposite axes
21233
- this.axisTitleMargin +
21467
+ (this.axisTitleMargin || 0) +
21234
21468
  [
21235
21469
  -textHeightOvershoot,
21236
21470
  textHeightOvershoot,
@@ -21454,14 +21688,8 @@
21454
21688
  }
21455
21689
  if (axisTitle && showAxis) {
21456
21690
  var titleXy = axis.getTitlePosition();
21457
- if (isNumber(titleXy.y)) {
21458
- axisTitle[axisTitle.isNew ? 'attr' : 'animate'](titleXy);
21459
- axisTitle.isNew = false;
21460
- }
21461
- else {
21462
- axisTitle.attr('y', -9999);
21463
- axisTitle.isNew = true;
21464
- }
21691
+ axisTitle[axisTitle.isNew ? 'attr' : 'animate'](titleXy);
21692
+ axisTitle.isNew = false;
21465
21693
  }
21466
21694
  // Stacked totals:
21467
21695
  if (stackLabelOptions && stackLabelOptions.enabled && axis.stacking) {
@@ -21657,10 +21885,10 @@
21657
21885
  stroke: options.color ||
21658
21886
  (categorized ?
21659
21887
  Color
21660
- .parse("#ccd6eb" /* highlightColor20 */)
21888
+ .parse("#ccd6eb" /* Palette.highlightColor20 */)
21661
21889
  .setOpacity(0.25)
21662
21890
  .get() :
21663
- "#cccccc" /* neutralColor20 */),
21891
+ "#cccccc" /* Palette.neutralColor20 */),
21664
21892
  'stroke-width': pick(options.width, 1)
21665
21893
  }).css({
21666
21894
  'pointer-events': 'none'
@@ -22265,10 +22493,13 @@
22265
22493
  * @private
22266
22494
  */
22267
22495
  Additions.prototype.getXDateFormat = function (x, dateTimeLabelFormats) {
22268
- var axis = this.axis;
22496
+ var axis = this.axis,
22497
+ time = axis.chart.time;
22269
22498
  return axis.closestPointRange ?
22270
- axis.chart.time.getDateFormat(axis.closestPointRange, x, axis.options.startOfWeek, dateTimeLabelFormats) || dateTimeLabelFormats.year : // #2546, 2581
22271
- dateTimeLabelFormats.day;
22499
+ time.getDateFormat(axis.closestPointRange, x, axis.options.startOfWeek, dateTimeLabelFormats) ||
22500
+ // #2546, 2581
22501
+ time.resolveDTLFormat(dateTimeLabelFormats.year).main :
22502
+ time.resolveDTLFormat(dateTimeLabelFormats.day).main;
22272
22503
  };
22273
22504
  return Additions;
22274
22505
  }());
@@ -22469,7 +22700,7 @@
22469
22700
  axisLength;
22470
22701
  interval = pick(filteredTickIntervalOption, log.minorAutoInterval, (realMax - realMin) *
22471
22702
  tickPixelIntervalOption / (totalPixelLength || 1));
22472
- interval = normalizeTickInterval(interval, void 0, getMagnitude(interval));
22703
+ interval = normalizeTickInterval(interval);
22473
22704
  positions = axis.getLinearTickPositions(interval, realMin, realMax).map(log.log2lin);
22474
22705
  if (!minor) {
22475
22706
  log.minorAutoInterval = interval / 5;
@@ -22903,7 +23134,7 @@
22903
23134
  // Set the presentational attributes
22904
23135
  if (!axis.chart.styledMode) {
22905
23136
  if (isLine) {
22906
- attribs.stroke = color || "#999999" /* neutralColor40 */;
23137
+ attribs.stroke = color || "#999999" /* Palette.neutralColor40 */;
22907
23138
  attribs['stroke-width'] = pick(options.width, 1);
22908
23139
  if (options.dashStyle) {
22909
23140
  attribs.dashstyle =
@@ -22911,7 +23142,7 @@
22911
23142
  }
22912
23143
  }
22913
23144
  else if (isBand) { // plot band
22914
- attribs.fill = color || "#e6ebf5" /* highlightColor10 */;
23145
+ attribs.fill = color || "#e6ebf5" /* Palette.highlightColor10 */;
22915
23146
  if (options.borderWidth) {
22916
23147
  attribs.stroke = options.borderColor;
22917
23148
  attribs['stroke-width'] = options.borderWidth;
@@ -22969,7 +23200,7 @@
22969
23200
  }
22970
23201
  else if (svgElem) {
22971
23202
  if (path) {
22972
- svgElem.show(true);
23203
+ svgElem.show();
22973
23204
  svgElem.animate({ d: path });
22974
23205
  }
22975
23206
  else if (svgElem.d) {
@@ -23869,6 +24100,12 @@
23869
24100
  * the context here is an object holding point, series, x, y etc.
23870
24101
  *
23871
24102
  * @function Highcharts.Tooltip#defaultFormatter
24103
+ *
24104
+ * @param {Highcharts.Tooltip} tooltip
24105
+ *
24106
+ * @return {string|Array<string>}
24107
+ * Returns a string (single tooltip and shared)
24108
+ * or an array of strings (split tooltip)
23872
24109
  */
23873
24110
  Tooltip.prototype.defaultFormatter = function (tooltip) {
23874
24111
  var items = this.points || splat(this);
@@ -24471,7 +24708,7 @@
24471
24708
  shared = tooltip.shared,
24472
24709
  styledMode = chart.styledMode;
24473
24710
  var textConfig = {};
24474
- if (!options.enabled) {
24711
+ if (!options.enabled || !point.series) { // #16820
24475
24712
  return;
24476
24713
  }
24477
24714
  U.clearTimeout(this.hideTimer);
@@ -24554,7 +24791,7 @@
24554
24791
  stroke: (options.borderColor ||
24555
24792
  point.color ||
24556
24793
  currentSeries.color ||
24557
- "#666666" /* neutralColor60 */)
24794
+ "#666666" /* Palette.neutralColor60 */)
24558
24795
  });
24559
24796
  }
24560
24797
  tooltip.updatePosition({
@@ -24754,7 +24991,7 @@
24754
24991
  stroke: (options.borderColor ||
24755
24992
  point.color ||
24756
24993
  series.color ||
24757
- "#333333" /* neutralColor80 */)
24994
+ "#333333" /* Palette.neutralColor80 */)
24758
24995
  });
24759
24996
  }
24760
24997
  return tt;
@@ -25092,7 +25329,7 @@
25092
25329
  // scale transform/css zoom. #11329.
25093
25330
  if (chartPosition.scaleX !== 1 || chartPosition.scaleY !== 1) {
25094
25331
  css(this.container, {
25095
- transform: "scale(" + chartPosition.scaleX + ", " + chartPosition.scaleY + ")"
25332
+ transform: "scale(".concat(chartPosition.scaleX, ", ").concat(chartPosition.scaleY, ")")
25096
25333
  });
25097
25334
  anchorX *= chartPosition.scaleX;
25098
25335
  anchorY *= chartPosition.scaleY;
@@ -25127,46 +25364,23 @@
25127
25364
  * @callback Highcharts.TooltipFormatterCallbackFunction
25128
25365
  *
25129
25366
  * @param {Highcharts.TooltipFormatterContextObject} this
25130
- * Context to format
25367
+ * Context to format
25131
25368
  *
25132
25369
  * @param {Highcharts.Tooltip} tooltip
25133
- * The tooltip instance
25370
+ * The tooltip instance
25134
25371
  *
25135
25372
  * @return {false|string|Array<(string|null|undefined)>|null|undefined}
25136
- * Formatted text or false
25373
+ * Formatted text or false
25137
25374
  */
25138
25375
  /**
25376
+ * Configuration for the tooltip formatters.
25377
+ *
25139
25378
  * @interface Highcharts.TooltipFormatterContextObject
25379
+ * @extends Highcharts.PointLabelObject
25140
25380
  */ /**
25141
- * @name Highcharts.TooltipFormatterContextObject#color
25142
- * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
25143
- */ /**
25144
- * @name Highcharts.TooltipFormatterContextObject#colorIndex
25145
- * @type {number|undefined}
25146
- */ /**
25147
- * @name Highcharts.TooltipFormatterContextObject#key
25148
- * @type {number}
25149
- */ /**
25150
- * @name Highcharts.TooltipFormatterContextObject#percentage
25151
- * @type {number|undefined}
25152
- */ /**
25153
- * @name Highcharts.TooltipFormatterContextObject#point
25154
- * @type {Highcharts.Point}
25155
- */ /**
25381
+ * Array of points in shared tooltips.
25156
25382
  * @name Highcharts.TooltipFormatterContextObject#points
25157
25383
  * @type {Array<Highcharts.TooltipFormatterContextObject>|undefined}
25158
- */ /**
25159
- * @name Highcharts.TooltipFormatterContextObject#series
25160
- * @type {Highcharts.Series}
25161
- */ /**
25162
- * @name Highcharts.TooltipFormatterContextObject#total
25163
- * @type {number|undefined}
25164
- */ /**
25165
- * @name Highcharts.TooltipFormatterContextObject#x
25166
- * @type {number}
25167
- */ /**
25168
- * @name Highcharts.TooltipFormatterContextObject#y
25169
- * @type {number}
25170
25384
  */
25171
25385
  /**
25172
25386
  * A callback function to place the tooltip in a specific position.
@@ -25343,6 +25557,15 @@
25343
25557
  * @type {Highcharts.Series}
25344
25558
  */
25345
25559
  this.series = void 0;
25560
+ /**
25561
+ * The attributes of the rendered SVG shape like in `column` or `pie`
25562
+ * series.
25563
+ *
25564
+ * @readonly
25565
+ * @name Highcharts.Point#shapeArgs
25566
+ * @type {Readonly<Highcharts.SVGAttributes>|undefined}
25567
+ */
25568
+ this.shapeArgs = void 0;
25346
25569
  /**
25347
25570
  * The total of values in either a stack for stacked series, or a pie in a
25348
25571
  * pie series.
@@ -26422,7 +26645,7 @@
26422
26645
  * @type {Highcharts.Point}
26423
26646
  */
26424
26647
  /**
26425
- * Configuration hash for the data label and tooltip formatters.
26648
+ * Configuration for the data label and tooltip formatters.
26426
26649
  *
26427
26650
  * @interface Highcharts.PointLabelObject
26428
26651
  */ /**
@@ -26464,7 +26687,7 @@
26464
26687
  */ /**
26465
26688
  * The y value of the point.
26466
26689
  * @name Highcharts.PointLabelObject#y
26467
- * @type {number|undefined}
26690
+ * @type {number|null|undefined}
26468
26691
  */
26469
26692
  /**
26470
26693
  * Gets fired when the mouse leaves the area close to the point.
@@ -26801,7 +27024,7 @@
26801
27024
  if (!chart.styledMode) {
26802
27025
  selectionMarker.attr({
26803
27026
  fill: (chartOptions.selectionMarkerFill ||
26804
- color("#335cad" /* highlightColor80 */)
27027
+ color("#335cad" /* Palette.highlightColor80 */)
26805
27028
  .setOpacity(0.25).get())
26806
27029
  });
26807
27030
  }
@@ -27244,9 +27467,10 @@
27244
27467
  * name.
27245
27468
  */
27246
27469
  Pointer.prototype.inClass = function (element, className) {
27247
- var elemClassName;
27248
- while (element) {
27249
- elemClassName = attr(element, 'class');
27470
+ var elem = element,
27471
+ elemClassName;
27472
+ while (elem) {
27473
+ elemClassName = attr(elem, 'class');
27250
27474
  if (elemClassName) {
27251
27475
  if (elemClassName.indexOf(className) !== -1) {
27252
27476
  return true;
@@ -27255,7 +27479,7 @@
27255
27479
  return false;
27256
27480
  }
27257
27481
  }
27258
- element = element.parentNode;
27482
+ elem = elem.parentElement;
27259
27483
  }
27260
27484
  };
27261
27485
  /**
@@ -27296,6 +27520,9 @@
27296
27520
  * properties `chartX` and `chartY` in order to work on the internal
27297
27521
  * coordinate system.
27298
27522
  *
27523
+ * On map charts, the properties `lon` and `lat` are added to the event
27524
+ * object given that the chart has projection information.
27525
+ *
27299
27526
  * @function Highcharts.Pointer#normalize
27300
27527
  *
27301
27528
  * @param {global.MouseEvent|global.PointerEvent|global.TouchEvent} e
@@ -27891,11 +28118,12 @@
27891
28118
  * The mouseOver event should be triggered when hoverPoint
27892
28119
  * is correct.
27893
28120
  */
27894
- hoverPoint.firePointEvent('mouseOver');
27895
- // Draw tooltip if necessary
27896
- if (tooltip) {
27897
- tooltip.refresh(useSharedTooltip ? points : hoverPoint, e);
27898
- }
28121
+ hoverPoint.firePointEvent('mouseOver', void 0, function () {
28122
+ // Draw tooltip if necessary
28123
+ if (tooltip && hoverPoint) {
28124
+ tooltip.refresh(useSharedTooltip ? points : hoverPoint, e);
28125
+ }
28126
+ });
27899
28127
  // Update positions (regardless of kdpoint or hoverPoint)
27900
28128
  }
27901
28129
  else if (followPointer && tooltip && !tooltip.isHidden) {
@@ -27926,7 +28154,7 @@
27926
28154
  point = chart.hoverPoint; // #13002
27927
28155
  if (!point || point.series[axis.coll] !== axis) {
27928
28156
  point = find(points, function (p) {
27929
- return p.series[axis.coll] === axis;
28157
+ return p.series && p.series[axis.coll] === axis;
27930
28158
  });
27931
28159
  }
27932
28160
  }
@@ -28015,7 +28243,7 @@
28015
28243
  var hoverChart = H.charts[pick(Pointer.hoverChartIndex, -1)];
28016
28244
  if (hoverChart &&
28017
28245
  hoverChart !== chart) {
28018
- hoverChart.pointer.onContainerMouseLeave({ relatedTarget: true });
28246
+ hoverChart.pointer.onContainerMouseLeave({ relatedTarget: chart.container });
28019
28247
  }
28020
28248
  if (!hoverChart ||
28021
28249
  !hoverChart.mouseIsDown) {
@@ -28477,7 +28705,7 @@
28477
28705
  this.maxItemWidth = 0;
28478
28706
  this.maxLegendWidth = 0;
28479
28707
  this.offsetWidth = 0;
28480
- this.options = {};
28708
+ this.options = void 0;
28481
28709
  this.padding = 0;
28482
28710
  this.pages = [];
28483
28711
  this.proximate = false;
@@ -28808,7 +29036,7 @@
28808
29036
  * @name Highcharts.Legend#title
28809
29037
  * @type {Highcharts.SVGElement}
28810
29038
  */
28811
- this.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, null, null, null, options.useHTML, null, 'legend-title')
29039
+ this.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, void 0, void 0, void 0, options.useHTML, void 0, 'legend-title')
28812
29040
  .attr({ zIndex: 1 });
28813
29041
  if (!this.chart.styledMode) {
28814
29042
  this.title.css(titleOptions.style);
@@ -28869,7 +29097,7 @@
28869
29097
  item.series :
28870
29098
  item,
28871
29099
  seriesOptions = series.options,
28872
- showCheckbox = legend.createCheckboxForItem &&
29100
+ showCheckbox = (legend.createCheckboxForItem) &&
28873
29101
  seriesOptions &&
28874
29102
  seriesOptions.showCheckbox,
28875
29103
  useHTML = options.useHTML,
@@ -29140,7 +29368,7 @@
29140
29368
  }
29141
29369
  }, this);
29142
29370
  distribute(boxes, chart.plotHeight).forEach(function (box) {
29143
- if (box.item._legendItemPos) {
29371
+ if (box.item._legendItemPos && box.pos) {
29144
29372
  box.item._legendItemPos[1] =
29145
29373
  chart.plotTop - chart.spacing[0] + box.pos;
29146
29374
  }
@@ -29175,8 +29403,7 @@
29175
29403
  legend.lastItemY = 0;
29176
29404
  legend.widthOption = relativeLength(options.width, chart.spacingBox.width - padding);
29177
29405
  // Compute how wide the legend is allowed to be
29178
- allowedWidth =
29179
- chart.spacingBox.width - 2 * padding - options.x;
29406
+ allowedWidth = chart.spacingBox.width - 2 * padding - options.x;
29180
29407
  if (['rm', 'lm'].indexOf(legend.getAlignment().substring(0, 2)) > -1) {
29181
29408
  allowedWidth /= 2;
29182
29409
  }
@@ -29249,7 +29476,6 @@
29249
29476
  r: options.borderRadius
29250
29477
  })
29251
29478
  .add(legendGroup);
29252
- box.isNew = true;
29253
29479
  }
29254
29480
  // Presentational
29255
29481
  if (!chart.styledMode) {
@@ -29262,16 +29488,15 @@
29262
29488
  .shadow(options.shadow);
29263
29489
  }
29264
29490
  if (legendWidth > 0 && legendHeight > 0) {
29265
- box[box.isNew ? 'attr' : 'animate'](box.crisp.call({}, {
29491
+ box[box.placed ? 'animate' : 'attr'](box.crisp.call({}, {
29266
29492
  x: 0,
29267
29493
  y: 0,
29268
29494
  width: legendWidth,
29269
29495
  height: legendHeight
29270
29496
  }, box.strokeWidth()));
29271
- box.isNew = false;
29272
29497
  }
29273
29498
  // hide the border if no items
29274
- box[display ? 'show' : 'hide']();
29499
+ legendGroup[display ? 'show' : 'hide']();
29275
29500
  // Open for responsiveness
29276
29501
  if (chart.styledMode && legendGroup.getStyle('display') === 'none') {
29277
29502
  legendWidth = legendHeight = 0;
@@ -29311,6 +29536,11 @@
29311
29536
  if (y !== alignTo.y) {
29312
29537
  alignTo = merge(alignTo, { y: y });
29313
29538
  }
29539
+ if (!chart.hasRendered) {
29540
+ // Avoid animation when adjusting alignment for responsiveness and
29541
+ // colorAxis label layout
29542
+ this.group.placed = false;
29543
+ }
29314
29544
  this.group.align(merge(options, {
29315
29545
  width: this.legendWidth,
29316
29546
  height: this.legendHeight,
@@ -29444,7 +29674,7 @@
29444
29674
  });
29445
29675
  this.pager = renderer.text('', 15, 10)
29446
29676
  .addClass('highcharts-legend-navigation');
29447
- if (!chart.styledMode) {
29677
+ if (!chart.styledMode && navOptions.style) {
29448
29678
  this.pager.css(navOptions.style);
29449
29679
  }
29450
29680
  this.pager.add(nav);
@@ -29505,7 +29735,7 @@
29505
29735
  this.nav.attr({
29506
29736
  translateX: padding,
29507
29737
  translateY: clipHeight + this.padding + 7 + this.titleHeight,
29508
- visibility: 'visible'
29738
+ visibility: 'inherit'
29509
29739
  });
29510
29740
  [this.up, this.upTracker].forEach(function (elem) {
29511
29741
  elem.attr({
@@ -29957,7 +30187,6 @@
29957
30187
  fireEvent = U.fireEvent,
29958
30188
  getStyle = U.getStyle,
29959
30189
  isArray = U.isArray,
29960
- isFunction = U.isFunction,
29961
30190
  isNumber = U.isNumber,
29962
30191
  isObject = U.isObject,
29963
30192
  isString = U.isString,
@@ -30719,10 +30948,10 @@
30719
30948
  var chart = this;
30720
30949
  // Default style
30721
30950
  var style = name === 'title' ? {
30722
- color: "#333333" /* neutralColor80 */,
30951
+ color: "#333333" /* Palette.neutralColor80 */,
30723
30952
  fontSize: this.options.isStock ? '16px' : '18px' // #2944
30724
30953
  } : {
30725
- color: "#666666" /* neutralColor60 */
30954
+ color: "#666666" /* Palette.neutralColor60 */
30726
30955
  };
30727
30956
  // Merge default options with explicit options
30728
30957
  var options = this.options[name] = merge(
@@ -32003,9 +32232,32 @@
32003
32232
  if (defined(this.index)) {
32004
32233
  this.setReflow(this.options.chart.reflow);
32005
32234
  }
32235
+ this.warnIfA11yModuleNotLoaded();
32006
32236
  // Don't run again
32007
32237
  this.hasLoaded = true;
32008
32238
  };
32239
+ /**
32240
+ * Emit console warning if the a11y module is not loaded.
32241
+ */
32242
+ Chart.prototype.warnIfA11yModuleNotLoaded = function () {
32243
+ var _a = this,
32244
+ options = _a.options,
32245
+ title = _a.title;
32246
+ if (options && !this.accessibility) {
32247
+ // Make chart behave as an image with the title as alt text
32248
+ this.renderer.boxWrapper.attr({
32249
+ role: 'img',
32250
+ 'aria-label': (title && title.element.textContent) || ''
32251
+ });
32252
+ if (!(options.accessibility && options.accessibility.enabled === false)) {
32253
+ error('Highcharts warning: Consider including the ' +
32254
+ '"accessibility.js" module to make your chart more ' +
32255
+ 'usable for people with disabilities. Set the ' +
32256
+ '"accessibility.enabled" option to false to remove this ' +
32257
+ 'warning. See https://www.highcharts.com/docs/accessibility/accessibility-module.', false, this);
32258
+ }
32259
+ }
32260
+ };
32009
32261
  /**
32010
32262
  * Add a series to the chart after render time. Note that this method should
32011
32263
  * never be used when adding data synchronously at chart render time, as it
@@ -32570,7 +32822,6 @@
32570
32822
  lang = defaultOptions.lang,
32571
32823
  btnOptions = chart.options.chart.resetZoomButton,
32572
32824
  theme = btnOptions.theme,
32573
- states = theme.states,
32574
32825
  alignTo = (btnOptions.relativeTo === 'chart' ||
32575
32826
  btnOptions.relativeTo === 'spacingBox' ?
32576
32827
  null :
@@ -32583,7 +32834,7 @@
32583
32834
  }
32584
32835
  fireEvent(this, 'beforeShowResetZoom', null, function () {
32585
32836
  chart.resetZoomButton = chart.renderer
32586
- .button(lang.resetZoom, null, null, zoomOut, theme, states && states.hover)
32837
+ .button(lang.resetZoom, null, null, zoomOut, theme)
32587
32838
  .attr({
32588
32839
  align: btnOptions.position.align,
32589
32840
  title: lang.resetZoomTitle
@@ -32684,9 +32935,7 @@
32684
32935
  enabled: panning,
32685
32936
  type: 'x'
32686
32937
  }),
32687
- chartOptions = chart.options.chart,
32688
- hasMapNavigation = chart.options.mapNavigation &&
32689
- chart.options.mapNavigation.enabled;
32938
+ chartOptions = chart.options.chart;
32690
32939
  if (chartOptions && chartOptions.panning) {
32691
32940
  chartOptions.panning = panningOptions;
32692
32941
  }
@@ -32781,7 +33030,6 @@
32781
33030
  newMax <= paddedMax) {
32782
33031
  axis.setExtremes(newMin, newMax, false, false, { trigger: 'pan' });
32783
33032
  if (!chart.resetZoomButton &&
32784
- !hasMapNavigation &&
32785
33033
  // Show reset zoom button only when both newMin and
32786
33034
  // newMax values are between padded axis range.
32787
33035
  newMin !== paddedMin &&
@@ -34112,7 +34360,7 @@
34112
34360
  *
34113
34361
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
34114
34362
  */
34115
- lineColor: "#ffffff" /* backgroundColor */,
34363
+ lineColor: "#ffffff" /* Palette.backgroundColor */,
34116
34364
  /**
34117
34365
  * The width of the point marker's outline.
34118
34366
  *
@@ -34312,7 +34560,7 @@
34312
34560
  *
34313
34561
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
34314
34562
  */
34315
- fillColor: "#cccccc" /* neutralColor20 */,
34563
+ fillColor: "#cccccc" /* Palette.neutralColor20 */,
34316
34564
  /**
34317
34565
  * The color of the point marker's outline. When
34318
34566
  * `undefined`, the series' or point's color is used.
@@ -34322,7 +34570,7 @@
34322
34570
  *
34323
34571
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
34324
34572
  */
34325
- lineColor: "#000000" /* neutralColor100 */,
34573
+ lineColor: "#000000" /* Palette.neutralColor100 */,
34326
34574
  /**
34327
34575
  * The width of the point marker's outline.
34328
34576
  *
@@ -34381,6 +34629,9 @@
34381
34629
  * parameter, `event`, is passed to the function, containing common
34382
34630
  * event information.
34383
34631
  *
34632
+ * Returning `false` cancels the default behavior, which is to show a
34633
+ * tooltip for the point.
34634
+ *
34384
34635
  * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/
34385
34636
  * Show values in the chart's corner on mouse over
34386
34637
  *
@@ -35103,7 +35354,7 @@
35103
35354
  * @deprecated
35104
35355
  *
35105
35356
  * @extends plotOptions.series.marker
35106
- * @excluding states
35357
+ * @excluding states, symbol
35107
35358
  * @product highcharts highstock
35108
35359
  */
35109
35360
  marker: {
@@ -36035,7 +36286,7 @@
36035
36286
  this.getCyclic('color');
36036
36287
  }
36037
36288
  else if (this.options.colorByPoint) {
36038
- this.color = "#cccccc" /* neutralColor20 */;
36289
+ this.color = "#cccccc" /* Palette.neutralColor20 */;
36039
36290
  }
36040
36291
  else {
36041
36292
  this.getCyclic('color', this.options.color ||
@@ -36222,7 +36473,7 @@
36222
36473
  data.forEach(function (point, i) {
36223
36474
  // .update doesn't exist on a linked, hidden series (#3709)
36224
36475
  // (#10187)
36225
- if (point !== oldData[i].y && oldData[i].update) {
36476
+ if (point !== oldData[i].y && (oldData[i].update)) {
36226
36477
  oldData[i].update(point, false, null, false);
36227
36478
  }
36228
36479
  });
@@ -36319,8 +36570,19 @@
36319
36570
  updatedData,
36320
36571
  indexOfX = 0,
36321
36572
  indexOfY = 1,
36322
- firstPoint = null;
36323
- data = data || [];
36573
+ firstPoint = null,
36574
+ copiedData;
36575
+ if (!chart.options.chart.allowMutatingData) { // #4259
36576
+ // Remove old reference
36577
+ if (options.data) {
36578
+ delete series.options.data;
36579
+ }
36580
+ if (series.userOptions.data) {
36581
+ delete series.userOptions.data;
36582
+ }
36583
+ copiedData = merge(true, data);
36584
+ }
36585
+ data = copiedData || data || [];
36324
36586
  var dataLength = data.length;
36325
36587
  redraw = pick(redraw, true);
36326
36588
  if (dataSorting && dataSorting.enabled) {
@@ -36328,7 +36590,8 @@
36328
36590
  }
36329
36591
  // First try to run Point.update which is cheaper, allows animation,
36330
36592
  // and keeps references to points.
36331
- if (updatePoints !== false &&
36593
+ if (chart.options.chart.allowMutatingData &&
36594
+ updatePoints !== false &&
36332
36595
  dataLength &&
36333
36596
  oldDataLength &&
36334
36597
  !series.cropped &&
@@ -36429,7 +36692,7 @@
36429
36692
  // destroy old points
36430
36693
  i = oldDataLength;
36431
36694
  while (i--) {
36432
- if (oldData[i] && oldData[i].destroy) {
36695
+ if (oldData[i] && (oldData[i].destroy)) {
36433
36696
  oldData[i].destroy();
36434
36697
  }
36435
36698
  }
@@ -36553,7 +36816,7 @@
36553
36816
  xExtremes = xAxis.getExtremes();
36554
36817
  min = xExtremes.min;
36555
36818
  max = xExtremes.max;
36556
- updatingNames = xAxis.categories && !xAxis.names.length;
36819
+ updatingNames = !!(xAxis.categories && !xAxis.names.length);
36557
36820
  }
36558
36821
  // optionally filter out points outside the plot area
36559
36822
  if (isCartesian &&
@@ -36687,7 +36950,7 @@
36687
36950
  Series.prototype.generatePoints = function () {
36688
36951
  var series = this,
36689
36952
  options = series.options,
36690
- dataOptions = options.data,
36953
+ dataOptions = (series.processedData || options.data),
36691
36954
  processedXData = series.processedXData,
36692
36955
  processedYData = series.processedYData,
36693
36956
  PointClass = series.pointClass,
@@ -37020,8 +37283,16 @@
37020
37283
  !xAxis.validatePositiveValue(xValue)) {
37021
37284
  point.isNull = true;
37022
37285
  }
37023
- // Get the plotX translation
37286
+ /**
37287
+ * The translated X value for the point in terms of pixels. Relative
37288
+ * to the X axis position if the series has one, otherwise relative
37289
+ * to the plot area. Depending on the series type this value might
37290
+ * not be defined.
37291
+ * @name Highcharts.Point#plotX
37292
+ * @type {number|undefined}
37293
+ */
37024
37294
  point.plotX = plotX = correctFloat(// #5236
37295
+ // Get the plotX translation
37025
37296
  limitedRange(xAxis.translate(// #3923
37026
37297
  xValue, 0, 0, 0, 1, pointPlacement, this.type === 'flags')) // #3923
37027
37298
  );
@@ -37082,6 +37353,14 @@
37082
37353
  false,
37083
37354
  true);
37084
37355
  if (typeof translated !== 'undefined') {
37356
+ /**
37357
+ * The translated Y value for the point in terms of pixels.
37358
+ * Relative to the Y axis position if the series has one,
37359
+ * otherwise relative to the plot area. Depending on the
37360
+ * series type this value might not be defined.
37361
+ * @name Highcharts.Point#plotY
37362
+ * @type {number|undefined}
37363
+ */
37085
37364
  point.plotY = limitedRange(translated);
37086
37365
  }
37087
37366
  }
@@ -37096,10 +37375,7 @@
37096
37375
  threshold ||
37097
37376
  0);
37098
37377
  // some API data
37099
- point.category = (categories &&
37100
- typeof categories[point.x] !== 'undefined' ?
37101
- categories[point.x] :
37102
- point.x);
37378
+ point.category = pick(categories && categories[point.x], point.x);
37103
37379
  // Determine auto enabling of markers (#3635, #5099)
37104
37380
  if (!point.isNull && point.visible !== false) {
37105
37381
  if (typeof lastPlotX !== 'undefined') {
@@ -37308,7 +37584,7 @@
37308
37584
  this.setClip();
37309
37585
  // Destroy temporary clip rectangles that are no longer in use
37310
37586
  objectEach(this.chart.sharedClips, function (clip, key, sharedClips) {
37311
- if (clip && !_this.chart.container.querySelector("[clip-path=\"url(#" + clip.id + ")\"]")) {
37587
+ if (clip && !_this.chart.container.querySelector("[clip-path=\"url(#".concat(clip.id, ")\"]"))) {
37312
37588
  clip.destroy();
37313
37589
  delete sharedClips[key];
37314
37590
  }
@@ -37450,26 +37726,26 @@
37450
37726
  var seriesStateOptions,
37451
37727
  pointStateOptions,
37452
37728
  radius = pick(pointMarkerOptions.radius,
37453
- seriesMarkerOptions.radius);
37729
+ seriesMarkerOptions && seriesMarkerOptions.radius);
37454
37730
  // Handle hover and select states
37455
37731
  if (state) {
37456
37732
  seriesStateOptions = seriesMarkerOptions.states[state];
37457
37733
  pointStateOptions = pointMarkerOptions.states &&
37458
37734
  pointMarkerOptions.states[state];
37459
- radius = pick(pointStateOptions && pointStateOptions.radius, seriesStateOptions && seriesStateOptions.radius, radius + (seriesStateOptions && seriesStateOptions.radiusPlus ||
37735
+ radius = pick(pointStateOptions && pointStateOptions.radius, seriesStateOptions && seriesStateOptions.radius, radius && radius + (seriesStateOptions && seriesStateOptions.radiusPlus ||
37460
37736
  0));
37461
37737
  }
37462
37738
  point.hasImage = symbol && symbol.indexOf('url') === 0;
37463
37739
  if (point.hasImage) {
37464
37740
  radius = 0; // and subsequently width and height is not set
37465
37741
  }
37466
- var attribs = {
37742
+ var attribs = isNumber(radius) ? {
37467
37743
  // Math.floor for #1843:
37468
37744
  x: seriesOptions.crisp ?
37469
37745
  Math.floor(point.plotX - radius) :
37470
37746
  point.plotX - radius,
37471
37747
  y: point.plotY - radius
37472
- };
37748
+ } : {};
37473
37749
  if (radius) {
37474
37750
  attribs.width = attribs.height = 2 * radius;
37475
37751
  }
@@ -37559,7 +37835,7 @@
37559
37835
  point,
37560
37836
  axis;
37561
37837
  // add event hook
37562
- fireEvent(series, 'destroy');
37838
+ fireEvent(series, 'destroy', { keepEventsForUpdate: keepEventsForUpdate });
37563
37839
  // remove events
37564
37840
  this.removeEvents(keepEventsForUpdate);
37565
37841
  // erase from axes
@@ -37746,10 +38022,10 @@
37746
38022
  else if (series.visible) {
37747
38023
  // If zones were removed, restore graph and area
37748
38024
  if (graph) {
37749
- graph.show(true);
38025
+ graph.show();
37750
38026
  }
37751
38027
  if (area) {
37752
- area.show(true);
38028
+ area.show();
37753
38029
  }
37754
38030
  }
37755
38031
  };
@@ -38243,7 +38519,7 @@
38243
38519
  else if (series.graph) { // create
38244
38520
  series.tracker = renderer.path(trackerPath)
38245
38521
  .attr({
38246
- visibility: series.visible ? 'visible' : 'hidden',
38522
+ visibility: series.visible ? 'inherit' : 'hidden',
38247
38523
  zIndex: 2
38248
38524
  })
38249
38525
  .addClass(trackByArea ?
@@ -38369,7 +38645,10 @@
38369
38645
  names[x] = point.name;
38370
38646
  }
38371
38647
  dataOptions.splice(i, 0, options);
38372
- if (isInTheMiddle) {
38648
+ if (isInTheMiddle ||
38649
+ // When processedData is present we need to splice an empty slot
38650
+ // into series.data, otherwise generatePoints won't pick it up.
38651
+ series.processedData) {
38373
38652
  series.data.splice(i, 0, null);
38374
38653
  series.processData();
38375
38654
  }
@@ -38379,7 +38658,7 @@
38379
38658
  }
38380
38659
  // Shift the first point off the parallel arrays
38381
38660
  if (shift) {
38382
- if (data[0] && data[0].remove) {
38661
+ if (data[0] && (data[0].remove)) {
38383
38662
  data[0].remove(false);
38384
38663
  }
38385
38664
  else {
@@ -38574,6 +38853,8 @@
38574
38853
  typeof options.pointStart !== 'undefined' ||
38575
38854
  typeof options.pointInterval !== 'undefined' ||
38576
38855
  typeof options.relativeXValue !== 'undefined' ||
38856
+ options.joinBy ||
38857
+ options.mapData || // #11636
38577
38858
  // Changes to data grouping requires new points in new group
38578
38859
  series.hasOptionChanged('dataGrouping') ||
38579
38860
  series.hasOptionChanged('pointStart') ||
@@ -38582,9 +38863,12 @@
38582
38863
  series.hasOptionChanged('keys'));
38583
38864
  newType = newType || initialType;
38584
38865
  if (keepPoints) {
38585
- preserve.push('data', 'isDirtyData', 'points', 'processedXData', 'processedYData', 'xIncrement', 'cropped', '_hasPointMarkers', '_hasPointLabels', 'clips', // #15420
38866
+ preserve.push('data', 'isDirtyData', 'points', 'processedData', // #17057
38867
+ 'processedXData', 'processedYData', 'xIncrement', 'cropped', '_hasPointMarkers', '_hasPointLabels', 'clips', // #15420
38586
38868
  // Networkgraph (#14397)
38587
38869
  'nodes', 'layout',
38870
+ // Treemap
38871
+ 'level',
38588
38872
  // Map specific, consider moving it to series-specific preserve-
38589
38873
  // properties (#10617)
38590
38874
  'mapMap', 'mapData', 'minY', 'maxY', 'minX', 'maxX');
@@ -38636,8 +38920,6 @@
38636
38920
  series.remove(false, false, false, true);
38637
38921
  if (casting) {
38638
38922
  // Modern browsers including IE11
38639
- // @todo slow, consider alternatives mentioned:
38640
- // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf
38641
38923
  if (Object.setPrototypeOf) {
38642
38924
  Object.setPrototypeOf(series, seriesTypes[newType].prototype);
38643
38925
  // Legacy (IE < 11)
@@ -39477,6 +39759,7 @@
39477
39759
  var stop = A.stop;
39478
39760
  var addEvent = U.addEvent,
39479
39761
  createElement = U.createElement,
39762
+ defined = U.defined,
39480
39763
  merge = U.merge,
39481
39764
  pick = U.pick;
39482
39765
  /* eslint-disable no-invalid-this, valid-jsdoc */
@@ -39510,7 +39793,7 @@
39510
39793
  }
39511
39794
  else if (scrollableMinHeight) {
39512
39795
  this.scrollablePixelsY = scrollablePixelsY = Math.max(0, scrollableMinHeight - this.chartHeight);
39513
- if (scrollablePixelsY) {
39796
+ if (defined(scrollablePixelsY)) {
39514
39797
  this.scrollablePlotBox = (this.renderer.scrollablePlotBox = merge(this.plotBox));
39515
39798
  this.plotBox.height = this.plotHeight += scrollablePixelsY;
39516
39799
  if (this.inverted) {
@@ -39645,7 +39928,7 @@
39645
39928
  axisClass = '.highcharts-yaxis';
39646
39929
  }
39647
39930
  if (axisClass) {
39648
- fixedSelectors.push(axisClass + ":not(.highcharts-radial-axis)", axisClass + "-labels:not(.highcharts-radial-axis-labels)");
39931
+ fixedSelectors.push("" + axisClass + ":not(.highcharts-radial-axis)", "" + axisClass + "-labels:not(.highcharts-radial-axis-labels)");
39649
39932
  }
39650
39933
  fixedSelectors.forEach(function (className) {
39651
39934
  [].forEach.call(container.querySelectorAll(className), function (elem) {
@@ -39696,7 +39979,7 @@
39696
39979
  .addClass('highcharts-scrollable-mask')
39697
39980
  .add();
39698
39981
  addEvent(this, 'afterShowResetZoom', this.moveFixedElements);
39699
- addEvent(this, 'afterDrilldown', this.moveFixedElements);
39982
+ addEvent(this, 'afterApplyDrilldown', this.moveFixedElements);
39700
39983
  addEvent(this, 'afterLayOutTitles', this.moveFixedElements);
39701
39984
  }
39702
39985
  else {
@@ -39824,6 +40107,7 @@
39824
40107
  * area will become scrollable.
39825
40108
  *
39826
40109
  * @type {number}
40110
+ * @since 7.1.2
39827
40111
  * @apioption chart.scrollablePlotArea.minHeight
39828
40112
  */
39829
40113
  /**
@@ -39831,6 +40115,7 @@
39831
40115
  * area will become scrollable.
39832
40116
  *
39833
40117
  * @type {number}
40118
+ * @since 6.1.0
39834
40119
  * @apioption chart.scrollablePlotArea.minWidth
39835
40120
  */
39836
40121
  /**
@@ -39839,6 +40124,7 @@
39839
40124
  * Typically we would use 1 if the chart has right aligned Y axes.
39840
40125
  *
39841
40126
  * @type {number}
40127
+ * @since 6.1.0
39842
40128
  * @apioption chart.scrollablePlotArea.scrollPositionX
39843
40129
  */
39844
40130
  /**
@@ -39846,6 +40132,7 @@
39846
40132
  * 1, where 0 aligns the plot area to the top and 1 aligns it to the bottom.
39847
40133
  *
39848
40134
  * @type {number}
40135
+ * @since 7.1.2
39849
40136
  * @apioption chart.scrollablePlotArea.scrollPositionY
39850
40137
  */
39851
40138
  /**
@@ -40063,7 +40350,6 @@
40063
40350
  renderer
40064
40351
  .g('stack-labels')
40065
40352
  .attr({
40066
- visibility: 'visible',
40067
40353
  zIndex: 6,
40068
40354
  opacity: 0
40069
40355
  })
@@ -40299,7 +40585,7 @@
40299
40585
  }
40300
40586
  else {
40301
40587
  // Move label away to avoid the overlapping issues
40302
- label.alignAttr.y = -9999;
40588
+ label.hide();
40303
40589
  isJustify = false;
40304
40590
  }
40305
40591
  if (isJustify) {
@@ -40423,7 +40709,7 @@
40423
40709
  this.chart.options.chart.ignoreHiddenSeries !== false)) {
40424
40710
  return;
40425
40711
  }
40426
- 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 + "," + 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;
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;
40427
40713
  yAxis.stacking.stacksTouched += 1;
40428
40714
  // loop over the non-null y values and read them into a local array
40429
40715
  for (i = 0; i < yDataLength; i++) {
@@ -40586,11 +40872,12 @@
40586
40872
  // changed:
40587
40873
  if (!defined(stackIndicator) ||
40588
40874
  stackIndicator.x !== x ||
40589
- (key && stackIndicator.key !== key)) {
40875
+ (key && stackIndicator.stackKey !== key)) {
40590
40876
  stackIndicator = {
40591
40877
  x: x,
40592
40878
  index: 0,
40593
- key: key
40879
+ key: key,
40880
+ stackKey: key
40594
40881
  };
40595
40882
  }
40596
40883
  else {
@@ -40734,7 +41021,7 @@
40734
41021
  if (!styledMode) {
40735
41022
  props[0].push((options.lineColor ||
40736
41023
  this.color ||
40737
- "#cccccc" /* neutralColor20 */ // when colorByPoint = true
41024
+ "#cccccc" /* Palette.neutralColor20 */ // when colorByPoint = true
40738
41025
  ), options.dashStyle);
40739
41026
  }
40740
41027
  props = series.getZonesGraphs(props);
@@ -41306,9 +41593,9 @@
41306
41593
  });
41307
41594
  props.forEach(function (prop) {
41308
41595
  var areaKey = prop[0],
41309
- area = series[areaKey],
41310
- verb = area ? 'animate' : 'attr',
41311
41596
  attribs = {};
41597
+ var area = series[areaKey];
41598
+ var verb = area ? 'animate' : 'attr';
41312
41599
  // Create or update the area
41313
41600
  if (area) { // update
41314
41601
  area.endX = series.preventGraphAnimation ?
@@ -41338,15 +41625,18 @@
41338
41625
  * @private
41339
41626
  */
41340
41627
  AreaSeries.prototype.getGraphPath = function (points) {
41341
- var getGraphPath = LineSeries.prototype.getGraphPath, graphPath, options = this.options, stacking = options.stacking, yAxis = this.yAxis, topPath, bottomPath, bottomPoints = [], graphPoints = [], seriesIndex = this.index, i, areaPath, plotX, stacks = yAxis.stacking.stacks[this.stackKey], threshold = options.threshold, translatedThreshold = Math.round(// #10909
41342
- yAxis.getThreshold(options.threshold)), isNull, yBottom, connectNulls = pick(// #10574
41628
+ var getGraphPath = LineSeries.prototype.getGraphPath, options = this.options, stacking = options.stacking, yAxis = this.yAxis, bottomPoints = [], graphPoints = [], seriesIndex = this.index, stacks = yAxis.stacking.stacks[this.stackKey], threshold = options.threshold, translatedThreshold = Math.round(// #10909
41629
+ yAxis.getThreshold(options.threshold)), connectNulls = pick(// #10574
41343
41630
  options.connectNulls, stacking === 'percent'),
41344
41631
  // To display null points in underlying stacked series, this
41345
41632
  // series graph must be broken, and the area also fall down to
41346
41633
  // fill the gap left by the null point. #2069
41347
41634
  addDummyPoints = function (i, otherI, side) {
41348
41635
  var point = points[i], stackedValues = stacking &&
41349
- stacks[point.x].points[seriesIndex], nullVal = point[side + 'Null'] || 0, cliffVal = point[side + 'Cliff'] || 0, top, bottom, isNull = true;
41636
+ stacks[point.x].points[seriesIndex], nullVal = point[side + 'Null'] || 0, cliffVal = point[side + 'Cliff'] || 0;
41637
+ var top,
41638
+ bottom,
41639
+ isNull = true;
41350
41640
  if (cliffVal || nullVal) {
41351
41641
  top = (nullVal ?
41352
41642
  stackedValues[0] :
@@ -41378,13 +41668,16 @@
41378
41668
  });
41379
41669
  }
41380
41670
  };
41671
+ var plotX,
41672
+ isNull,
41673
+ yBottom;
41381
41674
  // Find what points to use
41382
41675
  points = points || this.points;
41383
41676
  // Fill in missing points
41384
41677
  if (stacking) {
41385
41678
  points = this.getStackPoints(points);
41386
41679
  }
41387
- for (i = 0; i < points.length; i++) {
41680
+ for (var i = 0, iEnd = points.length; i < iEnd; ++i) {
41388
41681
  // Reset after series.update of stacking property (#12033)
41389
41682
  if (!stacking) {
41390
41683
  points[i].leftCliff = points[i].rightCliff =
@@ -41414,20 +41707,29 @@
41414
41707
  }
41415
41708
  }
41416
41709
  }
41417
- topPath = getGraphPath.call(this, graphPoints, true, true);
41710
+ var topPath = getGraphPath.call(this,
41711
+ graphPoints,
41712
+ true,
41713
+ true);
41418
41714
  bottomPoints.reversed = true;
41419
- bottomPath = getGraphPath.call(this, bottomPoints, true, true);
41715
+ var bottomPath = getGraphPath.call(this,
41716
+ bottomPoints,
41717
+ true,
41718
+ true);
41420
41719
  var firstBottomPoint = bottomPath[0];
41421
41720
  if (firstBottomPoint && firstBottomPoint[0] === 'M') {
41422
41721
  bottomPath[0] = ['L', firstBottomPoint[1], firstBottomPoint[2]];
41423
41722
  }
41424
- areaPath = topPath.concat(bottomPath);
41723
+ var areaPath = topPath.concat(bottomPath);
41425
41724
  if (areaPath.length) {
41426
41725
  areaPath.push(['Z']);
41427
41726
  }
41428
41727
  // TODO: don't set leftCliff and rightCliff when connectNulls?
41429
- graphPath = getGraphPath
41430
- .call(this, graphPoints, false, connectNulls);
41728
+ var graphPath = getGraphPath
41729
+ .call(this,
41730
+ graphPoints,
41731
+ false,
41732
+ connectNulls);
41431
41733
  areaPath.xMap = topPath.xMap;
41432
41734
  this.areaPath = areaPath;
41433
41735
  return graphPath;
@@ -41486,8 +41788,8 @@
41486
41788
  cliffName = direction === 1 ?
41487
41789
  'rightCliff' :
41488
41790
  'leftCliff',
41489
- cliff = 0,
41490
41791
  otherStack = stack[keys[idx + direction]];
41792
+ var cliff = 0;
41491
41793
  // If there is a stack next to this one,
41492
41794
  // to the left or to the right...
41493
41795
  if (otherStack) {
@@ -41594,7 +41896,7 @@
41594
41896
  * @sample {highcharts} highcharts/plotoptions/area-fillcolor-gradient/
41595
41897
  * Gradient
41596
41898
  *
41597
- * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
41899
+ * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
41598
41900
  * @product highcharts highstock
41599
41901
  * @apioption plotOptions.area.fillColor
41600
41902
  */
@@ -41631,7 +41933,7 @@
41631
41933
  * @sample {highcharts} highcharts/plotoptions/area-linecolor/
41632
41934
  * Dark gray line
41633
41935
  *
41634
- * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
41936
+ * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
41635
41937
  * @product highcharts highstock
41636
41938
  * @apioption plotOptions.area.lineColor
41637
41939
  */
@@ -41646,7 +41948,7 @@
41646
41948
  * @sample {highcharts} highcharts/css/series-negative-color/
41647
41949
  * Negative color in styled mode
41648
41950
  *
41649
- * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
41951
+ * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
41650
41952
  * @since 3.0
41651
41953
  * @product highcharts
41652
41954
  * @apioption plotOptions.area.negativeFillColor
@@ -41824,6 +42126,11 @@
41824
42126
  var LineSeries = SeriesRegistry.seriesTypes.line;
41825
42127
  var merge = U.merge,
41826
42128
  pick = U.pick;
42129
+ /* *
42130
+ *
42131
+ * Class
42132
+ *
42133
+ * */
41827
42134
  /**
41828
42135
  * Spline series type.
41829
42136
  *
@@ -41872,12 +42179,11 @@
41872
42179
  plotX = point.plotX || 0,
41873
42180
  plotY = point.plotY || 0,
41874
42181
  lastPoint = points[i - 1],
41875
- nextPoint = points[i + 1],
41876
- leftContX,
42182
+ nextPoint = points[i + 1];
42183
+ var leftContX,
41877
42184
  leftContY,
41878
42185
  rightContX,
41879
- rightContY,
41880
- ret;
42186
+ rightContY;
41881
42187
  /**
41882
42188
  * @private
41883
42189
  */
@@ -41893,8 +42199,8 @@
41893
42199
  var lastX = lastPoint.plotX || 0,
41894
42200
  lastY = lastPoint.plotY || 0,
41895
42201
  nextX = nextPoint.plotX || 0,
41896
- nextY = nextPoint.plotY || 0,
41897
- correction = 0;
42202
+ nextY = nextPoint.plotY || 0;
42203
+ var correction = 0;
41898
42204
  leftContX = (smoothing * plotX + lastX) / denom;
41899
42205
  leftContY = (smoothing * plotY + lastY) / denom;
41900
42206
  rightContX = (smoothing * plotX + nextX) / denom;
@@ -41980,15 +42286,19 @@
41980
42286
  .add();
41981
42287
  }
41982
42288
  // */
41983
- ret = [
41984
- 'C',
41985
- pick(lastPoint.rightContX, lastPoint.plotX, 0),
41986
- pick(lastPoint.rightContY, lastPoint.plotY, 0),
41987
- pick(leftContX, plotX, 0),
41988
- pick(leftContY, plotY, 0),
41989
- plotX,
41990
- plotY
41991
- ];
42289
+ var ret = [
42290
+ 'C',
42291
+ pick(lastPoint.rightContX,
42292
+ lastPoint.plotX, 0),
42293
+ pick(lastPoint.rightContY,
42294
+ lastPoint.plotY, 0),
42295
+ pick(leftContX,
42296
+ plotX, 0),
42297
+ pick(leftContY,
42298
+ plotY, 0),
42299
+ plotX,
42300
+ plotY
42301
+ ];
41992
42302
  // reset for updating series later
41993
42303
  lastPoint.rightContX = lastPoint.rightContY = void 0;
41994
42304
  return ret;
@@ -42093,7 +42403,7 @@
42093
42403
 
42094
42404
  return SplineSeries;
42095
42405
  });
42096
- _registerModule(_modules, 'Series/AreaSpline/AreaSplineSeries.js', [_modules['Series/Area/AreaSeries.js'], _modules['Series/Spline/SplineSeries.js'], _modules['Core/Legend/LegendSymbol.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (AreaSeries, SplineSeries, LegendSymbol, SeriesRegistry, U) {
42406
+ _registerModule(_modules, 'Series/AreaSpline/AreaSplineSeries.js', [_modules['Series/Spline/SplineSeries.js'], _modules['Core/Legend/LegendSymbol.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (SplineSeries, LegendSymbol, SeriesRegistry, U) {
42097
42407
  /* *
42098
42408
  *
42099
42409
  * (c) 2010-2021 Torstein Honsi
@@ -42119,7 +42429,9 @@
42119
42429
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
42120
42430
  };
42121
42431
  })();
42122
- var areaProto = AreaSeries.prototype;
42432
+ var _a = SeriesRegistry.seriesTypes,
42433
+ AreaSeries = _a.area,
42434
+ areaProto = _a.area.prototype;
42123
42435
  var extend = U.extend,
42124
42436
  merge = U.merge;
42125
42437
  /* *
@@ -42141,7 +42453,7 @@
42141
42453
  function AreaSplineSeries() {
42142
42454
  /* *
42143
42455
  *
42144
- * Static properties
42456
+ * Static Properties
42145
42457
  *
42146
42458
  * */
42147
42459
  var _this = _super !== null && _super.apply(this,
@@ -42156,40 +42468,6 @@
42156
42468
  _this.options = void 0;
42157
42469
  return _this;
42158
42470
  }
42159
- /**
42160
- * The area spline series is an area series where the graph between the
42161
- * points is smoothed into a spline.
42162
- *
42163
- * @sample {highcharts} highcharts/demo/areaspline/
42164
- * Area spline chart
42165
- * @sample {highstock} stock/demo/areaspline/
42166
- * Area spline chart
42167
- *
42168
- * @extends plotOptions.area
42169
- * @excluding step, boostThreshold, boostBlending
42170
- * @product highcharts highstock
42171
- * @apioption plotOptions.areaspline
42172
- */
42173
- /**
42174
- * @see [fillColor](#plotOptions.areaspline.fillColor)
42175
- * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)
42176
- *
42177
- * @apioption plotOptions.areaspline.color
42178
- */
42179
- /**
42180
- * @see [color](#plotOptions.areaspline.color)
42181
- * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)
42182
- *
42183
- * @apioption plotOptions.areaspline.fillColor
42184
- */
42185
- /**
42186
- * @see [color](#plotOptions.areaspline.color)
42187
- * @see [fillColor](#plotOptions.areaspline.fillColor)
42188
- *
42189
- * @default {highcharts} 0.75
42190
- * @default {highstock} 0.75
42191
- * @apioption plotOptions.areaspline.fillOpacity
42192
- */
42193
42471
  AreaSplineSeries.defaultOptions = merge(SplineSeries.defaultOptions, AreaSeries.defaultOptions);
42194
42472
  return AreaSplineSeries;
42195
42473
  }(SplineSeries));
@@ -42202,9 +42480,47 @@
42202
42480
  SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);
42203
42481
  /* *
42204
42482
  *
42205
- * Default export
42483
+ * Default Export
42484
+ *
42485
+ * */
42486
+ /* *
42487
+ *
42488
+ * API Options
42206
42489
  *
42207
42490
  * */
42491
+ /**
42492
+ * The area spline series is an area series where the graph between the
42493
+ * points is smoothed into a spline.
42494
+ *
42495
+ * @sample {highcharts} highcharts/demo/areaspline/
42496
+ * Area spline chart
42497
+ * @sample {highstock} stock/demo/areaspline/
42498
+ * Area spline chart
42499
+ *
42500
+ * @extends plotOptions.area
42501
+ * @excluding step, boostThreshold, boostBlending
42502
+ * @product highcharts highstock
42503
+ * @apioption plotOptions.areaspline
42504
+ */
42505
+ /**
42506
+ * @see [fillColor](#plotOptions.areaspline.fillColor)
42507
+ * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)
42508
+ *
42509
+ * @apioption plotOptions.areaspline.color
42510
+ */
42511
+ /**
42512
+ * @see [color](#plotOptions.areaspline.color)
42513
+ * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)
42514
+ *
42515
+ * @apioption plotOptions.areaspline.fillColor
42516
+ */
42517
+ /**
42518
+ * @see [color](#plotOptions.areaspline.color)
42519
+ * @see [fillColor](#plotOptions.areaspline.fillColor)
42520
+ *
42521
+ * @default 0.75
42522
+ * @apioption plotOptions.areaspline.fillOpacity
42523
+ */
42208
42524
  /**
42209
42525
  * A `areaspline` series. If the [type](#series.areaspline.type) option
42210
42526
  * is not specified, it is inherited from [chart.type](#chart.type).
@@ -42290,8 +42606,7 @@
42290
42606
  * @see [color](#series.areaspline.color)
42291
42607
  * @see [fillColor](#series.areaspline.fillColor)
42292
42608
  *
42293
- * @default {highcharts} 0.75
42294
- * @default {highstock} 0.75
42609
+ * @default 0.75
42295
42610
  * @apioption series.areaspline.fillOpacity
42296
42611
  */
42297
42612
  ''; // adds doclets above into transpilat
@@ -42600,8 +42915,9 @@
42600
42915
  var _this = this;
42601
42916
  var stacking = this.options.stacking;
42602
42917
  if (!point.isNull && metrics.columnCount > 1) {
42603
- var indexInCategory_1 = 0;
42604
- var totalInCategory_1 = 0;
42918
+ var reversedStacks_1 = this.yAxis.options.reversedStacks;
42919
+ var indexInCategory_1 = 0,
42920
+ totalInCategory_1 = reversedStacks_1 ? 0 : -metrics.columnCount;
42605
42921
  // Loop over all the stacks on the Y axis. When stacking is enabled,
42606
42922
  // these are real point stacks. When stacking is not enabled, but
42607
42923
  // `centerInCategory` is true, there is one stack handling the
@@ -42622,7 +42938,8 @@
42622
42938
  indexInCategory_1 = totalInCategory_1;
42623
42939
  }
42624
42940
  if (stackItem.hasValidPoints) {
42625
- totalInCategory_1++;
42941
+ reversedStacks_1 ? // #16169
42942
+ totalInCategory_1++ : totalInCategory_1--;
42626
42943
  }
42627
42944
  // If `stacking` is not enabled, look for the index
42628
42945
  // and total of the `group` stack.
@@ -43281,7 +43598,7 @@
43281
43598
  * @default #cccccc
43282
43599
  * @product highcharts highstock gantt
43283
43600
  */
43284
- color: "#cccccc" /* neutralColor20 */,
43601
+ color: "#cccccc" /* Palette.neutralColor20 */,
43285
43602
  /**
43286
43603
  * A specific border color for the selected point.
43287
43604
  *
@@ -43289,7 +43606,7 @@
43289
43606
  * @default #000000
43290
43607
  * @product highcharts highstock gantt
43291
43608
  */
43292
- borderColor: "#000000" /* neutralColor100 */
43609
+ borderColor: "#000000" /* Palette.neutralColor100 */
43293
43610
  }
43294
43611
  },
43295
43612
  dataLabels: {
@@ -43356,7 +43673,7 @@
43356
43673
  *
43357
43674
  * @private
43358
43675
  */
43359
- borderColor: "#ffffff" /* backgroundColor */
43676
+ borderColor: "#ffffff" /* Palette.backgroundColor */
43360
43677
  });
43361
43678
  return ColumnSeries;
43362
43679
  }(Series));
@@ -43602,17 +43919,18 @@
43602
43919
  inverted = this.isCartesian && chart.inverted,
43603
43920
  enabledDataSorting = this.enabledDataSorting,
43604
43921
  plotX = pick(point.dlBox && point.dlBox.centerX,
43605
- point.plotX, -9999),
43606
- plotY = pick(point.plotY, -9999),
43607
- bBox = dataLabel.getBBox(),
43922
+ point.plotX),
43923
+ plotY = point.plotY,
43608
43924
  rotation = options.rotation,
43609
43925
  align = options.align,
43610
- isInsidePlot = chart.isInsidePlot(plotX,
43926
+ isInsidePlot = defined(plotX) &&
43927
+ defined(plotY) &&
43928
+ chart.isInsidePlot(plotX,
43611
43929
  Math.round(plotY), {
43612
- inverted: inverted,
43613
- paneCoordinates: true,
43614
- series: series
43615
- }),
43930
+ inverted: inverted,
43931
+ paneCoordinates: true,
43932
+ series: series
43933
+ }),
43616
43934
  setStartPos = function (alignOptions) {
43617
43935
  if (enabledDataSorting && series.xAxis && !justify) {
43618
43936
  series.setDataLabelStartPos(point,
@@ -43623,8 +43941,6 @@
43623
43941
  }
43624
43942
  };
43625
43943
  var baseline,
43626
- normRotation,
43627
- negRotation,
43628
43944
  rotCorr, // rotation correction
43629
43945
  // Math.round for rounding errors (#2683), alignTo to allow column
43630
43946
  // labels (#2700)
@@ -43648,7 +43964,12 @@
43648
43964
  paneCoordinates: true,
43649
43965
  series: series
43650
43966
  })));
43651
- if (visible) {
43967
+ if (visible && defined(plotX) && defined(plotY)) {
43968
+ if (rotation) {
43969
+ dataLabel.attr({ align: align });
43970
+ }
43971
+ var bBox = dataLabel.getBBox(true),
43972
+ bBoxCorrection = [0, 0];
43652
43973
  baseline = chart.renderer.fontMetrics(chart.styledMode ? void 0 : options.style.fontSize, dataLabel).b;
43653
43974
  // The alignment box is a singular point
43654
43975
  alignTo = extend({
@@ -43677,27 +43998,12 @@
43677
43998
  { top: 0, middle: 0.5, bottom: 1 }[options.verticalAlign] *
43678
43999
  alignTo.height)
43679
44000
  };
44001
+ bBoxCorrection = [
44002
+ bBox.x - Number(dataLabel.attr('x')),
44003
+ bBox.y - Number(dataLabel.attr('y'))
44004
+ ];
43680
44005
  setStartPos(alignAttr); // data sorting
43681
- dataLabel[isNew ? 'attr' : 'animate'](alignAttr)
43682
- .attr({
43683
- align: align
43684
- });
43685
- // Compensate for the rotated label sticking out on the sides
43686
- normRotation = (rotation + 720) % 360;
43687
- negRotation = normRotation > 180 && normRotation < 360;
43688
- if (align === 'left') {
43689
- alignAttr.y -= negRotation ? bBox.height : 0;
43690
- }
43691
- else if (align === 'center') {
43692
- alignAttr.x -= bBox.width / 2;
43693
- alignAttr.y -= bBox.height / 2;
43694
- }
43695
- else if (align === 'right') {
43696
- alignAttr.x -= bBox.width;
43697
- alignAttr.y -= negRotation ? 0 : bBox.height;
43698
- }
43699
- dataLabel.placed = true;
43700
- dataLabel.alignAttr = alignAttr;
44006
+ dataLabel[isNew ? 'attr' : 'animate'](alignAttr);
43701
44007
  }
43702
44008
  else {
43703
44009
  setStartPos(alignTo); // data sorting
@@ -43710,12 +44016,37 @@
43710
44016
  // Now check that the data label is within the plot area
43711
44017
  }
43712
44018
  else if (pick(options.crop, true)) {
44019
+ var x = alignAttr.x,
44020
+ y = alignAttr.y;
44021
+ x += bBoxCorrection[0];
44022
+ y += bBoxCorrection[1];
44023
+ // Uncomment this block to visualize the bounding boxes used for
44024
+ // determining visibility
44025
+ /*
44026
+ chart.renderer.rect(
44027
+ chart.plotLeft + alignAttr.x + bBox.x,
44028
+ chart.plotTop + alignAttr.y + bBox.y + 9999,
44029
+ bBox.width,
44030
+ bBox.height
44031
+ ).attr({
44032
+ stroke: 'rgba(0, 0, 0, 0.3)',
44033
+ 'stroke-width': 0.5
44034
+ }).add();
44035
+ chart.renderer.circle(
44036
+ chart.plotLeft + alignAttr.x,
44037
+ chart.plotTop + alignAttr.y,
44038
+ 2
44039
+ ).attr({
44040
+ fill: 'red',
44041
+ zIndex: 20
44042
+ }).add();
44043
+ // */
43713
44044
  visible =
43714
- chart.isInsidePlot(alignAttr.x, alignAttr.y, {
44045
+ chart.isInsidePlot(x, y, {
43715
44046
  paneCoordinates: true,
43716
44047
  series: series
43717
44048
  }) &&
43718
- chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height, {
44049
+ chart.isInsidePlot(x + bBox.width, y + bBox.height, {
43719
44050
  paneCoordinates: true,
43720
44051
  series: series
43721
44052
  });
@@ -43739,9 +44070,12 @@
43739
44070
  }
43740
44071
  // Show or hide based on the final aligned position
43741
44072
  if (!visible && (!enabledDataSorting || justify)) {
43742
- dataLabel.hide(true);
44073
+ dataLabel.hide();
43743
44074
  dataLabel.placed = false; // don't animate back in
43744
44075
  }
44076
+ else {
44077
+ dataLabel.show();
44078
+ }
43745
44079
  }
43746
44080
  /**
43747
44081
  * Handle the dataLabels.filter option.
@@ -43818,7 +44152,7 @@
43818
44152
  var group = series.dataLabelsGroup;
43819
44153
  if (group) {
43820
44154
  if (series.visible) { // #2597, #3023, #3024
43821
- dataLabelsGroup.show(true);
44155
+ dataLabelsGroup.show();
43822
44156
  }
43823
44157
  group[seriesOptions.animation ? 'animate' : 'attr']({ opacity: 1 }, animationConfig);
43824
44158
  }
@@ -43850,10 +44184,10 @@
43850
44184
  rotation,
43851
44185
  attr,
43852
44186
  dataLabel = point.dataLabels ?
43853
- point.dataLabels[i] : point.dataLabel;
43854
- var labelDistance = pick(labelOptions.distance,
43855
- point.labelDistance),
44187
+ point.dataLabels[i] : point.dataLabel,
43856
44188
  isNew = !dataLabel;
44189
+ var labelDistance = pick(labelOptions.distance,
44190
+ point.labelDistance);
43857
44191
  if (labelEnabled) {
43858
44192
  // Create individual options structure that can be
43859
44193
  // extended without affecting others
@@ -43867,7 +44201,7 @@
43867
44201
  rotation = labelOptions.rotation;
43868
44202
  if (!chart.styledMode) {
43869
44203
  // Determine the color
43870
- style.color = pick(labelOptions.color, style.color, series.color, "#000000" /* neutralColor100 */);
44204
+ style.color = pick(labelOptions.color, style.color, series.color, "#000000" /* Palette.neutralColor100 */);
43871
44205
  // Get automated contrast color
43872
44206
  if (style.color === 'contrast') {
43873
44207
  point.contrastColor = renderer.getContrast((point.color || series.color));
@@ -43876,7 +44210,7 @@
43876
44210
  labelDistance < 0 ||
43877
44211
  !!seriesOptions.stacking ?
43878
44212
  point.contrastColor :
43879
- "#000000" /* neutralColor100 */;
44213
+ "#000000" /* Palette.neutralColor100 */;
43880
44214
  }
43881
44215
  else {
43882
44216
  delete point.contrastColor;
@@ -43907,7 +44241,15 @@
43907
44241
  // #820
43908
44242
  if (dataLabel && (!labelEnabled ||
43909
44243
  !defined(labelText) ||
43910
- !!dataLabel.div !== !!labelOptions.useHTML)) {
44244
+ !!dataLabel.div !== !!labelOptions.useHTML ||
44245
+ (
44246
+ // Change from no rotation to rotation and
44247
+ // vice versa. Don't use defined() because
44248
+ // rotation = 0 means also rotation = undefined
44249
+ (!dataLabel.rotation ||
44250
+ !labelOptions.rotation) &&
44251
+ dataLabel.rotation !== labelOptions.rotation))) {
44252
+ isNew = true;
43911
44253
  point.dataLabel = dataLabel =
43912
44254
  point.dataLabel && point.dataLabel.destroy();
43913
44255
  if (point.dataLabels) {
@@ -43945,10 +44287,10 @@
43945
44287
  point.dataLabels = point.dataLabels || [];
43946
44288
  dataLabel = point.dataLabels[i] = rotation ?
43947
44289
  // Labels don't rotate, use text element
43948
- renderer.text(labelText, 0, -9999, labelOptions.useHTML)
44290
+ renderer.text(labelText, 0, 0, labelOptions.useHTML)
43949
44291
  .addClass('highcharts-data-label') :
43950
44292
  // We can use label
43951
- renderer.label(labelText, 0, -9999, labelOptions.shape, null, null, labelOptions.useHTML, null, 'data-label');
44293
+ renderer.label(labelText, 0, 0, labelOptions.shape, null, null, labelOptions.useHTML, null, 'data-label');
43952
44294
  // Store for backwards compatibility
43953
44295
  if (!i) {
43954
44296
  point.dataLabel = dataLabel;
@@ -43989,6 +44331,9 @@
43989
44331
  // we need to align it
43990
44332
  series.alignDataLabel(point, dataLabel, labelOptions, null, isNew);
43991
44333
  }
44334
+ else if (dataLabel) {
44335
+ dataLabel.hide();
44336
+ }
43992
44337
  });
43993
44338
  });
43994
44339
  }
@@ -44466,7 +44811,7 @@
44466
44811
 
44467
44812
  return BarSeries;
44468
44813
  });
44469
- _registerModule(_modules, 'Series/Scatter/ScatterSeries.js', [_modules['Series/Column/ColumnSeries.js'], _modules['Series/Line/LineSeries.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (ColumnSeries, LineSeries, SeriesRegistry, U) {
44814
+ _registerModule(_modules, 'Series/Scatter/ScatterSeries.js', [_modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (SeriesRegistry, U) {
44470
44815
  /* *
44471
44816
  *
44472
44817
  * (c) 2010-2021 Torstein Honsi
@@ -44492,6 +44837,9 @@
44492
44837
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
44493
44838
  };
44494
44839
  })();
44840
+ var _a = SeriesRegistry.seriesTypes,
44841
+ ColumnSeries = _a.column,
44842
+ LineSeries = _a.line;
44495
44843
  var addEvent = U.addEvent,
44496
44844
  extend = U.extend,
44497
44845
  merge = U.merge;
@@ -44508,6 +44856,11 @@
44508
44856
  var ScatterSeries = /** @class */ (function (_super) {
44509
44857
  __extends(ScatterSeries, _super);
44510
44858
  function ScatterSeries() {
44859
+ /* *
44860
+ *
44861
+ * Static Properties
44862
+ *
44863
+ * */
44511
44864
  var _this = _super !== null && _super.apply(this,
44512
44865
  arguments) || this;
44513
44866
  /* *
@@ -44575,7 +44928,6 @@
44575
44928
  };
44576
44929
  /**
44577
44930
  * @private
44578
- * @function Highcharts.seriesTypes.scatter#drawGraph
44579
44931
  */
44580
44932
  ScatterSeries.prototype.drawGraph = function () {
44581
44933
  if (this.options.lineWidth) {
@@ -44661,7 +45013,7 @@
44661
45013
  *
44662
45014
  * @type {boolean}
44663
45015
  * @default false
44664
- * @product highcharts highstock
45016
+ * @product highcharts highstock highmaps
44665
45017
  * @apioption plotOptions.scatter.stickyTracking
44666
45018
  */
44667
45019
  /**
@@ -44778,7 +45130,7 @@
44778
45130
  * @product highcharts highstock
44779
45131
  * @apioption series.scatter.data
44780
45132
  */
44781
- ''; // adds doclets above to transpilat
45133
+ ''; // keeps doclets above in JS file
44782
45134
 
44783
45135
  return ScatterSeries;
44784
45136
  });
@@ -44793,7 +45145,8 @@
44793
45145
  *
44794
45146
  * */
44795
45147
  var deg2rad = H.deg2rad;
44796
- var isNumber = U.isNumber,
45148
+ var fireEvent = U.fireEvent,
45149
+ isNumber = U.isNumber,
44797
45150
  pick = U.pick,
44798
45151
  relativeLength = U.relativeLength;
44799
45152
  /**
@@ -44827,7 +45180,8 @@
44827
45180
  plotHeight = chart.plotHeight - 2 * slicingRoom,
44828
45181
  centerOption = options.center,
44829
45182
  smallestSize = Math.min(plotWidth,
44830
- plotHeight);
45183
+ plotHeight),
45184
+ thickness = options.thickness;
44831
45185
  var handleSlicingRoom,
44832
45186
  size = options.size,
44833
45187
  innerSize = options.innerSize || 0,
@@ -44864,6 +45218,12 @@
44864
45218
  if (positions[3] > positions[2]) {
44865
45219
  positions[3] = positions[2];
44866
45220
  }
45221
+ // thickness overrides innerSize, need to be less than pie size (#6647)
45222
+ if (isNumber(thickness) &&
45223
+ thickness * 2 < positions[2] && thickness > 0) {
45224
+ positions[3] = positions[2] - thickness * 2;
45225
+ }
45226
+ fireEvent(this, 'afterGetCenter', { positions: positions });
44867
45227
  return positions;
44868
45228
  }
44869
45229
  CenteredUtilities.getCenter = getCenter;
@@ -45051,12 +45411,19 @@
45051
45411
  return isNumber(this.y) && this.y >= 0;
45052
45412
  };
45053
45413
  /**
45054
- * Toggle the visibility of the pie slice.
45055
- * @private
45414
+ * Toggle the visibility of a pie slice or other data point. Note that this
45415
+ * method is available only for some series, like pie, treemap and sunburst.
45416
+ *
45417
+ * @function Highcharts.Point#setVisible
45418
+ *
45419
+ * @param {boolean} [vis]
45420
+ * True to show the pie slice or other data point, false to hide. If
45421
+ * undefined, the visibility is toggled.
45422
+ *
45423
+ * @param {boolean} [redraw] Whether to redraw the chart after the point is
45424
+ * altered. If doing more operations on the chart, it is a good idea to set
45425
+ * redraw to false and call {@link Chart#redraw|chart.redraw()} after.
45056
45426
  *
45057
- * @param {boolean} vis
45058
- * Whether to show the slice or not. If undefined, the visibility is
45059
- * toggled.
45060
45427
  */
45061
45428
  PiePoint.prototype.setVisible = function (vis, redraw) {
45062
45429
  var _this = this;
@@ -45360,7 +45727,7 @@
45360
45727
  this.graph.attr({
45361
45728
  'stroke-width': options.borderWidth,
45362
45729
  fill: options.fillColor || 'none',
45363
- stroke: options.color || "#cccccc" /* neutralColor20 */
45730
+ stroke: options.color || "#cccccc" /* Palette.neutralColor20 */
45364
45731
  });
45365
45732
  }
45366
45733
  }
@@ -45517,6 +45884,7 @@
45517
45884
  * @private
45518
45885
  */
45519
45886
  PieSeries.prototype.translate = function (positions) {
45887
+ fireEvent(this, 'translate');
45520
45888
  this.generatePoints();
45521
45889
  var series = this,
45522
45890
  precision = 1000, // issue #172
@@ -45686,7 +46054,7 @@
45686
46054
  * pointPlacement, pointStart, softThreshold, stacking, step,
45687
46055
  * threshold, turboThreshold, zoneAxis, zones, dataSorting,
45688
46056
  * boostBlending
45689
- * @product highcharts
46057
+ * @product highcharts highmaps
45690
46058
  * @optionparent plotOptions.pie
45691
46059
  */
45692
46060
  PieSeries.defaultOptions = merge(Series.defaultOptions, {
@@ -45706,7 +46074,7 @@
45706
46074
  *
45707
46075
  * @type {Function}
45708
46076
  * @since 1.2.0
45709
- * @product highcharts
46077
+ * @product highcharts highmaps
45710
46078
  * @context Highcharts.Point
45711
46079
  * @apioption plotOptions.pie.events.checkboxClick
45712
46080
  */
@@ -45722,7 +46090,7 @@
45722
46090
  *
45723
46091
  * @type {Highcharts.PointLegendItemClickCallbackFunction}
45724
46092
  * @since 1.2.0
45725
- * @product highcharts
46093
+ * @product highcharts highmaps
45726
46094
  * @apioption plotOptions.pie.point.events.legendItemClick
45727
46095
  */
45728
46096
  /**
@@ -45738,7 +46106,7 @@
45738
46106
  *
45739
46107
  * @type {Array<(number|string|null),(number|string|null)>}
45740
46108
  * @default [null, null]
45741
- * @product highcharts
46109
+ * @product highcharts highmaps
45742
46110
  *
45743
46111
  * @private
45744
46112
  */
@@ -45783,7 +46151,7 @@
45783
46151
  *
45784
46152
  * @type {Array<Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject>}
45785
46153
  * @since 3.0
45786
- * @product highcharts
46154
+ * @product highcharts highmaps
45787
46155
  * @apioption plotOptions.pie.colors
45788
46156
  */
45789
46157
  /**
@@ -45810,7 +46178,7 @@
45810
46178
  *
45811
46179
  * @type {string}
45812
46180
  * @since 7.0.0
45813
- * @product highcharts
46181
+ * @product highcharts highmaps
45814
46182
  * @apioption plotOptions.pie.dataLabels.alignTo
45815
46183
  */
45816
46184
  allowOverlap: true,
@@ -45828,7 +46196,7 @@
45828
46196
  *
45829
46197
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
45830
46198
  * @since 2.1
45831
- * @product highcharts
46199
+ * @product highcharts highmaps
45832
46200
  * @apioption plotOptions.pie.dataLabels.connectorColor
45833
46201
  */
45834
46202
  /**
@@ -45840,7 +46208,7 @@
45840
46208
  * No padding
45841
46209
  *
45842
46210
  * @since 2.1
45843
- * @product highcharts
46211
+ * @product highcharts highmaps
45844
46212
  */
45845
46213
  connectorPadding: 5,
45846
46214
  /**
@@ -45877,7 +46245,7 @@
45877
46245
  *
45878
46246
  * @type {string|Function}
45879
46247
  * @since 7.0.0
45880
- * @product highcharts
46248
+ * @product highcharts highmaps
45881
46249
  */
45882
46250
  connectorShape: 'fixedOffset',
45883
46251
  /**
@@ -45894,7 +46262,7 @@
45894
46262
  * @type {number}
45895
46263
  * @default 1
45896
46264
  * @since 2.1
45897
- * @product highcharts
46265
+ * @product highcharts highmaps
45898
46266
  * @apioption plotOptions.pie.dataLabels.connectorWidth
45899
46267
  */
45900
46268
  /**
@@ -45906,7 +46274,7 @@
45906
46274
  * crookDistance set to 90%
45907
46275
  *
45908
46276
  * @since 7.0.0
45909
- * @product highcharts
46277
+ * @product highcharts highmaps
45910
46278
  */
45911
46279
  crookDistance: '70%',
45912
46280
  /**
@@ -45920,7 +46288,7 @@
45920
46288
  *
45921
46289
  * @type {number|string}
45922
46290
  * @since 2.1
45923
- * @product highcharts
46291
+ * @product highcharts highmaps
45924
46292
  */
45925
46293
  distance: 30,
45926
46294
  enabled: true,
@@ -45961,7 +46329,7 @@
45961
46329
  * Non soft
45962
46330
  *
45963
46331
  * @since 2.1.7
45964
- * @product highcharts
46332
+ * @product highcharts highmaps
45965
46333
  */
45966
46334
  softConnector: true,
45967
46335
  /**
@@ -45997,9 +46365,20 @@
45997
46365
  *
45998
46366
  * @type {number}
45999
46367
  * @since 1.3.6
46000
- * @product highcharts
46368
+ * @product highcharts highmaps
46001
46369
  * @apioption plotOptions.pie.endAngle
46002
46370
  */
46371
+ /**
46372
+ * Thickness describing the ring size for a donut type chart,
46373
+ * overriding [innerSize](#plotOptions.pie.innerSize).
46374
+ *
46375
+ * @type {number}
46376
+ * @default undefined
46377
+ * @product highcharts
46378
+ * @since 10.1.0
46379
+ * @apioption plotOptions.pie.thickness
46380
+ * @private
46381
+ */
46003
46382
  /**
46004
46383
  * Equivalent to [chart.ignoreHiddenSeries](#chart.ignoreHiddenSeries),
46005
46384
  * this option tells whether the series shall be redrawn as if the
@@ -46012,7 +46391,7 @@
46012
46391
  * True, the hiddden point is ignored
46013
46392
  *
46014
46393
  * @since 2.3.0
46015
- * @product highcharts
46394
+ * @product highcharts highmaps
46016
46395
  *
46017
46396
  * @private
46018
46397
  */
@@ -46027,7 +46406,7 @@
46027
46406
  * The size of the inner diameter for the pie. A size greater than 0
46028
46407
  * renders a donut chart. Can be a percentage or pixel value.
46029
46408
  * Percentages are relative to the pie size. Pixel values are given as
46030
- * integers.
46409
+ * integers. Setting overridden by thickness.
46031
46410
  *
46032
46411
  *
46033
46412
  * Note: in Highcharts < 4.1.2, the percentage was relative to the plot
@@ -46043,7 +46422,7 @@
46043
46422
  * @type {number|string}
46044
46423
  * @default 0
46045
46424
  * @since 2.0
46046
- * @product highcharts
46425
+ * @product highcharts highmaps
46047
46426
  * @apioption plotOptions.pie.innerSize
46048
46427
  */
46049
46428
  /**
@@ -46066,7 +46445,7 @@
46066
46445
  * @type {number|string}
46067
46446
  * @default 80
46068
46447
  * @since 3.0
46069
- * @product highcharts
46448
+ * @product highcharts highmaps
46070
46449
  * @apioption plotOptions.pie.minSize
46071
46450
  */
46072
46451
  /**
@@ -46083,7 +46462,7 @@
46083
46462
  * Smaller pie
46084
46463
  *
46085
46464
  * @type {number|string|null}
46086
- * @product highcharts
46465
+ * @product highcharts highmaps
46087
46466
  *
46088
46467
  * @private
46089
46468
  */
@@ -46095,7 +46474,7 @@
46095
46474
  * @sample {highcharts} highcharts/plotoptions/series-showinlegend/
46096
46475
  * One series in the legend, one hidden
46097
46476
  *
46098
- * @product highcharts
46477
+ * @product highcharts highmaps
46099
46478
  *
46100
46479
  * @private
46101
46480
  */
@@ -46107,7 +46486,7 @@
46107
46486
  * @sample {highcharts} highcharts/plotoptions/pie-slicedoffset-20/
46108
46487
  * 20px offset
46109
46488
  *
46110
- * @product highcharts
46489
+ * @product highcharts highmaps
46111
46490
  *
46112
46491
  * @private
46113
46492
  */
@@ -46122,7 +46501,7 @@
46122
46501
  * @type {number}
46123
46502
  * @default 0
46124
46503
  * @since 2.3.4
46125
- * @product highcharts
46504
+ * @product highcharts highmaps
46126
46505
  * @apioption plotOptions.pie.startAngle
46127
46506
  */
46128
46507
  /**
@@ -46134,7 +46513,7 @@
46134
46513
  * `stickyTracking` is false and `tooltip.shared` is false, the tooltip
46135
46514
  * will be hidden when moving the mouse between series.
46136
46515
  *
46137
- * @product highcharts
46516
+ * @product highcharts highmaps
46138
46517
  *
46139
46518
  * @private
46140
46519
  */
@@ -46156,11 +46535,11 @@
46156
46535
  *
46157
46536
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
46158
46537
  * @default #ffffff
46159
- * @product highcharts
46538
+ * @product highcharts highmaps
46160
46539
  *
46161
46540
  * @private
46162
46541
  */
46163
- borderColor: "#ffffff" /* backgroundColor */,
46542
+ borderColor: "#ffffff" /* Palette.backgroundColor */,
46164
46543
  /**
46165
46544
  * The width of the border surrounding each slice.
46166
46545
  *
@@ -46175,7 +46554,7 @@
46175
46554
  * @sample {highcharts} highcharts/plotoptions/pie-borderwidth/
46176
46555
  * 3px border
46177
46556
  *
46178
- * @product highcharts
46557
+ * @product highcharts highmaps
46179
46558
  *
46180
46559
  * @private
46181
46560
  */
@@ -46189,7 +46568,7 @@
46189
46568
  /**
46190
46569
  * @extends plotOptions.series.states.hover
46191
46570
  * @excluding marker, lineWidth, lineWidthPlus
46192
- * @product highcharts
46571
+ * @product highcharts highmaps
46193
46572
  */
46194
46573
  hover: {
46195
46574
  /**
@@ -46203,7 +46582,7 @@
46203
46582
  * @sample {highcharts} highcharts/plotoptions/pie-states-hover-brightness/
46204
46583
  * Brightened by 0.5
46205
46584
  *
46206
- * @product highcharts
46585
+ * @product highcharts highmaps
46207
46586
  */
46208
46587
  brightness: 0.1
46209
46588
  }
@@ -46245,7 +46624,7 @@
46245
46624
  * @extends series,plotOptions.pie
46246
46625
  * @excluding cropThreshold, dataParser, dataURL, stack, xAxis, yAxis,
46247
46626
  * dataSorting, step, boostThreshold, boostBlending
46248
- * @product highcharts
46627
+ * @product highcharts highmaps
46249
46628
  * @apioption series.pie
46250
46629
  */
46251
46630
  /**
@@ -46289,19 +46668,19 @@
46289
46668
  * @type {Array<number|Array<string,(number|null)>|null|*>}
46290
46669
  * @extends series.line.data
46291
46670
  * @excluding marker, x
46292
- * @product highcharts
46671
+ * @product highcharts highmaps
46293
46672
  * @apioption series.pie.data
46294
46673
  */
46295
46674
  /**
46296
46675
  * @type {Highcharts.SeriesPieDataLabelsOptionsObject}
46297
- * @product highcharts
46676
+ * @product highcharts highmaps
46298
46677
  * @apioption series.pie.data.dataLabels
46299
46678
  */
46300
46679
  /**
46301
46680
  * The sequential index of the data point in the legend.
46302
46681
  *
46303
46682
  * @type {number}
46304
- * @product highcharts
46683
+ * @product highcharts highmaps
46305
46684
  * @apioption series.pie.data.legendIndex
46306
46685
  */
46307
46686
  /**
@@ -46311,18 +46690,18 @@
46311
46690
  * One sliced point
46312
46691
  *
46313
46692
  * @type {boolean}
46314
- * @product highcharts
46693
+ * @product highcharts highmaps
46315
46694
  * @apioption series.pie.data.sliced
46316
46695
  */
46317
46696
  /**
46318
46697
  * @extends plotOptions.pie.dataLabels
46319
46698
  * @excluding align, allowOverlap, inside, staggerLines, step
46320
- * @product highcharts
46699
+ * @product highcharts highmaps
46321
46700
  * @apioption series.pie.dataLabels
46322
46701
  */
46323
46702
  /**
46324
46703
  * @excluding legendItemClick
46325
- * @product highcharts
46704
+ * @product highcharts highmaps
46326
46705
  * @apioption series.pie.events
46327
46706
  */
46328
46707
  ''; // placeholder for transpiled doclets above
@@ -46691,7 +47070,7 @@
46691
47070
  'stroke-width': connectorWidth,
46692
47071
  'stroke': (pointDataLabelsOptions.connectorColor ||
46693
47072
  point.color ||
46694
- "#666666" /* neutralColor60 */)
47073
+ "#666666" /* Palette.neutralColor60 */)
46695
47074
  });
46696
47075
  }
46697
47076
  }
@@ -46789,7 +47168,9 @@
46789
47168
  if (newSize < center[2]) {
46790
47169
  center[2] = newSize;
46791
47170
  center[3] = Math.min(// #3632
46792
- relativeLength(options.innerSize || 0, newSize), newSize);
47171
+ options.thickness ?
47172
+ Math.max(0, newSize - options.thickness * 2) :
47173
+ Math.max(0, relativeLength(options.innerSize || 0, newSize)), newSize); // #6647
46793
47174
  this.translate(center);
46794
47175
  if (this.drawDataLabels) {
46795
47176
  this.drawDataLabels();
@@ -46852,9 +47233,7 @@
46852
47233
  !yAxis.options.stackLabels.allowOverlap) {
46853
47234
  objectEach(yAxis.stacking.stacks, function (stack) {
46854
47235
  objectEach(stack, function (stackItem) {
46855
- if (stackItem.label &&
46856
- stackItem.label.visibility !== 'hidden' // #15607
46857
- ) {
47236
+ if (stackItem.label) {
46858
47237
  labels.push(stackItem.label);
46859
47238
  }
46860
47239
  });
@@ -46998,7 +47377,10 @@
46998
47377
  box2 &&
46999
47378
  label1 !== label2 && // #6465, polar chart with connectEnds
47000
47379
  label1.newOpacity !== 0 &&
47001
- label2.newOpacity !== 0) {
47380
+ label2.newOpacity !== 0 &&
47381
+ // #15863 dataLabels are no longer hidden by translation
47382
+ label1.visibility !== 'hidden' &&
47383
+ label2.visibility !== 'hidden') {
47002
47384
  if (isIntersectRect(box1, box2)) {
47003
47385
  (label1.labelrank < label2.labelrank ? label1 : label2)
47004
47386
  .newOpacity = 0;