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,6 +1,6 @@
1
1
  // SPDX-License-Identifier: LicenseRef-Highcharts
2
2
  /**
3
- * @license Highcharts JS v13.0.0 (2026-06-11)
3
+ * @license Highcharts JS v13.0.2 (2026-08-27)
4
4
  * @module highcharts/standalone-navigator
5
5
  *
6
6
  * Standalone Navigator for Highcharts.
@@ -23,16 +23,31 @@
23
23
  return /******/ (() => { // webpackBootstrap
24
24
  /******/ "use strict";
25
25
  /******/ // The require scope
26
- /******/ var __webpack_require__ = {};
26
+ /******/ const __webpack_require__ = {};
27
27
  /******/
28
28
  /************************************************************************/
29
29
  /******/ /* webpack/runtime/define property getters */
30
30
  /******/ (() => {
31
- /******/ // define getter functions for harmony exports
31
+ /******/ // define getter/value functions for harmony exports
32
32
  /******/ __webpack_require__.d = (exports, definition) => {
33
- /******/ for(var key in definition) {
34
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
35
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
33
+ /******/ if(Array.isArray(definition)) {
34
+ /******/ var i = 0;
35
+ /******/ while(i < definition.length) {
36
+ /******/ var key = definition[i++];
37
+ /******/ var binding = definition[i++];
38
+ /******/ if(!__webpack_require__.o(exports, key)) {
39
+ /******/ if(binding === 0) {
40
+ /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
41
+ /******/ } else {
42
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
43
+ /******/ }
44
+ /******/ } else if(binding === 0) { i++; }
45
+ /******/ }
46
+ /******/ } else {
47
+ /******/ for(var key in definition) {
48
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
49
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
50
+ /******/ }
36
51
  /******/ }
37
52
  /******/ }
38
53
  /******/ };
@@ -44,7 +59,7 @@ return /******/ (() => { // webpackBootstrap
44
59
  /******/ })();
45
60
  /******/
46
61
  /************************************************************************/
47
- var __webpack_exports__ = {};
62
+ let __webpack_exports__ = {};
48
63
 
49
64
  // EXPORTS
50
65
  __webpack_require__.d(__webpack_exports__, {
@@ -80,7 +95,7 @@ var Globals;
80
95
  * Constants
81
96
  *
82
97
  * */
83
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.0', Globals.win = (typeof window !== 'undefined' ?
98
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.2', Globals.win = (typeof window !== 'undefined' ?
84
99
  window :
85
100
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
86
101
  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 = [
@@ -407,6 +422,29 @@ const ChartDefaults = {
407
422
  * @context Highcharts.Chart
408
423
  * @apioption chart.events.load
409
424
  */
425
+ /**
426
+ * Fires while the chart is panned by mouse drag. Panning must be
427
+ * enabled through [chart.panning](#chart.panning). One parameter,
428
+ * `event`, is passed to the function, containing common event
429
+ * information as well as `event.originalEvent`, the underlying pointer
430
+ * event. Note that the event fires for every mouse move during the
431
+ * drag, not once per gesture.
432
+ *
433
+ * Calling `event.preventDefault()` or returning false prevents the
434
+ * default panning of the axes. In Highcharts Maps, and on ordinal axes
435
+ * in Highcharts Stock, the panning is applied outside the default
436
+ * action and is not prevented.
437
+ *
438
+ * Panning by touch does not fire this event, unless
439
+ * [chart.zooming.singleTouch](#chart.zooming.singleTouch) is enabled and
440
+ * no zoom type is set. Single-finger drags are then handled as mouse
441
+ * drags and fire this event.
442
+ *
443
+ * @type {Highcharts.ChartPanCallbackFunction}
444
+ * @since 7.0.2
445
+ * @context Highcharts.Chart
446
+ * @apioption chart.events.pan
447
+ */
410
448
  /**
411
449
  * Fires when the chart is redrawn, either after a call to
412
450
  * `chart.redraw()` or after an axis, series or point is modified with
@@ -995,7 +1033,7 @@ const ChartDefaults = {
995
1033
  * @type {Highcharts.ColorType}
996
1034
  * @since 2.1.7
997
1035
  */
998
- selectionMarkerFill: 'color-mix(var(--highcharts-highlight-color-80) 25%, transparent)', // eslint-disable-line max-len
1036
+ selectionMarkerFill: 'color-mix(in srgb, var(--highcharts-highlight-color-80) 25%, transparent)', // eslint-disable-line max-len
999
1037
  /**
1000
1038
  * Whether to apply a drop shadow to the global series group. This causes
1001
1039
  * all the series to have the same shadow. Contrary to the `series.shadow`
@@ -2421,7 +2459,7 @@ function getStyle(el, prop, toInt) {
2421
2459
  const css = win.getComputedStyle(el, void 0); // eslint-disable-line no-undefined
2422
2460
  if (css) {
2423
2461
  style = css.getPropertyValue(prop);
2424
- if (pick(toInt, prop !== 'opacity')) {
2462
+ if (toInt ?? prop !== 'opacity') {
2425
2463
  style = pInt(style);
2426
2464
  }
2427
2465
  }
@@ -2671,7 +2709,7 @@ function merge(extendOrSource, ...sources) {
2671
2709
  function normalizeTickInterval(interval, multiples, magnitude, allowDecimals, hasTickAmount) {
2672
2710
  let i, retInterval = interval;
2673
2711
  // Round to a tenfold of 1, 2, 2.5 or 5
2674
- magnitude = pick(magnitude, getMagnitude(interval));
2712
+ magnitude = (magnitude ?? getMagnitude(interval));
2675
2713
  const normalized = interval / magnitude;
2676
2714
  // Multiples for a linear scale
2677
2715
  if (!multiples) {
@@ -2784,20 +2822,22 @@ function pad(number, length, padder) {
2784
2822
  .replace('-', '')
2785
2823
  .length).join(padder || '0') + number;
2786
2824
  }
2787
- /* eslint-disable jsdoc/check-param-names */
2825
+ /* eslint-disable valid-jsdoc */
2788
2826
  /**
2789
2827
  * Return the first value that is not null or undefined.
2790
2828
  *
2829
+ * @deprecated 13.0.2
2830
+ * Use nullish coalescing (`??`) or explicit fallback logic instead.
2831
+ *
2791
2832
  * @function Highcharts.pick<T>
2792
2833
  *
2793
- * @param {...Array<T|null|undefined>} items
2834
+ * @param {...(T|null|undefined)} args
2794
2835
  * Variable number of arguments to inspect.
2795
2836
  *
2796
2837
  * @return {T}
2797
2838
  * The value of the first argument that is not null or undefined.
2798
2839
  */
2799
- function pick() {
2800
- const args = arguments;
2840
+ function pick(...args) {
2801
2841
  const length = args.length;
2802
2842
  for (let i = 0; i < length; i++) {
2803
2843
  const arg = args[i];
@@ -2806,7 +2846,7 @@ function pick() {
2806
2846
  }
2807
2847
  }
2808
2848
  }
2809
- /* eslint-enable jsdoc/check-param-names */
2849
+ /* eslint-enable valid-jsdoc */
2810
2850
  /**
2811
2851
  * Shortcut for parseInt
2812
2852
  *
@@ -3189,7 +3229,8 @@ function insertItem(item, collection) {
3189
3229
  !collection[i] ||
3190
3230
  // Handle index option, the element to insert has lower index
3191
3231
  (isNumber(indexOption) &&
3192
- indexOption < pick(collection[i].options.index, collection[i]._i)) ||
3232
+ indexOption < (collection[i].options.index ??
3233
+ collection[i]._i)) ||
3193
3234
  // Insert the new item before other internal items
3194
3235
  // (navigator)
3195
3236
  collection[i].options.isInternal) {
@@ -3275,7 +3316,7 @@ const uniqueKey = (function () {
3275
3316
  * State of the serial mode.
3276
3317
  */
3277
3318
  function useSerialIds(mode) {
3278
- return (serialMode = pick(mode, serialMode));
3319
+ return (serialMode = (mode ?? serialMode));
3279
3320
  }
3280
3321
  /* *
3281
3322
  *
@@ -3741,6 +3782,10 @@ const isDateTimeFormatOptions = (obj) => obj.main === void 0;
3741
3782
  *
3742
3783
  * @param {Highcharts.TimeOptions} [options] Time options as defined in
3743
3784
  * [chart.options.time](/highcharts/time).
3785
+ *
3786
+ * @param {Highcharts.LangOptions} [lang]
3787
+ * Language options. When `options.locale` is not set, `lang.locale` is used as
3788
+ * the locale fallback for locale-aware date formatting.
3744
3789
  */
3745
3790
  class TimeBase {
3746
3791
  /* *
@@ -3759,8 +3804,8 @@ class TimeBase {
3759
3804
  };
3760
3805
  this.variableTimezone = false;
3761
3806
  this.Date = TimeBase_win.Date;
3762
- this.update(options);
3763
3807
  this.lang = lang;
3808
+ this.update(options);
3764
3809
  }
3765
3810
  /* *
3766
3811
  *
@@ -3872,7 +3917,9 @@ class TimeBase {
3872
3917
  /**
3873
3918
  * Shorthand to get a cached `Intl.DateTimeFormat` instance.
3874
3919
  */
3875
- dateTimeFormat(options, timestamp, locale = this.options.locale || pageLang) {
3920
+ dateTimeFormat(options, timestamp, locale = (this.options.locale ||
3921
+ this.lang?.locale ||
3922
+ pageLang)) {
3876
3923
  const cacheKey = JSON.stringify(options) + locale;
3877
3924
  if (isString(options)) {
3878
3925
  options = this.str2dtf(options);
@@ -3958,17 +4005,16 @@ class TimeBase {
3958
4005
  // eslint-disable-next-line new-cap
3959
4006
  let d = this.Date.UTC(year, month, date, hours, minutes || 0, seconds || 0, milliseconds || 0);
3960
4007
  if (this.timezone !== 'UTC') {
3961
- const offset = this.getTimezoneOffset(d);
4008
+ const offset = this.getTimezoneOffset(d), localHours = (hours - offset / timeUnits.hour + 24) % 24;
3962
4009
  d += offset;
3963
- // Adjustments close to DST transitions
3964
4010
  if (
3965
- // Optimize for speed by limiting the number of calls to
3966
- // `getTimezoneOffset`. According to
4011
+ // Limit the number of calls to `getTimezoneOffset` to months
4012
+ // where DST changes may occur. According to
3967
4013
  // https://en.wikipedia.org/wiki/Daylight_saving_time_by_country,
3968
4014
  // DST change may only occur in these months.
3969
4015
  [2, 3, 8, 9, 10, 11].indexOf(month) !== -1 &&
3970
- // DST transitions occur only in the night-time
3971
- (hours < 5 || hours > 20)) {
4016
+ // DST changes only occur at night (#24420)
4017
+ (localHours < 5 || localHours > 20)) {
3972
4018
  const newOffset = this.getTimezoneOffset(d);
3973
4019
  if (offset !== newOffset) {
3974
4020
  d += newOffset - offset;
@@ -6705,6 +6751,9 @@ const defaultOptions = {
6705
6751
  * below the column, but as `followTouchMove` is true, the tooltip will
6706
6752
  * jump from column to column as the user swipes across the plot area.
6707
6753
  *
6754
+ * @sample {highcharts} highcharts/tooltip/followtouchmove/
6755
+ * Tooltip follows touch move
6756
+ *
6708
6757
  * @type {boolean}
6709
6758
  * @default {highcharts} true
6710
6759
  * @default {highstock} true
@@ -7487,10 +7536,14 @@ const defaultOptions = {
7487
7536
  * @type {Highcharts.CSSObject}
7488
7537
  */
7489
7538
  style: {
7490
- /** @type {Highcharts.ColorType} */
7539
+ /**
7540
+ * @type {Highcharts.ColorType}
7541
+ */
7491
7542
  color: 'var(--highcharts-neutral-color-80)',
7492
7543
  cursor: 'default',
7493
- /** @type {number|string} */
7544
+ /**
7545
+ * @type {number|string}
7546
+ */
7494
7547
  fontSize: '0.8em'
7495
7548
  },
7496
7549
  /**
@@ -7806,6 +7859,41 @@ const DefaultOptions = {
7806
7859
  * @param {global.Event} event
7807
7860
  * The event that occurred.
7808
7861
  */
7862
+ /**
7863
+ * Gets fired while the chart is panned by mouse drag. Calling
7864
+ * `event.preventDefault()` or returning `false` prevents the default panning
7865
+ * of the axes.
7866
+ *
7867
+ * @callback Highcharts.ChartPanCallbackFunction
7868
+ *
7869
+ * @param {Highcharts.Chart} this
7870
+ * The chart on which the event occurred.
7871
+ *
7872
+ * @param {Highcharts.ChartPanEventObject} event
7873
+ * The event that occurred.
7874
+ */
7875
+ /**
7876
+ * Contains common event information. Through the `originalEvent` property you
7877
+ * can access the pointer event that triggered the panning.
7878
+ *
7879
+ * @interface Highcharts.ChartPanEventObject
7880
+ */ /**
7881
+ * The pointer event that triggered the panning.
7882
+ * @name Highcharts.ChartPanEventObject#originalEvent
7883
+ * @type {Highcharts.PointerEventObject}
7884
+ */ /**
7885
+ * Prevents the default behavior of the event.
7886
+ * @name Highcharts.ChartPanEventObject#preventDefault
7887
+ * @type {Function}
7888
+ */ /**
7889
+ * The event target.
7890
+ * @name Highcharts.ChartPanEventObject#target
7891
+ * @type {Highcharts.Chart}
7892
+ */ /**
7893
+ * The event type.
7894
+ * @name Highcharts.ChartPanEventObject#type
7895
+ * @type {"pan"}
7896
+ */
7809
7897
  /**
7810
7898
  * Fires when the chart is redrawn, either after a call to `chart.redraw()` or
7811
7899
  * after an axis, series or point is modified with the `redraw` option set to
@@ -8181,7 +8269,9 @@ Color.None = new Color(''); // Must be last static for init
8181
8269
  */
8182
8270
  /**
8183
8271
  * A valid color type than can be parsed and handled by Highcharts. It can be a
8184
- * color string, a gradient object, or a pattern object.
8272
+ * color string (including CSS expressions), a gradient object, or a pattern
8273
+ * object. Read more about colors in the [Highcharts
8274
+ * documentation](https://www.highcharts.com/docs/chart-design-and-style/colors).
8185
8275
  *
8186
8276
  * @typedef {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject} Highcharts.ColorType
8187
8277
  */
@@ -8413,24 +8503,22 @@ class Fx {
8413
8503
  */
8414
8504
  update() {
8415
8505
  const elem = this.elem, prop = this.prop, // If destroyed, it is null
8416
- now = this.now, step = this.options.step;
8506
+ now = this.now ?? 1, step = this.options.step;
8417
8507
  // Animation setter defined from outside
8418
8508
  if (this[prop + 'Setter']) {
8419
8509
  this[prop + 'Setter']();
8420
8510
  // Other animations on SVGElement
8421
8511
  }
8422
- else if (elem.attr) {
8512
+ else if (elem && elem.attr) {
8423
8513
  if (elem.element) {
8424
- elem.attr(prop, now, null, true);
8514
+ elem.attr(prop, now, void 0, true);
8425
8515
  }
8426
8516
  // HTML styles, raw HTML content like container size
8427
8517
  }
8428
- else {
8429
- elem.style[prop] = now + this.unit;
8430
- }
8431
- if (step) {
8432
- step.call(elem, now, this);
8518
+ else if (elem) {
8519
+ elem.style[prop] = now + (this.unit || '');
8433
8520
  }
8521
+ step?.call(elem, now, this);
8434
8522
  }
8435
8523
  /**
8436
8524
  * Run an animation.
@@ -8448,12 +8536,10 @@ class Fx {
8448
8536
  *
8449
8537
  */
8450
8538
  run(from, to, unit) {
8451
- const self = this, options = self.options, timer = function (gotoEnd) {
8452
- return timer.stopped ? false : self.step(gotoEnd);
8453
- }, requestAnimationFrame = Fx_win.requestAnimationFrame ||
8539
+ const { elem, options } = this, { complete, curAnim = {} } = options, timer = (gotoEnd) => (timer.stopped ? false : this.step(gotoEnd)), requestAnimationFrame = Fx_win.requestAnimationFrame ||
8454
8540
  function (step) {
8455
8541
  setTimeout(step, 13);
8456
- }, step = function () {
8542
+ }, step = () => {
8457
8543
  for (let i = 0; i < Fx.timers.length; i++) {
8458
8544
  if (!Fx.timers[i]()) {
8459
8545
  Fx.timers.splice(i--, 1);
@@ -8463,11 +8549,11 @@ class Fx {
8463
8549
  requestAnimationFrame(step);
8464
8550
  }
8465
8551
  };
8466
- if (from === to && !this.elem['forceAnimate:' + this.prop]) {
8467
- delete options.curAnim[this.prop];
8468
- if (options.complete &&
8469
- Object.keys(options.curAnim).length === 0) {
8470
- options.complete.call(this.elem);
8552
+ if (from === to && !elem['forceAnimate:' + this.prop]) {
8553
+ delete curAnim[this.prop];
8554
+ if (complete &&
8555
+ Object.keys(curAnim).length === 0) {
8556
+ complete.call(elem);
8471
8557
  }
8472
8558
  }
8473
8559
  else { // #7166
@@ -8477,7 +8563,7 @@ class Fx {
8477
8563
  this.unit = unit;
8478
8564
  this.now = this.start;
8479
8565
  this.pos = 0;
8480
- timer.elem = this.elem;
8566
+ timer.elem = elem;
8481
8567
  timer.prop = this.prop;
8482
8568
  if (timer() && Fx.timers.push(timer) === 1) {
8483
8569
  requestAnimationFrame(step);
@@ -8498,7 +8584,8 @@ class Fx {
8498
8584
  step(gotoEnd) {
8499
8585
  const t = +new Date(), options = this.options, elem = this.elem, complete = options.complete, duration = options.duration, curAnim = options.curAnim;
8500
8586
  let ret, done;
8501
- if (!!elem.attr && !elem.element) { // #2616, element is destroyed
8587
+ // #2616, element is destroyed
8588
+ if (elem?.attr && !elem.element) {
8502
8589
  ret = false;
8503
8590
  }
8504
8591
  else if (gotoEnd || t >= duration + this.startTime) {
@@ -8727,7 +8814,8 @@ Fx.timers = [];
8727
8814
  * so it should be moved to the SVGRenderer.
8728
8815
  */
8729
8816
  function setAnimation(animation, chart) {
8730
- chart.renderer.globalAnimation = pick(animation, chart.options.chart.animation, true);
8817
+ chart.renderer.globalAnimation =
8818
+ animation ?? chart.options.chart.animation ?? true;
8731
8819
  }
8732
8820
  /**
8733
8821
  * Get the animation in object form, where a disabled animation is always
@@ -8788,6 +8876,11 @@ function getDeferredAnimation(chart, animation, series) {
8788
8876
  /**
8789
8877
  * The global animate method, which uses Fx to create individual animators.
8790
8878
  *
8879
+ * @sample highcharts/members/renderer-basic
8880
+ * SVG elements with animation
8881
+ * @sample highcharts/members/animate
8882
+ * Animation without an owner element
8883
+ *
8791
8884
  * @function Highcharts.animate
8792
8885
  *
8793
8886
  * @param {Highcharts.HTMLDOMElement|Highcharts.SVGElement} el
@@ -8803,14 +8896,12 @@ function getDeferredAnimation(chart, animation, series) {
8803
8896
  *
8804
8897
  * @return {void}
8805
8898
  */
8806
- function animate(el, params, opt) {
8807
- let start, unit = '', end, fx, args;
8899
+ function animate(el, params = { pos: 1 }, opt) {
8808
8900
  if (!isObject(opt)) { // Number or undefined/null
8809
- args = arguments;
8810
8901
  opt = {
8811
- duration: args[2],
8812
- easing: args[3],
8813
- complete: args[4]
8902
+ duration: arguments[2],
8903
+ easing: arguments[3],
8904
+ complete: arguments[4]
8814
8905
  };
8815
8906
  }
8816
8907
  if (!isNumber(opt.duration)) {
@@ -8820,22 +8911,23 @@ function animate(el, params, opt) {
8820
8911
  opt.easing :
8821
8912
  (Math[opt.easing] || Math.easeInOutSine);
8822
8913
  opt.curAnim = merge(params);
8823
- objectEach(params, function (val, prop) {
8914
+ objectEach(params, (val, prop) => {
8824
8915
  // Stop current running animation of this property
8825
- stop(el, prop);
8826
- fx = new Animation_Fx(el, opt, prop);
8827
- end = void 0;
8828
- if (prop === 'd' && isArray(params.d)) {
8829
- fx.paths = fx.initPath(el, el.pathArray, params.d);
8830
- fx.toD = params.d;
8831
- start = 0;
8916
+ if (el) {
8917
+ stop(el, prop);
8918
+ }
8919
+ const fx = new Animation_Fx(el, opt, prop), d = params.d;
8920
+ let start = 0, end = void 0, unit = '';
8921
+ if (prop === 'd' && isArray(d)) {
8922
+ fx.paths = fx.initPath(el, el.pathArray, d);
8923
+ fx.toD = d;
8832
8924
  end = 1;
8833
8925
  }
8834
- else if (el.attr) {
8926
+ else if (el?.attr) {
8835
8927
  start = el.attr(prop);
8836
8928
  }
8837
- else {
8838
- start = parseFloat(getStyle(el, prop)) || 0;
8929
+ else if (el) {
8930
+ start = +(getStyle(el, prop) || 0);
8839
8931
  if (prop !== 'opacity') {
8840
8932
  unit = 'px';
8841
8933
  }
@@ -8846,7 +8938,10 @@ function animate(el, params, opt) {
8846
8938
  if (typeof end === 'string' && end.match('px')) {
8847
8939
  end = end.replace(/px/g, ''); // #4351
8848
8940
  }
8849
- fx.run(start, end, unit);
8941
+ // Empty dashstyle animation crashes treemap on hover
8942
+ if (defined(end)) {
8943
+ fx.run(start, end, unit);
8944
+ }
8850
8945
  });
8851
8946
  }
8852
8947
  /**
@@ -8870,28 +8965,11 @@ function animate(el, params, opt) {
8870
8965
  * improvement in all cases where we stop the animation from .attr. Instead of
8871
8966
  * stopping everything, we can just stop the actual attributes we're setting.
8872
8967
  */
8873
- function stop(el, prop) {
8874
- let i = Animation_Fx.timers.length;
8875
- // Remove timers related to this element (#4519)
8876
- while (i--) {
8877
- if (Animation_Fx.timers[i].elem === el && (!prop || prop === Animation_Fx.timers[i].prop)) {
8878
- Animation_Fx.timers[i].stopped = true; // #4667
8879
- }
8968
+ const stop = (el, prop) => Animation_Fx.timers.forEach((timer) => {
8969
+ if (timer.elem === el && (!prop || prop === timer.prop)) {
8970
+ timer.stopped = true; // #4667
8880
8971
  }
8881
- }
8882
- const animationExports = {
8883
- animate,
8884
- animObject,
8885
- getDeferredAnimation,
8886
- setAnimation,
8887
- stop
8888
- };
8889
- /* *
8890
- *
8891
- * Default Export
8892
- *
8893
- * */
8894
- /* harmony default export */ const AnimationUtilities = (animationExports);
8972
+ });
8895
8973
  /* *
8896
8974
  *
8897
8975
  * API Options
@@ -9196,7 +9274,9 @@ class AST {
9196
9274
  doc = { body };
9197
9275
  }
9198
9276
  const appendChildNodes = (node, addTo) => {
9199
- const tagName = node.nodeName.toLowerCase();
9277
+ // Preserve the camelCase of SVG tags via localName (#24702).
9278
+ const tagName = node.localName ||
9279
+ node.nodeName.toLowerCase();
9200
9280
  // Add allowed tags
9201
9281
  const astNode = {
9202
9282
  tagName
@@ -9310,6 +9390,8 @@ AST.allowedAttributes = [
9310
9390
  'src',
9311
9391
  'startOffset',
9312
9392
  'stdDeviation',
9393
+ 'stop-color',
9394
+ 'stop-opacity',
9313
9395
  'stroke-linecap',
9314
9396
  'stroke-width',
9315
9397
  'stroke',
@@ -9796,7 +9878,7 @@ function format(str = '', ctx, owner) {
9796
9878
  replacement = `"${replacement}"`;
9797
9879
  }
9798
9880
  }
9799
- str = str.replace(match.find, pick(replacement, ''));
9881
+ str = str.replace(match.find, (replacement ?? ''));
9800
9882
  });
9801
9883
  return hasSub ? format(str, ctx, owner) : str;
9802
9884
  }
@@ -9913,9 +9995,7 @@ const Templating = {
9913
9995
  * API Declarations
9914
9996
  * */
9915
9997
  /**
9916
- * @interface Highcharts.Templating
9917
- *
9918
- * The Highcharts.Templating interface provides a structure for defining
9998
+ * The Highcharts.TemplatingObject interface provides a structure for defining
9919
9999
  * helpers. Helpers can be used as conditional blocks or functions within
9920
10000
  * expressions. Highcharts includes several built-in helpers and supports
9921
10001
  * the addition of custom helpers.
@@ -9923,16 +10003,21 @@ const Templating = {
9923
10003
  * @see [More information](
9924
10004
  * https://www.highcharts.com/docs/chart-concepts/templating#helpers)
9925
10005
  *
9926
- * @example
9927
- * // Define a custom helper to return the absolute value of a number
9928
- * Highcharts.Templating.helpers.abs = value => Math.abs(value);
9929
- *
9930
- * // Usage in a format string
9931
- * format: 'Absolute value: {abs point.y}'
9932
- *
9933
- * @name Highcharts.Templating#helpers
9934
- * @type {Record<string, Function>}
9935
- */
10006
+ * @interface Highcharts.TemplatingObject
10007
+ */ /**
10008
+ * @example
10009
+ * // Define a custom helper to return the absolute value of a number
10010
+ * Highcharts.Templating.helpers.abs = value => Math.abs(value);
10011
+ *
10012
+ * // Usage in a format string
10013
+ * format: 'Absolute value: {abs point.y}'
10014
+ *
10015
+ * @name Highcharts.TemplatingObject#helpers
10016
+ * @type {Record<string, Function>}
10017
+ */ /**
10018
+ * @name Highcharts.Templating
10019
+ * @type {Highcharts.TemplatingObject}
10020
+ */
9936
10021
  (''); // Keeps doclets above in file
9937
10022
 
9938
10023
  ;// ./code/es-modules/Core/Renderer/RendererUtilities.js
@@ -10042,7 +10127,7 @@ var RendererUtilities;
10042
10127
  boxes = boxes.map((box) => ({
10043
10128
  size: box.size,
10044
10129
  targets: [box.target],
10045
- align: pick(box.align, 0.5)
10130
+ align: (box.align ?? 0.5)
10046
10131
  }));
10047
10132
  while (overlapping) {
10048
10133
  // Initial positions: target centered in box
@@ -10141,7 +10226,6 @@ var RendererUtilities;
10141
10226
  * */
10142
10227
 
10143
10228
 
10144
- const { animate: SVGElement_animate, animObject: SVGElement_animObject, stop: SVGElement_stop } = AnimationUtilities;
10145
10229
 
10146
10230
 
10147
10231
  const { deg2rad, doc: SVGElement_doc, svg, SVG_NS: SVGElement_SVG_NS, win: SVGElement_win, isFirefox } = Core_Globals;
@@ -10201,8 +10285,10 @@ class SVGElement {
10201
10285
  * Property value.
10202
10286
  */
10203
10287
  _defaultGetter(key) {
10204
- let ret = pick(this[key + 'Value'], // Align getter
10205
- this[key], this.element ? this.element.getAttribute(key) : null, 0);
10288
+ let ret = (this[key + 'Value'] ??
10289
+ this[key] ??
10290
+ (this.element ? this.element.getAttribute(key) : null) ??
10291
+ 0);
10206
10292
  if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
10207
10293
  ret = parseFloat(ret);
10208
10294
  }
@@ -10365,7 +10451,7 @@ class SVGElement {
10365
10451
  }
10366
10452
  alignTo = void 0; // Do not use the box
10367
10453
  }
10368
- const alignToBox = pick(alignTo, renderer[alignToKey], renderer),
10454
+ const alignToBox = alignTo ?? renderer[alignToKey] ?? renderer,
10369
10455
  // Default: left align
10370
10456
  x = (alignToBox.x || 0) + (alignOptions.x || 0) +
10371
10457
  ((alignToBox.width || 0) - (alignOptions.width || 0)) *
@@ -10425,7 +10511,7 @@ class SVGElement {
10425
10511
  * Returns the SVGElement for chaining.
10426
10512
  */
10427
10513
  animate(params, options, complete) {
10428
- const animOptions = SVGElement_animObject(pick(options, this.renderer.globalAnimation, true)), deferTime = animOptions.defer;
10514
+ const animOptions = animObject((options ?? this.renderer.globalAnimation ?? true)), deferTime = animOptions.defer;
10429
10515
  // When the page is hidden save resources in the background by not
10430
10516
  // running animation at all (#9749).
10431
10517
  if (SVGElement_doc.hidden) {
@@ -10440,7 +10526,7 @@ class SVGElement {
10440
10526
  // If defer option is defined delay the animation #12901
10441
10527
  syncTimeout(() => {
10442
10528
  if (this.element) {
10443
- SVGElement_animate(this, params, animOptions);
10529
+ animate(this, params, animOptions);
10444
10530
  }
10445
10531
  }, deferTime);
10446
10532
  }
@@ -10614,7 +10700,7 @@ class SVGElement {
10614
10700
  // Unless .attr is from the animator update, stop current
10615
10701
  // running animation of this property
10616
10702
  if (!continueAnimation) {
10617
- SVGElement_stop(this, key);
10703
+ stop(this, key);
10618
10704
  }
10619
10705
  // Special handling of symbol attributes
10620
10706
  if (this.symbolName &&
@@ -10917,7 +11003,7 @@ class SVGElement {
10917
11003
  .split(','); // Ending comma
10918
11004
  i = v.length;
10919
11005
  while (i--) {
10920
- v[i] = '' + (pInt(v[i]) * pick(strokeWidth, NaN));
11006
+ v[i] = '' + (pInt(v[i]) * (strokeWidth ?? NaN));
10921
11007
  }
10922
11008
  value = v.join(',').replace(/NaN/g, 'none'); // #3226
10923
11009
  this.element.setAttribute('stroke-dasharray', value);
@@ -10934,7 +11020,7 @@ class SVGElement {
10934
11020
  // Remove events
10935
11021
  element.onclick = element.onmouseout = element.onmouseover =
10936
11022
  element.onmousemove = element.point = null;
10937
- SVGElement_stop(wrapper); // Stop running animations
11023
+ stop(wrapper); // Stop running animations
10938
11024
  if (wrapper.clipPath && ownerSVGElement) {
10939
11025
  const clipPath = wrapper.clipPath;
10940
11026
  // Look for existing references to this clipPath and remove them
@@ -11057,7 +11143,7 @@ class SVGElement {
11057
11143
  * The bounding box with `x`, `y`, `width` and `height` properties.
11058
11144
  */
11059
11145
  getBBox(reload, rot) {
11060
- 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 &&
11146
+ 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 &&
11061
11147
  SVGElement.prototype.getStyle.call(element, 'font-size')) : (styles.fontSize), cacheKey = this.getBBoxCacheKey([
11062
11148
  renderer.rootFontSize,
11063
11149
  this.textWidth, // #7874, also useHTML
@@ -11583,7 +11669,7 @@ class SVGElement {
11583
11669
  symbolAttr(hash) {
11584
11670
  const wrapper = this;
11585
11671
  SVGElement.symbolCustomAttribs.forEach(function (key) {
11586
- wrapper[key] = pick(hash[key], wrapper[key]);
11672
+ wrapper[key] = (hash[key] ?? wrapper[key]);
11587
11673
  });
11588
11674
  wrapper.attr({
11589
11675
  d: wrapper.renderer.symbols[wrapper.symbolName](wrapper.x, wrapper.y, wrapper.width, wrapper.height, wrapper)
@@ -11623,7 +11709,7 @@ class SVGElement {
11623
11709
  }
11624
11710
  // Replace text content and escape markup
11625
11711
  titleNode.textContent = replaceNested(// Scan #[73]
11626
- pick(value, ''), // #3276, #3895
11712
+ (value ?? ''), // #3276, #3895
11627
11713
  [/<[^>]*>/g, '']).replace(/&lt;/g, '<').replace(/&gt;/g, '>');
11628
11714
  }
11629
11715
  /**
@@ -12401,7 +12487,7 @@ class SVGLabel extends SVG_SVGElement {
12401
12487
  if ((this.textStr && this.bBox.width === 0 && this.bBox.height === 0) || this.rotation) {
12402
12488
  this.updateBoxSize();
12403
12489
  }
12404
- const { padding, height = 0, translateX = 0, translateY = 0, width = 0 } = this, paddingLeft = pick(this.paddingLeft, padding), rotation = rot ?? (this.rotation || 0);
12490
+ const { padding, height = 0, translateX = 0, translateY = 0, width = 0 } = this, paddingLeft = (this.paddingLeft ?? padding), rotation = rot ?? (this.rotation || 0);
12405
12491
  let bBox = {
12406
12492
  width,
12407
12493
  height,
@@ -12454,7 +12540,7 @@ class SVGLabel extends SVG_SVGElement {
12454
12540
  this.attr({
12455
12541
  // Alignment is available now (#3295, 0 not rendered if given
12456
12542
  // as a value)
12457
- text: pick(this.textStr, ''),
12543
+ text: (this.textStr ?? ''),
12458
12544
  x: this.x || 0,
12459
12545
  y: this.y || 0
12460
12546
  });
@@ -12610,8 +12696,8 @@ class SVGLabel extends SVG_SVGElement {
12610
12696
  /** @internal */
12611
12697
  getPaddedWidth() {
12612
12698
  const padding = this.padding;
12613
- const paddingLeft = pick(this.paddingLeft, padding);
12614
- const paddingRight = pick(this.paddingRight, padding);
12699
+ const paddingLeft = (this.paddingLeft ?? padding);
12700
+ const paddingRight = (this.paddingRight ?? padding);
12615
12701
  return ((this.widthSetting || this.bBox.width || 0) +
12616
12702
  paddingLeft +
12617
12703
  paddingRight);
@@ -12712,7 +12798,7 @@ function arc(cx, cy, w, h, options) {
12712
12798
  const arc = [];
12713
12799
  if (options) {
12714
12800
  let start = options.start || 0, end = options.end || 0;
12715
- const rx = pick(options.r, w), ry = pick(options.r, h || w),
12801
+ const rx = (options.r ?? w), ry = (options.r ?? (h || w)),
12716
12802
  // Subtract a small number to prevent cos and sin of start and end
12717
12803
  // from becoming equal on 360 arcs (#1561). See "Arc proximity"
12718
12804
  // tests at samples/unit-tests/svgrenderer/symbol/demo.js
@@ -12722,16 +12808,17 @@ function arc(cx, cy, w, h, options) {
12722
12808
  start = Math.PI / 2;
12723
12809
  end = Math.PI * 2.5 - proximity;
12724
12810
  }
12725
- 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),
12811
+ 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),
12726
12812
  // Proximity takes care of rounding errors around PI (#6971)
12727
- longArc = pick(options.longArc, end - start - Math.PI < proximity ? 0 : 1);
12813
+ longArc = options.longArc ??
12814
+ (end - start - Math.PI < proximity ? 0 : 1);
12728
12815
  let arcSegment = [
12729
12816
  'A', // ArcTo
12730
12817
  rx, // X radius
12731
12818
  ry, // Y radius
12732
12819
  0, // Slanting
12733
12820
  longArc, // Long or short arc
12734
- pick(options.clockwise, 1), // Clockwise
12821
+ (options.clockwise ?? 1), // Clockwise
12735
12822
  // Use a static pixel offset for full circle (#21701)
12736
12823
  cx + (fullCircle ? 0.001 : rx * cosEnd),
12737
12824
  cy + ry * sinEnd
@@ -13262,7 +13349,7 @@ class TextBuilder {
13262
13349
  * @internal
13263
13350
  */
13264
13351
  buildSVG() {
13265
- 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,
13352
+ 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,
13266
13353
  // The buildText code is quite heavy, so if we're not changing
13267
13354
  // something that affects the text, skip it (#6113).
13268
13355
  textCache = [
@@ -13846,7 +13933,7 @@ class SVGRenderer {
13846
13933
  this.url = this.getReferenceURL();
13847
13934
  // Add description
13848
13935
  const desc = this.createElement('desc').add();
13849
- desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.0'));
13936
+ desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.2'));
13850
13937
  this.defs = this.createElement('defs').add();
13851
13938
  this.allowHTML = allowHTML;
13852
13939
  this.forExport = forExport;
@@ -14632,7 +14719,7 @@ class SVGRenderer {
14632
14719
  this.attr('height')
14633
14720
  });
14634
14721
  },
14635
- duration: pick(animate, true) ? void 0 : 0
14722
+ duration: (animate ?? true) ? void 0 : 0
14636
14723
  });
14637
14724
  renderer.alignElements();
14638
14725
  }
@@ -14790,8 +14877,8 @@ class SVGRenderer {
14790
14877
  // The image width is not always the same as the symbol width. The
14791
14878
  // image may be centered within the symbol, as is the case when
14792
14879
  // image shapes are used as label backgrounds, for example in flags.
14793
- img.imgwidth = pick(options?.width, symbolSizes[imageSrc]?.width);
14794
- img.imgheight = pick(options?.height, symbolSizes[imageSrc]?.height);
14880
+ img.imgwidth = (options?.width ?? symbolSizes[imageSrc]?.width);
14881
+ img.imgheight = (options?.height ?? symbolSizes[imageSrc]?.height);
14795
14882
  /**
14796
14883
  * Set the size and position
14797
14884
  */
@@ -15637,7 +15724,11 @@ class HTMLElement extends SVG_SVGElement {
15637
15724
  .attr({
15638
15725
  text: str,
15639
15726
  x: Math.round(x),
15640
- y: Math.round(y)
15727
+ y: Math.round(y),
15728
+ // The namespace attribute is required for serialization
15729
+ // (export and side-by-side comparison), otherwise it
15730
+ // inherits the SVG namespace from foreignObject.
15731
+ xmlns: 'http://www.w3.org/1999/xhtml'
15641
15732
  });
15642
15733
  };
15643
15734
  }
@@ -15817,8 +15908,10 @@ class HTMLElement extends SVG_SVGElement {
15817
15908
  foreignObject.attr({
15818
15909
  x: x + (this.xCorr || 0),
15819
15910
  y: y + (this.yCorr || 0),
15820
- // Add 4px to avoid ellipsis, since the body adds 3 px right
15821
- // margin. We need one more because of rounding.
15911
+ // Add 4px to avoid ellipsis. In v13.0.0 we had a body inside
15912
+ // the foreignObject with a 3px right margin. This was later
15913
+ // removed, but we still need to add a few pixels to avoid
15914
+ // ellipsis.
15822
15915
  width: element.offsetWidth + 4,
15823
15916
  // Add 1px to account for subpixel bounding boxes
15824
15917
  height: element.offsetHeight + 1,
@@ -15838,25 +15931,16 @@ class HTMLElement extends SVG_SVGElement {
15838
15931
  this.cTT = currentTextTransform;
15839
15932
  }
15840
15933
  /**
15841
- * Add the element to a group wrapper. For HTML elements, a parallel div
15842
- * will be created for each ancestor SVG `g` element.
15934
+ * Add the element to the foreign object
15843
15935
  *
15844
15936
  * @internal
15845
15937
  */
15846
15938
  add(parentGroup) {
15847
- const { foreignObject, renderer } = this;
15939
+ const { foreignObject } = this;
15848
15940
  // Foreign object
15849
15941
  foreignObject.add(parentGroup);
15850
- super.add(
15851
- // Create a body inside the foreignObject
15852
- renderer.createElement('body')
15853
- .attr({ xmlns: 'http://www.w3.org/1999/xhtml' })
15854
- .css({
15855
- background: 'transparent',
15856
- // 3px is to avoid clipping on the right
15857
- margin: '0 3px 0 0'
15858
- })
15859
- .add(foreignObject));
15942
+ // Add this.element to the foreign objct
15943
+ super.add(foreignObject);
15860
15944
  if (this.alignOnAdd) {
15861
15945
  this.updateTransform();
15862
15946
  }
@@ -15891,10 +15975,20 @@ class HTMLElement extends SVG_SVGElement {
15891
15975
  this[key] = value;
15892
15976
  this.doTransform = true;
15893
15977
  }
15978
+ /**
15979
+ * Apply visibility/opacity to the foreignObject; the HTML element
15980
+ * ignores them.
15981
+ * @internal
15982
+ */
15983
+ visibilitySetter(value, key) {
15984
+ this.foreignObject.attr({ [key]: value });
15985
+ this[key] = value;
15986
+ }
15894
15987
  }
15895
15988
  // Some shared setters
15896
15989
  const proto = HTMLElement.prototype;
15897
15990
  proto.ySetter = proto.xSetter;
15991
+ proto.opacitySetter = proto.visibilitySetter;
15898
15992
  /* *
15899
15993
  *
15900
15994
  * Default Export
@@ -16435,6 +16529,7 @@ var AxisDefaults;
16435
16529
  */
16436
16530
  dateTimeLabelFormats: {
16437
16531
  /**
16532
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16438
16533
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16439
16534
  */
16440
16535
  millisecond: {
@@ -16460,6 +16555,7 @@ var AxisDefaults;
16460
16555
  range: false
16461
16556
  },
16462
16557
  /**
16558
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16463
16559
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16464
16560
  */
16465
16561
  second: {
@@ -16485,6 +16581,7 @@ var AxisDefaults;
16485
16581
  range: false
16486
16582
  },
16487
16583
  /**
16584
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16488
16585
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16489
16586
  */
16490
16587
  minute: {
@@ -16510,6 +16607,7 @@ var AxisDefaults;
16510
16607
  range: false
16511
16608
  },
16512
16609
  /**
16610
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16513
16611
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16514
16612
  */
16515
16613
  hour: {
@@ -16542,6 +16640,7 @@ var AxisDefaults;
16542
16640
  range: false
16543
16641
  },
16544
16642
  /**
16643
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16545
16644
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16546
16645
  */
16547
16646
  day: {
@@ -16564,6 +16663,7 @@ var AxisDefaults;
16564
16663
  boundary: '%[eb]'
16565
16664
  },
16566
16665
  /**
16666
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16567
16667
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16568
16668
  */
16569
16669
  week: {
@@ -16579,6 +16679,7 @@ var AxisDefaults;
16579
16679
  main: '%[eb]'
16580
16680
  },
16581
16681
  /**
16682
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16582
16683
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16583
16684
  */
16584
16685
  month: {
@@ -16601,6 +16702,7 @@ var AxisDefaults;
16601
16702
  boundary: void 0
16602
16703
  },
16603
16704
  /**
16705
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16604
16706
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16605
16707
  */
16606
16708
  year: {
@@ -17416,7 +17518,7 @@ var AxisDefaults;
17416
17518
  * @sample {highstock} stock/xaxis/offset/
17417
17519
  * Y axis offset by 70 px
17418
17520
  *
17419
- * @type {number}
17521
+ * @type {number|string}
17420
17522
  */
17421
17523
  offset: void 0,
17422
17524
  /**
@@ -19066,7 +19168,9 @@ var AxisDefaults;
19066
19168
  * @product highcharts
19067
19169
  */
19068
19170
  style: {
19069
- /** @type {Highcharts.ColorType} */
19171
+ /**
19172
+ * @type {Highcharts.ColorType}
19173
+ */
19070
19174
  color: 'var(--highcharts-neutral-color-100)',
19071
19175
  /**
19072
19176
  * @type {number|string}
@@ -19253,11 +19357,11 @@ class Tick {
19253
19357
  * @function Highcharts.Tick#addLabel
19254
19358
  */
19255
19359
  addLabel() {
19256
- 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;
19360
+ 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;
19257
19361
  let label = tick.label, dateTimeLabelFormat, dateTimeLabelFormats, i;
19258
19362
  // The context value
19259
19363
  let value = this.parameters.category || (categories ?
19260
- pick(categories[pos], names[pos], pos) :
19364
+ (categories[pos] ?? names[pos] ?? pos) :
19261
19365
  pos);
19262
19366
  if (log && isNumber(value)) {
19263
19367
  value = correctFloat(log.lin2log(value));
@@ -19504,7 +19608,7 @@ class Tick {
19504
19608
  labelOptions.y;
19505
19609
  }
19506
19610
  x = x +
19507
- pick(labelOptions.x, [0, 1, 0, -1][axis.side] * distance) +
19611
+ (labelOptions.x ?? [0, 1, 0, -1][axis.side] * distance) +
19508
19612
  labelOffsetCorrection +
19509
19613
  rotCorr.x -
19510
19614
  (tickmarkOffset && horiz ?
@@ -19559,7 +19663,7 @@ class Tick {
19559
19663
  * @function Highcharts.Tick#handleOverflow
19560
19664
  */
19561
19665
  handleOverflow(xy) {
19562
- 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 = {};
19666
+ 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 = {};
19563
19667
  let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
19564
19668
  // Check if the label overshoots the chart spacing box. If it does, move
19565
19669
  // it. If it now overshoots the slotWidth, add ellipsis.
@@ -19626,9 +19730,8 @@ class Tick {
19626
19730
  * @param {number} [opacity]
19627
19731
  */
19628
19732
  render(index, old, opacity) {
19629
- 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;
19630
- const labelOpacity = pick(opacity, tick.label?.newOpacity, // #15528
19631
- 1);
19733
+ 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;
19734
+ const labelOpacity = (opacity ?? tick.label?.newOpacity ?? 1);
19632
19735
  // Anything that is not between `axis.pos` and `axis.pos + axis.length`
19633
19736
  // should not be visible (#20166). The `correctFloat` is for reversed
19634
19737
  // axes in Safari.
@@ -19656,7 +19759,7 @@ class Tick {
19656
19759
  * @param {number} opacity The opacity of the grid line
19657
19760
  */
19658
19761
  renderGridLine(old, opacity) {
19659
- 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;
19762
+ 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;
19660
19763
  let gridLine = tick.gridLine, gridLinePath, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19661
19764
  if (tick.type === 'minor') {
19662
19765
  gridLineWidth = options.minorGridLineWidth;
@@ -19712,7 +19815,7 @@ class Tick {
19712
19815
  * @param {number} opacity The opacity of the mark
19713
19816
  */
19714
19817
  renderMark(xy, opacity) {
19715
- 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
19818
+ 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
19716
19819
  tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
19717
19820
  let mark = tick.mark;
19718
19821
  const isNewMark = !mark;
@@ -19757,7 +19860,7 @@ class Tick {
19757
19860
  * @param {number} index The index of the tick
19758
19861
  */
19759
19862
  renderLabel(xy, old, opacity, index) {
19760
- 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;
19863
+ 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;
19761
19864
  let show = true;
19762
19865
  if (label && isNumber(x)) {
19763
19866
  label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step);
@@ -19849,7 +19952,6 @@ class Tick {
19849
19952
  * */
19850
19953
 
19851
19954
 
19852
- const { animObject: Axis_animObject } = AnimationUtilities;
19853
19955
 
19854
19956
  const { xAxis, yAxis } = Axis_AxisDefaults;
19855
19957
 
@@ -19863,12 +19965,7 @@ const { deg2rad: Axis_deg2rad } = Core_Globals;
19863
19965
 
19864
19966
 
19865
19967
 
19866
- const getNormalizedTickInterval = (axis, tickInterval) => normalizeTickInterval(tickInterval, void 0, void 0, pick(axis.options.allowDecimals,
19867
- // If the tick interval is greater than 0.5, avoid decimals, as
19868
- // linear axes are often used to render discrete values (#3363). If
19869
- // a tick amount is set, allow decimals by default, as it increases
19870
- // the chances for a good fit.
19871
- tickInterval < 0.5 || axis.tickAmount !== void 0), !!axis.tickAmount);
19968
+ const getNormalizedTickInterval = (axis, tickInterval) => normalizeTickInterval(tickInterval, void 0, void 0, (axis.options.allowDecimals ?? (tickInterval < 0.5 || axis.tickAmount !== void 0)), !!axis.tickAmount);
19872
19969
  extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
19873
19970
  /* *
19874
19971
  *
@@ -19976,7 +20073,7 @@ class Axis {
19976
20073
  axis.coll = coll;
19977
20074
  fireEvent(this, 'init', { userOptions: userOptions });
19978
20075
  // Needed in setOptions
19979
- axis.opposite = pick(userOptions.opposite, axis.opposite);
20076
+ axis.opposite = (userOptions.opposite ?? axis.opposite);
19980
20077
  /**
19981
20078
  * The side on which the axis is rendered. 0 is top, 1 is right, 2
19982
20079
  * is bottom and 3 is left.
@@ -19984,10 +20081,9 @@ class Axis {
19984
20081
  * @name Highcharts.Axis#side
19985
20082
  * @type {number}
19986
20083
  */
19987
- axis.side = pick(userOptions.side, axis.side, (horiz ?
20084
+ axis.side = (userOptions.side ?? axis.side ?? (horiz ?
19988
20085
  (axis.opposite ? 0 : 2) : // Top : bottom
19989
- (axis.opposite ? 1 : 3)) // Right : left
19990
- );
20086
+ (axis.opposite ? 1 : 3)));
19991
20087
  /**
19992
20088
  * Current options for the axis after merge of defaults and user's
19993
20089
  * options.
@@ -20016,7 +20112,7 @@ class Axis {
20016
20112
  * @name Highcharts.Axis#reversed
20017
20113
  * @type {boolean}
20018
20114
  */
20019
- axis.reversed = pick(options.reversed, axis.reversed);
20115
+ axis.reversed = (options.reversed ?? axis.reversed);
20020
20116
  axis.visible = options.visible;
20021
20117
  axis.zoomEnabled = options.zoomEnabled;
20022
20118
  // Initial categories
@@ -20104,7 +20200,7 @@ class Axis {
20104
20200
  * @name Highcharts.Axis#crosshair
20105
20201
  * @type {boolean|Highcharts.AxisCrosshairOptions}
20106
20202
  */
20107
- const crosshair = pick(options.crosshair, splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1]);
20203
+ const crosshair = options.crosshair ?? splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1];
20108
20204
  axis.crosshair = crosshair === true ? {} : crosshair;
20109
20205
  // Register. Don't add it again on Axis.update().
20110
20206
  if (chart.axes.indexOf(axis) === -1) { //
@@ -20288,8 +20384,8 @@ class Axis {
20288
20384
  seriesDataMax = xExtremes.max;
20289
20385
  }
20290
20386
  if (xData.length) {
20291
- axis.dataMin = Math.min(pick(axis.dataMin, seriesDataMin), seriesDataMin);
20292
- axis.dataMax = Math.max(pick(axis.dataMax, seriesDataMax), seriesDataMax);
20387
+ axis.dataMin = Math.min((axis.dataMin ?? seriesDataMin), seriesDataMin);
20388
+ axis.dataMax = Math.max((axis.dataMax ?? seriesDataMax), seriesDataMax);
20293
20389
  }
20294
20390
  }
20295
20391
  // Get dataMin and dataMax for Y axes, as well as handle
@@ -20304,11 +20400,11 @@ class Axis {
20304
20400
  // doesn't have active y data, we continue with nulls
20305
20401
  if (isNumber(dataExtremes.dataMin)) {
20306
20402
  seriesDataMin = dataExtremes.dataMin;
20307
- axis.dataMin = Math.min(pick(axis.dataMin, seriesDataMin), seriesDataMin);
20403
+ axis.dataMin = Math.min((axis.dataMin ?? seriesDataMin), seriesDataMin);
20308
20404
  }
20309
20405
  if (isNumber(dataExtremes.dataMax)) {
20310
20406
  seriesDataMax = dataExtremes.dataMax;
20311
- axis.dataMax = Math.max(pick(axis.dataMax, seriesDataMax), seriesDataMax);
20407
+ axis.dataMax = Math.max((axis.dataMax ?? seriesDataMax), seriesDataMax);
20312
20408
  }
20313
20409
  // Adjust to threshold
20314
20410
  if (defined(threshold)) {
@@ -20463,7 +20559,7 @@ class Axis {
20463
20559
  translatedValue
20464
20560
  };
20465
20561
  fireEvent(this, 'getPlotLinePath', evt, function (e) {
20466
- translatedValue = pick(translatedValue, axis.translate(value, void 0, void 0, old));
20562
+ translatedValue = translatedValue ?? axis.translate(value, void 0, void 0, old);
20467
20563
  // Keep the translated value within sane bounds, and avoid Infinity
20468
20564
  // to fail the isNumber test (#7709).
20469
20565
  translatedValue = clamp(translatedValue, -1e9, 1e9);
@@ -20552,7 +20648,7 @@ class Axis {
20552
20648
  getMinorTickInterval() {
20553
20649
  const { minorTicks, minorTickInterval } = this.options;
20554
20650
  if (minorTicks === true) {
20555
- return pick(minorTickInterval, 'auto');
20651
+ return (minorTickInterval ?? 'auto');
20556
20652
  }
20557
20653
  if (minorTicks === false) {
20558
20654
  return;
@@ -20835,7 +20931,9 @@ class Axis {
20835
20931
  const seriesPointRange = hasCategories ?
20836
20932
  1 :
20837
20933
  (isXAxis ?
20838
- pick(series.options.pointRange, closestPointRange, 0) :
20934
+ (series.options.pointRange ??
20935
+ closestPointRange ??
20936
+ 0) :
20839
20937
  (axis.axisPointRange || 0)), // #2806
20840
20938
  pointPlacement = series.options.pointPlacement;
20841
20939
  pointRange = Math.max(pointRange, seriesPointRange);
@@ -20919,14 +21017,16 @@ class Axis {
20919
21017
  this.getTickAmount();
20920
21018
  }
20921
21019
  // Min or max set either by zooming/setExtremes or initial options
20922
- hardMin = pick(axis.userMin, time.parse(options.min));
20923
- hardMax = pick(axis.userMax, time.parse(options.max));
21020
+ hardMin = (axis.userMin ?? time.parse(options.min));
21021
+ hardMax = (axis.userMax ?? time.parse(options.max));
20924
21022
  // Linked axis gets the extremes from the parent axis
20925
21023
  if (linkedParent) {
20926
21024
  axis.linkedParent = linkedParent;
20927
21025
  linkedParentExtremes = linkedParent.getExtremes();
20928
- axis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);
20929
- axis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);
21026
+ axis.min =
21027
+ linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
21028
+ axis.max =
21029
+ linkedParentExtremes.max ?? linkedParentExtremes.dataMax;
20930
21030
  if (this.type !== linkedParent.type) {
20931
21031
  // Can't link axes of different type
20932
21032
  error(11, true, chart);
@@ -20948,14 +21048,14 @@ class Axis {
20948
21048
  maxPadding = 0;
20949
21049
  }
20950
21050
  }
20951
- axis.min = pick(hardMin, thresholdMin, dataMin);
20952
- axis.max = pick(hardMax, thresholdMax, dataMax);
21051
+ axis.min = (hardMin ?? thresholdMin ?? dataMin);
21052
+ axis.max = (hardMax ?? thresholdMax ?? dataMax);
20953
21053
  }
20954
21054
  if (isNumber(axis.max) && isNumber(axis.min)) {
20955
21055
  if (logarithmic) {
20956
21056
  if (axis.positiveValuesOnly &&
20957
21057
  !secondPass &&
20958
- Math.min(axis.min, pick(dataMin, axis.min)) <= 0) { // #978
21058
+ Math.min(axis.min, (dataMin ?? axis.min)) <= 0) { // #978
20959
21059
  // Can't plot negative values on log axis
20960
21060
  error(10, true, chart);
20961
21061
  }
@@ -21061,16 +21161,13 @@ class Axis {
21061
21161
  axis.tickInterval = tickIntervalOption = linkedParent.tickInterval;
21062
21162
  }
21063
21163
  else {
21064
- axis.tickInterval = pick(tickIntervalOption, this.tickAmount ?
21164
+ axis.tickInterval = tickIntervalOption ?? (this.tickAmount ?
21065
21165
  range / Math.max(this.tickAmount - 1, 1) :
21066
- void 0,
21067
- // For categorized axis, 1 is default, for linear axis use
21068
- // tickPix
21069
- categories ?
21070
- 1 :
21071
- // Don't let it be more than the data range
21072
- range * tickPixelIntervalOption /
21073
- Math.max(axis.len, tickPixelIntervalOption));
21166
+ categories ?
21167
+ 1 :
21168
+ // Don't let it be more than the data range
21169
+ range * tickPixelIntervalOption /
21170
+ Math.max(axis.len, tickPixelIntervalOption));
21074
21171
  }
21075
21172
  // Now we're finished detecting min and max, crop and group series data.
21076
21173
  // This is in turn needed in order to find tick positions in ordinal
@@ -21100,12 +21197,9 @@ class Axis {
21100
21197
  }
21101
21198
  // Before normalizing the tick interval, handle minimum tick interval.
21102
21199
  // This applies only if tickInterval is not defined.
21103
- const minTickInterval = pick(options.minTickInterval,
21104
- // In datetime axes, don't go below the data interval, except when
21105
- // there are scatter-like series involved (#13369).
21106
- dateTime &&
21107
- !axis.series.some((s) => !s.sorted) ?
21108
- axis.closestPointRange : 0);
21200
+ const minTickInterval = options.minTickInterval ?? (dateTime && !axis.series.some((s) => !s.sorted) ?
21201
+ axis.closestPointRange :
21202
+ 0);
21109
21203
  if (!tickIntervalOption &&
21110
21204
  minTickInterval &&
21111
21205
  axis.tickInterval < minTickInterval) {
@@ -21435,7 +21529,7 @@ class Axis {
21435
21529
  * @function Highcharts.Axis#adjustTickAmount
21436
21530
  */
21437
21531
  adjustTickAmount() {
21438
- const axis = this, { finalTickAmt, max, min, options, tickPositions, tickAmount, thresholdAlignment } = axis, currentTickAmount = tickPositions?.length, threshold = pick(axis.threshold, axis.softThreshold ? 0 : null);
21532
+ const axis = this, { finalTickAmt, max, min, options, tickPositions, tickAmount, thresholdAlignment } = axis, currentTickAmount = tickPositions?.length, threshold = axis.threshold ?? (axis.softThreshold ? 0 : null);
21439
21533
  let len, i, tickInterval = axis.tickInterval, thresholdTickIndex;
21440
21534
  const
21441
21535
  // Extend the tickPositions by appending a position
@@ -21671,7 +21765,8 @@ class Axis {
21671
21765
  offsets = options.offsets || [0, 0, 0, 0], horiz = this.horiz,
21672
21766
  // Check for percentage based input values. Rounding fixes problems
21673
21767
  // with column overflow and plot line filtering (#4898, #4899)
21674
- 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));
21768
+ width = this.width = Math.round(relativeLength((options.width ?? chart.plotWidth - offsets[3] + offsets[1]), chart.plotWidth)), height = this.height = Math.round(relativeLength((options.height ??
21769
+ 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));
21675
21770
  // Expose basic values to use in Series object and navigator
21676
21771
  this.bottom = chart.chartHeight - height - top;
21677
21772
  this.right = chart.chartWidth - width - left;
@@ -21782,9 +21877,7 @@ class Axis {
21782
21877
  * An array of tickLength and tickWidth
21783
21878
  */
21784
21879
  tickSize(prefix) {
21785
- const options = this.options, tickWidth = pick(options[prefix === 'tick' ? 'tickWidth' : 'minorTickWidth'],
21786
- // Default to 1 on linear and datetime X axes
21787
- prefix === 'tick' && this.isXAxis && !this.categories ? 1 : 0);
21880
+ const options = this.options, tickWidth = options[prefix === 'tick' ? 'tickWidth' : 'minorTickWidth'] ?? (prefix === 'tick' && this.isXAxis && !this.categories ? 1 : 0);
21788
21881
  let tickLength = options[prefix === 'tick' ? 'tickLength' : 'minorTickLength'], tickSize;
21789
21882
  if (tickWidth && tickLength) {
21790
21883
  // Negate the length
@@ -21871,7 +21964,7 @@ class Axis {
21871
21964
  newTickInterval = getStep(lineHeight * 0.75);
21872
21965
  }
21873
21966
  this.autoRotation = autoRotation;
21874
- this.labelRotation = pick(rotation, isNumber(rotationOption) ? rotationOption : 0);
21967
+ this.labelRotation = rotation ?? (isNumber(rotationOption) ? rotationOption : 0);
21875
21968
  return labelOptions.step ? tickInterval : newTickInterval;
21876
21969
  }
21877
21970
  /**
@@ -22223,7 +22316,7 @@ class Axis {
22223
22316
  titleOffsetOption = axisTitleOptions.offset;
22224
22317
  titleMargin = defined(titleOffsetOption) ?
22225
22318
  0 :
22226
- pick(axisTitleOptions.margin, horiz ? 5 : 10);
22319
+ axisTitleOptions.margin ?? (horiz ? 5 : 10);
22227
22320
  }
22228
22321
  }
22229
22322
  // Render the axis line
@@ -22455,7 +22548,7 @@ class Axis {
22455
22548
  * @emits Highcharts.Axis#event:afterRender
22456
22549
  */
22457
22550
  render() {
22458
- 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);
22551
+ 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);
22459
22552
  let from, to;
22460
22553
  // Reset
22461
22554
  axis.labelEdge.length = 0;
@@ -22734,9 +22827,9 @@ class Axis {
22734
22827
  }
22735
22828
  else if (defined(point)) {
22736
22829
  // #3834
22737
- pos = pick(this.coll !== 'colorAxis' ?
22738
- point.crosshairPos : // 3D axis extension
22739
- null, this.isXAxis ?
22830
+ pos = (this.coll !== 'colorAxis' ?
22831
+ point.crosshairPos :
22832
+ null) ?? (this.isXAxis ?
22740
22833
  point.plotX :
22741
22834
  this.len - point.plotY);
22742
22835
  }
@@ -22745,7 +22838,7 @@ class Axis {
22745
22838
  // Value, only used on radial
22746
22839
  value: point && (this.isXAxis ?
22747
22840
  point.x :
22748
- pick(point.stackY, point.y)),
22841
+ (point.stackY ?? point.y ?? void 0)),
22749
22842
  translatedValue: pos
22750
22843
  };
22751
22844
  if (chart.polar) {
@@ -22778,7 +22871,7 @@ class Axis {
22778
22871
  (categorized ? 'category ' : 'thin ') +
22779
22872
  (options.className || ''))
22780
22873
  .attr({
22781
- zIndex: pick(options.zIndex, 2)
22874
+ zIndex: (options.zIndex ?? 2)
22782
22875
  })
22783
22876
  .clip(options.clip === false ?
22784
22877
  void 0 :
@@ -22793,7 +22886,7 @@ class Axis {
22793
22886
  // eslint-disable-next-line max-len
22794
22887
  'var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22795
22888
  'var(--highcharts-neutral-color-20)'),
22796
- 'stroke-width': pick(options.width, 1)
22889
+ 'stroke-width': (options.width ?? 1)
22797
22890
  }).css({
22798
22891
  'pointer-events': 'none'
22799
22892
  });
@@ -22806,7 +22899,7 @@ class Axis {
22806
22899
  }
22807
22900
  cross
22808
22901
  .show()
22809
- .animate({ d: path }, Axis_animObject(options?.animation));
22902
+ .animate({ d: path }, animObject(options?.animation));
22810
22903
  if (categorized && !options.width) {
22811
22904
  cross.attr({
22812
22905
  'stroke-width': this.transA
@@ -22859,7 +22952,7 @@ class Axis {
22859
22952
  this.destroy(true);
22860
22953
  this.init(chart, options);
22861
22954
  chart.isDirtyBox = true;
22862
- if (pick(redraw, true)) {
22955
+ if (redraw ?? true) {
22863
22956
  chart.redraw();
22864
22957
  }
22865
22958
  }
@@ -22889,7 +22982,7 @@ class Axis {
22889
22982
  chart.orderItems(coll);
22890
22983
  this.destroy();
22891
22984
  chart.isDirtyBox = true;
22892
- if (pick(redraw, true)) {
22985
+ if (redraw ?? true) {
22893
22986
  chart.redraw();
22894
22987
  }
22895
22988
  }
@@ -23545,8 +23638,10 @@ var LogarithmicAxis;
23545
23638
  tickIntervalOption, tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), totalPixelLength = minor ?
23546
23639
  axisLength / axis.tickPositions.length :
23547
23640
  axisLength;
23548
- interval = pick(filteredTickIntervalOption, log.minorAutoInterval, (realMax - realMin) *
23549
- tickPixelIntervalOption / (totalPixelLength || 1));
23641
+ interval = filteredTickIntervalOption ??
23642
+ log.minorAutoInterval ??
23643
+ (realMax - realMin) * tickPixelIntervalOption /
23644
+ (totalPixelLength || 1);
23550
23645
  interval = normalizeTickInterval(interval);
23551
23646
  positions = axis.getLinearTickPositions(interval, realMin, realMax).map(log.log2lin);
23552
23647
  if (!minor) {
@@ -23975,7 +24070,8 @@ class PlotLineOrBand {
23975
24070
  if (!chart.styledMode) {
23976
24071
  if (isLine) {
23977
24072
  attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
23978
- attribs['stroke-width'] = pick(options.width, 1);
24073
+ attribs['stroke-width'] =
24074
+ options.width ?? 1;
23979
24075
  if (options.dashStyle) {
23980
24076
  attribs.dashstyle = options.dashStyle;
23981
24077
  }
@@ -24844,7 +24940,6 @@ class PlotLineOrBand {
24844
24940
  * */
24845
24941
 
24846
24942
 
24847
- const { animObject: Tooltip_animObject } = AnimationUtilities;
24848
24943
 
24849
24944
  const { format: Tooltip_format } = Core_Templating;
24850
24945
 
@@ -25108,7 +25203,8 @@ class Tooltip {
25108
25203
  'highcharts-label',
25109
25204
  isHeader && 'highcharts-tooltip-header',
25110
25205
  isSplit ? 'highcharts-tooltip-box' : 'highcharts-tooltip',
25111
- !isHeader && 'highcharts-color-' + pick(point.colorIndex, series.colorIndex),
25206
+ !isHeader &&
25207
+ 'highcharts-color-' + (point.colorIndex ?? series.colorIndex),
25112
25208
  seriesOptions?.className
25113
25209
  ].filter(isString).join(' ');
25114
25210
  }
@@ -25293,7 +25389,8 @@ class Tooltip {
25293
25389
  }
25294
25390
  // The far side is right or bottom
25295
25391
  const preferFarSide = !this.followPointer &&
25296
- pick(point.ttBelow, polar ? false : !inverted === flipped), // #4984
25392
+ (point.ttBelow ??
25393
+ (polar ? false : !inverted === flipped)), // #4984
25297
25394
  /*
25298
25395
  * Handle the preferred dimension. When the preferred dimension is
25299
25396
  * tooltip on top or bottom of the point, it will look for space
@@ -25420,7 +25517,7 @@ class Tooltip {
25420
25517
  const tooltip = this;
25421
25518
  // Disallow duplicate timers (#1728, #1766)
25422
25519
  clearTimeouts(this);
25423
- delay = pick(delay, this.options.hideDelay);
25520
+ delay = (delay ?? this.options.hideDelay);
25424
25521
  if (!this.isHidden) {
25425
25522
  this.hideTimer = syncTimeout(function () {
25426
25523
  const label = tooltip.getLabel();
@@ -25523,7 +25620,9 @@ class Tooltip {
25523
25620
  * Split tooltip does not support outside in the first iteration. Should
25524
25621
  * not be too complicated to implement.
25525
25622
  */
25526
- this.outside = pick(options.outside, Boolean(chart.scrollablePixelsX || chart.scrollablePixelsY));
25623
+ this.outside =
25624
+ options.outside ??
25625
+ Boolean(chart.scrollablePixelsX || chart.scrollablePixelsY);
25527
25626
  }
25528
25627
  shouldStickOnContact(pointerEvent) {
25529
25628
  return !!(!this.followPointer &&
@@ -25545,7 +25644,7 @@ class Tooltip {
25545
25644
  * @param {number} anchorY
25546
25645
  */
25547
25646
  move(x, y, anchorX, anchorY) {
25548
- const { followPointer, options } = this, animation = Tooltip_animObject(!followPointer &&
25647
+ const { followPointer, options } = this, animation = animObject(!followPointer &&
25549
25648
  !this.isHidden &&
25550
25649
  !options.fixed &&
25551
25650
  options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
@@ -25603,7 +25702,7 @@ class Tooltip {
25603
25702
  point.points = void 0;
25604
25703
  // Register the current series
25605
25704
  const currentSeries = point.series;
25606
- this.distance = pick(currentSeries.tooltipOptions.distance, 16);
25705
+ this.distance = (currentSeries.tooltipOptions.distance ?? 16);
25607
25706
  // Update the inner HTML
25608
25707
  if (text === false) {
25609
25708
  this.hide();
@@ -25876,7 +25975,7 @@ class Tooltip {
25876
25975
  anchorY,
25877
25976
  boxWidth,
25878
25977
  point,
25879
- rank: pick(boxPosition.rank, isHeader ? 1 : 0),
25978
+ rank: boxPosition.rank ?? (isHeader ? 1 : 0),
25880
25979
  size,
25881
25980
  target: boxPosition.y,
25882
25981
  tt,
@@ -26293,7 +26392,6 @@ class Tooltip {
26293
26392
 
26294
26393
 
26295
26394
 
26296
- const { animObject: Point_animObject } = AnimationUtilities;
26297
26395
 
26298
26396
  const { defaultOptions: Point_defaultOptions } = Defaults;
26299
26397
 
@@ -26633,10 +26731,15 @@ class Point {
26633
26731
  *
26634
26732
  * @internal
26635
26733
  * @function Highcharts.Point#destroy
26734
+ *
26735
+ * @param {boolean} [sync]
26736
+ * Whether to destroy the point synchronously. Used internally from
26737
+ * series.destroy, where condemned points may cause animation errors
26738
+ * (#24976).
26636
26739
  */
26637
- destroy() {
26638
- if (!this.condemned) {
26639
- const point = this, series = point.series, chart = series.chart, hoverPoints = chart.hoverPoints, globalAnimation = point.series.chart.renderer.globalAnimation, { duration } = Point_animObject(globalAnimation);
26740
+ destroy(sync) {
26741
+ if (!this.destroyed && !this.condemned) {
26742
+ const point = this, series = point.series, chart = series.chart, hoverPoints = chart.hoverPoints, globalAnimation = point.series.chart.renderer.globalAnimation, { duration } = animObject(globalAnimation);
26640
26743
  /**
26641
26744
  * Allow to call after animation.
26642
26745
  * @internal
@@ -26653,6 +26756,7 @@ class Point {
26653
26756
  for (const prop in point) { // eslint-disable-line guard-for-in
26654
26757
  delete point[prop];
26655
26758
  }
26759
+ this.destroyed = true;
26656
26760
  };
26657
26761
  if (point.legendItem) {
26658
26762
  // Pies have legend items
@@ -26669,7 +26773,7 @@ class Point {
26669
26773
  point.onMouseOut();
26670
26774
  }
26671
26775
  // Remove properties after animation
26672
- if (duration && series.condemnedPoints) {
26776
+ if (duration && !sync && series.condemnedPoints) {
26673
26777
  series.condemnedPoints.push(this);
26674
26778
  this.graphic?.addClass('highcharts-point-condemned');
26675
26779
  setTimeout(destroyPoint, duration);
@@ -26792,14 +26896,15 @@ class Point {
26792
26896
  *
26793
26897
  * @function Highcharts.Point#getZone
26794
26898
  *
26795
- * @return {Highcharts.SeriesZonesOptionsObject}
26796
- * The zone item.
26899
+ * @return {Highcharts.SeriesZonesOptionsObject|undefined}
26900
+ * The zone item, or `undefined` if the series has no zones.
26797
26901
  */
26798
26902
  getZone() {
26799
26903
  const series = this.series, zones = series.zones, zoneAxis = series.zoneAxis || 'y';
26800
26904
  let zone, i = 0;
26801
26905
  zone = zones[i];
26802
- while (this[zoneAxis] >= zone.value) {
26906
+ while (i < zones.length &&
26907
+ this[zoneAxis] >= zone.value) {
26803
26908
  zone = zones[++i];
26804
26909
  }
26805
26910
  // For resetting or reusing the point (#8100)
@@ -27215,7 +27320,7 @@ class Point {
27215
27320
  */
27216
27321
  select(selected, accumulate) {
27217
27322
  const point = this, series = point.series, chart = series.chart;
27218
- selected = pick(selected, !point.selected);
27323
+ selected = (selected ?? !point.selected);
27219
27324
  this.selectedStaging = selected;
27220
27325
  // Fire the event with the default handler
27221
27326
  point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {
@@ -27339,9 +27444,8 @@ class Point {
27339
27444
  * @emits Highcharts.Point#event:afterSetState
27340
27445
  */
27341
27446
  setState(state, move) {
27342
- const point = this, series = point.series, previousState = point.state, stateOptions = (series.options.states[state || 'normal'] ||
27343
- {}), markerOptions = (Point_defaultOptions.plotOptions[series.type].marker &&
27344
- series.options.marker), normalDisabled = (markerOptions && markerOptions.enabled === false), markerStateOptions = markerOptions?.states?.[state || 'normal'] ||
27447
+ const point = this, series = point.series, previousState = point.state, stateOptions = series.options.states?.[state || 'normal'] || {}, markerOptions = (Point_defaultOptions.plotOptions?.[series.type]?.marker &&
27448
+ series.options.marker), normalDisabled = markerOptions?.enabled === false, markerStateOptions = markerOptions?.states?.[state || 'normal'] ||
27345
27449
  {}, stateDisabled = markerStateOptions.enabled === false, pointMarker = point.marker || {}, chart = series.chart, hasMarkers = (markerOptions && series.markerAttribs);
27346
27450
  let halo = series.halo, markerAttribs, pointAttribs, pointAttribsAnimation, stateMarkerGraphic = series.stateMarkerGraphic, newSymbol;
27347
27451
  state = state || ''; // Empty string
@@ -27354,13 +27458,10 @@ class Point {
27354
27458
  (stateOptions.enabled === false) ||
27355
27459
  // General point marker's state options is disabled
27356
27460
  (state && (stateDisabled ||
27357
- (normalDisabled &&
27358
- markerStateOptions.enabled === false))) ||
27461
+ (normalDisabled && markerStateOptions.enabled === false))) ||
27359
27462
  // Individual point marker's state options is disabled
27360
27463
  (state &&
27361
- pointMarker.states &&
27362
- pointMarker.states[state] &&
27363
- pointMarker.states[state].enabled === false) // #1610
27464
+ pointMarker.states?.[state]?.enabled === false) // #1610
27364
27465
  ) {
27365
27466
  return;
27366
27467
  }
@@ -27379,7 +27480,8 @@ class Point {
27379
27480
  }
27380
27481
  if (!chart.styledMode) {
27381
27482
  pointAttribs = series.pointAttribs(point, state);
27382
- pointAttribsAnimation = pick(chart.options.chart.animation, stateOptions.animation);
27483
+ pointAttribsAnimation = (chart.options.chart.animation ??
27484
+ stateOptions.animation);
27383
27485
  const opacity = pointAttribs.opacity;
27384
27486
  // Some inactive points (e.g. slices in pie) should apply
27385
27487
  // opacity also for their labels
@@ -27397,9 +27499,11 @@ class Point {
27397
27499
  point.graphic.animate(pointAttribs, pointAttribsAnimation);
27398
27500
  }
27399
27501
  if (markerAttribs) {
27400
- point.graphic.animate(markerAttribs, pick(
27502
+ point.graphic.animate(markerAttribs, (
27401
27503
  // Turn off globally:
27402
- chart.options.chart.animation, markerStateOptions.animation, markerOptions.animation));
27504
+ chart.options.chart.animation ??
27505
+ markerStateOptions.animation ??
27506
+ markerOptions.animation));
27403
27507
  }
27404
27508
  // Zooming in from a range with no markers to a range with markers
27405
27509
  if (stateMarkerGraphic) {
@@ -27448,10 +27552,12 @@ class Point {
27448
27552
  }
27449
27553
  }
27450
27554
  // Show me your halo
27451
- const haloOptions = stateOptions.halo;
27555
+ const haloOptions = isObject(stateOptions.halo) ?
27556
+ stateOptions.halo :
27557
+ {};
27452
27558
  const markerGraphic = (point.graphic || stateMarkerGraphic);
27453
27559
  const markerVisibility = markerGraphic?.visibility || 'inherit';
27454
- if (haloOptions?.size &&
27560
+ if (haloOptions.size &&
27455
27561
  markerGraphic &&
27456
27562
  markerVisibility !== 'hidden' &&
27457
27563
  !point.isCluster) {
@@ -27465,7 +27571,7 @@ class Point {
27465
27571
  });
27466
27572
  halo.attr({
27467
27573
  'class': 'highcharts-halo highcharts-color-' +
27468
- pick(point.colorIndex, series.colorIndex) +
27574
+ (point.colorIndex ?? series.colorIndex) +
27469
27575
  (point.className ? ' ' + point.className : ''),
27470
27576
  'visibility': markerVisibility,
27471
27577
  'zIndex': -1 // #4929, #8276
@@ -27981,6 +28087,11 @@ class Pointer {
27981
28087
  }
27982
28088
  }
27983
28089
  }
28090
+ // Run a final transform with a drop trigger to display the reset
28091
+ // zoom button after a pinch gesture (#22128)
28092
+ if (e?.type === 'touchend' && this.hasDragged) {
28093
+ chart.transform({ trigger: 'drop' });
28094
+ }
27984
28095
  if (redraw) {
27985
28096
  chart.redraw();
27986
28097
  }
@@ -28193,7 +28304,7 @@ class Pointer {
28193
28304
  const hoverPoints = [], useExisting = !!(isDirectTouch && existingHoverPoint), filter = function (s) {
28194
28305
  return (s.visible &&
28195
28306
  !(!shared && s.directTouch) && // #3821
28196
- pick(s.options.enableMouseTracking, true));
28307
+ (s.options.enableMouseTracking ?? true));
28197
28308
  };
28198
28309
  let hoverSeries = existingHoverSeries,
28199
28310
  // Which series to look in for the hover point
@@ -28379,8 +28490,8 @@ class Pointer {
28379
28490
  const ePos = (touches ?
28380
28491
  touches.length ?
28381
28492
  touches.item(0) :
28382
- (pick(// #13534
28383
- touches.changedTouches, e.changedTouches))[0] :
28493
+ (touches.changedTouches ??
28494
+ e.changedTouches)[0] :
28384
28495
  e);
28385
28496
  // Get mouse position
28386
28497
  if (!chartPosition) {
@@ -28454,7 +28565,7 @@ class Pointer {
28454
28565
  * @function Highcharts.Pointer#onContainerMouseLeave
28455
28566
  */
28456
28567
  onContainerMouseLeave(e) {
28457
- const { pointer } = Pointer_charts[pick(Pointer.hoverChartIndex, -1)] || {};
28568
+ const { pointer } = Pointer_charts[(Pointer.hoverChartIndex ?? -1)] || {};
28458
28569
  e = this.normalize(e);
28459
28570
  this.onContainerMouseMove(e);
28460
28571
  // #4886, MS Touch end fires mouseleave but with no related target
@@ -28554,7 +28665,7 @@ class Pointer {
28554
28665
  if (e?.touches && this.hasPinchMoved) {
28555
28666
  e?.preventDefault?.();
28556
28667
  }
28557
- Pointer_charts[pick(Pointer.hoverChartIndex, -1)]
28668
+ Pointer_charts[(Pointer.hoverChartIndex ?? -1)]
28558
28669
  ?.pointer
28559
28670
  ?.drop(e);
28560
28671
  }
@@ -28624,6 +28735,9 @@ class Pointer {
28624
28735
  from: boxFromTouches(lastTouches),
28625
28736
  trigger: e.type
28626
28737
  });
28738
+ // Record a truthy value in order to trigger the final transform
28739
+ // in the drop function
28740
+ pointer.hasDragged = 1;
28627
28741
  });
28628
28742
  if (pointer.res) {
28629
28743
  pointer.res = false;
@@ -29058,7 +29172,7 @@ class Pointer {
29058
29172
  */
29059
29173
  setHoverChartIndex(e) {
29060
29174
  const chart = this.chart;
29061
- const hoverChart = Core_Globals.charts[pick(Pointer.hoverChartIndex, -1)];
29175
+ const hoverChart = Core_Globals.charts[(Pointer.hoverChartIndex ?? -1)];
29062
29176
  if (hoverChart &&
29063
29177
  hoverChart !== chart) {
29064
29178
  const relatedTargetObj = { relatedTarget: chart.container };
@@ -29104,7 +29218,7 @@ class Pointer {
29104
29218
  Math.pow(pinchDown[0].chartY - e.chartY, 2)) >= 16 :
29105
29219
  false;
29106
29220
  }
29107
- if (pick(hasMoved, true)) {
29221
+ if (hasMoved ?? true) {
29108
29222
  this.pinch(e);
29109
29223
  }
29110
29224
  }
@@ -29115,7 +29229,9 @@ class Pointer {
29115
29229
  // If inside, capture touch-drag and display tooltip. If not inside,
29116
29230
  // allow dragging the finger to scroll the page
29117
29231
  if ((chart.tooltip?.options.followTouchMove ?? true) &&
29118
- isInside) {
29232
+ isInside &&
29233
+ e.type === 'touchmove' &&
29234
+ !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29119
29235
  e.preventDefault();
29120
29236
  }
29121
29237
  }
@@ -29145,7 +29261,7 @@ class Pointer {
29145
29261
  let zoomType = chart.zooming.type || '', zoomX, zoomY;
29146
29262
  // Look for the pinchType option
29147
29263
  if (/touch/.test(e.type)) {
29148
- zoomType = pick(chart.zooming.pinchType, zoomType);
29264
+ zoomType = (chart.zooming.pinchType ?? zoomType);
29149
29265
  }
29150
29266
  this.zoomX = zoomX = /x/.test(zoomType);
29151
29267
  this.zoomY = zoomY = /y/.test(zoomType);
@@ -29587,7 +29703,7 @@ class DataTableCore {
29587
29703
  * Fetches the given column by the canonical column ID. Simplified version
29588
29704
  * of the full `DataTable.getRow` method, always returning by reference.
29589
29705
  *
29590
- * @function Highcharts.DataTable#setColumn
29706
+ * @function Highcharts.DataTable#getColumn
29591
29707
  *
29592
29708
  * @param {string} columnId
29593
29709
  * ID of the column to get.
@@ -29919,7 +30035,7 @@ var LegendSymbol;
29919
30035
  // Draw the marker
29920
30036
  if (markerOptions && markerOptions.enabled !== false && symbolWidth) {
29921
30037
  // Do not allow the marker to be larger than the symbolHeight
29922
- let radius = Math.min(pick(markerOptions.radius, generalRadius), generalRadius);
30038
+ let radius = Math.min((markerOptions.radius ?? generalRadius), generalRadius);
29923
30039
  // Restrict symbol markers size
29924
30040
  if (symbol.indexOf('url') === 0) {
29925
30041
  markerOptions = merge(markerOptions, {
@@ -30323,6 +30439,10 @@ const seriesDefaults = {
30323
30439
  * ```
30324
30440
  *
30325
30441
  * @type {Highcharts.DataMappingOptionsObject}
30442
+ * @sample highcharts/datatable/datamapping
30443
+ * Basic data mapping
30444
+ * @sample highcharts/datatable/datamapping-dynamic
30445
+ * Data mapping with dynamic updates
30326
30446
  * @sample {highcharts} highcharts/datatable/series-datatable-multiple
30327
30447
  * Series with two data tables
30328
30448
  * @sample {highcharts} highcharts/datatable/nested-keys
@@ -30333,6 +30453,29 @@ const seriesDefaults = {
30333
30453
  * @since 13.0.0
30334
30454
  * @apioption plotOptions.series.dataMapping
30335
30455
  */
30456
+ /**
30457
+ * Options for a specific series-level data table or an array of data
30458
+ * tables. The `dataTable` option can be either a configuration object or an
30459
+ * instance of the `DataTable` class. If a `DataTable` instance is passed,
30460
+ * it will be used directly. If a configuration object or an array is
30461
+ * passed, a new `DataTable` instance will be created based on the provided
30462
+ * configuration.
30463
+ *
30464
+ * @type {Highcharts.DataTable|Highcharts.DataTableOptionsObject|Array<Highcharts.DataTable|Highcharts.DataTableOptionsObject>}
30465
+ * @sample {highcharts} highcharts/datatable/series-datatable/
30466
+ * Series with one data table each
30467
+ * @sample {highcharts} highcharts/datatable/series-datatable-multiple/
30468
+ * Series with two data tables
30469
+ * @sample {highstock} stock/datatable/series-datatable/
30470
+ * Series with one data table each
30471
+ * @sample {highstock} stock/datatable/series-datatable-multiple/
30472
+ * Series with two data tables
30473
+ * @sample {highmaps} maps/datatable/series-datatable
30474
+ * Series-level data table
30475
+ *
30476
+ * @since 13.0.0
30477
+ * @apioption plotOptions.series.dataTable
30478
+ */
30336
30479
  /**
30337
30480
  * Enable or disable the mouse tracking for a specific series. This
30338
30481
  * includes point tooltips and click events on graphs and points. For
@@ -31216,6 +31359,7 @@ const seriesDefaults = {
31216
31359
  * `series.allowPointSelect` option to true.
31217
31360
  *
31218
31361
  * @declare Highcharts.PointStatesSelectOptionsObject
31362
+ * @extends plotOptions.series.marker.states.hover
31219
31363
  */
31220
31364
  select: {
31221
31365
  /**
@@ -31792,6 +31936,7 @@ const seriesDefaults = {
31792
31936
  * @sample {highmaps} maps/plotoptions/series-datalabels-box/
31793
31937
  * Data labels box options
31794
31938
  *
31939
+ * @type {number|Array<number>}
31795
31940
  * @since 2.2.1
31796
31941
  */
31797
31942
  padding: [1, 3],
@@ -31993,6 +32138,9 @@ const seriesDefaults = {
31993
32138
  /**
31994
32139
  * A collection of options for different series states.
31995
32140
  *
32141
+ * In addition to the options documented under each state, any option from
32142
+ * the parent series type can be set, with exception of `data` and `states`.
32143
+ *
31996
32144
  * @declare Highcharts.SeriesStatesOptionsObject
31997
32145
  */
31998
32146
  states: {
@@ -32166,6 +32314,7 @@ const seriesDefaults = {
32166
32314
  * Disabled inactive state
32167
32315
  *
32168
32316
  * @declare Highcharts.SeriesStatesInactiveOptionsObject
32317
+ * @extends plotOptions.series.states.hover
32169
32318
  */
32170
32319
  inactive: {
32171
32320
  /**
@@ -32566,7 +32715,6 @@ var SeriesRegistry;
32566
32715
  * */
32567
32716
 
32568
32717
 
32569
- const { animObject: Series_animObject, setAnimation: Series_setAnimation } = AnimationUtilities;
32570
32718
 
32571
32719
 
32572
32720
  const { defaultOptions: Series_defaultOptions } = Defaults;
@@ -32704,6 +32852,13 @@ class Series {
32704
32852
  * @type {number|undefined}
32705
32853
  * @readonly
32706
32854
  */
32855
+ /**
32856
+ * The main group for the series' graphics.
32857
+ *
32858
+ * @name Highcharts.Series#group
32859
+ * @type {Highcharts.SVGElement}
32860
+ * @readonly
32861
+ */
32707
32862
  /**
32708
32863
  * Contains the series' index in the `Chart.series` array.
32709
32864
  *
@@ -32836,10 +32991,12 @@ class Series {
32836
32991
  */
32837
32992
  series.options = series.setOptions(userOptions);
32838
32993
  const options = series.options, visible = options.visible !== false;
32839
- // Create the data table
32840
- this.dataTable ?? (this.dataTable = options.dataTable?.isDataTable ?
32841
- options.dataTable :
32842
- new Data_DataTableCore(options.dataTable));
32994
+ // Create the data table or use the one passed as option
32995
+ this.dataTable ?? (this.dataTable = isArray(options.dataTable) ?
32996
+ new Data_DataTableCore() :
32997
+ options.dataTable?.isDataTable ?
32998
+ options.dataTable :
32999
+ new Data_DataTableCore(options.dataTable));
32843
33000
  /**
32844
33001
  * All child series that are linked to the current series through the
32845
33002
  * [linkedTo](https://api.highcharts.com/highcharts/series.line.linkedTo)
@@ -32899,7 +33056,7 @@ class Series {
32899
33056
  if (chartSeries.length) {
32900
33057
  lastSeries = chartSeries[chartSeries.length - 1];
32901
33058
  }
32902
- series._i = pick(lastSeries?._i, -1) + 1;
33059
+ series._i = (lastSeries?._i ?? -1) + 1;
32903
33060
  series.opacity = series.options.opacity;
32904
33061
  // Insert the series and re-order all series above the insertion
32905
33062
  // point.
@@ -32946,7 +33103,7 @@ class Series {
32946
33103
  // Apply if the series xAxis or yAxis option matches
32947
33104
  // the number of the axis, or if undefined, use the
32948
33105
  // first axis
32949
- if (pick(seriesOptions[coll], 0) === axis.index ||
33106
+ if ((seriesOptions[coll] ?? 0) === axis.index ||
32950
33107
  (typeof seriesOptions[coll] !==
32951
33108
  'undefined' &&
32952
33109
  seriesOptions[coll] === axisOptions.id)) {
@@ -32989,8 +33146,12 @@ class Series {
32989
33146
  * @function Highcharts.Series#hasMarkerChanged
32990
33147
  */
32991
33148
  hasMarkerChanged(options, oldOptions) {
32992
- const marker = options.marker, oldMarker = oldOptions.marker || {};
32993
- return marker && ((oldMarker.enabled && !marker.enabled) ||
33149
+ const marker = options.marker, oldMarker = oldOptions.marker;
33150
+ // Note that `marker` holds the full, merged object including
33151
+ // `plotOptions`, while `oldMarker` is the user-defined series-level
33152
+ // options only. We may need to refactor that in the future if more
33153
+ // issues like #24057 arise.
33154
+ return marker && oldMarker && ((oldMarker.enabled && !marker.enabled) ||
32994
33155
  oldMarker.symbol !== marker.symbol || // #10870, #15946
32995
33156
  oldMarker.height !== marker.height || // #16274
32996
33157
  oldMarker.width !== marker.width // #16274
@@ -33009,7 +33170,8 @@ class Series {
33009
33170
  time.parse(options.pointStart) ??
33010
33171
  0;
33011
33172
  let pointInterval;
33012
- this.pointInterval = pointInterval = pick(this.pointInterval, options.pointInterval, 1);
33173
+ this.pointInterval = pointInterval =
33174
+ this.pointInterval ?? options.pointInterval ?? 1;
33013
33175
  if (relativeXValue && isNumber(x)) {
33014
33176
  pointInterval *= x;
33015
33177
  }
@@ -33081,9 +33243,13 @@ class Series {
33081
33243
  );
33082
33244
  // When shared tooltip, stickyTracking is true by default,
33083
33245
  // unless user says otherwise.
33084
- this.stickyTracking = pick(seriesUserOptions.stickyTracking, userPlotOptionsType.stickyTracking, userPlotOptionsSeries.stickyTracking, (this.tooltipOptions.shared && !this.noSharedTooltip ?
33085
- true :
33086
- options.stickyTracking));
33246
+ this.stickyTracking =
33247
+ seriesUserOptions.stickyTracking ??
33248
+ userPlotOptionsType.stickyTracking ??
33249
+ userPlotOptionsSeries.stickyTracking ??
33250
+ (this.tooltipOptions.shared && !this.noSharedTooltip ?
33251
+ true :
33252
+ options.stickyTracking);
33087
33253
  // Delete marker object if not allowed (#1125)
33088
33254
  if (typeOptions.marker === null) {
33089
33255
  delete options.marker;
@@ -33161,7 +33327,9 @@ class Series {
33161
33327
  if (!value) {
33162
33328
  // Pick up either the colorIndex option, or the series.colorIndex
33163
33329
  // after Series.update()
33164
- setting = pick(prop === 'color' ? this.options.colorIndex : void 0, this[indexName]);
33330
+ setting = prop === 'color' ?
33331
+ (this.options.colorIndex ?? this[indexName]) :
33332
+ this[indexName];
33165
33333
  if (defined(setting)) { // After Series.update()
33166
33334
  i = setting;
33167
33335
  }
@@ -33221,7 +33389,7 @@ class Series {
33221
33389
  */
33222
33390
  getSymbol() {
33223
33391
  const seriesMarkerOption = this.options.marker;
33224
- this.getCyclic('symbol', seriesMarkerOption.symbol, this.chart.options.symbols);
33392
+ this.getCyclic('symbol', seriesMarkerOption?.symbol, this.chart.options.symbols);
33225
33393
  }
33226
33394
  /**
33227
33395
  * Shorthand to get one of the series' data columns from `Series.dataTable`.
@@ -33417,9 +33585,10 @@ class Series {
33417
33585
  if (!oldData[i].destroyed && !oldData[i].condemned) {
33418
33586
  const pOptions = dataTable.getRowObject(i);
33419
33587
  if (pOptions) {
33588
+ // Remove undefined properties, but preserve explicit
33589
+ // nulls (#24872)
33420
33590
  Object.keys(pOptions).forEach((key) => {
33421
- if (!defined(pOptions[key]) /* ||
33422
- pOptions[key] === oldData[i].options[key]*/) {
33591
+ if (pOptions[key] === void 0) {
33423
33592
  delete pOptions[key];
33424
33593
  }
33425
33594
  });
@@ -33824,8 +33993,12 @@ class Series {
33824
33993
  }
33825
33994
  }
33826
33995
  }
33827
- // Find the closest distance between processed points
33828
- xData = this.getColumn('x', true);
33996
+ // Find the closest distance between processed points. When the data was
33997
+ // cropped (or set out of range), read x from the freshly cropped local
33998
+ // `modified` table, #24858.
33999
+ if (modified !== table) {
34000
+ xData = modified.getColumn('x', true) || [];
34001
+ }
33829
34002
  const closestPointRange = getClosestDistance([
33830
34003
  logarithmic ?
33831
34004
  xData.map(logarithmic.log2lin) :
@@ -34030,9 +34203,9 @@ class Series {
34030
34203
  * Force getting extremes of a total series data range.
34031
34204
  */
34032
34205
  getExtremes(yData, forceExtremesFromAll) {
34033
- const { xAxis, yAxis } = this, getExtremesFromAll = forceExtremesFromAll ||
34206
+ const { options, xAxis, yAxis } = this, getExtremesFromAll = forceExtremesFromAll ||
34034
34207
  this.getExtremesFromAll ||
34035
- this.options.getExtremesFromAll, // #4599, #21003
34208
+ options.getExtremesFromAll, // #4599, #21003
34036
34209
  table = getExtremesFromAll && this.cropped ?
34037
34210
  this.dataTable :
34038
34211
  this.dataTable.getModified(), rowCount = table.rowCount, customData = yData || this.stackedYData, yAxisData = customData ?
@@ -34042,7 +34215,12 @@ class Series {
34042
34215
  // non-sorted data like scatter (#7639).
34043
34216
  shoulder = this.requireSorting && !this.is('column') ?
34044
34217
  1 : 0,
34045
- // #2117, need to compensate for log X axis
34218
+ // Used only for `cumulativeStart` (#24608)
34219
+ excludeShoulder = options.cumulative &&
34220
+ options.cumulativeStart &&
34221
+ shoulder &&
34222
+ !getExtremesFromAll,
34223
+ // Compensate for log X axis (#2117)
34046
34224
  positiveValuesOnly = yAxis ? yAxis.positiveValuesOnly : false, doAll = getExtremesFromAll ||
34047
34225
  this.cropped ||
34048
34226
  !xAxis; // For colorAxis support
@@ -34054,10 +34232,10 @@ class Series {
34054
34232
  }
34055
34233
  for (i = 0; i < rowCount; i++) {
34056
34234
  x = xData[i];
34057
- // Check if it is within the selected x axis range
34058
- if (doAll ||
34235
+ // Check if it is within the selected x-axis range
34236
+ if ((doAll ||
34059
34237
  ((xData[i + shoulder] || x) >= xMin &&
34060
- (xData[i - shoulder] || x) <= xMax)) {
34238
+ (xData[i - shoulder] || x) <= xMax)) && (!excludeShoulder || x >= xMin)) {
34061
34239
  for (const values of yAxisData) {
34062
34240
  const val = values[i];
34063
34241
  // For points within the visible range, including the
@@ -34126,7 +34304,7 @@ class Series {
34126
34304
  */
34127
34305
  translate() {
34128
34306
  this.generatePoints();
34129
- 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
34307
+ 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
34130
34308
  dynamicallyPlaced = Boolean(pointPlacement), stackThreshold = options.startFromThreshold ? threshold : 0, nullYSubstitute = (options?.nullInteraction &&
34131
34309
  yAxis.len);
34132
34310
  let i, plotX, lastPlotX, stackIndicator, closestPointRangePx = Number.MAX_VALUE;
@@ -34178,7 +34356,9 @@ class Series {
34178
34356
  yValue = stackValues[1];
34179
34357
  if (lowValue === stackThreshold &&
34180
34358
  stackIndicator.key === stacks[xValue].base) {
34181
- lowValue = pick(isNumber(threshold) ? threshold : yAxis.min);
34359
+ lowValue = isNumber(threshold) ?
34360
+ threshold :
34361
+ yAxis.min;
34182
34362
  }
34183
34363
  // #1200, #1232
34184
34364
  if (yAxis.positiveValuesOnly &&
@@ -34186,7 +34366,7 @@ class Series {
34186
34366
  lowValue <= 0) {
34187
34367
  lowValue = void 0;
34188
34368
  }
34189
- point.total = point.stackTotal = pick(stackItem.total);
34369
+ point.total = point.stackTotal = stackItem.total ?? void 0;
34190
34370
  point.percentage = defined(point.y) && stackItem.total ?
34191
34371
  (point.y / stackItem.total * 100) : void 0;
34192
34372
  point.stackY = yValue;
@@ -34319,7 +34499,7 @@ class Series {
34319
34499
  * Initialize the animation.
34320
34500
  */
34321
34501
  animate(init) {
34322
- const { chart, group, markerGroup } = this, inverted = chart.inverted, animation = Series_animObject(this.options.animation),
34502
+ const { chart, group, markerGroup } = this, inverted = chart.inverted, animation = animObject(this.options.animation),
34323
34503
  // The key for temporary animation clips
34324
34504
  animationClipKey = [
34325
34505
  this.getSharedClipKey(),
@@ -34415,10 +34595,11 @@ class Series {
34415
34595
  */
34416
34596
  drawPoints(points) {
34417
34597
  points || (points = this.points.concat(this.condemnedPoints));
34418
- 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,
34419
- // Use larger or equal as radius is null in bubbles (#6321)
34420
- series.closestPointRangePx >= (seriesMarkerOptions.enabledThreshold *
34421
- seriesMarkerOptions.radius));
34598
+ 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 ??
34599
+ (!xAxis || xAxis.isRadial ? true : null) ??
34600
+ // Use larger or equal as radius is null in bubbles (#6321)
34601
+ ((series.closestPointRangePx ?? -Infinity) >= ((seriesMarkerOptions.enabledThreshold ?? 2) *
34602
+ seriesMarkerOptions.radius));
34422
34603
  let i, point, graphic, verb, pointMarkerOptions, hasPointMarker, markerAttribs;
34423
34604
  if (seriesMarkerOptions.enabled !== false ||
34424
34605
  series._hasPointMarkers) {
@@ -34435,8 +34616,10 @@ class Series {
34435
34616
  // Only draw the point if y is defined
34436
34617
  if (shouldDrawMarker) {
34437
34618
  // Shortcuts
34438
- const symbol = pick(pointMarkerOptions.symbol, series.symbol, 'rect');
34439
- markerAttribs = series.markerAttribs(point, (point.selected && 'select'));
34619
+ const symbol = pointMarkerOptions.symbol ??
34620
+ series.symbol ??
34621
+ 'rect';
34622
+ markerAttribs = series.markerAttribs(point, point.selected ? 'select' : '');
34440
34623
  const isInside = point.isInside !== false;
34441
34624
  if (!graphic &&
34442
34625
  isInside &&
@@ -34501,15 +34684,17 @@ class Series {
34501
34684
  * A hash containing those attributes that are not settable from CSS.
34502
34685
  */
34503
34686
  markerAttribs(point, state) {
34504
- const seriesOptions = this.options, seriesMarkerOptions = seriesOptions.marker, pointMarkerOptions = point.marker || {}, symbol = (pointMarkerOptions.symbol ||
34687
+ const seriesOptions = this.options, seriesMarkerOptions = seriesOptions.marker ?? {}, pointMarkerOptions = point.marker || {}, symbol = (pointMarkerOptions.symbol ||
34505
34688
  seriesMarkerOptions.symbol), attribs = {};
34506
- let seriesStateOptions, pointStateOptions, radius = pick(pointMarkerOptions.radius, seriesMarkerOptions?.radius);
34689
+ let seriesStateOptions, pointStateOptions, radius = pointMarkerOptions.radius ??
34690
+ seriesMarkerOptions.radius;
34507
34691
  // Handle hover and select states
34508
34692
  if (state) {
34509
- seriesStateOptions = seriesMarkerOptions?.states?.[state];
34693
+ seriesStateOptions = seriesMarkerOptions.states?.[state];
34510
34694
  pointStateOptions = pointMarkerOptions.states?.[state];
34511
- radius = pick(pointStateOptions?.radius, seriesStateOptions?.radius, radius && radius + (seriesStateOptions?.radiusPlus ||
34512
- 0));
34695
+ radius = pointStateOptions?.radius ??
34696
+ seriesStateOptions?.radius ??
34697
+ (radius && radius + (seriesStateOptions?.radiusPlus || 0));
34513
34698
  }
34514
34699
  point.hasImage = symbol && symbol.indexOf('url') === 0;
34515
34700
  if (point.hasImage) {
@@ -34522,7 +34707,7 @@ class Series {
34522
34707
  0 :
34523
34708
  symbol === 'rect' ?
34524
34709
  // Rectangle symbols need crisp edges, others don't
34525
- seriesMarkerOptions?.lineWidth || 0 :
34710
+ seriesMarkerOptions.lineWidth || 0 :
34526
34711
  1);
34527
34712
  }
34528
34713
  attribs.x = pos[0] - radius;
@@ -34553,8 +34738,9 @@ class Series {
34553
34738
  * The presentational attributes to be set on the point.
34554
34739
  */
34555
34740
  pointAttribs(point, state) {
34556
- const options = this.options, seriesMarkerOptions = options.marker, pointOptions = point?.options, pointMarkerOptions = pointOptions?.marker || {}, pointColorOption = pointOptions?.color, pointColor = point?.color, zoneColor = point?.zone?.color;
34557
- let seriesStateOptions, pointStateOptions, color = this.color, fill, stroke, strokeWidth = pick(pointMarkerOptions.lineWidth, seriesMarkerOptions.lineWidth), opacity = (point?.isNull && options.nullInteraction) ? 0 : 1;
34741
+ const options = this.options, seriesMarkerOptions = options.marker ?? {}, pointOptions = point?.options, pointMarkerOptions = pointOptions?.marker || {}, pointColorOption = pointOptions?.color, pointColor = point?.color, zoneColor = point?.zone?.color;
34742
+ let color = this.color, fill, stroke, strokeWidth = pointMarkerOptions.lineWidth ??
34743
+ seriesMarkerOptions.lineWidth, opacity = (point?.isNull && options.nullInteraction) ? 0 : 1;
34558
34744
  color = (pointColorOption ||
34559
34745
  zoneColor ||
34560
34746
  pointColor ||
@@ -34567,19 +34753,22 @@ class Series {
34567
34753
  color);
34568
34754
  // Handle hover and select states
34569
34755
  state = state || 'normal';
34570
- if (state) {
34571
- seriesStateOptions = (seriesMarkerOptions.states[state] || {});
34572
- pointStateOptions = (pointMarkerOptions.states &&
34573
- pointMarkerOptions.states[state]) || {};
34574
- strokeWidth = pick(pointStateOptions.lineWidth, seriesStateOptions.lineWidth, strokeWidth + pick(pointStateOptions.lineWidthPlus, seriesStateOptions.lineWidthPlus, 0));
34575
- fill = (pointStateOptions.fillColor ||
34576
- seriesStateOptions.fillColor ||
34577
- fill);
34578
- stroke = (pointStateOptions.lineColor ||
34579
- seriesStateOptions.lineColor ||
34580
- stroke);
34581
- opacity = pick(pointStateOptions.opacity, seriesStateOptions.opacity, opacity);
34582
- }
34756
+ const seriesStateOptions = seriesMarkerOptions.states?.[state] || {};
34757
+ const pointStateOptions = pointMarkerOptions.states?.[state] || {};
34758
+ strokeWidth = pointStateOptions.lineWidth ??
34759
+ seriesStateOptions.lineWidth ??
34760
+ (strokeWidth || 0) + (pointStateOptions.lineWidthPlus ??
34761
+ seriesStateOptions.lineWidthPlus ??
34762
+ 0);
34763
+ fill = (pointStateOptions.fillColor ||
34764
+ seriesStateOptions.fillColor ||
34765
+ fill);
34766
+ stroke = (pointStateOptions.lineColor ||
34767
+ seriesStateOptions.lineColor ||
34768
+ stroke);
34769
+ opacity = (pointStateOptions.opacity ??
34770
+ seriesStateOptions.opacity ??
34771
+ opacity);
34583
34772
  return {
34584
34773
  'stroke': stroke,
34585
34774
  'stroke-width': strokeWidth,
@@ -34618,7 +34807,7 @@ class Series {
34618
34807
  // Destroy all points with their elements
34619
34808
  i = data.length;
34620
34809
  while (i--) {
34621
- data[i]?.destroy?.();
34810
+ data[i]?.destroy?.(true);
34622
34811
  }
34623
34812
  for (const zone of series.zones || []) {
34624
34813
  // Destroy SVGElement's but preserve primitive props (#20426)
@@ -34645,7 +34834,7 @@ class Series {
34645
34834
  erase(chart.series, series);
34646
34835
  chart.orderItems('series');
34647
34836
  // Clear all members
34648
- objectEach(series, function (val, prop) {
34837
+ objectEach(series, function (_val, prop) {
34649
34838
  if (!keepEventsForUpdate || prop !== 'hcEvents') {
34650
34839
  delete series[prop];
34651
34840
  }
@@ -34697,7 +34886,7 @@ class Series {
34697
34886
  // Reset
34698
34887
  zones.forEach((zone) => {
34699
34888
  zone.lineClip = [];
34700
- zone.translated = clamp(axis.toPixels(pick(zone.value, axisMax), true) || 0, 0, len);
34889
+ zone.translated = clamp(axis.toPixels((zone.value ?? axisMax), true) || 0, 0, len);
34701
34890
  });
34702
34891
  // The use of the Color Threshold assumes there are no gaps so it is
34703
34892
  // safe to hide the original graph and area unless it is not
@@ -34921,7 +35110,7 @@ class Series {
34921
35110
  * @emits Highcharts.Series#event:afterRender
34922
35111
  */
34923
35112
  render() {
34924
- const series = this, { chart, options, hasRendered } = series, animOptions = Series_animObject(options.animation), visibility = series.visible ?
35113
+ const series = this, { chart, options, hasRendered } = series, animOptions = animObject(options.animation), visibility = series.visible ?
34925
35114
  'inherit' : 'hidden', // #2597
34926
35115
  zIndex = options.zIndex, chartSeriesGroup = chart.seriesGroup;
34927
35116
  let animDuration = series.finishedAnimating ?
@@ -35023,7 +35212,7 @@ class Series {
35023
35212
  *
35024
35213
  * @function Highcharts.Series#searchPoint
35025
35214
  *
35026
- * @param {Highcharts.PointerEvent} e
35215
+ * @param {PointerEvent} e
35027
35216
  * The normalized pointer event
35028
35217
  * @param {boolean} [compareX=false]
35029
35218
  * Search only by the X value, not Y
@@ -35055,7 +35244,7 @@ class Series {
35055
35244
  // Prevent multiple k-d-trees from being built simultaneously
35056
35245
  // (#6235)
35057
35246
  this.buildingKdTree = true;
35058
- const series = this, seriesOptions = series.options, dimensions = seriesOptions.findNearestPointBy
35247
+ const series = this, seriesOptions = series.options, dimensions = (seriesOptions.findNearestPointBy ?? '')
35059
35248
  .indexOf('y') > -1 ? 2 : 1;
35060
35249
  /**
35061
35250
  * Internal function
@@ -35105,7 +35294,7 @@ class Series {
35105
35294
  * The point to search for.
35106
35295
  * @param {boolean} [compareX=false]
35107
35296
  * Search only by the X value, not Y.
35108
- * @param {Highcharts.PointerEvent} [e]
35297
+ * @param {PointerEvent} [e]
35109
35298
  * The normalized pointer event.
35110
35299
  * @param {Function} [suppliedPointEvaluator]
35111
35300
  * A custom point evaluator function.
@@ -35311,11 +35500,13 @@ class Series {
35311
35500
  * Both X and Y values given
35312
35501
  * @sample highcharts/members/series-addpoint-pie/
35313
35502
  * Append pie slice
35314
- * @sample stock/members/series-addpoint/
35503
+ * @sample highcharts/datatable/datamapping-dynamic
35504
+ * Alternative approach with data table
35505
+ * @sample {highstock} stock/members/series-addpoint/
35315
35506
  * Append 100 points in Highcharts Stock
35316
- * @sample stock/members/series-addpoint-shift/
35507
+ * @sample {highstock} stock/members/series-addpoint-shift/
35317
35508
  * Append and shift in Highcharts Stock
35318
- * @sample maps/members/series-addpoint/
35509
+ * @sample {highmaps} maps/members/series-addpoint/
35319
35510
  * Add a point in Highmaps
35320
35511
  *
35321
35512
  * @function Highcharts.Series#addPoint
@@ -35351,7 +35542,7 @@ class Series {
35351
35542
  const series = this, seriesOptions = series.options, { chart, data, dataTable: table, xAxis } = series, names = xAxis?.hasNames && xAxis.names, dataOptions = seriesOptions.data, xData = series.getColumn('x');
35352
35543
  let isInTheMiddle, i;
35353
35544
  // Optional redraw, defaults to true
35354
- redraw = pick(redraw, true);
35545
+ redraw = (redraw ?? true);
35355
35546
  // Get options and push the point to xData, yData and series.options. In
35356
35547
  // series.generatePoints the Point instance will be created on demand
35357
35548
  // and pushed to the series.data array.
@@ -35461,8 +35652,8 @@ class Series {
35461
35652
  chart.redraw();
35462
35653
  }
35463
35654
  };
35464
- Series_setAnimation(animation, chart);
35465
- redraw = pick(redraw, true);
35655
+ setAnimation(animation, chart);
35656
+ redraw = (redraw ?? true);
35466
35657
  // Fire the event with a default handler of removing the point
35467
35658
  if (point) {
35468
35659
  point.firePointEvent('remove', null, remove);
@@ -35505,7 +35696,7 @@ class Series {
35505
35696
  // Redraw
35506
35697
  chart.isDirtyLegend = chart.isDirtyBox = true;
35507
35698
  chart.linkSeries(keepEvents);
35508
- if (pick(redraw, true)) {
35699
+ if (redraw ?? true) {
35509
35700
  chart.redraw(animation);
35510
35701
  }
35511
35702
  }
@@ -35722,7 +35913,7 @@ class Series {
35722
35913
  series.isDirtyData = true;
35723
35914
  }
35724
35915
  fireEvent(this, 'afterUpdate');
35725
- if (pick(redraw, true)) {
35916
+ if (redraw ?? true) {
35726
35917
  chart.redraw(keepPoints ? void 0 : false);
35727
35918
  }
35728
35919
  }
@@ -35739,12 +35930,12 @@ class Series {
35739
35930
  * @internal
35740
35931
  */
35741
35932
  hasOptionChanged(optionName) {
35742
- 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]);
35933
+ const chart = this.chart, option = this.options[optionName], plotOptions = chart.options.plotOptions, oldOption = this.userOptions[optionName], plotOptionsOption = (plotOptions?.[this.type]?.[optionName] ?? plotOptions?.series?.[optionName]);
35743
35934
  // Check if `plotOptions` are defined already, #19203
35744
35935
  if (oldOption && !defined(plotOptionsOption)) {
35745
35936
  return option !== oldOption;
35746
35937
  }
35747
- return option !== pick(plotOptionsOption, option);
35938
+ return option !== (plotOptionsOption ?? option);
35748
35939
  }
35749
35940
  /**
35750
35941
  * Runs on mouse over the series graphical items.
@@ -35815,10 +36006,11 @@ class Series {
35815
36006
  * Determines if state should be inherited by points too.
35816
36007
  */
35817
36008
  setState(state, inherit) {
35818
- const series = this, { graph, options } = series, { inactiveOtherPoints, states: stateOptions } = options,
36009
+ const series = this, { graph, options } = series, { inactiveOtherPoints, states: stateOptions = {} } = options,
35819
36010
  // By default a quick animation to hover/inactive,
35820
36011
  // slower to un-hover
35821
- stateAnimation = pick(stateOptions?.[state || 'normal']?.animation, series.chart.options.chart.animation);
36012
+ stateAnimation = stateOptions[state || 'normal']?.animation ??
36013
+ series.chart.options.chart.animation;
35822
36014
  let { lineWidth, opacity } = options;
35823
36015
  state = state || '';
35824
36016
  if (series.state !== state) {
@@ -35845,9 +36037,13 @@ class Series {
35845
36037
  return;
35846
36038
  }
35847
36039
  if (state) {
35848
- lineWidth = (stateOptions[state].lineWidth ||
35849
- lineWidth + (stateOptions[state].lineWidthPlus || 0)); // #4035
35850
- opacity = pick(stateOptions[state].opacity, opacity);
36040
+ lineWidth = stateOptions[state]?.lineWidth ?? (!isNumber(lineWidth) ?
36041
+ void 0 :
36042
+ // Increase by lineWidthPlus only when lineWidth
36043
+ // is a number.
36044
+ (lineWidth +
36045
+ (stateOptions?.[state]?.lineWidthPlus || 0))); // #4035
36046
+ opacity = stateOptions[state]?.opacity ?? opacity;
35851
36047
  }
35852
36048
  if (graph && !graph.dashstyle && isNumber(lineWidth)) {
35853
36049
  // Animate the graph stroke-width
@@ -35891,11 +36087,7 @@ class Series {
35891
36087
  * Can be either `hover` or undefined to set to normal state.
35892
36088
  */
35893
36089
  setAllPointsToState(state) {
35894
- this.points.forEach(function (point) {
35895
- if (point.setState) {
35896
- point.setState(state);
35897
- }
35898
- });
36090
+ this.points.forEach((point) => point.setState?.(state));
35899
36091
  }
35900
36092
  /**
35901
36093
  * Show or hide the series.
@@ -36576,7 +36768,6 @@ Series_SeriesRegistry.series = Series;
36576
36768
  * */
36577
36769
 
36578
36770
 
36579
- const { animObject: Legend_animObject, setAnimation: Legend_setAnimation } = AnimationUtilities;
36580
36771
 
36581
36772
  const { registerEventOptions: Legend_registerEventOptions } = Core_Foundation;
36582
36773
 
@@ -36705,7 +36896,7 @@ class Legend {
36705
36896
  * @param {Highcharts.LegendOptions} options
36706
36897
  */
36707
36898
  setOptions(options) {
36708
- const padding = pick(options.padding, 8);
36899
+ const padding = (options.padding ?? 8);
36709
36900
  /**
36710
36901
  * Legend options.
36711
36902
  *
@@ -36722,7 +36913,7 @@ class Legend {
36722
36913
  this.itemMarginBottom = options.itemMarginBottom;
36723
36914
  this.padding = padding;
36724
36915
  this.initialItemY = padding - 5; // 5 is pixels above the text
36725
- this.symbolWidth = pick(options.symbolWidth, 16);
36916
+ this.symbolWidth = (options.symbolWidth ?? 16);
36726
36917
  this.pages = [];
36727
36918
  this.proximate = options.layout === 'proximate' && !this.chart.inverted;
36728
36919
  // #12705: baseline has to be reset on every update
@@ -36756,7 +36947,7 @@ class Legend {
36756
36947
  }
36757
36948
  this.destroy();
36758
36949
  chart.isDirtyLegend = chart.isDirtyBox = true;
36759
- if (pick(redraw, true)) {
36950
+ if (redraw ?? true) {
36760
36951
  chart.redraw();
36761
36952
  }
36762
36953
  fireEvent(this, 'afterUpdate', { redraw });
@@ -36994,7 +37185,7 @@ class Legend {
36994
37185
  * The item to render.
36995
37186
  */
36996
37187
  renderItem(item) {
36997
- 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 ?
37188
+ 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 ?
36998
37189
  item.series :
36999
37190
  item, seriesOptions = series.options, showCheckbox = (!!legend.createCheckboxForItem &&
37000
37191
  seriesOptions &&
@@ -37040,9 +37231,11 @@ class Legend {
37040
37231
  legend.fontMetrics.f + 3 + legend.itemMarginTop;
37041
37232
  label.attr('y', legend.baseline);
37042
37233
  legend.symbolHeight =
37043
- pick(options.symbolHeight, legend.fontMetrics.f);
37234
+ (options.symbolHeight ?? legend.fontMetrics.f);
37044
37235
  if (options.squareSymbol) {
37045
- legend.symbolWidth = pick(options.symbolWidth, Math.max(legend.symbolHeight, 16));
37236
+ legend.symbolWidth =
37237
+ options.symbolWidth ??
37238
+ Math.max(legend.symbolHeight, 16);
37046
37239
  itemExtraWidth = legend.symbolWidth + symbolPadding +
37047
37240
  itemDistance + (showCheckbox ? 20 : 0);
37048
37241
  if (ltr) {
@@ -37094,7 +37287,7 @@ class Legend {
37094
37287
  * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item
37095
37288
  */
37096
37289
  layoutItem(item) {
37097
- 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 &&
37290
+ 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 &&
37098
37291
  this.totalItemWidth > maxLegendWidth) ?
37099
37292
  this.maxItemWidth :
37100
37293
  item.itemWidth, legendItem = item.legendItem || {};
@@ -37148,7 +37341,9 @@ class Legend {
37148
37341
  const seriesOptions = series?.options;
37149
37342
  // Handle showInLegend. If the series is linked to another series,
37150
37343
  // defaults to false.
37151
- if (series && pick(seriesOptions.showInLegend, !defined(seriesOptions.linkedTo) ? void 0 : false, true)) {
37344
+ if (series &&
37345
+ (seriesOptions.showInLegend ??
37346
+ (!defined(seriesOptions.linkedTo)))) {
37152
37347
  // Use points or series for the legend item depending on
37153
37348
  // legendType
37154
37349
  allItems = allItems.concat(series.legendItem?.labels ||
@@ -37430,7 +37625,7 @@ class Legend {
37430
37625
  * @function Highcharts.Legend#handleOverflow
37431
37626
  */
37432
37627
  handleOverflow(legendHeight) {
37433
- 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) {
37628
+ 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) {
37434
37629
  if (typeof height === 'number') {
37435
37630
  clipRect.attr({
37436
37631
  height: height
@@ -37476,7 +37671,7 @@ class Legend {
37476
37671
  navOptions.enabled !== false) {
37477
37672
  this.clipHeight = clipHeight =
37478
37673
  Math.max(spaceHeight - 20 - this.titleHeight - padding, 0);
37479
- this.currentPage = pick(this.currentPage, 1);
37674
+ this.currentPage = (this.currentPage ?? 1);
37480
37675
  this.fullHeight = legendHeight;
37481
37676
  // Fill pages with Y positions so that the top of each a legend item
37482
37677
  // defines the scroll top for each page (#2098)
@@ -37579,7 +37774,7 @@ class Legend {
37579
37774
  }
37580
37775
  if (currentPage > 0) {
37581
37776
  if (typeof animation !== 'undefined') {
37582
- Legend_setAnimation(animation, chart);
37777
+ setAnimation(animation, chart);
37583
37778
  }
37584
37779
  this.nav.attr({
37585
37780
  translateX: padding,
@@ -37636,7 +37831,7 @@ class Legend {
37636
37831
  this.currentPage = currentPage;
37637
37832
  this.positionCheckboxes();
37638
37833
  // Fire event after scroll animation is complete
37639
- const animOptions = Legend_animObject(pick(animation, chart.renderer.globalAnimation, true));
37834
+ const animOptions = animObject((animation ?? chart.renderer.globalAnimation ?? true));
37640
37835
  syncTimeout(() => {
37641
37836
  fireEvent(this, 'afterScroll', { currentPage });
37642
37837
  }, animOptions.duration);
@@ -37846,7 +38041,7 @@ class Legend {
37846
38041
  */ /**
37847
38042
  * Related browser event.
37848
38043
  * @name Highcharts.LegendItemClickEventObject#browserEvent
37849
- * @type {Highcharts.PointerEvent}
38044
+ * @type {PointerEvent}
37850
38045
  */ /**
37851
38046
  * Prevent the default action of toggle the visibility of the series or point.
37852
38047
  * @name Highcharts.LegendItemClickEventObject#preventDefault
@@ -37897,7 +38092,7 @@ class Legend {
37897
38092
  */ /**
37898
38093
  * Related browser event.
37899
38094
  * @name Highcharts.PointLegendItemClickEventObject#browserEvent
37900
- * @type {Highcharts.PointerEvent}
38095
+ * @type {PointerEvent}
37901
38096
  */ /**
37902
38097
  * Whether the default action has been prevented (`true`) or not.
37903
38098
  * @name Highcharts.PointLegendItemClickEventObject#defaultPrevented
@@ -37953,7 +38148,7 @@ class Legend {
37953
38148
  */ /**
37954
38149
  * Related browser event.
37955
38150
  * @name Highcharts.SeriesLegendItemClickEventObject#browserEvent
37956
- * @type {Highcharts.PointerEvent}
38151
+ * @type {PointerEvent}
37957
38152
  */ /**
37958
38153
  * Whether the default action has been prevented (`true`) or not.
37959
38154
  * @name Highcharts.SeriesLegendItemClickEventObject#defaultPrevented
@@ -37987,7 +38182,6 @@ class Legend {
37987
38182
  * */
37988
38183
 
37989
38184
 
37990
- const { animate: Chart_animate, animObject: Chart_animObject, setAnimation: Chart_setAnimation } = AnimationUtilities;
37991
38185
 
37992
38186
 
37993
38187
  const { defaultOptions: Chart_defaultOptions } = Defaults;
@@ -38078,7 +38272,7 @@ class Chart {
38078
38272
  */
38079
38273
  static chart(a, b, c) {
38080
38274
  const chart = new Chart(a, b, c);
38081
- return chart.promise || chart;
38275
+ return chart.promise ?? chart;
38082
38276
  }
38083
38277
  // Implementation
38084
38278
  constructor(a,
@@ -38119,10 +38313,10 @@ class Chart {
38119
38313
  const chart = this, options = chart.options.chart, zooming = options.zooming;
38120
38314
  chart.zooming = {
38121
38315
  ...zooming,
38122
- type: pick(options.zoomType, zooming.type),
38123
- key: pick(options.zoomKey, zooming.key),
38124
- pinchType: pick(options.pinchType, zooming.pinchType),
38125
- singleTouch: pick(options.zoomBySingleTouch, zooming.singleTouch, false),
38316
+ type: (options.zoomType ?? zooming.type),
38317
+ key: (options.zoomKey ?? zooming.key),
38318
+ pinchType: (options.pinchType ?? zooming.pinchType),
38319
+ singleTouch: options.zoomBySingleTouch ?? zooming.singleTouch ?? false,
38126
38320
  resetButton: merge(zooming.resetButton, options.resetZoomButton)
38127
38321
  };
38128
38322
  }
@@ -38465,7 +38659,7 @@ class Chart {
38465
38659
  redraw(animation) {
38466
38660
  fireEvent(this, 'beforeRedraw');
38467
38661
  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 = [];
38468
- let hasDirtyStacks, hasStackedSeries, i, isDirtyBox = chart.isDirtyBox, redrawLegend = chart.isDirtyLegend, serie;
38662
+ let hasDirtyStacks, hasStackedSeries, i, redrawLegend = chart.isDirtyLegend, serie;
38469
38663
  renderer.rootFontSize = renderer.boxWrapper.getStyle('font-size');
38470
38664
  // Handle responsive rules, not only on resize (#6130)
38471
38665
  if (chart.setResponsive) {
@@ -38474,7 +38668,7 @@ class Chart {
38474
38668
  // Set the global animation. When chart.hasRendered is not true, the
38475
38669
  // redraw call comes from a responsive rule and animation should not
38476
38670
  // occur.
38477
- Chart_setAnimation(chart.hasRendered ? animation : false, chart);
38671
+ setAnimation(chart.hasRendered ? animation : false, chart);
38478
38672
  if (isHiddenChart) {
38479
38673
  chart.temporaryDisplay();
38480
38674
  }
@@ -38537,6 +38731,7 @@ class Chart {
38537
38731
  });
38538
38732
  chart.getMargins(); // #3098
38539
38733
  // If one axis is dirty, all axes must be redrawn (#792, #2169)
38734
+ let isDirtyBox = chart.isDirtyBox;
38540
38735
  axes.forEach(function (axis) {
38541
38736
  if (axis.isDirty) {
38542
38737
  isDirtyBox = true;
@@ -38673,7 +38868,7 @@ class Chart {
38673
38868
  // inspect the generated series.points.
38674
38869
  series.getPointsCollection()
38675
38870
  .forEach((point) => {
38676
- if (pick(point.selectedStaging, point.selected)) {
38871
+ if (point.selectedStaging ?? point.selected) {
38677
38872
  acc.push(point);
38678
38873
  }
38679
38874
  });
@@ -39072,11 +39267,8 @@ class Chart {
39072
39267
  const chartHeight = chart.chartHeight;
39073
39268
  let chartWidth = chart.chartWidth;
39074
39269
  // Allow table cells and flex-boxes to shrink without the chart
39075
- // blocking them out (#6427) but skip in styled mode so inline styles
39076
- // don't override user CSS on renderTo
39077
- if (!chart.styledMode) {
39078
- css(renderTo, { overflow: 'hidden' });
39079
- }
39270
+ // blocking them out (#6427)
39271
+ css(renderTo, { overflow: 'hidden' });
39080
39272
  // Create the inner container
39081
39273
  if (!chart.styledMode) {
39082
39274
  containerStyle = extend({
@@ -39114,7 +39306,7 @@ class Chart {
39114
39306
  chartWidth = chart.chartWidth;
39115
39307
  if (!chart.styledMode) {
39116
39308
  css(container, {
39117
- width: pick(optionsChart.style?.width, chartWidth + 'px')
39309
+ width: (optionsChart.style?.width ?? chartWidth + 'px')
39118
39310
  });
39119
39311
  }
39120
39312
  }
@@ -39133,7 +39325,7 @@ class Chart {
39133
39325
  // first ResizeObserver reflow
39134
39326
  chart.containerBox = chart.getContainerBox();
39135
39327
  // Set the initial animation from the options
39136
- Chart_setAnimation(void 0, chart);
39328
+ setAnimation(void 0, chart);
39137
39329
  chart.setClassName(optionsChart.className);
39138
39330
  if (!chart.styledMode) {
39139
39331
  chart.renderer.setStyle(optionsChart.style);
@@ -39328,7 +39520,7 @@ class Chart {
39328
39520
  // Handle the isResizing counter
39329
39521
  chart.isResizing += 1;
39330
39522
  // Set the animation for the current process
39331
- Chart_setAnimation(animation, chart);
39523
+ setAnimation(animation, chart);
39332
39524
  const globalAnimation = renderer.globalAnimation;
39333
39525
  chart.oldChartHeight = chart.chartHeight;
39334
39526
  chart.oldChartWidth = chart.chartWidth;
@@ -39347,7 +39539,7 @@ class Chart {
39347
39539
  // Resize the container with the global animation applied if enabled
39348
39540
  // (#2503)
39349
39541
  if (!chart.styledMode) {
39350
- (globalAnimation ? Chart_animate : css)(chart.container, {
39542
+ (globalAnimation ? animate : css)(chart.container, {
39351
39543
  width: `${chartWidth + scrollablePixelsX}px`,
39352
39544
  height: `${chartHeight + scrollablePixelsY}px`
39353
39545
  }, globalAnimation);
@@ -39373,7 +39565,7 @@ class Chart {
39373
39565
  if (chart) {
39374
39566
  fireEvent(chart, 'endResize');
39375
39567
  }
39376
- }, Chart_animObject(globalAnimation).duration);
39568
+ }, animObject(globalAnimation).duration);
39377
39569
  }
39378
39570
  // Handle resizing counter even if we've re-rendered or not (#20548).
39379
39571
  chart.isResizing -= 1;
@@ -39757,7 +39949,7 @@ class Chart {
39757
39949
  const mockTick = new Axis_Tick(axis, 0, '', true), label = mockTick.createLabel('x', labels);
39758
39950
  mockTick.destroy();
39759
39951
  if (label &&
39760
- pick(labels.reserveSpace, !isNumber(options.crossing))) {
39952
+ (labels.reserveSpace ?? !isNumber(options.crossing))) {
39761
39953
  expectedSpace = label.getBBox().height +
39762
39954
  labels.distance +
39763
39955
  Math.max(isNumber(offset) ? offset : 0, 0);
@@ -40092,7 +40284,7 @@ class Chart {
40092
40284
  const chart = this;
40093
40285
  let series;
40094
40286
  if (options) { // <- not necessary
40095
- redraw = pick(redraw, true); // Defaults to true
40287
+ redraw = (redraw ?? true); // Defaults to true
40096
40288
  fireEvent(chart, 'addSeries', { options: options }, function () {
40097
40289
  series = chart.initSeries(options);
40098
40290
  chart.isDirtyLegend = true;
@@ -40183,7 +40375,7 @@ class Chart {
40183
40375
  */
40184
40376
  createAxis(coll, options) {
40185
40377
  const axis = new Axis_Axis(this, options.axis, coll);
40186
- if (pick(options.redraw, true)) {
40378
+ if (options.redraw ?? true) {
40187
40379
  this.redraw(options.animation);
40188
40380
  }
40189
40381
  return axis;
@@ -40231,7 +40423,7 @@ class Chart {
40231
40423
  }
40232
40424
  loadingDiv.className = 'highcharts-loading';
40233
40425
  // Update text
40234
- HTML_AST.setElementHTML(loadingSpan, pick(str, options.lang.loading, ''));
40426
+ HTML_AST.setElementHTML(loadingSpan, (str ?? options.lang.loading ?? ''));
40235
40427
  if (!chart.styledMode) {
40236
40428
  // Update visuals
40237
40429
  css(loadingDiv, extend(loadingStyle, { zIndex: 10 }));
@@ -40242,7 +40434,7 @@ class Chart {
40242
40434
  opacity: 0,
40243
40435
  display: ''
40244
40436
  });
40245
- Chart_animate(loadingDiv, {
40437
+ animate(loadingDiv, {
40246
40438
  opacity: loadingStyle.opacity ?? 0.5
40247
40439
  }, {
40248
40440
  duration: loadingOptions?.showDuration ?? 0
@@ -40270,7 +40462,7 @@ class Chart {
40270
40462
  loadingDiv.className =
40271
40463
  'highcharts-loading highcharts-loading-hidden';
40272
40464
  if (!this.styledMode) {
40273
- Chart_animate(loadingDiv, {
40465
+ animate(loadingDiv, {
40274
40466
  opacity: 0
40275
40467
  }, {
40276
40468
  duration: options.loading?.hideDuration ?? 100,
@@ -40302,6 +40494,9 @@ class Chart {
40302
40494
  * Note that when changing series data, `chart.update` may mutate the passed
40303
40495
  * data options.
40304
40496
  *
40497
+ * If the given options don't differ from the current chart options, the
40498
+ * update is skipped and the `afterUpdate` event is not emitted.
40499
+ *
40305
40500
  * See also the
40306
40501
  * [responsive option set](https://api.highcharts.com/highcharts/responsive).
40307
40502
  * Switching between `responsive.rules` basically runs `chart.update` under
@@ -40346,14 +40541,24 @@ class Chart {
40346
40541
  caption: 'setCaption'
40347
40542
  }, isResponsiveOptions = options.isResponsiveOptions, itemsForRemoval = [];
40348
40543
  let updateAllAxes, updateAllSeries, runSetSize;
40349
- fireEvent(chart, 'update', { options: options });
40544
+ options = diffObjects(options, chart.options);
40545
+ const e = {
40546
+ options,
40547
+ // Event handlers can turn this on or off to control further
40548
+ // processing
40549
+ hasChanged: !!Object.keys(options).length
40550
+ };
40551
+ fireEvent(chart, 'update', e);
40552
+ // If no changes are detected, stop further processing (#24805).
40553
+ if (!e.hasChanged) {
40554
+ return;
40555
+ }
40350
40556
  // If there are responsive rules in action, undo the responsive rules
40351
40557
  // before we apply the updated options and replay the responsive rules
40352
40558
  // on top from the chart.redraw function (#9617).
40353
40559
  if (!isResponsiveOptions) {
40354
40560
  chart.setResponsive(false, true);
40355
40561
  }
40356
- options = diffObjects(options, chart.options);
40357
40562
  chart.userOptions = merge(chart.userOptions, options);
40358
40563
  // If the top-level chart option is present, some special updates are
40359
40564
  // required
@@ -40456,7 +40661,7 @@ class Chart {
40456
40661
  }
40457
40662
  // No match by id found, match by index instead
40458
40663
  if (!item && chart[coll]) {
40459
- item = chart[coll][pick(newOptions.index, i)];
40664
+ item = chart[coll][(newOptions.index ?? i)];
40460
40665
  // Check if we grabbed an item with an existing but
40461
40666
  // different id (#13541). Check that the item in this
40462
40667
  // position is not internal (navigator).
@@ -40532,7 +40737,7 @@ class Chart {
40532
40737
  (isNumber(newHeight) && newHeight !== chart.chartHeight)) {
40533
40738
  chart.setSize(newWidth, newHeight, animation);
40534
40739
  }
40535
- else if (pick(redraw, true)) {
40740
+ else if (redraw ?? true) {
40536
40741
  chart.redraw(animation);
40537
40742
  }
40538
40743
  fireEvent(chart, 'afterUpdate', {
@@ -40581,15 +40786,11 @@ class Chart {
40581
40786
  showResetZoom() {
40582
40787
  const chart = this, lang = chart.options.lang, btnOptions = chart.zooming.resetButton, theme = btnOptions.theme, alignTo = (btnOptions.relativeTo === 'chart' ||
40583
40788
  btnOptions.relativeTo === 'spacingBox' ?
40584
- null :
40789
+ void 0 :
40585
40790
  'plotBox');
40586
- /** @internal */
40587
- function zoomOut() {
40588
- chart.zoomOut();
40589
- }
40590
- fireEvent(this, 'beforeShowResetZoom', null, function () {
40791
+ fireEvent(this, 'beforeShowResetZoom', void 0, () => {
40591
40792
  chart.resetZoomButton = chart.renderer
40592
- .button(lang.resetZoom, null, null, zoomOut, theme)
40793
+ .button(lang.resetZoom, 0, 0, () => chart.zoomOut(), theme)
40593
40794
  .attr({
40594
40795
  align: btnOptions.position.align,
40595
40796
  title: lang.resetZoomTitle
@@ -40667,21 +40868,21 @@ class Chart {
40667
40868
  * @function Highcharts.Chart#transform
40668
40869
  */
40669
40870
  transform(params) {
40670
- const { axes = this.axes, event, from = {}, reset, selection, to = {}, trigger, allowResetButton = true } = params, { inverted, time } = this;
40871
+ const { axes = this.axes, event, from = {}, reset, selection, to = {}, trigger, allowResetButton = true } = params, { time } = this;
40671
40872
  // Remove active points for shared tooltip
40672
40873
  this.hoverPoints?.forEach((point) => point.setState());
40673
40874
  fireEvent(this, 'transform', params);
40674
40875
  let hasZoomed = params.hasZoomed || false, displayButton, isAnyAxisPanning;
40675
40876
  for (const axis of axes) {
40676
- 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),
40877
+ 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),
40677
40878
  // If fingers pinched very close on this axis, treat as pan
40678
40879
  scale = Math.abs(toLength) < 10 ?
40679
40880
  1 :
40680
40881
  toLength / fromLength, fromCenter = (from[xy] || 0) + fromLength / 2 - axis.pos, toCenter = (to[xy] ?? axis.pos) +
40681
- toLength / 2 - axis.pos, move = fromCenter - toCenter / scale, pointRangeDirection = (reversed && !inverted) ||
40682
- (!reversed && inverted) ?
40683
- -1 :
40684
- 1, minPx = move;
40882
+ toLength / 2 - axis.pos, move = fromCenter - toCenter / scale, pointRangeDirection = ((horiz && !reversed) ||
40883
+ (!horiz && reversed)) ?
40884
+ 1 :
40885
+ -1, minPx = move;
40685
40886
  // Zooming in multiple panes, zoom only in the pane that receives
40686
40887
  // the input
40687
40888
  if (!reset && (fromCenter < 0 || fromCenter > axis.len)) {
@@ -40690,17 +40891,11 @@ class Chart {
40690
40891
  // Adjust offset to ensure selection zoom triggers correctly
40691
40892
  // (#22945)
40692
40893
  // Set offset to 0 for ordinal axis only when zooming out, (#24545).
40693
- const offset = (axis.chart.polar || (axis.isOrdinal && scale <= 1)) ?
40894
+ const offset = (selection || axis.chart.polar ||
40895
+ (axis.isOrdinal && scale <= 1)) ?
40694
40896
  0 :
40695
40897
  (minPointOffset * pointRangeDirection || 0), eventMin = axis.toValue(minPx, true), eventMax = axis.toValue(minPx + len / scale, true);
40696
40898
  let newMin = eventMin + offset, newMax = eventMax - offset, allExtremes = axis.allExtremes;
40697
- if (selection) {
40698
- selection[axis.coll].push({
40699
- axis,
40700
- min: Math.min(eventMin, eventMax),
40701
- max: Math.max(eventMin, eventMax)
40702
- });
40703
- }
40704
40899
  if (newMin > newMax) {
40705
40900
  [newMin, newMax] = [newMax, newMin];
40706
40901
  }
@@ -40757,14 +40952,15 @@ class Chart {
40757
40952
  }
40758
40953
  // Set new extremes if they are actually new
40759
40954
  if (reset || (axis.series.length &&
40760
- (newMin !== min || newMax !== max) &&
40761
- newMin >= floor &&
40762
- newMax <= ceiling)) {
40955
+ (selection ||
40956
+ ((newMin !== min || newMax !== max) &&
40957
+ newMin >= floor &&
40958
+ newMax <= ceiling)))) {
40763
40959
  if (selection) {
40764
40960
  selection[axis.coll].push({
40765
40961
  axis,
40766
- min: newMin,
40767
- max: newMax
40962
+ min: Math.min(eventMin, eventMax),
40963
+ max: Math.max(eventMin, eventMax)
40768
40964
  });
40769
40965
  }
40770
40966
  else {
@@ -40772,11 +40968,14 @@ class Chart {
40772
40968
  // disallow certain axis padding options that would make
40773
40969
  // panning/zooming hard. Reset and redraw after the
40774
40970
  // operation has finished.
40775
- axis.isPanning = trigger !== 'zoom';
40971
+ axis.isPanning = trigger !== 'zoom' &&
40972
+ trigger !== 'drop';
40776
40973
  if (axis.isPanning && trigger !== 'mousewheel') {
40777
40974
  isAnyAxisPanning = true; // #21319
40778
40975
  }
40779
- axis.setExtremes(reset ? void 0 : newMin, reset ? void 0 : newMax, false, false, { move, trigger, scale });
40976
+ if (trigger !== 'drop') {
40977
+ axis.setExtremes(reset ? void 0 : newMin, reset ? void 0 : newMax, false, false, { move, trigger, scale });
40978
+ }
40780
40979
  if (!reset &&
40781
40980
  (newMin > floor || newMax < ceiling)) {
40782
40981
  displayButton = allowResetButton;
@@ -40807,7 +41006,8 @@ class Chart {
40807
41006
  });
40808
41007
  }
40809
41008
  else {
40810
- // Show or hide the Reset zoom button, but not while panning
41009
+ // Show or hide the Reset zoom button, but not while
41010
+ // panning.
40811
41011
  if (displayButton &&
40812
41012
  !isAnyAxisPanning &&
40813
41013
  !this.resetZoomButton) {
@@ -41049,7 +41249,6 @@ extend(Chart.prototype, {
41049
41249
  */
41050
41250
 
41051
41251
 
41052
- const { stop: ScrollablePlotArea_stop } = AnimationUtilities;
41053
41252
 
41054
41253
  const { composed: ScrollablePlotArea_composed } = Core_Globals;
41055
41254
 
@@ -41215,7 +41414,7 @@ class ScrollablePlotArea {
41215
41414
  this.moveFixedElements();
41216
41415
  }
41217
41416
  // Increase the size of the scrollable renderer and background
41218
- ScrollablePlotArea_stop(chart.container);
41417
+ stop(chart.container);
41219
41418
  css(container, {
41220
41419
  width: `${scrollableWidth}px`,
41221
41420
  height: `${scrollableHeight}px`
@@ -41372,6 +41571,13 @@ ScrollablePlotArea.fixedSelectors = [
41372
41571
  * vertical scrolling, depending on whether the `minWidth` or `minHeight`
41373
41572
  * option is set.
41374
41573
  *
41574
+ * **Note:** Because native browser scrollbars are used, they may
41575
+ * overlap with fixed chart elements such as credits or the chart
41576
+ * border. To avoid this collision, it is recommended to manually add
41577
+ * extra space to the corresponding side using `chart.spacingBottom`
41578
+ * (for horizontal scrollbars) or `chart.spacingRight` (for vertical
41579
+ * scrollbars).
41580
+ *
41375
41581
  * @sample highcharts/chart/scrollable-plotarea
41376
41582
  * Scrollable plot area
41377
41583
  * @sample highcharts/chart/scrollable-plotarea-vertical
@@ -41532,7 +41738,7 @@ class StackItem {
41532
41738
  r: options.borderRadius || 0,
41533
41739
  text: str,
41534
41740
  // Set default padding to 5 as it is in dataLabels #12308
41535
- padding: pick(options.padding, 5),
41741
+ padding: (options.padding ?? 5),
41536
41742
  visibility: 'hidden' // Hidden until setOffset is called
41537
41743
  };
41538
41744
  if (!chart.styledMode) {
@@ -41566,7 +41772,7 @@ class StackItem {
41566
41772
  }), { verticalAlign } = alignOptions;
41567
41773
  if (label && stackBox) {
41568
41774
  const labelBox = label.getBBox(void 0, 0), padding = label.padding;
41569
- let isJustify = pick(options.overflow, 'justify') === 'justify', visible;
41775
+ let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
41570
41776
  // Reset alignOptions property after justify #12337
41571
41777
  alignOptions.x = options.x || 0;
41572
41778
  alignOptions.y = options.y || 0;
@@ -41603,7 +41809,7 @@ class StackItem {
41603
41809
  rotationOriginY: labelBox.height / 2
41604
41810
  });
41605
41811
  // Check if the dataLabel should be visible.
41606
- if (pick(!isJustify && options.crop, true)) {
41812
+ if (((!isJustify && options.crop) ?? true)) {
41607
41813
  visible =
41608
41814
  isNumber(label.x) &&
41609
41815
  isNumber(label.y) &&
@@ -41637,7 +41843,7 @@ class StackItem {
41637
41843
  getStackBox(stackBoxProps) {
41638
41844
  const stackItem = this, axis = this.axis, chart = axis.chart, { boxTop, defaultX, xOffset, width, boxBottom } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41639
41845
  100 :
41640
- 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 ||
41846
+ (boxTop ?? this.total ?? 0), y = axis.toPixels(totalStackValue), xAxis = stackBoxProps.xAxis || chart.xAxis[0], x = (defaultX ?? xAxis.translate(this.x)) + xOffset, yZero = axis.toPixels(boxBottom ||
41641
41847
  (isNumber(axis.min) &&
41642
41848
  axis.logarithmic &&
41643
41849
  axis.logarithmic.lin2log(axis.min)) ||
@@ -41722,7 +41928,6 @@ class StackItem {
41722
41928
  * */
41723
41929
 
41724
41930
 
41725
- const { getDeferredAnimation: StackingAxis_getDeferredAnimation } = AnimationUtilities;
41726
41931
 
41727
41932
  const { series: { prototype: seriesProto } } = Series_SeriesRegistry;
41728
41933
 
@@ -41751,7 +41956,7 @@ function chartGetStacks() {
41751
41956
  if (series.options.stacking && series.reserveSpace()) {
41752
41957
  series.stackKey = [
41753
41958
  series.type,
41754
- pick(series.options.stack, ''),
41959
+ (series.options.stack ?? ''),
41755
41960
  inverted ? xAxisOptions.top : xAxisOptions.left,
41756
41961
  inverted ? xAxisOptions.height : xAxisOptions.width
41757
41962
  ].join(',');
@@ -41914,7 +42119,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
41914
42119
  stack = stacks[key][x];
41915
42120
  if (y !== null) {
41916
42121
  stack.points[pointKey] = stack.points[series.index] = [
41917
- pick(stack.cumulative, stackThreshold)
42122
+ (stack.cumulative ?? stackThreshold)
41918
42123
  ];
41919
42124
  // Record the base of the stack
41920
42125
  if (!defined(stack.cumulative)) {
@@ -41962,7 +42167,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
41962
42167
  stack.cumulative = (total || 1) - 1;
41963
42168
  }
41964
42169
  else {
41965
- stack.cumulative = correctFloat(pick(stack.cumulative, stackThreshold) + yNumber);
42170
+ stack.cumulative = correctFloat((stack.cumulative ?? stackThreshold) + yNumber);
41966
42171
  }
41967
42172
  stack.total = total;
41968
42173
  if (y !== null) {
@@ -42066,7 +42271,7 @@ class AxisAdditions {
42066
42271
  }
42067
42272
  /** @internal */
42068
42273
  renderStackTotals() {
42069
- 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 ||
42274
+ 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 ||
42070
42275
  renderer
42071
42276
  .g('stack-labels')
42072
42277
  .attr({
@@ -42977,8 +43182,7 @@ class AreaSeries extends AreaSeries_LineSeries {
42977
43182
  */
42978
43183
  getGraphPath(points) {
42979
43184
  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
42980
- yAxis.getThreshold(options.threshold)), connectNulls = pick(// #10574
42981
- options.connectNulls, stacking === 'percent'),
43185
+ yAxis.getThreshold(options.threshold)), connectNulls = (options.connectNulls ?? stacking === 'percent'),
42982
43186
  // To display null points in underlying stacked series, this
42983
43187
  // series graph must be broken, and the area also fall down to
42984
43188
  // fill the gap left by the null point. #2069
@@ -43031,9 +43235,9 @@ class AreaSeries extends AreaSeries_LineSeries {
43031
43235
  // Treat points with undefined plotY as null (e.g. non-positive
43032
43236
  // values on logarithmic axis, #18422)
43033
43237
  isNull = points[i].isNull || !defined(points[i].plotY);
43034
- plotX = pick(points[i].rectPlotX, points[i].plotX);
43238
+ plotX = (points[i].rectPlotX ?? points[i].plotX);
43035
43239
  yBottom = stacking ?
43036
- pick(points[i].yBottom, translatedThreshold) :
43240
+ (points[i].yBottom ?? translatedThreshold) :
43037
43241
  translatedThreshold;
43038
43242
  if (!isNull || connectNulls) {
43039
43243
  if (!connectNulls) {
@@ -43371,10 +43575,10 @@ class SplineSeries extends SplineSeries_LineSeries {
43371
43575
  }
43372
43576
  const ret = [
43373
43577
  'C',
43374
- pick(lastPoint.rightContX, lastPoint.plotX, 0),
43375
- pick(lastPoint.rightContY, lastPoint.plotY, 0),
43376
- pick(leftContX, plotX, 0),
43377
- pick(leftContY, plotY, 0),
43578
+ (lastPoint.rightContX ?? lastPoint.plotX ?? 0),
43579
+ (lastPoint.rightContY ?? lastPoint.plotY ?? 0),
43580
+ (leftContX ?? plotX ?? 0),
43581
+ (leftContY ?? plotY ?? 0),
43378
43582
  plotX,
43379
43583
  plotY
43380
43584
  ];
@@ -43819,6 +44023,8 @@ const ColumnSeriesDefaults = {
43819
44023
  * 0.25
43820
44024
  * @sample {highcharts} highcharts/plotoptions/column-pointpadding-none/
43821
44025
  * 0 for tightly packed columns
44026
+ * @sample {highcharts} highcharts/plotoptions/pie-pointpadding/
44027
+ * Pie point padding plugin
43822
44028
  *
43823
44029
  * @product highcharts highstock gantt
43824
44030
  */
@@ -44150,12 +44356,12 @@ const ColumnSeriesDefaults = {
44150
44356
  */
44151
44357
  /**
44152
44358
  * @excluding halo, lineWidth, lineWidthPlus, marker
44153
- * @product highcharts highstock
44359
+ * @product highcharts highstock gantt
44154
44360
  * @apioption series.column.states.hover
44155
44361
  */
44156
44362
  /**
44157
44363
  * @excluding halo, lineWidth, lineWidthPlus, marker
44158
- * @product highcharts highstock
44364
+ * @product highcharts highstock gantt
44159
44365
  * @apioption series.column.states.select
44160
44366
  */
44161
44367
  /**
@@ -44185,7 +44391,6 @@ const ColumnSeriesDefaults = {
44185
44391
  * */
44186
44392
 
44187
44393
 
44188
- const { animObject: ColumnSeries_animObject } = AnimationUtilities;
44189
44394
 
44190
44395
  const { parse: ColumnSeries_color } = Color_Color;
44191
44396
 
@@ -44256,7 +44461,7 @@ class ColumnSeries extends Series_Series {
44256
44461
  }
44257
44462
  else { // Run the animation
44258
44463
  translateStart = Number(series.group.attr(translateProp));
44259
- series.group.animate({ scaleY: 1 }, extend(ColumnSeries_animObject(series.options.animation), {
44464
+ series.group.animate({ scaleY: 1 }, extend(animObject(series.options.animation), {
44260
44465
  // Do the scale synchronously to ensure smooth
44261
44466
  // updating (#5030, #7228)
44262
44467
  step: function (val, fx) {
@@ -44342,7 +44547,7 @@ class ColumnSeries extends Series_Series {
44342
44547
  xAxis.tickInterval ||
44343
44548
  1), // #2610
44344
44549
  xAxis.len // #1535
44345
- ), 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,
44550
+ ), 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,
44346
44551
  // #1251, #3737
44347
44552
  colIndex = (series.columnIndex || 0) + (reverseStacks ? 1 : 0), pointXOffset = pointPadding +
44348
44553
  (groupPadding +
@@ -44592,11 +44797,11 @@ class ColumnSeries extends Series_Series {
44592
44797
  */
44593
44798
  pointAttribs(point, state) {
44594
44799
  const options = this.options, p2o = this.pointAttrToOptions || {}, strokeOption = p2o.stroke || 'borderColor', strokeWidthOption = p2o['stroke-width'] || 'borderWidth';
44595
- let stateOptions, zone, brightness, fill = (point && point.color) || this.color,
44800
+ let stateOptions, zone, brightness, fill = point?.color || this.color,
44596
44801
  // Set to fill when borderColor null:
44597
- stroke = ((point && point[strokeOption]) ||
44802
+ stroke = (point?.[strokeOption] ||
44598
44803
  options[strokeOption] ||
44599
- fill), dashstyle = (point && point.options.dashStyle) || options.dashStyle, strokeWidth = (point?.[strokeWidthOption]) ??
44804
+ fill), dashstyle = point?.options.dashStyle || options.dashStyle, strokeWidth = point?.[strokeWidthOption] ??
44600
44805
  options[strokeWidthOption] ??
44601
44806
  this[strokeWidthOption] ?? 1, opacity = (point?.isNull && options.nullInteraction) ?
44602
44807
  0 :
@@ -44617,7 +44822,7 @@ class ColumnSeries extends Series_Series {
44617
44822
  }
44618
44823
  // Select or hover states
44619
44824
  if (state && point) {
44620
- stateOptions = merge(options.states[state],
44825
+ stateOptions = merge(options.states?.[state],
44621
44826
  // #6401
44622
44827
  point.options.states?.[state] || {});
44623
44828
  brightness = stateOptions.brightness;
@@ -44627,14 +44832,13 @@ class ColumnSeries extends Series_Series {
44627
44832
  .brighten(stateOptions.brightness)
44628
44833
  .get()) || fill;
44629
44834
  stroke = stateOptions[strokeOption] || stroke;
44630
- strokeWidth =
44631
- stateOptions[strokeWidthOption] || strokeWidth;
44835
+ strokeWidth = stateOptions[strokeWidthOption] || strokeWidth;
44632
44836
  dashstyle = stateOptions.dashStyle || dashstyle;
44633
- opacity = pick(stateOptions.opacity, opacity);
44837
+ opacity = stateOptions.opacity ?? opacity;
44634
44838
  }
44635
44839
  const ret = {
44636
- fill: fill,
44637
- stroke: stroke,
44840
+ fill,
44841
+ stroke,
44638
44842
  'stroke-width': strokeWidth,
44639
44843
  opacity: point?.condemned ? 0 : opacity
44640
44844
  };
@@ -44675,6 +44879,7 @@ class ColumnSeries extends Series_Series {
44675
44879
  initialAttr = merge(shapeArgs, point.getOrigin(point.origin, shapeArgs));
44676
44880
  if (!styledMode) {
44677
44881
  initialAttr.opacity = 0;
44882
+ initialAttr['stroke-width'] = 0;
44678
44883
  }
44679
44884
  shouldUpdate = true;
44680
44885
  verb = 'animate';
@@ -44690,7 +44895,7 @@ class ColumnSeries extends Series_Series {
44690
44895
  }
44691
44896
  // Presentational
44692
44897
  if (!styledMode) {
44693
- graphic[verb](series.pointAttribs(point, (point.selected && 'select')))
44898
+ graphic[verb](series.pointAttribs(point, point.selected ? 'select' : ''))
44694
44899
  .shadow(point.allowShadow !== false && options.shadow);
44695
44900
  }
44696
44901
  graphic
@@ -44814,6 +45019,7 @@ Series_SeriesRegistry.registerSeriesType('column', ColumnSeries);
44814
45019
  * Default Export
44815
45020
  *
44816
45021
  * */
45022
+ /** @internal */
44817
45023
  /* harmony default export */ const Column_ColumnSeries = (ColumnSeries);
44818
45024
  /* *
44819
45025
  *
@@ -44850,7 +45056,6 @@ Series_SeriesRegistry.registerSeriesType('column', ColumnSeries);
44850
45056
  * */
44851
45057
 
44852
45058
 
44853
- const { getDeferredAnimation: DataLabel_getDeferredAnimation } = AnimationUtilities;
44854
45059
 
44855
45060
  const { format: DataLabel_format } = Core_Templating;
44856
45061
 
@@ -44906,7 +45111,7 @@ var DataLabel;
44906
45111
  // that parts of the align box is inside the plot area
44907
45112
  // (#12370). When stacking, it is always inside regardless
44908
45113
  // of the option (#15148).
44909
- pick(options.inside, !!this.options.stacking) &&
45114
+ (options.inside ?? !!this.options.stacking) &&
44910
45115
  alignTo &&
44911
45116
  chart.isInsidePlot(plotX, inverted ?
44912
45117
  alignTo.x + 1 :
@@ -45009,8 +45214,8 @@ var DataLabel;
45009
45214
  // zIndex: 20
45010
45215
  // }).add();
45011
45216
  // chart.renderer.circle(
45012
- // chart.plotLeft + pick(dataLabel.alignAttr.x, 0),
45013
- // chart.plotTop + pick(dataLabel.alignAttr.y, 0),
45217
+ // chart.plotLeft + (dataLabel.alignAttr.x ?? 0),
45218
+ // chart.plotTop + (dataLabel.alignAttr.y ?? 0),
45014
45219
  // 2
45015
45220
  // ).attr({
45016
45221
  // fill: 'red',
@@ -45167,7 +45372,7 @@ var DataLabel;
45167
45372
  'var(--highcharts-background-color)'), groupByIndex = [], seriesDlOptions = mergedDataLabelOptions(series);
45168
45373
  // Resolve the animation
45169
45374
  const { animation, defer } = seriesDlOptions[0], animationConfig = defer ?
45170
- DataLabel_getDeferredAnimation(chart, animation, series) :
45375
+ getDeferredAnimation(chart, animation, series) :
45171
45376
  { defer: 0, duration: 0 };
45172
45377
  fireEvent(this, 'drawDataLabels');
45173
45378
  if (series.hasDataLabels?.()) {
@@ -45193,7 +45398,7 @@ var DataLabel;
45193
45398
  if (labelEnabled) {
45194
45399
  // Create individual options structure that can be
45195
45400
  // extended without affecting others
45196
- formatString = pick(labelOptions[point.formatPrefix + 'Format'], labelOptions.format);
45401
+ formatString = (labelOptions[point.formatPrefix + 'Format'] ?? labelOptions.format);
45197
45402
  labelText = defined(formatString) ?
45198
45403
  DataLabel_format(formatString, point, chart) :
45199
45404
  (labelOptions[point.formatPrefix + 'Formatter'] ||
@@ -45201,7 +45406,9 @@ var DataLabel;
45201
45406
  rotation = labelOptions.rotation;
45202
45407
  if (!chart.styledMode) {
45203
45408
  // Determine the color
45204
- style.color = pick(labelOptions.color, style.color, isString(series.color) ? series.color : void 0, 'var(--highcharts-neutral-color-100)');
45409
+ style.color = (isString(labelOptions.color) ?
45410
+ labelOptions.color :
45411
+ void 0) ?? style.color ?? (isString(series.color) ? series.color : void 0) ?? 'var(--highcharts-neutral-color-100)';
45205
45412
  // Get automated contrast color
45206
45413
  if (style.color === 'contrast') {
45207
45414
  if (backgroundColor !== 'none') {
@@ -45933,6 +46140,8 @@ const ScatterSeriesDefaults = {
45933
46140
  * Arrays of datetime x and y
45934
46141
  * @sample {highcharts} highcharts/series/data-array-of-name-value/
45935
46142
  * Arrays of point.name and y
46143
+ * @sample {highcharts} highcharts/series-scatter/scatter-cluster/
46144
+ * Computed clusters
45936
46145
  * @sample {highcharts} highcharts/series/data-array-of-objects/
45937
46146
  * Config objects
45938
46147
  *
@@ -46000,14 +46209,15 @@ class ScatterSeries extends ScatterSeries_LineSeries {
46000
46209
  return rand - Math.floor(rand);
46001
46210
  }
46002
46211
  if (jitter) {
46003
- this.points.forEach(function (point, i) {
46004
- ['x', 'y'].forEach(function (dim, j) {
46212
+ this.points.forEach((point, i) => {
46213
+ ['x', 'y'].forEach((dim, j) => {
46005
46214
  if (jitter[dim] && !point.isNull) {
46006
- const plotProp = `plot${dim.toUpperCase()}`, axis = series[`${dim}Axis`], translatedJitter = jitter[dim] *
46007
- axis.transA;
46215
+ const plotProp = `plot${dim.toUpperCase()}`, axis = series[`${dim}Axis`];
46008
46216
  if (axis && !axis.logarithmic) {
46009
46217
  // Identify the outer bounds of the jitter range
46010
- const min = Math.max(0, (point[plotProp] || 0) - translatedJitter), max = Math.min(axis.len, (point[plotProp] || 0) + translatedJitter);
46218
+ // (#25054)
46219
+ const translatedJitter = jitter[dim] * axis.transA *
46220
+ (axis.reversed ? -1 : 1), min = (point[plotProp] || 0) - translatedJitter, max = (point[plotProp] || 0) + translatedJitter;
46011
46221
  // Find a random position within this range
46012
46222
  point[plotProp] = min +
46013
46223
  (max - min) * unrandom(i + j * len);
@@ -46081,7 +46291,7 @@ Series_SeriesRegistry.registerSeriesType('scatter', ScatterSeries);
46081
46291
  const { deg2rad: CenteredUtilities_deg2rad } = Core_Globals;
46082
46292
 
46083
46293
  /**
46084
- * @private
46294
+ * @internal
46085
46295
  */
46086
46296
  var CenteredUtilities;
46087
46297
  (function (CenteredUtilities) {
@@ -46099,7 +46309,7 @@ var CenteredUtilities;
46099
46309
  * Get the center of the pie based on the size and center options relative
46100
46310
  * to the plot area. Borrowed by the polar and gauge series types.
46101
46311
  *
46102
- * @private
46312
+ * @internal
46103
46313
  * @function Highcharts.CenteredSeriesMixin.getCenter
46104
46314
  */
46105
46315
  function getCenter() {
@@ -46112,11 +46322,13 @@ var CenteredUtilities;
46112
46322
  innerSize = parseFloat(innerSize);
46113
46323
  }
46114
46324
  const positions = [
46115
- pick(centerOption?.[0], '50%'),
46116
- pick(centerOption?.[1], '50%'),
46325
+ (centerOption?.[0] ?? '50%'),
46326
+ (centerOption?.[1] ?? '50%'),
46117
46327
  // Prevent from negative values
46118
- pick(size && size < 0 ? void 0 : options.size, '100%'),
46119
- pick(innerSize && innerSize < 0 ? void 0 : options.innerSize || 0, '0%')
46328
+ ((size && size < 0 ? void 0 : options.size) ?? '100%'),
46329
+ ((innerSize && innerSize < 0 ?
46330
+ void 0 :
46331
+ options.innerSize || 0) ?? '0%')
46120
46332
  ];
46121
46333
  for (i = 0; i < 4; ++i) {
46122
46334
  value = positions[i];
@@ -46144,7 +46356,7 @@ var CenteredUtilities;
46144
46356
  * GetStartAndEndRadians - Calculates start and end angles in radians.
46145
46357
  * Used in series types such as pie and sunburst.
46146
46358
  *
46147
- * @private
46359
+ * @internal
46148
46360
  * @function Highcharts.CenteredSeriesMixin.getStartAndEndRadians
46149
46361
  *
46150
46362
  * @param {number} [start]
@@ -46176,6 +46388,7 @@ var CenteredUtilities;
46176
46388
  * Default Export
46177
46389
  *
46178
46390
  * */
46391
+ /** @internal */
46179
46392
  /* harmony default export */ const Series_CenteredUtilities = (CenteredUtilities);
46180
46393
  /* *
46181
46394
  *
@@ -46183,7 +46396,7 @@ var CenteredUtilities;
46183
46396
  *
46184
46397
  * */
46185
46398
  /**
46186
- * @private
46399
+ * @internal
46187
46400
  * @interface Highcharts.RadianAngles
46188
46401
  */ /**
46189
46402
  * @name Highcharts.RadianAngles#end
@@ -46208,7 +46421,6 @@ var CenteredUtilities;
46208
46421
  * */
46209
46422
 
46210
46423
 
46211
- const { setAnimation: PiePoint_setAnimation } = AnimationUtilities;
46212
46424
 
46213
46425
 
46214
46426
  /* *
@@ -46316,9 +46528,9 @@ class PiePoint extends Series_Point {
46316
46528
  */
46317
46529
  slice(sliced, redraw, animation) {
46318
46530
  const series = this.series, chart = series.chart;
46319
- PiePoint_setAnimation(animation, chart);
46531
+ setAnimation(animation, chart);
46320
46532
  // Redraw is true by default
46321
- redraw = pick(redraw, true);
46533
+ redraw = (redraw ?? true);
46322
46534
  this.sliced = this.options.sliced = sliced ?? !this.sliced;
46323
46535
  // Update options.data
46324
46536
  if (series.options.data) {
@@ -47123,7 +47335,8 @@ class PieSeries extends Series_Series {
47123
47335
  // Start values
47124
47336
  graphic.attr({
47125
47337
  // Animate from inner radius (#779)
47126
- r: pick(point.startR, (series.center && series.center[3] / 2)),
47338
+ r: point.startR ??
47339
+ (series.center && series.center[3] / 2),
47127
47340
  start: startAngleRad,
47128
47341
  end: startAngleRad
47129
47342
  });
@@ -47764,7 +47977,7 @@ var PieDataLabel_ColumnDataLabel;
47764
47977
  labelPosition.computed.x = x;
47765
47978
  labelPosition.computed.y = y - topOffset;
47766
47979
  // Detect overflowing data labels
47767
- if (pick(dataLabelOptions.crop, true)) {
47980
+ if (dataLabelOptions.crop ?? true) {
47768
47981
  dataLabelWidth = dataLabel.getBBox().width;
47769
47982
  let sideOverflow;
47770
47983
  // Overflow left
@@ -48280,7 +48493,10 @@ function OverlappingDataLabels_onChartRender() {
48280
48493
  if (point.visible) {
48281
48494
  (point.dataLabels || []).forEach((label) => {
48282
48495
  const options = label.options || {};
48283
- label.labelrank = pick(options.labelrank, point.labelrank, point.shapeArgs?.height); // #4118
48496
+ label.labelrank =
48497
+ options.labelrank ??
48498
+ point.labelrank ??
48499
+ point.shapeArgs?.height; // #4118
48284
48500
  // #21725: Sync target positions for generic overlap
48285
48501
  // checking. During animations (e.g., toggling a
48286
48502
  // point), DOM positions may overlap. We force
@@ -48454,7 +48670,7 @@ function BorderRadius_arc(x, y, w, h, options = {}) {
48454
48670
  if (options.open || !options.borderRadius) {
48455
48671
  return path;
48456
48672
  }
48457
- const alpha = end - start, sinHalfAlpha = Math.sin(alpha / 2), borderRadius = Math.max(Math.min(relativeLength(options.borderRadius || 0, r - innerR),
48673
+ const alpha = end - start, sinHalfAlpha = Math.sin(alpha / 2), borderRadius = Math.max(Math.min(relativeLength(borderRadiusObject(options.borderRadius).radius, r - innerR),
48458
48674
  // Cap to half the sector radius
48459
48675
  (r - innerR) / 2,
48460
48676
  // For smaller pie slices, cap to the largest small circle that
@@ -48480,7 +48696,7 @@ function seriesOnAfterColumnTranslate() {
48480
48696
  if (this.options.borderRadius &&
48481
48697
  !(this.chart.is3d && this.chart.is3d())) {
48482
48698
  const { options, yAxis } = this, percent = options.stacking === 'percent', seriesDefault = BorderRadius_defaultOptions.plotOptions?.[this.type]
48483
- ?.borderRadius, borderRadius = optionsToObject(options.borderRadius, isObject(seriesDefault) ? seriesDefault : {}), reversed = yAxis.options.reversed;
48699
+ ?.borderRadius, borderRadius = borderRadiusObject(options.borderRadius, isObject(seriesDefault) ? seriesDefault : {}), reversed = yAxis.options.reversed;
48484
48700
  for (const point of this.points) {
48485
48701
  const { shapeArgs } = point;
48486
48702
  if (point.shapeType === 'roundedRect' && shapeArgs) {
@@ -48552,8 +48768,12 @@ function composeBorderRadius(SeriesClass, SVGElementClass, SVGRendererClass) {
48552
48768
  symbols.roundedRect = BorderRadius_roundedRect;
48553
48769
  }
48554
48770
  }
48555
- /** @internal */
48556
- function optionsToObject(options, seriesBROptions) {
48771
+ /**
48772
+ * Utility function to get the full border radius options object, from a simple
48773
+ * number or a partial options object.
48774
+ * @internal
48775
+ */
48776
+ function borderRadiusObject(options, seriesBROptions) {
48557
48777
  if (!isObject(options)) {
48558
48778
  options = { radius: options || 0 };
48559
48779
  }
@@ -48561,7 +48781,7 @@ function optionsToObject(options, seriesBROptions) {
48561
48781
  }
48562
48782
  /** @internal */
48563
48783
  function pieSeriesOnAfterTranslate() {
48564
- const borderRadius = optionsToObject(this.options.borderRadius);
48784
+ const borderRadius = borderRadiusObject(this.options.borderRadius);
48565
48785
  for (const point of this.points) {
48566
48786
  const shapeArgs = point.shapeArgs;
48567
48787
  if (shapeArgs) {
@@ -48680,7 +48900,7 @@ function BorderRadius_roundedRect(x, y, width, height, options = {}) {
48680
48900
  * Column and pie with rounded border
48681
48901
  *
48682
48902
  * @name Highcharts.BorderRadiusOptionsObject#radius
48683
- * @type {string|number}
48903
+ * @type {string|number|undefined}
48684
48904
  */ /**
48685
48905
  * The scope of the rounding for column charts or plot bands. In a stacked
48686
48906
  * column chart, the value `point` means each single point will get rounded
@@ -48695,8 +48915,7 @@ function BorderRadius_roundedRect(x, y, width, height, options = {}) {
48695
48915
  * Rounded columns
48696
48916
  *
48697
48917
  * @name Highcharts.BorderRadiusOptionsObject#scope
48698
- * @validvalue ["individual", "point", "stack"]
48699
- * @type {string}
48918
+ * @type {"individual"|"point"|"stack"|undefined}
48700
48919
  */ /**
48701
48920
  * For column charts, where in the point or stack to apply rounding. The `end`
48702
48921
  * value means only those corners at the point value will be rounded, leaving
@@ -48707,8 +48926,7 @@ function BorderRadius_roundedRect(x, y, width, height, options = {}) {
48707
48926
  * Rounding on all corners
48708
48927
  *
48709
48928
  * @name Highcharts.BorderRadiusOptionsObject#where
48710
- * @validvalue ["all", "end"]
48711
- * @type {string}
48929
+ * @type {"all"|"end"|undefined}
48712
48930
  * @default end
48713
48931
  */
48714
48932
  (''); // Keeps doclets above in JS file
@@ -48767,10 +48985,12 @@ var Responsive;
48767
48985
  */
48768
48986
  function matchResponsiveRule(rule, matches) {
48769
48987
  const condition = rule.condition, fn = condition.callback || function () {
48770
- return (this.chartWidth <= pick(condition.maxWidth, Number.MAX_VALUE) &&
48771
- this.chartHeight <= pick(condition.maxHeight, Number.MAX_VALUE) &&
48772
- this.chartWidth >= pick(condition.minWidth, 0) &&
48773
- this.chartHeight >= pick(condition.minHeight, 0));
48988
+ return (this.chartWidth <=
48989
+ (condition.maxWidth ?? Number.MAX_VALUE) &&
48990
+ this.chartHeight <=
48991
+ (condition.maxHeight ?? Number.MAX_VALUE) &&
48992
+ this.chartWidth >= (condition.minWidth ?? 0) &&
48993
+ this.chartHeight >= (condition.minHeight ?? 0));
48774
48994
  };
48775
48995
  if (fn.call(this, this)) {
48776
48996
  matches.push(rule._id);
@@ -48984,7 +49204,7 @@ var Responsive;
48984
49204
  ;// ./code/es-modules/masters/highcharts.src.js
48985
49205
  // SPDX-License-Identifier: LicenseRef-Highcharts
48986
49206
  /**
48987
- * @license Highcharts JS v13.0.0 (2026-06-11)
49207
+ * @license Highcharts JS v13.0.2 (2026-08-27)
48988
49208
  * @module highcharts/highcharts
48989
49209
  *
48990
49210
  * (c) 2009-2026 Highsoft AS
@@ -49061,12 +49281,17 @@ G.SVGElement = SVG_SVGElement;
49061
49281
  G.SVGRenderer = SVG_SVGRenderer;
49062
49282
  G.Templating = Core_Templating;
49063
49283
  G.Tick = Axis_Tick;
49064
- G.Time = Core_Time;
49284
+ G.Time = class extends Core_Time {
49285
+ constructor(options, lang) {
49286
+ const defaultOptions = Defaults.getOptions();
49287
+ super(options ?? defaultOptions.time, lang ?? defaultOptions.lang);
49288
+ }
49289
+ };
49065
49290
  G.Tooltip = Core_Tooltip;
49066
49291
  // Utilities
49067
49292
  G.addEvent = addEvent;
49068
- G.animObject = AnimationUtilities.animObject;
49069
- G.animate = AnimationUtilities.animate;
49293
+ G.animObject = animObject;
49294
+ G.animate = animate;
49070
49295
  G.arrayMax = arrayMax;
49071
49296
  G.arrayMin = arrayMin;
49072
49297
  G.attr = attr;
@@ -49093,7 +49318,7 @@ G.fireEvent = fireEvent;
49093
49318
  G.format = Core_Templating.format;
49094
49319
  G.getAlignFactor = getAlignFactor;
49095
49320
  G.getClosestDistance = getClosestDistance;
49096
- G.getDeferredAnimation = AnimationUtilities.getDeferredAnimation;
49321
+ G.getDeferredAnimation = getDeferredAnimation;
49097
49322
  G.getMagnitude = getMagnitude;
49098
49323
  G.getNestedProperty = getNestedProperty;
49099
49324
  G.getOptions = Defaults.getOptions;
@@ -49120,11 +49345,11 @@ G.relativeLength = relativeLength;
49120
49345
  G.removeEvent = removeEvent;
49121
49346
  G.replaceNested = replaceNested;
49122
49347
  G.seriesType = Series_SeriesRegistry.seriesType;
49123
- G.setAnimation = AnimationUtilities.setAnimation;
49348
+ G.setAnimation = setAnimation;
49124
49349
  G.setOptions = Defaults.setOptions;
49125
49350
  G.splat = splat;
49126
49351
  G.stableSort = stableSort;
49127
- G.stop = AnimationUtilities.stop;
49352
+ G.stop = stop;
49128
49353
  G.syncTimeout = syncTimeout;
49129
49354
  G.time = Defaults.defaultTime;
49130
49355
  G.ucfirst = ucfirst;
@@ -49233,7 +49458,7 @@ function onChartAfterSetChartSize() {
49233
49458
  navigator.top = this.plotTop + scrollButtonSize;
49234
49459
  }
49235
49460
  else {
49236
- navigator.left = pick(xAxis.left, this.plotLeft + scrollButtonSize);
49461
+ navigator.left = (xAxis.left ?? this.plotLeft + scrollButtonSize);
49237
49462
  navigator.top = navigator.navigatorOptions.top ||
49238
49463
  this.chartHeight -
49239
49464
  navigator.height -
@@ -49249,7 +49474,7 @@ function onChartAfterSetChartSize() {
49249
49474
  legendOptions.enabled &&
49250
49475
  !legendOptions.floating) ?
49251
49476
  legend.legendHeight +
49252
- pick(legendOptions.margin, 10) :
49477
+ (legendOptions.margin ?? 10) :
49253
49478
  0) -
49254
49479
  (this.titleOffset ? this.titleOffset[2] : 0);
49255
49480
  }
@@ -49274,7 +49499,7 @@ function onChartAfterUpdate(event) {
49274
49499
  (this.options.navigator.enabled ||
49275
49500
  this.options.scrollbar.enabled)) {
49276
49501
  this.scroller = this.navigator = new NavigatorConstructor(this);
49277
- if (pick(event.redraw, true)) {
49502
+ if (event.redraw ?? true) {
49278
49503
  this.redraw(event.animation); // #7067
49279
49504
  }
49280
49505
  }
@@ -49452,7 +49677,7 @@ class NavigatorAxisAdditions {
49452
49677
  */
49453
49678
  toFixedRange(pxMin, pxMax, fixedMin, fixedMax) {
49454
49679
  const axis = this.axis, halfPointRange = (axis.pointRange || 0) / 2;
49455
- let newMin = pick(fixedMin, axis.translate(pxMin, true, !axis.horiz)), newMax = pick(fixedMax, axis.translate(pxMax, true, !axis.horiz));
49680
+ let newMin = fixedMin ?? axis.translate(pxMin, true, !axis.horiz), newMax = fixedMax ?? axis.translate(pxMax, true, !axis.horiz);
49456
49681
  // Add/remove half point range to/from the extremes (#1172)
49457
49682
  if (!defined(fixedMin)) {
49458
49683
  newMin = correctFloat(newMin + halfPointRange);
@@ -49676,7 +49901,7 @@ const NavigatorDefaults = {
49676
49901
  *
49677
49902
  * @type {Highcharts.ColorType}
49678
49903
  */
49679
- maskFill: 'color-mix(var(--highcharts-highlight-color-60) 30%, transparent)',
49904
+ maskFill: 'color-mix(in srgb, var(--highcharts-highlight-color-60) 30%, transparent)', // eslint-disable-line max-len
49680
49905
  /**
49681
49906
  * The color of the line marking the currently zoomed area in the
49682
49907
  * navigator.
@@ -49815,11 +50040,18 @@ const NavigatorDefaults = {
49815
50040
  id: 'highcharts-navigator-series',
49816
50041
  className: 'highcharts-navigator-series',
49817
50042
  /**
49818
- * Sets the fill color of the navigator series.
50043
+ * Sets the color of the navigator series.
49819
50044
  *
49820
50045
  * @type {Highcharts.ColorType}
49821
50046
  * @apioption navigator.series.color
49822
50047
  */
50048
+ /**
50049
+ * Sets the fill color of the navigator series. Applies to series
50050
+ * types with a filled area, like the default `areaspline`.
50051
+ *
50052
+ * @type {Highcharts.ColorType}
50053
+ * @apioption navigator.series.fillColor
50054
+ */
49823
50055
  /**
49824
50056
  * Line color for the navigator series. Allows setting the color
49825
50057
  * while disallowing the default candlestick setting.
@@ -50019,6 +50251,7 @@ const NavigatorDefaults = {
50019
50251
 
50020
50252
 
50021
50253
 
50254
+
50022
50255
  /* *
50023
50256
  *
50024
50257
  * Constants
@@ -50029,7 +50262,7 @@ const NavigatorDefaults = {
50029
50262
  * @internal
50030
50263
  */
50031
50264
  function navigatorHandle(_x, _y, width, height, options = {}) {
50032
- const halfWidth = options.width ? options.width / 2 : width, markerPosition = 1.5, r = relativeLength(options.borderRadius || 0, Math.min(halfWidth * 2, height));
50265
+ const halfWidth = options.width ? options.width / 2 : width, markerPosition = 1.5, r = relativeLength(borderRadiusObject(options.borderRadius).radius, Math.min(halfWidth * 2, height));
50033
50266
  height = options.height || height;
50034
50267
  return [
50035
50268
  ['M', -markerPosition, height / 2 - 3.5],
@@ -50219,8 +50452,8 @@ var ScrollbarAxis;
50219
50452
  ScrollbarAxis.compose = compose;
50220
50453
  /** @internal */
50221
50454
  function getExtremes(axis) {
50222
- const axisMin = pick(axis.options?.min, axis.min);
50223
- const axisMax = pick(axis.options?.max, axis.max);
50455
+ const axisMin = (axis.options?.min ?? axis.min);
50456
+ const axisMax = (axis.options?.max ?? axis.max);
50224
50457
  return {
50225
50458
  axisMin,
50226
50459
  axisMax,
@@ -50759,7 +50992,7 @@ class Scrollbar {
50759
50992
  buttonToMaxClick(e) {
50760
50993
  const scroller = this;
50761
50994
  const range = ((scroller.to - scroller.from) *
50762
- pick(scroller.options.step, 0.2));
50995
+ (scroller.options.step ?? 0.2));
50763
50996
  scroller.updatePosition(scroller.from + range, scroller.to + range);
50764
50997
  fireEvent(scroller, 'changed', {
50765
50998
  from: scroller.from,
@@ -50771,7 +51004,7 @@ class Scrollbar {
50771
51004
  buttonToMinClick(e) {
50772
51005
  const scroller = this;
50773
51006
  const range = correctFloat(scroller.to - scroller.from) *
50774
- pick(scroller.options.step, 0.2);
51007
+ (scroller.options.step ?? 0.2);
50775
51008
  scroller.updatePosition(correctFloat(scroller.from - range), correctFloat(scroller.to - range));
50776
51009
  fireEvent(scroller, 'changed', {
50777
51010
  from: scroller.from,
@@ -50903,10 +51136,11 @@ class Scrollbar {
50903
51136
  scroller.renderer = renderer;
50904
51137
  scroller.userOptions = options;
50905
51138
  scroller.options = merge(Scrollbar_ScrollbarDefaults, Scrollbar_defaultOptions.scrollbar, options);
50906
- scroller.options.margin = pick(scroller.options.margin, 10);
51139
+ scroller.options.margin = (scroller.options.margin ?? 10);
50907
51140
  scroller.chart = chart;
50908
51141
  // Backward compatibility
50909
- scroller.size = pick(scroller.options.size, scroller.options.height);
51142
+ scroller.size = scroller.options.size ??
51143
+ scroller.options.height;
50910
51144
  // Init
50911
51145
  if (options.enabled) {
50912
51146
  scroller.render();
@@ -51196,9 +51430,9 @@ class Scrollbar {
51196
51430
  * @function Highcharts.Scrollbar#shouldUpdateExtremes
51197
51431
  */
51198
51432
  shouldUpdateExtremes(eventType) {
51199
- return (pick(this.options.liveRedraw, Core_Globals.svg &&
51433
+ return ((this.options.liveRedraw ?? (Core_Globals.svg &&
51200
51434
  !Core_Globals.isTouchDevice &&
51201
- !this.chart.boosted) ||
51435
+ !this.chart.boosted)) ||
51202
51436
  // Mouseup always should change extremes
51203
51437
  eventType === 'mouseup' ||
51204
51438
  eventType === 'touchend' ||
@@ -51718,18 +51952,18 @@ class Navigator {
51718
51952
  // it. For example hidden series, but visible navigator (#6022).
51719
51953
  if (rendered) {
51720
51954
  pxMin = 0;
51721
- pxMax = pick(xAxis.width, scrollbarXAxis.width);
51955
+ pxMax = (xAxis.width ?? scrollbarXAxis.width);
51722
51956
  }
51723
51957
  else {
51724
51958
  return;
51725
51959
  }
51726
51960
  }
51727
- navigator.left = pick(xAxis.left,
51728
- // In case of scrollbar only, without navigator
51729
- chart.plotLeft + scrollButtonSize +
51961
+ navigator.left = (xAxis.left ?? chart.plotLeft + scrollButtonSize +
51730
51962
  (inverted ? chart.plotWidth : 0));
51731
- let zoomedMax = navigator.size = navigatorSize = pick(xAxis.len, (inverted ? chart.plotHeight : chart.plotWidth) -
51732
- 2 * scrollButtonSize);
51963
+ let zoomedMax = navigator.size = navigatorSize =
51964
+ xAxis.len ??
51965
+ (inverted ? chart.plotHeight : chart.plotWidth) -
51966
+ 2 * scrollButtonSize;
51733
51967
  if (inverted) {
51734
51968
  navigatorWidth = scrollbarHeight;
51735
51969
  }
@@ -51737,8 +51971,8 @@ class Navigator {
51737
51971
  navigatorWidth = navigatorSize + 2 * scrollButtonSize;
51738
51972
  }
51739
51973
  // Get the pixel position of the handles
51740
- pxMin = pick(pxMin, xAxis.toPixels(min, true));
51741
- pxMax = pick(pxMax, xAxis.toPixels(max, true));
51974
+ pxMin = (pxMin ?? xAxis.toPixels(min, true));
51975
+ pxMax = (pxMax ?? xAxis.toPixels(max, true));
51742
51976
  // Verify (#1851, #2238)
51743
51977
  if (!isNumber(pxMin) || Math.abs(pxMin) === Infinity) {
51744
51978
  pxMin = 0;
@@ -52017,11 +52251,10 @@ class Navigator {
52017
52251
  navigator.render(0, 0, chartX - dragOffset, chartX - dragOffset + range);
52018
52252
  }
52019
52253
  if (navigator.hasDragged &&
52020
- pick(navigator.scrollbarOptions?.liveRedraw,
52254
+ (navigator.scrollbarOptions?.liveRedraw ?? (
52021
52255
  // By default, don't run live redraw on touch
52022
52256
  // devices or if the chart is in boost.
52023
- !Navigator_isTouchDevice &&
52024
- !this.chart.boosted)) {
52257
+ !Navigator_isTouchDevice && !this.chart.boosted))) {
52025
52258
  e.DOMType = e.type;
52026
52259
  setTimeout(function () {
52027
52260
  navigator.onMouseUp(e);
@@ -52210,8 +52443,10 @@ class Navigator {
52210
52443
  offset: 0,
52211
52444
  index: yAxisIndex,
52212
52445
  isInternal: true,
52213
- reversed: pick((navigatorOptions.yAxis &&
52214
- navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false), // #14060
52446
+ reversed: ((navigatorOptions.yAxis &&
52447
+ navigatorOptions.yAxis.reversed) ??
52448
+ (chart.yAxis[0] && chart.yAxis[0].reversed) ??
52449
+ false), // #14060
52215
52450
  zoomEnabled: false
52216
52451
  }, chart.inverted ? {
52217
52452
  width: height
@@ -52297,7 +52532,9 @@ class Navigator {
52297
52532
  */
52298
52533
  setOpposite() {
52299
52534
  const navigatorOptions = this.navigatorOptions, navigatorEnabled = this.navigatorEnabled, chart = this.chart;
52300
- this.opposite = pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262
52535
+ this.opposite =
52536
+ navigatorOptions.opposite ??
52537
+ Boolean(!navigatorEnabled && chart.inverted); // #6262
52301
52538
  }
52302
52539
  /**
52303
52540
  * Get the union data extremes of the chart - the outer data extremes of the
@@ -52311,9 +52548,8 @@ class Navigator {
52311
52548
  let ret;
52312
52549
  if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {
52313
52550
  ret = {
52314
- dataMin: pick(// #4053
52315
- time.parse(navAxisOptions?.min), numExt('min', time.parse(baseAxisOptions.min), baseAxis.dataMin, navAxis.dataMin, navAxis.min)),
52316
- dataMax: pick(time.parse(navAxisOptions?.max), numExt('max', time.parse(baseAxisOptions.max), baseAxis.dataMax, navAxis.dataMax, navAxis.max))
52551
+ dataMin: (time.parse(navAxisOptions?.min) ?? numExt('min', time.parse(baseAxisOptions.min), baseAxis.dataMin, navAxis.dataMin, navAxis.min)),
52552
+ dataMax: (time.parse(navAxisOptions?.max) ?? numExt('max', time.parse(baseAxisOptions.max), baseAxis.dataMax, navAxis.dataMax, navAxis.max))
52317
52553
  };
52318
52554
  }
52319
52555
  return ret;
@@ -52428,11 +52664,9 @@ class Navigator {
52428
52664
  userNavOptions.dataLabels = splat(userNavOptions.dataLabels);
52429
52665
  mergedNavSeriesOptions = merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);
52430
52666
  // Once nav series type is resolved, pick correct pointRange
52431
- mergedNavSeriesOptions.pointRange = pick(
52432
- // Strictly set pointRange in options
52433
- userNavOptions.pointRange, baseNavigatorOptions.pointRange,
52434
- // Fallback to default values, e.g. `null` for column
52435
- Navigator_defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line']?.pointRange);
52667
+ mergedNavSeriesOptions.pointRange = (userNavOptions.pointRange ??
52668
+ baseNavigatorOptions.pointRange ??
52669
+ Navigator_defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line']?.pointRange);
52436
52670
  // Merge data separately. Do a slice to avoid mutating the
52437
52671
  // navigator options from base series (#4923).
52438
52672
  const navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data, navigatorSeriesDataTable = baseNavigatorOptions.dataTable ||
@@ -52592,7 +52826,7 @@ class Navigator {
52592
52826
  * @function Highcharts.Navigator#modifyBaseAxisExtremes
52593
52827
  */
52594
52828
  modifyBaseAxisExtremes() {
52595
- const baseXAxis = this, navigator = baseXAxis.chart.navigator, baseExtremes = baseXAxis.getExtremes(), baseMin = baseExtremes.min, baseMax = baseExtremes.max, baseDataMin = baseExtremes.dataMin, baseDataMax = baseExtremes.dataMax, range = baseMax - baseMin, stickToMin = navigator?.stickToMin, stickToMax = navigator?.stickToMax, overscroll = pick(baseXAxis.ordinal?.convertOverscroll(baseXAxis.options.overscroll), 0), navigatorSeries = navigator.series && navigator.series[0], hasSetExtremes = !!baseXAxis.setExtremes,
52829
+ const baseXAxis = this, navigator = baseXAxis.chart.navigator, baseExtremes = baseXAxis.getExtremes(), baseMin = baseExtremes.min, baseMax = baseExtremes.max, baseDataMin = baseExtremes.dataMin, baseDataMax = baseExtremes.dataMax, range = baseMax - baseMin, stickToMin = navigator?.stickToMin, stickToMax = navigator?.stickToMax, overscroll = (baseXAxis.ordinal?.convertOverscroll(baseXAxis.options.overscroll) ?? 0), navigatorSeries = navigator.series && navigator.series[0], hasSetExtremes = !!baseXAxis.setExtremes,
52596
52830
  // When the extremes have been set by range selector button, don't
52597
52831
  // stick to min or max. The range selector buttons will handle the
52598
52832
  // extremes. (#5489)
@@ -52644,8 +52878,8 @@ class Navigator {
52644
52878
  Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
52645
52879
  // If the scrollbar is scrolled all the way to the right, keep right as
52646
52880
  // new data comes in, unless user set navigator.stickToMax to false.
52647
- navigator.stickToMax = pick(this.chart.options.navigator &&
52648
- this.chart.options.navigator.stickToMax, shouldStickToMax);
52881
+ navigator.stickToMax = (this.chart.options.navigator &&
52882
+ this.chart.options.navigator.stickToMax) ?? shouldStickToMax;
52649
52883
  navigator.stickToMin = navigator.shouldStickToMin(baseSeries, navigator);
52650
52884
  // Set the navigator series data to the new data of the base series
52651
52885
  if (navigatorSeries && !navigator.hasNavigatorData) {
@@ -52959,7 +53193,7 @@ class StandaloneNavigator {
52959
53193
  if (!(axis instanceof Axis_Axis)) {
52960
53194
  return;
52961
53195
  }
52962
- const { min, max } = this.navigator.xAxis, removeEventCallbacks = [];
53196
+ const navigator = this.navigator, { min, max } = navigator.xAxis, removeEventCallbacks = [];
52963
53197
  if (twoWay) {
52964
53198
  const removeSetExtremesEvent = addEvent(axis, 'setExtremes', (e) => {
52965
53199
  if (e.trigger === 'pan' ||
@@ -52972,7 +53206,7 @@ class StandaloneNavigator {
52972
53206
  });
52973
53207
  removeEventCallbacks.push(removeSetExtremesEvent);
52974
53208
  }
52975
- const removeSetRangeEvent = addEvent(this.navigator, 'setRange', (e) => {
53209
+ const removeSetRangeEvent = addEvent(navigator, 'setRange', (e) => {
52976
53210
  axis.setExtremes(e.min, e.max, e.redraw, e.animation);
52977
53211
  });
52978
53212
  removeEventCallbacks.push(removeSetRangeEvent);
@@ -52981,6 +53215,13 @@ class StandaloneNavigator {
52981
53215
  })[0];
52982
53216
  if (!boundAxis) {
52983
53217
  boundAxis = { axis, callbacks: [] };
53218
+ // A navigator bound to a yAxis defines the full range the axis
53219
+ // should cover. Stash the axis' own bounds before overriding them,
53220
+ // so `unbind` can restore them, #24716
53221
+ if (axis.coll === 'yAxis') {
53222
+ boundAxis.oldMin = axis.options.min ?? axis.min;
53223
+ boundAxis.oldMax = axis.options.max ?? axis.max;
53224
+ }
52984
53225
  this.boundAxes.push(boundAxis);
52985
53226
  }
52986
53227
  boundAxis.callbacks = removeEventCallbacks;
@@ -52990,6 +53231,12 @@ class StandaloneNavigator {
52990
53231
  nav.addSeries(series.options);
52991
53232
  }
52992
53233
  });
53234
+ // Bind a yAxis to the navigator's full range so vertical panning isn't
53235
+ // capped at the series' data extremes, #24716
53236
+ if (axis.coll === 'yAxis') {
53237
+ const { dataMin, dataMax } = navigator.xAxis.getExtremes();
53238
+ axis.update({ min: dataMin, max: dataMax }, false);
53239
+ }
52993
53240
  // Set extremes to match the navigator's extremes
52994
53241
  axis.setExtremes(min, max);
52995
53242
  // Unbind the axis before it's destroyed
@@ -53011,12 +53258,15 @@ class StandaloneNavigator {
53011
53258
  * Passing a Chart object unbinds the first X axis of the chart,
53012
53259
  * an Axis object unbinds that specific axis,
53013
53260
  * and undefined unbinds all axes bound to the navigator.
53261
+ * @param {boolean} restoreExtremes
53262
+ * Whether to restore the axis' original min/max that were
53263
+ * overridden when binding a yAxis.
53014
53264
  */
53015
- unbind(axisOrChart) {
53265
+ unbind(axisOrChart, restoreExtremes) {
53016
53266
  // If no axis or chart is provided, unbind all bound axes
53017
53267
  if (!axisOrChart) {
53018
- this.boundAxes.forEach(({ callbacks }) => {
53019
- callbacks.forEach((removeCallback) => removeCallback());
53268
+ this.boundAxes.forEach((boundAxis) => {
53269
+ this.releaseAxis(boundAxis, restoreExtremes);
53020
53270
  });
53021
53271
  this.boundAxes.length = 0;
53022
53272
  return;
@@ -53026,20 +53276,45 @@ class StandaloneNavigator {
53026
53276
  axisOrChart.xAxis[0];
53027
53277
  for (let i = this.boundAxes.length - 1; i >= 0; i--) {
53028
53278
  if (this.boundAxes[i].axis === axis) {
53029
- this.boundAxes[i].callbacks.forEach((callback) => callback());
53279
+ this.releaseAxis(this.boundAxes[i], restoreExtremes);
53030
53280
  this.boundAxes.splice(i, 1);
53031
53281
  }
53032
53282
  }
53033
53283
  }
53284
+ /**
53285
+ * Disconnect a bound axis' events and restore the axis' own bounds that
53286
+ * were overridden when binding a yAxis.
53287
+ *
53288
+ * @internal
53289
+ *
53290
+ * @param {BoundAxis} boundAxis
53291
+ * The bound axis entry to release.
53292
+ * @param {boolean} [restoreExtremes=false]
53293
+ * Whether to restore the axis' original min/max that were
53294
+ * overridden when binding a yAxis.
53295
+ */
53296
+ releaseAxis(boundAxis, restoreExtremes = false) {
53297
+ // Disconnect events
53298
+ boundAxis.callbacks.forEach((removeCallback) => removeCallback());
53299
+ // Restore the axis' original min/max that were overridden in `bind`
53300
+ if (boundAxis.axis.coll === 'yAxis' && restoreExtremes) {
53301
+ const min = boundAxis.oldMin ?? void 0, max = boundAxis.oldMax ?? void 0;
53302
+ boundAxis.axis.update({ min, max }, false);
53303
+ boundAxis.axis.setExtremes(min, max);
53304
+ }
53305
+ }
53034
53306
  /**
53035
53307
  * Destroys allocated standalone navigator elements.
53036
53308
  *
53037
53309
  * @function Highcharts.StandaloneNavigator#destroy
53310
+ *
53311
+ * @param {boolean} restoreExtremes
53312
+ * Whether to restore the axis' original min/max that were
53313
+ * overridden when binding a yAxis.
53038
53314
  */
53039
- destroy() {
53040
- // Disconnect events
53041
- this.boundAxes.forEach(({ callbacks }) => {
53042
- callbacks.forEach((removeCallback) => removeCallback());
53315
+ destroy(restoreExtremes) {
53316
+ this.boundAxes.forEach((boundAxis) => {
53317
+ this.releaseAxis(boundAxis, restoreExtremes);
53043
53318
  });
53044
53319
  this.boundAxes.length = 0;
53045
53320
  this.navigator.destroy();
@@ -53082,7 +53357,7 @@ class StandaloneNavigator {
53082
53357
  * Options for the series to be added to the navigator.
53083
53358
  */
53084
53359
  addSeries(seriesOptions) {
53085
- this.navigator.chart.addSeries(merge(seriesOptions, { showInNavigator: pick(seriesOptions.showInNavigator, true) }));
53360
+ this.navigator.chart.addSeries(merge(seriesOptions, { showInNavigator: (seriesOptions.showInNavigator ?? true) }));
53086
53361
  this.navigator.setBaseSeries();
53087
53362
  }
53088
53363
  /**
@@ -53121,8 +53396,8 @@ class StandaloneNavigator {
53121
53396
  getRange() {
53122
53397
  const { min, max } = this.navigator.chart.xAxis[0].getExtremes(), { userMin, userMax, min: dataMin, max: dataMax } = this.navigator.xAxis.getExtremes();
53123
53398
  return {
53124
- min: pick(min, dataMin),
53125
- max: pick(max, dataMax),
53399
+ min: (min ?? dataMin),
53400
+ max: (max ?? dataMax),
53126
53401
  dataMin,
53127
53402
  dataMax,
53128
53403
  userMin,
@@ -53186,9 +53461,10 @@ class StandaloneNavigator {
53186
53461
  ''; // Detach doclets above
53187
53462
 
53188
53463
  ;// ./code/es-modules/masters/modules/navigator.src.js
53464
+ /* unused harmony import specifier */ var Highcharts;
53189
53465
  // SPDX-License-Identifier: LicenseRef-Highcharts
53190
53466
  /**
53191
- * @license Highcharts JS v13.0.0 (2026-06-11)
53467
+ * @license Highcharts JS v13.0.2 (2026-08-27)
53192
53468
  * @module highcharts/modules/navigator
53193
53469
  * @requires highcharts
53194
53470
  *