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
package/highstock.src.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: LicenseRef-Highcharts
2
2
  /**
3
- * @license Highcharts Stock v13.0.2 (2026-08-27)
3
+ * @license Highcharts Stock v13.1.0 (2026-09-18)
4
4
  * @module highcharts/highstock
5
5
  *
6
6
  * (c) 2009-2026 Highsoft AS
@@ -25,36 +25,17 @@ return /******/ (() => { // webpackBootstrap
25
25
  /******/
26
26
  /************************************************************************/
27
27
  /******/ /* webpack/runtime/define property getters */
28
- /******/ (() => {
29
- /******/ // define getter/value functions for harmony exports
30
- /******/ __webpack_require__.d = (exports, definition) => {
31
- /******/ if(Array.isArray(definition)) {
32
- /******/ var i = 0;
33
- /******/ while(i < definition.length) {
34
- /******/ var key = definition[i++];
35
- /******/ var binding = definition[i++];
36
- /******/ if(!__webpack_require__.o(exports, key)) {
37
- /******/ if(binding === 0) {
38
- /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
39
- /******/ } else {
40
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
41
- /******/ }
42
- /******/ } else if(binding === 0) { i++; }
43
- /******/ }
44
- /******/ } else {
45
- /******/ for(var key in definition) {
46
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
47
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
48
- /******/ }
49
- /******/ }
28
+ /******/ // define getter/value functions for harmony exports
29
+ /******/ __webpack_require__.d = (exports, definition) => {
30
+ /******/ for(var key in definition) {
31
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
32
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
50
33
  /******/ }
51
- /******/ };
52
- /******/ })();
34
+ /******/ }
35
+ /******/ };
53
36
  /******/
54
37
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
55
- /******/ (() => {
56
- /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
57
- /******/ })();
38
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));
58
39
  /******/
59
40
  /************************************************************************/
60
41
  let __webpack_exports__ = {};
@@ -93,7 +74,7 @@ var Globals;
93
74
  * Constants
94
75
  *
95
76
  * */
96
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.2', Globals.win = (typeof window !== 'undefined' ?
77
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.1.0', Globals.win = (typeof window !== 'undefined' ?
97
78
  window :
98
79
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
99
80
  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 = [
@@ -104,14 +85,16 @@ var Globals;
104
85
  ], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {
105
86
  // Checks whether the browser supports passive events, (#11353).
106
87
  let supportsPassive = false;
107
- // Object.defineProperty doesn't work on IE as well as passive
108
- // events - instead of using polyfill, we can exclude IE totally.
88
+ // Accessors don't work on IE as well as passive events - instead
89
+ // of using polyfill, we can exclude IE totally. The getter has to
90
+ // be enumerable, or wrappers that shallow-copy the options never
91
+ // read it (#25092).
109
92
  if (!Globals.isMS) {
110
- const opts = Object.defineProperty({}, 'passive', {
111
- get: function () {
112
- supportsPassive = true;
93
+ const opts = {
94
+ get passive() {
95
+ return (supportsPassive = true);
113
96
  }
114
- });
97
+ };
115
98
  if (Globals.win.addEventListener && Globals.win.removeEventListener) {
116
99
  Globals.win.addEventListener('testPassive', Globals.noop, opts);
117
100
  Globals.win.removeEventListener('testPassive', Globals.noop, opts);
@@ -2187,6 +2170,13 @@ function extend(a, b) {
2187
2170
  a = {};
2188
2171
  }
2189
2172
  for (n in b) { // eslint-disable-line guard-for-in
2173
+ // Prototype pollution (#14883). Keys like `__proto__` may arrive as
2174
+ // own, enumerable properties through `JSON.parse`, in which case
2175
+ // assigning them would mutate the prototype of the target instead of
2176
+ // adding a property.
2177
+ if (n === '__proto__' || n === 'constructor') {
2178
+ continue;
2179
+ }
2190
2180
  a[n] = b[n];
2191
2181
  }
2192
2182
  return a;
@@ -5448,6 +5438,13 @@ const defaultOptions = {
5448
5438
  * @since 2.0
5449
5439
  * @apioption title.align
5450
5440
  */
5441
+ /**
5442
+ * A CSS class name to apply to the title's container div,
5443
+ * allowing unique CSS styling for each chart.
5444
+ *
5445
+ * @type {string}
5446
+ * @apioption title.className
5447
+ */
5451
5448
  /**
5452
5449
  * The margin between the title and the plot area, or if a subtitle
5453
5450
  * is present, the margin between the subtitle and the plot area.
@@ -5510,6 +5507,13 @@ const defaultOptions = {
5510
5507
  * @since 2.0
5511
5508
  * @apioption subtitle.align
5512
5509
  */
5510
+ /**
5511
+ * A CSS class name to apply to the subtitle's container div,
5512
+ * allowing unique CSS styling for each chart.
5513
+ *
5514
+ * @type {string}
5515
+ * @apioption subtitle.className
5516
+ */
5513
5517
  /**
5514
5518
  * When the subtitle is floating, the plot area will not move to make
5515
5519
  * space for it.
@@ -7642,6 +7646,10 @@ const defaultOptions = {
7642
7646
  /**
7643
7647
  * The URL for the credits label.
7644
7648
  *
7649
+ * URLs that do not start with one of the
7650
+ * [AST.allowedReferences](https://api.highcharts.com/class-reference/Highcharts.AST#.allowedReferences),
7651
+ * for example `javascript:` URLs, are ignored.
7652
+ *
7645
7653
  * @sample {highcharts} highcharts/credits/href/
7646
7654
  * Custom URL and text
7647
7655
  * @sample {highmaps} maps/credits/customized/
@@ -8615,6 +8623,7 @@ class Fx {
8615
8623
  * Prepare start and end values so that the path can be animated one to one.
8616
8624
  *
8617
8625
  * @function Highcharts.Fx#initPath
8626
+ * @internal
8618
8627
  *
8619
8628
  * @param {Highcharts.SVGElement} elem
8620
8629
  * The SVGElement item.
@@ -8914,7 +8923,9 @@ function animate(el, params = { pos: 1 }, opt) {
8914
8923
  if (el) {
8915
8924
  stop(el, prop);
8916
8925
  }
8917
- const fx = new Animation_Fx(el, opt, prop), d = params.d;
8926
+ const fx = new Animation_Fx(el, opt, prop), d = params.d,
8927
+ // Discrete value that doesn't animate, apply at once
8928
+ applyImmediately = prop === 'dashstyle';
8918
8929
  let start = 0, end = void 0, unit = '';
8919
8930
  if (prop === 'd' && isArray(d)) {
8920
8931
  fx.paths = fx.initPath(el, el.pathArray, d);
@@ -8923,6 +8934,9 @@ function animate(el, params = { pos: 1 }, opt) {
8923
8934
  }
8924
8935
  else if (el?.attr) {
8925
8936
  start = el.attr(prop);
8937
+ if (applyImmediately) {
8938
+ el.attr(prop, val);
8939
+ }
8926
8940
  }
8927
8941
  else if (el) {
8928
8942
  start = +(getStyle(el, prop) || 0);
@@ -8937,7 +8951,7 @@ function animate(el, params = { pos: 1 }, opt) {
8937
8951
  end = end.replace(/px/g, ''); // #4351
8938
8952
  }
8939
8953
  // Empty dashstyle animation crashes treemap on hover
8940
- if (defined(end)) {
8954
+ if (defined(end) && !applyImmediately) {
8941
8955
  fx.run(start, end, unit);
8942
8956
  }
8943
8957
  });
@@ -9259,17 +9273,25 @@ class AST {
9259
9273
  markup, 'text/html');
9260
9274
  }
9261
9275
  catch {
9262
- // There are two cases where this fails:
9263
- // 1. IE9 and PhantomJS, where the DOMParser only supports parsing
9264
- // XML
9265
- // 2. Due to a Chromium issue where chart redraws are triggered by
9266
- // a `beforeprint` event (#16931),
9267
- // https://issues.chromium.org/issues/40222135
9276
+ // Due to a Chromium issue where chart redraws are triggered by a
9277
+ // `beforeprint` event (#16931),
9278
+ // https://issues.chromium.org/issues/40222135, the Trusted
9279
+ // Types `createHTML` callback can throw "The provided callback
9280
+ // is no longer runnable" while the browser is mid-print. Retry
9281
+ // with the raw string - `DOMParser` itself is not a Trusted
9282
+ // Types sink, so parsing it directly is safe.
9283
+ try {
9284
+ doc = new DOMParser().parseFromString(markup, 'text/html');
9285
+ }
9286
+ catch {
9287
+ // Ignore, fall through to the inert-document fallback below.
9288
+ }
9268
9289
  }
9269
9290
  if (!doc) {
9270
- const body = createElement('div');
9271
- body.innerHTML = markup;
9272
- doc = { body };
9291
+ // Never assign untrusted markup to a live document's innerHTML.
9292
+ // Parse into a detached, inert document instead.
9293
+ doc = Core_Globals.doc.implementation.createHTMLDocument('');
9294
+ doc.body.innerHTML = markup;
9273
9295
  }
9274
9296
  const appendChildNodes = (node, addTo) => {
9275
9297
  // Preserve the camelCase of SVG tags via localName (#24702).
@@ -9506,7 +9528,6 @@ AST.allowedTags = [
9506
9528
  'span',
9507
9529
  'stop',
9508
9530
  'strong',
9509
- 'style',
9510
9531
  'sub',
9511
9532
  'sup',
9512
9533
  'svg',
@@ -10286,6 +10307,7 @@ class SVGElement {
10286
10307
  let ret = (this[key + 'Value'] ??
10287
10308
  this[key] ??
10288
10309
  (this.element ? this.element.getAttribute(key) : null) ??
10310
+ this.box?.[key] ?? // For labels, when animating border radius
10289
10311
  0);
10290
10312
  if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
10291
10313
  ret = parseFloat(ret);
@@ -12880,7 +12902,7 @@ function arc(cx, cy, w, h, options) {
12880
12902
  * Path
12881
12903
  */
12882
12904
  function callout(x, y, w, h, options) {
12883
- const arrowLength = 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
12905
+ 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;
12884
12906
  const path = roundedRect(x, y, w, h, { r });
12885
12907
  if (!isNumber(anchorX)) {
12886
12908
  return path;
@@ -13504,8 +13526,12 @@ class TextBuilder {
13504
13526
  this.truncate(textNode, textNode.textContent || '', void 0, 0,
13505
13527
  // Target width
13506
13528
  width, ellipsisWidth, stringWithEllipsis);
13507
- textNode.textContent = textNode.textContent
13508
- ?.replace('\u2026', '') + '\u2026';
13529
+ // If there is still text left, add an ellipsis to
13530
+ // the end of the line
13531
+ if (textNode.textContent) {
13532
+ textNode.textContent = textNode.textContent
13533
+ ?.replace('\u2026', '') + '\u2026';
13534
+ }
13509
13535
  }
13510
13536
  break;
13511
13537
  }
@@ -13931,7 +13957,7 @@ class SVGRenderer {
13931
13957
  this.url = this.getReferenceURL();
13932
13958
  // Add description
13933
13959
  const desc = this.createElement('desc').add();
13934
- desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.2'));
13960
+ desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.1.0'));
13935
13961
  this.defs = this.createElement('defs').add();
13936
13962
  this.allowHTML = allowHTML;
13937
13963
  this.forExport = forExport;
@@ -15770,7 +15796,11 @@ class HTMLElement extends SVG_SVGElement {
15770
15796
  // Some properties require other properties to be set
15771
15797
  if (styles?.textOverflow === 'ellipsis') {
15772
15798
  styles.overflow = 'hidden';
15773
- styles.whiteSpace = 'nowrap';
15799
+ // With a line clamp, the text should wrap and ellipsis at the
15800
+ // clamped line instead of staying on one line (#24724)
15801
+ if (!(styles.lineClamp ?? this.styles.lineClamp)) {
15802
+ styles.whiteSpace = 'nowrap';
15803
+ }
15774
15804
  }
15775
15805
  // Apply line clamp
15776
15806
  if (styles?.lineClamp) {
@@ -16959,15 +16989,16 @@ var AxisDefaults;
16959
16989
  /**
16960
16990
  * The label's pixel distance from the perimeter of the plot area.
16961
16991
  * On cartesian charts, this is overridden if the `labels.y` setting
16962
- * is set.
16992
+ * is set. Defaults to 15 unless the labels are aligned inside the
16993
+ * plot area, in which case it defaults to 0.
16963
16994
  *
16964
16995
  * @sample {highcharts} highcharts/yaxis/labels-distance/
16965
16996
  * Polar chart, labels centered under the arc
16966
16997
  *
16967
16998
  * @type {number}
16968
16999
  * @product highcharts gantt
17000
+ * @apioption xAxis.labels.distance
16969
17001
  */
16970
- distance: 15,
16971
17002
  /**
16972
17003
  * Enable or disable the axis labels.
16973
17004
  *
@@ -17225,18 +17256,18 @@ var AxisDefaults;
17225
17256
  * @apioption xAxis.top
17226
17257
  */
17227
17258
  /**
17228
- * Index of another axis that this axis is linked to. When an axis is
17229
- * linked to a master axis, it will take the same extremes as
17230
- * the master, but as assigned by min or max or by setExtremes.
17231
- * It can be used to show additional info, or to ease reading the
17232
- * chart by duplicating the scales.
17259
+ * Index or [id](#xAxis.id) of another axis that this axis is linked to.
17260
+ * When an axis is linked to a master axis, it will take the same
17261
+ * extremes as the master, but as assigned by min or max or by
17262
+ * `setExtremes`. It can be used to show additional info, or to ease
17263
+ * reading the chart by duplicating the scales.
17233
17264
  *
17234
17265
  * @sample {highcharts} highcharts/xaxis/linkedto/
17235
17266
  * Different string formats of the same date
17236
17267
  * @sample {highcharts} highcharts/yaxis/linkedto/
17237
17268
  * Y values on both sides
17238
17269
  *
17239
- * @type {number}
17270
+ * @type {number|string}
17240
17271
  * @since 2.0.2
17241
17272
  * @product highcharts highstock gantt
17242
17273
  * @apioption xAxis.linkedTo
@@ -19356,7 +19387,7 @@ class Tick {
19356
19387
  */
19357
19388
  addLabel() {
19358
19389
  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;
19359
- let label = tick.label, dateTimeLabelFormat, dateTimeLabelFormats, i;
19390
+ let dateTimeLabelFormat, dateTimeLabelFormats, i;
19360
19391
  // The context value
19361
19392
  let value = this.parameters.category || (categories ?
19362
19393
  (categories[pos] ?? names[pos] ?? pos) :
@@ -19442,10 +19473,15 @@ class Tick {
19442
19473
  }
19443
19474
  return axis.defaultLabelFormatter.call(ctx);
19444
19475
  };
19445
- const text = labelFormatter.call(ctx, ctx);
19476
+ /**
19477
+ * The rendered text label of the tick.
19478
+ * @name Highcharts.Tick#label
19479
+ * @type {Highcharts.SVGElement|undefined}
19480
+ */
19481
+ tick.label = tick.createLabel(labelFormatter.call(ctx, ctx), labelOptions);
19446
19482
  // Set up conditional formatting based on the format list if existing.
19447
- const list = dateTimeLabelFormats?.list;
19448
- if (list) {
19483
+ const list = dateTimeLabelFormats?.list, label = tick.label;
19484
+ if (list && label) {
19449
19485
  tick.shortenLabel = function () {
19450
19486
  for (i = 0; i < list.length; i++) {
19451
19487
  extend(ctx, { dateTimeLabelFormat: list[i] });
@@ -19453,43 +19489,17 @@ class Tick {
19453
19489
  text: labelFormatter.call(ctx, ctx)
19454
19490
  });
19455
19491
  if (label.getBBox().width <
19456
- axis.getSlotWidth(tick) - 2 *
19457
- (labelOptions.padding || 0)) {
19492
+ axis.getSlotWidth(tick) - 2 * (labelOptions.padding || 0)) {
19458
19493
  return;
19459
19494
  }
19460
19495
  }
19461
- label.attr({
19462
- text: ''
19463
- });
19496
+ label.attr({ text: '' });
19464
19497
  };
19465
19498
  }
19466
19499
  else {
19467
19500
  // #15692
19468
19501
  tick.shortenLabel = void 0;
19469
19502
  }
19470
- // First call
19471
- if (!label) {
19472
- /**
19473
- * The rendered text label of the tick.
19474
- * @name Highcharts.Tick#label
19475
- * @type {Highcharts.SVGElement|undefined}
19476
- */
19477
- tick.label = label = tick.createLabel(text, labelOptions);
19478
- // Base value to detect change for new calls to getBBox
19479
- tick.rotation = 0;
19480
- // Update
19481
- }
19482
- else if (label.textStr !== text) {
19483
- // When resetting text, also reset the width if dynamically set
19484
- // (#8809)
19485
- if (label.textWidth &&
19486
- !labelOptions.style.width &&
19487
- !label.styles.width) {
19488
- label.css({ width: void 0 });
19489
- }
19490
- label.attr({ text });
19491
- label.textPxLength = label.getBBox().width;
19492
- }
19493
19503
  }
19494
19504
  /**
19495
19505
  * Render and return the label of the tick.
@@ -19497,18 +19507,33 @@ class Tick {
19497
19507
  * @internal
19498
19508
  * @function Highcharts.Tick#createLabel
19499
19509
  */
19500
- createLabel(str, labelOptions, xy) {
19501
- const axis = this.axis, { renderer, styledMode } = axis.chart, whiteSpace = labelOptions.style.whiteSpace, label = defined(str) && labelOptions.enabled ?
19502
- renderer
19503
- .text(str, xy?.x, xy?.y, labelOptions.useHTML)
19504
- .add(axis.labelGroup) :
19505
- void 0;
19510
+ createLabel(text, labelOptions, xy) {
19511
+ const axis = this.axis, { renderer, styledMode } = axis.chart, style = labelOptions.style, whiteSpace = style.whiteSpace;
19512
+ let label = this.label;
19513
+ if (defined(text) && labelOptions.enabled) {
19514
+ label || (label = renderer
19515
+ .text(text, xy?.x, xy?.y, labelOptions.useHTML)
19516
+ .add(axis.labelGroup));
19517
+ }
19518
+ else if (label) {
19519
+ label = label.destroy();
19520
+ // Reset so it doesn't animate when re-enabled
19521
+ this.isNewLabel = true;
19522
+ }
19506
19523
  // Un-rotated length
19507
- if (label) {
19524
+ if (label && (label.labelStyle !== style || text !== label.textStr)) {
19525
+ // Store a reference to the current style object to avoid running
19526
+ // this block on every render call unless something actually
19527
+ // changes.
19528
+ label.labelStyle = style;
19529
+ if (text !== label.textStr) {
19530
+ label.attr({ text });
19531
+ delete label.textPxLength;
19532
+ }
19508
19533
  if (!styledMode) {
19509
- label.css(merge(labelOptions.style));
19534
+ label.css(merge(style));
19510
19535
  }
19511
- label.textPxLength = label.getBBox().width;
19536
+ label.textPxLength ?? (label.textPxLength = label.getBBox().width);
19512
19537
  // Apply the white-space setting after we read the full text width
19513
19538
  if (!styledMode && whiteSpace) {
19514
19539
  label.css({ whiteSpace });
@@ -19580,19 +19605,27 @@ class Tick {
19580
19605
  * @internal
19581
19606
  */
19582
19607
  getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
19583
- const axis = this.axis, transA = axis.transA, reversed = ( // #7911
19584
- axis.isLinked && axis.linkedParent ?
19608
+ const axis = this.axis, { labelAlign, side, staggerLines, transA } = axis, reversed = ( // #7911
19609
+ axis.linkedParent ?
19585
19610
  axis.linkedParent.reversed :
19586
- axis.reversed), staggerLines = axis.staggerLines, rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19611
+ axis.reversed), rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19587
19612
  // Adjust for label alignment if we use reserveSpace: true (#5286)
19588
19613
  labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?
19589
- -axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :
19590
- 0), distance = labelOptions.distance, pos = {};
19614
+ -(axis.labelOffset || 0) * (axis.labelAlign === 'center' ? 0.5 : 1) :
19615
+ 0), distance = labelOptions.distance ?? (
19616
+ // If the label is aligned inside the plot area, default to 0.
19617
+ // This is default behavior or Stock y-axis labels.
19618
+ (side === 1 &&
19619
+ labelAlign === 'right' &&
19620
+ !labelOptions.reserveSpace) ? 0 :
19621
+ (side === 3 &&
19622
+ labelAlign === 'left' &&
19623
+ !labelOptions.reserveSpace) ? 0 : 15), pos = {};
19591
19624
  let yOffset, line;
19592
- if (axis.side === 0) {
19625
+ if (side === 0) {
19593
19626
  yOffset = label.rotation ? -distance : -label.getBBox().height;
19594
19627
  }
19595
- else if (axis.side === 2) {
19628
+ else if (side === 2) {
19596
19629
  yOffset = rotCorr.y + distance;
19597
19630
  }
19598
19631
  else {
@@ -19601,12 +19634,12 @@ class Tick {
19601
19634
  (rotCorr.y - label.getBBox(false, 0).height / 2);
19602
19635
  }
19603
19636
  if (defined(labelOptions.y)) {
19604
- yOffset = axis.side === 0 && axis.horiz ?
19637
+ yOffset = side === 0 && axis.horiz ?
19605
19638
  labelOptions.y + yOffset :
19606
19639
  labelOptions.y;
19607
19640
  }
19608
19641
  x = x +
19609
- (labelOptions.x ?? [0, 1, 0, -1][axis.side] * distance) +
19642
+ (labelOptions.x ?? [0, 1, 0, -1][side] * distance) +
19610
19643
  labelOffsetCorrection +
19611
19644
  rotCorr.x -
19612
19645
  (tickmarkOffset && horiz ?
@@ -19661,7 +19694,7 @@ class Tick {
19661
19694
  * @function Highcharts.Tick#handleOverflow
19662
19695
  */
19663
19696
  handleOverflow(xy) {
19664
- 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 = {};
19697
+ 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;
19665
19698
  let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
19666
19699
  // Check if the label overshoots the chart spacing box. If it does, move
19667
19700
  // it. If it now overshoots the slotWidth, add ellipsis.
@@ -19709,10 +19742,10 @@ class Tick {
19709
19742
  tick.shortenLabel();
19710
19743
  }
19711
19744
  else {
19712
- label.css(extend(css, {
19745
+ label.css({
19713
19746
  width: Math.floor(textWidth) + 'px',
19714
19747
  lineClamp: axis.isRadial ? 0 : 1
19715
- }));
19748
+ });
19716
19749
  }
19717
19750
  }
19718
19751
  }
@@ -19728,8 +19761,11 @@ class Tick {
19728
19761
  * @param {number} [opacity]
19729
19762
  */
19730
19763
  render(index, old, opacity) {
19731
- 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;
19732
- const labelOpacity = (opacity ?? tick.label?.newOpacity ?? 1);
19764
+ 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;
19765
+ if (!axis.visible) {
19766
+ opacity = 0;
19767
+ }
19768
+ const labelOpacity = opacity ?? 1;
19733
19769
  // Anything that is not between `axis.pos` and `axis.pos + axis.length`
19734
19770
  // should not be visible (#20166). The `correctFloat` is for reversed
19735
19771
  // axes in Safari.
@@ -19757,25 +19793,21 @@ class Tick {
19757
19793
  * @param {number} opacity The opacity of the grid line
19758
19794
  */
19759
19795
  renderGridLine(old, opacity) {
19760
- 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;
19761
- let gridLine = tick.gridLine, gridLinePath, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19796
+ 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;
19797
+ let gridLine = tick.gridLine, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19762
19798
  if (tick.type === 'minor') {
19763
19799
  gridLineWidth = options.minorGridLineWidth;
19764
19800
  gridLineColor = options.minorGridLineColor;
19765
19801
  dashStyle = options.minorGridLineDashStyle;
19766
19802
  }
19803
+ // Apply the stroke width initially so the crisping works
19804
+ if (!styledMode) {
19805
+ attribs['stroke-width'] = gridLineWidth || 0;
19806
+ }
19767
19807
  if (!gridLine) {
19768
- if (!axis.chart.styledMode) {
19769
- attribs.stroke = gridLineColor;
19770
- attribs['stroke-width'] = gridLineWidth || 0;
19771
- attribs.dashstyle = dashStyle;
19772
- }
19773
19808
  if (!type) {
19774
19809
  attribs.zIndex = 1;
19775
19810
  }
19776
- if (old) {
19777
- opacity = 0;
19778
- }
19779
19811
  /**
19780
19812
  * The rendered grid line of the tick.
19781
19813
  * @name Highcharts.Tick#gridLine
@@ -19786,22 +19818,24 @@ class Tick {
19786
19818
  .addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')
19787
19819
  .add(axis.gridGroup);
19788
19820
  }
19789
- if (gridLine) {
19790
- gridLinePath = axis.getPlotLinePath({
19791
- value: pos + tickmarkOffset,
19792
- lineWidth: gridLine.strokeWidth(),
19793
- force: 'pass',
19794
- old: old,
19795
- acrossPanes: false // #18025
19796
- });
19821
+ // Grid line path
19822
+ const d = axis.getPlotLinePath({
19823
+ value: pos + tickmarkOffset,
19824
+ lineWidth: gridLine.strokeWidth(),
19825
+ force: 'pass',
19826
+ old: old,
19827
+ acrossPanes: false // #18025
19828
+ });
19829
+ if (d) {
19830
+ attribs.d = d;
19831
+ attribs.opacity = old ? 0 : opacity;
19832
+ if (!styledMode) {
19833
+ attribs.stroke = gridLineColor;
19834
+ attribs.dashstyle = dashStyle;
19835
+ }
19797
19836
  // If the parameter 'old' is set, the current call will be followed
19798
19837
  // by another call, therefore do not do any animations this time
19799
- if (gridLinePath) {
19800
- gridLine[old || tick.isNew ? 'attr' : 'animate']({
19801
- d: gridLinePath,
19802
- opacity: opacity
19803
- });
19804
- }
19838
+ gridLine[old || tick.isNew ? 'attr' : 'animate'](attribs);
19805
19839
  }
19806
19840
  }
19807
19841
  /**
@@ -19813,13 +19847,13 @@ class Tick {
19813
19847
  * @param {number} opacity The opacity of the mark
19814
19848
  */
19815
19849
  renderMark(xy, opacity) {
19816
- 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
19850
+ 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
19817
19851
  tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
19818
19852
  let mark = tick.mark;
19819
- const isNewMark = !mark;
19820
- if (tickSize) {
19853
+ const verb = mark ? 'animate' : 'attr';
19854
+ if (tickSize || mark) {
19821
19855
  // Negate the length
19822
- if (axis.opposite) {
19856
+ if (axis.opposite && tickSize) {
19823
19857
  tickSize[0] = -tickSize[0];
19824
19858
  }
19825
19859
  // First time, create it
@@ -19832,16 +19866,16 @@ class Tick {
19832
19866
  tick.mark = mark = renderer.path()
19833
19867
  .addClass('highcharts-' + (type ? type + '-' : '') + 'tick')
19834
19868
  .add(axis.axisGroup);
19835
- if (!axis.chart.styledMode) {
19836
- mark.attr({
19837
- stroke: tickColor,
19838
- 'stroke-width': tickWidth
19839
- });
19840
- }
19841
19869
  }
19842
- mark[isNewMark ? 'attr' : 'animate']({
19843
- d: tick.getMarkPath(x, y, tickSize[0], mark.strokeWidth(), axis.horiz, renderer),
19844
- opacity: opacity
19870
+ if (!chart.styledMode) {
19871
+ mark[verb]({
19872
+ stroke: tickColor,
19873
+ 'stroke-width': tickWidth
19874
+ });
19875
+ }
19876
+ mark[verb]({
19877
+ d: tick.getMarkPath(x, y, tickSize?.[0] || 0, mark.strokeWidth(), axis.horiz, renderer),
19878
+ opacity: tickSize ? opacity : 0
19845
19879
  });
19846
19880
  }
19847
19881
  }
@@ -20003,6 +20037,11 @@ extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
20003
20037
  * Axis options
20004
20038
  */
20005
20039
  class Axis {
20040
+ /* *
20041
+ *
20042
+ * Static Properties
20043
+ *
20044
+ * */
20006
20045
  /* *
20007
20046
  *
20008
20047
  * Constructors
@@ -20079,9 +20118,11 @@ class Axis {
20079
20118
  * @name Highcharts.Axis#side
20080
20119
  * @type {number}
20081
20120
  */
20082
- axis.side = (userOptions.side ?? axis.side ?? (horiz ?
20083
- (axis.opposite ? 0 : 2) : // Top : bottom
20084
- (axis.opposite ? 1 : 3)));
20121
+ axis.side = userOptions.side ??
20122
+ (horiz ?
20123
+ (axis.opposite ? 0 : 2) : // Top : bottom
20124
+ (axis.opposite ? 1 : 3) // Right : left
20125
+ );
20085
20126
  /**
20086
20127
  * Current options for the axis after merge of defaults and user's
20087
20128
  * options.
@@ -20092,8 +20133,8 @@ class Axis {
20092
20133
  axis.setOptions(userOptions);
20093
20134
  const options = axis.options, labelsOptions = options.labels;
20094
20135
  // Set the type and fire an event
20095
- axis.type ?? (axis.type = options.type || 'linear');
20096
- axis.uniqueNames ?? (axis.uniqueNames = options.uniqueNames ?? true);
20136
+ axis.type = options.type || 'linear';
20137
+ axis.uniqueNames = options.uniqueNames ?? true;
20097
20138
  fireEvent(axis, 'afterSetType');
20098
20139
  /**
20099
20140
  * User's options for this axis without defaults.
@@ -20110,7 +20151,7 @@ class Axis {
20110
20151
  * @name Highcharts.Axis#reversed
20111
20152
  * @type {boolean}
20112
20153
  */
20113
- axis.reversed = (options.reversed ?? axis.reversed);
20154
+ axis.reversed = options.reversed;
20114
20155
  axis.visible = options.visible;
20115
20156
  axis.zoomEnabled = options.zoomEnabled;
20116
20157
  // Initial categories
@@ -20132,16 +20173,12 @@ class Axis {
20132
20173
  */
20133
20174
  axis.categories = (isArray(options.categories) && options.categories) ||
20134
20175
  (axis.hasNames ? [] : void 0);
20135
- // Axis names and its map for quick access. Backwards mapping is much
20136
- // faster than array searching (#7725). Preserve on update (#3830)
20137
- axis.names || (axis.names = []);
20176
+ axis.names || (axis.names = []); // Preserve on update (#3830)
20138
20177
  axis.namesMap || (axis.namesMap = {});
20139
20178
  // Placeholder for plotLines and plotBands groups
20140
- axis.plotLinesAndBandsGroups = {};
20179
+ axis.plotLinesAndBandsGroups || (axis.plotLinesAndBandsGroups = {});
20141
20180
  // Shorthand types
20142
20181
  axis.positiveValuesOnly = !!axis.logarithmic;
20143
- // Flag, if axis is linked to another axis
20144
- axis.isLinked = defined(options.linkedTo);
20145
20182
  /**
20146
20183
  * List of major ticks mapped by position on axis.
20147
20184
  *
@@ -20150,8 +20187,8 @@ class Axis {
20150
20187
  * @name Highcharts.Axis#ticks
20151
20188
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20152
20189
  */
20153
- axis.ticks = {};
20154
- axis.labelEdge = [];
20190
+ axis.ticks || (axis.ticks = {});
20191
+ axis.labelEdge || (axis.labelEdge = []);
20155
20192
  /**
20156
20193
  * List of minor ticks mapped by position on the axis.
20157
20194
  *
@@ -20160,11 +20197,9 @@ class Axis {
20160
20197
  * @name Highcharts.Axis#minorTicks
20161
20198
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20162
20199
  */
20163
- axis.minorTicks = {};
20164
- // List of plotLines/Bands
20165
- axis.plotLinesAndBands = [];
20200
+ axis.minorTicks || (axis.minorTicks = {});
20166
20201
  // Alternate bands
20167
- axis.alternateBands = {};
20202
+ axis.alternateBands || (axis.alternateBands = {});
20168
20203
  /**
20169
20204
  * The length of the axis in terms of pixels.
20170
20205
  *
@@ -20198,7 +20233,7 @@ class Axis {
20198
20233
  * @name Highcharts.Axis#crosshair
20199
20234
  * @type {boolean|Highcharts.AxisCrosshairOptions}
20200
20235
  */
20201
- const crosshair = options.crosshair ?? splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1];
20236
+ const crosshair = options.crosshair ?? splat(chart.options.tooltip?.crosshairs)[isXAxis ? 0 : 1];
20202
20237
  axis.crosshair = crosshair === true ? {} : crosshair;
20203
20238
  // Register. Don't add it again on Axis.update().
20204
20239
  if (chart.axes.indexOf(axis) === -1) { //
@@ -20253,14 +20288,14 @@ class Axis {
20253
20288
  },
20254
20289
  margin: 15
20255
20290
  } :
20256
- // Left and right axis, title rotated 90 or 270 degrees
20291
+ // Left and right axis, title rotated -90 or 90 degrees
20257
20292
  // respectively
20258
20293
  {
20259
20294
  labels: {
20260
20295
  padding: 1
20261
20296
  },
20262
20297
  title: {
20263
- rotation: 90 * this.side
20298
+ rotation: this.side === 1 ? 90 : -90
20264
20299
  }
20265
20300
  };
20266
20301
  this.options = merge(sideSpecific,
@@ -20474,6 +20509,9 @@ class Axis {
20474
20509
  if (!axis.isRadial) {
20475
20510
  returnValue = correctFloat(returnValue);
20476
20511
  }
20512
+ if (Math.abs(returnValue) < 1e-9) {
20513
+ returnValue = 0;
20514
+ }
20477
20515
  }
20478
20516
  return returnValue;
20479
20517
  }
@@ -20529,7 +20567,7 @@ class Axis {
20529
20567
  * The SVG path definition for the plot line.
20530
20568
  */
20531
20569
  getPlotLinePath(options) {
20532
- 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;
20570
+ 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;
20533
20571
  let translatedValue = options.translatedValue, force = options.force, x1, y1, x2, y2, skip;
20534
20572
  // eslint-disable-next-line valid-jsdoc
20535
20573
  /**
@@ -20567,17 +20605,17 @@ class Axis {
20567
20605
  skip = true;
20568
20606
  force = false; // #7175, don't force it when path is invalid
20569
20607
  }
20570
- else if (axis.horiz) {
20571
- y1 = axisTop;
20608
+ else if (horiz) {
20609
+ y1 = top;
20572
20610
  y2 = cHeight - axis.bottom + (axis.options.isInternal ?
20573
20611
  0 :
20574
20612
  (chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator
20575
- x1 = x2 = between(x1, axisLeft, axisLeft + axis.width);
20613
+ x1 = x2 = between(x1, left, left + axis.width);
20576
20614
  }
20577
20615
  else {
20578
- x1 = axisLeft;
20616
+ x1 = left;
20579
20617
  x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);
20580
- y1 = y2 = between(y1, axisTop, axisTop + axis.height);
20618
+ y1 = y2 = between(y1, top, top + axis.height);
20581
20619
  }
20582
20620
  e.path = skip && !force ?
20583
20621
  void 0 :
@@ -21006,7 +21044,7 @@ class Axis {
21006
21044
  * @emits Highcharts.Axis#event:foundExtremes
21007
21045
  */
21008
21046
  setTickInterval(secondPass) {
21009
- 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;
21047
+ 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;
21010
21048
  let maxPadding = options.maxPadding, minPadding = options.minPadding, range = 0, linkedParentExtremes,
21011
21049
  // Only non-negative tickInterval is valid, #12961
21012
21050
  tickIntervalOption = isNumber(options.tickInterval) && options.tickInterval >= 0 ?
@@ -21019,7 +21057,6 @@ class Axis {
21019
21057
  hardMax = (axis.userMax ?? time.parse(options.max));
21020
21058
  // Linked axis gets the extremes from the parent axis
21021
21059
  if (linkedParent) {
21022
- axis.linkedParent = linkedParent;
21023
21060
  linkedParentExtremes = linkedParent.getExtremes();
21024
21061
  axis.min =
21025
21062
  linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
@@ -21329,7 +21366,7 @@ class Axis {
21329
21366
  // Reset min/max or remove extremes based on start/end on tick
21330
21367
  this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor
21331
21368
  this.trimTicks(tickPositions, startOnTick, endOnTick);
21332
- if (!this.isLinked && isNumber(this.min) && isNumber(this.max)) {
21369
+ if (!this.linkedParent && isNumber(this.min) && isNumber(this.max)) {
21333
21370
  // Subtract half a unit (#2619, #2846, #2515, #3390), but not in
21334
21371
  // case of multiple ticks (#6897)
21335
21372
  if (this.single &&
@@ -21364,7 +21401,7 @@ class Axis {
21364
21401
  trimTicks(tickPositions, startOnTick, endOnTick) {
21365
21402
  const roundedMin = tickPositions[0], roundedMax = tickPositions[tickPositions.length - 1], minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)
21366
21403
  fireEvent(this, 'trimTicks');
21367
- if (!this.isLinked ||
21404
+ if (!this.linkedParent ||
21368
21405
  // Linked non-grid axes should trim ticks, #21743.
21369
21406
  // Grid axis has custom handling of ticks.
21370
21407
  !this.grid) {
@@ -21638,7 +21675,15 @@ class Axis {
21638
21675
  * @emits Highcharts.Axis#event:afterSetScale
21639
21676
  */
21640
21677
  setScale() {
21641
- const axis = this, { coll, stacking } = axis;
21678
+ const axis = this, { chart, coll, options, stacking } = axis, { linkedTo } = options, axes = chart[coll] || [], index = axes.indexOf(axis), parent = isString(linkedTo) ?
21679
+ find(axes, (a) => a.options.id === linkedTo) :
21680
+ (isNumber(linkedTo) ? axes[linkedTo] : void 0), linkedParent = axis.linkedParent =
21681
+ parent === axis ? void 0 : parent;
21682
+ // Scale a later-ordered parent first so its extremes are ready. Skip
21683
+ // grid column axes, which live outside the collection (#24658).
21684
+ if (linkedParent && index > -1 && axes.indexOf(linkedParent) > index) {
21685
+ linkedParent.setScale();
21686
+ }
21642
21687
  let isDirtyData = false, isXAxisDirty = false;
21643
21688
  axis.series.forEach((series) => {
21644
21689
  isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;
@@ -21655,7 +21700,7 @@ class Axis {
21655
21700
  if (isDirtyAxisLength ||
21656
21701
  isDirtyData ||
21657
21702
  isXAxisDirty ||
21658
- axis.isLinked ||
21703
+ axis.linkedParent ||
21659
21704
  axis.forceRedraw ||
21660
21705
  axis.userMin !== axis.old?.userMin ||
21661
21706
  axis.userMax !== axis.old?.userMax ||
@@ -22017,7 +22062,7 @@ class Axis {
22017
22062
  renderUnsquish() {
22018
22063
  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 ?
22019
22064
  2 * (labelOptions.padding || 0) :
22020
- labelOptions.distance || 0 // #21172
22065
+ labelOptions.distance ?? 15 // #21172
22021
22066
  ))), attr = {}, labelMetrics = this.labelMetrics(), lineClampOption = labelStyleOptions.lineClamp;
22022
22067
  let commonWidth, lineClamp = lineClampOption ?? (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1), maxLabelLength = 0;
22023
22068
  // Set rotation option unless it is "auto", like in gauges
@@ -22097,7 +22142,6 @@ class Axis {
22097
22142
  });
22098
22143
  }
22099
22144
  }
22100
- tick.rotation = attr.rotation;
22101
22145
  }
22102
22146
  }, this);
22103
22147
  // Note: Why is this not part of getLabelPosition?
@@ -22129,46 +22173,50 @@ class Axis {
22129
22173
  * Whether or not to display the title.
22130
22174
  */
22131
22175
  addTitle(display) {
22132
- const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode;
22133
- let textAlign;
22134
- if (!axis.axisTitle) {
22135
- textAlign = axisTitleOptions.textAlign;
22136
- if (!textAlign) {
22137
- textAlign = (horiz ? {
22138
- low: 'left',
22139
- middle: 'center',
22140
- high: 'right'
22141
- } : {
22142
- low: opposite ? 'right' : 'left',
22143
- middle: 'center',
22144
- high: opposite ? 'left' : 'right'
22145
- })[axisTitleOptions.align];
22146
- }
22147
- axis.axisTitle = renderer
22148
- .text(axisTitleOptions.text || '', 0, 0, axisTitleOptions.useHTML)
22149
- .attr({
22150
- zIndex: 7,
22151
- rotation: axisTitleOptions.rotation || 0,
22152
- align: textAlign
22153
- })
22176
+ 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 ||
22177
+ (horiz ? {
22178
+ low: 'left',
22179
+ middle: 'center',
22180
+ high: 'right'
22181
+ } : {
22182
+ low: opposite ? 'right' : 'left',
22183
+ middle: 'center',
22184
+ high: opposite ? 'left' : 'right'
22185
+ })[axisTitleOptions.align], attr = {
22186
+ text: axisTitleOptions.text || '',
22187
+ zIndex: 7,
22188
+ align: textAlign
22189
+ }, animatable = {
22190
+ rotation: axisTitleOptions.rotation || 0
22191
+ };
22192
+ let axisTitle = axis.axisTitle;
22193
+ if (!axisTitle) {
22194
+ axisTitle = renderer
22195
+ .text('', 0, 0, axisTitleOptions.useHTML)
22196
+ .attr(extend(attr, animatable))
22154
22197
  .addClass('highcharts-axis-title');
22155
- // #7814, don't mutate style option
22156
- if (!styledMode) {
22157
- axis.axisTitle.css(merge(axisTitleOptions.style));
22158
- }
22159
- axis.axisTitle.add(axis.axisGroup);
22160
- axis.axisTitle.isNew = true;
22198
+ axisTitle.add(axis.axisGroup);
22199
+ axisTitle.isNew = true;
22161
22200
  }
22162
- // Max width defaults to the length of the axis
22163
- if (!styledMode &&
22164
- !axisTitleOptions.style.width &&
22165
- !axis.isRadial) {
22166
- axis.axisTitle.css({
22167
- width: axis.len + 'px'
22168
- });
22201
+ else {
22202
+ axisTitle
22203
+ .attr(attr)
22204
+ .animate(animatable);
22205
+ }
22206
+ if (!styledMode) {
22207
+ // #7814, don't mutate the style option
22208
+ const css = merge(axisTitleOptions.style);
22209
+ // Max width defaults to the length of the axis
22210
+ if (!axisTitleOptions.style.width &&
22211
+ !axis.isRadial) {
22212
+ css.width = axis.len + 'px';
22213
+ }
22214
+ axisTitle.css(css);
22169
22215
  }
22170
22216
  // Hide or show the title depending on whether showEmpty is set
22171
- axis.axisTitle[display ? 'show' : 'hide'](display);
22217
+ axisTitle[display ? 'show' : 'hide'](display);
22218
+ // Register
22219
+ axis.axisTitle = axisTitle;
22172
22220
  }
22173
22221
  /**
22174
22222
  * Generates a tick for initial positioning.
@@ -22196,17 +22244,18 @@ class Axis {
22196
22244
  createGroups() {
22197
22245
  const { axisParent, // Used in color axis
22198
22246
  chart, coll, options } = this, renderer = chart.renderer;
22199
- const createGroup = (name, suffix, zIndex) => renderer.g(name)
22200
- .attr({ zIndex })
22247
+ const createGroup = (name, suffix) => renderer.g(name)
22201
22248
  .addClass(`highcharts-${coll.toLowerCase()}${suffix} ` +
22202
22249
  (this.isRadial ? `highcharts-radial-axis${suffix} ` : '') +
22203
22250
  (options.className || ''))
22204
22251
  .add(axisParent);
22205
- if (!this.axisGroup) {
22206
- this.gridGroup = createGroup('grid', '-grid', options.gridZIndex).clip(this.clippable ? chart.plotClipInner : void 0);
22207
- this.axisGroup = createGroup('axis', '', options.zIndex);
22208
- this.labelGroup = createGroup('axis-labels', '-labels', options.labels.zIndex);
22209
- }
22252
+ (this.axisGroup || (this.axisGroup = createGroup('axis', '')))
22253
+ .attr({ zIndex: options.zIndex });
22254
+ (this.gridGroup || (this.gridGroup = createGroup('grid', '-grid')))
22255
+ .clip(this.clippable ? chart.plotClipInner : void 0)
22256
+ .attr({ zIndex: options.gridZIndex });
22257
+ (this.labelGroup || (this.labelGroup = createGroup('axis-labels', '-labels')))
22258
+ .attr({ zIndex: options.labels.zIndex });
22210
22259
  }
22211
22260
  /**
22212
22261
  * Shuffle existing category ticks, like in bar race chart
@@ -22214,8 +22263,11 @@ class Axis {
22214
22263
  * @internal
22215
22264
  */
22216
22265
  shuffleTicks() {
22217
- const ticks = this.ticks, oldNames = this.old?.names;
22218
- if (this.type === 'category' && oldNames) {
22266
+ const ticks = this.ticks, oldNames = this.old?.names, hasDuplicates = (arr) => new Set(arr).size !== arr.length;
22267
+ if (this.type === 'category' &&
22268
+ oldNames &&
22269
+ !hasDuplicates(oldNames) &&
22270
+ !hasDuplicates(this.names)) {
22219
22271
  oldNames.forEach((name, oldPos) => {
22220
22272
  const pos = this.namesMap[name];
22221
22273
  if (defined(pos) && oldPos !== pos) {
@@ -22257,7 +22309,7 @@ class Axis {
22257
22309
  * @emits Highcharts.Axis#event:afterGetOffset
22258
22310
  */
22259
22311
  getOffset() {
22260
- 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];
22312
+ 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;
22261
22313
  let tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }, absTickRotCorrX = 0, showAxis, titleOffset = 0, titleOffsetOption, titleMargin = 0, labelOffset = 0, // Reset
22262
22314
  labelOffsetPadded, lineHeightCorrection, reserveSpaceDefault;
22263
22315
  // For reuse in Axis.render
@@ -22265,7 +22317,7 @@ class Axis {
22265
22317
  // Set/reset staggerLines
22266
22318
  axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;
22267
22319
  axis.createGroups();
22268
- if (hasData || axis.isLinked) {
22320
+ if (hasData || axis.linkedParent) {
22269
22321
  // Shuffle existing category ticks
22270
22322
  axis.shuffleTicks();
22271
22323
  // Generate new ticks
@@ -22317,6 +22369,9 @@ class Axis {
22317
22369
  axisTitleOptions.margin ?? (horiz ? 5 : 10);
22318
22370
  }
22319
22371
  }
22372
+ else {
22373
+ axis.axisTitle = axis.axisTitle?.destroy();
22374
+ }
22320
22375
  // Render the axis line
22321
22376
  axis.renderLine();
22322
22377
  // Handle automatic or user set offset
@@ -22340,12 +22395,10 @@ class Axis {
22340
22395
  labelOffsetPadded -= lineHeightCorrection;
22341
22396
  labelOffsetPadded += directionFactor * (horiz ?
22342
22397
  (labelOptions.y ??
22343
- (tickRotCorr.y +
22344
- directionFactor * labelOptions.distance)) :
22398
+ (tickRotCorr.y + directionFactor * distance)) :
22345
22399
  (labelOptions.x ?? (reserveSpaceDefault ?
22346
- directionFactor * (labelOptions.distance - absTickRotCorrX) :
22347
- tickRotCorr.x +
22348
- directionFactor * labelOptions.distance)));
22400
+ directionFactor * (distance - absTickRotCorrX) :
22401
+ tickRotCorr.x + directionFactor * distance)));
22349
22402
  if (!horiz &&
22350
22403
  !reserveSpaceDefault &&
22351
22404
  axis.labelAlign === 'center' &&
@@ -22359,8 +22412,8 @@ class Axis {
22359
22412
  // has rendered.
22360
22413
  if (coll !== 'colorAxis' && clipOffset) {
22361
22414
  const tickSize = this.tickSize('tick');
22362
- axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +
22363
- directionFactor * axis.offset, labelOffsetPadded, // #3027
22415
+ axisOffset[side] = Math.max(axisOffset[side], Math.max((axis.axisTitleMargin || 0) + titleOffset, labelOffsetPadded) + directionFactor * axis.offset, // #6967
22416
+ labelOffsetPadded, // #3027
22364
22417
  tickPositions?.length && tickSize ?
22365
22418
  tickSize[0] + directionFactor * axis.offset :
22366
22419
  0 // #4866
@@ -22422,18 +22475,20 @@ class Axis {
22422
22475
  * @function Highcharts.Axis#renderLine
22423
22476
  */
22424
22477
  renderLine() {
22425
- const { chart, offset = 0, options } = this;
22478
+ const { chart, offset = 0, options } = this, verb = this.axisLine ? 'animate' : 'attr';
22426
22479
  this.axisLine || (this.axisLine = chart.renderer.path()
22427
22480
  .addClass('highcharts-axis-line')
22428
- .attr(chart.styledMode ? {} : {
22429
- stroke: options.lineColor,
22430
- 'stroke-width': options.lineWidth,
22431
- zIndex: 7
22432
- })
22481
+ .attr({ zIndex: 7 })
22433
22482
  .clip(this.clippable && offset <= 0 ?
22434
22483
  chart.plotClipOuter :
22435
22484
  void 0)
22436
22485
  .add(this.axisGroup));
22486
+ if (!chart.styledMode) {
22487
+ this.axisLine[verb]({
22488
+ stroke: options.lineColor,
22489
+ 'stroke-width': options.lineWidth
22490
+ });
22491
+ }
22437
22492
  }
22438
22493
  /**
22439
22494
  * Position the axis title.
@@ -22518,9 +22573,9 @@ class Axis {
22518
22573
  * Whether the tick should animate in from last computed position
22519
22574
  */
22520
22575
  renderTick(pos, i, slideIn) {
22521
- const axis = this, isLinked = axis.isLinked, ticks = axis.ticks;
22576
+ const axis = this, ticks = axis.ticks;
22522
22577
  // Linked axes need an extra check to find out if
22523
- if (!isLinked ||
22578
+ if (!axis.linkedParent ||
22524
22579
  (pos >= axis.min && pos <= axis.max) ||
22525
22580
  axis.grid?.isColumn) {
22526
22581
  if (!ticks[pos]) {
@@ -22546,11 +22601,13 @@ class Axis {
22546
22601
  * @emits Highcharts.Axis#event:afterRender
22547
22602
  */
22548
22603
  render() {
22549
- 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);
22604
+ 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);
22550
22605
  let from, to;
22551
22606
  // Reset
22552
22607
  axis.labelEdge.length = 0;
22553
22608
  axis.overlap = false;
22609
+ // Update z-indices
22610
+ this.createGroups();
22554
22611
  // Mark all elements inActive before we go over and mark the active ones
22555
22612
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22556
22613
  objectEach(coll, function (tick) {
@@ -22569,7 +22626,7 @@ class Axis {
22569
22626
  }
22570
22627
  }
22571
22628
  // If the series has data draw the ticks. Else only the line and title
22572
- if (axis.hasData() || isLinked) {
22629
+ if (axis.hasData() || axis.linkedParent) {
22573
22630
  const slideInTicks = axis.chart.hasRendered &&
22574
22631
  axis.old && isNumber(axis.old.min);
22575
22632
  // Minor ticks
@@ -22607,8 +22664,10 @@ class Axis {
22607
22664
  tickmarkOffset)) { // #2248, #4660
22608
22665
  if (!alternateBands[pos]) {
22609
22666
  // Should be imported from PlotLineOrBand.js, but
22610
- // the dependency cycle with axis is a problem
22611
- alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {});
22667
+ // the dependency cycle with axis is a problem. Try
22668
+ // moving it to the PlotLineOrBand axis composition
22669
+ // later.
22670
+ alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {}, 'plotBands');
22612
22671
  }
22613
22672
  from = pos + tickmarkOffset; // #949
22614
22673
  alternateBands[pos].options = {
@@ -22622,17 +22681,13 @@ class Axis {
22622
22681
  }
22623
22682
  });
22624
22683
  }
22625
- // Custom plot lines and bands
22626
- if (!axis._addedPlotLB) { // Only first time
22627
- axis._addedPlotLB = true;
22628
- (options.plotLines || [])
22629
- .concat(options.plotBands || [])
22630
- .forEach(function (plotLineOptions) {
22631
- axis
22632
- .addPlotBandOrLine(plotLineOptions);
22633
- });
22634
- }
22635
22684
  } // End if hasData
22685
+ // Render or update rendering of plot lines and bands
22686
+ for (const coll of ['plotBands', 'plotLines']) {
22687
+ for (const plotItem of this[coll]) {
22688
+ plotItem.render();
22689
+ }
22690
+ }
22636
22691
  // Remove inactive ticks
22637
22692
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22638
22693
  const forDestruction = [], delay = animation.duration, destroyInactiveItems = function () {
@@ -22666,20 +22721,22 @@ class Axis {
22666
22721
  // Set the axis line path
22667
22722
  if (axisLine) {
22668
22723
  axisLine[axisLine.isPlaced ? 'animate' : 'attr']({
22669
- d: this.getLinePath(axisLine.strokeWidth())
22724
+ d: this.getLinePath(axisLine.strokeWidth()),
22725
+ opacity
22670
22726
  });
22671
22727
  axisLine.isPlaced = true;
22672
22728
  // Show or hide the line depending on options.showEmpty
22673
22729
  axisLine[showAxis ? 'show' : 'hide'](showAxis);
22674
22730
  }
22675
22731
  if (axisTitle && showAxis) {
22676
- axisTitle[axisTitle.isNew ? 'attr' : 'animate'](axis.getTitlePosition(axisTitle));
22732
+ axisTitle[axisTitle.isNew ? 'attr' : 'animate']({
22733
+ opacity,
22734
+ ...axis.getTitlePosition(axisTitle)
22735
+ });
22677
22736
  axisTitle.isNew = false;
22678
22737
  }
22679
22738
  // Stacked totals
22680
- if (stackLabelOptions?.enabled && axis.stacking) {
22681
- axis.stacking.renderStackTotals();
22682
- }
22739
+ axis.stacking?.renderStackTotals();
22683
22740
  // First time, save the existing state
22684
22741
  if (!this.old) {
22685
22742
  this.saveOld();
@@ -22695,13 +22752,11 @@ class Axis {
22695
22752
  * @function Highcharts.Axis#redraw
22696
22753
  */
22697
22754
  redraw() {
22698
- if (this.visible) {
22755
+ // If it was initially visible, but dynamically hidden, `this.axisGroup`
22756
+ // exists. Then render with opacity 0.
22757
+ if (this.visible || this.axisGroup) {
22699
22758
  // Render the axis
22700
22759
  this.render();
22701
- // Move plot lines and bands
22702
- this.plotLinesAndBands.forEach(function (plotLine) {
22703
- plotLine.render();
22704
- });
22705
22760
  }
22706
22761
  // Mark associated series as dirty and ready for redraw
22707
22762
  this.series.forEach(function (series) {
@@ -22715,6 +22770,7 @@ class Axis {
22715
22770
  */
22716
22771
  saveOld() {
22717
22772
  this.old = isNumber(this.min) ? {
22773
+ horiz: this.horiz,
22718
22774
  len: this.len,
22719
22775
  max: this.max,
22720
22776
  min: this.min,
@@ -22724,64 +22780,37 @@ class Axis {
22724
22780
  userMin: this.userMin
22725
22781
  } : void 0;
22726
22782
  }
22727
- /**
22728
- * Returns an array of axis properties, that should be untouched during
22729
- * reinitialization.
22730
- *
22731
- * @internal
22732
- * @function Highcharts.Axis#getKeepProps
22733
- */
22734
- getKeepProps() {
22735
- return (this.keepProps || Axis.keepProps);
22736
- }
22737
22783
  /**
22738
22784
  * Destroys an Axis instance. See {@link Axis#remove} for the API endpoint
22739
22785
  * to fully remove the axis.
22740
22786
  *
22741
22787
  * @internal
22742
22788
  * @function Highcharts.Axis#destroy
22743
- *
22744
- * @param {boolean} [keepEvents]
22745
- * Whether to preserve events, used internally in Axis.update.
22746
22789
  */
22747
- destroy(keepEvents) {
22748
- const axis = this, plotLinesAndBands = axis.plotLinesAndBands, eventOptions = this.eventOptions;
22749
- fireEvent(this, 'destroy', { keepEvents: keepEvents });
22790
+ destroy() {
22791
+ fireEvent(this, 'destroy');
22750
22792
  // Remove the events
22751
- if (!keepEvents) {
22752
- removeEvent(axis);
22753
- }
22793
+ removeEvent(this);
22754
22794
  // Destroy collections
22755
- [axis.ticks, axis.minorTicks, axis.alternateBands].forEach(function (coll) {
22756
- destroyObjectProperties(coll);
22757
- });
22758
- if (plotLinesAndBands) {
22759
- let i = plotLinesAndBands.length;
22760
- while (i--) { // #1975
22761
- plotLinesAndBands[i].destroy();
22762
- }
22763
- }
22764
- // Destroy elements
22795
+ [
22796
+ this.ticks,
22797
+ this.minorTicks,
22798
+ this.alternateBands,
22799
+ this.plotBands,
22800
+ this.plotLines,
22801
+ this.plotLinesAndBandsGroups
22802
+ ].forEach(destroyObjectProperties);
22803
+ // Destroy elements and clear reference
22765
22804
  [
22766
22805
  'axisLine', 'axisTitle', 'axisGroup',
22767
22806
  'gridGroup', 'labelGroup', 'cross', 'scrollbar'
22768
- ].forEach(function (prop) {
22769
- if (axis[prop]) {
22770
- axis[prop] = axis[prop].destroy();
22771
- }
22807
+ ].forEach((prop) => {
22808
+ this[prop] = this[prop]?.destroy();
22772
22809
  });
22773
- // Destroy each generated group for plotLines and plotBands
22774
- for (const plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in
22775
- axis.plotLinesAndBandsGroups[plotGroup] =
22776
- axis.plotLinesAndBandsGroups[plotGroup].destroy();
22777
- }
22778
22810
  // Delete all properties and fall back to the prototype.
22779
- objectEach(axis, function (_val, key) {
22780
- if (axis.getKeepProps().indexOf(key) === -1) {
22781
- delete axis[key];
22782
- }
22811
+ objectEach(this, (_val, key) => {
22812
+ delete this[key];
22783
22813
  });
22784
- this.eventOptions = eventOptions;
22785
22814
  }
22786
22815
  /**
22787
22816
  * Internal function to draw a crosshair.
@@ -22875,25 +22904,21 @@ class Axis {
22875
22904
  void 0 :
22876
22905
  chart.plotClipInner)
22877
22906
  .add();
22878
- // Presentational attributes
22879
- if (!chart.styledMode) {
22880
- cross.attr({
22881
- stroke: options.color ||
22882
- (categorized ?
22883
- Axis_color(
22884
- // eslint-disable-next-line max-len
22885
- 'var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22886
- 'var(--highcharts-neutral-color-20)'),
22887
- 'stroke-width': (options.width ?? 1)
22888
- }).css({
22889
- 'pointer-events': 'none'
22890
- });
22891
- if (options.dashStyle) {
22892
- cross.attr({
22893
- dashstyle: options.dashStyle
22894
- });
22895
- }
22896
- }
22907
+ }
22908
+ // Presentational attributes
22909
+ if (!chart.styledMode) {
22910
+ cross
22911
+ .attr({
22912
+ stroke: options.color || (categorized ?
22913
+ Axis_color('var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22914
+ 'var(--highcharts-neutral-color-20)'),
22915
+ 'stroke-width': options.width ?? 1,
22916
+ // Dash style must be after stroke-width
22917
+ dashstyle: options.dashStyle || 'Solid'
22918
+ })
22919
+ .css({
22920
+ 'pointer-events': 'none'
22921
+ });
22897
22922
  }
22898
22923
  cross
22899
22924
  .show()
@@ -22903,9 +22928,7 @@ class Axis {
22903
22928
  'stroke-width': this.transA
22904
22929
  });
22905
22930
  }
22906
- if (this.cross) {
22907
- this.cross.e = e;
22908
- }
22931
+ cross.e = e;
22909
22932
  },
22910
22933
  // Only use delay if the crosshair is currently hidden
22911
22934
  (!graphic || graphic.attr('visibility') === 'hidden') ?
@@ -22944,13 +22967,14 @@ class Axis {
22944
22967
  * operations on the chart, it is a good idea to set redraw to false and
22945
22968
  * call {@link Chart#redraw} after.
22946
22969
  */
22947
- update(options, redraw) {
22970
+ update(options = {}, redraw = true) {
22948
22971
  const chart = this.chart;
22972
+ fireEvent(this, 'update', { options });
22949
22973
  options = merge(this.userOptions, options);
22950
- this.destroy(true);
22974
+ this.isDirty = this.forceRedraw = true;
22951
22975
  this.init(chart, options);
22952
22976
  chart.isDirtyBox = true;
22953
- if (redraw ?? true) {
22977
+ if (redraw) {
22954
22978
  chart.redraw();
22955
22979
  }
22956
22980
  }
@@ -23019,26 +23043,6 @@ class Axis {
23019
23043
  this.update({ categories: categories }, redraw);
23020
23044
  }
23021
23045
  }
23022
- /* *
23023
- *
23024
- * Static Properties
23025
- *
23026
- * */
23027
- /**
23028
- * Properties to survive after destroy, needed for Axis.update (#4317,
23029
- * #5773, #5881).
23030
- * @internal
23031
- */
23032
- Axis.keepProps = [
23033
- 'coll',
23034
- 'extKey',
23035
- 'hcEvents',
23036
- 'len',
23037
- 'names',
23038
- 'series',
23039
- 'userMax',
23040
- 'userMin'
23041
- ];
23042
23046
  /* *
23043
23047
  *
23044
23048
  * Default Export
@@ -23309,6 +23313,8 @@ Axis.keepProps = [
23309
23313
  * */
23310
23314
 
23311
23315
 
23316
+ const { composed: DateTimeAxis_composed } = Core_Globals;
23317
+
23312
23318
 
23313
23319
  /* *
23314
23320
  *
@@ -23332,8 +23338,7 @@ var DateTimeAxis;
23332
23338
  * @internal
23333
23339
  */
23334
23340
  function compose(AxisClass) {
23335
- if (!AxisClass.keepProps.includes('dateTime')) {
23336
- AxisClass.keepProps.push('dateTime');
23341
+ if (pushUnique(DateTimeAxis_composed, 'Axis.DateTime')) {
23337
23342
  const axisProto = AxisClass.prototype;
23338
23343
  axisProto.getTimeTicks = getTimeTicks;
23339
23344
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
@@ -23495,6 +23500,8 @@ var DateTimeAxis;
23495
23500
  * */
23496
23501
 
23497
23502
 
23503
+ const { composed: LogarithmicAxis_composed } = Core_Globals;
23504
+
23498
23505
  /* *
23499
23506
  *
23500
23507
  * Class
@@ -23518,8 +23525,7 @@ var LogarithmicAxis;
23518
23525
  * @internal
23519
23526
  */
23520
23527
  function compose(AxisClass) {
23521
- if (!AxisClass.keepProps.includes('logarithmic')) {
23522
- AxisClass.keepProps.push('logarithmic');
23528
+ if (pushUnique(LogarithmicAxis_composed, 'Axis.Logarithmic')) {
23523
23529
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
23524
23530
  addEvent(AxisClass, 'afterInit', onAfterInit);
23525
23531
  }
@@ -23728,24 +23734,7 @@ var PlotLineOrBandAxis;
23728
23734
  * Functions
23729
23735
  *
23730
23736
  * */
23731
- /**
23732
- * Add a plot band after render time.
23733
- *
23734
- * @sample highcharts/members/axis-addplotband/
23735
- * Toggle the plot band from a button
23736
- *
23737
- * @function Highcharts.Axis#addPlotBand
23738
- *
23739
- * @param {Highcharts.AxisPlotBandsOptions} options
23740
- * A configuration object for the plot band, as defined in
23741
- * [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).
23742
- *
23743
- * @return {Highcharts.PlotLineOrBand|undefined}
23744
- * The added plot band, or `undefined` if the options are not valid.
23745
- */
23746
- function addPlotBand(options) {
23747
- return this.addPlotBandOrLine(options, 'plotBands');
23748
- }
23737
+ const getAdderFunction = (coll) =>
23749
23738
  /**
23750
23739
  * Add a plot band or plot line after render time. Called from
23751
23740
  * addPlotBand and addPlotLine internally.
@@ -23753,65 +23742,85 @@ var PlotLineOrBandAxis;
23753
23742
  * @internal
23754
23743
  * @function Highcharts.Axis#addPlotBandOrLine
23755
23744
  * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options
23756
- * The plotBand or plotLine configuration object.
23745
+ * The `plotBand` or `plotLine` configuration object.
23757
23746
  */
23758
- function addPlotBandOrLine(options, coll) {
23759
- const userOptions = this.userOptions;
23760
- let obj = new PlotLineOrBandClass(this, options);
23747
+ function addPlotLineOrBand(options) {
23748
+ var _a;
23749
+ const plotItem = new PlotLineOrBandClass(this, options, coll);
23761
23750
  if (this.visible) {
23762
- obj = obj.render();
23763
- }
23764
- if (obj) { // #2189
23765
- if (!this._addedPlotLB) {
23766
- this._addedPlotLB = true;
23767
- (userOptions.plotLines || [])
23768
- .concat(userOptions.plotBands || [])
23769
- .forEach((plotLineOptions) => {
23770
- this.addPlotBandOrLine(plotLineOptions);
23771
- });
23772
- }
23773
- // Add it to the user options for exporting and Axis.update
23774
- if (coll) {
23775
- // Workaround Microsoft/TypeScript issue #32693
23776
- const updatedOptions = (userOptions[coll] || []);
23777
- updatedOptions.push(options);
23778
- userOptions[coll] = updatedOptions;
23779
- }
23780
- this.plotLinesAndBands.push(obj);
23751
+ plotItem.render();
23781
23752
  }
23782
- return obj;
23783
- }
23784
- /**
23785
- * Add a plot line after render time.
23786
- *
23787
- * @sample highcharts/members/axis-addplotline/
23788
- * Toggle the plot line from a button
23789
- *
23790
- * @function Highcharts.Axis#addPlotLine
23791
- *
23792
- * @param {Highcharts.AxisPlotLinesOptions} options
23793
- * A configuration object for the plot line, as defined in
23794
- * [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).
23795
- *
23796
- * @return {Highcharts.PlotLineOrBand|undefined}
23797
- * The added plot line, or `undefined` if the options are not valid.
23798
- */
23799
- function addPlotLine(options) {
23800
- return this.addPlotBandOrLine(options, 'plotLines');
23801
- }
23753
+ (_a = this.options)[coll] || (_a[coll] = this.userOptions[coll] = []);
23754
+ this.options[coll].push(options);
23755
+ this[coll].push(plotItem);
23756
+ return plotItem;
23757
+ };
23802
23758
  /** @internal */
23803
23759
  function compose(PlotLineOrBandType, AxisClass) {
23804
23760
  const axisProto = AxisClass.prototype;
23805
23761
  if (!axisProto.addPlotBand) {
23806
23762
  PlotLineOrBandClass = PlotLineOrBandType;
23807
23763
  extend(axisProto, {
23808
- addPlotBand,
23809
- addPlotLine,
23810
- addPlotBandOrLine,
23764
+ addPlotBand: getAdderFunction('plotBands'),
23765
+ addPlotLine: getAdderFunction('plotLines'),
23811
23766
  getPlotBandPath,
23812
- removePlotBand,
23813
- removePlotLine,
23814
- removePlotBandOrLine
23767
+ removePlotBand: removePlotBandOrLine,
23768
+ removePlotLine: removePlotBandOrLine
23769
+ });
23770
+ addEvent(AxisClass, 'afterInit', function () {
23771
+ // First time only, not on Axis.update()
23772
+ if (!this.plotBands) {
23773
+ // Placeholder for plotlines and plotbands groups
23774
+ this.plotLinesAndBandsGroups = {};
23775
+ // Plot lines and bands from options
23776
+ for (const coll of ['plotBands', 'plotLines']) {
23777
+ this[coll] = [];
23778
+ for (const pOptions of splat(this.options[coll] || [])) {
23779
+ this[coll].push(new PlotLineOrBandClass(this, pOptions, coll));
23780
+ }
23781
+ }
23782
+ }
23783
+ });
23784
+ // Update plot bands and lines one to one
23785
+ addEvent(AxisClass, 'update', function ({ options }) {
23786
+ for (const coll of ['plotBands', 'plotLines']) {
23787
+ // Check if we have new options to process, otherwise do
23788
+ // nothing with existing plot lines and bands
23789
+ if (options[coll]) {
23790
+ const plotItems = this[coll];
23791
+ splat(options[coll]).forEach((pOptions = {}, i) => {
23792
+ // Match by id
23793
+ let pItem;
23794
+ if (pOptions?.id) {
23795
+ pItem = plotItems.find((p) => p.id === pOptions.id);
23796
+ }
23797
+ // Match by index
23798
+ pItem || (pItem = plotItems[i]);
23799
+ // Update
23800
+ if (pItem) {
23801
+ pItem.update(pOptions, false);
23802
+ options[coll][i] = pItem.options;
23803
+ // Add
23804
+ }
23805
+ else {
23806
+ pItem = this[coll === 'plotBands' ?
23807
+ 'addPlotBand' :
23808
+ 'addPlotLine'](pOptions);
23809
+ }
23810
+ pItem.isActive = true;
23811
+ });
23812
+ // Remove inactive items from end to start
23813
+ let i = plotItems.length;
23814
+ while (i--) {
23815
+ if (!plotItems[i].isActive) {
23816
+ plotItems[i].remove();
23817
+ }
23818
+ else {
23819
+ delete plotItems[i].isActive;
23820
+ }
23821
+ }
23822
+ }
23823
+ }
23815
23824
  });
23816
23825
  }
23817
23826
  return AxisClass;
@@ -23882,23 +23891,6 @@ var PlotLineOrBandAxis;
23882
23891
  }
23883
23892
  return result;
23884
23893
  }
23885
- /**
23886
- * Remove a plot band by its id.
23887
- *
23888
- * @sample highcharts/members/axis-removeplotband/
23889
- * Remove plot band by id
23890
- * @sample highcharts/members/axis-addplotband/
23891
- * Toggle the plot band from a button
23892
- *
23893
- * @function Highcharts.Axis#removePlotBand
23894
- *
23895
- * @param {string} id
23896
- * The plot band's `id` as given in the original configuration
23897
- * object or in the `addPlotBand` option.
23898
- */
23899
- function removePlotBand(id) {
23900
- this.removePlotBandOrLine(id);
23901
- }
23902
23894
  /**
23903
23895
  * Remove a plot band or plot line from the chart by id. Called
23904
23896
  * internally from `removePlotBand` and `removePlotLine`.
@@ -23906,45 +23898,7 @@ var PlotLineOrBandAxis;
23906
23898
  * @function Highcharts.Axis#removePlotBandOrLine
23907
23899
  */
23908
23900
  function removePlotBandOrLine(id) {
23909
- const plotLinesAndBands = this.plotLinesAndBands, options = this.options, userOptions = this.userOptions;
23910
- if (plotLinesAndBands) { // #15639
23911
- let i = plotLinesAndBands.length;
23912
- while (i--) {
23913
- if (plotLinesAndBands[i].id === id) {
23914
- plotLinesAndBands[i].destroy();
23915
- }
23916
- }
23917
- ([
23918
- options.plotLines || [],
23919
- userOptions.plotLines || [],
23920
- options.plotBands || [],
23921
- userOptions.plotBands || []
23922
- ]).forEach(function (arr) {
23923
- i = arr.length;
23924
- while (i--) {
23925
- if (arr[i]?.id === id) {
23926
- erase(arr, arr[i]);
23927
- }
23928
- }
23929
- });
23930
- }
23931
- }
23932
- /**
23933
- * Remove a plot line by its id.
23934
- *
23935
- * @sample highcharts/xaxis/plotlines-id/
23936
- * Remove plot line by id
23937
- * @sample highcharts/members/axis-addplotline/
23938
- * Toggle the plot line from a button
23939
- *
23940
- * @function Highcharts.Axis#removePlotLine
23941
- *
23942
- * @param {string} id
23943
- * The plot line's `id` as given in the original configuration
23944
- * object or in the `addPlotLine` option.
23945
- */
23946
- function removePlotLine(id) {
23947
- this.removePlotBandOrLine(id);
23901
+ [...this.plotBands || [], ...this.plotLines || []].find((plotItem) => plotItem.id === id)?.remove();
23948
23902
  }
23949
23903
  })(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));
23950
23904
  /* *
@@ -24008,9 +23962,11 @@ class PlotLineOrBand {
24008
23962
  this.labelCollectors.push(() => {
24009
23963
  const labels = [];
24010
23964
  for (const axis of this.axes) {
24011
- for (const { label, options } of axis.plotLinesAndBands) {
24012
- if (label && !options?.label?.allowOverlap) {
24013
- labels.push(label);
23965
+ for (const coll of ['plotBands', 'plotLines']) {
23966
+ for (const { label, options } of axis[coll]) {
23967
+ if (label && !options?.label?.allowOverlap) {
23968
+ labels.push(label);
23969
+ }
24014
23970
  }
24015
23971
  }
24016
23972
  }
@@ -24024,7 +23980,7 @@ class PlotLineOrBand {
24024
23980
  * Constructor
24025
23981
  *
24026
23982
  * */
24027
- constructor(axis, options) {
23983
+ constructor(axis, options, coll) {
24028
23984
  /**
24029
23985
  * Related axis.
24030
23986
  *
@@ -24040,6 +23996,7 @@ class PlotLineOrBand {
24040
23996
  */
24041
23997
  this.options = options;
24042
23998
  this.id = options.id;
23999
+ this.coll = coll;
24043
24000
  }
24044
24001
  /* *
24045
24002
  *
@@ -24055,43 +24012,28 @@ class PlotLineOrBand {
24055
24012
  */
24056
24013
  render() {
24057
24014
  fireEvent(this, 'render');
24058
- const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, time } = axis.chart, groupAttribs = {},
24015
+ const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, styledMode, time } = axis.chart,
24059
24016
  // These properties only exist on either band or line
24060
24017
  to = time.parse(options.to), from = time.parse(options.from), value = time.parse(options.value), borderWidth = options.borderWidth;
24061
- let optionsLabel = options.label, { label, svgElem } = this, path = [], group;
24062
- const isBand = defined(from) && defined(to), isLine = defined(value), isNew = !svgElem, attribs = {
24063
- 'class': 'highcharts-plot-' + (isBand ? 'band ' : 'line ') +
24064
- (options.className || '')
24065
- };
24066
- let groupName = isBand ? 'bands' : 'lines';
24067
- // Set the presentational attributes
24068
- if (!chart.styledMode) {
24069
- if (isLine) {
24070
- attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24071
- attribs['stroke-width'] =
24072
- options.width ?? 1;
24073
- if (options.dashStyle) {
24074
- attribs.dashstyle = options.dashStyle;
24075
- }
24076
- }
24077
- else if (isBand) { // Plot band
24078
- attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24079
- if (borderWidth) {
24080
- attribs.stroke = options.borderColor;
24081
- attribs['stroke-width'] = borderWidth;
24082
- }
24083
- }
24018
+ let optionsLabel = options.label, { label, svgElem } = this, group;
24019
+ const isBand = this.coll === 'plotBands', shortKey = isBand ? 'band' : 'line', groupName = `${shortKey}s-${zIndex}`, isNew = !svgElem, attribs = {
24020
+ 'class': `highcharts-plot-${shortKey} ${options.className || ''}`
24021
+ }, strokeWidth = isBand ?
24022
+ (borderWidth || 0) :
24023
+ (options.width ?? 1);
24024
+ // Set the stroke width before the path is calculated
24025
+ if (!styledMode) {
24026
+ attribs['stroke-width'] = strokeWidth;
24084
24027
  }
24085
24028
  // Grouping and zIndex
24086
- groupAttribs.zIndex = zIndex;
24087
- groupName += '-' + zIndex;
24088
24029
  group = axis.plotLinesAndBandsGroups[groupName];
24089
24030
  if (!group) {
24090
24031
  axis.plotLinesAndBandsGroups[groupName] = group =
24091
24032
  renderer.g('plot-' + groupName)
24092
24033
  .clip(chart.plotClipOuter)
24093
- .attr(groupAttribs).add();
24034
+ .attr({ zIndex }).add();
24094
24035
  }
24036
+ group[isNew ? 'attr' : 'animate']({ opacity: +axis.visible });
24095
24037
  // Create the path
24096
24038
  if (!svgElem) {
24097
24039
  /**
@@ -24102,40 +24044,58 @@ class PlotLineOrBand {
24102
24044
  */
24103
24045
  this.svgElem = svgElem = renderer
24104
24046
  .path()
24105
- .attr(attribs)
24106
- .add(group);
24047
+ .attr(attribs);
24048
+ }
24049
+ // Add it to the correct index while allowing dynamic z-index update
24050
+ if (svgElem.parentGroup !== group) {
24051
+ svgElem.add(group);
24107
24052
  }
24108
24053
  // Set the path or return
24109
- if (defined(value)) { // Plot line
24054
+ let path;
24055
+ if (!isBand && defined(value)) { // Plot line
24110
24056
  path = axis.getPlotLinePath({
24111
24057
  value: logarithmic?.log2lin(value) ?? value,
24112
24058
  lineWidth: svgElem.strokeWidth(),
24113
24059
  acrossPanes: options.acrossPanes
24114
24060
  });
24115
24061
  }
24116
- else if (defined(from) && defined(to)) { // Plot band
24062
+ else if (isBand && defined(from) && defined(to)) { // Plot band
24117
24063
  path = axis.getPlotBandPath(logarithmic?.log2lin(from) ?? from, logarithmic?.log2lin(to) ?? to, options);
24118
24064
  }
24119
- else {
24120
- return;
24065
+ if (path) {
24066
+ attribs.d = path;
24067
+ }
24068
+ // Apply the styling
24069
+ if (!styledMode) {
24070
+ if (isBand) { // Plot band
24071
+ attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24072
+ if (borderWidth) {
24073
+ attribs.stroke = options.borderColor;
24074
+ }
24075
+ }
24076
+ else {
24077
+ attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24078
+ if (options.dashStyle) {
24079
+ attribs.dashstyle = options.dashStyle;
24080
+ }
24081
+ }
24121
24082
  }
24122
24083
  // Common for lines and bands. Add events only if they were not added
24123
24084
  // before.
24124
- if (!this.eventsAdded && events) {
24085
+ if (isNew && events) {
24125
24086
  objectEach(events, (_event, eventType) => {
24126
24087
  svgElem?.on(eventType, (e) => {
24127
24088
  events[eventType].apply(this, [e, this]);
24128
24089
  });
24129
24090
  });
24130
- this.eventsAdded = true;
24131
24091
  }
24132
24092
  if ((isNew || !svgElem.d) && path?.length) {
24133
- svgElem.attr({ d: path });
24093
+ svgElem.attr(attribs);
24134
24094
  }
24135
24095
  else if (svgElem) {
24136
24096
  if (path) {
24137
24097
  svgElem.show();
24138
- svgElem.animate({ d: path });
24098
+ svgElem.animate(attribs);
24139
24099
  }
24140
24100
  else if (svgElem.d) {
24141
24101
  svgElem.hide();
@@ -24175,7 +24135,7 @@ class PlotLineOrBand {
24175
24135
  * @function Highcharts.PlotLineOrBand#renderLabel
24176
24136
  */
24177
24137
  renderLabel(optionsLabel, path, isBand, zIndex) {
24178
- const plotLine = this, axis = plotLine.axis, renderer = axis.chart.renderer, inside = optionsLabel.inside;
24138
+ const plotLine = this, axis = plotLine.axis, chart = axis.chart, renderer = chart.renderer, inside = optionsLabel.inside;
24179
24139
  let label = plotLine.label;
24180
24140
  // Add the SVG element
24181
24141
  if (!label) {
@@ -24186,25 +24146,31 @@ class PlotLineOrBand {
24186
24146
  * @type {Highcharts.SVGElement}
24187
24147
  */
24188
24148
  plotLine.label = label = renderer
24189
- .text(this.getLabelText(optionsLabel), 0, 0, optionsLabel.useHTML)
24190
- .attr({
24191
- align: optionsLabel.textAlign || optionsLabel.align,
24192
- rotation: optionsLabel.rotation,
24193
- 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24194
- '-label ' + (optionsLabel.className || ''),
24195
- zIndex
24196
- });
24197
- if (!axis.chart.styledMode) {
24198
- label.css(merge({
24199
- // To allow theming, and in lack of a general place to set
24200
- // default options for plot lines and bands, default to the
24201
- // title color. If we expose the palette, we should use that
24202
- // instead.
24203
- color: axis.chart.options.title?.style?.color,
24204
- fontSize: '0.8em',
24205
- textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24206
- }, optionsLabel.style));
24207
- }
24149
+ .text('', 0, 0, optionsLabel.useHTML)
24150
+ .attr({ zIndex });
24151
+ }
24152
+ label
24153
+ .attr({
24154
+ text: this.getLabelText(optionsLabel),
24155
+ align: optionsLabel.textAlign || optionsLabel.align,
24156
+ 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24157
+ '-label ' + (optionsLabel.className || '')
24158
+ })[label.placed ? 'animate' : 'attr']({
24159
+ opacity: 1,
24160
+ rotation: optionsLabel.rotation
24161
+ });
24162
+ if (!chart.styledMode) {
24163
+ label.css(merge({
24164
+ // To allow theming, and in lack of a general place to set
24165
+ // default options for plot lines and bands, default to the
24166
+ // title color. If we expose the palette, we should use that
24167
+ // instead.
24168
+ color: chart.options.title?.style?.color,
24169
+ fontSize: '0.8em',
24170
+ textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24171
+ }, optionsLabel.style));
24172
+ }
24173
+ if (!label.added) {
24208
24174
  label.add();
24209
24175
  }
24210
24176
  // Get the bounding box and align the label
@@ -24228,12 +24194,31 @@ class PlotLineOrBand {
24228
24194
  axis.height - (label.alignAttr.y -
24229
24195
  axis.top) : (optionsLabel.clip ?
24230
24196
  (axis.width + axis.left) :
24231
- axis.chart.chartWidth) - label.alignAttr.x) :
24197
+ chart.chartWidth) - label.alignAttr.x) :
24232
24198
  bBoxWidth)) + 'px'
24233
24199
  });
24234
24200
  }
24201
+ else if (label.textWidth) {
24202
+ label.css({ width: 'auto' });
24203
+ }
24235
24204
  label.show(true);
24236
24205
  }
24206
+ /**
24207
+ * Update the plot line or band with new options.
24208
+ *
24209
+ * @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} options
24210
+ * The new options to apply
24211
+ * @param {boolean} [redraw=true]
24212
+ * Whether to redraw the plot guide immediately
24213
+ *
24214
+ * @function Highcharts.PlotLineOrBand#update
24215
+ */
24216
+ update(options, redraw = true) {
24217
+ merge(true, this.options, options);
24218
+ if (redraw) {
24219
+ this.render();
24220
+ }
24221
+ }
24237
24222
  /**
24238
24223
  * Get label's text content.
24239
24224
  * @internal
@@ -24245,15 +24230,22 @@ class PlotLineOrBand {
24245
24230
  optionsLabel.text;
24246
24231
  }
24247
24232
  /**
24248
- * Remove the plot line or band.
24249
- *
24250
- * @function Highcharts.PlotLineOrBand#destroy
24233
+ * Destroy the item's elements
24251
24234
  */
24252
24235
  destroy() {
24236
+ destroyObjectProperties(this, this.axis);
24237
+ }
24238
+ /**
24239
+ * Remove the plot line or band and destroy its elements.
24240
+ *
24241
+ * @function Highcharts.PlotLineOrBand#remove
24242
+ */
24243
+ remove() {
24253
24244
  // Remove it from the lookup
24254
- erase(this.axis.plotLinesAndBands, this);
24255
- delete this.axis;
24256
- destroyObjectProperties(this);
24245
+ erase(this.axis[this.coll], this);
24246
+ // Remove from options
24247
+ erase(this.axis.options[this.coll] || [], this.options);
24248
+ this.destroy();
24257
24249
  }
24258
24250
  }
24259
24251
  /* *
@@ -24300,10 +24292,24 @@ class PlotLineOrBand {
24300
24292
  * In styled mode, the plot bands are styled by the `.highcharts-plot-band`
24301
24293
  * class in addition to the `className` option.
24302
24294
  *
24295
+ * When doing `Chart.update()` or `Axis.update()`, the plot bands are updated
24296
+ * by index or id. The following merging rules apply:
24297
+ * - If `plotBands` are not defined in the new options, all existing plot bands
24298
+ * are kept.
24299
+ * - If `plotBands` are defined without ids, the existing plot bands are updated
24300
+ * by index. If the new array has fewer plot bands, the remaining existing
24301
+ * plot bands are removed. If the new array has more plot bands, the extra
24302
+ * ones are added. An empty array removes all existing plot bands.
24303
+ * - If `plotBands` are defined with ids, the existing plot bands are matched
24304
+ * by id, and remaining unmatched existing plot bands are removed.
24305
+ *
24303
24306
  * @productdesc {highcharts}
24304
24307
  * In a gauge, a plot band on the Y axis (value axis) will stretch along the
24305
24308
  * perimeter of the gauge.
24306
24309
  *
24310
+ * @sample {highcharts} highcharts/xaxis/plotbands-color/
24311
+ * Basic plot band
24312
+ *
24307
24313
  * @type {Array<*>}
24308
24314
  * @product highcharts highstock gantt
24309
24315
  * @apioption xAxis.plotBands
@@ -24595,12 +24601,23 @@ class PlotLineOrBand {
24595
24601
  * In styled mode, the plot lines are styled by the
24596
24602
  * `.highcharts-plot-line` class in addition to the `className` option.
24597
24603
  *
24604
+ * When doing `Chart.update()` or `Axis.update()`, the plot lines are updated
24605
+ * by index or id. The following merging rules apply:
24606
+ * - If `plotLines` are not defined in the new options, all existing plot lines
24607
+ * are kept.
24608
+ * - If `plotLines` are defined without ids, the existing plot lines are updated
24609
+ * by index. If the new array has fewer plot lines, the remaining existing
24610
+ * plot lines are removed. If the new array has more plot lines, the extra
24611
+ * ones are added. An empty array removes all existing plot lines.
24612
+ * - If `plotLines` are defined with ids, the existing plot lines are matched
24613
+ * by id, and remaining unmatched existing plot lines are removed.
24614
+ *
24598
24615
  * @type {Array<*>}
24599
24616
  * @product highcharts highstock gantt
24600
- * @sample {highcharts} highcharts/xaxis/plotlines-color/
24601
- * Basic plot line
24602
- * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24603
- * Solid gauge plot line
24617
+ * @sample {highcharts} highcharts/xaxis/plotlines-color/
24618
+ * Basic plot line
24619
+ * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24620
+ * Solid gauge plot line
24604
24621
  * @apioption xAxis.plotLines
24605
24622
  */
24606
24623
  /**
@@ -25109,14 +25126,11 @@ class Tooltip {
25109
25126
  */
25110
25127
  destroy() {
25111
25128
  // Destroy and clear local variables
25112
- if (this.label) {
25113
- this.label = this.label.destroy();
25114
- }
25129
+ this.tracker = this.tracker?.destroy();
25130
+ this.label = this.label?.destroy();
25115
25131
  if (this.split) {
25116
25132
  this.cleanSplit(true);
25117
- if (this.tt) {
25118
- this.tt = this.tt.destroy();
25119
- }
25133
+ this.tt = this.tt?.destroy();
25120
25134
  }
25121
25135
  if (this.renderer) {
25122
25136
  this.renderer = this.renderer.destroy();
@@ -25646,6 +25660,8 @@ class Tooltip {
25646
25660
  !this.isHidden &&
25647
25661
  !options.fixed &&
25648
25662
  options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
25663
+ this.anchorX = anchorX;
25664
+ this.anchorY = anchorY;
25649
25665
  if (!skipAnchor) {
25650
25666
  attr.anchorX = anchorX;
25651
25667
  attr.anchorY = anchorY;
@@ -26092,45 +26108,37 @@ class Tooltip {
26092
26108
  */
26093
26109
  drawTracker() {
26094
26110
  const tooltip = this;
26095
- if (!this.shouldStickOnContact()) {
26096
- if (tooltip.tracker) {
26097
- tooltip.tracker = tooltip.tracker.destroy();
26098
- }
26111
+ if (!tooltip.shouldStickOnContact()) {
26112
+ tooltip.tracker = tooltip.tracker?.destroy();
26099
26113
  return;
26100
26114
  }
26101
- const chart = tooltip.chart;
26102
- const label = tooltip.label;
26103
- const points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint;
26104
- if (!label || !points) {
26115
+ const { chart, label } = tooltip, points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint,
26116
+ // Split tooltips render into a plain group, with no box to trace
26117
+ box = label?.box;
26118
+ if (!box || !points) {
26105
26119
  return;
26106
26120
  }
26107
- const box = {
26108
- x: 0,
26109
- y: 0,
26110
- width: 0,
26111
- height: 0
26112
- };
26113
- // Combine anchor and tooltip
26114
- const anchorPos = this.getAnchor(points);
26115
- const labelBBox = label.getBBox();
26116
- anchorPos[0] += chart.plotLeft - (label.translateX || 0);
26117
- anchorPos[1] += chart.plotTop - (label.translateY || 0);
26118
- // When the mouse pointer is between the anchor point and the label,
26119
- // the label should stick.
26120
- box.x = Math.min(0, anchorPos[0]);
26121
- box.y = Math.min(0, anchorPos[1]);
26122
- box.width = (anchorPos[0] < 0 ?
26123
- Math.max(Math.abs(anchorPos[0]), labelBBox.width - anchorPos[0]) :
26124
- Math.max(Math.abs(anchorPos[0]), labelBBox.width));
26125
- box.height = (anchorPos[1] < 0 ?
26126
- Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :
26127
- Math.max(Math.abs(anchorPos[1]), labelBBox.height));
26128
- if (tooltip.tracker) {
26129
- tooltip.tracker.attr(box);
26130
- }
26131
- else {
26121
+ const { height, r, width, x, y } = box;
26122
+ let { anchorX, anchorY } = box;
26123
+ // Shared tooltips clear the label anchor (#22295), so fall back to the
26124
+ // anchor the position was calculated from
26125
+ if (!isNumber(anchorX)) {
26126
+ anchorX = (tooltip.anchorX || 0) - (label.translateX || 0);
26127
+ anchorY = (tooltip.anchorY || 0) - (label.translateY || 0);
26128
+ }
26129
+ // Match the tooltip shape, but stretch the connector all the way to the
26130
+ // point, so that the pointer can travel between the two without losing
26131
+ // contact. Only the side facing the anchor overshoots the box, so the
26132
+ // largest of the four distances is the one to cover. (#24255)
26133
+ const d = label.renderer.symbols.callout(x, y, width, height, {
26134
+ anchorX,
26135
+ anchorY,
26136
+ arrowLength: Math.max(anchorX - width, -anchorX, anchorY - height, -anchorY, 0),
26137
+ r
26138
+ });
26139
+ if (!tooltip.tracker) {
26132
26140
  tooltip.tracker = label.renderer
26133
- .rect(box)
26141
+ .path()
26134
26142
  .addClass('highcharts-tracker')
26135
26143
  .add(label);
26136
26144
  // For a rapid move going outside of the elements keeping the
@@ -26138,10 +26146,14 @@ class Tooltip {
26138
26146
  addEvent(tooltip.tracker.element, 'mouseenter', () => clearTimeouts(tooltip));
26139
26147
  if (!chart.styledMode) {
26140
26148
  tooltip.tracker.attr({
26141
- fill: 'rgba(0,0,0,0)'
26149
+ fill: 'rgba(0,0,0,0)',
26150
+ stroke: 'rgba(0,0,0,0)',
26151
+ 'stroke-linejoin': 'round',
26152
+ 'stroke-width': 10
26142
26153
  });
26143
26154
  }
26144
26155
  }
26156
+ tooltip.tracker.attr({ d });
26145
26157
  }
26146
26158
  /** @internal */
26147
26159
  styledModeFormat(formatString) {
@@ -27088,7 +27100,8 @@ class Point {
27088
27100
  /**
27089
27101
  * Set a value in an object, on the property defined by key. The key
27090
27102
  * supports nested properties using dot notation. The function modifies the
27091
- * input object and does not make a copy.
27103
+ * input object and does not make a copy. Paths containing `__proto__` or
27104
+ * `constructor` are ignored.
27092
27105
  *
27093
27106
  * @function Highcharts.Point#setNestedProperty<T>
27094
27107
  *
@@ -27106,11 +27119,18 @@ class Point {
27106
27119
  */
27107
27120
  setNestedProperty(object, value, key) {
27108
27121
  const nestedKeys = key.split('.');
27122
+ // Reject nested keys that would allow prototype pollution
27123
+ if (nestedKeys.some((nestedKey) => (nestedKey === '__proto__' || nestedKey === 'constructor'))) {
27124
+ return object;
27125
+ }
27109
27126
  nestedKeys.reduce(function (result, key, i, arr) {
27110
27127
  const isLastKey = arr.length - 1 === i;
27111
27128
  result[key] = (isLastKey ?
27112
27129
  value :
27113
- isObject(result[key], true) ?
27130
+ // Inherited objects are shared with everything else on
27131
+ // that prototype, so start a fresh one instead
27132
+ isObject(result[key], true) &&
27133
+ Object.hasOwnProperty.call(result, key) ?
27114
27134
  result[key] :
27115
27135
  {});
27116
27136
  return result[key];
@@ -27192,15 +27212,10 @@ class Point {
27192
27212
  */
27193
27213
  function update() {
27194
27214
  point.applyOptions(options);
27195
- // Update visuals, #4146
27196
- // Handle mock graphic elements for a11y, #12718
27197
- const hasMockGraphic = graphic && point.hasMockGraphic, index = point.index;
27198
- const shouldDestroyGraphic = point.y === null ?
27199
- !hasMockGraphic :
27200
- hasMockGraphic;
27201
- if (graphic && shouldDestroyGraphic) {
27215
+ // Update visuals, #4146. The a11y mock graphic is exempt, it is
27216
+ // maintained by the accessibility module, #12718.
27217
+ if (graphic && point.y === null && !point.hasMockGraphic) {
27202
27218
  point.graphic = graphic.destroy();
27203
- delete point.hasMockGraphic;
27204
27219
  }
27205
27220
  if (isObject(options, true)) {
27206
27221
  // Destroy so we can get new elements
@@ -27215,7 +27230,7 @@ class Point {
27215
27230
  point.dataLabel = point.dataLabel.destroy(); // #2468
27216
27231
  }
27217
27232
  }
27218
- const pointOptions = point.optionsToObject(options);
27233
+ const index = point.index, pointOptions = point.optionsToObject(options);
27219
27234
  if (!series.hasProcessedDataTable) {
27220
27235
  // Record changes in the data table (#24451)
27221
27236
  series.dataTable.setRow(pointOptions, index);
@@ -29219,19 +29234,18 @@ class Pointer {
29219
29234
  if (hasMoved ?? true) {
29220
29235
  this.pinch(e);
29221
29236
  }
29237
+ // If inside, capture touch-drag and display tooltip. If not
29238
+ // inside, allow dragging the finger to scroll the page
29239
+ if (this.hasPointerCapture && // #25095
29240
+ e.type === 'touchmove' &&
29241
+ !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29242
+ e.preventDefault();
29243
+ }
29222
29244
  }
29223
29245
  else if (start) {
29224
29246
  // Hide the tooltip on touching outside the plot area (#1203)
29225
29247
  this.reset();
29226
29248
  }
29227
- // If inside, capture touch-drag and display tooltip. If not inside,
29228
- // allow dragging the finger to scroll the page
29229
- if ((chart.tooltip?.options.followTouchMove ?? true) &&
29230
- isInside &&
29231
- e.type === 'touchmove' &&
29232
- !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29233
- e.preventDefault();
29234
- }
29235
29249
  }
29236
29250
  else if (e.touches.length === 2) {
29237
29251
  this.pinch(e);
@@ -29631,13 +29645,19 @@ const { setLength: DataTableCore_setLength, splice: DataTableCore_splice } = Dat
29631
29645
  class DataTableCore {
29632
29646
  constructor(options = {}) {
29633
29647
  this.isDataTable = true;
29634
- this.autoId = !options.id;
29648
+ // Reject IDs that would pollute the prototype of ID-keyed maps.
29649
+ const id = this.isPollutingKey(options.id) ? void 0 : options.id;
29650
+ this.autoId = !id;
29635
29651
  this.columns = {};
29636
- this.id = (options.id || uniqueKey());
29652
+ this.id = (id || uniqueKey());
29637
29653
  this.rowCount = 0;
29638
29654
  this.versionTag = uniqueKey();
29639
29655
  let rowCount = 0;
29640
29656
  objectEach(options.columns || {}, (column, columnId) => {
29657
+ if (columnId === '__proto__' ||
29658
+ columnId === 'constructor') {
29659
+ return;
29660
+ }
29641
29661
  this.columns[columnId] = column.slice();
29642
29662
  rowCount = Math.max(rowCount, column.length);
29643
29663
  });
@@ -29648,6 +29668,17 @@ class DataTableCore {
29648
29668
  * Functions
29649
29669
  *
29650
29670
  * */
29671
+ /**
29672
+ * Checks whether a key would pollute the prototype if used to index a
29673
+ * plain object (e.g. as a column ID or table ID).
29674
+ *
29675
+ * @private
29676
+ * @param {string|undefined} key The key to check.
29677
+ * @return {boolean} True if the key is unsafe to use.
29678
+ */
29679
+ isPollutingKey(key) {
29680
+ return key === '__proto__' || key === 'constructor';
29681
+ }
29651
29682
  /**
29652
29683
  * Applies a row count to the table by setting the `rowCount` property and
29653
29684
  * adjusting the length of all columns.
@@ -29806,6 +29837,10 @@ class DataTableCore {
29806
29837
  setColumns(columns, rowIndex, eventDetail) {
29807
29838
  let rowCount = this.rowCount;
29808
29839
  objectEach(columns, (column, columnId) => {
29840
+ if (columnId === '__proto__' ||
29841
+ columnId === 'constructor') {
29842
+ return;
29843
+ }
29809
29844
  this.columns[columnId] = column.slice();
29810
29845
  rowCount = column.length;
29811
29846
  });
@@ -29844,11 +29879,14 @@ class DataTableCore {
29844
29879
  * @emits #afterSetRows
29845
29880
  */
29846
29881
  setRow(row, rowIndex = this.rowCount, insert, eventDetail) {
29847
- var _a;
29848
29882
  const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1, rowKeys = Object.keys(row);
29849
29883
  if (eventDetail?.addColumns !== false) {
29850
29884
  for (let i = 0, iEnd = rowKeys.length; i < iEnd; i++) {
29851
- columns[_a = rowKeys[i]] || (columns[_a] = new Array(this.rowCount));
29885
+ const rowKey = rowKeys[i];
29886
+ if (!this.isPollutingKey(rowKey) &&
29887
+ !Object.hasOwnProperty.call(columns, rowKey)) {
29888
+ columns[rowKey] = new Array(this.rowCount);
29889
+ }
29852
29890
  }
29853
29891
  }
29854
29892
  objectEach(columns, (column, columnId) => {
@@ -33828,7 +33866,19 @@ class Series {
33828
33866
  .optionsToObject
33829
33867
  .call({ series: this }, data[i]);
33830
33868
  for (const key of Object.keys(ptOptions)) {
33831
- columns[key] || (columns[key] = new Array(dataLength));
33869
+ // Assigning these would write through to
33870
+ // `Object.prototype` or the `Object` constructor instead
33871
+ // of creating a column, and thereby affect unrelated
33872
+ // objects on the page
33873
+ if (key === '__proto__' || key === 'constructor') {
33874
+ continue;
33875
+ }
33876
+ // Inherited keys like `toString` are truthy without being
33877
+ // columns of ours, so test for an own property rather
33878
+ // than for a value (#25321)
33879
+ if (!Object.hasOwnProperty.call(columns, key)) {
33880
+ columns[key] = new Array(dataLength);
33881
+ }
33832
33882
  columns[key][i] = ptOptions[key];
33833
33883
  }
33834
33884
  }
@@ -34481,7 +34531,7 @@ class Series {
34481
34531
  // Apply plotBorderRadius clipping
34482
34532
  plotClipGroup?.clip(
34483
34533
  // Navigator y-axis is not clippable
34484
- clip && this.yAxis.clippable ?
34534
+ clip && this.yAxis?.clippable ?
34485
34535
  chart.plotClipInner :
34486
34536
  void 0);
34487
34537
  }
@@ -34784,28 +34834,27 @@ class Series {
34784
34834
  * @emits Highcharts.Series#event:destroy
34785
34835
  */
34786
34836
  destroy(keepEventsForUpdate) {
34787
- const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent), data = series.data || [];
34788
- let destroy, i, axis;
34837
+ const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent);
34838
+ let destroy, axis;
34789
34839
  // Add event hook
34790
34840
  fireEvent(series, 'destroy', { keepEventsForUpdate });
34791
34841
  // Remove events
34792
34842
  this.removeEvents(keepEventsForUpdate);
34793
34843
  // Erase from axes
34794
- (series.axisTypes || []).forEach(function (AXIS) {
34795
- axis = series[AXIS];
34844
+ for (const coll of (series.axisTypes || [])) {
34845
+ axis = series[coll];
34796
34846
  if (axis?.series) {
34797
34847
  erase(axis.series, series);
34798
34848
  axis.isDirty = axis.forceRedraw = true;
34799
34849
  }
34800
- });
34850
+ }
34801
34851
  // Remove legend items
34802
34852
  if (series.legendItem) {
34803
34853
  series.chart.legend.destroyItem(series);
34804
34854
  }
34805
34855
  // Destroy all points with their elements
34806
- i = data.length;
34807
- while (i--) {
34808
- data[i]?.destroy?.(true);
34856
+ for (const point of series.points || []) {
34857
+ point?.destroy?.(true);
34809
34858
  }
34810
34859
  for (const zone of series.zones || []) {
34811
34860
  // Destroy SVGElement's but preserve primitive props (#20426)
@@ -38944,7 +38993,10 @@ class Chart {
38944
38993
  elem = this.renderer.text(options.text, 0, 0, options.useHTML)
38945
38994
  .attr({
38946
38995
  align: options.align,
38947
- 'class': 'highcharts-' + key,
38996
+ 'class': [
38997
+ options.className,
38998
+ 'highcharts-' + key
38999
+ ].filter(isString).join(' '),
38948
39000
  zIndex: options.zIndex || 4
38949
39001
  })
38950
39002
  .css({
@@ -39949,7 +40001,7 @@ class Chart {
39949
40001
  if (label &&
39950
40002
  (labels.reserveSpace ?? !isNumber(options.crossing))) {
39951
40003
  expectedSpace = label.getBBox().height +
39952
- labels.distance +
40004
+ (labels.distance ?? 15) +
39953
40005
  Math.max(isNumber(offset) ? offset : 0, 0);
39954
40006
  }
39955
40007
  if (expectedSpace) {
@@ -40037,6 +40089,12 @@ class Chart {
40037
40089
  addCredits(credits) {
40038
40090
  const chart = this, creds = merge(true, this.options.credits, credits);
40039
40091
  if (creds.enabled && !this.credits) {
40092
+ // Run the user-supplied URL through the allow list, so that
40093
+ // references like `javascript:` can't be executed from the
40094
+ // credits label
40095
+ const href = creds.href ?
40096
+ HTML_AST.filterUserAttributes({ href: creds.href }).href :
40097
+ void 0;
40040
40098
  /**
40041
40099
  * The chart's credits label. The label has an `update` method that
40042
40100
  * allows setting new options as per the
@@ -40050,8 +40108,8 @@ class Chart {
40050
40108
  .on('click', function (e) {
40051
40109
  // Fire the event with browser redirect as default function
40052
40110
  fireEvent(chart, 'creditsClick', e, () => {
40053
- if (creds.href) {
40054
- Chart_win.location.href = creds.href;
40111
+ if (href) {
40112
+ Chart_win.location.href = href;
40055
40113
  }
40056
40114
  });
40057
40115
  })
@@ -41668,14 +41726,11 @@ class StackItem {
41668
41726
  *
41669
41727
  * */
41670
41728
  /** @internal */
41671
- constructor(axis, options, negativeValue, x, stackOption) {
41672
- const inverted = axis.chart.inverted, reversed = axis.reversed;
41729
+ constructor(axis, negativeValue, x, stackOption) {
41673
41730
  this.axis = axis;
41674
41731
  // The stack goes to the left either if the stack has negative value
41675
41732
  // or when axis is reversed. XOR operator.
41676
- const isNegative = (this.isNegative = !!negativeValue !== !!reversed);
41677
- // Save the options to be able to style the label
41678
- this.options = options = options || {};
41733
+ this.negativeValue = negativeValue;
41679
41734
  // Save the x value to be able to position the label later
41680
41735
  this.x = x;
41681
41736
  // Initialize total value
@@ -41690,20 +41745,6 @@ class StackItem {
41690
41745
  this.stack = stackOption;
41691
41746
  this.leftCliff = 0;
41692
41747
  this.rightCliff = 0;
41693
- // The align options and text align varies on whether the stack is
41694
- // negative and if the chart is inverted or not.
41695
- // First test the user supplied value, then use the dynamic.
41696
- this.alignOptions = {
41697
- align: options.align ||
41698
- (inverted ? (isNegative ? 'left' : 'right') : 'center'),
41699
- verticalAlign: options.verticalAlign ||
41700
- (inverted ? 'middle' : isNegative ? 'bottom' : 'top'),
41701
- y: options.y,
41702
- x: options.x
41703
- };
41704
- this.textAlign =
41705
- options.textAlign ||
41706
- (inverted ? (!isNegative ? 'left' : 'right') : 'center');
41707
41748
  }
41708
41749
  /* *
41709
41750
  *
@@ -41719,39 +41760,34 @@ class StackItem {
41719
41760
  * @internal
41720
41761
  */
41721
41762
  render(group) {
41722
- const chart = this.axis.chart, options = this.options, formatOption = options.format,
41763
+ const axis = this.axis, chart = axis.chart, options = axis.options.stackLabels || {}, formatOption = options.format,
41723
41764
  // Format the text in the label.
41724
- str = (formatOption ?
41765
+ text = (formatOption ?
41725
41766
  StackItem_format(formatOption, this, chart) :
41726
- options.formatter?.call(this, this)) || '';
41727
- // Change the text to reflect the new total and set visibility to hidden
41728
- // in case the series is hidden
41729
- if (this.label) {
41730
- this.label.attr({ text: str, visibility: 'hidden' });
41767
+ options.formatter?.call(this, this)) || '', verb = this.label ? 'animate' : 'attr';
41768
+ // Create new label
41769
+ this.label || (this.label = chart.renderer.label(text, 0, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels'));
41770
+ const label = this.label, animatableAttribs = {
41771
+ r: options.borderRadius || 0,
41772
+ // Set default padding to 5 as it is in dataLabels #12308
41773
+ padding: (options.padding ?? 5)
41774
+ };
41775
+ if (!chart.styledMode) {
41776
+ animatableAttribs.fill = options.backgroundColor;
41777
+ animatableAttribs.stroke = options.borderColor;
41778
+ animatableAttribs['stroke-width'] = options.borderWidth;
41779
+ label.css(options.style || {});
41731
41780
  }
41732
- else {
41733
- // Create new label
41734
- this.label = chart.renderer.label(str, null, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels');
41735
- const attr = {
41736
- r: options.borderRadius || 0,
41737
- text: str,
41738
- // Set default padding to 5 as it is in dataLabels #12308
41739
- padding: (options.padding ?? 5),
41740
- visibility: 'hidden' // Hidden until setOffset is called
41741
- };
41742
- if (!chart.styledMode) {
41743
- attr.fill = options.backgroundColor;
41744
- attr.stroke = options.borderColor;
41745
- attr['stroke-width'] = options.borderWidth;
41746
- this.label.css(options.style || {});
41747
- }
41748
- this.label.attr(attr);
41749
- if (!this.label.added) {
41750
- this.label.add(group); // Add to the labels-group
41751
- }
41781
+ label
41782
+ .attr({
41783
+ text,
41784
+ visibility: 'hidden' // Hidden until setOffset is called
41785
+ })[verb](animatableAttribs);
41786
+ if (!label.added) {
41787
+ label.add(group); // Add to the labels-group
41752
41788
  }
41753
41789
  // Rank it higher than data labels (#8742)
41754
- this.label.labelrank = chart.plotSizeY;
41790
+ label.labelrank = chart.plotSizeY;
41755
41791
  fireEvent(this, 'afterRender');
41756
41792
  }
41757
41793
  /**
@@ -41760,35 +41796,38 @@ class StackItem {
41760
41796
  * @internal
41761
41797
  */
41762
41798
  setOffset(xOffset, width, boxBottom, boxTop, defaultX, xAxis) {
41763
- const { alignOptions, axis, label, options, textAlign } = this, chart = axis.chart, stackBox = this.getStackBox({
41764
- xOffset,
41765
- width,
41799
+ const { axis, label } = this, chart = axis.chart, options = axis.options.stackLabels || {}, inverted = chart.inverted, isNegative = this.negativeValue !== !!axis.reversed, stackBox = this.getStackBox({
41766
41800
  boxBottom,
41767
41801
  boxTop,
41768
41802
  defaultX,
41769
- xAxis
41770
- }), { verticalAlign } = alignOptions;
41803
+ isNegative,
41804
+ width,
41805
+ xAxis,
41806
+ xOffset
41807
+ }), { align = (inverted ? (isNegative ? 'left' : 'right') : 'center'), verticalAlign = (inverted ? 'middle' : isNegative ? 'bottom' : 'top'), textAlign = (inverted ? (!isNegative ? 'left' : 'right') : 'center'), x = 0, y = 0 } = options, alignOptions = {
41808
+ align,
41809
+ verticalAlign,
41810
+ x,
41811
+ y
41812
+ };
41771
41813
  if (label && stackBox) {
41772
41814
  const labelBox = label.getBBox(void 0, 0), padding = label.padding;
41773
41815
  let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
41774
- // Reset alignOptions property after justify #12337
41775
- alignOptions.x = options.x || 0;
41776
- alignOptions.y = options.y || 0;
41777
41816
  // Calculate the adjusted Stack position, to take into consideration
41778
- // The size if the labelBox and vertical alignment as
41779
- // well as the text alignment. It's need to be done to work with
41780
- // default SVGLabel.align/justify methods.
41781
- const { x, y } = this.adjustStackPosition({
41817
+ // the size if the labelBox and vertical alignment as well as the
41818
+ // text alignment. It needs to be done to work with default
41819
+ // SVGLabel.align/justify methods.
41820
+ const { x: adjustX, y: adjustY } = this.adjustStackPosition({
41782
41821
  labelBox,
41783
41822
  verticalAlign,
41784
41823
  textAlign
41785
41824
  });
41786
- stackBox.x -= x;
41787
- stackBox.y -= y;
41825
+ stackBox.x -= adjustX;
41826
+ stackBox.y -= adjustY;
41788
41827
  // Align the label to the adjusted box.
41789
41828
  label.align(alignOptions, false, stackBox);
41790
- // Check if label is inside the plotArea #12294
41791
- visible = chart.isInsidePlot(label.alignAttr.x + alignOptions.x + x, label.alignAttr.y + alignOptions.y + y);
41829
+ // Check if the label is inside the plotArea #12294
41830
+ visible = chart.isInsidePlot(label.alignAttr.x + x + adjustX, label.alignAttr.y + y + adjustY);
41792
41831
  if (!visible) {
41793
41832
  isJustify = false;
41794
41833
  }
@@ -41796,11 +41835,8 @@ class StackItem {
41796
41835
  // Justify stackLabel into the alignBox
41797
41836
  StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);
41798
41837
  }
41799
- // Add attr to avoid the default animation of justifyDataLabel.
41800
- // Also add correct rotation with its rotation origin. #15129
41838
+ // Add correct rotation with its rotation origin (#15129)
41801
41839
  label.attr({
41802
- x: label.alignAttr.x,
41803
- y: label.alignAttr.y,
41804
41840
  rotation: options.rotation,
41805
41841
  rotationOriginX: labelBox.width *
41806
41842
  getAlignFactor(options.textAlign || 'center'),
@@ -41839,22 +41875,22 @@ class StackItem {
41839
41875
  * The x, y, height, width of the stack.
41840
41876
  */
41841
41877
  getStackBox(stackBoxProps) {
41842
- const stackItem = this, axis = this.axis, chart = axis.chart, { boxTop, defaultX, xOffset, width, boxBottom } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41878
+ const axis = this.axis, chart = axis.chart, { boxBottom, boxTop, defaultX, isNegative, width, xOffset } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41843
41879
  100 :
41844
41880
  (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 ||
41845
41881
  (isNumber(axis.min) &&
41846
41882
  axis.logarithmic &&
41847
41883
  axis.logarithmic.lin2log(axis.min)) ||
41848
- 0), height = Math.abs(y - yZero), inverted = chart.inverted, neg = stackItem.isNegative;
41884
+ 0), height = Math.abs(y - yZero), inverted = chart.inverted;
41849
41885
  return inverted ?
41850
41886
  {
41851
- x: (neg ? y : y - height) - chart.plotLeft,
41887
+ x: (isNegative ? y : y - height) - chart.plotLeft,
41852
41888
  y: xAxis.height - x - width + xAxis.top - chart.plotTop,
41853
41889
  width: height,
41854
41890
  height: width
41855
41891
  } : {
41856
41892
  x: x + xAxis.transB - chart.plotLeft,
41857
- y: (neg ? y - height : y) - chart.plotTop,
41893
+ y: (isNegative ? y - height : y) - chart.plotTop,
41858
41894
  width: width,
41859
41895
  height: height
41860
41896
  };
@@ -41890,10 +41926,6 @@ class StackItem {
41890
41926
  * @name Highcharts.StackItemObject#cumulative
41891
41927
  * @type {number}
41892
41928
  */ /**
41893
- * True if on the negative side
41894
- * @name Highcharts.StackItemObject#isNegative
41895
- * @type {boolean}
41896
- */ /**
41897
41929
  * Related SVG element
41898
41930
  * @name Highcharts.StackItemObject#label
41899
41931
  * @type {Highcharts.SVGElement}
@@ -42110,7 +42142,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
42110
42142
  stacks[key][x].total = null;
42111
42143
  }
42112
42144
  else {
42113
- stacks[key][x] = new Stacking_StackItem(axis, axis.options.stackLabels, !!isNegative, x, stackOption);
42145
+ stacks[key][x] = new Stacking_StackItem(axis, !!isNegative, x, stackOption);
42114
42146
  }
42115
42147
  }
42116
42148
  // If the StackItem doesn't exist, create it first
@@ -42267,29 +42299,41 @@ class AxisAdditions {
42267
42299
  });
42268
42300
  });
42269
42301
  }
42270
- /** @internal */
42302
+ /**
42303
+ * Create the stack totals group and render the individual labels into it
42304
+ * @internal
42305
+ */
42271
42306
  renderStackTotals() {
42272
- 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 ||
42273
- renderer
42274
- .g('stack-labels')
42275
- .attr({
42276
- zIndex: 6,
42277
- opacity: 0
42278
- })
42279
- .add());
42280
- // The plotLeft/Top will change when y axis gets wider so we need to
42281
- // translate the stackTotalGroup at every render call. See bug #506
42282
- // and #516
42283
- stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42284
- // Render each stack total
42285
- objectEach(stacks, (type) => {
42286
- objectEach(type, (stack) => {
42287
- stack.render(stackTotalGroup);
42307
+ 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 ||
42308
+ (enabled ?
42309
+ renderer
42310
+ .g('stack-labels')
42311
+ .attr({
42312
+ zIndex: 6,
42313
+ opacity: 0
42314
+ })
42315
+ .add() :
42316
+ void 0));
42317
+ if (stackTotalGroup) {
42318
+ // The plotLeft/Top will change when y axis gets wider so we need to
42319
+ // translate the stackTotalGroup at every render call. See bug #506
42320
+ // and #516
42321
+ stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42322
+ // Render each stack total
42323
+ objectEach(stacks, (type) => {
42324
+ objectEach(type, (stack) => {
42325
+ if (enabled) {
42326
+ stack.render(stackTotalGroup);
42327
+ }
42328
+ else {
42329
+ stack.label = stack.label?.destroy();
42330
+ }
42331
+ });
42288
42332
  });
42289
- });
42290
- stackTotalGroup.animate({
42291
- opacity: 1
42292
- }, animationConfig);
42333
+ stackTotalGroup.animate({
42334
+ opacity: 1
42335
+ }, animationConfig);
42336
+ }
42293
42337
  }
42294
42338
  }
42295
42339
  /* *
@@ -42611,7 +42655,6 @@ Series_SeriesRegistry.registerSeriesType('line', LineSeries);
42611
42655
  * specified, it is inherited from [chart.type](#chart.type).
42612
42656
  *
42613
42657
  * @extends series,plotOptions.line
42614
- * @excluding dataParser,dataURL
42615
42658
  * @product highcharts highstock
42616
42659
  * @apioption series.line
42617
42660
  */
@@ -42985,7 +43028,7 @@ const AreaSeriesDefaults = {
42985
43028
  * specified, it is inherited from [chart.type](#chart.type).
42986
43029
  *
42987
43030
  * @extends series,plotOptions.area
42988
- * @excluding dataParser, dataURL, useOhlcData
43031
+ * @excluding useOhlcData
42989
43032
  * @product highcharts highstock
42990
43033
  * @apioption series.area
42991
43034
  */
@@ -43622,7 +43665,7 @@ Series_SeriesRegistry.registerSeriesType('spline', SplineSeries);
43622
43665
  * not specified, it is inherited from [chart.type](#chart.type).
43623
43666
  *
43624
43667
  * @extends series,plotOptions.spline
43625
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43668
+ * @excluding step, boostThreshold, boostBlending
43626
43669
  * @product highcharts highstock
43627
43670
  * @apioption series.spline
43628
43671
  */
@@ -43784,7 +43827,7 @@ Series_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);
43784
43827
  *
43785
43828
  *
43786
43829
  * @extends series,plotOptions.areaspline
43787
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43830
+ * @excluding step, boostThreshold, boostBlending
43788
43831
  * @product highcharts highstock
43789
43832
  * @apioption series.areaspline
43790
43833
  */
@@ -44061,13 +44104,16 @@ const ColumnSeriesDefaults = {
44061
44104
  * The minimal height for a column or width for a bar. By default,
44062
44105
  * 0 values are not shown. To visualize a 0 (or close to zero) point,
44063
44106
  * set the minimal point length to a pixel value like 3\. In stacked
44064
- * column charts, minPointLength might not be respected for tightly
44065
- * packed values.
44107
+ * column charts, the length is applied to each point in isolation, so
44108
+ * tightly packed values may overlap. See the stacked sample below for a
44109
+ * plugin that lays out the stack as a whole instead.
44066
44110
  *
44067
44111
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength/
44068
44112
  * Zero base value
44069
44113
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/
44070
44114
  * Positive and negative close to zero values
44115
+ * @sample {highcharts} highcharts/plotoptions/column-minpointlength-stacked/
44116
+ * Stack-aware minimum length
44071
44117
  *
44072
44118
  * @product highcharts highstock gantt
44073
44119
  */
@@ -44238,7 +44284,7 @@ const ColumnSeriesDefaults = {
44238
44284
  * not specified, it is inherited from [chart.type](#chart.type).
44239
44285
  *
44240
44286
  * @extends series,plotOptions.column
44241
- * @excluding connectNulls, dataParser, dataURL, gapSize, gapUnit, linecap,
44287
+ * @excluding connectNulls, gapSize, gapUnit, linecap,
44242
44288
  * lineWidth, marker, connectEnds, step
44243
44289
  * @product highcharts highstock
44244
44290
  * @apioption series.column
@@ -45882,7 +45928,7 @@ Series_SeriesRegistry.registerSeriesType('bar', BarSeries);
45882
45928
  * it is inherited from [chart.type](#chart.type).
45883
45929
  *
45884
45930
  * @extends series,plotOptions.bar
45885
- * @excluding connectNulls, dashStyle, dataParser, dataURL, gapSize, gapUnit,
45931
+ * @excluding connectNulls, dashStyle, gapSize, gapUnit,
45886
45932
  * linecap, lineWidth, marker, connectEnds, step
45887
45933
  * @product highcharts
45888
45934
  * @apioption series.bar
@@ -46083,7 +46129,7 @@ const ScatterSeriesDefaults = {
46083
46129
  * not specified, it is inherited from [chart.type](#chart.type).
46084
46130
  *
46085
46131
  * @extends series,plotOptions.scatter
46086
- * @excluding cropThreshold, dataParser, dataURL, useOhlcData
46132
+ * @excluding cropThreshold, useOhlcData
46087
46133
  * @product highcharts highstock
46088
46134
  * @apioption series.scatter
46089
46135
  */
@@ -47185,7 +47231,7 @@ const PieSeriesDefaults = {
47185
47231
  * it is inherited from [chart.type](#chart.type).
47186
47232
  *
47187
47233
  * @extends series,plotOptions.pie
47188
- * @excluding cropThreshold, dataParser, dataURL, linkedTo, stack, xAxis, yAxis,
47234
+ * @excluding cropThreshold, linkedTo, stack, xAxis, yAxis,
47189
47235
  * dataSorting, step, boostThreshold, boostBlending
47190
47236
  * @product highcharts highmaps
47191
47237
  * @apioption series.pie
@@ -48286,6 +48332,7 @@ var GeometryUtilities;
48286
48332
  * */
48287
48333
 
48288
48334
 
48335
+
48289
48336
  const { pointInPolygon } = Geometry_GeometryUtilities;
48290
48337
 
48291
48338
  /* *
@@ -48426,30 +48473,34 @@ function composeOverlappingDataLabels(ChartClass) {
48426
48473
  * Whether label is affected
48427
48474
  */
48428
48475
  function hideOrShow(label, chart) {
48429
- let complete, newOpacity, isLabelAffected = false;
48476
+ let isLabelAffected = false;
48430
48477
  if (label) {
48431
- newOpacity = label.newOpacity;
48478
+ const newOpacity = label.newOpacity, isDataLabel = label.hasClass('highcharts-data-label');
48479
+ // For tick labels, we need to stop running animations otherwise they
48480
+ // may continue to run after we set the new opacity
48481
+ if (!isDataLabel) {
48482
+ stop(label, 'opacity');
48483
+ }
48432
48484
  if (label.oldOpacity !== newOpacity) {
48433
48485
  // Toggle data labels
48434
- if (label.hasClass('highcharts-data-label')) {
48486
+ if (isDataLabel) {
48435
48487
  // Make sure the label is completely hidden to avoid catching
48436
48488
  // clicks (#4362)
48437
48489
  label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');
48438
- complete = function () {
48490
+ isLabelAffected = true;
48491
+ // Animate or set the opacity
48492
+ label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, () => {
48439
48493
  if (!chart.styledMode) {
48440
48494
  label.css({
48441
48495
  pointerEvents: newOpacity ? 'auto' : 'none'
48442
48496
  });
48443
48497
  }
48444
- };
48445
- isLabelAffected = true;
48446
- // Animate or set the opacity
48447
- label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);
48498
+ });
48448
48499
  fireEvent(chart, 'afterHideOverlappingLabel');
48449
- // Toggle other labels, tick labels
48500
+ // Toggle other labels - tick labels, stack labels
48450
48501
  }
48451
48502
  else {
48452
- label.attr({
48503
+ label[label.placed ? 'animate' : 'attr']({
48453
48504
  opacity: newOpacity
48454
48505
  });
48455
48506
  }
@@ -48465,25 +48516,37 @@ function hideOrShow(label, chart) {
48465
48516
  * @internal
48466
48517
  */
48467
48518
  function OverlappingDataLabels_onChartRender() {
48468
- const chart = this;
48519
+ const chart = this,
48520
+ // Helper function for data labels and stack labels when dynamicly
48521
+ // toggling the allowOverlap option
48522
+ toggle = (label, allowOverlap) => {
48523
+ // Allow overlap, reset opacity and show
48524
+ if (allowOverlap) {
48525
+ label.oldOpacity = label.opacity;
48526
+ label.newOpacity = 1;
48527
+ hideOrShow(label, chart);
48528
+ // Do not allow overlap
48529
+ }
48530
+ else {
48531
+ labels.push(label);
48532
+ }
48533
+ };
48469
48534
  let labels = [];
48470
48535
  // Consider external label collectors
48471
48536
  for (const collector of (chart.labelCollectors || [])) {
48472
48537
  labels = labels.concat(collector());
48473
48538
  }
48474
- for (const yAxis of (chart.yAxis || [])) {
48475
- if (yAxis.stacking &&
48476
- yAxis.options.stackLabels &&
48477
- !yAxis.options.stackLabels.allowOverlap) {
48478
- objectEach(yAxis.stacking.stacks, (stack) => {
48479
- objectEach(stack, (stackItem) => {
48480
- if (stackItem.label) {
48481
- labels.push(stackItem.label);
48482
- }
48483
- });
48539
+ // Stack labels
48540
+ for (const { options, stacking } of (chart.yAxis || [])) {
48541
+ objectEach(stacking?.stacks, (stack) => {
48542
+ objectEach(stack, ({ label }) => {
48543
+ if (label) {
48544
+ toggle(label, options.stackLabels?.allowOverlap);
48545
+ }
48484
48546
  });
48485
- }
48547
+ });
48486
48548
  }
48549
+ // Series data labels
48487
48550
  for (const series of (chart.series || [])) {
48488
48551
  if (series.visible && series.hasDataLabels?.()) { // #3866
48489
48552
  const push = (points) => {
@@ -48512,21 +48575,13 @@ function OverlappingDataLabels_onChartRender() {
48512
48575
  }
48513
48576
  */
48514
48577
  // Allow overlap if the option is explicitly true
48515
- if (
48578
+ toggle(label, (
48516
48579
  // #13449
48517
48580
  options.allowOverlap ??
48518
48581
  // Pie labels outside have a separate placement
48519
48582
  // logic, skip the overlap logic
48520
48583
  (series.is('pie') &&
48521
- Number(options.distance) > 0)) {
48522
- label.oldOpacity = label.opacity;
48523
- label.newOpacity = 1;
48524
- hideOrShow(label, chart);
48525
- // Do not allow overlap
48526
- }
48527
- else {
48528
- labels.push(label);
48529
- }
48584
+ Number(options.distance) > 0)));
48530
48585
  });
48531
48586
  }
48532
48587
  }
@@ -49202,7 +49257,7 @@ var Responsive;
49202
49257
  ;// ./code/es-modules/masters/highcharts.src.js
49203
49258
  // SPDX-License-Identifier: LicenseRef-Highcharts
49204
49259
  /**
49205
- * @license Highcharts JS v13.0.2 (2026-08-27)
49260
+ * @license Highcharts JS v13.1.0 (2026-09-18)
49206
49261
  * @module highcharts/highcharts
49207
49262
  *
49208
49263
  * (c) 2009-2026 Highsoft AS
@@ -49969,7 +50024,8 @@ function compose(ChartClass, NavigatorClass) {
49969
50024
  const chartProto = ChartClass.prototype;
49970
50025
  NavigatorConstructor = NavigatorClass;
49971
50026
  chartProto.callbacks.push(onChartCallback);
49972
- addEvent(ChartClass, 'afterAddSeries', onChartAfterAddSeries);
50027
+ addEvent(ChartClass, 'afterAddSeries', resetBaseSeries);
50028
+ addEvent(ChartClass, 'afterDrillUp', resetBaseSeries);
49973
50029
  addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);
49974
50030
  addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);
49975
50031
  addEvent(ChartClass, 'beforeRender', onChartBeforeRender);
@@ -49978,13 +50034,12 @@ function compose(ChartClass, NavigatorClass) {
49978
50034
  }
49979
50035
  }
49980
50036
  /**
49981
- * Handle adding new series.
50037
+ * Reset the base series.
49982
50038
  * @internal
49983
50039
  */
49984
- function onChartAfterAddSeries() {
50040
+ function resetBaseSeries() {
49985
50041
  if (this.navigator) {
49986
- // Recompute which series should be shown in navigator, and add them
49987
- this.navigator.setBaseSeries(null, false);
50042
+ this.navigator.setBaseSeries(void 0, false);
49988
50043
  }
49989
50044
  }
49990
50045
  /**
@@ -50133,7 +50188,7 @@ const ChartNavigatorComposition = {
50133
50188
  * */
50134
50189
 
50135
50190
 
50136
- const { isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
50191
+ const { composed: NavigatorAxisComposition_composed, isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
50137
50192
 
50138
50193
  /* *
50139
50194
  *
@@ -50199,8 +50254,7 @@ class NavigatorAxisAdditions {
50199
50254
  *
50200
50255
  * */
50201
50256
  static compose(AxisClass) {
50202
- if (!AxisClass.keepProps.includes('navigatorAxis')) {
50203
- AxisClass.keepProps.push('navigatorAxis');
50257
+ if (pushUnique(NavigatorAxisComposition_composed, 'Axis.Navigator')) {
50204
50258
  addEvent(AxisClass, 'init', NavigatorAxisComposition_onAxisInit);
50205
50259
  addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);
50206
50260
  }
@@ -51072,6 +51126,9 @@ var ScrollbarAxis;
51072
51126
  }
51073
51127
  });
51074
51128
  }
51129
+ else if (axis.scrollbar) {
51130
+ axis.scrollbar = axis.scrollbar.destroy();
51131
+ }
51075
51132
  }
51076
51133
  /**
51077
51134
  * Wrap rendering axis, and update scrollbar if one is created.
@@ -51209,14 +51266,12 @@ var ScrollbarAxis;
51209
51266
  */
51210
51267
  const ScrollbarDefaults = {
51211
51268
  /**
51212
- * The height of the scrollbar. If `buttonsEnabled` is true , the height
51269
+ * The height of the scrollbar. If `buttonsEnabled` is true, the height
51213
51270
  * also applies to the width of the scroll arrows so that they are always
51214
51271
  * squares.
51215
51272
  *
51216
51273
  * @sample stock/scrollbar/style/
51217
51274
  * Non-default height
51218
- *
51219
- * @type {number}
51220
51275
  */
51221
51276
  height: 10,
51222
51277
  /**
@@ -53523,11 +53578,7 @@ class Navigator {
53523
53578
  erase(this.chart.axes, this.yAxis);
53524
53579
  }
53525
53580
  // Destroy series
53526
- (this.series || []).forEach((s) => {
53527
- if (s.destroy) {
53528
- s.destroy();
53529
- }
53530
- });
53581
+ destroyObjectProperties(this.series || []);
53531
53582
  // Destroy properties
53532
53583
  [
53533
53584
  'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',
@@ -53612,7 +53663,6 @@ var OrdinalAxis;
53612
53663
  axisProto.ordinal2lin = axisProto.val2lin;
53613
53664
  addEvent(AxisClass, 'afterInit', onAxisAfterInit);
53614
53665
  addEvent(AxisClass, 'foundExtremes', onAxisFoundExtremes);
53615
- addEvent(AxisClass, 'afterSetScale', onAxisAfterSetScale);
53616
53666
  addEvent(AxisClass, 'initialAxisTranslation', onAxisInitialAxisTranslation);
53617
53667
  addEvent(ChartClass, 'pan', onChartPan);
53618
53668
  addEvent(ChartClass, 'touchpan', onChartPan);
@@ -53890,20 +53940,6 @@ var OrdinalAxis;
53890
53940
  }
53891
53941
  }
53892
53942
  }
53893
- /**
53894
- * For ordinal axis, that loads data async, redraw axis after data is
53895
- * loaded. If we don't do that, axis will have the same extremes as
53896
- * previously, but ordinal positions won't be calculated. See #10290
53897
- * @internal
53898
- */
53899
- function onAxisAfterSetScale() {
53900
- const axis = this;
53901
- if (axis.horiz && !axis.isDirty) {
53902
- axis.isDirty = axis.isOrdinal &&
53903
- axis.chart.navigator &&
53904
- !axis.chart.navigator.adaptToUpdatedData;
53905
- }
53906
- }
53907
53943
  /** @internal */
53908
53944
  function onAxisInitialAxisTranslation() {
53909
53945
  const axis = this;
@@ -55405,8 +55441,8 @@ function RangeSelectorComposition_onChartUpdate(e) {
55405
55441
  this.options.rangeSelector.enabled = true;
55406
55442
  this.rangeSelector = rangeSelector = new RangeSelectorConstructor(this);
55407
55443
  }
55408
- this.extraBottomMargin = false;
55409
- this.extraTopMargin = false;
55444
+ this.extraBottomMargin = void 0;
55445
+ this.extraTopMargin = void 0;
55410
55446
  if (rangeSelector) {
55411
55447
  const verticalAlign = (optionsRangeSelector &&
55412
55448
  optionsRangeSelector.verticalAlign) || (rangeSelector.options && rangeSelector.options.verticalAlign);
@@ -57272,7 +57308,6 @@ addEvent(Chart_Chart, 'update', function (e) {
57272
57308
  addEvent(AxisClass, 'afterDrawCrosshair', onAxisAfterDrawCrosshair);
57273
57309
  addEvent(AxisClass, 'afterHideCrosshair', onAxisAfterHideCrosshair);
57274
57310
  addEvent(AxisClass, 'autoLabelAlign', onAxisAutoLabelAlign);
57275
- addEvent(AxisClass, 'destroy', onAxisDestroy);
57276
57311
  addEvent(AxisClass, 'getPlotLinePath', onAxisGetPlotLinePath);
57277
57312
  ChartClass.prototype.setFixedRange = StockChart_setFixedRange;
57278
57313
  seriesProto.forceCropping = seriesForceCropping;
@@ -57449,33 +57484,28 @@ addEvent(Chart_Chart, 'update', function (e) {
57449
57484
  * @internal
57450
57485
  */
57451
57486
  function onAxisAutoLabelAlign(e) {
57452
- const axis = this, chart = axis.chart, options = axis.options, panes = chart._labelPanes = chart._labelPanes || {}, labelOptions = options.labels;
57453
- if (chart.options.isStock && axis.coll === 'yAxis') {
57454
- const key = options.top + ',' + options.height;
57455
- // Do it only for the first Y axis of each pane
57456
- if (!panes[key] && labelOptions.enabled) {
57457
- if (labelOptions.distance === 15 && // Default
57458
- axis.side === 1) {
57459
- labelOptions.distance = 0;
57460
- }
57461
- if (typeof labelOptions.align === 'undefined') {
57462
- labelOptions.align = 'right';
57463
- }
57464
- panes[key] = axis;
57465
- e.align = 'right';
57466
- e.preventDefault();
57487
+ const axis = this, chart = axis.chart, options = axis.options, labelOptions = options.labels;
57488
+ // Returns true if this is the first yAxis in the pane
57489
+ const isFirstYAxisInPane = () => {
57490
+ let foundOther = false;
57491
+ for (const otherAxis of chart.yAxis) {
57492
+ if (otherAxis === axis && !foundOther) {
57493
+ return true;
57494
+ }
57495
+ if (otherAxis !== axis &&
57496
+ otherAxis.options.top === options.top &&
57497
+ otherAxis.options.height === options.height) {
57498
+ foundOther = true;
57499
+ }
57467
57500
  }
57468
- }
57469
- }
57470
- /**
57471
- * Clear axis from label panes. (#6071)
57472
- * @internal
57473
- */
57474
- function onAxisDestroy() {
57475
- const axis = this, chart = axis.chart, key = (axis.options &&
57476
- (axis.options.top + ',' + axis.options.height));
57477
- if (key && chart._labelPanes && chart._labelPanes[key] === axis) {
57478
- delete chart._labelPanes[key];
57501
+ return false;
57502
+ };
57503
+ if (chart.options.isStock &&
57504
+ axis.coll === 'yAxis' &&
57505
+ isFirstYAxisInPane() &&
57506
+ labelOptions.enabled) {
57507
+ e.align = 'right';
57508
+ e.preventDefault();
57479
57509
  }
57480
57510
  }
57481
57511
  /**
@@ -57483,7 +57513,7 @@ addEvent(Chart_Chart, 'update', function (e) {
57483
57513
  * @internal
57484
57514
  */
57485
57515
  function onAxisGetPlotLinePath(e) {
57486
- const axis = this, axisOptions = axis.options, series = (axis.isLinked && !axis.series && axis.linkedParent ?
57516
+ const axis = this, axisOptions = axis.options, series = (!axis.series && axis.linkedParent ?
57487
57517
  axis.linkedParent.series :
57488
57518
  axis.series), { chart, horiz } = axis, renderer = chart.renderer, result = [], { acrossPanes = true, force, translatedValue, value } = e, allPerpendicularAxes = (axis.isXAxis ? chart.yAxis : chart.xAxis) || [], crossingPosName = horiz ? 'top' : 'left', crossingLenName = horiz ? 'height' : 'width', hasCrossingBounds = defined(axisOptions[crossingPosName]) ||
57489
57519
  defined(axisOptions[crossingLenName]),
@@ -57769,8 +57799,7 @@ class HLCPoint extends ColumnPoint {
57769
57799
  * HLC chart
57770
57800
  *
57771
57801
  * @extends plotOptions.column
57772
- * @excluding borderColor, borderRadius, borderWidth, crisp, stacking,
57773
- * stack
57802
+ * @excluding borderColor, borderRadius, borderWidth, crisp, stack, stacking
57774
57803
  * @product highstock
57775
57804
  * @optionparent plotOptions.hlc
57776
57805
  */
@@ -57794,10 +57823,6 @@ const HLCSeriesDefaults = {
57794
57823
  * @product highstock
57795
57824
  * @apioption plotOptions.hlc.dataGrouping.approximation
57796
57825
  */
57797
- /**
57798
- * @default close
57799
- * @apioption plotOptions.hlc.colorKey
57800
- */
57801
57826
  /**
57802
57827
  * What type of legend symbol to render for this series. For HLC series,
57803
57828
  * the default is `hlc`, a vertical stem with a tick on the right
@@ -57874,7 +57899,6 @@ const HLCSeriesDefaults = {
57874
57899
  * specified, it is inherited from [chart.type](#chart.type).
57875
57900
  *
57876
57901
  * @extends series,plotOptions.hlc
57877
- * @excluding dataParser, dataURL
57878
57902
  * @product highstock
57879
57903
  * @apioption series.hlc
57880
57904
  */
@@ -58351,7 +58375,6 @@ const OHLCSeriesDefaults = {
58351
58375
  * specified, it is inherited from [chart.type](#chart.type).
58352
58376
  *
58353
58377
  * @extends series,plotOptions.ohlc
58354
- * @excluding dataParser, dataURL
58355
58378
  * @product highstock
58356
58379
  * @apioption series.ohlc
58357
58380
  */
@@ -58686,7 +58709,7 @@ const CandlestickSeriesDefaults = {
58686
58709
  *
58687
58710
  * @type {*}
58688
58711
  * @extends series,plotOptions.candlestick
58689
- * @excluding dataParser, dataURL, marker
58712
+ * @excluding marker
58690
58713
  * @product highstock
58691
58714
  * @apioption series.candlestick
58692
58715
  */
@@ -58888,6 +58911,7 @@ const { column: { prototype: { pointClass: FlagsPoint_ColumnPoint } } } = Series
58888
58911
  * Class
58889
58912
  *
58890
58913
  * */
58914
+ /** @internal */
58891
58915
  class FlagsPoint extends FlagsPoint_ColumnPoint {
58892
58916
  constructor() {
58893
58917
  /* *
@@ -58904,7 +58928,7 @@ class FlagsPoint extends FlagsPoint_ColumnPoint {
58904
58928
  *
58905
58929
  * */
58906
58930
  /**
58907
- * @private
58931
+ * @internal
58908
58932
  */
58909
58933
  isValid() {
58910
58934
  // #9233 - Prevent from treating flags as null points (even if
@@ -58912,7 +58936,7 @@ class FlagsPoint extends FlagsPoint_ColumnPoint {
58912
58936
  return isNumber(this.y) || typeof this.y === 'undefined';
58913
58937
  }
58914
58938
  /**
58915
- * @private
58939
+ * @internal
58916
58940
  */
58917
58941
  hasNewShapeType() {
58918
58942
  const shape = this.options.shape || this.series.options.shape;
@@ -58924,6 +58948,7 @@ class FlagsPoint extends FlagsPoint_ColumnPoint {
58924
58948
  * Default Export
58925
58949
  *
58926
58950
  * */
58951
+ /** @internal */
58927
58952
  /* harmony default export */ const Flags_FlagsPoint = (FlagsPoint);
58928
58953
 
58929
58954
  ;// ./code/es-modules/Series/Flags/FlagsSeriesDefaults.js
@@ -58982,9 +59007,9 @@ const FlagsSeriesDefaults = {
58982
59007
  * @apioption plotOptions.flags.onKey
58983
59008
  */
58984
59009
  /**
58985
- * What type of legend symbol to render for this series. For flags
58986
- * series, the default is `flag-icon`, a pole with a pennant.
58987
- *
59010
+ * What type of legend symbol to render for this series. For flags
59011
+ * series, the default is `flag-icon`, a pole with a pennant.
59012
+ *
58988
59013
  * @default flag-icon
58989
59014
  * @product highstock
58990
59015
  * @apioption plotOptions.flags.legendSymbol
@@ -59162,7 +59187,7 @@ const FlagsSeriesDefaults = {
59162
59187
  * `.highcharts-flag-series .highcharts-point` rule.
59163
59188
  *
59164
59189
  * @type {Highcharts.CSSObject}
59165
- * @default {"fontSize": "11px", "fontWeight": "bold"}
59190
+ * @default { "color": "var(--highcharts-neutral-color-100)", "fontSize": "0.7em", "fontWeight": "bold" }
59166
59191
  * @product highstock
59167
59192
  */
59168
59193
  style: {
@@ -59180,9 +59205,9 @@ const FlagsSeriesDefaults = {
59180
59205
  *
59181
59206
  * @extends series,plotOptions.flags
59182
59207
  * @excluding animation, borderColor, borderRadius, borderWidth, colorByPoint,
59183
- * connectNulls, cropThreshold, dashStyle, dataGrouping, dataParser,
59184
- * dataURL, gapSize, gapUnit, linecap, lineWidth, marker,
59185
- * pointPadding, pointWidth, step, turboThreshold, useOhlcData
59208
+ * connectNulls, cropThreshold, dashStyle, dataGrouping, gapSize,
59209
+ * gapUnit, linecap, lineWidth, marker, pointPadding, pointWidth,
59210
+ * step, turboThreshold, useOhlcData
59186
59211
  * @product highstock
59187
59212
  * @apioption series.flags
59188
59213
  */
@@ -59258,6 +59283,7 @@ const { composed: FlagsSymbols_composed } = Core_Globals;
59258
59283
  * Composition
59259
59284
  *
59260
59285
  * */
59286
+ /** @internal */
59261
59287
  var FlagsSymbols;
59262
59288
  (function (FlagsSymbols) {
59263
59289
  /* *
@@ -59266,7 +59292,7 @@ var FlagsSymbols;
59266
59292
  *
59267
59293
  * */
59268
59294
  /**
59269
- * @private
59295
+ * @internal
59270
59296
  */
59271
59297
  function compose(SVGRendererClass) {
59272
59298
  if (pushUnique(FlagsSymbols_composed, 'Series.Flags')) {
@@ -59285,7 +59311,7 @@ var FlagsSymbols;
59285
59311
  FlagsSymbols.compose = compose;
59286
59312
  /**
59287
59313
  * Create the flag icon with anchor.
59288
- * @private
59314
+ * @internal
59289
59315
  */
59290
59316
  function flag(x, y, w, h, options) {
59291
59317
  const anchorX = (options && options.anchorX) || x, anchorY = (options && options.anchorY) || y;
@@ -59295,7 +59321,7 @@ var FlagsSymbols;
59295
59321
  }
59296
59322
  /**
59297
59323
  * Create the circlepin and squarepin icons with anchor.
59298
- * @private
59324
+ * @internal
59299
59325
  */
59300
59326
  function createPinSymbol(symbols, shape) {
59301
59327
  symbols[(shape + 'pin')] = function (x, y, w, h, options) {
@@ -59346,6 +59372,7 @@ var FlagsSymbols;
59346
59372
  * Default Export
59347
59373
  *
59348
59374
  * */
59375
+ /** @internal */
59349
59376
  /* harmony default export */ const Flags_FlagsSymbols = (FlagsSymbols);
59350
59377
 
59351
59378
  ;// ./code/es-modules/Series/OnSeriesComposition.js
@@ -59596,7 +59623,7 @@ const { series: FlagsSeries_Series, seriesTypes: { column: FlagsSeries_ColumnSer
59596
59623
  /**
59597
59624
  * The Flags series.
59598
59625
  *
59599
- * @private
59626
+ * @internal
59600
59627
  * @class
59601
59628
  * @name Highcharts.seriesTypes.flags
59602
59629
  *
@@ -59610,7 +59637,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
59610
59637
  * */
59611
59638
  /**
59612
59639
  * Disable animation, but keep clipping (#8546).
59613
- * @private
59640
+ * @internal
59614
59641
  */
59615
59642
  animate(init) {
59616
59643
  if (init) {
@@ -59619,7 +59646,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
59619
59646
  }
59620
59647
  /**
59621
59648
  * Draw the markers.
59622
- * @private
59649
+ * @internal
59623
59650
  */
59624
59651
  drawPoints() {
59625
59652
  const series = this, points = series.points, chart = series.chart, renderer = chart.renderer, inverted = chart.inverted, options = series.options, optionsY = options.y, yAxis = series.yAxis, boxesMap = {}, boxes = [], borderRadius = isNumber(options.borderRadius) ?
@@ -59761,7 +59788,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
59761
59788
  /**
59762
59789
  * Extend the column trackers with listeners to expand and contract
59763
59790
  * stacks.
59764
- * @private
59791
+ * @internal
59765
59792
  */
59766
59793
  drawTracker() {
59767
59794
  const series = this, points = series.points;
@@ -59804,7 +59831,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
59804
59831
  }
59805
59832
  /**
59806
59833
  * Get presentational attributes
59807
- * @private
59834
+ * @internal
59808
59835
  */
59809
59836
  pointAttribs(point, state) {
59810
59837
  const options = this.options, color = point?.color || this.color;
@@ -59821,7 +59848,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
59821
59848
  };
59822
59849
  }
59823
59850
  /**
59824
- * @private
59851
+ * @internal
59825
59852
  */
59826
59853
  setClip() {
59827
59854
  FlagsSeries_Series.prototype.setClip.apply(this, arguments);
@@ -59852,7 +59879,7 @@ extend(FlagsSeries.prototype, {
59852
59879
  buildKDTree: FlagsSeries_noop,
59853
59880
  /**
59854
59881
  * Inherit the initialization from base Series.
59855
- * @private
59882
+ * @internal
59856
59883
  */
59857
59884
  init: FlagsSeries_Series.prototype.init
59858
59885
  });
@@ -59862,6 +59889,7 @@ Series_SeriesRegistry.registerSeriesType('flags', FlagsSeries);
59862
59889
  * Default Export
59863
59890
  *
59864
59891
  * */
59892
+ /** @internal */
59865
59893
  /* harmony default export */ const Flags_FlagsSeries = (FlagsSeries);
59866
59894
 
59867
59895
  ;// ./code/es-modules/Core/Axis/BrokenAxis.js
@@ -59878,6 +59906,8 @@ Series_SeriesRegistry.registerSeriesType('flags', FlagsSeries);
59878
59906
  * */
59879
59907
 
59880
59908
 
59909
+ const { composed: BrokenAxis_composed } = Core_Globals;
59910
+
59881
59911
 
59882
59912
  /* *
59883
59913
  *
@@ -59905,8 +59935,7 @@ var BrokenAxis;
59905
59935
  * @internal
59906
59936
  */
59907
59937
  function compose(AxisClass, SeriesClass) {
59908
- if (!AxisClass.keepProps.includes('brokenAxis')) {
59909
- AxisClass.keepProps.push('brokenAxis');
59938
+ if (pushUnique(BrokenAxis_composed, 'Axis.Broken')) {
59910
59939
  addEvent(AxisClass, 'init', onAxisInit);
59911
59940
  addEvent(AxisClass, 'afterInit', onAxisAfterInit);
59912
59941
  addEvent(AxisClass, 'afterSetTickPositions', onAxisAfterSetTickPositions);
@@ -60124,7 +60153,7 @@ var BrokenAxis;
60124
60153
  });
60125
60154
  // For stacked chart generate empty stack items, #6546
60126
60155
  if (yAxis.stacking && this.options.stacking) {
60127
- stack = yAxis.stacking.stacks[this.stackKey][xRange] = new Stacking_StackItem(yAxis, yAxis.options.stackLabels, false, xRange, this.stack ?? '');
60156
+ stack = yAxis.stacking.stacks[this.stackKey][xRange] = new Stacking_StackItem(yAxis, false, xRange, this.stack ?? '');
60128
60157
  stack.total = 0;
60129
60158
  }
60130
60159
  }
@@ -60490,7 +60519,7 @@ var BrokenAxis;
60490
60519
  /* unused harmony import specifier */ var Highcharts;
60491
60520
  // SPDX-License-Identifier: LicenseRef-Highcharts
60492
60521
  /**
60493
- * @license Highcharts JS v13.0.2 (2026-08-27)
60522
+ * @license Highcharts JS v13.1.0 (2026-09-18)
60494
60523
  * @module highcharts/modules/broken-axis
60495
60524
  * @requires highcharts
60496
60525
  *
@@ -61977,7 +62006,7 @@ const DataGroupingComposition = {
61977
62006
  /* unused harmony import specifier */ var datagrouping_src_Highcharts;
61978
62007
  // SPDX-License-Identifier: LicenseRef-Highcharts
61979
62008
  /**
61980
- * @license Highstock JS v13.0.2 (2026-08-27)
62009
+ * @license Highstock JS v13.1.0 (2026-09-18)
61981
62010
  * @module highcharts/modules/datagrouping
61982
62011
  * @requires highcharts
61983
62012
  *
@@ -62342,7 +62371,7 @@ const MouseWheelZoomComposition = {
62342
62371
  /* unused harmony import specifier */ var mouse_wheel_zoom_src_Highcharts;
62343
62372
  // SPDX-License-Identifier: LicenseRef-Highcharts
62344
62373
  /**
62345
- * @license Highcharts JS v13.0.2 (2026-08-27)
62374
+ * @license Highcharts JS v13.1.0 (2026-09-18)
62346
62375
  * @module highcharts/modules/mouse-wheel-zoom
62347
62376
  * @requires highcharts
62348
62377
  *
@@ -62366,7 +62395,7 @@ mouse_wheel_zoom_src_G.MouseWheelZoom.compose(mouse_wheel_zoom_src_G.Chart);
62366
62395
  /* unused harmony import specifier */ var stock_src_Highcharts;
62367
62396
  // SPDX-License-Identifier: LicenseRef-Highcharts
62368
62397
  /**
62369
- * @license Highstock JS v13.0.2 (2026-08-27)
62398
+ * @license Highstock JS v13.1.0 (2026-09-18)
62370
62399
  * @module highcharts/modules/stock
62371
62400
  * @requires highcharts
62372
62401
  *