highcharts 13.0.0 → 13.0.2

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 (1264) hide show
  1. package/bower.json +1 -1
  2. package/css/highcharts.css +2 -1
  3. package/es-modules/Accessibility/A11yI18n.js +4 -4
  4. package/es-modules/Accessibility/Accessibility.js +38 -1
  5. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +6 -4
  6. package/es-modules/Accessibility/Components/LegendComponent.js +3 -4
  7. package/es-modules/Accessibility/Components/NavigatorComponent.js +3 -4
  8. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +13 -10
  9. package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +8 -4
  10. package/es-modules/Accessibility/Components/ZoomComponent.js +2 -2
  11. package/es-modules/Accessibility/FocusBorder.js +2 -2
  12. package/es-modules/Accessibility/Options/A11yDefaults.js +12 -3
  13. package/es-modules/Accessibility/Options/DeprecatedOptions.js +1 -2
  14. package/es-modules/Accessibility/ProxyElement.js +1 -0
  15. package/es-modules/Core/Animation/AnimationUtilities.js +34 -43
  16. package/es-modules/Core/Animation/Fx.js +16 -19
  17. package/es-modules/Core/Axis/Axis.js +49 -59
  18. package/es-modules/Core/Axis/Axis3DComposition.js +8 -6
  19. package/es-modules/Core/Axis/AxisDefaults.js +12 -2
  20. package/es-modules/Core/Axis/BrokenAxis.js +6 -5
  21. package/es-modules/Core/Axis/Color/ColorAxis.js +24 -12
  22. package/es-modules/Core/Axis/Color/ColorAxisComposition.js +3 -3
  23. package/es-modules/Core/Axis/GridAxis.js +12 -5
  24. package/es-modules/Core/Axis/LogarithmicAxis.js +5 -3
  25. package/es-modules/Core/Axis/NavigatorAxisComposition.js +2 -2
  26. package/es-modules/Core/Axis/OrdinalAxis.js +21 -11
  27. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +3 -2
  28. package/es-modules/Core/Axis/RadialAxis.js +23 -22
  29. package/es-modules/Core/Axis/ScrollbarAxis.js +3 -3
  30. package/es-modules/Core/Axis/Stacking/StackItem.js +5 -5
  31. package/es-modules/Core/Axis/Stacking/StackingAxis.js +5 -6
  32. package/es-modules/Core/Axis/Tick.js +10 -11
  33. package/es-modules/Core/Axis/TreeGrid/TreeGridAxis.js +1 -1
  34. package/es-modules/Core/Axis/TreeGrid/TreeGridTick.js +3 -3
  35. package/es-modules/Core/Chart/Chart.js +58 -53
  36. package/es-modules/Core/Chart/Chart3D.js +3 -3
  37. package/es-modules/Core/Chart/ChartDefaults.js +24 -1
  38. package/es-modules/Core/Chart/MapChart.js +7 -10
  39. package/es-modules/Core/Chart/StockChart.js +15 -11
  40. package/es-modules/Core/Color/Color.js +3 -1
  41. package/es-modules/Core/Defaults.js +44 -2
  42. package/es-modules/Core/Globals.js +1 -1
  43. package/es-modules/Core/Legend/Legend.js +20 -17
  44. package/es-modules/Core/Legend/LegendSymbol.js +2 -2
  45. package/es-modules/Core/MSPointer.js +2 -2
  46. package/es-modules/Core/Math3D.js +6 -7
  47. package/es-modules/Core/Pointer.js +20 -10
  48. package/es-modules/Core/Renderer/HTML/AST.js +5 -1
  49. package/es-modules/Core/Renderer/HTML/HTMLElement.js +23 -16
  50. package/es-modules/Core/Renderer/RendererUtilities.js +2 -2
  51. package/es-modules/Core/Renderer/SVG/SVGElement.js +12 -11
  52. package/es-modules/Core/Renderer/SVG/SVGElement3D.js +2 -2
  53. package/es-modules/Core/Renderer/SVG/SVGLabel.js +5 -5
  54. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +6 -6
  55. package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +13 -12
  56. package/es-modules/Core/Renderer/SVG/Symbols.js +6 -5
  57. package/es-modules/Core/Renderer/SVG/TextBuilder.js +2 -2
  58. package/es-modules/Core/Responsive.js +7 -5
  59. package/es-modules/Core/Series/DataLabel.js +9 -8
  60. package/es-modules/Core/Series/OverlappingDataLabels.js +5 -2
  61. package/es-modules/Core/Series/Point.js +31 -24
  62. package/es-modules/Core/Series/Series.js +125 -82
  63. package/es-modules/Core/Series/Series3D.js +2 -2
  64. package/es-modules/Core/Series/SeriesDefaults.js +33 -0
  65. package/es-modules/Core/Templating.js +18 -15
  66. package/es-modules/Core/Tooltip.js +12 -9
  67. package/es-modules/Core/Utilities.js +4 -3
  68. package/es-modules/Data/Connectors/DataConnector.js +2 -2
  69. package/es-modules/Data/Connectors/GoogleSheetsConnector.js +2 -2
  70. package/es-modules/Data/DataTable.js +17 -0
  71. package/es-modules/Data/DataTableCore.js +1 -1
  72. package/es-modules/Extensions/Annotations/Annotation.js +5 -6
  73. package/es-modules/Extensions/Annotations/AnnotationChart.js +2 -2
  74. package/es-modules/Extensions/Annotations/AnnotationDefaults.js +4 -4
  75. package/es-modules/Extensions/Annotations/ControlPoint.js +2 -2
  76. package/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +2 -2
  77. package/es-modules/Extensions/Annotations/EventEmitter.js +4 -4
  78. package/es-modules/Extensions/Annotations/MockPoint.js +7 -9
  79. package/es-modules/Extensions/Annotations/NavigationBindings.js +6 -3
  80. package/es-modules/Extensions/Annotations/NavigationBindingsUtilities.js +31 -4
  81. package/es-modules/Extensions/Annotations/Popup/Popup.js +3 -2
  82. package/es-modules/Extensions/Annotations/Popup/PopupAnnotations.js +6 -8
  83. package/es-modules/Extensions/Annotations/Types/CrookedLine.js +4 -4
  84. package/es-modules/Extensions/Annotations/Types/Measure.js +28 -10
  85. package/es-modules/Extensions/Annotations/Types/TimeCycles.js +4 -2
  86. package/es-modules/Extensions/Annotations/Types/Tunnel.js +3 -1
  87. package/es-modules/Extensions/Annotations/Types/VerticalLine.js +3 -3
  88. package/es-modules/Extensions/Boost/Boost.js +13 -0
  89. package/es-modules/Extensions/Boost/BoostChart.js +11 -4
  90. package/es-modules/Extensions/Boost/BoostSeries.js +17 -11
  91. package/es-modules/Extensions/Boost/WGLRenderer.js +9 -6
  92. package/es-modules/Extensions/Boost/WGLShader.js +3 -3
  93. package/es-modules/Extensions/BoostCanvas.js +2 -2
  94. package/es-modules/Extensions/BorderRadius.js +12 -10
  95. package/es-modules/Extensions/Breadcrumbs/Breadcrumbs.js +6 -5
  96. package/es-modules/Extensions/DataGrouping/DataGrouping.js +2 -2
  97. package/es-modules/Extensions/DataGrouping/DataGroupingAxisComposition.js +4 -3
  98. package/es-modules/Extensions/DataGrouping/DataGroupingSeriesComposition.js +2 -2
  99. package/es-modules/Extensions/DraggablePoints/DragDropProps.js +2 -3
  100. package/es-modules/Extensions/DraggablePoints/DraggableChart.js +1 -2
  101. package/es-modules/Extensions/Drilldown/Drilldown.js +1 -2
  102. package/es-modules/Extensions/Drilldown/DrilldownSeries.js +1 -2
  103. package/es-modules/Extensions/ExportData/ExportData.js +21 -16
  104. package/es-modules/Extensions/Exporting/Exporting.js +28 -28
  105. package/es-modules/Extensions/Exporting/ExportingDefaults.js +32 -0
  106. package/es-modules/Extensions/MarkerClusters/MarkerClusterScatter.js +1 -2
  107. package/es-modules/Extensions/MarkerClusters/MarkerClusters.js +1 -2
  108. package/es-modules/Extensions/MouseWheelZoom/MouseWheelZoom.js +2 -2
  109. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +31 -4
  110. package/es-modules/Extensions/Pane/PaneComposition.js +2 -2
  111. package/es-modules/Extensions/Pane/PaneDefaults.js +1 -1
  112. package/es-modules/Extensions/ParallelCoordinates/ParallelAxis.js +2 -2
  113. package/es-modules/Extensions/ParallelCoordinates/ParallelCoordinates.js +3 -0
  114. package/es-modules/Extensions/PatternFill.js +7 -5
  115. package/es-modules/Extensions/PriceIndication.js +5 -4
  116. package/es-modules/Extensions/ScrollablePlotArea.js +8 -2
  117. package/es-modules/Extensions/SeriesLabel/SeriesLabel.js +8 -9
  118. package/es-modules/Extensions/Sonification/MIDI.js +2 -3
  119. package/es-modules/Extensions/Sonification/Sonification.js +2 -2
  120. package/es-modules/Extensions/Sonification/SonificationSpeaker.js +3 -2
  121. package/es-modules/Extensions/Sonification/SynthPatch.js +4 -4
  122. package/es-modules/Extensions/Sonification/TimelineFromChart.js +11 -11
  123. package/es-modules/Gantt/Legacy.js +2 -2
  124. package/es-modules/Gantt/Pathfinder.js +3 -3
  125. package/es-modules/Gantt/PathfinderAlgorithms.js +4 -3
  126. package/es-modules/Gantt/Tree.js +1 -1
  127. package/es-modules/Maps/GeoJSONComposition.js +14 -1
  128. package/es-modules/Maps/MapNavigation.js +4 -4
  129. package/es-modules/Maps/MapPointer.js +2 -2
  130. package/es-modules/Maps/MapView.js +3 -3
  131. package/es-modules/Series/ArcDiagram/ArcDiagramSeries.js +8 -6
  132. package/es-modules/Series/Area/AreaSeries.js +4 -5
  133. package/es-modules/Series/AreaRange/AreaRangeSeries.js +87 -147
  134. package/es-modules/Series/AreaRange/AreaRangeSeriesDefaults.js +42 -4
  135. package/es-modules/Series/Bellcurve/BellcurveSeries.js +10 -6
  136. package/es-modules/Series/BoxPlot/BoxPlotSeries.js +40 -32
  137. package/es-modules/Series/BoxPlot/BoxPlotSeriesDefaults.js +33 -1
  138. package/es-modules/Series/Bubble/BubbleLegendItem.js +10 -6
  139. package/es-modules/Series/Bubble/BubbleSeries.js +25 -9
  140. package/es-modules/Series/Bullet/BulletSeries.js +17 -10
  141. package/es-modules/Series/Candlestick/CandlestickSeries.js +3 -3
  142. package/es-modules/Series/CenteredUtilities.js +12 -9
  143. package/es-modules/Series/ColorMapComposition.js +7 -4
  144. package/es-modules/Series/Column/ColumnPoint.js +2 -0
  145. package/es-modules/Series/Column/ColumnSeries.js +14 -14
  146. package/es-modules/Series/Column/ColumnSeriesDefaults.js +4 -2
  147. package/es-modules/Series/Column3D/Column3DComposition.js +22 -19
  148. package/es-modules/Series/ColumnPyramid/ColumnPyramidPoint.js +18 -0
  149. package/es-modules/Series/ColumnPyramid/ColumnPyramidPointOptions.js +12 -0
  150. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +7 -6
  151. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeriesOptions.js +12 -0
  152. package/es-modules/Series/ColumnRange/ColumnRangePoint.js +2 -0
  153. package/es-modules/Series/ColumnRange/ColumnRangePointOptions.js +12 -0
  154. package/es-modules/Series/ColumnRange/ColumnRangeSeries.js +13 -144
  155. package/es-modules/Series/ColumnRange/ColumnRangeSeriesDefaults.js +148 -0
  156. package/es-modules/Series/ColumnRange/ColumnRangeSeriesOptions.js +12 -0
  157. package/es-modules/Series/Contour/ContourPoint.js +2 -0
  158. package/es-modules/Series/Contour/ContourSeries.js +1 -0
  159. package/es-modules/Series/Contour/ContourSeriesDefaults.js +7 -0
  160. package/es-modules/Series/Contour/ContourShader.js +9 -1
  161. package/es-modules/Series/CrossSymbol.js +3 -2
  162. package/es-modules/Series/Cylinder/CylinderComposition.js +12 -12
  163. package/es-modules/Series/Cylinder/CylinderPoint.js +2 -0
  164. package/es-modules/Series/Cylinder/CylinderPointOptions.js +15 -0
  165. package/es-modules/Series/Cylinder/CylinderSeries.js +2 -1
  166. package/es-modules/Series/Cylinder/CylinderSeriesOptions.js +15 -0
  167. package/es-modules/Series/Cylinder/SVGElement3DCylinder.js +2 -0
  168. package/es-modules/Series/DataModifyComposition.js +9 -7
  169. package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +3 -1
  170. package/es-modules/Series/DependencyWheel/DependencyWheelPointOptions.js +14 -0
  171. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +8 -8
  172. package/es-modules/Series/DependencyWheel/DependencyWheelSeriesOptions.js +14 -0
  173. package/es-modules/Series/DerivedComposition.js +9 -8
  174. package/es-modules/Series/DotPlot/DotPlotPoint.js +18 -0
  175. package/es-modules/Series/DotPlot/DotPlotPointOptions.js +12 -0
  176. package/es-modules/Series/DotPlot/DotPlotSeries.js +6 -4
  177. package/es-modules/Series/DotPlot/DotPlotSeriesOptions.js +12 -0
  178. package/es-modules/Series/DragNodesComposition.js +11 -8
  179. package/es-modules/Series/DrawPointUtilities.js +3 -1
  180. package/es-modules/Series/Dumbbell/DumbbellPoint.js +19 -6
  181. package/es-modules/Series/Dumbbell/DumbbellPointOptions.js +12 -0
  182. package/es-modules/Series/Dumbbell/DumbbellSeries.js +33 -15
  183. package/es-modules/Series/Dumbbell/DumbbellSeriesOptions.js +12 -0
  184. package/es-modules/Series/ErrorBar/ErrorBarPoint.js +18 -0
  185. package/es-modules/Series/ErrorBar/ErrorBarPointOptions.js +12 -0
  186. package/es-modules/Series/ErrorBar/ErrorBarSeries.js +6 -9
  187. package/es-modules/Series/ErrorBar/ErrorBarSeriesDefaults.js +15 -1
  188. package/es-modules/Series/ErrorBar/ErrorBarSeriesOptions.js +12 -0
  189. package/es-modules/Series/Flags/FlagsSeries.js +5 -14
  190. package/es-modules/Series/Flags/FlagsSeriesDefaults.js +2 -1
  191. package/es-modules/Series/FlowMap/FlowMapPoint.js +5 -3
  192. package/es-modules/Series/FlowMap/FlowMapSeries.js +17 -9
  193. package/es-modules/Series/Funnel/FunnelSeries.js +25 -26
  194. package/es-modules/Series/Funnel/FunnelSeriesDefaults.js +12 -0
  195. package/es-modules/Series/Funnel3D/Funnel3DSeries.js +7 -5
  196. package/es-modules/Series/Gantt/GanttSeries.js +2 -1
  197. package/es-modules/Series/Gauge/GaugeSeries.js +2 -2
  198. package/es-modules/Series/GeoHeatmap/GeoHeatmapSeries.js +9 -9
  199. package/es-modules/Series/GraphLayoutComposition.js +3 -3
  200. package/es-modules/Series/Heatmap/HeatmapPoint.js +6 -6
  201. package/es-modules/Series/Heatmap/HeatmapPointOptions.js +12 -0
  202. package/es-modules/Series/Heatmap/HeatmapSeries.js +13 -13
  203. package/es-modules/Series/Heatmap/HeatmapSeriesOptions.js +12 -0
  204. package/es-modules/Series/Histogram/HistogramPoint.js +17 -0
  205. package/es-modules/Series/Histogram/HistogramPointOptions.js +12 -0
  206. package/es-modules/Series/Histogram/HistogramSeries.js +15 -3
  207. package/es-modules/Series/Histogram/HistogramSeriesOptions.js +12 -0
  208. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +9 -9
  209. package/es-modules/Series/InterpolationUtilities.js +5 -5
  210. package/es-modules/Series/Item/ItemPointOptions.js +14 -0
  211. package/es-modules/Series/Item/ItemSeries.js +18 -6
  212. package/es-modules/Series/Item/ItemSeriesOptions.js +14 -0
  213. package/es-modules/Series/Map/MapPoint.js +5 -3
  214. package/es-modules/Series/Map/MapSeries.js +6 -10
  215. package/es-modules/Series/Map/MapSeriesDefaults.js +11 -1
  216. package/es-modules/Series/Networkgraph/NetworkgraphPoint.js +3 -3
  217. package/es-modules/Series/Networkgraph/NetworkgraphSeries.js +14 -9
  218. package/es-modules/Series/Networkgraph/NetworkgraphSeriesDefaults.js +12 -0
  219. package/es-modules/Series/Networkgraph/ReingoldFruchtermanLayout.js +18 -9
  220. package/es-modules/Series/NodesComposition.js +9 -10
  221. package/es-modules/Series/OHLC/OHLCPoint.js +2 -2
  222. package/es-modules/Series/OHLC/OHLCSeries.js +1 -0
  223. package/es-modules/Series/Organization/OrganizationPoint.js +3 -2
  224. package/es-modules/Series/Organization/OrganizationSeries.js +29 -7
  225. package/es-modules/Series/Organization/OrganizationSeriesDefaults.js +11 -4
  226. package/es-modules/Series/PackedBubble/PackedBubbleLayout.js +3 -3
  227. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +5 -5
  228. package/es-modules/Series/Pictorial/PictorialSeries.js +4 -2
  229. package/es-modules/Series/Pie/PieDataLabel.js +2 -2
  230. package/es-modules/Series/Pie/PiePoint.js +3 -4
  231. package/es-modules/Series/Pie/PieSeries.js +3 -2
  232. package/es-modules/Series/Pie3D/Pie3DSeries.js +8 -4
  233. package/es-modules/Series/PolarComposition.js +13 -14
  234. package/es-modules/Series/Polygon/PolygonSeries.js +2 -2
  235. package/es-modules/Series/Polygon/PolygonSeriesDefaults.js +20 -0
  236. package/es-modules/Series/RangeDataLabel.js +128 -0
  237. package/es-modules/Series/Sankey/SankeySeries.js +13 -7
  238. package/es-modules/Series/Sankey/SankeySeriesDefaults.js +2 -2
  239. package/es-modules/Series/Scatter/ScatterSeries.js +6 -5
  240. package/es-modules/Series/Scatter/ScatterSeriesDefaults.js +2 -0
  241. package/es-modules/Series/SimulationSeriesUtilities.js +1 -2
  242. package/es-modules/Series/SolidGauge/SolidGaugeSeries.js +4 -4
  243. package/es-modules/Series/Spline/SplineSeries.js +5 -5
  244. package/es-modules/Series/Sunburst/SunburstSeriesDefaults.js +8 -0
  245. package/es-modules/Series/TiledWebMap/TiledWebMapSeries.js +20 -12
  246. package/es-modules/Series/Tilemap/TilemapSeriesDefaults.js +2 -1
  247. package/es-modules/Series/Tilemap/TilemapShapes.js +2 -2
  248. package/es-modules/Series/Timeline/TimelinePoint.js +2 -2
  249. package/es-modules/Series/Timeline/TimelineSeries.js +13 -6
  250. package/es-modules/Series/TreeUtilities.js +16 -7
  251. package/es-modules/Series/Treegraph/TreegraphLink.js +2 -2
  252. package/es-modules/Series/Treegraph/TreegraphSeries.js +22 -13
  253. package/es-modules/Series/Treemap/TreemapPoint.js +2 -2
  254. package/es-modules/Series/Treemap/TreemapSeries.js +14 -11
  255. package/es-modules/Series/Treemap/TreemapSeriesDefaults.js +22 -1
  256. package/es-modules/Series/VariablePie/VariablePieSeries.js +6 -4
  257. package/es-modules/Series/VariablePie/VariablePieSeriesDefaults.js +3 -2
  258. package/es-modules/Series/Variwide/VariwideSeries.js +2 -2
  259. package/es-modules/Series/Vector/VectorSeries.js +7 -9
  260. package/es-modules/Series/Venn/VennSeries.js +3 -4
  261. package/es-modules/Series/Waterfall/WaterfallSeries.js +3 -3
  262. package/es-modules/Series/Windbarb/WindbarbSeries.js +8 -10
  263. package/es-modules/Series/XRange/XRangeSeries.js +8 -8
  264. package/es-modules/Shared/TimeBase.js +13 -8
  265. package/es-modules/Shared/Utilities.js +9 -7
  266. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +3 -3
  267. package/es-modules/Stock/Indicators/DPO/DPOIndicator.js +4 -3
  268. package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +1 -1
  269. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +2 -2
  270. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +1 -2
  271. package/es-modules/Stock/Navigator/ChartNavigatorComposition.js +4 -4
  272. package/es-modules/Stock/Navigator/Navigator.js +26 -26
  273. package/es-modules/Stock/Navigator/NavigatorDefaults.js +9 -2
  274. package/es-modules/Stock/Navigator/NavigatorSymbols.js +2 -1
  275. package/es-modules/Stock/Navigator/StandaloneNavigator.js +55 -14
  276. package/es-modules/Stock/RangeSelector/RangeSelector.js +15 -11
  277. package/es-modules/Stock/RangeSelector/RangeSelectorComposition.js +3 -3
  278. package/es-modules/Stock/Scrollbar/Scrollbar.js +8 -7
  279. package/es-modules/Stock/StockTools/StockToolbar.js +6 -6
  280. package/es-modules/Stock/StockTools/StockTools.js +2 -2
  281. package/es-modules/Stock/StockTools/StockToolsBindings.js +7 -7
  282. package/es-modules/Stock/StockTools/StockToolsGui.js +6 -4
  283. package/es-modules/masters/highcharts-3d.src.js +1 -1
  284. package/es-modules/masters/highcharts-autoload.src.js +1 -1
  285. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  286. package/es-modules/masters/highcharts-more.src.js +1 -1
  287. package/es-modules/masters/highcharts.src.js +13 -8
  288. package/es-modules/masters/highmaps.src.js +1 -1
  289. package/es-modules/masters/highstock.src.js +1 -1
  290. package/es-modules/masters/i18n/fr-FR.src.d.ts +1 -1
  291. package/es-modules/masters/i18n/fr-FR.src.js +1 -1
  292. package/es-modules/masters/i18n/nb-NO.src.d.ts +1 -1
  293. package/es-modules/masters/i18n/nb-NO.src.js +1 -1
  294. package/es-modules/masters/i18n/zh-CN.src.d.ts +1 -1
  295. package/es-modules/masters/i18n/zh-CN.src.js +1 -1
  296. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  297. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  298. package/es-modules/masters/indicators/ao.src.js +1 -1
  299. package/es-modules/masters/indicators/apo.src.js +1 -1
  300. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  301. package/es-modules/masters/indicators/aroon.src.js +1 -1
  302. package/es-modules/masters/indicators/atr.src.js +1 -1
  303. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  304. package/es-modules/masters/indicators/cci.src.js +1 -1
  305. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  306. package/es-modules/masters/indicators/cmf.src.js +1 -1
  307. package/es-modules/masters/indicators/cmo.src.js +1 -1
  308. package/es-modules/masters/indicators/dema.src.js +1 -1
  309. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  310. package/es-modules/masters/indicators/dmi.src.js +1 -1
  311. package/es-modules/masters/indicators/dpo.src.js +1 -1
  312. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  313. package/es-modules/masters/indicators/indicators-all.src.js +1 -1
  314. package/es-modules/masters/indicators/indicators.src.js +1 -1
  315. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  316. package/es-modules/masters/indicators/klinger.src.js +1 -1
  317. package/es-modules/masters/indicators/macd.src.js +1 -1
  318. package/es-modules/masters/indicators/mfi.src.js +1 -1
  319. package/es-modules/masters/indicators/momentum.src.js +1 -1
  320. package/es-modules/masters/indicators/natr.src.js +1 -1
  321. package/es-modules/masters/indicators/obv.src.js +1 -1
  322. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  323. package/es-modules/masters/indicators/ppo.src.js +1 -1
  324. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  325. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  326. package/es-modules/masters/indicators/psar.src.js +1 -1
  327. package/es-modules/masters/indicators/regressions.src.js +1 -1
  328. package/es-modules/masters/indicators/roc.src.js +1 -1
  329. package/es-modules/masters/indicators/rsi.src.js +1 -1
  330. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  331. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  332. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  333. package/es-modules/masters/indicators/tema.src.js +1 -1
  334. package/es-modules/masters/indicators/trendline.src.js +1 -1
  335. package/es-modules/masters/indicators/trix.src.js +1 -1
  336. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  337. package/es-modules/masters/indicators/vwap.src.js +1 -1
  338. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  339. package/es-modules/masters/indicators/wma.src.js +1 -1
  340. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  341. package/es-modules/masters/modules/accessibility.src.js +1 -1
  342. package/es-modules/masters/modules/annotations-advanced.src.js +1 -1
  343. package/es-modules/masters/modules/annotations.src.js +1 -1
  344. package/es-modules/masters/modules/arc-diagram.src.js +1 -1
  345. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  346. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  347. package/es-modules/masters/modules/boost.src.js +1 -1
  348. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  349. package/es-modules/masters/modules/bullet.src.js +1 -1
  350. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  351. package/es-modules/masters/modules/contour.src.js +1 -1
  352. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  353. package/es-modules/masters/modules/cylinder.src.js +1 -1
  354. package/es-modules/masters/modules/data-sorting.src.js +1 -1
  355. package/es-modules/masters/modules/data-tools.src.js +1 -1
  356. package/es-modules/masters/modules/data.src.js +1 -1
  357. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  358. package/es-modules/masters/modules/debugger.src.js +1 -1
  359. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  360. package/es-modules/masters/modules/dotplot.src.js +1 -1
  361. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  362. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  363. package/es-modules/masters/modules/drilldown.src.js +1 -1
  364. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  365. package/es-modules/masters/modules/export-data.src.js +1 -1
  366. package/es-modules/masters/modules/exporting.src.js +1 -1
  367. package/es-modules/masters/modules/flowmap.src.js +2 -1
  368. package/es-modules/masters/modules/full-screen.src.js +1 -1
  369. package/es-modules/masters/modules/funnel.src.js +1 -1
  370. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  371. package/es-modules/masters/modules/gantt.src.js +1 -1
  372. package/es-modules/masters/modules/geoheatmap.src.js +1 -1
  373. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  374. package/es-modules/masters/modules/heatmap.src.js +1 -1
  375. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  376. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  377. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  378. package/es-modules/masters/modules/item-series.src.js +1 -1
  379. package/es-modules/masters/modules/lollipop.src.js +1 -1
  380. package/es-modules/masters/modules/map.src.js +1 -1
  381. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  382. package/es-modules/masters/modules/mouse-wheel-zoom.src.js +1 -1
  383. package/es-modules/masters/modules/navigator.src.js +1 -1
  384. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  385. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  386. package/es-modules/masters/modules/non-cartesian-zoom.src.js +1 -1
  387. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  388. package/es-modules/masters/modules/organization.src.js +1 -1
  389. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  390. package/es-modules/masters/modules/pareto.src.js +1 -1
  391. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  392. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  393. package/es-modules/masters/modules/pictorial.src.js +1 -1
  394. package/es-modules/masters/modules/pointandfigure.src.js +1 -1
  395. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  396. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  397. package/es-modules/masters/modules/renko.src.js +1 -1
  398. package/es-modules/masters/modules/sankey.src.js +1 -1
  399. package/es-modules/masters/modules/series-label.src.js +1 -1
  400. package/es-modules/masters/modules/series-on-point.src.js +1 -1
  401. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  402. package/es-modules/masters/modules/sonification.src.js +1 -1
  403. package/es-modules/masters/modules/static-scale.src.js +1 -1
  404. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  405. package/es-modules/masters/modules/stock.src.js +1 -1
  406. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  407. package/es-modules/masters/modules/sunburst.src.js +3 -2
  408. package/es-modules/masters/modules/textpath.src.js +1 -1
  409. package/es-modules/masters/modules/tiledwebmap.src.js +1 -1
  410. package/es-modules/masters/modules/tilemap.src.js +1 -1
  411. package/es-modules/masters/modules/timeline.src.js +1 -1
  412. package/es-modules/masters/modules/treegraph.src.js +1 -1
  413. package/es-modules/masters/modules/treegrid.src.js +1 -1
  414. package/es-modules/masters/modules/treemap.src.js +1 -1
  415. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  416. package/es-modules/masters/modules/variwide.src.js +1 -1
  417. package/es-modules/masters/modules/vector.src.js +1 -1
  418. package/es-modules/masters/modules/venn.src.js +1 -1
  419. package/es-modules/masters/modules/windbarb.src.js +1 -1
  420. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  421. package/es-modules/masters/modules/xrange.src.js +1 -1
  422. package/es-modules/masters/standalone-navigator.src.js +1 -1
  423. package/es-modules/masters/themes/adaptive.src.js +1 -1
  424. package/es-modules/masters/themes/avocado.src.js +1 -1
  425. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  426. package/es-modules/masters/themes/grid-light.src.js +1 -1
  427. package/es-modules/masters/themes/high-contrast.src.js +1 -1
  428. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  429. package/es-modules/masters/themes/sunset.src.js +1 -1
  430. package/es-modules/tsconfig.tsbuildinfo +1 -1
  431. package/esm/highcharts-3d.js +2 -2
  432. package/esm/highcharts-3d.src.js +78 -55
  433. package/esm/highcharts-autoload.js +2 -2
  434. package/esm/highcharts-autoload.src.js +22 -8
  435. package/esm/highcharts-gantt.js +2 -2
  436. package/esm/highcharts-gantt.src.js +1 -24
  437. package/esm/highcharts-more.js +2 -2
  438. package/esm/highcharts-more.src.js +1198 -981
  439. package/esm/highcharts.js +5 -5
  440. package/esm/highcharts.src.js +702 -515
  441. package/esm/highmaps.js +2 -2
  442. package/esm/highmaps.src.js +1 -24
  443. package/esm/highstock.js +2 -2
  444. package/esm/highstock.src.js +1 -24
  445. package/esm/i18n/fr-FR.js +2 -2
  446. package/esm/i18n/fr-FR.src.js +22 -8
  447. package/esm/i18n/nb-NO.js +2 -2
  448. package/esm/i18n/nb-NO.src.js +22 -8
  449. package/esm/i18n/zh-CN.js +2 -2
  450. package/esm/i18n/zh-CN.src.js +22 -8
  451. package/esm/indicators/acceleration-bands.js +2 -2
  452. package/esm/indicators/acceleration-bands.src.js +22 -8
  453. package/esm/indicators/accumulation-distribution.js +2 -2
  454. package/esm/indicators/accumulation-distribution.src.js +22 -8
  455. package/esm/indicators/ao.js +2 -2
  456. package/esm/indicators/ao.src.js +22 -8
  457. package/esm/indicators/apo.js +2 -2
  458. package/esm/indicators/apo.src.js +22 -8
  459. package/esm/indicators/aroon-oscillator.js +2 -2
  460. package/esm/indicators/aroon-oscillator.src.js +22 -8
  461. package/esm/indicators/aroon.js +2 -2
  462. package/esm/indicators/aroon.src.js +24 -10
  463. package/esm/indicators/atr.js +2 -2
  464. package/esm/indicators/atr.src.js +22 -8
  465. package/esm/indicators/bollinger-bands.js +2 -2
  466. package/esm/indicators/bollinger-bands.src.js +22 -8
  467. package/esm/indicators/cci.js +2 -2
  468. package/esm/indicators/cci.src.js +22 -8
  469. package/esm/indicators/chaikin.js +2 -2
  470. package/esm/indicators/chaikin.src.js +22 -8
  471. package/esm/indicators/cmf.js +2 -2
  472. package/esm/indicators/cmf.src.js +22 -8
  473. package/esm/indicators/cmo.js +2 -2
  474. package/esm/indicators/cmo.src.js +22 -8
  475. package/esm/indicators/dema.js +2 -2
  476. package/esm/indicators/dema.src.js +22 -8
  477. package/esm/indicators/disparity-index.js +2 -2
  478. package/esm/indicators/disparity-index.src.js +22 -8
  479. package/esm/indicators/dmi.js +2 -2
  480. package/esm/indicators/dmi.src.js +22 -8
  481. package/esm/indicators/dpo.js +2 -2
  482. package/esm/indicators/dpo.src.js +25 -10
  483. package/esm/indicators/ichimoku-kinko-hyo.js +2 -2
  484. package/esm/indicators/ichimoku-kinko-hyo.src.js +22 -8
  485. package/esm/indicators/indicators-all.js +2 -2
  486. package/esm/indicators/indicators-all.src.js +31 -17
  487. package/esm/indicators/indicators.js +2 -2
  488. package/esm/indicators/indicators.src.js +24 -10
  489. package/esm/indicators/keltner-channels.js +2 -2
  490. package/esm/indicators/keltner-channels.src.js +22 -8
  491. package/esm/indicators/klinger.js +2 -2
  492. package/esm/indicators/klinger.src.js +22 -8
  493. package/esm/indicators/macd.js +2 -2
  494. package/esm/indicators/macd.src.js +22 -8
  495. package/esm/indicators/mfi.js +2 -2
  496. package/esm/indicators/mfi.src.js +22 -8
  497. package/esm/indicators/momentum.js +2 -2
  498. package/esm/indicators/momentum.src.js +22 -8
  499. package/esm/indicators/natr.js +2 -2
  500. package/esm/indicators/natr.src.js +22 -8
  501. package/esm/indicators/obv.js +2 -2
  502. package/esm/indicators/obv.src.js +22 -8
  503. package/esm/indicators/pivot-points.js +2 -2
  504. package/esm/indicators/pivot-points.src.js +22 -8
  505. package/esm/indicators/ppo.js +2 -2
  506. package/esm/indicators/ppo.src.js +22 -8
  507. package/esm/indicators/price-channel.js +2 -2
  508. package/esm/indicators/price-channel.src.js +22 -8
  509. package/esm/indicators/price-envelopes.js +2 -2
  510. package/esm/indicators/price-envelopes.src.js +22 -8
  511. package/esm/indicators/psar.js +2 -2
  512. package/esm/indicators/psar.src.js +22 -8
  513. package/esm/indicators/regressions.js +2 -2
  514. package/esm/indicators/regressions.src.js +22 -8
  515. package/esm/indicators/roc.js +2 -2
  516. package/esm/indicators/roc.src.js +22 -8
  517. package/esm/indicators/rsi.js +2 -2
  518. package/esm/indicators/rsi.src.js +23 -9
  519. package/esm/indicators/slow-stochastic.js +2 -2
  520. package/esm/indicators/slow-stochastic.src.js +22 -8
  521. package/esm/indicators/stochastic.js +2 -2
  522. package/esm/indicators/stochastic.src.js +22 -8
  523. package/esm/indicators/supertrend.js +2 -2
  524. package/esm/indicators/supertrend.src.js +22 -8
  525. package/esm/indicators/tema.js +2 -2
  526. package/esm/indicators/tema.src.js +22 -8
  527. package/esm/indicators/trendline.js +2 -2
  528. package/esm/indicators/trendline.src.js +22 -8
  529. package/esm/indicators/trix.js +2 -2
  530. package/esm/indicators/trix.src.js +22 -8
  531. package/esm/indicators/volume-by-price.js +2 -2
  532. package/esm/indicators/volume-by-price.src.js +23 -10
  533. package/esm/indicators/vwap.js +2 -2
  534. package/esm/indicators/vwap.src.js +22 -8
  535. package/esm/indicators/williams-r.js +2 -2
  536. package/esm/indicators/williams-r.src.js +22 -8
  537. package/esm/indicators/wma.js +2 -2
  538. package/esm/indicators/wma.src.js +22 -8
  539. package/esm/indicators/zigzag.js +2 -2
  540. package/esm/indicators/zigzag.src.js +22 -8
  541. package/esm/modules/accessibility.js +2 -2
  542. package/esm/modules/accessibility.src.js +564 -92
  543. package/esm/modules/annotations-advanced.js +11 -11
  544. package/esm/modules/annotations-advanced.src.js +224 -162
  545. package/esm/modules/annotations.js +11 -11
  546. package/esm/modules/annotations.src.js +184 -144
  547. package/esm/modules/arc-diagram.js +2 -2
  548. package/esm/modules/arc-diagram.src.js +37 -22
  549. package/esm/modules/arrow-symbols.js +3 -3
  550. package/esm/modules/arrow-symbols.src.js +22 -8
  551. package/esm/modules/boost-canvas.js +2 -2
  552. package/esm/modules/boost-canvas.src.js +60 -30
  553. package/esm/modules/boost.js +2 -2
  554. package/esm/modules/boost.src.js +72 -29
  555. package/esm/modules/broken-axis.js +2 -2
  556. package/esm/modules/broken-axis.src.js +27 -12
  557. package/esm/modules/bullet.js +2 -2
  558. package/esm/modules/bullet.src.js +38 -17
  559. package/esm/modules/coloraxis.js +2 -2
  560. package/esm/modules/coloraxis.src.js +47 -21
  561. package/esm/modules/contour.js +3 -3
  562. package/esm/modules/contour.src.js +46 -13
  563. package/esm/modules/current-date-indicator.js +2 -2
  564. package/esm/modules/current-date-indicator.src.js +22 -8
  565. package/esm/modules/cylinder.js +2 -2
  566. package/esm/modules/cylinder.src.js +46 -28
  567. package/esm/modules/data-sorting.js +2 -2
  568. package/esm/modules/data-sorting.src.js +22 -8
  569. package/esm/modules/data-tools.js +2 -2
  570. package/esm/modules/data-tools.src.js +44 -13
  571. package/esm/modules/data.js +4 -4
  572. package/esm/modules/data.src.js +23 -9
  573. package/esm/modules/datagrouping.js +2 -2
  574. package/esm/modules/datagrouping.src.js +28 -13
  575. package/esm/modules/debugger.js +2 -2
  576. package/esm/modules/debugger.src.js +22 -8
  577. package/esm/modules/dependency-wheel.js +2 -2
  578. package/esm/modules/dependency-wheel.src.js +428 -17
  579. package/esm/modules/dotplot.js +2 -2
  580. package/esm/modules/dotplot.src.js +27 -11
  581. package/esm/modules/drag-panes.js +2 -2
  582. package/esm/modules/drag-panes.src.js +22 -8
  583. package/esm/modules/draggable-points.js +2 -2
  584. package/esm/modules/draggable-points.src.js +24 -12
  585. package/esm/modules/drilldown.js +2 -2
  586. package/esm/modules/drilldown.src.js +38 -25
  587. package/esm/modules/dumbbell.js +2 -2
  588. package/esm/modules/dumbbell.src.js +72 -27
  589. package/esm/modules/export-data.js +2 -2
  590. package/esm/modules/export-data.src.js +42 -23
  591. package/esm/modules/exporting.js +2 -2
  592. package/esm/modules/exporting.src.js +83 -37
  593. package/esm/modules/flowmap.js +3 -2
  594. package/esm/modules/flowmap.src.js +43 -18
  595. package/esm/modules/full-screen.js +2 -2
  596. package/esm/modules/full-screen.src.js +22 -8
  597. package/esm/modules/funnel.js +2 -2
  598. package/esm/modules/funnel.src.js +73 -42
  599. package/esm/modules/funnel3d.js +2 -2
  600. package/esm/modules/funnel3d.src.js +35 -20
  601. package/esm/modules/gantt.js +2 -2
  602. package/esm/modules/gantt.src.js +542 -100
  603. package/esm/modules/geoheatmap.js +2 -2
  604. package/esm/modules/geoheatmap.src.js +35 -21
  605. package/esm/modules/grid-axis.js +2 -2
  606. package/esm/modules/grid-axis.src.js +33 -12
  607. package/esm/modules/heatmap.js +2 -2
  608. package/esm/modules/heatmap.src.js +50 -33
  609. package/esm/modules/heikinashi.js +2 -2
  610. package/esm/modules/heikinashi.src.js +22 -8
  611. package/esm/modules/histogram-bellcurve.js +2 -2
  612. package/esm/modules/histogram-bellcurve.src.js +56 -25
  613. package/esm/modules/hollowcandlestick.js +2 -2
  614. package/esm/modules/hollowcandlestick.src.js +31 -17
  615. package/esm/modules/item-series.js +2 -2
  616. package/esm/modules/item-series.src.js +72 -13
  617. package/esm/modules/lollipop.js +2 -2
  618. package/esm/modules/lollipop.src.js +22 -8
  619. package/esm/modules/map.js +2 -2
  620. package/esm/modules/map.src.js +148 -91
  621. package/esm/modules/marker-clusters.js +2 -2
  622. package/esm/modules/marker-clusters.src.js +25 -13
  623. package/esm/modules/mouse-wheel-zoom.js +2 -2
  624. package/esm/modules/mouse-wheel-zoom.src.js +54 -13
  625. package/esm/modules/navigator.js +2 -2
  626. package/esm/modules/navigator.src.js +534 -74
  627. package/esm/modules/networkgraph.js +2 -2
  628. package/esm/modules/networkgraph.src.js +87 -46
  629. package/esm/modules/no-data-to-display.js +2 -2
  630. package/esm/modules/no-data-to-display.src.js +22 -8
  631. package/esm/modules/non-cartesian-zoom.js +2 -2
  632. package/esm/modules/non-cartesian-zoom.src.js +22 -8
  633. package/esm/modules/offline-exporting.js +2 -2
  634. package/esm/modules/offline-exporting.src.js +53 -12
  635. package/esm/modules/organization.js +4 -2
  636. package/esm/modules/organization.src.js +63 -19
  637. package/esm/modules/parallel-coordinates.js +2 -2
  638. package/esm/modules/parallel-coordinates.src.js +26 -9
  639. package/esm/modules/pareto.js +2 -2
  640. package/esm/modules/pareto.src.js +31 -16
  641. package/esm/modules/pathfinder.js +2 -2
  642. package/esm/modules/pathfinder.src.js +28 -13
  643. package/esm/modules/pattern-fill.js +2 -2
  644. package/esm/modules/pattern-fill.src.js +28 -12
  645. package/esm/modules/pictorial.js +2 -2
  646. package/esm/modules/pictorial.src.js +36 -19
  647. package/esm/modules/pointandfigure.js +2 -2
  648. package/esm/modules/pointandfigure.src.js +26 -11
  649. package/esm/modules/price-indicator.js +2 -2
  650. package/esm/modules/price-indicator.src.js +26 -11
  651. package/esm/modules/pyramid3d.js +2 -2
  652. package/esm/modules/pyramid3d.src.js +22 -8
  653. package/esm/modules/renko.js +2 -2
  654. package/esm/modules/renko.src.js +22 -8
  655. package/esm/modules/sankey.js +2 -2
  656. package/esm/modules/sankey.src.js +59 -31
  657. package/esm/modules/series-label.js +2 -2
  658. package/esm/modules/series-label.src.js +31 -18
  659. package/esm/modules/series-on-point.js +2 -2
  660. package/esm/modules/series-on-point.src.js +23 -9
  661. package/esm/modules/solid-gauge.js +2 -2
  662. package/esm/modules/solid-gauge.src.js +40 -20
  663. package/esm/modules/sonification.js +2 -2
  664. package/esm/modules/sonification.src.js +45 -30
  665. package/esm/modules/static-scale.js +2 -2
  666. package/esm/modules/static-scale.src.js +22 -8
  667. package/esm/modules/stock-tools.js +3 -3
  668. package/esm/modules/stock-tools.src.js +73 -27
  669. package/esm/modules/stock.js +2 -2
  670. package/esm/modules/stock.src.js +554 -122
  671. package/esm/modules/streamgraph.js +2 -2
  672. package/esm/modules/streamgraph.src.js +22 -8
  673. package/esm/modules/sunburst.js +2 -2
  674. package/esm/modules/sunburst.src.js +110 -45
  675. package/esm/modules/textpath.js +2 -2
  676. package/esm/modules/textpath.src.js +22 -8
  677. package/esm/modules/tiledwebmap.js +3 -3
  678. package/esm/modules/tiledwebmap.src.js +44 -19
  679. package/esm/modules/tilemap.js +2 -2
  680. package/esm/modules/tilemap.src.js +27 -12
  681. package/esm/modules/timeline.js +2 -2
  682. package/esm/modules/timeline.src.js +35 -14
  683. package/esm/modules/treegraph.js +2 -2
  684. package/esm/modules/treegraph.src.js +59 -27
  685. package/esm/modules/treegrid.js +2 -2
  686. package/esm/modules/treegrid.src.js +58 -27
  687. package/esm/modules/treemap.js +2 -2
  688. package/esm/modules/treemap.src.js +89 -36
  689. package/esm/modules/variable-pie.js +2 -2
  690. package/esm/modules/variable-pie.src.js +30 -13
  691. package/esm/modules/variwide.js +2 -2
  692. package/esm/modules/variwide.src.js +23 -9
  693. package/esm/modules/vector.js +2 -2
  694. package/esm/modules/vector.src.js +28 -16
  695. package/esm/modules/venn.js +2 -2
  696. package/esm/modules/venn.src.js +28 -13
  697. package/esm/modules/windbarb.js +2 -2
  698. package/esm/modules/windbarb.src.js +29 -17
  699. package/esm/modules/wordcloud.js +2 -2
  700. package/esm/modules/wordcloud.src.js +25 -9
  701. package/esm/modules/xrange.js +2 -2
  702. package/esm/modules/xrange.src.js +29 -15
  703. package/esm/standalone-navigator.js +5 -5
  704. package/esm/standalone-navigator.src.js +808 -570
  705. package/esm/themes/adaptive.js +3 -3
  706. package/esm/themes/adaptive.src.js +22 -8
  707. package/esm/themes/avocado.js +2 -2
  708. package/esm/themes/avocado.src.js +22 -8
  709. package/esm/themes/dark-unica.js +2 -2
  710. package/esm/themes/dark-unica.src.js +22 -8
  711. package/esm/themes/grid-light.js +2 -2
  712. package/esm/themes/grid-light.src.js +22 -8
  713. package/esm/themes/high-contrast.js +2 -2
  714. package/esm/themes/high-contrast.src.js +22 -8
  715. package/esm/themes/sand-signika.js +2 -2
  716. package/esm/themes/sand-signika.src.js +22 -8
  717. package/esm/themes/sunset.js +2 -2
  718. package/esm/themes/sunset.src.js +22 -8
  719. package/highcharts-3d.js +2 -2
  720. package/highcharts-3d.src.js +116 -92
  721. package/highcharts-autoload.d.ts +15 -5
  722. package/highcharts-autoload.js +4 -4
  723. package/highcharts-autoload.src.d.ts +15 -5
  724. package/highcharts-autoload.src.js +724 -499
  725. package/highcharts-gantt.js +4 -4
  726. package/highcharts-gantt.src.js +851 -590
  727. package/highcharts-more.d.ts +7 -3
  728. package/highcharts-more.js +2 -2
  729. package/highcharts-more.src.d.ts +7 -3
  730. package/highcharts-more.src.js +1313 -1095
  731. package/highcharts.d.ts +34795 -25647
  732. package/highcharts.js +4 -4
  733. package/highcharts.src.d.ts +34795 -25647
  734. package/highcharts.src.js +723 -498
  735. package/highmaps.js +4 -4
  736. package/highmaps.src.js +863 -583
  737. package/highstock.js +4 -4
  738. package/highstock.src.js +899 -619
  739. package/i18n/fr-FR.js +2 -2
  740. package/i18n/fr-FR.src.js +32 -16
  741. package/i18n/nb-NO.js +2 -2
  742. package/i18n/nb-NO.src.js +32 -16
  743. package/i18n/zh-CN.js +2 -2
  744. package/i18n/zh-CN.src.js +32 -16
  745. package/indicators/acceleration-bands.js +2 -2
  746. package/indicators/acceleration-bands.src.js +31 -16
  747. package/indicators/accumulation-distribution.js +2 -2
  748. package/indicators/accumulation-distribution.src.js +31 -16
  749. package/indicators/ao.js +2 -2
  750. package/indicators/ao.src.js +31 -16
  751. package/indicators/apo.js +2 -2
  752. package/indicators/apo.src.js +31 -16
  753. package/indicators/aroon-oscillator.js +2 -2
  754. package/indicators/aroon-oscillator.src.js +31 -16
  755. package/indicators/aroon.js +2 -2
  756. package/indicators/aroon.src.js +33 -18
  757. package/indicators/atr.js +2 -2
  758. package/indicators/atr.src.js +31 -16
  759. package/indicators/bollinger-bands.js +2 -2
  760. package/indicators/bollinger-bands.src.js +31 -16
  761. package/indicators/cci.js +2 -2
  762. package/indicators/cci.src.js +31 -16
  763. package/indicators/chaikin.js +2 -2
  764. package/indicators/chaikin.src.js +31 -16
  765. package/indicators/cmf.js +2 -2
  766. package/indicators/cmf.src.js +31 -16
  767. package/indicators/cmo.js +2 -2
  768. package/indicators/cmo.src.js +31 -16
  769. package/indicators/dema.js +2 -2
  770. package/indicators/dema.src.js +31 -16
  771. package/indicators/disparity-index.js +2 -2
  772. package/indicators/disparity-index.src.js +31 -16
  773. package/indicators/dmi.js +2 -2
  774. package/indicators/dmi.src.js +31 -16
  775. package/indicators/dpo.js +2 -2
  776. package/indicators/dpo.src.js +34 -18
  777. package/indicators/ichimoku-kinko-hyo.js +2 -2
  778. package/indicators/ichimoku-kinko-hyo.src.js +41 -26
  779. package/indicators/indicators-all.js +2 -2
  780. package/indicators/indicators-all.src.js +52 -37
  781. package/indicators/indicators.js +2 -2
  782. package/indicators/indicators.src.js +39 -24
  783. package/indicators/keltner-channels.js +2 -2
  784. package/indicators/keltner-channels.src.js +31 -16
  785. package/indicators/klinger.js +2 -2
  786. package/indicators/klinger.src.js +31 -16
  787. package/indicators/macd.js +2 -2
  788. package/indicators/macd.src.js +31 -16
  789. package/indicators/mfi.js +2 -2
  790. package/indicators/mfi.src.js +31 -16
  791. package/indicators/momentum.js +2 -2
  792. package/indicators/momentum.src.js +31 -16
  793. package/indicators/natr.js +2 -2
  794. package/indicators/natr.src.js +31 -16
  795. package/indicators/obv.js +2 -2
  796. package/indicators/obv.src.js +31 -16
  797. package/indicators/pivot-points.js +2 -2
  798. package/indicators/pivot-points.src.js +31 -16
  799. package/indicators/ppo.js +2 -2
  800. package/indicators/ppo.src.js +31 -16
  801. package/indicators/price-channel.js +2 -2
  802. package/indicators/price-channel.src.js +31 -16
  803. package/indicators/price-envelopes.js +2 -2
  804. package/indicators/price-envelopes.src.js +31 -16
  805. package/indicators/psar.js +2 -2
  806. package/indicators/psar.src.js +31 -16
  807. package/indicators/regressions.js +2 -2
  808. package/indicators/regressions.src.js +31 -16
  809. package/indicators/roc.js +2 -2
  810. package/indicators/roc.src.js +31 -16
  811. package/indicators/rsi.js +2 -2
  812. package/indicators/rsi.src.js +32 -17
  813. package/indicators/slow-stochastic.js +2 -2
  814. package/indicators/slow-stochastic.src.js +31 -16
  815. package/indicators/stochastic.js +2 -2
  816. package/indicators/stochastic.src.js +31 -16
  817. package/indicators/supertrend.js +2 -2
  818. package/indicators/supertrend.src.js +31 -16
  819. package/indicators/tema.js +2 -2
  820. package/indicators/tema.src.js +31 -16
  821. package/indicators/trendline.js +2 -2
  822. package/indicators/trendline.src.js +31 -16
  823. package/indicators/trix.js +2 -2
  824. package/indicators/trix.src.js +31 -16
  825. package/indicators/volume-by-price.js +2 -2
  826. package/indicators/volume-by-price.src.js +32 -18
  827. package/indicators/vwap.js +2 -2
  828. package/indicators/vwap.src.js +31 -16
  829. package/indicators/williams-r.js +2 -2
  830. package/indicators/williams-r.src.js +31 -16
  831. package/indicators/wma.js +2 -2
  832. package/indicators/wma.src.js +31 -16
  833. package/indicators/zigzag.js +2 -2
  834. package/indicators/zigzag.src.js +31 -16
  835. package/modules/accessibility.d.ts +47 -0
  836. package/modules/accessibility.js +2 -2
  837. package/modules/accessibility.src.d.ts +47 -0
  838. package/modules/accessibility.src.js +603 -130
  839. package/modules/annotations-advanced.js +11 -11
  840. package/modules/annotations-advanced.src.js +246 -183
  841. package/modules/annotations.js +11 -11
  842. package/modules/annotations.src.js +206 -165
  843. package/modules/arc-diagram.js +2 -2
  844. package/modules/arc-diagram.src.js +58 -42
  845. package/modules/arrow-symbols.js +2 -2
  846. package/modules/arrow-symbols.src.js +28 -13
  847. package/modules/boost-canvas.js +2 -2
  848. package/modules/boost-canvas.src.js +69 -38
  849. package/modules/boost.js +2 -2
  850. package/modules/boost.src.js +81 -37
  851. package/modules/broken-axis.js +2 -2
  852. package/modules/broken-axis.src.js +36 -20
  853. package/modules/bullet.js +2 -2
  854. package/modules/bullet.src.js +50 -28
  855. package/modules/coloraxis.js +2 -2
  856. package/modules/coloraxis.src.js +65 -38
  857. package/modules/contour.js +5 -5
  858. package/modules/contour.src.js +91 -44
  859. package/modules/current-date-indicator.js +2 -2
  860. package/modules/current-date-indicator.src.js +28 -13
  861. package/modules/cylinder.js +2 -2
  862. package/modules/cylinder.src.js +67 -48
  863. package/modules/data-sorting.js +2 -2
  864. package/modules/data-sorting.src.js +28 -13
  865. package/modules/data-tools.js +2 -2
  866. package/modules/data-tools.src.js +50 -18
  867. package/modules/data.js +2 -2
  868. package/modules/data.src.js +50 -35
  869. package/modules/datagrouping.js +2 -2
  870. package/modules/datagrouping.src.js +42 -26
  871. package/modules/debugger.js +2 -2
  872. package/modules/debugger.src.js +28 -13
  873. package/modules/dependency-wheel.d.ts +7 -1
  874. package/modules/dependency-wheel.js +2 -2
  875. package/modules/dependency-wheel.src.d.ts +7 -1
  876. package/modules/dependency-wheel.src.js +440 -28
  877. package/modules/dotplot.js +2 -2
  878. package/modules/dotplot.src.js +36 -19
  879. package/modules/drag-panes.js +2 -2
  880. package/modules/drag-panes.src.js +28 -13
  881. package/modules/draggable-points.js +2 -2
  882. package/modules/draggable-points.src.js +30 -17
  883. package/modules/drilldown.js +2 -2
  884. package/modules/drilldown.src.js +49 -35
  885. package/modules/dumbbell.js +2 -2
  886. package/modules/dumbbell.src.js +86 -40
  887. package/modules/export-data.d.ts +66 -1
  888. package/modules/export-data.js +2 -2
  889. package/modules/export-data.src.d.ts +66 -1
  890. package/modules/export-data.src.js +56 -36
  891. package/modules/exporting.d.ts +0 -103
  892. package/modules/exporting.js +2 -2
  893. package/modules/exporting.src.d.ts +0 -103
  894. package/modules/exporting.src.js +97 -50
  895. package/modules/flowmap.js +3 -2
  896. package/modules/flowmap.src.js +52 -26
  897. package/modules/full-screen.js +2 -2
  898. package/modules/full-screen.src.js +31 -16
  899. package/modules/funnel.d.ts +3 -3
  900. package/modules/funnel.js +2 -2
  901. package/modules/funnel.src.d.ts +3 -3
  902. package/modules/funnel.src.js +82 -50
  903. package/modules/funnel3d.js +2 -2
  904. package/modules/funnel3d.src.js +56 -40
  905. package/modules/gantt.d.ts +47 -0
  906. package/modules/gantt.js +8 -8
  907. package/modules/gantt.src.d.ts +47 -0
  908. package/modules/gantt.src.js +602 -156
  909. package/modules/geoheatmap.d.ts +13 -12
  910. package/modules/geoheatmap.js +2 -2
  911. package/modules/geoheatmap.src.d.ts +13 -12
  912. package/modules/geoheatmap.src.js +44 -29
  913. package/modules/grid-axis.js +2 -2
  914. package/modules/grid-axis.src.js +42 -20
  915. package/modules/heatmap.d.ts +0 -12
  916. package/modules/heatmap.js +4 -4
  917. package/modules/heatmap.src.d.ts +0 -12
  918. package/modules/heatmap.src.js +102 -71
  919. package/modules/heikinashi.js +2 -2
  920. package/modules/heikinashi.src.js +31 -16
  921. package/modules/histogram-bellcurve.js +2 -2
  922. package/modules/histogram-bellcurve.src.js +70 -38
  923. package/modules/hollowcandlestick.js +2 -2
  924. package/modules/hollowcandlestick.src.js +45 -30
  925. package/modules/item-series.js +2 -2
  926. package/modules/item-series.src.js +81 -21
  927. package/modules/lollipop.js +2 -2
  928. package/modules/lollipop.src.js +36 -21
  929. package/modules/map.d.ts +0 -20
  930. package/modules/map.js +4 -4
  931. package/modules/map.src.d.ts +0 -20
  932. package/modules/map.src.js +212 -140
  933. package/modules/marker-clusters.js +2 -2
  934. package/modules/marker-clusters.src.js +31 -18
  935. package/modules/mouse-wheel-zoom.js +2 -2
  936. package/modules/mouse-wheel-zoom.src.js +60 -18
  937. package/modules/navigator.d.ts +47 -0
  938. package/modules/navigator.js +2 -2
  939. package/modules/navigator.src.d.ts +47 -0
  940. package/modules/navigator.src.js +556 -95
  941. package/modules/networkgraph.js +2 -2
  942. package/modules/networkgraph.src.js +99 -57
  943. package/modules/no-data-to-display.js +2 -2
  944. package/modules/no-data-to-display.src.js +31 -16
  945. package/modules/non-cartesian-zoom.js +2 -2
  946. package/modules/non-cartesian-zoom.src.js +28 -13
  947. package/modules/offline-exporting.js +2 -2
  948. package/modules/offline-exporting.src.js +67 -25
  949. package/modules/organization.js +4 -2
  950. package/modules/organization.src.js +75 -30
  951. package/modules/parallel-coordinates.js +2 -2
  952. package/modules/parallel-coordinates.src.js +37 -19
  953. package/modules/pareto.js +2 -2
  954. package/modules/pareto.src.js +45 -29
  955. package/modules/pathfinder.js +2 -2
  956. package/modules/pathfinder.src.js +37 -21
  957. package/modules/pattern-fill.js +2 -2
  958. package/modules/pattern-fill.src.js +34 -17
  959. package/modules/pictorial.js +2 -2
  960. package/modules/pictorial.src.js +62 -43
  961. package/modules/pointandfigure.js +2 -2
  962. package/modules/pointandfigure.src.js +35 -19
  963. package/modules/price-indicator.js +2 -2
  964. package/modules/price-indicator.src.js +32 -16
  965. package/modules/pyramid3d.js +2 -2
  966. package/modules/pyramid3d.src.js +31 -16
  967. package/modules/renko.js +2 -2
  968. package/modules/renko.src.js +34 -19
  969. package/modules/sankey.js +2 -2
  970. package/modules/sankey.src.js +80 -51
  971. package/modules/series-label.js +2 -2
  972. package/modules/series-label.src.js +42 -28
  973. package/modules/series-on-point.js +2 -2
  974. package/modules/series-on-point.src.js +40 -25
  975. package/modules/solid-gauge.d.ts +3 -3
  976. package/modules/solid-gauge.js +2 -2
  977. package/modules/solid-gauge.src.d.ts +3 -3
  978. package/modules/solid-gauge.src.js +54 -33
  979. package/modules/sonification.js +2 -2
  980. package/modules/sonification.src.js +56 -40
  981. package/modules/static-scale.js +2 -2
  982. package/modules/static-scale.src.js +28 -13
  983. package/modules/stock-tools.js +3 -3
  984. package/modules/stock-tools.src.js +90 -43
  985. package/modules/stock.d.ts +47 -0
  986. package/modules/stock.js +6 -6
  987. package/modules/stock.src.d.ts +47 -0
  988. package/modules/stock.src.js +650 -185
  989. package/modules/streamgraph.js +2 -2
  990. package/modules/streamgraph.src.js +31 -16
  991. package/modules/sunburst.js +2 -2
  992. package/modules/sunburst.src.js +137 -71
  993. package/modules/textpath.js +2 -2
  994. package/modules/textpath.src.js +28 -13
  995. package/modules/tiledwebmap.js +3 -3
  996. package/modules/tiledwebmap.src.js +65 -32
  997. package/modules/tilemap.js +2 -2
  998. package/modules/tilemap.src.js +41 -25
  999. package/modules/timeline.js +2 -2
  1000. package/modules/timeline.src.js +47 -25
  1001. package/modules/treegraph.js +2 -2
  1002. package/modules/treegraph.src.js +83 -50
  1003. package/modules/treegrid.js +2 -2
  1004. package/modules/treegrid.src.js +76 -44
  1005. package/modules/treemap.js +2 -2
  1006. package/modules/treemap.src.js +116 -62
  1007. package/modules/variable-pie.js +2 -2
  1008. package/modules/variable-pie.src.js +39 -21
  1009. package/modules/variwide.js +2 -2
  1010. package/modules/variwide.src.js +32 -17
  1011. package/modules/vector.js +2 -2
  1012. package/modules/vector.src.js +37 -24
  1013. package/modules/venn.js +2 -2
  1014. package/modules/venn.src.js +42 -26
  1015. package/modules/windbarb.js +2 -2
  1016. package/modules/windbarb.src.js +51 -38
  1017. package/modules/wordcloud.js +2 -2
  1018. package/modules/wordcloud.src.js +34 -17
  1019. package/modules/xrange.js +2 -2
  1020. package/modules/xrange.src.js +43 -28
  1021. package/options/abands.d.ts +722 -83
  1022. package/options/abands.src.d.ts +722 -83
  1023. package/options/ad.d.ts +381 -26
  1024. package/options/ad.src.d.ts +381 -26
  1025. package/options/ao.d.ts +744 -70
  1026. package/options/ao.src.d.ts +744 -70
  1027. package/options/apo.d.ts +381 -26
  1028. package/options/apo.src.d.ts +381 -26
  1029. package/options/arcdiagram.d.ts +80 -534
  1030. package/options/arcdiagram.src.d.ts +80 -534
  1031. package/options/area.d.ts +432 -129
  1032. package/options/area.src.d.ts +432 -129
  1033. package/options/arearange.d.ts +46 -4
  1034. package/options/arearange.src.d.ts +46 -4
  1035. package/options/areaspline.d.ts +141 -866
  1036. package/options/areaspline.src.d.ts +141 -866
  1037. package/options/areasplinerange.d.ts +221 -871
  1038. package/options/areasplinerange.src.d.ts +221 -871
  1039. package/options/aroon.d.ts +432 -124
  1040. package/options/aroon.src.d.ts +432 -124
  1041. package/options/aroonoscillator.d.ts +127 -689
  1042. package/options/aroonoscillator.src.d.ts +127 -689
  1043. package/options/atr.d.ts +381 -71
  1044. package/options/atr.src.d.ts +381 -71
  1045. package/options/bar.d.ts +103 -12
  1046. package/options/bar.src.d.ts +103 -12
  1047. package/options/bb.d.ts +87 -762
  1048. package/options/bb.src.d.ts +87 -762
  1049. package/options/bellcurve.d.ts +87 -364
  1050. package/options/bellcurve.src.d.ts +87 -364
  1051. package/options/boxplot.d.ts +82 -13
  1052. package/options/boxplot.src.d.ts +82 -13
  1053. package/options/bubble.d.ts +83 -874
  1054. package/options/bubble.src.d.ts +83 -874
  1055. package/options/bullet.d.ts +354 -717
  1056. package/options/bullet.src.d.ts +354 -717
  1057. package/options/candlestick.d.ts +99 -1214
  1058. package/options/candlestick.src.d.ts +99 -1214
  1059. package/options/cci.d.ts +381 -26
  1060. package/options/cci.src.d.ts +381 -26
  1061. package/options/chaikin.d.ts +728 -83
  1062. package/options/chaikin.src.d.ts +728 -83
  1063. package/options/cmf.d.ts +381 -26
  1064. package/options/cmf.src.d.ts +381 -26
  1065. package/options/cmo.d.ts +730 -79
  1066. package/options/cmo.src.d.ts +730 -79
  1067. package/options/column.d.ts +1265 -99
  1068. package/options/column.src.d.ts +1265 -99
  1069. package/options/columnpyramid.d.ts +102 -1158
  1070. package/options/columnpyramid.src.d.ts +102 -1158
  1071. package/options/columnrange.d.ts +952 -95
  1072. package/options/columnrange.src.d.ts +952 -95
  1073. package/options/contour.d.ts +31 -443
  1074. package/options/contour.src.d.ts +31 -443
  1075. package/options/cylinder.d.ts +100 -12
  1076. package/options/cylinder.src.d.ts +100 -12
  1077. package/options/dema.d.ts +80 -736
  1078. package/options/dema.src.d.ts +80 -736
  1079. package/options/dependencywheel.d.ts +599 -218
  1080. package/options/dependencywheel.src.d.ts +599 -218
  1081. package/options/disparityindex.d.ts +84 -365
  1082. package/options/disparityindex.src.d.ts +84 -365
  1083. package/options/dmi.d.ts +86 -775
  1084. package/options/dmi.src.d.ts +86 -775
  1085. package/options/dpo.d.ts +83 -365
  1086. package/options/dpo.src.d.ts +83 -365
  1087. package/options/dumbbell.d.ts +27 -4
  1088. package/options/dumbbell.src.d.ts +27 -4
  1089. package/options/ema.d.ts +81 -703
  1090. package/options/ema.src.d.ts +81 -703
  1091. package/options/errorbar.d.ts +91 -1161
  1092. package/options/errorbar.src.d.ts +91 -1161
  1093. package/options/flags.d.ts +98 -1192
  1094. package/options/flags.src.d.ts +98 -1192
  1095. package/options/flowmap.d.ts +48 -373
  1096. package/options/flowmap.src.d.ts +48 -373
  1097. package/options/funnel.d.ts +40 -3
  1098. package/options/funnel.src.d.ts +40 -3
  1099. package/options/gantt.d.ts +37 -40
  1100. package/options/gantt.src.d.ts +37 -40
  1101. package/options/gauge.d.ts +398 -472
  1102. package/options/gauge.src.d.ts +398 -472
  1103. package/options/geoheatmap.d.ts +462 -63
  1104. package/options/geoheatmap.src.d.ts +462 -63
  1105. package/options/heatmap.d.ts +31 -380
  1106. package/options/heatmap.src.d.ts +31 -380
  1107. package/options/heikinashi.d.ts +20 -2
  1108. package/options/heikinashi.src.d.ts +20 -2
  1109. package/options/hlc.d.ts +20 -2
  1110. package/options/hlc.src.d.ts +20 -2
  1111. package/options/ikh.d.ts +750 -103
  1112. package/options/ikh.src.d.ts +750 -103
  1113. package/options/item.d.ts +34 -74
  1114. package/options/item.src.d.ts +34 -74
  1115. package/options/keltnerchannels.d.ts +87 -708
  1116. package/options/keltnerchannels.src.d.ts +87 -708
  1117. package/options/klinger.d.ts +34 -365
  1118. package/options/klinger.src.d.ts +34 -365
  1119. package/options/line.d.ts +151 -851
  1120. package/options/line.src.d.ts +151 -851
  1121. package/options/linearregression.d.ts +960 -85
  1122. package/options/linearregression.src.d.ts +960 -85
  1123. package/options/linearregressionangle.d.ts +96 -699
  1124. package/options/linearregressionangle.src.d.ts +96 -699
  1125. package/options/linearregressionintercept.d.ts +381 -26
  1126. package/options/linearregressionintercept.src.d.ts +381 -26
  1127. package/options/linearregressionslope.d.ts +381 -26
  1128. package/options/linearregressionslope.src.d.ts +381 -26
  1129. package/options/lollipop.d.ts +214 -851
  1130. package/options/lollipop.src.d.ts +214 -851
  1131. package/options/macd.d.ts +386 -83
  1132. package/options/macd.src.d.ts +386 -83
  1133. package/options/map.d.ts +470 -36
  1134. package/options/map.src.d.ts +470 -36
  1135. package/options/mapbubble.d.ts +43 -532
  1136. package/options/mapbubble.src.d.ts +43 -532
  1137. package/options/mapline.d.ts +135 -58
  1138. package/options/mapline.src.d.ts +135 -58
  1139. package/options/mappoint.d.ts +205 -283
  1140. package/options/mappoint.src.d.ts +205 -283
  1141. package/options/mfi.d.ts +772 -82
  1142. package/options/mfi.src.d.ts +772 -82
  1143. package/options/momentum.d.ts +381 -71
  1144. package/options/momentum.src.d.ts +381 -71
  1145. package/options/natr.d.ts +776 -75
  1146. package/options/natr.src.d.ts +776 -75
  1147. package/options/networkgraph.d.ts +184 -207
  1148. package/options/networkgraph.src.d.ts +184 -207
  1149. package/options/obv.d.ts +426 -26
  1150. package/options/obv.src.d.ts +426 -26
  1151. package/options/ohlc.d.ts +77 -14
  1152. package/options/ohlc.src.d.ts +77 -14
  1153. package/options/packedbubble.d.ts +76 -696
  1154. package/options/packedbubble.src.d.ts +76 -696
  1155. package/options/pareto.d.ts +28 -364
  1156. package/options/pareto.src.d.ts +28 -364
  1157. package/options/pc.d.ts +724 -85
  1158. package/options/pc.src.d.ts +724 -85
  1159. package/options/pictorial.d.ts +1093 -58
  1160. package/options/pictorial.src.d.ts +1093 -58
  1161. package/options/pie.d.ts +595 -129
  1162. package/options/pie.src.d.ts +595 -129
  1163. package/options/pivotpoints.d.ts +34 -365
  1164. package/options/pivotpoints.src.d.ts +34 -365
  1165. package/options/pointandfigure.d.ts +10 -50
  1166. package/options/pointandfigure.src.d.ts +10 -50
  1167. package/options/polygon.d.ts +803 -74
  1168. package/options/polygon.src.d.ts +803 -74
  1169. package/options/ppo.d.ts +34 -365
  1170. package/options/ppo.src.d.ts +34 -365
  1171. package/options/priceenvelopes.d.ts +93 -719
  1172. package/options/priceenvelopes.src.d.ts +93 -719
  1173. package/options/psar.d.ts +34 -365
  1174. package/options/psar.src.d.ts +34 -365
  1175. package/options/pyramid.d.ts +35 -3
  1176. package/options/pyramid.src.d.ts +35 -3
  1177. package/options/renko.d.ts +25 -2
  1178. package/options/renko.src.d.ts +25 -2
  1179. package/options/roc.d.ts +78 -712
  1180. package/options/roc.src.d.ts +78 -712
  1181. package/options/rsi.d.ts +34 -365
  1182. package/options/rsi.src.d.ts +34 -365
  1183. package/options/sankey.d.ts +27 -5
  1184. package/options/sankey.src.d.ts +27 -5
  1185. package/options/scatter.d.ts +896 -290
  1186. package/options/scatter.src.d.ts +896 -290
  1187. package/options/series.d.ts +938 -83
  1188. package/options/series.src.d.ts +938 -83
  1189. package/options/slowstochastic.d.ts +381 -26
  1190. package/options/slowstochastic.src.d.ts +381 -26
  1191. package/options/sma.d.ts +729 -79
  1192. package/options/sma.src.d.ts +729 -79
  1193. package/options/solidgauge.d.ts +882 -105
  1194. package/options/solidgauge.src.d.ts +882 -105
  1195. package/options/spline.d.ts +389 -90
  1196. package/options/spline.src.d.ts +389 -90
  1197. package/options/stochastic.d.ts +83 -716
  1198. package/options/stochastic.src.d.ts +83 -716
  1199. package/options/streamgraph.d.ts +97 -364
  1200. package/options/streamgraph.src.d.ts +97 -364
  1201. package/options/sunburst.d.ts +87 -19
  1202. package/options/sunburst.src.d.ts +87 -19
  1203. package/options/supertrend.d.ts +77 -749
  1204. package/options/supertrend.src.d.ts +77 -749
  1205. package/options/tema.d.ts +83 -365
  1206. package/options/tema.src.d.ts +83 -365
  1207. package/options/tiledwebmap.d.ts +13 -72
  1208. package/options/tiledwebmap.src.d.ts +13 -72
  1209. package/options/tilemap.d.ts +372 -533
  1210. package/options/tilemap.src.d.ts +372 -533
  1211. package/options/timeline.d.ts +49 -154
  1212. package/options/timeline.src.d.ts +49 -154
  1213. package/options/treegraph.d.ts +174 -696
  1214. package/options/treegraph.src.d.ts +174 -696
  1215. package/options/treemap.d.ts +468 -1079
  1216. package/options/treemap.src.d.ts +468 -1079
  1217. package/options/trendline.d.ts +381 -26
  1218. package/options/trendline.src.d.ts +381 -26
  1219. package/options/trix.d.ts +712 -82
  1220. package/options/trix.src.d.ts +712 -82
  1221. package/options/variablepie.d.ts +130 -587
  1222. package/options/variablepie.src.d.ts +130 -587
  1223. package/options/variwide.d.ts +1123 -94
  1224. package/options/variwide.src.d.ts +1123 -94
  1225. package/options/vbp.d.ts +57 -383
  1226. package/options/vbp.src.d.ts +57 -383
  1227. package/options/vector.d.ts +22 -58
  1228. package/options/vector.src.d.ts +22 -58
  1229. package/options/venn.d.ts +32 -78
  1230. package/options/venn.src.d.ts +32 -78
  1231. package/options/vwap.d.ts +122 -703
  1232. package/options/vwap.src.d.ts +122 -703
  1233. package/options/waterfall.d.ts +139 -1150
  1234. package/options/waterfall.src.d.ts +139 -1150
  1235. package/options/williamsr.d.ts +381 -76
  1236. package/options/williamsr.src.d.ts +381 -76
  1237. package/options/windbarb.d.ts +39 -2
  1238. package/options/windbarb.src.d.ts +39 -2
  1239. package/options/wma.d.ts +78 -704
  1240. package/options/wma.src.d.ts +78 -704
  1241. package/options/wordcloud.d.ts +98 -595
  1242. package/options/wordcloud.src.d.ts +98 -595
  1243. package/options/xrange.d.ts +166 -1056
  1244. package/options/xrange.src.d.ts +166 -1056
  1245. package/options/zigzag.d.ts +34 -410
  1246. package/options/zigzag.src.d.ts +34 -410
  1247. package/package.json +1 -1
  1248. package/standalone-navigator.js +4 -4
  1249. package/standalone-navigator.src.js +829 -553
  1250. package/themes/adaptive.js +2 -2
  1251. package/themes/adaptive.src.js +33 -18
  1252. package/themes/avocado.js +2 -2
  1253. package/themes/avocado.src.js +28 -13
  1254. package/themes/dark-unica.js +2 -2
  1255. package/themes/dark-unica.src.js +28 -13
  1256. package/themes/grid-light.js +2 -2
  1257. package/themes/grid-light.src.js +28 -13
  1258. package/themes/high-contrast.js +2 -2
  1259. package/themes/high-contrast.src.js +28 -13
  1260. package/themes/sand-signika.js +2 -2
  1261. package/themes/sand-signika.src.js +28 -13
  1262. package/themes/sunset.js +2 -2
  1263. package/themes/sunset.src.js +28 -13
  1264. package/css/.stylelintrc.json +0 -8
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v13.0.0 (2026-06-11)
2
+ * @license Highcharts JS v13.0.2 (2026-08-27)
3
3
  * @module highcharts/highcharts-autoload
4
4
  *
5
5
  * (c) 2009-2024 Torstein Honsi
@@ -19,16 +19,31 @@
19
19
  return /******/ (() => { // webpackBootstrap
20
20
  /******/ "use strict";
21
21
  /******/ // The require scope
22
- /******/ var __webpack_require__ = {};
22
+ /******/ const __webpack_require__ = {};
23
23
  /******/
24
24
  /************************************************************************/
25
25
  /******/ /* webpack/runtime/define property getters */
26
26
  /******/ (() => {
27
- /******/ // define getter functions for harmony exports
27
+ /******/ // define getter/value functions for harmony exports
28
28
  /******/ __webpack_require__.d = (exports, definition) => {
29
- /******/ for(var key in definition) {
30
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
31
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
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
+ /******/ }
32
47
  /******/ }
33
48
  /******/ }
34
49
  /******/ };
@@ -40,7 +55,7 @@ return /******/ (() => { // webpackBootstrap
40
55
  /******/ })();
41
56
  /******/
42
57
  /************************************************************************/
43
- var __webpack_exports__ = {};
58
+ let __webpack_exports__ = {};
44
59
 
45
60
  // EXPORTS
46
61
  __webpack_require__.d(__webpack_exports__, {
@@ -76,7 +91,7 @@ var Globals;
76
91
  * Constants
77
92
  *
78
93
  * */
79
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.0', Globals.win = (typeof window !== 'undefined' ?
94
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.2', Globals.win = (typeof window !== 'undefined' ?
80
95
  window :
81
96
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
82
97
  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 = [
@@ -403,6 +418,29 @@ const ChartDefaults = {
403
418
  * @context Highcharts.Chart
404
419
  * @apioption chart.events.load
405
420
  */
421
+ /**
422
+ * Fires while the chart is panned by mouse drag. Panning must be
423
+ * enabled through [chart.panning](#chart.panning). One parameter,
424
+ * `event`, is passed to the function, containing common event
425
+ * information as well as `event.originalEvent`, the underlying pointer
426
+ * event. Note that the event fires for every mouse move during the
427
+ * drag, not once per gesture.
428
+ *
429
+ * Calling `event.preventDefault()` or returning false prevents the
430
+ * default panning of the axes. In Highcharts Maps, and on ordinal axes
431
+ * in Highcharts Stock, the panning is applied outside the default
432
+ * action and is not prevented.
433
+ *
434
+ * Panning by touch does not fire this event, unless
435
+ * [chart.zooming.singleTouch](#chart.zooming.singleTouch) is enabled and
436
+ * no zoom type is set. Single-finger drags are then handled as mouse
437
+ * drags and fire this event.
438
+ *
439
+ * @type {Highcharts.ChartPanCallbackFunction}
440
+ * @since 7.0.2
441
+ * @context Highcharts.Chart
442
+ * @apioption chart.events.pan
443
+ */
406
444
  /**
407
445
  * Fires when the chart is redrawn, either after a call to
408
446
  * `chart.redraw()` or after an axis, series or point is modified with
@@ -991,7 +1029,7 @@ const ChartDefaults = {
991
1029
  * @type {Highcharts.ColorType}
992
1030
  * @since 2.1.7
993
1031
  */
994
- selectionMarkerFill: 'color-mix(var(--highcharts-highlight-color-80) 25%, transparent)', // eslint-disable-line max-len
1032
+ selectionMarkerFill: 'color-mix(in srgb, var(--highcharts-highlight-color-80) 25%, transparent)', // eslint-disable-line max-len
995
1033
  /**
996
1034
  * Whether to apply a drop shadow to the global series group. This causes
997
1035
  * all the series to have the same shadow. Contrary to the `series.shadow`
@@ -2417,7 +2455,7 @@ function getStyle(el, prop, toInt) {
2417
2455
  const css = win.getComputedStyle(el, void 0); // eslint-disable-line no-undefined
2418
2456
  if (css) {
2419
2457
  style = css.getPropertyValue(prop);
2420
- if (pick(toInt, prop !== 'opacity')) {
2458
+ if (toInt ?? prop !== 'opacity') {
2421
2459
  style = pInt(style);
2422
2460
  }
2423
2461
  }
@@ -2667,7 +2705,7 @@ function merge(extendOrSource, ...sources) {
2667
2705
  function normalizeTickInterval(interval, multiples, magnitude, allowDecimals, hasTickAmount) {
2668
2706
  let i, retInterval = interval;
2669
2707
  // Round to a tenfold of 1, 2, 2.5 or 5
2670
- magnitude = pick(magnitude, getMagnitude(interval));
2708
+ magnitude = (magnitude ?? getMagnitude(interval));
2671
2709
  const normalized = interval / magnitude;
2672
2710
  // Multiples for a linear scale
2673
2711
  if (!multiples) {
@@ -2780,20 +2818,22 @@ function pad(number, length, padder) {
2780
2818
  .replace('-', '')
2781
2819
  .length).join(padder || '0') + number;
2782
2820
  }
2783
- /* eslint-disable jsdoc/check-param-names */
2821
+ /* eslint-disable valid-jsdoc */
2784
2822
  /**
2785
2823
  * Return the first value that is not null or undefined.
2786
2824
  *
2825
+ * @deprecated 13.0.2
2826
+ * Use nullish coalescing (`??`) or explicit fallback logic instead.
2827
+ *
2787
2828
  * @function Highcharts.pick<T>
2788
2829
  *
2789
- * @param {...Array<T|null|undefined>} items
2830
+ * @param {...(T|null|undefined)} args
2790
2831
  * Variable number of arguments to inspect.
2791
2832
  *
2792
2833
  * @return {T}
2793
2834
  * The value of the first argument that is not null or undefined.
2794
2835
  */
2795
- function pick() {
2796
- const args = arguments;
2836
+ function pick(...args) {
2797
2837
  const length = args.length;
2798
2838
  for (let i = 0; i < length; i++) {
2799
2839
  const arg = args[i];
@@ -2802,7 +2842,7 @@ function pick() {
2802
2842
  }
2803
2843
  }
2804
2844
  }
2805
- /* eslint-enable jsdoc/check-param-names */
2845
+ /* eslint-enable valid-jsdoc */
2806
2846
  /**
2807
2847
  * Shortcut for parseInt
2808
2848
  *
@@ -3185,7 +3225,8 @@ function insertItem(item, collection) {
3185
3225
  !collection[i] ||
3186
3226
  // Handle index option, the element to insert has lower index
3187
3227
  (isNumber(indexOption) &&
3188
- indexOption < pick(collection[i].options.index, collection[i]._i)) ||
3228
+ indexOption < (collection[i].options.index ??
3229
+ collection[i]._i)) ||
3189
3230
  // Insert the new item before other internal items
3190
3231
  // (navigator)
3191
3232
  collection[i].options.isInternal) {
@@ -3271,7 +3312,7 @@ const uniqueKey = (function () {
3271
3312
  * State of the serial mode.
3272
3313
  */
3273
3314
  function useSerialIds(mode) {
3274
- return (serialMode = pick(mode, serialMode));
3315
+ return (serialMode = (mode ?? serialMode));
3275
3316
  }
3276
3317
  /* *
3277
3318
  *
@@ -3737,6 +3778,10 @@ const isDateTimeFormatOptions = (obj) => obj.main === void 0;
3737
3778
  *
3738
3779
  * @param {Highcharts.TimeOptions} [options] Time options as defined in
3739
3780
  * [chart.options.time](/highcharts/time).
3781
+ *
3782
+ * @param {Highcharts.LangOptions} [lang]
3783
+ * Language options. When `options.locale` is not set, `lang.locale` is used as
3784
+ * the locale fallback for locale-aware date formatting.
3740
3785
  */
3741
3786
  class TimeBase {
3742
3787
  /* *
@@ -3755,8 +3800,8 @@ class TimeBase {
3755
3800
  };
3756
3801
  this.variableTimezone = false;
3757
3802
  this.Date = TimeBase_win.Date;
3758
- this.update(options);
3759
3803
  this.lang = lang;
3804
+ this.update(options);
3760
3805
  }
3761
3806
  /* *
3762
3807
  *
@@ -3868,7 +3913,9 @@ class TimeBase {
3868
3913
  /**
3869
3914
  * Shorthand to get a cached `Intl.DateTimeFormat` instance.
3870
3915
  */
3871
- dateTimeFormat(options, timestamp, locale = this.options.locale || pageLang) {
3916
+ dateTimeFormat(options, timestamp, locale = (this.options.locale ||
3917
+ this.lang?.locale ||
3918
+ pageLang)) {
3872
3919
  const cacheKey = JSON.stringify(options) + locale;
3873
3920
  if (isString(options)) {
3874
3921
  options = this.str2dtf(options);
@@ -3954,17 +4001,16 @@ class TimeBase {
3954
4001
  // eslint-disable-next-line new-cap
3955
4002
  let d = this.Date.UTC(year, month, date, hours, minutes || 0, seconds || 0, milliseconds || 0);
3956
4003
  if (this.timezone !== 'UTC') {
3957
- const offset = this.getTimezoneOffset(d);
4004
+ const offset = this.getTimezoneOffset(d), localHours = (hours - offset / timeUnits.hour + 24) % 24;
3958
4005
  d += offset;
3959
- // Adjustments close to DST transitions
3960
4006
  if (
3961
- // Optimize for speed by limiting the number of calls to
3962
- // `getTimezoneOffset`. According to
4007
+ // Limit the number of calls to `getTimezoneOffset` to months
4008
+ // where DST changes may occur. According to
3963
4009
  // https://en.wikipedia.org/wiki/Daylight_saving_time_by_country,
3964
4010
  // DST change may only occur in these months.
3965
4011
  [2, 3, 8, 9, 10, 11].indexOf(month) !== -1 &&
3966
- // DST transitions occur only in the night-time
3967
- (hours < 5 || hours > 20)) {
4012
+ // DST changes only occur at night (#24420)
4013
+ (localHours < 5 || localHours > 20)) {
3968
4014
  const newOffset = this.getTimezoneOffset(d);
3969
4015
  if (offset !== newOffset) {
3970
4016
  d += newOffset - offset;
@@ -6701,6 +6747,9 @@ const defaultOptions = {
6701
6747
  * below the column, but as `followTouchMove` is true, the tooltip will
6702
6748
  * jump from column to column as the user swipes across the plot area.
6703
6749
  *
6750
+ * @sample {highcharts} highcharts/tooltip/followtouchmove/
6751
+ * Tooltip follows touch move
6752
+ *
6704
6753
  * @type {boolean}
6705
6754
  * @default {highcharts} true
6706
6755
  * @default {highstock} true
@@ -7483,10 +7532,14 @@ const defaultOptions = {
7483
7532
  * @type {Highcharts.CSSObject}
7484
7533
  */
7485
7534
  style: {
7486
- /** @type {Highcharts.ColorType} */
7535
+ /**
7536
+ * @type {Highcharts.ColorType}
7537
+ */
7487
7538
  color: 'var(--highcharts-neutral-color-80)',
7488
7539
  cursor: 'default',
7489
- /** @type {number|string} */
7540
+ /**
7541
+ * @type {number|string}
7542
+ */
7490
7543
  fontSize: '0.8em'
7491
7544
  },
7492
7545
  /**
@@ -7802,6 +7855,41 @@ const DefaultOptions = {
7802
7855
  * @param {global.Event} event
7803
7856
  * The event that occurred.
7804
7857
  */
7858
+ /**
7859
+ * Gets fired while the chart is panned by mouse drag. Calling
7860
+ * `event.preventDefault()` or returning `false` prevents the default panning
7861
+ * of the axes.
7862
+ *
7863
+ * @callback Highcharts.ChartPanCallbackFunction
7864
+ *
7865
+ * @param {Highcharts.Chart} this
7866
+ * The chart on which the event occurred.
7867
+ *
7868
+ * @param {Highcharts.ChartPanEventObject} event
7869
+ * The event that occurred.
7870
+ */
7871
+ /**
7872
+ * Contains common event information. Through the `originalEvent` property you
7873
+ * can access the pointer event that triggered the panning.
7874
+ *
7875
+ * @interface Highcharts.ChartPanEventObject
7876
+ */ /**
7877
+ * The pointer event that triggered the panning.
7878
+ * @name Highcharts.ChartPanEventObject#originalEvent
7879
+ * @type {Highcharts.PointerEventObject}
7880
+ */ /**
7881
+ * Prevents the default behavior of the event.
7882
+ * @name Highcharts.ChartPanEventObject#preventDefault
7883
+ * @type {Function}
7884
+ */ /**
7885
+ * The event target.
7886
+ * @name Highcharts.ChartPanEventObject#target
7887
+ * @type {Highcharts.Chart}
7888
+ */ /**
7889
+ * The event type.
7890
+ * @name Highcharts.ChartPanEventObject#type
7891
+ * @type {"pan"}
7892
+ */
7805
7893
  /**
7806
7894
  * Fires when the chart is redrawn, either after a call to `chart.redraw()` or
7807
7895
  * after an axis, series or point is modified with the `redraw` option set to
@@ -8177,7 +8265,9 @@ Color.None = new Color(''); // Must be last static for init
8177
8265
  */
8178
8266
  /**
8179
8267
  * A valid color type than can be parsed and handled by Highcharts. It can be a
8180
- * color string, a gradient object, or a pattern object.
8268
+ * color string (including CSS expressions), a gradient object, or a pattern
8269
+ * object. Read more about colors in the [Highcharts
8270
+ * documentation](https://www.highcharts.com/docs/chart-design-and-style/colors).
8181
8271
  *
8182
8272
  * @typedef {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject} Highcharts.ColorType
8183
8273
  */
@@ -8409,24 +8499,22 @@ class Fx {
8409
8499
  */
8410
8500
  update() {
8411
8501
  const elem = this.elem, prop = this.prop, // If destroyed, it is null
8412
- now = this.now, step = this.options.step;
8502
+ now = this.now ?? 1, step = this.options.step;
8413
8503
  // Animation setter defined from outside
8414
8504
  if (this[prop + 'Setter']) {
8415
8505
  this[prop + 'Setter']();
8416
8506
  // Other animations on SVGElement
8417
8507
  }
8418
- else if (elem.attr) {
8508
+ else if (elem && elem.attr) {
8419
8509
  if (elem.element) {
8420
- elem.attr(prop, now, null, true);
8510
+ elem.attr(prop, now, void 0, true);
8421
8511
  }
8422
8512
  // HTML styles, raw HTML content like container size
8423
8513
  }
8424
- else {
8425
- elem.style[prop] = now + this.unit;
8426
- }
8427
- if (step) {
8428
- step.call(elem, now, this);
8514
+ else if (elem) {
8515
+ elem.style[prop] = now + (this.unit || '');
8429
8516
  }
8517
+ step?.call(elem, now, this);
8430
8518
  }
8431
8519
  /**
8432
8520
  * Run an animation.
@@ -8444,12 +8532,10 @@ class Fx {
8444
8532
  *
8445
8533
  */
8446
8534
  run(from, to, unit) {
8447
- const self = this, options = self.options, timer = function (gotoEnd) {
8448
- return timer.stopped ? false : self.step(gotoEnd);
8449
- }, requestAnimationFrame = Fx_win.requestAnimationFrame ||
8535
+ const { elem, options } = this, { complete, curAnim = {} } = options, timer = (gotoEnd) => (timer.stopped ? false : this.step(gotoEnd)), requestAnimationFrame = Fx_win.requestAnimationFrame ||
8450
8536
  function (step) {
8451
8537
  setTimeout(step, 13);
8452
- }, step = function () {
8538
+ }, step = () => {
8453
8539
  for (let i = 0; i < Fx.timers.length; i++) {
8454
8540
  if (!Fx.timers[i]()) {
8455
8541
  Fx.timers.splice(i--, 1);
@@ -8459,11 +8545,11 @@ class Fx {
8459
8545
  requestAnimationFrame(step);
8460
8546
  }
8461
8547
  };
8462
- if (from === to && !this.elem['forceAnimate:' + this.prop]) {
8463
- delete options.curAnim[this.prop];
8464
- if (options.complete &&
8465
- Object.keys(options.curAnim).length === 0) {
8466
- options.complete.call(this.elem);
8548
+ if (from === to && !elem['forceAnimate:' + this.prop]) {
8549
+ delete curAnim[this.prop];
8550
+ if (complete &&
8551
+ Object.keys(curAnim).length === 0) {
8552
+ complete.call(elem);
8467
8553
  }
8468
8554
  }
8469
8555
  else { // #7166
@@ -8473,7 +8559,7 @@ class Fx {
8473
8559
  this.unit = unit;
8474
8560
  this.now = this.start;
8475
8561
  this.pos = 0;
8476
- timer.elem = this.elem;
8562
+ timer.elem = elem;
8477
8563
  timer.prop = this.prop;
8478
8564
  if (timer() && Fx.timers.push(timer) === 1) {
8479
8565
  requestAnimationFrame(step);
@@ -8494,7 +8580,8 @@ class Fx {
8494
8580
  step(gotoEnd) {
8495
8581
  const t = +new Date(), options = this.options, elem = this.elem, complete = options.complete, duration = options.duration, curAnim = options.curAnim;
8496
8582
  let ret, done;
8497
- if (!!elem.attr && !elem.element) { // #2616, element is destroyed
8583
+ // #2616, element is destroyed
8584
+ if (elem?.attr && !elem.element) {
8498
8585
  ret = false;
8499
8586
  }
8500
8587
  else if (gotoEnd || t >= duration + this.startTime) {
@@ -8723,7 +8810,8 @@ Fx.timers = [];
8723
8810
  * so it should be moved to the SVGRenderer.
8724
8811
  */
8725
8812
  function setAnimation(animation, chart) {
8726
- chart.renderer.globalAnimation = pick(animation, chart.options.chart.animation, true);
8813
+ chart.renderer.globalAnimation =
8814
+ animation ?? chart.options.chart.animation ?? true;
8727
8815
  }
8728
8816
  /**
8729
8817
  * Get the animation in object form, where a disabled animation is always
@@ -8784,6 +8872,11 @@ function getDeferredAnimation(chart, animation, series) {
8784
8872
  /**
8785
8873
  * The global animate method, which uses Fx to create individual animators.
8786
8874
  *
8875
+ * @sample highcharts/members/renderer-basic
8876
+ * SVG elements with animation
8877
+ * @sample highcharts/members/animate
8878
+ * Animation without an owner element
8879
+ *
8787
8880
  * @function Highcharts.animate
8788
8881
  *
8789
8882
  * @param {Highcharts.HTMLDOMElement|Highcharts.SVGElement} el
@@ -8799,14 +8892,12 @@ function getDeferredAnimation(chart, animation, series) {
8799
8892
  *
8800
8893
  * @return {void}
8801
8894
  */
8802
- function animate(el, params, opt) {
8803
- let start, unit = '', end, fx, args;
8895
+ function animate(el, params = { pos: 1 }, opt) {
8804
8896
  if (!isObject(opt)) { // Number or undefined/null
8805
- args = arguments;
8806
8897
  opt = {
8807
- duration: args[2],
8808
- easing: args[3],
8809
- complete: args[4]
8898
+ duration: arguments[2],
8899
+ easing: arguments[3],
8900
+ complete: arguments[4]
8810
8901
  };
8811
8902
  }
8812
8903
  if (!isNumber(opt.duration)) {
@@ -8816,22 +8907,23 @@ function animate(el, params, opt) {
8816
8907
  opt.easing :
8817
8908
  (Math[opt.easing] || Math.easeInOutSine);
8818
8909
  opt.curAnim = merge(params);
8819
- objectEach(params, function (val, prop) {
8910
+ objectEach(params, (val, prop) => {
8820
8911
  // Stop current running animation of this property
8821
- stop(el, prop);
8822
- fx = new Animation_Fx(el, opt, prop);
8823
- end = void 0;
8824
- if (prop === 'd' && isArray(params.d)) {
8825
- fx.paths = fx.initPath(el, el.pathArray, params.d);
8826
- fx.toD = params.d;
8827
- start = 0;
8912
+ if (el) {
8913
+ stop(el, prop);
8914
+ }
8915
+ const fx = new Animation_Fx(el, opt, prop), d = params.d;
8916
+ let start = 0, end = void 0, unit = '';
8917
+ if (prop === 'd' && isArray(d)) {
8918
+ fx.paths = fx.initPath(el, el.pathArray, d);
8919
+ fx.toD = d;
8828
8920
  end = 1;
8829
8921
  }
8830
- else if (el.attr) {
8922
+ else if (el?.attr) {
8831
8923
  start = el.attr(prop);
8832
8924
  }
8833
- else {
8834
- start = parseFloat(getStyle(el, prop)) || 0;
8925
+ else if (el) {
8926
+ start = +(getStyle(el, prop) || 0);
8835
8927
  if (prop !== 'opacity') {
8836
8928
  unit = 'px';
8837
8929
  }
@@ -8842,7 +8934,10 @@ function animate(el, params, opt) {
8842
8934
  if (typeof end === 'string' && end.match('px')) {
8843
8935
  end = end.replace(/px/g, ''); // #4351
8844
8936
  }
8845
- fx.run(start, end, unit);
8937
+ // Empty dashstyle animation crashes treemap on hover
8938
+ if (defined(end)) {
8939
+ fx.run(start, end, unit);
8940
+ }
8846
8941
  });
8847
8942
  }
8848
8943
  /**
@@ -8866,28 +8961,11 @@ function animate(el, params, opt) {
8866
8961
  * improvement in all cases where we stop the animation from .attr. Instead of
8867
8962
  * stopping everything, we can just stop the actual attributes we're setting.
8868
8963
  */
8869
- function stop(el, prop) {
8870
- let i = Animation_Fx.timers.length;
8871
- // Remove timers related to this element (#4519)
8872
- while (i--) {
8873
- if (Animation_Fx.timers[i].elem === el && (!prop || prop === Animation_Fx.timers[i].prop)) {
8874
- Animation_Fx.timers[i].stopped = true; // #4667
8875
- }
8964
+ const stop = (el, prop) => Animation_Fx.timers.forEach((timer) => {
8965
+ if (timer.elem === el && (!prop || prop === timer.prop)) {
8966
+ timer.stopped = true; // #4667
8876
8967
  }
8877
- }
8878
- const animationExports = {
8879
- animate,
8880
- animObject,
8881
- getDeferredAnimation,
8882
- setAnimation,
8883
- stop
8884
- };
8885
- /* *
8886
- *
8887
- * Default Export
8888
- *
8889
- * */
8890
- /* harmony default export */ const AnimationUtilities = (animationExports);
8968
+ });
8891
8969
  /* *
8892
8970
  *
8893
8971
  * API Options
@@ -9192,7 +9270,9 @@ class AST {
9192
9270
  doc = { body };
9193
9271
  }
9194
9272
  const appendChildNodes = (node, addTo) => {
9195
- const tagName = node.nodeName.toLowerCase();
9273
+ // Preserve the camelCase of SVG tags via localName (#24702).
9274
+ const tagName = node.localName ||
9275
+ node.nodeName.toLowerCase();
9196
9276
  // Add allowed tags
9197
9277
  const astNode = {
9198
9278
  tagName
@@ -9306,6 +9386,8 @@ AST.allowedAttributes = [
9306
9386
  'src',
9307
9387
  'startOffset',
9308
9388
  'stdDeviation',
9389
+ 'stop-color',
9390
+ 'stop-opacity',
9309
9391
  'stroke-linecap',
9310
9392
  'stroke-width',
9311
9393
  'stroke',
@@ -9792,7 +9874,7 @@ function format(str = '', ctx, owner) {
9792
9874
  replacement = `"${replacement}"`;
9793
9875
  }
9794
9876
  }
9795
- str = str.replace(match.find, pick(replacement, ''));
9877
+ str = str.replace(match.find, (replacement ?? ''));
9796
9878
  });
9797
9879
  return hasSub ? format(str, ctx, owner) : str;
9798
9880
  }
@@ -9909,9 +9991,7 @@ const Templating = {
9909
9991
  * API Declarations
9910
9992
  * */
9911
9993
  /**
9912
- * @interface Highcharts.Templating
9913
- *
9914
- * The Highcharts.Templating interface provides a structure for defining
9994
+ * The Highcharts.TemplatingObject interface provides a structure for defining
9915
9995
  * helpers. Helpers can be used as conditional blocks or functions within
9916
9996
  * expressions. Highcharts includes several built-in helpers and supports
9917
9997
  * the addition of custom helpers.
@@ -9919,16 +9999,21 @@ const Templating = {
9919
9999
  * @see [More information](
9920
10000
  * https://www.highcharts.com/docs/chart-concepts/templating#helpers)
9921
10001
  *
9922
- * @example
9923
- * // Define a custom helper to return the absolute value of a number
9924
- * Highcharts.Templating.helpers.abs = value => Math.abs(value);
9925
- *
9926
- * // Usage in a format string
9927
- * format: 'Absolute value: {abs point.y}'
9928
- *
9929
- * @name Highcharts.Templating#helpers
9930
- * @type {Record<string, Function>}
9931
- */
10002
+ * @interface Highcharts.TemplatingObject
10003
+ */ /**
10004
+ * @example
10005
+ * // Define a custom helper to return the absolute value of a number
10006
+ * Highcharts.Templating.helpers.abs = value => Math.abs(value);
10007
+ *
10008
+ * // Usage in a format string
10009
+ * format: 'Absolute value: {abs point.y}'
10010
+ *
10011
+ * @name Highcharts.TemplatingObject#helpers
10012
+ * @type {Record<string, Function>}
10013
+ */ /**
10014
+ * @name Highcharts.Templating
10015
+ * @type {Highcharts.TemplatingObject}
10016
+ */
9932
10017
  (''); // Keeps doclets above in file
9933
10018
 
9934
10019
  ;// ./code/es-modules/Core/Renderer/RendererUtilities.js
@@ -10038,7 +10123,7 @@ var RendererUtilities;
10038
10123
  boxes = boxes.map((box) => ({
10039
10124
  size: box.size,
10040
10125
  targets: [box.target],
10041
- align: pick(box.align, 0.5)
10126
+ align: (box.align ?? 0.5)
10042
10127
  }));
10043
10128
  while (overlapping) {
10044
10129
  // Initial positions: target centered in box
@@ -10137,7 +10222,6 @@ var RendererUtilities;
10137
10222
  * */
10138
10223
 
10139
10224
 
10140
- const { animate: SVGElement_animate, animObject: SVGElement_animObject, stop: SVGElement_stop } = AnimationUtilities;
10141
10225
 
10142
10226
 
10143
10227
  const { deg2rad, doc: SVGElement_doc, svg, SVG_NS: SVGElement_SVG_NS, win: SVGElement_win, isFirefox } = Core_Globals;
@@ -10197,8 +10281,10 @@ class SVGElement {
10197
10281
  * Property value.
10198
10282
  */
10199
10283
  _defaultGetter(key) {
10200
- let ret = pick(this[key + 'Value'], // Align getter
10201
- this[key], this.element ? this.element.getAttribute(key) : null, 0);
10284
+ let ret = (this[key + 'Value'] ??
10285
+ this[key] ??
10286
+ (this.element ? this.element.getAttribute(key) : null) ??
10287
+ 0);
10202
10288
  if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
10203
10289
  ret = parseFloat(ret);
10204
10290
  }
@@ -10361,7 +10447,7 @@ class SVGElement {
10361
10447
  }
10362
10448
  alignTo = void 0; // Do not use the box
10363
10449
  }
10364
- const alignToBox = pick(alignTo, renderer[alignToKey], renderer),
10450
+ const alignToBox = alignTo ?? renderer[alignToKey] ?? renderer,
10365
10451
  // Default: left align
10366
10452
  x = (alignToBox.x || 0) + (alignOptions.x || 0) +
10367
10453
  ((alignToBox.width || 0) - (alignOptions.width || 0)) *
@@ -10421,7 +10507,7 @@ class SVGElement {
10421
10507
  * Returns the SVGElement for chaining.
10422
10508
  */
10423
10509
  animate(params, options, complete) {
10424
- const animOptions = SVGElement_animObject(pick(options, this.renderer.globalAnimation, true)), deferTime = animOptions.defer;
10510
+ const animOptions = animObject((options ?? this.renderer.globalAnimation ?? true)), deferTime = animOptions.defer;
10425
10511
  // When the page is hidden save resources in the background by not
10426
10512
  // running animation at all (#9749).
10427
10513
  if (SVGElement_doc.hidden) {
@@ -10436,7 +10522,7 @@ class SVGElement {
10436
10522
  // If defer option is defined delay the animation #12901
10437
10523
  syncTimeout(() => {
10438
10524
  if (this.element) {
10439
- SVGElement_animate(this, params, animOptions);
10525
+ animate(this, params, animOptions);
10440
10526
  }
10441
10527
  }, deferTime);
10442
10528
  }
@@ -10610,7 +10696,7 @@ class SVGElement {
10610
10696
  // Unless .attr is from the animator update, stop current
10611
10697
  // running animation of this property
10612
10698
  if (!continueAnimation) {
10613
- SVGElement_stop(this, key);
10699
+ stop(this, key);
10614
10700
  }
10615
10701
  // Special handling of symbol attributes
10616
10702
  if (this.symbolName &&
@@ -10913,7 +10999,7 @@ class SVGElement {
10913
10999
  .split(','); // Ending comma
10914
11000
  i = v.length;
10915
11001
  while (i--) {
10916
- v[i] = '' + (pInt(v[i]) * pick(strokeWidth, NaN));
11002
+ v[i] = '' + (pInt(v[i]) * (strokeWidth ?? NaN));
10917
11003
  }
10918
11004
  value = v.join(',').replace(/NaN/g, 'none'); // #3226
10919
11005
  this.element.setAttribute('stroke-dasharray', value);
@@ -10930,7 +11016,7 @@ class SVGElement {
10930
11016
  // Remove events
10931
11017
  element.onclick = element.onmouseout = element.onmouseover =
10932
11018
  element.onmousemove = element.point = null;
10933
- SVGElement_stop(wrapper); // Stop running animations
11019
+ stop(wrapper); // Stop running animations
10934
11020
  if (wrapper.clipPath && ownerSVGElement) {
10935
11021
  const clipPath = wrapper.clipPath;
10936
11022
  // Look for existing references to this clipPath and remove them
@@ -11053,7 +11139,7 @@ class SVGElement {
11053
11139
  * The bounding box with `x`, `y`, `width` and `height` properties.
11054
11140
  */
11055
11141
  getBBox(reload, rot) {
11056
- const wrapper = this, { element, renderer, styles, textStr } = wrapper, { cache, cacheKeys } = renderer, isSVG = element.namespaceURI === wrapper.SVG_NS, rotation = pick(rot, wrapper.rotation, 0), fontSize = renderer.styledMode ? (element &&
11142
+ const wrapper = this, { element, renderer, styles, textStr } = wrapper, { cache, cacheKeys } = renderer, isSVG = element.namespaceURI === wrapper.SVG_NS, rotation = (rot ?? wrapper.rotation ?? 0), fontSize = renderer.styledMode ? (element &&
11057
11143
  SVGElement.prototype.getStyle.call(element, 'font-size')) : (styles.fontSize), cacheKey = this.getBBoxCacheKey([
11058
11144
  renderer.rootFontSize,
11059
11145
  this.textWidth, // #7874, also useHTML
@@ -11579,7 +11665,7 @@ class SVGElement {
11579
11665
  symbolAttr(hash) {
11580
11666
  const wrapper = this;
11581
11667
  SVGElement.symbolCustomAttribs.forEach(function (key) {
11582
- wrapper[key] = pick(hash[key], wrapper[key]);
11668
+ wrapper[key] = (hash[key] ?? wrapper[key]);
11583
11669
  });
11584
11670
  wrapper.attr({
11585
11671
  d: wrapper.renderer.symbols[wrapper.symbolName](wrapper.x, wrapper.y, wrapper.width, wrapper.height, wrapper)
@@ -11619,7 +11705,7 @@ class SVGElement {
11619
11705
  }
11620
11706
  // Replace text content and escape markup
11621
11707
  titleNode.textContent = replaceNested(// Scan #[73]
11622
- pick(value, ''), // #3276, #3895
11708
+ (value ?? ''), // #3276, #3895
11623
11709
  [/<[^>]*>/g, '']).replace(/&lt;/g, '<').replace(/&gt;/g, '>');
11624
11710
  }
11625
11711
  /**
@@ -12397,7 +12483,7 @@ class SVGLabel extends SVG_SVGElement {
12397
12483
  if ((this.textStr && this.bBox.width === 0 && this.bBox.height === 0) || this.rotation) {
12398
12484
  this.updateBoxSize();
12399
12485
  }
12400
- const { padding, height = 0, translateX = 0, translateY = 0, width = 0 } = this, paddingLeft = pick(this.paddingLeft, padding), rotation = rot ?? (this.rotation || 0);
12486
+ const { padding, height = 0, translateX = 0, translateY = 0, width = 0 } = this, paddingLeft = (this.paddingLeft ?? padding), rotation = rot ?? (this.rotation || 0);
12401
12487
  let bBox = {
12402
12488
  width,
12403
12489
  height,
@@ -12450,7 +12536,7 @@ class SVGLabel extends SVG_SVGElement {
12450
12536
  this.attr({
12451
12537
  // Alignment is available now (#3295, 0 not rendered if given
12452
12538
  // as a value)
12453
- text: pick(this.textStr, ''),
12539
+ text: (this.textStr ?? ''),
12454
12540
  x: this.x || 0,
12455
12541
  y: this.y || 0
12456
12542
  });
@@ -12606,8 +12692,8 @@ class SVGLabel extends SVG_SVGElement {
12606
12692
  /** @internal */
12607
12693
  getPaddedWidth() {
12608
12694
  const padding = this.padding;
12609
- const paddingLeft = pick(this.paddingLeft, padding);
12610
- const paddingRight = pick(this.paddingRight, padding);
12695
+ const paddingLeft = (this.paddingLeft ?? padding);
12696
+ const paddingRight = (this.paddingRight ?? padding);
12611
12697
  return ((this.widthSetting || this.bBox.width || 0) +
12612
12698
  paddingLeft +
12613
12699
  paddingRight);
@@ -12708,7 +12794,7 @@ function arc(cx, cy, w, h, options) {
12708
12794
  const arc = [];
12709
12795
  if (options) {
12710
12796
  let start = options.start || 0, end = options.end || 0;
12711
- const rx = pick(options.r, w), ry = pick(options.r, h || w),
12797
+ const rx = (options.r ?? w), ry = (options.r ?? (h || w)),
12712
12798
  // Subtract a small number to prevent cos and sin of start and end
12713
12799
  // from becoming equal on 360 arcs (#1561). See "Arc proximity"
12714
12800
  // tests at samples/unit-tests/svgrenderer/symbol/demo.js
@@ -12718,16 +12804,17 @@ function arc(cx, cy, w, h, options) {
12718
12804
  start = Math.PI / 2;
12719
12805
  end = Math.PI * 2.5 - proximity;
12720
12806
  }
12721
- const innerRadius = options.innerR, open = pick(options.open, fullCircle), cosStart = fullCircle ? 0 : Math.cos(start), sinStart = fullCircle ? 1 : Math.sin(start), cosEnd = fullCircle ? 0 : Math.cos(end), sinEnd = fullCircle ? 1 : Math.sin(end),
12807
+ const innerRadius = options.innerR, open = (options.open ?? fullCircle), cosStart = fullCircle ? 0 : Math.cos(start), sinStart = fullCircle ? 1 : Math.sin(start), cosEnd = fullCircle ? 0 : Math.cos(end), sinEnd = fullCircle ? 1 : Math.sin(end),
12722
12808
  // Proximity takes care of rounding errors around PI (#6971)
12723
- longArc = pick(options.longArc, end - start - Math.PI < proximity ? 0 : 1);
12809
+ longArc = options.longArc ??
12810
+ (end - start - Math.PI < proximity ? 0 : 1);
12724
12811
  let arcSegment = [
12725
12812
  'A', // ArcTo
12726
12813
  rx, // X radius
12727
12814
  ry, // Y radius
12728
12815
  0, // Slanting
12729
12816
  longArc, // Long or short arc
12730
- pick(options.clockwise, 1), // Clockwise
12817
+ (options.clockwise ?? 1), // Clockwise
12731
12818
  // Use a static pixel offset for full circle (#21701)
12732
12819
  cx + (fullCircle ? 0.001 : rx * cosEnd),
12733
12820
  cy + ry * sinEnd
@@ -13258,7 +13345,7 @@ class TextBuilder {
13258
13345
  * @internal
13259
13346
  */
13260
13347
  buildSVG() {
13261
- const wrapper = this.svgElement, textNode = wrapper.element, renderer = wrapper.renderer, textStr = pick(wrapper.textStr, '').toString(), hasMarkup = textStr.indexOf('<') !== -1, childNodes = textNode.childNodes, tempParent = !wrapper.added && renderer.box, regexMatchBreaks = /<br.*?>/g,
13348
+ const wrapper = this.svgElement, textNode = wrapper.element, renderer = wrapper.renderer, textStr = (wrapper.textStr ?? '').toString(), hasMarkup = textStr.indexOf('<') !== -1, childNodes = textNode.childNodes, tempParent = !wrapper.added && renderer.box, regexMatchBreaks = /<br.*?>/g,
13262
13349
  // The buildText code is quite heavy, so if we're not changing
13263
13350
  // something that affects the text, skip it (#6113).
13264
13351
  textCache = [
@@ -13842,7 +13929,7 @@ class SVGRenderer {
13842
13929
  this.url = this.getReferenceURL();
13843
13930
  // Add description
13844
13931
  const desc = this.createElement('desc').add();
13845
- desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.0'));
13932
+ desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.2'));
13846
13933
  this.defs = this.createElement('defs').add();
13847
13934
  this.allowHTML = allowHTML;
13848
13935
  this.forExport = forExport;
@@ -14628,7 +14715,7 @@ class SVGRenderer {
14628
14715
  this.attr('height')
14629
14716
  });
14630
14717
  },
14631
- duration: pick(animate, true) ? void 0 : 0
14718
+ duration: (animate ?? true) ? void 0 : 0
14632
14719
  });
14633
14720
  renderer.alignElements();
14634
14721
  }
@@ -14786,8 +14873,8 @@ class SVGRenderer {
14786
14873
  // The image width is not always the same as the symbol width. The
14787
14874
  // image may be centered within the symbol, as is the case when
14788
14875
  // image shapes are used as label backgrounds, for example in flags.
14789
- img.imgwidth = pick(options?.width, symbolSizes[imageSrc]?.width);
14790
- img.imgheight = pick(options?.height, symbolSizes[imageSrc]?.height);
14876
+ img.imgwidth = (options?.width ?? symbolSizes[imageSrc]?.width);
14877
+ img.imgheight = (options?.height ?? symbolSizes[imageSrc]?.height);
14791
14878
  /**
14792
14879
  * Set the size and position
14793
14880
  */
@@ -15633,7 +15720,11 @@ class HTMLElement extends SVG_SVGElement {
15633
15720
  .attr({
15634
15721
  text: str,
15635
15722
  x: Math.round(x),
15636
- y: Math.round(y)
15723
+ y: Math.round(y),
15724
+ // The namespace attribute is required for serialization
15725
+ // (export and side-by-side comparison), otherwise it
15726
+ // inherits the SVG namespace from foreignObject.
15727
+ xmlns: 'http://www.w3.org/1999/xhtml'
15637
15728
  });
15638
15729
  };
15639
15730
  }
@@ -15813,8 +15904,10 @@ class HTMLElement extends SVG_SVGElement {
15813
15904
  foreignObject.attr({
15814
15905
  x: x + (this.xCorr || 0),
15815
15906
  y: y + (this.yCorr || 0),
15816
- // Add 4px to avoid ellipsis, since the body adds 3 px right
15817
- // margin. We need one more because of rounding.
15907
+ // Add 4px to avoid ellipsis. In v13.0.0 we had a body inside
15908
+ // the foreignObject with a 3px right margin. This was later
15909
+ // removed, but we still need to add a few pixels to avoid
15910
+ // ellipsis.
15818
15911
  width: element.offsetWidth + 4,
15819
15912
  // Add 1px to account for subpixel bounding boxes
15820
15913
  height: element.offsetHeight + 1,
@@ -15834,25 +15927,16 @@ class HTMLElement extends SVG_SVGElement {
15834
15927
  this.cTT = currentTextTransform;
15835
15928
  }
15836
15929
  /**
15837
- * Add the element to a group wrapper. For HTML elements, a parallel div
15838
- * will be created for each ancestor SVG `g` element.
15930
+ * Add the element to the foreign object
15839
15931
  *
15840
15932
  * @internal
15841
15933
  */
15842
15934
  add(parentGroup) {
15843
- const { foreignObject, renderer } = this;
15935
+ const { foreignObject } = this;
15844
15936
  // Foreign object
15845
15937
  foreignObject.add(parentGroup);
15846
- super.add(
15847
- // Create a body inside the foreignObject
15848
- renderer.createElement('body')
15849
- .attr({ xmlns: 'http://www.w3.org/1999/xhtml' })
15850
- .css({
15851
- background: 'transparent',
15852
- // 3px is to avoid clipping on the right
15853
- margin: '0 3px 0 0'
15854
- })
15855
- .add(foreignObject));
15938
+ // Add this.element to the foreign objct
15939
+ super.add(foreignObject);
15856
15940
  if (this.alignOnAdd) {
15857
15941
  this.updateTransform();
15858
15942
  }
@@ -15887,10 +15971,20 @@ class HTMLElement extends SVG_SVGElement {
15887
15971
  this[key] = value;
15888
15972
  this.doTransform = true;
15889
15973
  }
15974
+ /**
15975
+ * Apply visibility/opacity to the foreignObject; the HTML element
15976
+ * ignores them.
15977
+ * @internal
15978
+ */
15979
+ visibilitySetter(value, key) {
15980
+ this.foreignObject.attr({ [key]: value });
15981
+ this[key] = value;
15982
+ }
15890
15983
  }
15891
15984
  // Some shared setters
15892
15985
  const proto = HTMLElement.prototype;
15893
15986
  proto.ySetter = proto.xSetter;
15987
+ proto.opacitySetter = proto.visibilitySetter;
15894
15988
  /* *
15895
15989
  *
15896
15990
  * Default Export
@@ -16431,6 +16525,7 @@ var AxisDefaults;
16431
16525
  */
16432
16526
  dateTimeLabelFormats: {
16433
16527
  /**
16528
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16434
16529
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16435
16530
  */
16436
16531
  millisecond: {
@@ -16456,6 +16551,7 @@ var AxisDefaults;
16456
16551
  range: false
16457
16552
  },
16458
16553
  /**
16554
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16459
16555
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16460
16556
  */
16461
16557
  second: {
@@ -16481,6 +16577,7 @@ var AxisDefaults;
16481
16577
  range: false
16482
16578
  },
16483
16579
  /**
16580
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16484
16581
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16485
16582
  */
16486
16583
  minute: {
@@ -16506,6 +16603,7 @@ var AxisDefaults;
16506
16603
  range: false
16507
16604
  },
16508
16605
  /**
16606
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16509
16607
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16510
16608
  */
16511
16609
  hour: {
@@ -16538,6 +16636,7 @@ var AxisDefaults;
16538
16636
  range: false
16539
16637
  },
16540
16638
  /**
16639
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16541
16640
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16542
16641
  */
16543
16642
  day: {
@@ -16560,6 +16659,7 @@ var AxisDefaults;
16560
16659
  boundary: '%[eb]'
16561
16660
  },
16562
16661
  /**
16662
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16563
16663
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16564
16664
  */
16565
16665
  week: {
@@ -16575,6 +16675,7 @@ var AxisDefaults;
16575
16675
  main: '%[eb]'
16576
16676
  },
16577
16677
  /**
16678
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16578
16679
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16579
16680
  */
16580
16681
  month: {
@@ -16597,6 +16698,7 @@ var AxisDefaults;
16597
16698
  boundary: void 0
16598
16699
  },
16599
16700
  /**
16701
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16600
16702
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16601
16703
  */
16602
16704
  year: {
@@ -17412,7 +17514,7 @@ var AxisDefaults;
17412
17514
  * @sample {highstock} stock/xaxis/offset/
17413
17515
  * Y axis offset by 70 px
17414
17516
  *
17415
- * @type {number}
17517
+ * @type {number|string}
17416
17518
  */
17417
17519
  offset: void 0,
17418
17520
  /**
@@ -19062,7 +19164,9 @@ var AxisDefaults;
19062
19164
  * @product highcharts
19063
19165
  */
19064
19166
  style: {
19065
- /** @type {Highcharts.ColorType} */
19167
+ /**
19168
+ * @type {Highcharts.ColorType}
19169
+ */
19066
19170
  color: 'var(--highcharts-neutral-color-100)',
19067
19171
  /**
19068
19172
  * @type {number|string}
@@ -19249,11 +19353,11 @@ class Tick {
19249
19353
  * @function Highcharts.Tick#addLabel
19250
19354
  */
19251
19355
  addLabel() {
19252
- 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 = pick(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;
19356
+ 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;
19253
19357
  let label = tick.label, dateTimeLabelFormat, dateTimeLabelFormats, i;
19254
19358
  // The context value
19255
19359
  let value = this.parameters.category || (categories ?
19256
- pick(categories[pos], names[pos], pos) :
19360
+ (categories[pos] ?? names[pos] ?? pos) :
19257
19361
  pos);
19258
19362
  if (log && isNumber(value)) {
19259
19363
  value = correctFloat(log.lin2log(value));
@@ -19500,7 +19604,7 @@ class Tick {
19500
19604
  labelOptions.y;
19501
19605
  }
19502
19606
  x = x +
19503
- pick(labelOptions.x, [0, 1, 0, -1][axis.side] * distance) +
19607
+ (labelOptions.x ?? [0, 1, 0, -1][axis.side] * distance) +
19504
19608
  labelOffsetCorrection +
19505
19609
  rotCorr.x -
19506
19610
  (tickmarkOffset && horiz ?
@@ -19555,7 +19659,7 @@ class Tick {
19555
19659
  * @function Highcharts.Tick#handleOverflow
19556
19660
  */
19557
19661
  handleOverflow(xy) {
19558
- const tick = this, axis = this.axis, labelOptions = axis.options.labels, pxPos = xy.x, chartWidth = axis.chart.chartWidth, spacing = axis.chart.spacing, leftBound = pick(axis.labelLeft, Math.min(axis.pos, spacing[3])), rightBound = pick(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 = {};
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 = {};
19559
19663
  let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
19560
19664
  // Check if the label overshoots the chart spacing box. If it does, move
19561
19665
  // it. If it now overshoots the slotWidth, add ellipsis.
@@ -19622,9 +19726,8 @@ class Tick {
19622
19726
  * @param {number} [opacity]
19623
19727
  */
19624
19728
  render(index, old, opacity) {
19625
- const tick = this, axis = tick.axis, horiz = axis.horiz, pos = tick.pos, tickmarkOffset = pick(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;
19626
- const labelOpacity = pick(opacity, tick.label?.newOpacity, // #15528
19627
- 1);
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);
19628
19731
  // Anything that is not between `axis.pos` and `axis.pos + axis.length`
19629
19732
  // should not be visible (#20166). The `correctFloat` is for reversed
19630
19733
  // axes in Safari.
@@ -19652,7 +19755,7 @@ class Tick {
19652
19755
  * @param {number} opacity The opacity of the grid line
19653
19756
  */
19654
19757
  renderGridLine(old, opacity) {
19655
- const tick = this, axis = tick.axis, options = axis.options, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = pick(tick.tickmarkOffset, axis.tickmarkOffset), renderer = axis.chart.renderer;
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;
19656
19759
  let gridLine = tick.gridLine, gridLinePath, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19657
19760
  if (tick.type === 'minor') {
19658
19761
  gridLineWidth = options.minorGridLineWidth;
@@ -19708,7 +19811,7 @@ class Tick {
19708
19811
  * @param {number} opacity The opacity of the mark
19709
19812
  */
19710
19813
  renderMark(xy, opacity) {
19711
- 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 = pick(options[type !== 'minor' ? 'tickWidth' : 'minorTickWidth'], !type && axis.isXAxis ? 1 : 0), // X axis defaults to 1
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
19712
19815
  tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
19713
19816
  let mark = tick.mark;
19714
19817
  const isNewMark = !mark;
@@ -19753,7 +19856,7 @@ class Tick {
19753
19856
  * @param {number} index The index of the tick
19754
19857
  */
19755
19858
  renderLabel(xy, old, opacity, index) {
19756
- const tick = this, axis = tick.axis, horiz = axis.horiz, options = axis.options, label = tick.label, labelOptions = options.labels, step = labelOptions.step, tickmarkOffset = pick(tick.tickmarkOffset, axis.tickmarkOffset), x = xy.x, y = xy.y;
19859
+ const tick = this, axis = tick.axis, horiz = axis.horiz, options = axis.options, label = tick.label, labelOptions = options.labels, step = labelOptions.step, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), x = xy.x, y = xy.y;
19757
19860
  let show = true;
19758
19861
  if (label && isNumber(x)) {
19759
19862
  label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step);
@@ -19845,7 +19948,6 @@ class Tick {
19845
19948
  * */
19846
19949
 
19847
19950
 
19848
- const { animObject: Axis_animObject } = AnimationUtilities;
19849
19951
 
19850
19952
  const { xAxis, yAxis } = Axis_AxisDefaults;
19851
19953
 
@@ -19859,12 +19961,7 @@ const { deg2rad: Axis_deg2rad } = Core_Globals;
19859
19961
 
19860
19962
 
19861
19963
 
19862
- const getNormalizedTickInterval = (axis, tickInterval) => normalizeTickInterval(tickInterval, void 0, void 0, pick(axis.options.allowDecimals,
19863
- // If the tick interval is greater than 0.5, avoid decimals, as
19864
- // linear axes are often used to render discrete values (#3363). If
19865
- // a tick amount is set, allow decimals by default, as it increases
19866
- // the chances for a good fit.
19867
- tickInterval < 0.5 || axis.tickAmount !== void 0), !!axis.tickAmount);
19964
+ const getNormalizedTickInterval = (axis, tickInterval) => normalizeTickInterval(tickInterval, void 0, void 0, (axis.options.allowDecimals ?? (tickInterval < 0.5 || axis.tickAmount !== void 0)), !!axis.tickAmount);
19868
19965
  extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
19869
19966
  /* *
19870
19967
  *
@@ -19972,7 +20069,7 @@ class Axis {
19972
20069
  axis.coll = coll;
19973
20070
  fireEvent(this, 'init', { userOptions: userOptions });
19974
20071
  // Needed in setOptions
19975
- axis.opposite = pick(userOptions.opposite, axis.opposite);
20072
+ axis.opposite = (userOptions.opposite ?? axis.opposite);
19976
20073
  /**
19977
20074
  * The side on which the axis is rendered. 0 is top, 1 is right, 2
19978
20075
  * is bottom and 3 is left.
@@ -19980,10 +20077,9 @@ class Axis {
19980
20077
  * @name Highcharts.Axis#side
19981
20078
  * @type {number}
19982
20079
  */
19983
- axis.side = pick(userOptions.side, axis.side, (horiz ?
20080
+ axis.side = (userOptions.side ?? axis.side ?? (horiz ?
19984
20081
  (axis.opposite ? 0 : 2) : // Top : bottom
19985
- (axis.opposite ? 1 : 3)) // Right : left
19986
- );
20082
+ (axis.opposite ? 1 : 3)));
19987
20083
  /**
19988
20084
  * Current options for the axis after merge of defaults and user's
19989
20085
  * options.
@@ -20012,7 +20108,7 @@ class Axis {
20012
20108
  * @name Highcharts.Axis#reversed
20013
20109
  * @type {boolean}
20014
20110
  */
20015
- axis.reversed = pick(options.reversed, axis.reversed);
20111
+ axis.reversed = (options.reversed ?? axis.reversed);
20016
20112
  axis.visible = options.visible;
20017
20113
  axis.zoomEnabled = options.zoomEnabled;
20018
20114
  // Initial categories
@@ -20100,7 +20196,7 @@ class Axis {
20100
20196
  * @name Highcharts.Axis#crosshair
20101
20197
  * @type {boolean|Highcharts.AxisCrosshairOptions}
20102
20198
  */
20103
- const crosshair = pick(options.crosshair, splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1]);
20199
+ const crosshair = options.crosshair ?? splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1];
20104
20200
  axis.crosshair = crosshair === true ? {} : crosshair;
20105
20201
  // Register. Don't add it again on Axis.update().
20106
20202
  if (chart.axes.indexOf(axis) === -1) { //
@@ -20284,8 +20380,8 @@ class Axis {
20284
20380
  seriesDataMax = xExtremes.max;
20285
20381
  }
20286
20382
  if (xData.length) {
20287
- axis.dataMin = Math.min(pick(axis.dataMin, seriesDataMin), seriesDataMin);
20288
- axis.dataMax = Math.max(pick(axis.dataMax, seriesDataMax), seriesDataMax);
20383
+ axis.dataMin = Math.min((axis.dataMin ?? seriesDataMin), seriesDataMin);
20384
+ axis.dataMax = Math.max((axis.dataMax ?? seriesDataMax), seriesDataMax);
20289
20385
  }
20290
20386
  }
20291
20387
  // Get dataMin and dataMax for Y axes, as well as handle
@@ -20300,11 +20396,11 @@ class Axis {
20300
20396
  // doesn't have active y data, we continue with nulls
20301
20397
  if (isNumber(dataExtremes.dataMin)) {
20302
20398
  seriesDataMin = dataExtremes.dataMin;
20303
- axis.dataMin = Math.min(pick(axis.dataMin, seriesDataMin), seriesDataMin);
20399
+ axis.dataMin = Math.min((axis.dataMin ?? seriesDataMin), seriesDataMin);
20304
20400
  }
20305
20401
  if (isNumber(dataExtremes.dataMax)) {
20306
20402
  seriesDataMax = dataExtremes.dataMax;
20307
- axis.dataMax = Math.max(pick(axis.dataMax, seriesDataMax), seriesDataMax);
20403
+ axis.dataMax = Math.max((axis.dataMax ?? seriesDataMax), seriesDataMax);
20308
20404
  }
20309
20405
  // Adjust to threshold
20310
20406
  if (defined(threshold)) {
@@ -20459,7 +20555,7 @@ class Axis {
20459
20555
  translatedValue
20460
20556
  };
20461
20557
  fireEvent(this, 'getPlotLinePath', evt, function (e) {
20462
- translatedValue = pick(translatedValue, axis.translate(value, void 0, void 0, old));
20558
+ translatedValue = translatedValue ?? axis.translate(value, void 0, void 0, old);
20463
20559
  // Keep the translated value within sane bounds, and avoid Infinity
20464
20560
  // to fail the isNumber test (#7709).
20465
20561
  translatedValue = clamp(translatedValue, -1e9, 1e9);
@@ -20548,7 +20644,7 @@ class Axis {
20548
20644
  getMinorTickInterval() {
20549
20645
  const { minorTicks, minorTickInterval } = this.options;
20550
20646
  if (minorTicks === true) {
20551
- return pick(minorTickInterval, 'auto');
20647
+ return (minorTickInterval ?? 'auto');
20552
20648
  }
20553
20649
  if (minorTicks === false) {
20554
20650
  return;
@@ -20831,7 +20927,9 @@ class Axis {
20831
20927
  const seriesPointRange = hasCategories ?
20832
20928
  1 :
20833
20929
  (isXAxis ?
20834
- pick(series.options.pointRange, closestPointRange, 0) :
20930
+ (series.options.pointRange ??
20931
+ closestPointRange ??
20932
+ 0) :
20835
20933
  (axis.axisPointRange || 0)), // #2806
20836
20934
  pointPlacement = series.options.pointPlacement;
20837
20935
  pointRange = Math.max(pointRange, seriesPointRange);
@@ -20915,14 +21013,16 @@ class Axis {
20915
21013
  this.getTickAmount();
20916
21014
  }
20917
21015
  // Min or max set either by zooming/setExtremes or initial options
20918
- hardMin = pick(axis.userMin, time.parse(options.min));
20919
- hardMax = pick(axis.userMax, time.parse(options.max));
21016
+ hardMin = (axis.userMin ?? time.parse(options.min));
21017
+ hardMax = (axis.userMax ?? time.parse(options.max));
20920
21018
  // Linked axis gets the extremes from the parent axis
20921
21019
  if (linkedParent) {
20922
21020
  axis.linkedParent = linkedParent;
20923
21021
  linkedParentExtremes = linkedParent.getExtremes();
20924
- axis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);
20925
- axis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);
21022
+ axis.min =
21023
+ linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
21024
+ axis.max =
21025
+ linkedParentExtremes.max ?? linkedParentExtremes.dataMax;
20926
21026
  if (this.type !== linkedParent.type) {
20927
21027
  // Can't link axes of different type
20928
21028
  error(11, true, chart);
@@ -20944,14 +21044,14 @@ class Axis {
20944
21044
  maxPadding = 0;
20945
21045
  }
20946
21046
  }
20947
- axis.min = pick(hardMin, thresholdMin, dataMin);
20948
- axis.max = pick(hardMax, thresholdMax, dataMax);
21047
+ axis.min = (hardMin ?? thresholdMin ?? dataMin);
21048
+ axis.max = (hardMax ?? thresholdMax ?? dataMax);
20949
21049
  }
20950
21050
  if (isNumber(axis.max) && isNumber(axis.min)) {
20951
21051
  if (logarithmic) {
20952
21052
  if (axis.positiveValuesOnly &&
20953
21053
  !secondPass &&
20954
- Math.min(axis.min, pick(dataMin, axis.min)) <= 0) { // #978
21054
+ Math.min(axis.min, (dataMin ?? axis.min)) <= 0) { // #978
20955
21055
  // Can't plot negative values on log axis
20956
21056
  error(10, true, chart);
20957
21057
  }
@@ -21057,16 +21157,13 @@ class Axis {
21057
21157
  axis.tickInterval = tickIntervalOption = linkedParent.tickInterval;
21058
21158
  }
21059
21159
  else {
21060
- axis.tickInterval = pick(tickIntervalOption, this.tickAmount ?
21160
+ axis.tickInterval = tickIntervalOption ?? (this.tickAmount ?
21061
21161
  range / Math.max(this.tickAmount - 1, 1) :
21062
- void 0,
21063
- // For categorized axis, 1 is default, for linear axis use
21064
- // tickPix
21065
- categories ?
21066
- 1 :
21067
- // Don't let it be more than the data range
21068
- range * tickPixelIntervalOption /
21069
- Math.max(axis.len, tickPixelIntervalOption));
21162
+ categories ?
21163
+ 1 :
21164
+ // Don't let it be more than the data range
21165
+ range * tickPixelIntervalOption /
21166
+ Math.max(axis.len, tickPixelIntervalOption));
21070
21167
  }
21071
21168
  // Now we're finished detecting min and max, crop and group series data.
21072
21169
  // This is in turn needed in order to find tick positions in ordinal
@@ -21096,12 +21193,9 @@ class Axis {
21096
21193
  }
21097
21194
  // Before normalizing the tick interval, handle minimum tick interval.
21098
21195
  // This applies only if tickInterval is not defined.
21099
- const minTickInterval = pick(options.minTickInterval,
21100
- // In datetime axes, don't go below the data interval, except when
21101
- // there are scatter-like series involved (#13369).
21102
- dateTime &&
21103
- !axis.series.some((s) => !s.sorted) ?
21104
- axis.closestPointRange : 0);
21196
+ const minTickInterval = options.minTickInterval ?? (dateTime && !axis.series.some((s) => !s.sorted) ?
21197
+ axis.closestPointRange :
21198
+ 0);
21105
21199
  if (!tickIntervalOption &&
21106
21200
  minTickInterval &&
21107
21201
  axis.tickInterval < minTickInterval) {
@@ -21431,7 +21525,7 @@ class Axis {
21431
21525
  * @function Highcharts.Axis#adjustTickAmount
21432
21526
  */
21433
21527
  adjustTickAmount() {
21434
- const axis = this, { finalTickAmt, max, min, options, tickPositions, tickAmount, thresholdAlignment } = axis, currentTickAmount = tickPositions?.length, threshold = pick(axis.threshold, axis.softThreshold ? 0 : null);
21528
+ const axis = this, { finalTickAmt, max, min, options, tickPositions, tickAmount, thresholdAlignment } = axis, currentTickAmount = tickPositions?.length, threshold = axis.threshold ?? (axis.softThreshold ? 0 : null);
21435
21529
  let len, i, tickInterval = axis.tickInterval, thresholdTickIndex;
21436
21530
  const
21437
21531
  // Extend the tickPositions by appending a position
@@ -21667,7 +21761,8 @@ class Axis {
21667
21761
  offsets = options.offsets || [0, 0, 0, 0], horiz = this.horiz,
21668
21762
  // Check for percentage based input values. Rounding fixes problems
21669
21763
  // with column overflow and plot line filtering (#4898, #4899)
21670
- width = this.width = Math.round(relativeLength(pick(options.width, chart.plotWidth - offsets[3] + offsets[1]), chart.plotWidth)), height = this.height = Math.round(relativeLength(pick(options.height, chart.plotHeight - offsets[0] + offsets[2]), chart.plotHeight)), top = this.top = Math.round(relativeLength(pick(options.top, chart.plotTop + offsets[0]), chart.plotHeight, chart.plotTop)), left = this.left = Math.round(relativeLength(pick(options.left, chart.plotLeft + offsets[3]), chart.plotWidth, chart.plotLeft));
21764
+ width = this.width = Math.round(relativeLength((options.width ?? chart.plotWidth - offsets[3] + offsets[1]), chart.plotWidth)), height = this.height = Math.round(relativeLength((options.height ??
21765
+ chart.plotHeight - offsets[0] + offsets[2]), chart.plotHeight)), top = this.top = Math.round(relativeLength((options.top ?? chart.plotTop + offsets[0]), chart.plotHeight, chart.plotTop)), left = this.left = Math.round(relativeLength((options.left ?? chart.plotLeft + offsets[3]), chart.plotWidth, chart.plotLeft));
21671
21766
  // Expose basic values to use in Series object and navigator
21672
21767
  this.bottom = chart.chartHeight - height - top;
21673
21768
  this.right = chart.chartWidth - width - left;
@@ -21778,9 +21873,7 @@ class Axis {
21778
21873
  * An array of tickLength and tickWidth
21779
21874
  */
21780
21875
  tickSize(prefix) {
21781
- const options = this.options, tickWidth = pick(options[prefix === 'tick' ? 'tickWidth' : 'minorTickWidth'],
21782
- // Default to 1 on linear and datetime X axes
21783
- prefix === 'tick' && this.isXAxis && !this.categories ? 1 : 0);
21876
+ const options = this.options, tickWidth = options[prefix === 'tick' ? 'tickWidth' : 'minorTickWidth'] ?? (prefix === 'tick' && this.isXAxis && !this.categories ? 1 : 0);
21784
21877
  let tickLength = options[prefix === 'tick' ? 'tickLength' : 'minorTickLength'], tickSize;
21785
21878
  if (tickWidth && tickLength) {
21786
21879
  // Negate the length
@@ -21867,7 +21960,7 @@ class Axis {
21867
21960
  newTickInterval = getStep(lineHeight * 0.75);
21868
21961
  }
21869
21962
  this.autoRotation = autoRotation;
21870
- this.labelRotation = pick(rotation, isNumber(rotationOption) ? rotationOption : 0);
21963
+ this.labelRotation = rotation ?? (isNumber(rotationOption) ? rotationOption : 0);
21871
21964
  return labelOptions.step ? tickInterval : newTickInterval;
21872
21965
  }
21873
21966
  /**
@@ -22219,7 +22312,7 @@ class Axis {
22219
22312
  titleOffsetOption = axisTitleOptions.offset;
22220
22313
  titleMargin = defined(titleOffsetOption) ?
22221
22314
  0 :
22222
- pick(axisTitleOptions.margin, horiz ? 5 : 10);
22315
+ axisTitleOptions.margin ?? (horiz ? 5 : 10);
22223
22316
  }
22224
22317
  }
22225
22318
  // Render the axis line
@@ -22451,7 +22544,7 @@ class Axis {
22451
22544
  * @emits Highcharts.Axis#event:afterRender
22452
22545
  */
22453
22546
  render() {
22454
- 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 = Axis_animObject(renderer.globalAnimation);
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);
22455
22548
  let from, to;
22456
22549
  // Reset
22457
22550
  axis.labelEdge.length = 0;
@@ -22730,9 +22823,9 @@ class Axis {
22730
22823
  }
22731
22824
  else if (defined(point)) {
22732
22825
  // #3834
22733
- pos = pick(this.coll !== 'colorAxis' ?
22734
- point.crosshairPos : // 3D axis extension
22735
- null, this.isXAxis ?
22826
+ pos = (this.coll !== 'colorAxis' ?
22827
+ point.crosshairPos :
22828
+ null) ?? (this.isXAxis ?
22736
22829
  point.plotX :
22737
22830
  this.len - point.plotY);
22738
22831
  }
@@ -22741,7 +22834,7 @@ class Axis {
22741
22834
  // Value, only used on radial
22742
22835
  value: point && (this.isXAxis ?
22743
22836
  point.x :
22744
- pick(point.stackY, point.y)),
22837
+ (point.stackY ?? point.y ?? void 0)),
22745
22838
  translatedValue: pos
22746
22839
  };
22747
22840
  if (chart.polar) {
@@ -22774,7 +22867,7 @@ class Axis {
22774
22867
  (categorized ? 'category ' : 'thin ') +
22775
22868
  (options.className || ''))
22776
22869
  .attr({
22777
- zIndex: pick(options.zIndex, 2)
22870
+ zIndex: (options.zIndex ?? 2)
22778
22871
  })
22779
22872
  .clip(options.clip === false ?
22780
22873
  void 0 :
@@ -22789,7 +22882,7 @@ class Axis {
22789
22882
  // eslint-disable-next-line max-len
22790
22883
  'var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22791
22884
  'var(--highcharts-neutral-color-20)'),
22792
- 'stroke-width': pick(options.width, 1)
22885
+ 'stroke-width': (options.width ?? 1)
22793
22886
  }).css({
22794
22887
  'pointer-events': 'none'
22795
22888
  });
@@ -22802,7 +22895,7 @@ class Axis {
22802
22895
  }
22803
22896
  cross
22804
22897
  .show()
22805
- .animate({ d: path }, Axis_animObject(options?.animation));
22898
+ .animate({ d: path }, animObject(options?.animation));
22806
22899
  if (categorized && !options.width) {
22807
22900
  cross.attr({
22808
22901
  'stroke-width': this.transA
@@ -22855,7 +22948,7 @@ class Axis {
22855
22948
  this.destroy(true);
22856
22949
  this.init(chart, options);
22857
22950
  chart.isDirtyBox = true;
22858
- if (pick(redraw, true)) {
22951
+ if (redraw ?? true) {
22859
22952
  chart.redraw();
22860
22953
  }
22861
22954
  }
@@ -22885,7 +22978,7 @@ class Axis {
22885
22978
  chart.orderItems(coll);
22886
22979
  this.destroy();
22887
22980
  chart.isDirtyBox = true;
22888
- if (pick(redraw, true)) {
22981
+ if (redraw ?? true) {
22889
22982
  chart.redraw();
22890
22983
  }
22891
22984
  }
@@ -23541,8 +23634,10 @@ var LogarithmicAxis;
23541
23634
  tickIntervalOption, tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), totalPixelLength = minor ?
23542
23635
  axisLength / axis.tickPositions.length :
23543
23636
  axisLength;
23544
- interval = pick(filteredTickIntervalOption, log.minorAutoInterval, (realMax - realMin) *
23545
- tickPixelIntervalOption / (totalPixelLength || 1));
23637
+ interval = filteredTickIntervalOption ??
23638
+ log.minorAutoInterval ??
23639
+ (realMax - realMin) * tickPixelIntervalOption /
23640
+ (totalPixelLength || 1);
23546
23641
  interval = normalizeTickInterval(interval);
23547
23642
  positions = axis.getLinearTickPositions(interval, realMin, realMax).map(log.log2lin);
23548
23643
  if (!minor) {
@@ -23971,7 +24066,8 @@ class PlotLineOrBand {
23971
24066
  if (!chart.styledMode) {
23972
24067
  if (isLine) {
23973
24068
  attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
23974
- attribs['stroke-width'] = pick(options.width, 1);
24069
+ attribs['stroke-width'] =
24070
+ options.width ?? 1;
23975
24071
  if (options.dashStyle) {
23976
24072
  attribs.dashstyle = options.dashStyle;
23977
24073
  }
@@ -24840,7 +24936,6 @@ class PlotLineOrBand {
24840
24936
  * */
24841
24937
 
24842
24938
 
24843
- const { animObject: Tooltip_animObject } = AnimationUtilities;
24844
24939
 
24845
24940
  const { format: Tooltip_format } = Core_Templating;
24846
24941
 
@@ -25104,7 +25199,8 @@ class Tooltip {
25104
25199
  'highcharts-label',
25105
25200
  isHeader && 'highcharts-tooltip-header',
25106
25201
  isSplit ? 'highcharts-tooltip-box' : 'highcharts-tooltip',
25107
- !isHeader && 'highcharts-color-' + pick(point.colorIndex, series.colorIndex),
25202
+ !isHeader &&
25203
+ 'highcharts-color-' + (point.colorIndex ?? series.colorIndex),
25108
25204
  seriesOptions?.className
25109
25205
  ].filter(isString).join(' ');
25110
25206
  }
@@ -25289,7 +25385,8 @@ class Tooltip {
25289
25385
  }
25290
25386
  // The far side is right or bottom
25291
25387
  const preferFarSide = !this.followPointer &&
25292
- pick(point.ttBelow, polar ? false : !inverted === flipped), // #4984
25388
+ (point.ttBelow ??
25389
+ (polar ? false : !inverted === flipped)), // #4984
25293
25390
  /*
25294
25391
  * Handle the preferred dimension. When the preferred dimension is
25295
25392
  * tooltip on top or bottom of the point, it will look for space
@@ -25416,7 +25513,7 @@ class Tooltip {
25416
25513
  const tooltip = this;
25417
25514
  // Disallow duplicate timers (#1728, #1766)
25418
25515
  clearTimeouts(this);
25419
- delay = pick(delay, this.options.hideDelay);
25516
+ delay = (delay ?? this.options.hideDelay);
25420
25517
  if (!this.isHidden) {
25421
25518
  this.hideTimer = syncTimeout(function () {
25422
25519
  const label = tooltip.getLabel();
@@ -25519,7 +25616,9 @@ class Tooltip {
25519
25616
  * Split tooltip does not support outside in the first iteration. Should
25520
25617
  * not be too complicated to implement.
25521
25618
  */
25522
- this.outside = pick(options.outside, Boolean(chart.scrollablePixelsX || chart.scrollablePixelsY));
25619
+ this.outside =
25620
+ options.outside ??
25621
+ Boolean(chart.scrollablePixelsX || chart.scrollablePixelsY);
25523
25622
  }
25524
25623
  shouldStickOnContact(pointerEvent) {
25525
25624
  return !!(!this.followPointer &&
@@ -25541,7 +25640,7 @@ class Tooltip {
25541
25640
  * @param {number} anchorY
25542
25641
  */
25543
25642
  move(x, y, anchorX, anchorY) {
25544
- const { followPointer, options } = this, animation = Tooltip_animObject(!followPointer &&
25643
+ const { followPointer, options } = this, animation = animObject(!followPointer &&
25545
25644
  !this.isHidden &&
25546
25645
  !options.fixed &&
25547
25646
  options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
@@ -25599,7 +25698,7 @@ class Tooltip {
25599
25698
  point.points = void 0;
25600
25699
  // Register the current series
25601
25700
  const currentSeries = point.series;
25602
- this.distance = pick(currentSeries.tooltipOptions.distance, 16);
25701
+ this.distance = (currentSeries.tooltipOptions.distance ?? 16);
25603
25702
  // Update the inner HTML
25604
25703
  if (text === false) {
25605
25704
  this.hide();
@@ -25872,7 +25971,7 @@ class Tooltip {
25872
25971
  anchorY,
25873
25972
  boxWidth,
25874
25973
  point,
25875
- rank: pick(boxPosition.rank, isHeader ? 1 : 0),
25974
+ rank: boxPosition.rank ?? (isHeader ? 1 : 0),
25876
25975
  size,
25877
25976
  target: boxPosition.y,
25878
25977
  tt,
@@ -26289,7 +26388,6 @@ class Tooltip {
26289
26388
 
26290
26389
 
26291
26390
 
26292
- const { animObject: Point_animObject } = AnimationUtilities;
26293
26391
 
26294
26392
  const { defaultOptions: Point_defaultOptions } = Defaults;
26295
26393
 
@@ -26629,10 +26727,15 @@ class Point {
26629
26727
  *
26630
26728
  * @internal
26631
26729
  * @function Highcharts.Point#destroy
26730
+ *
26731
+ * @param {boolean} [sync]
26732
+ * Whether to destroy the point synchronously. Used internally from
26733
+ * series.destroy, where condemned points may cause animation errors
26734
+ * (#24976).
26632
26735
  */
26633
- destroy() {
26634
- if (!this.condemned) {
26635
- const point = this, series = point.series, chart = series.chart, hoverPoints = chart.hoverPoints, globalAnimation = point.series.chart.renderer.globalAnimation, { duration } = Point_animObject(globalAnimation);
26736
+ destroy(sync) {
26737
+ if (!this.destroyed && !this.condemned) {
26738
+ const point = this, series = point.series, chart = series.chart, hoverPoints = chart.hoverPoints, globalAnimation = point.series.chart.renderer.globalAnimation, { duration } = animObject(globalAnimation);
26636
26739
  /**
26637
26740
  * Allow to call after animation.
26638
26741
  * @internal
@@ -26649,6 +26752,7 @@ class Point {
26649
26752
  for (const prop in point) { // eslint-disable-line guard-for-in
26650
26753
  delete point[prop];
26651
26754
  }
26755
+ this.destroyed = true;
26652
26756
  };
26653
26757
  if (point.legendItem) {
26654
26758
  // Pies have legend items
@@ -26665,7 +26769,7 @@ class Point {
26665
26769
  point.onMouseOut();
26666
26770
  }
26667
26771
  // Remove properties after animation
26668
- if (duration && series.condemnedPoints) {
26772
+ if (duration && !sync && series.condemnedPoints) {
26669
26773
  series.condemnedPoints.push(this);
26670
26774
  this.graphic?.addClass('highcharts-point-condemned');
26671
26775
  setTimeout(destroyPoint, duration);
@@ -26788,14 +26892,15 @@ class Point {
26788
26892
  *
26789
26893
  * @function Highcharts.Point#getZone
26790
26894
  *
26791
- * @return {Highcharts.SeriesZonesOptionsObject}
26792
- * The zone item.
26895
+ * @return {Highcharts.SeriesZonesOptionsObject|undefined}
26896
+ * The zone item, or `undefined` if the series has no zones.
26793
26897
  */
26794
26898
  getZone() {
26795
26899
  const series = this.series, zones = series.zones, zoneAxis = series.zoneAxis || 'y';
26796
26900
  let zone, i = 0;
26797
26901
  zone = zones[i];
26798
- while (this[zoneAxis] >= zone.value) {
26902
+ while (i < zones.length &&
26903
+ this[zoneAxis] >= zone.value) {
26799
26904
  zone = zones[++i];
26800
26905
  }
26801
26906
  // For resetting or reusing the point (#8100)
@@ -27211,7 +27316,7 @@ class Point {
27211
27316
  */
27212
27317
  select(selected, accumulate) {
27213
27318
  const point = this, series = point.series, chart = series.chart;
27214
- selected = pick(selected, !point.selected);
27319
+ selected = (selected ?? !point.selected);
27215
27320
  this.selectedStaging = selected;
27216
27321
  // Fire the event with the default handler
27217
27322
  point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {
@@ -27335,9 +27440,8 @@ class Point {
27335
27440
  * @emits Highcharts.Point#event:afterSetState
27336
27441
  */
27337
27442
  setState(state, move) {
27338
- const point = this, series = point.series, previousState = point.state, stateOptions = (series.options.states[state || 'normal'] ||
27339
- {}), markerOptions = (Point_defaultOptions.plotOptions[series.type].marker &&
27340
- series.options.marker), normalDisabled = (markerOptions && markerOptions.enabled === false), markerStateOptions = markerOptions?.states?.[state || 'normal'] ||
27443
+ const point = this, series = point.series, previousState = point.state, stateOptions = series.options.states?.[state || 'normal'] || {}, markerOptions = (Point_defaultOptions.plotOptions?.[series.type]?.marker &&
27444
+ series.options.marker), normalDisabled = markerOptions?.enabled === false, markerStateOptions = markerOptions?.states?.[state || 'normal'] ||
27341
27445
  {}, stateDisabled = markerStateOptions.enabled === false, pointMarker = point.marker || {}, chart = series.chart, hasMarkers = (markerOptions && series.markerAttribs);
27342
27446
  let halo = series.halo, markerAttribs, pointAttribs, pointAttribsAnimation, stateMarkerGraphic = series.stateMarkerGraphic, newSymbol;
27343
27447
  state = state || ''; // Empty string
@@ -27350,13 +27454,10 @@ class Point {
27350
27454
  (stateOptions.enabled === false) ||
27351
27455
  // General point marker's state options is disabled
27352
27456
  (state && (stateDisabled ||
27353
- (normalDisabled &&
27354
- markerStateOptions.enabled === false))) ||
27457
+ (normalDisabled && markerStateOptions.enabled === false))) ||
27355
27458
  // Individual point marker's state options is disabled
27356
27459
  (state &&
27357
- pointMarker.states &&
27358
- pointMarker.states[state] &&
27359
- pointMarker.states[state].enabled === false) // #1610
27460
+ pointMarker.states?.[state]?.enabled === false) // #1610
27360
27461
  ) {
27361
27462
  return;
27362
27463
  }
@@ -27375,7 +27476,8 @@ class Point {
27375
27476
  }
27376
27477
  if (!chart.styledMode) {
27377
27478
  pointAttribs = series.pointAttribs(point, state);
27378
- pointAttribsAnimation = pick(chart.options.chart.animation, stateOptions.animation);
27479
+ pointAttribsAnimation = (chart.options.chart.animation ??
27480
+ stateOptions.animation);
27379
27481
  const opacity = pointAttribs.opacity;
27380
27482
  // Some inactive points (e.g. slices in pie) should apply
27381
27483
  // opacity also for their labels
@@ -27393,9 +27495,11 @@ class Point {
27393
27495
  point.graphic.animate(pointAttribs, pointAttribsAnimation);
27394
27496
  }
27395
27497
  if (markerAttribs) {
27396
- point.graphic.animate(markerAttribs, pick(
27498
+ point.graphic.animate(markerAttribs, (
27397
27499
  // Turn off globally:
27398
- chart.options.chart.animation, markerStateOptions.animation, markerOptions.animation));
27500
+ chart.options.chart.animation ??
27501
+ markerStateOptions.animation ??
27502
+ markerOptions.animation));
27399
27503
  }
27400
27504
  // Zooming in from a range with no markers to a range with markers
27401
27505
  if (stateMarkerGraphic) {
@@ -27444,10 +27548,12 @@ class Point {
27444
27548
  }
27445
27549
  }
27446
27550
  // Show me your halo
27447
- const haloOptions = stateOptions.halo;
27551
+ const haloOptions = isObject(stateOptions.halo) ?
27552
+ stateOptions.halo :
27553
+ {};
27448
27554
  const markerGraphic = (point.graphic || stateMarkerGraphic);
27449
27555
  const markerVisibility = markerGraphic?.visibility || 'inherit';
27450
- if (haloOptions?.size &&
27556
+ if (haloOptions.size &&
27451
27557
  markerGraphic &&
27452
27558
  markerVisibility !== 'hidden' &&
27453
27559
  !point.isCluster) {
@@ -27461,7 +27567,7 @@ class Point {
27461
27567
  });
27462
27568
  halo.attr({
27463
27569
  'class': 'highcharts-halo highcharts-color-' +
27464
- pick(point.colorIndex, series.colorIndex) +
27570
+ (point.colorIndex ?? series.colorIndex) +
27465
27571
  (point.className ? ' ' + point.className : ''),
27466
27572
  'visibility': markerVisibility,
27467
27573
  'zIndex': -1 // #4929, #8276
@@ -27977,6 +28083,11 @@ class Pointer {
27977
28083
  }
27978
28084
  }
27979
28085
  }
28086
+ // Run a final transform with a drop trigger to display the reset
28087
+ // zoom button after a pinch gesture (#22128)
28088
+ if (e?.type === 'touchend' && this.hasDragged) {
28089
+ chart.transform({ trigger: 'drop' });
28090
+ }
27980
28091
  if (redraw) {
27981
28092
  chart.redraw();
27982
28093
  }
@@ -28189,7 +28300,7 @@ class Pointer {
28189
28300
  const hoverPoints = [], useExisting = !!(isDirectTouch && existingHoverPoint), filter = function (s) {
28190
28301
  return (s.visible &&
28191
28302
  !(!shared && s.directTouch) && // #3821
28192
- pick(s.options.enableMouseTracking, true));
28303
+ (s.options.enableMouseTracking ?? true));
28193
28304
  };
28194
28305
  let hoverSeries = existingHoverSeries,
28195
28306
  // Which series to look in for the hover point
@@ -28375,8 +28486,8 @@ class Pointer {
28375
28486
  const ePos = (touches ?
28376
28487
  touches.length ?
28377
28488
  touches.item(0) :
28378
- (pick(// #13534
28379
- touches.changedTouches, e.changedTouches))[0] :
28489
+ (touches.changedTouches ??
28490
+ e.changedTouches)[0] :
28380
28491
  e);
28381
28492
  // Get mouse position
28382
28493
  if (!chartPosition) {
@@ -28450,7 +28561,7 @@ class Pointer {
28450
28561
  * @function Highcharts.Pointer#onContainerMouseLeave
28451
28562
  */
28452
28563
  onContainerMouseLeave(e) {
28453
- const { pointer } = Pointer_charts[pick(Pointer.hoverChartIndex, -1)] || {};
28564
+ const { pointer } = Pointer_charts[(Pointer.hoverChartIndex ?? -1)] || {};
28454
28565
  e = this.normalize(e);
28455
28566
  this.onContainerMouseMove(e);
28456
28567
  // #4886, MS Touch end fires mouseleave but with no related target
@@ -28550,7 +28661,7 @@ class Pointer {
28550
28661
  if (e?.touches && this.hasPinchMoved) {
28551
28662
  e?.preventDefault?.();
28552
28663
  }
28553
- Pointer_charts[pick(Pointer.hoverChartIndex, -1)]
28664
+ Pointer_charts[(Pointer.hoverChartIndex ?? -1)]
28554
28665
  ?.pointer
28555
28666
  ?.drop(e);
28556
28667
  }
@@ -28620,6 +28731,9 @@ class Pointer {
28620
28731
  from: boxFromTouches(lastTouches),
28621
28732
  trigger: e.type
28622
28733
  });
28734
+ // Record a truthy value in order to trigger the final transform
28735
+ // in the drop function
28736
+ pointer.hasDragged = 1;
28623
28737
  });
28624
28738
  if (pointer.res) {
28625
28739
  pointer.res = false;
@@ -29054,7 +29168,7 @@ class Pointer {
29054
29168
  */
29055
29169
  setHoverChartIndex(e) {
29056
29170
  const chart = this.chart;
29057
- const hoverChart = Core_Globals.charts[pick(Pointer.hoverChartIndex, -1)];
29171
+ const hoverChart = Core_Globals.charts[(Pointer.hoverChartIndex ?? -1)];
29058
29172
  if (hoverChart &&
29059
29173
  hoverChart !== chart) {
29060
29174
  const relatedTargetObj = { relatedTarget: chart.container };
@@ -29100,7 +29214,7 @@ class Pointer {
29100
29214
  Math.pow(pinchDown[0].chartY - e.chartY, 2)) >= 16 :
29101
29215
  false;
29102
29216
  }
29103
- if (pick(hasMoved, true)) {
29217
+ if (hasMoved ?? true) {
29104
29218
  this.pinch(e);
29105
29219
  }
29106
29220
  }
@@ -29111,7 +29225,9 @@ class Pointer {
29111
29225
  // If inside, capture touch-drag and display tooltip. If not inside,
29112
29226
  // allow dragging the finger to scroll the page
29113
29227
  if ((chart.tooltip?.options.followTouchMove ?? true) &&
29114
- isInside) {
29228
+ isInside &&
29229
+ e.type === 'touchmove' &&
29230
+ !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29115
29231
  e.preventDefault();
29116
29232
  }
29117
29233
  }
@@ -29141,7 +29257,7 @@ class Pointer {
29141
29257
  let zoomType = chart.zooming.type || '', zoomX, zoomY;
29142
29258
  // Look for the pinchType option
29143
29259
  if (/touch/.test(e.type)) {
29144
- zoomType = pick(chart.zooming.pinchType, zoomType);
29260
+ zoomType = (chart.zooming.pinchType ?? zoomType);
29145
29261
  }
29146
29262
  this.zoomX = zoomX = /x/.test(zoomType);
29147
29263
  this.zoomY = zoomY = /y/.test(zoomType);
@@ -29583,7 +29699,7 @@ class DataTableCore {
29583
29699
  * Fetches the given column by the canonical column ID. Simplified version
29584
29700
  * of the full `DataTable.getRow` method, always returning by reference.
29585
29701
  *
29586
- * @function Highcharts.DataTable#setColumn
29702
+ * @function Highcharts.DataTable#getColumn
29587
29703
  *
29588
29704
  * @param {string} columnId
29589
29705
  * ID of the column to get.
@@ -29915,7 +30031,7 @@ var LegendSymbol;
29915
30031
  // Draw the marker
29916
30032
  if (markerOptions && markerOptions.enabled !== false && symbolWidth) {
29917
30033
  // Do not allow the marker to be larger than the symbolHeight
29918
- let radius = Math.min(pick(markerOptions.radius, generalRadius), generalRadius);
30034
+ let radius = Math.min((markerOptions.radius ?? generalRadius), generalRadius);
29919
30035
  // Restrict symbol markers size
29920
30036
  if (symbol.indexOf('url') === 0) {
29921
30037
  markerOptions = merge(markerOptions, {
@@ -30319,6 +30435,10 @@ const seriesDefaults = {
30319
30435
  * ```
30320
30436
  *
30321
30437
  * @type {Highcharts.DataMappingOptionsObject}
30438
+ * @sample highcharts/datatable/datamapping
30439
+ * Basic data mapping
30440
+ * @sample highcharts/datatable/datamapping-dynamic
30441
+ * Data mapping with dynamic updates
30322
30442
  * @sample {highcharts} highcharts/datatable/series-datatable-multiple
30323
30443
  * Series with two data tables
30324
30444
  * @sample {highcharts} highcharts/datatable/nested-keys
@@ -30329,6 +30449,29 @@ const seriesDefaults = {
30329
30449
  * @since 13.0.0
30330
30450
  * @apioption plotOptions.series.dataMapping
30331
30451
  */
30452
+ /**
30453
+ * Options for a specific series-level data table or an array of data
30454
+ * tables. The `dataTable` option can be either a configuration object or an
30455
+ * instance of the `DataTable` class. If a `DataTable` instance is passed,
30456
+ * it will be used directly. If a configuration object or an array is
30457
+ * passed, a new `DataTable` instance will be created based on the provided
30458
+ * configuration.
30459
+ *
30460
+ * @type {Highcharts.DataTable|Highcharts.DataTableOptionsObject|Array<Highcharts.DataTable|Highcharts.DataTableOptionsObject>}
30461
+ * @sample {highcharts} highcharts/datatable/series-datatable/
30462
+ * Series with one data table each
30463
+ * @sample {highcharts} highcharts/datatable/series-datatable-multiple/
30464
+ * Series with two data tables
30465
+ * @sample {highstock} stock/datatable/series-datatable/
30466
+ * Series with one data table each
30467
+ * @sample {highstock} stock/datatable/series-datatable-multiple/
30468
+ * Series with two data tables
30469
+ * @sample {highmaps} maps/datatable/series-datatable
30470
+ * Series-level data table
30471
+ *
30472
+ * @since 13.0.0
30473
+ * @apioption plotOptions.series.dataTable
30474
+ */
30332
30475
  /**
30333
30476
  * Enable or disable the mouse tracking for a specific series. This
30334
30477
  * includes point tooltips and click events on graphs and points. For
@@ -31212,6 +31355,7 @@ const seriesDefaults = {
31212
31355
  * `series.allowPointSelect` option to true.
31213
31356
  *
31214
31357
  * @declare Highcharts.PointStatesSelectOptionsObject
31358
+ * @extends plotOptions.series.marker.states.hover
31215
31359
  */
31216
31360
  select: {
31217
31361
  /**
@@ -31788,6 +31932,7 @@ const seriesDefaults = {
31788
31932
  * @sample {highmaps} maps/plotoptions/series-datalabels-box/
31789
31933
  * Data labels box options
31790
31934
  *
31935
+ * @type {number|Array<number>}
31791
31936
  * @since 2.2.1
31792
31937
  */
31793
31938
  padding: [1, 3],
@@ -31989,6 +32134,9 @@ const seriesDefaults = {
31989
32134
  /**
31990
32135
  * A collection of options for different series states.
31991
32136
  *
32137
+ * In addition to the options documented under each state, any option from
32138
+ * the parent series type can be set, with exception of `data` and `states`.
32139
+ *
31992
32140
  * @declare Highcharts.SeriesStatesOptionsObject
31993
32141
  */
31994
32142
  states: {
@@ -32162,6 +32310,7 @@ const seriesDefaults = {
32162
32310
  * Disabled inactive state
32163
32311
  *
32164
32312
  * @declare Highcharts.SeriesStatesInactiveOptionsObject
32313
+ * @extends plotOptions.series.states.hover
32165
32314
  */
32166
32315
  inactive: {
32167
32316
  /**
@@ -32562,7 +32711,6 @@ var SeriesRegistry;
32562
32711
  * */
32563
32712
 
32564
32713
 
32565
- const { animObject: Series_animObject, setAnimation: Series_setAnimation } = AnimationUtilities;
32566
32714
 
32567
32715
 
32568
32716
  const { defaultOptions: Series_defaultOptions } = Defaults;
@@ -32700,6 +32848,13 @@ class Series {
32700
32848
  * @type {number|undefined}
32701
32849
  * @readonly
32702
32850
  */
32851
+ /**
32852
+ * The main group for the series' graphics.
32853
+ *
32854
+ * @name Highcharts.Series#group
32855
+ * @type {Highcharts.SVGElement}
32856
+ * @readonly
32857
+ */
32703
32858
  /**
32704
32859
  * Contains the series' index in the `Chart.series` array.
32705
32860
  *
@@ -32832,10 +32987,12 @@ class Series {
32832
32987
  */
32833
32988
  series.options = series.setOptions(userOptions);
32834
32989
  const options = series.options, visible = options.visible !== false;
32835
- // Create the data table
32836
- this.dataTable ?? (this.dataTable = options.dataTable?.isDataTable ?
32837
- options.dataTable :
32838
- new Data_DataTableCore(options.dataTable));
32990
+ // Create the data table or use the one passed as option
32991
+ this.dataTable ?? (this.dataTable = isArray(options.dataTable) ?
32992
+ new Data_DataTableCore() :
32993
+ options.dataTable?.isDataTable ?
32994
+ options.dataTable :
32995
+ new Data_DataTableCore(options.dataTable));
32839
32996
  /**
32840
32997
  * All child series that are linked to the current series through the
32841
32998
  * [linkedTo](https://api.highcharts.com/highcharts/series.line.linkedTo)
@@ -32895,7 +33052,7 @@ class Series {
32895
33052
  if (chartSeries.length) {
32896
33053
  lastSeries = chartSeries[chartSeries.length - 1];
32897
33054
  }
32898
- series._i = pick(lastSeries?._i, -1) + 1;
33055
+ series._i = (lastSeries?._i ?? -1) + 1;
32899
33056
  series.opacity = series.options.opacity;
32900
33057
  // Insert the series and re-order all series above the insertion
32901
33058
  // point.
@@ -32942,7 +33099,7 @@ class Series {
32942
33099
  // Apply if the series xAxis or yAxis option matches
32943
33100
  // the number of the axis, or if undefined, use the
32944
33101
  // first axis
32945
- if (pick(seriesOptions[coll], 0) === axis.index ||
33102
+ if ((seriesOptions[coll] ?? 0) === axis.index ||
32946
33103
  (typeof seriesOptions[coll] !==
32947
33104
  'undefined' &&
32948
33105
  seriesOptions[coll] === axisOptions.id)) {
@@ -32985,8 +33142,12 @@ class Series {
32985
33142
  * @function Highcharts.Series#hasMarkerChanged
32986
33143
  */
32987
33144
  hasMarkerChanged(options, oldOptions) {
32988
- const marker = options.marker, oldMarker = oldOptions.marker || {};
32989
- return marker && ((oldMarker.enabled && !marker.enabled) ||
33145
+ const marker = options.marker, oldMarker = oldOptions.marker;
33146
+ // Note that `marker` holds the full, merged object including
33147
+ // `plotOptions`, while `oldMarker` is the user-defined series-level
33148
+ // options only. We may need to refactor that in the future if more
33149
+ // issues like #24057 arise.
33150
+ return marker && oldMarker && ((oldMarker.enabled && !marker.enabled) ||
32990
33151
  oldMarker.symbol !== marker.symbol || // #10870, #15946
32991
33152
  oldMarker.height !== marker.height || // #16274
32992
33153
  oldMarker.width !== marker.width // #16274
@@ -33005,7 +33166,8 @@ class Series {
33005
33166
  time.parse(options.pointStart) ??
33006
33167
  0;
33007
33168
  let pointInterval;
33008
- this.pointInterval = pointInterval = pick(this.pointInterval, options.pointInterval, 1);
33169
+ this.pointInterval = pointInterval =
33170
+ this.pointInterval ?? options.pointInterval ?? 1;
33009
33171
  if (relativeXValue && isNumber(x)) {
33010
33172
  pointInterval *= x;
33011
33173
  }
@@ -33077,9 +33239,13 @@ class Series {
33077
33239
  );
33078
33240
  // When shared tooltip, stickyTracking is true by default,
33079
33241
  // unless user says otherwise.
33080
- this.stickyTracking = pick(seriesUserOptions.stickyTracking, userPlotOptionsType.stickyTracking, userPlotOptionsSeries.stickyTracking, (this.tooltipOptions.shared && !this.noSharedTooltip ?
33081
- true :
33082
- options.stickyTracking));
33242
+ this.stickyTracking =
33243
+ seriesUserOptions.stickyTracking ??
33244
+ userPlotOptionsType.stickyTracking ??
33245
+ userPlotOptionsSeries.stickyTracking ??
33246
+ (this.tooltipOptions.shared && !this.noSharedTooltip ?
33247
+ true :
33248
+ options.stickyTracking);
33083
33249
  // Delete marker object if not allowed (#1125)
33084
33250
  if (typeOptions.marker === null) {
33085
33251
  delete options.marker;
@@ -33157,7 +33323,9 @@ class Series {
33157
33323
  if (!value) {
33158
33324
  // Pick up either the colorIndex option, or the series.colorIndex
33159
33325
  // after Series.update()
33160
- setting = pick(prop === 'color' ? this.options.colorIndex : void 0, this[indexName]);
33326
+ setting = prop === 'color' ?
33327
+ (this.options.colorIndex ?? this[indexName]) :
33328
+ this[indexName];
33161
33329
  if (defined(setting)) { // After Series.update()
33162
33330
  i = setting;
33163
33331
  }
@@ -33217,7 +33385,7 @@ class Series {
33217
33385
  */
33218
33386
  getSymbol() {
33219
33387
  const seriesMarkerOption = this.options.marker;
33220
- this.getCyclic('symbol', seriesMarkerOption.symbol, this.chart.options.symbols);
33388
+ this.getCyclic('symbol', seriesMarkerOption?.symbol, this.chart.options.symbols);
33221
33389
  }
33222
33390
  /**
33223
33391
  * Shorthand to get one of the series' data columns from `Series.dataTable`.
@@ -33413,9 +33581,10 @@ class Series {
33413
33581
  if (!oldData[i].destroyed && !oldData[i].condemned) {
33414
33582
  const pOptions = dataTable.getRowObject(i);
33415
33583
  if (pOptions) {
33584
+ // Remove undefined properties, but preserve explicit
33585
+ // nulls (#24872)
33416
33586
  Object.keys(pOptions).forEach((key) => {
33417
- if (!defined(pOptions[key]) /* ||
33418
- pOptions[key] === oldData[i].options[key]*/) {
33587
+ if (pOptions[key] === void 0) {
33419
33588
  delete pOptions[key];
33420
33589
  }
33421
33590
  });
@@ -33820,8 +33989,12 @@ class Series {
33820
33989
  }
33821
33990
  }
33822
33991
  }
33823
- // Find the closest distance between processed points
33824
- xData = this.getColumn('x', true);
33992
+ // Find the closest distance between processed points. When the data was
33993
+ // cropped (or set out of range), read x from the freshly cropped local
33994
+ // `modified` table, #24858.
33995
+ if (modified !== table) {
33996
+ xData = modified.getColumn('x', true) || [];
33997
+ }
33825
33998
  const closestPointRange = getClosestDistance([
33826
33999
  logarithmic ?
33827
34000
  xData.map(logarithmic.log2lin) :
@@ -34026,9 +34199,9 @@ class Series {
34026
34199
  * Force getting extremes of a total series data range.
34027
34200
  */
34028
34201
  getExtremes(yData, forceExtremesFromAll) {
34029
- const { xAxis, yAxis } = this, getExtremesFromAll = forceExtremesFromAll ||
34202
+ const { options, xAxis, yAxis } = this, getExtremesFromAll = forceExtremesFromAll ||
34030
34203
  this.getExtremesFromAll ||
34031
- this.options.getExtremesFromAll, // #4599, #21003
34204
+ options.getExtremesFromAll, // #4599, #21003
34032
34205
  table = getExtremesFromAll && this.cropped ?
34033
34206
  this.dataTable :
34034
34207
  this.dataTable.getModified(), rowCount = table.rowCount, customData = yData || this.stackedYData, yAxisData = customData ?
@@ -34038,7 +34211,12 @@ class Series {
34038
34211
  // non-sorted data like scatter (#7639).
34039
34212
  shoulder = this.requireSorting && !this.is('column') ?
34040
34213
  1 : 0,
34041
- // #2117, need to compensate for log X axis
34214
+ // Used only for `cumulativeStart` (#24608)
34215
+ excludeShoulder = options.cumulative &&
34216
+ options.cumulativeStart &&
34217
+ shoulder &&
34218
+ !getExtremesFromAll,
34219
+ // Compensate for log X axis (#2117)
34042
34220
  positiveValuesOnly = yAxis ? yAxis.positiveValuesOnly : false, doAll = getExtremesFromAll ||
34043
34221
  this.cropped ||
34044
34222
  !xAxis; // For colorAxis support
@@ -34050,10 +34228,10 @@ class Series {
34050
34228
  }
34051
34229
  for (i = 0; i < rowCount; i++) {
34052
34230
  x = xData[i];
34053
- // Check if it is within the selected x axis range
34054
- if (doAll ||
34231
+ // Check if it is within the selected x-axis range
34232
+ if ((doAll ||
34055
34233
  ((xData[i + shoulder] || x) >= xMin &&
34056
- (xData[i - shoulder] || x) <= xMax)) {
34234
+ (xData[i - shoulder] || x) <= xMax)) && (!excludeShoulder || x >= xMin)) {
34057
34235
  for (const values of yAxisData) {
34058
34236
  const val = values[i];
34059
34237
  // For points within the visible range, including the
@@ -34122,7 +34300,7 @@ class Series {
34122
34300
  */
34123
34301
  translate() {
34124
34302
  this.generatePoints();
34125
- const series = this, { options, xAxis, yAxis } = series, { stacking, threshold } = options, { hasRendered, polar } = series.chart, points = series.points.concat(series.condemnedPoints), dataLength = points.length, pointPlacement = series.pointPlacementToXValue(), // #7860
34303
+ const series = this, { hasRendered, options, xAxis, yAxis } = series, { stacking, threshold } = options, { polar } = series.chart, points = series.points.concat(series.condemnedPoints), dataLength = points.length, pointPlacement = series.pointPlacementToXValue(), // #7860
34126
34304
  dynamicallyPlaced = Boolean(pointPlacement), stackThreshold = options.startFromThreshold ? threshold : 0, nullYSubstitute = (options?.nullInteraction &&
34127
34305
  yAxis.len);
34128
34306
  let i, plotX, lastPlotX, stackIndicator, closestPointRangePx = Number.MAX_VALUE;
@@ -34174,7 +34352,9 @@ class Series {
34174
34352
  yValue = stackValues[1];
34175
34353
  if (lowValue === stackThreshold &&
34176
34354
  stackIndicator.key === stacks[xValue].base) {
34177
- lowValue = pick(isNumber(threshold) ? threshold : yAxis.min);
34355
+ lowValue = isNumber(threshold) ?
34356
+ threshold :
34357
+ yAxis.min;
34178
34358
  }
34179
34359
  // #1200, #1232
34180
34360
  if (yAxis.positiveValuesOnly &&
@@ -34182,7 +34362,7 @@ class Series {
34182
34362
  lowValue <= 0) {
34183
34363
  lowValue = void 0;
34184
34364
  }
34185
- point.total = point.stackTotal = pick(stackItem.total);
34365
+ point.total = point.stackTotal = stackItem.total ?? void 0;
34186
34366
  point.percentage = defined(point.y) && stackItem.total ?
34187
34367
  (point.y / stackItem.total * 100) : void 0;
34188
34368
  point.stackY = yValue;
@@ -34315,7 +34495,7 @@ class Series {
34315
34495
  * Initialize the animation.
34316
34496
  */
34317
34497
  animate(init) {
34318
- const { chart, group, markerGroup } = this, inverted = chart.inverted, animation = Series_animObject(this.options.animation),
34498
+ const { chart, group, markerGroup } = this, inverted = chart.inverted, animation = animObject(this.options.animation),
34319
34499
  // The key for temporary animation clips
34320
34500
  animationClipKey = [
34321
34501
  this.getSharedClipKey(),
@@ -34411,10 +34591,11 @@ class Series {
34411
34591
  */
34412
34592
  drawPoints(points) {
34413
34593
  points || (points = this.points.concat(this.condemnedPoints));
34414
- const series = this, chart = series.chart, styledMode = chart.styledMode, { colorAxis, options } = series, seriesMarkerOptions = options.marker, nullInteraction = options.nullInteraction, markerGroup = series[series.specialGroup || 'markerGroup'], xAxis = series.xAxis, globallyEnabled = pick(seriesMarkerOptions.enabled, !xAxis || xAxis.isRadial ? true : null,
34415
- // Use larger or equal as radius is null in bubbles (#6321)
34416
- series.closestPointRangePx >= (seriesMarkerOptions.enabledThreshold *
34417
- seriesMarkerOptions.radius));
34594
+ const series = this, chart = series.chart, styledMode = chart.styledMode, { colorAxis, options } = series, seriesMarkerOptions = options.marker || {}, nullInteraction = options.nullInteraction, markerGroup = series[series.specialGroup || 'markerGroup'], xAxis = series.xAxis, globallyEnabled = seriesMarkerOptions.enabled ??
34595
+ (!xAxis || xAxis.isRadial ? true : null) ??
34596
+ // Use larger or equal as radius is null in bubbles (#6321)
34597
+ ((series.closestPointRangePx ?? -Infinity) >= ((seriesMarkerOptions.enabledThreshold ?? 2) *
34598
+ seriesMarkerOptions.radius));
34418
34599
  let i, point, graphic, verb, pointMarkerOptions, hasPointMarker, markerAttribs;
34419
34600
  if (seriesMarkerOptions.enabled !== false ||
34420
34601
  series._hasPointMarkers) {
@@ -34431,8 +34612,10 @@ class Series {
34431
34612
  // Only draw the point if y is defined
34432
34613
  if (shouldDrawMarker) {
34433
34614
  // Shortcuts
34434
- const symbol = pick(pointMarkerOptions.symbol, series.symbol, 'rect');
34435
- markerAttribs = series.markerAttribs(point, (point.selected && 'select'));
34615
+ const symbol = pointMarkerOptions.symbol ??
34616
+ series.symbol ??
34617
+ 'rect';
34618
+ markerAttribs = series.markerAttribs(point, point.selected ? 'select' : '');
34436
34619
  const isInside = point.isInside !== false;
34437
34620
  if (!graphic &&
34438
34621
  isInside &&
@@ -34497,15 +34680,17 @@ class Series {
34497
34680
  * A hash containing those attributes that are not settable from CSS.
34498
34681
  */
34499
34682
  markerAttribs(point, state) {
34500
- const seriesOptions = this.options, seriesMarkerOptions = seriesOptions.marker, pointMarkerOptions = point.marker || {}, symbol = (pointMarkerOptions.symbol ||
34683
+ const seriesOptions = this.options, seriesMarkerOptions = seriesOptions.marker ?? {}, pointMarkerOptions = point.marker || {}, symbol = (pointMarkerOptions.symbol ||
34501
34684
  seriesMarkerOptions.symbol), attribs = {};
34502
- let seriesStateOptions, pointStateOptions, radius = pick(pointMarkerOptions.radius, seriesMarkerOptions?.radius);
34685
+ let seriesStateOptions, pointStateOptions, radius = pointMarkerOptions.radius ??
34686
+ seriesMarkerOptions.radius;
34503
34687
  // Handle hover and select states
34504
34688
  if (state) {
34505
- seriesStateOptions = seriesMarkerOptions?.states?.[state];
34689
+ seriesStateOptions = seriesMarkerOptions.states?.[state];
34506
34690
  pointStateOptions = pointMarkerOptions.states?.[state];
34507
- radius = pick(pointStateOptions?.radius, seriesStateOptions?.radius, radius && radius + (seriesStateOptions?.radiusPlus ||
34508
- 0));
34691
+ radius = pointStateOptions?.radius ??
34692
+ seriesStateOptions?.radius ??
34693
+ (radius && radius + (seriesStateOptions?.radiusPlus || 0));
34509
34694
  }
34510
34695
  point.hasImage = symbol && symbol.indexOf('url') === 0;
34511
34696
  if (point.hasImage) {
@@ -34518,7 +34703,7 @@ class Series {
34518
34703
  0 :
34519
34704
  symbol === 'rect' ?
34520
34705
  // Rectangle symbols need crisp edges, others don't
34521
- seriesMarkerOptions?.lineWidth || 0 :
34706
+ seriesMarkerOptions.lineWidth || 0 :
34522
34707
  1);
34523
34708
  }
34524
34709
  attribs.x = pos[0] - radius;
@@ -34549,8 +34734,9 @@ class Series {
34549
34734
  * The presentational attributes to be set on the point.
34550
34735
  */
34551
34736
  pointAttribs(point, state) {
34552
- const options = this.options, seriesMarkerOptions = options.marker, pointOptions = point?.options, pointMarkerOptions = pointOptions?.marker || {}, pointColorOption = pointOptions?.color, pointColor = point?.color, zoneColor = point?.zone?.color;
34553
- let seriesStateOptions, pointStateOptions, color = this.color, fill, stroke, strokeWidth = pick(pointMarkerOptions.lineWidth, seriesMarkerOptions.lineWidth), opacity = (point?.isNull && options.nullInteraction) ? 0 : 1;
34737
+ const options = this.options, seriesMarkerOptions = options.marker ?? {}, pointOptions = point?.options, pointMarkerOptions = pointOptions?.marker || {}, pointColorOption = pointOptions?.color, pointColor = point?.color, zoneColor = point?.zone?.color;
34738
+ let color = this.color, fill, stroke, strokeWidth = pointMarkerOptions.lineWidth ??
34739
+ seriesMarkerOptions.lineWidth, opacity = (point?.isNull && options.nullInteraction) ? 0 : 1;
34554
34740
  color = (pointColorOption ||
34555
34741
  zoneColor ||
34556
34742
  pointColor ||
@@ -34563,19 +34749,22 @@ class Series {
34563
34749
  color);
34564
34750
  // Handle hover and select states
34565
34751
  state = state || 'normal';
34566
- if (state) {
34567
- seriesStateOptions = (seriesMarkerOptions.states[state] || {});
34568
- pointStateOptions = (pointMarkerOptions.states &&
34569
- pointMarkerOptions.states[state]) || {};
34570
- strokeWidth = pick(pointStateOptions.lineWidth, seriesStateOptions.lineWidth, strokeWidth + pick(pointStateOptions.lineWidthPlus, seriesStateOptions.lineWidthPlus, 0));
34571
- fill = (pointStateOptions.fillColor ||
34572
- seriesStateOptions.fillColor ||
34573
- fill);
34574
- stroke = (pointStateOptions.lineColor ||
34575
- seriesStateOptions.lineColor ||
34576
- stroke);
34577
- opacity = pick(pointStateOptions.opacity, seriesStateOptions.opacity, opacity);
34578
- }
34752
+ const seriesStateOptions = seriesMarkerOptions.states?.[state] || {};
34753
+ const pointStateOptions = pointMarkerOptions.states?.[state] || {};
34754
+ strokeWidth = pointStateOptions.lineWidth ??
34755
+ seriesStateOptions.lineWidth ??
34756
+ (strokeWidth || 0) + (pointStateOptions.lineWidthPlus ??
34757
+ seriesStateOptions.lineWidthPlus ??
34758
+ 0);
34759
+ fill = (pointStateOptions.fillColor ||
34760
+ seriesStateOptions.fillColor ||
34761
+ fill);
34762
+ stroke = (pointStateOptions.lineColor ||
34763
+ seriesStateOptions.lineColor ||
34764
+ stroke);
34765
+ opacity = (pointStateOptions.opacity ??
34766
+ seriesStateOptions.opacity ??
34767
+ opacity);
34579
34768
  return {
34580
34769
  'stroke': stroke,
34581
34770
  'stroke-width': strokeWidth,
@@ -34614,7 +34803,7 @@ class Series {
34614
34803
  // Destroy all points with their elements
34615
34804
  i = data.length;
34616
34805
  while (i--) {
34617
- data[i]?.destroy?.();
34806
+ data[i]?.destroy?.(true);
34618
34807
  }
34619
34808
  for (const zone of series.zones || []) {
34620
34809
  // Destroy SVGElement's but preserve primitive props (#20426)
@@ -34641,7 +34830,7 @@ class Series {
34641
34830
  erase(chart.series, series);
34642
34831
  chart.orderItems('series');
34643
34832
  // Clear all members
34644
- objectEach(series, function (val, prop) {
34833
+ objectEach(series, function (_val, prop) {
34645
34834
  if (!keepEventsForUpdate || prop !== 'hcEvents') {
34646
34835
  delete series[prop];
34647
34836
  }
@@ -34693,7 +34882,7 @@ class Series {
34693
34882
  // Reset
34694
34883
  zones.forEach((zone) => {
34695
34884
  zone.lineClip = [];
34696
- zone.translated = clamp(axis.toPixels(pick(zone.value, axisMax), true) || 0, 0, len);
34885
+ zone.translated = clamp(axis.toPixels((zone.value ?? axisMax), true) || 0, 0, len);
34697
34886
  });
34698
34887
  // The use of the Color Threshold assumes there are no gaps so it is
34699
34888
  // safe to hide the original graph and area unless it is not
@@ -34917,7 +35106,7 @@ class Series {
34917
35106
  * @emits Highcharts.Series#event:afterRender
34918
35107
  */
34919
35108
  render() {
34920
- const series = this, { chart, options, hasRendered } = series, animOptions = Series_animObject(options.animation), visibility = series.visible ?
35109
+ const series = this, { chart, options, hasRendered } = series, animOptions = animObject(options.animation), visibility = series.visible ?
34921
35110
  'inherit' : 'hidden', // #2597
34922
35111
  zIndex = options.zIndex, chartSeriesGroup = chart.seriesGroup;
34923
35112
  let animDuration = series.finishedAnimating ?
@@ -35019,7 +35208,7 @@ class Series {
35019
35208
  *
35020
35209
  * @function Highcharts.Series#searchPoint
35021
35210
  *
35022
- * @param {Highcharts.PointerEvent} e
35211
+ * @param {PointerEvent} e
35023
35212
  * The normalized pointer event
35024
35213
  * @param {boolean} [compareX=false]
35025
35214
  * Search only by the X value, not Y
@@ -35051,7 +35240,7 @@ class Series {
35051
35240
  // Prevent multiple k-d-trees from being built simultaneously
35052
35241
  // (#6235)
35053
35242
  this.buildingKdTree = true;
35054
- const series = this, seriesOptions = series.options, dimensions = seriesOptions.findNearestPointBy
35243
+ const series = this, seriesOptions = series.options, dimensions = (seriesOptions.findNearestPointBy ?? '')
35055
35244
  .indexOf('y') > -1 ? 2 : 1;
35056
35245
  /**
35057
35246
  * Internal function
@@ -35101,7 +35290,7 @@ class Series {
35101
35290
  * The point to search for.
35102
35291
  * @param {boolean} [compareX=false]
35103
35292
  * Search only by the X value, not Y.
35104
- * @param {Highcharts.PointerEvent} [e]
35293
+ * @param {PointerEvent} [e]
35105
35294
  * The normalized pointer event.
35106
35295
  * @param {Function} [suppliedPointEvaluator]
35107
35296
  * A custom point evaluator function.
@@ -35307,11 +35496,13 @@ class Series {
35307
35496
  * Both X and Y values given
35308
35497
  * @sample highcharts/members/series-addpoint-pie/
35309
35498
  * Append pie slice
35310
- * @sample stock/members/series-addpoint/
35499
+ * @sample highcharts/datatable/datamapping-dynamic
35500
+ * Alternative approach with data table
35501
+ * @sample {highstock} stock/members/series-addpoint/
35311
35502
  * Append 100 points in Highcharts Stock
35312
- * @sample stock/members/series-addpoint-shift/
35503
+ * @sample {highstock} stock/members/series-addpoint-shift/
35313
35504
  * Append and shift in Highcharts Stock
35314
- * @sample maps/members/series-addpoint/
35505
+ * @sample {highmaps} maps/members/series-addpoint/
35315
35506
  * Add a point in Highmaps
35316
35507
  *
35317
35508
  * @function Highcharts.Series#addPoint
@@ -35347,7 +35538,7 @@ class Series {
35347
35538
  const series = this, seriesOptions = series.options, { chart, data, dataTable: table, xAxis } = series, names = xAxis?.hasNames && xAxis.names, dataOptions = seriesOptions.data, xData = series.getColumn('x');
35348
35539
  let isInTheMiddle, i;
35349
35540
  // Optional redraw, defaults to true
35350
- redraw = pick(redraw, true);
35541
+ redraw = (redraw ?? true);
35351
35542
  // Get options and push the point to xData, yData and series.options. In
35352
35543
  // series.generatePoints the Point instance will be created on demand
35353
35544
  // and pushed to the series.data array.
@@ -35457,8 +35648,8 @@ class Series {
35457
35648
  chart.redraw();
35458
35649
  }
35459
35650
  };
35460
- Series_setAnimation(animation, chart);
35461
- redraw = pick(redraw, true);
35651
+ setAnimation(animation, chart);
35652
+ redraw = (redraw ?? true);
35462
35653
  // Fire the event with a default handler of removing the point
35463
35654
  if (point) {
35464
35655
  point.firePointEvent('remove', null, remove);
@@ -35501,7 +35692,7 @@ class Series {
35501
35692
  // Redraw
35502
35693
  chart.isDirtyLegend = chart.isDirtyBox = true;
35503
35694
  chart.linkSeries(keepEvents);
35504
- if (pick(redraw, true)) {
35695
+ if (redraw ?? true) {
35505
35696
  chart.redraw(animation);
35506
35697
  }
35507
35698
  }
@@ -35718,7 +35909,7 @@ class Series {
35718
35909
  series.isDirtyData = true;
35719
35910
  }
35720
35911
  fireEvent(this, 'afterUpdate');
35721
- if (pick(redraw, true)) {
35912
+ if (redraw ?? true) {
35722
35913
  chart.redraw(keepPoints ? void 0 : false);
35723
35914
  }
35724
35915
  }
@@ -35735,12 +35926,12 @@ class Series {
35735
35926
  * @internal
35736
35927
  */
35737
35928
  hasOptionChanged(optionName) {
35738
- const chart = this.chart, option = this.options[optionName], plotOptions = chart.options.plotOptions, oldOption = this.userOptions[optionName], plotOptionsOption = pick(plotOptions?.[this.type]?.[optionName], plotOptions?.series?.[optionName]);
35929
+ const chart = this.chart, option = this.options[optionName], plotOptions = chart.options.plotOptions, oldOption = this.userOptions[optionName], plotOptionsOption = (plotOptions?.[this.type]?.[optionName] ?? plotOptions?.series?.[optionName]);
35739
35930
  // Check if `plotOptions` are defined already, #19203
35740
35931
  if (oldOption && !defined(plotOptionsOption)) {
35741
35932
  return option !== oldOption;
35742
35933
  }
35743
- return option !== pick(plotOptionsOption, option);
35934
+ return option !== (plotOptionsOption ?? option);
35744
35935
  }
35745
35936
  /**
35746
35937
  * Runs on mouse over the series graphical items.
@@ -35811,10 +36002,11 @@ class Series {
35811
36002
  * Determines if state should be inherited by points too.
35812
36003
  */
35813
36004
  setState(state, inherit) {
35814
- const series = this, { graph, options } = series, { inactiveOtherPoints, states: stateOptions } = options,
36005
+ const series = this, { graph, options } = series, { inactiveOtherPoints, states: stateOptions = {} } = options,
35815
36006
  // By default a quick animation to hover/inactive,
35816
36007
  // slower to un-hover
35817
- stateAnimation = pick(stateOptions?.[state || 'normal']?.animation, series.chart.options.chart.animation);
36008
+ stateAnimation = stateOptions[state || 'normal']?.animation ??
36009
+ series.chart.options.chart.animation;
35818
36010
  let { lineWidth, opacity } = options;
35819
36011
  state = state || '';
35820
36012
  if (series.state !== state) {
@@ -35841,9 +36033,13 @@ class Series {
35841
36033
  return;
35842
36034
  }
35843
36035
  if (state) {
35844
- lineWidth = (stateOptions[state].lineWidth ||
35845
- lineWidth + (stateOptions[state].lineWidthPlus || 0)); // #4035
35846
- opacity = pick(stateOptions[state].opacity, opacity);
36036
+ lineWidth = stateOptions[state]?.lineWidth ?? (!isNumber(lineWidth) ?
36037
+ void 0 :
36038
+ // Increase by lineWidthPlus only when lineWidth
36039
+ // is a number.
36040
+ (lineWidth +
36041
+ (stateOptions?.[state]?.lineWidthPlus || 0))); // #4035
36042
+ opacity = stateOptions[state]?.opacity ?? opacity;
35847
36043
  }
35848
36044
  if (graph && !graph.dashstyle && isNumber(lineWidth)) {
35849
36045
  // Animate the graph stroke-width
@@ -35887,11 +36083,7 @@ class Series {
35887
36083
  * Can be either `hover` or undefined to set to normal state.
35888
36084
  */
35889
36085
  setAllPointsToState(state) {
35890
- this.points.forEach(function (point) {
35891
- if (point.setState) {
35892
- point.setState(state);
35893
- }
35894
- });
36086
+ this.points.forEach((point) => point.setState?.(state));
35895
36087
  }
35896
36088
  /**
35897
36089
  * Show or hide the series.
@@ -36572,7 +36764,6 @@ Series_SeriesRegistry.series = Series;
36572
36764
  * */
36573
36765
 
36574
36766
 
36575
- const { animObject: Legend_animObject, setAnimation: Legend_setAnimation } = AnimationUtilities;
36576
36767
 
36577
36768
  const { registerEventOptions: Legend_registerEventOptions } = Core_Foundation;
36578
36769
 
@@ -36701,7 +36892,7 @@ class Legend {
36701
36892
  * @param {Highcharts.LegendOptions} options
36702
36893
  */
36703
36894
  setOptions(options) {
36704
- const padding = pick(options.padding, 8);
36895
+ const padding = (options.padding ?? 8);
36705
36896
  /**
36706
36897
  * Legend options.
36707
36898
  *
@@ -36718,7 +36909,7 @@ class Legend {
36718
36909
  this.itemMarginBottom = options.itemMarginBottom;
36719
36910
  this.padding = padding;
36720
36911
  this.initialItemY = padding - 5; // 5 is pixels above the text
36721
- this.symbolWidth = pick(options.symbolWidth, 16);
36912
+ this.symbolWidth = (options.symbolWidth ?? 16);
36722
36913
  this.pages = [];
36723
36914
  this.proximate = options.layout === 'proximate' && !this.chart.inverted;
36724
36915
  // #12705: baseline has to be reset on every update
@@ -36752,7 +36943,7 @@ class Legend {
36752
36943
  }
36753
36944
  this.destroy();
36754
36945
  chart.isDirtyLegend = chart.isDirtyBox = true;
36755
- if (pick(redraw, true)) {
36946
+ if (redraw ?? true) {
36756
36947
  chart.redraw();
36757
36948
  }
36758
36949
  fireEvent(this, 'afterUpdate', { redraw });
@@ -36990,7 +37181,7 @@ class Legend {
36990
37181
  * The item to render.
36991
37182
  */
36992
37183
  renderItem(item) {
36993
- const legend = this, legendItem = item.legendItem = item.legendItem || {}, chart = legend.chart, renderer = chart.renderer, options = legend.options, horizontal = options.layout === 'horizontal', symbolWidth = legend.symbolWidth, symbolPadding = options.symbolPadding || 0, itemStyle = legend.itemStyle, itemHiddenStyle = legend.itemHiddenStyle, itemDistance = horizontal ? pick(options.itemDistance, 20) : 0, ltr = !options.rtl, isSeries = !item.series, series = !isSeries && item.series.drawLegendSymbol ?
37184
+ const legend = this, legendItem = item.legendItem = item.legendItem || {}, chart = legend.chart, renderer = chart.renderer, options = legend.options, horizontal = options.layout === 'horizontal', symbolWidth = legend.symbolWidth, symbolPadding = options.symbolPadding || 0, itemStyle = legend.itemStyle, itemHiddenStyle = legend.itemHiddenStyle, itemDistance = horizontal ? (options.itemDistance ?? 20) : 0, ltr = !options.rtl, isSeries = !item.series, series = !isSeries && item.series.drawLegendSymbol ?
36994
37185
  item.series :
36995
37186
  item, seriesOptions = series.options, showCheckbox = (!!legend.createCheckboxForItem &&
36996
37187
  seriesOptions &&
@@ -37036,9 +37227,11 @@ class Legend {
37036
37227
  legend.fontMetrics.f + 3 + legend.itemMarginTop;
37037
37228
  label.attr('y', legend.baseline);
37038
37229
  legend.symbolHeight =
37039
- pick(options.symbolHeight, legend.fontMetrics.f);
37230
+ (options.symbolHeight ?? legend.fontMetrics.f);
37040
37231
  if (options.squareSymbol) {
37041
- legend.symbolWidth = pick(options.symbolWidth, Math.max(legend.symbolHeight, 16));
37232
+ legend.symbolWidth =
37233
+ options.symbolWidth ??
37234
+ Math.max(legend.symbolHeight, 16);
37042
37235
  itemExtraWidth = legend.symbolWidth + symbolPadding +
37043
37236
  itemDistance + (showCheckbox ? 20 : 0);
37044
37237
  if (ltr) {
@@ -37090,7 +37283,7 @@ class Legend {
37090
37283
  * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item
37091
37284
  */
37092
37285
  layoutItem(item) {
37093
- const options = this.options, padding = this.padding, horizontal = options.layout === 'horizontal', itemHeight = item.itemHeight, itemMarginBottom = this.itemMarginBottom, itemMarginTop = this.itemMarginTop, itemDistance = horizontal ? pick(options.itemDistance, 20) : 0, maxLegendWidth = this.maxLegendWidth, itemWidth = (options.alignColumns &&
37286
+ const options = this.options, padding = this.padding, horizontal = options.layout === 'horizontal', itemHeight = item.itemHeight, itemMarginBottom = this.itemMarginBottom, itemMarginTop = this.itemMarginTop, itemDistance = horizontal ? (options.itemDistance ?? 20) : 0, maxLegendWidth = this.maxLegendWidth, itemWidth = (options.alignColumns &&
37094
37287
  this.totalItemWidth > maxLegendWidth) ?
37095
37288
  this.maxItemWidth :
37096
37289
  item.itemWidth, legendItem = item.legendItem || {};
@@ -37144,7 +37337,9 @@ class Legend {
37144
37337
  const seriesOptions = series?.options;
37145
37338
  // Handle showInLegend. If the series is linked to another series,
37146
37339
  // defaults to false.
37147
- if (series && pick(seriesOptions.showInLegend, !defined(seriesOptions.linkedTo) ? void 0 : false, true)) {
37340
+ if (series &&
37341
+ (seriesOptions.showInLegend ??
37342
+ (!defined(seriesOptions.linkedTo)))) {
37148
37343
  // Use points or series for the legend item depending on
37149
37344
  // legendType
37150
37345
  allItems = allItems.concat(series.legendItem?.labels ||
@@ -37426,7 +37621,7 @@ class Legend {
37426
37621
  * @function Highcharts.Legend#handleOverflow
37427
37622
  */
37428
37623
  handleOverflow(legendHeight) {
37429
- const legend = this, chart = this.chart, renderer = chart.renderer, options = this.options, optionsY = options.y, alignTop = options.verticalAlign === 'top', padding = this.padding, maxHeight = options.maxHeight, navOptions = options.navigation, animation = pick(navOptions.animation, true), arrowSize = navOptions.arrowSize || 12, pages = this.pages, allItems = this.allItems, clipToHeight = function (height) {
37624
+ const legend = this, chart = this.chart, renderer = chart.renderer, options = this.options, optionsY = options.y, alignTop = options.verticalAlign === 'top', padding = this.padding, maxHeight = options.maxHeight, navOptions = options.navigation, animation = (navOptions.animation ?? true), arrowSize = navOptions.arrowSize || 12, pages = this.pages, allItems = this.allItems, clipToHeight = function (height) {
37430
37625
  if (typeof height === 'number') {
37431
37626
  clipRect.attr({
37432
37627
  height: height
@@ -37472,7 +37667,7 @@ class Legend {
37472
37667
  navOptions.enabled !== false) {
37473
37668
  this.clipHeight = clipHeight =
37474
37669
  Math.max(spaceHeight - 20 - this.titleHeight - padding, 0);
37475
- this.currentPage = pick(this.currentPage, 1);
37670
+ this.currentPage = (this.currentPage ?? 1);
37476
37671
  this.fullHeight = legendHeight;
37477
37672
  // Fill pages with Y positions so that the top of each a legend item
37478
37673
  // defines the scroll top for each page (#2098)
@@ -37575,7 +37770,7 @@ class Legend {
37575
37770
  }
37576
37771
  if (currentPage > 0) {
37577
37772
  if (typeof animation !== 'undefined') {
37578
- Legend_setAnimation(animation, chart);
37773
+ setAnimation(animation, chart);
37579
37774
  }
37580
37775
  this.nav.attr({
37581
37776
  translateX: padding,
@@ -37632,7 +37827,7 @@ class Legend {
37632
37827
  this.currentPage = currentPage;
37633
37828
  this.positionCheckboxes();
37634
37829
  // Fire event after scroll animation is complete
37635
- const animOptions = Legend_animObject(pick(animation, chart.renderer.globalAnimation, true));
37830
+ const animOptions = animObject((animation ?? chart.renderer.globalAnimation ?? true));
37636
37831
  syncTimeout(() => {
37637
37832
  fireEvent(this, 'afterScroll', { currentPage });
37638
37833
  }, animOptions.duration);
@@ -37842,7 +38037,7 @@ class Legend {
37842
38037
  */ /**
37843
38038
  * Related browser event.
37844
38039
  * @name Highcharts.LegendItemClickEventObject#browserEvent
37845
- * @type {Highcharts.PointerEvent}
38040
+ * @type {PointerEvent}
37846
38041
  */ /**
37847
38042
  * Prevent the default action of toggle the visibility of the series or point.
37848
38043
  * @name Highcharts.LegendItemClickEventObject#preventDefault
@@ -37893,7 +38088,7 @@ class Legend {
37893
38088
  */ /**
37894
38089
  * Related browser event.
37895
38090
  * @name Highcharts.PointLegendItemClickEventObject#browserEvent
37896
- * @type {Highcharts.PointerEvent}
38091
+ * @type {PointerEvent}
37897
38092
  */ /**
37898
38093
  * Whether the default action has been prevented (`true`) or not.
37899
38094
  * @name Highcharts.PointLegendItemClickEventObject#defaultPrevented
@@ -37949,7 +38144,7 @@ class Legend {
37949
38144
  */ /**
37950
38145
  * Related browser event.
37951
38146
  * @name Highcharts.SeriesLegendItemClickEventObject#browserEvent
37952
- * @type {Highcharts.PointerEvent}
38147
+ * @type {PointerEvent}
37953
38148
  */ /**
37954
38149
  * Whether the default action has been prevented (`true`) or not.
37955
38150
  * @name Highcharts.SeriesLegendItemClickEventObject#defaultPrevented
@@ -37983,7 +38178,6 @@ class Legend {
37983
38178
  * */
37984
38179
 
37985
38180
 
37986
- const { animate: Chart_animate, animObject: Chart_animObject, setAnimation: Chart_setAnimation } = AnimationUtilities;
37987
38181
 
37988
38182
 
37989
38183
  const { defaultOptions: Chart_defaultOptions } = Defaults;
@@ -38074,7 +38268,7 @@ class Chart {
38074
38268
  */
38075
38269
  static chart(a, b, c) {
38076
38270
  const chart = new Chart(a, b, c);
38077
- return chart.promise || chart;
38271
+ return chart.promise ?? chart;
38078
38272
  }
38079
38273
  // Implementation
38080
38274
  constructor(a,
@@ -38115,10 +38309,10 @@ class Chart {
38115
38309
  const chart = this, options = chart.options.chart, zooming = options.zooming;
38116
38310
  chart.zooming = {
38117
38311
  ...zooming,
38118
- type: pick(options.zoomType, zooming.type),
38119
- key: pick(options.zoomKey, zooming.key),
38120
- pinchType: pick(options.pinchType, zooming.pinchType),
38121
- singleTouch: pick(options.zoomBySingleTouch, zooming.singleTouch, false),
38312
+ type: (options.zoomType ?? zooming.type),
38313
+ key: (options.zoomKey ?? zooming.key),
38314
+ pinchType: (options.pinchType ?? zooming.pinchType),
38315
+ singleTouch: options.zoomBySingleTouch ?? zooming.singleTouch ?? false,
38122
38316
  resetButton: merge(zooming.resetButton, options.resetZoomButton)
38123
38317
  };
38124
38318
  }
@@ -38461,7 +38655,7 @@ class Chart {
38461
38655
  redraw(animation) {
38462
38656
  fireEvent(this, 'beforeRedraw');
38463
38657
  const chart = this, axes = chart.hasCartesianSeries ? chart.axes : chart.colorAxis || [], series = chart.series, pointer = chart.pointer, legend = chart.legend, legendUserOptions = chart.userOptions.legend, renderer = chart.renderer, isHiddenChart = renderer.isHidden(), afterRedraw = [];
38464
- let hasDirtyStacks, hasStackedSeries, i, isDirtyBox = chart.isDirtyBox, redrawLegend = chart.isDirtyLegend, serie;
38658
+ let hasDirtyStacks, hasStackedSeries, i, redrawLegend = chart.isDirtyLegend, serie;
38465
38659
  renderer.rootFontSize = renderer.boxWrapper.getStyle('font-size');
38466
38660
  // Handle responsive rules, not only on resize (#6130)
38467
38661
  if (chart.setResponsive) {
@@ -38470,7 +38664,7 @@ class Chart {
38470
38664
  // Set the global animation. When chart.hasRendered is not true, the
38471
38665
  // redraw call comes from a responsive rule and animation should not
38472
38666
  // occur.
38473
- Chart_setAnimation(chart.hasRendered ? animation : false, chart);
38667
+ setAnimation(chart.hasRendered ? animation : false, chart);
38474
38668
  if (isHiddenChart) {
38475
38669
  chart.temporaryDisplay();
38476
38670
  }
@@ -38533,6 +38727,7 @@ class Chart {
38533
38727
  });
38534
38728
  chart.getMargins(); // #3098
38535
38729
  // If one axis is dirty, all axes must be redrawn (#792, #2169)
38730
+ let isDirtyBox = chart.isDirtyBox;
38536
38731
  axes.forEach(function (axis) {
38537
38732
  if (axis.isDirty) {
38538
38733
  isDirtyBox = true;
@@ -38669,7 +38864,7 @@ class Chart {
38669
38864
  // inspect the generated series.points.
38670
38865
  series.getPointsCollection()
38671
38866
  .forEach((point) => {
38672
- if (pick(point.selectedStaging, point.selected)) {
38867
+ if (point.selectedStaging ?? point.selected) {
38673
38868
  acc.push(point);
38674
38869
  }
38675
38870
  });
@@ -39068,11 +39263,8 @@ class Chart {
39068
39263
  const chartHeight = chart.chartHeight;
39069
39264
  let chartWidth = chart.chartWidth;
39070
39265
  // Allow table cells and flex-boxes to shrink without the chart
39071
- // blocking them out (#6427) but skip in styled mode so inline styles
39072
- // don't override user CSS on renderTo
39073
- if (!chart.styledMode) {
39074
- css(renderTo, { overflow: 'hidden' });
39075
- }
39266
+ // blocking them out (#6427)
39267
+ css(renderTo, { overflow: 'hidden' });
39076
39268
  // Create the inner container
39077
39269
  if (!chart.styledMode) {
39078
39270
  containerStyle = extend({
@@ -39110,7 +39302,7 @@ class Chart {
39110
39302
  chartWidth = chart.chartWidth;
39111
39303
  if (!chart.styledMode) {
39112
39304
  css(container, {
39113
- width: pick(optionsChart.style?.width, chartWidth + 'px')
39305
+ width: (optionsChart.style?.width ?? chartWidth + 'px')
39114
39306
  });
39115
39307
  }
39116
39308
  }
@@ -39129,7 +39321,7 @@ class Chart {
39129
39321
  // first ResizeObserver reflow
39130
39322
  chart.containerBox = chart.getContainerBox();
39131
39323
  // Set the initial animation from the options
39132
- Chart_setAnimation(void 0, chart);
39324
+ setAnimation(void 0, chart);
39133
39325
  chart.setClassName(optionsChart.className);
39134
39326
  if (!chart.styledMode) {
39135
39327
  chart.renderer.setStyle(optionsChart.style);
@@ -39324,7 +39516,7 @@ class Chart {
39324
39516
  // Handle the isResizing counter
39325
39517
  chart.isResizing += 1;
39326
39518
  // Set the animation for the current process
39327
- Chart_setAnimation(animation, chart);
39519
+ setAnimation(animation, chart);
39328
39520
  const globalAnimation = renderer.globalAnimation;
39329
39521
  chart.oldChartHeight = chart.chartHeight;
39330
39522
  chart.oldChartWidth = chart.chartWidth;
@@ -39343,7 +39535,7 @@ class Chart {
39343
39535
  // Resize the container with the global animation applied if enabled
39344
39536
  // (#2503)
39345
39537
  if (!chart.styledMode) {
39346
- (globalAnimation ? Chart_animate : css)(chart.container, {
39538
+ (globalAnimation ? animate : css)(chart.container, {
39347
39539
  width: `${chartWidth + scrollablePixelsX}px`,
39348
39540
  height: `${chartHeight + scrollablePixelsY}px`
39349
39541
  }, globalAnimation);
@@ -39369,7 +39561,7 @@ class Chart {
39369
39561
  if (chart) {
39370
39562
  fireEvent(chart, 'endResize');
39371
39563
  }
39372
- }, Chart_animObject(globalAnimation).duration);
39564
+ }, animObject(globalAnimation).duration);
39373
39565
  }
39374
39566
  // Handle resizing counter even if we've re-rendered or not (#20548).
39375
39567
  chart.isResizing -= 1;
@@ -39753,7 +39945,7 @@ class Chart {
39753
39945
  const mockTick = new Axis_Tick(axis, 0, '', true), label = mockTick.createLabel('x', labels);
39754
39946
  mockTick.destroy();
39755
39947
  if (label &&
39756
- pick(labels.reserveSpace, !isNumber(options.crossing))) {
39948
+ (labels.reserveSpace ?? !isNumber(options.crossing))) {
39757
39949
  expectedSpace = label.getBBox().height +
39758
39950
  labels.distance +
39759
39951
  Math.max(isNumber(offset) ? offset : 0, 0);
@@ -40088,7 +40280,7 @@ class Chart {
40088
40280
  const chart = this;
40089
40281
  let series;
40090
40282
  if (options) { // <- not necessary
40091
- redraw = pick(redraw, true); // Defaults to true
40283
+ redraw = (redraw ?? true); // Defaults to true
40092
40284
  fireEvent(chart, 'addSeries', { options: options }, function () {
40093
40285
  series = chart.initSeries(options);
40094
40286
  chart.isDirtyLegend = true;
@@ -40179,7 +40371,7 @@ class Chart {
40179
40371
  */
40180
40372
  createAxis(coll, options) {
40181
40373
  const axis = new Axis_Axis(this, options.axis, coll);
40182
- if (pick(options.redraw, true)) {
40374
+ if (options.redraw ?? true) {
40183
40375
  this.redraw(options.animation);
40184
40376
  }
40185
40377
  return axis;
@@ -40227,7 +40419,7 @@ class Chart {
40227
40419
  }
40228
40420
  loadingDiv.className = 'highcharts-loading';
40229
40421
  // Update text
40230
- HTML_AST.setElementHTML(loadingSpan, pick(str, options.lang.loading, ''));
40422
+ HTML_AST.setElementHTML(loadingSpan, (str ?? options.lang.loading ?? ''));
40231
40423
  if (!chart.styledMode) {
40232
40424
  // Update visuals
40233
40425
  css(loadingDiv, extend(loadingStyle, { zIndex: 10 }));
@@ -40238,7 +40430,7 @@ class Chart {
40238
40430
  opacity: 0,
40239
40431
  display: ''
40240
40432
  });
40241
- Chart_animate(loadingDiv, {
40433
+ animate(loadingDiv, {
40242
40434
  opacity: loadingStyle.opacity ?? 0.5
40243
40435
  }, {
40244
40436
  duration: loadingOptions?.showDuration ?? 0
@@ -40266,7 +40458,7 @@ class Chart {
40266
40458
  loadingDiv.className =
40267
40459
  'highcharts-loading highcharts-loading-hidden';
40268
40460
  if (!this.styledMode) {
40269
- Chart_animate(loadingDiv, {
40461
+ animate(loadingDiv, {
40270
40462
  opacity: 0
40271
40463
  }, {
40272
40464
  duration: options.loading?.hideDuration ?? 100,
@@ -40298,6 +40490,9 @@ class Chart {
40298
40490
  * Note that when changing series data, `chart.update` may mutate the passed
40299
40491
  * data options.
40300
40492
  *
40493
+ * If the given options don't differ from the current chart options, the
40494
+ * update is skipped and the `afterUpdate` event is not emitted.
40495
+ *
40301
40496
  * See also the
40302
40497
  * [responsive option set](https://api.highcharts.com/highcharts/responsive).
40303
40498
  * Switching between `responsive.rules` basically runs `chart.update` under
@@ -40342,14 +40537,24 @@ class Chart {
40342
40537
  caption: 'setCaption'
40343
40538
  }, isResponsiveOptions = options.isResponsiveOptions, itemsForRemoval = [];
40344
40539
  let updateAllAxes, updateAllSeries, runSetSize;
40345
- fireEvent(chart, 'update', { options: options });
40540
+ options = diffObjects(options, chart.options);
40541
+ const e = {
40542
+ options,
40543
+ // Event handlers can turn this on or off to control further
40544
+ // processing
40545
+ hasChanged: !!Object.keys(options).length
40546
+ };
40547
+ fireEvent(chart, 'update', e);
40548
+ // If no changes are detected, stop further processing (#24805).
40549
+ if (!e.hasChanged) {
40550
+ return;
40551
+ }
40346
40552
  // If there are responsive rules in action, undo the responsive rules
40347
40553
  // before we apply the updated options and replay the responsive rules
40348
40554
  // on top from the chart.redraw function (#9617).
40349
40555
  if (!isResponsiveOptions) {
40350
40556
  chart.setResponsive(false, true);
40351
40557
  }
40352
- options = diffObjects(options, chart.options);
40353
40558
  chart.userOptions = merge(chart.userOptions, options);
40354
40559
  // If the top-level chart option is present, some special updates are
40355
40560
  // required
@@ -40452,7 +40657,7 @@ class Chart {
40452
40657
  }
40453
40658
  // No match by id found, match by index instead
40454
40659
  if (!item && chart[coll]) {
40455
- item = chart[coll][pick(newOptions.index, i)];
40660
+ item = chart[coll][(newOptions.index ?? i)];
40456
40661
  // Check if we grabbed an item with an existing but
40457
40662
  // different id (#13541). Check that the item in this
40458
40663
  // position is not internal (navigator).
@@ -40528,7 +40733,7 @@ class Chart {
40528
40733
  (isNumber(newHeight) && newHeight !== chart.chartHeight)) {
40529
40734
  chart.setSize(newWidth, newHeight, animation);
40530
40735
  }
40531
- else if (pick(redraw, true)) {
40736
+ else if (redraw ?? true) {
40532
40737
  chart.redraw(animation);
40533
40738
  }
40534
40739
  fireEvent(chart, 'afterUpdate', {
@@ -40577,15 +40782,11 @@ class Chart {
40577
40782
  showResetZoom() {
40578
40783
  const chart = this, lang = chart.options.lang, btnOptions = chart.zooming.resetButton, theme = btnOptions.theme, alignTo = (btnOptions.relativeTo === 'chart' ||
40579
40784
  btnOptions.relativeTo === 'spacingBox' ?
40580
- null :
40785
+ void 0 :
40581
40786
  'plotBox');
40582
- /** @internal */
40583
- function zoomOut() {
40584
- chart.zoomOut();
40585
- }
40586
- fireEvent(this, 'beforeShowResetZoom', null, function () {
40787
+ fireEvent(this, 'beforeShowResetZoom', void 0, () => {
40587
40788
  chart.resetZoomButton = chart.renderer
40588
- .button(lang.resetZoom, null, null, zoomOut, theme)
40789
+ .button(lang.resetZoom, 0, 0, () => chart.zoomOut(), theme)
40589
40790
  .attr({
40590
40791
  align: btnOptions.position.align,
40591
40792
  title: lang.resetZoomTitle
@@ -40663,21 +40864,21 @@ class Chart {
40663
40864
  * @function Highcharts.Chart#transform
40664
40865
  */
40665
40866
  transform(params) {
40666
- const { axes = this.axes, event, from = {}, reset, selection, to = {}, trigger, allowResetButton = true } = params, { inverted, time } = this;
40867
+ const { axes = this.axes, event, from = {}, reset, selection, to = {}, trigger, allowResetButton = true } = params, { time } = this;
40667
40868
  // Remove active points for shared tooltip
40668
40869
  this.hoverPoints?.forEach((point) => point.setState());
40669
40870
  fireEvent(this, 'transform', params);
40670
40871
  let hasZoomed = params.hasZoomed || false, displayButton, isAnyAxisPanning;
40671
40872
  for (const axis of axes) {
40672
- const { horiz, len, minPointOffset = 0, options, reversed } = axis, wh = horiz ? 'width' : 'height', xy = horiz ? 'x' : 'y', toLength = pick(to[wh], axis.len), fromLength = pick(from[wh], axis.len),
40873
+ const { horiz, len, minPointOffset = 0, options, reversed } = axis, wh = horiz ? 'width' : 'height', xy = horiz ? 'x' : 'y', toLength = (to[wh] ?? axis.len), fromLength = (from[wh] ?? axis.len),
40673
40874
  // If fingers pinched very close on this axis, treat as pan
40674
40875
  scale = Math.abs(toLength) < 10 ?
40675
40876
  1 :
40676
40877
  toLength / fromLength, fromCenter = (from[xy] || 0) + fromLength / 2 - axis.pos, toCenter = (to[xy] ?? axis.pos) +
40677
- toLength / 2 - axis.pos, move = fromCenter - toCenter / scale, pointRangeDirection = (reversed && !inverted) ||
40678
- (!reversed && inverted) ?
40679
- -1 :
40680
- 1, minPx = move;
40878
+ toLength / 2 - axis.pos, move = fromCenter - toCenter / scale, pointRangeDirection = ((horiz && !reversed) ||
40879
+ (!horiz && reversed)) ?
40880
+ 1 :
40881
+ -1, minPx = move;
40681
40882
  // Zooming in multiple panes, zoom only in the pane that receives
40682
40883
  // the input
40683
40884
  if (!reset && (fromCenter < 0 || fromCenter > axis.len)) {
@@ -40686,17 +40887,11 @@ class Chart {
40686
40887
  // Adjust offset to ensure selection zoom triggers correctly
40687
40888
  // (#22945)
40688
40889
  // Set offset to 0 for ordinal axis only when zooming out, (#24545).
40689
- const offset = (axis.chart.polar || (axis.isOrdinal && scale <= 1)) ?
40890
+ const offset = (selection || axis.chart.polar ||
40891
+ (axis.isOrdinal && scale <= 1)) ?
40690
40892
  0 :
40691
40893
  (minPointOffset * pointRangeDirection || 0), eventMin = axis.toValue(minPx, true), eventMax = axis.toValue(minPx + len / scale, true);
40692
40894
  let newMin = eventMin + offset, newMax = eventMax - offset, allExtremes = axis.allExtremes;
40693
- if (selection) {
40694
- selection[axis.coll].push({
40695
- axis,
40696
- min: Math.min(eventMin, eventMax),
40697
- max: Math.max(eventMin, eventMax)
40698
- });
40699
- }
40700
40895
  if (newMin > newMax) {
40701
40896
  [newMin, newMax] = [newMax, newMin];
40702
40897
  }
@@ -40753,14 +40948,15 @@ class Chart {
40753
40948
  }
40754
40949
  // Set new extremes if they are actually new
40755
40950
  if (reset || (axis.series.length &&
40756
- (newMin !== min || newMax !== max) &&
40757
- newMin >= floor &&
40758
- newMax <= ceiling)) {
40951
+ (selection ||
40952
+ ((newMin !== min || newMax !== max) &&
40953
+ newMin >= floor &&
40954
+ newMax <= ceiling)))) {
40759
40955
  if (selection) {
40760
40956
  selection[axis.coll].push({
40761
40957
  axis,
40762
- min: newMin,
40763
- max: newMax
40958
+ min: Math.min(eventMin, eventMax),
40959
+ max: Math.max(eventMin, eventMax)
40764
40960
  });
40765
40961
  }
40766
40962
  else {
@@ -40768,11 +40964,14 @@ class Chart {
40768
40964
  // disallow certain axis padding options that would make
40769
40965
  // panning/zooming hard. Reset and redraw after the
40770
40966
  // operation has finished.
40771
- axis.isPanning = trigger !== 'zoom';
40967
+ axis.isPanning = trigger !== 'zoom' &&
40968
+ trigger !== 'drop';
40772
40969
  if (axis.isPanning && trigger !== 'mousewheel') {
40773
40970
  isAnyAxisPanning = true; // #21319
40774
40971
  }
40775
- axis.setExtremes(reset ? void 0 : newMin, reset ? void 0 : newMax, false, false, { move, trigger, scale });
40972
+ if (trigger !== 'drop') {
40973
+ axis.setExtremes(reset ? void 0 : newMin, reset ? void 0 : newMax, false, false, { move, trigger, scale });
40974
+ }
40776
40975
  if (!reset &&
40777
40976
  (newMin > floor || newMax < ceiling)) {
40778
40977
  displayButton = allowResetButton;
@@ -40803,7 +41002,8 @@ class Chart {
40803
41002
  });
40804
41003
  }
40805
41004
  else {
40806
- // Show or hide the Reset zoom button, but not while panning
41005
+ // Show or hide the Reset zoom button, but not while
41006
+ // panning.
40807
41007
  if (displayButton &&
40808
41008
  !isAnyAxisPanning &&
40809
41009
  !this.resetZoomButton) {
@@ -41045,7 +41245,6 @@ extend(Chart.prototype, {
41045
41245
  */
41046
41246
 
41047
41247
 
41048
- const { stop: ScrollablePlotArea_stop } = AnimationUtilities;
41049
41248
 
41050
41249
  const { composed: ScrollablePlotArea_composed } = Core_Globals;
41051
41250
 
@@ -41211,7 +41410,7 @@ class ScrollablePlotArea {
41211
41410
  this.moveFixedElements();
41212
41411
  }
41213
41412
  // Increase the size of the scrollable renderer and background
41214
- ScrollablePlotArea_stop(chart.container);
41413
+ stop(chart.container);
41215
41414
  css(container, {
41216
41415
  width: `${scrollableWidth}px`,
41217
41416
  height: `${scrollableHeight}px`
@@ -41368,6 +41567,13 @@ ScrollablePlotArea.fixedSelectors = [
41368
41567
  * vertical scrolling, depending on whether the `minWidth` or `minHeight`
41369
41568
  * option is set.
41370
41569
  *
41570
+ * **Note:** Because native browser scrollbars are used, they may
41571
+ * overlap with fixed chart elements such as credits or the chart
41572
+ * border. To avoid this collision, it is recommended to manually add
41573
+ * extra space to the corresponding side using `chart.spacingBottom`
41574
+ * (for horizontal scrollbars) or `chart.spacingRight` (for vertical
41575
+ * scrollbars).
41576
+ *
41371
41577
  * @sample highcharts/chart/scrollable-plotarea
41372
41578
  * Scrollable plot area
41373
41579
  * @sample highcharts/chart/scrollable-plotarea-vertical
@@ -41528,7 +41734,7 @@ class StackItem {
41528
41734
  r: options.borderRadius || 0,
41529
41735
  text: str,
41530
41736
  // Set default padding to 5 as it is in dataLabels #12308
41531
- padding: pick(options.padding, 5),
41737
+ padding: (options.padding ?? 5),
41532
41738
  visibility: 'hidden' // Hidden until setOffset is called
41533
41739
  };
41534
41740
  if (!chart.styledMode) {
@@ -41562,7 +41768,7 @@ class StackItem {
41562
41768
  }), { verticalAlign } = alignOptions;
41563
41769
  if (label && stackBox) {
41564
41770
  const labelBox = label.getBBox(void 0, 0), padding = label.padding;
41565
- let isJustify = pick(options.overflow, 'justify') === 'justify', visible;
41771
+ let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
41566
41772
  // Reset alignOptions property after justify #12337
41567
41773
  alignOptions.x = options.x || 0;
41568
41774
  alignOptions.y = options.y || 0;
@@ -41599,7 +41805,7 @@ class StackItem {
41599
41805
  rotationOriginY: labelBox.height / 2
41600
41806
  });
41601
41807
  // Check if the dataLabel should be visible.
41602
- if (pick(!isJustify && options.crop, true)) {
41808
+ if (((!isJustify && options.crop) ?? true)) {
41603
41809
  visible =
41604
41810
  isNumber(label.x) &&
41605
41811
  isNumber(label.y) &&
@@ -41633,7 +41839,7 @@ class StackItem {
41633
41839
  getStackBox(stackBoxProps) {
41634
41840
  const stackItem = this, axis = this.axis, chart = axis.chart, { boxTop, defaultX, xOffset, width, boxBottom } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41635
41841
  100 :
41636
- pick(boxTop, this.total, 0), y = axis.toPixels(totalStackValue), xAxis = stackBoxProps.xAxis || chart.xAxis[0], x = pick(defaultX, xAxis.translate(this.x)) + xOffset, yZero = axis.toPixels(boxBottom ||
41842
+ (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 ||
41637
41843
  (isNumber(axis.min) &&
41638
41844
  axis.logarithmic &&
41639
41845
  axis.logarithmic.lin2log(axis.min)) ||
@@ -41718,7 +41924,6 @@ class StackItem {
41718
41924
  * */
41719
41925
 
41720
41926
 
41721
- const { getDeferredAnimation: StackingAxis_getDeferredAnimation } = AnimationUtilities;
41722
41927
 
41723
41928
  const { series: { prototype: seriesProto } } = Series_SeriesRegistry;
41724
41929
 
@@ -41747,7 +41952,7 @@ function chartGetStacks() {
41747
41952
  if (series.options.stacking && series.reserveSpace()) {
41748
41953
  series.stackKey = [
41749
41954
  series.type,
41750
- pick(series.options.stack, ''),
41955
+ (series.options.stack ?? ''),
41751
41956
  inverted ? xAxisOptions.top : xAxisOptions.left,
41752
41957
  inverted ? xAxisOptions.height : xAxisOptions.width
41753
41958
  ].join(',');
@@ -41910,7 +42115,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
41910
42115
  stack = stacks[key][x];
41911
42116
  if (y !== null) {
41912
42117
  stack.points[pointKey] = stack.points[series.index] = [
41913
- pick(stack.cumulative, stackThreshold)
42118
+ (stack.cumulative ?? stackThreshold)
41914
42119
  ];
41915
42120
  // Record the base of the stack
41916
42121
  if (!defined(stack.cumulative)) {
@@ -41958,7 +42163,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
41958
42163
  stack.cumulative = (total || 1) - 1;
41959
42164
  }
41960
42165
  else {
41961
- stack.cumulative = correctFloat(pick(stack.cumulative, stackThreshold) + yNumber);
42166
+ stack.cumulative = correctFloat((stack.cumulative ?? stackThreshold) + yNumber);
41962
42167
  }
41963
42168
  stack.total = total;
41964
42169
  if (y !== null) {
@@ -42062,7 +42267,7 @@ class AxisAdditions {
42062
42267
  }
42063
42268
  /** @internal */
42064
42269
  renderStackTotals() {
42065
- const stacking = this, axis = stacking.axis, chart = axis.chart, renderer = chart.renderer, stacks = stacking.stacks, stackLabelsAnim = axis.options.stackLabels?.animation, animationConfig = StackingAxis_getDeferredAnimation(chart, stackLabelsAnim || false), stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||
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 ||
42066
42271
  renderer
42067
42272
  .g('stack-labels')
42068
42273
  .attr({
@@ -42973,8 +43178,7 @@ class AreaSeries extends AreaSeries_LineSeries {
42973
43178
  */
42974
43179
  getGraphPath(points) {
42975
43180
  const getGraphPath = AreaSeries_LineSeries.prototype.getGraphPath, options = this.options, stacking = options.stacking, yAxis = this.yAxis, bottomPoints = [], graphPoints = [], seriesIndex = this.index, stacks = yAxis.stacking.stacks[this.stackKey], threshold = options.threshold, translatedThreshold = Math.round(// #10909
42976
- yAxis.getThreshold(options.threshold)), connectNulls = pick(// #10574
42977
- options.connectNulls, stacking === 'percent'),
43181
+ yAxis.getThreshold(options.threshold)), connectNulls = (options.connectNulls ?? stacking === 'percent'),
42978
43182
  // To display null points in underlying stacked series, this
42979
43183
  // series graph must be broken, and the area also fall down to
42980
43184
  // fill the gap left by the null point. #2069
@@ -43027,9 +43231,9 @@ class AreaSeries extends AreaSeries_LineSeries {
43027
43231
  // Treat points with undefined plotY as null (e.g. non-positive
43028
43232
  // values on logarithmic axis, #18422)
43029
43233
  isNull = points[i].isNull || !defined(points[i].plotY);
43030
- plotX = pick(points[i].rectPlotX, points[i].plotX);
43234
+ plotX = (points[i].rectPlotX ?? points[i].plotX);
43031
43235
  yBottom = stacking ?
43032
- pick(points[i].yBottom, translatedThreshold) :
43236
+ (points[i].yBottom ?? translatedThreshold) :
43033
43237
  translatedThreshold;
43034
43238
  if (!isNull || connectNulls) {
43035
43239
  if (!connectNulls) {
@@ -43367,10 +43571,10 @@ class SplineSeries extends SplineSeries_LineSeries {
43367
43571
  }
43368
43572
  const ret = [
43369
43573
  'C',
43370
- pick(lastPoint.rightContX, lastPoint.plotX, 0),
43371
- pick(lastPoint.rightContY, lastPoint.plotY, 0),
43372
- pick(leftContX, plotX, 0),
43373
- pick(leftContY, plotY, 0),
43574
+ (lastPoint.rightContX ?? lastPoint.plotX ?? 0),
43575
+ (lastPoint.rightContY ?? lastPoint.plotY ?? 0),
43576
+ (leftContX ?? plotX ?? 0),
43577
+ (leftContY ?? plotY ?? 0),
43374
43578
  plotX,
43375
43579
  plotY
43376
43580
  ];
@@ -43815,6 +44019,8 @@ const ColumnSeriesDefaults = {
43815
44019
  * 0.25
43816
44020
  * @sample {highcharts} highcharts/plotoptions/column-pointpadding-none/
43817
44021
  * 0 for tightly packed columns
44022
+ * @sample {highcharts} highcharts/plotoptions/pie-pointpadding/
44023
+ * Pie point padding plugin
43818
44024
  *
43819
44025
  * @product highcharts highstock gantt
43820
44026
  */
@@ -44146,12 +44352,12 @@ const ColumnSeriesDefaults = {
44146
44352
  */
44147
44353
  /**
44148
44354
  * @excluding halo, lineWidth, lineWidthPlus, marker
44149
- * @product highcharts highstock
44355
+ * @product highcharts highstock gantt
44150
44356
  * @apioption series.column.states.hover
44151
44357
  */
44152
44358
  /**
44153
44359
  * @excluding halo, lineWidth, lineWidthPlus, marker
44154
- * @product highcharts highstock
44360
+ * @product highcharts highstock gantt
44155
44361
  * @apioption series.column.states.select
44156
44362
  */
44157
44363
  /**
@@ -44181,7 +44387,6 @@ const ColumnSeriesDefaults = {
44181
44387
  * */
44182
44388
 
44183
44389
 
44184
- const { animObject: ColumnSeries_animObject } = AnimationUtilities;
44185
44390
 
44186
44391
  const { parse: ColumnSeries_color } = Color_Color;
44187
44392
 
@@ -44252,7 +44457,7 @@ class ColumnSeries extends Series_Series {
44252
44457
  }
44253
44458
  else { // Run the animation
44254
44459
  translateStart = Number(series.group.attr(translateProp));
44255
- series.group.animate({ scaleY: 1 }, extend(ColumnSeries_animObject(series.options.animation), {
44460
+ series.group.animate({ scaleY: 1 }, extend(animObject(series.options.animation), {
44256
44461
  // Do the scale synchronously to ensure smooth
44257
44462
  // updating (#5030, #7228)
44258
44463
  step: function (val, fx) {
@@ -44338,7 +44543,7 @@ class ColumnSeries extends Series_Series {
44338
44543
  xAxis.tickInterval ||
44339
44544
  1), // #2610
44340
44545
  xAxis.len // #1535
44341
- ), groupPadding = categoryWidth * options.groupPadding, groupWidth = categoryWidth - 2 * groupPadding, pointOffsetWidth = groupWidth / (columnCount || 1), pointWidth = Math.min(options.maxPointWidth || xAxis.len, pick(options.pointWidth, pointOffsetWidth * (1 - 2 * options.pointPadding))), pointPadding = (pointOffsetWidth - pointWidth) / 2,
44546
+ ), groupPadding = categoryWidth * options.groupPadding, groupWidth = categoryWidth - 2 * groupPadding, pointOffsetWidth = groupWidth / (columnCount || 1), pointWidth = Math.min(options.maxPointWidth || xAxis.len, (options.pointWidth ?? pointOffsetWidth * (1 - 2 * options.pointPadding))), pointPadding = (pointOffsetWidth - pointWidth) / 2,
44342
44547
  // #1251, #3737
44343
44548
  colIndex = (series.columnIndex || 0) + (reverseStacks ? 1 : 0), pointXOffset = pointPadding +
44344
44549
  (groupPadding +
@@ -44588,11 +44793,11 @@ class ColumnSeries extends Series_Series {
44588
44793
  */
44589
44794
  pointAttribs(point, state) {
44590
44795
  const options = this.options, p2o = this.pointAttrToOptions || {}, strokeOption = p2o.stroke || 'borderColor', strokeWidthOption = p2o['stroke-width'] || 'borderWidth';
44591
- let stateOptions, zone, brightness, fill = (point && point.color) || this.color,
44796
+ let stateOptions, zone, brightness, fill = point?.color || this.color,
44592
44797
  // Set to fill when borderColor null:
44593
- stroke = ((point && point[strokeOption]) ||
44798
+ stroke = (point?.[strokeOption] ||
44594
44799
  options[strokeOption] ||
44595
- fill), dashstyle = (point && point.options.dashStyle) || options.dashStyle, strokeWidth = (point?.[strokeWidthOption]) ??
44800
+ fill), dashstyle = point?.options.dashStyle || options.dashStyle, strokeWidth = point?.[strokeWidthOption] ??
44596
44801
  options[strokeWidthOption] ??
44597
44802
  this[strokeWidthOption] ?? 1, opacity = (point?.isNull && options.nullInteraction) ?
44598
44803
  0 :
@@ -44613,7 +44818,7 @@ class ColumnSeries extends Series_Series {
44613
44818
  }
44614
44819
  // Select or hover states
44615
44820
  if (state && point) {
44616
- stateOptions = merge(options.states[state],
44821
+ stateOptions = merge(options.states?.[state],
44617
44822
  // #6401
44618
44823
  point.options.states?.[state] || {});
44619
44824
  brightness = stateOptions.brightness;
@@ -44623,14 +44828,13 @@ class ColumnSeries extends Series_Series {
44623
44828
  .brighten(stateOptions.brightness)
44624
44829
  .get()) || fill;
44625
44830
  stroke = stateOptions[strokeOption] || stroke;
44626
- strokeWidth =
44627
- stateOptions[strokeWidthOption] || strokeWidth;
44831
+ strokeWidth = stateOptions[strokeWidthOption] || strokeWidth;
44628
44832
  dashstyle = stateOptions.dashStyle || dashstyle;
44629
- opacity = pick(stateOptions.opacity, opacity);
44833
+ opacity = stateOptions.opacity ?? opacity;
44630
44834
  }
44631
44835
  const ret = {
44632
- fill: fill,
44633
- stroke: stroke,
44836
+ fill,
44837
+ stroke,
44634
44838
  'stroke-width': strokeWidth,
44635
44839
  opacity: point?.condemned ? 0 : opacity
44636
44840
  };
@@ -44671,6 +44875,7 @@ class ColumnSeries extends Series_Series {
44671
44875
  initialAttr = merge(shapeArgs, point.getOrigin(point.origin, shapeArgs));
44672
44876
  if (!styledMode) {
44673
44877
  initialAttr.opacity = 0;
44878
+ initialAttr['stroke-width'] = 0;
44674
44879
  }
44675
44880
  shouldUpdate = true;
44676
44881
  verb = 'animate';
@@ -44686,7 +44891,7 @@ class ColumnSeries extends Series_Series {
44686
44891
  }
44687
44892
  // Presentational
44688
44893
  if (!styledMode) {
44689
- graphic[verb](series.pointAttribs(point, (point.selected && 'select')))
44894
+ graphic[verb](series.pointAttribs(point, point.selected ? 'select' : ''))
44690
44895
  .shadow(point.allowShadow !== false && options.shadow);
44691
44896
  }
44692
44897
  graphic
@@ -44810,6 +45015,7 @@ Series_SeriesRegistry.registerSeriesType('column', ColumnSeries);
44810
45015
  * Default Export
44811
45016
  *
44812
45017
  * */
45018
+ /** @internal */
44813
45019
  /* harmony default export */ const Column_ColumnSeries = (ColumnSeries);
44814
45020
  /* *
44815
45021
  *
@@ -44846,7 +45052,6 @@ Series_SeriesRegistry.registerSeriesType('column', ColumnSeries);
44846
45052
  * */
44847
45053
 
44848
45054
 
44849
- const { getDeferredAnimation: DataLabel_getDeferredAnimation } = AnimationUtilities;
44850
45055
 
44851
45056
  const { format: DataLabel_format } = Core_Templating;
44852
45057
 
@@ -44902,7 +45107,7 @@ var DataLabel;
44902
45107
  // that parts of the align box is inside the plot area
44903
45108
  // (#12370). When stacking, it is always inside regardless
44904
45109
  // of the option (#15148).
44905
- pick(options.inside, !!this.options.stacking) &&
45110
+ (options.inside ?? !!this.options.stacking) &&
44906
45111
  alignTo &&
44907
45112
  chart.isInsidePlot(plotX, inverted ?
44908
45113
  alignTo.x + 1 :
@@ -45005,8 +45210,8 @@ var DataLabel;
45005
45210
  // zIndex: 20
45006
45211
  // }).add();
45007
45212
  // chart.renderer.circle(
45008
- // chart.plotLeft + pick(dataLabel.alignAttr.x, 0),
45009
- // chart.plotTop + pick(dataLabel.alignAttr.y, 0),
45213
+ // chart.plotLeft + (dataLabel.alignAttr.x ?? 0),
45214
+ // chart.plotTop + (dataLabel.alignAttr.y ?? 0),
45010
45215
  // 2
45011
45216
  // ).attr({
45012
45217
  // fill: 'red',
@@ -45163,7 +45368,7 @@ var DataLabel;
45163
45368
  'var(--highcharts-background-color)'), groupByIndex = [], seriesDlOptions = mergedDataLabelOptions(series);
45164
45369
  // Resolve the animation
45165
45370
  const { animation, defer } = seriesDlOptions[0], animationConfig = defer ?
45166
- DataLabel_getDeferredAnimation(chart, animation, series) :
45371
+ getDeferredAnimation(chart, animation, series) :
45167
45372
  { defer: 0, duration: 0 };
45168
45373
  fireEvent(this, 'drawDataLabels');
45169
45374
  if (series.hasDataLabels?.()) {
@@ -45189,7 +45394,7 @@ var DataLabel;
45189
45394
  if (labelEnabled) {
45190
45395
  // Create individual options structure that can be
45191
45396
  // extended without affecting others
45192
- formatString = pick(labelOptions[point.formatPrefix + 'Format'], labelOptions.format);
45397
+ formatString = (labelOptions[point.formatPrefix + 'Format'] ?? labelOptions.format);
45193
45398
  labelText = defined(formatString) ?
45194
45399
  DataLabel_format(formatString, point, chart) :
45195
45400
  (labelOptions[point.formatPrefix + 'Formatter'] ||
@@ -45197,7 +45402,9 @@ var DataLabel;
45197
45402
  rotation = labelOptions.rotation;
45198
45403
  if (!chart.styledMode) {
45199
45404
  // Determine the color
45200
- style.color = pick(labelOptions.color, style.color, isString(series.color) ? series.color : void 0, 'var(--highcharts-neutral-color-100)');
45405
+ style.color = (isString(labelOptions.color) ?
45406
+ labelOptions.color :
45407
+ void 0) ?? style.color ?? (isString(series.color) ? series.color : void 0) ?? 'var(--highcharts-neutral-color-100)';
45201
45408
  // Get automated contrast color
45202
45409
  if (style.color === 'contrast') {
45203
45410
  if (backgroundColor !== 'none') {
@@ -45929,6 +46136,8 @@ const ScatterSeriesDefaults = {
45929
46136
  * Arrays of datetime x and y
45930
46137
  * @sample {highcharts} highcharts/series/data-array-of-name-value/
45931
46138
  * Arrays of point.name and y
46139
+ * @sample {highcharts} highcharts/series-scatter/scatter-cluster/
46140
+ * Computed clusters
45932
46141
  * @sample {highcharts} highcharts/series/data-array-of-objects/
45933
46142
  * Config objects
45934
46143
  *
@@ -45996,14 +46205,15 @@ class ScatterSeries extends ScatterSeries_LineSeries {
45996
46205
  return rand - Math.floor(rand);
45997
46206
  }
45998
46207
  if (jitter) {
45999
- this.points.forEach(function (point, i) {
46000
- ['x', 'y'].forEach(function (dim, j) {
46208
+ this.points.forEach((point, i) => {
46209
+ ['x', 'y'].forEach((dim, j) => {
46001
46210
  if (jitter[dim] && !point.isNull) {
46002
- const plotProp = `plot${dim.toUpperCase()}`, axis = series[`${dim}Axis`], translatedJitter = jitter[dim] *
46003
- axis.transA;
46211
+ const plotProp = `plot${dim.toUpperCase()}`, axis = series[`${dim}Axis`];
46004
46212
  if (axis && !axis.logarithmic) {
46005
46213
  // Identify the outer bounds of the jitter range
46006
- const min = Math.max(0, (point[plotProp] || 0) - translatedJitter), max = Math.min(axis.len, (point[plotProp] || 0) + translatedJitter);
46214
+ // (#25054)
46215
+ const translatedJitter = jitter[dim] * axis.transA *
46216
+ (axis.reversed ? -1 : 1), min = (point[plotProp] || 0) - translatedJitter, max = (point[plotProp] || 0) + translatedJitter;
46007
46217
  // Find a random position within this range
46008
46218
  point[plotProp] = min +
46009
46219
  (max - min) * unrandom(i + j * len);
@@ -46077,7 +46287,7 @@ Series_SeriesRegistry.registerSeriesType('scatter', ScatterSeries);
46077
46287
  const { deg2rad: CenteredUtilities_deg2rad } = Core_Globals;
46078
46288
 
46079
46289
  /**
46080
- * @private
46290
+ * @internal
46081
46291
  */
46082
46292
  var CenteredUtilities;
46083
46293
  (function (CenteredUtilities) {
@@ -46095,7 +46305,7 @@ var CenteredUtilities;
46095
46305
  * Get the center of the pie based on the size and center options relative
46096
46306
  * to the plot area. Borrowed by the polar and gauge series types.
46097
46307
  *
46098
- * @private
46308
+ * @internal
46099
46309
  * @function Highcharts.CenteredSeriesMixin.getCenter
46100
46310
  */
46101
46311
  function getCenter() {
@@ -46108,11 +46318,13 @@ var CenteredUtilities;
46108
46318
  innerSize = parseFloat(innerSize);
46109
46319
  }
46110
46320
  const positions = [
46111
- pick(centerOption?.[0], '50%'),
46112
- pick(centerOption?.[1], '50%'),
46321
+ (centerOption?.[0] ?? '50%'),
46322
+ (centerOption?.[1] ?? '50%'),
46113
46323
  // Prevent from negative values
46114
- pick(size && size < 0 ? void 0 : options.size, '100%'),
46115
- pick(innerSize && innerSize < 0 ? void 0 : options.innerSize || 0, '0%')
46324
+ ((size && size < 0 ? void 0 : options.size) ?? '100%'),
46325
+ ((innerSize && innerSize < 0 ?
46326
+ void 0 :
46327
+ options.innerSize || 0) ?? '0%')
46116
46328
  ];
46117
46329
  for (i = 0; i < 4; ++i) {
46118
46330
  value = positions[i];
@@ -46140,7 +46352,7 @@ var CenteredUtilities;
46140
46352
  * GetStartAndEndRadians - Calculates start and end angles in radians.
46141
46353
  * Used in series types such as pie and sunburst.
46142
46354
  *
46143
- * @private
46355
+ * @internal
46144
46356
  * @function Highcharts.CenteredSeriesMixin.getStartAndEndRadians
46145
46357
  *
46146
46358
  * @param {number} [start]
@@ -46172,6 +46384,7 @@ var CenteredUtilities;
46172
46384
  * Default Export
46173
46385
  *
46174
46386
  * */
46387
+ /** @internal */
46175
46388
  /* harmony default export */ const Series_CenteredUtilities = (CenteredUtilities);
46176
46389
  /* *
46177
46390
  *
@@ -46179,7 +46392,7 @@ var CenteredUtilities;
46179
46392
  *
46180
46393
  * */
46181
46394
  /**
46182
- * @private
46395
+ * @internal
46183
46396
  * @interface Highcharts.RadianAngles
46184
46397
  */ /**
46185
46398
  * @name Highcharts.RadianAngles#end
@@ -46204,7 +46417,6 @@ var CenteredUtilities;
46204
46417
  * */
46205
46418
 
46206
46419
 
46207
- const { setAnimation: PiePoint_setAnimation } = AnimationUtilities;
46208
46420
 
46209
46421
 
46210
46422
  /* *
@@ -46312,9 +46524,9 @@ class PiePoint extends Series_Point {
46312
46524
  */
46313
46525
  slice(sliced, redraw, animation) {
46314
46526
  const series = this.series, chart = series.chart;
46315
- PiePoint_setAnimation(animation, chart);
46527
+ setAnimation(animation, chart);
46316
46528
  // Redraw is true by default
46317
- redraw = pick(redraw, true);
46529
+ redraw = (redraw ?? true);
46318
46530
  this.sliced = this.options.sliced = sliced ?? !this.sliced;
46319
46531
  // Update options.data
46320
46532
  if (series.options.data) {
@@ -47119,7 +47331,8 @@ class PieSeries extends Series_Series {
47119
47331
  // Start values
47120
47332
  graphic.attr({
47121
47333
  // Animate from inner radius (#779)
47122
- r: pick(point.startR, (series.center && series.center[3] / 2)),
47334
+ r: point.startR ??
47335
+ (series.center && series.center[3] / 2),
47123
47336
  start: startAngleRad,
47124
47337
  end: startAngleRad
47125
47338
  });
@@ -47760,7 +47973,7 @@ var PieDataLabel_ColumnDataLabel;
47760
47973
  labelPosition.computed.x = x;
47761
47974
  labelPosition.computed.y = y - topOffset;
47762
47975
  // Detect overflowing data labels
47763
- if (pick(dataLabelOptions.crop, true)) {
47976
+ if (dataLabelOptions.crop ?? true) {
47764
47977
  dataLabelWidth = dataLabel.getBBox().width;
47765
47978
  let sideOverflow;
47766
47979
  // Overflow left
@@ -48276,7 +48489,10 @@ function OverlappingDataLabels_onChartRender() {
48276
48489
  if (point.visible) {
48277
48490
  (point.dataLabels || []).forEach((label) => {
48278
48491
  const options = label.options || {};
48279
- label.labelrank = pick(options.labelrank, point.labelrank, point.shapeArgs?.height); // #4118
48492
+ label.labelrank =
48493
+ options.labelrank ??
48494
+ point.labelrank ??
48495
+ point.shapeArgs?.height; // #4118
48280
48496
  // #21725: Sync target positions for generic overlap
48281
48497
  // checking. During animations (e.g., toggling a
48282
48498
  // point), DOM positions may overlap. We force
@@ -48450,7 +48666,7 @@ function BorderRadius_arc(x, y, w, h, options = {}) {
48450
48666
  if (options.open || !options.borderRadius) {
48451
48667
  return path;
48452
48668
  }
48453
- const alpha = end - start, sinHalfAlpha = Math.sin(alpha / 2), borderRadius = Math.max(Math.min(relativeLength(options.borderRadius || 0, r - innerR),
48669
+ const alpha = end - start, sinHalfAlpha = Math.sin(alpha / 2), borderRadius = Math.max(Math.min(relativeLength(borderRadiusObject(options.borderRadius).radius, r - innerR),
48454
48670
  // Cap to half the sector radius
48455
48671
  (r - innerR) / 2,
48456
48672
  // For smaller pie slices, cap to the largest small circle that
@@ -48476,7 +48692,7 @@ function seriesOnAfterColumnTranslate() {
48476
48692
  if (this.options.borderRadius &&
48477
48693
  !(this.chart.is3d && this.chart.is3d())) {
48478
48694
  const { options, yAxis } = this, percent = options.stacking === 'percent', seriesDefault = BorderRadius_defaultOptions.plotOptions?.[this.type]
48479
- ?.borderRadius, borderRadius = optionsToObject(options.borderRadius, isObject(seriesDefault) ? seriesDefault : {}), reversed = yAxis.options.reversed;
48695
+ ?.borderRadius, borderRadius = borderRadiusObject(options.borderRadius, isObject(seriesDefault) ? seriesDefault : {}), reversed = yAxis.options.reversed;
48480
48696
  for (const point of this.points) {
48481
48697
  const { shapeArgs } = point;
48482
48698
  if (point.shapeType === 'roundedRect' && shapeArgs) {
@@ -48548,8 +48764,12 @@ function composeBorderRadius(SeriesClass, SVGElementClass, SVGRendererClass) {
48548
48764
  symbols.roundedRect = BorderRadius_roundedRect;
48549
48765
  }
48550
48766
  }
48551
- /** @internal */
48552
- function optionsToObject(options, seriesBROptions) {
48767
+ /**
48768
+ * Utility function to get the full border radius options object, from a simple
48769
+ * number or a partial options object.
48770
+ * @internal
48771
+ */
48772
+ function borderRadiusObject(options, seriesBROptions) {
48553
48773
  if (!isObject(options)) {
48554
48774
  options = { radius: options || 0 };
48555
48775
  }
@@ -48557,7 +48777,7 @@ function optionsToObject(options, seriesBROptions) {
48557
48777
  }
48558
48778
  /** @internal */
48559
48779
  function pieSeriesOnAfterTranslate() {
48560
- const borderRadius = optionsToObject(this.options.borderRadius);
48780
+ const borderRadius = borderRadiusObject(this.options.borderRadius);
48561
48781
  for (const point of this.points) {
48562
48782
  const shapeArgs = point.shapeArgs;
48563
48783
  if (shapeArgs) {
@@ -48676,7 +48896,7 @@ function BorderRadius_roundedRect(x, y, width, height, options = {}) {
48676
48896
  * Column and pie with rounded border
48677
48897
  *
48678
48898
  * @name Highcharts.BorderRadiusOptionsObject#radius
48679
- * @type {string|number}
48899
+ * @type {string|number|undefined}
48680
48900
  */ /**
48681
48901
  * The scope of the rounding for column charts or plot bands. In a stacked
48682
48902
  * column chart, the value `point` means each single point will get rounded
@@ -48691,8 +48911,7 @@ function BorderRadius_roundedRect(x, y, width, height, options = {}) {
48691
48911
  * Rounded columns
48692
48912
  *
48693
48913
  * @name Highcharts.BorderRadiusOptionsObject#scope
48694
- * @validvalue ["individual", "point", "stack"]
48695
- * @type {string}
48914
+ * @type {"individual"|"point"|"stack"|undefined}
48696
48915
  */ /**
48697
48916
  * For column charts, where in the point or stack to apply rounding. The `end`
48698
48917
  * value means only those corners at the point value will be rounded, leaving
@@ -48703,8 +48922,7 @@ function BorderRadius_roundedRect(x, y, width, height, options = {}) {
48703
48922
  * Rounding on all corners
48704
48923
  *
48705
48924
  * @name Highcharts.BorderRadiusOptionsObject#where
48706
- * @validvalue ["all", "end"]
48707
- * @type {string}
48925
+ * @type {"all"|"end"|undefined}
48708
48926
  * @default end
48709
48927
  */
48710
48928
  (''); // Keeps doclets above in JS file
@@ -48763,10 +48981,12 @@ var Responsive;
48763
48981
  */
48764
48982
  function matchResponsiveRule(rule, matches) {
48765
48983
  const condition = rule.condition, fn = condition.callback || function () {
48766
- return (this.chartWidth <= pick(condition.maxWidth, Number.MAX_VALUE) &&
48767
- this.chartHeight <= pick(condition.maxHeight, Number.MAX_VALUE) &&
48768
- this.chartWidth >= pick(condition.minWidth, 0) &&
48769
- this.chartHeight >= pick(condition.minHeight, 0));
48984
+ return (this.chartWidth <=
48985
+ (condition.maxWidth ?? Number.MAX_VALUE) &&
48986
+ this.chartHeight <=
48987
+ (condition.maxHeight ?? Number.MAX_VALUE) &&
48988
+ this.chartWidth >= (condition.minWidth ?? 0) &&
48989
+ this.chartHeight >= (condition.minHeight ?? 0));
48770
48990
  };
48771
48991
  if (fn.call(this, this)) {
48772
48992
  matches.push(rule._id);
@@ -48980,7 +49200,7 @@ var Responsive;
48980
49200
  ;// ./code/es-modules/masters/highcharts.src.js
48981
49201
  // SPDX-License-Identifier: LicenseRef-Highcharts
48982
49202
  /**
48983
- * @license Highcharts JS v13.0.0 (2026-06-11)
49203
+ * @license Highcharts JS v13.0.2 (2026-08-27)
48984
49204
  * @module highcharts/highcharts
48985
49205
  *
48986
49206
  * (c) 2009-2026 Highsoft AS
@@ -49057,12 +49277,17 @@ G.SVGElement = SVG_SVGElement;
49057
49277
  G.SVGRenderer = SVG_SVGRenderer;
49058
49278
  G.Templating = Core_Templating;
49059
49279
  G.Tick = Axis_Tick;
49060
- G.Time = Core_Time;
49280
+ G.Time = class extends Core_Time {
49281
+ constructor(options, lang) {
49282
+ const defaultOptions = Defaults.getOptions();
49283
+ super(options ?? defaultOptions.time, lang ?? defaultOptions.lang);
49284
+ }
49285
+ };
49061
49286
  G.Tooltip = Core_Tooltip;
49062
49287
  // Utilities
49063
49288
  G.addEvent = addEvent;
49064
- G.animObject = AnimationUtilities.animObject;
49065
- G.animate = AnimationUtilities.animate;
49289
+ G.animObject = animObject;
49290
+ G.animate = animate;
49066
49291
  G.arrayMax = arrayMax;
49067
49292
  G.arrayMin = arrayMin;
49068
49293
  G.attr = attr;
@@ -49089,7 +49314,7 @@ G.fireEvent = fireEvent;
49089
49314
  G.format = Core_Templating.format;
49090
49315
  G.getAlignFactor = getAlignFactor;
49091
49316
  G.getClosestDistance = getClosestDistance;
49092
- G.getDeferredAnimation = AnimationUtilities.getDeferredAnimation;
49317
+ G.getDeferredAnimation = getDeferredAnimation;
49093
49318
  G.getMagnitude = getMagnitude;
49094
49319
  G.getNestedProperty = getNestedProperty;
49095
49320
  G.getOptions = Defaults.getOptions;
@@ -49116,11 +49341,11 @@ G.relativeLength = relativeLength;
49116
49341
  G.removeEvent = removeEvent;
49117
49342
  G.replaceNested = replaceNested;
49118
49343
  G.seriesType = Series_SeriesRegistry.seriesType;
49119
- G.setAnimation = AnimationUtilities.setAnimation;
49344
+ G.setAnimation = setAnimation;
49120
49345
  G.setOptions = Defaults.setOptions;
49121
49346
  G.splat = splat;
49122
49347
  G.stableSort = stableSort;
49123
- G.stop = AnimationUtilities.stop;
49348
+ G.stop = stop;
49124
49349
  G.syncTimeout = syncTimeout;
49125
49350
  G.time = Defaults.defaultTime;
49126
49351
  G.ucfirst = ucfirst;