highcharts 13.0.2 → 13.1.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 (1166) hide show
  1. package/bower.json +1 -1
  2. package/css/highcharts.css +6 -2
  3. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +10 -6
  4. package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +2 -1
  5. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +25 -1
  6. package/es-modules/Accessibility/KeyboardNavigation.js +1 -1
  7. package/es-modules/Accessibility/Utils/HTMLUtilities.js +13 -3
  8. package/es-modules/Core/Animation/AnimationUtilities.js +7 -2
  9. package/es-modules/Core/Animation/Fx.js +1 -0
  10. package/es-modules/Core/Axis/Axis.js +181 -211
  11. package/es-modules/Core/Axis/Axis3DComposition.js +13 -15
  12. package/es-modules/Core/Axis/AxisDefaults.js +9 -8
  13. package/es-modules/Core/Axis/BrokenAxis.js +5 -4
  14. package/es-modules/Core/Axis/Color/ColorAxis.js +66 -54
  15. package/es-modules/Core/Axis/Color/ColorAxisComposition.js +3 -0
  16. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +6 -4
  17. package/es-modules/Core/Axis/DateTimeAxis.js +4 -3
  18. package/es-modules/Core/Axis/GridAxis.js +17 -13
  19. package/es-modules/Core/Axis/LogarithmicAxis.js +4 -3
  20. package/es-modules/Core/Axis/NavigatorAxisComposition.js +3 -4
  21. package/es-modules/Core/Axis/OrdinalAxis.js +0 -15
  22. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +135 -72
  23. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +72 -124
  24. package/es-modules/Core/Axis/RadialAxis.js +50 -7
  25. package/es-modules/Core/Axis/ScrollbarAxis.js +3 -0
  26. package/es-modules/Core/Axis/Stacking/StackItem.js +49 -75
  27. package/es-modules/Core/Axis/Stacking/StackingAxis.js +34 -22
  28. package/es-modules/Core/Axis/Tick.js +95 -92
  29. package/es-modules/Core/Axis/TreeGrid/TreeGridAxis.js +9 -13
  30. package/es-modules/Core/Axis/WaterfallAxis.js +1 -1
  31. package/es-modules/Core/Chart/Chart.js +13 -4
  32. package/es-modules/Core/Chart/StockChart.js +20 -26
  33. package/es-modules/Core/Defaults.js +18 -0
  34. package/es-modules/Core/Globals.js +9 -7
  35. package/es-modules/Core/Pointer.js +7 -8
  36. package/es-modules/Core/Renderer/HTML/AST.js +18 -11
  37. package/es-modules/Core/Renderer/HTML/HTMLElement.js +5 -1
  38. package/es-modules/Core/Renderer/SVG/SVGElement.js +1 -0
  39. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +1 -1
  40. package/es-modules/Core/Renderer/SVG/Symbols.js +1 -1
  41. package/es-modules/Core/Renderer/SVG/TextBuilder.js +6 -2
  42. package/es-modules/Core/Series/OverlappingDataLabels.js +41 -32
  43. package/es-modules/Core/Series/Point.js +14 -11
  44. package/es-modules/Core/Series/Series.js +21 -10
  45. package/es-modules/Core/Tooltip.js +35 -40
  46. package/es-modules/Data/DataCursor.js +3 -2
  47. package/es-modules/Data/DataTable.js +21 -2
  48. package/es-modules/Data/DataTableCore.js +28 -4
  49. package/es-modules/Data/Formula/FormulaParser.js +30 -10
  50. package/es-modules/Extensions/Annotations/Annotation.js +5 -7
  51. package/es-modules/Extensions/Annotations/AnnotationChart.js +2 -1
  52. package/es-modules/Extensions/Boost/BoostSeries.js +4 -13
  53. package/es-modules/Extensions/Breadcrumbs/Breadcrumbs.js +6 -4
  54. package/es-modules/Extensions/Breadcrumbs/BreadcrumbsDefaults.js +1 -1
  55. package/es-modules/Extensions/Data.js +4 -2
  56. package/es-modules/Extensions/DragPanes/DragPanes.js +6 -9
  57. package/es-modules/Extensions/Drilldown/Drilldown.js +9 -4
  58. package/es-modules/Extensions/ExportData/ExportData.js +24 -4
  59. package/es-modules/Extensions/Pane/Pane.js +1 -1
  60. package/es-modules/Extensions/ParallelCoordinates/ParallelAxis.js +5 -4
  61. package/es-modules/Extensions/StaticScale.js +13 -11
  62. package/es-modules/Series/Area/AreaSeriesDefaults.js +1 -1
  63. package/es-modules/Series/AreaRange/AreaRangeSeriesDefaults.js +1 -1
  64. package/es-modules/Series/AreaSpline/AreaSplineSeries.js +1 -1
  65. package/es-modules/Series/AreaSplineRange/AreaSplineRangeSeries.js +1 -1
  66. package/es-modules/Series/Bar/BarSeries.js +1 -1
  67. package/es-modules/Series/Bellcurve/BellcurveSeriesDefaults.js +1 -1
  68. package/es-modules/Series/BoxPlot/BoxPlotSeriesDefaults.js +1 -1
  69. package/es-modules/Series/Bubble/BubbleSeries.js +1 -1
  70. package/es-modules/Series/Bullet/BulletSeriesDefaults.js +1 -1
  71. package/es-modules/Series/Candlestick/CandlestickSeriesDefaults.js +1 -1
  72. package/es-modules/Series/Column/ColumnSeriesDefaults.js +6 -3
  73. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js +2 -3
  74. package/es-modules/Series/ColumnRange/ColumnRangeSeriesDefaults.js +1 -1
  75. package/es-modules/Series/Contour/ContourSeriesDefaults.js +12 -14
  76. package/es-modules/Series/ErrorBar/ErrorBarSeriesDefaults.js +1 -1
  77. package/es-modules/Series/Flags/FlagsPoint.js +4 -2
  78. package/es-modules/Series/Flags/FlagsPointOptions.js +12 -0
  79. package/es-modules/Series/Flags/FlagsSeries.js +8 -7
  80. package/es-modules/Series/Flags/FlagsSeriesDefaults.js +7 -7
  81. package/es-modules/Series/Flags/FlagsSeriesOptions.js +12 -0
  82. package/es-modules/Series/Flags/FlagsSymbols.js +5 -3
  83. package/es-modules/Series/Funnel/FunnelSeriesDefaults.js +1 -1
  84. package/es-modules/Series/Gauge/GaugeSeries.js +1 -1
  85. package/es-modules/Series/GeoHeatmap/GeoHeatmapSeries.js +1 -1
  86. package/es-modules/Series/HLC/HLCSeriesDefaults.js +1 -7
  87. package/es-modules/Series/Heatmap/HeatmapSeriesDefaults.js +1 -1
  88. package/es-modules/Series/HeikinAshi/HeikinAshiSeriesDefaults.js +1 -1
  89. package/es-modules/Series/Histogram/HistogramSeriesDefaults.js +1 -1
  90. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +1 -1
  91. package/es-modules/Series/Item/ItemSeriesDefaults.js +1 -1
  92. package/es-modules/Series/Line/LineSeries.js +0 -1
  93. package/es-modules/Series/Map/MapSeriesDefaults.js +1 -1
  94. package/es-modules/Series/MapBubble/MapBubbleSeries.js +0 -1
  95. package/es-modules/Series/MapLine/MapLineSeriesDefaults.js +1 -1
  96. package/es-modules/Series/MapPoint/MapPointSeriesDefaults.js +0 -1
  97. package/es-modules/Series/Networkgraph/ReingoldFruchtermanLayout.js +5 -5
  98. package/es-modules/Series/OHLC/OHLCSeriesDefaults.js +0 -1
  99. package/es-modules/Series/PackedBubble/PackedBubbleChart.js +18 -0
  100. package/es-modules/Series/PackedBubble/PackedBubbleDataLabelOptions.js +12 -0
  101. package/es-modules/Series/PackedBubble/PackedBubbleIntegration.js +3 -3
  102. package/es-modules/Series/PackedBubble/PackedBubbleLayout.js +2 -2
  103. package/es-modules/Series/PackedBubble/PackedBubblePoint.js +1 -1
  104. package/es-modules/Series/PackedBubble/PackedBubblePointOptions.js +12 -0
  105. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +20 -20
  106. package/es-modules/Series/PackedBubble/PackedBubbleSeriesDefaults.js +2 -2
  107. package/es-modules/Series/PackedBubble/PackedBubbleSeriesOptions.js +12 -0
  108. package/es-modules/Series/ParetoSeries/ParetoPoint.js +17 -0
  109. package/es-modules/Series/ParetoSeries/ParetoPointOptions.js +12 -0
  110. package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -3
  111. package/es-modules/Series/ParetoSeries/ParetoSeriesDefaults.js +1 -1
  112. package/es-modules/Series/ParetoSeries/ParetoSeriesOptions.js +12 -0
  113. package/es-modules/Series/PathUtilities.js +3 -1
  114. package/es-modules/Series/Pictorial/PictorialPointOptions.js +12 -0
  115. package/es-modules/Series/Pictorial/PictorialSeries.js +5 -25
  116. package/es-modules/Series/Pictorial/PictorialSeriesDefaults.js +45 -0
  117. package/es-modules/Series/Pictorial/PictorialSeriesOptions.js +12 -0
  118. package/es-modules/Series/Pie/PieSeriesDefaults.js +1 -1
  119. package/es-modules/Series/Pie3D/Pie3DPoint.js +1 -1
  120. package/es-modules/Series/Pie3D/Pie3DSeries.js +6 -6
  121. package/es-modules/Series/PolarComposition.js +22 -21
  122. package/es-modules/Series/Polygon/PolygonPoint.js +17 -0
  123. package/es-modules/Series/Polygon/PolygonPointOptions.js +12 -0
  124. package/es-modules/Series/Polygon/PolygonSeriesDefaults.js +1 -1
  125. package/es-modules/Series/Polygon/PolygonSeriesOptions.js +12 -0
  126. package/es-modules/Series/Pyramid/PyramidPoint.js +19 -0
  127. package/es-modules/Series/Pyramid/PyramidPointOptions.js +14 -0
  128. package/es-modules/Series/Pyramid/PyramidSeries.js +1 -1
  129. package/es-modules/Series/Pyramid/PyramidSeriesDefaults.js +1 -1
  130. package/es-modules/Series/Pyramid/PyramidSeriesOptions.js +14 -0
  131. package/es-modules/Series/Pyramid3D/Pyramid3DPoint.js +19 -0
  132. package/es-modules/Series/Pyramid3D/Pyramid3DPointOptions.js +14 -0
  133. package/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +1 -1
  134. package/es-modules/Series/Pyramid3D/Pyramid3DSeriesOptions.js +14 -0
  135. package/es-modules/Series/Renko/RenkoSeriesDefaults.js +1 -2
  136. package/es-modules/Series/Sankey/SankeySeriesDefaults.js +6 -7
  137. package/es-modules/Series/Scatter/ScatterSeriesDefaults.js +1 -1
  138. package/es-modules/Series/SolidGauge/SolidGaugeSeriesDefaults.js +1 -1
  139. package/es-modules/Series/Spline/SplineSeries.js +1 -1
  140. package/es-modules/Series/Streamgraph/StreamgraphSeriesDefaults.js +1 -1
  141. package/es-modules/Series/Sunburst/SunburstSeriesDefaults.js +1 -1
  142. package/es-modules/Series/TiledWebMap/TiledWebMapSeriesDefaults.js +2 -2
  143. package/es-modules/Series/Tilemap/TilemapSeriesDefaults.js +1 -1
  144. package/es-modules/Series/Timeline/TimelineSeriesDefaults.js +1 -1
  145. package/es-modules/Series/Treemap/TreemapSeriesDefaults.js +1 -1
  146. package/es-modules/Series/VariablePie/VariablePieSeriesDefaults.js +1 -1
  147. package/es-modules/Series/Variwide/VariwideComposition.js +11 -8
  148. package/es-modules/Series/Vector/VectorSeriesDefaults.js +1 -1
  149. package/es-modules/Series/Venn/VennSeriesDefaults.js +1 -1
  150. package/es-modules/Series/Waterfall/WaterfallSeriesDefaults.js +1 -1
  151. package/es-modules/Series/Windbarb/WindbarbSeriesDefaults.js +1 -1
  152. package/es-modules/Shared/Utilities.js +7 -0
  153. package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +1 -1
  154. package/es-modules/Stock/Indicators/AD/ADIndicator.js +0 -1
  155. package/es-modules/Stock/Indicators/AO/AOIndicator.js +1 -1
  156. package/es-modules/Stock/Indicators/APO/APOIndicator.js +1 -1
  157. package/es-modules/Stock/Indicators/ATR/ATRIndicator.js +0 -1
  158. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +1 -1
  159. package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +2 -2
  160. package/es-modules/Stock/Indicators/BB/BBIndicator.js +0 -1
  161. package/es-modules/Stock/Indicators/CCI/CCIIndicator.js +0 -1
  162. package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +0 -1
  163. package/es-modules/Stock/Indicators/CMO/CMOIndicator.js +0 -1
  164. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +1 -1
  165. package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +1 -1
  166. package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +3 -3
  167. package/es-modules/Stock/Indicators/DPO/DPOIndicator.js +1 -1
  168. package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +3 -3
  169. package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +0 -1
  170. package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +0 -1
  171. package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +1 -1
  172. package/es-modules/Stock/Indicators/LinearRegression/LinearRegressionIndicator.js +0 -1
  173. package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngleIndicator.js +0 -1
  174. package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionInterceptIndicator.js +0 -1
  175. package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopesIndicator.js +0 -1
  176. package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +0 -1
  177. package/es-modules/Stock/Indicators/MFI/MFIIndicator.js +0 -1
  178. package/es-modules/Stock/Indicators/Momentum/MomentumIndicator.js +0 -1
  179. package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +0 -1
  180. package/es-modules/Stock/Indicators/OBV/OBVIndicator.js +0 -1
  181. package/es-modules/Stock/Indicators/PC/PCIndicator.js +1 -1
  182. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -1
  183. package/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +0 -1
  184. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +0 -1
  185. package/es-modules/Stock/Indicators/PriceEnvelopes/PriceEnvelopesIndicator.js +0 -1
  186. package/es-modules/Stock/Indicators/ROC/ROCIndicator.js +0 -1
  187. package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +0 -1
  188. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +1 -1
  189. package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +3 -3
  190. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +1 -1
  191. package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +1 -1
  192. package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +1 -1
  193. package/es-modules/Stock/Indicators/TrendLine/TrendLineIndicator.js +0 -1
  194. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +1 -1
  195. package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +0 -1
  196. package/es-modules/Stock/Indicators/WMA/WMAIndicator.js +0 -1
  197. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +1 -1
  198. package/es-modules/Stock/Indicators/Zigzag/ZigzagIndicator.js +0 -1
  199. package/es-modules/Stock/Navigator/ChartNavigatorComposition.js +5 -5
  200. package/es-modules/Stock/Navigator/Navigator.js +1 -5
  201. package/es-modules/Stock/Navigator/StandaloneNavigator.js +38 -8
  202. package/es-modules/Stock/RangeSelector/RangeSelectorComposition.js +2 -2
  203. package/es-modules/Stock/Scrollbar/ScrollbarDefaults.js +1 -3
  204. package/es-modules/masters/highcharts-3d.src.js +1 -1
  205. package/es-modules/masters/highcharts-autoload.src.js +1 -1
  206. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  207. package/es-modules/masters/highcharts-more.src.js +1 -1
  208. package/es-modules/masters/highcharts.src.js +1 -1
  209. package/es-modules/masters/highmaps.src.js +1 -1
  210. package/es-modules/masters/highstock.src.js +1 -1
  211. package/es-modules/masters/i18n/fr-FR.src.d.ts +1 -1
  212. package/es-modules/masters/i18n/fr-FR.src.js +1 -1
  213. package/es-modules/masters/i18n/nb-NO.src.d.ts +1 -1
  214. package/es-modules/masters/i18n/nb-NO.src.js +1 -1
  215. package/es-modules/masters/i18n/zh-CN.src.d.ts +1 -1
  216. package/es-modules/masters/i18n/zh-CN.src.js +1 -1
  217. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  218. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  219. package/es-modules/masters/indicators/ao.src.js +1 -1
  220. package/es-modules/masters/indicators/apo.src.js +1 -1
  221. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  222. package/es-modules/masters/indicators/aroon.src.js +1 -1
  223. package/es-modules/masters/indicators/atr.src.js +1 -1
  224. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  225. package/es-modules/masters/indicators/cci.src.js +1 -1
  226. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  227. package/es-modules/masters/indicators/cmf.src.js +1 -1
  228. package/es-modules/masters/indicators/cmo.src.js +1 -1
  229. package/es-modules/masters/indicators/dema.src.js +1 -1
  230. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  231. package/es-modules/masters/indicators/dmi.src.js +1 -1
  232. package/es-modules/masters/indicators/dpo.src.js +1 -1
  233. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  234. package/es-modules/masters/indicators/indicators-all.src.js +1 -1
  235. package/es-modules/masters/indicators/indicators.src.js +1 -1
  236. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  237. package/es-modules/masters/indicators/klinger.src.js +1 -1
  238. package/es-modules/masters/indicators/macd.src.js +1 -1
  239. package/es-modules/masters/indicators/mfi.src.js +1 -1
  240. package/es-modules/masters/indicators/momentum.src.js +1 -1
  241. package/es-modules/masters/indicators/natr.src.js +1 -1
  242. package/es-modules/masters/indicators/obv.src.js +1 -1
  243. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  244. package/es-modules/masters/indicators/ppo.src.js +1 -1
  245. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  246. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  247. package/es-modules/masters/indicators/psar.src.js +1 -1
  248. package/es-modules/masters/indicators/regressions.src.js +1 -1
  249. package/es-modules/masters/indicators/roc.src.js +1 -1
  250. package/es-modules/masters/indicators/rsi.src.js +1 -1
  251. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  252. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  253. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  254. package/es-modules/masters/indicators/tema.src.js +1 -1
  255. package/es-modules/masters/indicators/trendline.src.js +1 -1
  256. package/es-modules/masters/indicators/trix.src.js +1 -1
  257. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  258. package/es-modules/masters/indicators/vwap.src.js +1 -1
  259. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  260. package/es-modules/masters/indicators/wma.src.js +1 -1
  261. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  262. package/es-modules/masters/modules/accessibility.src.js +1 -1
  263. package/es-modules/masters/modules/annotations-advanced.src.js +1 -1
  264. package/es-modules/masters/modules/annotations.src.js +1 -1
  265. package/es-modules/masters/modules/arc-diagram.src.js +1 -1
  266. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  267. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  268. package/es-modules/masters/modules/boost.src.js +1 -1
  269. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  270. package/es-modules/masters/modules/bullet.src.js +1 -1
  271. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  272. package/es-modules/masters/modules/contour.src.js +1 -1
  273. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  274. package/es-modules/masters/modules/cylinder.src.js +1 -1
  275. package/es-modules/masters/modules/data-sorting.src.js +1 -1
  276. package/es-modules/masters/modules/data-tools.src.js +1 -1
  277. package/es-modules/masters/modules/data.src.js +1 -1
  278. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  279. package/es-modules/masters/modules/debugger.src.js +1 -1
  280. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  281. package/es-modules/masters/modules/dotplot.src.js +1 -1
  282. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  283. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  284. package/es-modules/masters/modules/drilldown.src.js +1 -1
  285. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  286. package/es-modules/masters/modules/export-data.src.js +1 -1
  287. package/es-modules/masters/modules/exporting.src.js +1 -1
  288. package/es-modules/masters/modules/flowmap.src.js +1 -1
  289. package/es-modules/masters/modules/full-screen.src.js +1 -1
  290. package/es-modules/masters/modules/funnel.src.js +1 -1
  291. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  292. package/es-modules/masters/modules/gantt.src.js +1 -1
  293. package/es-modules/masters/modules/geoheatmap.src.js +1 -1
  294. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  295. package/es-modules/masters/modules/heatmap.src.js +1 -1
  296. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  297. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  298. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  299. package/es-modules/masters/modules/item-series.src.js +1 -1
  300. package/es-modules/masters/modules/lollipop.src.js +1 -1
  301. package/es-modules/masters/modules/map.src.js +1 -1
  302. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  303. package/es-modules/masters/modules/mouse-wheel-zoom.src.js +1 -1
  304. package/es-modules/masters/modules/navigator.src.js +1 -1
  305. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  306. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  307. package/es-modules/masters/modules/non-cartesian-zoom.src.js +1 -1
  308. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  309. package/es-modules/masters/modules/organization.src.js +1 -1
  310. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  311. package/es-modules/masters/modules/pareto.src.js +1 -1
  312. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  313. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  314. package/es-modules/masters/modules/pictorial.src.js +1 -1
  315. package/es-modules/masters/modules/pointandfigure.src.js +1 -1
  316. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  317. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  318. package/es-modules/masters/modules/renko.src.js +1 -1
  319. package/es-modules/masters/modules/sankey.src.js +1 -1
  320. package/es-modules/masters/modules/series-label.src.js +1 -1
  321. package/es-modules/masters/modules/series-on-point.src.js +1 -1
  322. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  323. package/es-modules/masters/modules/sonification.src.js +1 -1
  324. package/es-modules/masters/modules/static-scale.src.js +1 -1
  325. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  326. package/es-modules/masters/modules/stock.src.js +1 -1
  327. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  328. package/es-modules/masters/modules/sunburst.src.js +1 -1
  329. package/es-modules/masters/modules/textpath.src.js +1 -1
  330. package/es-modules/masters/modules/tiledwebmap.src.js +1 -1
  331. package/es-modules/masters/modules/tilemap.src.js +1 -1
  332. package/es-modules/masters/modules/timeline.src.js +1 -1
  333. package/es-modules/masters/modules/treegraph.src.js +1 -1
  334. package/es-modules/masters/modules/treegrid.src.js +1 -1
  335. package/es-modules/masters/modules/treemap.src.js +1 -1
  336. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  337. package/es-modules/masters/modules/variwide.src.js +1 -1
  338. package/es-modules/masters/modules/vector.src.js +1 -1
  339. package/es-modules/masters/modules/venn.src.js +1 -1
  340. package/es-modules/masters/modules/windbarb.src.js +1 -1
  341. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  342. package/es-modules/masters/modules/xrange.src.js +1 -1
  343. package/es-modules/masters/standalone-navigator.src.js +1 -1
  344. package/es-modules/masters/themes/adaptive.src.js +1 -1
  345. package/es-modules/masters/themes/avocado.src.js +1 -1
  346. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  347. package/es-modules/masters/themes/grid-light.src.js +1 -1
  348. package/es-modules/masters/themes/high-contrast.src.js +1 -1
  349. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  350. package/es-modules/masters/themes/sunset.src.js +1 -1
  351. package/es-modules/tsconfig.tsbuildinfo +1 -1
  352. package/esm/highcharts-3d.js +2 -2
  353. package/esm/highcharts-3d.src.js +38 -61
  354. package/esm/highcharts-autoload.js +2 -2
  355. package/esm/highcharts-autoload.src.js +18 -39
  356. package/esm/highcharts-gantt.js +1 -1
  357. package/esm/highcharts-gantt.src.js +1 -1
  358. package/esm/highcharts-more.js +2 -2
  359. package/esm/highcharts-more.src.js +142 -120
  360. package/esm/highcharts.js +4 -4
  361. package/esm/highcharts.src.js +824 -750
  362. package/esm/highmaps.js +1 -1
  363. package/esm/highmaps.src.js +1 -1
  364. package/esm/highstock.js +1 -1
  365. package/esm/highstock.src.js +1 -1
  366. package/esm/i18n/fr-FR.js +2 -2
  367. package/esm/i18n/fr-FR.src.js +17 -38
  368. package/esm/i18n/nb-NO.js +2 -2
  369. package/esm/i18n/nb-NO.src.js +17 -38
  370. package/esm/i18n/zh-CN.js +2 -2
  371. package/esm/i18n/zh-CN.src.js +17 -38
  372. package/esm/indicators/acceleration-bands.js +2 -2
  373. package/esm/indicators/acceleration-bands.src.js +18 -39
  374. package/esm/indicators/accumulation-distribution.js +2 -2
  375. package/esm/indicators/accumulation-distribution.src.js +17 -39
  376. package/esm/indicators/ao.js +2 -2
  377. package/esm/indicators/ao.src.js +18 -39
  378. package/esm/indicators/apo.js +2 -2
  379. package/esm/indicators/apo.src.js +18 -39
  380. package/esm/indicators/aroon-oscillator.js +2 -2
  381. package/esm/indicators/aroon-oscillator.src.js +19 -40
  382. package/esm/indicators/aroon.js +2 -2
  383. package/esm/indicators/aroon.src.js +18 -39
  384. package/esm/indicators/atr.js +2 -2
  385. package/esm/indicators/atr.src.js +17 -39
  386. package/esm/indicators/bollinger-bands.js +2 -2
  387. package/esm/indicators/bollinger-bands.src.js +17 -39
  388. package/esm/indicators/cci.js +2 -2
  389. package/esm/indicators/cci.src.js +17 -39
  390. package/esm/indicators/chaikin.js +2 -2
  391. package/esm/indicators/chaikin.src.js +18 -40
  392. package/esm/indicators/cmf.js +2 -2
  393. package/esm/indicators/cmf.src.js +17 -39
  394. package/esm/indicators/cmo.js +2 -2
  395. package/esm/indicators/cmo.src.js +17 -39
  396. package/esm/indicators/dema.js +2 -2
  397. package/esm/indicators/dema.src.js +18 -39
  398. package/esm/indicators/disparity-index.js +2 -2
  399. package/esm/indicators/disparity-index.src.js +20 -41
  400. package/esm/indicators/dmi.js +2 -2
  401. package/esm/indicators/dmi.src.js +20 -41
  402. package/esm/indicators/dpo.js +2 -2
  403. package/esm/indicators/dpo.src.js +18 -39
  404. package/esm/indicators/ichimoku-kinko-hyo.js +2 -2
  405. package/esm/indicators/ichimoku-kinko-hyo.src.js +18 -40
  406. package/esm/indicators/indicators-all.js +2 -2
  407. package/esm/indicators/indicators-all.src.js +76 -99
  408. package/esm/indicators/indicators.js +2 -2
  409. package/esm/indicators/indicators.src.js +48 -46
  410. package/esm/indicators/keltner-channels.js +2 -2
  411. package/esm/indicators/keltner-channels.src.js +18 -39
  412. package/esm/indicators/klinger.js +2 -2
  413. package/esm/indicators/klinger.src.js +17 -38
  414. package/esm/indicators/macd.js +2 -2
  415. package/esm/indicators/macd.src.js +17 -39
  416. package/esm/indicators/mfi.js +2 -2
  417. package/esm/indicators/mfi.src.js +17 -39
  418. package/esm/indicators/momentum.js +2 -2
  419. package/esm/indicators/momentum.src.js +17 -39
  420. package/esm/indicators/natr.js +2 -2
  421. package/esm/indicators/natr.src.js +17 -39
  422. package/esm/indicators/obv.js +2 -2
  423. package/esm/indicators/obv.src.js +17 -39
  424. package/esm/indicators/pivot-points.js +2 -2
  425. package/esm/indicators/pivot-points.src.js +17 -39
  426. package/esm/indicators/ppo.js +2 -2
  427. package/esm/indicators/ppo.src.js +18 -39
  428. package/esm/indicators/price-channel.js +2 -2
  429. package/esm/indicators/price-channel.src.js +18 -39
  430. package/esm/indicators/price-envelopes.js +2 -2
  431. package/esm/indicators/price-envelopes.src.js +17 -39
  432. package/esm/indicators/psar.js +2 -2
  433. package/esm/indicators/psar.src.js +17 -39
  434. package/esm/indicators/regressions.js +2 -2
  435. package/esm/indicators/regressions.src.js +17 -42
  436. package/esm/indicators/roc.js +2 -2
  437. package/esm/indicators/roc.src.js +17 -39
  438. package/esm/indicators/rsi.js +2 -2
  439. package/esm/indicators/rsi.src.js +17 -39
  440. package/esm/indicators/slow-stochastic.js +2 -2
  441. package/esm/indicators/slow-stochastic.src.js +17 -38
  442. package/esm/indicators/stochastic.js +2 -2
  443. package/esm/indicators/stochastic.src.js +20 -41
  444. package/esm/indicators/supertrend.js +2 -2
  445. package/esm/indicators/supertrend.src.js +19 -40
  446. package/esm/indicators/tema.js +2 -2
  447. package/esm/indicators/tema.src.js +18 -39
  448. package/esm/indicators/trendline.js +2 -2
  449. package/esm/indicators/trendline.src.js +17 -39
  450. package/esm/indicators/trix.js +2 -2
  451. package/esm/indicators/trix.src.js +18 -39
  452. package/esm/indicators/volume-by-price.js +2 -2
  453. package/esm/indicators/volume-by-price.src.js +18 -39
  454. package/esm/indicators/vwap.js +2 -2
  455. package/esm/indicators/vwap.src.js +17 -39
  456. package/esm/indicators/williams-r.js +2 -2
  457. package/esm/indicators/williams-r.src.js +18 -39
  458. package/esm/indicators/wma.js +2 -2
  459. package/esm/indicators/wma.src.js +17 -39
  460. package/esm/indicators/zigzag.js +2 -2
  461. package/esm/indicators/zigzag.src.js +17 -39
  462. package/esm/modules/accessibility.js +2 -2
  463. package/esm/modules/accessibility.src.js +90 -76
  464. package/esm/modules/annotations-advanced.js +3 -3
  465. package/esm/modules/annotations-advanced.src.js +36 -58
  466. package/esm/modules/annotations.js +3 -3
  467. package/esm/modules/annotations.src.js +36 -58
  468. package/esm/modules/arc-diagram.js +2 -2
  469. package/esm/modules/arc-diagram.src.js +18 -39
  470. package/esm/modules/arrow-symbols.js +3 -3
  471. package/esm/modules/arrow-symbols.src.js +17 -38
  472. package/esm/modules/boost-canvas.js +2 -2
  473. package/esm/modules/boost-canvas.src.js +57 -63
  474. package/esm/modules/boost.js +2 -2
  475. package/esm/modules/boost.src.js +56 -62
  476. package/esm/modules/broken-axis.js +2 -2
  477. package/esm/modules/broken-axis.src.js +21 -41
  478. package/esm/modules/bullet.js +2 -2
  479. package/esm/modules/bullet.src.js +18 -39
  480. package/esm/modules/coloraxis.js +2 -2
  481. package/esm/modules/coloraxis.src.js +92 -96
  482. package/esm/modules/contour.js +3 -3
  483. package/esm/modules/contour.src.js +29 -52
  484. package/esm/modules/current-date-indicator.js +2 -2
  485. package/esm/modules/current-date-indicator.src.js +17 -38
  486. package/esm/modules/cylinder.js +2 -2
  487. package/esm/modules/cylinder.src.js +18 -39
  488. package/esm/modules/data-sorting.js +2 -2
  489. package/esm/modules/data-sorting.src.js +18 -39
  490. package/esm/modules/data-tools.js +2 -2
  491. package/esm/modules/data-tools.src.js +110 -67
  492. package/esm/modules/data.js +4 -4
  493. package/esm/modules/data.src.js +53 -48
  494. package/esm/modules/datagrouping.js +2 -2
  495. package/esm/modules/datagrouping.src.js +52 -48
  496. package/esm/modules/debugger.js +2 -2
  497. package/esm/modules/debugger.src.js +17 -38
  498. package/esm/modules/dependency-wheel.js +2 -2
  499. package/esm/modules/dependency-wheel.src.js +17 -38
  500. package/esm/modules/dotplot.js +2 -2
  501. package/esm/modules/dotplot.src.js +17 -38
  502. package/esm/modules/drag-panes.js +2 -2
  503. package/esm/modules/drag-panes.src.js +22 -46
  504. package/esm/modules/draggable-points.js +2 -2
  505. package/esm/modules/draggable-points.src.js +17 -38
  506. package/esm/modules/drilldown.js +2 -2
  507. package/esm/modules/drilldown.src.js +40 -54
  508. package/esm/modules/dumbbell.js +2 -2
  509. package/esm/modules/dumbbell.src.js +18 -39
  510. package/esm/modules/export-data.js +2 -2
  511. package/esm/modules/export-data.src.js +42 -43
  512. package/esm/modules/exporting.js +2 -2
  513. package/esm/modules/exporting.src.js +26 -47
  514. package/esm/modules/flowmap.js +2 -2
  515. package/esm/modules/flowmap.src.js +17 -38
  516. package/esm/modules/full-screen.js +2 -2
  517. package/esm/modules/full-screen.src.js +17 -38
  518. package/esm/modules/funnel.js +2 -2
  519. package/esm/modules/funnel.src.js +21 -42
  520. package/esm/modules/funnel3d.js +2 -2
  521. package/esm/modules/funnel3d.src.js +18 -39
  522. package/esm/modules/gantt.js +2 -2
  523. package/esm/modules/gantt.src.js +84 -104
  524. package/esm/modules/geoheatmap.js +2 -2
  525. package/esm/modules/geoheatmap.src.js +18 -39
  526. package/esm/modules/grid-axis.js +2 -2
  527. package/esm/modules/grid-axis.src.js +34 -51
  528. package/esm/modules/heatmap.js +2 -2
  529. package/esm/modules/heatmap.src.js +20 -41
  530. package/esm/modules/heikinashi.js +2 -2
  531. package/esm/modules/heikinashi.src.js +18 -39
  532. package/esm/modules/histogram-bellcurve.js +2 -2
  533. package/esm/modules/histogram-bellcurve.src.js +19 -40
  534. package/esm/modules/hollowcandlestick.js +2 -2
  535. package/esm/modules/hollowcandlestick.src.js +18 -39
  536. package/esm/modules/item-series.js +2 -2
  537. package/esm/modules/item-series.src.js +19 -40
  538. package/esm/modules/lollipop.js +2 -2
  539. package/esm/modules/lollipop.src.js +18 -39
  540. package/esm/modules/map.js +2 -2
  541. package/esm/modules/map.src.js +64 -63
  542. package/esm/modules/marker-clusters.js +2 -2
  543. package/esm/modules/marker-clusters.src.js +49 -46
  544. package/esm/modules/mouse-wheel-zoom.js +2 -2
  545. package/esm/modules/mouse-wheel-zoom.src.js +17 -38
  546. package/esm/modules/navigator.js +2 -2
  547. package/esm/modules/navigator.src.js +72 -67
  548. package/esm/modules/networkgraph.js +2 -2
  549. package/esm/modules/networkgraph.src.js +24 -45
  550. package/esm/modules/no-data-to-display.js +2 -2
  551. package/esm/modules/no-data-to-display.src.js +17 -38
  552. package/esm/modules/non-cartesian-zoom.js +2 -2
  553. package/esm/modules/non-cartesian-zoom.src.js +17 -38
  554. package/esm/modules/offline-exporting.js +2 -2
  555. package/esm/modules/offline-exporting.src.js +19 -40
  556. package/esm/modules/organization.js +2 -2
  557. package/esm/modules/organization.src.js +20 -39
  558. package/esm/modules/parallel-coordinates.js +2 -2
  559. package/esm/modules/parallel-coordinates.src.js +24 -44
  560. package/esm/modules/pareto.js +2 -2
  561. package/esm/modules/pareto.src.js +21 -42
  562. package/esm/modules/pathfinder.js +2 -2
  563. package/esm/modules/pathfinder.src.js +20 -39
  564. package/esm/modules/pattern-fill.js +2 -2
  565. package/esm/modules/pattern-fill.src.js +17 -38
  566. package/esm/modules/pictorial.js +2 -2
  567. package/esm/modules/pictorial.src.js +71 -65
  568. package/esm/modules/pointandfigure.js +2 -2
  569. package/esm/modules/pointandfigure.src.js +47 -44
  570. package/esm/modules/price-indicator.js +2 -2
  571. package/esm/modules/price-indicator.src.js +17 -38
  572. package/esm/modules/pyramid3d.js +2 -2
  573. package/esm/modules/pyramid3d.src.js +18 -39
  574. package/esm/modules/renko.js +2 -2
  575. package/esm/modules/renko.src.js +18 -40
  576. package/esm/modules/sankey.js +2 -2
  577. package/esm/modules/sankey.src.js +24 -46
  578. package/esm/modules/series-label.js +2 -2
  579. package/esm/modules/series-label.src.js +17 -38
  580. package/esm/modules/series-on-point.js +2 -2
  581. package/esm/modules/series-on-point.src.js +47 -44
  582. package/esm/modules/solid-gauge.js +2 -2
  583. package/esm/modules/solid-gauge.src.js +18 -39
  584. package/esm/modules/sonification.js +2 -2
  585. package/esm/modules/sonification.src.js +18 -39
  586. package/esm/modules/static-scale.js +2 -2
  587. package/esm/modules/static-scale.src.js +30 -49
  588. package/esm/modules/stock-tools.js +2 -2
  589. package/esm/modules/stock-tools.src.js +29 -50
  590. package/esm/modules/stock.js +2 -2
  591. package/esm/modules/stock.src.js +117 -141
  592. package/esm/modules/streamgraph.js +2 -2
  593. package/esm/modules/streamgraph.src.js +18 -39
  594. package/esm/modules/sunburst.js +2 -2
  595. package/esm/modules/sunburst.src.js +38 -57
  596. package/esm/modules/textpath.js +2 -2
  597. package/esm/modules/textpath.src.js +17 -38
  598. package/esm/modules/tiledwebmap.js +3 -3
  599. package/esm/modules/tiledwebmap.src.js +19 -40
  600. package/esm/modules/tilemap.js +2 -2
  601. package/esm/modules/tilemap.src.js +22 -40
  602. package/esm/modules/timeline.js +2 -2
  603. package/esm/modules/timeline.src.js +19 -40
  604. package/esm/modules/treegraph.js +2 -2
  605. package/esm/modules/treegraph.src.js +23 -42
  606. package/esm/modules/treegrid.js +2 -2
  607. package/esm/modules/treegrid.src.js +47 -67
  608. package/esm/modules/treemap.js +2 -2
  609. package/esm/modules/treemap.src.js +34 -53
  610. package/esm/modules/variable-pie.js +2 -2
  611. package/esm/modules/variable-pie.src.js +19 -40
  612. package/esm/modules/variwide.js +2 -2
  613. package/esm/modules/variwide.src.js +28 -46
  614. package/esm/modules/vector.js +2 -2
  615. package/esm/modules/vector.src.js +18 -39
  616. package/esm/modules/venn.js +2 -2
  617. package/esm/modules/venn.src.js +18 -39
  618. package/esm/modules/windbarb.js +2 -2
  619. package/esm/modules/windbarb.src.js +18 -39
  620. package/esm/modules/wordcloud.js +2 -2
  621. package/esm/modules/wordcloud.src.js +18 -39
  622. package/esm/modules/xrange.js +2 -2
  623. package/esm/modules/xrange.src.js +18 -39
  624. package/esm/standalone-navigator.js +4 -4
  625. package/esm/standalone-navigator.src.js +876 -776
  626. package/esm/themes/adaptive.js +2 -2
  627. package/esm/themes/adaptive.src.js +17 -38
  628. package/esm/themes/avocado.js +2 -2
  629. package/esm/themes/avocado.src.js +17 -38
  630. package/esm/themes/dark-unica.js +2 -2
  631. package/esm/themes/dark-unica.src.js +17 -38
  632. package/esm/themes/grid-light.js +2 -2
  633. package/esm/themes/grid-light.src.js +17 -38
  634. package/esm/themes/high-contrast.js +2 -2
  635. package/esm/themes/high-contrast.src.js +17 -38
  636. package/esm/themes/sand-signika.js +2 -2
  637. package/esm/themes/sand-signika.src.js +17 -38
  638. package/esm/themes/sunset.js +2 -2
  639. package/esm/themes/sunset.src.js +17 -38
  640. package/highcharts-3d.js +2 -2
  641. package/highcharts-3d.src.js +43 -66
  642. package/highcharts-autoload.d.ts +0 -1
  643. package/highcharts-autoload.js +4 -4
  644. package/highcharts-autoload.src.d.ts +0 -1
  645. package/highcharts-autoload.src.js +833 -778
  646. package/highcharts-gantt.js +4 -4
  647. package/highcharts-gantt.src.js +895 -839
  648. package/highcharts-more.d.ts +10 -0
  649. package/highcharts-more.js +2 -2
  650. package/highcharts-more.src.d.ts +10 -0
  651. package/highcharts-more.src.js +147 -125
  652. package/highcharts.d.ts +2785 -80144
  653. package/highcharts.js +4 -4
  654. package/highcharts.src.d.ts +2785 -80144
  655. package/highcharts.src.js +832 -777
  656. package/highmaps.js +4 -4
  657. package/highmaps.src.js +915 -845
  658. package/highstock.js +4 -4
  659. package/highstock.src.js +903 -874
  660. package/i18n/fr-FR.js +2 -2
  661. package/i18n/fr-FR.src.js +26 -37
  662. package/i18n/nb-NO.js +2 -2
  663. package/i18n/nb-NO.src.js +26 -37
  664. package/i18n/zh-CN.js +2 -2
  665. package/i18n/zh-CN.src.js +26 -37
  666. package/indicators/acceleration-bands.js +2 -2
  667. package/indicators/acceleration-bands.src.js +23 -44
  668. package/indicators/accumulation-distribution.js +2 -2
  669. package/indicators/accumulation-distribution.src.js +22 -44
  670. package/indicators/ao.js +2 -2
  671. package/indicators/ao.src.js +23 -44
  672. package/indicators/apo.js +2 -2
  673. package/indicators/apo.src.js +23 -44
  674. package/indicators/aroon-oscillator.js +2 -2
  675. package/indicators/aroon-oscillator.src.js +24 -45
  676. package/indicators/aroon.js +2 -2
  677. package/indicators/aroon.src.js +23 -44
  678. package/indicators/atr.js +2 -2
  679. package/indicators/atr.src.js +22 -44
  680. package/indicators/bollinger-bands.js +2 -2
  681. package/indicators/bollinger-bands.src.js +22 -44
  682. package/indicators/cci.js +2 -2
  683. package/indicators/cci.src.js +22 -44
  684. package/indicators/chaikin.js +2 -2
  685. package/indicators/chaikin.src.js +23 -45
  686. package/indicators/cmf.js +2 -2
  687. package/indicators/cmf.src.js +22 -44
  688. package/indicators/cmo.js +2 -2
  689. package/indicators/cmo.src.js +22 -44
  690. package/indicators/dema.js +2 -2
  691. package/indicators/dema.src.js +23 -44
  692. package/indicators/disparity-index.js +2 -2
  693. package/indicators/disparity-index.src.js +25 -46
  694. package/indicators/dmi.js +2 -2
  695. package/indicators/dmi.src.js +25 -46
  696. package/indicators/dpo.js +2 -2
  697. package/indicators/dpo.src.js +23 -44
  698. package/indicators/ichimoku-kinko-hyo.js +2 -2
  699. package/indicators/ichimoku-kinko-hyo.src.js +23 -45
  700. package/indicators/indicators-all.js +2 -2
  701. package/indicators/indicators-all.src.js +81 -104
  702. package/indicators/indicators.js +2 -2
  703. package/indicators/indicators.src.js +53 -51
  704. package/indicators/keltner-channels.js +2 -2
  705. package/indicators/keltner-channels.src.js +23 -44
  706. package/indicators/klinger.js +2 -2
  707. package/indicators/klinger.src.js +22 -43
  708. package/indicators/macd.js +2 -2
  709. package/indicators/macd.src.js +22 -44
  710. package/indicators/mfi.js +2 -2
  711. package/indicators/mfi.src.js +22 -44
  712. package/indicators/momentum.js +2 -2
  713. package/indicators/momentum.src.js +22 -44
  714. package/indicators/natr.js +2 -2
  715. package/indicators/natr.src.js +22 -44
  716. package/indicators/obv.js +2 -2
  717. package/indicators/obv.src.js +22 -44
  718. package/indicators/pivot-points.js +2 -2
  719. package/indicators/pivot-points.src.js +22 -44
  720. package/indicators/ppo.js +2 -2
  721. package/indicators/ppo.src.js +23 -44
  722. package/indicators/price-channel.js +2 -2
  723. package/indicators/price-channel.src.js +23 -44
  724. package/indicators/price-envelopes.js +2 -2
  725. package/indicators/price-envelopes.src.js +22 -44
  726. package/indicators/psar.js +2 -2
  727. package/indicators/psar.src.js +22 -44
  728. package/indicators/regressions.js +2 -2
  729. package/indicators/regressions.src.js +22 -47
  730. package/indicators/roc.js +2 -2
  731. package/indicators/roc.src.js +22 -44
  732. package/indicators/rsi.js +2 -2
  733. package/indicators/rsi.src.js +22 -44
  734. package/indicators/slow-stochastic.js +2 -2
  735. package/indicators/slow-stochastic.src.js +22 -43
  736. package/indicators/stochastic.js +2 -2
  737. package/indicators/stochastic.src.js +25 -46
  738. package/indicators/supertrend.js +2 -2
  739. package/indicators/supertrend.src.js +24 -45
  740. package/indicators/tema.js +2 -2
  741. package/indicators/tema.src.js +23 -44
  742. package/indicators/trendline.js +2 -2
  743. package/indicators/trendline.src.js +22 -44
  744. package/indicators/trix.js +2 -2
  745. package/indicators/trix.src.js +23 -44
  746. package/indicators/volume-by-price.js +2 -2
  747. package/indicators/volume-by-price.src.js +23 -44
  748. package/indicators/vwap.js +2 -2
  749. package/indicators/vwap.src.js +22 -44
  750. package/indicators/williams-r.js +2 -2
  751. package/indicators/williams-r.src.js +23 -44
  752. package/indicators/wma.js +2 -2
  753. package/indicators/wma.src.js +22 -44
  754. package/indicators/zigzag.js +2 -2
  755. package/indicators/zigzag.src.js +22 -44
  756. package/modules/accessibility.js +2 -2
  757. package/modules/accessibility.src.js +95 -81
  758. package/modules/annotations-advanced.js +9 -9
  759. package/modules/annotations-advanced.src.js +41 -63
  760. package/modules/annotations.js +3 -3
  761. package/modules/annotations.src.js +41 -63
  762. package/modules/arc-diagram.js +2 -2
  763. package/modules/arc-diagram.src.js +23 -44
  764. package/modules/arrow-symbols.js +2 -2
  765. package/modules/arrow-symbols.src.js +17 -38
  766. package/modules/boost-canvas.js +2 -2
  767. package/modules/boost-canvas.src.js +62 -68
  768. package/modules/boost.js +2 -2
  769. package/modules/boost.src.js +61 -67
  770. package/modules/broken-axis.js +2 -2
  771. package/modules/broken-axis.src.js +26 -46
  772. package/modules/bullet.js +2 -2
  773. package/modules/bullet.src.js +23 -44
  774. package/modules/coloraxis.js +2 -2
  775. package/modules/coloraxis.src.js +97 -101
  776. package/modules/contour.js +5 -5
  777. package/modules/contour.src.js +111 -117
  778. package/modules/current-date-indicator.js +2 -2
  779. package/modules/current-date-indicator.src.js +17 -38
  780. package/modules/cylinder.js +2 -2
  781. package/modules/cylinder.src.js +23 -44
  782. package/modules/data-sorting.js +2 -2
  783. package/modules/data-sorting.src.js +18 -39
  784. package/modules/data-tools.js +2 -2
  785. package/modules/data-tools.src.js +110 -67
  786. package/modules/data.js +4 -4
  787. package/modules/data.src.js +58 -53
  788. package/modules/datagrouping.js +2 -2
  789. package/modules/datagrouping.src.js +57 -53
  790. package/modules/debugger.js +2 -2
  791. package/modules/debugger.src.js +17 -38
  792. package/modules/dependency-wheel.js +2 -2
  793. package/modules/dependency-wheel.src.js +22 -43
  794. package/modules/dotplot.js +2 -2
  795. package/modules/dotplot.src.js +22 -43
  796. package/modules/drag-panes.js +2 -2
  797. package/modules/drag-panes.src.js +22 -46
  798. package/modules/draggable-points.js +2 -2
  799. package/modules/draggable-points.src.js +17 -38
  800. package/modules/drilldown.js +2 -2
  801. package/modules/drilldown.src.js +45 -59
  802. package/modules/dumbbell.js +2 -2
  803. package/modules/dumbbell.src.js +23 -44
  804. package/modules/export-data.js +2 -2
  805. package/modules/export-data.src.js +47 -48
  806. package/modules/exporting.js +2 -2
  807. package/modules/exporting.src.js +31 -52
  808. package/modules/flowmap.js +2 -2
  809. package/modules/flowmap.src.js +22 -43
  810. package/modules/full-screen.js +2 -2
  811. package/modules/full-screen.src.js +22 -43
  812. package/modules/funnel.js +2 -2
  813. package/modules/funnel.src.js +26 -47
  814. package/modules/funnel3d.js +2 -2
  815. package/modules/funnel3d.src.js +23 -44
  816. package/modules/gantt.js +8 -8
  817. package/modules/gantt.src.js +93 -113
  818. package/modules/geoheatmap.js +2 -2
  819. package/modules/geoheatmap.src.js +23 -44
  820. package/modules/grid-axis.js +2 -2
  821. package/modules/grid-axis.src.js +39 -56
  822. package/modules/heatmap.js +4 -4
  823. package/modules/heatmap.src.js +101 -105
  824. package/modules/heikinashi.js +2 -2
  825. package/modules/heikinashi.src.js +23 -44
  826. package/modules/histogram-bellcurve.js +2 -2
  827. package/modules/histogram-bellcurve.src.js +24 -45
  828. package/modules/hollowcandlestick.js +2 -2
  829. package/modules/hollowcandlestick.src.js +23 -44
  830. package/modules/item-series.js +2 -2
  831. package/modules/item-series.src.js +24 -45
  832. package/modules/lollipop.js +2 -2
  833. package/modules/lollipop.src.js +23 -44
  834. package/modules/map.js +4 -4
  835. package/modules/map.src.js +146 -128
  836. package/modules/marker-clusters.js +2 -2
  837. package/modules/marker-clusters.src.js +49 -46
  838. package/modules/mouse-wheel-zoom.js +2 -2
  839. package/modules/mouse-wheel-zoom.src.js +17 -38
  840. package/modules/navigator.js +2 -2
  841. package/modules/navigator.src.js +77 -72
  842. package/modules/networkgraph.js +2 -2
  843. package/modules/networkgraph.src.js +29 -50
  844. package/modules/no-data-to-display.js +2 -2
  845. package/modules/no-data-to-display.src.js +22 -43
  846. package/modules/non-cartesian-zoom.js +2 -2
  847. package/modules/non-cartesian-zoom.src.js +17 -38
  848. package/modules/offline-exporting.js +2 -2
  849. package/modules/offline-exporting.src.js +24 -45
  850. package/modules/organization.js +3 -3
  851. package/modules/organization.src.js +25 -44
  852. package/modules/parallel-coordinates.js +2 -2
  853. package/modules/parallel-coordinates.src.js +29 -49
  854. package/modules/pareto.js +2 -2
  855. package/modules/pareto.src.js +26 -47
  856. package/modules/pathfinder.js +2 -2
  857. package/modules/pathfinder.src.js +25 -44
  858. package/modules/pattern-fill.js +2 -2
  859. package/modules/pattern-fill.src.js +17 -38
  860. package/modules/pictorial.js +2 -2
  861. package/modules/pictorial.src.js +76 -70
  862. package/modules/pointandfigure.js +2 -2
  863. package/modules/pointandfigure.src.js +52 -49
  864. package/modules/price-indicator.js +2 -2
  865. package/modules/price-indicator.src.js +17 -38
  866. package/modules/pyramid3d.js +2 -2
  867. package/modules/pyramid3d.src.js +23 -44
  868. package/modules/renko.js +2 -2
  869. package/modules/renko.src.js +23 -45
  870. package/modules/sankey.js +2 -2
  871. package/modules/sankey.src.js +29 -51
  872. package/modules/series-label.js +2 -2
  873. package/modules/series-label.src.js +22 -43
  874. package/modules/series-on-point.js +2 -2
  875. package/modules/series-on-point.src.js +52 -49
  876. package/modules/solid-gauge.js +2 -2
  877. package/modules/solid-gauge.src.js +23 -44
  878. package/modules/sonification.js +2 -2
  879. package/modules/sonification.src.js +23 -44
  880. package/modules/static-scale.js +2 -2
  881. package/modules/static-scale.src.js +30 -49
  882. package/modules/stock-tools.js +2 -2
  883. package/modules/stock-tools.src.js +34 -55
  884. package/modules/stock.js +6 -6
  885. package/modules/stock.src.js +132 -154
  886. package/modules/streamgraph.js +2 -2
  887. package/modules/streamgraph.src.js +23 -44
  888. package/modules/sunburst.js +2 -2
  889. package/modules/sunburst.src.js +43 -62
  890. package/modules/textpath.js +2 -2
  891. package/modules/textpath.src.js +17 -38
  892. package/modules/tiledwebmap.js +3 -3
  893. package/modules/tiledwebmap.src.js +24 -45
  894. package/modules/tilemap.js +2 -2
  895. package/modules/tilemap.src.js +27 -45
  896. package/modules/timeline.js +2 -2
  897. package/modules/timeline.src.js +24 -45
  898. package/modules/treegraph.js +2 -2
  899. package/modules/treegraph.src.js +28 -47
  900. package/modules/treegrid.js +2 -2
  901. package/modules/treegrid.src.js +52 -72
  902. package/modules/treemap.js +2 -2
  903. package/modules/treemap.src.js +39 -58
  904. package/modules/variable-pie.js +2 -2
  905. package/modules/variable-pie.src.js +24 -45
  906. package/modules/variwide.js +2 -2
  907. package/modules/variwide.src.js +33 -51
  908. package/modules/vector.js +2 -2
  909. package/modules/vector.src.js +23 -44
  910. package/modules/venn.js +2 -2
  911. package/modules/venn.src.js +23 -44
  912. package/modules/windbarb.js +2 -2
  913. package/modules/windbarb.src.js +23 -44
  914. package/modules/wordcloud.js +2 -2
  915. package/modules/wordcloud.src.js +23 -44
  916. package/modules/xrange.js +2 -2
  917. package/modules/xrange.src.js +23 -44
  918. package/options/abands.d.ts +183 -8
  919. package/options/abands.src.d.ts +183 -8
  920. package/options/ad.d.ts +176 -5
  921. package/options/ad.src.d.ts +176 -5
  922. package/options/ao.d.ts +202 -0
  923. package/options/ao.src.d.ts +202 -0
  924. package/options/apo.d.ts +178 -8
  925. package/options/apo.src.d.ts +178 -8
  926. package/options/arcdiagram.d.ts +785 -0
  927. package/options/arcdiagram.src.d.ts +785 -0
  928. package/options/area.d.ts +226 -0
  929. package/options/area.src.d.ts +226 -0
  930. package/options/arearange.d.ts +229 -8
  931. package/options/arearange.src.d.ts +229 -8
  932. package/options/areaspline.d.ts +1344 -8
  933. package/options/areaspline.src.d.ts +1344 -8
  934. package/options/areasplinerange.d.ts +972 -8
  935. package/options/areasplinerange.src.d.ts +972 -8
  936. package/options/aroon.d.ts +219 -0
  937. package/options/aroon.src.d.ts +219 -0
  938. package/options/aroonoscillator.d.ts +1140 -8
  939. package/options/aroonoscillator.src.d.ts +1140 -8
  940. package/options/atr.d.ts +210 -0
  941. package/options/atr.src.d.ts +210 -0
  942. package/options/bar.d.ts +183 -10
  943. package/options/bar.src.d.ts +183 -10
  944. package/options/bb.d.ts +1232 -0
  945. package/options/bb.src.d.ts +1232 -0
  946. package/options/bellcurve.d.ts +1167 -8
  947. package/options/bellcurve.src.d.ts +1167 -8
  948. package/options/boxplot.d.ts +163 -10
  949. package/options/boxplot.src.d.ts +163 -10
  950. package/options/bubble.d.ts +1005 -8
  951. package/options/bubble.src.d.ts +1005 -8
  952. package/options/bullet.d.ts +953 -8
  953. package/options/bullet.src.d.ts +953 -8
  954. package/options/candlestick.d.ts +1309 -8
  955. package/options/candlestick.src.d.ts +1309 -8
  956. package/options/cci.d.ts +210 -0
  957. package/options/cci.src.d.ts +210 -0
  958. package/options/chaikin.d.ts +180 -8
  959. package/options/chaikin.src.d.ts +180 -8
  960. package/options/cmf.d.ts +211 -0
  961. package/options/cmf.src.d.ts +211 -0
  962. package/options/cmo.d.ts +175 -5
  963. package/options/cmo.src.d.ts +175 -5
  964. package/options/column.d.ts +252 -2
  965. package/options/column.src.d.ts +252 -2
  966. package/options/columnpyramid.d.ts +1296 -0
  967. package/options/columnpyramid.src.d.ts +1296 -0
  968. package/options/columnrange.d.ts +216 -2
  969. package/options/columnrange.src.d.ts +216 -2
  970. package/options/contour.d.ts +1148 -0
  971. package/options/contour.src.d.ts +1148 -0
  972. package/options/cylinder.d.ts +183 -2
  973. package/options/cylinder.src.d.ts +183 -2
  974. package/options/dema.d.ts +1181 -0
  975. package/options/dema.src.d.ts +1181 -0
  976. package/options/dependencywheel.d.ts +315 -0
  977. package/options/dependencywheel.src.d.ts +315 -0
  978. package/options/disparityindex.d.ts +1157 -8
  979. package/options/disparityindex.src.d.ts +1157 -8
  980. package/options/dmi.d.ts +1227 -0
  981. package/options/dmi.src.d.ts +1227 -0
  982. package/options/dpo.d.ts +1140 -8
  983. package/options/dpo.src.d.ts +1140 -8
  984. package/options/dumbbell.d.ts +286 -0
  985. package/options/dumbbell.src.d.ts +286 -0
  986. package/options/ema.d.ts +1156 -5
  987. package/options/ema.src.d.ts +1156 -5
  988. package/options/errorbar.d.ts +1286 -0
  989. package/options/errorbar.src.d.ts +1286 -0
  990. package/options/flags.d.ts +1269 -8
  991. package/options/flags.src.d.ts +1269 -8
  992. package/options/flowmap.d.ts +551 -0
  993. package/options/flowmap.src.d.ts +551 -0
  994. package/options/funnel.d.ts +728 -10
  995. package/options/funnel.src.d.ts +728 -10
  996. package/options/gantt.d.ts +1011 -0
  997. package/options/gantt.src.d.ts +1011 -0
  998. package/options/gauge.d.ts +675 -0
  999. package/options/gauge.src.d.ts +675 -0
  1000. package/options/geoheatmap.d.ts +585 -8
  1001. package/options/geoheatmap.src.d.ts +585 -8
  1002. package/options/heatmap.d.ts +1054 -8
  1003. package/options/heatmap.src.d.ts +1054 -8
  1004. package/options/heikinashi.d.ts +178 -10
  1005. package/options/heikinashi.src.d.ts +178 -10
  1006. package/options/histogram.d.ts +1226 -0
  1007. package/options/histogram.src.d.ts +1226 -0
  1008. package/options/hlc.d.ts +223 -2
  1009. package/options/hlc.src.d.ts +223 -2
  1010. package/options/hollowcandlestick.d.ts +1335 -0
  1011. package/options/hollowcandlestick.src.d.ts +1335 -0
  1012. package/options/ikh.d.ts +228 -5
  1013. package/options/ikh.src.d.ts +228 -5
  1014. package/options/item.d.ts +217 -8
  1015. package/options/item.src.d.ts +217 -8
  1016. package/options/keltnerchannels.d.ts +1220 -0
  1017. package/options/keltnerchannels.src.d.ts +1220 -0
  1018. package/options/klinger.d.ts +1162 -0
  1019. package/options/klinger.src.d.ts +1162 -0
  1020. package/options/line.d.ts +1377 -8
  1021. package/options/line.src.d.ts +1377 -8
  1022. package/options/linearregression.d.ts +199 -5
  1023. package/options/linearregression.src.d.ts +199 -5
  1024. package/options/linearregressionangle.d.ts +1157 -5
  1025. package/options/linearregressionangle.src.d.ts +1157 -5
  1026. package/options/linearregressionintercept.d.ts +240 -0
  1027. package/options/linearregressionintercept.src.d.ts +240 -0
  1028. package/options/linearregressionslope.d.ts +240 -0
  1029. package/options/linearregressionslope.src.d.ts +240 -0
  1030. package/options/lollipop.d.ts +949 -0
  1031. package/options/lollipop.src.d.ts +949 -0
  1032. package/options/macd.d.ts +254 -0
  1033. package/options/macd.src.d.ts +254 -0
  1034. package/options/map.d.ts +150 -8
  1035. package/options/map.src.d.ts +150 -8
  1036. package/options/mapbubble.d.ts +1016 -8
  1037. package/options/mapbubble.src.d.ts +1016 -8
  1038. package/options/mapline.d.ts +994 -0
  1039. package/options/mapline.src.d.ts +994 -0
  1040. package/options/mappoint.d.ts +1105 -1
  1041. package/options/mappoint.src.d.ts +1105 -1
  1042. package/options/mfi.d.ts +181 -5
  1043. package/options/mfi.src.d.ts +181 -5
  1044. package/options/momentum.d.ts +215 -0
  1045. package/options/momentum.src.d.ts +215 -0
  1046. package/options/natr.d.ts +170 -5
  1047. package/options/natr.src.d.ts +170 -5
  1048. package/options/networkgraph.d.ts +365 -0
  1049. package/options/networkgraph.src.d.ts +365 -0
  1050. package/options/obv.d.ts +170 -5
  1051. package/options/obv.src.d.ts +170 -5
  1052. package/options/ohlc.d.ts +183 -7
  1053. package/options/ohlc.src.d.ts +183 -7
  1054. package/options/organization.d.ts +808 -0
  1055. package/options/organization.src.d.ts +808 -0
  1056. package/options/packedbubble.d.ts +877 -8
  1057. package/options/packedbubble.src.d.ts +877 -8
  1058. package/options/pareto.d.ts +1028 -0
  1059. package/options/pareto.src.d.ts +1028 -0
  1060. package/options/pc.d.ts +183 -8
  1061. package/options/pc.src.d.ts +183 -8
  1062. package/options/pictorial.d.ts +202 -2
  1063. package/options/pictorial.src.d.ts +202 -2
  1064. package/options/pie.d.ts +196 -8
  1065. package/options/pie.src.d.ts +196 -8
  1066. package/options/pivotpoints.d.ts +1199 -0
  1067. package/options/pivotpoints.src.d.ts +1199 -0
  1068. package/options/pointandfigure.d.ts +980 -0
  1069. package/options/pointandfigure.src.d.ts +980 -0
  1070. package/options/polygon.d.ts +234 -0
  1071. package/options/polygon.src.d.ts +234 -0
  1072. package/options/ppo.d.ts +1156 -8
  1073. package/options/ppo.src.d.ts +1156 -8
  1074. package/options/priceenvelopes.d.ts +1229 -0
  1075. package/options/priceenvelopes.src.d.ts +1229 -0
  1076. package/options/psar.d.ts +1156 -5
  1077. package/options/psar.src.d.ts +1156 -5
  1078. package/options/pyramid.d.ts +837 -2
  1079. package/options/pyramid.src.d.ts +837 -2
  1080. package/options/renko.d.ts +247 -10
  1081. package/options/renko.src.d.ts +247 -10
  1082. package/options/roc.d.ts +1215 -0
  1083. package/options/roc.src.d.ts +1215 -0
  1084. package/options/rsi.d.ts +1157 -5
  1085. package/options/rsi.src.d.ts +1157 -5
  1086. package/options/sankey.d.ts +276 -8
  1087. package/options/sankey.src.d.ts +276 -8
  1088. package/options/scatter.d.ts +3043 -1018
  1089. package/options/scatter.src.d.ts +3043 -1018
  1090. package/options/series.d.ts +175 -0
  1091. package/options/series.src.d.ts +175 -0
  1092. package/options/slowstochastic.d.ts +183 -0
  1093. package/options/slowstochastic.src.d.ts +183 -0
  1094. package/options/sma.d.ts +211 -0
  1095. package/options/sma.src.d.ts +211 -0
  1096. package/options/solidgauge.d.ts +218 -0
  1097. package/options/solidgauge.src.d.ts +218 -0
  1098. package/options/spline.d.ts +230 -0
  1099. package/options/spline.src.d.ts +230 -0
  1100. package/options/stochastic.d.ts +1170 -8
  1101. package/options/stochastic.src.d.ts +1170 -8
  1102. package/options/streamgraph.d.ts +1345 -8
  1103. package/options/streamgraph.src.d.ts +1345 -8
  1104. package/options/sunburst.d.ts +286 -9
  1105. package/options/sunburst.src.d.ts +286 -9
  1106. package/options/supertrend.d.ts +1208 -0
  1107. package/options/supertrend.src.d.ts +1208 -0
  1108. package/options/tema.d.ts +1140 -8
  1109. package/options/tema.src.d.ts +1140 -8
  1110. package/options/tiledwebmap.d.ts +164 -0
  1111. package/options/tiledwebmap.src.d.ts +164 -0
  1112. package/options/tilemap.d.ts +687 -0
  1113. package/options/tilemap.src.d.ts +687 -0
  1114. package/options/timeline.d.ts +282 -0
  1115. package/options/timeline.src.d.ts +282 -0
  1116. package/options/treegraph.d.ts +982 -0
  1117. package/options/treegraph.src.d.ts +982 -0
  1118. package/options/treemap.d.ts +1396 -22
  1119. package/options/treemap.src.d.ts +1396 -22
  1120. package/options/trendline.d.ts +211 -0
  1121. package/options/trendline.src.d.ts +211 -0
  1122. package/options/trix.d.ts +178 -8
  1123. package/options/trix.src.d.ts +178 -8
  1124. package/options/variablepie.d.ts +686 -8
  1125. package/options/variablepie.src.d.ts +686 -8
  1126. package/options/variwide.d.ts +178 -2
  1127. package/options/variwide.src.d.ts +178 -2
  1128. package/options/vbp.d.ts +576 -0
  1129. package/options/vbp.src.d.ts +576 -0
  1130. package/options/vector.d.ts +660 -0
  1131. package/options/vector.src.d.ts +660 -0
  1132. package/options/venn.d.ts +654 -0
  1133. package/options/venn.src.d.ts +654 -0
  1134. package/options/vwap.d.ts +1157 -5
  1135. package/options/vwap.src.d.ts +1157 -5
  1136. package/options/waterfall.d.ts +1254 -8
  1137. package/options/waterfall.src.d.ts +1254 -8
  1138. package/options/williamsr.d.ts +209 -0
  1139. package/options/williamsr.src.d.ts +209 -0
  1140. package/options/windbarb.d.ts +222 -2
  1141. package/options/windbarb.src.d.ts +222 -2
  1142. package/options/wma.d.ts +1156 -5
  1143. package/options/wma.src.d.ts +1156 -5
  1144. package/options/wordcloud.d.ts +682 -0
  1145. package/options/wordcloud.src.d.ts +682 -0
  1146. package/options/xrange.d.ts +1168 -0
  1147. package/options/xrange.src.d.ts +1168 -0
  1148. package/options/zigzag.d.ts +1197 -0
  1149. package/options/zigzag.src.d.ts +1197 -0
  1150. package/package.json +1 -1
  1151. package/standalone-navigator.js +4 -4
  1152. package/standalone-navigator.src.js +884 -803
  1153. package/themes/adaptive.js +2 -2
  1154. package/themes/adaptive.src.js +22 -43
  1155. package/themes/avocado.js +2 -2
  1156. package/themes/avocado.src.js +17 -38
  1157. package/themes/dark-unica.js +2 -2
  1158. package/themes/dark-unica.src.js +17 -38
  1159. package/themes/grid-light.js +2 -2
  1160. package/themes/grid-light.src.js +17 -38
  1161. package/themes/high-contrast.js +2 -2
  1162. package/themes/high-contrast.src.js +17 -38
  1163. package/themes/sand-signika.js +2 -2
  1164. package/themes/sand-signika.src.js +17 -38
  1165. package/themes/sunset.js +2 -2
  1166. package/themes/sunset.src.js +17 -38
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: LicenseRef-Highcharts
2
2
  /**
3
- * @license Highcharts JS v13.0.2 (2026-08-27)
3
+ * @license Highcharts JS v13.1.0 (2026-09-18)
4
4
  * @module highcharts/standalone-navigator
5
5
  *
6
6
  * Standalone Navigator for Highcharts.
@@ -27,36 +27,17 @@ return /******/ (() => { // webpackBootstrap
27
27
  /******/
28
28
  /************************************************************************/
29
29
  /******/ /* webpack/runtime/define property getters */
30
- /******/ (() => {
31
- /******/ // define getter/value functions for harmony exports
32
- /******/ __webpack_require__.d = (exports, definition) => {
33
- /******/ if(Array.isArray(definition)) {
34
- /******/ var i = 0;
35
- /******/ while(i < definition.length) {
36
- /******/ var key = definition[i++];
37
- /******/ var binding = definition[i++];
38
- /******/ if(!__webpack_require__.o(exports, key)) {
39
- /******/ if(binding === 0) {
40
- /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
41
- /******/ } else {
42
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
43
- /******/ }
44
- /******/ } else if(binding === 0) { i++; }
45
- /******/ }
46
- /******/ } else {
47
- /******/ for(var key in definition) {
48
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
49
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
50
- /******/ }
51
- /******/ }
30
+ /******/ // define getter/value functions for harmony exports
31
+ /******/ __webpack_require__.d = (exports, definition) => {
32
+ /******/ for(var key in definition) {
33
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
34
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
52
35
  /******/ }
53
- /******/ };
54
- /******/ })();
36
+ /******/ }
37
+ /******/ };
55
38
  /******/
56
39
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
57
- /******/ (() => {
58
- /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
59
- /******/ })();
40
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));
60
41
  /******/
61
42
  /************************************************************************/
62
43
  let __webpack_exports__ = {};
@@ -95,7 +76,7 @@ var Globals;
95
76
  * Constants
96
77
  *
97
78
  * */
98
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.2', Globals.win = (typeof window !== 'undefined' ?
79
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.1.0', Globals.win = (typeof window !== 'undefined' ?
99
80
  window :
100
81
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
101
82
  Globals.doc = Globals.win.document, Globals.svg = !!Globals.doc?.createElementNS?.(Globals.SVG_NS, 'svg')?.createSVGRect, Globals.pageLang = Globals.doc?.documentElement?.closest('[lang]')?.lang, Globals.userAgent = Globals.win.navigator?.userAgent || '', Globals.isChrome = Globals.win.chrome, 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.marginNames = [
@@ -106,14 +87,16 @@ var Globals;
106
87
  ], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {
107
88
  // Checks whether the browser supports passive events, (#11353).
108
89
  let supportsPassive = false;
109
- // Object.defineProperty doesn't work on IE as well as passive
110
- // events - instead of using polyfill, we can exclude IE totally.
90
+ // Accessors don't work on IE as well as passive events - instead
91
+ // of using polyfill, we can exclude IE totally. The getter has to
92
+ // be enumerable, or wrappers that shallow-copy the options never
93
+ // read it (#25092).
111
94
  if (!Globals.isMS) {
112
- const opts = Object.defineProperty({}, 'passive', {
113
- get: function () {
114
- supportsPassive = true;
95
+ const opts = {
96
+ get passive() {
97
+ return (supportsPassive = true);
115
98
  }
116
- });
99
+ };
117
100
  if (Globals.win.addEventListener && Globals.win.removeEventListener) {
118
101
  Globals.win.addEventListener('testPassive', Globals.noop, opts);
119
102
  Globals.win.removeEventListener('testPassive', Globals.noop, opts);
@@ -2189,6 +2172,13 @@ function extend(a, b) {
2189
2172
  a = {};
2190
2173
  }
2191
2174
  for (n in b) { // eslint-disable-line guard-for-in
2175
+ // Prototype pollution (#14883). Keys like `__proto__` may arrive as
2176
+ // own, enumerable properties through `JSON.parse`, in which case
2177
+ // assigning them would mutate the prototype of the target instead of
2178
+ // adding a property.
2179
+ if (n === '__proto__' || n === 'constructor') {
2180
+ continue;
2181
+ }
2192
2182
  a[n] = b[n];
2193
2183
  }
2194
2184
  return a;
@@ -5450,6 +5440,13 @@ const defaultOptions = {
5450
5440
  * @since 2.0
5451
5441
  * @apioption title.align
5452
5442
  */
5443
+ /**
5444
+ * A CSS class name to apply to the title's container div,
5445
+ * allowing unique CSS styling for each chart.
5446
+ *
5447
+ * @type {string}
5448
+ * @apioption title.className
5449
+ */
5453
5450
  /**
5454
5451
  * The margin between the title and the plot area, or if a subtitle
5455
5452
  * is present, the margin between the subtitle and the plot area.
@@ -5512,6 +5509,13 @@ const defaultOptions = {
5512
5509
  * @since 2.0
5513
5510
  * @apioption subtitle.align
5514
5511
  */
5512
+ /**
5513
+ * A CSS class name to apply to the subtitle's container div,
5514
+ * allowing unique CSS styling for each chart.
5515
+ *
5516
+ * @type {string}
5517
+ * @apioption subtitle.className
5518
+ */
5515
5519
  /**
5516
5520
  * When the subtitle is floating, the plot area will not move to make
5517
5521
  * space for it.
@@ -7644,6 +7648,10 @@ const defaultOptions = {
7644
7648
  /**
7645
7649
  * The URL for the credits label.
7646
7650
  *
7651
+ * URLs that do not start with one of the
7652
+ * [AST.allowedReferences](https://api.highcharts.com/class-reference/Highcharts.AST#.allowedReferences),
7653
+ * for example `javascript:` URLs, are ignored.
7654
+ *
7647
7655
  * @sample {highcharts} highcharts/credits/href/
7648
7656
  * Custom URL and text
7649
7657
  * @sample {highmaps} maps/credits/customized/
@@ -8617,6 +8625,7 @@ class Fx {
8617
8625
  * Prepare start and end values so that the path can be animated one to one.
8618
8626
  *
8619
8627
  * @function Highcharts.Fx#initPath
8628
+ * @internal
8620
8629
  *
8621
8630
  * @param {Highcharts.SVGElement} elem
8622
8631
  * The SVGElement item.
@@ -8916,7 +8925,9 @@ function animate(el, params = { pos: 1 }, opt) {
8916
8925
  if (el) {
8917
8926
  stop(el, prop);
8918
8927
  }
8919
- const fx = new Animation_Fx(el, opt, prop), d = params.d;
8928
+ const fx = new Animation_Fx(el, opt, prop), d = params.d,
8929
+ // Discrete value that doesn't animate, apply at once
8930
+ applyImmediately = prop === 'dashstyle';
8920
8931
  let start = 0, end = void 0, unit = '';
8921
8932
  if (prop === 'd' && isArray(d)) {
8922
8933
  fx.paths = fx.initPath(el, el.pathArray, d);
@@ -8925,6 +8936,9 @@ function animate(el, params = { pos: 1 }, opt) {
8925
8936
  }
8926
8937
  else if (el?.attr) {
8927
8938
  start = el.attr(prop);
8939
+ if (applyImmediately) {
8940
+ el.attr(prop, val);
8941
+ }
8928
8942
  }
8929
8943
  else if (el) {
8930
8944
  start = +(getStyle(el, prop) || 0);
@@ -8939,7 +8953,7 @@ function animate(el, params = { pos: 1 }, opt) {
8939
8953
  end = end.replace(/px/g, ''); // #4351
8940
8954
  }
8941
8955
  // Empty dashstyle animation crashes treemap on hover
8942
- if (defined(end)) {
8956
+ if (defined(end) && !applyImmediately) {
8943
8957
  fx.run(start, end, unit);
8944
8958
  }
8945
8959
  });
@@ -9261,17 +9275,25 @@ class AST {
9261
9275
  markup, 'text/html');
9262
9276
  }
9263
9277
  catch {
9264
- // There are two cases where this fails:
9265
- // 1. IE9 and PhantomJS, where the DOMParser only supports parsing
9266
- // XML
9267
- // 2. Due to a Chromium issue where chart redraws are triggered by
9268
- // a `beforeprint` event (#16931),
9269
- // https://issues.chromium.org/issues/40222135
9278
+ // Due to a Chromium issue where chart redraws are triggered by a
9279
+ // `beforeprint` event (#16931),
9280
+ // https://issues.chromium.org/issues/40222135, the Trusted
9281
+ // Types `createHTML` callback can throw "The provided callback
9282
+ // is no longer runnable" while the browser is mid-print. Retry
9283
+ // with the raw string - `DOMParser` itself is not a Trusted
9284
+ // Types sink, so parsing it directly is safe.
9285
+ try {
9286
+ doc = new DOMParser().parseFromString(markup, 'text/html');
9287
+ }
9288
+ catch {
9289
+ // Ignore, fall through to the inert-document fallback below.
9290
+ }
9270
9291
  }
9271
9292
  if (!doc) {
9272
- const body = createElement('div');
9273
- body.innerHTML = markup;
9274
- doc = { body };
9293
+ // Never assign untrusted markup to a live document's innerHTML.
9294
+ // Parse into a detached, inert document instead.
9295
+ doc = Core_Globals.doc.implementation.createHTMLDocument('');
9296
+ doc.body.innerHTML = markup;
9275
9297
  }
9276
9298
  const appendChildNodes = (node, addTo) => {
9277
9299
  // Preserve the camelCase of SVG tags via localName (#24702).
@@ -9508,7 +9530,6 @@ AST.allowedTags = [
9508
9530
  'span',
9509
9531
  'stop',
9510
9532
  'strong',
9511
- 'style',
9512
9533
  'sub',
9513
9534
  'sup',
9514
9535
  'svg',
@@ -10288,6 +10309,7 @@ class SVGElement {
10288
10309
  let ret = (this[key + 'Value'] ??
10289
10310
  this[key] ??
10290
10311
  (this.element ? this.element.getAttribute(key) : null) ??
10312
+ this.box?.[key] ?? // For labels, when animating border radius
10291
10313
  0);
10292
10314
  if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
10293
10315
  ret = parseFloat(ret);
@@ -12882,7 +12904,7 @@ function arc(cx, cy, w, h, options) {
12882
12904
  * Path
12883
12905
  */
12884
12906
  function callout(x, y, w, h, options) {
12885
- const arrowLength = 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
12907
+ const arrowLength = options?.arrowLength ?? 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
12886
12908
  const path = roundedRect(x, y, w, h, { r });
12887
12909
  if (!isNumber(anchorX)) {
12888
12910
  return path;
@@ -13506,8 +13528,12 @@ class TextBuilder {
13506
13528
  this.truncate(textNode, textNode.textContent || '', void 0, 0,
13507
13529
  // Target width
13508
13530
  width, ellipsisWidth, stringWithEllipsis);
13509
- textNode.textContent = textNode.textContent
13510
- ?.replace('\u2026', '') + '\u2026';
13531
+ // If there is still text left, add an ellipsis to
13532
+ // the end of the line
13533
+ if (textNode.textContent) {
13534
+ textNode.textContent = textNode.textContent
13535
+ ?.replace('\u2026', '') + '\u2026';
13536
+ }
13511
13537
  }
13512
13538
  break;
13513
13539
  }
@@ -13933,7 +13959,7 @@ class SVGRenderer {
13933
13959
  this.url = this.getReferenceURL();
13934
13960
  // Add description
13935
13961
  const desc = this.createElement('desc').add();
13936
- desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.2'));
13962
+ desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.1.0'));
13937
13963
  this.defs = this.createElement('defs').add();
13938
13964
  this.allowHTML = allowHTML;
13939
13965
  this.forExport = forExport;
@@ -15772,7 +15798,11 @@ class HTMLElement extends SVG_SVGElement {
15772
15798
  // Some properties require other properties to be set
15773
15799
  if (styles?.textOverflow === 'ellipsis') {
15774
15800
  styles.overflow = 'hidden';
15775
- styles.whiteSpace = 'nowrap';
15801
+ // With a line clamp, the text should wrap and ellipsis at the
15802
+ // clamped line instead of staying on one line (#24724)
15803
+ if (!(styles.lineClamp ?? this.styles.lineClamp)) {
15804
+ styles.whiteSpace = 'nowrap';
15805
+ }
15776
15806
  }
15777
15807
  // Apply line clamp
15778
15808
  if (styles?.lineClamp) {
@@ -16961,15 +16991,16 @@ var AxisDefaults;
16961
16991
  /**
16962
16992
  * The label's pixel distance from the perimeter of the plot area.
16963
16993
  * On cartesian charts, this is overridden if the `labels.y` setting
16964
- * is set.
16994
+ * is set. Defaults to 15 unless the labels are aligned inside the
16995
+ * plot area, in which case it defaults to 0.
16965
16996
  *
16966
16997
  * @sample {highcharts} highcharts/yaxis/labels-distance/
16967
16998
  * Polar chart, labels centered under the arc
16968
16999
  *
16969
17000
  * @type {number}
16970
17001
  * @product highcharts gantt
17002
+ * @apioption xAxis.labels.distance
16971
17003
  */
16972
- distance: 15,
16973
17004
  /**
16974
17005
  * Enable or disable the axis labels.
16975
17006
  *
@@ -17227,18 +17258,18 @@ var AxisDefaults;
17227
17258
  * @apioption xAxis.top
17228
17259
  */
17229
17260
  /**
17230
- * Index of another axis that this axis is linked to. When an axis is
17231
- * linked to a master axis, it will take the same extremes as
17232
- * the master, but as assigned by min or max or by setExtremes.
17233
- * It can be used to show additional info, or to ease reading the
17234
- * chart by duplicating the scales.
17261
+ * Index or [id](#xAxis.id) of another axis that this axis is linked to.
17262
+ * When an axis is linked to a master axis, it will take the same
17263
+ * extremes as the master, but as assigned by min or max or by
17264
+ * `setExtremes`. It can be used to show additional info, or to ease
17265
+ * reading the chart by duplicating the scales.
17235
17266
  *
17236
17267
  * @sample {highcharts} highcharts/xaxis/linkedto/
17237
17268
  * Different string formats of the same date
17238
17269
  * @sample {highcharts} highcharts/yaxis/linkedto/
17239
17270
  * Y values on both sides
17240
17271
  *
17241
- * @type {number}
17272
+ * @type {number|string}
17242
17273
  * @since 2.0.2
17243
17274
  * @product highcharts highstock gantt
17244
17275
  * @apioption xAxis.linkedTo
@@ -19358,7 +19389,7 @@ class Tick {
19358
19389
  */
19359
19390
  addLabel() {
19360
19391
  const tick = this, axis = tick.axis, options = axis.options, chart = axis.chart, categories = axis.categories, log = axis.logarithmic, names = axis.names, pos = tick.pos, labelOptions = (tick.options?.labels ?? options.labels), tickPositions = axis.tickPositions, isFirst = pos === tickPositions[0], isLast = pos === tickPositions[tickPositions.length - 1], tickPositionInfo = tickPositions.info, boundary = tickPositionInfo?.boundaryTicks[pos], DTLFormats = options.dateTimeLabelFormats;
19361
- let label = tick.label, dateTimeLabelFormat, dateTimeLabelFormats, i;
19392
+ let dateTimeLabelFormat, dateTimeLabelFormats, i;
19362
19393
  // The context value
19363
19394
  let value = this.parameters.category || (categories ?
19364
19395
  (categories[pos] ?? names[pos] ?? pos) :
@@ -19444,10 +19475,15 @@ class Tick {
19444
19475
  }
19445
19476
  return axis.defaultLabelFormatter.call(ctx);
19446
19477
  };
19447
- const text = labelFormatter.call(ctx, ctx);
19478
+ /**
19479
+ * The rendered text label of the tick.
19480
+ * @name Highcharts.Tick#label
19481
+ * @type {Highcharts.SVGElement|undefined}
19482
+ */
19483
+ tick.label = tick.createLabel(labelFormatter.call(ctx, ctx), labelOptions);
19448
19484
  // Set up conditional formatting based on the format list if existing.
19449
- const list = dateTimeLabelFormats?.list;
19450
- if (list) {
19485
+ const list = dateTimeLabelFormats?.list, label = tick.label;
19486
+ if (list && label) {
19451
19487
  tick.shortenLabel = function () {
19452
19488
  for (i = 0; i < list.length; i++) {
19453
19489
  extend(ctx, { dateTimeLabelFormat: list[i] });
@@ -19455,43 +19491,17 @@ class Tick {
19455
19491
  text: labelFormatter.call(ctx, ctx)
19456
19492
  });
19457
19493
  if (label.getBBox().width <
19458
- axis.getSlotWidth(tick) - 2 *
19459
- (labelOptions.padding || 0)) {
19494
+ axis.getSlotWidth(tick) - 2 * (labelOptions.padding || 0)) {
19460
19495
  return;
19461
19496
  }
19462
19497
  }
19463
- label.attr({
19464
- text: ''
19465
- });
19498
+ label.attr({ text: '' });
19466
19499
  };
19467
19500
  }
19468
19501
  else {
19469
19502
  // #15692
19470
19503
  tick.shortenLabel = void 0;
19471
19504
  }
19472
- // First call
19473
- if (!label) {
19474
- /**
19475
- * The rendered text label of the tick.
19476
- * @name Highcharts.Tick#label
19477
- * @type {Highcharts.SVGElement|undefined}
19478
- */
19479
- tick.label = label = tick.createLabel(text, labelOptions);
19480
- // Base value to detect change for new calls to getBBox
19481
- tick.rotation = 0;
19482
- // Update
19483
- }
19484
- else if (label.textStr !== text) {
19485
- // When resetting text, also reset the width if dynamically set
19486
- // (#8809)
19487
- if (label.textWidth &&
19488
- !labelOptions.style.width &&
19489
- !label.styles.width) {
19490
- label.css({ width: void 0 });
19491
- }
19492
- label.attr({ text });
19493
- label.textPxLength = label.getBBox().width;
19494
- }
19495
19505
  }
19496
19506
  /**
19497
19507
  * Render and return the label of the tick.
@@ -19499,18 +19509,33 @@ class Tick {
19499
19509
  * @internal
19500
19510
  * @function Highcharts.Tick#createLabel
19501
19511
  */
19502
- createLabel(str, labelOptions, xy) {
19503
- const axis = this.axis, { renderer, styledMode } = axis.chart, whiteSpace = labelOptions.style.whiteSpace, label = defined(str) && labelOptions.enabled ?
19504
- renderer
19505
- .text(str, xy?.x, xy?.y, labelOptions.useHTML)
19506
- .add(axis.labelGroup) :
19507
- void 0;
19512
+ createLabel(text, labelOptions, xy) {
19513
+ const axis = this.axis, { renderer, styledMode } = axis.chart, style = labelOptions.style, whiteSpace = style.whiteSpace;
19514
+ let label = this.label;
19515
+ if (defined(text) && labelOptions.enabled) {
19516
+ label || (label = renderer
19517
+ .text(text, xy?.x, xy?.y, labelOptions.useHTML)
19518
+ .add(axis.labelGroup));
19519
+ }
19520
+ else if (label) {
19521
+ label = label.destroy();
19522
+ // Reset so it doesn't animate when re-enabled
19523
+ this.isNewLabel = true;
19524
+ }
19508
19525
  // Un-rotated length
19509
- if (label) {
19526
+ if (label && (label.labelStyle !== style || text !== label.textStr)) {
19527
+ // Store a reference to the current style object to avoid running
19528
+ // this block on every render call unless something actually
19529
+ // changes.
19530
+ label.labelStyle = style;
19531
+ if (text !== label.textStr) {
19532
+ label.attr({ text });
19533
+ delete label.textPxLength;
19534
+ }
19510
19535
  if (!styledMode) {
19511
- label.css(merge(labelOptions.style));
19536
+ label.css(merge(style));
19512
19537
  }
19513
- label.textPxLength = label.getBBox().width;
19538
+ label.textPxLength ?? (label.textPxLength = label.getBBox().width);
19514
19539
  // Apply the white-space setting after we read the full text width
19515
19540
  if (!styledMode && whiteSpace) {
19516
19541
  label.css({ whiteSpace });
@@ -19582,19 +19607,27 @@ class Tick {
19582
19607
  * @internal
19583
19608
  */
19584
19609
  getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
19585
- const axis = this.axis, transA = axis.transA, reversed = ( // #7911
19586
- axis.isLinked && axis.linkedParent ?
19610
+ const axis = this.axis, { labelAlign, side, staggerLines, transA } = axis, reversed = ( // #7911
19611
+ axis.linkedParent ?
19587
19612
  axis.linkedParent.reversed :
19588
- axis.reversed), staggerLines = axis.staggerLines, rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19613
+ axis.reversed), rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19589
19614
  // Adjust for label alignment if we use reserveSpace: true (#5286)
19590
19615
  labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?
19591
- -axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :
19592
- 0), distance = labelOptions.distance, pos = {};
19616
+ -(axis.labelOffset || 0) * (axis.labelAlign === 'center' ? 0.5 : 1) :
19617
+ 0), distance = labelOptions.distance ?? (
19618
+ // If the label is aligned inside the plot area, default to 0.
19619
+ // This is default behavior or Stock y-axis labels.
19620
+ (side === 1 &&
19621
+ labelAlign === 'right' &&
19622
+ !labelOptions.reserveSpace) ? 0 :
19623
+ (side === 3 &&
19624
+ labelAlign === 'left' &&
19625
+ !labelOptions.reserveSpace) ? 0 : 15), pos = {};
19593
19626
  let yOffset, line;
19594
- if (axis.side === 0) {
19627
+ if (side === 0) {
19595
19628
  yOffset = label.rotation ? -distance : -label.getBBox().height;
19596
19629
  }
19597
- else if (axis.side === 2) {
19630
+ else if (side === 2) {
19598
19631
  yOffset = rotCorr.y + distance;
19599
19632
  }
19600
19633
  else {
@@ -19603,12 +19636,12 @@ class Tick {
19603
19636
  (rotCorr.y - label.getBBox(false, 0).height / 2);
19604
19637
  }
19605
19638
  if (defined(labelOptions.y)) {
19606
- yOffset = axis.side === 0 && axis.horiz ?
19639
+ yOffset = side === 0 && axis.horiz ?
19607
19640
  labelOptions.y + yOffset :
19608
19641
  labelOptions.y;
19609
19642
  }
19610
19643
  x = x +
19611
- (labelOptions.x ?? [0, 1, 0, -1][axis.side] * distance) +
19644
+ (labelOptions.x ?? [0, 1, 0, -1][side] * distance) +
19612
19645
  labelOffsetCorrection +
19613
19646
  rotCorr.x -
19614
19647
  (tickmarkOffset && horiz ?
@@ -19663,7 +19696,7 @@ class Tick {
19663
19696
  * @function Highcharts.Tick#handleOverflow
19664
19697
  */
19665
19698
  handleOverflow(xy) {
19666
- const tick = this, axis = this.axis, labelOptions = axis.options.labels, pxPos = xy.x, chartWidth = axis.chart.chartWidth, spacing = axis.chart.spacing, leftBound = axis.labelLeft ?? Math.min(axis.pos, spacing[3]), rightBound = (axis.labelRight ?? Math.max(!axis.isRadial ? axis.pos + axis.len : 0, chartWidth - spacing[1])), label = this.label, rotation = this.rotation, factor = getAlignFactor(axis.labelAlign || label.attr('align')), labelWidth = label.getBBox().width, slotWidth = axis.getSlotWidth(tick), xCorrection = factor, css = {};
19699
+ const tick = this, { axis, label } = this, labelOptions = axis.options.labels, pxPos = xy.x, { chartWidth, spacing } = axis.chart, leftBound = axis.labelLeft ?? Math.min(axis.pos, spacing[3]), rightBound = (axis.labelRight ?? Math.max(!axis.isRadial ? axis.pos + axis.len : 0, chartWidth - spacing[1])), rotation = label?.rotation || 0, factor = getAlignFactor(axis.labelAlign || label?.attr('align')), labelWidth = label?.getBBox().width || 0, slotWidth = axis.getSlotWidth(tick), xCorrection = factor;
19667
19700
  let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
19668
19701
  // Check if the label overshoots the chart spacing box. If it does, move
19669
19702
  // it. If it now overshoots the slotWidth, add ellipsis.
@@ -19711,10 +19744,10 @@ class Tick {
19711
19744
  tick.shortenLabel();
19712
19745
  }
19713
19746
  else {
19714
- label.css(extend(css, {
19747
+ label.css({
19715
19748
  width: Math.floor(textWidth) + 'px',
19716
19749
  lineClamp: axis.isRadial ? 0 : 1
19717
- }));
19750
+ });
19718
19751
  }
19719
19752
  }
19720
19753
  }
@@ -19730,8 +19763,11 @@ class Tick {
19730
19763
  * @param {number} [opacity]
19731
19764
  */
19732
19765
  render(index, old, opacity) {
19733
- const tick = this, axis = tick.axis, horiz = axis.horiz, pos = tick.pos, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), xy = tick.getPosition(horiz, pos, tickmarkOffset, old), x = xy.x, y = xy.y, axisStart = axis.pos, axisEnd = axisStart + axis.len, pxPos = horiz ? x : y;
19734
- const labelOpacity = (opacity ?? tick.label?.newOpacity ?? 1);
19766
+ const tick = this, axis = tick.axis, horiz = (old ? axis.old?.horiz : void 0) ?? axis.horiz, pos = tick.pos, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), xy = tick.getPosition(horiz, pos, tickmarkOffset, old), x = xy.x, y = xy.y, axisStart = axis.pos, axisEnd = axisStart + axis.len, pxPos = horiz ? x : y;
19767
+ if (!axis.visible) {
19768
+ opacity = 0;
19769
+ }
19770
+ const labelOpacity = opacity ?? 1;
19735
19771
  // Anything that is not between `axis.pos` and `axis.pos + axis.length`
19736
19772
  // should not be visible (#20166). The `correctFloat` is for reversed
19737
19773
  // axes in Safari.
@@ -19759,25 +19795,21 @@ class Tick {
19759
19795
  * @param {number} opacity The opacity of the grid line
19760
19796
  */
19761
19797
  renderGridLine(old, opacity) {
19762
- const tick = this, axis = tick.axis, options = axis.options, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), renderer = axis.chart.renderer;
19763
- let gridLine = tick.gridLine, gridLinePath, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19798
+ const tick = this, axis = tick.axis, options = axis.options, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), { renderer, styledMode } = axis.chart;
19799
+ let gridLine = tick.gridLine, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19764
19800
  if (tick.type === 'minor') {
19765
19801
  gridLineWidth = options.minorGridLineWidth;
19766
19802
  gridLineColor = options.minorGridLineColor;
19767
19803
  dashStyle = options.minorGridLineDashStyle;
19768
19804
  }
19805
+ // Apply the stroke width initially so the crisping works
19806
+ if (!styledMode) {
19807
+ attribs['stroke-width'] = gridLineWidth || 0;
19808
+ }
19769
19809
  if (!gridLine) {
19770
- if (!axis.chart.styledMode) {
19771
- attribs.stroke = gridLineColor;
19772
- attribs['stroke-width'] = gridLineWidth || 0;
19773
- attribs.dashstyle = dashStyle;
19774
- }
19775
19810
  if (!type) {
19776
19811
  attribs.zIndex = 1;
19777
19812
  }
19778
- if (old) {
19779
- opacity = 0;
19780
- }
19781
19813
  /**
19782
19814
  * The rendered grid line of the tick.
19783
19815
  * @name Highcharts.Tick#gridLine
@@ -19788,22 +19820,24 @@ class Tick {
19788
19820
  .addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')
19789
19821
  .add(axis.gridGroup);
19790
19822
  }
19791
- if (gridLine) {
19792
- gridLinePath = axis.getPlotLinePath({
19793
- value: pos + tickmarkOffset,
19794
- lineWidth: gridLine.strokeWidth(),
19795
- force: 'pass',
19796
- old: old,
19797
- acrossPanes: false // #18025
19798
- });
19823
+ // Grid line path
19824
+ const d = axis.getPlotLinePath({
19825
+ value: pos + tickmarkOffset,
19826
+ lineWidth: gridLine.strokeWidth(),
19827
+ force: 'pass',
19828
+ old: old,
19829
+ acrossPanes: false // #18025
19830
+ });
19831
+ if (d) {
19832
+ attribs.d = d;
19833
+ attribs.opacity = old ? 0 : opacity;
19834
+ if (!styledMode) {
19835
+ attribs.stroke = gridLineColor;
19836
+ attribs.dashstyle = dashStyle;
19837
+ }
19799
19838
  // If the parameter 'old' is set, the current call will be followed
19800
19839
  // by another call, therefore do not do any animations this time
19801
- if (gridLinePath) {
19802
- gridLine[old || tick.isNew ? 'attr' : 'animate']({
19803
- d: gridLinePath,
19804
- opacity: opacity
19805
- });
19806
- }
19840
+ gridLine[old || tick.isNew ? 'attr' : 'animate'](attribs);
19807
19841
  }
19808
19842
  }
19809
19843
  /**
@@ -19815,13 +19849,13 @@ class Tick {
19815
19849
  * @param {number} opacity The opacity of the mark
19816
19850
  */
19817
19851
  renderMark(xy, opacity) {
19818
- const tick = this, axis = tick.axis, options = axis.options, renderer = axis.chart.renderer, type = tick.type, tickSize = axis.tickSize(type ? type + 'Tick' : 'tick'), x = xy.x, y = xy.y, tickWidth = options[type !== 'minor' ? 'tickWidth' : 'minorTickWidth'] ?? (!type && axis.isXAxis ? 1 : 0), // X axis defaults to 1
19852
+ const tick = this, axis = tick.axis, { chart, options } = axis, renderer = chart.renderer, type = tick.type, tickSize = axis.tickSize(type ? type + 'Tick' : 'tick'), x = xy.x, y = xy.y, tickWidth = options[type !== 'minor' ? 'tickWidth' : 'minorTickWidth'] ?? (!type && axis.isXAxis ? 1 : 0), // X axis defaults to 1
19819
19853
  tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
19820
19854
  let mark = tick.mark;
19821
- const isNewMark = !mark;
19822
- if (tickSize) {
19855
+ const verb = mark ? 'animate' : 'attr';
19856
+ if (tickSize || mark) {
19823
19857
  // Negate the length
19824
- if (axis.opposite) {
19858
+ if (axis.opposite && tickSize) {
19825
19859
  tickSize[0] = -tickSize[0];
19826
19860
  }
19827
19861
  // First time, create it
@@ -19834,16 +19868,16 @@ class Tick {
19834
19868
  tick.mark = mark = renderer.path()
19835
19869
  .addClass('highcharts-' + (type ? type + '-' : '') + 'tick')
19836
19870
  .add(axis.axisGroup);
19837
- if (!axis.chart.styledMode) {
19838
- mark.attr({
19839
- stroke: tickColor,
19840
- 'stroke-width': tickWidth
19841
- });
19842
- }
19843
19871
  }
19844
- mark[isNewMark ? 'attr' : 'animate']({
19845
- d: tick.getMarkPath(x, y, tickSize[0], mark.strokeWidth(), axis.horiz, renderer),
19846
- opacity: opacity
19872
+ if (!chart.styledMode) {
19873
+ mark[verb]({
19874
+ stroke: tickColor,
19875
+ 'stroke-width': tickWidth
19876
+ });
19877
+ }
19878
+ mark[verb]({
19879
+ d: tick.getMarkPath(x, y, tickSize?.[0] || 0, mark.strokeWidth(), axis.horiz, renderer),
19880
+ opacity: tickSize ? opacity : 0
19847
19881
  });
19848
19882
  }
19849
19883
  }
@@ -20005,6 +20039,11 @@ extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
20005
20039
  * Axis options
20006
20040
  */
20007
20041
  class Axis {
20042
+ /* *
20043
+ *
20044
+ * Static Properties
20045
+ *
20046
+ * */
20008
20047
  /* *
20009
20048
  *
20010
20049
  * Constructors
@@ -20081,9 +20120,11 @@ class Axis {
20081
20120
  * @name Highcharts.Axis#side
20082
20121
  * @type {number}
20083
20122
  */
20084
- axis.side = (userOptions.side ?? axis.side ?? (horiz ?
20085
- (axis.opposite ? 0 : 2) : // Top : bottom
20086
- (axis.opposite ? 1 : 3)));
20123
+ axis.side = userOptions.side ??
20124
+ (horiz ?
20125
+ (axis.opposite ? 0 : 2) : // Top : bottom
20126
+ (axis.opposite ? 1 : 3) // Right : left
20127
+ );
20087
20128
  /**
20088
20129
  * Current options for the axis after merge of defaults and user's
20089
20130
  * options.
@@ -20094,8 +20135,8 @@ class Axis {
20094
20135
  axis.setOptions(userOptions);
20095
20136
  const options = axis.options, labelsOptions = options.labels;
20096
20137
  // Set the type and fire an event
20097
- axis.type ?? (axis.type = options.type || 'linear');
20098
- axis.uniqueNames ?? (axis.uniqueNames = options.uniqueNames ?? true);
20138
+ axis.type = options.type || 'linear';
20139
+ axis.uniqueNames = options.uniqueNames ?? true;
20099
20140
  fireEvent(axis, 'afterSetType');
20100
20141
  /**
20101
20142
  * User's options for this axis without defaults.
@@ -20112,7 +20153,7 @@ class Axis {
20112
20153
  * @name Highcharts.Axis#reversed
20113
20154
  * @type {boolean}
20114
20155
  */
20115
- axis.reversed = (options.reversed ?? axis.reversed);
20156
+ axis.reversed = options.reversed;
20116
20157
  axis.visible = options.visible;
20117
20158
  axis.zoomEnabled = options.zoomEnabled;
20118
20159
  // Initial categories
@@ -20134,16 +20175,12 @@ class Axis {
20134
20175
  */
20135
20176
  axis.categories = (isArray(options.categories) && options.categories) ||
20136
20177
  (axis.hasNames ? [] : void 0);
20137
- // Axis names and its map for quick access. Backwards mapping is much
20138
- // faster than array searching (#7725). Preserve on update (#3830)
20139
- axis.names || (axis.names = []);
20178
+ axis.names || (axis.names = []); // Preserve on update (#3830)
20140
20179
  axis.namesMap || (axis.namesMap = {});
20141
20180
  // Placeholder for plotLines and plotBands groups
20142
- axis.plotLinesAndBandsGroups = {};
20181
+ axis.plotLinesAndBandsGroups || (axis.plotLinesAndBandsGroups = {});
20143
20182
  // Shorthand types
20144
20183
  axis.positiveValuesOnly = !!axis.logarithmic;
20145
- // Flag, if axis is linked to another axis
20146
- axis.isLinked = defined(options.linkedTo);
20147
20184
  /**
20148
20185
  * List of major ticks mapped by position on axis.
20149
20186
  *
@@ -20152,8 +20189,8 @@ class Axis {
20152
20189
  * @name Highcharts.Axis#ticks
20153
20190
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20154
20191
  */
20155
- axis.ticks = {};
20156
- axis.labelEdge = [];
20192
+ axis.ticks || (axis.ticks = {});
20193
+ axis.labelEdge || (axis.labelEdge = []);
20157
20194
  /**
20158
20195
  * List of minor ticks mapped by position on the axis.
20159
20196
  *
@@ -20162,11 +20199,9 @@ class Axis {
20162
20199
  * @name Highcharts.Axis#minorTicks
20163
20200
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20164
20201
  */
20165
- axis.minorTicks = {};
20166
- // List of plotLines/Bands
20167
- axis.plotLinesAndBands = [];
20202
+ axis.minorTicks || (axis.minorTicks = {});
20168
20203
  // Alternate bands
20169
- axis.alternateBands = {};
20204
+ axis.alternateBands || (axis.alternateBands = {});
20170
20205
  /**
20171
20206
  * The length of the axis in terms of pixels.
20172
20207
  *
@@ -20200,7 +20235,7 @@ class Axis {
20200
20235
  * @name Highcharts.Axis#crosshair
20201
20236
  * @type {boolean|Highcharts.AxisCrosshairOptions}
20202
20237
  */
20203
- const crosshair = options.crosshair ?? splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1];
20238
+ const crosshair = options.crosshair ?? splat(chart.options.tooltip?.crosshairs)[isXAxis ? 0 : 1];
20204
20239
  axis.crosshair = crosshair === true ? {} : crosshair;
20205
20240
  // Register. Don't add it again on Axis.update().
20206
20241
  if (chart.axes.indexOf(axis) === -1) { //
@@ -20255,14 +20290,14 @@ class Axis {
20255
20290
  },
20256
20291
  margin: 15
20257
20292
  } :
20258
- // Left and right axis, title rotated 90 or 270 degrees
20293
+ // Left and right axis, title rotated -90 or 90 degrees
20259
20294
  // respectively
20260
20295
  {
20261
20296
  labels: {
20262
20297
  padding: 1
20263
20298
  },
20264
20299
  title: {
20265
- rotation: 90 * this.side
20300
+ rotation: this.side === 1 ? 90 : -90
20266
20301
  }
20267
20302
  };
20268
20303
  this.options = merge(sideSpecific,
@@ -20476,6 +20511,9 @@ class Axis {
20476
20511
  if (!axis.isRadial) {
20477
20512
  returnValue = correctFloat(returnValue);
20478
20513
  }
20514
+ if (Math.abs(returnValue) < 1e-9) {
20515
+ returnValue = 0;
20516
+ }
20479
20517
  }
20480
20518
  return returnValue;
20481
20519
  }
@@ -20531,7 +20569,7 @@ class Axis {
20531
20569
  * The SVG path definition for the plot line.
20532
20570
  */
20533
20571
  getPlotLinePath(options) {
20534
- const axis = this, chart = axis.chart, axisLeft = axis.left, axisTop = axis.top, old = options.old, value = options.value, lineWidth = options.lineWidth, cHeight = (old && chart.oldChartHeight) || chart.chartHeight, cWidth = (old && chart.oldChartWidth) || chart.chartWidth, transB = axis.transB;
20572
+ const axis = this, { chart, left, top, transB } = axis, { lineWidth, old, value } = options, horiz = (old ? axis.old?.horiz : void 0) ?? axis.horiz, cHeight = (old && chart.oldChartHeight) || chart.chartHeight, cWidth = (old && chart.oldChartWidth) || chart.chartWidth;
20535
20573
  let translatedValue = options.translatedValue, force = options.force, x1, y1, x2, y2, skip;
20536
20574
  // eslint-disable-next-line valid-jsdoc
20537
20575
  /**
@@ -20569,17 +20607,17 @@ class Axis {
20569
20607
  skip = true;
20570
20608
  force = false; // #7175, don't force it when path is invalid
20571
20609
  }
20572
- else if (axis.horiz) {
20573
- y1 = axisTop;
20610
+ else if (horiz) {
20611
+ y1 = top;
20574
20612
  y2 = cHeight - axis.bottom + (axis.options.isInternal ?
20575
20613
  0 :
20576
20614
  (chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator
20577
- x1 = x2 = between(x1, axisLeft, axisLeft + axis.width);
20615
+ x1 = x2 = between(x1, left, left + axis.width);
20578
20616
  }
20579
20617
  else {
20580
- x1 = axisLeft;
20618
+ x1 = left;
20581
20619
  x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);
20582
- y1 = y2 = between(y1, axisTop, axisTop + axis.height);
20620
+ y1 = y2 = between(y1, top, top + axis.height);
20583
20621
  }
20584
20622
  e.path = skip && !force ?
20585
20623
  void 0 :
@@ -21008,7 +21046,7 @@ class Axis {
21008
21046
  * @emits Highcharts.Axis#event:foundExtremes
21009
21047
  */
21010
21048
  setTickInterval(secondPass) {
21011
- const axis = this, { categories, chart, dataMax, dataMin, dateTime, isXAxis, logarithmic, options, softThreshold } = axis, time = chart.time, threshold = isNumber(axis.threshold) ? axis.threshold : void 0, minRange = axis.minRange || 0, { ceiling, floor, linkedTo, softMax, softMin } = options, linkedParent = isNumber(linkedTo) && chart[axis.coll]?.[linkedTo], tickPixelIntervalOption = options.tickPixelInterval;
21049
+ const axis = this, { categories, chart, dataMax, dataMin, dateTime, isXAxis, logarithmic, options, softThreshold } = axis, time = chart.time, threshold = isNumber(axis.threshold) ? axis.threshold : void 0, minRange = axis.minRange || 0, { ceiling, floor, softMax, softMin } = options, linkedParent = axis.linkedParent, tickPixelIntervalOption = options.tickPixelInterval;
21012
21050
  let maxPadding = options.maxPadding, minPadding = options.minPadding, range = 0, linkedParentExtremes,
21013
21051
  // Only non-negative tickInterval is valid, #12961
21014
21052
  tickIntervalOption = isNumber(options.tickInterval) && options.tickInterval >= 0 ?
@@ -21021,7 +21059,6 @@ class Axis {
21021
21059
  hardMax = (axis.userMax ?? time.parse(options.max));
21022
21060
  // Linked axis gets the extremes from the parent axis
21023
21061
  if (linkedParent) {
21024
- axis.linkedParent = linkedParent;
21025
21062
  linkedParentExtremes = linkedParent.getExtremes();
21026
21063
  axis.min =
21027
21064
  linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
@@ -21331,7 +21368,7 @@ class Axis {
21331
21368
  // Reset min/max or remove extremes based on start/end on tick
21332
21369
  this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor
21333
21370
  this.trimTicks(tickPositions, startOnTick, endOnTick);
21334
- if (!this.isLinked && isNumber(this.min) && isNumber(this.max)) {
21371
+ if (!this.linkedParent && isNumber(this.min) && isNumber(this.max)) {
21335
21372
  // Subtract half a unit (#2619, #2846, #2515, #3390), but not in
21336
21373
  // case of multiple ticks (#6897)
21337
21374
  if (this.single &&
@@ -21366,7 +21403,7 @@ class Axis {
21366
21403
  trimTicks(tickPositions, startOnTick, endOnTick) {
21367
21404
  const roundedMin = tickPositions[0], roundedMax = tickPositions[tickPositions.length - 1], minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)
21368
21405
  fireEvent(this, 'trimTicks');
21369
- if (!this.isLinked ||
21406
+ if (!this.linkedParent ||
21370
21407
  // Linked non-grid axes should trim ticks, #21743.
21371
21408
  // Grid axis has custom handling of ticks.
21372
21409
  !this.grid) {
@@ -21640,7 +21677,15 @@ class Axis {
21640
21677
  * @emits Highcharts.Axis#event:afterSetScale
21641
21678
  */
21642
21679
  setScale() {
21643
- const axis = this, { coll, stacking } = axis;
21680
+ const axis = this, { chart, coll, options, stacking } = axis, { linkedTo } = options, axes = chart[coll] || [], index = axes.indexOf(axis), parent = isString(linkedTo) ?
21681
+ find(axes, (a) => a.options.id === linkedTo) :
21682
+ (isNumber(linkedTo) ? axes[linkedTo] : void 0), linkedParent = axis.linkedParent =
21683
+ parent === axis ? void 0 : parent;
21684
+ // Scale a later-ordered parent first so its extremes are ready. Skip
21685
+ // grid column axes, which live outside the collection (#24658).
21686
+ if (linkedParent && index > -1 && axes.indexOf(linkedParent) > index) {
21687
+ linkedParent.setScale();
21688
+ }
21644
21689
  let isDirtyData = false, isXAxisDirty = false;
21645
21690
  axis.series.forEach((series) => {
21646
21691
  isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;
@@ -21657,7 +21702,7 @@ class Axis {
21657
21702
  if (isDirtyAxisLength ||
21658
21703
  isDirtyData ||
21659
21704
  isXAxisDirty ||
21660
- axis.isLinked ||
21705
+ axis.linkedParent ||
21661
21706
  axis.forceRedraw ||
21662
21707
  axis.userMin !== axis.old?.userMin ||
21663
21708
  axis.userMax !== axis.old?.userMax ||
@@ -22019,7 +22064,7 @@ class Axis {
22019
22064
  renderUnsquish() {
22020
22065
  const chart = this.chart, renderer = chart.renderer, tickPositions = this.tickPositions, ticks = this.ticks, labelOptions = this.options.labels, labelStyleOptions = labelOptions.style, horiz = this.horiz, slotWidth = this.getSlotWidth(), innerWidth = Math.max(1, Math.round(slotWidth - (horiz ?
22021
22066
  2 * (labelOptions.padding || 0) :
22022
- labelOptions.distance || 0 // #21172
22067
+ labelOptions.distance ?? 15 // #21172
22023
22068
  ))), attr = {}, labelMetrics = this.labelMetrics(), lineClampOption = labelStyleOptions.lineClamp;
22024
22069
  let commonWidth, lineClamp = lineClampOption ?? (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1), maxLabelLength = 0;
22025
22070
  // Set rotation option unless it is "auto", like in gauges
@@ -22099,7 +22144,6 @@ class Axis {
22099
22144
  });
22100
22145
  }
22101
22146
  }
22102
- tick.rotation = attr.rotation;
22103
22147
  }
22104
22148
  }, this);
22105
22149
  // Note: Why is this not part of getLabelPosition?
@@ -22131,46 +22175,50 @@ class Axis {
22131
22175
  * Whether or not to display the title.
22132
22176
  */
22133
22177
  addTitle(display) {
22134
- const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode;
22135
- let textAlign;
22136
- if (!axis.axisTitle) {
22137
- textAlign = axisTitleOptions.textAlign;
22138
- if (!textAlign) {
22139
- textAlign = (horiz ? {
22140
- low: 'left',
22141
- middle: 'center',
22142
- high: 'right'
22143
- } : {
22144
- low: opposite ? 'right' : 'left',
22145
- middle: 'center',
22146
- high: opposite ? 'left' : 'right'
22147
- })[axisTitleOptions.align];
22148
- }
22149
- axis.axisTitle = renderer
22150
- .text(axisTitleOptions.text || '', 0, 0, axisTitleOptions.useHTML)
22151
- .attr({
22152
- zIndex: 7,
22153
- rotation: axisTitleOptions.rotation || 0,
22154
- align: textAlign
22155
- })
22178
+ const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode, textAlign = axisTitleOptions.textAlign ||
22179
+ (horiz ? {
22180
+ low: 'left',
22181
+ middle: 'center',
22182
+ high: 'right'
22183
+ } : {
22184
+ low: opposite ? 'right' : 'left',
22185
+ middle: 'center',
22186
+ high: opposite ? 'left' : 'right'
22187
+ })[axisTitleOptions.align], attr = {
22188
+ text: axisTitleOptions.text || '',
22189
+ zIndex: 7,
22190
+ align: textAlign
22191
+ }, animatable = {
22192
+ rotation: axisTitleOptions.rotation || 0
22193
+ };
22194
+ let axisTitle = axis.axisTitle;
22195
+ if (!axisTitle) {
22196
+ axisTitle = renderer
22197
+ .text('', 0, 0, axisTitleOptions.useHTML)
22198
+ .attr(extend(attr, animatable))
22156
22199
  .addClass('highcharts-axis-title');
22157
- // #7814, don't mutate style option
22158
- if (!styledMode) {
22159
- axis.axisTitle.css(merge(axisTitleOptions.style));
22160
- }
22161
- axis.axisTitle.add(axis.axisGroup);
22162
- axis.axisTitle.isNew = true;
22200
+ axisTitle.add(axis.axisGroup);
22201
+ axisTitle.isNew = true;
22163
22202
  }
22164
- // Max width defaults to the length of the axis
22165
- if (!styledMode &&
22166
- !axisTitleOptions.style.width &&
22167
- !axis.isRadial) {
22168
- axis.axisTitle.css({
22169
- width: axis.len + 'px'
22170
- });
22203
+ else {
22204
+ axisTitle
22205
+ .attr(attr)
22206
+ .animate(animatable);
22207
+ }
22208
+ if (!styledMode) {
22209
+ // #7814, don't mutate the style option
22210
+ const css = merge(axisTitleOptions.style);
22211
+ // Max width defaults to the length of the axis
22212
+ if (!axisTitleOptions.style.width &&
22213
+ !axis.isRadial) {
22214
+ css.width = axis.len + 'px';
22215
+ }
22216
+ axisTitle.css(css);
22171
22217
  }
22172
22218
  // Hide or show the title depending on whether showEmpty is set
22173
- axis.axisTitle[display ? 'show' : 'hide'](display);
22219
+ axisTitle[display ? 'show' : 'hide'](display);
22220
+ // Register
22221
+ axis.axisTitle = axisTitle;
22174
22222
  }
22175
22223
  /**
22176
22224
  * Generates a tick for initial positioning.
@@ -22198,17 +22246,18 @@ class Axis {
22198
22246
  createGroups() {
22199
22247
  const { axisParent, // Used in color axis
22200
22248
  chart, coll, options } = this, renderer = chart.renderer;
22201
- const createGroup = (name, suffix, zIndex) => renderer.g(name)
22202
- .attr({ zIndex })
22249
+ const createGroup = (name, suffix) => renderer.g(name)
22203
22250
  .addClass(`highcharts-${coll.toLowerCase()}${suffix} ` +
22204
22251
  (this.isRadial ? `highcharts-radial-axis${suffix} ` : '') +
22205
22252
  (options.className || ''))
22206
22253
  .add(axisParent);
22207
- if (!this.axisGroup) {
22208
- this.gridGroup = createGroup('grid', '-grid', options.gridZIndex).clip(this.clippable ? chart.plotClipInner : void 0);
22209
- this.axisGroup = createGroup('axis', '', options.zIndex);
22210
- this.labelGroup = createGroup('axis-labels', '-labels', options.labels.zIndex);
22211
- }
22254
+ (this.axisGroup || (this.axisGroup = createGroup('axis', '')))
22255
+ .attr({ zIndex: options.zIndex });
22256
+ (this.gridGroup || (this.gridGroup = createGroup('grid', '-grid')))
22257
+ .clip(this.clippable ? chart.plotClipInner : void 0)
22258
+ .attr({ zIndex: options.gridZIndex });
22259
+ (this.labelGroup || (this.labelGroup = createGroup('axis-labels', '-labels')))
22260
+ .attr({ zIndex: options.labels.zIndex });
22212
22261
  }
22213
22262
  /**
22214
22263
  * Shuffle existing category ticks, like in bar race chart
@@ -22216,8 +22265,11 @@ class Axis {
22216
22265
  * @internal
22217
22266
  */
22218
22267
  shuffleTicks() {
22219
- const ticks = this.ticks, oldNames = this.old?.names;
22220
- if (this.type === 'category' && oldNames) {
22268
+ const ticks = this.ticks, oldNames = this.old?.names, hasDuplicates = (arr) => new Set(arr).size !== arr.length;
22269
+ if (this.type === 'category' &&
22270
+ oldNames &&
22271
+ !hasDuplicates(oldNames) &&
22272
+ !hasDuplicates(this.names)) {
22221
22273
  oldNames.forEach((name, oldPos) => {
22222
22274
  const pos = this.namesMap[name];
22223
22275
  if (defined(pos) && oldPos !== pos) {
@@ -22259,7 +22311,7 @@ class Axis {
22259
22311
  * @emits Highcharts.Axis#event:afterGetOffset
22260
22312
  */
22261
22313
  getOffset() {
22262
- const axis = this, { chart, horiz, options, side, ticks, tickPositions, coll } = axis, hasData = axis.hasData(), axisTitleOptions = options.title, labelOptions = options.labels, hasCrossing = isNumber(options.crossing), axisOffset = chart.axisOffset, clipOffset = chart.clipOffset, directionFactor = [-1, 1, 1, -1][side];
22314
+ const axis = this, { chart, horiz, options, side, ticks, tickPositions, coll } = axis, hasData = axis.hasData(), axisTitleOptions = options.title, labelOptions = options.labels, hasCrossing = isNumber(options.crossing), axisOffset = chart.axisOffset, clipOffset = chart.clipOffset, directionFactor = [-1, 1, 1, -1][side], distance = labelOptions.distance ?? 15;
22263
22315
  let tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }, absTickRotCorrX = 0, showAxis, titleOffset = 0, titleOffsetOption, titleMargin = 0, labelOffset = 0, // Reset
22264
22316
  labelOffsetPadded, lineHeightCorrection, reserveSpaceDefault;
22265
22317
  // For reuse in Axis.render
@@ -22267,7 +22319,7 @@ class Axis {
22267
22319
  // Set/reset staggerLines
22268
22320
  axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;
22269
22321
  axis.createGroups();
22270
- if (hasData || axis.isLinked) {
22322
+ if (hasData || axis.linkedParent) {
22271
22323
  // Shuffle existing category ticks
22272
22324
  axis.shuffleTicks();
22273
22325
  // Generate new ticks
@@ -22319,6 +22371,9 @@ class Axis {
22319
22371
  axisTitleOptions.margin ?? (horiz ? 5 : 10);
22320
22372
  }
22321
22373
  }
22374
+ else {
22375
+ axis.axisTitle = axis.axisTitle?.destroy();
22376
+ }
22322
22377
  // Render the axis line
22323
22378
  axis.renderLine();
22324
22379
  // Handle automatic or user set offset
@@ -22342,12 +22397,10 @@ class Axis {
22342
22397
  labelOffsetPadded -= lineHeightCorrection;
22343
22398
  labelOffsetPadded += directionFactor * (horiz ?
22344
22399
  (labelOptions.y ??
22345
- (tickRotCorr.y +
22346
- directionFactor * labelOptions.distance)) :
22400
+ (tickRotCorr.y + directionFactor * distance)) :
22347
22401
  (labelOptions.x ?? (reserveSpaceDefault ?
22348
- directionFactor * (labelOptions.distance - absTickRotCorrX) :
22349
- tickRotCorr.x +
22350
- directionFactor * labelOptions.distance)));
22402
+ directionFactor * (distance - absTickRotCorrX) :
22403
+ tickRotCorr.x + directionFactor * distance)));
22351
22404
  if (!horiz &&
22352
22405
  !reserveSpaceDefault &&
22353
22406
  axis.labelAlign === 'center' &&
@@ -22361,8 +22414,8 @@ class Axis {
22361
22414
  // has rendered.
22362
22415
  if (coll !== 'colorAxis' && clipOffset) {
22363
22416
  const tickSize = this.tickSize('tick');
22364
- axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +
22365
- directionFactor * axis.offset, labelOffsetPadded, // #3027
22417
+ axisOffset[side] = Math.max(axisOffset[side], Math.max((axis.axisTitleMargin || 0) + titleOffset, labelOffsetPadded) + directionFactor * axis.offset, // #6967
22418
+ labelOffsetPadded, // #3027
22366
22419
  tickPositions?.length && tickSize ?
22367
22420
  tickSize[0] + directionFactor * axis.offset :
22368
22421
  0 // #4866
@@ -22424,18 +22477,20 @@ class Axis {
22424
22477
  * @function Highcharts.Axis#renderLine
22425
22478
  */
22426
22479
  renderLine() {
22427
- const { chart, offset = 0, options } = this;
22480
+ const { chart, offset = 0, options } = this, verb = this.axisLine ? 'animate' : 'attr';
22428
22481
  this.axisLine || (this.axisLine = chart.renderer.path()
22429
22482
  .addClass('highcharts-axis-line')
22430
- .attr(chart.styledMode ? {} : {
22431
- stroke: options.lineColor,
22432
- 'stroke-width': options.lineWidth,
22433
- zIndex: 7
22434
- })
22483
+ .attr({ zIndex: 7 })
22435
22484
  .clip(this.clippable && offset <= 0 ?
22436
22485
  chart.plotClipOuter :
22437
22486
  void 0)
22438
22487
  .add(this.axisGroup));
22488
+ if (!chart.styledMode) {
22489
+ this.axisLine[verb]({
22490
+ stroke: options.lineColor,
22491
+ 'stroke-width': options.lineWidth
22492
+ });
22493
+ }
22439
22494
  }
22440
22495
  /**
22441
22496
  * Position the axis title.
@@ -22520,9 +22575,9 @@ class Axis {
22520
22575
  * Whether the tick should animate in from last computed position
22521
22576
  */
22522
22577
  renderTick(pos, i, slideIn) {
22523
- const axis = this, isLinked = axis.isLinked, ticks = axis.ticks;
22578
+ const axis = this, ticks = axis.ticks;
22524
22579
  // Linked axes need an extra check to find out if
22525
- if (!isLinked ||
22580
+ if (!axis.linkedParent ||
22526
22581
  (pos >= axis.min && pos <= axis.max) ||
22527
22582
  axis.grid?.isColumn) {
22528
22583
  if (!ticks[pos]) {
@@ -22548,11 +22603,13 @@ class Axis {
22548
22603
  * @emits Highcharts.Axis#event:afterRender
22549
22604
  */
22550
22605
  render() {
22551
- const axis = this, chart = axis.chart, log = axis.logarithmic, renderer = chart.renderer, options = axis.options, isLinked = axis.isLinked, tickPositions = axis.tickPositions, axisTitle = axis.axisTitle, ticks = axis.ticks, minorTicks = axis.minorTicks, alternateBands = axis.alternateBands, stackLabelOptions = options.stackLabels, alternateGridColor = options.alternateGridColor, crossing = options.crossing, tickmarkOffset = axis.tickmarkOffset, axisLine = axis.axisLine, showAxis = axis.showAxis, animation = animObject(renderer.globalAnimation);
22606
+ const axis = this, chart = axis.chart, log = axis.logarithmic, renderer = chart.renderer, options = axis.options, tickPositions = axis.tickPositions, axisTitle = axis.axisTitle, ticks = axis.ticks, minorTicks = axis.minorTicks, alternateBands = axis.alternateBands, alternateGridColor = options.alternateGridColor, crossing = options.crossing, tickmarkOffset = axis.tickmarkOffset, axisLine = axis.axisLine, showAxis = axis.showAxis, opacity = +axis.visible, animation = animObject(renderer.globalAnimation);
22552
22607
  let from, to;
22553
22608
  // Reset
22554
22609
  axis.labelEdge.length = 0;
22555
22610
  axis.overlap = false;
22611
+ // Update z-indices
22612
+ this.createGroups();
22556
22613
  // Mark all elements inActive before we go over and mark the active ones
22557
22614
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22558
22615
  objectEach(coll, function (tick) {
@@ -22571,7 +22628,7 @@ class Axis {
22571
22628
  }
22572
22629
  }
22573
22630
  // If the series has data draw the ticks. Else only the line and title
22574
- if (axis.hasData() || isLinked) {
22631
+ if (axis.hasData() || axis.linkedParent) {
22575
22632
  const slideInTicks = axis.chart.hasRendered &&
22576
22633
  axis.old && isNumber(axis.old.min);
22577
22634
  // Minor ticks
@@ -22609,8 +22666,10 @@ class Axis {
22609
22666
  tickmarkOffset)) { // #2248, #4660
22610
22667
  if (!alternateBands[pos]) {
22611
22668
  // Should be imported from PlotLineOrBand.js, but
22612
- // the dependency cycle with axis is a problem
22613
- alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {});
22669
+ // the dependency cycle with axis is a problem. Try
22670
+ // moving it to the PlotLineOrBand axis composition
22671
+ // later.
22672
+ alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {}, 'plotBands');
22614
22673
  }
22615
22674
  from = pos + tickmarkOffset; // #949
22616
22675
  alternateBands[pos].options = {
@@ -22624,17 +22683,13 @@ class Axis {
22624
22683
  }
22625
22684
  });
22626
22685
  }
22627
- // Custom plot lines and bands
22628
- if (!axis._addedPlotLB) { // Only first time
22629
- axis._addedPlotLB = true;
22630
- (options.plotLines || [])
22631
- .concat(options.plotBands || [])
22632
- .forEach(function (plotLineOptions) {
22633
- axis
22634
- .addPlotBandOrLine(plotLineOptions);
22635
- });
22636
- }
22637
22686
  } // End if hasData
22687
+ // Render or update rendering of plot lines and bands
22688
+ for (const coll of ['plotBands', 'plotLines']) {
22689
+ for (const plotItem of this[coll]) {
22690
+ plotItem.render();
22691
+ }
22692
+ }
22638
22693
  // Remove inactive ticks
22639
22694
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22640
22695
  const forDestruction = [], delay = animation.duration, destroyInactiveItems = function () {
@@ -22668,20 +22723,22 @@ class Axis {
22668
22723
  // Set the axis line path
22669
22724
  if (axisLine) {
22670
22725
  axisLine[axisLine.isPlaced ? 'animate' : 'attr']({
22671
- d: this.getLinePath(axisLine.strokeWidth())
22726
+ d: this.getLinePath(axisLine.strokeWidth()),
22727
+ opacity
22672
22728
  });
22673
22729
  axisLine.isPlaced = true;
22674
22730
  // Show or hide the line depending on options.showEmpty
22675
22731
  axisLine[showAxis ? 'show' : 'hide'](showAxis);
22676
22732
  }
22677
22733
  if (axisTitle && showAxis) {
22678
- axisTitle[axisTitle.isNew ? 'attr' : 'animate'](axis.getTitlePosition(axisTitle));
22734
+ axisTitle[axisTitle.isNew ? 'attr' : 'animate']({
22735
+ opacity,
22736
+ ...axis.getTitlePosition(axisTitle)
22737
+ });
22679
22738
  axisTitle.isNew = false;
22680
22739
  }
22681
22740
  // Stacked totals
22682
- if (stackLabelOptions?.enabled && axis.stacking) {
22683
- axis.stacking.renderStackTotals();
22684
- }
22741
+ axis.stacking?.renderStackTotals();
22685
22742
  // First time, save the existing state
22686
22743
  if (!this.old) {
22687
22744
  this.saveOld();
@@ -22697,13 +22754,11 @@ class Axis {
22697
22754
  * @function Highcharts.Axis#redraw
22698
22755
  */
22699
22756
  redraw() {
22700
- if (this.visible) {
22757
+ // If it was initially visible, but dynamically hidden, `this.axisGroup`
22758
+ // exists. Then render with opacity 0.
22759
+ if (this.visible || this.axisGroup) {
22701
22760
  // Render the axis
22702
22761
  this.render();
22703
- // Move plot lines and bands
22704
- this.plotLinesAndBands.forEach(function (plotLine) {
22705
- plotLine.render();
22706
- });
22707
22762
  }
22708
22763
  // Mark associated series as dirty and ready for redraw
22709
22764
  this.series.forEach(function (series) {
@@ -22717,6 +22772,7 @@ class Axis {
22717
22772
  */
22718
22773
  saveOld() {
22719
22774
  this.old = isNumber(this.min) ? {
22775
+ horiz: this.horiz,
22720
22776
  len: this.len,
22721
22777
  max: this.max,
22722
22778
  min: this.min,
@@ -22726,64 +22782,37 @@ class Axis {
22726
22782
  userMin: this.userMin
22727
22783
  } : void 0;
22728
22784
  }
22729
- /**
22730
- * Returns an array of axis properties, that should be untouched during
22731
- * reinitialization.
22732
- *
22733
- * @internal
22734
- * @function Highcharts.Axis#getKeepProps
22735
- */
22736
- getKeepProps() {
22737
- return (this.keepProps || Axis.keepProps);
22738
- }
22739
22785
  /**
22740
22786
  * Destroys an Axis instance. See {@link Axis#remove} for the API endpoint
22741
22787
  * to fully remove the axis.
22742
22788
  *
22743
22789
  * @internal
22744
22790
  * @function Highcharts.Axis#destroy
22745
- *
22746
- * @param {boolean} [keepEvents]
22747
- * Whether to preserve events, used internally in Axis.update.
22748
22791
  */
22749
- destroy(keepEvents) {
22750
- const axis = this, plotLinesAndBands = axis.plotLinesAndBands, eventOptions = this.eventOptions;
22751
- fireEvent(this, 'destroy', { keepEvents: keepEvents });
22792
+ destroy() {
22793
+ fireEvent(this, 'destroy');
22752
22794
  // Remove the events
22753
- if (!keepEvents) {
22754
- removeEvent(axis);
22755
- }
22795
+ removeEvent(this);
22756
22796
  // Destroy collections
22757
- [axis.ticks, axis.minorTicks, axis.alternateBands].forEach(function (coll) {
22758
- destroyObjectProperties(coll);
22759
- });
22760
- if (plotLinesAndBands) {
22761
- let i = plotLinesAndBands.length;
22762
- while (i--) { // #1975
22763
- plotLinesAndBands[i].destroy();
22764
- }
22765
- }
22766
- // Destroy elements
22797
+ [
22798
+ this.ticks,
22799
+ this.minorTicks,
22800
+ this.alternateBands,
22801
+ this.plotBands,
22802
+ this.plotLines,
22803
+ this.plotLinesAndBandsGroups
22804
+ ].forEach(destroyObjectProperties);
22805
+ // Destroy elements and clear reference
22767
22806
  [
22768
22807
  'axisLine', 'axisTitle', 'axisGroup',
22769
22808
  'gridGroup', 'labelGroup', 'cross', 'scrollbar'
22770
- ].forEach(function (prop) {
22771
- if (axis[prop]) {
22772
- axis[prop] = axis[prop].destroy();
22773
- }
22809
+ ].forEach((prop) => {
22810
+ this[prop] = this[prop]?.destroy();
22774
22811
  });
22775
- // Destroy each generated group for plotLines and plotBands
22776
- for (const plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in
22777
- axis.plotLinesAndBandsGroups[plotGroup] =
22778
- axis.plotLinesAndBandsGroups[plotGroup].destroy();
22779
- }
22780
22812
  // Delete all properties and fall back to the prototype.
22781
- objectEach(axis, function (_val, key) {
22782
- if (axis.getKeepProps().indexOf(key) === -1) {
22783
- delete axis[key];
22784
- }
22813
+ objectEach(this, (_val, key) => {
22814
+ delete this[key];
22785
22815
  });
22786
- this.eventOptions = eventOptions;
22787
22816
  }
22788
22817
  /**
22789
22818
  * Internal function to draw a crosshair.
@@ -22877,25 +22906,21 @@ class Axis {
22877
22906
  void 0 :
22878
22907
  chart.plotClipInner)
22879
22908
  .add();
22880
- // Presentational attributes
22881
- if (!chart.styledMode) {
22882
- cross.attr({
22883
- stroke: options.color ||
22884
- (categorized ?
22885
- Axis_color(
22886
- // eslint-disable-next-line max-len
22887
- 'var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22888
- 'var(--highcharts-neutral-color-20)'),
22889
- 'stroke-width': (options.width ?? 1)
22890
- }).css({
22891
- 'pointer-events': 'none'
22892
- });
22893
- if (options.dashStyle) {
22894
- cross.attr({
22895
- dashstyle: options.dashStyle
22896
- });
22897
- }
22898
- }
22909
+ }
22910
+ // Presentational attributes
22911
+ if (!chart.styledMode) {
22912
+ cross
22913
+ .attr({
22914
+ stroke: options.color || (categorized ?
22915
+ Axis_color('var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22916
+ 'var(--highcharts-neutral-color-20)'),
22917
+ 'stroke-width': options.width ?? 1,
22918
+ // Dash style must be after stroke-width
22919
+ dashstyle: options.dashStyle || 'Solid'
22920
+ })
22921
+ .css({
22922
+ 'pointer-events': 'none'
22923
+ });
22899
22924
  }
22900
22925
  cross
22901
22926
  .show()
@@ -22905,9 +22930,7 @@ class Axis {
22905
22930
  'stroke-width': this.transA
22906
22931
  });
22907
22932
  }
22908
- if (this.cross) {
22909
- this.cross.e = e;
22910
- }
22933
+ cross.e = e;
22911
22934
  },
22912
22935
  // Only use delay if the crosshair is currently hidden
22913
22936
  (!graphic || graphic.attr('visibility') === 'hidden') ?
@@ -22946,13 +22969,14 @@ class Axis {
22946
22969
  * operations on the chart, it is a good idea to set redraw to false and
22947
22970
  * call {@link Chart#redraw} after.
22948
22971
  */
22949
- update(options, redraw) {
22972
+ update(options = {}, redraw = true) {
22950
22973
  const chart = this.chart;
22974
+ fireEvent(this, 'update', { options });
22951
22975
  options = merge(this.userOptions, options);
22952
- this.destroy(true);
22976
+ this.isDirty = this.forceRedraw = true;
22953
22977
  this.init(chart, options);
22954
22978
  chart.isDirtyBox = true;
22955
- if (redraw ?? true) {
22979
+ if (redraw) {
22956
22980
  chart.redraw();
22957
22981
  }
22958
22982
  }
@@ -23021,26 +23045,6 @@ class Axis {
23021
23045
  this.update({ categories: categories }, redraw);
23022
23046
  }
23023
23047
  }
23024
- /* *
23025
- *
23026
- * Static Properties
23027
- *
23028
- * */
23029
- /**
23030
- * Properties to survive after destroy, needed for Axis.update (#4317,
23031
- * #5773, #5881).
23032
- * @internal
23033
- */
23034
- Axis.keepProps = [
23035
- 'coll',
23036
- 'extKey',
23037
- 'hcEvents',
23038
- 'len',
23039
- 'names',
23040
- 'series',
23041
- 'userMax',
23042
- 'userMin'
23043
- ];
23044
23048
  /* *
23045
23049
  *
23046
23050
  * Default Export
@@ -23311,6 +23315,8 @@ Axis.keepProps = [
23311
23315
  * */
23312
23316
 
23313
23317
 
23318
+ const { composed: DateTimeAxis_composed } = Core_Globals;
23319
+
23314
23320
 
23315
23321
  /* *
23316
23322
  *
@@ -23334,8 +23340,7 @@ var DateTimeAxis;
23334
23340
  * @internal
23335
23341
  */
23336
23342
  function compose(AxisClass) {
23337
- if (!AxisClass.keepProps.includes('dateTime')) {
23338
- AxisClass.keepProps.push('dateTime');
23343
+ if (pushUnique(DateTimeAxis_composed, 'Axis.DateTime')) {
23339
23344
  const axisProto = AxisClass.prototype;
23340
23345
  axisProto.getTimeTicks = getTimeTicks;
23341
23346
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
@@ -23497,6 +23502,8 @@ var DateTimeAxis;
23497
23502
  * */
23498
23503
 
23499
23504
 
23505
+ const { composed: LogarithmicAxis_composed } = Core_Globals;
23506
+
23500
23507
  /* *
23501
23508
  *
23502
23509
  * Class
@@ -23520,8 +23527,7 @@ var LogarithmicAxis;
23520
23527
  * @internal
23521
23528
  */
23522
23529
  function compose(AxisClass) {
23523
- if (!AxisClass.keepProps.includes('logarithmic')) {
23524
- AxisClass.keepProps.push('logarithmic');
23530
+ if (pushUnique(LogarithmicAxis_composed, 'Axis.Logarithmic')) {
23525
23531
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
23526
23532
  addEvent(AxisClass, 'afterInit', onAfterInit);
23527
23533
  }
@@ -23730,24 +23736,7 @@ var PlotLineOrBandAxis;
23730
23736
  * Functions
23731
23737
  *
23732
23738
  * */
23733
- /**
23734
- * Add a plot band after render time.
23735
- *
23736
- * @sample highcharts/members/axis-addplotband/
23737
- * Toggle the plot band from a button
23738
- *
23739
- * @function Highcharts.Axis#addPlotBand
23740
- *
23741
- * @param {Highcharts.AxisPlotBandsOptions} options
23742
- * A configuration object for the plot band, as defined in
23743
- * [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).
23744
- *
23745
- * @return {Highcharts.PlotLineOrBand|undefined}
23746
- * The added plot band, or `undefined` if the options are not valid.
23747
- */
23748
- function addPlotBand(options) {
23749
- return this.addPlotBandOrLine(options, 'plotBands');
23750
- }
23739
+ const getAdderFunction = (coll) =>
23751
23740
  /**
23752
23741
  * Add a plot band or plot line after render time. Called from
23753
23742
  * addPlotBand and addPlotLine internally.
@@ -23755,65 +23744,85 @@ var PlotLineOrBandAxis;
23755
23744
  * @internal
23756
23745
  * @function Highcharts.Axis#addPlotBandOrLine
23757
23746
  * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options
23758
- * The plotBand or plotLine configuration object.
23747
+ * The `plotBand` or `plotLine` configuration object.
23759
23748
  */
23760
- function addPlotBandOrLine(options, coll) {
23761
- const userOptions = this.userOptions;
23762
- let obj = new PlotLineOrBandClass(this, options);
23749
+ function addPlotLineOrBand(options) {
23750
+ var _a;
23751
+ const plotItem = new PlotLineOrBandClass(this, options, coll);
23763
23752
  if (this.visible) {
23764
- obj = obj.render();
23765
- }
23766
- if (obj) { // #2189
23767
- if (!this._addedPlotLB) {
23768
- this._addedPlotLB = true;
23769
- (userOptions.plotLines || [])
23770
- .concat(userOptions.plotBands || [])
23771
- .forEach((plotLineOptions) => {
23772
- this.addPlotBandOrLine(plotLineOptions);
23773
- });
23774
- }
23775
- // Add it to the user options for exporting and Axis.update
23776
- if (coll) {
23777
- // Workaround Microsoft/TypeScript issue #32693
23778
- const updatedOptions = (userOptions[coll] || []);
23779
- updatedOptions.push(options);
23780
- userOptions[coll] = updatedOptions;
23781
- }
23782
- this.plotLinesAndBands.push(obj);
23753
+ plotItem.render();
23783
23754
  }
23784
- return obj;
23785
- }
23786
- /**
23787
- * Add a plot line after render time.
23788
- *
23789
- * @sample highcharts/members/axis-addplotline/
23790
- * Toggle the plot line from a button
23791
- *
23792
- * @function Highcharts.Axis#addPlotLine
23793
- *
23794
- * @param {Highcharts.AxisPlotLinesOptions} options
23795
- * A configuration object for the plot line, as defined in
23796
- * [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).
23797
- *
23798
- * @return {Highcharts.PlotLineOrBand|undefined}
23799
- * The added plot line, or `undefined` if the options are not valid.
23800
- */
23801
- function addPlotLine(options) {
23802
- return this.addPlotBandOrLine(options, 'plotLines');
23803
- }
23755
+ (_a = this.options)[coll] || (_a[coll] = this.userOptions[coll] = []);
23756
+ this.options[coll].push(options);
23757
+ this[coll].push(plotItem);
23758
+ return plotItem;
23759
+ };
23804
23760
  /** @internal */
23805
23761
  function compose(PlotLineOrBandType, AxisClass) {
23806
23762
  const axisProto = AxisClass.prototype;
23807
23763
  if (!axisProto.addPlotBand) {
23808
23764
  PlotLineOrBandClass = PlotLineOrBandType;
23809
23765
  extend(axisProto, {
23810
- addPlotBand,
23811
- addPlotLine,
23812
- addPlotBandOrLine,
23766
+ addPlotBand: getAdderFunction('plotBands'),
23767
+ addPlotLine: getAdderFunction('plotLines'),
23813
23768
  getPlotBandPath,
23814
- removePlotBand,
23815
- removePlotLine,
23816
- removePlotBandOrLine
23769
+ removePlotBand: removePlotBandOrLine,
23770
+ removePlotLine: removePlotBandOrLine
23771
+ });
23772
+ addEvent(AxisClass, 'afterInit', function () {
23773
+ // First time only, not on Axis.update()
23774
+ if (!this.plotBands) {
23775
+ // Placeholder for plotlines and plotbands groups
23776
+ this.plotLinesAndBandsGroups = {};
23777
+ // Plot lines and bands from options
23778
+ for (const coll of ['plotBands', 'plotLines']) {
23779
+ this[coll] = [];
23780
+ for (const pOptions of splat(this.options[coll] || [])) {
23781
+ this[coll].push(new PlotLineOrBandClass(this, pOptions, coll));
23782
+ }
23783
+ }
23784
+ }
23785
+ });
23786
+ // Update plot bands and lines one to one
23787
+ addEvent(AxisClass, 'update', function ({ options }) {
23788
+ for (const coll of ['plotBands', 'plotLines']) {
23789
+ // Check if we have new options to process, otherwise do
23790
+ // nothing with existing plot lines and bands
23791
+ if (options[coll]) {
23792
+ const plotItems = this[coll];
23793
+ splat(options[coll]).forEach((pOptions = {}, i) => {
23794
+ // Match by id
23795
+ let pItem;
23796
+ if (pOptions?.id) {
23797
+ pItem = plotItems.find((p) => p.id === pOptions.id);
23798
+ }
23799
+ // Match by index
23800
+ pItem || (pItem = plotItems[i]);
23801
+ // Update
23802
+ if (pItem) {
23803
+ pItem.update(pOptions, false);
23804
+ options[coll][i] = pItem.options;
23805
+ // Add
23806
+ }
23807
+ else {
23808
+ pItem = this[coll === 'plotBands' ?
23809
+ 'addPlotBand' :
23810
+ 'addPlotLine'](pOptions);
23811
+ }
23812
+ pItem.isActive = true;
23813
+ });
23814
+ // Remove inactive items from end to start
23815
+ let i = plotItems.length;
23816
+ while (i--) {
23817
+ if (!plotItems[i].isActive) {
23818
+ plotItems[i].remove();
23819
+ }
23820
+ else {
23821
+ delete plotItems[i].isActive;
23822
+ }
23823
+ }
23824
+ }
23825
+ }
23817
23826
  });
23818
23827
  }
23819
23828
  return AxisClass;
@@ -23884,23 +23893,6 @@ var PlotLineOrBandAxis;
23884
23893
  }
23885
23894
  return result;
23886
23895
  }
23887
- /**
23888
- * Remove a plot band by its id.
23889
- *
23890
- * @sample highcharts/members/axis-removeplotband/
23891
- * Remove plot band by id
23892
- * @sample highcharts/members/axis-addplotband/
23893
- * Toggle the plot band from a button
23894
- *
23895
- * @function Highcharts.Axis#removePlotBand
23896
- *
23897
- * @param {string} id
23898
- * The plot band's `id` as given in the original configuration
23899
- * object or in the `addPlotBand` option.
23900
- */
23901
- function removePlotBand(id) {
23902
- this.removePlotBandOrLine(id);
23903
- }
23904
23896
  /**
23905
23897
  * Remove a plot band or plot line from the chart by id. Called
23906
23898
  * internally from `removePlotBand` and `removePlotLine`.
@@ -23908,45 +23900,7 @@ var PlotLineOrBandAxis;
23908
23900
  * @function Highcharts.Axis#removePlotBandOrLine
23909
23901
  */
23910
23902
  function removePlotBandOrLine(id) {
23911
- const plotLinesAndBands = this.plotLinesAndBands, options = this.options, userOptions = this.userOptions;
23912
- if (plotLinesAndBands) { // #15639
23913
- let i = plotLinesAndBands.length;
23914
- while (i--) {
23915
- if (plotLinesAndBands[i].id === id) {
23916
- plotLinesAndBands[i].destroy();
23917
- }
23918
- }
23919
- ([
23920
- options.plotLines || [],
23921
- userOptions.plotLines || [],
23922
- options.plotBands || [],
23923
- userOptions.plotBands || []
23924
- ]).forEach(function (arr) {
23925
- i = arr.length;
23926
- while (i--) {
23927
- if (arr[i]?.id === id) {
23928
- erase(arr, arr[i]);
23929
- }
23930
- }
23931
- });
23932
- }
23933
- }
23934
- /**
23935
- * Remove a plot line by its id.
23936
- *
23937
- * @sample highcharts/xaxis/plotlines-id/
23938
- * Remove plot line by id
23939
- * @sample highcharts/members/axis-addplotline/
23940
- * Toggle the plot line from a button
23941
- *
23942
- * @function Highcharts.Axis#removePlotLine
23943
- *
23944
- * @param {string} id
23945
- * The plot line's `id` as given in the original configuration
23946
- * object or in the `addPlotLine` option.
23947
- */
23948
- function removePlotLine(id) {
23949
- this.removePlotBandOrLine(id);
23903
+ [...this.plotBands || [], ...this.plotLines || []].find((plotItem) => plotItem.id === id)?.remove();
23950
23904
  }
23951
23905
  })(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));
23952
23906
  /* *
@@ -24010,9 +23964,11 @@ class PlotLineOrBand {
24010
23964
  this.labelCollectors.push(() => {
24011
23965
  const labels = [];
24012
23966
  for (const axis of this.axes) {
24013
- for (const { label, options } of axis.plotLinesAndBands) {
24014
- if (label && !options?.label?.allowOverlap) {
24015
- labels.push(label);
23967
+ for (const coll of ['plotBands', 'plotLines']) {
23968
+ for (const { label, options } of axis[coll]) {
23969
+ if (label && !options?.label?.allowOverlap) {
23970
+ labels.push(label);
23971
+ }
24016
23972
  }
24017
23973
  }
24018
23974
  }
@@ -24026,7 +23982,7 @@ class PlotLineOrBand {
24026
23982
  * Constructor
24027
23983
  *
24028
23984
  * */
24029
- constructor(axis, options) {
23985
+ constructor(axis, options, coll) {
24030
23986
  /**
24031
23987
  * Related axis.
24032
23988
  *
@@ -24042,6 +23998,7 @@ class PlotLineOrBand {
24042
23998
  */
24043
23999
  this.options = options;
24044
24000
  this.id = options.id;
24001
+ this.coll = coll;
24045
24002
  }
24046
24003
  /* *
24047
24004
  *
@@ -24057,43 +24014,28 @@ class PlotLineOrBand {
24057
24014
  */
24058
24015
  render() {
24059
24016
  fireEvent(this, 'render');
24060
- const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, time } = axis.chart, groupAttribs = {},
24017
+ const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, styledMode, time } = axis.chart,
24061
24018
  // These properties only exist on either band or line
24062
24019
  to = time.parse(options.to), from = time.parse(options.from), value = time.parse(options.value), borderWidth = options.borderWidth;
24063
- let optionsLabel = options.label, { label, svgElem } = this, path = [], group;
24064
- const isBand = defined(from) && defined(to), isLine = defined(value), isNew = !svgElem, attribs = {
24065
- 'class': 'highcharts-plot-' + (isBand ? 'band ' : 'line ') +
24066
- (options.className || '')
24067
- };
24068
- let groupName = isBand ? 'bands' : 'lines';
24069
- // Set the presentational attributes
24070
- if (!chart.styledMode) {
24071
- if (isLine) {
24072
- attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24073
- attribs['stroke-width'] =
24074
- options.width ?? 1;
24075
- if (options.dashStyle) {
24076
- attribs.dashstyle = options.dashStyle;
24077
- }
24078
- }
24079
- else if (isBand) { // Plot band
24080
- attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24081
- if (borderWidth) {
24082
- attribs.stroke = options.borderColor;
24083
- attribs['stroke-width'] = borderWidth;
24084
- }
24085
- }
24020
+ let optionsLabel = options.label, { label, svgElem } = this, group;
24021
+ const isBand = this.coll === 'plotBands', shortKey = isBand ? 'band' : 'line', groupName = `${shortKey}s-${zIndex}`, isNew = !svgElem, attribs = {
24022
+ 'class': `highcharts-plot-${shortKey} ${options.className || ''}`
24023
+ }, strokeWidth = isBand ?
24024
+ (borderWidth || 0) :
24025
+ (options.width ?? 1);
24026
+ // Set the stroke width before the path is calculated
24027
+ if (!styledMode) {
24028
+ attribs['stroke-width'] = strokeWidth;
24086
24029
  }
24087
24030
  // Grouping and zIndex
24088
- groupAttribs.zIndex = zIndex;
24089
- groupName += '-' + zIndex;
24090
24031
  group = axis.plotLinesAndBandsGroups[groupName];
24091
24032
  if (!group) {
24092
24033
  axis.plotLinesAndBandsGroups[groupName] = group =
24093
24034
  renderer.g('plot-' + groupName)
24094
24035
  .clip(chart.plotClipOuter)
24095
- .attr(groupAttribs).add();
24036
+ .attr({ zIndex }).add();
24096
24037
  }
24038
+ group[isNew ? 'attr' : 'animate']({ opacity: +axis.visible });
24097
24039
  // Create the path
24098
24040
  if (!svgElem) {
24099
24041
  /**
@@ -24104,40 +24046,58 @@ class PlotLineOrBand {
24104
24046
  */
24105
24047
  this.svgElem = svgElem = renderer
24106
24048
  .path()
24107
- .attr(attribs)
24108
- .add(group);
24049
+ .attr(attribs);
24050
+ }
24051
+ // Add it to the correct index while allowing dynamic z-index update
24052
+ if (svgElem.parentGroup !== group) {
24053
+ svgElem.add(group);
24109
24054
  }
24110
24055
  // Set the path or return
24111
- if (defined(value)) { // Plot line
24056
+ let path;
24057
+ if (!isBand && defined(value)) { // Plot line
24112
24058
  path = axis.getPlotLinePath({
24113
24059
  value: logarithmic?.log2lin(value) ?? value,
24114
24060
  lineWidth: svgElem.strokeWidth(),
24115
24061
  acrossPanes: options.acrossPanes
24116
24062
  });
24117
24063
  }
24118
- else if (defined(from) && defined(to)) { // Plot band
24064
+ else if (isBand && defined(from) && defined(to)) { // Plot band
24119
24065
  path = axis.getPlotBandPath(logarithmic?.log2lin(from) ?? from, logarithmic?.log2lin(to) ?? to, options);
24120
24066
  }
24121
- else {
24122
- return;
24067
+ if (path) {
24068
+ attribs.d = path;
24069
+ }
24070
+ // Apply the styling
24071
+ if (!styledMode) {
24072
+ if (isBand) { // Plot band
24073
+ attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24074
+ if (borderWidth) {
24075
+ attribs.stroke = options.borderColor;
24076
+ }
24077
+ }
24078
+ else {
24079
+ attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24080
+ if (options.dashStyle) {
24081
+ attribs.dashstyle = options.dashStyle;
24082
+ }
24083
+ }
24123
24084
  }
24124
24085
  // Common for lines and bands. Add events only if they were not added
24125
24086
  // before.
24126
- if (!this.eventsAdded && events) {
24087
+ if (isNew && events) {
24127
24088
  objectEach(events, (_event, eventType) => {
24128
24089
  svgElem?.on(eventType, (e) => {
24129
24090
  events[eventType].apply(this, [e, this]);
24130
24091
  });
24131
24092
  });
24132
- this.eventsAdded = true;
24133
24093
  }
24134
24094
  if ((isNew || !svgElem.d) && path?.length) {
24135
- svgElem.attr({ d: path });
24095
+ svgElem.attr(attribs);
24136
24096
  }
24137
24097
  else if (svgElem) {
24138
24098
  if (path) {
24139
24099
  svgElem.show();
24140
- svgElem.animate({ d: path });
24100
+ svgElem.animate(attribs);
24141
24101
  }
24142
24102
  else if (svgElem.d) {
24143
24103
  svgElem.hide();
@@ -24177,7 +24137,7 @@ class PlotLineOrBand {
24177
24137
  * @function Highcharts.PlotLineOrBand#renderLabel
24178
24138
  */
24179
24139
  renderLabel(optionsLabel, path, isBand, zIndex) {
24180
- const plotLine = this, axis = plotLine.axis, renderer = axis.chart.renderer, inside = optionsLabel.inside;
24140
+ const plotLine = this, axis = plotLine.axis, chart = axis.chart, renderer = chart.renderer, inside = optionsLabel.inside;
24181
24141
  let label = plotLine.label;
24182
24142
  // Add the SVG element
24183
24143
  if (!label) {
@@ -24188,25 +24148,31 @@ class PlotLineOrBand {
24188
24148
  * @type {Highcharts.SVGElement}
24189
24149
  */
24190
24150
  plotLine.label = label = renderer
24191
- .text(this.getLabelText(optionsLabel), 0, 0, optionsLabel.useHTML)
24192
- .attr({
24193
- align: optionsLabel.textAlign || optionsLabel.align,
24194
- rotation: optionsLabel.rotation,
24195
- 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24196
- '-label ' + (optionsLabel.className || ''),
24197
- zIndex
24198
- });
24199
- if (!axis.chart.styledMode) {
24200
- label.css(merge({
24201
- // To allow theming, and in lack of a general place to set
24202
- // default options for plot lines and bands, default to the
24203
- // title color. If we expose the palette, we should use that
24204
- // instead.
24205
- color: axis.chart.options.title?.style?.color,
24206
- fontSize: '0.8em',
24207
- textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24208
- }, optionsLabel.style));
24209
- }
24151
+ .text('', 0, 0, optionsLabel.useHTML)
24152
+ .attr({ zIndex });
24153
+ }
24154
+ label
24155
+ .attr({
24156
+ text: this.getLabelText(optionsLabel),
24157
+ align: optionsLabel.textAlign || optionsLabel.align,
24158
+ 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24159
+ '-label ' + (optionsLabel.className || '')
24160
+ })[label.placed ? 'animate' : 'attr']({
24161
+ opacity: 1,
24162
+ rotation: optionsLabel.rotation
24163
+ });
24164
+ if (!chart.styledMode) {
24165
+ label.css(merge({
24166
+ // To allow theming, and in lack of a general place to set
24167
+ // default options for plot lines and bands, default to the
24168
+ // title color. If we expose the palette, we should use that
24169
+ // instead.
24170
+ color: chart.options.title?.style?.color,
24171
+ fontSize: '0.8em',
24172
+ textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24173
+ }, optionsLabel.style));
24174
+ }
24175
+ if (!label.added) {
24210
24176
  label.add();
24211
24177
  }
24212
24178
  // Get the bounding box and align the label
@@ -24230,12 +24196,31 @@ class PlotLineOrBand {
24230
24196
  axis.height - (label.alignAttr.y -
24231
24197
  axis.top) : (optionsLabel.clip ?
24232
24198
  (axis.width + axis.left) :
24233
- axis.chart.chartWidth) - label.alignAttr.x) :
24199
+ chart.chartWidth) - label.alignAttr.x) :
24234
24200
  bBoxWidth)) + 'px'
24235
24201
  });
24236
24202
  }
24203
+ else if (label.textWidth) {
24204
+ label.css({ width: 'auto' });
24205
+ }
24237
24206
  label.show(true);
24238
24207
  }
24208
+ /**
24209
+ * Update the plot line or band with new options.
24210
+ *
24211
+ * @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} options
24212
+ * The new options to apply
24213
+ * @param {boolean} [redraw=true]
24214
+ * Whether to redraw the plot guide immediately
24215
+ *
24216
+ * @function Highcharts.PlotLineOrBand#update
24217
+ */
24218
+ update(options, redraw = true) {
24219
+ merge(true, this.options, options);
24220
+ if (redraw) {
24221
+ this.render();
24222
+ }
24223
+ }
24239
24224
  /**
24240
24225
  * Get label's text content.
24241
24226
  * @internal
@@ -24247,15 +24232,22 @@ class PlotLineOrBand {
24247
24232
  optionsLabel.text;
24248
24233
  }
24249
24234
  /**
24250
- * Remove the plot line or band.
24251
- *
24252
- * @function Highcharts.PlotLineOrBand#destroy
24235
+ * Destroy the item's elements
24253
24236
  */
24254
24237
  destroy() {
24238
+ destroyObjectProperties(this, this.axis);
24239
+ }
24240
+ /**
24241
+ * Remove the plot line or band and destroy its elements.
24242
+ *
24243
+ * @function Highcharts.PlotLineOrBand#remove
24244
+ */
24245
+ remove() {
24255
24246
  // Remove it from the lookup
24256
- erase(this.axis.plotLinesAndBands, this);
24257
- delete this.axis;
24258
- destroyObjectProperties(this);
24247
+ erase(this.axis[this.coll], this);
24248
+ // Remove from options
24249
+ erase(this.axis.options[this.coll] || [], this.options);
24250
+ this.destroy();
24259
24251
  }
24260
24252
  }
24261
24253
  /* *
@@ -24302,10 +24294,24 @@ class PlotLineOrBand {
24302
24294
  * In styled mode, the plot bands are styled by the `.highcharts-plot-band`
24303
24295
  * class in addition to the `className` option.
24304
24296
  *
24297
+ * When doing `Chart.update()` or `Axis.update()`, the plot bands are updated
24298
+ * by index or id. The following merging rules apply:
24299
+ * - If `plotBands` are not defined in the new options, all existing plot bands
24300
+ * are kept.
24301
+ * - If `plotBands` are defined without ids, the existing plot bands are updated
24302
+ * by index. If the new array has fewer plot bands, the remaining existing
24303
+ * plot bands are removed. If the new array has more plot bands, the extra
24304
+ * ones are added. An empty array removes all existing plot bands.
24305
+ * - If `plotBands` are defined with ids, the existing plot bands are matched
24306
+ * by id, and remaining unmatched existing plot bands are removed.
24307
+ *
24305
24308
  * @productdesc {highcharts}
24306
24309
  * In a gauge, a plot band on the Y axis (value axis) will stretch along the
24307
24310
  * perimeter of the gauge.
24308
24311
  *
24312
+ * @sample {highcharts} highcharts/xaxis/plotbands-color/
24313
+ * Basic plot band
24314
+ *
24309
24315
  * @type {Array<*>}
24310
24316
  * @product highcharts highstock gantt
24311
24317
  * @apioption xAxis.plotBands
@@ -24597,12 +24603,23 @@ class PlotLineOrBand {
24597
24603
  * In styled mode, the plot lines are styled by the
24598
24604
  * `.highcharts-plot-line` class in addition to the `className` option.
24599
24605
  *
24606
+ * When doing `Chart.update()` or `Axis.update()`, the plot lines are updated
24607
+ * by index or id. The following merging rules apply:
24608
+ * - If `plotLines` are not defined in the new options, all existing plot lines
24609
+ * are kept.
24610
+ * - If `plotLines` are defined without ids, the existing plot lines are updated
24611
+ * by index. If the new array has fewer plot lines, the remaining existing
24612
+ * plot lines are removed. If the new array has more plot lines, the extra
24613
+ * ones are added. An empty array removes all existing plot lines.
24614
+ * - If `plotLines` are defined with ids, the existing plot lines are matched
24615
+ * by id, and remaining unmatched existing plot lines are removed.
24616
+ *
24600
24617
  * @type {Array<*>}
24601
24618
  * @product highcharts highstock gantt
24602
- * @sample {highcharts} highcharts/xaxis/plotlines-color/
24603
- * Basic plot line
24604
- * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24605
- * Solid gauge plot line
24619
+ * @sample {highcharts} highcharts/xaxis/plotlines-color/
24620
+ * Basic plot line
24621
+ * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24622
+ * Solid gauge plot line
24606
24623
  * @apioption xAxis.plotLines
24607
24624
  */
24608
24625
  /**
@@ -25111,14 +25128,11 @@ class Tooltip {
25111
25128
  */
25112
25129
  destroy() {
25113
25130
  // Destroy and clear local variables
25114
- if (this.label) {
25115
- this.label = this.label.destroy();
25116
- }
25131
+ this.tracker = this.tracker?.destroy();
25132
+ this.label = this.label?.destroy();
25117
25133
  if (this.split) {
25118
25134
  this.cleanSplit(true);
25119
- if (this.tt) {
25120
- this.tt = this.tt.destroy();
25121
- }
25135
+ this.tt = this.tt?.destroy();
25122
25136
  }
25123
25137
  if (this.renderer) {
25124
25138
  this.renderer = this.renderer.destroy();
@@ -25648,6 +25662,8 @@ class Tooltip {
25648
25662
  !this.isHidden &&
25649
25663
  !options.fixed &&
25650
25664
  options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
25665
+ this.anchorX = anchorX;
25666
+ this.anchorY = anchorY;
25651
25667
  if (!skipAnchor) {
25652
25668
  attr.anchorX = anchorX;
25653
25669
  attr.anchorY = anchorY;
@@ -26094,45 +26110,37 @@ class Tooltip {
26094
26110
  */
26095
26111
  drawTracker() {
26096
26112
  const tooltip = this;
26097
- if (!this.shouldStickOnContact()) {
26098
- if (tooltip.tracker) {
26099
- tooltip.tracker = tooltip.tracker.destroy();
26100
- }
26113
+ if (!tooltip.shouldStickOnContact()) {
26114
+ tooltip.tracker = tooltip.tracker?.destroy();
26101
26115
  return;
26102
26116
  }
26103
- const chart = tooltip.chart;
26104
- const label = tooltip.label;
26105
- const points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint;
26106
- if (!label || !points) {
26117
+ const { chart, label } = tooltip, points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint,
26118
+ // Split tooltips render into a plain group, with no box to trace
26119
+ box = label?.box;
26120
+ if (!box || !points) {
26107
26121
  return;
26108
26122
  }
26109
- const box = {
26110
- x: 0,
26111
- y: 0,
26112
- width: 0,
26113
- height: 0
26114
- };
26115
- // Combine anchor and tooltip
26116
- const anchorPos = this.getAnchor(points);
26117
- const labelBBox = label.getBBox();
26118
- anchorPos[0] += chart.plotLeft - (label.translateX || 0);
26119
- anchorPos[1] += chart.plotTop - (label.translateY || 0);
26120
- // When the mouse pointer is between the anchor point and the label,
26121
- // the label should stick.
26122
- box.x = Math.min(0, anchorPos[0]);
26123
- box.y = Math.min(0, anchorPos[1]);
26124
- box.width = (anchorPos[0] < 0 ?
26125
- Math.max(Math.abs(anchorPos[0]), labelBBox.width - anchorPos[0]) :
26126
- Math.max(Math.abs(anchorPos[0]), labelBBox.width));
26127
- box.height = (anchorPos[1] < 0 ?
26128
- Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :
26129
- Math.max(Math.abs(anchorPos[1]), labelBBox.height));
26130
- if (tooltip.tracker) {
26131
- tooltip.tracker.attr(box);
26132
- }
26133
- else {
26123
+ const { height, r, width, x, y } = box;
26124
+ let { anchorX, anchorY } = box;
26125
+ // Shared tooltips clear the label anchor (#22295), so fall back to the
26126
+ // anchor the position was calculated from
26127
+ if (!isNumber(anchorX)) {
26128
+ anchorX = (tooltip.anchorX || 0) - (label.translateX || 0);
26129
+ anchorY = (tooltip.anchorY || 0) - (label.translateY || 0);
26130
+ }
26131
+ // Match the tooltip shape, but stretch the connector all the way to the
26132
+ // point, so that the pointer can travel between the two without losing
26133
+ // contact. Only the side facing the anchor overshoots the box, so the
26134
+ // largest of the four distances is the one to cover. (#24255)
26135
+ const d = label.renderer.symbols.callout(x, y, width, height, {
26136
+ anchorX,
26137
+ anchorY,
26138
+ arrowLength: Math.max(anchorX - width, -anchorX, anchorY - height, -anchorY, 0),
26139
+ r
26140
+ });
26141
+ if (!tooltip.tracker) {
26134
26142
  tooltip.tracker = label.renderer
26135
- .rect(box)
26143
+ .path()
26136
26144
  .addClass('highcharts-tracker')
26137
26145
  .add(label);
26138
26146
  // For a rapid move going outside of the elements keeping the
@@ -26140,10 +26148,14 @@ class Tooltip {
26140
26148
  addEvent(tooltip.tracker.element, 'mouseenter', () => clearTimeouts(tooltip));
26141
26149
  if (!chart.styledMode) {
26142
26150
  tooltip.tracker.attr({
26143
- fill: 'rgba(0,0,0,0)'
26151
+ fill: 'rgba(0,0,0,0)',
26152
+ stroke: 'rgba(0,0,0,0)',
26153
+ 'stroke-linejoin': 'round',
26154
+ 'stroke-width': 10
26144
26155
  });
26145
26156
  }
26146
26157
  }
26158
+ tooltip.tracker.attr({ d });
26147
26159
  }
26148
26160
  /** @internal */
26149
26161
  styledModeFormat(formatString) {
@@ -27090,7 +27102,8 @@ class Point {
27090
27102
  /**
27091
27103
  * Set a value in an object, on the property defined by key. The key
27092
27104
  * supports nested properties using dot notation. The function modifies the
27093
- * input object and does not make a copy.
27105
+ * input object and does not make a copy. Paths containing `__proto__` or
27106
+ * `constructor` are ignored.
27094
27107
  *
27095
27108
  * @function Highcharts.Point#setNestedProperty<T>
27096
27109
  *
@@ -27108,11 +27121,18 @@ class Point {
27108
27121
  */
27109
27122
  setNestedProperty(object, value, key) {
27110
27123
  const nestedKeys = key.split('.');
27124
+ // Reject nested keys that would allow prototype pollution
27125
+ if (nestedKeys.some((nestedKey) => (nestedKey === '__proto__' || nestedKey === 'constructor'))) {
27126
+ return object;
27127
+ }
27111
27128
  nestedKeys.reduce(function (result, key, i, arr) {
27112
27129
  const isLastKey = arr.length - 1 === i;
27113
27130
  result[key] = (isLastKey ?
27114
27131
  value :
27115
- isObject(result[key], true) ?
27132
+ // Inherited objects are shared with everything else on
27133
+ // that prototype, so start a fresh one instead
27134
+ isObject(result[key], true) &&
27135
+ Object.hasOwnProperty.call(result, key) ?
27116
27136
  result[key] :
27117
27137
  {});
27118
27138
  return result[key];
@@ -27194,15 +27214,10 @@ class Point {
27194
27214
  */
27195
27215
  function update() {
27196
27216
  point.applyOptions(options);
27197
- // Update visuals, #4146
27198
- // Handle mock graphic elements for a11y, #12718
27199
- const hasMockGraphic = graphic && point.hasMockGraphic, index = point.index;
27200
- const shouldDestroyGraphic = point.y === null ?
27201
- !hasMockGraphic :
27202
- hasMockGraphic;
27203
- if (graphic && shouldDestroyGraphic) {
27217
+ // Update visuals, #4146. The a11y mock graphic is exempt, it is
27218
+ // maintained by the accessibility module, #12718.
27219
+ if (graphic && point.y === null && !point.hasMockGraphic) {
27204
27220
  point.graphic = graphic.destroy();
27205
- delete point.hasMockGraphic;
27206
27221
  }
27207
27222
  if (isObject(options, true)) {
27208
27223
  // Destroy so we can get new elements
@@ -27217,7 +27232,7 @@ class Point {
27217
27232
  point.dataLabel = point.dataLabel.destroy(); // #2468
27218
27233
  }
27219
27234
  }
27220
- const pointOptions = point.optionsToObject(options);
27235
+ const index = point.index, pointOptions = point.optionsToObject(options);
27221
27236
  if (!series.hasProcessedDataTable) {
27222
27237
  // Record changes in the data table (#24451)
27223
27238
  series.dataTable.setRow(pointOptions, index);
@@ -29221,19 +29236,18 @@ class Pointer {
29221
29236
  if (hasMoved ?? true) {
29222
29237
  this.pinch(e);
29223
29238
  }
29239
+ // If inside, capture touch-drag and display tooltip. If not
29240
+ // inside, allow dragging the finger to scroll the page
29241
+ if (this.hasPointerCapture && // #25095
29242
+ e.type === 'touchmove' &&
29243
+ !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29244
+ e.preventDefault();
29245
+ }
29224
29246
  }
29225
29247
  else if (start) {
29226
29248
  // Hide the tooltip on touching outside the plot area (#1203)
29227
29249
  this.reset();
29228
29250
  }
29229
- // If inside, capture touch-drag and display tooltip. If not inside,
29230
- // allow dragging the finger to scroll the page
29231
- if ((chart.tooltip?.options.followTouchMove ?? true) &&
29232
- isInside &&
29233
- e.type === 'touchmove' &&
29234
- !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29235
- e.preventDefault();
29236
- }
29237
29251
  }
29238
29252
  else if (e.touches.length === 2) {
29239
29253
  this.pinch(e);
@@ -29633,13 +29647,19 @@ const { setLength: DataTableCore_setLength, splice: DataTableCore_splice } = Dat
29633
29647
  class DataTableCore {
29634
29648
  constructor(options = {}) {
29635
29649
  this.isDataTable = true;
29636
- this.autoId = !options.id;
29650
+ // Reject IDs that would pollute the prototype of ID-keyed maps.
29651
+ const id = this.isPollutingKey(options.id) ? void 0 : options.id;
29652
+ this.autoId = !id;
29637
29653
  this.columns = {};
29638
- this.id = (options.id || uniqueKey());
29654
+ this.id = (id || uniqueKey());
29639
29655
  this.rowCount = 0;
29640
29656
  this.versionTag = uniqueKey();
29641
29657
  let rowCount = 0;
29642
29658
  objectEach(options.columns || {}, (column, columnId) => {
29659
+ if (columnId === '__proto__' ||
29660
+ columnId === 'constructor') {
29661
+ return;
29662
+ }
29643
29663
  this.columns[columnId] = column.slice();
29644
29664
  rowCount = Math.max(rowCount, column.length);
29645
29665
  });
@@ -29650,6 +29670,17 @@ class DataTableCore {
29650
29670
  * Functions
29651
29671
  *
29652
29672
  * */
29673
+ /**
29674
+ * Checks whether a key would pollute the prototype if used to index a
29675
+ * plain object (e.g. as a column ID or table ID).
29676
+ *
29677
+ * @private
29678
+ * @param {string|undefined} key The key to check.
29679
+ * @return {boolean} True if the key is unsafe to use.
29680
+ */
29681
+ isPollutingKey(key) {
29682
+ return key === '__proto__' || key === 'constructor';
29683
+ }
29653
29684
  /**
29654
29685
  * Applies a row count to the table by setting the `rowCount` property and
29655
29686
  * adjusting the length of all columns.
@@ -29808,6 +29839,10 @@ class DataTableCore {
29808
29839
  setColumns(columns, rowIndex, eventDetail) {
29809
29840
  let rowCount = this.rowCount;
29810
29841
  objectEach(columns, (column, columnId) => {
29842
+ if (columnId === '__proto__' ||
29843
+ columnId === 'constructor') {
29844
+ return;
29845
+ }
29811
29846
  this.columns[columnId] = column.slice();
29812
29847
  rowCount = column.length;
29813
29848
  });
@@ -29846,11 +29881,14 @@ class DataTableCore {
29846
29881
  * @emits #afterSetRows
29847
29882
  */
29848
29883
  setRow(row, rowIndex = this.rowCount, insert, eventDetail) {
29849
- var _a;
29850
29884
  const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1, rowKeys = Object.keys(row);
29851
29885
  if (eventDetail?.addColumns !== false) {
29852
29886
  for (let i = 0, iEnd = rowKeys.length; i < iEnd; i++) {
29853
- columns[_a = rowKeys[i]] || (columns[_a] = new Array(this.rowCount));
29887
+ const rowKey = rowKeys[i];
29888
+ if (!this.isPollutingKey(rowKey) &&
29889
+ !Object.hasOwnProperty.call(columns, rowKey)) {
29890
+ columns[rowKey] = new Array(this.rowCount);
29891
+ }
29854
29892
  }
29855
29893
  }
29856
29894
  objectEach(columns, (column, columnId) => {
@@ -33830,7 +33868,19 @@ class Series {
33830
33868
  .optionsToObject
33831
33869
  .call({ series: this }, data[i]);
33832
33870
  for (const key of Object.keys(ptOptions)) {
33833
- columns[key] || (columns[key] = new Array(dataLength));
33871
+ // Assigning these would write through to
33872
+ // `Object.prototype` or the `Object` constructor instead
33873
+ // of creating a column, and thereby affect unrelated
33874
+ // objects on the page
33875
+ if (key === '__proto__' || key === 'constructor') {
33876
+ continue;
33877
+ }
33878
+ // Inherited keys like `toString` are truthy without being
33879
+ // columns of ours, so test for an own property rather
33880
+ // than for a value (#25321)
33881
+ if (!Object.hasOwnProperty.call(columns, key)) {
33882
+ columns[key] = new Array(dataLength);
33883
+ }
33834
33884
  columns[key][i] = ptOptions[key];
33835
33885
  }
33836
33886
  }
@@ -34483,7 +34533,7 @@ class Series {
34483
34533
  // Apply plotBorderRadius clipping
34484
34534
  plotClipGroup?.clip(
34485
34535
  // Navigator y-axis is not clippable
34486
- clip && this.yAxis.clippable ?
34536
+ clip && this.yAxis?.clippable ?
34487
34537
  chart.plotClipInner :
34488
34538
  void 0);
34489
34539
  }
@@ -34786,28 +34836,27 @@ class Series {
34786
34836
  * @emits Highcharts.Series#event:destroy
34787
34837
  */
34788
34838
  destroy(keepEventsForUpdate) {
34789
- const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent), data = series.data || [];
34790
- let destroy, i, axis;
34839
+ const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent);
34840
+ let destroy, axis;
34791
34841
  // Add event hook
34792
34842
  fireEvent(series, 'destroy', { keepEventsForUpdate });
34793
34843
  // Remove events
34794
34844
  this.removeEvents(keepEventsForUpdate);
34795
34845
  // Erase from axes
34796
- (series.axisTypes || []).forEach(function (AXIS) {
34797
- axis = series[AXIS];
34846
+ for (const coll of (series.axisTypes || [])) {
34847
+ axis = series[coll];
34798
34848
  if (axis?.series) {
34799
34849
  erase(axis.series, series);
34800
34850
  axis.isDirty = axis.forceRedraw = true;
34801
34851
  }
34802
- });
34852
+ }
34803
34853
  // Remove legend items
34804
34854
  if (series.legendItem) {
34805
34855
  series.chart.legend.destroyItem(series);
34806
34856
  }
34807
34857
  // Destroy all points with their elements
34808
- i = data.length;
34809
- while (i--) {
34810
- data[i]?.destroy?.(true);
34858
+ for (const point of series.points || []) {
34859
+ point?.destroy?.(true);
34811
34860
  }
34812
34861
  for (const zone of series.zones || []) {
34813
34862
  // Destroy SVGElement's but preserve primitive props (#20426)
@@ -38946,7 +38995,10 @@ class Chart {
38946
38995
  elem = this.renderer.text(options.text, 0, 0, options.useHTML)
38947
38996
  .attr({
38948
38997
  align: options.align,
38949
- 'class': 'highcharts-' + key,
38998
+ 'class': [
38999
+ options.className,
39000
+ 'highcharts-' + key
39001
+ ].filter(isString).join(' '),
38950
39002
  zIndex: options.zIndex || 4
38951
39003
  })
38952
39004
  .css({
@@ -39951,7 +40003,7 @@ class Chart {
39951
40003
  if (label &&
39952
40004
  (labels.reserveSpace ?? !isNumber(options.crossing))) {
39953
40005
  expectedSpace = label.getBBox().height +
39954
- labels.distance +
40006
+ (labels.distance ?? 15) +
39955
40007
  Math.max(isNumber(offset) ? offset : 0, 0);
39956
40008
  }
39957
40009
  if (expectedSpace) {
@@ -40039,6 +40091,12 @@ class Chart {
40039
40091
  addCredits(credits) {
40040
40092
  const chart = this, creds = merge(true, this.options.credits, credits);
40041
40093
  if (creds.enabled && !this.credits) {
40094
+ // Run the user-supplied URL through the allow list, so that
40095
+ // references like `javascript:` can't be executed from the
40096
+ // credits label
40097
+ const href = creds.href ?
40098
+ HTML_AST.filterUserAttributes({ href: creds.href }).href :
40099
+ void 0;
40042
40100
  /**
40043
40101
  * The chart's credits label. The label has an `update` method that
40044
40102
  * allows setting new options as per the
@@ -40052,8 +40110,8 @@ class Chart {
40052
40110
  .on('click', function (e) {
40053
40111
  // Fire the event with browser redirect as default function
40054
40112
  fireEvent(chart, 'creditsClick', e, () => {
40055
- if (creds.href) {
40056
- Chart_win.location.href = creds.href;
40113
+ if (href) {
40114
+ Chart_win.location.href = href;
40057
40115
  }
40058
40116
  });
40059
40117
  })
@@ -41670,14 +41728,11 @@ class StackItem {
41670
41728
  *
41671
41729
  * */
41672
41730
  /** @internal */
41673
- constructor(axis, options, negativeValue, x, stackOption) {
41674
- const inverted = axis.chart.inverted, reversed = axis.reversed;
41731
+ constructor(axis, negativeValue, x, stackOption) {
41675
41732
  this.axis = axis;
41676
41733
  // The stack goes to the left either if the stack has negative value
41677
41734
  // or when axis is reversed. XOR operator.
41678
- const isNegative = (this.isNegative = !!negativeValue !== !!reversed);
41679
- // Save the options to be able to style the label
41680
- this.options = options = options || {};
41735
+ this.negativeValue = negativeValue;
41681
41736
  // Save the x value to be able to position the label later
41682
41737
  this.x = x;
41683
41738
  // Initialize total value
@@ -41692,20 +41747,6 @@ class StackItem {
41692
41747
  this.stack = stackOption;
41693
41748
  this.leftCliff = 0;
41694
41749
  this.rightCliff = 0;
41695
- // The align options and text align varies on whether the stack is
41696
- // negative and if the chart is inverted or not.
41697
- // First test the user supplied value, then use the dynamic.
41698
- this.alignOptions = {
41699
- align: options.align ||
41700
- (inverted ? (isNegative ? 'left' : 'right') : 'center'),
41701
- verticalAlign: options.verticalAlign ||
41702
- (inverted ? 'middle' : isNegative ? 'bottom' : 'top'),
41703
- y: options.y,
41704
- x: options.x
41705
- };
41706
- this.textAlign =
41707
- options.textAlign ||
41708
- (inverted ? (!isNegative ? 'left' : 'right') : 'center');
41709
41750
  }
41710
41751
  /* *
41711
41752
  *
@@ -41721,39 +41762,34 @@ class StackItem {
41721
41762
  * @internal
41722
41763
  */
41723
41764
  render(group) {
41724
- const chart = this.axis.chart, options = this.options, formatOption = options.format,
41765
+ const axis = this.axis, chart = axis.chart, options = axis.options.stackLabels || {}, formatOption = options.format,
41725
41766
  // Format the text in the label.
41726
- str = (formatOption ?
41767
+ text = (formatOption ?
41727
41768
  StackItem_format(formatOption, this, chart) :
41728
- options.formatter?.call(this, this)) || '';
41729
- // Change the text to reflect the new total and set visibility to hidden
41730
- // in case the series is hidden
41731
- if (this.label) {
41732
- this.label.attr({ text: str, visibility: 'hidden' });
41769
+ options.formatter?.call(this, this)) || '', verb = this.label ? 'animate' : 'attr';
41770
+ // Create new label
41771
+ this.label || (this.label = chart.renderer.label(text, 0, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels'));
41772
+ const label = this.label, animatableAttribs = {
41773
+ r: options.borderRadius || 0,
41774
+ // Set default padding to 5 as it is in dataLabels #12308
41775
+ padding: (options.padding ?? 5)
41776
+ };
41777
+ if (!chart.styledMode) {
41778
+ animatableAttribs.fill = options.backgroundColor;
41779
+ animatableAttribs.stroke = options.borderColor;
41780
+ animatableAttribs['stroke-width'] = options.borderWidth;
41781
+ label.css(options.style || {});
41733
41782
  }
41734
- else {
41735
- // Create new label
41736
- this.label = chart.renderer.label(str, null, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels');
41737
- const attr = {
41738
- r: options.borderRadius || 0,
41739
- text: str,
41740
- // Set default padding to 5 as it is in dataLabels #12308
41741
- padding: (options.padding ?? 5),
41742
- visibility: 'hidden' // Hidden until setOffset is called
41743
- };
41744
- if (!chart.styledMode) {
41745
- attr.fill = options.backgroundColor;
41746
- attr.stroke = options.borderColor;
41747
- attr['stroke-width'] = options.borderWidth;
41748
- this.label.css(options.style || {});
41749
- }
41750
- this.label.attr(attr);
41751
- if (!this.label.added) {
41752
- this.label.add(group); // Add to the labels-group
41753
- }
41783
+ label
41784
+ .attr({
41785
+ text,
41786
+ visibility: 'hidden' // Hidden until setOffset is called
41787
+ })[verb](animatableAttribs);
41788
+ if (!label.added) {
41789
+ label.add(group); // Add to the labels-group
41754
41790
  }
41755
41791
  // Rank it higher than data labels (#8742)
41756
- this.label.labelrank = chart.plotSizeY;
41792
+ label.labelrank = chart.plotSizeY;
41757
41793
  fireEvent(this, 'afterRender');
41758
41794
  }
41759
41795
  /**
@@ -41762,35 +41798,38 @@ class StackItem {
41762
41798
  * @internal
41763
41799
  */
41764
41800
  setOffset(xOffset, width, boxBottom, boxTop, defaultX, xAxis) {
41765
- const { alignOptions, axis, label, options, textAlign } = this, chart = axis.chart, stackBox = this.getStackBox({
41766
- xOffset,
41767
- width,
41801
+ const { axis, label } = this, chart = axis.chart, options = axis.options.stackLabels || {}, inverted = chart.inverted, isNegative = this.negativeValue !== !!axis.reversed, stackBox = this.getStackBox({
41768
41802
  boxBottom,
41769
41803
  boxTop,
41770
41804
  defaultX,
41771
- xAxis
41772
- }), { verticalAlign } = alignOptions;
41805
+ isNegative,
41806
+ width,
41807
+ xAxis,
41808
+ xOffset
41809
+ }), { align = (inverted ? (isNegative ? 'left' : 'right') : 'center'), verticalAlign = (inverted ? 'middle' : isNegative ? 'bottom' : 'top'), textAlign = (inverted ? (!isNegative ? 'left' : 'right') : 'center'), x = 0, y = 0 } = options, alignOptions = {
41810
+ align,
41811
+ verticalAlign,
41812
+ x,
41813
+ y
41814
+ };
41773
41815
  if (label && stackBox) {
41774
41816
  const labelBox = label.getBBox(void 0, 0), padding = label.padding;
41775
41817
  let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
41776
- // Reset alignOptions property after justify #12337
41777
- alignOptions.x = options.x || 0;
41778
- alignOptions.y = options.y || 0;
41779
41818
  // Calculate the adjusted Stack position, to take into consideration
41780
- // The size if the labelBox and vertical alignment as
41781
- // well as the text alignment. It's need to be done to work with
41782
- // default SVGLabel.align/justify methods.
41783
- const { x, y } = this.adjustStackPosition({
41819
+ // the size if the labelBox and vertical alignment as well as the
41820
+ // text alignment. It needs to be done to work with default
41821
+ // SVGLabel.align/justify methods.
41822
+ const { x: adjustX, y: adjustY } = this.adjustStackPosition({
41784
41823
  labelBox,
41785
41824
  verticalAlign,
41786
41825
  textAlign
41787
41826
  });
41788
- stackBox.x -= x;
41789
- stackBox.y -= y;
41827
+ stackBox.x -= adjustX;
41828
+ stackBox.y -= adjustY;
41790
41829
  // Align the label to the adjusted box.
41791
41830
  label.align(alignOptions, false, stackBox);
41792
- // Check if label is inside the plotArea #12294
41793
- visible = chart.isInsidePlot(label.alignAttr.x + alignOptions.x + x, label.alignAttr.y + alignOptions.y + y);
41831
+ // Check if the label is inside the plotArea #12294
41832
+ visible = chart.isInsidePlot(label.alignAttr.x + x + adjustX, label.alignAttr.y + y + adjustY);
41794
41833
  if (!visible) {
41795
41834
  isJustify = false;
41796
41835
  }
@@ -41798,11 +41837,8 @@ class StackItem {
41798
41837
  // Justify stackLabel into the alignBox
41799
41838
  StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);
41800
41839
  }
41801
- // Add attr to avoid the default animation of justifyDataLabel.
41802
- // Also add correct rotation with its rotation origin. #15129
41840
+ // Add correct rotation with its rotation origin (#15129)
41803
41841
  label.attr({
41804
- x: label.alignAttr.x,
41805
- y: label.alignAttr.y,
41806
41842
  rotation: options.rotation,
41807
41843
  rotationOriginX: labelBox.width *
41808
41844
  getAlignFactor(options.textAlign || 'center'),
@@ -41841,22 +41877,22 @@ class StackItem {
41841
41877
  * The x, y, height, width of the stack.
41842
41878
  */
41843
41879
  getStackBox(stackBoxProps) {
41844
- const stackItem = this, axis = this.axis, chart = axis.chart, { boxTop, defaultX, xOffset, width, boxBottom } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41880
+ const axis = this.axis, chart = axis.chart, { boxBottom, boxTop, defaultX, isNegative, width, xOffset } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41845
41881
  100 :
41846
41882
  (boxTop ?? this.total ?? 0), y = axis.toPixels(totalStackValue), xAxis = stackBoxProps.xAxis || chart.xAxis[0], x = (defaultX ?? xAxis.translate(this.x)) + xOffset, yZero = axis.toPixels(boxBottom ||
41847
41883
  (isNumber(axis.min) &&
41848
41884
  axis.logarithmic &&
41849
41885
  axis.logarithmic.lin2log(axis.min)) ||
41850
- 0), height = Math.abs(y - yZero), inverted = chart.inverted, neg = stackItem.isNegative;
41886
+ 0), height = Math.abs(y - yZero), inverted = chart.inverted;
41851
41887
  return inverted ?
41852
41888
  {
41853
- x: (neg ? y : y - height) - chart.plotLeft,
41889
+ x: (isNegative ? y : y - height) - chart.plotLeft,
41854
41890
  y: xAxis.height - x - width + xAxis.top - chart.plotTop,
41855
41891
  width: height,
41856
41892
  height: width
41857
41893
  } : {
41858
41894
  x: x + xAxis.transB - chart.plotLeft,
41859
- y: (neg ? y - height : y) - chart.plotTop,
41895
+ y: (isNegative ? y - height : y) - chart.plotTop,
41860
41896
  width: width,
41861
41897
  height: height
41862
41898
  };
@@ -41892,10 +41928,6 @@ class StackItem {
41892
41928
  * @name Highcharts.StackItemObject#cumulative
41893
41929
  * @type {number}
41894
41930
  */ /**
41895
- * True if on the negative side
41896
- * @name Highcharts.StackItemObject#isNegative
41897
- * @type {boolean}
41898
- */ /**
41899
41931
  * Related SVG element
41900
41932
  * @name Highcharts.StackItemObject#label
41901
41933
  * @type {Highcharts.SVGElement}
@@ -42112,7 +42144,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
42112
42144
  stacks[key][x].total = null;
42113
42145
  }
42114
42146
  else {
42115
- stacks[key][x] = new Stacking_StackItem(axis, axis.options.stackLabels, !!isNegative, x, stackOption);
42147
+ stacks[key][x] = new Stacking_StackItem(axis, !!isNegative, x, stackOption);
42116
42148
  }
42117
42149
  }
42118
42150
  // If the StackItem doesn't exist, create it first
@@ -42269,29 +42301,41 @@ class AxisAdditions {
42269
42301
  });
42270
42302
  });
42271
42303
  }
42272
- /** @internal */
42304
+ /**
42305
+ * Create the stack totals group and render the individual labels into it
42306
+ * @internal
42307
+ */
42273
42308
  renderStackTotals() {
42274
- const stacking = this, axis = stacking.axis, chart = axis.chart, renderer = chart.renderer, stacks = stacking.stacks, stackLabelsAnim = axis.options.stackLabels?.animation, animationConfig = getDeferredAnimation(chart, stackLabelsAnim || false), stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||
42275
- renderer
42276
- .g('stack-labels')
42277
- .attr({
42278
- zIndex: 6,
42279
- opacity: 0
42280
- })
42281
- .add());
42282
- // The plotLeft/Top will change when y axis gets wider so we need to
42283
- // translate the stackTotalGroup at every render call. See bug #506
42284
- // and #516
42285
- stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42286
- // Render each stack total
42287
- objectEach(stacks, (type) => {
42288
- objectEach(type, (stack) => {
42289
- stack.render(stackTotalGroup);
42309
+ const stacking = this, axis = stacking.axis, chart = axis.chart, renderer = chart.renderer, stacks = stacking.stacks, { animation, enabled } = axis.options.stackLabels || {}, animationConfig = getDeferredAnimation(chart, animation || false), stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||
42310
+ (enabled ?
42311
+ renderer
42312
+ .g('stack-labels')
42313
+ .attr({
42314
+ zIndex: 6,
42315
+ opacity: 0
42316
+ })
42317
+ .add() :
42318
+ void 0));
42319
+ if (stackTotalGroup) {
42320
+ // The plotLeft/Top will change when y axis gets wider so we need to
42321
+ // translate the stackTotalGroup at every render call. See bug #506
42322
+ // and #516
42323
+ stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42324
+ // Render each stack total
42325
+ objectEach(stacks, (type) => {
42326
+ objectEach(type, (stack) => {
42327
+ if (enabled) {
42328
+ stack.render(stackTotalGroup);
42329
+ }
42330
+ else {
42331
+ stack.label = stack.label?.destroy();
42332
+ }
42333
+ });
42290
42334
  });
42291
- });
42292
- stackTotalGroup.animate({
42293
- opacity: 1
42294
- }, animationConfig);
42335
+ stackTotalGroup.animate({
42336
+ opacity: 1
42337
+ }, animationConfig);
42338
+ }
42295
42339
  }
42296
42340
  }
42297
42341
  /* *
@@ -42613,7 +42657,6 @@ Series_SeriesRegistry.registerSeriesType('line', LineSeries);
42613
42657
  * specified, it is inherited from [chart.type](#chart.type).
42614
42658
  *
42615
42659
  * @extends series,plotOptions.line
42616
- * @excluding dataParser,dataURL
42617
42660
  * @product highcharts highstock
42618
42661
  * @apioption series.line
42619
42662
  */
@@ -42987,7 +43030,7 @@ const AreaSeriesDefaults = {
42987
43030
  * specified, it is inherited from [chart.type](#chart.type).
42988
43031
  *
42989
43032
  * @extends series,plotOptions.area
42990
- * @excluding dataParser, dataURL, useOhlcData
43033
+ * @excluding useOhlcData
42991
43034
  * @product highcharts highstock
42992
43035
  * @apioption series.area
42993
43036
  */
@@ -43624,7 +43667,7 @@ Series_SeriesRegistry.registerSeriesType('spline', SplineSeries);
43624
43667
  * not specified, it is inherited from [chart.type](#chart.type).
43625
43668
  *
43626
43669
  * @extends series,plotOptions.spline
43627
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43670
+ * @excluding step, boostThreshold, boostBlending
43628
43671
  * @product highcharts highstock
43629
43672
  * @apioption series.spline
43630
43673
  */
@@ -43786,7 +43829,7 @@ Series_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);
43786
43829
  *
43787
43830
  *
43788
43831
  * @extends series,plotOptions.areaspline
43789
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43832
+ * @excluding step, boostThreshold, boostBlending
43790
43833
  * @product highcharts highstock
43791
43834
  * @apioption series.areaspline
43792
43835
  */
@@ -44063,13 +44106,16 @@ const ColumnSeriesDefaults = {
44063
44106
  * The minimal height for a column or width for a bar. By default,
44064
44107
  * 0 values are not shown. To visualize a 0 (or close to zero) point,
44065
44108
  * set the minimal point length to a pixel value like 3\. In stacked
44066
- * column charts, minPointLength might not be respected for tightly
44067
- * packed values.
44109
+ * column charts, the length is applied to each point in isolation, so
44110
+ * tightly packed values may overlap. See the stacked sample below for a
44111
+ * plugin that lays out the stack as a whole instead.
44068
44112
  *
44069
44113
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength/
44070
44114
  * Zero base value
44071
44115
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/
44072
44116
  * Positive and negative close to zero values
44117
+ * @sample {highcharts} highcharts/plotoptions/column-minpointlength-stacked/
44118
+ * Stack-aware minimum length
44073
44119
  *
44074
44120
  * @product highcharts highstock gantt
44075
44121
  */
@@ -44240,7 +44286,7 @@ const ColumnSeriesDefaults = {
44240
44286
  * not specified, it is inherited from [chart.type](#chart.type).
44241
44287
  *
44242
44288
  * @extends series,plotOptions.column
44243
- * @excluding connectNulls, dataParser, dataURL, gapSize, gapUnit, linecap,
44289
+ * @excluding connectNulls, gapSize, gapUnit, linecap,
44244
44290
  * lineWidth, marker, connectEnds, step
44245
44291
  * @product highcharts highstock
44246
44292
  * @apioption series.column
@@ -45884,7 +45930,7 @@ Series_SeriesRegistry.registerSeriesType('bar', BarSeries);
45884
45930
  * it is inherited from [chart.type](#chart.type).
45885
45931
  *
45886
45932
  * @extends series,plotOptions.bar
45887
- * @excluding connectNulls, dashStyle, dataParser, dataURL, gapSize, gapUnit,
45933
+ * @excluding connectNulls, dashStyle, gapSize, gapUnit,
45888
45934
  * linecap, lineWidth, marker, connectEnds, step
45889
45935
  * @product highcharts
45890
45936
  * @apioption series.bar
@@ -46085,7 +46131,7 @@ const ScatterSeriesDefaults = {
46085
46131
  * not specified, it is inherited from [chart.type](#chart.type).
46086
46132
  *
46087
46133
  * @extends series,plotOptions.scatter
46088
- * @excluding cropThreshold, dataParser, dataURL, useOhlcData
46134
+ * @excluding cropThreshold, useOhlcData
46089
46135
  * @product highcharts highstock
46090
46136
  * @apioption series.scatter
46091
46137
  */
@@ -47187,7 +47233,7 @@ const PieSeriesDefaults = {
47187
47233
  * it is inherited from [chart.type](#chart.type).
47188
47234
  *
47189
47235
  * @extends series,plotOptions.pie
47190
- * @excluding cropThreshold, dataParser, dataURL, linkedTo, stack, xAxis, yAxis,
47236
+ * @excluding cropThreshold, linkedTo, stack, xAxis, yAxis,
47191
47237
  * dataSorting, step, boostThreshold, boostBlending
47192
47238
  * @product highcharts highmaps
47193
47239
  * @apioption series.pie
@@ -48288,6 +48334,7 @@ var GeometryUtilities;
48288
48334
  * */
48289
48335
 
48290
48336
 
48337
+
48291
48338
  const { pointInPolygon } = Geometry_GeometryUtilities;
48292
48339
 
48293
48340
  /* *
@@ -48428,30 +48475,34 @@ function composeOverlappingDataLabels(ChartClass) {
48428
48475
  * Whether label is affected
48429
48476
  */
48430
48477
  function hideOrShow(label, chart) {
48431
- let complete, newOpacity, isLabelAffected = false;
48478
+ let isLabelAffected = false;
48432
48479
  if (label) {
48433
- newOpacity = label.newOpacity;
48480
+ const newOpacity = label.newOpacity, isDataLabel = label.hasClass('highcharts-data-label');
48481
+ // For tick labels, we need to stop running animations otherwise they
48482
+ // may continue to run after we set the new opacity
48483
+ if (!isDataLabel) {
48484
+ stop(label, 'opacity');
48485
+ }
48434
48486
  if (label.oldOpacity !== newOpacity) {
48435
48487
  // Toggle data labels
48436
- if (label.hasClass('highcharts-data-label')) {
48488
+ if (isDataLabel) {
48437
48489
  // Make sure the label is completely hidden to avoid catching
48438
48490
  // clicks (#4362)
48439
48491
  label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');
48440
- complete = function () {
48492
+ isLabelAffected = true;
48493
+ // Animate or set the opacity
48494
+ label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, () => {
48441
48495
  if (!chart.styledMode) {
48442
48496
  label.css({
48443
48497
  pointerEvents: newOpacity ? 'auto' : 'none'
48444
48498
  });
48445
48499
  }
48446
- };
48447
- isLabelAffected = true;
48448
- // Animate or set the opacity
48449
- label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);
48500
+ });
48450
48501
  fireEvent(chart, 'afterHideOverlappingLabel');
48451
- // Toggle other labels, tick labels
48502
+ // Toggle other labels - tick labels, stack labels
48452
48503
  }
48453
48504
  else {
48454
- label.attr({
48505
+ label[label.placed ? 'animate' : 'attr']({
48455
48506
  opacity: newOpacity
48456
48507
  });
48457
48508
  }
@@ -48467,25 +48518,37 @@ function hideOrShow(label, chart) {
48467
48518
  * @internal
48468
48519
  */
48469
48520
  function OverlappingDataLabels_onChartRender() {
48470
- const chart = this;
48521
+ const chart = this,
48522
+ // Helper function for data labels and stack labels when dynamicly
48523
+ // toggling the allowOverlap option
48524
+ toggle = (label, allowOverlap) => {
48525
+ // Allow overlap, reset opacity and show
48526
+ if (allowOverlap) {
48527
+ label.oldOpacity = label.opacity;
48528
+ label.newOpacity = 1;
48529
+ hideOrShow(label, chart);
48530
+ // Do not allow overlap
48531
+ }
48532
+ else {
48533
+ labels.push(label);
48534
+ }
48535
+ };
48471
48536
  let labels = [];
48472
48537
  // Consider external label collectors
48473
48538
  for (const collector of (chart.labelCollectors || [])) {
48474
48539
  labels = labels.concat(collector());
48475
48540
  }
48476
- for (const yAxis of (chart.yAxis || [])) {
48477
- if (yAxis.stacking &&
48478
- yAxis.options.stackLabels &&
48479
- !yAxis.options.stackLabels.allowOverlap) {
48480
- objectEach(yAxis.stacking.stacks, (stack) => {
48481
- objectEach(stack, (stackItem) => {
48482
- if (stackItem.label) {
48483
- labels.push(stackItem.label);
48484
- }
48485
- });
48541
+ // Stack labels
48542
+ for (const { options, stacking } of (chart.yAxis || [])) {
48543
+ objectEach(stacking?.stacks, (stack) => {
48544
+ objectEach(stack, ({ label }) => {
48545
+ if (label) {
48546
+ toggle(label, options.stackLabels?.allowOverlap);
48547
+ }
48486
48548
  });
48487
- }
48549
+ });
48488
48550
  }
48551
+ // Series data labels
48489
48552
  for (const series of (chart.series || [])) {
48490
48553
  if (series.visible && series.hasDataLabels?.()) { // #3866
48491
48554
  const push = (points) => {
@@ -48514,21 +48577,13 @@ function OverlappingDataLabels_onChartRender() {
48514
48577
  }
48515
48578
  */
48516
48579
  // Allow overlap if the option is explicitly true
48517
- if (
48580
+ toggle(label, (
48518
48581
  // #13449
48519
48582
  options.allowOverlap ??
48520
48583
  // Pie labels outside have a separate placement
48521
48584
  // logic, skip the overlap logic
48522
48585
  (series.is('pie') &&
48523
- Number(options.distance) > 0)) {
48524
- label.oldOpacity = label.opacity;
48525
- label.newOpacity = 1;
48526
- hideOrShow(label, chart);
48527
- // Do not allow overlap
48528
- }
48529
- else {
48530
- labels.push(label);
48531
- }
48586
+ Number(options.distance) > 0)));
48532
48587
  });
48533
48588
  }
48534
48589
  }
@@ -49204,7 +49259,7 @@ var Responsive;
49204
49259
  ;// ./code/es-modules/masters/highcharts.src.js
49205
49260
  // SPDX-License-Identifier: LicenseRef-Highcharts
49206
49261
  /**
49207
- * @license Highcharts JS v13.0.2 (2026-08-27)
49262
+ * @license Highcharts JS v13.1.0 (2026-09-18)
49208
49263
  * @module highcharts/highcharts
49209
49264
  *
49210
49265
  * (c) 2009-2026 Highsoft AS
@@ -49416,7 +49471,8 @@ function compose(ChartClass, NavigatorClass) {
49416
49471
  const chartProto = ChartClass.prototype;
49417
49472
  NavigatorConstructor = NavigatorClass;
49418
49473
  chartProto.callbacks.push(onChartCallback);
49419
- addEvent(ChartClass, 'afterAddSeries', onChartAfterAddSeries);
49474
+ addEvent(ChartClass, 'afterAddSeries', resetBaseSeries);
49475
+ addEvent(ChartClass, 'afterDrillUp', resetBaseSeries);
49420
49476
  addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);
49421
49477
  addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);
49422
49478
  addEvent(ChartClass, 'beforeRender', onChartBeforeRender);
@@ -49425,13 +49481,12 @@ function compose(ChartClass, NavigatorClass) {
49425
49481
  }
49426
49482
  }
49427
49483
  /**
49428
- * Handle adding new series.
49484
+ * Reset the base series.
49429
49485
  * @internal
49430
49486
  */
49431
- function onChartAfterAddSeries() {
49487
+ function resetBaseSeries() {
49432
49488
  if (this.navigator) {
49433
- // Recompute which series should be shown in navigator, and add them
49434
- this.navigator.setBaseSeries(null, false);
49489
+ this.navigator.setBaseSeries(void 0, false);
49435
49490
  }
49436
49491
  }
49437
49492
  /**
@@ -49580,7 +49635,7 @@ const ChartNavigatorComposition = {
49580
49635
  * */
49581
49636
 
49582
49637
 
49583
- const { isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
49638
+ const { composed: NavigatorAxisComposition_composed, isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
49584
49639
 
49585
49640
  /* *
49586
49641
  *
@@ -49646,8 +49701,7 @@ class NavigatorAxisAdditions {
49646
49701
  *
49647
49702
  * */
49648
49703
  static compose(AxisClass) {
49649
- if (!AxisClass.keepProps.includes('navigatorAxis')) {
49650
- AxisClass.keepProps.push('navigatorAxis');
49704
+ if (pushUnique(NavigatorAxisComposition_composed, 'Axis.Navigator')) {
49651
49705
  addEvent(AxisClass, 'init', NavigatorAxisComposition_onAxisInit);
49652
49706
  addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);
49653
49707
  }
@@ -50519,6 +50573,9 @@ var ScrollbarAxis;
50519
50573
  }
50520
50574
  });
50521
50575
  }
50576
+ else if (axis.scrollbar) {
50577
+ axis.scrollbar = axis.scrollbar.destroy();
50578
+ }
50522
50579
  }
50523
50580
  /**
50524
50581
  * Wrap rendering axis, and update scrollbar if one is created.
@@ -50656,14 +50713,12 @@ var ScrollbarAxis;
50656
50713
  */
50657
50714
  const ScrollbarDefaults = {
50658
50715
  /**
50659
- * The height of the scrollbar. If `buttonsEnabled` is true , the height
50716
+ * The height of the scrollbar. If `buttonsEnabled` is true, the height
50660
50717
  * also applies to the width of the scroll arrows so that they are always
50661
50718
  * squares.
50662
50719
  *
50663
50720
  * @sample stock/scrollbar/style/
50664
50721
  * Non-default height
50665
- *
50666
- * @type {number}
50667
50722
  */
50668
50723
  height: 10,
50669
50724
  /**
@@ -52970,11 +53025,7 @@ class Navigator {
52970
53025
  erase(this.chart.axes, this.yAxis);
52971
53026
  }
52972
53027
  // Destroy series
52973
- (this.series || []).forEach((s) => {
52974
- if (s.destroy) {
52975
- s.destroy();
52976
- }
52977
- });
53028
+ destroyObjectProperties(this.series || []);
52978
53029
  // Destroy properties
52979
53030
  [
52980
53031
  'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',
@@ -53094,6 +53145,27 @@ const standaloneNavigatorDefaults = {
53094
53145
 
53095
53146
 
53096
53147
 
53148
+
53149
+ /* *
53150
+ *
53151
+ * Functions
53152
+ *
53153
+ * */
53154
+ /**
53155
+ * Support for the deprecated `chart` option, renamed to `chartOptions`.
53156
+ * The new option takes precedence. #24715
53157
+ *
53158
+ * @internal
53159
+ */
53160
+ function compatChartOptions(options, chart) {
53161
+ if (options.chart) {
53162
+ error(32, false, chart, {
53163
+ 'standaloneNavigator.chart': 'use standaloneNavigator.chartOptions'
53164
+ });
53165
+ return merge({ chartOptions: options.chart }, options);
53166
+ }
53167
+ return options;
53168
+ }
53097
53169
  /* *
53098
53170
  *
53099
53171
  * Class
@@ -53150,9 +53222,15 @@ class StandaloneNavigator {
53150
53222
  * */
53151
53223
  constructor(element, userOptions) {
53152
53224
  this.boundAxes = [];
53153
- this.userOptions = userOptions;
53154
- this.chartOptions = merge(Core_Globals.getOptions(), StandaloneNavigatorDefaults, userOptions.chart, { navigator: userOptions });
53155
- if (this.chartOptions.chart && userOptions.height) {
53225
+ this.userOptions = userOptions = compatChartOptions(userOptions);
53226
+ this.chartOptions = merge(Core_Globals.getOptions(), StandaloneNavigatorDefaults, userOptions.chartOptions, { navigator: userOptions });
53227
+ // For a non-inverted navigator, the height option sets the chart
53228
+ // height unless it is set explicitly in chart options (#21268,
53229
+ // #24715).
53230
+ if (this.chartOptions.chart &&
53231
+ !this.chartOptions.chart.inverted &&
53232
+ !userOptions.chartOptions?.chart?.height &&
53233
+ userOptions.height) {
53156
53234
  this.chartOptions.chart.height = userOptions.height;
53157
53235
  }
53158
53236
  const chart = new Chart_Chart(element, this.chartOptions);
@@ -53240,10 +53318,8 @@ class StandaloneNavigator {
53240
53318
  // Set extremes to match the navigator's extremes
53241
53319
  axis.setExtremes(min, max);
53242
53320
  // Unbind the axis before it's destroyed
53243
- addEvent(axis, 'destroy', (e) => {
53244
- if (!e.keepEvents) {
53245
- this.unbind(axis);
53246
- }
53321
+ addEvent(axis, 'destroy', () => {
53322
+ this.unbind(axis);
53247
53323
  });
53248
53324
  }
53249
53325
  /**
@@ -53337,7 +53413,12 @@ class StandaloneNavigator {
53337
53413
  * specified, the standalone navigator will be redrawn.
53338
53414
  */
53339
53415
  update(newOptions, redraw) {
53340
- this.chartOptions = merge(this.chartOptions, newOptions.height && { chart: { height: newOptions.height } }, newOptions.chart, { navigator: newOptions });
53416
+ newOptions = compatChartOptions(newOptions, this.navigator.chart);
53417
+ this.userOptions = merge(this.userOptions, newOptions);
53418
+ const chartUserOptions = this.userOptions.chartOptions?.chart;
53419
+ this.chartOptions = merge(this.chartOptions, (newOptions.height &&
53420
+ !chartUserOptions?.inverted &&
53421
+ !chartUserOptions?.height) ? { chart: { height: newOptions.height } } : void 0, newOptions.chartOptions, { navigator: newOptions });
53341
53422
  this.navigator.chart.update(this.chartOptions, redraw);
53342
53423
  }
53343
53424
  /**
@@ -53464,7 +53545,7 @@ class StandaloneNavigator {
53464
53545
  /* unused harmony import specifier */ var Highcharts;
53465
53546
  // SPDX-License-Identifier: LicenseRef-Highcharts
53466
53547
  /**
53467
- * @license Highcharts JS v13.0.2 (2026-08-27)
53548
+ * @license Highcharts JS v13.1.0 (2026-09-18)
53468
53549
  * @module highcharts/modules/navigator
53469
53550
  * @requires highcharts
53470
53551
  *