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 Gantt JS v13.0.2 (2026-08-27)
3
+ * @license Highcharts Gantt JS v13.1.0 (2026-09-18)
4
4
  * @module highcharts/highcharts-gantt
5
5
  *
6
6
  * (c) 2017-2026 Highsoft AS
@@ -31,36 +31,17 @@ return /******/ (() => { // webpackBootstrap
31
31
  /******/
32
32
  /************************************************************************/
33
33
  /******/ /* webpack/runtime/define property getters */
34
- /******/ (() => {
35
- /******/ // define getter/value functions for harmony exports
36
- /******/ __webpack_require__.d = (exports, definition) => {
37
- /******/ if(Array.isArray(definition)) {
38
- /******/ var i = 0;
39
- /******/ while(i < definition.length) {
40
- /******/ var key = definition[i++];
41
- /******/ var binding = definition[i++];
42
- /******/ if(!__webpack_require__.o(exports, key)) {
43
- /******/ if(binding === 0) {
44
- /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
45
- /******/ } else {
46
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
47
- /******/ }
48
- /******/ } else if(binding === 0) { i++; }
49
- /******/ }
50
- /******/ } else {
51
- /******/ for(var key in definition) {
52
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
53
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
54
- /******/ }
55
- /******/ }
34
+ /******/ // define getter/value functions for harmony exports
35
+ /******/ __webpack_require__.d = (exports, definition) => {
36
+ /******/ for(var key in definition) {
37
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
38
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
56
39
  /******/ }
57
- /******/ };
58
- /******/ })();
40
+ /******/ }
41
+ /******/ };
59
42
  /******/
60
43
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
61
- /******/ (() => {
62
- /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
63
- /******/ })();
44
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));
64
45
  /******/
65
46
  /************************************************************************/
66
47
  let __webpack_exports__ = {};
@@ -99,7 +80,7 @@ var Globals;
99
80
  * Constants
100
81
  *
101
82
  * */
102
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.2', Globals.win = (typeof window !== 'undefined' ?
83
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.1.0', Globals.win = (typeof window !== 'undefined' ?
103
84
  window :
104
85
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
105
86
  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 = [
@@ -110,14 +91,16 @@ var Globals;
110
91
  ], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {
111
92
  // Checks whether the browser supports passive events, (#11353).
112
93
  let supportsPassive = false;
113
- // Object.defineProperty doesn't work on IE as well as passive
114
- // events - instead of using polyfill, we can exclude IE totally.
94
+ // Accessors don't work on IE as well as passive events - instead
95
+ // of using polyfill, we can exclude IE totally. The getter has to
96
+ // be enumerable, or wrappers that shallow-copy the options never
97
+ // read it (#25092).
115
98
  if (!Globals.isMS) {
116
- const opts = Object.defineProperty({}, 'passive', {
117
- get: function () {
118
- supportsPassive = true;
99
+ const opts = {
100
+ get passive() {
101
+ return (supportsPassive = true);
119
102
  }
120
- });
103
+ };
121
104
  if (Globals.win.addEventListener && Globals.win.removeEventListener) {
122
105
  Globals.win.addEventListener('testPassive', Globals.noop, opts);
123
106
  Globals.win.removeEventListener('testPassive', Globals.noop, opts);
@@ -2193,6 +2176,13 @@ function extend(a, b) {
2193
2176
  a = {};
2194
2177
  }
2195
2178
  for (n in b) { // eslint-disable-line guard-for-in
2179
+ // Prototype pollution (#14883). Keys like `__proto__` may arrive as
2180
+ // own, enumerable properties through `JSON.parse`, in which case
2181
+ // assigning them would mutate the prototype of the target instead of
2182
+ // adding a property.
2183
+ if (n === '__proto__' || n === 'constructor') {
2184
+ continue;
2185
+ }
2196
2186
  a[n] = b[n];
2197
2187
  }
2198
2188
  return a;
@@ -5454,6 +5444,13 @@ const defaultOptions = {
5454
5444
  * @since 2.0
5455
5445
  * @apioption title.align
5456
5446
  */
5447
+ /**
5448
+ * A CSS class name to apply to the title's container div,
5449
+ * allowing unique CSS styling for each chart.
5450
+ *
5451
+ * @type {string}
5452
+ * @apioption title.className
5453
+ */
5457
5454
  /**
5458
5455
  * The margin between the title and the plot area, or if a subtitle
5459
5456
  * is present, the margin between the subtitle and the plot area.
@@ -5516,6 +5513,13 @@ const defaultOptions = {
5516
5513
  * @since 2.0
5517
5514
  * @apioption subtitle.align
5518
5515
  */
5516
+ /**
5517
+ * A CSS class name to apply to the subtitle's container div,
5518
+ * allowing unique CSS styling for each chart.
5519
+ *
5520
+ * @type {string}
5521
+ * @apioption subtitle.className
5522
+ */
5519
5523
  /**
5520
5524
  * When the subtitle is floating, the plot area will not move to make
5521
5525
  * space for it.
@@ -7648,6 +7652,10 @@ const defaultOptions = {
7648
7652
  /**
7649
7653
  * The URL for the credits label.
7650
7654
  *
7655
+ * URLs that do not start with one of the
7656
+ * [AST.allowedReferences](https://api.highcharts.com/class-reference/Highcharts.AST#.allowedReferences),
7657
+ * for example `javascript:` URLs, are ignored.
7658
+ *
7651
7659
  * @sample {highcharts} highcharts/credits/href/
7652
7660
  * Custom URL and text
7653
7661
  * @sample {highmaps} maps/credits/customized/
@@ -8621,6 +8629,7 @@ class Fx {
8621
8629
  * Prepare start and end values so that the path can be animated one to one.
8622
8630
  *
8623
8631
  * @function Highcharts.Fx#initPath
8632
+ * @internal
8624
8633
  *
8625
8634
  * @param {Highcharts.SVGElement} elem
8626
8635
  * The SVGElement item.
@@ -8920,7 +8929,9 @@ function animate(el, params = { pos: 1 }, opt) {
8920
8929
  if (el) {
8921
8930
  stop(el, prop);
8922
8931
  }
8923
- const fx = new Animation_Fx(el, opt, prop), d = params.d;
8932
+ const fx = new Animation_Fx(el, opt, prop), d = params.d,
8933
+ // Discrete value that doesn't animate, apply at once
8934
+ applyImmediately = prop === 'dashstyle';
8924
8935
  let start = 0, end = void 0, unit = '';
8925
8936
  if (prop === 'd' && isArray(d)) {
8926
8937
  fx.paths = fx.initPath(el, el.pathArray, d);
@@ -8929,6 +8940,9 @@ function animate(el, params = { pos: 1 }, opt) {
8929
8940
  }
8930
8941
  else if (el?.attr) {
8931
8942
  start = el.attr(prop);
8943
+ if (applyImmediately) {
8944
+ el.attr(prop, val);
8945
+ }
8932
8946
  }
8933
8947
  else if (el) {
8934
8948
  start = +(getStyle(el, prop) || 0);
@@ -8943,7 +8957,7 @@ function animate(el, params = { pos: 1 }, opt) {
8943
8957
  end = end.replace(/px/g, ''); // #4351
8944
8958
  }
8945
8959
  // Empty dashstyle animation crashes treemap on hover
8946
- if (defined(end)) {
8960
+ if (defined(end) && !applyImmediately) {
8947
8961
  fx.run(start, end, unit);
8948
8962
  }
8949
8963
  });
@@ -9265,17 +9279,25 @@ class AST {
9265
9279
  markup, 'text/html');
9266
9280
  }
9267
9281
  catch {
9268
- // There are two cases where this fails:
9269
- // 1. IE9 and PhantomJS, where the DOMParser only supports parsing
9270
- // XML
9271
- // 2. Due to a Chromium issue where chart redraws are triggered by
9272
- // a `beforeprint` event (#16931),
9273
- // https://issues.chromium.org/issues/40222135
9282
+ // Due to a Chromium issue where chart redraws are triggered by a
9283
+ // `beforeprint` event (#16931),
9284
+ // https://issues.chromium.org/issues/40222135, the Trusted
9285
+ // Types `createHTML` callback can throw "The provided callback
9286
+ // is no longer runnable" while the browser is mid-print. Retry
9287
+ // with the raw string - `DOMParser` itself is not a Trusted
9288
+ // Types sink, so parsing it directly is safe.
9289
+ try {
9290
+ doc = new DOMParser().parseFromString(markup, 'text/html');
9291
+ }
9292
+ catch {
9293
+ // Ignore, fall through to the inert-document fallback below.
9294
+ }
9274
9295
  }
9275
9296
  if (!doc) {
9276
- const body = createElement('div');
9277
- body.innerHTML = markup;
9278
- doc = { body };
9297
+ // Never assign untrusted markup to a live document's innerHTML.
9298
+ // Parse into a detached, inert document instead.
9299
+ doc = Core_Globals.doc.implementation.createHTMLDocument('');
9300
+ doc.body.innerHTML = markup;
9279
9301
  }
9280
9302
  const appendChildNodes = (node, addTo) => {
9281
9303
  // Preserve the camelCase of SVG tags via localName (#24702).
@@ -9512,7 +9534,6 @@ AST.allowedTags = [
9512
9534
  'span',
9513
9535
  'stop',
9514
9536
  'strong',
9515
- 'style',
9516
9537
  'sub',
9517
9538
  'sup',
9518
9539
  'svg',
@@ -10292,6 +10313,7 @@ class SVGElement {
10292
10313
  let ret = (this[key + 'Value'] ??
10293
10314
  this[key] ??
10294
10315
  (this.element ? this.element.getAttribute(key) : null) ??
10316
+ this.box?.[key] ?? // For labels, when animating border radius
10295
10317
  0);
10296
10318
  if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
10297
10319
  ret = parseFloat(ret);
@@ -12886,7 +12908,7 @@ function arc(cx, cy, w, h, options) {
12886
12908
  * Path
12887
12909
  */
12888
12910
  function callout(x, y, w, h, options) {
12889
- const arrowLength = 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
12911
+ 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;
12890
12912
  const path = roundedRect(x, y, w, h, { r });
12891
12913
  if (!isNumber(anchorX)) {
12892
12914
  return path;
@@ -13510,8 +13532,12 @@ class TextBuilder {
13510
13532
  this.truncate(textNode, textNode.textContent || '', void 0, 0,
13511
13533
  // Target width
13512
13534
  width, ellipsisWidth, stringWithEllipsis);
13513
- textNode.textContent = textNode.textContent
13514
- ?.replace('\u2026', '') + '\u2026';
13535
+ // If there is still text left, add an ellipsis to
13536
+ // the end of the line
13537
+ if (textNode.textContent) {
13538
+ textNode.textContent = textNode.textContent
13539
+ ?.replace('\u2026', '') + '\u2026';
13540
+ }
13515
13541
  }
13516
13542
  break;
13517
13543
  }
@@ -13937,7 +13963,7 @@ class SVGRenderer {
13937
13963
  this.url = this.getReferenceURL();
13938
13964
  // Add description
13939
13965
  const desc = this.createElement('desc').add();
13940
- desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.2'));
13966
+ desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.1.0'));
13941
13967
  this.defs = this.createElement('defs').add();
13942
13968
  this.allowHTML = allowHTML;
13943
13969
  this.forExport = forExport;
@@ -15776,7 +15802,11 @@ class HTMLElement extends SVG_SVGElement {
15776
15802
  // Some properties require other properties to be set
15777
15803
  if (styles?.textOverflow === 'ellipsis') {
15778
15804
  styles.overflow = 'hidden';
15779
- styles.whiteSpace = 'nowrap';
15805
+ // With a line clamp, the text should wrap and ellipsis at the
15806
+ // clamped line instead of staying on one line (#24724)
15807
+ if (!(styles.lineClamp ?? this.styles.lineClamp)) {
15808
+ styles.whiteSpace = 'nowrap';
15809
+ }
15780
15810
  }
15781
15811
  // Apply line clamp
15782
15812
  if (styles?.lineClamp) {
@@ -16965,15 +16995,16 @@ var AxisDefaults;
16965
16995
  /**
16966
16996
  * The label's pixel distance from the perimeter of the plot area.
16967
16997
  * On cartesian charts, this is overridden if the `labels.y` setting
16968
- * is set.
16998
+ * is set. Defaults to 15 unless the labels are aligned inside the
16999
+ * plot area, in which case it defaults to 0.
16969
17000
  *
16970
17001
  * @sample {highcharts} highcharts/yaxis/labels-distance/
16971
17002
  * Polar chart, labels centered under the arc
16972
17003
  *
16973
17004
  * @type {number}
16974
17005
  * @product highcharts gantt
17006
+ * @apioption xAxis.labels.distance
16975
17007
  */
16976
- distance: 15,
16977
17008
  /**
16978
17009
  * Enable or disable the axis labels.
16979
17010
  *
@@ -17231,18 +17262,18 @@ var AxisDefaults;
17231
17262
  * @apioption xAxis.top
17232
17263
  */
17233
17264
  /**
17234
- * Index of another axis that this axis is linked to. When an axis is
17235
- * linked to a master axis, it will take the same extremes as
17236
- * the master, but as assigned by min or max or by setExtremes.
17237
- * It can be used to show additional info, or to ease reading the
17238
- * chart by duplicating the scales.
17265
+ * Index or [id](#xAxis.id) of another axis that this axis is linked to.
17266
+ * When an axis is linked to a master axis, it will take the same
17267
+ * extremes as the master, but as assigned by min or max or by
17268
+ * `setExtremes`. It can be used to show additional info, or to ease
17269
+ * reading the chart by duplicating the scales.
17239
17270
  *
17240
17271
  * @sample {highcharts} highcharts/xaxis/linkedto/
17241
17272
  * Different string formats of the same date
17242
17273
  * @sample {highcharts} highcharts/yaxis/linkedto/
17243
17274
  * Y values on both sides
17244
17275
  *
17245
- * @type {number}
17276
+ * @type {number|string}
17246
17277
  * @since 2.0.2
17247
17278
  * @product highcharts highstock gantt
17248
17279
  * @apioption xAxis.linkedTo
@@ -19362,7 +19393,7 @@ class Tick {
19362
19393
  */
19363
19394
  addLabel() {
19364
19395
  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;
19365
- let label = tick.label, dateTimeLabelFormat, dateTimeLabelFormats, i;
19396
+ let dateTimeLabelFormat, dateTimeLabelFormats, i;
19366
19397
  // The context value
19367
19398
  let value = this.parameters.category || (categories ?
19368
19399
  (categories[pos] ?? names[pos] ?? pos) :
@@ -19448,10 +19479,15 @@ class Tick {
19448
19479
  }
19449
19480
  return axis.defaultLabelFormatter.call(ctx);
19450
19481
  };
19451
- const text = labelFormatter.call(ctx, ctx);
19482
+ /**
19483
+ * The rendered text label of the tick.
19484
+ * @name Highcharts.Tick#label
19485
+ * @type {Highcharts.SVGElement|undefined}
19486
+ */
19487
+ tick.label = tick.createLabel(labelFormatter.call(ctx, ctx), labelOptions);
19452
19488
  // Set up conditional formatting based on the format list if existing.
19453
- const list = dateTimeLabelFormats?.list;
19454
- if (list) {
19489
+ const list = dateTimeLabelFormats?.list, label = tick.label;
19490
+ if (list && label) {
19455
19491
  tick.shortenLabel = function () {
19456
19492
  for (i = 0; i < list.length; i++) {
19457
19493
  extend(ctx, { dateTimeLabelFormat: list[i] });
@@ -19459,43 +19495,17 @@ class Tick {
19459
19495
  text: labelFormatter.call(ctx, ctx)
19460
19496
  });
19461
19497
  if (label.getBBox().width <
19462
- axis.getSlotWidth(tick) - 2 *
19463
- (labelOptions.padding || 0)) {
19498
+ axis.getSlotWidth(tick) - 2 * (labelOptions.padding || 0)) {
19464
19499
  return;
19465
19500
  }
19466
19501
  }
19467
- label.attr({
19468
- text: ''
19469
- });
19502
+ label.attr({ text: '' });
19470
19503
  };
19471
19504
  }
19472
19505
  else {
19473
19506
  // #15692
19474
19507
  tick.shortenLabel = void 0;
19475
19508
  }
19476
- // First call
19477
- if (!label) {
19478
- /**
19479
- * The rendered text label of the tick.
19480
- * @name Highcharts.Tick#label
19481
- * @type {Highcharts.SVGElement|undefined}
19482
- */
19483
- tick.label = label = tick.createLabel(text, labelOptions);
19484
- // Base value to detect change for new calls to getBBox
19485
- tick.rotation = 0;
19486
- // Update
19487
- }
19488
- else if (label.textStr !== text) {
19489
- // When resetting text, also reset the width if dynamically set
19490
- // (#8809)
19491
- if (label.textWidth &&
19492
- !labelOptions.style.width &&
19493
- !label.styles.width) {
19494
- label.css({ width: void 0 });
19495
- }
19496
- label.attr({ text });
19497
- label.textPxLength = label.getBBox().width;
19498
- }
19499
19509
  }
19500
19510
  /**
19501
19511
  * Render and return the label of the tick.
@@ -19503,18 +19513,33 @@ class Tick {
19503
19513
  * @internal
19504
19514
  * @function Highcharts.Tick#createLabel
19505
19515
  */
19506
- createLabel(str, labelOptions, xy) {
19507
- const axis = this.axis, { renderer, styledMode } = axis.chart, whiteSpace = labelOptions.style.whiteSpace, label = defined(str) && labelOptions.enabled ?
19508
- renderer
19509
- .text(str, xy?.x, xy?.y, labelOptions.useHTML)
19510
- .add(axis.labelGroup) :
19511
- void 0;
19516
+ createLabel(text, labelOptions, xy) {
19517
+ const axis = this.axis, { renderer, styledMode } = axis.chart, style = labelOptions.style, whiteSpace = style.whiteSpace;
19518
+ let label = this.label;
19519
+ if (defined(text) && labelOptions.enabled) {
19520
+ label || (label = renderer
19521
+ .text(text, xy?.x, xy?.y, labelOptions.useHTML)
19522
+ .add(axis.labelGroup));
19523
+ }
19524
+ else if (label) {
19525
+ label = label.destroy();
19526
+ // Reset so it doesn't animate when re-enabled
19527
+ this.isNewLabel = true;
19528
+ }
19512
19529
  // Un-rotated length
19513
- if (label) {
19530
+ if (label && (label.labelStyle !== style || text !== label.textStr)) {
19531
+ // Store a reference to the current style object to avoid running
19532
+ // this block on every render call unless something actually
19533
+ // changes.
19534
+ label.labelStyle = style;
19535
+ if (text !== label.textStr) {
19536
+ label.attr({ text });
19537
+ delete label.textPxLength;
19538
+ }
19514
19539
  if (!styledMode) {
19515
- label.css(merge(labelOptions.style));
19540
+ label.css(merge(style));
19516
19541
  }
19517
- label.textPxLength = label.getBBox().width;
19542
+ label.textPxLength ?? (label.textPxLength = label.getBBox().width);
19518
19543
  // Apply the white-space setting after we read the full text width
19519
19544
  if (!styledMode && whiteSpace) {
19520
19545
  label.css({ whiteSpace });
@@ -19586,19 +19611,27 @@ class Tick {
19586
19611
  * @internal
19587
19612
  */
19588
19613
  getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
19589
- const axis = this.axis, transA = axis.transA, reversed = ( // #7911
19590
- axis.isLinked && axis.linkedParent ?
19614
+ const axis = this.axis, { labelAlign, side, staggerLines, transA } = axis, reversed = ( // #7911
19615
+ axis.linkedParent ?
19591
19616
  axis.linkedParent.reversed :
19592
- axis.reversed), staggerLines = axis.staggerLines, rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19617
+ axis.reversed), rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19593
19618
  // Adjust for label alignment if we use reserveSpace: true (#5286)
19594
19619
  labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?
19595
- -axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :
19596
- 0), distance = labelOptions.distance, pos = {};
19620
+ -(axis.labelOffset || 0) * (axis.labelAlign === 'center' ? 0.5 : 1) :
19621
+ 0), distance = labelOptions.distance ?? (
19622
+ // If the label is aligned inside the plot area, default to 0.
19623
+ // This is default behavior or Stock y-axis labels.
19624
+ (side === 1 &&
19625
+ labelAlign === 'right' &&
19626
+ !labelOptions.reserveSpace) ? 0 :
19627
+ (side === 3 &&
19628
+ labelAlign === 'left' &&
19629
+ !labelOptions.reserveSpace) ? 0 : 15), pos = {};
19597
19630
  let yOffset, line;
19598
- if (axis.side === 0) {
19631
+ if (side === 0) {
19599
19632
  yOffset = label.rotation ? -distance : -label.getBBox().height;
19600
19633
  }
19601
- else if (axis.side === 2) {
19634
+ else if (side === 2) {
19602
19635
  yOffset = rotCorr.y + distance;
19603
19636
  }
19604
19637
  else {
@@ -19607,12 +19640,12 @@ class Tick {
19607
19640
  (rotCorr.y - label.getBBox(false, 0).height / 2);
19608
19641
  }
19609
19642
  if (defined(labelOptions.y)) {
19610
- yOffset = axis.side === 0 && axis.horiz ?
19643
+ yOffset = side === 0 && axis.horiz ?
19611
19644
  labelOptions.y + yOffset :
19612
19645
  labelOptions.y;
19613
19646
  }
19614
19647
  x = x +
19615
- (labelOptions.x ?? [0, 1, 0, -1][axis.side] * distance) +
19648
+ (labelOptions.x ?? [0, 1, 0, -1][side] * distance) +
19616
19649
  labelOffsetCorrection +
19617
19650
  rotCorr.x -
19618
19651
  (tickmarkOffset && horiz ?
@@ -19667,7 +19700,7 @@ class Tick {
19667
19700
  * @function Highcharts.Tick#handleOverflow
19668
19701
  */
19669
19702
  handleOverflow(xy) {
19670
- 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 = {};
19703
+ 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;
19671
19704
  let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
19672
19705
  // Check if the label overshoots the chart spacing box. If it does, move
19673
19706
  // it. If it now overshoots the slotWidth, add ellipsis.
@@ -19715,10 +19748,10 @@ class Tick {
19715
19748
  tick.shortenLabel();
19716
19749
  }
19717
19750
  else {
19718
- label.css(extend(css, {
19751
+ label.css({
19719
19752
  width: Math.floor(textWidth) + 'px',
19720
19753
  lineClamp: axis.isRadial ? 0 : 1
19721
- }));
19754
+ });
19722
19755
  }
19723
19756
  }
19724
19757
  }
@@ -19734,8 +19767,11 @@ class Tick {
19734
19767
  * @param {number} [opacity]
19735
19768
  */
19736
19769
  render(index, old, opacity) {
19737
- 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;
19738
- const labelOpacity = (opacity ?? tick.label?.newOpacity ?? 1);
19770
+ 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;
19771
+ if (!axis.visible) {
19772
+ opacity = 0;
19773
+ }
19774
+ const labelOpacity = opacity ?? 1;
19739
19775
  // Anything that is not between `axis.pos` and `axis.pos + axis.length`
19740
19776
  // should not be visible (#20166). The `correctFloat` is for reversed
19741
19777
  // axes in Safari.
@@ -19763,25 +19799,21 @@ class Tick {
19763
19799
  * @param {number} opacity The opacity of the grid line
19764
19800
  */
19765
19801
  renderGridLine(old, opacity) {
19766
- 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;
19767
- let gridLine = tick.gridLine, gridLinePath, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19802
+ 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;
19803
+ let gridLine = tick.gridLine, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19768
19804
  if (tick.type === 'minor') {
19769
19805
  gridLineWidth = options.minorGridLineWidth;
19770
19806
  gridLineColor = options.minorGridLineColor;
19771
19807
  dashStyle = options.minorGridLineDashStyle;
19772
19808
  }
19809
+ // Apply the stroke width initially so the crisping works
19810
+ if (!styledMode) {
19811
+ attribs['stroke-width'] = gridLineWidth || 0;
19812
+ }
19773
19813
  if (!gridLine) {
19774
- if (!axis.chart.styledMode) {
19775
- attribs.stroke = gridLineColor;
19776
- attribs['stroke-width'] = gridLineWidth || 0;
19777
- attribs.dashstyle = dashStyle;
19778
- }
19779
19814
  if (!type) {
19780
19815
  attribs.zIndex = 1;
19781
19816
  }
19782
- if (old) {
19783
- opacity = 0;
19784
- }
19785
19817
  /**
19786
19818
  * The rendered grid line of the tick.
19787
19819
  * @name Highcharts.Tick#gridLine
@@ -19792,22 +19824,24 @@ class Tick {
19792
19824
  .addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')
19793
19825
  .add(axis.gridGroup);
19794
19826
  }
19795
- if (gridLine) {
19796
- gridLinePath = axis.getPlotLinePath({
19797
- value: pos + tickmarkOffset,
19798
- lineWidth: gridLine.strokeWidth(),
19799
- force: 'pass',
19800
- old: old,
19801
- acrossPanes: false // #18025
19802
- });
19827
+ // Grid line path
19828
+ const d = axis.getPlotLinePath({
19829
+ value: pos + tickmarkOffset,
19830
+ lineWidth: gridLine.strokeWidth(),
19831
+ force: 'pass',
19832
+ old: old,
19833
+ acrossPanes: false // #18025
19834
+ });
19835
+ if (d) {
19836
+ attribs.d = d;
19837
+ attribs.opacity = old ? 0 : opacity;
19838
+ if (!styledMode) {
19839
+ attribs.stroke = gridLineColor;
19840
+ attribs.dashstyle = dashStyle;
19841
+ }
19803
19842
  // If the parameter 'old' is set, the current call will be followed
19804
19843
  // by another call, therefore do not do any animations this time
19805
- if (gridLinePath) {
19806
- gridLine[old || tick.isNew ? 'attr' : 'animate']({
19807
- d: gridLinePath,
19808
- opacity: opacity
19809
- });
19810
- }
19844
+ gridLine[old || tick.isNew ? 'attr' : 'animate'](attribs);
19811
19845
  }
19812
19846
  }
19813
19847
  /**
@@ -19819,13 +19853,13 @@ class Tick {
19819
19853
  * @param {number} opacity The opacity of the mark
19820
19854
  */
19821
19855
  renderMark(xy, opacity) {
19822
- 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
19856
+ 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
19823
19857
  tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
19824
19858
  let mark = tick.mark;
19825
- const isNewMark = !mark;
19826
- if (tickSize) {
19859
+ const verb = mark ? 'animate' : 'attr';
19860
+ if (tickSize || mark) {
19827
19861
  // Negate the length
19828
- if (axis.opposite) {
19862
+ if (axis.opposite && tickSize) {
19829
19863
  tickSize[0] = -tickSize[0];
19830
19864
  }
19831
19865
  // First time, create it
@@ -19838,16 +19872,16 @@ class Tick {
19838
19872
  tick.mark = mark = renderer.path()
19839
19873
  .addClass('highcharts-' + (type ? type + '-' : '') + 'tick')
19840
19874
  .add(axis.axisGroup);
19841
- if (!axis.chart.styledMode) {
19842
- mark.attr({
19843
- stroke: tickColor,
19844
- 'stroke-width': tickWidth
19845
- });
19846
- }
19847
19875
  }
19848
- mark[isNewMark ? 'attr' : 'animate']({
19849
- d: tick.getMarkPath(x, y, tickSize[0], mark.strokeWidth(), axis.horiz, renderer),
19850
- opacity: opacity
19876
+ if (!chart.styledMode) {
19877
+ mark[verb]({
19878
+ stroke: tickColor,
19879
+ 'stroke-width': tickWidth
19880
+ });
19881
+ }
19882
+ mark[verb]({
19883
+ d: tick.getMarkPath(x, y, tickSize?.[0] || 0, mark.strokeWidth(), axis.horiz, renderer),
19884
+ opacity: tickSize ? opacity : 0
19851
19885
  });
19852
19886
  }
19853
19887
  }
@@ -20009,6 +20043,11 @@ extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
20009
20043
  * Axis options
20010
20044
  */
20011
20045
  class Axis {
20046
+ /* *
20047
+ *
20048
+ * Static Properties
20049
+ *
20050
+ * */
20012
20051
  /* *
20013
20052
  *
20014
20053
  * Constructors
@@ -20085,9 +20124,11 @@ class Axis {
20085
20124
  * @name Highcharts.Axis#side
20086
20125
  * @type {number}
20087
20126
  */
20088
- axis.side = (userOptions.side ?? axis.side ?? (horiz ?
20089
- (axis.opposite ? 0 : 2) : // Top : bottom
20090
- (axis.opposite ? 1 : 3)));
20127
+ axis.side = userOptions.side ??
20128
+ (horiz ?
20129
+ (axis.opposite ? 0 : 2) : // Top : bottom
20130
+ (axis.opposite ? 1 : 3) // Right : left
20131
+ );
20091
20132
  /**
20092
20133
  * Current options for the axis after merge of defaults and user's
20093
20134
  * options.
@@ -20098,8 +20139,8 @@ class Axis {
20098
20139
  axis.setOptions(userOptions);
20099
20140
  const options = axis.options, labelsOptions = options.labels;
20100
20141
  // Set the type and fire an event
20101
- axis.type ?? (axis.type = options.type || 'linear');
20102
- axis.uniqueNames ?? (axis.uniqueNames = options.uniqueNames ?? true);
20142
+ axis.type = options.type || 'linear';
20143
+ axis.uniqueNames = options.uniqueNames ?? true;
20103
20144
  fireEvent(axis, 'afterSetType');
20104
20145
  /**
20105
20146
  * User's options for this axis without defaults.
@@ -20116,7 +20157,7 @@ class Axis {
20116
20157
  * @name Highcharts.Axis#reversed
20117
20158
  * @type {boolean}
20118
20159
  */
20119
- axis.reversed = (options.reversed ?? axis.reversed);
20160
+ axis.reversed = options.reversed;
20120
20161
  axis.visible = options.visible;
20121
20162
  axis.zoomEnabled = options.zoomEnabled;
20122
20163
  // Initial categories
@@ -20138,16 +20179,12 @@ class Axis {
20138
20179
  */
20139
20180
  axis.categories = (isArray(options.categories) && options.categories) ||
20140
20181
  (axis.hasNames ? [] : void 0);
20141
- // Axis names and its map for quick access. Backwards mapping is much
20142
- // faster than array searching (#7725). Preserve on update (#3830)
20143
- axis.names || (axis.names = []);
20182
+ axis.names || (axis.names = []); // Preserve on update (#3830)
20144
20183
  axis.namesMap || (axis.namesMap = {});
20145
20184
  // Placeholder for plotLines and plotBands groups
20146
- axis.plotLinesAndBandsGroups = {};
20185
+ axis.plotLinesAndBandsGroups || (axis.plotLinesAndBandsGroups = {});
20147
20186
  // Shorthand types
20148
20187
  axis.positiveValuesOnly = !!axis.logarithmic;
20149
- // Flag, if axis is linked to another axis
20150
- axis.isLinked = defined(options.linkedTo);
20151
20188
  /**
20152
20189
  * List of major ticks mapped by position on axis.
20153
20190
  *
@@ -20156,8 +20193,8 @@ class Axis {
20156
20193
  * @name Highcharts.Axis#ticks
20157
20194
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20158
20195
  */
20159
- axis.ticks = {};
20160
- axis.labelEdge = [];
20196
+ axis.ticks || (axis.ticks = {});
20197
+ axis.labelEdge || (axis.labelEdge = []);
20161
20198
  /**
20162
20199
  * List of minor ticks mapped by position on the axis.
20163
20200
  *
@@ -20166,11 +20203,9 @@ class Axis {
20166
20203
  * @name Highcharts.Axis#minorTicks
20167
20204
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20168
20205
  */
20169
- axis.minorTicks = {};
20170
- // List of plotLines/Bands
20171
- axis.plotLinesAndBands = [];
20206
+ axis.minorTicks || (axis.minorTicks = {});
20172
20207
  // Alternate bands
20173
- axis.alternateBands = {};
20208
+ axis.alternateBands || (axis.alternateBands = {});
20174
20209
  /**
20175
20210
  * The length of the axis in terms of pixels.
20176
20211
  *
@@ -20204,7 +20239,7 @@ class Axis {
20204
20239
  * @name Highcharts.Axis#crosshair
20205
20240
  * @type {boolean|Highcharts.AxisCrosshairOptions}
20206
20241
  */
20207
- const crosshair = options.crosshair ?? splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1];
20242
+ const crosshair = options.crosshair ?? splat(chart.options.tooltip?.crosshairs)[isXAxis ? 0 : 1];
20208
20243
  axis.crosshair = crosshair === true ? {} : crosshair;
20209
20244
  // Register. Don't add it again on Axis.update().
20210
20245
  if (chart.axes.indexOf(axis) === -1) { //
@@ -20259,14 +20294,14 @@ class Axis {
20259
20294
  },
20260
20295
  margin: 15
20261
20296
  } :
20262
- // Left and right axis, title rotated 90 or 270 degrees
20297
+ // Left and right axis, title rotated -90 or 90 degrees
20263
20298
  // respectively
20264
20299
  {
20265
20300
  labels: {
20266
20301
  padding: 1
20267
20302
  },
20268
20303
  title: {
20269
- rotation: 90 * this.side
20304
+ rotation: this.side === 1 ? 90 : -90
20270
20305
  }
20271
20306
  };
20272
20307
  this.options = merge(sideSpecific,
@@ -20480,6 +20515,9 @@ class Axis {
20480
20515
  if (!axis.isRadial) {
20481
20516
  returnValue = correctFloat(returnValue);
20482
20517
  }
20518
+ if (Math.abs(returnValue) < 1e-9) {
20519
+ returnValue = 0;
20520
+ }
20483
20521
  }
20484
20522
  return returnValue;
20485
20523
  }
@@ -20535,7 +20573,7 @@ class Axis {
20535
20573
  * The SVG path definition for the plot line.
20536
20574
  */
20537
20575
  getPlotLinePath(options) {
20538
- 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;
20576
+ 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;
20539
20577
  let translatedValue = options.translatedValue, force = options.force, x1, y1, x2, y2, skip;
20540
20578
  // eslint-disable-next-line valid-jsdoc
20541
20579
  /**
@@ -20573,17 +20611,17 @@ class Axis {
20573
20611
  skip = true;
20574
20612
  force = false; // #7175, don't force it when path is invalid
20575
20613
  }
20576
- else if (axis.horiz) {
20577
- y1 = axisTop;
20614
+ else if (horiz) {
20615
+ y1 = top;
20578
20616
  y2 = cHeight - axis.bottom + (axis.options.isInternal ?
20579
20617
  0 :
20580
20618
  (chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator
20581
- x1 = x2 = between(x1, axisLeft, axisLeft + axis.width);
20619
+ x1 = x2 = between(x1, left, left + axis.width);
20582
20620
  }
20583
20621
  else {
20584
- x1 = axisLeft;
20622
+ x1 = left;
20585
20623
  x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);
20586
- y1 = y2 = between(y1, axisTop, axisTop + axis.height);
20624
+ y1 = y2 = between(y1, top, top + axis.height);
20587
20625
  }
20588
20626
  e.path = skip && !force ?
20589
20627
  void 0 :
@@ -21012,7 +21050,7 @@ class Axis {
21012
21050
  * @emits Highcharts.Axis#event:foundExtremes
21013
21051
  */
21014
21052
  setTickInterval(secondPass) {
21015
- 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;
21053
+ 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;
21016
21054
  let maxPadding = options.maxPadding, minPadding = options.minPadding, range = 0, linkedParentExtremes,
21017
21055
  // Only non-negative tickInterval is valid, #12961
21018
21056
  tickIntervalOption = isNumber(options.tickInterval) && options.tickInterval >= 0 ?
@@ -21025,7 +21063,6 @@ class Axis {
21025
21063
  hardMax = (axis.userMax ?? time.parse(options.max));
21026
21064
  // Linked axis gets the extremes from the parent axis
21027
21065
  if (linkedParent) {
21028
- axis.linkedParent = linkedParent;
21029
21066
  linkedParentExtremes = linkedParent.getExtremes();
21030
21067
  axis.min =
21031
21068
  linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
@@ -21335,7 +21372,7 @@ class Axis {
21335
21372
  // Reset min/max or remove extremes based on start/end on tick
21336
21373
  this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor
21337
21374
  this.trimTicks(tickPositions, startOnTick, endOnTick);
21338
- if (!this.isLinked && isNumber(this.min) && isNumber(this.max)) {
21375
+ if (!this.linkedParent && isNumber(this.min) && isNumber(this.max)) {
21339
21376
  // Subtract half a unit (#2619, #2846, #2515, #3390), but not in
21340
21377
  // case of multiple ticks (#6897)
21341
21378
  if (this.single &&
@@ -21370,7 +21407,7 @@ class Axis {
21370
21407
  trimTicks(tickPositions, startOnTick, endOnTick) {
21371
21408
  const roundedMin = tickPositions[0], roundedMax = tickPositions[tickPositions.length - 1], minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)
21372
21409
  fireEvent(this, 'trimTicks');
21373
- if (!this.isLinked ||
21410
+ if (!this.linkedParent ||
21374
21411
  // Linked non-grid axes should trim ticks, #21743.
21375
21412
  // Grid axis has custom handling of ticks.
21376
21413
  !this.grid) {
@@ -21644,7 +21681,15 @@ class Axis {
21644
21681
  * @emits Highcharts.Axis#event:afterSetScale
21645
21682
  */
21646
21683
  setScale() {
21647
- const axis = this, { coll, stacking } = axis;
21684
+ const axis = this, { chart, coll, options, stacking } = axis, { linkedTo } = options, axes = chart[coll] || [], index = axes.indexOf(axis), parent = isString(linkedTo) ?
21685
+ find(axes, (a) => a.options.id === linkedTo) :
21686
+ (isNumber(linkedTo) ? axes[linkedTo] : void 0), linkedParent = axis.linkedParent =
21687
+ parent === axis ? void 0 : parent;
21688
+ // Scale a later-ordered parent first so its extremes are ready. Skip
21689
+ // grid column axes, which live outside the collection (#24658).
21690
+ if (linkedParent && index > -1 && axes.indexOf(linkedParent) > index) {
21691
+ linkedParent.setScale();
21692
+ }
21648
21693
  let isDirtyData = false, isXAxisDirty = false;
21649
21694
  axis.series.forEach((series) => {
21650
21695
  isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;
@@ -21661,7 +21706,7 @@ class Axis {
21661
21706
  if (isDirtyAxisLength ||
21662
21707
  isDirtyData ||
21663
21708
  isXAxisDirty ||
21664
- axis.isLinked ||
21709
+ axis.linkedParent ||
21665
21710
  axis.forceRedraw ||
21666
21711
  axis.userMin !== axis.old?.userMin ||
21667
21712
  axis.userMax !== axis.old?.userMax ||
@@ -22023,7 +22068,7 @@ class Axis {
22023
22068
  renderUnsquish() {
22024
22069
  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 ?
22025
22070
  2 * (labelOptions.padding || 0) :
22026
- labelOptions.distance || 0 // #21172
22071
+ labelOptions.distance ?? 15 // #21172
22027
22072
  ))), attr = {}, labelMetrics = this.labelMetrics(), lineClampOption = labelStyleOptions.lineClamp;
22028
22073
  let commonWidth, lineClamp = lineClampOption ?? (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1), maxLabelLength = 0;
22029
22074
  // Set rotation option unless it is "auto", like in gauges
@@ -22103,7 +22148,6 @@ class Axis {
22103
22148
  });
22104
22149
  }
22105
22150
  }
22106
- tick.rotation = attr.rotation;
22107
22151
  }
22108
22152
  }, this);
22109
22153
  // Note: Why is this not part of getLabelPosition?
@@ -22135,46 +22179,50 @@ class Axis {
22135
22179
  * Whether or not to display the title.
22136
22180
  */
22137
22181
  addTitle(display) {
22138
- const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode;
22139
- let textAlign;
22140
- if (!axis.axisTitle) {
22141
- textAlign = axisTitleOptions.textAlign;
22142
- if (!textAlign) {
22143
- textAlign = (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];
22152
- }
22153
- axis.axisTitle = renderer
22154
- .text(axisTitleOptions.text || '', 0, 0, axisTitleOptions.useHTML)
22155
- .attr({
22156
- zIndex: 7,
22157
- rotation: axisTitleOptions.rotation || 0,
22158
- align: textAlign
22159
- })
22182
+ 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 ||
22183
+ (horiz ? {
22184
+ low: 'left',
22185
+ middle: 'center',
22186
+ high: 'right'
22187
+ } : {
22188
+ low: opposite ? 'right' : 'left',
22189
+ middle: 'center',
22190
+ high: opposite ? 'left' : 'right'
22191
+ })[axisTitleOptions.align], attr = {
22192
+ text: axisTitleOptions.text || '',
22193
+ zIndex: 7,
22194
+ align: textAlign
22195
+ }, animatable = {
22196
+ rotation: axisTitleOptions.rotation || 0
22197
+ };
22198
+ let axisTitle = axis.axisTitle;
22199
+ if (!axisTitle) {
22200
+ axisTitle = renderer
22201
+ .text('', 0, 0, axisTitleOptions.useHTML)
22202
+ .attr(extend(attr, animatable))
22160
22203
  .addClass('highcharts-axis-title');
22161
- // #7814, don't mutate style option
22162
- if (!styledMode) {
22163
- axis.axisTitle.css(merge(axisTitleOptions.style));
22164
- }
22165
- axis.axisTitle.add(axis.axisGroup);
22166
- axis.axisTitle.isNew = true;
22204
+ axisTitle.add(axis.axisGroup);
22205
+ axisTitle.isNew = true;
22167
22206
  }
22168
- // Max width defaults to the length of the axis
22169
- if (!styledMode &&
22170
- !axisTitleOptions.style.width &&
22171
- !axis.isRadial) {
22172
- axis.axisTitle.css({
22173
- width: axis.len + 'px'
22174
- });
22207
+ else {
22208
+ axisTitle
22209
+ .attr(attr)
22210
+ .animate(animatable);
22211
+ }
22212
+ if (!styledMode) {
22213
+ // #7814, don't mutate the style option
22214
+ const css = merge(axisTitleOptions.style);
22215
+ // Max width defaults to the length of the axis
22216
+ if (!axisTitleOptions.style.width &&
22217
+ !axis.isRadial) {
22218
+ css.width = axis.len + 'px';
22219
+ }
22220
+ axisTitle.css(css);
22175
22221
  }
22176
22222
  // Hide or show the title depending on whether showEmpty is set
22177
- axis.axisTitle[display ? 'show' : 'hide'](display);
22223
+ axisTitle[display ? 'show' : 'hide'](display);
22224
+ // Register
22225
+ axis.axisTitle = axisTitle;
22178
22226
  }
22179
22227
  /**
22180
22228
  * Generates a tick for initial positioning.
@@ -22202,17 +22250,18 @@ class Axis {
22202
22250
  createGroups() {
22203
22251
  const { axisParent, // Used in color axis
22204
22252
  chart, coll, options } = this, renderer = chart.renderer;
22205
- const createGroup = (name, suffix, zIndex) => renderer.g(name)
22206
- .attr({ zIndex })
22253
+ const createGroup = (name, suffix) => renderer.g(name)
22207
22254
  .addClass(`highcharts-${coll.toLowerCase()}${suffix} ` +
22208
22255
  (this.isRadial ? `highcharts-radial-axis${suffix} ` : '') +
22209
22256
  (options.className || ''))
22210
22257
  .add(axisParent);
22211
- if (!this.axisGroup) {
22212
- this.gridGroup = createGroup('grid', '-grid', options.gridZIndex).clip(this.clippable ? chart.plotClipInner : void 0);
22213
- this.axisGroup = createGroup('axis', '', options.zIndex);
22214
- this.labelGroup = createGroup('axis-labels', '-labels', options.labels.zIndex);
22215
- }
22258
+ (this.axisGroup || (this.axisGroup = createGroup('axis', '')))
22259
+ .attr({ zIndex: options.zIndex });
22260
+ (this.gridGroup || (this.gridGroup = createGroup('grid', '-grid')))
22261
+ .clip(this.clippable ? chart.plotClipInner : void 0)
22262
+ .attr({ zIndex: options.gridZIndex });
22263
+ (this.labelGroup || (this.labelGroup = createGroup('axis-labels', '-labels')))
22264
+ .attr({ zIndex: options.labels.zIndex });
22216
22265
  }
22217
22266
  /**
22218
22267
  * Shuffle existing category ticks, like in bar race chart
@@ -22220,8 +22269,11 @@ class Axis {
22220
22269
  * @internal
22221
22270
  */
22222
22271
  shuffleTicks() {
22223
- const ticks = this.ticks, oldNames = this.old?.names;
22224
- if (this.type === 'category' && oldNames) {
22272
+ const ticks = this.ticks, oldNames = this.old?.names, hasDuplicates = (arr) => new Set(arr).size !== arr.length;
22273
+ if (this.type === 'category' &&
22274
+ oldNames &&
22275
+ !hasDuplicates(oldNames) &&
22276
+ !hasDuplicates(this.names)) {
22225
22277
  oldNames.forEach((name, oldPos) => {
22226
22278
  const pos = this.namesMap[name];
22227
22279
  if (defined(pos) && oldPos !== pos) {
@@ -22263,7 +22315,7 @@ class Axis {
22263
22315
  * @emits Highcharts.Axis#event:afterGetOffset
22264
22316
  */
22265
22317
  getOffset() {
22266
- 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];
22318
+ 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;
22267
22319
  let tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }, absTickRotCorrX = 0, showAxis, titleOffset = 0, titleOffsetOption, titleMargin = 0, labelOffset = 0, // Reset
22268
22320
  labelOffsetPadded, lineHeightCorrection, reserveSpaceDefault;
22269
22321
  // For reuse in Axis.render
@@ -22271,7 +22323,7 @@ class Axis {
22271
22323
  // Set/reset staggerLines
22272
22324
  axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;
22273
22325
  axis.createGroups();
22274
- if (hasData || axis.isLinked) {
22326
+ if (hasData || axis.linkedParent) {
22275
22327
  // Shuffle existing category ticks
22276
22328
  axis.shuffleTicks();
22277
22329
  // Generate new ticks
@@ -22323,6 +22375,9 @@ class Axis {
22323
22375
  axisTitleOptions.margin ?? (horiz ? 5 : 10);
22324
22376
  }
22325
22377
  }
22378
+ else {
22379
+ axis.axisTitle = axis.axisTitle?.destroy();
22380
+ }
22326
22381
  // Render the axis line
22327
22382
  axis.renderLine();
22328
22383
  // Handle automatic or user set offset
@@ -22346,12 +22401,10 @@ class Axis {
22346
22401
  labelOffsetPadded -= lineHeightCorrection;
22347
22402
  labelOffsetPadded += directionFactor * (horiz ?
22348
22403
  (labelOptions.y ??
22349
- (tickRotCorr.y +
22350
- directionFactor * labelOptions.distance)) :
22404
+ (tickRotCorr.y + directionFactor * distance)) :
22351
22405
  (labelOptions.x ?? (reserveSpaceDefault ?
22352
- directionFactor * (labelOptions.distance - absTickRotCorrX) :
22353
- tickRotCorr.x +
22354
- directionFactor * labelOptions.distance)));
22406
+ directionFactor * (distance - absTickRotCorrX) :
22407
+ tickRotCorr.x + directionFactor * distance)));
22355
22408
  if (!horiz &&
22356
22409
  !reserveSpaceDefault &&
22357
22410
  axis.labelAlign === 'center' &&
@@ -22365,8 +22418,8 @@ class Axis {
22365
22418
  // has rendered.
22366
22419
  if (coll !== 'colorAxis' && clipOffset) {
22367
22420
  const tickSize = this.tickSize('tick');
22368
- axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +
22369
- directionFactor * axis.offset, labelOffsetPadded, // #3027
22421
+ axisOffset[side] = Math.max(axisOffset[side], Math.max((axis.axisTitleMargin || 0) + titleOffset, labelOffsetPadded) + directionFactor * axis.offset, // #6967
22422
+ labelOffsetPadded, // #3027
22370
22423
  tickPositions?.length && tickSize ?
22371
22424
  tickSize[0] + directionFactor * axis.offset :
22372
22425
  0 // #4866
@@ -22428,18 +22481,20 @@ class Axis {
22428
22481
  * @function Highcharts.Axis#renderLine
22429
22482
  */
22430
22483
  renderLine() {
22431
- const { chart, offset = 0, options } = this;
22484
+ const { chart, offset = 0, options } = this, verb = this.axisLine ? 'animate' : 'attr';
22432
22485
  this.axisLine || (this.axisLine = chart.renderer.path()
22433
22486
  .addClass('highcharts-axis-line')
22434
- .attr(chart.styledMode ? {} : {
22435
- stroke: options.lineColor,
22436
- 'stroke-width': options.lineWidth,
22437
- zIndex: 7
22438
- })
22487
+ .attr({ zIndex: 7 })
22439
22488
  .clip(this.clippable && offset <= 0 ?
22440
22489
  chart.plotClipOuter :
22441
22490
  void 0)
22442
22491
  .add(this.axisGroup));
22492
+ if (!chart.styledMode) {
22493
+ this.axisLine[verb]({
22494
+ stroke: options.lineColor,
22495
+ 'stroke-width': options.lineWidth
22496
+ });
22497
+ }
22443
22498
  }
22444
22499
  /**
22445
22500
  * Position the axis title.
@@ -22524,9 +22579,9 @@ class Axis {
22524
22579
  * Whether the tick should animate in from last computed position
22525
22580
  */
22526
22581
  renderTick(pos, i, slideIn) {
22527
- const axis = this, isLinked = axis.isLinked, ticks = axis.ticks;
22582
+ const axis = this, ticks = axis.ticks;
22528
22583
  // Linked axes need an extra check to find out if
22529
- if (!isLinked ||
22584
+ if (!axis.linkedParent ||
22530
22585
  (pos >= axis.min && pos <= axis.max) ||
22531
22586
  axis.grid?.isColumn) {
22532
22587
  if (!ticks[pos]) {
@@ -22552,11 +22607,13 @@ class Axis {
22552
22607
  * @emits Highcharts.Axis#event:afterRender
22553
22608
  */
22554
22609
  render() {
22555
- 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);
22610
+ 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);
22556
22611
  let from, to;
22557
22612
  // Reset
22558
22613
  axis.labelEdge.length = 0;
22559
22614
  axis.overlap = false;
22615
+ // Update z-indices
22616
+ this.createGroups();
22560
22617
  // Mark all elements inActive before we go over and mark the active ones
22561
22618
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22562
22619
  objectEach(coll, function (tick) {
@@ -22575,7 +22632,7 @@ class Axis {
22575
22632
  }
22576
22633
  }
22577
22634
  // If the series has data draw the ticks. Else only the line and title
22578
- if (axis.hasData() || isLinked) {
22635
+ if (axis.hasData() || axis.linkedParent) {
22579
22636
  const slideInTicks = axis.chart.hasRendered &&
22580
22637
  axis.old && isNumber(axis.old.min);
22581
22638
  // Minor ticks
@@ -22613,8 +22670,10 @@ class Axis {
22613
22670
  tickmarkOffset)) { // #2248, #4660
22614
22671
  if (!alternateBands[pos]) {
22615
22672
  // Should be imported from PlotLineOrBand.js, but
22616
- // the dependency cycle with axis is a problem
22617
- alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {});
22673
+ // the dependency cycle with axis is a problem. Try
22674
+ // moving it to the PlotLineOrBand axis composition
22675
+ // later.
22676
+ alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {}, 'plotBands');
22618
22677
  }
22619
22678
  from = pos + tickmarkOffset; // #949
22620
22679
  alternateBands[pos].options = {
@@ -22628,17 +22687,13 @@ class Axis {
22628
22687
  }
22629
22688
  });
22630
22689
  }
22631
- // Custom plot lines and bands
22632
- if (!axis._addedPlotLB) { // Only first time
22633
- axis._addedPlotLB = true;
22634
- (options.plotLines || [])
22635
- .concat(options.plotBands || [])
22636
- .forEach(function (plotLineOptions) {
22637
- axis
22638
- .addPlotBandOrLine(plotLineOptions);
22639
- });
22640
- }
22641
22690
  } // End if hasData
22691
+ // Render or update rendering of plot lines and bands
22692
+ for (const coll of ['plotBands', 'plotLines']) {
22693
+ for (const plotItem of this[coll]) {
22694
+ plotItem.render();
22695
+ }
22696
+ }
22642
22697
  // Remove inactive ticks
22643
22698
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22644
22699
  const forDestruction = [], delay = animation.duration, destroyInactiveItems = function () {
@@ -22672,20 +22727,22 @@ class Axis {
22672
22727
  // Set the axis line path
22673
22728
  if (axisLine) {
22674
22729
  axisLine[axisLine.isPlaced ? 'animate' : 'attr']({
22675
- d: this.getLinePath(axisLine.strokeWidth())
22730
+ d: this.getLinePath(axisLine.strokeWidth()),
22731
+ opacity
22676
22732
  });
22677
22733
  axisLine.isPlaced = true;
22678
22734
  // Show or hide the line depending on options.showEmpty
22679
22735
  axisLine[showAxis ? 'show' : 'hide'](showAxis);
22680
22736
  }
22681
22737
  if (axisTitle && showAxis) {
22682
- axisTitle[axisTitle.isNew ? 'attr' : 'animate'](axis.getTitlePosition(axisTitle));
22738
+ axisTitle[axisTitle.isNew ? 'attr' : 'animate']({
22739
+ opacity,
22740
+ ...axis.getTitlePosition(axisTitle)
22741
+ });
22683
22742
  axisTitle.isNew = false;
22684
22743
  }
22685
22744
  // Stacked totals
22686
- if (stackLabelOptions?.enabled && axis.stacking) {
22687
- axis.stacking.renderStackTotals();
22688
- }
22745
+ axis.stacking?.renderStackTotals();
22689
22746
  // First time, save the existing state
22690
22747
  if (!this.old) {
22691
22748
  this.saveOld();
@@ -22701,13 +22758,11 @@ class Axis {
22701
22758
  * @function Highcharts.Axis#redraw
22702
22759
  */
22703
22760
  redraw() {
22704
- if (this.visible) {
22761
+ // If it was initially visible, but dynamically hidden, `this.axisGroup`
22762
+ // exists. Then render with opacity 0.
22763
+ if (this.visible || this.axisGroup) {
22705
22764
  // Render the axis
22706
22765
  this.render();
22707
- // Move plot lines and bands
22708
- this.plotLinesAndBands.forEach(function (plotLine) {
22709
- plotLine.render();
22710
- });
22711
22766
  }
22712
22767
  // Mark associated series as dirty and ready for redraw
22713
22768
  this.series.forEach(function (series) {
@@ -22721,6 +22776,7 @@ class Axis {
22721
22776
  */
22722
22777
  saveOld() {
22723
22778
  this.old = isNumber(this.min) ? {
22779
+ horiz: this.horiz,
22724
22780
  len: this.len,
22725
22781
  max: this.max,
22726
22782
  min: this.min,
@@ -22730,64 +22786,37 @@ class Axis {
22730
22786
  userMin: this.userMin
22731
22787
  } : void 0;
22732
22788
  }
22733
- /**
22734
- * Returns an array of axis properties, that should be untouched during
22735
- * reinitialization.
22736
- *
22737
- * @internal
22738
- * @function Highcharts.Axis#getKeepProps
22739
- */
22740
- getKeepProps() {
22741
- return (this.keepProps || Axis.keepProps);
22742
- }
22743
22789
  /**
22744
22790
  * Destroys an Axis instance. See {@link Axis#remove} for the API endpoint
22745
22791
  * to fully remove the axis.
22746
22792
  *
22747
22793
  * @internal
22748
22794
  * @function Highcharts.Axis#destroy
22749
- *
22750
- * @param {boolean} [keepEvents]
22751
- * Whether to preserve events, used internally in Axis.update.
22752
22795
  */
22753
- destroy(keepEvents) {
22754
- const axis = this, plotLinesAndBands = axis.plotLinesAndBands, eventOptions = this.eventOptions;
22755
- fireEvent(this, 'destroy', { keepEvents: keepEvents });
22796
+ destroy() {
22797
+ fireEvent(this, 'destroy');
22756
22798
  // Remove the events
22757
- if (!keepEvents) {
22758
- removeEvent(axis);
22759
- }
22799
+ removeEvent(this);
22760
22800
  // Destroy collections
22761
- [axis.ticks, axis.minorTicks, axis.alternateBands].forEach(function (coll) {
22762
- destroyObjectProperties(coll);
22763
- });
22764
- if (plotLinesAndBands) {
22765
- let i = plotLinesAndBands.length;
22766
- while (i--) { // #1975
22767
- plotLinesAndBands[i].destroy();
22768
- }
22769
- }
22770
- // Destroy elements
22801
+ [
22802
+ this.ticks,
22803
+ this.minorTicks,
22804
+ this.alternateBands,
22805
+ this.plotBands,
22806
+ this.plotLines,
22807
+ this.plotLinesAndBandsGroups
22808
+ ].forEach(destroyObjectProperties);
22809
+ // Destroy elements and clear reference
22771
22810
  [
22772
22811
  'axisLine', 'axisTitle', 'axisGroup',
22773
22812
  'gridGroup', 'labelGroup', 'cross', 'scrollbar'
22774
- ].forEach(function (prop) {
22775
- if (axis[prop]) {
22776
- axis[prop] = axis[prop].destroy();
22777
- }
22813
+ ].forEach((prop) => {
22814
+ this[prop] = this[prop]?.destroy();
22778
22815
  });
22779
- // Destroy each generated group for plotLines and plotBands
22780
- for (const plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in
22781
- axis.plotLinesAndBandsGroups[plotGroup] =
22782
- axis.plotLinesAndBandsGroups[plotGroup].destroy();
22783
- }
22784
22816
  // Delete all properties and fall back to the prototype.
22785
- objectEach(axis, function (_val, key) {
22786
- if (axis.getKeepProps().indexOf(key) === -1) {
22787
- delete axis[key];
22788
- }
22817
+ objectEach(this, (_val, key) => {
22818
+ delete this[key];
22789
22819
  });
22790
- this.eventOptions = eventOptions;
22791
22820
  }
22792
22821
  /**
22793
22822
  * Internal function to draw a crosshair.
@@ -22881,25 +22910,21 @@ class Axis {
22881
22910
  void 0 :
22882
22911
  chart.plotClipInner)
22883
22912
  .add();
22884
- // Presentational attributes
22885
- if (!chart.styledMode) {
22886
- cross.attr({
22887
- stroke: options.color ||
22888
- (categorized ?
22889
- Axis_color(
22890
- // eslint-disable-next-line max-len
22891
- 'var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22892
- 'var(--highcharts-neutral-color-20)'),
22893
- 'stroke-width': (options.width ?? 1)
22894
- }).css({
22895
- 'pointer-events': 'none'
22896
- });
22897
- if (options.dashStyle) {
22898
- cross.attr({
22899
- dashstyle: options.dashStyle
22900
- });
22901
- }
22902
- }
22913
+ }
22914
+ // Presentational attributes
22915
+ if (!chart.styledMode) {
22916
+ cross
22917
+ .attr({
22918
+ stroke: options.color || (categorized ?
22919
+ Axis_color('var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22920
+ 'var(--highcharts-neutral-color-20)'),
22921
+ 'stroke-width': options.width ?? 1,
22922
+ // Dash style must be after stroke-width
22923
+ dashstyle: options.dashStyle || 'Solid'
22924
+ })
22925
+ .css({
22926
+ 'pointer-events': 'none'
22927
+ });
22903
22928
  }
22904
22929
  cross
22905
22930
  .show()
@@ -22909,9 +22934,7 @@ class Axis {
22909
22934
  'stroke-width': this.transA
22910
22935
  });
22911
22936
  }
22912
- if (this.cross) {
22913
- this.cross.e = e;
22914
- }
22937
+ cross.e = e;
22915
22938
  },
22916
22939
  // Only use delay if the crosshair is currently hidden
22917
22940
  (!graphic || graphic.attr('visibility') === 'hidden') ?
@@ -22950,13 +22973,14 @@ class Axis {
22950
22973
  * operations on the chart, it is a good idea to set redraw to false and
22951
22974
  * call {@link Chart#redraw} after.
22952
22975
  */
22953
- update(options, redraw) {
22976
+ update(options = {}, redraw = true) {
22954
22977
  const chart = this.chart;
22978
+ fireEvent(this, 'update', { options });
22955
22979
  options = merge(this.userOptions, options);
22956
- this.destroy(true);
22980
+ this.isDirty = this.forceRedraw = true;
22957
22981
  this.init(chart, options);
22958
22982
  chart.isDirtyBox = true;
22959
- if (redraw ?? true) {
22983
+ if (redraw) {
22960
22984
  chart.redraw();
22961
22985
  }
22962
22986
  }
@@ -23025,26 +23049,6 @@ class Axis {
23025
23049
  this.update({ categories: categories }, redraw);
23026
23050
  }
23027
23051
  }
23028
- /* *
23029
- *
23030
- * Static Properties
23031
- *
23032
- * */
23033
- /**
23034
- * Properties to survive after destroy, needed for Axis.update (#4317,
23035
- * #5773, #5881).
23036
- * @internal
23037
- */
23038
- Axis.keepProps = [
23039
- 'coll',
23040
- 'extKey',
23041
- 'hcEvents',
23042
- 'len',
23043
- 'names',
23044
- 'series',
23045
- 'userMax',
23046
- 'userMin'
23047
- ];
23048
23052
  /* *
23049
23053
  *
23050
23054
  * Default Export
@@ -23315,6 +23319,8 @@ Axis.keepProps = [
23315
23319
  * */
23316
23320
 
23317
23321
 
23322
+ const { composed: DateTimeAxis_composed } = Core_Globals;
23323
+
23318
23324
 
23319
23325
  /* *
23320
23326
  *
@@ -23338,8 +23344,7 @@ var DateTimeAxis;
23338
23344
  * @internal
23339
23345
  */
23340
23346
  function compose(AxisClass) {
23341
- if (!AxisClass.keepProps.includes('dateTime')) {
23342
- AxisClass.keepProps.push('dateTime');
23347
+ if (pushUnique(DateTimeAxis_composed, 'Axis.DateTime')) {
23343
23348
  const axisProto = AxisClass.prototype;
23344
23349
  axisProto.getTimeTicks = getTimeTicks;
23345
23350
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
@@ -23501,6 +23506,8 @@ var DateTimeAxis;
23501
23506
  * */
23502
23507
 
23503
23508
 
23509
+ const { composed: LogarithmicAxis_composed } = Core_Globals;
23510
+
23504
23511
  /* *
23505
23512
  *
23506
23513
  * Class
@@ -23524,8 +23531,7 @@ var LogarithmicAxis;
23524
23531
  * @internal
23525
23532
  */
23526
23533
  function compose(AxisClass) {
23527
- if (!AxisClass.keepProps.includes('logarithmic')) {
23528
- AxisClass.keepProps.push('logarithmic');
23534
+ if (pushUnique(LogarithmicAxis_composed, 'Axis.Logarithmic')) {
23529
23535
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
23530
23536
  addEvent(AxisClass, 'afterInit', onAfterInit);
23531
23537
  }
@@ -23734,24 +23740,7 @@ var PlotLineOrBandAxis;
23734
23740
  * Functions
23735
23741
  *
23736
23742
  * */
23737
- /**
23738
- * Add a plot band after render time.
23739
- *
23740
- * @sample highcharts/members/axis-addplotband/
23741
- * Toggle the plot band from a button
23742
- *
23743
- * @function Highcharts.Axis#addPlotBand
23744
- *
23745
- * @param {Highcharts.AxisPlotBandsOptions} options
23746
- * A configuration object for the plot band, as defined in
23747
- * [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).
23748
- *
23749
- * @return {Highcharts.PlotLineOrBand|undefined}
23750
- * The added plot band, or `undefined` if the options are not valid.
23751
- */
23752
- function addPlotBand(options) {
23753
- return this.addPlotBandOrLine(options, 'plotBands');
23754
- }
23743
+ const getAdderFunction = (coll) =>
23755
23744
  /**
23756
23745
  * Add a plot band or plot line after render time. Called from
23757
23746
  * addPlotBand and addPlotLine internally.
@@ -23759,65 +23748,85 @@ var PlotLineOrBandAxis;
23759
23748
  * @internal
23760
23749
  * @function Highcharts.Axis#addPlotBandOrLine
23761
23750
  * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options
23762
- * The plotBand or plotLine configuration object.
23751
+ * The `plotBand` or `plotLine` configuration object.
23763
23752
  */
23764
- function addPlotBandOrLine(options, coll) {
23765
- const userOptions = this.userOptions;
23766
- let obj = new PlotLineOrBandClass(this, options);
23753
+ function addPlotLineOrBand(options) {
23754
+ var _a;
23755
+ const plotItem = new PlotLineOrBandClass(this, options, coll);
23767
23756
  if (this.visible) {
23768
- obj = obj.render();
23769
- }
23770
- if (obj) { // #2189
23771
- if (!this._addedPlotLB) {
23772
- this._addedPlotLB = true;
23773
- (userOptions.plotLines || [])
23774
- .concat(userOptions.plotBands || [])
23775
- .forEach((plotLineOptions) => {
23776
- this.addPlotBandOrLine(plotLineOptions);
23777
- });
23778
- }
23779
- // Add it to the user options for exporting and Axis.update
23780
- if (coll) {
23781
- // Workaround Microsoft/TypeScript issue #32693
23782
- const updatedOptions = (userOptions[coll] || []);
23783
- updatedOptions.push(options);
23784
- userOptions[coll] = updatedOptions;
23785
- }
23786
- this.plotLinesAndBands.push(obj);
23757
+ plotItem.render();
23787
23758
  }
23788
- return obj;
23789
- }
23790
- /**
23791
- * Add a plot line after render time.
23792
- *
23793
- * @sample highcharts/members/axis-addplotline/
23794
- * Toggle the plot line from a button
23795
- *
23796
- * @function Highcharts.Axis#addPlotLine
23797
- *
23798
- * @param {Highcharts.AxisPlotLinesOptions} options
23799
- * A configuration object for the plot line, as defined in
23800
- * [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).
23801
- *
23802
- * @return {Highcharts.PlotLineOrBand|undefined}
23803
- * The added plot line, or `undefined` if the options are not valid.
23804
- */
23805
- function addPlotLine(options) {
23806
- return this.addPlotBandOrLine(options, 'plotLines');
23807
- }
23759
+ (_a = this.options)[coll] || (_a[coll] = this.userOptions[coll] = []);
23760
+ this.options[coll].push(options);
23761
+ this[coll].push(plotItem);
23762
+ return plotItem;
23763
+ };
23808
23764
  /** @internal */
23809
23765
  function compose(PlotLineOrBandType, AxisClass) {
23810
23766
  const axisProto = AxisClass.prototype;
23811
23767
  if (!axisProto.addPlotBand) {
23812
23768
  PlotLineOrBandClass = PlotLineOrBandType;
23813
23769
  extend(axisProto, {
23814
- addPlotBand,
23815
- addPlotLine,
23816
- addPlotBandOrLine,
23770
+ addPlotBand: getAdderFunction('plotBands'),
23771
+ addPlotLine: getAdderFunction('plotLines'),
23817
23772
  getPlotBandPath,
23818
- removePlotBand,
23819
- removePlotLine,
23820
- removePlotBandOrLine
23773
+ removePlotBand: removePlotBandOrLine,
23774
+ removePlotLine: removePlotBandOrLine
23775
+ });
23776
+ addEvent(AxisClass, 'afterInit', function () {
23777
+ // First time only, not on Axis.update()
23778
+ if (!this.plotBands) {
23779
+ // Placeholder for plotlines and plotbands groups
23780
+ this.plotLinesAndBandsGroups = {};
23781
+ // Plot lines and bands from options
23782
+ for (const coll of ['plotBands', 'plotLines']) {
23783
+ this[coll] = [];
23784
+ for (const pOptions of splat(this.options[coll] || [])) {
23785
+ this[coll].push(new PlotLineOrBandClass(this, pOptions, coll));
23786
+ }
23787
+ }
23788
+ }
23789
+ });
23790
+ // Update plot bands and lines one to one
23791
+ addEvent(AxisClass, 'update', function ({ options }) {
23792
+ for (const coll of ['plotBands', 'plotLines']) {
23793
+ // Check if we have new options to process, otherwise do
23794
+ // nothing with existing plot lines and bands
23795
+ if (options[coll]) {
23796
+ const plotItems = this[coll];
23797
+ splat(options[coll]).forEach((pOptions = {}, i) => {
23798
+ // Match by id
23799
+ let pItem;
23800
+ if (pOptions?.id) {
23801
+ pItem = plotItems.find((p) => p.id === pOptions.id);
23802
+ }
23803
+ // Match by index
23804
+ pItem || (pItem = plotItems[i]);
23805
+ // Update
23806
+ if (pItem) {
23807
+ pItem.update(pOptions, false);
23808
+ options[coll][i] = pItem.options;
23809
+ // Add
23810
+ }
23811
+ else {
23812
+ pItem = this[coll === 'plotBands' ?
23813
+ 'addPlotBand' :
23814
+ 'addPlotLine'](pOptions);
23815
+ }
23816
+ pItem.isActive = true;
23817
+ });
23818
+ // Remove inactive items from end to start
23819
+ let i = plotItems.length;
23820
+ while (i--) {
23821
+ if (!plotItems[i].isActive) {
23822
+ plotItems[i].remove();
23823
+ }
23824
+ else {
23825
+ delete plotItems[i].isActive;
23826
+ }
23827
+ }
23828
+ }
23829
+ }
23821
23830
  });
23822
23831
  }
23823
23832
  return AxisClass;
@@ -23888,23 +23897,6 @@ var PlotLineOrBandAxis;
23888
23897
  }
23889
23898
  return result;
23890
23899
  }
23891
- /**
23892
- * Remove a plot band by its id.
23893
- *
23894
- * @sample highcharts/members/axis-removeplotband/
23895
- * Remove plot band by id
23896
- * @sample highcharts/members/axis-addplotband/
23897
- * Toggle the plot band from a button
23898
- *
23899
- * @function Highcharts.Axis#removePlotBand
23900
- *
23901
- * @param {string} id
23902
- * The plot band's `id` as given in the original configuration
23903
- * object or in the `addPlotBand` option.
23904
- */
23905
- function removePlotBand(id) {
23906
- this.removePlotBandOrLine(id);
23907
- }
23908
23900
  /**
23909
23901
  * Remove a plot band or plot line from the chart by id. Called
23910
23902
  * internally from `removePlotBand` and `removePlotLine`.
@@ -23912,45 +23904,7 @@ var PlotLineOrBandAxis;
23912
23904
  * @function Highcharts.Axis#removePlotBandOrLine
23913
23905
  */
23914
23906
  function removePlotBandOrLine(id) {
23915
- const plotLinesAndBands = this.plotLinesAndBands, options = this.options, userOptions = this.userOptions;
23916
- if (plotLinesAndBands) { // #15639
23917
- let i = plotLinesAndBands.length;
23918
- while (i--) {
23919
- if (plotLinesAndBands[i].id === id) {
23920
- plotLinesAndBands[i].destroy();
23921
- }
23922
- }
23923
- ([
23924
- options.plotLines || [],
23925
- userOptions.plotLines || [],
23926
- options.plotBands || [],
23927
- userOptions.plotBands || []
23928
- ]).forEach(function (arr) {
23929
- i = arr.length;
23930
- while (i--) {
23931
- if (arr[i]?.id === id) {
23932
- erase(arr, arr[i]);
23933
- }
23934
- }
23935
- });
23936
- }
23937
- }
23938
- /**
23939
- * Remove a plot line by its id.
23940
- *
23941
- * @sample highcharts/xaxis/plotlines-id/
23942
- * Remove plot line by id
23943
- * @sample highcharts/members/axis-addplotline/
23944
- * Toggle the plot line from a button
23945
- *
23946
- * @function Highcharts.Axis#removePlotLine
23947
- *
23948
- * @param {string} id
23949
- * The plot line's `id` as given in the original configuration
23950
- * object or in the `addPlotLine` option.
23951
- */
23952
- function removePlotLine(id) {
23953
- this.removePlotBandOrLine(id);
23907
+ [...this.plotBands || [], ...this.plotLines || []].find((plotItem) => plotItem.id === id)?.remove();
23954
23908
  }
23955
23909
  })(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));
23956
23910
  /* *
@@ -24014,9 +23968,11 @@ class PlotLineOrBand {
24014
23968
  this.labelCollectors.push(() => {
24015
23969
  const labels = [];
24016
23970
  for (const axis of this.axes) {
24017
- for (const { label, options } of axis.plotLinesAndBands) {
24018
- if (label && !options?.label?.allowOverlap) {
24019
- labels.push(label);
23971
+ for (const coll of ['plotBands', 'plotLines']) {
23972
+ for (const { label, options } of axis[coll]) {
23973
+ if (label && !options?.label?.allowOverlap) {
23974
+ labels.push(label);
23975
+ }
24020
23976
  }
24021
23977
  }
24022
23978
  }
@@ -24030,7 +23986,7 @@ class PlotLineOrBand {
24030
23986
  * Constructor
24031
23987
  *
24032
23988
  * */
24033
- constructor(axis, options) {
23989
+ constructor(axis, options, coll) {
24034
23990
  /**
24035
23991
  * Related axis.
24036
23992
  *
@@ -24046,6 +24002,7 @@ class PlotLineOrBand {
24046
24002
  */
24047
24003
  this.options = options;
24048
24004
  this.id = options.id;
24005
+ this.coll = coll;
24049
24006
  }
24050
24007
  /* *
24051
24008
  *
@@ -24061,43 +24018,28 @@ class PlotLineOrBand {
24061
24018
  */
24062
24019
  render() {
24063
24020
  fireEvent(this, 'render');
24064
- const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, time } = axis.chart, groupAttribs = {},
24021
+ const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, styledMode, time } = axis.chart,
24065
24022
  // These properties only exist on either band or line
24066
24023
  to = time.parse(options.to), from = time.parse(options.from), value = time.parse(options.value), borderWidth = options.borderWidth;
24067
- let optionsLabel = options.label, { label, svgElem } = this, path = [], group;
24068
- const isBand = defined(from) && defined(to), isLine = defined(value), isNew = !svgElem, attribs = {
24069
- 'class': 'highcharts-plot-' + (isBand ? 'band ' : 'line ') +
24070
- (options.className || '')
24071
- };
24072
- let groupName = isBand ? 'bands' : 'lines';
24073
- // Set the presentational attributes
24074
- if (!chart.styledMode) {
24075
- if (isLine) {
24076
- attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24077
- attribs['stroke-width'] =
24078
- options.width ?? 1;
24079
- if (options.dashStyle) {
24080
- attribs.dashstyle = options.dashStyle;
24081
- }
24082
- }
24083
- else if (isBand) { // Plot band
24084
- attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24085
- if (borderWidth) {
24086
- attribs.stroke = options.borderColor;
24087
- attribs['stroke-width'] = borderWidth;
24088
- }
24089
- }
24024
+ let optionsLabel = options.label, { label, svgElem } = this, group;
24025
+ const isBand = this.coll === 'plotBands', shortKey = isBand ? 'band' : 'line', groupName = `${shortKey}s-${zIndex}`, isNew = !svgElem, attribs = {
24026
+ 'class': `highcharts-plot-${shortKey} ${options.className || ''}`
24027
+ }, strokeWidth = isBand ?
24028
+ (borderWidth || 0) :
24029
+ (options.width ?? 1);
24030
+ // Set the stroke width before the path is calculated
24031
+ if (!styledMode) {
24032
+ attribs['stroke-width'] = strokeWidth;
24090
24033
  }
24091
24034
  // Grouping and zIndex
24092
- groupAttribs.zIndex = zIndex;
24093
- groupName += '-' + zIndex;
24094
24035
  group = axis.plotLinesAndBandsGroups[groupName];
24095
24036
  if (!group) {
24096
24037
  axis.plotLinesAndBandsGroups[groupName] = group =
24097
24038
  renderer.g('plot-' + groupName)
24098
24039
  .clip(chart.plotClipOuter)
24099
- .attr(groupAttribs).add();
24040
+ .attr({ zIndex }).add();
24100
24041
  }
24042
+ group[isNew ? 'attr' : 'animate']({ opacity: +axis.visible });
24101
24043
  // Create the path
24102
24044
  if (!svgElem) {
24103
24045
  /**
@@ -24108,40 +24050,58 @@ class PlotLineOrBand {
24108
24050
  */
24109
24051
  this.svgElem = svgElem = renderer
24110
24052
  .path()
24111
- .attr(attribs)
24112
- .add(group);
24053
+ .attr(attribs);
24054
+ }
24055
+ // Add it to the correct index while allowing dynamic z-index update
24056
+ if (svgElem.parentGroup !== group) {
24057
+ svgElem.add(group);
24113
24058
  }
24114
24059
  // Set the path or return
24115
- if (defined(value)) { // Plot line
24060
+ let path;
24061
+ if (!isBand && defined(value)) { // Plot line
24116
24062
  path = axis.getPlotLinePath({
24117
24063
  value: logarithmic?.log2lin(value) ?? value,
24118
24064
  lineWidth: svgElem.strokeWidth(),
24119
24065
  acrossPanes: options.acrossPanes
24120
24066
  });
24121
24067
  }
24122
- else if (defined(from) && defined(to)) { // Plot band
24068
+ else if (isBand && defined(from) && defined(to)) { // Plot band
24123
24069
  path = axis.getPlotBandPath(logarithmic?.log2lin(from) ?? from, logarithmic?.log2lin(to) ?? to, options);
24124
24070
  }
24125
- else {
24126
- return;
24071
+ if (path) {
24072
+ attribs.d = path;
24073
+ }
24074
+ // Apply the styling
24075
+ if (!styledMode) {
24076
+ if (isBand) { // Plot band
24077
+ attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24078
+ if (borderWidth) {
24079
+ attribs.stroke = options.borderColor;
24080
+ }
24081
+ }
24082
+ else {
24083
+ attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24084
+ if (options.dashStyle) {
24085
+ attribs.dashstyle = options.dashStyle;
24086
+ }
24087
+ }
24127
24088
  }
24128
24089
  // Common for lines and bands. Add events only if they were not added
24129
24090
  // before.
24130
- if (!this.eventsAdded && events) {
24091
+ if (isNew && events) {
24131
24092
  objectEach(events, (_event, eventType) => {
24132
24093
  svgElem?.on(eventType, (e) => {
24133
24094
  events[eventType].apply(this, [e, this]);
24134
24095
  });
24135
24096
  });
24136
- this.eventsAdded = true;
24137
24097
  }
24138
24098
  if ((isNew || !svgElem.d) && path?.length) {
24139
- svgElem.attr({ d: path });
24099
+ svgElem.attr(attribs);
24140
24100
  }
24141
24101
  else if (svgElem) {
24142
24102
  if (path) {
24143
24103
  svgElem.show();
24144
- svgElem.animate({ d: path });
24104
+ svgElem.animate(attribs);
24145
24105
  }
24146
24106
  else if (svgElem.d) {
24147
24107
  svgElem.hide();
@@ -24181,7 +24141,7 @@ class PlotLineOrBand {
24181
24141
  * @function Highcharts.PlotLineOrBand#renderLabel
24182
24142
  */
24183
24143
  renderLabel(optionsLabel, path, isBand, zIndex) {
24184
- const plotLine = this, axis = plotLine.axis, renderer = axis.chart.renderer, inside = optionsLabel.inside;
24144
+ const plotLine = this, axis = plotLine.axis, chart = axis.chart, renderer = chart.renderer, inside = optionsLabel.inside;
24185
24145
  let label = plotLine.label;
24186
24146
  // Add the SVG element
24187
24147
  if (!label) {
@@ -24192,25 +24152,31 @@ class PlotLineOrBand {
24192
24152
  * @type {Highcharts.SVGElement}
24193
24153
  */
24194
24154
  plotLine.label = label = renderer
24195
- .text(this.getLabelText(optionsLabel), 0, 0, optionsLabel.useHTML)
24196
- .attr({
24197
- align: optionsLabel.textAlign || optionsLabel.align,
24198
- rotation: optionsLabel.rotation,
24199
- 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24200
- '-label ' + (optionsLabel.className || ''),
24201
- zIndex
24202
- });
24203
- if (!axis.chart.styledMode) {
24204
- label.css(merge({
24205
- // To allow theming, and in lack of a general place to set
24206
- // default options for plot lines and bands, default to the
24207
- // title color. If we expose the palette, we should use that
24208
- // instead.
24209
- color: axis.chart.options.title?.style?.color,
24210
- fontSize: '0.8em',
24211
- textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24212
- }, optionsLabel.style));
24213
- }
24155
+ .text('', 0, 0, optionsLabel.useHTML)
24156
+ .attr({ zIndex });
24157
+ }
24158
+ label
24159
+ .attr({
24160
+ text: this.getLabelText(optionsLabel),
24161
+ align: optionsLabel.textAlign || optionsLabel.align,
24162
+ 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24163
+ '-label ' + (optionsLabel.className || '')
24164
+ })[label.placed ? 'animate' : 'attr']({
24165
+ opacity: 1,
24166
+ rotation: optionsLabel.rotation
24167
+ });
24168
+ if (!chart.styledMode) {
24169
+ label.css(merge({
24170
+ // To allow theming, and in lack of a general place to set
24171
+ // default options for plot lines and bands, default to the
24172
+ // title color. If we expose the palette, we should use that
24173
+ // instead.
24174
+ color: chart.options.title?.style?.color,
24175
+ fontSize: '0.8em',
24176
+ textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24177
+ }, optionsLabel.style));
24178
+ }
24179
+ if (!label.added) {
24214
24180
  label.add();
24215
24181
  }
24216
24182
  // Get the bounding box and align the label
@@ -24234,12 +24200,31 @@ class PlotLineOrBand {
24234
24200
  axis.height - (label.alignAttr.y -
24235
24201
  axis.top) : (optionsLabel.clip ?
24236
24202
  (axis.width + axis.left) :
24237
- axis.chart.chartWidth) - label.alignAttr.x) :
24203
+ chart.chartWidth) - label.alignAttr.x) :
24238
24204
  bBoxWidth)) + 'px'
24239
24205
  });
24240
24206
  }
24207
+ else if (label.textWidth) {
24208
+ label.css({ width: 'auto' });
24209
+ }
24241
24210
  label.show(true);
24242
24211
  }
24212
+ /**
24213
+ * Update the plot line or band with new options.
24214
+ *
24215
+ * @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} options
24216
+ * The new options to apply
24217
+ * @param {boolean} [redraw=true]
24218
+ * Whether to redraw the plot guide immediately
24219
+ *
24220
+ * @function Highcharts.PlotLineOrBand#update
24221
+ */
24222
+ update(options, redraw = true) {
24223
+ merge(true, this.options, options);
24224
+ if (redraw) {
24225
+ this.render();
24226
+ }
24227
+ }
24243
24228
  /**
24244
24229
  * Get label's text content.
24245
24230
  * @internal
@@ -24251,15 +24236,22 @@ class PlotLineOrBand {
24251
24236
  optionsLabel.text;
24252
24237
  }
24253
24238
  /**
24254
- * Remove the plot line or band.
24255
- *
24256
- * @function Highcharts.PlotLineOrBand#destroy
24239
+ * Destroy the item's elements
24257
24240
  */
24258
24241
  destroy() {
24242
+ destroyObjectProperties(this, this.axis);
24243
+ }
24244
+ /**
24245
+ * Remove the plot line or band and destroy its elements.
24246
+ *
24247
+ * @function Highcharts.PlotLineOrBand#remove
24248
+ */
24249
+ remove() {
24259
24250
  // Remove it from the lookup
24260
- erase(this.axis.plotLinesAndBands, this);
24261
- delete this.axis;
24262
- destroyObjectProperties(this);
24251
+ erase(this.axis[this.coll], this);
24252
+ // Remove from options
24253
+ erase(this.axis.options[this.coll] || [], this.options);
24254
+ this.destroy();
24263
24255
  }
24264
24256
  }
24265
24257
  /* *
@@ -24306,10 +24298,24 @@ class PlotLineOrBand {
24306
24298
  * In styled mode, the plot bands are styled by the `.highcharts-plot-band`
24307
24299
  * class in addition to the `className` option.
24308
24300
  *
24301
+ * When doing `Chart.update()` or `Axis.update()`, the plot bands are updated
24302
+ * by index or id. The following merging rules apply:
24303
+ * - If `plotBands` are not defined in the new options, all existing plot bands
24304
+ * are kept.
24305
+ * - If `plotBands` are defined without ids, the existing plot bands are updated
24306
+ * by index. If the new array has fewer plot bands, the remaining existing
24307
+ * plot bands are removed. If the new array has more plot bands, the extra
24308
+ * ones are added. An empty array removes all existing plot bands.
24309
+ * - If `plotBands` are defined with ids, the existing plot bands are matched
24310
+ * by id, and remaining unmatched existing plot bands are removed.
24311
+ *
24309
24312
  * @productdesc {highcharts}
24310
24313
  * In a gauge, a plot band on the Y axis (value axis) will stretch along the
24311
24314
  * perimeter of the gauge.
24312
24315
  *
24316
+ * @sample {highcharts} highcharts/xaxis/plotbands-color/
24317
+ * Basic plot band
24318
+ *
24313
24319
  * @type {Array<*>}
24314
24320
  * @product highcharts highstock gantt
24315
24321
  * @apioption xAxis.plotBands
@@ -24601,12 +24607,23 @@ class PlotLineOrBand {
24601
24607
  * In styled mode, the plot lines are styled by the
24602
24608
  * `.highcharts-plot-line` class in addition to the `className` option.
24603
24609
  *
24610
+ * When doing `Chart.update()` or `Axis.update()`, the plot lines are updated
24611
+ * by index or id. The following merging rules apply:
24612
+ * - If `plotLines` are not defined in the new options, all existing plot lines
24613
+ * are kept.
24614
+ * - If `plotLines` are defined without ids, the existing plot lines are updated
24615
+ * by index. If the new array has fewer plot lines, the remaining existing
24616
+ * plot lines are removed. If the new array has more plot lines, the extra
24617
+ * ones are added. An empty array removes all existing plot lines.
24618
+ * - If `plotLines` are defined with ids, the existing plot lines are matched
24619
+ * by id, and remaining unmatched existing plot lines are removed.
24620
+ *
24604
24621
  * @type {Array<*>}
24605
24622
  * @product highcharts highstock gantt
24606
- * @sample {highcharts} highcharts/xaxis/plotlines-color/
24607
- * Basic plot line
24608
- * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24609
- * Solid gauge plot line
24623
+ * @sample {highcharts} highcharts/xaxis/plotlines-color/
24624
+ * Basic plot line
24625
+ * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24626
+ * Solid gauge plot line
24610
24627
  * @apioption xAxis.plotLines
24611
24628
  */
24612
24629
  /**
@@ -25115,14 +25132,11 @@ class Tooltip {
25115
25132
  */
25116
25133
  destroy() {
25117
25134
  // Destroy and clear local variables
25118
- if (this.label) {
25119
- this.label = this.label.destroy();
25120
- }
25135
+ this.tracker = this.tracker?.destroy();
25136
+ this.label = this.label?.destroy();
25121
25137
  if (this.split) {
25122
25138
  this.cleanSplit(true);
25123
- if (this.tt) {
25124
- this.tt = this.tt.destroy();
25125
- }
25139
+ this.tt = this.tt?.destroy();
25126
25140
  }
25127
25141
  if (this.renderer) {
25128
25142
  this.renderer = this.renderer.destroy();
@@ -25652,6 +25666,8 @@ class Tooltip {
25652
25666
  !this.isHidden &&
25653
25667
  !options.fixed &&
25654
25668
  options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
25669
+ this.anchorX = anchorX;
25670
+ this.anchorY = anchorY;
25655
25671
  if (!skipAnchor) {
25656
25672
  attr.anchorX = anchorX;
25657
25673
  attr.anchorY = anchorY;
@@ -26098,45 +26114,37 @@ class Tooltip {
26098
26114
  */
26099
26115
  drawTracker() {
26100
26116
  const tooltip = this;
26101
- if (!this.shouldStickOnContact()) {
26102
- if (tooltip.tracker) {
26103
- tooltip.tracker = tooltip.tracker.destroy();
26104
- }
26117
+ if (!tooltip.shouldStickOnContact()) {
26118
+ tooltip.tracker = tooltip.tracker?.destroy();
26105
26119
  return;
26106
26120
  }
26107
- const chart = tooltip.chart;
26108
- const label = tooltip.label;
26109
- const points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint;
26110
- if (!label || !points) {
26121
+ const { chart, label } = tooltip, points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint,
26122
+ // Split tooltips render into a plain group, with no box to trace
26123
+ box = label?.box;
26124
+ if (!box || !points) {
26111
26125
  return;
26112
26126
  }
26113
- const box = {
26114
- x: 0,
26115
- y: 0,
26116
- width: 0,
26117
- height: 0
26118
- };
26119
- // Combine anchor and tooltip
26120
- const anchorPos = this.getAnchor(points);
26121
- const labelBBox = label.getBBox();
26122
- anchorPos[0] += chart.plotLeft - (label.translateX || 0);
26123
- anchorPos[1] += chart.plotTop - (label.translateY || 0);
26124
- // When the mouse pointer is between the anchor point and the label,
26125
- // the label should stick.
26126
- box.x = Math.min(0, anchorPos[0]);
26127
- box.y = Math.min(0, anchorPos[1]);
26128
- box.width = (anchorPos[0] < 0 ?
26129
- Math.max(Math.abs(anchorPos[0]), labelBBox.width - anchorPos[0]) :
26130
- Math.max(Math.abs(anchorPos[0]), labelBBox.width));
26131
- box.height = (anchorPos[1] < 0 ?
26132
- Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :
26133
- Math.max(Math.abs(anchorPos[1]), labelBBox.height));
26134
- if (tooltip.tracker) {
26135
- tooltip.tracker.attr(box);
26136
- }
26137
- else {
26127
+ const { height, r, width, x, y } = box;
26128
+ let { anchorX, anchorY } = box;
26129
+ // Shared tooltips clear the label anchor (#22295), so fall back to the
26130
+ // anchor the position was calculated from
26131
+ if (!isNumber(anchorX)) {
26132
+ anchorX = (tooltip.anchorX || 0) - (label.translateX || 0);
26133
+ anchorY = (tooltip.anchorY || 0) - (label.translateY || 0);
26134
+ }
26135
+ // Match the tooltip shape, but stretch the connector all the way to the
26136
+ // point, so that the pointer can travel between the two without losing
26137
+ // contact. Only the side facing the anchor overshoots the box, so the
26138
+ // largest of the four distances is the one to cover. (#24255)
26139
+ const d = label.renderer.symbols.callout(x, y, width, height, {
26140
+ anchorX,
26141
+ anchorY,
26142
+ arrowLength: Math.max(anchorX - width, -anchorX, anchorY - height, -anchorY, 0),
26143
+ r
26144
+ });
26145
+ if (!tooltip.tracker) {
26138
26146
  tooltip.tracker = label.renderer
26139
- .rect(box)
26147
+ .path()
26140
26148
  .addClass('highcharts-tracker')
26141
26149
  .add(label);
26142
26150
  // For a rapid move going outside of the elements keeping the
@@ -26144,10 +26152,14 @@ class Tooltip {
26144
26152
  addEvent(tooltip.tracker.element, 'mouseenter', () => clearTimeouts(tooltip));
26145
26153
  if (!chart.styledMode) {
26146
26154
  tooltip.tracker.attr({
26147
- fill: 'rgba(0,0,0,0)'
26155
+ fill: 'rgba(0,0,0,0)',
26156
+ stroke: 'rgba(0,0,0,0)',
26157
+ 'stroke-linejoin': 'round',
26158
+ 'stroke-width': 10
26148
26159
  });
26149
26160
  }
26150
26161
  }
26162
+ tooltip.tracker.attr({ d });
26151
26163
  }
26152
26164
  /** @internal */
26153
26165
  styledModeFormat(formatString) {
@@ -27094,7 +27106,8 @@ class Point {
27094
27106
  /**
27095
27107
  * Set a value in an object, on the property defined by key. The key
27096
27108
  * supports nested properties using dot notation. The function modifies the
27097
- * input object and does not make a copy.
27109
+ * input object and does not make a copy. Paths containing `__proto__` or
27110
+ * `constructor` are ignored.
27098
27111
  *
27099
27112
  * @function Highcharts.Point#setNestedProperty<T>
27100
27113
  *
@@ -27112,11 +27125,18 @@ class Point {
27112
27125
  */
27113
27126
  setNestedProperty(object, value, key) {
27114
27127
  const nestedKeys = key.split('.');
27128
+ // Reject nested keys that would allow prototype pollution
27129
+ if (nestedKeys.some((nestedKey) => (nestedKey === '__proto__' || nestedKey === 'constructor'))) {
27130
+ return object;
27131
+ }
27115
27132
  nestedKeys.reduce(function (result, key, i, arr) {
27116
27133
  const isLastKey = arr.length - 1 === i;
27117
27134
  result[key] = (isLastKey ?
27118
27135
  value :
27119
- isObject(result[key], true) ?
27136
+ // Inherited objects are shared with everything else on
27137
+ // that prototype, so start a fresh one instead
27138
+ isObject(result[key], true) &&
27139
+ Object.hasOwnProperty.call(result, key) ?
27120
27140
  result[key] :
27121
27141
  {});
27122
27142
  return result[key];
@@ -27198,15 +27218,10 @@ class Point {
27198
27218
  */
27199
27219
  function update() {
27200
27220
  point.applyOptions(options);
27201
- // Update visuals, #4146
27202
- // Handle mock graphic elements for a11y, #12718
27203
- const hasMockGraphic = graphic && point.hasMockGraphic, index = point.index;
27204
- const shouldDestroyGraphic = point.y === null ?
27205
- !hasMockGraphic :
27206
- hasMockGraphic;
27207
- if (graphic && shouldDestroyGraphic) {
27221
+ // Update visuals, #4146. The a11y mock graphic is exempt, it is
27222
+ // maintained by the accessibility module, #12718.
27223
+ if (graphic && point.y === null && !point.hasMockGraphic) {
27208
27224
  point.graphic = graphic.destroy();
27209
- delete point.hasMockGraphic;
27210
27225
  }
27211
27226
  if (isObject(options, true)) {
27212
27227
  // Destroy so we can get new elements
@@ -27221,7 +27236,7 @@ class Point {
27221
27236
  point.dataLabel = point.dataLabel.destroy(); // #2468
27222
27237
  }
27223
27238
  }
27224
- const pointOptions = point.optionsToObject(options);
27239
+ const index = point.index, pointOptions = point.optionsToObject(options);
27225
27240
  if (!series.hasProcessedDataTable) {
27226
27241
  // Record changes in the data table (#24451)
27227
27242
  series.dataTable.setRow(pointOptions, index);
@@ -29225,19 +29240,18 @@ class Pointer {
29225
29240
  if (hasMoved ?? true) {
29226
29241
  this.pinch(e);
29227
29242
  }
29243
+ // If inside, capture touch-drag and display tooltip. If not
29244
+ // inside, allow dragging the finger to scroll the page
29245
+ if (this.hasPointerCapture && // #25095
29246
+ e.type === 'touchmove' &&
29247
+ !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29248
+ e.preventDefault();
29249
+ }
29228
29250
  }
29229
29251
  else if (start) {
29230
29252
  // Hide the tooltip on touching outside the plot area (#1203)
29231
29253
  this.reset();
29232
29254
  }
29233
- // If inside, capture touch-drag and display tooltip. If not inside,
29234
- // allow dragging the finger to scroll the page
29235
- if ((chart.tooltip?.options.followTouchMove ?? true) &&
29236
- isInside &&
29237
- e.type === 'touchmove' &&
29238
- !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29239
- e.preventDefault();
29240
- }
29241
29255
  }
29242
29256
  else if (e.touches.length === 2) {
29243
29257
  this.pinch(e);
@@ -29637,13 +29651,19 @@ const { setLength: DataTableCore_setLength, splice: DataTableCore_splice } = Dat
29637
29651
  class DataTableCore {
29638
29652
  constructor(options = {}) {
29639
29653
  this.isDataTable = true;
29640
- this.autoId = !options.id;
29654
+ // Reject IDs that would pollute the prototype of ID-keyed maps.
29655
+ const id = this.isPollutingKey(options.id) ? void 0 : options.id;
29656
+ this.autoId = !id;
29641
29657
  this.columns = {};
29642
- this.id = (options.id || uniqueKey());
29658
+ this.id = (id || uniqueKey());
29643
29659
  this.rowCount = 0;
29644
29660
  this.versionTag = uniqueKey();
29645
29661
  let rowCount = 0;
29646
29662
  objectEach(options.columns || {}, (column, columnId) => {
29663
+ if (columnId === '__proto__' ||
29664
+ columnId === 'constructor') {
29665
+ return;
29666
+ }
29647
29667
  this.columns[columnId] = column.slice();
29648
29668
  rowCount = Math.max(rowCount, column.length);
29649
29669
  });
@@ -29654,6 +29674,17 @@ class DataTableCore {
29654
29674
  * Functions
29655
29675
  *
29656
29676
  * */
29677
+ /**
29678
+ * Checks whether a key would pollute the prototype if used to index a
29679
+ * plain object (e.g. as a column ID or table ID).
29680
+ *
29681
+ * @private
29682
+ * @param {string|undefined} key The key to check.
29683
+ * @return {boolean} True if the key is unsafe to use.
29684
+ */
29685
+ isPollutingKey(key) {
29686
+ return key === '__proto__' || key === 'constructor';
29687
+ }
29657
29688
  /**
29658
29689
  * Applies a row count to the table by setting the `rowCount` property and
29659
29690
  * adjusting the length of all columns.
@@ -29812,6 +29843,10 @@ class DataTableCore {
29812
29843
  setColumns(columns, rowIndex, eventDetail) {
29813
29844
  let rowCount = this.rowCount;
29814
29845
  objectEach(columns, (column, columnId) => {
29846
+ if (columnId === '__proto__' ||
29847
+ columnId === 'constructor') {
29848
+ return;
29849
+ }
29815
29850
  this.columns[columnId] = column.slice();
29816
29851
  rowCount = column.length;
29817
29852
  });
@@ -29850,11 +29885,14 @@ class DataTableCore {
29850
29885
  * @emits #afterSetRows
29851
29886
  */
29852
29887
  setRow(row, rowIndex = this.rowCount, insert, eventDetail) {
29853
- var _a;
29854
29888
  const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1, rowKeys = Object.keys(row);
29855
29889
  if (eventDetail?.addColumns !== false) {
29856
29890
  for (let i = 0, iEnd = rowKeys.length; i < iEnd; i++) {
29857
- columns[_a = rowKeys[i]] || (columns[_a] = new Array(this.rowCount));
29891
+ const rowKey = rowKeys[i];
29892
+ if (!this.isPollutingKey(rowKey) &&
29893
+ !Object.hasOwnProperty.call(columns, rowKey)) {
29894
+ columns[rowKey] = new Array(this.rowCount);
29895
+ }
29858
29896
  }
29859
29897
  }
29860
29898
  objectEach(columns, (column, columnId) => {
@@ -33834,7 +33872,19 @@ class Series {
33834
33872
  .optionsToObject
33835
33873
  .call({ series: this }, data[i]);
33836
33874
  for (const key of Object.keys(ptOptions)) {
33837
- columns[key] || (columns[key] = new Array(dataLength));
33875
+ // Assigning these would write through to
33876
+ // `Object.prototype` or the `Object` constructor instead
33877
+ // of creating a column, and thereby affect unrelated
33878
+ // objects on the page
33879
+ if (key === '__proto__' || key === 'constructor') {
33880
+ continue;
33881
+ }
33882
+ // Inherited keys like `toString` are truthy without being
33883
+ // columns of ours, so test for an own property rather
33884
+ // than for a value (#25321)
33885
+ if (!Object.hasOwnProperty.call(columns, key)) {
33886
+ columns[key] = new Array(dataLength);
33887
+ }
33838
33888
  columns[key][i] = ptOptions[key];
33839
33889
  }
33840
33890
  }
@@ -34487,7 +34537,7 @@ class Series {
34487
34537
  // Apply plotBorderRadius clipping
34488
34538
  plotClipGroup?.clip(
34489
34539
  // Navigator y-axis is not clippable
34490
- clip && this.yAxis.clippable ?
34540
+ clip && this.yAxis?.clippable ?
34491
34541
  chart.plotClipInner :
34492
34542
  void 0);
34493
34543
  }
@@ -34790,28 +34840,27 @@ class Series {
34790
34840
  * @emits Highcharts.Series#event:destroy
34791
34841
  */
34792
34842
  destroy(keepEventsForUpdate) {
34793
- const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent), data = series.data || [];
34794
- let destroy, i, axis;
34843
+ const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent);
34844
+ let destroy, axis;
34795
34845
  // Add event hook
34796
34846
  fireEvent(series, 'destroy', { keepEventsForUpdate });
34797
34847
  // Remove events
34798
34848
  this.removeEvents(keepEventsForUpdate);
34799
34849
  // Erase from axes
34800
- (series.axisTypes || []).forEach(function (AXIS) {
34801
- axis = series[AXIS];
34850
+ for (const coll of (series.axisTypes || [])) {
34851
+ axis = series[coll];
34802
34852
  if (axis?.series) {
34803
34853
  erase(axis.series, series);
34804
34854
  axis.isDirty = axis.forceRedraw = true;
34805
34855
  }
34806
- });
34856
+ }
34807
34857
  // Remove legend items
34808
34858
  if (series.legendItem) {
34809
34859
  series.chart.legend.destroyItem(series);
34810
34860
  }
34811
34861
  // Destroy all points with their elements
34812
- i = data.length;
34813
- while (i--) {
34814
- data[i]?.destroy?.(true);
34862
+ for (const point of series.points || []) {
34863
+ point?.destroy?.(true);
34815
34864
  }
34816
34865
  for (const zone of series.zones || []) {
34817
34866
  // Destroy SVGElement's but preserve primitive props (#20426)
@@ -38950,7 +38999,10 @@ class Chart {
38950
38999
  elem = this.renderer.text(options.text, 0, 0, options.useHTML)
38951
39000
  .attr({
38952
39001
  align: options.align,
38953
- 'class': 'highcharts-' + key,
39002
+ 'class': [
39003
+ options.className,
39004
+ 'highcharts-' + key
39005
+ ].filter(isString).join(' '),
38954
39006
  zIndex: options.zIndex || 4
38955
39007
  })
38956
39008
  .css({
@@ -39955,7 +40007,7 @@ class Chart {
39955
40007
  if (label &&
39956
40008
  (labels.reserveSpace ?? !isNumber(options.crossing))) {
39957
40009
  expectedSpace = label.getBBox().height +
39958
- labels.distance +
40010
+ (labels.distance ?? 15) +
39959
40011
  Math.max(isNumber(offset) ? offset : 0, 0);
39960
40012
  }
39961
40013
  if (expectedSpace) {
@@ -40043,6 +40095,12 @@ class Chart {
40043
40095
  addCredits(credits) {
40044
40096
  const chart = this, creds = merge(true, this.options.credits, credits);
40045
40097
  if (creds.enabled && !this.credits) {
40098
+ // Run the user-supplied URL through the allow list, so that
40099
+ // references like `javascript:` can't be executed from the
40100
+ // credits label
40101
+ const href = creds.href ?
40102
+ HTML_AST.filterUserAttributes({ href: creds.href }).href :
40103
+ void 0;
40046
40104
  /**
40047
40105
  * The chart's credits label. The label has an `update` method that
40048
40106
  * allows setting new options as per the
@@ -40056,8 +40114,8 @@ class Chart {
40056
40114
  .on('click', function (e) {
40057
40115
  // Fire the event with browser redirect as default function
40058
40116
  fireEvent(chart, 'creditsClick', e, () => {
40059
- if (creds.href) {
40060
- Chart_win.location.href = creds.href;
40117
+ if (href) {
40118
+ Chart_win.location.href = href;
40061
40119
  }
40062
40120
  });
40063
40121
  })
@@ -41674,14 +41732,11 @@ class StackItem {
41674
41732
  *
41675
41733
  * */
41676
41734
  /** @internal */
41677
- constructor(axis, options, negativeValue, x, stackOption) {
41678
- const inverted = axis.chart.inverted, reversed = axis.reversed;
41735
+ constructor(axis, negativeValue, x, stackOption) {
41679
41736
  this.axis = axis;
41680
41737
  // The stack goes to the left either if the stack has negative value
41681
41738
  // or when axis is reversed. XOR operator.
41682
- const isNegative = (this.isNegative = !!negativeValue !== !!reversed);
41683
- // Save the options to be able to style the label
41684
- this.options = options = options || {};
41739
+ this.negativeValue = negativeValue;
41685
41740
  // Save the x value to be able to position the label later
41686
41741
  this.x = x;
41687
41742
  // Initialize total value
@@ -41696,20 +41751,6 @@ class StackItem {
41696
41751
  this.stack = stackOption;
41697
41752
  this.leftCliff = 0;
41698
41753
  this.rightCliff = 0;
41699
- // The align options and text align varies on whether the stack is
41700
- // negative and if the chart is inverted or not.
41701
- // First test the user supplied value, then use the dynamic.
41702
- this.alignOptions = {
41703
- align: options.align ||
41704
- (inverted ? (isNegative ? 'left' : 'right') : 'center'),
41705
- verticalAlign: options.verticalAlign ||
41706
- (inverted ? 'middle' : isNegative ? 'bottom' : 'top'),
41707
- y: options.y,
41708
- x: options.x
41709
- };
41710
- this.textAlign =
41711
- options.textAlign ||
41712
- (inverted ? (!isNegative ? 'left' : 'right') : 'center');
41713
41754
  }
41714
41755
  /* *
41715
41756
  *
@@ -41725,39 +41766,34 @@ class StackItem {
41725
41766
  * @internal
41726
41767
  */
41727
41768
  render(group) {
41728
- const chart = this.axis.chart, options = this.options, formatOption = options.format,
41769
+ const axis = this.axis, chart = axis.chart, options = axis.options.stackLabels || {}, formatOption = options.format,
41729
41770
  // Format the text in the label.
41730
- str = (formatOption ?
41771
+ text = (formatOption ?
41731
41772
  StackItem_format(formatOption, this, chart) :
41732
- options.formatter?.call(this, this)) || '';
41733
- // Change the text to reflect the new total and set visibility to hidden
41734
- // in case the series is hidden
41735
- if (this.label) {
41736
- this.label.attr({ text: str, visibility: 'hidden' });
41773
+ options.formatter?.call(this, this)) || '', verb = this.label ? 'animate' : 'attr';
41774
+ // Create new label
41775
+ this.label || (this.label = chart.renderer.label(text, 0, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels'));
41776
+ const label = this.label, animatableAttribs = {
41777
+ r: options.borderRadius || 0,
41778
+ // Set default padding to 5 as it is in dataLabels #12308
41779
+ padding: (options.padding ?? 5)
41780
+ };
41781
+ if (!chart.styledMode) {
41782
+ animatableAttribs.fill = options.backgroundColor;
41783
+ animatableAttribs.stroke = options.borderColor;
41784
+ animatableAttribs['stroke-width'] = options.borderWidth;
41785
+ label.css(options.style || {});
41737
41786
  }
41738
- else {
41739
- // Create new label
41740
- this.label = chart.renderer.label(str, null, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels');
41741
- const attr = {
41742
- r: options.borderRadius || 0,
41743
- text: str,
41744
- // Set default padding to 5 as it is in dataLabels #12308
41745
- padding: (options.padding ?? 5),
41746
- visibility: 'hidden' // Hidden until setOffset is called
41747
- };
41748
- if (!chart.styledMode) {
41749
- attr.fill = options.backgroundColor;
41750
- attr.stroke = options.borderColor;
41751
- attr['stroke-width'] = options.borderWidth;
41752
- this.label.css(options.style || {});
41753
- }
41754
- this.label.attr(attr);
41755
- if (!this.label.added) {
41756
- this.label.add(group); // Add to the labels-group
41757
- }
41787
+ label
41788
+ .attr({
41789
+ text,
41790
+ visibility: 'hidden' // Hidden until setOffset is called
41791
+ })[verb](animatableAttribs);
41792
+ if (!label.added) {
41793
+ label.add(group); // Add to the labels-group
41758
41794
  }
41759
41795
  // Rank it higher than data labels (#8742)
41760
- this.label.labelrank = chart.plotSizeY;
41796
+ label.labelrank = chart.plotSizeY;
41761
41797
  fireEvent(this, 'afterRender');
41762
41798
  }
41763
41799
  /**
@@ -41766,35 +41802,38 @@ class StackItem {
41766
41802
  * @internal
41767
41803
  */
41768
41804
  setOffset(xOffset, width, boxBottom, boxTop, defaultX, xAxis) {
41769
- const { alignOptions, axis, label, options, textAlign } = this, chart = axis.chart, stackBox = this.getStackBox({
41770
- xOffset,
41771
- width,
41805
+ const { axis, label } = this, chart = axis.chart, options = axis.options.stackLabels || {}, inverted = chart.inverted, isNegative = this.negativeValue !== !!axis.reversed, stackBox = this.getStackBox({
41772
41806
  boxBottom,
41773
41807
  boxTop,
41774
41808
  defaultX,
41775
- xAxis
41776
- }), { verticalAlign } = alignOptions;
41809
+ isNegative,
41810
+ width,
41811
+ xAxis,
41812
+ xOffset
41813
+ }), { align = (inverted ? (isNegative ? 'left' : 'right') : 'center'), verticalAlign = (inverted ? 'middle' : isNegative ? 'bottom' : 'top'), textAlign = (inverted ? (!isNegative ? 'left' : 'right') : 'center'), x = 0, y = 0 } = options, alignOptions = {
41814
+ align,
41815
+ verticalAlign,
41816
+ x,
41817
+ y
41818
+ };
41777
41819
  if (label && stackBox) {
41778
41820
  const labelBox = label.getBBox(void 0, 0), padding = label.padding;
41779
41821
  let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
41780
- // Reset alignOptions property after justify #12337
41781
- alignOptions.x = options.x || 0;
41782
- alignOptions.y = options.y || 0;
41783
41822
  // Calculate the adjusted Stack position, to take into consideration
41784
- // The size if the labelBox and vertical alignment as
41785
- // well as the text alignment. It's need to be done to work with
41786
- // default SVGLabel.align/justify methods.
41787
- const { x, y } = this.adjustStackPosition({
41823
+ // the size if the labelBox and vertical alignment as well as the
41824
+ // text alignment. It needs to be done to work with default
41825
+ // SVGLabel.align/justify methods.
41826
+ const { x: adjustX, y: adjustY } = this.adjustStackPosition({
41788
41827
  labelBox,
41789
41828
  verticalAlign,
41790
41829
  textAlign
41791
41830
  });
41792
- stackBox.x -= x;
41793
- stackBox.y -= y;
41831
+ stackBox.x -= adjustX;
41832
+ stackBox.y -= adjustY;
41794
41833
  // Align the label to the adjusted box.
41795
41834
  label.align(alignOptions, false, stackBox);
41796
- // Check if label is inside the plotArea #12294
41797
- visible = chart.isInsidePlot(label.alignAttr.x + alignOptions.x + x, label.alignAttr.y + alignOptions.y + y);
41835
+ // Check if the label is inside the plotArea #12294
41836
+ visible = chart.isInsidePlot(label.alignAttr.x + x + adjustX, label.alignAttr.y + y + adjustY);
41798
41837
  if (!visible) {
41799
41838
  isJustify = false;
41800
41839
  }
@@ -41802,11 +41841,8 @@ class StackItem {
41802
41841
  // Justify stackLabel into the alignBox
41803
41842
  StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);
41804
41843
  }
41805
- // Add attr to avoid the default animation of justifyDataLabel.
41806
- // Also add correct rotation with its rotation origin. #15129
41844
+ // Add correct rotation with its rotation origin (#15129)
41807
41845
  label.attr({
41808
- x: label.alignAttr.x,
41809
- y: label.alignAttr.y,
41810
41846
  rotation: options.rotation,
41811
41847
  rotationOriginX: labelBox.width *
41812
41848
  getAlignFactor(options.textAlign || 'center'),
@@ -41845,22 +41881,22 @@ class StackItem {
41845
41881
  * The x, y, height, width of the stack.
41846
41882
  */
41847
41883
  getStackBox(stackBoxProps) {
41848
- const stackItem = this, axis = this.axis, chart = axis.chart, { boxTop, defaultX, xOffset, width, boxBottom } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41884
+ const axis = this.axis, chart = axis.chart, { boxBottom, boxTop, defaultX, isNegative, width, xOffset } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41849
41885
  100 :
41850
41886
  (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 ||
41851
41887
  (isNumber(axis.min) &&
41852
41888
  axis.logarithmic &&
41853
41889
  axis.logarithmic.lin2log(axis.min)) ||
41854
- 0), height = Math.abs(y - yZero), inverted = chart.inverted, neg = stackItem.isNegative;
41890
+ 0), height = Math.abs(y - yZero), inverted = chart.inverted;
41855
41891
  return inverted ?
41856
41892
  {
41857
- x: (neg ? y : y - height) - chart.plotLeft,
41893
+ x: (isNegative ? y : y - height) - chart.plotLeft,
41858
41894
  y: xAxis.height - x - width + xAxis.top - chart.plotTop,
41859
41895
  width: height,
41860
41896
  height: width
41861
41897
  } : {
41862
41898
  x: x + xAxis.transB - chart.plotLeft,
41863
- y: (neg ? y - height : y) - chart.plotTop,
41899
+ y: (isNegative ? y - height : y) - chart.plotTop,
41864
41900
  width: width,
41865
41901
  height: height
41866
41902
  };
@@ -41896,10 +41932,6 @@ class StackItem {
41896
41932
  * @name Highcharts.StackItemObject#cumulative
41897
41933
  * @type {number}
41898
41934
  */ /**
41899
- * True if on the negative side
41900
- * @name Highcharts.StackItemObject#isNegative
41901
- * @type {boolean}
41902
- */ /**
41903
41935
  * Related SVG element
41904
41936
  * @name Highcharts.StackItemObject#label
41905
41937
  * @type {Highcharts.SVGElement}
@@ -42116,7 +42148,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
42116
42148
  stacks[key][x].total = null;
42117
42149
  }
42118
42150
  else {
42119
- stacks[key][x] = new Stacking_StackItem(axis, axis.options.stackLabels, !!isNegative, x, stackOption);
42151
+ stacks[key][x] = new Stacking_StackItem(axis, !!isNegative, x, stackOption);
42120
42152
  }
42121
42153
  }
42122
42154
  // If the StackItem doesn't exist, create it first
@@ -42273,29 +42305,41 @@ class AxisAdditions {
42273
42305
  });
42274
42306
  });
42275
42307
  }
42276
- /** @internal */
42308
+ /**
42309
+ * Create the stack totals group and render the individual labels into it
42310
+ * @internal
42311
+ */
42277
42312
  renderStackTotals() {
42278
- 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 ||
42279
- renderer
42280
- .g('stack-labels')
42281
- .attr({
42282
- zIndex: 6,
42283
- opacity: 0
42284
- })
42285
- .add());
42286
- // The plotLeft/Top will change when y axis gets wider so we need to
42287
- // translate the stackTotalGroup at every render call. See bug #506
42288
- // and #516
42289
- stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42290
- // Render each stack total
42291
- objectEach(stacks, (type) => {
42292
- objectEach(type, (stack) => {
42293
- stack.render(stackTotalGroup);
42313
+ 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 ||
42314
+ (enabled ?
42315
+ renderer
42316
+ .g('stack-labels')
42317
+ .attr({
42318
+ zIndex: 6,
42319
+ opacity: 0
42320
+ })
42321
+ .add() :
42322
+ void 0));
42323
+ if (stackTotalGroup) {
42324
+ // The plotLeft/Top will change when y axis gets wider so we need to
42325
+ // translate the stackTotalGroup at every render call. See bug #506
42326
+ // and #516
42327
+ stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42328
+ // Render each stack total
42329
+ objectEach(stacks, (type) => {
42330
+ objectEach(type, (stack) => {
42331
+ if (enabled) {
42332
+ stack.render(stackTotalGroup);
42333
+ }
42334
+ else {
42335
+ stack.label = stack.label?.destroy();
42336
+ }
42337
+ });
42294
42338
  });
42295
- });
42296
- stackTotalGroup.animate({
42297
- opacity: 1
42298
- }, animationConfig);
42339
+ stackTotalGroup.animate({
42340
+ opacity: 1
42341
+ }, animationConfig);
42342
+ }
42299
42343
  }
42300
42344
  }
42301
42345
  /* *
@@ -42617,7 +42661,6 @@ Series_SeriesRegistry.registerSeriesType('line', LineSeries);
42617
42661
  * specified, it is inherited from [chart.type](#chart.type).
42618
42662
  *
42619
42663
  * @extends series,plotOptions.line
42620
- * @excluding dataParser,dataURL
42621
42664
  * @product highcharts highstock
42622
42665
  * @apioption series.line
42623
42666
  */
@@ -42991,7 +43034,7 @@ const AreaSeriesDefaults = {
42991
43034
  * specified, it is inherited from [chart.type](#chart.type).
42992
43035
  *
42993
43036
  * @extends series,plotOptions.area
42994
- * @excluding dataParser, dataURL, useOhlcData
43037
+ * @excluding useOhlcData
42995
43038
  * @product highcharts highstock
42996
43039
  * @apioption series.area
42997
43040
  */
@@ -43628,7 +43671,7 @@ Series_SeriesRegistry.registerSeriesType('spline', SplineSeries);
43628
43671
  * not specified, it is inherited from [chart.type](#chart.type).
43629
43672
  *
43630
43673
  * @extends series,plotOptions.spline
43631
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43674
+ * @excluding step, boostThreshold, boostBlending
43632
43675
  * @product highcharts highstock
43633
43676
  * @apioption series.spline
43634
43677
  */
@@ -43790,7 +43833,7 @@ Series_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);
43790
43833
  *
43791
43834
  *
43792
43835
  * @extends series,plotOptions.areaspline
43793
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43836
+ * @excluding step, boostThreshold, boostBlending
43794
43837
  * @product highcharts highstock
43795
43838
  * @apioption series.areaspline
43796
43839
  */
@@ -44067,13 +44110,16 @@ const ColumnSeriesDefaults = {
44067
44110
  * The minimal height for a column or width for a bar. By default,
44068
44111
  * 0 values are not shown. To visualize a 0 (or close to zero) point,
44069
44112
  * set the minimal point length to a pixel value like 3\. In stacked
44070
- * column charts, minPointLength might not be respected for tightly
44071
- * packed values.
44113
+ * column charts, the length is applied to each point in isolation, so
44114
+ * tightly packed values may overlap. See the stacked sample below for a
44115
+ * plugin that lays out the stack as a whole instead.
44072
44116
  *
44073
44117
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength/
44074
44118
  * Zero base value
44075
44119
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/
44076
44120
  * Positive and negative close to zero values
44121
+ * @sample {highcharts} highcharts/plotoptions/column-minpointlength-stacked/
44122
+ * Stack-aware minimum length
44077
44123
  *
44078
44124
  * @product highcharts highstock gantt
44079
44125
  */
@@ -44244,7 +44290,7 @@ const ColumnSeriesDefaults = {
44244
44290
  * not specified, it is inherited from [chart.type](#chart.type).
44245
44291
  *
44246
44292
  * @extends series,plotOptions.column
44247
- * @excluding connectNulls, dataParser, dataURL, gapSize, gapUnit, linecap,
44293
+ * @excluding connectNulls, gapSize, gapUnit, linecap,
44248
44294
  * lineWidth, marker, connectEnds, step
44249
44295
  * @product highcharts highstock
44250
44296
  * @apioption series.column
@@ -45888,7 +45934,7 @@ Series_SeriesRegistry.registerSeriesType('bar', BarSeries);
45888
45934
  * it is inherited from [chart.type](#chart.type).
45889
45935
  *
45890
45936
  * @extends series,plotOptions.bar
45891
- * @excluding connectNulls, dashStyle, dataParser, dataURL, gapSize, gapUnit,
45937
+ * @excluding connectNulls, dashStyle, gapSize, gapUnit,
45892
45938
  * linecap, lineWidth, marker, connectEnds, step
45893
45939
  * @product highcharts
45894
45940
  * @apioption series.bar
@@ -46089,7 +46135,7 @@ const ScatterSeriesDefaults = {
46089
46135
  * not specified, it is inherited from [chart.type](#chart.type).
46090
46136
  *
46091
46137
  * @extends series,plotOptions.scatter
46092
- * @excluding cropThreshold, dataParser, dataURL, useOhlcData
46138
+ * @excluding cropThreshold, useOhlcData
46093
46139
  * @product highcharts highstock
46094
46140
  * @apioption series.scatter
46095
46141
  */
@@ -47191,7 +47237,7 @@ const PieSeriesDefaults = {
47191
47237
  * it is inherited from [chart.type](#chart.type).
47192
47238
  *
47193
47239
  * @extends series,plotOptions.pie
47194
- * @excluding cropThreshold, dataParser, dataURL, linkedTo, stack, xAxis, yAxis,
47240
+ * @excluding cropThreshold, linkedTo, stack, xAxis, yAxis,
47195
47241
  * dataSorting, step, boostThreshold, boostBlending
47196
47242
  * @product highcharts highmaps
47197
47243
  * @apioption series.pie
@@ -48292,6 +48338,7 @@ var GeometryUtilities;
48292
48338
  * */
48293
48339
 
48294
48340
 
48341
+
48295
48342
  const { pointInPolygon } = Geometry_GeometryUtilities;
48296
48343
 
48297
48344
  /* *
@@ -48432,30 +48479,34 @@ function composeOverlappingDataLabels(ChartClass) {
48432
48479
  * Whether label is affected
48433
48480
  */
48434
48481
  function hideOrShow(label, chart) {
48435
- let complete, newOpacity, isLabelAffected = false;
48482
+ let isLabelAffected = false;
48436
48483
  if (label) {
48437
- newOpacity = label.newOpacity;
48484
+ const newOpacity = label.newOpacity, isDataLabel = label.hasClass('highcharts-data-label');
48485
+ // For tick labels, we need to stop running animations otherwise they
48486
+ // may continue to run after we set the new opacity
48487
+ if (!isDataLabel) {
48488
+ stop(label, 'opacity');
48489
+ }
48438
48490
  if (label.oldOpacity !== newOpacity) {
48439
48491
  // Toggle data labels
48440
- if (label.hasClass('highcharts-data-label')) {
48492
+ if (isDataLabel) {
48441
48493
  // Make sure the label is completely hidden to avoid catching
48442
48494
  // clicks (#4362)
48443
48495
  label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');
48444
- complete = function () {
48496
+ isLabelAffected = true;
48497
+ // Animate or set the opacity
48498
+ label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, () => {
48445
48499
  if (!chart.styledMode) {
48446
48500
  label.css({
48447
48501
  pointerEvents: newOpacity ? 'auto' : 'none'
48448
48502
  });
48449
48503
  }
48450
- };
48451
- isLabelAffected = true;
48452
- // Animate or set the opacity
48453
- label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);
48504
+ });
48454
48505
  fireEvent(chart, 'afterHideOverlappingLabel');
48455
- // Toggle other labels, tick labels
48506
+ // Toggle other labels - tick labels, stack labels
48456
48507
  }
48457
48508
  else {
48458
- label.attr({
48509
+ label[label.placed ? 'animate' : 'attr']({
48459
48510
  opacity: newOpacity
48460
48511
  });
48461
48512
  }
@@ -48471,25 +48522,37 @@ function hideOrShow(label, chart) {
48471
48522
  * @internal
48472
48523
  */
48473
48524
  function OverlappingDataLabels_onChartRender() {
48474
- const chart = this;
48525
+ const chart = this,
48526
+ // Helper function for data labels and stack labels when dynamicly
48527
+ // toggling the allowOverlap option
48528
+ toggle = (label, allowOverlap) => {
48529
+ // Allow overlap, reset opacity and show
48530
+ if (allowOverlap) {
48531
+ label.oldOpacity = label.opacity;
48532
+ label.newOpacity = 1;
48533
+ hideOrShow(label, chart);
48534
+ // Do not allow overlap
48535
+ }
48536
+ else {
48537
+ labels.push(label);
48538
+ }
48539
+ };
48475
48540
  let labels = [];
48476
48541
  // Consider external label collectors
48477
48542
  for (const collector of (chart.labelCollectors || [])) {
48478
48543
  labels = labels.concat(collector());
48479
48544
  }
48480
- for (const yAxis of (chart.yAxis || [])) {
48481
- if (yAxis.stacking &&
48482
- yAxis.options.stackLabels &&
48483
- !yAxis.options.stackLabels.allowOverlap) {
48484
- objectEach(yAxis.stacking.stacks, (stack) => {
48485
- objectEach(stack, (stackItem) => {
48486
- if (stackItem.label) {
48487
- labels.push(stackItem.label);
48488
- }
48489
- });
48545
+ // Stack labels
48546
+ for (const { options, stacking } of (chart.yAxis || [])) {
48547
+ objectEach(stacking?.stacks, (stack) => {
48548
+ objectEach(stack, ({ label }) => {
48549
+ if (label) {
48550
+ toggle(label, options.stackLabels?.allowOverlap);
48551
+ }
48490
48552
  });
48491
- }
48553
+ });
48492
48554
  }
48555
+ // Series data labels
48493
48556
  for (const series of (chart.series || [])) {
48494
48557
  if (series.visible && series.hasDataLabels?.()) { // #3866
48495
48558
  const push = (points) => {
@@ -48518,21 +48581,13 @@ function OverlappingDataLabels_onChartRender() {
48518
48581
  }
48519
48582
  */
48520
48583
  // Allow overlap if the option is explicitly true
48521
- if (
48584
+ toggle(label, (
48522
48585
  // #13449
48523
48586
  options.allowOverlap ??
48524
48587
  // Pie labels outside have a separate placement
48525
48588
  // logic, skip the overlap logic
48526
48589
  (series.is('pie') &&
48527
- Number(options.distance) > 0)) {
48528
- label.oldOpacity = label.opacity;
48529
- label.newOpacity = 1;
48530
- hideOrShow(label, chart);
48531
- // Do not allow overlap
48532
- }
48533
- else {
48534
- labels.push(label);
48535
- }
48590
+ Number(options.distance) > 0)));
48536
48591
  });
48537
48592
  }
48538
48593
  }
@@ -49208,7 +49263,7 @@ var Responsive;
49208
49263
  ;// ./code/es-modules/masters/highcharts.src.js
49209
49264
  // SPDX-License-Identifier: LicenseRef-Highcharts
49210
49265
  /**
49211
- * @license Highcharts JS v13.0.2 (2026-08-27)
49266
+ * @license Highcharts JS v13.1.0 (2026-09-18)
49212
49267
  * @module highcharts/highcharts
49213
49268
  *
49214
49269
  * (c) 2009-2026 Highsoft AS
@@ -50248,7 +50303,8 @@ function compose(ChartClass, NavigatorClass) {
50248
50303
  const chartProto = ChartClass.prototype;
50249
50304
  NavigatorConstructor = NavigatorClass;
50250
50305
  chartProto.callbacks.push(onChartCallback);
50251
- addEvent(ChartClass, 'afterAddSeries', onChartAfterAddSeries);
50306
+ addEvent(ChartClass, 'afterAddSeries', resetBaseSeries);
50307
+ addEvent(ChartClass, 'afterDrillUp', resetBaseSeries);
50252
50308
  addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);
50253
50309
  addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);
50254
50310
  addEvent(ChartClass, 'beforeRender', onChartBeforeRender);
@@ -50257,13 +50313,12 @@ function compose(ChartClass, NavigatorClass) {
50257
50313
  }
50258
50314
  }
50259
50315
  /**
50260
- * Handle adding new series.
50316
+ * Reset the base series.
50261
50317
  * @internal
50262
50318
  */
50263
- function onChartAfterAddSeries() {
50319
+ function resetBaseSeries() {
50264
50320
  if (this.navigator) {
50265
- // Recompute which series should be shown in navigator, and add them
50266
- this.navigator.setBaseSeries(null, false);
50321
+ this.navigator.setBaseSeries(void 0, false);
50267
50322
  }
50268
50323
  }
50269
50324
  /**
@@ -50412,7 +50467,7 @@ const ChartNavigatorComposition = {
50412
50467
  * */
50413
50468
 
50414
50469
 
50415
- const { isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
50470
+ const { composed: NavigatorAxisComposition_composed, isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
50416
50471
 
50417
50472
  /* *
50418
50473
  *
@@ -50478,8 +50533,7 @@ class NavigatorAxisAdditions {
50478
50533
  *
50479
50534
  * */
50480
50535
  static compose(AxisClass) {
50481
- if (!AxisClass.keepProps.includes('navigatorAxis')) {
50482
- AxisClass.keepProps.push('navigatorAxis');
50536
+ if (pushUnique(NavigatorAxisComposition_composed, 'Axis.Navigator')) {
50483
50537
  addEvent(AxisClass, 'init', NavigatorAxisComposition_onAxisInit);
50484
50538
  addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);
50485
50539
  }
@@ -51351,6 +51405,9 @@ var ScrollbarAxis;
51351
51405
  }
51352
51406
  });
51353
51407
  }
51408
+ else if (axis.scrollbar) {
51409
+ axis.scrollbar = axis.scrollbar.destroy();
51410
+ }
51354
51411
  }
51355
51412
  /**
51356
51413
  * Wrap rendering axis, and update scrollbar if one is created.
@@ -51488,14 +51545,12 @@ var ScrollbarAxis;
51488
51545
  */
51489
51546
  const ScrollbarDefaults = {
51490
51547
  /**
51491
- * The height of the scrollbar. If `buttonsEnabled` is true , the height
51548
+ * The height of the scrollbar. If `buttonsEnabled` is true, the height
51492
51549
  * also applies to the width of the scroll arrows so that they are always
51493
51550
  * squares.
51494
51551
  *
51495
51552
  * @sample stock/scrollbar/style/
51496
51553
  * Non-default height
51497
- *
51498
- * @type {number}
51499
51554
  */
51500
51555
  height: 10,
51501
51556
  /**
@@ -53802,11 +53857,7 @@ class Navigator {
53802
53857
  erase(this.chart.axes, this.yAxis);
53803
53858
  }
53804
53859
  // Destroy series
53805
- (this.series || []).forEach((s) => {
53806
- if (s.destroy) {
53807
- s.destroy();
53808
- }
53809
- });
53860
+ destroyObjectProperties(this.series || []);
53810
53861
  // Destroy properties
53811
53862
  [
53812
53863
  'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',
@@ -54643,8 +54694,8 @@ function RangeSelectorComposition_onChartUpdate(e) {
54643
54694
  this.options.rangeSelector.enabled = true;
54644
54695
  this.rangeSelector = rangeSelector = new RangeSelectorConstructor(this);
54645
54696
  }
54646
- this.extraBottomMargin = false;
54647
- this.extraTopMargin = false;
54697
+ this.extraBottomMargin = void 0;
54698
+ this.extraTopMargin = void 0;
54648
54699
  if (rangeSelector) {
54649
54700
  const verticalAlign = (optionsRangeSelector &&
54650
54701
  optionsRangeSelector.verticalAlign) || (rangeSelector.options && rangeSelector.options.verticalAlign);
@@ -56348,7 +56399,7 @@ function getCurvedPath(pathParams) {
56348
56399
  }
56349
56400
  /**
56350
56401
  * General function to apply corner radius to a path
56351
- * @private
56402
+ * @internal
56352
56403
  */
56353
56404
  function applyRadius(path, r) {
56354
56405
  const d = [];
@@ -56401,10 +56452,12 @@ function applyRadius(path, r) {
56401
56452
  }
56402
56453
  return d;
56403
56454
  }
56455
+ /** @internal */
56404
56456
  const PathUtilities = {
56405
56457
  applyRadius,
56406
56458
  getLinkPath
56407
56459
  };
56460
+ /** @internal */
56408
56461
  /* harmony default export */ const Series_PathUtilities = (PathUtilities);
56409
56462
 
56410
56463
  ;// ./code/es-modules/Gantt/PathfinderAlgorithms.js
@@ -58096,7 +58149,7 @@ Pathfinder.prototype.algorithms = PathfinderAlgorithms;
58096
58149
  /* unused harmony import specifier */ var Highcharts;
58097
58150
  // SPDX-License-Identifier: LicenseRef-Highcharts
58098
58151
  /**
58099
- * @license Highcharts Gantt JS v13.0.2 (2026-08-27)
58152
+ * @license Highcharts Gantt JS v13.1.0 (2026-09-18)
58100
58153
  * @module highcharts/modules/pathfinder
58101
58154
  * @requires highcharts
58102
58155
  *
@@ -58180,17 +58233,19 @@ function chartAdjustHeight() {
58180
58233
  }
58181
58234
  // Make sure clip rects have the right height before initial
58182
58235
  // animation.
58183
- axis.series.forEach(function (series) {
58184
- const clipRect = series.sharedClipKey &&
58185
- chart.sharedClips[series.sharedClipKey];
58186
- if (clipRect) {
58187
- clipRect.attr(chart.inverted ? {
58188
- width: chart.plotHeight
58189
- } : {
58190
- height: chart.plotHeight
58191
- });
58192
- }
58193
- });
58236
+ if (!chart.initiatedScale) {
58237
+ axis.series.forEach((series) => {
58238
+ const clipRect = series.sharedClipKey &&
58239
+ chart.sharedClips[series.sharedClipKey];
58240
+ if (clipRect) {
58241
+ clipRect.attr(chart.inverted ? {
58242
+ width: chart.plotHeight
58243
+ } : {
58244
+ height: chart.plotHeight
58245
+ });
58246
+ }
58247
+ });
58248
+ }
58194
58249
  }
58195
58250
  }
58196
58251
  this.initiatedScale = true;
@@ -58227,7 +58282,7 @@ function chartAdjustHeight() {
58227
58282
  /* unused harmony import specifier */ var static_scale_src_Highcharts;
58228
58283
  // SPDX-License-Identifier: LicenseRef-Highcharts
58229
58284
  /**
58230
- * @license Highcharts Gantt JS v13.0.2 (2026-08-27)
58285
+ * @license Highcharts Gantt JS v13.1.0 (2026-09-18)
58231
58286
  * @module highcharts/modules/static-scale
58232
58287
  * @requires highcharts
58233
58288
  *
@@ -59043,7 +59098,7 @@ Series_SeriesRegistry.registerSeriesType('xrange', XRangeSeries);
59043
59098
  /* unused harmony import specifier */ var xrange_src_Highcharts;
59044
59099
  // SPDX-License-Identifier: LicenseRef-Highcharts
59045
59100
  /**
59046
- * @license Highcharts JS v13.0.2 (2026-08-27)
59101
+ * @license Highcharts JS v13.1.0 (2026-09-18)
59047
59102
  * @module highcharts/modules/xrange
59048
59103
  * @requires highcharts
59049
59104
  *
@@ -59384,6 +59439,8 @@ const GanttSeriesDefaults = {
59384
59439
  * */
59385
59440
 
59386
59441
 
59442
+ const { composed: BrokenAxis_composed } = Core_Globals;
59443
+
59387
59444
 
59388
59445
  /* *
59389
59446
  *
@@ -59411,8 +59468,7 @@ var BrokenAxis;
59411
59468
  * @internal
59412
59469
  */
59413
59470
  function compose(AxisClass, SeriesClass) {
59414
- if (!AxisClass.keepProps.includes('brokenAxis')) {
59415
- AxisClass.keepProps.push('brokenAxis');
59471
+ if (pushUnique(BrokenAxis_composed, 'Axis.Broken')) {
59416
59472
  addEvent(AxisClass, 'init', onAxisInit);
59417
59473
  addEvent(AxisClass, 'afterInit', onAxisAfterInit);
59418
59474
  addEvent(AxisClass, 'afterSetTickPositions', onAxisAfterSetTickPositions);
@@ -59630,7 +59686,7 @@ var BrokenAxis;
59630
59686
  });
59631
59687
  // For stacked chart generate empty stack items, #6546
59632
59688
  if (yAxis.stacking && this.options.stacking) {
59633
- stack = yAxis.stacking.stacks[this.stackKey][xRange] = new Stacking_StackItem(yAxis, yAxis.options.stackLabels, false, xRange, this.stack ?? '');
59689
+ stack = yAxis.stacking.stacks[this.stackKey][xRange] = new Stacking_StackItem(yAxis, false, xRange, this.stack ?? '');
59634
59690
  stack.total = 0;
59635
59691
  }
59636
59692
  }
@@ -60007,7 +60063,7 @@ var BrokenAxis;
60007
60063
 
60008
60064
 
60009
60065
 
60010
- const { dateFormats: GridAxis_dateFormats } = Core_Globals;
60066
+ const { composed: GridAxis_composed, dateFormats: GridAxis_dateFormats } = Core_Globals;
60011
60067
 
60012
60068
 
60013
60069
  /* *
@@ -60071,8 +60127,7 @@ function applyGridOptions(axis) {
60071
60127
  * @internal
60072
60128
  */
60073
60129
  function GridAxis_compose(AxisClass, ChartClass, TickClass) {
60074
- if (!AxisClass.keepProps.includes('grid')) {
60075
- AxisClass.keepProps.push('grid');
60130
+ if (pushUnique(GridAxis_composed, 'Axis.Grid')) {
60076
60131
  AxisClass.prototype.getMaxLabelDimensions = getMaxLabelDimensions;
60077
60132
  wrap(AxisClass.prototype, 'unsquish', wrapUnsquish);
60078
60133
  wrap(AxisClass.prototype, 'getOffset', wrapGetOffset);
@@ -60212,13 +60267,19 @@ function onAfterGetTitlePosition(e) {
60212
60267
  }
60213
60268
  /** @internal */
60214
60269
  function onAfterInit() {
60270
+ var _a;
60215
60271
  const axis = this;
60216
60272
  const { chart, options: { grid: gridOptions = {} }, userOptions } = axis;
60217
60273
  if (gridOptions.enabled) {
60218
60274
  applyGridOptions(axis);
60219
60275
  }
60220
60276
  if (gridOptions.columns) {
60221
- const columns = axis.grid.columns = [];
60277
+ (_a = axis.grid).columns || (_a.columns = []);
60278
+ const columns = axis.grid.columns;
60279
+ // Destroy existing columns. In a future update we could consider
60280
+ // matching and updating existing columns instead of recreating all.
60281
+ columns.forEach((column) => column.destroy());
60282
+ columns.length = 0;
60222
60283
  let columnIndex = axis.grid.columnIndex = 0;
60223
60284
  // Handle columns, each column is a grid axis
60224
60285
  while (++columnIndex < gridOptions.columns.length) {
@@ -60630,11 +60691,10 @@ function onAfterSetScale() {
60630
60691
  * @internal
60631
60692
  */
60632
60693
  function onAfterTickSize(e) {
60633
- const { horiz, maxLabelDimensions, options: { grid: gridOptions = {} } } = this;
60634
- if (gridOptions.enabled && maxLabelDimensions) {
60635
- const labelPadding = this.options.labels.distance * 2;
60636
- const distance = horiz ?
60637
- (gridOptions.cellHeight ||
60694
+ const { horiz, maxLabelDimensions, options } = this, { labels, grid = {} } = options;
60695
+ if (grid.enabled && maxLabelDimensions) {
60696
+ const labelPadding = (labels.distance ?? 15) * 2, distance = horiz ?
60697
+ (grid.cellHeight ||
60638
60698
  labelPadding + maxLabelDimensions.height) :
60639
60699
  labelPadding + maxLabelDimensions.width;
60640
60700
  if (isArray(e.tickSize)) {
@@ -60655,14 +60715,14 @@ function GridAxis_onChartAfterSetChartSize() {
60655
60715
  });
60656
60716
  }
60657
60717
  /** @internal */
60658
- function onDestroy(e) {
60718
+ function onDestroy() {
60659
60719
  const { grid } = this;
60660
60720
  // Axes created before the Gantt module was loaded have no grid
60661
60721
  // additions to be destroyed (#24644).
60662
60722
  if (!grid) {
60663
60723
  return;
60664
60724
  }
60665
- (grid.columns || []).forEach((column) => column.destroy(e.keepEvents));
60725
+ (grid.columns || []).forEach((column) => column.destroy());
60666
60726
  grid.columns = void 0;
60667
60727
  }
60668
60728
  /**
@@ -60830,7 +60890,7 @@ function onTrimTicks() {
60830
60890
  max > beforeLastPos);
60831
60891
  if (gridOptions.enabled === true &&
60832
60892
  !categoryAxis &&
60833
- (axis.isXAxis || axis.isLinked)) {
60893
+ (axis.isXAxis || axis.linkedParent)) {
60834
60894
  if ((endMoreThanMin || startLessThanMin) && !options.startOnTick) {
60835
60895
  tickPositions[0] = min;
60836
60896
  }
@@ -61714,6 +61774,8 @@ const TreeUtilities = {
61714
61774
 
61715
61775
 
61716
61776
 
61777
+ const { composed: TreeGridAxis_composed } = Core_Globals;
61778
+
61717
61779
 
61718
61780
 
61719
61781
  const { getLevelOptions: TreeGridAxis_getLevelOptions } = Series_TreeUtilities;
@@ -62003,19 +62065,16 @@ function onBeforeRender(e) {
62003
62065
  * The tick position in axis values.
62004
62066
  */
62005
62067
  function wrapGenerateTick(proceed, pos) {
62006
- const axis = this, mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {}, isTreeGrid = axis.type === 'treegrid', ticks = axis.ticks;
62007
- let tick = ticks[pos], levelOptions, options, gridNode;
62008
- if (isTreeGrid &&
62009
- axis.treeGrid.mapOfPosToGridNode) {
62010
- gridNode = axis.treeGrid.mapOfPosToGridNode[pos];
62068
+ const axis = this, mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {}, isTreeGrid = axis.type === 'treegrid', ticks = axis.ticks, gridNode = axis.treeGrid.mapOfPosToGridNode?.[pos];
62069
+ let tick = ticks[pos], levelOptions, options;
62070
+ if (isTreeGrid && gridNode) {
62011
62071
  levelOptions = mapOptionsToLevel[gridNode.depth];
62012
62072
  if (levelOptions) {
62013
62073
  options = {
62014
62074
  labels: levelOptions
62015
62075
  };
62016
62076
  }
62017
- if (!tick &&
62018
- TickConstructor) {
62077
+ if (!tick && TickConstructor) {
62019
62078
  ticks[pos] = tick =
62020
62079
  new TickConstructor(axis, pos, void 0, void 0, {
62021
62080
  category: gridNode.name,
@@ -62172,9 +62231,7 @@ function wrapInit(proceed, chart, userOptions, coll) {
62172
62231
  * The original setTickInterval function.
62173
62232
  */
62174
62233
  function wrapSetTickInterval(proceed) {
62175
- const axis = this, options = axis.options, time = axis.chart.time, linkedParent = typeof options.linkedTo === 'number' ?
62176
- this.chart[axis.coll]?.[options.linkedTo] :
62177
- void 0, isTreeGrid = axis.type === 'treegrid';
62234
+ const axis = this, options = axis.options, time = axis.chart.time, linkedParent = axis.linkedParent, isTreeGrid = axis.type === 'treegrid';
62178
62235
  if (isTreeGrid) {
62179
62236
  axis.min = axis.userMin ?? time.parse(options.min) ?? axis.dataMin;
62180
62237
  axis.max = axis.userMax ?? time.parse(options.max) ?? axis.dataMax;
@@ -62238,9 +62295,8 @@ class TreeGridAxisAdditions {
62238
62295
  * */
62239
62296
  /** @internal */
62240
62297
  static compose(AxisClass, ChartClass, SeriesClass, TickClass) {
62241
- if (!AxisClass.keepProps.includes('treeGrid')) {
62298
+ if (pushUnique(TreeGridAxis_composed, 'Axis.TreeGrid')) {
62242
62299
  const axisProps = AxisClass.prototype;
62243
- AxisClass.keepProps.push('treeGrid');
62244
62300
  wrap(axisProps, 'generateTick', wrapGenerateTick);
62245
62301
  wrap(axisProps, 'init', wrapInit);
62246
62302
  wrap(axisProps, 'setTickInterval', wrapSetTickInterval);
@@ -62561,7 +62617,7 @@ Series_SeriesRegistry.registerSeriesType('gantt', GanttSeries);
62561
62617
  /* unused harmony import specifier */ var gantt_src_Highcharts;
62562
62618
  // SPDX-License-Identifier: LicenseRef-Highcharts
62563
62619
  /**
62564
- * @license Highcharts Gantt JS v13.0.2 (2026-08-27)
62620
+ * @license Highcharts Gantt JS v13.1.0 (2026-09-18)
62565
62621
  * @module highcharts/modules/gantt
62566
62622
  * @requires highcharts
62567
62623
  *