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.
@@ -40,7 +40,7 @@ var Globals;
40
40
  * Constants
41
41
  *
42
42
  * */
43
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.2', Globals.win = (typeof window !== 'undefined' ?
43
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.1.0', Globals.win = (typeof window !== 'undefined' ?
44
44
  window :
45
45
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
46
46
  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 = [
@@ -51,14 +51,16 @@ var Globals;
51
51
  ], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {
52
52
  // Checks whether the browser supports passive events, (#11353).
53
53
  let supportsPassive = false;
54
- // Object.defineProperty doesn't work on IE as well as passive
55
- // events - instead of using polyfill, we can exclude IE totally.
54
+ // Accessors don't work on IE as well as passive events - instead
55
+ // of using polyfill, we can exclude IE totally. The getter has to
56
+ // be enumerable, or wrappers that shallow-copy the options never
57
+ // read it (#25092).
56
58
  if (!Globals.isMS) {
57
- const opts = Object.defineProperty({}, 'passive', {
58
- get: function () {
59
- supportsPassive = true;
59
+ const opts = {
60
+ get passive() {
61
+ return (supportsPassive = true);
60
62
  }
61
- });
63
+ };
62
64
  if (Globals.win.addEventListener && Globals.win.removeEventListener) {
63
65
  Globals.win.addEventListener('testPassive', Globals.noop, opts);
64
66
  Globals.win.removeEventListener('testPassive', Globals.noop, opts);
@@ -2134,6 +2136,13 @@ function extend(a, b) {
2134
2136
  a = {};
2135
2137
  }
2136
2138
  for (n in b) { // eslint-disable-line guard-for-in
2139
+ // Prototype pollution (#14883). Keys like `__proto__` may arrive as
2140
+ // own, enumerable properties through `JSON.parse`, in which case
2141
+ // assigning them would mutate the prototype of the target instead of
2142
+ // adding a property.
2143
+ if (n === '__proto__' || n === 'constructor') {
2144
+ continue;
2145
+ }
2137
2146
  a[n] = b[n];
2138
2147
  }
2139
2148
  return a;
@@ -5395,6 +5404,13 @@ const defaultOptions = {
5395
5404
  * @since 2.0
5396
5405
  * @apioption title.align
5397
5406
  */
5407
+ /**
5408
+ * A CSS class name to apply to the title's container div,
5409
+ * allowing unique CSS styling for each chart.
5410
+ *
5411
+ * @type {string}
5412
+ * @apioption title.className
5413
+ */
5398
5414
  /**
5399
5415
  * The margin between the title and the plot area, or if a subtitle
5400
5416
  * is present, the margin between the subtitle and the plot area.
@@ -5457,6 +5473,13 @@ const defaultOptions = {
5457
5473
  * @since 2.0
5458
5474
  * @apioption subtitle.align
5459
5475
  */
5476
+ /**
5477
+ * A CSS class name to apply to the subtitle's container div,
5478
+ * allowing unique CSS styling for each chart.
5479
+ *
5480
+ * @type {string}
5481
+ * @apioption subtitle.className
5482
+ */
5460
5483
  /**
5461
5484
  * When the subtitle is floating, the plot area will not move to make
5462
5485
  * space for it.
@@ -7589,6 +7612,10 @@ const defaultOptions = {
7589
7612
  /**
7590
7613
  * The URL for the credits label.
7591
7614
  *
7615
+ * URLs that do not start with one of the
7616
+ * [AST.allowedReferences](https://api.highcharts.com/class-reference/Highcharts.AST#.allowedReferences),
7617
+ * for example `javascript:` URLs, are ignored.
7618
+ *
7592
7619
  * @sample {highcharts} highcharts/credits/href/
7593
7620
  * Custom URL and text
7594
7621
  * @sample {highmaps} maps/credits/customized/
@@ -8562,6 +8589,7 @@ class Fx {
8562
8589
  * Prepare start and end values so that the path can be animated one to one.
8563
8590
  *
8564
8591
  * @function Highcharts.Fx#initPath
8592
+ * @internal
8565
8593
  *
8566
8594
  * @param {Highcharts.SVGElement} elem
8567
8595
  * The SVGElement item.
@@ -8861,7 +8889,9 @@ function animate(el, params = { pos: 1 }, opt) {
8861
8889
  if (el) {
8862
8890
  stop(el, prop);
8863
8891
  }
8864
- const fx = new Animation_Fx(el, opt, prop), d = params.d;
8892
+ const fx = new Animation_Fx(el, opt, prop), d = params.d,
8893
+ // Discrete value that doesn't animate, apply at once
8894
+ applyImmediately = prop === 'dashstyle';
8865
8895
  let start = 0, end = void 0, unit = '';
8866
8896
  if (prop === 'd' && isArray(d)) {
8867
8897
  fx.paths = fx.initPath(el, el.pathArray, d);
@@ -8870,6 +8900,9 @@ function animate(el, params = { pos: 1 }, opt) {
8870
8900
  }
8871
8901
  else if (el?.attr) {
8872
8902
  start = el.attr(prop);
8903
+ if (applyImmediately) {
8904
+ el.attr(prop, val);
8905
+ }
8873
8906
  }
8874
8907
  else if (el) {
8875
8908
  start = +(getStyle(el, prop) || 0);
@@ -8884,7 +8917,7 @@ function animate(el, params = { pos: 1 }, opt) {
8884
8917
  end = end.replace(/px/g, ''); // #4351
8885
8918
  }
8886
8919
  // Empty dashstyle animation crashes treemap on hover
8887
- if (defined(end)) {
8920
+ if (defined(end) && !applyImmediately) {
8888
8921
  fx.run(start, end, unit);
8889
8922
  }
8890
8923
  });
@@ -9206,17 +9239,25 @@ class AST {
9206
9239
  markup, 'text/html');
9207
9240
  }
9208
9241
  catch {
9209
- // There are two cases where this fails:
9210
- // 1. IE9 and PhantomJS, where the DOMParser only supports parsing
9211
- // XML
9212
- // 2. Due to a Chromium issue where chart redraws are triggered by
9213
- // a `beforeprint` event (#16931),
9214
- // https://issues.chromium.org/issues/40222135
9242
+ // Due to a Chromium issue where chart redraws are triggered by a
9243
+ // `beforeprint` event (#16931),
9244
+ // https://issues.chromium.org/issues/40222135, the Trusted
9245
+ // Types `createHTML` callback can throw "The provided callback
9246
+ // is no longer runnable" while the browser is mid-print. Retry
9247
+ // with the raw string - `DOMParser` itself is not a Trusted
9248
+ // Types sink, so parsing it directly is safe.
9249
+ try {
9250
+ doc = new DOMParser().parseFromString(markup, 'text/html');
9251
+ }
9252
+ catch {
9253
+ // Ignore, fall through to the inert-document fallback below.
9254
+ }
9215
9255
  }
9216
9256
  if (!doc) {
9217
- const body = createElement('div');
9218
- body.innerHTML = markup;
9219
- doc = { body };
9257
+ // Never assign untrusted markup to a live document's innerHTML.
9258
+ // Parse into a detached, inert document instead.
9259
+ doc = Core_Globals.doc.implementation.createHTMLDocument('');
9260
+ doc.body.innerHTML = markup;
9220
9261
  }
9221
9262
  const appendChildNodes = (node, addTo) => {
9222
9263
  // Preserve the camelCase of SVG tags via localName (#24702).
@@ -9453,7 +9494,6 @@ AST.allowedTags = [
9453
9494
  'span',
9454
9495
  'stop',
9455
9496
  'strong',
9456
- 'style',
9457
9497
  'sub',
9458
9498
  'sup',
9459
9499
  'svg',
@@ -10233,6 +10273,7 @@ class SVGElement {
10233
10273
  let ret = (this[key + 'Value'] ??
10234
10274
  this[key] ??
10235
10275
  (this.element ? this.element.getAttribute(key) : null) ??
10276
+ this.box?.[key] ?? // For labels, when animating border radius
10236
10277
  0);
10237
10278
  if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
10238
10279
  ret = parseFloat(ret);
@@ -12827,7 +12868,7 @@ function arc(cx, cy, w, h, options) {
12827
12868
  * Path
12828
12869
  */
12829
12870
  function callout(x, y, w, h, options) {
12830
- const arrowLength = 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
12871
+ 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;
12831
12872
  const path = roundedRect(x, y, w, h, { r });
12832
12873
  if (!isNumber(anchorX)) {
12833
12874
  return path;
@@ -13451,8 +13492,12 @@ class TextBuilder {
13451
13492
  this.truncate(textNode, textNode.textContent || '', void 0, 0,
13452
13493
  // Target width
13453
13494
  width, ellipsisWidth, stringWithEllipsis);
13454
- textNode.textContent = textNode.textContent
13455
- ?.replace('\u2026', '') + '\u2026';
13495
+ // If there is still text left, add an ellipsis to
13496
+ // the end of the line
13497
+ if (textNode.textContent) {
13498
+ textNode.textContent = textNode.textContent
13499
+ ?.replace('\u2026', '') + '\u2026';
13500
+ }
13456
13501
  }
13457
13502
  break;
13458
13503
  }
@@ -13878,7 +13923,7 @@ class SVGRenderer {
13878
13923
  this.url = this.getReferenceURL();
13879
13924
  // Add description
13880
13925
  const desc = this.createElement('desc').add();
13881
- desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.2'));
13926
+ desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.1.0'));
13882
13927
  this.defs = this.createElement('defs').add();
13883
13928
  this.allowHTML = allowHTML;
13884
13929
  this.forExport = forExport;
@@ -15717,7 +15762,11 @@ class HTMLElement extends SVG_SVGElement {
15717
15762
  // Some properties require other properties to be set
15718
15763
  if (styles?.textOverflow === 'ellipsis') {
15719
15764
  styles.overflow = 'hidden';
15720
- styles.whiteSpace = 'nowrap';
15765
+ // With a line clamp, the text should wrap and ellipsis at the
15766
+ // clamped line instead of staying on one line (#24724)
15767
+ if (!(styles.lineClamp ?? this.styles.lineClamp)) {
15768
+ styles.whiteSpace = 'nowrap';
15769
+ }
15721
15770
  }
15722
15771
  // Apply line clamp
15723
15772
  if (styles?.lineClamp) {
@@ -16906,15 +16955,16 @@ var AxisDefaults;
16906
16955
  /**
16907
16956
  * The label's pixel distance from the perimeter of the plot area.
16908
16957
  * On cartesian charts, this is overridden if the `labels.y` setting
16909
- * is set.
16958
+ * is set. Defaults to 15 unless the labels are aligned inside the
16959
+ * plot area, in which case it defaults to 0.
16910
16960
  *
16911
16961
  * @sample {highcharts} highcharts/yaxis/labels-distance/
16912
16962
  * Polar chart, labels centered under the arc
16913
16963
  *
16914
16964
  * @type {number}
16915
16965
  * @product highcharts gantt
16966
+ * @apioption xAxis.labels.distance
16916
16967
  */
16917
- distance: 15,
16918
16968
  /**
16919
16969
  * Enable or disable the axis labels.
16920
16970
  *
@@ -17172,18 +17222,18 @@ var AxisDefaults;
17172
17222
  * @apioption xAxis.top
17173
17223
  */
17174
17224
  /**
17175
- * Index of another axis that this axis is linked to. When an axis is
17176
- * linked to a master axis, it will take the same extremes as
17177
- * the master, but as assigned by min or max or by setExtremes.
17178
- * It can be used to show additional info, or to ease reading the
17179
- * chart by duplicating the scales.
17225
+ * Index or [id](#xAxis.id) of another axis that this axis is linked to.
17226
+ * When an axis is linked to a master axis, it will take the same
17227
+ * extremes as the master, but as assigned by min or max or by
17228
+ * `setExtremes`. It can be used to show additional info, or to ease
17229
+ * reading the chart by duplicating the scales.
17180
17230
  *
17181
17231
  * @sample {highcharts} highcharts/xaxis/linkedto/
17182
17232
  * Different string formats of the same date
17183
17233
  * @sample {highcharts} highcharts/yaxis/linkedto/
17184
17234
  * Y values on both sides
17185
17235
  *
17186
- * @type {number}
17236
+ * @type {number|string}
17187
17237
  * @since 2.0.2
17188
17238
  * @product highcharts highstock gantt
17189
17239
  * @apioption xAxis.linkedTo
@@ -19303,7 +19353,7 @@ class Tick {
19303
19353
  */
19304
19354
  addLabel() {
19305
19355
  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;
19306
- let label = tick.label, dateTimeLabelFormat, dateTimeLabelFormats, i;
19356
+ let dateTimeLabelFormat, dateTimeLabelFormats, i;
19307
19357
  // The context value
19308
19358
  let value = this.parameters.category || (categories ?
19309
19359
  (categories[pos] ?? names[pos] ?? pos) :
@@ -19389,10 +19439,15 @@ class Tick {
19389
19439
  }
19390
19440
  return axis.defaultLabelFormatter.call(ctx);
19391
19441
  };
19392
- const text = labelFormatter.call(ctx, ctx);
19442
+ /**
19443
+ * The rendered text label of the tick.
19444
+ * @name Highcharts.Tick#label
19445
+ * @type {Highcharts.SVGElement|undefined}
19446
+ */
19447
+ tick.label = tick.createLabel(labelFormatter.call(ctx, ctx), labelOptions);
19393
19448
  // Set up conditional formatting based on the format list if existing.
19394
- const list = dateTimeLabelFormats?.list;
19395
- if (list) {
19449
+ const list = dateTimeLabelFormats?.list, label = tick.label;
19450
+ if (list && label) {
19396
19451
  tick.shortenLabel = function () {
19397
19452
  for (i = 0; i < list.length; i++) {
19398
19453
  extend(ctx, { dateTimeLabelFormat: list[i] });
@@ -19400,43 +19455,17 @@ class Tick {
19400
19455
  text: labelFormatter.call(ctx, ctx)
19401
19456
  });
19402
19457
  if (label.getBBox().width <
19403
- axis.getSlotWidth(tick) - 2 *
19404
- (labelOptions.padding || 0)) {
19458
+ axis.getSlotWidth(tick) - 2 * (labelOptions.padding || 0)) {
19405
19459
  return;
19406
19460
  }
19407
19461
  }
19408
- label.attr({
19409
- text: ''
19410
- });
19462
+ label.attr({ text: '' });
19411
19463
  };
19412
19464
  }
19413
19465
  else {
19414
19466
  // #15692
19415
19467
  tick.shortenLabel = void 0;
19416
19468
  }
19417
- // First call
19418
- if (!label) {
19419
- /**
19420
- * The rendered text label of the tick.
19421
- * @name Highcharts.Tick#label
19422
- * @type {Highcharts.SVGElement|undefined}
19423
- */
19424
- tick.label = label = tick.createLabel(text, labelOptions);
19425
- // Base value to detect change for new calls to getBBox
19426
- tick.rotation = 0;
19427
- // Update
19428
- }
19429
- else if (label.textStr !== text) {
19430
- // When resetting text, also reset the width if dynamically set
19431
- // (#8809)
19432
- if (label.textWidth &&
19433
- !labelOptions.style.width &&
19434
- !label.styles.width) {
19435
- label.css({ width: void 0 });
19436
- }
19437
- label.attr({ text });
19438
- label.textPxLength = label.getBBox().width;
19439
- }
19440
19469
  }
19441
19470
  /**
19442
19471
  * Render and return the label of the tick.
@@ -19444,18 +19473,33 @@ class Tick {
19444
19473
  * @internal
19445
19474
  * @function Highcharts.Tick#createLabel
19446
19475
  */
19447
- createLabel(str, labelOptions, xy) {
19448
- const axis = this.axis, { renderer, styledMode } = axis.chart, whiteSpace = labelOptions.style.whiteSpace, label = defined(str) && labelOptions.enabled ?
19449
- renderer
19450
- .text(str, xy?.x, xy?.y, labelOptions.useHTML)
19451
- .add(axis.labelGroup) :
19452
- void 0;
19476
+ createLabel(text, labelOptions, xy) {
19477
+ const axis = this.axis, { renderer, styledMode } = axis.chart, style = labelOptions.style, whiteSpace = style.whiteSpace;
19478
+ let label = this.label;
19479
+ if (defined(text) && labelOptions.enabled) {
19480
+ label || (label = renderer
19481
+ .text(text, xy?.x, xy?.y, labelOptions.useHTML)
19482
+ .add(axis.labelGroup));
19483
+ }
19484
+ else if (label) {
19485
+ label = label.destroy();
19486
+ // Reset so it doesn't animate when re-enabled
19487
+ this.isNewLabel = true;
19488
+ }
19453
19489
  // Un-rotated length
19454
- if (label) {
19490
+ if (label && (label.labelStyle !== style || text !== label.textStr)) {
19491
+ // Store a reference to the current style object to avoid running
19492
+ // this block on every render call unless something actually
19493
+ // changes.
19494
+ label.labelStyle = style;
19495
+ if (text !== label.textStr) {
19496
+ label.attr({ text });
19497
+ delete label.textPxLength;
19498
+ }
19455
19499
  if (!styledMode) {
19456
- label.css(merge(labelOptions.style));
19500
+ label.css(merge(style));
19457
19501
  }
19458
- label.textPxLength = label.getBBox().width;
19502
+ label.textPxLength ?? (label.textPxLength = label.getBBox().width);
19459
19503
  // Apply the white-space setting after we read the full text width
19460
19504
  if (!styledMode && whiteSpace) {
19461
19505
  label.css({ whiteSpace });
@@ -19527,19 +19571,27 @@ class Tick {
19527
19571
  * @internal
19528
19572
  */
19529
19573
  getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
19530
- const axis = this.axis, transA = axis.transA, reversed = ( // #7911
19531
- axis.isLinked && axis.linkedParent ?
19574
+ const axis = this.axis, { labelAlign, side, staggerLines, transA } = axis, reversed = ( // #7911
19575
+ axis.linkedParent ?
19532
19576
  axis.linkedParent.reversed :
19533
- axis.reversed), staggerLines = axis.staggerLines, rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19577
+ axis.reversed), rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19534
19578
  // Adjust for label alignment if we use reserveSpace: true (#5286)
19535
19579
  labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?
19536
- -axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :
19537
- 0), distance = labelOptions.distance, pos = {};
19580
+ -(axis.labelOffset || 0) * (axis.labelAlign === 'center' ? 0.5 : 1) :
19581
+ 0), distance = labelOptions.distance ?? (
19582
+ // If the label is aligned inside the plot area, default to 0.
19583
+ // This is default behavior or Stock y-axis labels.
19584
+ (side === 1 &&
19585
+ labelAlign === 'right' &&
19586
+ !labelOptions.reserveSpace) ? 0 :
19587
+ (side === 3 &&
19588
+ labelAlign === 'left' &&
19589
+ !labelOptions.reserveSpace) ? 0 : 15), pos = {};
19538
19590
  let yOffset, line;
19539
- if (axis.side === 0) {
19591
+ if (side === 0) {
19540
19592
  yOffset = label.rotation ? -distance : -label.getBBox().height;
19541
19593
  }
19542
- else if (axis.side === 2) {
19594
+ else if (side === 2) {
19543
19595
  yOffset = rotCorr.y + distance;
19544
19596
  }
19545
19597
  else {
@@ -19548,12 +19600,12 @@ class Tick {
19548
19600
  (rotCorr.y - label.getBBox(false, 0).height / 2);
19549
19601
  }
19550
19602
  if (defined(labelOptions.y)) {
19551
- yOffset = axis.side === 0 && axis.horiz ?
19603
+ yOffset = side === 0 && axis.horiz ?
19552
19604
  labelOptions.y + yOffset :
19553
19605
  labelOptions.y;
19554
19606
  }
19555
19607
  x = x +
19556
- (labelOptions.x ?? [0, 1, 0, -1][axis.side] * distance) +
19608
+ (labelOptions.x ?? [0, 1, 0, -1][side] * distance) +
19557
19609
  labelOffsetCorrection +
19558
19610
  rotCorr.x -
19559
19611
  (tickmarkOffset && horiz ?
@@ -19608,7 +19660,7 @@ class Tick {
19608
19660
  * @function Highcharts.Tick#handleOverflow
19609
19661
  */
19610
19662
  handleOverflow(xy) {
19611
- 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 = {};
19663
+ 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;
19612
19664
  let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
19613
19665
  // Check if the label overshoots the chart spacing box. If it does, move
19614
19666
  // it. If it now overshoots the slotWidth, add ellipsis.
@@ -19656,10 +19708,10 @@ class Tick {
19656
19708
  tick.shortenLabel();
19657
19709
  }
19658
19710
  else {
19659
- label.css(extend(css, {
19711
+ label.css({
19660
19712
  width: Math.floor(textWidth) + 'px',
19661
19713
  lineClamp: axis.isRadial ? 0 : 1
19662
- }));
19714
+ });
19663
19715
  }
19664
19716
  }
19665
19717
  }
@@ -19675,8 +19727,11 @@ class Tick {
19675
19727
  * @param {number} [opacity]
19676
19728
  */
19677
19729
  render(index, old, opacity) {
19678
- 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;
19679
- const labelOpacity = (opacity ?? tick.label?.newOpacity ?? 1);
19730
+ 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;
19731
+ if (!axis.visible) {
19732
+ opacity = 0;
19733
+ }
19734
+ const labelOpacity = opacity ?? 1;
19680
19735
  // Anything that is not between `axis.pos` and `axis.pos + axis.length`
19681
19736
  // should not be visible (#20166). The `correctFloat` is for reversed
19682
19737
  // axes in Safari.
@@ -19704,25 +19759,21 @@ class Tick {
19704
19759
  * @param {number} opacity The opacity of the grid line
19705
19760
  */
19706
19761
  renderGridLine(old, opacity) {
19707
- 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;
19708
- let gridLine = tick.gridLine, gridLinePath, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19762
+ 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;
19763
+ let gridLine = tick.gridLine, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19709
19764
  if (tick.type === 'minor') {
19710
19765
  gridLineWidth = options.minorGridLineWidth;
19711
19766
  gridLineColor = options.minorGridLineColor;
19712
19767
  dashStyle = options.minorGridLineDashStyle;
19713
19768
  }
19769
+ // Apply the stroke width initially so the crisping works
19770
+ if (!styledMode) {
19771
+ attribs['stroke-width'] = gridLineWidth || 0;
19772
+ }
19714
19773
  if (!gridLine) {
19715
- if (!axis.chart.styledMode) {
19716
- attribs.stroke = gridLineColor;
19717
- attribs['stroke-width'] = gridLineWidth || 0;
19718
- attribs.dashstyle = dashStyle;
19719
- }
19720
19774
  if (!type) {
19721
19775
  attribs.zIndex = 1;
19722
19776
  }
19723
- if (old) {
19724
- opacity = 0;
19725
- }
19726
19777
  /**
19727
19778
  * The rendered grid line of the tick.
19728
19779
  * @name Highcharts.Tick#gridLine
@@ -19733,22 +19784,24 @@ class Tick {
19733
19784
  .addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')
19734
19785
  .add(axis.gridGroup);
19735
19786
  }
19736
- if (gridLine) {
19737
- gridLinePath = axis.getPlotLinePath({
19738
- value: pos + tickmarkOffset,
19739
- lineWidth: gridLine.strokeWidth(),
19740
- force: 'pass',
19741
- old: old,
19742
- acrossPanes: false // #18025
19743
- });
19787
+ // Grid line path
19788
+ const d = axis.getPlotLinePath({
19789
+ value: pos + tickmarkOffset,
19790
+ lineWidth: gridLine.strokeWidth(),
19791
+ force: 'pass',
19792
+ old: old,
19793
+ acrossPanes: false // #18025
19794
+ });
19795
+ if (d) {
19796
+ attribs.d = d;
19797
+ attribs.opacity = old ? 0 : opacity;
19798
+ if (!styledMode) {
19799
+ attribs.stroke = gridLineColor;
19800
+ attribs.dashstyle = dashStyle;
19801
+ }
19744
19802
  // If the parameter 'old' is set, the current call will be followed
19745
19803
  // by another call, therefore do not do any animations this time
19746
- if (gridLinePath) {
19747
- gridLine[old || tick.isNew ? 'attr' : 'animate']({
19748
- d: gridLinePath,
19749
- opacity: opacity
19750
- });
19751
- }
19804
+ gridLine[old || tick.isNew ? 'attr' : 'animate'](attribs);
19752
19805
  }
19753
19806
  }
19754
19807
  /**
@@ -19760,13 +19813,13 @@ class Tick {
19760
19813
  * @param {number} opacity The opacity of the mark
19761
19814
  */
19762
19815
  renderMark(xy, opacity) {
19763
- 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
19816
+ 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
19764
19817
  tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
19765
19818
  let mark = tick.mark;
19766
- const isNewMark = !mark;
19767
- if (tickSize) {
19819
+ const verb = mark ? 'animate' : 'attr';
19820
+ if (tickSize || mark) {
19768
19821
  // Negate the length
19769
- if (axis.opposite) {
19822
+ if (axis.opposite && tickSize) {
19770
19823
  tickSize[0] = -tickSize[0];
19771
19824
  }
19772
19825
  // First time, create it
@@ -19779,16 +19832,16 @@ class Tick {
19779
19832
  tick.mark = mark = renderer.path()
19780
19833
  .addClass('highcharts-' + (type ? type + '-' : '') + 'tick')
19781
19834
  .add(axis.axisGroup);
19782
- if (!axis.chart.styledMode) {
19783
- mark.attr({
19784
- stroke: tickColor,
19785
- 'stroke-width': tickWidth
19786
- });
19787
- }
19788
19835
  }
19789
- mark[isNewMark ? 'attr' : 'animate']({
19790
- d: tick.getMarkPath(x, y, tickSize[0], mark.strokeWidth(), axis.horiz, renderer),
19791
- opacity: opacity
19836
+ if (!chart.styledMode) {
19837
+ mark[verb]({
19838
+ stroke: tickColor,
19839
+ 'stroke-width': tickWidth
19840
+ });
19841
+ }
19842
+ mark[verb]({
19843
+ d: tick.getMarkPath(x, y, tickSize?.[0] || 0, mark.strokeWidth(), axis.horiz, renderer),
19844
+ opacity: tickSize ? opacity : 0
19792
19845
  });
19793
19846
  }
19794
19847
  }
@@ -19950,6 +20003,11 @@ extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
19950
20003
  * Axis options
19951
20004
  */
19952
20005
  class Axis {
20006
+ /* *
20007
+ *
20008
+ * Static Properties
20009
+ *
20010
+ * */
19953
20011
  /* *
19954
20012
  *
19955
20013
  * Constructors
@@ -20026,9 +20084,11 @@ class Axis {
20026
20084
  * @name Highcharts.Axis#side
20027
20085
  * @type {number}
20028
20086
  */
20029
- axis.side = (userOptions.side ?? axis.side ?? (horiz ?
20030
- (axis.opposite ? 0 : 2) : // Top : bottom
20031
- (axis.opposite ? 1 : 3)));
20087
+ axis.side = userOptions.side ??
20088
+ (horiz ?
20089
+ (axis.opposite ? 0 : 2) : // Top : bottom
20090
+ (axis.opposite ? 1 : 3) // Right : left
20091
+ );
20032
20092
  /**
20033
20093
  * Current options for the axis after merge of defaults and user's
20034
20094
  * options.
@@ -20039,8 +20099,8 @@ class Axis {
20039
20099
  axis.setOptions(userOptions);
20040
20100
  const options = axis.options, labelsOptions = options.labels;
20041
20101
  // Set the type and fire an event
20042
- axis.type ?? (axis.type = options.type || 'linear');
20043
- axis.uniqueNames ?? (axis.uniqueNames = options.uniqueNames ?? true);
20102
+ axis.type = options.type || 'linear';
20103
+ axis.uniqueNames = options.uniqueNames ?? true;
20044
20104
  fireEvent(axis, 'afterSetType');
20045
20105
  /**
20046
20106
  * User's options for this axis without defaults.
@@ -20057,7 +20117,7 @@ class Axis {
20057
20117
  * @name Highcharts.Axis#reversed
20058
20118
  * @type {boolean}
20059
20119
  */
20060
- axis.reversed = (options.reversed ?? axis.reversed);
20120
+ axis.reversed = options.reversed;
20061
20121
  axis.visible = options.visible;
20062
20122
  axis.zoomEnabled = options.zoomEnabled;
20063
20123
  // Initial categories
@@ -20079,16 +20139,12 @@ class Axis {
20079
20139
  */
20080
20140
  axis.categories = (isArray(options.categories) && options.categories) ||
20081
20141
  (axis.hasNames ? [] : void 0);
20082
- // Axis names and its map for quick access. Backwards mapping is much
20083
- // faster than array searching (#7725). Preserve on update (#3830)
20084
- axis.names || (axis.names = []);
20142
+ axis.names || (axis.names = []); // Preserve on update (#3830)
20085
20143
  axis.namesMap || (axis.namesMap = {});
20086
20144
  // Placeholder for plotLines and plotBands groups
20087
- axis.plotLinesAndBandsGroups = {};
20145
+ axis.plotLinesAndBandsGroups || (axis.plotLinesAndBandsGroups = {});
20088
20146
  // Shorthand types
20089
20147
  axis.positiveValuesOnly = !!axis.logarithmic;
20090
- // Flag, if axis is linked to another axis
20091
- axis.isLinked = defined(options.linkedTo);
20092
20148
  /**
20093
20149
  * List of major ticks mapped by position on axis.
20094
20150
  *
@@ -20097,8 +20153,8 @@ class Axis {
20097
20153
  * @name Highcharts.Axis#ticks
20098
20154
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20099
20155
  */
20100
- axis.ticks = {};
20101
- axis.labelEdge = [];
20156
+ axis.ticks || (axis.ticks = {});
20157
+ axis.labelEdge || (axis.labelEdge = []);
20102
20158
  /**
20103
20159
  * List of minor ticks mapped by position on the axis.
20104
20160
  *
@@ -20107,11 +20163,9 @@ class Axis {
20107
20163
  * @name Highcharts.Axis#minorTicks
20108
20164
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20109
20165
  */
20110
- axis.minorTicks = {};
20111
- // List of plotLines/Bands
20112
- axis.plotLinesAndBands = [];
20166
+ axis.minorTicks || (axis.minorTicks = {});
20113
20167
  // Alternate bands
20114
- axis.alternateBands = {};
20168
+ axis.alternateBands || (axis.alternateBands = {});
20115
20169
  /**
20116
20170
  * The length of the axis in terms of pixels.
20117
20171
  *
@@ -20145,7 +20199,7 @@ class Axis {
20145
20199
  * @name Highcharts.Axis#crosshair
20146
20200
  * @type {boolean|Highcharts.AxisCrosshairOptions}
20147
20201
  */
20148
- const crosshair = options.crosshair ?? splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1];
20202
+ const crosshair = options.crosshair ?? splat(chart.options.tooltip?.crosshairs)[isXAxis ? 0 : 1];
20149
20203
  axis.crosshair = crosshair === true ? {} : crosshair;
20150
20204
  // Register. Don't add it again on Axis.update().
20151
20205
  if (chart.axes.indexOf(axis) === -1) { //
@@ -20200,14 +20254,14 @@ class Axis {
20200
20254
  },
20201
20255
  margin: 15
20202
20256
  } :
20203
- // Left and right axis, title rotated 90 or 270 degrees
20257
+ // Left and right axis, title rotated -90 or 90 degrees
20204
20258
  // respectively
20205
20259
  {
20206
20260
  labels: {
20207
20261
  padding: 1
20208
20262
  },
20209
20263
  title: {
20210
- rotation: 90 * this.side
20264
+ rotation: this.side === 1 ? 90 : -90
20211
20265
  }
20212
20266
  };
20213
20267
  this.options = merge(sideSpecific,
@@ -20421,6 +20475,9 @@ class Axis {
20421
20475
  if (!axis.isRadial) {
20422
20476
  returnValue = correctFloat(returnValue);
20423
20477
  }
20478
+ if (Math.abs(returnValue) < 1e-9) {
20479
+ returnValue = 0;
20480
+ }
20424
20481
  }
20425
20482
  return returnValue;
20426
20483
  }
@@ -20476,7 +20533,7 @@ class Axis {
20476
20533
  * The SVG path definition for the plot line.
20477
20534
  */
20478
20535
  getPlotLinePath(options) {
20479
- 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;
20536
+ 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;
20480
20537
  let translatedValue = options.translatedValue, force = options.force, x1, y1, x2, y2, skip;
20481
20538
  // eslint-disable-next-line valid-jsdoc
20482
20539
  /**
@@ -20514,17 +20571,17 @@ class Axis {
20514
20571
  skip = true;
20515
20572
  force = false; // #7175, don't force it when path is invalid
20516
20573
  }
20517
- else if (axis.horiz) {
20518
- y1 = axisTop;
20574
+ else if (horiz) {
20575
+ y1 = top;
20519
20576
  y2 = cHeight - axis.bottom + (axis.options.isInternal ?
20520
20577
  0 :
20521
20578
  (chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator
20522
- x1 = x2 = between(x1, axisLeft, axisLeft + axis.width);
20579
+ x1 = x2 = between(x1, left, left + axis.width);
20523
20580
  }
20524
20581
  else {
20525
- x1 = axisLeft;
20582
+ x1 = left;
20526
20583
  x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);
20527
- y1 = y2 = between(y1, axisTop, axisTop + axis.height);
20584
+ y1 = y2 = between(y1, top, top + axis.height);
20528
20585
  }
20529
20586
  e.path = skip && !force ?
20530
20587
  void 0 :
@@ -20953,7 +21010,7 @@ class Axis {
20953
21010
  * @emits Highcharts.Axis#event:foundExtremes
20954
21011
  */
20955
21012
  setTickInterval(secondPass) {
20956
- 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;
21013
+ 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;
20957
21014
  let maxPadding = options.maxPadding, minPadding = options.minPadding, range = 0, linkedParentExtremes,
20958
21015
  // Only non-negative tickInterval is valid, #12961
20959
21016
  tickIntervalOption = isNumber(options.tickInterval) && options.tickInterval >= 0 ?
@@ -20966,7 +21023,6 @@ class Axis {
20966
21023
  hardMax = (axis.userMax ?? time.parse(options.max));
20967
21024
  // Linked axis gets the extremes from the parent axis
20968
21025
  if (linkedParent) {
20969
- axis.linkedParent = linkedParent;
20970
21026
  linkedParentExtremes = linkedParent.getExtremes();
20971
21027
  axis.min =
20972
21028
  linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
@@ -21276,7 +21332,7 @@ class Axis {
21276
21332
  // Reset min/max or remove extremes based on start/end on tick
21277
21333
  this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor
21278
21334
  this.trimTicks(tickPositions, startOnTick, endOnTick);
21279
- if (!this.isLinked && isNumber(this.min) && isNumber(this.max)) {
21335
+ if (!this.linkedParent && isNumber(this.min) && isNumber(this.max)) {
21280
21336
  // Subtract half a unit (#2619, #2846, #2515, #3390), but not in
21281
21337
  // case of multiple ticks (#6897)
21282
21338
  if (this.single &&
@@ -21311,7 +21367,7 @@ class Axis {
21311
21367
  trimTicks(tickPositions, startOnTick, endOnTick) {
21312
21368
  const roundedMin = tickPositions[0], roundedMax = tickPositions[tickPositions.length - 1], minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)
21313
21369
  fireEvent(this, 'trimTicks');
21314
- if (!this.isLinked ||
21370
+ if (!this.linkedParent ||
21315
21371
  // Linked non-grid axes should trim ticks, #21743.
21316
21372
  // Grid axis has custom handling of ticks.
21317
21373
  !this.grid) {
@@ -21585,7 +21641,15 @@ class Axis {
21585
21641
  * @emits Highcharts.Axis#event:afterSetScale
21586
21642
  */
21587
21643
  setScale() {
21588
- const axis = this, { coll, stacking } = axis;
21644
+ const axis = this, { chart, coll, options, stacking } = axis, { linkedTo } = options, axes = chart[coll] || [], index = axes.indexOf(axis), parent = isString(linkedTo) ?
21645
+ find(axes, (a) => a.options.id === linkedTo) :
21646
+ (isNumber(linkedTo) ? axes[linkedTo] : void 0), linkedParent = axis.linkedParent =
21647
+ parent === axis ? void 0 : parent;
21648
+ // Scale a later-ordered parent first so its extremes are ready. Skip
21649
+ // grid column axes, which live outside the collection (#24658).
21650
+ if (linkedParent && index > -1 && axes.indexOf(linkedParent) > index) {
21651
+ linkedParent.setScale();
21652
+ }
21589
21653
  let isDirtyData = false, isXAxisDirty = false;
21590
21654
  axis.series.forEach((series) => {
21591
21655
  isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;
@@ -21602,7 +21666,7 @@ class Axis {
21602
21666
  if (isDirtyAxisLength ||
21603
21667
  isDirtyData ||
21604
21668
  isXAxisDirty ||
21605
- axis.isLinked ||
21669
+ axis.linkedParent ||
21606
21670
  axis.forceRedraw ||
21607
21671
  axis.userMin !== axis.old?.userMin ||
21608
21672
  axis.userMax !== axis.old?.userMax ||
@@ -21964,7 +22028,7 @@ class Axis {
21964
22028
  renderUnsquish() {
21965
22029
  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 ?
21966
22030
  2 * (labelOptions.padding || 0) :
21967
- labelOptions.distance || 0 // #21172
22031
+ labelOptions.distance ?? 15 // #21172
21968
22032
  ))), attr = {}, labelMetrics = this.labelMetrics(), lineClampOption = labelStyleOptions.lineClamp;
21969
22033
  let commonWidth, lineClamp = lineClampOption ?? (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1), maxLabelLength = 0;
21970
22034
  // Set rotation option unless it is "auto", like in gauges
@@ -22044,7 +22108,6 @@ class Axis {
22044
22108
  });
22045
22109
  }
22046
22110
  }
22047
- tick.rotation = attr.rotation;
22048
22111
  }
22049
22112
  }, this);
22050
22113
  // Note: Why is this not part of getLabelPosition?
@@ -22076,46 +22139,50 @@ class Axis {
22076
22139
  * Whether or not to display the title.
22077
22140
  */
22078
22141
  addTitle(display) {
22079
- const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode;
22080
- let textAlign;
22081
- if (!axis.axisTitle) {
22082
- textAlign = axisTitleOptions.textAlign;
22083
- if (!textAlign) {
22084
- textAlign = (horiz ? {
22085
- low: 'left',
22086
- middle: 'center',
22087
- high: 'right'
22088
- } : {
22089
- low: opposite ? 'right' : 'left',
22090
- middle: 'center',
22091
- high: opposite ? 'left' : 'right'
22092
- })[axisTitleOptions.align];
22093
- }
22094
- axis.axisTitle = renderer
22095
- .text(axisTitleOptions.text || '', 0, 0, axisTitleOptions.useHTML)
22096
- .attr({
22097
- zIndex: 7,
22098
- rotation: axisTitleOptions.rotation || 0,
22099
- align: textAlign
22100
- })
22142
+ 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 ||
22143
+ (horiz ? {
22144
+ low: 'left',
22145
+ middle: 'center',
22146
+ high: 'right'
22147
+ } : {
22148
+ low: opposite ? 'right' : 'left',
22149
+ middle: 'center',
22150
+ high: opposite ? 'left' : 'right'
22151
+ })[axisTitleOptions.align], attr = {
22152
+ text: axisTitleOptions.text || '',
22153
+ zIndex: 7,
22154
+ align: textAlign
22155
+ }, animatable = {
22156
+ rotation: axisTitleOptions.rotation || 0
22157
+ };
22158
+ let axisTitle = axis.axisTitle;
22159
+ if (!axisTitle) {
22160
+ axisTitle = renderer
22161
+ .text('', 0, 0, axisTitleOptions.useHTML)
22162
+ .attr(extend(attr, animatable))
22101
22163
  .addClass('highcharts-axis-title');
22102
- // #7814, don't mutate style option
22103
- if (!styledMode) {
22104
- axis.axisTitle.css(merge(axisTitleOptions.style));
22105
- }
22106
- axis.axisTitle.add(axis.axisGroup);
22107
- axis.axisTitle.isNew = true;
22164
+ axisTitle.add(axis.axisGroup);
22165
+ axisTitle.isNew = true;
22108
22166
  }
22109
- // Max width defaults to the length of the axis
22110
- if (!styledMode &&
22111
- !axisTitleOptions.style.width &&
22112
- !axis.isRadial) {
22113
- axis.axisTitle.css({
22114
- width: axis.len + 'px'
22115
- });
22167
+ else {
22168
+ axisTitle
22169
+ .attr(attr)
22170
+ .animate(animatable);
22171
+ }
22172
+ if (!styledMode) {
22173
+ // #7814, don't mutate the style option
22174
+ const css = merge(axisTitleOptions.style);
22175
+ // Max width defaults to the length of the axis
22176
+ if (!axisTitleOptions.style.width &&
22177
+ !axis.isRadial) {
22178
+ css.width = axis.len + 'px';
22179
+ }
22180
+ axisTitle.css(css);
22116
22181
  }
22117
22182
  // Hide or show the title depending on whether showEmpty is set
22118
- axis.axisTitle[display ? 'show' : 'hide'](display);
22183
+ axisTitle[display ? 'show' : 'hide'](display);
22184
+ // Register
22185
+ axis.axisTitle = axisTitle;
22119
22186
  }
22120
22187
  /**
22121
22188
  * Generates a tick for initial positioning.
@@ -22143,17 +22210,18 @@ class Axis {
22143
22210
  createGroups() {
22144
22211
  const { axisParent, // Used in color axis
22145
22212
  chart, coll, options } = this, renderer = chart.renderer;
22146
- const createGroup = (name, suffix, zIndex) => renderer.g(name)
22147
- .attr({ zIndex })
22213
+ const createGroup = (name, suffix) => renderer.g(name)
22148
22214
  .addClass(`highcharts-${coll.toLowerCase()}${suffix} ` +
22149
22215
  (this.isRadial ? `highcharts-radial-axis${suffix} ` : '') +
22150
22216
  (options.className || ''))
22151
22217
  .add(axisParent);
22152
- if (!this.axisGroup) {
22153
- this.gridGroup = createGroup('grid', '-grid', options.gridZIndex).clip(this.clippable ? chart.plotClipInner : void 0);
22154
- this.axisGroup = createGroup('axis', '', options.zIndex);
22155
- this.labelGroup = createGroup('axis-labels', '-labels', options.labels.zIndex);
22156
- }
22218
+ (this.axisGroup || (this.axisGroup = createGroup('axis', '')))
22219
+ .attr({ zIndex: options.zIndex });
22220
+ (this.gridGroup || (this.gridGroup = createGroup('grid', '-grid')))
22221
+ .clip(this.clippable ? chart.plotClipInner : void 0)
22222
+ .attr({ zIndex: options.gridZIndex });
22223
+ (this.labelGroup || (this.labelGroup = createGroup('axis-labels', '-labels')))
22224
+ .attr({ zIndex: options.labels.zIndex });
22157
22225
  }
22158
22226
  /**
22159
22227
  * Shuffle existing category ticks, like in bar race chart
@@ -22161,8 +22229,11 @@ class Axis {
22161
22229
  * @internal
22162
22230
  */
22163
22231
  shuffleTicks() {
22164
- const ticks = this.ticks, oldNames = this.old?.names;
22165
- if (this.type === 'category' && oldNames) {
22232
+ const ticks = this.ticks, oldNames = this.old?.names, hasDuplicates = (arr) => new Set(arr).size !== arr.length;
22233
+ if (this.type === 'category' &&
22234
+ oldNames &&
22235
+ !hasDuplicates(oldNames) &&
22236
+ !hasDuplicates(this.names)) {
22166
22237
  oldNames.forEach((name, oldPos) => {
22167
22238
  const pos = this.namesMap[name];
22168
22239
  if (defined(pos) && oldPos !== pos) {
@@ -22204,7 +22275,7 @@ class Axis {
22204
22275
  * @emits Highcharts.Axis#event:afterGetOffset
22205
22276
  */
22206
22277
  getOffset() {
22207
- 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];
22278
+ 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;
22208
22279
  let tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }, absTickRotCorrX = 0, showAxis, titleOffset = 0, titleOffsetOption, titleMargin = 0, labelOffset = 0, // Reset
22209
22280
  labelOffsetPadded, lineHeightCorrection, reserveSpaceDefault;
22210
22281
  // For reuse in Axis.render
@@ -22212,7 +22283,7 @@ class Axis {
22212
22283
  // Set/reset staggerLines
22213
22284
  axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;
22214
22285
  axis.createGroups();
22215
- if (hasData || axis.isLinked) {
22286
+ if (hasData || axis.linkedParent) {
22216
22287
  // Shuffle existing category ticks
22217
22288
  axis.shuffleTicks();
22218
22289
  // Generate new ticks
@@ -22264,6 +22335,9 @@ class Axis {
22264
22335
  axisTitleOptions.margin ?? (horiz ? 5 : 10);
22265
22336
  }
22266
22337
  }
22338
+ else {
22339
+ axis.axisTitle = axis.axisTitle?.destroy();
22340
+ }
22267
22341
  // Render the axis line
22268
22342
  axis.renderLine();
22269
22343
  // Handle automatic or user set offset
@@ -22287,12 +22361,10 @@ class Axis {
22287
22361
  labelOffsetPadded -= lineHeightCorrection;
22288
22362
  labelOffsetPadded += directionFactor * (horiz ?
22289
22363
  (labelOptions.y ??
22290
- (tickRotCorr.y +
22291
- directionFactor * labelOptions.distance)) :
22364
+ (tickRotCorr.y + directionFactor * distance)) :
22292
22365
  (labelOptions.x ?? (reserveSpaceDefault ?
22293
- directionFactor * (labelOptions.distance - absTickRotCorrX) :
22294
- tickRotCorr.x +
22295
- directionFactor * labelOptions.distance)));
22366
+ directionFactor * (distance - absTickRotCorrX) :
22367
+ tickRotCorr.x + directionFactor * distance)));
22296
22368
  if (!horiz &&
22297
22369
  !reserveSpaceDefault &&
22298
22370
  axis.labelAlign === 'center' &&
@@ -22306,8 +22378,8 @@ class Axis {
22306
22378
  // has rendered.
22307
22379
  if (coll !== 'colorAxis' && clipOffset) {
22308
22380
  const tickSize = this.tickSize('tick');
22309
- axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +
22310
- directionFactor * axis.offset, labelOffsetPadded, // #3027
22381
+ axisOffset[side] = Math.max(axisOffset[side], Math.max((axis.axisTitleMargin || 0) + titleOffset, labelOffsetPadded) + directionFactor * axis.offset, // #6967
22382
+ labelOffsetPadded, // #3027
22311
22383
  tickPositions?.length && tickSize ?
22312
22384
  tickSize[0] + directionFactor * axis.offset :
22313
22385
  0 // #4866
@@ -22369,18 +22441,20 @@ class Axis {
22369
22441
  * @function Highcharts.Axis#renderLine
22370
22442
  */
22371
22443
  renderLine() {
22372
- const { chart, offset = 0, options } = this;
22444
+ const { chart, offset = 0, options } = this, verb = this.axisLine ? 'animate' : 'attr';
22373
22445
  this.axisLine || (this.axisLine = chart.renderer.path()
22374
22446
  .addClass('highcharts-axis-line')
22375
- .attr(chart.styledMode ? {} : {
22376
- stroke: options.lineColor,
22377
- 'stroke-width': options.lineWidth,
22378
- zIndex: 7
22379
- })
22447
+ .attr({ zIndex: 7 })
22380
22448
  .clip(this.clippable && offset <= 0 ?
22381
22449
  chart.plotClipOuter :
22382
22450
  void 0)
22383
22451
  .add(this.axisGroup));
22452
+ if (!chart.styledMode) {
22453
+ this.axisLine[verb]({
22454
+ stroke: options.lineColor,
22455
+ 'stroke-width': options.lineWidth
22456
+ });
22457
+ }
22384
22458
  }
22385
22459
  /**
22386
22460
  * Position the axis title.
@@ -22465,9 +22539,9 @@ class Axis {
22465
22539
  * Whether the tick should animate in from last computed position
22466
22540
  */
22467
22541
  renderTick(pos, i, slideIn) {
22468
- const axis = this, isLinked = axis.isLinked, ticks = axis.ticks;
22542
+ const axis = this, ticks = axis.ticks;
22469
22543
  // Linked axes need an extra check to find out if
22470
- if (!isLinked ||
22544
+ if (!axis.linkedParent ||
22471
22545
  (pos >= axis.min && pos <= axis.max) ||
22472
22546
  axis.grid?.isColumn) {
22473
22547
  if (!ticks[pos]) {
@@ -22493,11 +22567,13 @@ class Axis {
22493
22567
  * @emits Highcharts.Axis#event:afterRender
22494
22568
  */
22495
22569
  render() {
22496
- 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);
22570
+ 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);
22497
22571
  let from, to;
22498
22572
  // Reset
22499
22573
  axis.labelEdge.length = 0;
22500
22574
  axis.overlap = false;
22575
+ // Update z-indices
22576
+ this.createGroups();
22501
22577
  // Mark all elements inActive before we go over and mark the active ones
22502
22578
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22503
22579
  objectEach(coll, function (tick) {
@@ -22516,7 +22592,7 @@ class Axis {
22516
22592
  }
22517
22593
  }
22518
22594
  // If the series has data draw the ticks. Else only the line and title
22519
- if (axis.hasData() || isLinked) {
22595
+ if (axis.hasData() || axis.linkedParent) {
22520
22596
  const slideInTicks = axis.chart.hasRendered &&
22521
22597
  axis.old && isNumber(axis.old.min);
22522
22598
  // Minor ticks
@@ -22554,8 +22630,10 @@ class Axis {
22554
22630
  tickmarkOffset)) { // #2248, #4660
22555
22631
  if (!alternateBands[pos]) {
22556
22632
  // Should be imported from PlotLineOrBand.js, but
22557
- // the dependency cycle with axis is a problem
22558
- alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {});
22633
+ // the dependency cycle with axis is a problem. Try
22634
+ // moving it to the PlotLineOrBand axis composition
22635
+ // later.
22636
+ alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {}, 'plotBands');
22559
22637
  }
22560
22638
  from = pos + tickmarkOffset; // #949
22561
22639
  alternateBands[pos].options = {
@@ -22569,17 +22647,13 @@ class Axis {
22569
22647
  }
22570
22648
  });
22571
22649
  }
22572
- // Custom plot lines and bands
22573
- if (!axis._addedPlotLB) { // Only first time
22574
- axis._addedPlotLB = true;
22575
- (options.plotLines || [])
22576
- .concat(options.plotBands || [])
22577
- .forEach(function (plotLineOptions) {
22578
- axis
22579
- .addPlotBandOrLine(plotLineOptions);
22580
- });
22581
- }
22582
22650
  } // End if hasData
22651
+ // Render or update rendering of plot lines and bands
22652
+ for (const coll of ['plotBands', 'plotLines']) {
22653
+ for (const plotItem of this[coll]) {
22654
+ plotItem.render();
22655
+ }
22656
+ }
22583
22657
  // Remove inactive ticks
22584
22658
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22585
22659
  const forDestruction = [], delay = animation.duration, destroyInactiveItems = function () {
@@ -22613,20 +22687,22 @@ class Axis {
22613
22687
  // Set the axis line path
22614
22688
  if (axisLine) {
22615
22689
  axisLine[axisLine.isPlaced ? 'animate' : 'attr']({
22616
- d: this.getLinePath(axisLine.strokeWidth())
22690
+ d: this.getLinePath(axisLine.strokeWidth()),
22691
+ opacity
22617
22692
  });
22618
22693
  axisLine.isPlaced = true;
22619
22694
  // Show or hide the line depending on options.showEmpty
22620
22695
  axisLine[showAxis ? 'show' : 'hide'](showAxis);
22621
22696
  }
22622
22697
  if (axisTitle && showAxis) {
22623
- axisTitle[axisTitle.isNew ? 'attr' : 'animate'](axis.getTitlePosition(axisTitle));
22698
+ axisTitle[axisTitle.isNew ? 'attr' : 'animate']({
22699
+ opacity,
22700
+ ...axis.getTitlePosition(axisTitle)
22701
+ });
22624
22702
  axisTitle.isNew = false;
22625
22703
  }
22626
22704
  // Stacked totals
22627
- if (stackLabelOptions?.enabled && axis.stacking) {
22628
- axis.stacking.renderStackTotals();
22629
- }
22705
+ axis.stacking?.renderStackTotals();
22630
22706
  // First time, save the existing state
22631
22707
  if (!this.old) {
22632
22708
  this.saveOld();
@@ -22642,13 +22718,11 @@ class Axis {
22642
22718
  * @function Highcharts.Axis#redraw
22643
22719
  */
22644
22720
  redraw() {
22645
- if (this.visible) {
22721
+ // If it was initially visible, but dynamically hidden, `this.axisGroup`
22722
+ // exists. Then render with opacity 0.
22723
+ if (this.visible || this.axisGroup) {
22646
22724
  // Render the axis
22647
22725
  this.render();
22648
- // Move plot lines and bands
22649
- this.plotLinesAndBands.forEach(function (plotLine) {
22650
- plotLine.render();
22651
- });
22652
22726
  }
22653
22727
  // Mark associated series as dirty and ready for redraw
22654
22728
  this.series.forEach(function (series) {
@@ -22662,6 +22736,7 @@ class Axis {
22662
22736
  */
22663
22737
  saveOld() {
22664
22738
  this.old = isNumber(this.min) ? {
22739
+ horiz: this.horiz,
22665
22740
  len: this.len,
22666
22741
  max: this.max,
22667
22742
  min: this.min,
@@ -22671,64 +22746,37 @@ class Axis {
22671
22746
  userMin: this.userMin
22672
22747
  } : void 0;
22673
22748
  }
22674
- /**
22675
- * Returns an array of axis properties, that should be untouched during
22676
- * reinitialization.
22677
- *
22678
- * @internal
22679
- * @function Highcharts.Axis#getKeepProps
22680
- */
22681
- getKeepProps() {
22682
- return (this.keepProps || Axis.keepProps);
22683
- }
22684
22749
  /**
22685
22750
  * Destroys an Axis instance. See {@link Axis#remove} for the API endpoint
22686
22751
  * to fully remove the axis.
22687
22752
  *
22688
22753
  * @internal
22689
22754
  * @function Highcharts.Axis#destroy
22690
- *
22691
- * @param {boolean} [keepEvents]
22692
- * Whether to preserve events, used internally in Axis.update.
22693
22755
  */
22694
- destroy(keepEvents) {
22695
- const axis = this, plotLinesAndBands = axis.plotLinesAndBands, eventOptions = this.eventOptions;
22696
- fireEvent(this, 'destroy', { keepEvents: keepEvents });
22756
+ destroy() {
22757
+ fireEvent(this, 'destroy');
22697
22758
  // Remove the events
22698
- if (!keepEvents) {
22699
- removeEvent(axis);
22700
- }
22759
+ removeEvent(this);
22701
22760
  // Destroy collections
22702
- [axis.ticks, axis.minorTicks, axis.alternateBands].forEach(function (coll) {
22703
- destroyObjectProperties(coll);
22704
- });
22705
- if (plotLinesAndBands) {
22706
- let i = plotLinesAndBands.length;
22707
- while (i--) { // #1975
22708
- plotLinesAndBands[i].destroy();
22709
- }
22710
- }
22711
- // Destroy elements
22761
+ [
22762
+ this.ticks,
22763
+ this.minorTicks,
22764
+ this.alternateBands,
22765
+ this.plotBands,
22766
+ this.plotLines,
22767
+ this.plotLinesAndBandsGroups
22768
+ ].forEach(destroyObjectProperties);
22769
+ // Destroy elements and clear reference
22712
22770
  [
22713
22771
  'axisLine', 'axisTitle', 'axisGroup',
22714
22772
  'gridGroup', 'labelGroup', 'cross', 'scrollbar'
22715
- ].forEach(function (prop) {
22716
- if (axis[prop]) {
22717
- axis[prop] = axis[prop].destroy();
22718
- }
22773
+ ].forEach((prop) => {
22774
+ this[prop] = this[prop]?.destroy();
22719
22775
  });
22720
- // Destroy each generated group for plotLines and plotBands
22721
- for (const plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in
22722
- axis.plotLinesAndBandsGroups[plotGroup] =
22723
- axis.plotLinesAndBandsGroups[plotGroup].destroy();
22724
- }
22725
22776
  // Delete all properties and fall back to the prototype.
22726
- objectEach(axis, function (_val, key) {
22727
- if (axis.getKeepProps().indexOf(key) === -1) {
22728
- delete axis[key];
22729
- }
22777
+ objectEach(this, (_val, key) => {
22778
+ delete this[key];
22730
22779
  });
22731
- this.eventOptions = eventOptions;
22732
22780
  }
22733
22781
  /**
22734
22782
  * Internal function to draw a crosshair.
@@ -22822,25 +22870,21 @@ class Axis {
22822
22870
  void 0 :
22823
22871
  chart.plotClipInner)
22824
22872
  .add();
22825
- // Presentational attributes
22826
- if (!chart.styledMode) {
22827
- cross.attr({
22828
- stroke: options.color ||
22829
- (categorized ?
22830
- Axis_color(
22831
- // eslint-disable-next-line max-len
22832
- 'var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22833
- 'var(--highcharts-neutral-color-20)'),
22834
- 'stroke-width': (options.width ?? 1)
22835
- }).css({
22836
- 'pointer-events': 'none'
22837
- });
22838
- if (options.dashStyle) {
22839
- cross.attr({
22840
- dashstyle: options.dashStyle
22841
- });
22842
- }
22843
- }
22873
+ }
22874
+ // Presentational attributes
22875
+ if (!chart.styledMode) {
22876
+ cross
22877
+ .attr({
22878
+ stroke: options.color || (categorized ?
22879
+ Axis_color('var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22880
+ 'var(--highcharts-neutral-color-20)'),
22881
+ 'stroke-width': options.width ?? 1,
22882
+ // Dash style must be after stroke-width
22883
+ dashstyle: options.dashStyle || 'Solid'
22884
+ })
22885
+ .css({
22886
+ 'pointer-events': 'none'
22887
+ });
22844
22888
  }
22845
22889
  cross
22846
22890
  .show()
@@ -22850,9 +22894,7 @@ class Axis {
22850
22894
  'stroke-width': this.transA
22851
22895
  });
22852
22896
  }
22853
- if (this.cross) {
22854
- this.cross.e = e;
22855
- }
22897
+ cross.e = e;
22856
22898
  },
22857
22899
  // Only use delay if the crosshair is currently hidden
22858
22900
  (!graphic || graphic.attr('visibility') === 'hidden') ?
@@ -22891,13 +22933,14 @@ class Axis {
22891
22933
  * operations on the chart, it is a good idea to set redraw to false and
22892
22934
  * call {@link Chart#redraw} after.
22893
22935
  */
22894
- update(options, redraw) {
22936
+ update(options = {}, redraw = true) {
22895
22937
  const chart = this.chart;
22938
+ fireEvent(this, 'update', { options });
22896
22939
  options = merge(this.userOptions, options);
22897
- this.destroy(true);
22940
+ this.isDirty = this.forceRedraw = true;
22898
22941
  this.init(chart, options);
22899
22942
  chart.isDirtyBox = true;
22900
- if (redraw ?? true) {
22943
+ if (redraw) {
22901
22944
  chart.redraw();
22902
22945
  }
22903
22946
  }
@@ -22966,26 +23009,6 @@ class Axis {
22966
23009
  this.update({ categories: categories }, redraw);
22967
23010
  }
22968
23011
  }
22969
- /* *
22970
- *
22971
- * Static Properties
22972
- *
22973
- * */
22974
- /**
22975
- * Properties to survive after destroy, needed for Axis.update (#4317,
22976
- * #5773, #5881).
22977
- * @internal
22978
- */
22979
- Axis.keepProps = [
22980
- 'coll',
22981
- 'extKey',
22982
- 'hcEvents',
22983
- 'len',
22984
- 'names',
22985
- 'series',
22986
- 'userMax',
22987
- 'userMin'
22988
- ];
22989
23012
  /* *
22990
23013
  *
22991
23014
  * Default Export
@@ -23256,6 +23279,8 @@ Axis.keepProps = [
23256
23279
  * */
23257
23280
 
23258
23281
 
23282
+ const { composed: DateTimeAxis_composed } = Core_Globals;
23283
+
23259
23284
 
23260
23285
  /* *
23261
23286
  *
@@ -23279,8 +23304,7 @@ var DateTimeAxis;
23279
23304
  * @internal
23280
23305
  */
23281
23306
  function compose(AxisClass) {
23282
- if (!AxisClass.keepProps.includes('dateTime')) {
23283
- AxisClass.keepProps.push('dateTime');
23307
+ if (pushUnique(DateTimeAxis_composed, 'Axis.DateTime')) {
23284
23308
  const axisProto = AxisClass.prototype;
23285
23309
  axisProto.getTimeTicks = getTimeTicks;
23286
23310
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
@@ -23442,6 +23466,8 @@ var DateTimeAxis;
23442
23466
  * */
23443
23467
 
23444
23468
 
23469
+ const { composed: LogarithmicAxis_composed } = Core_Globals;
23470
+
23445
23471
  /* *
23446
23472
  *
23447
23473
  * Class
@@ -23465,8 +23491,7 @@ var LogarithmicAxis;
23465
23491
  * @internal
23466
23492
  */
23467
23493
  function compose(AxisClass) {
23468
- if (!AxisClass.keepProps.includes('logarithmic')) {
23469
- AxisClass.keepProps.push('logarithmic');
23494
+ if (pushUnique(LogarithmicAxis_composed, 'Axis.Logarithmic')) {
23470
23495
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
23471
23496
  addEvent(AxisClass, 'afterInit', onAfterInit);
23472
23497
  }
@@ -23675,24 +23700,7 @@ var PlotLineOrBandAxis;
23675
23700
  * Functions
23676
23701
  *
23677
23702
  * */
23678
- /**
23679
- * Add a plot band after render time.
23680
- *
23681
- * @sample highcharts/members/axis-addplotband/
23682
- * Toggle the plot band from a button
23683
- *
23684
- * @function Highcharts.Axis#addPlotBand
23685
- *
23686
- * @param {Highcharts.AxisPlotBandsOptions} options
23687
- * A configuration object for the plot band, as defined in
23688
- * [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).
23689
- *
23690
- * @return {Highcharts.PlotLineOrBand|undefined}
23691
- * The added plot band, or `undefined` if the options are not valid.
23692
- */
23693
- function addPlotBand(options) {
23694
- return this.addPlotBandOrLine(options, 'plotBands');
23695
- }
23703
+ const getAdderFunction = (coll) =>
23696
23704
  /**
23697
23705
  * Add a plot band or plot line after render time. Called from
23698
23706
  * addPlotBand and addPlotLine internally.
@@ -23700,65 +23708,85 @@ var PlotLineOrBandAxis;
23700
23708
  * @internal
23701
23709
  * @function Highcharts.Axis#addPlotBandOrLine
23702
23710
  * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options
23703
- * The plotBand or plotLine configuration object.
23711
+ * The `plotBand` or `plotLine` configuration object.
23704
23712
  */
23705
- function addPlotBandOrLine(options, coll) {
23706
- const userOptions = this.userOptions;
23707
- let obj = new PlotLineOrBandClass(this, options);
23713
+ function addPlotLineOrBand(options) {
23714
+ var _a;
23715
+ const plotItem = new PlotLineOrBandClass(this, options, coll);
23708
23716
  if (this.visible) {
23709
- obj = obj.render();
23710
- }
23711
- if (obj) { // #2189
23712
- if (!this._addedPlotLB) {
23713
- this._addedPlotLB = true;
23714
- (userOptions.plotLines || [])
23715
- .concat(userOptions.plotBands || [])
23716
- .forEach((plotLineOptions) => {
23717
- this.addPlotBandOrLine(plotLineOptions);
23718
- });
23719
- }
23720
- // Add it to the user options for exporting and Axis.update
23721
- if (coll) {
23722
- // Workaround Microsoft/TypeScript issue #32693
23723
- const updatedOptions = (userOptions[coll] || []);
23724
- updatedOptions.push(options);
23725
- userOptions[coll] = updatedOptions;
23726
- }
23727
- this.plotLinesAndBands.push(obj);
23717
+ plotItem.render();
23728
23718
  }
23729
- return obj;
23730
- }
23731
- /**
23732
- * Add a plot line after render time.
23733
- *
23734
- * @sample highcharts/members/axis-addplotline/
23735
- * Toggle the plot line from a button
23736
- *
23737
- * @function Highcharts.Axis#addPlotLine
23738
- *
23739
- * @param {Highcharts.AxisPlotLinesOptions} options
23740
- * A configuration object for the plot line, as defined in
23741
- * [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).
23742
- *
23743
- * @return {Highcharts.PlotLineOrBand|undefined}
23744
- * The added plot line, or `undefined` if the options are not valid.
23745
- */
23746
- function addPlotLine(options) {
23747
- return this.addPlotBandOrLine(options, 'plotLines');
23748
- }
23719
+ (_a = this.options)[coll] || (_a[coll] = this.userOptions[coll] = []);
23720
+ this.options[coll].push(options);
23721
+ this[coll].push(plotItem);
23722
+ return plotItem;
23723
+ };
23749
23724
  /** @internal */
23750
23725
  function compose(PlotLineOrBandType, AxisClass) {
23751
23726
  const axisProto = AxisClass.prototype;
23752
23727
  if (!axisProto.addPlotBand) {
23753
23728
  PlotLineOrBandClass = PlotLineOrBandType;
23754
23729
  extend(axisProto, {
23755
- addPlotBand,
23756
- addPlotLine,
23757
- addPlotBandOrLine,
23730
+ addPlotBand: getAdderFunction('plotBands'),
23731
+ addPlotLine: getAdderFunction('plotLines'),
23758
23732
  getPlotBandPath,
23759
- removePlotBand,
23760
- removePlotLine,
23761
- removePlotBandOrLine
23733
+ removePlotBand: removePlotBandOrLine,
23734
+ removePlotLine: removePlotBandOrLine
23735
+ });
23736
+ addEvent(AxisClass, 'afterInit', function () {
23737
+ // First time only, not on Axis.update()
23738
+ if (!this.plotBands) {
23739
+ // Placeholder for plotlines and plotbands groups
23740
+ this.plotLinesAndBandsGroups = {};
23741
+ // Plot lines and bands from options
23742
+ for (const coll of ['plotBands', 'plotLines']) {
23743
+ this[coll] = [];
23744
+ for (const pOptions of splat(this.options[coll] || [])) {
23745
+ this[coll].push(new PlotLineOrBandClass(this, pOptions, coll));
23746
+ }
23747
+ }
23748
+ }
23749
+ });
23750
+ // Update plot bands and lines one to one
23751
+ addEvent(AxisClass, 'update', function ({ options }) {
23752
+ for (const coll of ['plotBands', 'plotLines']) {
23753
+ // Check if we have new options to process, otherwise do
23754
+ // nothing with existing plot lines and bands
23755
+ if (options[coll]) {
23756
+ const plotItems = this[coll];
23757
+ splat(options[coll]).forEach((pOptions = {}, i) => {
23758
+ // Match by id
23759
+ let pItem;
23760
+ if (pOptions?.id) {
23761
+ pItem = plotItems.find((p) => p.id === pOptions.id);
23762
+ }
23763
+ // Match by index
23764
+ pItem || (pItem = plotItems[i]);
23765
+ // Update
23766
+ if (pItem) {
23767
+ pItem.update(pOptions, false);
23768
+ options[coll][i] = pItem.options;
23769
+ // Add
23770
+ }
23771
+ else {
23772
+ pItem = this[coll === 'plotBands' ?
23773
+ 'addPlotBand' :
23774
+ 'addPlotLine'](pOptions);
23775
+ }
23776
+ pItem.isActive = true;
23777
+ });
23778
+ // Remove inactive items from end to start
23779
+ let i = plotItems.length;
23780
+ while (i--) {
23781
+ if (!plotItems[i].isActive) {
23782
+ plotItems[i].remove();
23783
+ }
23784
+ else {
23785
+ delete plotItems[i].isActive;
23786
+ }
23787
+ }
23788
+ }
23789
+ }
23762
23790
  });
23763
23791
  }
23764
23792
  return AxisClass;
@@ -23829,23 +23857,6 @@ var PlotLineOrBandAxis;
23829
23857
  }
23830
23858
  return result;
23831
23859
  }
23832
- /**
23833
- * Remove a plot band by its id.
23834
- *
23835
- * @sample highcharts/members/axis-removeplotband/
23836
- * Remove plot band by id
23837
- * @sample highcharts/members/axis-addplotband/
23838
- * Toggle the plot band from a button
23839
- *
23840
- * @function Highcharts.Axis#removePlotBand
23841
- *
23842
- * @param {string} id
23843
- * The plot band's `id` as given in the original configuration
23844
- * object or in the `addPlotBand` option.
23845
- */
23846
- function removePlotBand(id) {
23847
- this.removePlotBandOrLine(id);
23848
- }
23849
23860
  /**
23850
23861
  * Remove a plot band or plot line from the chart by id. Called
23851
23862
  * internally from `removePlotBand` and `removePlotLine`.
@@ -23853,45 +23864,7 @@ var PlotLineOrBandAxis;
23853
23864
  * @function Highcharts.Axis#removePlotBandOrLine
23854
23865
  */
23855
23866
  function removePlotBandOrLine(id) {
23856
- const plotLinesAndBands = this.plotLinesAndBands, options = this.options, userOptions = this.userOptions;
23857
- if (plotLinesAndBands) { // #15639
23858
- let i = plotLinesAndBands.length;
23859
- while (i--) {
23860
- if (plotLinesAndBands[i].id === id) {
23861
- plotLinesAndBands[i].destroy();
23862
- }
23863
- }
23864
- ([
23865
- options.plotLines || [],
23866
- userOptions.plotLines || [],
23867
- options.plotBands || [],
23868
- userOptions.plotBands || []
23869
- ]).forEach(function (arr) {
23870
- i = arr.length;
23871
- while (i--) {
23872
- if (arr[i]?.id === id) {
23873
- erase(arr, arr[i]);
23874
- }
23875
- }
23876
- });
23877
- }
23878
- }
23879
- /**
23880
- * Remove a plot line by its id.
23881
- *
23882
- * @sample highcharts/xaxis/plotlines-id/
23883
- * Remove plot line by id
23884
- * @sample highcharts/members/axis-addplotline/
23885
- * Toggle the plot line from a button
23886
- *
23887
- * @function Highcharts.Axis#removePlotLine
23888
- *
23889
- * @param {string} id
23890
- * The plot line's `id` as given in the original configuration
23891
- * object or in the `addPlotLine` option.
23892
- */
23893
- function removePlotLine(id) {
23894
- this.removePlotBandOrLine(id);
23867
+ [...this.plotBands || [], ...this.plotLines || []].find((plotItem) => plotItem.id === id)?.remove();
23895
23868
  }
23896
23869
  })(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));
23897
23870
  /* *
@@ -23955,9 +23928,11 @@ class PlotLineOrBand {
23955
23928
  this.labelCollectors.push(() => {
23956
23929
  const labels = [];
23957
23930
  for (const axis of this.axes) {
23958
- for (const { label, options } of axis.plotLinesAndBands) {
23959
- if (label && !options?.label?.allowOverlap) {
23960
- labels.push(label);
23931
+ for (const coll of ['plotBands', 'plotLines']) {
23932
+ for (const { label, options } of axis[coll]) {
23933
+ if (label && !options?.label?.allowOverlap) {
23934
+ labels.push(label);
23935
+ }
23961
23936
  }
23962
23937
  }
23963
23938
  }
@@ -23971,7 +23946,7 @@ class PlotLineOrBand {
23971
23946
  * Constructor
23972
23947
  *
23973
23948
  * */
23974
- constructor(axis, options) {
23949
+ constructor(axis, options, coll) {
23975
23950
  /**
23976
23951
  * Related axis.
23977
23952
  *
@@ -23987,6 +23962,7 @@ class PlotLineOrBand {
23987
23962
  */
23988
23963
  this.options = options;
23989
23964
  this.id = options.id;
23965
+ this.coll = coll;
23990
23966
  }
23991
23967
  /* *
23992
23968
  *
@@ -24002,43 +23978,28 @@ class PlotLineOrBand {
24002
23978
  */
24003
23979
  render() {
24004
23980
  fireEvent(this, 'render');
24005
- const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, time } = axis.chart, groupAttribs = {},
23981
+ const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, styledMode, time } = axis.chart,
24006
23982
  // These properties only exist on either band or line
24007
23983
  to = time.parse(options.to), from = time.parse(options.from), value = time.parse(options.value), borderWidth = options.borderWidth;
24008
- let optionsLabel = options.label, { label, svgElem } = this, path = [], group;
24009
- const isBand = defined(from) && defined(to), isLine = defined(value), isNew = !svgElem, attribs = {
24010
- 'class': 'highcharts-plot-' + (isBand ? 'band ' : 'line ') +
24011
- (options.className || '')
24012
- };
24013
- let groupName = isBand ? 'bands' : 'lines';
24014
- // Set the presentational attributes
24015
- if (!chart.styledMode) {
24016
- if (isLine) {
24017
- attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24018
- attribs['stroke-width'] =
24019
- options.width ?? 1;
24020
- if (options.dashStyle) {
24021
- attribs.dashstyle = options.dashStyle;
24022
- }
24023
- }
24024
- else if (isBand) { // Plot band
24025
- attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24026
- if (borderWidth) {
24027
- attribs.stroke = options.borderColor;
24028
- attribs['stroke-width'] = borderWidth;
24029
- }
24030
- }
23984
+ let optionsLabel = options.label, { label, svgElem } = this, group;
23985
+ const isBand = this.coll === 'plotBands', shortKey = isBand ? 'band' : 'line', groupName = `${shortKey}s-${zIndex}`, isNew = !svgElem, attribs = {
23986
+ 'class': `highcharts-plot-${shortKey} ${options.className || ''}`
23987
+ }, strokeWidth = isBand ?
23988
+ (borderWidth || 0) :
23989
+ (options.width ?? 1);
23990
+ // Set the stroke width before the path is calculated
23991
+ if (!styledMode) {
23992
+ attribs['stroke-width'] = strokeWidth;
24031
23993
  }
24032
23994
  // Grouping and zIndex
24033
- groupAttribs.zIndex = zIndex;
24034
- groupName += '-' + zIndex;
24035
23995
  group = axis.plotLinesAndBandsGroups[groupName];
24036
23996
  if (!group) {
24037
23997
  axis.plotLinesAndBandsGroups[groupName] = group =
24038
23998
  renderer.g('plot-' + groupName)
24039
23999
  .clip(chart.plotClipOuter)
24040
- .attr(groupAttribs).add();
24000
+ .attr({ zIndex }).add();
24041
24001
  }
24002
+ group[isNew ? 'attr' : 'animate']({ opacity: +axis.visible });
24042
24003
  // Create the path
24043
24004
  if (!svgElem) {
24044
24005
  /**
@@ -24049,40 +24010,58 @@ class PlotLineOrBand {
24049
24010
  */
24050
24011
  this.svgElem = svgElem = renderer
24051
24012
  .path()
24052
- .attr(attribs)
24053
- .add(group);
24013
+ .attr(attribs);
24014
+ }
24015
+ // Add it to the correct index while allowing dynamic z-index update
24016
+ if (svgElem.parentGroup !== group) {
24017
+ svgElem.add(group);
24054
24018
  }
24055
24019
  // Set the path or return
24056
- if (defined(value)) { // Plot line
24020
+ let path;
24021
+ if (!isBand && defined(value)) { // Plot line
24057
24022
  path = axis.getPlotLinePath({
24058
24023
  value: logarithmic?.log2lin(value) ?? value,
24059
24024
  lineWidth: svgElem.strokeWidth(),
24060
24025
  acrossPanes: options.acrossPanes
24061
24026
  });
24062
24027
  }
24063
- else if (defined(from) && defined(to)) { // Plot band
24028
+ else if (isBand && defined(from) && defined(to)) { // Plot band
24064
24029
  path = axis.getPlotBandPath(logarithmic?.log2lin(from) ?? from, logarithmic?.log2lin(to) ?? to, options);
24065
24030
  }
24066
- else {
24067
- return;
24031
+ if (path) {
24032
+ attribs.d = path;
24033
+ }
24034
+ // Apply the styling
24035
+ if (!styledMode) {
24036
+ if (isBand) { // Plot band
24037
+ attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24038
+ if (borderWidth) {
24039
+ attribs.stroke = options.borderColor;
24040
+ }
24041
+ }
24042
+ else {
24043
+ attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24044
+ if (options.dashStyle) {
24045
+ attribs.dashstyle = options.dashStyle;
24046
+ }
24047
+ }
24068
24048
  }
24069
24049
  // Common for lines and bands. Add events only if they were not added
24070
24050
  // before.
24071
- if (!this.eventsAdded && events) {
24051
+ if (isNew && events) {
24072
24052
  objectEach(events, (_event, eventType) => {
24073
24053
  svgElem?.on(eventType, (e) => {
24074
24054
  events[eventType].apply(this, [e, this]);
24075
24055
  });
24076
24056
  });
24077
- this.eventsAdded = true;
24078
24057
  }
24079
24058
  if ((isNew || !svgElem.d) && path?.length) {
24080
- svgElem.attr({ d: path });
24059
+ svgElem.attr(attribs);
24081
24060
  }
24082
24061
  else if (svgElem) {
24083
24062
  if (path) {
24084
24063
  svgElem.show();
24085
- svgElem.animate({ d: path });
24064
+ svgElem.animate(attribs);
24086
24065
  }
24087
24066
  else if (svgElem.d) {
24088
24067
  svgElem.hide();
@@ -24122,7 +24101,7 @@ class PlotLineOrBand {
24122
24101
  * @function Highcharts.PlotLineOrBand#renderLabel
24123
24102
  */
24124
24103
  renderLabel(optionsLabel, path, isBand, zIndex) {
24125
- const plotLine = this, axis = plotLine.axis, renderer = axis.chart.renderer, inside = optionsLabel.inside;
24104
+ const plotLine = this, axis = plotLine.axis, chart = axis.chart, renderer = chart.renderer, inside = optionsLabel.inside;
24126
24105
  let label = plotLine.label;
24127
24106
  // Add the SVG element
24128
24107
  if (!label) {
@@ -24133,25 +24112,31 @@ class PlotLineOrBand {
24133
24112
  * @type {Highcharts.SVGElement}
24134
24113
  */
24135
24114
  plotLine.label = label = renderer
24136
- .text(this.getLabelText(optionsLabel), 0, 0, optionsLabel.useHTML)
24137
- .attr({
24138
- align: optionsLabel.textAlign || optionsLabel.align,
24139
- rotation: optionsLabel.rotation,
24140
- 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24141
- '-label ' + (optionsLabel.className || ''),
24142
- zIndex
24143
- });
24144
- if (!axis.chart.styledMode) {
24145
- label.css(merge({
24146
- // To allow theming, and in lack of a general place to set
24147
- // default options for plot lines and bands, default to the
24148
- // title color. If we expose the palette, we should use that
24149
- // instead.
24150
- color: axis.chart.options.title?.style?.color,
24151
- fontSize: '0.8em',
24152
- textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24153
- }, optionsLabel.style));
24154
- }
24115
+ .text('', 0, 0, optionsLabel.useHTML)
24116
+ .attr({ zIndex });
24117
+ }
24118
+ label
24119
+ .attr({
24120
+ text: this.getLabelText(optionsLabel),
24121
+ align: optionsLabel.textAlign || optionsLabel.align,
24122
+ 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24123
+ '-label ' + (optionsLabel.className || '')
24124
+ })[label.placed ? 'animate' : 'attr']({
24125
+ opacity: 1,
24126
+ rotation: optionsLabel.rotation
24127
+ });
24128
+ if (!chart.styledMode) {
24129
+ label.css(merge({
24130
+ // To allow theming, and in lack of a general place to set
24131
+ // default options for plot lines and bands, default to the
24132
+ // title color. If we expose the palette, we should use that
24133
+ // instead.
24134
+ color: chart.options.title?.style?.color,
24135
+ fontSize: '0.8em',
24136
+ textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24137
+ }, optionsLabel.style));
24138
+ }
24139
+ if (!label.added) {
24155
24140
  label.add();
24156
24141
  }
24157
24142
  // Get the bounding box and align the label
@@ -24175,12 +24160,31 @@ class PlotLineOrBand {
24175
24160
  axis.height - (label.alignAttr.y -
24176
24161
  axis.top) : (optionsLabel.clip ?
24177
24162
  (axis.width + axis.left) :
24178
- axis.chart.chartWidth) - label.alignAttr.x) :
24163
+ chart.chartWidth) - label.alignAttr.x) :
24179
24164
  bBoxWidth)) + 'px'
24180
24165
  });
24181
24166
  }
24167
+ else if (label.textWidth) {
24168
+ label.css({ width: 'auto' });
24169
+ }
24182
24170
  label.show(true);
24183
24171
  }
24172
+ /**
24173
+ * Update the plot line or band with new options.
24174
+ *
24175
+ * @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} options
24176
+ * The new options to apply
24177
+ * @param {boolean} [redraw=true]
24178
+ * Whether to redraw the plot guide immediately
24179
+ *
24180
+ * @function Highcharts.PlotLineOrBand#update
24181
+ */
24182
+ update(options, redraw = true) {
24183
+ merge(true, this.options, options);
24184
+ if (redraw) {
24185
+ this.render();
24186
+ }
24187
+ }
24184
24188
  /**
24185
24189
  * Get label's text content.
24186
24190
  * @internal
@@ -24192,15 +24196,22 @@ class PlotLineOrBand {
24192
24196
  optionsLabel.text;
24193
24197
  }
24194
24198
  /**
24195
- * Remove the plot line or band.
24196
- *
24197
- * @function Highcharts.PlotLineOrBand#destroy
24199
+ * Destroy the item's elements
24198
24200
  */
24199
24201
  destroy() {
24202
+ destroyObjectProperties(this, this.axis);
24203
+ }
24204
+ /**
24205
+ * Remove the plot line or band and destroy its elements.
24206
+ *
24207
+ * @function Highcharts.PlotLineOrBand#remove
24208
+ */
24209
+ remove() {
24200
24210
  // Remove it from the lookup
24201
- erase(this.axis.plotLinesAndBands, this);
24202
- delete this.axis;
24203
- destroyObjectProperties(this);
24211
+ erase(this.axis[this.coll], this);
24212
+ // Remove from options
24213
+ erase(this.axis.options[this.coll] || [], this.options);
24214
+ this.destroy();
24204
24215
  }
24205
24216
  }
24206
24217
  /* *
@@ -24247,10 +24258,24 @@ class PlotLineOrBand {
24247
24258
  * In styled mode, the plot bands are styled by the `.highcharts-plot-band`
24248
24259
  * class in addition to the `className` option.
24249
24260
  *
24261
+ * When doing `Chart.update()` or `Axis.update()`, the plot bands are updated
24262
+ * by index or id. The following merging rules apply:
24263
+ * - If `plotBands` are not defined in the new options, all existing plot bands
24264
+ * are kept.
24265
+ * - If `plotBands` are defined without ids, the existing plot bands are updated
24266
+ * by index. If the new array has fewer plot bands, the remaining existing
24267
+ * plot bands are removed. If the new array has more plot bands, the extra
24268
+ * ones are added. An empty array removes all existing plot bands.
24269
+ * - If `plotBands` are defined with ids, the existing plot bands are matched
24270
+ * by id, and remaining unmatched existing plot bands are removed.
24271
+ *
24250
24272
  * @productdesc {highcharts}
24251
24273
  * In a gauge, a plot band on the Y axis (value axis) will stretch along the
24252
24274
  * perimeter of the gauge.
24253
24275
  *
24276
+ * @sample {highcharts} highcharts/xaxis/plotbands-color/
24277
+ * Basic plot band
24278
+ *
24254
24279
  * @type {Array<*>}
24255
24280
  * @product highcharts highstock gantt
24256
24281
  * @apioption xAxis.plotBands
@@ -24542,12 +24567,23 @@ class PlotLineOrBand {
24542
24567
  * In styled mode, the plot lines are styled by the
24543
24568
  * `.highcharts-plot-line` class in addition to the `className` option.
24544
24569
  *
24570
+ * When doing `Chart.update()` or `Axis.update()`, the plot lines are updated
24571
+ * by index or id. The following merging rules apply:
24572
+ * - If `plotLines` are not defined in the new options, all existing plot lines
24573
+ * are kept.
24574
+ * - If `plotLines` are defined without ids, the existing plot lines are updated
24575
+ * by index. If the new array has fewer plot lines, the remaining existing
24576
+ * plot lines are removed. If the new array has more plot lines, the extra
24577
+ * ones are added. An empty array removes all existing plot lines.
24578
+ * - If `plotLines` are defined with ids, the existing plot lines are matched
24579
+ * by id, and remaining unmatched existing plot lines are removed.
24580
+ *
24545
24581
  * @type {Array<*>}
24546
24582
  * @product highcharts highstock gantt
24547
- * @sample {highcharts} highcharts/xaxis/plotlines-color/
24548
- * Basic plot line
24549
- * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24550
- * Solid gauge plot line
24583
+ * @sample {highcharts} highcharts/xaxis/plotlines-color/
24584
+ * Basic plot line
24585
+ * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24586
+ * Solid gauge plot line
24551
24587
  * @apioption xAxis.plotLines
24552
24588
  */
24553
24589
  /**
@@ -25056,14 +25092,11 @@ class Tooltip {
25056
25092
  */
25057
25093
  destroy() {
25058
25094
  // Destroy and clear local variables
25059
- if (this.label) {
25060
- this.label = this.label.destroy();
25061
- }
25095
+ this.tracker = this.tracker?.destroy();
25096
+ this.label = this.label?.destroy();
25062
25097
  if (this.split) {
25063
25098
  this.cleanSplit(true);
25064
- if (this.tt) {
25065
- this.tt = this.tt.destroy();
25066
- }
25099
+ this.tt = this.tt?.destroy();
25067
25100
  }
25068
25101
  if (this.renderer) {
25069
25102
  this.renderer = this.renderer.destroy();
@@ -25593,6 +25626,8 @@ class Tooltip {
25593
25626
  !this.isHidden &&
25594
25627
  !options.fixed &&
25595
25628
  options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
25629
+ this.anchorX = anchorX;
25630
+ this.anchorY = anchorY;
25596
25631
  if (!skipAnchor) {
25597
25632
  attr.anchorX = anchorX;
25598
25633
  attr.anchorY = anchorY;
@@ -26039,45 +26074,37 @@ class Tooltip {
26039
26074
  */
26040
26075
  drawTracker() {
26041
26076
  const tooltip = this;
26042
- if (!this.shouldStickOnContact()) {
26043
- if (tooltip.tracker) {
26044
- tooltip.tracker = tooltip.tracker.destroy();
26045
- }
26077
+ if (!tooltip.shouldStickOnContact()) {
26078
+ tooltip.tracker = tooltip.tracker?.destroy();
26046
26079
  return;
26047
26080
  }
26048
- const chart = tooltip.chart;
26049
- const label = tooltip.label;
26050
- const points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint;
26051
- if (!label || !points) {
26081
+ const { chart, label } = tooltip, points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint,
26082
+ // Split tooltips render into a plain group, with no box to trace
26083
+ box = label?.box;
26084
+ if (!box || !points) {
26052
26085
  return;
26053
26086
  }
26054
- const box = {
26055
- x: 0,
26056
- y: 0,
26057
- width: 0,
26058
- height: 0
26059
- };
26060
- // Combine anchor and tooltip
26061
- const anchorPos = this.getAnchor(points);
26062
- const labelBBox = label.getBBox();
26063
- anchorPos[0] += chart.plotLeft - (label.translateX || 0);
26064
- anchorPos[1] += chart.plotTop - (label.translateY || 0);
26065
- // When the mouse pointer is between the anchor point and the label,
26066
- // the label should stick.
26067
- box.x = Math.min(0, anchorPos[0]);
26068
- box.y = Math.min(0, anchorPos[1]);
26069
- box.width = (anchorPos[0] < 0 ?
26070
- Math.max(Math.abs(anchorPos[0]), labelBBox.width - anchorPos[0]) :
26071
- Math.max(Math.abs(anchorPos[0]), labelBBox.width));
26072
- box.height = (anchorPos[1] < 0 ?
26073
- Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :
26074
- Math.max(Math.abs(anchorPos[1]), labelBBox.height));
26075
- if (tooltip.tracker) {
26076
- tooltip.tracker.attr(box);
26077
- }
26078
- else {
26087
+ const { height, r, width, x, y } = box;
26088
+ let { anchorX, anchorY } = box;
26089
+ // Shared tooltips clear the label anchor (#22295), so fall back to the
26090
+ // anchor the position was calculated from
26091
+ if (!isNumber(anchorX)) {
26092
+ anchorX = (tooltip.anchorX || 0) - (label.translateX || 0);
26093
+ anchorY = (tooltip.anchorY || 0) - (label.translateY || 0);
26094
+ }
26095
+ // Match the tooltip shape, but stretch the connector all the way to the
26096
+ // point, so that the pointer can travel between the two without losing
26097
+ // contact. Only the side facing the anchor overshoots the box, so the
26098
+ // largest of the four distances is the one to cover. (#24255)
26099
+ const d = label.renderer.symbols.callout(x, y, width, height, {
26100
+ anchorX,
26101
+ anchorY,
26102
+ arrowLength: Math.max(anchorX - width, -anchorX, anchorY - height, -anchorY, 0),
26103
+ r
26104
+ });
26105
+ if (!tooltip.tracker) {
26079
26106
  tooltip.tracker = label.renderer
26080
- .rect(box)
26107
+ .path()
26081
26108
  .addClass('highcharts-tracker')
26082
26109
  .add(label);
26083
26110
  // For a rapid move going outside of the elements keeping the
@@ -26085,10 +26112,14 @@ class Tooltip {
26085
26112
  addEvent(tooltip.tracker.element, 'mouseenter', () => clearTimeouts(tooltip));
26086
26113
  if (!chart.styledMode) {
26087
26114
  tooltip.tracker.attr({
26088
- fill: 'rgba(0,0,0,0)'
26115
+ fill: 'rgba(0,0,0,0)',
26116
+ stroke: 'rgba(0,0,0,0)',
26117
+ 'stroke-linejoin': 'round',
26118
+ 'stroke-width': 10
26089
26119
  });
26090
26120
  }
26091
26121
  }
26122
+ tooltip.tracker.attr({ d });
26092
26123
  }
26093
26124
  /** @internal */
26094
26125
  styledModeFormat(formatString) {
@@ -27035,7 +27066,8 @@ class Point {
27035
27066
  /**
27036
27067
  * Set a value in an object, on the property defined by key. The key
27037
27068
  * supports nested properties using dot notation. The function modifies the
27038
- * input object and does not make a copy.
27069
+ * input object and does not make a copy. Paths containing `__proto__` or
27070
+ * `constructor` are ignored.
27039
27071
  *
27040
27072
  * @function Highcharts.Point#setNestedProperty<T>
27041
27073
  *
@@ -27053,11 +27085,18 @@ class Point {
27053
27085
  */
27054
27086
  setNestedProperty(object, value, key) {
27055
27087
  const nestedKeys = key.split('.');
27088
+ // Reject nested keys that would allow prototype pollution
27089
+ if (nestedKeys.some((nestedKey) => (nestedKey === '__proto__' || nestedKey === 'constructor'))) {
27090
+ return object;
27091
+ }
27056
27092
  nestedKeys.reduce(function (result, key, i, arr) {
27057
27093
  const isLastKey = arr.length - 1 === i;
27058
27094
  result[key] = (isLastKey ?
27059
27095
  value :
27060
- isObject(result[key], true) ?
27096
+ // Inherited objects are shared with everything else on
27097
+ // that prototype, so start a fresh one instead
27098
+ isObject(result[key], true) &&
27099
+ Object.hasOwnProperty.call(result, key) ?
27061
27100
  result[key] :
27062
27101
  {});
27063
27102
  return result[key];
@@ -27139,15 +27178,10 @@ class Point {
27139
27178
  */
27140
27179
  function update() {
27141
27180
  point.applyOptions(options);
27142
- // Update visuals, #4146
27143
- // Handle mock graphic elements for a11y, #12718
27144
- const hasMockGraphic = graphic && point.hasMockGraphic, index = point.index;
27145
- const shouldDestroyGraphic = point.y === null ?
27146
- !hasMockGraphic :
27147
- hasMockGraphic;
27148
- if (graphic && shouldDestroyGraphic) {
27181
+ // Update visuals, #4146. The a11y mock graphic is exempt, it is
27182
+ // maintained by the accessibility module, #12718.
27183
+ if (graphic && point.y === null && !point.hasMockGraphic) {
27149
27184
  point.graphic = graphic.destroy();
27150
- delete point.hasMockGraphic;
27151
27185
  }
27152
27186
  if (isObject(options, true)) {
27153
27187
  // Destroy so we can get new elements
@@ -27162,7 +27196,7 @@ class Point {
27162
27196
  point.dataLabel = point.dataLabel.destroy(); // #2468
27163
27197
  }
27164
27198
  }
27165
- const pointOptions = point.optionsToObject(options);
27199
+ const index = point.index, pointOptions = point.optionsToObject(options);
27166
27200
  if (!series.hasProcessedDataTable) {
27167
27201
  // Record changes in the data table (#24451)
27168
27202
  series.dataTable.setRow(pointOptions, index);
@@ -29166,19 +29200,18 @@ class Pointer {
29166
29200
  if (hasMoved ?? true) {
29167
29201
  this.pinch(e);
29168
29202
  }
29203
+ // If inside, capture touch-drag and display tooltip. If not
29204
+ // inside, allow dragging the finger to scroll the page
29205
+ if (this.hasPointerCapture && // #25095
29206
+ e.type === 'touchmove' &&
29207
+ !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29208
+ e.preventDefault();
29209
+ }
29169
29210
  }
29170
29211
  else if (start) {
29171
29212
  // Hide the tooltip on touching outside the plot area (#1203)
29172
29213
  this.reset();
29173
29214
  }
29174
- // If inside, capture touch-drag and display tooltip. If not inside,
29175
- // allow dragging the finger to scroll the page
29176
- if ((chart.tooltip?.options.followTouchMove ?? true) &&
29177
- isInside &&
29178
- e.type === 'touchmove' &&
29179
- !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29180
- e.preventDefault();
29181
- }
29182
29215
  }
29183
29216
  else if (e.touches.length === 2) {
29184
29217
  this.pinch(e);
@@ -29578,13 +29611,19 @@ const { setLength: DataTableCore_setLength, splice: DataTableCore_splice } = Dat
29578
29611
  class DataTableCore {
29579
29612
  constructor(options = {}) {
29580
29613
  this.isDataTable = true;
29581
- this.autoId = !options.id;
29614
+ // Reject IDs that would pollute the prototype of ID-keyed maps.
29615
+ const id = this.isPollutingKey(options.id) ? void 0 : options.id;
29616
+ this.autoId = !id;
29582
29617
  this.columns = {};
29583
- this.id = (options.id || uniqueKey());
29618
+ this.id = (id || uniqueKey());
29584
29619
  this.rowCount = 0;
29585
29620
  this.versionTag = uniqueKey();
29586
29621
  let rowCount = 0;
29587
29622
  objectEach(options.columns || {}, (column, columnId) => {
29623
+ if (columnId === '__proto__' ||
29624
+ columnId === 'constructor') {
29625
+ return;
29626
+ }
29588
29627
  this.columns[columnId] = column.slice();
29589
29628
  rowCount = Math.max(rowCount, column.length);
29590
29629
  });
@@ -29595,6 +29634,17 @@ class DataTableCore {
29595
29634
  * Functions
29596
29635
  *
29597
29636
  * */
29637
+ /**
29638
+ * Checks whether a key would pollute the prototype if used to index a
29639
+ * plain object (e.g. as a column ID or table ID).
29640
+ *
29641
+ * @private
29642
+ * @param {string|undefined} key The key to check.
29643
+ * @return {boolean} True if the key is unsafe to use.
29644
+ */
29645
+ isPollutingKey(key) {
29646
+ return key === '__proto__' || key === 'constructor';
29647
+ }
29598
29648
  /**
29599
29649
  * Applies a row count to the table by setting the `rowCount` property and
29600
29650
  * adjusting the length of all columns.
@@ -29753,6 +29803,10 @@ class DataTableCore {
29753
29803
  setColumns(columns, rowIndex, eventDetail) {
29754
29804
  let rowCount = this.rowCount;
29755
29805
  objectEach(columns, (column, columnId) => {
29806
+ if (columnId === '__proto__' ||
29807
+ columnId === 'constructor') {
29808
+ return;
29809
+ }
29756
29810
  this.columns[columnId] = column.slice();
29757
29811
  rowCount = column.length;
29758
29812
  });
@@ -29791,11 +29845,14 @@ class DataTableCore {
29791
29845
  * @emits #afterSetRows
29792
29846
  */
29793
29847
  setRow(row, rowIndex = this.rowCount, insert, eventDetail) {
29794
- var _a;
29795
29848
  const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1, rowKeys = Object.keys(row);
29796
29849
  if (eventDetail?.addColumns !== false) {
29797
29850
  for (let i = 0, iEnd = rowKeys.length; i < iEnd; i++) {
29798
- columns[_a = rowKeys[i]] || (columns[_a] = new Array(this.rowCount));
29851
+ const rowKey = rowKeys[i];
29852
+ if (!this.isPollutingKey(rowKey) &&
29853
+ !Object.hasOwnProperty.call(columns, rowKey)) {
29854
+ columns[rowKey] = new Array(this.rowCount);
29855
+ }
29799
29856
  }
29800
29857
  }
29801
29858
  objectEach(columns, (column, columnId) => {
@@ -33775,7 +33832,19 @@ class Series {
33775
33832
  .optionsToObject
33776
33833
  .call({ series: this }, data[i]);
33777
33834
  for (const key of Object.keys(ptOptions)) {
33778
- columns[key] || (columns[key] = new Array(dataLength));
33835
+ // Assigning these would write through to
33836
+ // `Object.prototype` or the `Object` constructor instead
33837
+ // of creating a column, and thereby affect unrelated
33838
+ // objects on the page
33839
+ if (key === '__proto__' || key === 'constructor') {
33840
+ continue;
33841
+ }
33842
+ // Inherited keys like `toString` are truthy without being
33843
+ // columns of ours, so test for an own property rather
33844
+ // than for a value (#25321)
33845
+ if (!Object.hasOwnProperty.call(columns, key)) {
33846
+ columns[key] = new Array(dataLength);
33847
+ }
33779
33848
  columns[key][i] = ptOptions[key];
33780
33849
  }
33781
33850
  }
@@ -34428,7 +34497,7 @@ class Series {
34428
34497
  // Apply plotBorderRadius clipping
34429
34498
  plotClipGroup?.clip(
34430
34499
  // Navigator y-axis is not clippable
34431
- clip && this.yAxis.clippable ?
34500
+ clip && this.yAxis?.clippable ?
34432
34501
  chart.plotClipInner :
34433
34502
  void 0);
34434
34503
  }
@@ -34731,28 +34800,27 @@ class Series {
34731
34800
  * @emits Highcharts.Series#event:destroy
34732
34801
  */
34733
34802
  destroy(keepEventsForUpdate) {
34734
- const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent), data = series.data || [];
34735
- let destroy, i, axis;
34803
+ const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent);
34804
+ let destroy, axis;
34736
34805
  // Add event hook
34737
34806
  fireEvent(series, 'destroy', { keepEventsForUpdate });
34738
34807
  // Remove events
34739
34808
  this.removeEvents(keepEventsForUpdate);
34740
34809
  // Erase from axes
34741
- (series.axisTypes || []).forEach(function (AXIS) {
34742
- axis = series[AXIS];
34810
+ for (const coll of (series.axisTypes || [])) {
34811
+ axis = series[coll];
34743
34812
  if (axis?.series) {
34744
34813
  erase(axis.series, series);
34745
34814
  axis.isDirty = axis.forceRedraw = true;
34746
34815
  }
34747
- });
34816
+ }
34748
34817
  // Remove legend items
34749
34818
  if (series.legendItem) {
34750
34819
  series.chart.legend.destroyItem(series);
34751
34820
  }
34752
34821
  // Destroy all points with their elements
34753
- i = data.length;
34754
- while (i--) {
34755
- data[i]?.destroy?.(true);
34822
+ for (const point of series.points || []) {
34823
+ point?.destroy?.(true);
34756
34824
  }
34757
34825
  for (const zone of series.zones || []) {
34758
34826
  // Destroy SVGElement's but preserve primitive props (#20426)
@@ -38891,7 +38959,10 @@ class Chart {
38891
38959
  elem = this.renderer.text(options.text, 0, 0, options.useHTML)
38892
38960
  .attr({
38893
38961
  align: options.align,
38894
- 'class': 'highcharts-' + key,
38962
+ 'class': [
38963
+ options.className,
38964
+ 'highcharts-' + key
38965
+ ].filter(isString).join(' '),
38895
38966
  zIndex: options.zIndex || 4
38896
38967
  })
38897
38968
  .css({
@@ -39896,7 +39967,7 @@ class Chart {
39896
39967
  if (label &&
39897
39968
  (labels.reserveSpace ?? !isNumber(options.crossing))) {
39898
39969
  expectedSpace = label.getBBox().height +
39899
- labels.distance +
39970
+ (labels.distance ?? 15) +
39900
39971
  Math.max(isNumber(offset) ? offset : 0, 0);
39901
39972
  }
39902
39973
  if (expectedSpace) {
@@ -39984,6 +40055,12 @@ class Chart {
39984
40055
  addCredits(credits) {
39985
40056
  const chart = this, creds = merge(true, this.options.credits, credits);
39986
40057
  if (creds.enabled && !this.credits) {
40058
+ // Run the user-supplied URL through the allow list, so that
40059
+ // references like `javascript:` can't be executed from the
40060
+ // credits label
40061
+ const href = creds.href ?
40062
+ HTML_AST.filterUserAttributes({ href: creds.href }).href :
40063
+ void 0;
39987
40064
  /**
39988
40065
  * The chart's credits label. The label has an `update` method that
39989
40066
  * allows setting new options as per the
@@ -39997,8 +40074,8 @@ class Chart {
39997
40074
  .on('click', function (e) {
39998
40075
  // Fire the event with browser redirect as default function
39999
40076
  fireEvent(chart, 'creditsClick', e, () => {
40000
- if (creds.href) {
40001
- Chart_win.location.href = creds.href;
40077
+ if (href) {
40078
+ Chart_win.location.href = href;
40002
40079
  }
40003
40080
  });
40004
40081
  })
@@ -41615,14 +41692,11 @@ class StackItem {
41615
41692
  *
41616
41693
  * */
41617
41694
  /** @internal */
41618
- constructor(axis, options, negativeValue, x, stackOption) {
41619
- const inverted = axis.chart.inverted, reversed = axis.reversed;
41695
+ constructor(axis, negativeValue, x, stackOption) {
41620
41696
  this.axis = axis;
41621
41697
  // The stack goes to the left either if the stack has negative value
41622
41698
  // or when axis is reversed. XOR operator.
41623
- const isNegative = (this.isNegative = !!negativeValue !== !!reversed);
41624
- // Save the options to be able to style the label
41625
- this.options = options = options || {};
41699
+ this.negativeValue = negativeValue;
41626
41700
  // Save the x value to be able to position the label later
41627
41701
  this.x = x;
41628
41702
  // Initialize total value
@@ -41637,20 +41711,6 @@ class StackItem {
41637
41711
  this.stack = stackOption;
41638
41712
  this.leftCliff = 0;
41639
41713
  this.rightCliff = 0;
41640
- // The align options and text align varies on whether the stack is
41641
- // negative and if the chart is inverted or not.
41642
- // First test the user supplied value, then use the dynamic.
41643
- this.alignOptions = {
41644
- align: options.align ||
41645
- (inverted ? (isNegative ? 'left' : 'right') : 'center'),
41646
- verticalAlign: options.verticalAlign ||
41647
- (inverted ? 'middle' : isNegative ? 'bottom' : 'top'),
41648
- y: options.y,
41649
- x: options.x
41650
- };
41651
- this.textAlign =
41652
- options.textAlign ||
41653
- (inverted ? (!isNegative ? 'left' : 'right') : 'center');
41654
41714
  }
41655
41715
  /* *
41656
41716
  *
@@ -41666,39 +41726,34 @@ class StackItem {
41666
41726
  * @internal
41667
41727
  */
41668
41728
  render(group) {
41669
- const chart = this.axis.chart, options = this.options, formatOption = options.format,
41729
+ const axis = this.axis, chart = axis.chart, options = axis.options.stackLabels || {}, formatOption = options.format,
41670
41730
  // Format the text in the label.
41671
- str = (formatOption ?
41731
+ text = (formatOption ?
41672
41732
  StackItem_format(formatOption, this, chart) :
41673
- options.formatter?.call(this, this)) || '';
41674
- // Change the text to reflect the new total and set visibility to hidden
41675
- // in case the series is hidden
41676
- if (this.label) {
41677
- this.label.attr({ text: str, visibility: 'hidden' });
41733
+ options.formatter?.call(this, this)) || '', verb = this.label ? 'animate' : 'attr';
41734
+ // Create new label
41735
+ this.label || (this.label = chart.renderer.label(text, 0, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels'));
41736
+ const label = this.label, animatableAttribs = {
41737
+ r: options.borderRadius || 0,
41738
+ // Set default padding to 5 as it is in dataLabels #12308
41739
+ padding: (options.padding ?? 5)
41740
+ };
41741
+ if (!chart.styledMode) {
41742
+ animatableAttribs.fill = options.backgroundColor;
41743
+ animatableAttribs.stroke = options.borderColor;
41744
+ animatableAttribs['stroke-width'] = options.borderWidth;
41745
+ label.css(options.style || {});
41678
41746
  }
41679
- else {
41680
- // Create new label
41681
- this.label = chart.renderer.label(str, null, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels');
41682
- const attr = {
41683
- r: options.borderRadius || 0,
41684
- text: str,
41685
- // Set default padding to 5 as it is in dataLabels #12308
41686
- padding: (options.padding ?? 5),
41687
- visibility: 'hidden' // Hidden until setOffset is called
41688
- };
41689
- if (!chart.styledMode) {
41690
- attr.fill = options.backgroundColor;
41691
- attr.stroke = options.borderColor;
41692
- attr['stroke-width'] = options.borderWidth;
41693
- this.label.css(options.style || {});
41694
- }
41695
- this.label.attr(attr);
41696
- if (!this.label.added) {
41697
- this.label.add(group); // Add to the labels-group
41698
- }
41747
+ label
41748
+ .attr({
41749
+ text,
41750
+ visibility: 'hidden' // Hidden until setOffset is called
41751
+ })[verb](animatableAttribs);
41752
+ if (!label.added) {
41753
+ label.add(group); // Add to the labels-group
41699
41754
  }
41700
41755
  // Rank it higher than data labels (#8742)
41701
- this.label.labelrank = chart.plotSizeY;
41756
+ label.labelrank = chart.plotSizeY;
41702
41757
  fireEvent(this, 'afterRender');
41703
41758
  }
41704
41759
  /**
@@ -41707,35 +41762,38 @@ class StackItem {
41707
41762
  * @internal
41708
41763
  */
41709
41764
  setOffset(xOffset, width, boxBottom, boxTop, defaultX, xAxis) {
41710
- const { alignOptions, axis, label, options, textAlign } = this, chart = axis.chart, stackBox = this.getStackBox({
41711
- xOffset,
41712
- width,
41765
+ const { axis, label } = this, chart = axis.chart, options = axis.options.stackLabels || {}, inverted = chart.inverted, isNegative = this.negativeValue !== !!axis.reversed, stackBox = this.getStackBox({
41713
41766
  boxBottom,
41714
41767
  boxTop,
41715
41768
  defaultX,
41716
- xAxis
41717
- }), { verticalAlign } = alignOptions;
41769
+ isNegative,
41770
+ width,
41771
+ xAxis,
41772
+ xOffset
41773
+ }), { align = (inverted ? (isNegative ? 'left' : 'right') : 'center'), verticalAlign = (inverted ? 'middle' : isNegative ? 'bottom' : 'top'), textAlign = (inverted ? (!isNegative ? 'left' : 'right') : 'center'), x = 0, y = 0 } = options, alignOptions = {
41774
+ align,
41775
+ verticalAlign,
41776
+ x,
41777
+ y
41778
+ };
41718
41779
  if (label && stackBox) {
41719
41780
  const labelBox = label.getBBox(void 0, 0), padding = label.padding;
41720
41781
  let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
41721
- // Reset alignOptions property after justify #12337
41722
- alignOptions.x = options.x || 0;
41723
- alignOptions.y = options.y || 0;
41724
41782
  // Calculate the adjusted Stack position, to take into consideration
41725
- // The size if the labelBox and vertical alignment as
41726
- // well as the text alignment. It's need to be done to work with
41727
- // default SVGLabel.align/justify methods.
41728
- const { x, y } = this.adjustStackPosition({
41783
+ // the size if the labelBox and vertical alignment as well as the
41784
+ // text alignment. It needs to be done to work with default
41785
+ // SVGLabel.align/justify methods.
41786
+ const { x: adjustX, y: adjustY } = this.adjustStackPosition({
41729
41787
  labelBox,
41730
41788
  verticalAlign,
41731
41789
  textAlign
41732
41790
  });
41733
- stackBox.x -= x;
41734
- stackBox.y -= y;
41791
+ stackBox.x -= adjustX;
41792
+ stackBox.y -= adjustY;
41735
41793
  // Align the label to the adjusted box.
41736
41794
  label.align(alignOptions, false, stackBox);
41737
- // Check if label is inside the plotArea #12294
41738
- visible = chart.isInsidePlot(label.alignAttr.x + alignOptions.x + x, label.alignAttr.y + alignOptions.y + y);
41795
+ // Check if the label is inside the plotArea #12294
41796
+ visible = chart.isInsidePlot(label.alignAttr.x + x + adjustX, label.alignAttr.y + y + adjustY);
41739
41797
  if (!visible) {
41740
41798
  isJustify = false;
41741
41799
  }
@@ -41743,11 +41801,8 @@ class StackItem {
41743
41801
  // Justify stackLabel into the alignBox
41744
41802
  StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);
41745
41803
  }
41746
- // Add attr to avoid the default animation of justifyDataLabel.
41747
- // Also add correct rotation with its rotation origin. #15129
41804
+ // Add correct rotation with its rotation origin (#15129)
41748
41805
  label.attr({
41749
- x: label.alignAttr.x,
41750
- y: label.alignAttr.y,
41751
41806
  rotation: options.rotation,
41752
41807
  rotationOriginX: labelBox.width *
41753
41808
  getAlignFactor(options.textAlign || 'center'),
@@ -41786,22 +41841,22 @@ class StackItem {
41786
41841
  * The x, y, height, width of the stack.
41787
41842
  */
41788
41843
  getStackBox(stackBoxProps) {
41789
- const stackItem = this, axis = this.axis, chart = axis.chart, { boxTop, defaultX, xOffset, width, boxBottom } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41844
+ const axis = this.axis, chart = axis.chart, { boxBottom, boxTop, defaultX, isNegative, width, xOffset } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41790
41845
  100 :
41791
41846
  (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 ||
41792
41847
  (isNumber(axis.min) &&
41793
41848
  axis.logarithmic &&
41794
41849
  axis.logarithmic.lin2log(axis.min)) ||
41795
- 0), height = Math.abs(y - yZero), inverted = chart.inverted, neg = stackItem.isNegative;
41850
+ 0), height = Math.abs(y - yZero), inverted = chart.inverted;
41796
41851
  return inverted ?
41797
41852
  {
41798
- x: (neg ? y : y - height) - chart.plotLeft,
41853
+ x: (isNegative ? y : y - height) - chart.plotLeft,
41799
41854
  y: xAxis.height - x - width + xAxis.top - chart.plotTop,
41800
41855
  width: height,
41801
41856
  height: width
41802
41857
  } : {
41803
41858
  x: x + xAxis.transB - chart.plotLeft,
41804
- y: (neg ? y - height : y) - chart.plotTop,
41859
+ y: (isNegative ? y - height : y) - chart.plotTop,
41805
41860
  width: width,
41806
41861
  height: height
41807
41862
  };
@@ -41837,10 +41892,6 @@ class StackItem {
41837
41892
  * @name Highcharts.StackItemObject#cumulative
41838
41893
  * @type {number}
41839
41894
  */ /**
41840
- * True if on the negative side
41841
- * @name Highcharts.StackItemObject#isNegative
41842
- * @type {boolean}
41843
- */ /**
41844
41895
  * Related SVG element
41845
41896
  * @name Highcharts.StackItemObject#label
41846
41897
  * @type {Highcharts.SVGElement}
@@ -42057,7 +42108,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
42057
42108
  stacks[key][x].total = null;
42058
42109
  }
42059
42110
  else {
42060
- stacks[key][x] = new Stacking_StackItem(axis, axis.options.stackLabels, !!isNegative, x, stackOption);
42111
+ stacks[key][x] = new Stacking_StackItem(axis, !!isNegative, x, stackOption);
42061
42112
  }
42062
42113
  }
42063
42114
  // If the StackItem doesn't exist, create it first
@@ -42214,29 +42265,41 @@ class AxisAdditions {
42214
42265
  });
42215
42266
  });
42216
42267
  }
42217
- /** @internal */
42268
+ /**
42269
+ * Create the stack totals group and render the individual labels into it
42270
+ * @internal
42271
+ */
42218
42272
  renderStackTotals() {
42219
- 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 ||
42220
- renderer
42221
- .g('stack-labels')
42222
- .attr({
42223
- zIndex: 6,
42224
- opacity: 0
42225
- })
42226
- .add());
42227
- // The plotLeft/Top will change when y axis gets wider so we need to
42228
- // translate the stackTotalGroup at every render call. See bug #506
42229
- // and #516
42230
- stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42231
- // Render each stack total
42232
- objectEach(stacks, (type) => {
42233
- objectEach(type, (stack) => {
42234
- stack.render(stackTotalGroup);
42273
+ 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 ||
42274
+ (enabled ?
42275
+ renderer
42276
+ .g('stack-labels')
42277
+ .attr({
42278
+ zIndex: 6,
42279
+ opacity: 0
42280
+ })
42281
+ .add() :
42282
+ void 0));
42283
+ if (stackTotalGroup) {
42284
+ // The plotLeft/Top will change when y axis gets wider so we need to
42285
+ // translate the stackTotalGroup at every render call. See bug #506
42286
+ // and #516
42287
+ stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42288
+ // Render each stack total
42289
+ objectEach(stacks, (type) => {
42290
+ objectEach(type, (stack) => {
42291
+ if (enabled) {
42292
+ stack.render(stackTotalGroup);
42293
+ }
42294
+ else {
42295
+ stack.label = stack.label?.destroy();
42296
+ }
42297
+ });
42235
42298
  });
42236
- });
42237
- stackTotalGroup.animate({
42238
- opacity: 1
42239
- }, animationConfig);
42299
+ stackTotalGroup.animate({
42300
+ opacity: 1
42301
+ }, animationConfig);
42302
+ }
42240
42303
  }
42241
42304
  }
42242
42305
  /* *
@@ -42558,7 +42621,6 @@ Series_SeriesRegistry.registerSeriesType('line', LineSeries);
42558
42621
  * specified, it is inherited from [chart.type](#chart.type).
42559
42622
  *
42560
42623
  * @extends series,plotOptions.line
42561
- * @excluding dataParser,dataURL
42562
42624
  * @product highcharts highstock
42563
42625
  * @apioption series.line
42564
42626
  */
@@ -42932,7 +42994,7 @@ const AreaSeriesDefaults = {
42932
42994
  * specified, it is inherited from [chart.type](#chart.type).
42933
42995
  *
42934
42996
  * @extends series,plotOptions.area
42935
- * @excluding dataParser, dataURL, useOhlcData
42997
+ * @excluding useOhlcData
42936
42998
  * @product highcharts highstock
42937
42999
  * @apioption series.area
42938
43000
  */
@@ -43569,7 +43631,7 @@ Series_SeriesRegistry.registerSeriesType('spline', SplineSeries);
43569
43631
  * not specified, it is inherited from [chart.type](#chart.type).
43570
43632
  *
43571
43633
  * @extends series,plotOptions.spline
43572
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43634
+ * @excluding step, boostThreshold, boostBlending
43573
43635
  * @product highcharts highstock
43574
43636
  * @apioption series.spline
43575
43637
  */
@@ -43731,7 +43793,7 @@ Series_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);
43731
43793
  *
43732
43794
  *
43733
43795
  * @extends series,plotOptions.areaspline
43734
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43796
+ * @excluding step, boostThreshold, boostBlending
43735
43797
  * @product highcharts highstock
43736
43798
  * @apioption series.areaspline
43737
43799
  */
@@ -44008,13 +44070,16 @@ const ColumnSeriesDefaults = {
44008
44070
  * The minimal height for a column or width for a bar. By default,
44009
44071
  * 0 values are not shown. To visualize a 0 (or close to zero) point,
44010
44072
  * set the minimal point length to a pixel value like 3\. In stacked
44011
- * column charts, minPointLength might not be respected for tightly
44012
- * packed values.
44073
+ * column charts, the length is applied to each point in isolation, so
44074
+ * tightly packed values may overlap. See the stacked sample below for a
44075
+ * plugin that lays out the stack as a whole instead.
44013
44076
  *
44014
44077
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength/
44015
44078
  * Zero base value
44016
44079
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/
44017
44080
  * Positive and negative close to zero values
44081
+ * @sample {highcharts} highcharts/plotoptions/column-minpointlength-stacked/
44082
+ * Stack-aware minimum length
44018
44083
  *
44019
44084
  * @product highcharts highstock gantt
44020
44085
  */
@@ -44185,7 +44250,7 @@ const ColumnSeriesDefaults = {
44185
44250
  * not specified, it is inherited from [chart.type](#chart.type).
44186
44251
  *
44187
44252
  * @extends series,plotOptions.column
44188
- * @excluding connectNulls, dataParser, dataURL, gapSize, gapUnit, linecap,
44253
+ * @excluding connectNulls, gapSize, gapUnit, linecap,
44189
44254
  * lineWidth, marker, connectEnds, step
44190
44255
  * @product highcharts highstock
44191
44256
  * @apioption series.column
@@ -45829,7 +45894,7 @@ Series_SeriesRegistry.registerSeriesType('bar', BarSeries);
45829
45894
  * it is inherited from [chart.type](#chart.type).
45830
45895
  *
45831
45896
  * @extends series,plotOptions.bar
45832
- * @excluding connectNulls, dashStyle, dataParser, dataURL, gapSize, gapUnit,
45897
+ * @excluding connectNulls, dashStyle, gapSize, gapUnit,
45833
45898
  * linecap, lineWidth, marker, connectEnds, step
45834
45899
  * @product highcharts
45835
45900
  * @apioption series.bar
@@ -46030,7 +46095,7 @@ const ScatterSeriesDefaults = {
46030
46095
  * not specified, it is inherited from [chart.type](#chart.type).
46031
46096
  *
46032
46097
  * @extends series,plotOptions.scatter
46033
- * @excluding cropThreshold, dataParser, dataURL, useOhlcData
46098
+ * @excluding cropThreshold, useOhlcData
46034
46099
  * @product highcharts highstock
46035
46100
  * @apioption series.scatter
46036
46101
  */
@@ -47132,7 +47197,7 @@ const PieSeriesDefaults = {
47132
47197
  * it is inherited from [chart.type](#chart.type).
47133
47198
  *
47134
47199
  * @extends series,plotOptions.pie
47135
- * @excluding cropThreshold, dataParser, dataURL, linkedTo, stack, xAxis, yAxis,
47200
+ * @excluding cropThreshold, linkedTo, stack, xAxis, yAxis,
47136
47201
  * dataSorting, step, boostThreshold, boostBlending
47137
47202
  * @product highcharts highmaps
47138
47203
  * @apioption series.pie
@@ -48233,6 +48298,7 @@ var GeometryUtilities;
48233
48298
  * */
48234
48299
 
48235
48300
 
48301
+
48236
48302
  const { pointInPolygon } = Geometry_GeometryUtilities;
48237
48303
 
48238
48304
  /* *
@@ -48373,30 +48439,34 @@ function composeOverlappingDataLabels(ChartClass) {
48373
48439
  * Whether label is affected
48374
48440
  */
48375
48441
  function hideOrShow(label, chart) {
48376
- let complete, newOpacity, isLabelAffected = false;
48442
+ let isLabelAffected = false;
48377
48443
  if (label) {
48378
- newOpacity = label.newOpacity;
48444
+ const newOpacity = label.newOpacity, isDataLabel = label.hasClass('highcharts-data-label');
48445
+ // For tick labels, we need to stop running animations otherwise they
48446
+ // may continue to run after we set the new opacity
48447
+ if (!isDataLabel) {
48448
+ stop(label, 'opacity');
48449
+ }
48379
48450
  if (label.oldOpacity !== newOpacity) {
48380
48451
  // Toggle data labels
48381
- if (label.hasClass('highcharts-data-label')) {
48452
+ if (isDataLabel) {
48382
48453
  // Make sure the label is completely hidden to avoid catching
48383
48454
  // clicks (#4362)
48384
48455
  label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');
48385
- complete = function () {
48456
+ isLabelAffected = true;
48457
+ // Animate or set the opacity
48458
+ label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, () => {
48386
48459
  if (!chart.styledMode) {
48387
48460
  label.css({
48388
48461
  pointerEvents: newOpacity ? 'auto' : 'none'
48389
48462
  });
48390
48463
  }
48391
- };
48392
- isLabelAffected = true;
48393
- // Animate or set the opacity
48394
- label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);
48464
+ });
48395
48465
  fireEvent(chart, 'afterHideOverlappingLabel');
48396
- // Toggle other labels, tick labels
48466
+ // Toggle other labels - tick labels, stack labels
48397
48467
  }
48398
48468
  else {
48399
- label.attr({
48469
+ label[label.placed ? 'animate' : 'attr']({
48400
48470
  opacity: newOpacity
48401
48471
  });
48402
48472
  }
@@ -48412,25 +48482,37 @@ function hideOrShow(label, chart) {
48412
48482
  * @internal
48413
48483
  */
48414
48484
  function OverlappingDataLabels_onChartRender() {
48415
- const chart = this;
48485
+ const chart = this,
48486
+ // Helper function for data labels and stack labels when dynamicly
48487
+ // toggling the allowOverlap option
48488
+ toggle = (label, allowOverlap) => {
48489
+ // Allow overlap, reset opacity and show
48490
+ if (allowOverlap) {
48491
+ label.oldOpacity = label.opacity;
48492
+ label.newOpacity = 1;
48493
+ hideOrShow(label, chart);
48494
+ // Do not allow overlap
48495
+ }
48496
+ else {
48497
+ labels.push(label);
48498
+ }
48499
+ };
48416
48500
  let labels = [];
48417
48501
  // Consider external label collectors
48418
48502
  for (const collector of (chart.labelCollectors || [])) {
48419
48503
  labels = labels.concat(collector());
48420
48504
  }
48421
- for (const yAxis of (chart.yAxis || [])) {
48422
- if (yAxis.stacking &&
48423
- yAxis.options.stackLabels &&
48424
- !yAxis.options.stackLabels.allowOverlap) {
48425
- objectEach(yAxis.stacking.stacks, (stack) => {
48426
- objectEach(stack, (stackItem) => {
48427
- if (stackItem.label) {
48428
- labels.push(stackItem.label);
48429
- }
48430
- });
48505
+ // Stack labels
48506
+ for (const { options, stacking } of (chart.yAxis || [])) {
48507
+ objectEach(stacking?.stacks, (stack) => {
48508
+ objectEach(stack, ({ label }) => {
48509
+ if (label) {
48510
+ toggle(label, options.stackLabels?.allowOverlap);
48511
+ }
48431
48512
  });
48432
- }
48513
+ });
48433
48514
  }
48515
+ // Series data labels
48434
48516
  for (const series of (chart.series || [])) {
48435
48517
  if (series.visible && series.hasDataLabels?.()) { // #3866
48436
48518
  const push = (points) => {
@@ -48459,21 +48541,13 @@ function OverlappingDataLabels_onChartRender() {
48459
48541
  }
48460
48542
  */
48461
48543
  // Allow overlap if the option is explicitly true
48462
- if (
48544
+ toggle(label, (
48463
48545
  // #13449
48464
48546
  options.allowOverlap ??
48465
48547
  // Pie labels outside have a separate placement
48466
48548
  // logic, skip the overlap logic
48467
48549
  (series.is('pie') &&
48468
- Number(options.distance) > 0)) {
48469
- label.oldOpacity = label.opacity;
48470
- label.newOpacity = 1;
48471
- hideOrShow(label, chart);
48472
- // Do not allow overlap
48473
- }
48474
- else {
48475
- labels.push(label);
48476
- }
48550
+ Number(options.distance) > 0)));
48477
48551
  });
48478
48552
  }
48479
48553
  }
@@ -49149,7 +49223,7 @@ var Responsive;
49149
49223
  ;// ./code/es-modules/masters/highcharts.src.js
49150
49224
  // SPDX-License-Identifier: LicenseRef-Highcharts
49151
49225
  /**
49152
- * @license Highcharts JS v13.0.2 (2026-08-27)
49226
+ * @license Highcharts JS v13.1.0 (2026-09-18)
49153
49227
  * @module highcharts/highcharts
49154
49228
  *
49155
49229
  * (c) 2009-2026 Highsoft AS
@@ -49361,7 +49435,8 @@ function compose(ChartClass, NavigatorClass) {
49361
49435
  const chartProto = ChartClass.prototype;
49362
49436
  NavigatorConstructor = NavigatorClass;
49363
49437
  chartProto.callbacks.push(onChartCallback);
49364
- addEvent(ChartClass, 'afterAddSeries', onChartAfterAddSeries);
49438
+ addEvent(ChartClass, 'afterAddSeries', resetBaseSeries);
49439
+ addEvent(ChartClass, 'afterDrillUp', resetBaseSeries);
49365
49440
  addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);
49366
49441
  addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);
49367
49442
  addEvent(ChartClass, 'beforeRender', onChartBeforeRender);
@@ -49370,13 +49445,12 @@ function compose(ChartClass, NavigatorClass) {
49370
49445
  }
49371
49446
  }
49372
49447
  /**
49373
- * Handle adding new series.
49448
+ * Reset the base series.
49374
49449
  * @internal
49375
49450
  */
49376
- function onChartAfterAddSeries() {
49451
+ function resetBaseSeries() {
49377
49452
  if (this.navigator) {
49378
- // Recompute which series should be shown in navigator, and add them
49379
- this.navigator.setBaseSeries(null, false);
49453
+ this.navigator.setBaseSeries(void 0, false);
49380
49454
  }
49381
49455
  }
49382
49456
  /**
@@ -49525,7 +49599,7 @@ const ChartNavigatorComposition = {
49525
49599
  * */
49526
49600
 
49527
49601
 
49528
- const { isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
49602
+ const { composed: NavigatorAxisComposition_composed, isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
49529
49603
 
49530
49604
  /* *
49531
49605
  *
@@ -49591,8 +49665,7 @@ class NavigatorAxisAdditions {
49591
49665
  *
49592
49666
  * */
49593
49667
  static compose(AxisClass) {
49594
- if (!AxisClass.keepProps.includes('navigatorAxis')) {
49595
- AxisClass.keepProps.push('navigatorAxis');
49668
+ if (pushUnique(NavigatorAxisComposition_composed, 'Axis.Navigator')) {
49596
49669
  addEvent(AxisClass, 'init', NavigatorAxisComposition_onAxisInit);
49597
49670
  addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);
49598
49671
  }
@@ -50464,6 +50537,9 @@ var ScrollbarAxis;
50464
50537
  }
50465
50538
  });
50466
50539
  }
50540
+ else if (axis.scrollbar) {
50541
+ axis.scrollbar = axis.scrollbar.destroy();
50542
+ }
50467
50543
  }
50468
50544
  /**
50469
50545
  * Wrap rendering axis, and update scrollbar if one is created.
@@ -50601,14 +50677,12 @@ var ScrollbarAxis;
50601
50677
  */
50602
50678
  const ScrollbarDefaults = {
50603
50679
  /**
50604
- * The height of the scrollbar. If `buttonsEnabled` is true , the height
50680
+ * The height of the scrollbar. If `buttonsEnabled` is true, the height
50605
50681
  * also applies to the width of the scroll arrows so that they are always
50606
50682
  * squares.
50607
50683
  *
50608
50684
  * @sample stock/scrollbar/style/
50609
50685
  * Non-default height
50610
- *
50611
- * @type {number}
50612
50686
  */
50613
50687
  height: 10,
50614
50688
  /**
@@ -52915,11 +52989,7 @@ class Navigator {
52915
52989
  erase(this.chart.axes, this.yAxis);
52916
52990
  }
52917
52991
  // Destroy series
52918
- (this.series || []).forEach((s) => {
52919
- if (s.destroy) {
52920
- s.destroy();
52921
- }
52922
- });
52992
+ destroyObjectProperties(this.series || []);
52923
52993
  // Destroy properties
52924
52994
  [
52925
52995
  'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',
@@ -53039,6 +53109,27 @@ const standaloneNavigatorDefaults = {
53039
53109
 
53040
53110
 
53041
53111
 
53112
+
53113
+ /* *
53114
+ *
53115
+ * Functions
53116
+ *
53117
+ * */
53118
+ /**
53119
+ * Support for the deprecated `chart` option, renamed to `chartOptions`.
53120
+ * The new option takes precedence. #24715
53121
+ *
53122
+ * @internal
53123
+ */
53124
+ function compatChartOptions(options, chart) {
53125
+ if (options.chart) {
53126
+ error(32, false, chart, {
53127
+ 'standaloneNavigator.chart': 'use standaloneNavigator.chartOptions'
53128
+ });
53129
+ return merge({ chartOptions: options.chart }, options);
53130
+ }
53131
+ return options;
53132
+ }
53042
53133
  /* *
53043
53134
  *
53044
53135
  * Class
@@ -53095,9 +53186,15 @@ class StandaloneNavigator {
53095
53186
  * */
53096
53187
  constructor(element, userOptions) {
53097
53188
  this.boundAxes = [];
53098
- this.userOptions = userOptions;
53099
- this.chartOptions = merge(Core_Globals.getOptions(), StandaloneNavigatorDefaults, userOptions.chart, { navigator: userOptions });
53100
- if (this.chartOptions.chart && userOptions.height) {
53189
+ this.userOptions = userOptions = compatChartOptions(userOptions);
53190
+ this.chartOptions = merge(Core_Globals.getOptions(), StandaloneNavigatorDefaults, userOptions.chartOptions, { navigator: userOptions });
53191
+ // For a non-inverted navigator, the height option sets the chart
53192
+ // height unless it is set explicitly in chart options (#21268,
53193
+ // #24715).
53194
+ if (this.chartOptions.chart &&
53195
+ !this.chartOptions.chart.inverted &&
53196
+ !userOptions.chartOptions?.chart?.height &&
53197
+ userOptions.height) {
53101
53198
  this.chartOptions.chart.height = userOptions.height;
53102
53199
  }
53103
53200
  const chart = new Chart_Chart(element, this.chartOptions);
@@ -53185,10 +53282,8 @@ class StandaloneNavigator {
53185
53282
  // Set extremes to match the navigator's extremes
53186
53283
  axis.setExtremes(min, max);
53187
53284
  // Unbind the axis before it's destroyed
53188
- addEvent(axis, 'destroy', (e) => {
53189
- if (!e.keepEvents) {
53190
- this.unbind(axis);
53191
- }
53285
+ addEvent(axis, 'destroy', () => {
53286
+ this.unbind(axis);
53192
53287
  });
53193
53288
  }
53194
53289
  /**
@@ -53282,7 +53377,12 @@ class StandaloneNavigator {
53282
53377
  * specified, the standalone navigator will be redrawn.
53283
53378
  */
53284
53379
  update(newOptions, redraw) {
53285
- this.chartOptions = merge(this.chartOptions, newOptions.height && { chart: { height: newOptions.height } }, newOptions.chart, { navigator: newOptions });
53380
+ newOptions = compatChartOptions(newOptions, this.navigator.chart);
53381
+ this.userOptions = merge(this.userOptions, newOptions);
53382
+ const chartUserOptions = this.userOptions.chartOptions?.chart;
53383
+ this.chartOptions = merge(this.chartOptions, (newOptions.height &&
53384
+ !chartUserOptions?.inverted &&
53385
+ !chartUserOptions?.height) ? { chart: { height: newOptions.height } } : void 0, newOptions.chartOptions, { navigator: newOptions });
53286
53386
  this.navigator.chart.update(this.chartOptions, redraw);
53287
53387
  }
53288
53388
  /**
@@ -53409,7 +53509,7 @@ class StandaloneNavigator {
53409
53509
  /* unused harmony import specifier */ var Highcharts;
53410
53510
  // SPDX-License-Identifier: LicenseRef-Highcharts
53411
53511
  /**
53412
- * @license Highcharts JS v13.0.2 (2026-08-27)
53512
+ * @license Highcharts JS v13.1.0 (2026-09-18)
53413
53513
  * @module highcharts/modules/navigator
53414
53514
  * @requires highcharts
53415
53515
  *