highcharts 13.0.2 → 13.1.1

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 +19 -12
  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 +825 -751
  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 +877 -777
  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 +834 -779
  646. package/highcharts-gantt.js +4 -4
  647. package/highcharts-gantt.src.js +896 -840
  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 +833 -778
  656. package/highmaps.js +4 -4
  657. package/highmaps.src.js +916 -846
  658. package/highstock.js +4 -4
  659. package/highstock.src.js +904 -875
  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 +885 -804
  1153. package/themes/adaptive.js +2 -2
  1154. package/themes/adaptive.src.js +22 -43
  1155. package/themes/avocado.js +2 -2
  1156. package/themes/avocado.src.js +17 -38
  1157. package/themes/dark-unica.js +2 -2
  1158. package/themes/dark-unica.src.js +17 -38
  1159. package/themes/grid-light.js +2 -2
  1160. package/themes/grid-light.src.js +17 -38
  1161. package/themes/high-contrast.js +2 -2
  1162. package/themes/high-contrast.src.js +17 -38
  1163. package/themes/sand-signika.js +2 -2
  1164. package/themes/sand-signika.src.js +17 -38
  1165. package/themes/sunset.js +2 -2
  1166. package/themes/sunset.src.js +17 -38
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v13.0.2 (2026-08-27)
2
+ * @license Highcharts JS v13.1.1 (2026-09-20)
3
3
  * @module highcharts/highcharts-autoload
4
4
  *
5
5
  * (c) 2009-2024 Torstein Honsi
@@ -23,36 +23,17 @@ return /******/ (() => { // webpackBootstrap
23
23
  /******/
24
24
  /************************************************************************/
25
25
  /******/ /* webpack/runtime/define property getters */
26
- /******/ (() => {
27
- /******/ // define getter/value functions for harmony exports
28
- /******/ __webpack_require__.d = (exports, definition) => {
29
- /******/ if(Array.isArray(definition)) {
30
- /******/ var i = 0;
31
- /******/ while(i < definition.length) {
32
- /******/ var key = definition[i++];
33
- /******/ var binding = definition[i++];
34
- /******/ if(!__webpack_require__.o(exports, key)) {
35
- /******/ if(binding === 0) {
36
- /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
37
- /******/ } else {
38
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
39
- /******/ }
40
- /******/ } else if(binding === 0) { i++; }
41
- /******/ }
42
- /******/ } else {
43
- /******/ for(var key in definition) {
44
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
45
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
46
- /******/ }
47
- /******/ }
26
+ /******/ // define getter/value functions for harmony exports
27
+ /******/ __webpack_require__.d = (exports, definition) => {
28
+ /******/ for(var key in definition) {
29
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
30
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
48
31
  /******/ }
49
- /******/ };
50
- /******/ })();
32
+ /******/ }
33
+ /******/ };
51
34
  /******/
52
35
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
53
- /******/ (() => {
54
- /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
55
- /******/ })();
36
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));
56
37
  /******/
57
38
  /************************************************************************/
58
39
  let __webpack_exports__ = {};
@@ -91,7 +72,7 @@ var Globals;
91
72
  * Constants
92
73
  *
93
74
  * */
94
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.2', Globals.win = (typeof window !== 'undefined' ?
75
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.1.1', Globals.win = (typeof window !== 'undefined' ?
95
76
  window :
96
77
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
97
78
  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 = [
@@ -102,14 +83,16 @@ var Globals;
102
83
  ], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {
103
84
  // Checks whether the browser supports passive events, (#11353).
104
85
  let supportsPassive = false;
105
- // Object.defineProperty doesn't work on IE as well as passive
106
- // events - instead of using polyfill, we can exclude IE totally.
86
+ // Accessors don't work on IE as well as passive events - instead
87
+ // of using polyfill, we can exclude IE totally. The getter has to
88
+ // be enumerable, or wrappers that shallow-copy the options never
89
+ // read it (#25092).
107
90
  if (!Globals.isMS) {
108
- const opts = Object.defineProperty({}, 'passive', {
109
- get: function () {
110
- supportsPassive = true;
91
+ const opts = {
92
+ get passive() {
93
+ return (supportsPassive = true);
111
94
  }
112
- });
95
+ };
113
96
  if (Globals.win.addEventListener && Globals.win.removeEventListener) {
114
97
  Globals.win.addEventListener('testPassive', Globals.noop, opts);
115
98
  Globals.win.removeEventListener('testPassive', Globals.noop, opts);
@@ -2185,6 +2168,13 @@ function extend(a, b) {
2185
2168
  a = {};
2186
2169
  }
2187
2170
  for (n in b) { // eslint-disable-line guard-for-in
2171
+ // Prototype pollution (#14883). Keys like `__proto__` may arrive as
2172
+ // own, enumerable properties through `JSON.parse`, in which case
2173
+ // assigning them would mutate the prototype of the target instead of
2174
+ // adding a property.
2175
+ if (n === '__proto__' || n === 'constructor') {
2176
+ continue;
2177
+ }
2188
2178
  a[n] = b[n];
2189
2179
  }
2190
2180
  return a;
@@ -5446,6 +5436,13 @@ const defaultOptions = {
5446
5436
  * @since 2.0
5447
5437
  * @apioption title.align
5448
5438
  */
5439
+ /**
5440
+ * A CSS class name to apply to the title's container div,
5441
+ * allowing unique CSS styling for each chart.
5442
+ *
5443
+ * @type {string}
5444
+ * @apioption title.className
5445
+ */
5449
5446
  /**
5450
5447
  * The margin between the title and the plot area, or if a subtitle
5451
5448
  * is present, the margin between the subtitle and the plot area.
@@ -5508,6 +5505,13 @@ const defaultOptions = {
5508
5505
  * @since 2.0
5509
5506
  * @apioption subtitle.align
5510
5507
  */
5508
+ /**
5509
+ * A CSS class name to apply to the subtitle's container div,
5510
+ * allowing unique CSS styling for each chart.
5511
+ *
5512
+ * @type {string}
5513
+ * @apioption subtitle.className
5514
+ */
5511
5515
  /**
5512
5516
  * When the subtitle is floating, the plot area will not move to make
5513
5517
  * space for it.
@@ -7640,6 +7644,10 @@ const defaultOptions = {
7640
7644
  /**
7641
7645
  * The URL for the credits label.
7642
7646
  *
7647
+ * URLs that do not start with one of the
7648
+ * [AST.allowedReferences](https://api.highcharts.com/class-reference/Highcharts.AST#.allowedReferences),
7649
+ * for example `javascript:` URLs, are ignored.
7650
+ *
7643
7651
  * @sample {highcharts} highcharts/credits/href/
7644
7652
  * Custom URL and text
7645
7653
  * @sample {highmaps} maps/credits/customized/
@@ -8613,6 +8621,7 @@ class Fx {
8613
8621
  * Prepare start and end values so that the path can be animated one to one.
8614
8622
  *
8615
8623
  * @function Highcharts.Fx#initPath
8624
+ * @internal
8616
8625
  *
8617
8626
  * @param {Highcharts.SVGElement} elem
8618
8627
  * The SVGElement item.
@@ -8912,7 +8921,9 @@ function animate(el, params = { pos: 1 }, opt) {
8912
8921
  if (el) {
8913
8922
  stop(el, prop);
8914
8923
  }
8915
- const fx = new Animation_Fx(el, opt, prop), d = params.d;
8924
+ const fx = new Animation_Fx(el, opt, prop), d = params.d,
8925
+ // Discrete value that doesn't animate, apply at once
8926
+ applyImmediately = prop === 'dashstyle';
8916
8927
  let start = 0, end = void 0, unit = '';
8917
8928
  if (prop === 'd' && isArray(d)) {
8918
8929
  fx.paths = fx.initPath(el, el.pathArray, d);
@@ -8921,6 +8932,9 @@ function animate(el, params = { pos: 1 }, opt) {
8921
8932
  }
8922
8933
  else if (el?.attr) {
8923
8934
  start = el.attr(prop);
8935
+ if (applyImmediately) {
8936
+ el.attr(prop, val);
8937
+ }
8924
8938
  }
8925
8939
  else if (el) {
8926
8940
  start = +(getStyle(el, prop) || 0);
@@ -8935,7 +8949,7 @@ function animate(el, params = { pos: 1 }, opt) {
8935
8949
  end = end.replace(/px/g, ''); // #4351
8936
8950
  }
8937
8951
  // Empty dashstyle animation crashes treemap on hover
8938
- if (defined(end)) {
8952
+ if (defined(end) && !applyImmediately) {
8939
8953
  fx.run(start, end, unit);
8940
8954
  }
8941
8955
  });
@@ -9074,7 +9088,7 @@ class AST {
9074
9088
  if (AST.allowedAttributes.indexOf(key) === -1) {
9075
9089
  valid = false;
9076
9090
  }
9077
- if (['background', 'dynsrc', 'href', 'lowsrc', 'src']
9091
+ if (['background', 'dynsrc', 'href', 'lowsrc', 'src', 'xlink:href']
9078
9092
  .indexOf(key) !== -1) {
9079
9093
  valid = isString(val) && AST.allowedReferences.some((ref) => val.indexOf(ref) === 0);
9080
9094
  }
@@ -9257,17 +9271,25 @@ class AST {
9257
9271
  markup, 'text/html');
9258
9272
  }
9259
9273
  catch {
9260
- // There are two cases where this fails:
9261
- // 1. IE9 and PhantomJS, where the DOMParser only supports parsing
9262
- // XML
9263
- // 2. Due to a Chromium issue where chart redraws are triggered by
9264
- // a `beforeprint` event (#16931),
9265
- // https://issues.chromium.org/issues/40222135
9274
+ // Due to a Chromium issue where chart redraws are triggered by a
9275
+ // `beforeprint` event (#16931),
9276
+ // https://issues.chromium.org/issues/40222135, the Trusted
9277
+ // Types `createHTML` callback can throw "The provided callback
9278
+ // is no longer runnable" while the browser is mid-print. Retry
9279
+ // with the raw string - `DOMParser` itself is not a Trusted
9280
+ // Types sink, so parsing it directly is safe.
9281
+ try {
9282
+ doc = new DOMParser().parseFromString(markup, 'text/html');
9283
+ }
9284
+ catch {
9285
+ // Ignore, fall through to the inert-document fallback below.
9286
+ }
9266
9287
  }
9267
9288
  if (!doc) {
9268
- const body = createElement('div');
9269
- body.innerHTML = markup;
9270
- doc = { body };
9289
+ // Never assign untrusted markup to a live document's innerHTML.
9290
+ // Parse into a detached, inert document instead.
9291
+ doc = Core_Globals.doc.implementation.createHTMLDocument('');
9292
+ doc.body.innerHTML = markup;
9271
9293
  }
9272
9294
  const appendChildNodes = (node, addTo) => {
9273
9295
  // Preserve the camelCase of SVG tags via localName (#24702).
@@ -9504,7 +9526,6 @@ AST.allowedTags = [
9504
9526
  'span',
9505
9527
  'stop',
9506
9528
  'strong',
9507
- 'style',
9508
9529
  'sub',
9509
9530
  'sup',
9510
9531
  'svg',
@@ -10284,6 +10305,7 @@ class SVGElement {
10284
10305
  let ret = (this[key + 'Value'] ??
10285
10306
  this[key] ??
10286
10307
  (this.element ? this.element.getAttribute(key) : null) ??
10308
+ this.box?.[key] ?? // For labels, when animating border radius
10287
10309
  0);
10288
10310
  if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
10289
10311
  ret = parseFloat(ret);
@@ -12878,7 +12900,7 @@ function arc(cx, cy, w, h, options) {
12878
12900
  * Path
12879
12901
  */
12880
12902
  function callout(x, y, w, h, options) {
12881
- const arrowLength = 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
12903
+ 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;
12882
12904
  const path = roundedRect(x, y, w, h, { r });
12883
12905
  if (!isNumber(anchorX)) {
12884
12906
  return path;
@@ -13502,8 +13524,12 @@ class TextBuilder {
13502
13524
  this.truncate(textNode, textNode.textContent || '', void 0, 0,
13503
13525
  // Target width
13504
13526
  width, ellipsisWidth, stringWithEllipsis);
13505
- textNode.textContent = textNode.textContent
13506
- ?.replace('\u2026', '') + '\u2026';
13527
+ // If there is still text left, add an ellipsis to
13528
+ // the end of the line
13529
+ if (textNode.textContent) {
13530
+ textNode.textContent = textNode.textContent
13531
+ ?.replace('\u2026', '') + '\u2026';
13532
+ }
13507
13533
  }
13508
13534
  break;
13509
13535
  }
@@ -13929,7 +13955,7 @@ class SVGRenderer {
13929
13955
  this.url = this.getReferenceURL();
13930
13956
  // Add description
13931
13957
  const desc = this.createElement('desc').add();
13932
- desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.2'));
13958
+ desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.1.1'));
13933
13959
  this.defs = this.createElement('defs').add();
13934
13960
  this.allowHTML = allowHTML;
13935
13961
  this.forExport = forExport;
@@ -15768,7 +15794,11 @@ class HTMLElement extends SVG_SVGElement {
15768
15794
  // Some properties require other properties to be set
15769
15795
  if (styles?.textOverflow === 'ellipsis') {
15770
15796
  styles.overflow = 'hidden';
15771
- styles.whiteSpace = 'nowrap';
15797
+ // With a line clamp, the text should wrap and ellipsis at the
15798
+ // clamped line instead of staying on one line (#24724)
15799
+ if (!(styles.lineClamp ?? this.styles.lineClamp)) {
15800
+ styles.whiteSpace = 'nowrap';
15801
+ }
15772
15802
  }
15773
15803
  // Apply line clamp
15774
15804
  if (styles?.lineClamp) {
@@ -16957,15 +16987,16 @@ var AxisDefaults;
16957
16987
  /**
16958
16988
  * The label's pixel distance from the perimeter of the plot area.
16959
16989
  * On cartesian charts, this is overridden if the `labels.y` setting
16960
- * is set.
16990
+ * is set. Defaults to 15 unless the labels are aligned inside the
16991
+ * plot area, in which case it defaults to 0.
16961
16992
  *
16962
16993
  * @sample {highcharts} highcharts/yaxis/labels-distance/
16963
16994
  * Polar chart, labels centered under the arc
16964
16995
  *
16965
16996
  * @type {number}
16966
16997
  * @product highcharts gantt
16998
+ * @apioption xAxis.labels.distance
16967
16999
  */
16968
- distance: 15,
16969
17000
  /**
16970
17001
  * Enable or disable the axis labels.
16971
17002
  *
@@ -17223,18 +17254,18 @@ var AxisDefaults;
17223
17254
  * @apioption xAxis.top
17224
17255
  */
17225
17256
  /**
17226
- * Index of another axis that this axis is linked to. When an axis is
17227
- * linked to a master axis, it will take the same extremes as
17228
- * the master, but as assigned by min or max or by setExtremes.
17229
- * It can be used to show additional info, or to ease reading the
17230
- * chart by duplicating the scales.
17257
+ * Index or [id](#xAxis.id) of another axis that this axis is linked to.
17258
+ * When an axis is linked to a master axis, it will take the same
17259
+ * extremes as the master, but as assigned by min or max or by
17260
+ * `setExtremes`. It can be used to show additional info, or to ease
17261
+ * reading the chart by duplicating the scales.
17231
17262
  *
17232
17263
  * @sample {highcharts} highcharts/xaxis/linkedto/
17233
17264
  * Different string formats of the same date
17234
17265
  * @sample {highcharts} highcharts/yaxis/linkedto/
17235
17266
  * Y values on both sides
17236
17267
  *
17237
- * @type {number}
17268
+ * @type {number|string}
17238
17269
  * @since 2.0.2
17239
17270
  * @product highcharts highstock gantt
17240
17271
  * @apioption xAxis.linkedTo
@@ -19354,7 +19385,7 @@ class Tick {
19354
19385
  */
19355
19386
  addLabel() {
19356
19387
  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;
19357
- let label = tick.label, dateTimeLabelFormat, dateTimeLabelFormats, i;
19388
+ let dateTimeLabelFormat, dateTimeLabelFormats, i;
19358
19389
  // The context value
19359
19390
  let value = this.parameters.category || (categories ?
19360
19391
  (categories[pos] ?? names[pos] ?? pos) :
@@ -19440,10 +19471,15 @@ class Tick {
19440
19471
  }
19441
19472
  return axis.defaultLabelFormatter.call(ctx);
19442
19473
  };
19443
- const text = labelFormatter.call(ctx, ctx);
19474
+ /**
19475
+ * The rendered text label of the tick.
19476
+ * @name Highcharts.Tick#label
19477
+ * @type {Highcharts.SVGElement|undefined}
19478
+ */
19479
+ tick.label = tick.createLabel(labelFormatter.call(ctx, ctx), labelOptions);
19444
19480
  // Set up conditional formatting based on the format list if existing.
19445
- const list = dateTimeLabelFormats?.list;
19446
- if (list) {
19481
+ const list = dateTimeLabelFormats?.list, label = tick.label;
19482
+ if (list && label) {
19447
19483
  tick.shortenLabel = function () {
19448
19484
  for (i = 0; i < list.length; i++) {
19449
19485
  extend(ctx, { dateTimeLabelFormat: list[i] });
@@ -19451,43 +19487,17 @@ class Tick {
19451
19487
  text: labelFormatter.call(ctx, ctx)
19452
19488
  });
19453
19489
  if (label.getBBox().width <
19454
- axis.getSlotWidth(tick) - 2 *
19455
- (labelOptions.padding || 0)) {
19490
+ axis.getSlotWidth(tick) - 2 * (labelOptions.padding || 0)) {
19456
19491
  return;
19457
19492
  }
19458
19493
  }
19459
- label.attr({
19460
- text: ''
19461
- });
19494
+ label.attr({ text: '' });
19462
19495
  };
19463
19496
  }
19464
19497
  else {
19465
19498
  // #15692
19466
19499
  tick.shortenLabel = void 0;
19467
19500
  }
19468
- // First call
19469
- if (!label) {
19470
- /**
19471
- * The rendered text label of the tick.
19472
- * @name Highcharts.Tick#label
19473
- * @type {Highcharts.SVGElement|undefined}
19474
- */
19475
- tick.label = label = tick.createLabel(text, labelOptions);
19476
- // Base value to detect change for new calls to getBBox
19477
- tick.rotation = 0;
19478
- // Update
19479
- }
19480
- else if (label.textStr !== text) {
19481
- // When resetting text, also reset the width if dynamically set
19482
- // (#8809)
19483
- if (label.textWidth &&
19484
- !labelOptions.style.width &&
19485
- !label.styles.width) {
19486
- label.css({ width: void 0 });
19487
- }
19488
- label.attr({ text });
19489
- label.textPxLength = label.getBBox().width;
19490
- }
19491
19501
  }
19492
19502
  /**
19493
19503
  * Render and return the label of the tick.
@@ -19495,18 +19505,33 @@ class Tick {
19495
19505
  * @internal
19496
19506
  * @function Highcharts.Tick#createLabel
19497
19507
  */
19498
- createLabel(str, labelOptions, xy) {
19499
- const axis = this.axis, { renderer, styledMode } = axis.chart, whiteSpace = labelOptions.style.whiteSpace, label = defined(str) && labelOptions.enabled ?
19500
- renderer
19501
- .text(str, xy?.x, xy?.y, labelOptions.useHTML)
19502
- .add(axis.labelGroup) :
19503
- void 0;
19508
+ createLabel(text, labelOptions, xy) {
19509
+ const axis = this.axis, { renderer, styledMode } = axis.chart, style = labelOptions.style, whiteSpace = style.whiteSpace;
19510
+ let label = this.label;
19511
+ if (defined(text) && labelOptions.enabled) {
19512
+ label || (label = renderer
19513
+ .text(text, xy?.x, xy?.y, labelOptions.useHTML)
19514
+ .add(axis.labelGroup));
19515
+ }
19516
+ else if (label) {
19517
+ label = label.destroy();
19518
+ // Reset so it doesn't animate when re-enabled
19519
+ this.isNewLabel = true;
19520
+ }
19504
19521
  // Un-rotated length
19505
- if (label) {
19522
+ if (label && (label.labelStyle !== style || text !== label.textStr)) {
19523
+ // Store a reference to the current style object to avoid running
19524
+ // this block on every render call unless something actually
19525
+ // changes.
19526
+ label.labelStyle = style;
19527
+ if (text !== label.textStr) {
19528
+ label.attr({ text });
19529
+ delete label.textPxLength;
19530
+ }
19506
19531
  if (!styledMode) {
19507
- label.css(merge(labelOptions.style));
19532
+ label.css(merge(style));
19508
19533
  }
19509
- label.textPxLength = label.getBBox().width;
19534
+ label.textPxLength ?? (label.textPxLength = label.getBBox().width);
19510
19535
  // Apply the white-space setting after we read the full text width
19511
19536
  if (!styledMode && whiteSpace) {
19512
19537
  label.css({ whiteSpace });
@@ -19578,19 +19603,27 @@ class Tick {
19578
19603
  * @internal
19579
19604
  */
19580
19605
  getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
19581
- const axis = this.axis, transA = axis.transA, reversed = ( // #7911
19582
- axis.isLinked && axis.linkedParent ?
19606
+ const axis = this.axis, { labelAlign, side, staggerLines, transA } = axis, reversed = ( // #7911
19607
+ axis.linkedParent ?
19583
19608
  axis.linkedParent.reversed :
19584
- axis.reversed), staggerLines = axis.staggerLines, rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19609
+ axis.reversed), rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
19585
19610
  // Adjust for label alignment if we use reserveSpace: true (#5286)
19586
19611
  labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?
19587
- -axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :
19588
- 0), distance = labelOptions.distance, pos = {};
19612
+ -(axis.labelOffset || 0) * (axis.labelAlign === 'center' ? 0.5 : 1) :
19613
+ 0), distance = labelOptions.distance ?? (
19614
+ // If the label is aligned inside the plot area, default to 0.
19615
+ // This is default behavior or Stock y-axis labels.
19616
+ (side === 1 &&
19617
+ labelAlign === 'right' &&
19618
+ !labelOptions.reserveSpace) ? 0 :
19619
+ (side === 3 &&
19620
+ labelAlign === 'left' &&
19621
+ !labelOptions.reserveSpace) ? 0 : 15), pos = {};
19589
19622
  let yOffset, line;
19590
- if (axis.side === 0) {
19623
+ if (side === 0) {
19591
19624
  yOffset = label.rotation ? -distance : -label.getBBox().height;
19592
19625
  }
19593
- else if (axis.side === 2) {
19626
+ else if (side === 2) {
19594
19627
  yOffset = rotCorr.y + distance;
19595
19628
  }
19596
19629
  else {
@@ -19599,12 +19632,12 @@ class Tick {
19599
19632
  (rotCorr.y - label.getBBox(false, 0).height / 2);
19600
19633
  }
19601
19634
  if (defined(labelOptions.y)) {
19602
- yOffset = axis.side === 0 && axis.horiz ?
19635
+ yOffset = side === 0 && axis.horiz ?
19603
19636
  labelOptions.y + yOffset :
19604
19637
  labelOptions.y;
19605
19638
  }
19606
19639
  x = x +
19607
- (labelOptions.x ?? [0, 1, 0, -1][axis.side] * distance) +
19640
+ (labelOptions.x ?? [0, 1, 0, -1][side] * distance) +
19608
19641
  labelOffsetCorrection +
19609
19642
  rotCorr.x -
19610
19643
  (tickmarkOffset && horiz ?
@@ -19659,7 +19692,7 @@ class Tick {
19659
19692
  * @function Highcharts.Tick#handleOverflow
19660
19693
  */
19661
19694
  handleOverflow(xy) {
19662
- 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 = {};
19695
+ 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;
19663
19696
  let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
19664
19697
  // Check if the label overshoots the chart spacing box. If it does, move
19665
19698
  // it. If it now overshoots the slotWidth, add ellipsis.
@@ -19707,10 +19740,10 @@ class Tick {
19707
19740
  tick.shortenLabel();
19708
19741
  }
19709
19742
  else {
19710
- label.css(extend(css, {
19743
+ label.css({
19711
19744
  width: Math.floor(textWidth) + 'px',
19712
19745
  lineClamp: axis.isRadial ? 0 : 1
19713
- }));
19746
+ });
19714
19747
  }
19715
19748
  }
19716
19749
  }
@@ -19726,8 +19759,11 @@ class Tick {
19726
19759
  * @param {number} [opacity]
19727
19760
  */
19728
19761
  render(index, old, opacity) {
19729
- 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;
19730
- const labelOpacity = (opacity ?? tick.label?.newOpacity ?? 1);
19762
+ 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;
19763
+ if (!axis.visible) {
19764
+ opacity = 0;
19765
+ }
19766
+ const labelOpacity = opacity ?? 1;
19731
19767
  // Anything that is not between `axis.pos` and `axis.pos + axis.length`
19732
19768
  // should not be visible (#20166). The `correctFloat` is for reversed
19733
19769
  // axes in Safari.
@@ -19755,25 +19791,21 @@ class Tick {
19755
19791
  * @param {number} opacity The opacity of the grid line
19756
19792
  */
19757
19793
  renderGridLine(old, opacity) {
19758
- 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;
19759
- let gridLine = tick.gridLine, gridLinePath, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19794
+ 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;
19795
+ let gridLine = tick.gridLine, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19760
19796
  if (tick.type === 'minor') {
19761
19797
  gridLineWidth = options.minorGridLineWidth;
19762
19798
  gridLineColor = options.minorGridLineColor;
19763
19799
  dashStyle = options.minorGridLineDashStyle;
19764
19800
  }
19801
+ // Apply the stroke width initially so the crisping works
19802
+ if (!styledMode) {
19803
+ attribs['stroke-width'] = gridLineWidth || 0;
19804
+ }
19765
19805
  if (!gridLine) {
19766
- if (!axis.chart.styledMode) {
19767
- attribs.stroke = gridLineColor;
19768
- attribs['stroke-width'] = gridLineWidth || 0;
19769
- attribs.dashstyle = dashStyle;
19770
- }
19771
19806
  if (!type) {
19772
19807
  attribs.zIndex = 1;
19773
19808
  }
19774
- if (old) {
19775
- opacity = 0;
19776
- }
19777
19809
  /**
19778
19810
  * The rendered grid line of the tick.
19779
19811
  * @name Highcharts.Tick#gridLine
@@ -19784,22 +19816,24 @@ class Tick {
19784
19816
  .addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')
19785
19817
  .add(axis.gridGroup);
19786
19818
  }
19787
- if (gridLine) {
19788
- gridLinePath = axis.getPlotLinePath({
19789
- value: pos + tickmarkOffset,
19790
- lineWidth: gridLine.strokeWidth(),
19791
- force: 'pass',
19792
- old: old,
19793
- acrossPanes: false // #18025
19794
- });
19819
+ // Grid line path
19820
+ const d = axis.getPlotLinePath({
19821
+ value: pos + tickmarkOffset,
19822
+ lineWidth: gridLine.strokeWidth(),
19823
+ force: 'pass',
19824
+ old: old,
19825
+ acrossPanes: false // #18025
19826
+ });
19827
+ if (d) {
19828
+ attribs.d = d;
19829
+ attribs.opacity = old ? 0 : opacity;
19830
+ if (!styledMode) {
19831
+ attribs.stroke = gridLineColor;
19832
+ attribs.dashstyle = dashStyle;
19833
+ }
19795
19834
  // If the parameter 'old' is set, the current call will be followed
19796
19835
  // by another call, therefore do not do any animations this time
19797
- if (gridLinePath) {
19798
- gridLine[old || tick.isNew ? 'attr' : 'animate']({
19799
- d: gridLinePath,
19800
- opacity: opacity
19801
- });
19802
- }
19836
+ gridLine[old || tick.isNew ? 'attr' : 'animate'](attribs);
19803
19837
  }
19804
19838
  }
19805
19839
  /**
@@ -19811,13 +19845,13 @@ class Tick {
19811
19845
  * @param {number} opacity The opacity of the mark
19812
19846
  */
19813
19847
  renderMark(xy, opacity) {
19814
- 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
19848
+ 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
19815
19849
  tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
19816
19850
  let mark = tick.mark;
19817
- const isNewMark = !mark;
19818
- if (tickSize) {
19851
+ const verb = mark ? 'animate' : 'attr';
19852
+ if (tickSize || mark) {
19819
19853
  // Negate the length
19820
- if (axis.opposite) {
19854
+ if (axis.opposite && tickSize) {
19821
19855
  tickSize[0] = -tickSize[0];
19822
19856
  }
19823
19857
  // First time, create it
@@ -19830,16 +19864,16 @@ class Tick {
19830
19864
  tick.mark = mark = renderer.path()
19831
19865
  .addClass('highcharts-' + (type ? type + '-' : '') + 'tick')
19832
19866
  .add(axis.axisGroup);
19833
- if (!axis.chart.styledMode) {
19834
- mark.attr({
19835
- stroke: tickColor,
19836
- 'stroke-width': tickWidth
19837
- });
19838
- }
19839
19867
  }
19840
- mark[isNewMark ? 'attr' : 'animate']({
19841
- d: tick.getMarkPath(x, y, tickSize[0], mark.strokeWidth(), axis.horiz, renderer),
19842
- opacity: opacity
19868
+ if (!chart.styledMode) {
19869
+ mark[verb]({
19870
+ stroke: tickColor,
19871
+ 'stroke-width': tickWidth
19872
+ });
19873
+ }
19874
+ mark[verb]({
19875
+ d: tick.getMarkPath(x, y, tickSize?.[0] || 0, mark.strokeWidth(), axis.horiz, renderer),
19876
+ opacity: tickSize ? opacity : 0
19843
19877
  });
19844
19878
  }
19845
19879
  }
@@ -20001,6 +20035,11 @@ extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
20001
20035
  * Axis options
20002
20036
  */
20003
20037
  class Axis {
20038
+ /* *
20039
+ *
20040
+ * Static Properties
20041
+ *
20042
+ * */
20004
20043
  /* *
20005
20044
  *
20006
20045
  * Constructors
@@ -20077,9 +20116,11 @@ class Axis {
20077
20116
  * @name Highcharts.Axis#side
20078
20117
  * @type {number}
20079
20118
  */
20080
- axis.side = (userOptions.side ?? axis.side ?? (horiz ?
20081
- (axis.opposite ? 0 : 2) : // Top : bottom
20082
- (axis.opposite ? 1 : 3)));
20119
+ axis.side = userOptions.side ??
20120
+ (horiz ?
20121
+ (axis.opposite ? 0 : 2) : // Top : bottom
20122
+ (axis.opposite ? 1 : 3) // Right : left
20123
+ );
20083
20124
  /**
20084
20125
  * Current options for the axis after merge of defaults and user's
20085
20126
  * options.
@@ -20090,8 +20131,8 @@ class Axis {
20090
20131
  axis.setOptions(userOptions);
20091
20132
  const options = axis.options, labelsOptions = options.labels;
20092
20133
  // Set the type and fire an event
20093
- axis.type ?? (axis.type = options.type || 'linear');
20094
- axis.uniqueNames ?? (axis.uniqueNames = options.uniqueNames ?? true);
20134
+ axis.type = options.type || 'linear';
20135
+ axis.uniqueNames = options.uniqueNames ?? true;
20095
20136
  fireEvent(axis, 'afterSetType');
20096
20137
  /**
20097
20138
  * User's options for this axis without defaults.
@@ -20108,7 +20149,7 @@ class Axis {
20108
20149
  * @name Highcharts.Axis#reversed
20109
20150
  * @type {boolean}
20110
20151
  */
20111
- axis.reversed = (options.reversed ?? axis.reversed);
20152
+ axis.reversed = options.reversed;
20112
20153
  axis.visible = options.visible;
20113
20154
  axis.zoomEnabled = options.zoomEnabled;
20114
20155
  // Initial categories
@@ -20130,16 +20171,12 @@ class Axis {
20130
20171
  */
20131
20172
  axis.categories = (isArray(options.categories) && options.categories) ||
20132
20173
  (axis.hasNames ? [] : void 0);
20133
- // Axis names and its map for quick access. Backwards mapping is much
20134
- // faster than array searching (#7725). Preserve on update (#3830)
20135
- axis.names || (axis.names = []);
20174
+ axis.names || (axis.names = []); // Preserve on update (#3830)
20136
20175
  axis.namesMap || (axis.namesMap = {});
20137
20176
  // Placeholder for plotLines and plotBands groups
20138
- axis.plotLinesAndBandsGroups = {};
20177
+ axis.plotLinesAndBandsGroups || (axis.plotLinesAndBandsGroups = {});
20139
20178
  // Shorthand types
20140
20179
  axis.positiveValuesOnly = !!axis.logarithmic;
20141
- // Flag, if axis is linked to another axis
20142
- axis.isLinked = defined(options.linkedTo);
20143
20180
  /**
20144
20181
  * List of major ticks mapped by position on axis.
20145
20182
  *
@@ -20148,8 +20185,8 @@ class Axis {
20148
20185
  * @name Highcharts.Axis#ticks
20149
20186
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20150
20187
  */
20151
- axis.ticks = {};
20152
- axis.labelEdge = [];
20188
+ axis.ticks || (axis.ticks = {});
20189
+ axis.labelEdge || (axis.labelEdge = []);
20153
20190
  /**
20154
20191
  * List of minor ticks mapped by position on the axis.
20155
20192
  *
@@ -20158,11 +20195,9 @@ class Axis {
20158
20195
  * @name Highcharts.Axis#minorTicks
20159
20196
  * @type {Highcharts.Dictionary<Highcharts.Tick>}
20160
20197
  */
20161
- axis.minorTicks = {};
20162
- // List of plotLines/Bands
20163
- axis.plotLinesAndBands = [];
20198
+ axis.minorTicks || (axis.minorTicks = {});
20164
20199
  // Alternate bands
20165
- axis.alternateBands = {};
20200
+ axis.alternateBands || (axis.alternateBands = {});
20166
20201
  /**
20167
20202
  * The length of the axis in terms of pixels.
20168
20203
  *
@@ -20196,7 +20231,7 @@ class Axis {
20196
20231
  * @name Highcharts.Axis#crosshair
20197
20232
  * @type {boolean|Highcharts.AxisCrosshairOptions}
20198
20233
  */
20199
- const crosshair = options.crosshair ?? splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1];
20234
+ const crosshair = options.crosshair ?? splat(chart.options.tooltip?.crosshairs)[isXAxis ? 0 : 1];
20200
20235
  axis.crosshair = crosshair === true ? {} : crosshair;
20201
20236
  // Register. Don't add it again on Axis.update().
20202
20237
  if (chart.axes.indexOf(axis) === -1) { //
@@ -20251,14 +20286,14 @@ class Axis {
20251
20286
  },
20252
20287
  margin: 15
20253
20288
  } :
20254
- // Left and right axis, title rotated 90 or 270 degrees
20289
+ // Left and right axis, title rotated -90 or 90 degrees
20255
20290
  // respectively
20256
20291
  {
20257
20292
  labels: {
20258
20293
  padding: 1
20259
20294
  },
20260
20295
  title: {
20261
- rotation: 90 * this.side
20296
+ rotation: this.side === 1 ? 90 : -90
20262
20297
  }
20263
20298
  };
20264
20299
  this.options = merge(sideSpecific,
@@ -20472,6 +20507,9 @@ class Axis {
20472
20507
  if (!axis.isRadial) {
20473
20508
  returnValue = correctFloat(returnValue);
20474
20509
  }
20510
+ if (Math.abs(returnValue) < 1e-9) {
20511
+ returnValue = 0;
20512
+ }
20475
20513
  }
20476
20514
  return returnValue;
20477
20515
  }
@@ -20527,7 +20565,7 @@ class Axis {
20527
20565
  * The SVG path definition for the plot line.
20528
20566
  */
20529
20567
  getPlotLinePath(options) {
20530
- 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;
20568
+ 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;
20531
20569
  let translatedValue = options.translatedValue, force = options.force, x1, y1, x2, y2, skip;
20532
20570
  // eslint-disable-next-line valid-jsdoc
20533
20571
  /**
@@ -20565,17 +20603,17 @@ class Axis {
20565
20603
  skip = true;
20566
20604
  force = false; // #7175, don't force it when path is invalid
20567
20605
  }
20568
- else if (axis.horiz) {
20569
- y1 = axisTop;
20606
+ else if (horiz) {
20607
+ y1 = top;
20570
20608
  y2 = cHeight - axis.bottom + (axis.options.isInternal ?
20571
20609
  0 :
20572
20610
  (chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator
20573
- x1 = x2 = between(x1, axisLeft, axisLeft + axis.width);
20611
+ x1 = x2 = between(x1, left, left + axis.width);
20574
20612
  }
20575
20613
  else {
20576
- x1 = axisLeft;
20614
+ x1 = left;
20577
20615
  x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);
20578
- y1 = y2 = between(y1, axisTop, axisTop + axis.height);
20616
+ y1 = y2 = between(y1, top, top + axis.height);
20579
20617
  }
20580
20618
  e.path = skip && !force ?
20581
20619
  void 0 :
@@ -21004,7 +21042,7 @@ class Axis {
21004
21042
  * @emits Highcharts.Axis#event:foundExtremes
21005
21043
  */
21006
21044
  setTickInterval(secondPass) {
21007
- 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;
21045
+ 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;
21008
21046
  let maxPadding = options.maxPadding, minPadding = options.minPadding, range = 0, linkedParentExtremes,
21009
21047
  // Only non-negative tickInterval is valid, #12961
21010
21048
  tickIntervalOption = isNumber(options.tickInterval) && options.tickInterval >= 0 ?
@@ -21017,7 +21055,6 @@ class Axis {
21017
21055
  hardMax = (axis.userMax ?? time.parse(options.max));
21018
21056
  // Linked axis gets the extremes from the parent axis
21019
21057
  if (linkedParent) {
21020
- axis.linkedParent = linkedParent;
21021
21058
  linkedParentExtremes = linkedParent.getExtremes();
21022
21059
  axis.min =
21023
21060
  linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
@@ -21327,7 +21364,7 @@ class Axis {
21327
21364
  // Reset min/max or remove extremes based on start/end on tick
21328
21365
  this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor
21329
21366
  this.trimTicks(tickPositions, startOnTick, endOnTick);
21330
- if (!this.isLinked && isNumber(this.min) && isNumber(this.max)) {
21367
+ if (!this.linkedParent && isNumber(this.min) && isNumber(this.max)) {
21331
21368
  // Subtract half a unit (#2619, #2846, #2515, #3390), but not in
21332
21369
  // case of multiple ticks (#6897)
21333
21370
  if (this.single &&
@@ -21362,7 +21399,7 @@ class Axis {
21362
21399
  trimTicks(tickPositions, startOnTick, endOnTick) {
21363
21400
  const roundedMin = tickPositions[0], roundedMax = tickPositions[tickPositions.length - 1], minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)
21364
21401
  fireEvent(this, 'trimTicks');
21365
- if (!this.isLinked ||
21402
+ if (!this.linkedParent ||
21366
21403
  // Linked non-grid axes should trim ticks, #21743.
21367
21404
  // Grid axis has custom handling of ticks.
21368
21405
  !this.grid) {
@@ -21636,7 +21673,15 @@ class Axis {
21636
21673
  * @emits Highcharts.Axis#event:afterSetScale
21637
21674
  */
21638
21675
  setScale() {
21639
- const axis = this, { coll, stacking } = axis;
21676
+ const axis = this, { chart, coll, options, stacking } = axis, { linkedTo } = options, axes = chart[coll] || [], index = axes.indexOf(axis), parent = isString(linkedTo) ?
21677
+ find(axes, (a) => a.options.id === linkedTo) :
21678
+ (isNumber(linkedTo) ? axes[linkedTo] : void 0), linkedParent = axis.linkedParent =
21679
+ parent === axis ? void 0 : parent;
21680
+ // Scale a later-ordered parent first so its extremes are ready. Skip
21681
+ // grid column axes, which live outside the collection (#24658).
21682
+ if (linkedParent && index > -1 && axes.indexOf(linkedParent) > index) {
21683
+ linkedParent.setScale();
21684
+ }
21640
21685
  let isDirtyData = false, isXAxisDirty = false;
21641
21686
  axis.series.forEach((series) => {
21642
21687
  isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;
@@ -21653,7 +21698,7 @@ class Axis {
21653
21698
  if (isDirtyAxisLength ||
21654
21699
  isDirtyData ||
21655
21700
  isXAxisDirty ||
21656
- axis.isLinked ||
21701
+ axis.linkedParent ||
21657
21702
  axis.forceRedraw ||
21658
21703
  axis.userMin !== axis.old?.userMin ||
21659
21704
  axis.userMax !== axis.old?.userMax ||
@@ -22015,7 +22060,7 @@ class Axis {
22015
22060
  renderUnsquish() {
22016
22061
  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 ?
22017
22062
  2 * (labelOptions.padding || 0) :
22018
- labelOptions.distance || 0 // #21172
22063
+ labelOptions.distance ?? 15 // #21172
22019
22064
  ))), attr = {}, labelMetrics = this.labelMetrics(), lineClampOption = labelStyleOptions.lineClamp;
22020
22065
  let commonWidth, lineClamp = lineClampOption ?? (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1), maxLabelLength = 0;
22021
22066
  // Set rotation option unless it is "auto", like in gauges
@@ -22095,7 +22140,6 @@ class Axis {
22095
22140
  });
22096
22141
  }
22097
22142
  }
22098
- tick.rotation = attr.rotation;
22099
22143
  }
22100
22144
  }, this);
22101
22145
  // Note: Why is this not part of getLabelPosition?
@@ -22127,46 +22171,50 @@ class Axis {
22127
22171
  * Whether or not to display the title.
22128
22172
  */
22129
22173
  addTitle(display) {
22130
- const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode;
22131
- let textAlign;
22132
- if (!axis.axisTitle) {
22133
- textAlign = axisTitleOptions.textAlign;
22134
- if (!textAlign) {
22135
- textAlign = (horiz ? {
22136
- low: 'left',
22137
- middle: 'center',
22138
- high: 'right'
22139
- } : {
22140
- low: opposite ? 'right' : 'left',
22141
- middle: 'center',
22142
- high: opposite ? 'left' : 'right'
22143
- })[axisTitleOptions.align];
22144
- }
22145
- axis.axisTitle = renderer
22146
- .text(axisTitleOptions.text || '', 0, 0, axisTitleOptions.useHTML)
22147
- .attr({
22148
- zIndex: 7,
22149
- rotation: axisTitleOptions.rotation || 0,
22150
- align: textAlign
22151
- })
22174
+ 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 ||
22175
+ (horiz ? {
22176
+ low: 'left',
22177
+ middle: 'center',
22178
+ high: 'right'
22179
+ } : {
22180
+ low: opposite ? 'right' : 'left',
22181
+ middle: 'center',
22182
+ high: opposite ? 'left' : 'right'
22183
+ })[axisTitleOptions.align], attr = {
22184
+ text: axisTitleOptions.text || '',
22185
+ zIndex: 7,
22186
+ align: textAlign
22187
+ }, animatable = {
22188
+ rotation: axisTitleOptions.rotation || 0
22189
+ };
22190
+ let axisTitle = axis.axisTitle;
22191
+ if (!axisTitle) {
22192
+ axisTitle = renderer
22193
+ .text('', 0, 0, axisTitleOptions.useHTML)
22194
+ .attr(extend(attr, animatable))
22152
22195
  .addClass('highcharts-axis-title');
22153
- // #7814, don't mutate style option
22154
- if (!styledMode) {
22155
- axis.axisTitle.css(merge(axisTitleOptions.style));
22156
- }
22157
- axis.axisTitle.add(axis.axisGroup);
22158
- axis.axisTitle.isNew = true;
22196
+ axisTitle.add(axis.axisGroup);
22197
+ axisTitle.isNew = true;
22159
22198
  }
22160
- // Max width defaults to the length of the axis
22161
- if (!styledMode &&
22162
- !axisTitleOptions.style.width &&
22163
- !axis.isRadial) {
22164
- axis.axisTitle.css({
22165
- width: axis.len + 'px'
22166
- });
22199
+ else {
22200
+ axisTitle
22201
+ .attr(attr)
22202
+ .animate(animatable);
22203
+ }
22204
+ if (!styledMode) {
22205
+ // #7814, don't mutate the style option
22206
+ const css = merge(axisTitleOptions.style);
22207
+ // Max width defaults to the length of the axis
22208
+ if (!axisTitleOptions.style.width &&
22209
+ !axis.isRadial) {
22210
+ css.width = axis.len + 'px';
22211
+ }
22212
+ axisTitle.css(css);
22167
22213
  }
22168
22214
  // Hide or show the title depending on whether showEmpty is set
22169
- axis.axisTitle[display ? 'show' : 'hide'](display);
22215
+ axisTitle[display ? 'show' : 'hide'](display);
22216
+ // Register
22217
+ axis.axisTitle = axisTitle;
22170
22218
  }
22171
22219
  /**
22172
22220
  * Generates a tick for initial positioning.
@@ -22194,17 +22242,18 @@ class Axis {
22194
22242
  createGroups() {
22195
22243
  const { axisParent, // Used in color axis
22196
22244
  chart, coll, options } = this, renderer = chart.renderer;
22197
- const createGroup = (name, suffix, zIndex) => renderer.g(name)
22198
- .attr({ zIndex })
22245
+ const createGroup = (name, suffix) => renderer.g(name)
22199
22246
  .addClass(`highcharts-${coll.toLowerCase()}${suffix} ` +
22200
22247
  (this.isRadial ? `highcharts-radial-axis${suffix} ` : '') +
22201
22248
  (options.className || ''))
22202
22249
  .add(axisParent);
22203
- if (!this.axisGroup) {
22204
- this.gridGroup = createGroup('grid', '-grid', options.gridZIndex).clip(this.clippable ? chart.plotClipInner : void 0);
22205
- this.axisGroup = createGroup('axis', '', options.zIndex);
22206
- this.labelGroup = createGroup('axis-labels', '-labels', options.labels.zIndex);
22207
- }
22250
+ (this.axisGroup || (this.axisGroup = createGroup('axis', '')))
22251
+ .attr({ zIndex: options.zIndex });
22252
+ (this.gridGroup || (this.gridGroup = createGroup('grid', '-grid')))
22253
+ .clip(this.clippable ? chart.plotClipInner : void 0)
22254
+ .attr({ zIndex: options.gridZIndex });
22255
+ (this.labelGroup || (this.labelGroup = createGroup('axis-labels', '-labels')))
22256
+ .attr({ zIndex: options.labels.zIndex });
22208
22257
  }
22209
22258
  /**
22210
22259
  * Shuffle existing category ticks, like in bar race chart
@@ -22212,8 +22261,11 @@ class Axis {
22212
22261
  * @internal
22213
22262
  */
22214
22263
  shuffleTicks() {
22215
- const ticks = this.ticks, oldNames = this.old?.names;
22216
- if (this.type === 'category' && oldNames) {
22264
+ const ticks = this.ticks, oldNames = this.old?.names, hasDuplicates = (arr) => new Set(arr).size !== arr.length;
22265
+ if (this.type === 'category' &&
22266
+ oldNames &&
22267
+ !hasDuplicates(oldNames) &&
22268
+ !hasDuplicates(this.names)) {
22217
22269
  oldNames.forEach((name, oldPos) => {
22218
22270
  const pos = this.namesMap[name];
22219
22271
  if (defined(pos) && oldPos !== pos) {
@@ -22255,7 +22307,7 @@ class Axis {
22255
22307
  * @emits Highcharts.Axis#event:afterGetOffset
22256
22308
  */
22257
22309
  getOffset() {
22258
- 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];
22310
+ 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;
22259
22311
  let tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }, absTickRotCorrX = 0, showAxis, titleOffset = 0, titleOffsetOption, titleMargin = 0, labelOffset = 0, // Reset
22260
22312
  labelOffsetPadded, lineHeightCorrection, reserveSpaceDefault;
22261
22313
  // For reuse in Axis.render
@@ -22263,7 +22315,7 @@ class Axis {
22263
22315
  // Set/reset staggerLines
22264
22316
  axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;
22265
22317
  axis.createGroups();
22266
- if (hasData || axis.isLinked) {
22318
+ if (hasData || axis.linkedParent) {
22267
22319
  // Shuffle existing category ticks
22268
22320
  axis.shuffleTicks();
22269
22321
  // Generate new ticks
@@ -22315,6 +22367,9 @@ class Axis {
22315
22367
  axisTitleOptions.margin ?? (horiz ? 5 : 10);
22316
22368
  }
22317
22369
  }
22370
+ else {
22371
+ axis.axisTitle = axis.axisTitle?.destroy();
22372
+ }
22318
22373
  // Render the axis line
22319
22374
  axis.renderLine();
22320
22375
  // Handle automatic or user set offset
@@ -22338,12 +22393,10 @@ class Axis {
22338
22393
  labelOffsetPadded -= lineHeightCorrection;
22339
22394
  labelOffsetPadded += directionFactor * (horiz ?
22340
22395
  (labelOptions.y ??
22341
- (tickRotCorr.y +
22342
- directionFactor * labelOptions.distance)) :
22396
+ (tickRotCorr.y + directionFactor * distance)) :
22343
22397
  (labelOptions.x ?? (reserveSpaceDefault ?
22344
- directionFactor * (labelOptions.distance - absTickRotCorrX) :
22345
- tickRotCorr.x +
22346
- directionFactor * labelOptions.distance)));
22398
+ directionFactor * (distance - absTickRotCorrX) :
22399
+ tickRotCorr.x + directionFactor * distance)));
22347
22400
  if (!horiz &&
22348
22401
  !reserveSpaceDefault &&
22349
22402
  axis.labelAlign === 'center' &&
@@ -22357,8 +22410,8 @@ class Axis {
22357
22410
  // has rendered.
22358
22411
  if (coll !== 'colorAxis' && clipOffset) {
22359
22412
  const tickSize = this.tickSize('tick');
22360
- axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +
22361
- directionFactor * axis.offset, labelOffsetPadded, // #3027
22413
+ axisOffset[side] = Math.max(axisOffset[side], Math.max((axis.axisTitleMargin || 0) + titleOffset, labelOffsetPadded) + directionFactor * axis.offset, // #6967
22414
+ labelOffsetPadded, // #3027
22362
22415
  tickPositions?.length && tickSize ?
22363
22416
  tickSize[0] + directionFactor * axis.offset :
22364
22417
  0 // #4866
@@ -22420,18 +22473,20 @@ class Axis {
22420
22473
  * @function Highcharts.Axis#renderLine
22421
22474
  */
22422
22475
  renderLine() {
22423
- const { chart, offset = 0, options } = this;
22476
+ const { chart, offset = 0, options } = this, verb = this.axisLine ? 'animate' : 'attr';
22424
22477
  this.axisLine || (this.axisLine = chart.renderer.path()
22425
22478
  .addClass('highcharts-axis-line')
22426
- .attr(chart.styledMode ? {} : {
22427
- stroke: options.lineColor,
22428
- 'stroke-width': options.lineWidth,
22429
- zIndex: 7
22430
- })
22479
+ .attr({ zIndex: 7 })
22431
22480
  .clip(this.clippable && offset <= 0 ?
22432
22481
  chart.plotClipOuter :
22433
22482
  void 0)
22434
22483
  .add(this.axisGroup));
22484
+ if (!chart.styledMode) {
22485
+ this.axisLine[verb]({
22486
+ stroke: options.lineColor,
22487
+ 'stroke-width': options.lineWidth
22488
+ });
22489
+ }
22435
22490
  }
22436
22491
  /**
22437
22492
  * Position the axis title.
@@ -22516,9 +22571,9 @@ class Axis {
22516
22571
  * Whether the tick should animate in from last computed position
22517
22572
  */
22518
22573
  renderTick(pos, i, slideIn) {
22519
- const axis = this, isLinked = axis.isLinked, ticks = axis.ticks;
22574
+ const axis = this, ticks = axis.ticks;
22520
22575
  // Linked axes need an extra check to find out if
22521
- if (!isLinked ||
22576
+ if (!axis.linkedParent ||
22522
22577
  (pos >= axis.min && pos <= axis.max) ||
22523
22578
  axis.grid?.isColumn) {
22524
22579
  if (!ticks[pos]) {
@@ -22544,11 +22599,13 @@ class Axis {
22544
22599
  * @emits Highcharts.Axis#event:afterRender
22545
22600
  */
22546
22601
  render() {
22547
- 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);
22602
+ 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);
22548
22603
  let from, to;
22549
22604
  // Reset
22550
22605
  axis.labelEdge.length = 0;
22551
22606
  axis.overlap = false;
22607
+ // Update z-indices
22608
+ this.createGroups();
22552
22609
  // Mark all elements inActive before we go over and mark the active ones
22553
22610
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22554
22611
  objectEach(coll, function (tick) {
@@ -22567,7 +22624,7 @@ class Axis {
22567
22624
  }
22568
22625
  }
22569
22626
  // If the series has data draw the ticks. Else only the line and title
22570
- if (axis.hasData() || isLinked) {
22627
+ if (axis.hasData() || axis.linkedParent) {
22571
22628
  const slideInTicks = axis.chart.hasRendered &&
22572
22629
  axis.old && isNumber(axis.old.min);
22573
22630
  // Minor ticks
@@ -22605,8 +22662,10 @@ class Axis {
22605
22662
  tickmarkOffset)) { // #2248, #4660
22606
22663
  if (!alternateBands[pos]) {
22607
22664
  // Should be imported from PlotLineOrBand.js, but
22608
- // the dependency cycle with axis is a problem
22609
- alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {});
22665
+ // the dependency cycle with axis is a problem. Try
22666
+ // moving it to the PlotLineOrBand axis composition
22667
+ // later.
22668
+ alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {}, 'plotBands');
22610
22669
  }
22611
22670
  from = pos + tickmarkOffset; // #949
22612
22671
  alternateBands[pos].options = {
@@ -22620,17 +22679,13 @@ class Axis {
22620
22679
  }
22621
22680
  });
22622
22681
  }
22623
- // Custom plot lines and bands
22624
- if (!axis._addedPlotLB) { // Only first time
22625
- axis._addedPlotLB = true;
22626
- (options.plotLines || [])
22627
- .concat(options.plotBands || [])
22628
- .forEach(function (plotLineOptions) {
22629
- axis
22630
- .addPlotBandOrLine(plotLineOptions);
22631
- });
22632
- }
22633
22682
  } // End if hasData
22683
+ // Render or update rendering of plot lines and bands
22684
+ for (const coll of ['plotBands', 'plotLines']) {
22685
+ for (const plotItem of this[coll]) {
22686
+ plotItem.render();
22687
+ }
22688
+ }
22634
22689
  // Remove inactive ticks
22635
22690
  [ticks, minorTicks, alternateBands].forEach(function (coll) {
22636
22691
  const forDestruction = [], delay = animation.duration, destroyInactiveItems = function () {
@@ -22664,20 +22719,22 @@ class Axis {
22664
22719
  // Set the axis line path
22665
22720
  if (axisLine) {
22666
22721
  axisLine[axisLine.isPlaced ? 'animate' : 'attr']({
22667
- d: this.getLinePath(axisLine.strokeWidth())
22722
+ d: this.getLinePath(axisLine.strokeWidth()),
22723
+ opacity
22668
22724
  });
22669
22725
  axisLine.isPlaced = true;
22670
22726
  // Show or hide the line depending on options.showEmpty
22671
22727
  axisLine[showAxis ? 'show' : 'hide'](showAxis);
22672
22728
  }
22673
22729
  if (axisTitle && showAxis) {
22674
- axisTitle[axisTitle.isNew ? 'attr' : 'animate'](axis.getTitlePosition(axisTitle));
22730
+ axisTitle[axisTitle.isNew ? 'attr' : 'animate']({
22731
+ opacity,
22732
+ ...axis.getTitlePosition(axisTitle)
22733
+ });
22675
22734
  axisTitle.isNew = false;
22676
22735
  }
22677
22736
  // Stacked totals
22678
- if (stackLabelOptions?.enabled && axis.stacking) {
22679
- axis.stacking.renderStackTotals();
22680
- }
22737
+ axis.stacking?.renderStackTotals();
22681
22738
  // First time, save the existing state
22682
22739
  if (!this.old) {
22683
22740
  this.saveOld();
@@ -22693,13 +22750,11 @@ class Axis {
22693
22750
  * @function Highcharts.Axis#redraw
22694
22751
  */
22695
22752
  redraw() {
22696
- if (this.visible) {
22753
+ // If it was initially visible, but dynamically hidden, `this.axisGroup`
22754
+ // exists. Then render with opacity 0.
22755
+ if (this.visible || this.axisGroup) {
22697
22756
  // Render the axis
22698
22757
  this.render();
22699
- // Move plot lines and bands
22700
- this.plotLinesAndBands.forEach(function (plotLine) {
22701
- plotLine.render();
22702
- });
22703
22758
  }
22704
22759
  // Mark associated series as dirty and ready for redraw
22705
22760
  this.series.forEach(function (series) {
@@ -22713,6 +22768,7 @@ class Axis {
22713
22768
  */
22714
22769
  saveOld() {
22715
22770
  this.old = isNumber(this.min) ? {
22771
+ horiz: this.horiz,
22716
22772
  len: this.len,
22717
22773
  max: this.max,
22718
22774
  min: this.min,
@@ -22722,64 +22778,37 @@ class Axis {
22722
22778
  userMin: this.userMin
22723
22779
  } : void 0;
22724
22780
  }
22725
- /**
22726
- * Returns an array of axis properties, that should be untouched during
22727
- * reinitialization.
22728
- *
22729
- * @internal
22730
- * @function Highcharts.Axis#getKeepProps
22731
- */
22732
- getKeepProps() {
22733
- return (this.keepProps || Axis.keepProps);
22734
- }
22735
22781
  /**
22736
22782
  * Destroys an Axis instance. See {@link Axis#remove} for the API endpoint
22737
22783
  * to fully remove the axis.
22738
22784
  *
22739
22785
  * @internal
22740
22786
  * @function Highcharts.Axis#destroy
22741
- *
22742
- * @param {boolean} [keepEvents]
22743
- * Whether to preserve events, used internally in Axis.update.
22744
22787
  */
22745
- destroy(keepEvents) {
22746
- const axis = this, plotLinesAndBands = axis.plotLinesAndBands, eventOptions = this.eventOptions;
22747
- fireEvent(this, 'destroy', { keepEvents: keepEvents });
22788
+ destroy() {
22789
+ fireEvent(this, 'destroy');
22748
22790
  // Remove the events
22749
- if (!keepEvents) {
22750
- removeEvent(axis);
22751
- }
22791
+ removeEvent(this);
22752
22792
  // Destroy collections
22753
- [axis.ticks, axis.minorTicks, axis.alternateBands].forEach(function (coll) {
22754
- destroyObjectProperties(coll);
22755
- });
22756
- if (plotLinesAndBands) {
22757
- let i = plotLinesAndBands.length;
22758
- while (i--) { // #1975
22759
- plotLinesAndBands[i].destroy();
22760
- }
22761
- }
22762
- // Destroy elements
22793
+ [
22794
+ this.ticks,
22795
+ this.minorTicks,
22796
+ this.alternateBands,
22797
+ this.plotBands,
22798
+ this.plotLines,
22799
+ this.plotLinesAndBandsGroups
22800
+ ].forEach(destroyObjectProperties);
22801
+ // Destroy elements and clear reference
22763
22802
  [
22764
22803
  'axisLine', 'axisTitle', 'axisGroup',
22765
22804
  'gridGroup', 'labelGroup', 'cross', 'scrollbar'
22766
- ].forEach(function (prop) {
22767
- if (axis[prop]) {
22768
- axis[prop] = axis[prop].destroy();
22769
- }
22805
+ ].forEach((prop) => {
22806
+ this[prop] = this[prop]?.destroy();
22770
22807
  });
22771
- // Destroy each generated group for plotLines and plotBands
22772
- for (const plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in
22773
- axis.plotLinesAndBandsGroups[plotGroup] =
22774
- axis.plotLinesAndBandsGroups[plotGroup].destroy();
22775
- }
22776
22808
  // Delete all properties and fall back to the prototype.
22777
- objectEach(axis, function (_val, key) {
22778
- if (axis.getKeepProps().indexOf(key) === -1) {
22779
- delete axis[key];
22780
- }
22809
+ objectEach(this, (_val, key) => {
22810
+ delete this[key];
22781
22811
  });
22782
- this.eventOptions = eventOptions;
22783
22812
  }
22784
22813
  /**
22785
22814
  * Internal function to draw a crosshair.
@@ -22873,25 +22902,21 @@ class Axis {
22873
22902
  void 0 :
22874
22903
  chart.plotClipInner)
22875
22904
  .add();
22876
- // Presentational attributes
22877
- if (!chart.styledMode) {
22878
- cross.attr({
22879
- stroke: options.color ||
22880
- (categorized ?
22881
- Axis_color(
22882
- // eslint-disable-next-line max-len
22883
- 'var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22884
- 'var(--highcharts-neutral-color-20)'),
22885
- 'stroke-width': (options.width ?? 1)
22886
- }).css({
22887
- 'pointer-events': 'none'
22888
- });
22889
- if (options.dashStyle) {
22890
- cross.attr({
22891
- dashstyle: options.dashStyle
22892
- });
22893
- }
22894
- }
22905
+ }
22906
+ // Presentational attributes
22907
+ if (!chart.styledMode) {
22908
+ cross
22909
+ .attr({
22910
+ stroke: options.color || (categorized ?
22911
+ Axis_color('var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22912
+ 'var(--highcharts-neutral-color-20)'),
22913
+ 'stroke-width': options.width ?? 1,
22914
+ // Dash style must be after stroke-width
22915
+ dashstyle: options.dashStyle || 'Solid'
22916
+ })
22917
+ .css({
22918
+ 'pointer-events': 'none'
22919
+ });
22895
22920
  }
22896
22921
  cross
22897
22922
  .show()
@@ -22901,9 +22926,7 @@ class Axis {
22901
22926
  'stroke-width': this.transA
22902
22927
  });
22903
22928
  }
22904
- if (this.cross) {
22905
- this.cross.e = e;
22906
- }
22929
+ cross.e = e;
22907
22930
  },
22908
22931
  // Only use delay if the crosshair is currently hidden
22909
22932
  (!graphic || graphic.attr('visibility') === 'hidden') ?
@@ -22942,13 +22965,14 @@ class Axis {
22942
22965
  * operations on the chart, it is a good idea to set redraw to false and
22943
22966
  * call {@link Chart#redraw} after.
22944
22967
  */
22945
- update(options, redraw) {
22968
+ update(options = {}, redraw = true) {
22946
22969
  const chart = this.chart;
22970
+ fireEvent(this, 'update', { options });
22947
22971
  options = merge(this.userOptions, options);
22948
- this.destroy(true);
22972
+ this.isDirty = this.forceRedraw = true;
22949
22973
  this.init(chart, options);
22950
22974
  chart.isDirtyBox = true;
22951
- if (redraw ?? true) {
22975
+ if (redraw) {
22952
22976
  chart.redraw();
22953
22977
  }
22954
22978
  }
@@ -23017,26 +23041,6 @@ class Axis {
23017
23041
  this.update({ categories: categories }, redraw);
23018
23042
  }
23019
23043
  }
23020
- /* *
23021
- *
23022
- * Static Properties
23023
- *
23024
- * */
23025
- /**
23026
- * Properties to survive after destroy, needed for Axis.update (#4317,
23027
- * #5773, #5881).
23028
- * @internal
23029
- */
23030
- Axis.keepProps = [
23031
- 'coll',
23032
- 'extKey',
23033
- 'hcEvents',
23034
- 'len',
23035
- 'names',
23036
- 'series',
23037
- 'userMax',
23038
- 'userMin'
23039
- ];
23040
23044
  /* *
23041
23045
  *
23042
23046
  * Default Export
@@ -23307,6 +23311,8 @@ Axis.keepProps = [
23307
23311
  * */
23308
23312
 
23309
23313
 
23314
+ const { composed: DateTimeAxis_composed } = Core_Globals;
23315
+
23310
23316
 
23311
23317
  /* *
23312
23318
  *
@@ -23330,8 +23336,7 @@ var DateTimeAxis;
23330
23336
  * @internal
23331
23337
  */
23332
23338
  function compose(AxisClass) {
23333
- if (!AxisClass.keepProps.includes('dateTime')) {
23334
- AxisClass.keepProps.push('dateTime');
23339
+ if (pushUnique(DateTimeAxis_composed, 'Axis.DateTime')) {
23335
23340
  const axisProto = AxisClass.prototype;
23336
23341
  axisProto.getTimeTicks = getTimeTicks;
23337
23342
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
@@ -23493,6 +23498,8 @@ var DateTimeAxis;
23493
23498
  * */
23494
23499
 
23495
23500
 
23501
+ const { composed: LogarithmicAxis_composed } = Core_Globals;
23502
+
23496
23503
  /* *
23497
23504
  *
23498
23505
  * Class
@@ -23516,8 +23523,7 @@ var LogarithmicAxis;
23516
23523
  * @internal
23517
23524
  */
23518
23525
  function compose(AxisClass) {
23519
- if (!AxisClass.keepProps.includes('logarithmic')) {
23520
- AxisClass.keepProps.push('logarithmic');
23526
+ if (pushUnique(LogarithmicAxis_composed, 'Axis.Logarithmic')) {
23521
23527
  addEvent(AxisClass, 'afterSetType', onAfterSetType);
23522
23528
  addEvent(AxisClass, 'afterInit', onAfterInit);
23523
23529
  }
@@ -23726,24 +23732,7 @@ var PlotLineOrBandAxis;
23726
23732
  * Functions
23727
23733
  *
23728
23734
  * */
23729
- /**
23730
- * Add a plot band after render time.
23731
- *
23732
- * @sample highcharts/members/axis-addplotband/
23733
- * Toggle the plot band from a button
23734
- *
23735
- * @function Highcharts.Axis#addPlotBand
23736
- *
23737
- * @param {Highcharts.AxisPlotBandsOptions} options
23738
- * A configuration object for the plot band, as defined in
23739
- * [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).
23740
- *
23741
- * @return {Highcharts.PlotLineOrBand|undefined}
23742
- * The added plot band, or `undefined` if the options are not valid.
23743
- */
23744
- function addPlotBand(options) {
23745
- return this.addPlotBandOrLine(options, 'plotBands');
23746
- }
23735
+ const getAdderFunction = (coll) =>
23747
23736
  /**
23748
23737
  * Add a plot band or plot line after render time. Called from
23749
23738
  * addPlotBand and addPlotLine internally.
@@ -23751,65 +23740,85 @@ var PlotLineOrBandAxis;
23751
23740
  * @internal
23752
23741
  * @function Highcharts.Axis#addPlotBandOrLine
23753
23742
  * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options
23754
- * The plotBand or plotLine configuration object.
23743
+ * The `plotBand` or `plotLine` configuration object.
23755
23744
  */
23756
- function addPlotBandOrLine(options, coll) {
23757
- const userOptions = this.userOptions;
23758
- let obj = new PlotLineOrBandClass(this, options);
23745
+ function addPlotLineOrBand(options) {
23746
+ var _a;
23747
+ const plotItem = new PlotLineOrBandClass(this, options, coll);
23759
23748
  if (this.visible) {
23760
- obj = obj.render();
23761
- }
23762
- if (obj) { // #2189
23763
- if (!this._addedPlotLB) {
23764
- this._addedPlotLB = true;
23765
- (userOptions.plotLines || [])
23766
- .concat(userOptions.plotBands || [])
23767
- .forEach((plotLineOptions) => {
23768
- this.addPlotBandOrLine(plotLineOptions);
23769
- });
23770
- }
23771
- // Add it to the user options for exporting and Axis.update
23772
- if (coll) {
23773
- // Workaround Microsoft/TypeScript issue #32693
23774
- const updatedOptions = (userOptions[coll] || []);
23775
- updatedOptions.push(options);
23776
- userOptions[coll] = updatedOptions;
23777
- }
23778
- this.plotLinesAndBands.push(obj);
23749
+ plotItem.render();
23779
23750
  }
23780
- return obj;
23781
- }
23782
- /**
23783
- * Add a plot line after render time.
23784
- *
23785
- * @sample highcharts/members/axis-addplotline/
23786
- * Toggle the plot line from a button
23787
- *
23788
- * @function Highcharts.Axis#addPlotLine
23789
- *
23790
- * @param {Highcharts.AxisPlotLinesOptions} options
23791
- * A configuration object for the plot line, as defined in
23792
- * [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).
23793
- *
23794
- * @return {Highcharts.PlotLineOrBand|undefined}
23795
- * The added plot line, or `undefined` if the options are not valid.
23796
- */
23797
- function addPlotLine(options) {
23798
- return this.addPlotBandOrLine(options, 'plotLines');
23799
- }
23751
+ (_a = this.options)[coll] || (_a[coll] = this.userOptions[coll] = []);
23752
+ this.options[coll].push(options);
23753
+ this[coll].push(plotItem);
23754
+ return plotItem;
23755
+ };
23800
23756
  /** @internal */
23801
23757
  function compose(PlotLineOrBandType, AxisClass) {
23802
23758
  const axisProto = AxisClass.prototype;
23803
23759
  if (!axisProto.addPlotBand) {
23804
23760
  PlotLineOrBandClass = PlotLineOrBandType;
23805
23761
  extend(axisProto, {
23806
- addPlotBand,
23807
- addPlotLine,
23808
- addPlotBandOrLine,
23762
+ addPlotBand: getAdderFunction('plotBands'),
23763
+ addPlotLine: getAdderFunction('plotLines'),
23809
23764
  getPlotBandPath,
23810
- removePlotBand,
23811
- removePlotLine,
23812
- removePlotBandOrLine
23765
+ removePlotBand: removePlotBandOrLine,
23766
+ removePlotLine: removePlotBandOrLine
23767
+ });
23768
+ addEvent(AxisClass, 'afterInit', function () {
23769
+ // First time only, not on Axis.update()
23770
+ if (!this.plotBands) {
23771
+ // Placeholder for plotlines and plotbands groups
23772
+ this.plotLinesAndBandsGroups = {};
23773
+ // Plot lines and bands from options
23774
+ for (const coll of ['plotBands', 'plotLines']) {
23775
+ this[coll] = [];
23776
+ for (const pOptions of splat(this.options[coll] || [])) {
23777
+ this[coll].push(new PlotLineOrBandClass(this, pOptions, coll));
23778
+ }
23779
+ }
23780
+ }
23781
+ });
23782
+ // Update plot bands and lines one to one
23783
+ addEvent(AxisClass, 'update', function ({ options }) {
23784
+ for (const coll of ['plotBands', 'plotLines']) {
23785
+ // Check if we have new options to process, otherwise do
23786
+ // nothing with existing plot lines and bands
23787
+ if (options[coll]) {
23788
+ const plotItems = this[coll];
23789
+ splat(options[coll]).forEach((pOptions = {}, i) => {
23790
+ // Match by id
23791
+ let pItem;
23792
+ if (pOptions?.id) {
23793
+ pItem = plotItems.find((p) => p.id === pOptions.id);
23794
+ }
23795
+ // Match by index
23796
+ pItem || (pItem = plotItems[i]);
23797
+ // Update
23798
+ if (pItem) {
23799
+ pItem.update(pOptions, false);
23800
+ options[coll][i] = pItem.options;
23801
+ // Add
23802
+ }
23803
+ else {
23804
+ pItem = this[coll === 'plotBands' ?
23805
+ 'addPlotBand' :
23806
+ 'addPlotLine'](pOptions);
23807
+ }
23808
+ pItem.isActive = true;
23809
+ });
23810
+ // Remove inactive items from end to start
23811
+ let i = plotItems.length;
23812
+ while (i--) {
23813
+ if (!plotItems[i].isActive) {
23814
+ plotItems[i].remove();
23815
+ }
23816
+ else {
23817
+ delete plotItems[i].isActive;
23818
+ }
23819
+ }
23820
+ }
23821
+ }
23813
23822
  });
23814
23823
  }
23815
23824
  return AxisClass;
@@ -23880,23 +23889,6 @@ var PlotLineOrBandAxis;
23880
23889
  }
23881
23890
  return result;
23882
23891
  }
23883
- /**
23884
- * Remove a plot band by its id.
23885
- *
23886
- * @sample highcharts/members/axis-removeplotband/
23887
- * Remove plot band by id
23888
- * @sample highcharts/members/axis-addplotband/
23889
- * Toggle the plot band from a button
23890
- *
23891
- * @function Highcharts.Axis#removePlotBand
23892
- *
23893
- * @param {string} id
23894
- * The plot band's `id` as given in the original configuration
23895
- * object or in the `addPlotBand` option.
23896
- */
23897
- function removePlotBand(id) {
23898
- this.removePlotBandOrLine(id);
23899
- }
23900
23892
  /**
23901
23893
  * Remove a plot band or plot line from the chart by id. Called
23902
23894
  * internally from `removePlotBand` and `removePlotLine`.
@@ -23904,45 +23896,7 @@ var PlotLineOrBandAxis;
23904
23896
  * @function Highcharts.Axis#removePlotBandOrLine
23905
23897
  */
23906
23898
  function removePlotBandOrLine(id) {
23907
- const plotLinesAndBands = this.plotLinesAndBands, options = this.options, userOptions = this.userOptions;
23908
- if (plotLinesAndBands) { // #15639
23909
- let i = plotLinesAndBands.length;
23910
- while (i--) {
23911
- if (plotLinesAndBands[i].id === id) {
23912
- plotLinesAndBands[i].destroy();
23913
- }
23914
- }
23915
- ([
23916
- options.plotLines || [],
23917
- userOptions.plotLines || [],
23918
- options.plotBands || [],
23919
- userOptions.plotBands || []
23920
- ]).forEach(function (arr) {
23921
- i = arr.length;
23922
- while (i--) {
23923
- if (arr[i]?.id === id) {
23924
- erase(arr, arr[i]);
23925
- }
23926
- }
23927
- });
23928
- }
23929
- }
23930
- /**
23931
- * Remove a plot line by its id.
23932
- *
23933
- * @sample highcharts/xaxis/plotlines-id/
23934
- * Remove plot line by id
23935
- * @sample highcharts/members/axis-addplotline/
23936
- * Toggle the plot line from a button
23937
- *
23938
- * @function Highcharts.Axis#removePlotLine
23939
- *
23940
- * @param {string} id
23941
- * The plot line's `id` as given in the original configuration
23942
- * object or in the `addPlotLine` option.
23943
- */
23944
- function removePlotLine(id) {
23945
- this.removePlotBandOrLine(id);
23899
+ [...this.plotBands || [], ...this.plotLines || []].find((plotItem) => plotItem.id === id)?.remove();
23946
23900
  }
23947
23901
  })(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));
23948
23902
  /* *
@@ -24006,9 +23960,11 @@ class PlotLineOrBand {
24006
23960
  this.labelCollectors.push(() => {
24007
23961
  const labels = [];
24008
23962
  for (const axis of this.axes) {
24009
- for (const { label, options } of axis.plotLinesAndBands) {
24010
- if (label && !options?.label?.allowOverlap) {
24011
- labels.push(label);
23963
+ for (const coll of ['plotBands', 'plotLines']) {
23964
+ for (const { label, options } of axis[coll]) {
23965
+ if (label && !options?.label?.allowOverlap) {
23966
+ labels.push(label);
23967
+ }
24012
23968
  }
24013
23969
  }
24014
23970
  }
@@ -24022,7 +23978,7 @@ class PlotLineOrBand {
24022
23978
  * Constructor
24023
23979
  *
24024
23980
  * */
24025
- constructor(axis, options) {
23981
+ constructor(axis, options, coll) {
24026
23982
  /**
24027
23983
  * Related axis.
24028
23984
  *
@@ -24038,6 +23994,7 @@ class PlotLineOrBand {
24038
23994
  */
24039
23995
  this.options = options;
24040
23996
  this.id = options.id;
23997
+ this.coll = coll;
24041
23998
  }
24042
23999
  /* *
24043
24000
  *
@@ -24053,43 +24010,28 @@ class PlotLineOrBand {
24053
24010
  */
24054
24011
  render() {
24055
24012
  fireEvent(this, 'render');
24056
- const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, time } = axis.chart, groupAttribs = {},
24013
+ const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, styledMode, time } = axis.chart,
24057
24014
  // These properties only exist on either band or line
24058
24015
  to = time.parse(options.to), from = time.parse(options.from), value = time.parse(options.value), borderWidth = options.borderWidth;
24059
- let optionsLabel = options.label, { label, svgElem } = this, path = [], group;
24060
- const isBand = defined(from) && defined(to), isLine = defined(value), isNew = !svgElem, attribs = {
24061
- 'class': 'highcharts-plot-' + (isBand ? 'band ' : 'line ') +
24062
- (options.className || '')
24063
- };
24064
- let groupName = isBand ? 'bands' : 'lines';
24065
- // Set the presentational attributes
24066
- if (!chart.styledMode) {
24067
- if (isLine) {
24068
- attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24069
- attribs['stroke-width'] =
24070
- options.width ?? 1;
24071
- if (options.dashStyle) {
24072
- attribs.dashstyle = options.dashStyle;
24073
- }
24074
- }
24075
- else if (isBand) { // Plot band
24076
- attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24077
- if (borderWidth) {
24078
- attribs.stroke = options.borderColor;
24079
- attribs['stroke-width'] = borderWidth;
24080
- }
24081
- }
24016
+ let optionsLabel = options.label, { label, svgElem } = this, group;
24017
+ const isBand = this.coll === 'plotBands', shortKey = isBand ? 'band' : 'line', groupName = `${shortKey}s-${zIndex}`, isNew = !svgElem, attribs = {
24018
+ 'class': `highcharts-plot-${shortKey} ${options.className || ''}`
24019
+ }, strokeWidth = isBand ?
24020
+ (borderWidth || 0) :
24021
+ (options.width ?? 1);
24022
+ // Set the stroke width before the path is calculated
24023
+ if (!styledMode) {
24024
+ attribs['stroke-width'] = strokeWidth;
24082
24025
  }
24083
24026
  // Grouping and zIndex
24084
- groupAttribs.zIndex = zIndex;
24085
- groupName += '-' + zIndex;
24086
24027
  group = axis.plotLinesAndBandsGroups[groupName];
24087
24028
  if (!group) {
24088
24029
  axis.plotLinesAndBandsGroups[groupName] = group =
24089
24030
  renderer.g('plot-' + groupName)
24090
24031
  .clip(chart.plotClipOuter)
24091
- .attr(groupAttribs).add();
24032
+ .attr({ zIndex }).add();
24092
24033
  }
24034
+ group[isNew ? 'attr' : 'animate']({ opacity: +axis.visible });
24093
24035
  // Create the path
24094
24036
  if (!svgElem) {
24095
24037
  /**
@@ -24100,40 +24042,58 @@ class PlotLineOrBand {
24100
24042
  */
24101
24043
  this.svgElem = svgElem = renderer
24102
24044
  .path()
24103
- .attr(attribs)
24104
- .add(group);
24045
+ .attr(attribs);
24046
+ }
24047
+ // Add it to the correct index while allowing dynamic z-index update
24048
+ if (svgElem.parentGroup !== group) {
24049
+ svgElem.add(group);
24105
24050
  }
24106
24051
  // Set the path or return
24107
- if (defined(value)) { // Plot line
24052
+ let path;
24053
+ if (!isBand && defined(value)) { // Plot line
24108
24054
  path = axis.getPlotLinePath({
24109
24055
  value: logarithmic?.log2lin(value) ?? value,
24110
24056
  lineWidth: svgElem.strokeWidth(),
24111
24057
  acrossPanes: options.acrossPanes
24112
24058
  });
24113
24059
  }
24114
- else if (defined(from) && defined(to)) { // Plot band
24060
+ else if (isBand && defined(from) && defined(to)) { // Plot band
24115
24061
  path = axis.getPlotBandPath(logarithmic?.log2lin(from) ?? from, logarithmic?.log2lin(to) ?? to, options);
24116
24062
  }
24117
- else {
24118
- return;
24063
+ if (path) {
24064
+ attribs.d = path;
24065
+ }
24066
+ // Apply the styling
24067
+ if (!styledMode) {
24068
+ if (isBand) { // Plot band
24069
+ attribs.fill = color || 'var(--highcharts-highlight-color-10)';
24070
+ if (borderWidth) {
24071
+ attribs.stroke = options.borderColor;
24072
+ }
24073
+ }
24074
+ else {
24075
+ attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
24076
+ if (options.dashStyle) {
24077
+ attribs.dashstyle = options.dashStyle;
24078
+ }
24079
+ }
24119
24080
  }
24120
24081
  // Common for lines and bands. Add events only if they were not added
24121
24082
  // before.
24122
- if (!this.eventsAdded && events) {
24083
+ if (isNew && events) {
24123
24084
  objectEach(events, (_event, eventType) => {
24124
24085
  svgElem?.on(eventType, (e) => {
24125
24086
  events[eventType].apply(this, [e, this]);
24126
24087
  });
24127
24088
  });
24128
- this.eventsAdded = true;
24129
24089
  }
24130
24090
  if ((isNew || !svgElem.d) && path?.length) {
24131
- svgElem.attr({ d: path });
24091
+ svgElem.attr(attribs);
24132
24092
  }
24133
24093
  else if (svgElem) {
24134
24094
  if (path) {
24135
24095
  svgElem.show();
24136
- svgElem.animate({ d: path });
24096
+ svgElem.animate(attribs);
24137
24097
  }
24138
24098
  else if (svgElem.d) {
24139
24099
  svgElem.hide();
@@ -24173,7 +24133,7 @@ class PlotLineOrBand {
24173
24133
  * @function Highcharts.PlotLineOrBand#renderLabel
24174
24134
  */
24175
24135
  renderLabel(optionsLabel, path, isBand, zIndex) {
24176
- const plotLine = this, axis = plotLine.axis, renderer = axis.chart.renderer, inside = optionsLabel.inside;
24136
+ const plotLine = this, axis = plotLine.axis, chart = axis.chart, renderer = chart.renderer, inside = optionsLabel.inside;
24177
24137
  let label = plotLine.label;
24178
24138
  // Add the SVG element
24179
24139
  if (!label) {
@@ -24184,25 +24144,31 @@ class PlotLineOrBand {
24184
24144
  * @type {Highcharts.SVGElement}
24185
24145
  */
24186
24146
  plotLine.label = label = renderer
24187
- .text(this.getLabelText(optionsLabel), 0, 0, optionsLabel.useHTML)
24188
- .attr({
24189
- align: optionsLabel.textAlign || optionsLabel.align,
24190
- rotation: optionsLabel.rotation,
24191
- 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24192
- '-label ' + (optionsLabel.className || ''),
24193
- zIndex
24194
- });
24195
- if (!axis.chart.styledMode) {
24196
- label.css(merge({
24197
- // To allow theming, and in lack of a general place to set
24198
- // default options for plot lines and bands, default to the
24199
- // title color. If we expose the palette, we should use that
24200
- // instead.
24201
- color: axis.chart.options.title?.style?.color,
24202
- fontSize: '0.8em',
24203
- textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24204
- }, optionsLabel.style));
24205
- }
24147
+ .text('', 0, 0, optionsLabel.useHTML)
24148
+ .attr({ zIndex });
24149
+ }
24150
+ label
24151
+ .attr({
24152
+ text: this.getLabelText(optionsLabel),
24153
+ align: optionsLabel.textAlign || optionsLabel.align,
24154
+ 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
24155
+ '-label ' + (optionsLabel.className || '')
24156
+ })[label.placed ? 'animate' : 'attr']({
24157
+ opacity: 1,
24158
+ rotation: optionsLabel.rotation
24159
+ });
24160
+ if (!chart.styledMode) {
24161
+ label.css(merge({
24162
+ // To allow theming, and in lack of a general place to set
24163
+ // default options for plot lines and bands, default to the
24164
+ // title color. If we expose the palette, we should use that
24165
+ // instead.
24166
+ color: chart.options.title?.style?.color,
24167
+ fontSize: '0.8em',
24168
+ textOverflow: (isBand && !inside) ? '' : 'ellipsis'
24169
+ }, optionsLabel.style));
24170
+ }
24171
+ if (!label.added) {
24206
24172
  label.add();
24207
24173
  }
24208
24174
  // Get the bounding box and align the label
@@ -24226,12 +24192,31 @@ class PlotLineOrBand {
24226
24192
  axis.height - (label.alignAttr.y -
24227
24193
  axis.top) : (optionsLabel.clip ?
24228
24194
  (axis.width + axis.left) :
24229
- axis.chart.chartWidth) - label.alignAttr.x) :
24195
+ chart.chartWidth) - label.alignAttr.x) :
24230
24196
  bBoxWidth)) + 'px'
24231
24197
  });
24232
24198
  }
24199
+ else if (label.textWidth) {
24200
+ label.css({ width: 'auto' });
24201
+ }
24233
24202
  label.show(true);
24234
24203
  }
24204
+ /**
24205
+ * Update the plot line or band with new options.
24206
+ *
24207
+ * @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} options
24208
+ * The new options to apply
24209
+ * @param {boolean} [redraw=true]
24210
+ * Whether to redraw the plot guide immediately
24211
+ *
24212
+ * @function Highcharts.PlotLineOrBand#update
24213
+ */
24214
+ update(options, redraw = true) {
24215
+ merge(true, this.options, options);
24216
+ if (redraw) {
24217
+ this.render();
24218
+ }
24219
+ }
24235
24220
  /**
24236
24221
  * Get label's text content.
24237
24222
  * @internal
@@ -24243,15 +24228,22 @@ class PlotLineOrBand {
24243
24228
  optionsLabel.text;
24244
24229
  }
24245
24230
  /**
24246
- * Remove the plot line or band.
24247
- *
24248
- * @function Highcharts.PlotLineOrBand#destroy
24231
+ * Destroy the item's elements
24249
24232
  */
24250
24233
  destroy() {
24234
+ destroyObjectProperties(this, this.axis);
24235
+ }
24236
+ /**
24237
+ * Remove the plot line or band and destroy its elements.
24238
+ *
24239
+ * @function Highcharts.PlotLineOrBand#remove
24240
+ */
24241
+ remove() {
24251
24242
  // Remove it from the lookup
24252
- erase(this.axis.plotLinesAndBands, this);
24253
- delete this.axis;
24254
- destroyObjectProperties(this);
24243
+ erase(this.axis[this.coll], this);
24244
+ // Remove from options
24245
+ erase(this.axis.options[this.coll] || [], this.options);
24246
+ this.destroy();
24255
24247
  }
24256
24248
  }
24257
24249
  /* *
@@ -24298,10 +24290,24 @@ class PlotLineOrBand {
24298
24290
  * In styled mode, the plot bands are styled by the `.highcharts-plot-band`
24299
24291
  * class in addition to the `className` option.
24300
24292
  *
24293
+ * When doing `Chart.update()` or `Axis.update()`, the plot bands are updated
24294
+ * by index or id. The following merging rules apply:
24295
+ * - If `plotBands` are not defined in the new options, all existing plot bands
24296
+ * are kept.
24297
+ * - If `plotBands` are defined without ids, the existing plot bands are updated
24298
+ * by index. If the new array has fewer plot bands, the remaining existing
24299
+ * plot bands are removed. If the new array has more plot bands, the extra
24300
+ * ones are added. An empty array removes all existing plot bands.
24301
+ * - If `plotBands` are defined with ids, the existing plot bands are matched
24302
+ * by id, and remaining unmatched existing plot bands are removed.
24303
+ *
24301
24304
  * @productdesc {highcharts}
24302
24305
  * In a gauge, a plot band on the Y axis (value axis) will stretch along the
24303
24306
  * perimeter of the gauge.
24304
24307
  *
24308
+ * @sample {highcharts} highcharts/xaxis/plotbands-color/
24309
+ * Basic plot band
24310
+ *
24305
24311
  * @type {Array<*>}
24306
24312
  * @product highcharts highstock gantt
24307
24313
  * @apioption xAxis.plotBands
@@ -24593,12 +24599,23 @@ class PlotLineOrBand {
24593
24599
  * In styled mode, the plot lines are styled by the
24594
24600
  * `.highcharts-plot-line` class in addition to the `className` option.
24595
24601
  *
24602
+ * When doing `Chart.update()` or `Axis.update()`, the plot lines are updated
24603
+ * by index or id. The following merging rules apply:
24604
+ * - If `plotLines` are not defined in the new options, all existing plot lines
24605
+ * are kept.
24606
+ * - If `plotLines` are defined without ids, the existing plot lines are updated
24607
+ * by index. If the new array has fewer plot lines, the remaining existing
24608
+ * plot lines are removed. If the new array has more plot lines, the extra
24609
+ * ones are added. An empty array removes all existing plot lines.
24610
+ * - If `plotLines` are defined with ids, the existing plot lines are matched
24611
+ * by id, and remaining unmatched existing plot lines are removed.
24612
+ *
24596
24613
  * @type {Array<*>}
24597
24614
  * @product highcharts highstock gantt
24598
- * @sample {highcharts} highcharts/xaxis/plotlines-color/
24599
- * Basic plot line
24600
- * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24601
- * Solid gauge plot line
24615
+ * @sample {highcharts} highcharts/xaxis/plotlines-color/
24616
+ * Basic plot line
24617
+ * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
24618
+ * Solid gauge plot line
24602
24619
  * @apioption xAxis.plotLines
24603
24620
  */
24604
24621
  /**
@@ -25107,14 +25124,11 @@ class Tooltip {
25107
25124
  */
25108
25125
  destroy() {
25109
25126
  // Destroy and clear local variables
25110
- if (this.label) {
25111
- this.label = this.label.destroy();
25112
- }
25127
+ this.tracker = this.tracker?.destroy();
25128
+ this.label = this.label?.destroy();
25113
25129
  if (this.split) {
25114
25130
  this.cleanSplit(true);
25115
- if (this.tt) {
25116
- this.tt = this.tt.destroy();
25117
- }
25131
+ this.tt = this.tt?.destroy();
25118
25132
  }
25119
25133
  if (this.renderer) {
25120
25134
  this.renderer = this.renderer.destroy();
@@ -25644,6 +25658,8 @@ class Tooltip {
25644
25658
  !this.isHidden &&
25645
25659
  !options.fixed &&
25646
25660
  options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
25661
+ this.anchorX = anchorX;
25662
+ this.anchorY = anchorY;
25647
25663
  if (!skipAnchor) {
25648
25664
  attr.anchorX = anchorX;
25649
25665
  attr.anchorY = anchorY;
@@ -26090,45 +26106,37 @@ class Tooltip {
26090
26106
  */
26091
26107
  drawTracker() {
26092
26108
  const tooltip = this;
26093
- if (!this.shouldStickOnContact()) {
26094
- if (tooltip.tracker) {
26095
- tooltip.tracker = tooltip.tracker.destroy();
26096
- }
26109
+ if (!tooltip.shouldStickOnContact()) {
26110
+ tooltip.tracker = tooltip.tracker?.destroy();
26097
26111
  return;
26098
26112
  }
26099
- const chart = tooltip.chart;
26100
- const label = tooltip.label;
26101
- const points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint;
26102
- if (!label || !points) {
26113
+ const { chart, label } = tooltip, points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint,
26114
+ // Split tooltips render into a plain group, with no box to trace
26115
+ box = label?.box;
26116
+ if (!box || !points) {
26103
26117
  return;
26104
26118
  }
26105
- const box = {
26106
- x: 0,
26107
- y: 0,
26108
- width: 0,
26109
- height: 0
26110
- };
26111
- // Combine anchor and tooltip
26112
- const anchorPos = this.getAnchor(points);
26113
- const labelBBox = label.getBBox();
26114
- anchorPos[0] += chart.plotLeft - (label.translateX || 0);
26115
- anchorPos[1] += chart.plotTop - (label.translateY || 0);
26116
- // When the mouse pointer is between the anchor point and the label,
26117
- // the label should stick.
26118
- box.x = Math.min(0, anchorPos[0]);
26119
- box.y = Math.min(0, anchorPos[1]);
26120
- box.width = (anchorPos[0] < 0 ?
26121
- Math.max(Math.abs(anchorPos[0]), labelBBox.width - anchorPos[0]) :
26122
- Math.max(Math.abs(anchorPos[0]), labelBBox.width));
26123
- box.height = (anchorPos[1] < 0 ?
26124
- Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :
26125
- Math.max(Math.abs(anchorPos[1]), labelBBox.height));
26126
- if (tooltip.tracker) {
26127
- tooltip.tracker.attr(box);
26128
- }
26129
- else {
26119
+ const { height, r, width, x, y } = box;
26120
+ let { anchorX, anchorY } = box;
26121
+ // Shared tooltips clear the label anchor (#22295), so fall back to the
26122
+ // anchor the position was calculated from
26123
+ if (!isNumber(anchorX)) {
26124
+ anchorX = (tooltip.anchorX || 0) - (label.translateX || 0);
26125
+ anchorY = (tooltip.anchorY || 0) - (label.translateY || 0);
26126
+ }
26127
+ // Match the tooltip shape, but stretch the connector all the way to the
26128
+ // point, so that the pointer can travel between the two without losing
26129
+ // contact. Only the side facing the anchor overshoots the box, so the
26130
+ // largest of the four distances is the one to cover. (#24255)
26131
+ const d = label.renderer.symbols.callout(x, y, width, height, {
26132
+ anchorX,
26133
+ anchorY,
26134
+ arrowLength: Math.max(anchorX - width, -anchorX, anchorY - height, -anchorY, 0),
26135
+ r
26136
+ });
26137
+ if (!tooltip.tracker) {
26130
26138
  tooltip.tracker = label.renderer
26131
- .rect(box)
26139
+ .path()
26132
26140
  .addClass('highcharts-tracker')
26133
26141
  .add(label);
26134
26142
  // For a rapid move going outside of the elements keeping the
@@ -26136,10 +26144,14 @@ class Tooltip {
26136
26144
  addEvent(tooltip.tracker.element, 'mouseenter', () => clearTimeouts(tooltip));
26137
26145
  if (!chart.styledMode) {
26138
26146
  tooltip.tracker.attr({
26139
- fill: 'rgba(0,0,0,0)'
26147
+ fill: 'rgba(0,0,0,0)',
26148
+ stroke: 'rgba(0,0,0,0)',
26149
+ 'stroke-linejoin': 'round',
26150
+ 'stroke-width': 10
26140
26151
  });
26141
26152
  }
26142
26153
  }
26154
+ tooltip.tracker.attr({ d });
26143
26155
  }
26144
26156
  /** @internal */
26145
26157
  styledModeFormat(formatString) {
@@ -27086,7 +27098,8 @@ class Point {
27086
27098
  /**
27087
27099
  * Set a value in an object, on the property defined by key. The key
27088
27100
  * supports nested properties using dot notation. The function modifies the
27089
- * input object and does not make a copy.
27101
+ * input object and does not make a copy. Paths containing `__proto__` or
27102
+ * `constructor` are ignored.
27090
27103
  *
27091
27104
  * @function Highcharts.Point#setNestedProperty<T>
27092
27105
  *
@@ -27104,11 +27117,18 @@ class Point {
27104
27117
  */
27105
27118
  setNestedProperty(object, value, key) {
27106
27119
  const nestedKeys = key.split('.');
27120
+ // Reject nested keys that would allow prototype pollution
27121
+ if (nestedKeys.some((nestedKey) => (nestedKey === '__proto__' || nestedKey === 'constructor'))) {
27122
+ return object;
27123
+ }
27107
27124
  nestedKeys.reduce(function (result, key, i, arr) {
27108
27125
  const isLastKey = arr.length - 1 === i;
27109
27126
  result[key] = (isLastKey ?
27110
27127
  value :
27111
- isObject(result[key], true) ?
27128
+ // Inherited objects are shared with everything else on
27129
+ // that prototype, so start a fresh one instead
27130
+ isObject(result[key], true) &&
27131
+ Object.hasOwnProperty.call(result, key) ?
27112
27132
  result[key] :
27113
27133
  {});
27114
27134
  return result[key];
@@ -27190,15 +27210,10 @@ class Point {
27190
27210
  */
27191
27211
  function update() {
27192
27212
  point.applyOptions(options);
27193
- // Update visuals, #4146
27194
- // Handle mock graphic elements for a11y, #12718
27195
- const hasMockGraphic = graphic && point.hasMockGraphic, index = point.index;
27196
- const shouldDestroyGraphic = point.y === null ?
27197
- !hasMockGraphic :
27198
- hasMockGraphic;
27199
- if (graphic && shouldDestroyGraphic) {
27213
+ // Update visuals, #4146. The a11y mock graphic is exempt, it is
27214
+ // maintained by the accessibility module, #12718.
27215
+ if (graphic && point.y === null && !point.hasMockGraphic) {
27200
27216
  point.graphic = graphic.destroy();
27201
- delete point.hasMockGraphic;
27202
27217
  }
27203
27218
  if (isObject(options, true)) {
27204
27219
  // Destroy so we can get new elements
@@ -27213,7 +27228,7 @@ class Point {
27213
27228
  point.dataLabel = point.dataLabel.destroy(); // #2468
27214
27229
  }
27215
27230
  }
27216
- const pointOptions = point.optionsToObject(options);
27231
+ const index = point.index, pointOptions = point.optionsToObject(options);
27217
27232
  if (!series.hasProcessedDataTable) {
27218
27233
  // Record changes in the data table (#24451)
27219
27234
  series.dataTable.setRow(pointOptions, index);
@@ -29217,19 +29232,18 @@ class Pointer {
29217
29232
  if (hasMoved ?? true) {
29218
29233
  this.pinch(e);
29219
29234
  }
29235
+ // If inside, capture touch-drag and display tooltip. If not
29236
+ // inside, allow dragging the finger to scroll the page
29237
+ if (this.hasPointerCapture && // #25095
29238
+ e.type === 'touchmove' &&
29239
+ !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29240
+ e.preventDefault();
29241
+ }
29220
29242
  }
29221
29243
  else if (start) {
29222
29244
  // Hide the tooltip on touching outside the plot area (#1203)
29223
29245
  this.reset();
29224
29246
  }
29225
- // If inside, capture touch-drag and display tooltip. If not inside,
29226
- // allow dragging the finger to scroll the page
29227
- if ((chart.tooltip?.options.followTouchMove ?? true) &&
29228
- isInside &&
29229
- e.type === 'touchmove' &&
29230
- !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29231
- e.preventDefault();
29232
- }
29233
29247
  }
29234
29248
  else if (e.touches.length === 2) {
29235
29249
  this.pinch(e);
@@ -29629,13 +29643,19 @@ const { setLength: DataTableCore_setLength, splice: DataTableCore_splice } = Dat
29629
29643
  class DataTableCore {
29630
29644
  constructor(options = {}) {
29631
29645
  this.isDataTable = true;
29632
- this.autoId = !options.id;
29646
+ // Reject IDs that would pollute the prototype of ID-keyed maps.
29647
+ const id = this.isPollutingKey(options.id) ? void 0 : options.id;
29648
+ this.autoId = !id;
29633
29649
  this.columns = {};
29634
- this.id = (options.id || uniqueKey());
29650
+ this.id = (id || uniqueKey());
29635
29651
  this.rowCount = 0;
29636
29652
  this.versionTag = uniqueKey();
29637
29653
  let rowCount = 0;
29638
29654
  objectEach(options.columns || {}, (column, columnId) => {
29655
+ if (columnId === '__proto__' ||
29656
+ columnId === 'constructor') {
29657
+ return;
29658
+ }
29639
29659
  this.columns[columnId] = column.slice();
29640
29660
  rowCount = Math.max(rowCount, column.length);
29641
29661
  });
@@ -29646,6 +29666,17 @@ class DataTableCore {
29646
29666
  * Functions
29647
29667
  *
29648
29668
  * */
29669
+ /**
29670
+ * Checks whether a key would pollute the prototype if used to index a
29671
+ * plain object (e.g. as a column ID or table ID).
29672
+ *
29673
+ * @private
29674
+ * @param {string|undefined} key The key to check.
29675
+ * @return {boolean} True if the key is unsafe to use.
29676
+ */
29677
+ isPollutingKey(key) {
29678
+ return key === '__proto__' || key === 'constructor';
29679
+ }
29649
29680
  /**
29650
29681
  * Applies a row count to the table by setting the `rowCount` property and
29651
29682
  * adjusting the length of all columns.
@@ -29804,6 +29835,10 @@ class DataTableCore {
29804
29835
  setColumns(columns, rowIndex, eventDetail) {
29805
29836
  let rowCount = this.rowCount;
29806
29837
  objectEach(columns, (column, columnId) => {
29838
+ if (columnId === '__proto__' ||
29839
+ columnId === 'constructor') {
29840
+ return;
29841
+ }
29807
29842
  this.columns[columnId] = column.slice();
29808
29843
  rowCount = column.length;
29809
29844
  });
@@ -29842,11 +29877,14 @@ class DataTableCore {
29842
29877
  * @emits #afterSetRows
29843
29878
  */
29844
29879
  setRow(row, rowIndex = this.rowCount, insert, eventDetail) {
29845
- var _a;
29846
29880
  const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1, rowKeys = Object.keys(row);
29847
29881
  if (eventDetail?.addColumns !== false) {
29848
29882
  for (let i = 0, iEnd = rowKeys.length; i < iEnd; i++) {
29849
- columns[_a = rowKeys[i]] || (columns[_a] = new Array(this.rowCount));
29883
+ const rowKey = rowKeys[i];
29884
+ if (!this.isPollutingKey(rowKey) &&
29885
+ !Object.hasOwnProperty.call(columns, rowKey)) {
29886
+ columns[rowKey] = new Array(this.rowCount);
29887
+ }
29850
29888
  }
29851
29889
  }
29852
29890
  objectEach(columns, (column, columnId) => {
@@ -33826,7 +33864,19 @@ class Series {
33826
33864
  .optionsToObject
33827
33865
  .call({ series: this }, data[i]);
33828
33866
  for (const key of Object.keys(ptOptions)) {
33829
- columns[key] || (columns[key] = new Array(dataLength));
33867
+ // Assigning these would write through to
33868
+ // `Object.prototype` or the `Object` constructor instead
33869
+ // of creating a column, and thereby affect unrelated
33870
+ // objects on the page
33871
+ if (key === '__proto__' || key === 'constructor') {
33872
+ continue;
33873
+ }
33874
+ // Inherited keys like `toString` are truthy without being
33875
+ // columns of ours, so test for an own property rather
33876
+ // than for a value (#25321)
33877
+ if (!Object.hasOwnProperty.call(columns, key)) {
33878
+ columns[key] = new Array(dataLength);
33879
+ }
33830
33880
  columns[key][i] = ptOptions[key];
33831
33881
  }
33832
33882
  }
@@ -34479,7 +34529,7 @@ class Series {
34479
34529
  // Apply plotBorderRadius clipping
34480
34530
  plotClipGroup?.clip(
34481
34531
  // Navigator y-axis is not clippable
34482
- clip && this.yAxis.clippable ?
34532
+ clip && this.yAxis?.clippable ?
34483
34533
  chart.plotClipInner :
34484
34534
  void 0);
34485
34535
  }
@@ -34782,28 +34832,27 @@ class Series {
34782
34832
  * @emits Highcharts.Series#event:destroy
34783
34833
  */
34784
34834
  destroy(keepEventsForUpdate) {
34785
- const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent), data = series.data || [];
34786
- let destroy, i, axis;
34835
+ const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent);
34836
+ let destroy, axis;
34787
34837
  // Add event hook
34788
34838
  fireEvent(series, 'destroy', { keepEventsForUpdate });
34789
34839
  // Remove events
34790
34840
  this.removeEvents(keepEventsForUpdate);
34791
34841
  // Erase from axes
34792
- (series.axisTypes || []).forEach(function (AXIS) {
34793
- axis = series[AXIS];
34842
+ for (const coll of (series.axisTypes || [])) {
34843
+ axis = series[coll];
34794
34844
  if (axis?.series) {
34795
34845
  erase(axis.series, series);
34796
34846
  axis.isDirty = axis.forceRedraw = true;
34797
34847
  }
34798
- });
34848
+ }
34799
34849
  // Remove legend items
34800
34850
  if (series.legendItem) {
34801
34851
  series.chart.legend.destroyItem(series);
34802
34852
  }
34803
34853
  // Destroy all points with their elements
34804
- i = data.length;
34805
- while (i--) {
34806
- data[i]?.destroy?.(true);
34854
+ for (const point of series.points || []) {
34855
+ point?.destroy?.(true);
34807
34856
  }
34808
34857
  for (const zone of series.zones || []) {
34809
34858
  // Destroy SVGElement's but preserve primitive props (#20426)
@@ -38942,7 +38991,10 @@ class Chart {
38942
38991
  elem = this.renderer.text(options.text, 0, 0, options.useHTML)
38943
38992
  .attr({
38944
38993
  align: options.align,
38945
- 'class': 'highcharts-' + key,
38994
+ 'class': [
38995
+ options.className,
38996
+ 'highcharts-' + key
38997
+ ].filter(isString).join(' '),
38946
38998
  zIndex: options.zIndex || 4
38947
38999
  })
38948
39000
  .css({
@@ -39947,7 +39999,7 @@ class Chart {
39947
39999
  if (label &&
39948
40000
  (labels.reserveSpace ?? !isNumber(options.crossing))) {
39949
40001
  expectedSpace = label.getBBox().height +
39950
- labels.distance +
40002
+ (labels.distance ?? 15) +
39951
40003
  Math.max(isNumber(offset) ? offset : 0, 0);
39952
40004
  }
39953
40005
  if (expectedSpace) {
@@ -40035,6 +40087,12 @@ class Chart {
40035
40087
  addCredits(credits) {
40036
40088
  const chart = this, creds = merge(true, this.options.credits, credits);
40037
40089
  if (creds.enabled && !this.credits) {
40090
+ // Run the user-supplied URL through the allow list, so that
40091
+ // references like `javascript:` can't be executed from the
40092
+ // credits label
40093
+ const href = creds.href ?
40094
+ HTML_AST.filterUserAttributes({ href: creds.href }).href :
40095
+ void 0;
40038
40096
  /**
40039
40097
  * The chart's credits label. The label has an `update` method that
40040
40098
  * allows setting new options as per the
@@ -40048,8 +40106,8 @@ class Chart {
40048
40106
  .on('click', function (e) {
40049
40107
  // Fire the event with browser redirect as default function
40050
40108
  fireEvent(chart, 'creditsClick', e, () => {
40051
- if (creds.href) {
40052
- Chart_win.location.href = creds.href;
40109
+ if (href) {
40110
+ Chart_win.location.href = href;
40053
40111
  }
40054
40112
  });
40055
40113
  })
@@ -41666,14 +41724,11 @@ class StackItem {
41666
41724
  *
41667
41725
  * */
41668
41726
  /** @internal */
41669
- constructor(axis, options, negativeValue, x, stackOption) {
41670
- const inverted = axis.chart.inverted, reversed = axis.reversed;
41727
+ constructor(axis, negativeValue, x, stackOption) {
41671
41728
  this.axis = axis;
41672
41729
  // The stack goes to the left either if the stack has negative value
41673
41730
  // or when axis is reversed. XOR operator.
41674
- const isNegative = (this.isNegative = !!negativeValue !== !!reversed);
41675
- // Save the options to be able to style the label
41676
- this.options = options = options || {};
41731
+ this.negativeValue = negativeValue;
41677
41732
  // Save the x value to be able to position the label later
41678
41733
  this.x = x;
41679
41734
  // Initialize total value
@@ -41688,20 +41743,6 @@ class StackItem {
41688
41743
  this.stack = stackOption;
41689
41744
  this.leftCliff = 0;
41690
41745
  this.rightCliff = 0;
41691
- // The align options and text align varies on whether the stack is
41692
- // negative and if the chart is inverted or not.
41693
- // First test the user supplied value, then use the dynamic.
41694
- this.alignOptions = {
41695
- align: options.align ||
41696
- (inverted ? (isNegative ? 'left' : 'right') : 'center'),
41697
- verticalAlign: options.verticalAlign ||
41698
- (inverted ? 'middle' : isNegative ? 'bottom' : 'top'),
41699
- y: options.y,
41700
- x: options.x
41701
- };
41702
- this.textAlign =
41703
- options.textAlign ||
41704
- (inverted ? (!isNegative ? 'left' : 'right') : 'center');
41705
41746
  }
41706
41747
  /* *
41707
41748
  *
@@ -41717,39 +41758,34 @@ class StackItem {
41717
41758
  * @internal
41718
41759
  */
41719
41760
  render(group) {
41720
- const chart = this.axis.chart, options = this.options, formatOption = options.format,
41761
+ const axis = this.axis, chart = axis.chart, options = axis.options.stackLabels || {}, formatOption = options.format,
41721
41762
  // Format the text in the label.
41722
- str = (formatOption ?
41763
+ text = (formatOption ?
41723
41764
  StackItem_format(formatOption, this, chart) :
41724
- options.formatter?.call(this, this)) || '';
41725
- // Change the text to reflect the new total and set visibility to hidden
41726
- // in case the series is hidden
41727
- if (this.label) {
41728
- this.label.attr({ text: str, visibility: 'hidden' });
41765
+ options.formatter?.call(this, this)) || '', verb = this.label ? 'animate' : 'attr';
41766
+ // Create new label
41767
+ this.label || (this.label = chart.renderer.label(text, 0, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels'));
41768
+ const label = this.label, animatableAttribs = {
41769
+ r: options.borderRadius || 0,
41770
+ // Set default padding to 5 as it is in dataLabels #12308
41771
+ padding: (options.padding ?? 5)
41772
+ };
41773
+ if (!chart.styledMode) {
41774
+ animatableAttribs.fill = options.backgroundColor;
41775
+ animatableAttribs.stroke = options.borderColor;
41776
+ animatableAttribs['stroke-width'] = options.borderWidth;
41777
+ label.css(options.style || {});
41729
41778
  }
41730
- else {
41731
- // Create new label
41732
- this.label = chart.renderer.label(str, null, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels');
41733
- const attr = {
41734
- r: options.borderRadius || 0,
41735
- text: str,
41736
- // Set default padding to 5 as it is in dataLabels #12308
41737
- padding: (options.padding ?? 5),
41738
- visibility: 'hidden' // Hidden until setOffset is called
41739
- };
41740
- if (!chart.styledMode) {
41741
- attr.fill = options.backgroundColor;
41742
- attr.stroke = options.borderColor;
41743
- attr['stroke-width'] = options.borderWidth;
41744
- this.label.css(options.style || {});
41745
- }
41746
- this.label.attr(attr);
41747
- if (!this.label.added) {
41748
- this.label.add(group); // Add to the labels-group
41749
- }
41779
+ label
41780
+ .attr({
41781
+ text,
41782
+ visibility: 'hidden' // Hidden until setOffset is called
41783
+ })[verb](animatableAttribs);
41784
+ if (!label.added) {
41785
+ label.add(group); // Add to the labels-group
41750
41786
  }
41751
41787
  // Rank it higher than data labels (#8742)
41752
- this.label.labelrank = chart.plotSizeY;
41788
+ label.labelrank = chart.plotSizeY;
41753
41789
  fireEvent(this, 'afterRender');
41754
41790
  }
41755
41791
  /**
@@ -41758,35 +41794,38 @@ class StackItem {
41758
41794
  * @internal
41759
41795
  */
41760
41796
  setOffset(xOffset, width, boxBottom, boxTop, defaultX, xAxis) {
41761
- const { alignOptions, axis, label, options, textAlign } = this, chart = axis.chart, stackBox = this.getStackBox({
41762
- xOffset,
41763
- width,
41797
+ const { axis, label } = this, chart = axis.chart, options = axis.options.stackLabels || {}, inverted = chart.inverted, isNegative = this.negativeValue !== !!axis.reversed, stackBox = this.getStackBox({
41764
41798
  boxBottom,
41765
41799
  boxTop,
41766
41800
  defaultX,
41767
- xAxis
41768
- }), { verticalAlign } = alignOptions;
41801
+ isNegative,
41802
+ width,
41803
+ xAxis,
41804
+ xOffset
41805
+ }), { align = (inverted ? (isNegative ? 'left' : 'right') : 'center'), verticalAlign = (inverted ? 'middle' : isNegative ? 'bottom' : 'top'), textAlign = (inverted ? (!isNegative ? 'left' : 'right') : 'center'), x = 0, y = 0 } = options, alignOptions = {
41806
+ align,
41807
+ verticalAlign,
41808
+ x,
41809
+ y
41810
+ };
41769
41811
  if (label && stackBox) {
41770
41812
  const labelBox = label.getBBox(void 0, 0), padding = label.padding;
41771
41813
  let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
41772
- // Reset alignOptions property after justify #12337
41773
- alignOptions.x = options.x || 0;
41774
- alignOptions.y = options.y || 0;
41775
41814
  // Calculate the adjusted Stack position, to take into consideration
41776
- // The size if the labelBox and vertical alignment as
41777
- // well as the text alignment. It's need to be done to work with
41778
- // default SVGLabel.align/justify methods.
41779
- const { x, y } = this.adjustStackPosition({
41815
+ // the size if the labelBox and vertical alignment as well as the
41816
+ // text alignment. It needs to be done to work with default
41817
+ // SVGLabel.align/justify methods.
41818
+ const { x: adjustX, y: adjustY } = this.adjustStackPosition({
41780
41819
  labelBox,
41781
41820
  verticalAlign,
41782
41821
  textAlign
41783
41822
  });
41784
- stackBox.x -= x;
41785
- stackBox.y -= y;
41823
+ stackBox.x -= adjustX;
41824
+ stackBox.y -= adjustY;
41786
41825
  // Align the label to the adjusted box.
41787
41826
  label.align(alignOptions, false, stackBox);
41788
- // Check if label is inside the plotArea #12294
41789
- visible = chart.isInsidePlot(label.alignAttr.x + alignOptions.x + x, label.alignAttr.y + alignOptions.y + y);
41827
+ // Check if the label is inside the plotArea #12294
41828
+ visible = chart.isInsidePlot(label.alignAttr.x + x + adjustX, label.alignAttr.y + y + adjustY);
41790
41829
  if (!visible) {
41791
41830
  isJustify = false;
41792
41831
  }
@@ -41794,11 +41833,8 @@ class StackItem {
41794
41833
  // Justify stackLabel into the alignBox
41795
41834
  StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);
41796
41835
  }
41797
- // Add attr to avoid the default animation of justifyDataLabel.
41798
- // Also add correct rotation with its rotation origin. #15129
41836
+ // Add correct rotation with its rotation origin (#15129)
41799
41837
  label.attr({
41800
- x: label.alignAttr.x,
41801
- y: label.alignAttr.y,
41802
41838
  rotation: options.rotation,
41803
41839
  rotationOriginX: labelBox.width *
41804
41840
  getAlignFactor(options.textAlign || 'center'),
@@ -41837,22 +41873,22 @@ class StackItem {
41837
41873
  * The x, y, height, width of the stack.
41838
41874
  */
41839
41875
  getStackBox(stackBoxProps) {
41840
- const stackItem = this, axis = this.axis, chart = axis.chart, { boxTop, defaultX, xOffset, width, boxBottom } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41876
+ const axis = this.axis, chart = axis.chart, { boxBottom, boxTop, defaultX, isNegative, width, xOffset } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41841
41877
  100 :
41842
41878
  (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 ||
41843
41879
  (isNumber(axis.min) &&
41844
41880
  axis.logarithmic &&
41845
41881
  axis.logarithmic.lin2log(axis.min)) ||
41846
- 0), height = Math.abs(y - yZero), inverted = chart.inverted, neg = stackItem.isNegative;
41882
+ 0), height = Math.abs(y - yZero), inverted = chart.inverted;
41847
41883
  return inverted ?
41848
41884
  {
41849
- x: (neg ? y : y - height) - chart.plotLeft,
41885
+ x: (isNegative ? y : y - height) - chart.plotLeft,
41850
41886
  y: xAxis.height - x - width + xAxis.top - chart.plotTop,
41851
41887
  width: height,
41852
41888
  height: width
41853
41889
  } : {
41854
41890
  x: x + xAxis.transB - chart.plotLeft,
41855
- y: (neg ? y - height : y) - chart.plotTop,
41891
+ y: (isNegative ? y - height : y) - chart.plotTop,
41856
41892
  width: width,
41857
41893
  height: height
41858
41894
  };
@@ -41888,10 +41924,6 @@ class StackItem {
41888
41924
  * @name Highcharts.StackItemObject#cumulative
41889
41925
  * @type {number}
41890
41926
  */ /**
41891
- * True if on the negative side
41892
- * @name Highcharts.StackItemObject#isNegative
41893
- * @type {boolean}
41894
- */ /**
41895
41927
  * Related SVG element
41896
41928
  * @name Highcharts.StackItemObject#label
41897
41929
  * @type {Highcharts.SVGElement}
@@ -42108,7 +42140,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
42108
42140
  stacks[key][x].total = null;
42109
42141
  }
42110
42142
  else {
42111
- stacks[key][x] = new Stacking_StackItem(axis, axis.options.stackLabels, !!isNegative, x, stackOption);
42143
+ stacks[key][x] = new Stacking_StackItem(axis, !!isNegative, x, stackOption);
42112
42144
  }
42113
42145
  }
42114
42146
  // If the StackItem doesn't exist, create it first
@@ -42265,29 +42297,41 @@ class AxisAdditions {
42265
42297
  });
42266
42298
  });
42267
42299
  }
42268
- /** @internal */
42300
+ /**
42301
+ * Create the stack totals group and render the individual labels into it
42302
+ * @internal
42303
+ */
42269
42304
  renderStackTotals() {
42270
- 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 ||
42271
- renderer
42272
- .g('stack-labels')
42273
- .attr({
42274
- zIndex: 6,
42275
- opacity: 0
42276
- })
42277
- .add());
42278
- // The plotLeft/Top will change when y axis gets wider so we need to
42279
- // translate the stackTotalGroup at every render call. See bug #506
42280
- // and #516
42281
- stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42282
- // Render each stack total
42283
- objectEach(stacks, (type) => {
42284
- objectEach(type, (stack) => {
42285
- stack.render(stackTotalGroup);
42305
+ 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 ||
42306
+ (enabled ?
42307
+ renderer
42308
+ .g('stack-labels')
42309
+ .attr({
42310
+ zIndex: 6,
42311
+ opacity: 0
42312
+ })
42313
+ .add() :
42314
+ void 0));
42315
+ if (stackTotalGroup) {
42316
+ // The plotLeft/Top will change when y axis gets wider so we need to
42317
+ // translate the stackTotalGroup at every render call. See bug #506
42318
+ // and #516
42319
+ stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
42320
+ // Render each stack total
42321
+ objectEach(stacks, (type) => {
42322
+ objectEach(type, (stack) => {
42323
+ if (enabled) {
42324
+ stack.render(stackTotalGroup);
42325
+ }
42326
+ else {
42327
+ stack.label = stack.label?.destroy();
42328
+ }
42329
+ });
42286
42330
  });
42287
- });
42288
- stackTotalGroup.animate({
42289
- opacity: 1
42290
- }, animationConfig);
42331
+ stackTotalGroup.animate({
42332
+ opacity: 1
42333
+ }, animationConfig);
42334
+ }
42291
42335
  }
42292
42336
  }
42293
42337
  /* *
@@ -42609,7 +42653,6 @@ Series_SeriesRegistry.registerSeriesType('line', LineSeries);
42609
42653
  * specified, it is inherited from [chart.type](#chart.type).
42610
42654
  *
42611
42655
  * @extends series,plotOptions.line
42612
- * @excluding dataParser,dataURL
42613
42656
  * @product highcharts highstock
42614
42657
  * @apioption series.line
42615
42658
  */
@@ -42983,7 +43026,7 @@ const AreaSeriesDefaults = {
42983
43026
  * specified, it is inherited from [chart.type](#chart.type).
42984
43027
  *
42985
43028
  * @extends series,plotOptions.area
42986
- * @excluding dataParser, dataURL, useOhlcData
43029
+ * @excluding useOhlcData
42987
43030
  * @product highcharts highstock
42988
43031
  * @apioption series.area
42989
43032
  */
@@ -43620,7 +43663,7 @@ Series_SeriesRegistry.registerSeriesType('spline', SplineSeries);
43620
43663
  * not specified, it is inherited from [chart.type](#chart.type).
43621
43664
  *
43622
43665
  * @extends series,plotOptions.spline
43623
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43666
+ * @excluding step, boostThreshold, boostBlending
43624
43667
  * @product highcharts highstock
43625
43668
  * @apioption series.spline
43626
43669
  */
@@ -43782,7 +43825,7 @@ Series_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);
43782
43825
  *
43783
43826
  *
43784
43827
  * @extends series,plotOptions.areaspline
43785
- * @excluding dataParser, dataURL, step, boostThreshold, boostBlending
43828
+ * @excluding step, boostThreshold, boostBlending
43786
43829
  * @product highcharts highstock
43787
43830
  * @apioption series.areaspline
43788
43831
  */
@@ -44059,13 +44102,16 @@ const ColumnSeriesDefaults = {
44059
44102
  * The minimal height for a column or width for a bar. By default,
44060
44103
  * 0 values are not shown. To visualize a 0 (or close to zero) point,
44061
44104
  * set the minimal point length to a pixel value like 3\. In stacked
44062
- * column charts, minPointLength might not be respected for tightly
44063
- * packed values.
44105
+ * column charts, the length is applied to each point in isolation, so
44106
+ * tightly packed values may overlap. See the stacked sample below for a
44107
+ * plugin that lays out the stack as a whole instead.
44064
44108
  *
44065
44109
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength/
44066
44110
  * Zero base value
44067
44111
  * @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/
44068
44112
  * Positive and negative close to zero values
44113
+ * @sample {highcharts} highcharts/plotoptions/column-minpointlength-stacked/
44114
+ * Stack-aware minimum length
44069
44115
  *
44070
44116
  * @product highcharts highstock gantt
44071
44117
  */
@@ -44236,7 +44282,7 @@ const ColumnSeriesDefaults = {
44236
44282
  * not specified, it is inherited from [chart.type](#chart.type).
44237
44283
  *
44238
44284
  * @extends series,plotOptions.column
44239
- * @excluding connectNulls, dataParser, dataURL, gapSize, gapUnit, linecap,
44285
+ * @excluding connectNulls, gapSize, gapUnit, linecap,
44240
44286
  * lineWidth, marker, connectEnds, step
44241
44287
  * @product highcharts highstock
44242
44288
  * @apioption series.column
@@ -45880,7 +45926,7 @@ Series_SeriesRegistry.registerSeriesType('bar', BarSeries);
45880
45926
  * it is inherited from [chart.type](#chart.type).
45881
45927
  *
45882
45928
  * @extends series,plotOptions.bar
45883
- * @excluding connectNulls, dashStyle, dataParser, dataURL, gapSize, gapUnit,
45929
+ * @excluding connectNulls, dashStyle, gapSize, gapUnit,
45884
45930
  * linecap, lineWidth, marker, connectEnds, step
45885
45931
  * @product highcharts
45886
45932
  * @apioption series.bar
@@ -46081,7 +46127,7 @@ const ScatterSeriesDefaults = {
46081
46127
  * not specified, it is inherited from [chart.type](#chart.type).
46082
46128
  *
46083
46129
  * @extends series,plotOptions.scatter
46084
- * @excluding cropThreshold, dataParser, dataURL, useOhlcData
46130
+ * @excluding cropThreshold, useOhlcData
46085
46131
  * @product highcharts highstock
46086
46132
  * @apioption series.scatter
46087
46133
  */
@@ -47183,7 +47229,7 @@ const PieSeriesDefaults = {
47183
47229
  * it is inherited from [chart.type](#chart.type).
47184
47230
  *
47185
47231
  * @extends series,plotOptions.pie
47186
- * @excluding cropThreshold, dataParser, dataURL, linkedTo, stack, xAxis, yAxis,
47232
+ * @excluding cropThreshold, linkedTo, stack, xAxis, yAxis,
47187
47233
  * dataSorting, step, boostThreshold, boostBlending
47188
47234
  * @product highcharts highmaps
47189
47235
  * @apioption series.pie
@@ -48284,6 +48330,7 @@ var GeometryUtilities;
48284
48330
  * */
48285
48331
 
48286
48332
 
48333
+
48287
48334
  const { pointInPolygon } = Geometry_GeometryUtilities;
48288
48335
 
48289
48336
  /* *
@@ -48424,30 +48471,34 @@ function composeOverlappingDataLabels(ChartClass) {
48424
48471
  * Whether label is affected
48425
48472
  */
48426
48473
  function hideOrShow(label, chart) {
48427
- let complete, newOpacity, isLabelAffected = false;
48474
+ let isLabelAffected = false;
48428
48475
  if (label) {
48429
- newOpacity = label.newOpacity;
48476
+ const newOpacity = label.newOpacity, isDataLabel = label.hasClass('highcharts-data-label');
48477
+ // For tick labels, we need to stop running animations otherwise they
48478
+ // may continue to run after we set the new opacity
48479
+ if (!isDataLabel) {
48480
+ stop(label, 'opacity');
48481
+ }
48430
48482
  if (label.oldOpacity !== newOpacity) {
48431
48483
  // Toggle data labels
48432
- if (label.hasClass('highcharts-data-label')) {
48484
+ if (isDataLabel) {
48433
48485
  // Make sure the label is completely hidden to avoid catching
48434
48486
  // clicks (#4362)
48435
48487
  label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');
48436
- complete = function () {
48488
+ isLabelAffected = true;
48489
+ // Animate or set the opacity
48490
+ label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, () => {
48437
48491
  if (!chart.styledMode) {
48438
48492
  label.css({
48439
48493
  pointerEvents: newOpacity ? 'auto' : 'none'
48440
48494
  });
48441
48495
  }
48442
- };
48443
- isLabelAffected = true;
48444
- // Animate or set the opacity
48445
- label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);
48496
+ });
48446
48497
  fireEvent(chart, 'afterHideOverlappingLabel');
48447
- // Toggle other labels, tick labels
48498
+ // Toggle other labels - tick labels, stack labels
48448
48499
  }
48449
48500
  else {
48450
- label.attr({
48501
+ label[label.placed ? 'animate' : 'attr']({
48451
48502
  opacity: newOpacity
48452
48503
  });
48453
48504
  }
@@ -48463,25 +48514,37 @@ function hideOrShow(label, chart) {
48463
48514
  * @internal
48464
48515
  */
48465
48516
  function OverlappingDataLabels_onChartRender() {
48466
- const chart = this;
48517
+ const chart = this,
48518
+ // Helper function for data labels and stack labels when dynamicly
48519
+ // toggling the allowOverlap option
48520
+ toggle = (label, allowOverlap) => {
48521
+ // Allow overlap, reset opacity and show
48522
+ if (allowOverlap) {
48523
+ label.oldOpacity = label.opacity;
48524
+ label.newOpacity = 1;
48525
+ hideOrShow(label, chart);
48526
+ // Do not allow overlap
48527
+ }
48528
+ else {
48529
+ labels.push(label);
48530
+ }
48531
+ };
48467
48532
  let labels = [];
48468
48533
  // Consider external label collectors
48469
48534
  for (const collector of (chart.labelCollectors || [])) {
48470
48535
  labels = labels.concat(collector());
48471
48536
  }
48472
- for (const yAxis of (chart.yAxis || [])) {
48473
- if (yAxis.stacking &&
48474
- yAxis.options.stackLabels &&
48475
- !yAxis.options.stackLabels.allowOverlap) {
48476
- objectEach(yAxis.stacking.stacks, (stack) => {
48477
- objectEach(stack, (stackItem) => {
48478
- if (stackItem.label) {
48479
- labels.push(stackItem.label);
48480
- }
48481
- });
48537
+ // Stack labels
48538
+ for (const { options, stacking } of (chart.yAxis || [])) {
48539
+ objectEach(stacking?.stacks, (stack) => {
48540
+ objectEach(stack, ({ label }) => {
48541
+ if (label) {
48542
+ toggle(label, options.stackLabels?.allowOverlap);
48543
+ }
48482
48544
  });
48483
- }
48545
+ });
48484
48546
  }
48547
+ // Series data labels
48485
48548
  for (const series of (chart.series || [])) {
48486
48549
  if (series.visible && series.hasDataLabels?.()) { // #3866
48487
48550
  const push = (points) => {
@@ -48510,21 +48573,13 @@ function OverlappingDataLabels_onChartRender() {
48510
48573
  }
48511
48574
  */
48512
48575
  // Allow overlap if the option is explicitly true
48513
- if (
48576
+ toggle(label, (
48514
48577
  // #13449
48515
48578
  options.allowOverlap ??
48516
48579
  // Pie labels outside have a separate placement
48517
48580
  // logic, skip the overlap logic
48518
48581
  (series.is('pie') &&
48519
- Number(options.distance) > 0)) {
48520
- label.oldOpacity = label.opacity;
48521
- label.newOpacity = 1;
48522
- hideOrShow(label, chart);
48523
- // Do not allow overlap
48524
- }
48525
- else {
48526
- labels.push(label);
48527
- }
48582
+ Number(options.distance) > 0)));
48528
48583
  });
48529
48584
  }
48530
48585
  }
@@ -49200,7 +49255,7 @@ var Responsive;
49200
49255
  ;// ./code/es-modules/masters/highcharts.src.js
49201
49256
  // SPDX-License-Identifier: LicenseRef-Highcharts
49202
49257
  /**
49203
- * @license Highcharts JS v13.0.2 (2026-08-27)
49258
+ * @license Highcharts JS v13.1.1 (2026-09-20)
49204
49259
  * @module highcharts/highcharts
49205
49260
  *
49206
49261
  * (c) 2009-2026 Highsoft AS