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 Gantt JS v13.0.0 (2026-06-11)
3
+ * @license Highcharts Gantt JS v13.0.2 (2026-08-27)
4
4
  * @module highcharts/highcharts-gantt
5
5
  *
6
6
  * (c) 2017-2026 Highsoft AS
@@ -27,16 +27,31 @@
27
27
  return /******/ (() => { // webpackBootstrap
28
28
  /******/ "use strict";
29
29
  /******/ // The require scope
30
- /******/ var __webpack_require__ = {};
30
+ /******/ const __webpack_require__ = {};
31
31
  /******/
32
32
  /************************************************************************/
33
33
  /******/ /* webpack/runtime/define property getters */
34
34
  /******/ (() => {
35
- /******/ // define getter functions for harmony exports
35
+ /******/ // define getter/value functions for harmony exports
36
36
  /******/ __webpack_require__.d = (exports, definition) => {
37
- /******/ for(var key in definition) {
38
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
39
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
37
+ /******/ if(Array.isArray(definition)) {
38
+ /******/ var i = 0;
39
+ /******/ while(i < definition.length) {
40
+ /******/ var key = definition[i++];
41
+ /******/ var binding = definition[i++];
42
+ /******/ if(!__webpack_require__.o(exports, key)) {
43
+ /******/ if(binding === 0) {
44
+ /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
45
+ /******/ } else {
46
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
47
+ /******/ }
48
+ /******/ } else if(binding === 0) { i++; }
49
+ /******/ }
50
+ /******/ } else {
51
+ /******/ for(var key in definition) {
52
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
53
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
54
+ /******/ }
40
55
  /******/ }
41
56
  /******/ }
42
57
  /******/ };
@@ -48,7 +63,7 @@ return /******/ (() => { // webpackBootstrap
48
63
  /******/ })();
49
64
  /******/
50
65
  /************************************************************************/
51
- var __webpack_exports__ = {};
66
+ let __webpack_exports__ = {};
52
67
 
53
68
  // EXPORTS
54
69
  __webpack_require__.d(__webpack_exports__, {
@@ -84,7 +99,7 @@ var Globals;
84
99
  * Constants
85
100
  *
86
101
  * */
87
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.0', Globals.win = (typeof window !== 'undefined' ?
102
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0.2', Globals.win = (typeof window !== 'undefined' ?
88
103
  window :
89
104
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
90
105
  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 = [
@@ -411,6 +426,29 @@ const ChartDefaults = {
411
426
  * @context Highcharts.Chart
412
427
  * @apioption chart.events.load
413
428
  */
429
+ /**
430
+ * Fires while the chart is panned by mouse drag. Panning must be
431
+ * enabled through [chart.panning](#chart.panning). One parameter,
432
+ * `event`, is passed to the function, containing common event
433
+ * information as well as `event.originalEvent`, the underlying pointer
434
+ * event. Note that the event fires for every mouse move during the
435
+ * drag, not once per gesture.
436
+ *
437
+ * Calling `event.preventDefault()` or returning false prevents the
438
+ * default panning of the axes. In Highcharts Maps, and on ordinal axes
439
+ * in Highcharts Stock, the panning is applied outside the default
440
+ * action and is not prevented.
441
+ *
442
+ * Panning by touch does not fire this event, unless
443
+ * [chart.zooming.singleTouch](#chart.zooming.singleTouch) is enabled and
444
+ * no zoom type is set. Single-finger drags are then handled as mouse
445
+ * drags and fire this event.
446
+ *
447
+ * @type {Highcharts.ChartPanCallbackFunction}
448
+ * @since 7.0.2
449
+ * @context Highcharts.Chart
450
+ * @apioption chart.events.pan
451
+ */
414
452
  /**
415
453
  * Fires when the chart is redrawn, either after a call to
416
454
  * `chart.redraw()` or after an axis, series or point is modified with
@@ -999,7 +1037,7 @@ const ChartDefaults = {
999
1037
  * @type {Highcharts.ColorType}
1000
1038
  * @since 2.1.7
1001
1039
  */
1002
- selectionMarkerFill: 'color-mix(var(--highcharts-highlight-color-80) 25%, transparent)', // eslint-disable-line max-len
1040
+ selectionMarkerFill: 'color-mix(in srgb, var(--highcharts-highlight-color-80) 25%, transparent)', // eslint-disable-line max-len
1003
1041
  /**
1004
1042
  * Whether to apply a drop shadow to the global series group. This causes
1005
1043
  * all the series to have the same shadow. Contrary to the `series.shadow`
@@ -2425,7 +2463,7 @@ function getStyle(el, prop, toInt) {
2425
2463
  const css = win.getComputedStyle(el, void 0); // eslint-disable-line no-undefined
2426
2464
  if (css) {
2427
2465
  style = css.getPropertyValue(prop);
2428
- if (pick(toInt, prop !== 'opacity')) {
2466
+ if (toInt ?? prop !== 'opacity') {
2429
2467
  style = pInt(style);
2430
2468
  }
2431
2469
  }
@@ -2675,7 +2713,7 @@ function merge(extendOrSource, ...sources) {
2675
2713
  function normalizeTickInterval(interval, multiples, magnitude, allowDecimals, hasTickAmount) {
2676
2714
  let i, retInterval = interval;
2677
2715
  // Round to a tenfold of 1, 2, 2.5 or 5
2678
- magnitude = pick(magnitude, getMagnitude(interval));
2716
+ magnitude = (magnitude ?? getMagnitude(interval));
2679
2717
  const normalized = interval / magnitude;
2680
2718
  // Multiples for a linear scale
2681
2719
  if (!multiples) {
@@ -2788,20 +2826,22 @@ function pad(number, length, padder) {
2788
2826
  .replace('-', '')
2789
2827
  .length).join(padder || '0') + number;
2790
2828
  }
2791
- /* eslint-disable jsdoc/check-param-names */
2829
+ /* eslint-disable valid-jsdoc */
2792
2830
  /**
2793
2831
  * Return the first value that is not null or undefined.
2794
2832
  *
2833
+ * @deprecated 13.0.2
2834
+ * Use nullish coalescing (`??`) or explicit fallback logic instead.
2835
+ *
2795
2836
  * @function Highcharts.pick<T>
2796
2837
  *
2797
- * @param {...Array<T|null|undefined>} items
2838
+ * @param {...(T|null|undefined)} args
2798
2839
  * Variable number of arguments to inspect.
2799
2840
  *
2800
2841
  * @return {T}
2801
2842
  * The value of the first argument that is not null or undefined.
2802
2843
  */
2803
- function pick() {
2804
- const args = arguments;
2844
+ function pick(...args) {
2805
2845
  const length = args.length;
2806
2846
  for (let i = 0; i < length; i++) {
2807
2847
  const arg = args[i];
@@ -2810,7 +2850,7 @@ function pick() {
2810
2850
  }
2811
2851
  }
2812
2852
  }
2813
- /* eslint-enable jsdoc/check-param-names */
2853
+ /* eslint-enable valid-jsdoc */
2814
2854
  /**
2815
2855
  * Shortcut for parseInt
2816
2856
  *
@@ -3193,7 +3233,8 @@ function insertItem(item, collection) {
3193
3233
  !collection[i] ||
3194
3234
  // Handle index option, the element to insert has lower index
3195
3235
  (isNumber(indexOption) &&
3196
- indexOption < pick(collection[i].options.index, collection[i]._i)) ||
3236
+ indexOption < (collection[i].options.index ??
3237
+ collection[i]._i)) ||
3197
3238
  // Insert the new item before other internal items
3198
3239
  // (navigator)
3199
3240
  collection[i].options.isInternal) {
@@ -3279,7 +3320,7 @@ const uniqueKey = (function () {
3279
3320
  * State of the serial mode.
3280
3321
  */
3281
3322
  function useSerialIds(mode) {
3282
- return (serialMode = pick(mode, serialMode));
3323
+ return (serialMode = (mode ?? serialMode));
3283
3324
  }
3284
3325
  /* *
3285
3326
  *
@@ -3745,6 +3786,10 @@ const isDateTimeFormatOptions = (obj) => obj.main === void 0;
3745
3786
  *
3746
3787
  * @param {Highcharts.TimeOptions} [options] Time options as defined in
3747
3788
  * [chart.options.time](/highcharts/time).
3789
+ *
3790
+ * @param {Highcharts.LangOptions} [lang]
3791
+ * Language options. When `options.locale` is not set, `lang.locale` is used as
3792
+ * the locale fallback for locale-aware date formatting.
3748
3793
  */
3749
3794
  class TimeBase {
3750
3795
  /* *
@@ -3763,8 +3808,8 @@ class TimeBase {
3763
3808
  };
3764
3809
  this.variableTimezone = false;
3765
3810
  this.Date = TimeBase_win.Date;
3766
- this.update(options);
3767
3811
  this.lang = lang;
3812
+ this.update(options);
3768
3813
  }
3769
3814
  /* *
3770
3815
  *
@@ -3876,7 +3921,9 @@ class TimeBase {
3876
3921
  /**
3877
3922
  * Shorthand to get a cached `Intl.DateTimeFormat` instance.
3878
3923
  */
3879
- dateTimeFormat(options, timestamp, locale = this.options.locale || pageLang) {
3924
+ dateTimeFormat(options, timestamp, locale = (this.options.locale ||
3925
+ this.lang?.locale ||
3926
+ pageLang)) {
3880
3927
  const cacheKey = JSON.stringify(options) + locale;
3881
3928
  if (isString(options)) {
3882
3929
  options = this.str2dtf(options);
@@ -3962,17 +4009,16 @@ class TimeBase {
3962
4009
  // eslint-disable-next-line new-cap
3963
4010
  let d = this.Date.UTC(year, month, date, hours, minutes || 0, seconds || 0, milliseconds || 0);
3964
4011
  if (this.timezone !== 'UTC') {
3965
- const offset = this.getTimezoneOffset(d);
4012
+ const offset = this.getTimezoneOffset(d), localHours = (hours - offset / timeUnits.hour + 24) % 24;
3966
4013
  d += offset;
3967
- // Adjustments close to DST transitions
3968
4014
  if (
3969
- // Optimize for speed by limiting the number of calls to
3970
- // `getTimezoneOffset`. According to
4015
+ // Limit the number of calls to `getTimezoneOffset` to months
4016
+ // where DST changes may occur. According to
3971
4017
  // https://en.wikipedia.org/wiki/Daylight_saving_time_by_country,
3972
4018
  // DST change may only occur in these months.
3973
4019
  [2, 3, 8, 9, 10, 11].indexOf(month) !== -1 &&
3974
- // DST transitions occur only in the night-time
3975
- (hours < 5 || hours > 20)) {
4020
+ // DST changes only occur at night (#24420)
4021
+ (localHours < 5 || localHours > 20)) {
3976
4022
  const newOffset = this.getTimezoneOffset(d);
3977
4023
  if (offset !== newOffset) {
3978
4024
  d += newOffset - offset;
@@ -6709,6 +6755,9 @@ const defaultOptions = {
6709
6755
  * below the column, but as `followTouchMove` is true, the tooltip will
6710
6756
  * jump from column to column as the user swipes across the plot area.
6711
6757
  *
6758
+ * @sample {highcharts} highcharts/tooltip/followtouchmove/
6759
+ * Tooltip follows touch move
6760
+ *
6712
6761
  * @type {boolean}
6713
6762
  * @default {highcharts} true
6714
6763
  * @default {highstock} true
@@ -7491,10 +7540,14 @@ const defaultOptions = {
7491
7540
  * @type {Highcharts.CSSObject}
7492
7541
  */
7493
7542
  style: {
7494
- /** @type {Highcharts.ColorType} */
7543
+ /**
7544
+ * @type {Highcharts.ColorType}
7545
+ */
7495
7546
  color: 'var(--highcharts-neutral-color-80)',
7496
7547
  cursor: 'default',
7497
- /** @type {number|string} */
7548
+ /**
7549
+ * @type {number|string}
7550
+ */
7498
7551
  fontSize: '0.8em'
7499
7552
  },
7500
7553
  /**
@@ -7810,6 +7863,41 @@ const DefaultOptions = {
7810
7863
  * @param {global.Event} event
7811
7864
  * The event that occurred.
7812
7865
  */
7866
+ /**
7867
+ * Gets fired while the chart is panned by mouse drag. Calling
7868
+ * `event.preventDefault()` or returning `false` prevents the default panning
7869
+ * of the axes.
7870
+ *
7871
+ * @callback Highcharts.ChartPanCallbackFunction
7872
+ *
7873
+ * @param {Highcharts.Chart} this
7874
+ * The chart on which the event occurred.
7875
+ *
7876
+ * @param {Highcharts.ChartPanEventObject} event
7877
+ * The event that occurred.
7878
+ */
7879
+ /**
7880
+ * Contains common event information. Through the `originalEvent` property you
7881
+ * can access the pointer event that triggered the panning.
7882
+ *
7883
+ * @interface Highcharts.ChartPanEventObject
7884
+ */ /**
7885
+ * The pointer event that triggered the panning.
7886
+ * @name Highcharts.ChartPanEventObject#originalEvent
7887
+ * @type {Highcharts.PointerEventObject}
7888
+ */ /**
7889
+ * Prevents the default behavior of the event.
7890
+ * @name Highcharts.ChartPanEventObject#preventDefault
7891
+ * @type {Function}
7892
+ */ /**
7893
+ * The event target.
7894
+ * @name Highcharts.ChartPanEventObject#target
7895
+ * @type {Highcharts.Chart}
7896
+ */ /**
7897
+ * The event type.
7898
+ * @name Highcharts.ChartPanEventObject#type
7899
+ * @type {"pan"}
7900
+ */
7813
7901
  /**
7814
7902
  * Fires when the chart is redrawn, either after a call to `chart.redraw()` or
7815
7903
  * after an axis, series or point is modified with the `redraw` option set to
@@ -8185,7 +8273,9 @@ Color.None = new Color(''); // Must be last static for init
8185
8273
  */
8186
8274
  /**
8187
8275
  * A valid color type than can be parsed and handled by Highcharts. It can be a
8188
- * color string, a gradient object, or a pattern object.
8276
+ * color string (including CSS expressions), a gradient object, or a pattern
8277
+ * object. Read more about colors in the [Highcharts
8278
+ * documentation](https://www.highcharts.com/docs/chart-design-and-style/colors).
8189
8279
  *
8190
8280
  * @typedef {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject} Highcharts.ColorType
8191
8281
  */
@@ -8417,24 +8507,22 @@ class Fx {
8417
8507
  */
8418
8508
  update() {
8419
8509
  const elem = this.elem, prop = this.prop, // If destroyed, it is null
8420
- now = this.now, step = this.options.step;
8510
+ now = this.now ?? 1, step = this.options.step;
8421
8511
  // Animation setter defined from outside
8422
8512
  if (this[prop + 'Setter']) {
8423
8513
  this[prop + 'Setter']();
8424
8514
  // Other animations on SVGElement
8425
8515
  }
8426
- else if (elem.attr) {
8516
+ else if (elem && elem.attr) {
8427
8517
  if (elem.element) {
8428
- elem.attr(prop, now, null, true);
8518
+ elem.attr(prop, now, void 0, true);
8429
8519
  }
8430
8520
  // HTML styles, raw HTML content like container size
8431
8521
  }
8432
- else {
8433
- elem.style[prop] = now + this.unit;
8434
- }
8435
- if (step) {
8436
- step.call(elem, now, this);
8522
+ else if (elem) {
8523
+ elem.style[prop] = now + (this.unit || '');
8437
8524
  }
8525
+ step?.call(elem, now, this);
8438
8526
  }
8439
8527
  /**
8440
8528
  * Run an animation.
@@ -8452,12 +8540,10 @@ class Fx {
8452
8540
  *
8453
8541
  */
8454
8542
  run(from, to, unit) {
8455
- const self = this, options = self.options, timer = function (gotoEnd) {
8456
- return timer.stopped ? false : self.step(gotoEnd);
8457
- }, requestAnimationFrame = Fx_win.requestAnimationFrame ||
8543
+ const { elem, options } = this, { complete, curAnim = {} } = options, timer = (gotoEnd) => (timer.stopped ? false : this.step(gotoEnd)), requestAnimationFrame = Fx_win.requestAnimationFrame ||
8458
8544
  function (step) {
8459
8545
  setTimeout(step, 13);
8460
- }, step = function () {
8546
+ }, step = () => {
8461
8547
  for (let i = 0; i < Fx.timers.length; i++) {
8462
8548
  if (!Fx.timers[i]()) {
8463
8549
  Fx.timers.splice(i--, 1);
@@ -8467,11 +8553,11 @@ class Fx {
8467
8553
  requestAnimationFrame(step);
8468
8554
  }
8469
8555
  };
8470
- if (from === to && !this.elem['forceAnimate:' + this.prop]) {
8471
- delete options.curAnim[this.prop];
8472
- if (options.complete &&
8473
- Object.keys(options.curAnim).length === 0) {
8474
- options.complete.call(this.elem);
8556
+ if (from === to && !elem['forceAnimate:' + this.prop]) {
8557
+ delete curAnim[this.prop];
8558
+ if (complete &&
8559
+ Object.keys(curAnim).length === 0) {
8560
+ complete.call(elem);
8475
8561
  }
8476
8562
  }
8477
8563
  else { // #7166
@@ -8481,7 +8567,7 @@ class Fx {
8481
8567
  this.unit = unit;
8482
8568
  this.now = this.start;
8483
8569
  this.pos = 0;
8484
- timer.elem = this.elem;
8570
+ timer.elem = elem;
8485
8571
  timer.prop = this.prop;
8486
8572
  if (timer() && Fx.timers.push(timer) === 1) {
8487
8573
  requestAnimationFrame(step);
@@ -8502,7 +8588,8 @@ class Fx {
8502
8588
  step(gotoEnd) {
8503
8589
  const t = +new Date(), options = this.options, elem = this.elem, complete = options.complete, duration = options.duration, curAnim = options.curAnim;
8504
8590
  let ret, done;
8505
- if (!!elem.attr && !elem.element) { // #2616, element is destroyed
8591
+ // #2616, element is destroyed
8592
+ if (elem?.attr && !elem.element) {
8506
8593
  ret = false;
8507
8594
  }
8508
8595
  else if (gotoEnd || t >= duration + this.startTime) {
@@ -8731,7 +8818,8 @@ Fx.timers = [];
8731
8818
  * so it should be moved to the SVGRenderer.
8732
8819
  */
8733
8820
  function setAnimation(animation, chart) {
8734
- chart.renderer.globalAnimation = pick(animation, chart.options.chart.animation, true);
8821
+ chart.renderer.globalAnimation =
8822
+ animation ?? chart.options.chart.animation ?? true;
8735
8823
  }
8736
8824
  /**
8737
8825
  * Get the animation in object form, where a disabled animation is always
@@ -8792,6 +8880,11 @@ function getDeferredAnimation(chart, animation, series) {
8792
8880
  /**
8793
8881
  * The global animate method, which uses Fx to create individual animators.
8794
8882
  *
8883
+ * @sample highcharts/members/renderer-basic
8884
+ * SVG elements with animation
8885
+ * @sample highcharts/members/animate
8886
+ * Animation without an owner element
8887
+ *
8795
8888
  * @function Highcharts.animate
8796
8889
  *
8797
8890
  * @param {Highcharts.HTMLDOMElement|Highcharts.SVGElement} el
@@ -8807,14 +8900,12 @@ function getDeferredAnimation(chart, animation, series) {
8807
8900
  *
8808
8901
  * @return {void}
8809
8902
  */
8810
- function animate(el, params, opt) {
8811
- let start, unit = '', end, fx, args;
8903
+ function animate(el, params = { pos: 1 }, opt) {
8812
8904
  if (!isObject(opt)) { // Number or undefined/null
8813
- args = arguments;
8814
8905
  opt = {
8815
- duration: args[2],
8816
- easing: args[3],
8817
- complete: args[4]
8906
+ duration: arguments[2],
8907
+ easing: arguments[3],
8908
+ complete: arguments[4]
8818
8909
  };
8819
8910
  }
8820
8911
  if (!isNumber(opt.duration)) {
@@ -8824,22 +8915,23 @@ function animate(el, params, opt) {
8824
8915
  opt.easing :
8825
8916
  (Math[opt.easing] || Math.easeInOutSine);
8826
8917
  opt.curAnim = merge(params);
8827
- objectEach(params, function (val, prop) {
8918
+ objectEach(params, (val, prop) => {
8828
8919
  // Stop current running animation of this property
8829
- stop(el, prop);
8830
- fx = new Animation_Fx(el, opt, prop);
8831
- end = void 0;
8832
- if (prop === 'd' && isArray(params.d)) {
8833
- fx.paths = fx.initPath(el, el.pathArray, params.d);
8834
- fx.toD = params.d;
8835
- start = 0;
8920
+ if (el) {
8921
+ stop(el, prop);
8922
+ }
8923
+ const fx = new Animation_Fx(el, opt, prop), d = params.d;
8924
+ let start = 0, end = void 0, unit = '';
8925
+ if (prop === 'd' && isArray(d)) {
8926
+ fx.paths = fx.initPath(el, el.pathArray, d);
8927
+ fx.toD = d;
8836
8928
  end = 1;
8837
8929
  }
8838
- else if (el.attr) {
8930
+ else if (el?.attr) {
8839
8931
  start = el.attr(prop);
8840
8932
  }
8841
- else {
8842
- start = parseFloat(getStyle(el, prop)) || 0;
8933
+ else if (el) {
8934
+ start = +(getStyle(el, prop) || 0);
8843
8935
  if (prop !== 'opacity') {
8844
8936
  unit = 'px';
8845
8937
  }
@@ -8850,7 +8942,10 @@ function animate(el, params, opt) {
8850
8942
  if (typeof end === 'string' && end.match('px')) {
8851
8943
  end = end.replace(/px/g, ''); // #4351
8852
8944
  }
8853
- fx.run(start, end, unit);
8945
+ // Empty dashstyle animation crashes treemap on hover
8946
+ if (defined(end)) {
8947
+ fx.run(start, end, unit);
8948
+ }
8854
8949
  });
8855
8950
  }
8856
8951
  /**
@@ -8874,28 +8969,11 @@ function animate(el, params, opt) {
8874
8969
  * improvement in all cases where we stop the animation from .attr. Instead of
8875
8970
  * stopping everything, we can just stop the actual attributes we're setting.
8876
8971
  */
8877
- function stop(el, prop) {
8878
- let i = Animation_Fx.timers.length;
8879
- // Remove timers related to this element (#4519)
8880
- while (i--) {
8881
- if (Animation_Fx.timers[i].elem === el && (!prop || prop === Animation_Fx.timers[i].prop)) {
8882
- Animation_Fx.timers[i].stopped = true; // #4667
8883
- }
8972
+ const stop = (el, prop) => Animation_Fx.timers.forEach((timer) => {
8973
+ if (timer.elem === el && (!prop || prop === timer.prop)) {
8974
+ timer.stopped = true; // #4667
8884
8975
  }
8885
- }
8886
- const animationExports = {
8887
- animate,
8888
- animObject,
8889
- getDeferredAnimation,
8890
- setAnimation,
8891
- stop
8892
- };
8893
- /* *
8894
- *
8895
- * Default Export
8896
- *
8897
- * */
8898
- /* harmony default export */ const AnimationUtilities = (animationExports);
8976
+ });
8899
8977
  /* *
8900
8978
  *
8901
8979
  * API Options
@@ -9200,7 +9278,9 @@ class AST {
9200
9278
  doc = { body };
9201
9279
  }
9202
9280
  const appendChildNodes = (node, addTo) => {
9203
- const tagName = node.nodeName.toLowerCase();
9281
+ // Preserve the camelCase of SVG tags via localName (#24702).
9282
+ const tagName = node.localName ||
9283
+ node.nodeName.toLowerCase();
9204
9284
  // Add allowed tags
9205
9285
  const astNode = {
9206
9286
  tagName
@@ -9314,6 +9394,8 @@ AST.allowedAttributes = [
9314
9394
  'src',
9315
9395
  'startOffset',
9316
9396
  'stdDeviation',
9397
+ 'stop-color',
9398
+ 'stop-opacity',
9317
9399
  'stroke-linecap',
9318
9400
  'stroke-width',
9319
9401
  'stroke',
@@ -9800,7 +9882,7 @@ function format(str = '', ctx, owner) {
9800
9882
  replacement = `"${replacement}"`;
9801
9883
  }
9802
9884
  }
9803
- str = str.replace(match.find, pick(replacement, ''));
9885
+ str = str.replace(match.find, (replacement ?? ''));
9804
9886
  });
9805
9887
  return hasSub ? format(str, ctx, owner) : str;
9806
9888
  }
@@ -9917,9 +9999,7 @@ const Templating = {
9917
9999
  * API Declarations
9918
10000
  * */
9919
10001
  /**
9920
- * @interface Highcharts.Templating
9921
- *
9922
- * The Highcharts.Templating interface provides a structure for defining
10002
+ * The Highcharts.TemplatingObject interface provides a structure for defining
9923
10003
  * helpers. Helpers can be used as conditional blocks or functions within
9924
10004
  * expressions. Highcharts includes several built-in helpers and supports
9925
10005
  * the addition of custom helpers.
@@ -9927,16 +10007,21 @@ const Templating = {
9927
10007
  * @see [More information](
9928
10008
  * https://www.highcharts.com/docs/chart-concepts/templating#helpers)
9929
10009
  *
9930
- * @example
9931
- * // Define a custom helper to return the absolute value of a number
9932
- * Highcharts.Templating.helpers.abs = value => Math.abs(value);
9933
- *
9934
- * // Usage in a format string
9935
- * format: 'Absolute value: {abs point.y}'
9936
- *
9937
- * @name Highcharts.Templating#helpers
9938
- * @type {Record<string, Function>}
9939
- */
10010
+ * @interface Highcharts.TemplatingObject
10011
+ */ /**
10012
+ * @example
10013
+ * // Define a custom helper to return the absolute value of a number
10014
+ * Highcharts.Templating.helpers.abs = value => Math.abs(value);
10015
+ *
10016
+ * // Usage in a format string
10017
+ * format: 'Absolute value: {abs point.y}'
10018
+ *
10019
+ * @name Highcharts.TemplatingObject#helpers
10020
+ * @type {Record<string, Function>}
10021
+ */ /**
10022
+ * @name Highcharts.Templating
10023
+ * @type {Highcharts.TemplatingObject}
10024
+ */
9940
10025
  (''); // Keeps doclets above in file
9941
10026
 
9942
10027
  ;// ./code/es-modules/Core/Renderer/RendererUtilities.js
@@ -10046,7 +10131,7 @@ var RendererUtilities;
10046
10131
  boxes = boxes.map((box) => ({
10047
10132
  size: box.size,
10048
10133
  targets: [box.target],
10049
- align: pick(box.align, 0.5)
10134
+ align: (box.align ?? 0.5)
10050
10135
  }));
10051
10136
  while (overlapping) {
10052
10137
  // Initial positions: target centered in box
@@ -10145,7 +10230,6 @@ var RendererUtilities;
10145
10230
  * */
10146
10231
 
10147
10232
 
10148
- const { animate: SVGElement_animate, animObject: SVGElement_animObject, stop: SVGElement_stop } = AnimationUtilities;
10149
10233
 
10150
10234
 
10151
10235
  const { deg2rad, doc: SVGElement_doc, svg, SVG_NS: SVGElement_SVG_NS, win: SVGElement_win, isFirefox } = Core_Globals;
@@ -10205,8 +10289,10 @@ class SVGElement {
10205
10289
  * Property value.
10206
10290
  */
10207
10291
  _defaultGetter(key) {
10208
- let ret = pick(this[key + 'Value'], // Align getter
10209
- this[key], this.element ? this.element.getAttribute(key) : null, 0);
10292
+ let ret = (this[key + 'Value'] ??
10293
+ this[key] ??
10294
+ (this.element ? this.element.getAttribute(key) : null) ??
10295
+ 0);
10210
10296
  if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
10211
10297
  ret = parseFloat(ret);
10212
10298
  }
@@ -10369,7 +10455,7 @@ class SVGElement {
10369
10455
  }
10370
10456
  alignTo = void 0; // Do not use the box
10371
10457
  }
10372
- const alignToBox = pick(alignTo, renderer[alignToKey], renderer),
10458
+ const alignToBox = alignTo ?? renderer[alignToKey] ?? renderer,
10373
10459
  // Default: left align
10374
10460
  x = (alignToBox.x || 0) + (alignOptions.x || 0) +
10375
10461
  ((alignToBox.width || 0) - (alignOptions.width || 0)) *
@@ -10429,7 +10515,7 @@ class SVGElement {
10429
10515
  * Returns the SVGElement for chaining.
10430
10516
  */
10431
10517
  animate(params, options, complete) {
10432
- const animOptions = SVGElement_animObject(pick(options, this.renderer.globalAnimation, true)), deferTime = animOptions.defer;
10518
+ const animOptions = animObject((options ?? this.renderer.globalAnimation ?? true)), deferTime = animOptions.defer;
10433
10519
  // When the page is hidden save resources in the background by not
10434
10520
  // running animation at all (#9749).
10435
10521
  if (SVGElement_doc.hidden) {
@@ -10444,7 +10530,7 @@ class SVGElement {
10444
10530
  // If defer option is defined delay the animation #12901
10445
10531
  syncTimeout(() => {
10446
10532
  if (this.element) {
10447
- SVGElement_animate(this, params, animOptions);
10533
+ animate(this, params, animOptions);
10448
10534
  }
10449
10535
  }, deferTime);
10450
10536
  }
@@ -10618,7 +10704,7 @@ class SVGElement {
10618
10704
  // Unless .attr is from the animator update, stop current
10619
10705
  // running animation of this property
10620
10706
  if (!continueAnimation) {
10621
- SVGElement_stop(this, key);
10707
+ stop(this, key);
10622
10708
  }
10623
10709
  // Special handling of symbol attributes
10624
10710
  if (this.symbolName &&
@@ -10921,7 +11007,7 @@ class SVGElement {
10921
11007
  .split(','); // Ending comma
10922
11008
  i = v.length;
10923
11009
  while (i--) {
10924
- v[i] = '' + (pInt(v[i]) * pick(strokeWidth, NaN));
11010
+ v[i] = '' + (pInt(v[i]) * (strokeWidth ?? NaN));
10925
11011
  }
10926
11012
  value = v.join(',').replace(/NaN/g, 'none'); // #3226
10927
11013
  this.element.setAttribute('stroke-dasharray', value);
@@ -10938,7 +11024,7 @@ class SVGElement {
10938
11024
  // Remove events
10939
11025
  element.onclick = element.onmouseout = element.onmouseover =
10940
11026
  element.onmousemove = element.point = null;
10941
- SVGElement_stop(wrapper); // Stop running animations
11027
+ stop(wrapper); // Stop running animations
10942
11028
  if (wrapper.clipPath && ownerSVGElement) {
10943
11029
  const clipPath = wrapper.clipPath;
10944
11030
  // Look for existing references to this clipPath and remove them
@@ -11061,7 +11147,7 @@ class SVGElement {
11061
11147
  * The bounding box with `x`, `y`, `width` and `height` properties.
11062
11148
  */
11063
11149
  getBBox(reload, rot) {
11064
- 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 &&
11150
+ 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 &&
11065
11151
  SVGElement.prototype.getStyle.call(element, 'font-size')) : (styles.fontSize), cacheKey = this.getBBoxCacheKey([
11066
11152
  renderer.rootFontSize,
11067
11153
  this.textWidth, // #7874, also useHTML
@@ -11587,7 +11673,7 @@ class SVGElement {
11587
11673
  symbolAttr(hash) {
11588
11674
  const wrapper = this;
11589
11675
  SVGElement.symbolCustomAttribs.forEach(function (key) {
11590
- wrapper[key] = pick(hash[key], wrapper[key]);
11676
+ wrapper[key] = (hash[key] ?? wrapper[key]);
11591
11677
  });
11592
11678
  wrapper.attr({
11593
11679
  d: wrapper.renderer.symbols[wrapper.symbolName](wrapper.x, wrapper.y, wrapper.width, wrapper.height, wrapper)
@@ -11627,7 +11713,7 @@ class SVGElement {
11627
11713
  }
11628
11714
  // Replace text content and escape markup
11629
11715
  titleNode.textContent = replaceNested(// Scan #[73]
11630
- pick(value, ''), // #3276, #3895
11716
+ (value ?? ''), // #3276, #3895
11631
11717
  [/<[^>]*>/g, '']).replace(/&lt;/g, '<').replace(/&gt;/g, '>');
11632
11718
  }
11633
11719
  /**
@@ -12405,7 +12491,7 @@ class SVGLabel extends SVG_SVGElement {
12405
12491
  if ((this.textStr && this.bBox.width === 0 && this.bBox.height === 0) || this.rotation) {
12406
12492
  this.updateBoxSize();
12407
12493
  }
12408
- const { padding, height = 0, translateX = 0, translateY = 0, width = 0 } = this, paddingLeft = pick(this.paddingLeft, padding), rotation = rot ?? (this.rotation || 0);
12494
+ const { padding, height = 0, translateX = 0, translateY = 0, width = 0 } = this, paddingLeft = (this.paddingLeft ?? padding), rotation = rot ?? (this.rotation || 0);
12409
12495
  let bBox = {
12410
12496
  width,
12411
12497
  height,
@@ -12458,7 +12544,7 @@ class SVGLabel extends SVG_SVGElement {
12458
12544
  this.attr({
12459
12545
  // Alignment is available now (#3295, 0 not rendered if given
12460
12546
  // as a value)
12461
- text: pick(this.textStr, ''),
12547
+ text: (this.textStr ?? ''),
12462
12548
  x: this.x || 0,
12463
12549
  y: this.y || 0
12464
12550
  });
@@ -12614,8 +12700,8 @@ class SVGLabel extends SVG_SVGElement {
12614
12700
  /** @internal */
12615
12701
  getPaddedWidth() {
12616
12702
  const padding = this.padding;
12617
- const paddingLeft = pick(this.paddingLeft, padding);
12618
- const paddingRight = pick(this.paddingRight, padding);
12703
+ const paddingLeft = (this.paddingLeft ?? padding);
12704
+ const paddingRight = (this.paddingRight ?? padding);
12619
12705
  return ((this.widthSetting || this.bBox.width || 0) +
12620
12706
  paddingLeft +
12621
12707
  paddingRight);
@@ -12716,7 +12802,7 @@ function arc(cx, cy, w, h, options) {
12716
12802
  const arc = [];
12717
12803
  if (options) {
12718
12804
  let start = options.start || 0, end = options.end || 0;
12719
- const rx = pick(options.r, w), ry = pick(options.r, h || w),
12805
+ const rx = (options.r ?? w), ry = (options.r ?? (h || w)),
12720
12806
  // Subtract a small number to prevent cos and sin of start and end
12721
12807
  // from becoming equal on 360 arcs (#1561). See "Arc proximity"
12722
12808
  // tests at samples/unit-tests/svgrenderer/symbol/demo.js
@@ -12726,16 +12812,17 @@ function arc(cx, cy, w, h, options) {
12726
12812
  start = Math.PI / 2;
12727
12813
  end = Math.PI * 2.5 - proximity;
12728
12814
  }
12729
- 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),
12815
+ 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),
12730
12816
  // Proximity takes care of rounding errors around PI (#6971)
12731
- longArc = pick(options.longArc, end - start - Math.PI < proximity ? 0 : 1);
12817
+ longArc = options.longArc ??
12818
+ (end - start - Math.PI < proximity ? 0 : 1);
12732
12819
  let arcSegment = [
12733
12820
  'A', // ArcTo
12734
12821
  rx, // X radius
12735
12822
  ry, // Y radius
12736
12823
  0, // Slanting
12737
12824
  longArc, // Long or short arc
12738
- pick(options.clockwise, 1), // Clockwise
12825
+ (options.clockwise ?? 1), // Clockwise
12739
12826
  // Use a static pixel offset for full circle (#21701)
12740
12827
  cx + (fullCircle ? 0.001 : rx * cosEnd),
12741
12828
  cy + ry * sinEnd
@@ -13266,7 +13353,7 @@ class TextBuilder {
13266
13353
  * @internal
13267
13354
  */
13268
13355
  buildSVG() {
13269
- 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,
13356
+ 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,
13270
13357
  // The buildText code is quite heavy, so if we're not changing
13271
13358
  // something that affects the text, skip it (#6113).
13272
13359
  textCache = [
@@ -13850,7 +13937,7 @@ class SVGRenderer {
13850
13937
  this.url = this.getReferenceURL();
13851
13938
  // Add description
13852
13939
  const desc = this.createElement('desc').add();
13853
- desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.0'));
13940
+ desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0.2'));
13854
13941
  this.defs = this.createElement('defs').add();
13855
13942
  this.allowHTML = allowHTML;
13856
13943
  this.forExport = forExport;
@@ -14636,7 +14723,7 @@ class SVGRenderer {
14636
14723
  this.attr('height')
14637
14724
  });
14638
14725
  },
14639
- duration: pick(animate, true) ? void 0 : 0
14726
+ duration: (animate ?? true) ? void 0 : 0
14640
14727
  });
14641
14728
  renderer.alignElements();
14642
14729
  }
@@ -14794,8 +14881,8 @@ class SVGRenderer {
14794
14881
  // The image width is not always the same as the symbol width. The
14795
14882
  // image may be centered within the symbol, as is the case when
14796
14883
  // image shapes are used as label backgrounds, for example in flags.
14797
- img.imgwidth = pick(options?.width, symbolSizes[imageSrc]?.width);
14798
- img.imgheight = pick(options?.height, symbolSizes[imageSrc]?.height);
14884
+ img.imgwidth = (options?.width ?? symbolSizes[imageSrc]?.width);
14885
+ img.imgheight = (options?.height ?? symbolSizes[imageSrc]?.height);
14799
14886
  /**
14800
14887
  * Set the size and position
14801
14888
  */
@@ -15641,7 +15728,11 @@ class HTMLElement extends SVG_SVGElement {
15641
15728
  .attr({
15642
15729
  text: str,
15643
15730
  x: Math.round(x),
15644
- y: Math.round(y)
15731
+ y: Math.round(y),
15732
+ // The namespace attribute is required for serialization
15733
+ // (export and side-by-side comparison), otherwise it
15734
+ // inherits the SVG namespace from foreignObject.
15735
+ xmlns: 'http://www.w3.org/1999/xhtml'
15645
15736
  });
15646
15737
  };
15647
15738
  }
@@ -15821,8 +15912,10 @@ class HTMLElement extends SVG_SVGElement {
15821
15912
  foreignObject.attr({
15822
15913
  x: x + (this.xCorr || 0),
15823
15914
  y: y + (this.yCorr || 0),
15824
- // Add 4px to avoid ellipsis, since the body adds 3 px right
15825
- // margin. We need one more because of rounding.
15915
+ // Add 4px to avoid ellipsis. In v13.0.0 we had a body inside
15916
+ // the foreignObject with a 3px right margin. This was later
15917
+ // removed, but we still need to add a few pixels to avoid
15918
+ // ellipsis.
15826
15919
  width: element.offsetWidth + 4,
15827
15920
  // Add 1px to account for subpixel bounding boxes
15828
15921
  height: element.offsetHeight + 1,
@@ -15842,25 +15935,16 @@ class HTMLElement extends SVG_SVGElement {
15842
15935
  this.cTT = currentTextTransform;
15843
15936
  }
15844
15937
  /**
15845
- * Add the element to a group wrapper. For HTML elements, a parallel div
15846
- * will be created for each ancestor SVG `g` element.
15938
+ * Add the element to the foreign object
15847
15939
  *
15848
15940
  * @internal
15849
15941
  */
15850
15942
  add(parentGroup) {
15851
- const { foreignObject, renderer } = this;
15943
+ const { foreignObject } = this;
15852
15944
  // Foreign object
15853
15945
  foreignObject.add(parentGroup);
15854
- super.add(
15855
- // Create a body inside the foreignObject
15856
- renderer.createElement('body')
15857
- .attr({ xmlns: 'http://www.w3.org/1999/xhtml' })
15858
- .css({
15859
- background: 'transparent',
15860
- // 3px is to avoid clipping on the right
15861
- margin: '0 3px 0 0'
15862
- })
15863
- .add(foreignObject));
15946
+ // Add this.element to the foreign objct
15947
+ super.add(foreignObject);
15864
15948
  if (this.alignOnAdd) {
15865
15949
  this.updateTransform();
15866
15950
  }
@@ -15895,10 +15979,20 @@ class HTMLElement extends SVG_SVGElement {
15895
15979
  this[key] = value;
15896
15980
  this.doTransform = true;
15897
15981
  }
15982
+ /**
15983
+ * Apply visibility/opacity to the foreignObject; the HTML element
15984
+ * ignores them.
15985
+ * @internal
15986
+ */
15987
+ visibilitySetter(value, key) {
15988
+ this.foreignObject.attr({ [key]: value });
15989
+ this[key] = value;
15990
+ }
15898
15991
  }
15899
15992
  // Some shared setters
15900
15993
  const proto = HTMLElement.prototype;
15901
15994
  proto.ySetter = proto.xSetter;
15995
+ proto.opacitySetter = proto.visibilitySetter;
15902
15996
  /* *
15903
15997
  *
15904
15998
  * Default Export
@@ -16439,6 +16533,7 @@ var AxisDefaults;
16439
16533
  */
16440
16534
  dateTimeLabelFormats: {
16441
16535
  /**
16536
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16442
16537
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16443
16538
  */
16444
16539
  millisecond: {
@@ -16464,6 +16559,7 @@ var AxisDefaults;
16464
16559
  range: false
16465
16560
  },
16466
16561
  /**
16562
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16467
16563
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16468
16564
  */
16469
16565
  second: {
@@ -16489,6 +16585,7 @@ var AxisDefaults;
16489
16585
  range: false
16490
16586
  },
16491
16587
  /**
16588
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16492
16589
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16493
16590
  */
16494
16591
  minute: {
@@ -16514,6 +16611,7 @@ var AxisDefaults;
16514
16611
  range: false
16515
16612
  },
16516
16613
  /**
16614
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16517
16615
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16518
16616
  */
16519
16617
  hour: {
@@ -16546,6 +16644,7 @@ var AxisDefaults;
16546
16644
  range: false
16547
16645
  },
16548
16646
  /**
16647
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16549
16648
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16550
16649
  */
16551
16650
  day: {
@@ -16568,6 +16667,7 @@ var AxisDefaults;
16568
16667
  boundary: '%[eb]'
16569
16668
  },
16570
16669
  /**
16670
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16571
16671
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16572
16672
  */
16573
16673
  week: {
@@ -16583,6 +16683,7 @@ var AxisDefaults;
16583
16683
  main: '%[eb]'
16584
16684
  },
16585
16685
  /**
16686
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16586
16687
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16587
16688
  */
16588
16689
  month: {
@@ -16605,6 +16706,7 @@ var AxisDefaults;
16605
16706
  boundary: void 0
16606
16707
  },
16607
16708
  /**
16709
+ * @type {Highcharts.AxisDateTimeLabelFormatsOptionsObject|string}
16608
16710
  * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject
16609
16711
  */
16610
16712
  year: {
@@ -17420,7 +17522,7 @@ var AxisDefaults;
17420
17522
  * @sample {highstock} stock/xaxis/offset/
17421
17523
  * Y axis offset by 70 px
17422
17524
  *
17423
- * @type {number}
17525
+ * @type {number|string}
17424
17526
  */
17425
17527
  offset: void 0,
17426
17528
  /**
@@ -19070,7 +19172,9 @@ var AxisDefaults;
19070
19172
  * @product highcharts
19071
19173
  */
19072
19174
  style: {
19073
- /** @type {Highcharts.ColorType} */
19175
+ /**
19176
+ * @type {Highcharts.ColorType}
19177
+ */
19074
19178
  color: 'var(--highcharts-neutral-color-100)',
19075
19179
  /**
19076
19180
  * @type {number|string}
@@ -19257,11 +19361,11 @@ class Tick {
19257
19361
  * @function Highcharts.Tick#addLabel
19258
19362
  */
19259
19363
  addLabel() {
19260
- 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;
19364
+ 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;
19261
19365
  let label = tick.label, dateTimeLabelFormat, dateTimeLabelFormats, i;
19262
19366
  // The context value
19263
19367
  let value = this.parameters.category || (categories ?
19264
- pick(categories[pos], names[pos], pos) :
19368
+ (categories[pos] ?? names[pos] ?? pos) :
19265
19369
  pos);
19266
19370
  if (log && isNumber(value)) {
19267
19371
  value = correctFloat(log.lin2log(value));
@@ -19508,7 +19612,7 @@ class Tick {
19508
19612
  labelOptions.y;
19509
19613
  }
19510
19614
  x = x +
19511
- pick(labelOptions.x, [0, 1, 0, -1][axis.side] * distance) +
19615
+ (labelOptions.x ?? [0, 1, 0, -1][axis.side] * distance) +
19512
19616
  labelOffsetCorrection +
19513
19617
  rotCorr.x -
19514
19618
  (tickmarkOffset && horiz ?
@@ -19563,7 +19667,7 @@ class Tick {
19563
19667
  * @function Highcharts.Tick#handleOverflow
19564
19668
  */
19565
19669
  handleOverflow(xy) {
19566
- 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 = {};
19670
+ const tick = this, axis = this.axis, labelOptions = axis.options.labels, pxPos = xy.x, chartWidth = axis.chart.chartWidth, spacing = axis.chart.spacing, leftBound = axis.labelLeft ?? Math.min(axis.pos, spacing[3]), rightBound = (axis.labelRight ?? Math.max(!axis.isRadial ? axis.pos + axis.len : 0, chartWidth - spacing[1])), label = this.label, rotation = this.rotation, factor = getAlignFactor(axis.labelAlign || label.attr('align')), labelWidth = label.getBBox().width, slotWidth = axis.getSlotWidth(tick), xCorrection = factor, css = {};
19567
19671
  let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
19568
19672
  // Check if the label overshoots the chart spacing box. If it does, move
19569
19673
  // it. If it now overshoots the slotWidth, add ellipsis.
@@ -19630,9 +19734,8 @@ class Tick {
19630
19734
  * @param {number} [opacity]
19631
19735
  */
19632
19736
  render(index, old, opacity) {
19633
- 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;
19634
- const labelOpacity = pick(opacity, tick.label?.newOpacity, // #15528
19635
- 1);
19737
+ const tick = this, axis = tick.axis, horiz = axis.horiz, pos = tick.pos, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), xy = tick.getPosition(horiz, pos, tickmarkOffset, old), x = xy.x, y = xy.y, axisStart = axis.pos, axisEnd = axisStart + axis.len, pxPos = horiz ? x : y;
19738
+ const labelOpacity = (opacity ?? tick.label?.newOpacity ?? 1);
19636
19739
  // Anything that is not between `axis.pos` and `axis.pos + axis.length`
19637
19740
  // should not be visible (#20166). The `correctFloat` is for reversed
19638
19741
  // axes in Safari.
@@ -19660,7 +19763,7 @@ class Tick {
19660
19763
  * @param {number} opacity The opacity of the grid line
19661
19764
  */
19662
19765
  renderGridLine(old, opacity) {
19663
- 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;
19766
+ const tick = this, axis = tick.axis, options = axis.options, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), renderer = axis.chart.renderer;
19664
19767
  let gridLine = tick.gridLine, gridLinePath, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
19665
19768
  if (tick.type === 'minor') {
19666
19769
  gridLineWidth = options.minorGridLineWidth;
@@ -19716,7 +19819,7 @@ class Tick {
19716
19819
  * @param {number} opacity The opacity of the mark
19717
19820
  */
19718
19821
  renderMark(xy, opacity) {
19719
- 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
19822
+ const tick = this, axis = tick.axis, options = axis.options, renderer = axis.chart.renderer, type = tick.type, tickSize = axis.tickSize(type ? type + 'Tick' : 'tick'), x = xy.x, y = xy.y, tickWidth = options[type !== 'minor' ? 'tickWidth' : 'minorTickWidth'] ?? (!type && axis.isXAxis ? 1 : 0), // X axis defaults to 1
19720
19823
  tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
19721
19824
  let mark = tick.mark;
19722
19825
  const isNewMark = !mark;
@@ -19761,7 +19864,7 @@ class Tick {
19761
19864
  * @param {number} index The index of the tick
19762
19865
  */
19763
19866
  renderLabel(xy, old, opacity, index) {
19764
- 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;
19867
+ 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;
19765
19868
  let show = true;
19766
19869
  if (label && isNumber(x)) {
19767
19870
  label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step);
@@ -19853,7 +19956,6 @@ class Tick {
19853
19956
  * */
19854
19957
 
19855
19958
 
19856
- const { animObject: Axis_animObject } = AnimationUtilities;
19857
19959
 
19858
19960
  const { xAxis, yAxis } = Axis_AxisDefaults;
19859
19961
 
@@ -19867,12 +19969,7 @@ const { deg2rad: Axis_deg2rad } = Core_Globals;
19867
19969
 
19868
19970
 
19869
19971
 
19870
- const getNormalizedTickInterval = (axis, tickInterval) => normalizeTickInterval(tickInterval, void 0, void 0, pick(axis.options.allowDecimals,
19871
- // If the tick interval is greater than 0.5, avoid decimals, as
19872
- // linear axes are often used to render discrete values (#3363). If
19873
- // a tick amount is set, allow decimals by default, as it increases
19874
- // the chances for a good fit.
19875
- tickInterval < 0.5 || axis.tickAmount !== void 0), !!axis.tickAmount);
19972
+ const getNormalizedTickInterval = (axis, tickInterval) => normalizeTickInterval(tickInterval, void 0, void 0, (axis.options.allowDecimals ?? (tickInterval < 0.5 || axis.tickAmount !== void 0)), !!axis.tickAmount);
19876
19973
  extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
19877
19974
  /* *
19878
19975
  *
@@ -19980,7 +20077,7 @@ class Axis {
19980
20077
  axis.coll = coll;
19981
20078
  fireEvent(this, 'init', { userOptions: userOptions });
19982
20079
  // Needed in setOptions
19983
- axis.opposite = pick(userOptions.opposite, axis.opposite);
20080
+ axis.opposite = (userOptions.opposite ?? axis.opposite);
19984
20081
  /**
19985
20082
  * The side on which the axis is rendered. 0 is top, 1 is right, 2
19986
20083
  * is bottom and 3 is left.
@@ -19988,10 +20085,9 @@ class Axis {
19988
20085
  * @name Highcharts.Axis#side
19989
20086
  * @type {number}
19990
20087
  */
19991
- axis.side = pick(userOptions.side, axis.side, (horiz ?
20088
+ axis.side = (userOptions.side ?? axis.side ?? (horiz ?
19992
20089
  (axis.opposite ? 0 : 2) : // Top : bottom
19993
- (axis.opposite ? 1 : 3)) // Right : left
19994
- );
20090
+ (axis.opposite ? 1 : 3)));
19995
20091
  /**
19996
20092
  * Current options for the axis after merge of defaults and user's
19997
20093
  * options.
@@ -20020,7 +20116,7 @@ class Axis {
20020
20116
  * @name Highcharts.Axis#reversed
20021
20117
  * @type {boolean}
20022
20118
  */
20023
- axis.reversed = pick(options.reversed, axis.reversed);
20119
+ axis.reversed = (options.reversed ?? axis.reversed);
20024
20120
  axis.visible = options.visible;
20025
20121
  axis.zoomEnabled = options.zoomEnabled;
20026
20122
  // Initial categories
@@ -20108,7 +20204,7 @@ class Axis {
20108
20204
  * @name Highcharts.Axis#crosshair
20109
20205
  * @type {boolean|Highcharts.AxisCrosshairOptions}
20110
20206
  */
20111
- const crosshair = pick(options.crosshair, splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1]);
20207
+ const crosshair = options.crosshair ?? splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1];
20112
20208
  axis.crosshair = crosshair === true ? {} : crosshair;
20113
20209
  // Register. Don't add it again on Axis.update().
20114
20210
  if (chart.axes.indexOf(axis) === -1) { //
@@ -20292,8 +20388,8 @@ class Axis {
20292
20388
  seriesDataMax = xExtremes.max;
20293
20389
  }
20294
20390
  if (xData.length) {
20295
- axis.dataMin = Math.min(pick(axis.dataMin, seriesDataMin), seriesDataMin);
20296
- axis.dataMax = Math.max(pick(axis.dataMax, seriesDataMax), seriesDataMax);
20391
+ axis.dataMin = Math.min((axis.dataMin ?? seriesDataMin), seriesDataMin);
20392
+ axis.dataMax = Math.max((axis.dataMax ?? seriesDataMax), seriesDataMax);
20297
20393
  }
20298
20394
  }
20299
20395
  // Get dataMin and dataMax for Y axes, as well as handle
@@ -20308,11 +20404,11 @@ class Axis {
20308
20404
  // doesn't have active y data, we continue with nulls
20309
20405
  if (isNumber(dataExtremes.dataMin)) {
20310
20406
  seriesDataMin = dataExtremes.dataMin;
20311
- axis.dataMin = Math.min(pick(axis.dataMin, seriesDataMin), seriesDataMin);
20407
+ axis.dataMin = Math.min((axis.dataMin ?? seriesDataMin), seriesDataMin);
20312
20408
  }
20313
20409
  if (isNumber(dataExtremes.dataMax)) {
20314
20410
  seriesDataMax = dataExtremes.dataMax;
20315
- axis.dataMax = Math.max(pick(axis.dataMax, seriesDataMax), seriesDataMax);
20411
+ axis.dataMax = Math.max((axis.dataMax ?? seriesDataMax), seriesDataMax);
20316
20412
  }
20317
20413
  // Adjust to threshold
20318
20414
  if (defined(threshold)) {
@@ -20467,7 +20563,7 @@ class Axis {
20467
20563
  translatedValue
20468
20564
  };
20469
20565
  fireEvent(this, 'getPlotLinePath', evt, function (e) {
20470
- translatedValue = pick(translatedValue, axis.translate(value, void 0, void 0, old));
20566
+ translatedValue = translatedValue ?? axis.translate(value, void 0, void 0, old);
20471
20567
  // Keep the translated value within sane bounds, and avoid Infinity
20472
20568
  // to fail the isNumber test (#7709).
20473
20569
  translatedValue = clamp(translatedValue, -1e9, 1e9);
@@ -20556,7 +20652,7 @@ class Axis {
20556
20652
  getMinorTickInterval() {
20557
20653
  const { minorTicks, minorTickInterval } = this.options;
20558
20654
  if (minorTicks === true) {
20559
- return pick(minorTickInterval, 'auto');
20655
+ return (minorTickInterval ?? 'auto');
20560
20656
  }
20561
20657
  if (minorTicks === false) {
20562
20658
  return;
@@ -20839,7 +20935,9 @@ class Axis {
20839
20935
  const seriesPointRange = hasCategories ?
20840
20936
  1 :
20841
20937
  (isXAxis ?
20842
- pick(series.options.pointRange, closestPointRange, 0) :
20938
+ (series.options.pointRange ??
20939
+ closestPointRange ??
20940
+ 0) :
20843
20941
  (axis.axisPointRange || 0)), // #2806
20844
20942
  pointPlacement = series.options.pointPlacement;
20845
20943
  pointRange = Math.max(pointRange, seriesPointRange);
@@ -20923,14 +21021,16 @@ class Axis {
20923
21021
  this.getTickAmount();
20924
21022
  }
20925
21023
  // Min or max set either by zooming/setExtremes or initial options
20926
- hardMin = pick(axis.userMin, time.parse(options.min));
20927
- hardMax = pick(axis.userMax, time.parse(options.max));
21024
+ hardMin = (axis.userMin ?? time.parse(options.min));
21025
+ hardMax = (axis.userMax ?? time.parse(options.max));
20928
21026
  // Linked axis gets the extremes from the parent axis
20929
21027
  if (linkedParent) {
20930
21028
  axis.linkedParent = linkedParent;
20931
21029
  linkedParentExtremes = linkedParent.getExtremes();
20932
- axis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);
20933
- axis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);
21030
+ axis.min =
21031
+ linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
21032
+ axis.max =
21033
+ linkedParentExtremes.max ?? linkedParentExtremes.dataMax;
20934
21034
  if (this.type !== linkedParent.type) {
20935
21035
  // Can't link axes of different type
20936
21036
  error(11, true, chart);
@@ -20952,14 +21052,14 @@ class Axis {
20952
21052
  maxPadding = 0;
20953
21053
  }
20954
21054
  }
20955
- axis.min = pick(hardMin, thresholdMin, dataMin);
20956
- axis.max = pick(hardMax, thresholdMax, dataMax);
21055
+ axis.min = (hardMin ?? thresholdMin ?? dataMin);
21056
+ axis.max = (hardMax ?? thresholdMax ?? dataMax);
20957
21057
  }
20958
21058
  if (isNumber(axis.max) && isNumber(axis.min)) {
20959
21059
  if (logarithmic) {
20960
21060
  if (axis.positiveValuesOnly &&
20961
21061
  !secondPass &&
20962
- Math.min(axis.min, pick(dataMin, axis.min)) <= 0) { // #978
21062
+ Math.min(axis.min, (dataMin ?? axis.min)) <= 0) { // #978
20963
21063
  // Can't plot negative values on log axis
20964
21064
  error(10, true, chart);
20965
21065
  }
@@ -21065,16 +21165,13 @@ class Axis {
21065
21165
  axis.tickInterval = tickIntervalOption = linkedParent.tickInterval;
21066
21166
  }
21067
21167
  else {
21068
- axis.tickInterval = pick(tickIntervalOption, this.tickAmount ?
21168
+ axis.tickInterval = tickIntervalOption ?? (this.tickAmount ?
21069
21169
  range / Math.max(this.tickAmount - 1, 1) :
21070
- void 0,
21071
- // For categorized axis, 1 is default, for linear axis use
21072
- // tickPix
21073
- categories ?
21074
- 1 :
21075
- // Don't let it be more than the data range
21076
- range * tickPixelIntervalOption /
21077
- Math.max(axis.len, tickPixelIntervalOption));
21170
+ categories ?
21171
+ 1 :
21172
+ // Don't let it be more than the data range
21173
+ range * tickPixelIntervalOption /
21174
+ Math.max(axis.len, tickPixelIntervalOption));
21078
21175
  }
21079
21176
  // Now we're finished detecting min and max, crop and group series data.
21080
21177
  // This is in turn needed in order to find tick positions in ordinal
@@ -21104,12 +21201,9 @@ class Axis {
21104
21201
  }
21105
21202
  // Before normalizing the tick interval, handle minimum tick interval.
21106
21203
  // This applies only if tickInterval is not defined.
21107
- const minTickInterval = pick(options.minTickInterval,
21108
- // In datetime axes, don't go below the data interval, except when
21109
- // there are scatter-like series involved (#13369).
21110
- dateTime &&
21111
- !axis.series.some((s) => !s.sorted) ?
21112
- axis.closestPointRange : 0);
21204
+ const minTickInterval = options.minTickInterval ?? (dateTime && !axis.series.some((s) => !s.sorted) ?
21205
+ axis.closestPointRange :
21206
+ 0);
21113
21207
  if (!tickIntervalOption &&
21114
21208
  minTickInterval &&
21115
21209
  axis.tickInterval < minTickInterval) {
@@ -21439,7 +21533,7 @@ class Axis {
21439
21533
  * @function Highcharts.Axis#adjustTickAmount
21440
21534
  */
21441
21535
  adjustTickAmount() {
21442
- const axis = this, { finalTickAmt, max, min, options, tickPositions, tickAmount, thresholdAlignment } = axis, currentTickAmount = tickPositions?.length, threshold = pick(axis.threshold, axis.softThreshold ? 0 : null);
21536
+ const axis = this, { finalTickAmt, max, min, options, tickPositions, tickAmount, thresholdAlignment } = axis, currentTickAmount = tickPositions?.length, threshold = axis.threshold ?? (axis.softThreshold ? 0 : null);
21443
21537
  let len, i, tickInterval = axis.tickInterval, thresholdTickIndex;
21444
21538
  const
21445
21539
  // Extend the tickPositions by appending a position
@@ -21675,7 +21769,8 @@ class Axis {
21675
21769
  offsets = options.offsets || [0, 0, 0, 0], horiz = this.horiz,
21676
21770
  // Check for percentage based input values. Rounding fixes problems
21677
21771
  // with column overflow and plot line filtering (#4898, #4899)
21678
- 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));
21772
+ width = this.width = Math.round(relativeLength((options.width ?? chart.plotWidth - offsets[3] + offsets[1]), chart.plotWidth)), height = this.height = Math.round(relativeLength((options.height ??
21773
+ 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));
21679
21774
  // Expose basic values to use in Series object and navigator
21680
21775
  this.bottom = chart.chartHeight - height - top;
21681
21776
  this.right = chart.chartWidth - width - left;
@@ -21786,9 +21881,7 @@ class Axis {
21786
21881
  * An array of tickLength and tickWidth
21787
21882
  */
21788
21883
  tickSize(prefix) {
21789
- const options = this.options, tickWidth = pick(options[prefix === 'tick' ? 'tickWidth' : 'minorTickWidth'],
21790
- // Default to 1 on linear and datetime X axes
21791
- prefix === 'tick' && this.isXAxis && !this.categories ? 1 : 0);
21884
+ const options = this.options, tickWidth = options[prefix === 'tick' ? 'tickWidth' : 'minorTickWidth'] ?? (prefix === 'tick' && this.isXAxis && !this.categories ? 1 : 0);
21792
21885
  let tickLength = options[prefix === 'tick' ? 'tickLength' : 'minorTickLength'], tickSize;
21793
21886
  if (tickWidth && tickLength) {
21794
21887
  // Negate the length
@@ -21875,7 +21968,7 @@ class Axis {
21875
21968
  newTickInterval = getStep(lineHeight * 0.75);
21876
21969
  }
21877
21970
  this.autoRotation = autoRotation;
21878
- this.labelRotation = pick(rotation, isNumber(rotationOption) ? rotationOption : 0);
21971
+ this.labelRotation = rotation ?? (isNumber(rotationOption) ? rotationOption : 0);
21879
21972
  return labelOptions.step ? tickInterval : newTickInterval;
21880
21973
  }
21881
21974
  /**
@@ -22227,7 +22320,7 @@ class Axis {
22227
22320
  titleOffsetOption = axisTitleOptions.offset;
22228
22321
  titleMargin = defined(titleOffsetOption) ?
22229
22322
  0 :
22230
- pick(axisTitleOptions.margin, horiz ? 5 : 10);
22323
+ axisTitleOptions.margin ?? (horiz ? 5 : 10);
22231
22324
  }
22232
22325
  }
22233
22326
  // Render the axis line
@@ -22459,7 +22552,7 @@ class Axis {
22459
22552
  * @emits Highcharts.Axis#event:afterRender
22460
22553
  */
22461
22554
  render() {
22462
- 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);
22555
+ const axis = this, chart = axis.chart, log = axis.logarithmic, renderer = chart.renderer, options = axis.options, isLinked = axis.isLinked, tickPositions = axis.tickPositions, axisTitle = axis.axisTitle, ticks = axis.ticks, minorTicks = axis.minorTicks, alternateBands = axis.alternateBands, stackLabelOptions = options.stackLabels, alternateGridColor = options.alternateGridColor, crossing = options.crossing, tickmarkOffset = axis.tickmarkOffset, axisLine = axis.axisLine, showAxis = axis.showAxis, animation = animObject(renderer.globalAnimation);
22463
22556
  let from, to;
22464
22557
  // Reset
22465
22558
  axis.labelEdge.length = 0;
@@ -22738,9 +22831,9 @@ class Axis {
22738
22831
  }
22739
22832
  else if (defined(point)) {
22740
22833
  // #3834
22741
- pos = pick(this.coll !== 'colorAxis' ?
22742
- point.crosshairPos : // 3D axis extension
22743
- null, this.isXAxis ?
22834
+ pos = (this.coll !== 'colorAxis' ?
22835
+ point.crosshairPos :
22836
+ null) ?? (this.isXAxis ?
22744
22837
  point.plotX :
22745
22838
  this.len - point.plotY);
22746
22839
  }
@@ -22749,7 +22842,7 @@ class Axis {
22749
22842
  // Value, only used on radial
22750
22843
  value: point && (this.isXAxis ?
22751
22844
  point.x :
22752
- pick(point.stackY, point.y)),
22845
+ (point.stackY ?? point.y ?? void 0)),
22753
22846
  translatedValue: pos
22754
22847
  };
22755
22848
  if (chart.polar) {
@@ -22782,7 +22875,7 @@ class Axis {
22782
22875
  (categorized ? 'category ' : 'thin ') +
22783
22876
  (options.className || ''))
22784
22877
  .attr({
22785
- zIndex: pick(options.zIndex, 2)
22878
+ zIndex: (options.zIndex ?? 2)
22786
22879
  })
22787
22880
  .clip(options.clip === false ?
22788
22881
  void 0 :
@@ -22797,7 +22890,7 @@ class Axis {
22797
22890
  // eslint-disable-next-line max-len
22798
22891
  'var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
22799
22892
  'var(--highcharts-neutral-color-20)'),
22800
- 'stroke-width': pick(options.width, 1)
22893
+ 'stroke-width': (options.width ?? 1)
22801
22894
  }).css({
22802
22895
  'pointer-events': 'none'
22803
22896
  });
@@ -22810,7 +22903,7 @@ class Axis {
22810
22903
  }
22811
22904
  cross
22812
22905
  .show()
22813
- .animate({ d: path }, Axis_animObject(options?.animation));
22906
+ .animate({ d: path }, animObject(options?.animation));
22814
22907
  if (categorized && !options.width) {
22815
22908
  cross.attr({
22816
22909
  'stroke-width': this.transA
@@ -22863,7 +22956,7 @@ class Axis {
22863
22956
  this.destroy(true);
22864
22957
  this.init(chart, options);
22865
22958
  chart.isDirtyBox = true;
22866
- if (pick(redraw, true)) {
22959
+ if (redraw ?? true) {
22867
22960
  chart.redraw();
22868
22961
  }
22869
22962
  }
@@ -22893,7 +22986,7 @@ class Axis {
22893
22986
  chart.orderItems(coll);
22894
22987
  this.destroy();
22895
22988
  chart.isDirtyBox = true;
22896
- if (pick(redraw, true)) {
22989
+ if (redraw ?? true) {
22897
22990
  chart.redraw();
22898
22991
  }
22899
22992
  }
@@ -23549,8 +23642,10 @@ var LogarithmicAxis;
23549
23642
  tickIntervalOption, tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), totalPixelLength = minor ?
23550
23643
  axisLength / axis.tickPositions.length :
23551
23644
  axisLength;
23552
- interval = pick(filteredTickIntervalOption, log.minorAutoInterval, (realMax - realMin) *
23553
- tickPixelIntervalOption / (totalPixelLength || 1));
23645
+ interval = filteredTickIntervalOption ??
23646
+ log.minorAutoInterval ??
23647
+ (realMax - realMin) * tickPixelIntervalOption /
23648
+ (totalPixelLength || 1);
23554
23649
  interval = normalizeTickInterval(interval);
23555
23650
  positions = axis.getLinearTickPositions(interval, realMin, realMax).map(log.log2lin);
23556
23651
  if (!minor) {
@@ -23979,7 +24074,8 @@ class PlotLineOrBand {
23979
24074
  if (!chart.styledMode) {
23980
24075
  if (isLine) {
23981
24076
  attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
23982
- attribs['stroke-width'] = pick(options.width, 1);
24077
+ attribs['stroke-width'] =
24078
+ options.width ?? 1;
23983
24079
  if (options.dashStyle) {
23984
24080
  attribs.dashstyle = options.dashStyle;
23985
24081
  }
@@ -24848,7 +24944,6 @@ class PlotLineOrBand {
24848
24944
  * */
24849
24945
 
24850
24946
 
24851
- const { animObject: Tooltip_animObject } = AnimationUtilities;
24852
24947
 
24853
24948
  const { format: Tooltip_format } = Core_Templating;
24854
24949
 
@@ -25112,7 +25207,8 @@ class Tooltip {
25112
25207
  'highcharts-label',
25113
25208
  isHeader && 'highcharts-tooltip-header',
25114
25209
  isSplit ? 'highcharts-tooltip-box' : 'highcharts-tooltip',
25115
- !isHeader && 'highcharts-color-' + pick(point.colorIndex, series.colorIndex),
25210
+ !isHeader &&
25211
+ 'highcharts-color-' + (point.colorIndex ?? series.colorIndex),
25116
25212
  seriesOptions?.className
25117
25213
  ].filter(isString).join(' ');
25118
25214
  }
@@ -25297,7 +25393,8 @@ class Tooltip {
25297
25393
  }
25298
25394
  // The far side is right or bottom
25299
25395
  const preferFarSide = !this.followPointer &&
25300
- pick(point.ttBelow, polar ? false : !inverted === flipped), // #4984
25396
+ (point.ttBelow ??
25397
+ (polar ? false : !inverted === flipped)), // #4984
25301
25398
  /*
25302
25399
  * Handle the preferred dimension. When the preferred dimension is
25303
25400
  * tooltip on top or bottom of the point, it will look for space
@@ -25424,7 +25521,7 @@ class Tooltip {
25424
25521
  const tooltip = this;
25425
25522
  // Disallow duplicate timers (#1728, #1766)
25426
25523
  clearTimeouts(this);
25427
- delay = pick(delay, this.options.hideDelay);
25524
+ delay = (delay ?? this.options.hideDelay);
25428
25525
  if (!this.isHidden) {
25429
25526
  this.hideTimer = syncTimeout(function () {
25430
25527
  const label = tooltip.getLabel();
@@ -25527,7 +25624,9 @@ class Tooltip {
25527
25624
  * Split tooltip does not support outside in the first iteration. Should
25528
25625
  * not be too complicated to implement.
25529
25626
  */
25530
- this.outside = pick(options.outside, Boolean(chart.scrollablePixelsX || chart.scrollablePixelsY));
25627
+ this.outside =
25628
+ options.outside ??
25629
+ Boolean(chart.scrollablePixelsX || chart.scrollablePixelsY);
25531
25630
  }
25532
25631
  shouldStickOnContact(pointerEvent) {
25533
25632
  return !!(!this.followPointer &&
@@ -25549,7 +25648,7 @@ class Tooltip {
25549
25648
  * @param {number} anchorY
25550
25649
  */
25551
25650
  move(x, y, anchorX, anchorY) {
25552
- const { followPointer, options } = this, animation = Tooltip_animObject(!followPointer &&
25651
+ const { followPointer, options } = this, animation = animObject(!followPointer &&
25553
25652
  !this.isHidden &&
25554
25653
  !options.fixed &&
25555
25654
  options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
@@ -25607,7 +25706,7 @@ class Tooltip {
25607
25706
  point.points = void 0;
25608
25707
  // Register the current series
25609
25708
  const currentSeries = point.series;
25610
- this.distance = pick(currentSeries.tooltipOptions.distance, 16);
25709
+ this.distance = (currentSeries.tooltipOptions.distance ?? 16);
25611
25710
  // Update the inner HTML
25612
25711
  if (text === false) {
25613
25712
  this.hide();
@@ -25880,7 +25979,7 @@ class Tooltip {
25880
25979
  anchorY,
25881
25980
  boxWidth,
25882
25981
  point,
25883
- rank: pick(boxPosition.rank, isHeader ? 1 : 0),
25982
+ rank: boxPosition.rank ?? (isHeader ? 1 : 0),
25884
25983
  size,
25885
25984
  target: boxPosition.y,
25886
25985
  tt,
@@ -26297,7 +26396,6 @@ class Tooltip {
26297
26396
 
26298
26397
 
26299
26398
 
26300
- const { animObject: Point_animObject } = AnimationUtilities;
26301
26399
 
26302
26400
  const { defaultOptions: Point_defaultOptions } = Defaults;
26303
26401
 
@@ -26637,10 +26735,15 @@ class Point {
26637
26735
  *
26638
26736
  * @internal
26639
26737
  * @function Highcharts.Point#destroy
26738
+ *
26739
+ * @param {boolean} [sync]
26740
+ * Whether to destroy the point synchronously. Used internally from
26741
+ * series.destroy, where condemned points may cause animation errors
26742
+ * (#24976).
26640
26743
  */
26641
- destroy() {
26642
- if (!this.condemned) {
26643
- const point = this, series = point.series, chart = series.chart, hoverPoints = chart.hoverPoints, globalAnimation = point.series.chart.renderer.globalAnimation, { duration } = Point_animObject(globalAnimation);
26744
+ destroy(sync) {
26745
+ if (!this.destroyed && !this.condemned) {
26746
+ const point = this, series = point.series, chart = series.chart, hoverPoints = chart.hoverPoints, globalAnimation = point.series.chart.renderer.globalAnimation, { duration } = animObject(globalAnimation);
26644
26747
  /**
26645
26748
  * Allow to call after animation.
26646
26749
  * @internal
@@ -26657,6 +26760,7 @@ class Point {
26657
26760
  for (const prop in point) { // eslint-disable-line guard-for-in
26658
26761
  delete point[prop];
26659
26762
  }
26763
+ this.destroyed = true;
26660
26764
  };
26661
26765
  if (point.legendItem) {
26662
26766
  // Pies have legend items
@@ -26673,7 +26777,7 @@ class Point {
26673
26777
  point.onMouseOut();
26674
26778
  }
26675
26779
  // Remove properties after animation
26676
- if (duration && series.condemnedPoints) {
26780
+ if (duration && !sync && series.condemnedPoints) {
26677
26781
  series.condemnedPoints.push(this);
26678
26782
  this.graphic?.addClass('highcharts-point-condemned');
26679
26783
  setTimeout(destroyPoint, duration);
@@ -26796,14 +26900,15 @@ class Point {
26796
26900
  *
26797
26901
  * @function Highcharts.Point#getZone
26798
26902
  *
26799
- * @return {Highcharts.SeriesZonesOptionsObject}
26800
- * The zone item.
26903
+ * @return {Highcharts.SeriesZonesOptionsObject|undefined}
26904
+ * The zone item, or `undefined` if the series has no zones.
26801
26905
  */
26802
26906
  getZone() {
26803
26907
  const series = this.series, zones = series.zones, zoneAxis = series.zoneAxis || 'y';
26804
26908
  let zone, i = 0;
26805
26909
  zone = zones[i];
26806
- while (this[zoneAxis] >= zone.value) {
26910
+ while (i < zones.length &&
26911
+ this[zoneAxis] >= zone.value) {
26807
26912
  zone = zones[++i];
26808
26913
  }
26809
26914
  // For resetting or reusing the point (#8100)
@@ -27219,7 +27324,7 @@ class Point {
27219
27324
  */
27220
27325
  select(selected, accumulate) {
27221
27326
  const point = this, series = point.series, chart = series.chart;
27222
- selected = pick(selected, !point.selected);
27327
+ selected = (selected ?? !point.selected);
27223
27328
  this.selectedStaging = selected;
27224
27329
  // Fire the event with the default handler
27225
27330
  point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {
@@ -27343,9 +27448,8 @@ class Point {
27343
27448
  * @emits Highcharts.Point#event:afterSetState
27344
27449
  */
27345
27450
  setState(state, move) {
27346
- const point = this, series = point.series, previousState = point.state, stateOptions = (series.options.states[state || 'normal'] ||
27347
- {}), markerOptions = (Point_defaultOptions.plotOptions[series.type].marker &&
27348
- series.options.marker), normalDisabled = (markerOptions && markerOptions.enabled === false), markerStateOptions = markerOptions?.states?.[state || 'normal'] ||
27451
+ const point = this, series = point.series, previousState = point.state, stateOptions = series.options.states?.[state || 'normal'] || {}, markerOptions = (Point_defaultOptions.plotOptions?.[series.type]?.marker &&
27452
+ series.options.marker), normalDisabled = markerOptions?.enabled === false, markerStateOptions = markerOptions?.states?.[state || 'normal'] ||
27349
27453
  {}, stateDisabled = markerStateOptions.enabled === false, pointMarker = point.marker || {}, chart = series.chart, hasMarkers = (markerOptions && series.markerAttribs);
27350
27454
  let halo = series.halo, markerAttribs, pointAttribs, pointAttribsAnimation, stateMarkerGraphic = series.stateMarkerGraphic, newSymbol;
27351
27455
  state = state || ''; // Empty string
@@ -27358,13 +27462,10 @@ class Point {
27358
27462
  (stateOptions.enabled === false) ||
27359
27463
  // General point marker's state options is disabled
27360
27464
  (state && (stateDisabled ||
27361
- (normalDisabled &&
27362
- markerStateOptions.enabled === false))) ||
27465
+ (normalDisabled && markerStateOptions.enabled === false))) ||
27363
27466
  // Individual point marker's state options is disabled
27364
27467
  (state &&
27365
- pointMarker.states &&
27366
- pointMarker.states[state] &&
27367
- pointMarker.states[state].enabled === false) // #1610
27468
+ pointMarker.states?.[state]?.enabled === false) // #1610
27368
27469
  ) {
27369
27470
  return;
27370
27471
  }
@@ -27383,7 +27484,8 @@ class Point {
27383
27484
  }
27384
27485
  if (!chart.styledMode) {
27385
27486
  pointAttribs = series.pointAttribs(point, state);
27386
- pointAttribsAnimation = pick(chart.options.chart.animation, stateOptions.animation);
27487
+ pointAttribsAnimation = (chart.options.chart.animation ??
27488
+ stateOptions.animation);
27387
27489
  const opacity = pointAttribs.opacity;
27388
27490
  // Some inactive points (e.g. slices in pie) should apply
27389
27491
  // opacity also for their labels
@@ -27401,9 +27503,11 @@ class Point {
27401
27503
  point.graphic.animate(pointAttribs, pointAttribsAnimation);
27402
27504
  }
27403
27505
  if (markerAttribs) {
27404
- point.graphic.animate(markerAttribs, pick(
27506
+ point.graphic.animate(markerAttribs, (
27405
27507
  // Turn off globally:
27406
- chart.options.chart.animation, markerStateOptions.animation, markerOptions.animation));
27508
+ chart.options.chart.animation ??
27509
+ markerStateOptions.animation ??
27510
+ markerOptions.animation));
27407
27511
  }
27408
27512
  // Zooming in from a range with no markers to a range with markers
27409
27513
  if (stateMarkerGraphic) {
@@ -27452,10 +27556,12 @@ class Point {
27452
27556
  }
27453
27557
  }
27454
27558
  // Show me your halo
27455
- const haloOptions = stateOptions.halo;
27559
+ const haloOptions = isObject(stateOptions.halo) ?
27560
+ stateOptions.halo :
27561
+ {};
27456
27562
  const markerGraphic = (point.graphic || stateMarkerGraphic);
27457
27563
  const markerVisibility = markerGraphic?.visibility || 'inherit';
27458
- if (haloOptions?.size &&
27564
+ if (haloOptions.size &&
27459
27565
  markerGraphic &&
27460
27566
  markerVisibility !== 'hidden' &&
27461
27567
  !point.isCluster) {
@@ -27469,7 +27575,7 @@ class Point {
27469
27575
  });
27470
27576
  halo.attr({
27471
27577
  'class': 'highcharts-halo highcharts-color-' +
27472
- pick(point.colorIndex, series.colorIndex) +
27578
+ (point.colorIndex ?? series.colorIndex) +
27473
27579
  (point.className ? ' ' + point.className : ''),
27474
27580
  'visibility': markerVisibility,
27475
27581
  'zIndex': -1 // #4929, #8276
@@ -27985,6 +28091,11 @@ class Pointer {
27985
28091
  }
27986
28092
  }
27987
28093
  }
28094
+ // Run a final transform with a drop trigger to display the reset
28095
+ // zoom button after a pinch gesture (#22128)
28096
+ if (e?.type === 'touchend' && this.hasDragged) {
28097
+ chart.transform({ trigger: 'drop' });
28098
+ }
27988
28099
  if (redraw) {
27989
28100
  chart.redraw();
27990
28101
  }
@@ -28197,7 +28308,7 @@ class Pointer {
28197
28308
  const hoverPoints = [], useExisting = !!(isDirectTouch && existingHoverPoint), filter = function (s) {
28198
28309
  return (s.visible &&
28199
28310
  !(!shared && s.directTouch) && // #3821
28200
- pick(s.options.enableMouseTracking, true));
28311
+ (s.options.enableMouseTracking ?? true));
28201
28312
  };
28202
28313
  let hoverSeries = existingHoverSeries,
28203
28314
  // Which series to look in for the hover point
@@ -28383,8 +28494,8 @@ class Pointer {
28383
28494
  const ePos = (touches ?
28384
28495
  touches.length ?
28385
28496
  touches.item(0) :
28386
- (pick(// #13534
28387
- touches.changedTouches, e.changedTouches))[0] :
28497
+ (touches.changedTouches ??
28498
+ e.changedTouches)[0] :
28388
28499
  e);
28389
28500
  // Get mouse position
28390
28501
  if (!chartPosition) {
@@ -28458,7 +28569,7 @@ class Pointer {
28458
28569
  * @function Highcharts.Pointer#onContainerMouseLeave
28459
28570
  */
28460
28571
  onContainerMouseLeave(e) {
28461
- const { pointer } = Pointer_charts[pick(Pointer.hoverChartIndex, -1)] || {};
28572
+ const { pointer } = Pointer_charts[(Pointer.hoverChartIndex ?? -1)] || {};
28462
28573
  e = this.normalize(e);
28463
28574
  this.onContainerMouseMove(e);
28464
28575
  // #4886, MS Touch end fires mouseleave but with no related target
@@ -28558,7 +28669,7 @@ class Pointer {
28558
28669
  if (e?.touches && this.hasPinchMoved) {
28559
28670
  e?.preventDefault?.();
28560
28671
  }
28561
- Pointer_charts[pick(Pointer.hoverChartIndex, -1)]
28672
+ Pointer_charts[(Pointer.hoverChartIndex ?? -1)]
28562
28673
  ?.pointer
28563
28674
  ?.drop(e);
28564
28675
  }
@@ -28628,6 +28739,9 @@ class Pointer {
28628
28739
  from: boxFromTouches(lastTouches),
28629
28740
  trigger: e.type
28630
28741
  });
28742
+ // Record a truthy value in order to trigger the final transform
28743
+ // in the drop function
28744
+ pointer.hasDragged = 1;
28631
28745
  });
28632
28746
  if (pointer.res) {
28633
28747
  pointer.res = false;
@@ -29062,7 +29176,7 @@ class Pointer {
29062
29176
  */
29063
29177
  setHoverChartIndex(e) {
29064
29178
  const chart = this.chart;
29065
- const hoverChart = Core_Globals.charts[pick(Pointer.hoverChartIndex, -1)];
29179
+ const hoverChart = Core_Globals.charts[(Pointer.hoverChartIndex ?? -1)];
29066
29180
  if (hoverChart &&
29067
29181
  hoverChart !== chart) {
29068
29182
  const relatedTargetObj = { relatedTarget: chart.container };
@@ -29108,7 +29222,7 @@ class Pointer {
29108
29222
  Math.pow(pinchDown[0].chartY - e.chartY, 2)) >= 16 :
29109
29223
  false;
29110
29224
  }
29111
- if (pick(hasMoved, true)) {
29225
+ if (hasMoved ?? true) {
29112
29226
  this.pinch(e);
29113
29227
  }
29114
29228
  }
@@ -29119,7 +29233,9 @@ class Pointer {
29119
29233
  // If inside, capture touch-drag and display tooltip. If not inside,
29120
29234
  // allow dragging the finger to scroll the page
29121
29235
  if ((chart.tooltip?.options.followTouchMove ?? true) &&
29122
- isInside) {
29236
+ isInside &&
29237
+ e.type === 'touchmove' &&
29238
+ !(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
29123
29239
  e.preventDefault();
29124
29240
  }
29125
29241
  }
@@ -29149,7 +29265,7 @@ class Pointer {
29149
29265
  let zoomType = chart.zooming.type || '', zoomX, zoomY;
29150
29266
  // Look for the pinchType option
29151
29267
  if (/touch/.test(e.type)) {
29152
- zoomType = pick(chart.zooming.pinchType, zoomType);
29268
+ zoomType = (chart.zooming.pinchType ?? zoomType);
29153
29269
  }
29154
29270
  this.zoomX = zoomX = /x/.test(zoomType);
29155
29271
  this.zoomY = zoomY = /y/.test(zoomType);
@@ -29591,7 +29707,7 @@ class DataTableCore {
29591
29707
  * Fetches the given column by the canonical column ID. Simplified version
29592
29708
  * of the full `DataTable.getRow` method, always returning by reference.
29593
29709
  *
29594
- * @function Highcharts.DataTable#setColumn
29710
+ * @function Highcharts.DataTable#getColumn
29595
29711
  *
29596
29712
  * @param {string} columnId
29597
29713
  * ID of the column to get.
@@ -29923,7 +30039,7 @@ var LegendSymbol;
29923
30039
  // Draw the marker
29924
30040
  if (markerOptions && markerOptions.enabled !== false && symbolWidth) {
29925
30041
  // Do not allow the marker to be larger than the symbolHeight
29926
- let radius = Math.min(pick(markerOptions.radius, generalRadius), generalRadius);
30042
+ let radius = Math.min((markerOptions.radius ?? generalRadius), generalRadius);
29927
30043
  // Restrict symbol markers size
29928
30044
  if (symbol.indexOf('url') === 0) {
29929
30045
  markerOptions = merge(markerOptions, {
@@ -30327,6 +30443,10 @@ const seriesDefaults = {
30327
30443
  * ```
30328
30444
  *
30329
30445
  * @type {Highcharts.DataMappingOptionsObject}
30446
+ * @sample highcharts/datatable/datamapping
30447
+ * Basic data mapping
30448
+ * @sample highcharts/datatable/datamapping-dynamic
30449
+ * Data mapping with dynamic updates
30330
30450
  * @sample {highcharts} highcharts/datatable/series-datatable-multiple
30331
30451
  * Series with two data tables
30332
30452
  * @sample {highcharts} highcharts/datatable/nested-keys
@@ -30337,6 +30457,29 @@ const seriesDefaults = {
30337
30457
  * @since 13.0.0
30338
30458
  * @apioption plotOptions.series.dataMapping
30339
30459
  */
30460
+ /**
30461
+ * Options for a specific series-level data table or an array of data
30462
+ * tables. The `dataTable` option can be either a configuration object or an
30463
+ * instance of the `DataTable` class. If a `DataTable` instance is passed,
30464
+ * it will be used directly. If a configuration object or an array is
30465
+ * passed, a new `DataTable` instance will be created based on the provided
30466
+ * configuration.
30467
+ *
30468
+ * @type {Highcharts.DataTable|Highcharts.DataTableOptionsObject|Array<Highcharts.DataTable|Highcharts.DataTableOptionsObject>}
30469
+ * @sample {highcharts} highcharts/datatable/series-datatable/
30470
+ * Series with one data table each
30471
+ * @sample {highcharts} highcharts/datatable/series-datatable-multiple/
30472
+ * Series with two data tables
30473
+ * @sample {highstock} stock/datatable/series-datatable/
30474
+ * Series with one data table each
30475
+ * @sample {highstock} stock/datatable/series-datatable-multiple/
30476
+ * Series with two data tables
30477
+ * @sample {highmaps} maps/datatable/series-datatable
30478
+ * Series-level data table
30479
+ *
30480
+ * @since 13.0.0
30481
+ * @apioption plotOptions.series.dataTable
30482
+ */
30340
30483
  /**
30341
30484
  * Enable or disable the mouse tracking for a specific series. This
30342
30485
  * includes point tooltips and click events on graphs and points. For
@@ -31220,6 +31363,7 @@ const seriesDefaults = {
31220
31363
  * `series.allowPointSelect` option to true.
31221
31364
  *
31222
31365
  * @declare Highcharts.PointStatesSelectOptionsObject
31366
+ * @extends plotOptions.series.marker.states.hover
31223
31367
  */
31224
31368
  select: {
31225
31369
  /**
@@ -31796,6 +31940,7 @@ const seriesDefaults = {
31796
31940
  * @sample {highmaps} maps/plotoptions/series-datalabels-box/
31797
31941
  * Data labels box options
31798
31942
  *
31943
+ * @type {number|Array<number>}
31799
31944
  * @since 2.2.1
31800
31945
  */
31801
31946
  padding: [1, 3],
@@ -31997,6 +32142,9 @@ const seriesDefaults = {
31997
32142
  /**
31998
32143
  * A collection of options for different series states.
31999
32144
  *
32145
+ * In addition to the options documented under each state, any option from
32146
+ * the parent series type can be set, with exception of `data` and `states`.
32147
+ *
32000
32148
  * @declare Highcharts.SeriesStatesOptionsObject
32001
32149
  */
32002
32150
  states: {
@@ -32170,6 +32318,7 @@ const seriesDefaults = {
32170
32318
  * Disabled inactive state
32171
32319
  *
32172
32320
  * @declare Highcharts.SeriesStatesInactiveOptionsObject
32321
+ * @extends plotOptions.series.states.hover
32173
32322
  */
32174
32323
  inactive: {
32175
32324
  /**
@@ -32570,7 +32719,6 @@ var SeriesRegistry;
32570
32719
  * */
32571
32720
 
32572
32721
 
32573
- const { animObject: Series_animObject, setAnimation: Series_setAnimation } = AnimationUtilities;
32574
32722
 
32575
32723
 
32576
32724
  const { defaultOptions: Series_defaultOptions } = Defaults;
@@ -32708,6 +32856,13 @@ class Series {
32708
32856
  * @type {number|undefined}
32709
32857
  * @readonly
32710
32858
  */
32859
+ /**
32860
+ * The main group for the series' graphics.
32861
+ *
32862
+ * @name Highcharts.Series#group
32863
+ * @type {Highcharts.SVGElement}
32864
+ * @readonly
32865
+ */
32711
32866
  /**
32712
32867
  * Contains the series' index in the `Chart.series` array.
32713
32868
  *
@@ -32840,10 +32995,12 @@ class Series {
32840
32995
  */
32841
32996
  series.options = series.setOptions(userOptions);
32842
32997
  const options = series.options, visible = options.visible !== false;
32843
- // Create the data table
32844
- this.dataTable ?? (this.dataTable = options.dataTable?.isDataTable ?
32845
- options.dataTable :
32846
- new Data_DataTableCore(options.dataTable));
32998
+ // Create the data table or use the one passed as option
32999
+ this.dataTable ?? (this.dataTable = isArray(options.dataTable) ?
33000
+ new Data_DataTableCore() :
33001
+ options.dataTable?.isDataTable ?
33002
+ options.dataTable :
33003
+ new Data_DataTableCore(options.dataTable));
32847
33004
  /**
32848
33005
  * All child series that are linked to the current series through the
32849
33006
  * [linkedTo](https://api.highcharts.com/highcharts/series.line.linkedTo)
@@ -32903,7 +33060,7 @@ class Series {
32903
33060
  if (chartSeries.length) {
32904
33061
  lastSeries = chartSeries[chartSeries.length - 1];
32905
33062
  }
32906
- series._i = pick(lastSeries?._i, -1) + 1;
33063
+ series._i = (lastSeries?._i ?? -1) + 1;
32907
33064
  series.opacity = series.options.opacity;
32908
33065
  // Insert the series and re-order all series above the insertion
32909
33066
  // point.
@@ -32950,7 +33107,7 @@ class Series {
32950
33107
  // Apply if the series xAxis or yAxis option matches
32951
33108
  // the number of the axis, or if undefined, use the
32952
33109
  // first axis
32953
- if (pick(seriesOptions[coll], 0) === axis.index ||
33110
+ if ((seriesOptions[coll] ?? 0) === axis.index ||
32954
33111
  (typeof seriesOptions[coll] !==
32955
33112
  'undefined' &&
32956
33113
  seriesOptions[coll] === axisOptions.id)) {
@@ -32993,8 +33150,12 @@ class Series {
32993
33150
  * @function Highcharts.Series#hasMarkerChanged
32994
33151
  */
32995
33152
  hasMarkerChanged(options, oldOptions) {
32996
- const marker = options.marker, oldMarker = oldOptions.marker || {};
32997
- return marker && ((oldMarker.enabled && !marker.enabled) ||
33153
+ const marker = options.marker, oldMarker = oldOptions.marker;
33154
+ // Note that `marker` holds the full, merged object including
33155
+ // `plotOptions`, while `oldMarker` is the user-defined series-level
33156
+ // options only. We may need to refactor that in the future if more
33157
+ // issues like #24057 arise.
33158
+ return marker && oldMarker && ((oldMarker.enabled && !marker.enabled) ||
32998
33159
  oldMarker.symbol !== marker.symbol || // #10870, #15946
32999
33160
  oldMarker.height !== marker.height || // #16274
33000
33161
  oldMarker.width !== marker.width // #16274
@@ -33013,7 +33174,8 @@ class Series {
33013
33174
  time.parse(options.pointStart) ??
33014
33175
  0;
33015
33176
  let pointInterval;
33016
- this.pointInterval = pointInterval = pick(this.pointInterval, options.pointInterval, 1);
33177
+ this.pointInterval = pointInterval =
33178
+ this.pointInterval ?? options.pointInterval ?? 1;
33017
33179
  if (relativeXValue && isNumber(x)) {
33018
33180
  pointInterval *= x;
33019
33181
  }
@@ -33085,9 +33247,13 @@ class Series {
33085
33247
  );
33086
33248
  // When shared tooltip, stickyTracking is true by default,
33087
33249
  // unless user says otherwise.
33088
- this.stickyTracking = pick(seriesUserOptions.stickyTracking, userPlotOptionsType.stickyTracking, userPlotOptionsSeries.stickyTracking, (this.tooltipOptions.shared && !this.noSharedTooltip ?
33089
- true :
33090
- options.stickyTracking));
33250
+ this.stickyTracking =
33251
+ seriesUserOptions.stickyTracking ??
33252
+ userPlotOptionsType.stickyTracking ??
33253
+ userPlotOptionsSeries.stickyTracking ??
33254
+ (this.tooltipOptions.shared && !this.noSharedTooltip ?
33255
+ true :
33256
+ options.stickyTracking);
33091
33257
  // Delete marker object if not allowed (#1125)
33092
33258
  if (typeOptions.marker === null) {
33093
33259
  delete options.marker;
@@ -33165,7 +33331,9 @@ class Series {
33165
33331
  if (!value) {
33166
33332
  // Pick up either the colorIndex option, or the series.colorIndex
33167
33333
  // after Series.update()
33168
- setting = pick(prop === 'color' ? this.options.colorIndex : void 0, this[indexName]);
33334
+ setting = prop === 'color' ?
33335
+ (this.options.colorIndex ?? this[indexName]) :
33336
+ this[indexName];
33169
33337
  if (defined(setting)) { // After Series.update()
33170
33338
  i = setting;
33171
33339
  }
@@ -33225,7 +33393,7 @@ class Series {
33225
33393
  */
33226
33394
  getSymbol() {
33227
33395
  const seriesMarkerOption = this.options.marker;
33228
- this.getCyclic('symbol', seriesMarkerOption.symbol, this.chart.options.symbols);
33396
+ this.getCyclic('symbol', seriesMarkerOption?.symbol, this.chart.options.symbols);
33229
33397
  }
33230
33398
  /**
33231
33399
  * Shorthand to get one of the series' data columns from `Series.dataTable`.
@@ -33421,9 +33589,10 @@ class Series {
33421
33589
  if (!oldData[i].destroyed && !oldData[i].condemned) {
33422
33590
  const pOptions = dataTable.getRowObject(i);
33423
33591
  if (pOptions) {
33592
+ // Remove undefined properties, but preserve explicit
33593
+ // nulls (#24872)
33424
33594
  Object.keys(pOptions).forEach((key) => {
33425
- if (!defined(pOptions[key]) /* ||
33426
- pOptions[key] === oldData[i].options[key]*/) {
33595
+ if (pOptions[key] === void 0) {
33427
33596
  delete pOptions[key];
33428
33597
  }
33429
33598
  });
@@ -33828,8 +33997,12 @@ class Series {
33828
33997
  }
33829
33998
  }
33830
33999
  }
33831
- // Find the closest distance between processed points
33832
- xData = this.getColumn('x', true);
34000
+ // Find the closest distance between processed points. When the data was
34001
+ // cropped (or set out of range), read x from the freshly cropped local
34002
+ // `modified` table, #24858.
34003
+ if (modified !== table) {
34004
+ xData = modified.getColumn('x', true) || [];
34005
+ }
33833
34006
  const closestPointRange = getClosestDistance([
33834
34007
  logarithmic ?
33835
34008
  xData.map(logarithmic.log2lin) :
@@ -34034,9 +34207,9 @@ class Series {
34034
34207
  * Force getting extremes of a total series data range.
34035
34208
  */
34036
34209
  getExtremes(yData, forceExtremesFromAll) {
34037
- const { xAxis, yAxis } = this, getExtremesFromAll = forceExtremesFromAll ||
34210
+ const { options, xAxis, yAxis } = this, getExtremesFromAll = forceExtremesFromAll ||
34038
34211
  this.getExtremesFromAll ||
34039
- this.options.getExtremesFromAll, // #4599, #21003
34212
+ options.getExtremesFromAll, // #4599, #21003
34040
34213
  table = getExtremesFromAll && this.cropped ?
34041
34214
  this.dataTable :
34042
34215
  this.dataTable.getModified(), rowCount = table.rowCount, customData = yData || this.stackedYData, yAxisData = customData ?
@@ -34046,7 +34219,12 @@ class Series {
34046
34219
  // non-sorted data like scatter (#7639).
34047
34220
  shoulder = this.requireSorting && !this.is('column') ?
34048
34221
  1 : 0,
34049
- // #2117, need to compensate for log X axis
34222
+ // Used only for `cumulativeStart` (#24608)
34223
+ excludeShoulder = options.cumulative &&
34224
+ options.cumulativeStart &&
34225
+ shoulder &&
34226
+ !getExtremesFromAll,
34227
+ // Compensate for log X axis (#2117)
34050
34228
  positiveValuesOnly = yAxis ? yAxis.positiveValuesOnly : false, doAll = getExtremesFromAll ||
34051
34229
  this.cropped ||
34052
34230
  !xAxis; // For colorAxis support
@@ -34058,10 +34236,10 @@ class Series {
34058
34236
  }
34059
34237
  for (i = 0; i < rowCount; i++) {
34060
34238
  x = xData[i];
34061
- // Check if it is within the selected x axis range
34062
- if (doAll ||
34239
+ // Check if it is within the selected x-axis range
34240
+ if ((doAll ||
34063
34241
  ((xData[i + shoulder] || x) >= xMin &&
34064
- (xData[i - shoulder] || x) <= xMax)) {
34242
+ (xData[i - shoulder] || x) <= xMax)) && (!excludeShoulder || x >= xMin)) {
34065
34243
  for (const values of yAxisData) {
34066
34244
  const val = values[i];
34067
34245
  // For points within the visible range, including the
@@ -34130,7 +34308,7 @@ class Series {
34130
34308
  */
34131
34309
  translate() {
34132
34310
  this.generatePoints();
34133
- 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
34311
+ 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
34134
34312
  dynamicallyPlaced = Boolean(pointPlacement), stackThreshold = options.startFromThreshold ? threshold : 0, nullYSubstitute = (options?.nullInteraction &&
34135
34313
  yAxis.len);
34136
34314
  let i, plotX, lastPlotX, stackIndicator, closestPointRangePx = Number.MAX_VALUE;
@@ -34182,7 +34360,9 @@ class Series {
34182
34360
  yValue = stackValues[1];
34183
34361
  if (lowValue === stackThreshold &&
34184
34362
  stackIndicator.key === stacks[xValue].base) {
34185
- lowValue = pick(isNumber(threshold) ? threshold : yAxis.min);
34363
+ lowValue = isNumber(threshold) ?
34364
+ threshold :
34365
+ yAxis.min;
34186
34366
  }
34187
34367
  // #1200, #1232
34188
34368
  if (yAxis.positiveValuesOnly &&
@@ -34190,7 +34370,7 @@ class Series {
34190
34370
  lowValue <= 0) {
34191
34371
  lowValue = void 0;
34192
34372
  }
34193
- point.total = point.stackTotal = pick(stackItem.total);
34373
+ point.total = point.stackTotal = stackItem.total ?? void 0;
34194
34374
  point.percentage = defined(point.y) && stackItem.total ?
34195
34375
  (point.y / stackItem.total * 100) : void 0;
34196
34376
  point.stackY = yValue;
@@ -34323,7 +34503,7 @@ class Series {
34323
34503
  * Initialize the animation.
34324
34504
  */
34325
34505
  animate(init) {
34326
- const { chart, group, markerGroup } = this, inverted = chart.inverted, animation = Series_animObject(this.options.animation),
34506
+ const { chart, group, markerGroup } = this, inverted = chart.inverted, animation = animObject(this.options.animation),
34327
34507
  // The key for temporary animation clips
34328
34508
  animationClipKey = [
34329
34509
  this.getSharedClipKey(),
@@ -34419,10 +34599,11 @@ class Series {
34419
34599
  */
34420
34600
  drawPoints(points) {
34421
34601
  points || (points = this.points.concat(this.condemnedPoints));
34422
- 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,
34423
- // Use larger or equal as radius is null in bubbles (#6321)
34424
- series.closestPointRangePx >= (seriesMarkerOptions.enabledThreshold *
34425
- seriesMarkerOptions.radius));
34602
+ 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 ??
34603
+ (!xAxis || xAxis.isRadial ? true : null) ??
34604
+ // Use larger or equal as radius is null in bubbles (#6321)
34605
+ ((series.closestPointRangePx ?? -Infinity) >= ((seriesMarkerOptions.enabledThreshold ?? 2) *
34606
+ seriesMarkerOptions.radius));
34426
34607
  let i, point, graphic, verb, pointMarkerOptions, hasPointMarker, markerAttribs;
34427
34608
  if (seriesMarkerOptions.enabled !== false ||
34428
34609
  series._hasPointMarkers) {
@@ -34439,8 +34620,10 @@ class Series {
34439
34620
  // Only draw the point if y is defined
34440
34621
  if (shouldDrawMarker) {
34441
34622
  // Shortcuts
34442
- const symbol = pick(pointMarkerOptions.symbol, series.symbol, 'rect');
34443
- markerAttribs = series.markerAttribs(point, (point.selected && 'select'));
34623
+ const symbol = pointMarkerOptions.symbol ??
34624
+ series.symbol ??
34625
+ 'rect';
34626
+ markerAttribs = series.markerAttribs(point, point.selected ? 'select' : '');
34444
34627
  const isInside = point.isInside !== false;
34445
34628
  if (!graphic &&
34446
34629
  isInside &&
@@ -34505,15 +34688,17 @@ class Series {
34505
34688
  * A hash containing those attributes that are not settable from CSS.
34506
34689
  */
34507
34690
  markerAttribs(point, state) {
34508
- const seriesOptions = this.options, seriesMarkerOptions = seriesOptions.marker, pointMarkerOptions = point.marker || {}, symbol = (pointMarkerOptions.symbol ||
34691
+ const seriesOptions = this.options, seriesMarkerOptions = seriesOptions.marker ?? {}, pointMarkerOptions = point.marker || {}, symbol = (pointMarkerOptions.symbol ||
34509
34692
  seriesMarkerOptions.symbol), attribs = {};
34510
- let seriesStateOptions, pointStateOptions, radius = pick(pointMarkerOptions.radius, seriesMarkerOptions?.radius);
34693
+ let seriesStateOptions, pointStateOptions, radius = pointMarkerOptions.radius ??
34694
+ seriesMarkerOptions.radius;
34511
34695
  // Handle hover and select states
34512
34696
  if (state) {
34513
- seriesStateOptions = seriesMarkerOptions?.states?.[state];
34697
+ seriesStateOptions = seriesMarkerOptions.states?.[state];
34514
34698
  pointStateOptions = pointMarkerOptions.states?.[state];
34515
- radius = pick(pointStateOptions?.radius, seriesStateOptions?.radius, radius && radius + (seriesStateOptions?.radiusPlus ||
34516
- 0));
34699
+ radius = pointStateOptions?.radius ??
34700
+ seriesStateOptions?.radius ??
34701
+ (radius && radius + (seriesStateOptions?.radiusPlus || 0));
34517
34702
  }
34518
34703
  point.hasImage = symbol && symbol.indexOf('url') === 0;
34519
34704
  if (point.hasImage) {
@@ -34526,7 +34711,7 @@ class Series {
34526
34711
  0 :
34527
34712
  symbol === 'rect' ?
34528
34713
  // Rectangle symbols need crisp edges, others don't
34529
- seriesMarkerOptions?.lineWidth || 0 :
34714
+ seriesMarkerOptions.lineWidth || 0 :
34530
34715
  1);
34531
34716
  }
34532
34717
  attribs.x = pos[0] - radius;
@@ -34557,8 +34742,9 @@ class Series {
34557
34742
  * The presentational attributes to be set on the point.
34558
34743
  */
34559
34744
  pointAttribs(point, state) {
34560
- const options = this.options, seriesMarkerOptions = options.marker, pointOptions = point?.options, pointMarkerOptions = pointOptions?.marker || {}, pointColorOption = pointOptions?.color, pointColor = point?.color, zoneColor = point?.zone?.color;
34561
- let seriesStateOptions, pointStateOptions, color = this.color, fill, stroke, strokeWidth = pick(pointMarkerOptions.lineWidth, seriesMarkerOptions.lineWidth), opacity = (point?.isNull && options.nullInteraction) ? 0 : 1;
34745
+ const options = this.options, seriesMarkerOptions = options.marker ?? {}, pointOptions = point?.options, pointMarkerOptions = pointOptions?.marker || {}, pointColorOption = pointOptions?.color, pointColor = point?.color, zoneColor = point?.zone?.color;
34746
+ let color = this.color, fill, stroke, strokeWidth = pointMarkerOptions.lineWidth ??
34747
+ seriesMarkerOptions.lineWidth, opacity = (point?.isNull && options.nullInteraction) ? 0 : 1;
34562
34748
  color = (pointColorOption ||
34563
34749
  zoneColor ||
34564
34750
  pointColor ||
@@ -34571,19 +34757,22 @@ class Series {
34571
34757
  color);
34572
34758
  // Handle hover and select states
34573
34759
  state = state || 'normal';
34574
- if (state) {
34575
- seriesStateOptions = (seriesMarkerOptions.states[state] || {});
34576
- pointStateOptions = (pointMarkerOptions.states &&
34577
- pointMarkerOptions.states[state]) || {};
34578
- strokeWidth = pick(pointStateOptions.lineWidth, seriesStateOptions.lineWidth, strokeWidth + pick(pointStateOptions.lineWidthPlus, seriesStateOptions.lineWidthPlus, 0));
34579
- fill = (pointStateOptions.fillColor ||
34580
- seriesStateOptions.fillColor ||
34581
- fill);
34582
- stroke = (pointStateOptions.lineColor ||
34583
- seriesStateOptions.lineColor ||
34584
- stroke);
34585
- opacity = pick(pointStateOptions.opacity, seriesStateOptions.opacity, opacity);
34586
- }
34760
+ const seriesStateOptions = seriesMarkerOptions.states?.[state] || {};
34761
+ const pointStateOptions = pointMarkerOptions.states?.[state] || {};
34762
+ strokeWidth = pointStateOptions.lineWidth ??
34763
+ seriesStateOptions.lineWidth ??
34764
+ (strokeWidth || 0) + (pointStateOptions.lineWidthPlus ??
34765
+ seriesStateOptions.lineWidthPlus ??
34766
+ 0);
34767
+ fill = (pointStateOptions.fillColor ||
34768
+ seriesStateOptions.fillColor ||
34769
+ fill);
34770
+ stroke = (pointStateOptions.lineColor ||
34771
+ seriesStateOptions.lineColor ||
34772
+ stroke);
34773
+ opacity = (pointStateOptions.opacity ??
34774
+ seriesStateOptions.opacity ??
34775
+ opacity);
34587
34776
  return {
34588
34777
  'stroke': stroke,
34589
34778
  'stroke-width': strokeWidth,
@@ -34622,7 +34811,7 @@ class Series {
34622
34811
  // Destroy all points with their elements
34623
34812
  i = data.length;
34624
34813
  while (i--) {
34625
- data[i]?.destroy?.();
34814
+ data[i]?.destroy?.(true);
34626
34815
  }
34627
34816
  for (const zone of series.zones || []) {
34628
34817
  // Destroy SVGElement's but preserve primitive props (#20426)
@@ -34649,7 +34838,7 @@ class Series {
34649
34838
  erase(chart.series, series);
34650
34839
  chart.orderItems('series');
34651
34840
  // Clear all members
34652
- objectEach(series, function (val, prop) {
34841
+ objectEach(series, function (_val, prop) {
34653
34842
  if (!keepEventsForUpdate || prop !== 'hcEvents') {
34654
34843
  delete series[prop];
34655
34844
  }
@@ -34701,7 +34890,7 @@ class Series {
34701
34890
  // Reset
34702
34891
  zones.forEach((zone) => {
34703
34892
  zone.lineClip = [];
34704
- zone.translated = clamp(axis.toPixels(pick(zone.value, axisMax), true) || 0, 0, len);
34893
+ zone.translated = clamp(axis.toPixels((zone.value ?? axisMax), true) || 0, 0, len);
34705
34894
  });
34706
34895
  // The use of the Color Threshold assumes there are no gaps so it is
34707
34896
  // safe to hide the original graph and area unless it is not
@@ -34925,7 +35114,7 @@ class Series {
34925
35114
  * @emits Highcharts.Series#event:afterRender
34926
35115
  */
34927
35116
  render() {
34928
- const series = this, { chart, options, hasRendered } = series, animOptions = Series_animObject(options.animation), visibility = series.visible ?
35117
+ const series = this, { chart, options, hasRendered } = series, animOptions = animObject(options.animation), visibility = series.visible ?
34929
35118
  'inherit' : 'hidden', // #2597
34930
35119
  zIndex = options.zIndex, chartSeriesGroup = chart.seriesGroup;
34931
35120
  let animDuration = series.finishedAnimating ?
@@ -35027,7 +35216,7 @@ class Series {
35027
35216
  *
35028
35217
  * @function Highcharts.Series#searchPoint
35029
35218
  *
35030
- * @param {Highcharts.PointerEvent} e
35219
+ * @param {PointerEvent} e
35031
35220
  * The normalized pointer event
35032
35221
  * @param {boolean} [compareX=false]
35033
35222
  * Search only by the X value, not Y
@@ -35059,7 +35248,7 @@ class Series {
35059
35248
  // Prevent multiple k-d-trees from being built simultaneously
35060
35249
  // (#6235)
35061
35250
  this.buildingKdTree = true;
35062
- const series = this, seriesOptions = series.options, dimensions = seriesOptions.findNearestPointBy
35251
+ const series = this, seriesOptions = series.options, dimensions = (seriesOptions.findNearestPointBy ?? '')
35063
35252
  .indexOf('y') > -1 ? 2 : 1;
35064
35253
  /**
35065
35254
  * Internal function
@@ -35109,7 +35298,7 @@ class Series {
35109
35298
  * The point to search for.
35110
35299
  * @param {boolean} [compareX=false]
35111
35300
  * Search only by the X value, not Y.
35112
- * @param {Highcharts.PointerEvent} [e]
35301
+ * @param {PointerEvent} [e]
35113
35302
  * The normalized pointer event.
35114
35303
  * @param {Function} [suppliedPointEvaluator]
35115
35304
  * A custom point evaluator function.
@@ -35315,11 +35504,13 @@ class Series {
35315
35504
  * Both X and Y values given
35316
35505
  * @sample highcharts/members/series-addpoint-pie/
35317
35506
  * Append pie slice
35318
- * @sample stock/members/series-addpoint/
35507
+ * @sample highcharts/datatable/datamapping-dynamic
35508
+ * Alternative approach with data table
35509
+ * @sample {highstock} stock/members/series-addpoint/
35319
35510
  * Append 100 points in Highcharts Stock
35320
- * @sample stock/members/series-addpoint-shift/
35511
+ * @sample {highstock} stock/members/series-addpoint-shift/
35321
35512
  * Append and shift in Highcharts Stock
35322
- * @sample maps/members/series-addpoint/
35513
+ * @sample {highmaps} maps/members/series-addpoint/
35323
35514
  * Add a point in Highmaps
35324
35515
  *
35325
35516
  * @function Highcharts.Series#addPoint
@@ -35355,7 +35546,7 @@ class Series {
35355
35546
  const series = this, seriesOptions = series.options, { chart, data, dataTable: table, xAxis } = series, names = xAxis?.hasNames && xAxis.names, dataOptions = seriesOptions.data, xData = series.getColumn('x');
35356
35547
  let isInTheMiddle, i;
35357
35548
  // Optional redraw, defaults to true
35358
- redraw = pick(redraw, true);
35549
+ redraw = (redraw ?? true);
35359
35550
  // Get options and push the point to xData, yData and series.options. In
35360
35551
  // series.generatePoints the Point instance will be created on demand
35361
35552
  // and pushed to the series.data array.
@@ -35465,8 +35656,8 @@ class Series {
35465
35656
  chart.redraw();
35466
35657
  }
35467
35658
  };
35468
- Series_setAnimation(animation, chart);
35469
- redraw = pick(redraw, true);
35659
+ setAnimation(animation, chart);
35660
+ redraw = (redraw ?? true);
35470
35661
  // Fire the event with a default handler of removing the point
35471
35662
  if (point) {
35472
35663
  point.firePointEvent('remove', null, remove);
@@ -35509,7 +35700,7 @@ class Series {
35509
35700
  // Redraw
35510
35701
  chart.isDirtyLegend = chart.isDirtyBox = true;
35511
35702
  chart.linkSeries(keepEvents);
35512
- if (pick(redraw, true)) {
35703
+ if (redraw ?? true) {
35513
35704
  chart.redraw(animation);
35514
35705
  }
35515
35706
  }
@@ -35726,7 +35917,7 @@ class Series {
35726
35917
  series.isDirtyData = true;
35727
35918
  }
35728
35919
  fireEvent(this, 'afterUpdate');
35729
- if (pick(redraw, true)) {
35920
+ if (redraw ?? true) {
35730
35921
  chart.redraw(keepPoints ? void 0 : false);
35731
35922
  }
35732
35923
  }
@@ -35743,12 +35934,12 @@ class Series {
35743
35934
  * @internal
35744
35935
  */
35745
35936
  hasOptionChanged(optionName) {
35746
- 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]);
35937
+ const chart = this.chart, option = this.options[optionName], plotOptions = chart.options.plotOptions, oldOption = this.userOptions[optionName], plotOptionsOption = (plotOptions?.[this.type]?.[optionName] ?? plotOptions?.series?.[optionName]);
35747
35938
  // Check if `plotOptions` are defined already, #19203
35748
35939
  if (oldOption && !defined(plotOptionsOption)) {
35749
35940
  return option !== oldOption;
35750
35941
  }
35751
- return option !== pick(plotOptionsOption, option);
35942
+ return option !== (plotOptionsOption ?? option);
35752
35943
  }
35753
35944
  /**
35754
35945
  * Runs on mouse over the series graphical items.
@@ -35819,10 +36010,11 @@ class Series {
35819
36010
  * Determines if state should be inherited by points too.
35820
36011
  */
35821
36012
  setState(state, inherit) {
35822
- const series = this, { graph, options } = series, { inactiveOtherPoints, states: stateOptions } = options,
36013
+ const series = this, { graph, options } = series, { inactiveOtherPoints, states: stateOptions = {} } = options,
35823
36014
  // By default a quick animation to hover/inactive,
35824
36015
  // slower to un-hover
35825
- stateAnimation = pick(stateOptions?.[state || 'normal']?.animation, series.chart.options.chart.animation);
36016
+ stateAnimation = stateOptions[state || 'normal']?.animation ??
36017
+ series.chart.options.chart.animation;
35826
36018
  let { lineWidth, opacity } = options;
35827
36019
  state = state || '';
35828
36020
  if (series.state !== state) {
@@ -35849,9 +36041,13 @@ class Series {
35849
36041
  return;
35850
36042
  }
35851
36043
  if (state) {
35852
- lineWidth = (stateOptions[state].lineWidth ||
35853
- lineWidth + (stateOptions[state].lineWidthPlus || 0)); // #4035
35854
- opacity = pick(stateOptions[state].opacity, opacity);
36044
+ lineWidth = stateOptions[state]?.lineWidth ?? (!isNumber(lineWidth) ?
36045
+ void 0 :
36046
+ // Increase by lineWidthPlus only when lineWidth
36047
+ // is a number.
36048
+ (lineWidth +
36049
+ (stateOptions?.[state]?.lineWidthPlus || 0))); // #4035
36050
+ opacity = stateOptions[state]?.opacity ?? opacity;
35855
36051
  }
35856
36052
  if (graph && !graph.dashstyle && isNumber(lineWidth)) {
35857
36053
  // Animate the graph stroke-width
@@ -35895,11 +36091,7 @@ class Series {
35895
36091
  * Can be either `hover` or undefined to set to normal state.
35896
36092
  */
35897
36093
  setAllPointsToState(state) {
35898
- this.points.forEach(function (point) {
35899
- if (point.setState) {
35900
- point.setState(state);
35901
- }
35902
- });
36094
+ this.points.forEach((point) => point.setState?.(state));
35903
36095
  }
35904
36096
  /**
35905
36097
  * Show or hide the series.
@@ -36580,7 +36772,6 @@ Series_SeriesRegistry.series = Series;
36580
36772
  * */
36581
36773
 
36582
36774
 
36583
- const { animObject: Legend_animObject, setAnimation: Legend_setAnimation } = AnimationUtilities;
36584
36775
 
36585
36776
  const { registerEventOptions: Legend_registerEventOptions } = Core_Foundation;
36586
36777
 
@@ -36709,7 +36900,7 @@ class Legend {
36709
36900
  * @param {Highcharts.LegendOptions} options
36710
36901
  */
36711
36902
  setOptions(options) {
36712
- const padding = pick(options.padding, 8);
36903
+ const padding = (options.padding ?? 8);
36713
36904
  /**
36714
36905
  * Legend options.
36715
36906
  *
@@ -36726,7 +36917,7 @@ class Legend {
36726
36917
  this.itemMarginBottom = options.itemMarginBottom;
36727
36918
  this.padding = padding;
36728
36919
  this.initialItemY = padding - 5; // 5 is pixels above the text
36729
- this.symbolWidth = pick(options.symbolWidth, 16);
36920
+ this.symbolWidth = (options.symbolWidth ?? 16);
36730
36921
  this.pages = [];
36731
36922
  this.proximate = options.layout === 'proximate' && !this.chart.inverted;
36732
36923
  // #12705: baseline has to be reset on every update
@@ -36760,7 +36951,7 @@ class Legend {
36760
36951
  }
36761
36952
  this.destroy();
36762
36953
  chart.isDirtyLegend = chart.isDirtyBox = true;
36763
- if (pick(redraw, true)) {
36954
+ if (redraw ?? true) {
36764
36955
  chart.redraw();
36765
36956
  }
36766
36957
  fireEvent(this, 'afterUpdate', { redraw });
@@ -36998,7 +37189,7 @@ class Legend {
36998
37189
  * The item to render.
36999
37190
  */
37000
37191
  renderItem(item) {
37001
- 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 ?
37192
+ 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 ?
37002
37193
  item.series :
37003
37194
  item, seriesOptions = series.options, showCheckbox = (!!legend.createCheckboxForItem &&
37004
37195
  seriesOptions &&
@@ -37044,9 +37235,11 @@ class Legend {
37044
37235
  legend.fontMetrics.f + 3 + legend.itemMarginTop;
37045
37236
  label.attr('y', legend.baseline);
37046
37237
  legend.symbolHeight =
37047
- pick(options.symbolHeight, legend.fontMetrics.f);
37238
+ (options.symbolHeight ?? legend.fontMetrics.f);
37048
37239
  if (options.squareSymbol) {
37049
- legend.symbolWidth = pick(options.symbolWidth, Math.max(legend.symbolHeight, 16));
37240
+ legend.symbolWidth =
37241
+ options.symbolWidth ??
37242
+ Math.max(legend.symbolHeight, 16);
37050
37243
  itemExtraWidth = legend.symbolWidth + symbolPadding +
37051
37244
  itemDistance + (showCheckbox ? 20 : 0);
37052
37245
  if (ltr) {
@@ -37098,7 +37291,7 @@ class Legend {
37098
37291
  * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item
37099
37292
  */
37100
37293
  layoutItem(item) {
37101
- 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 &&
37294
+ 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 &&
37102
37295
  this.totalItemWidth > maxLegendWidth) ?
37103
37296
  this.maxItemWidth :
37104
37297
  item.itemWidth, legendItem = item.legendItem || {};
@@ -37152,7 +37345,9 @@ class Legend {
37152
37345
  const seriesOptions = series?.options;
37153
37346
  // Handle showInLegend. If the series is linked to another series,
37154
37347
  // defaults to false.
37155
- if (series && pick(seriesOptions.showInLegend, !defined(seriesOptions.linkedTo) ? void 0 : false, true)) {
37348
+ if (series &&
37349
+ (seriesOptions.showInLegend ??
37350
+ (!defined(seriesOptions.linkedTo)))) {
37156
37351
  // Use points or series for the legend item depending on
37157
37352
  // legendType
37158
37353
  allItems = allItems.concat(series.legendItem?.labels ||
@@ -37434,7 +37629,7 @@ class Legend {
37434
37629
  * @function Highcharts.Legend#handleOverflow
37435
37630
  */
37436
37631
  handleOverflow(legendHeight) {
37437
- 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) {
37632
+ 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) {
37438
37633
  if (typeof height === 'number') {
37439
37634
  clipRect.attr({
37440
37635
  height: height
@@ -37480,7 +37675,7 @@ class Legend {
37480
37675
  navOptions.enabled !== false) {
37481
37676
  this.clipHeight = clipHeight =
37482
37677
  Math.max(spaceHeight - 20 - this.titleHeight - padding, 0);
37483
- this.currentPage = pick(this.currentPage, 1);
37678
+ this.currentPage = (this.currentPage ?? 1);
37484
37679
  this.fullHeight = legendHeight;
37485
37680
  // Fill pages with Y positions so that the top of each a legend item
37486
37681
  // defines the scroll top for each page (#2098)
@@ -37583,7 +37778,7 @@ class Legend {
37583
37778
  }
37584
37779
  if (currentPage > 0) {
37585
37780
  if (typeof animation !== 'undefined') {
37586
- Legend_setAnimation(animation, chart);
37781
+ setAnimation(animation, chart);
37587
37782
  }
37588
37783
  this.nav.attr({
37589
37784
  translateX: padding,
@@ -37640,7 +37835,7 @@ class Legend {
37640
37835
  this.currentPage = currentPage;
37641
37836
  this.positionCheckboxes();
37642
37837
  // Fire event after scroll animation is complete
37643
- const animOptions = Legend_animObject(pick(animation, chart.renderer.globalAnimation, true));
37838
+ const animOptions = animObject((animation ?? chart.renderer.globalAnimation ?? true));
37644
37839
  syncTimeout(() => {
37645
37840
  fireEvent(this, 'afterScroll', { currentPage });
37646
37841
  }, animOptions.duration);
@@ -37850,7 +38045,7 @@ class Legend {
37850
38045
  */ /**
37851
38046
  * Related browser event.
37852
38047
  * @name Highcharts.LegendItemClickEventObject#browserEvent
37853
- * @type {Highcharts.PointerEvent}
38048
+ * @type {PointerEvent}
37854
38049
  */ /**
37855
38050
  * Prevent the default action of toggle the visibility of the series or point.
37856
38051
  * @name Highcharts.LegendItemClickEventObject#preventDefault
@@ -37901,7 +38096,7 @@ class Legend {
37901
38096
  */ /**
37902
38097
  * Related browser event.
37903
38098
  * @name Highcharts.PointLegendItemClickEventObject#browserEvent
37904
- * @type {Highcharts.PointerEvent}
38099
+ * @type {PointerEvent}
37905
38100
  */ /**
37906
38101
  * Whether the default action has been prevented (`true`) or not.
37907
38102
  * @name Highcharts.PointLegendItemClickEventObject#defaultPrevented
@@ -37957,7 +38152,7 @@ class Legend {
37957
38152
  */ /**
37958
38153
  * Related browser event.
37959
38154
  * @name Highcharts.SeriesLegendItemClickEventObject#browserEvent
37960
- * @type {Highcharts.PointerEvent}
38155
+ * @type {PointerEvent}
37961
38156
  */ /**
37962
38157
  * Whether the default action has been prevented (`true`) or not.
37963
38158
  * @name Highcharts.SeriesLegendItemClickEventObject#defaultPrevented
@@ -37991,7 +38186,6 @@ class Legend {
37991
38186
  * */
37992
38187
 
37993
38188
 
37994
- const { animate: Chart_animate, animObject: Chart_animObject, setAnimation: Chart_setAnimation } = AnimationUtilities;
37995
38189
 
37996
38190
 
37997
38191
  const { defaultOptions: Chart_defaultOptions } = Defaults;
@@ -38082,7 +38276,7 @@ class Chart {
38082
38276
  */
38083
38277
  static chart(a, b, c) {
38084
38278
  const chart = new Chart(a, b, c);
38085
- return chart.promise || chart;
38279
+ return chart.promise ?? chart;
38086
38280
  }
38087
38281
  // Implementation
38088
38282
  constructor(a,
@@ -38123,10 +38317,10 @@ class Chart {
38123
38317
  const chart = this, options = chart.options.chart, zooming = options.zooming;
38124
38318
  chart.zooming = {
38125
38319
  ...zooming,
38126
- type: pick(options.zoomType, zooming.type),
38127
- key: pick(options.zoomKey, zooming.key),
38128
- pinchType: pick(options.pinchType, zooming.pinchType),
38129
- singleTouch: pick(options.zoomBySingleTouch, zooming.singleTouch, false),
38320
+ type: (options.zoomType ?? zooming.type),
38321
+ key: (options.zoomKey ?? zooming.key),
38322
+ pinchType: (options.pinchType ?? zooming.pinchType),
38323
+ singleTouch: options.zoomBySingleTouch ?? zooming.singleTouch ?? false,
38130
38324
  resetButton: merge(zooming.resetButton, options.resetZoomButton)
38131
38325
  };
38132
38326
  }
@@ -38469,7 +38663,7 @@ class Chart {
38469
38663
  redraw(animation) {
38470
38664
  fireEvent(this, 'beforeRedraw');
38471
38665
  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 = [];
38472
- let hasDirtyStacks, hasStackedSeries, i, isDirtyBox = chart.isDirtyBox, redrawLegend = chart.isDirtyLegend, serie;
38666
+ let hasDirtyStacks, hasStackedSeries, i, redrawLegend = chart.isDirtyLegend, serie;
38473
38667
  renderer.rootFontSize = renderer.boxWrapper.getStyle('font-size');
38474
38668
  // Handle responsive rules, not only on resize (#6130)
38475
38669
  if (chart.setResponsive) {
@@ -38478,7 +38672,7 @@ class Chart {
38478
38672
  // Set the global animation. When chart.hasRendered is not true, the
38479
38673
  // redraw call comes from a responsive rule and animation should not
38480
38674
  // occur.
38481
- Chart_setAnimation(chart.hasRendered ? animation : false, chart);
38675
+ setAnimation(chart.hasRendered ? animation : false, chart);
38482
38676
  if (isHiddenChart) {
38483
38677
  chart.temporaryDisplay();
38484
38678
  }
@@ -38541,6 +38735,7 @@ class Chart {
38541
38735
  });
38542
38736
  chart.getMargins(); // #3098
38543
38737
  // If one axis is dirty, all axes must be redrawn (#792, #2169)
38738
+ let isDirtyBox = chart.isDirtyBox;
38544
38739
  axes.forEach(function (axis) {
38545
38740
  if (axis.isDirty) {
38546
38741
  isDirtyBox = true;
@@ -38677,7 +38872,7 @@ class Chart {
38677
38872
  // inspect the generated series.points.
38678
38873
  series.getPointsCollection()
38679
38874
  .forEach((point) => {
38680
- if (pick(point.selectedStaging, point.selected)) {
38875
+ if (point.selectedStaging ?? point.selected) {
38681
38876
  acc.push(point);
38682
38877
  }
38683
38878
  });
@@ -39076,11 +39271,8 @@ class Chart {
39076
39271
  const chartHeight = chart.chartHeight;
39077
39272
  let chartWidth = chart.chartWidth;
39078
39273
  // Allow table cells and flex-boxes to shrink without the chart
39079
- // blocking them out (#6427) but skip in styled mode so inline styles
39080
- // don't override user CSS on renderTo
39081
- if (!chart.styledMode) {
39082
- css(renderTo, { overflow: 'hidden' });
39083
- }
39274
+ // blocking them out (#6427)
39275
+ css(renderTo, { overflow: 'hidden' });
39084
39276
  // Create the inner container
39085
39277
  if (!chart.styledMode) {
39086
39278
  containerStyle = extend({
@@ -39118,7 +39310,7 @@ class Chart {
39118
39310
  chartWidth = chart.chartWidth;
39119
39311
  if (!chart.styledMode) {
39120
39312
  css(container, {
39121
- width: pick(optionsChart.style?.width, chartWidth + 'px')
39313
+ width: (optionsChart.style?.width ?? chartWidth + 'px')
39122
39314
  });
39123
39315
  }
39124
39316
  }
@@ -39137,7 +39329,7 @@ class Chart {
39137
39329
  // first ResizeObserver reflow
39138
39330
  chart.containerBox = chart.getContainerBox();
39139
39331
  // Set the initial animation from the options
39140
- Chart_setAnimation(void 0, chart);
39332
+ setAnimation(void 0, chart);
39141
39333
  chart.setClassName(optionsChart.className);
39142
39334
  if (!chart.styledMode) {
39143
39335
  chart.renderer.setStyle(optionsChart.style);
@@ -39332,7 +39524,7 @@ class Chart {
39332
39524
  // Handle the isResizing counter
39333
39525
  chart.isResizing += 1;
39334
39526
  // Set the animation for the current process
39335
- Chart_setAnimation(animation, chart);
39527
+ setAnimation(animation, chart);
39336
39528
  const globalAnimation = renderer.globalAnimation;
39337
39529
  chart.oldChartHeight = chart.chartHeight;
39338
39530
  chart.oldChartWidth = chart.chartWidth;
@@ -39351,7 +39543,7 @@ class Chart {
39351
39543
  // Resize the container with the global animation applied if enabled
39352
39544
  // (#2503)
39353
39545
  if (!chart.styledMode) {
39354
- (globalAnimation ? Chart_animate : css)(chart.container, {
39546
+ (globalAnimation ? animate : css)(chart.container, {
39355
39547
  width: `${chartWidth + scrollablePixelsX}px`,
39356
39548
  height: `${chartHeight + scrollablePixelsY}px`
39357
39549
  }, globalAnimation);
@@ -39377,7 +39569,7 @@ class Chart {
39377
39569
  if (chart) {
39378
39570
  fireEvent(chart, 'endResize');
39379
39571
  }
39380
- }, Chart_animObject(globalAnimation).duration);
39572
+ }, animObject(globalAnimation).duration);
39381
39573
  }
39382
39574
  // Handle resizing counter even if we've re-rendered or not (#20548).
39383
39575
  chart.isResizing -= 1;
@@ -39761,7 +39953,7 @@ class Chart {
39761
39953
  const mockTick = new Axis_Tick(axis, 0, '', true), label = mockTick.createLabel('x', labels);
39762
39954
  mockTick.destroy();
39763
39955
  if (label &&
39764
- pick(labels.reserveSpace, !isNumber(options.crossing))) {
39956
+ (labels.reserveSpace ?? !isNumber(options.crossing))) {
39765
39957
  expectedSpace = label.getBBox().height +
39766
39958
  labels.distance +
39767
39959
  Math.max(isNumber(offset) ? offset : 0, 0);
@@ -40096,7 +40288,7 @@ class Chart {
40096
40288
  const chart = this;
40097
40289
  let series;
40098
40290
  if (options) { // <- not necessary
40099
- redraw = pick(redraw, true); // Defaults to true
40291
+ redraw = (redraw ?? true); // Defaults to true
40100
40292
  fireEvent(chart, 'addSeries', { options: options }, function () {
40101
40293
  series = chart.initSeries(options);
40102
40294
  chart.isDirtyLegend = true;
@@ -40187,7 +40379,7 @@ class Chart {
40187
40379
  */
40188
40380
  createAxis(coll, options) {
40189
40381
  const axis = new Axis_Axis(this, options.axis, coll);
40190
- if (pick(options.redraw, true)) {
40382
+ if (options.redraw ?? true) {
40191
40383
  this.redraw(options.animation);
40192
40384
  }
40193
40385
  return axis;
@@ -40235,7 +40427,7 @@ class Chart {
40235
40427
  }
40236
40428
  loadingDiv.className = 'highcharts-loading';
40237
40429
  // Update text
40238
- HTML_AST.setElementHTML(loadingSpan, pick(str, options.lang.loading, ''));
40430
+ HTML_AST.setElementHTML(loadingSpan, (str ?? options.lang.loading ?? ''));
40239
40431
  if (!chart.styledMode) {
40240
40432
  // Update visuals
40241
40433
  css(loadingDiv, extend(loadingStyle, { zIndex: 10 }));
@@ -40246,7 +40438,7 @@ class Chart {
40246
40438
  opacity: 0,
40247
40439
  display: ''
40248
40440
  });
40249
- Chart_animate(loadingDiv, {
40441
+ animate(loadingDiv, {
40250
40442
  opacity: loadingStyle.opacity ?? 0.5
40251
40443
  }, {
40252
40444
  duration: loadingOptions?.showDuration ?? 0
@@ -40274,7 +40466,7 @@ class Chart {
40274
40466
  loadingDiv.className =
40275
40467
  'highcharts-loading highcharts-loading-hidden';
40276
40468
  if (!this.styledMode) {
40277
- Chart_animate(loadingDiv, {
40469
+ animate(loadingDiv, {
40278
40470
  opacity: 0
40279
40471
  }, {
40280
40472
  duration: options.loading?.hideDuration ?? 100,
@@ -40306,6 +40498,9 @@ class Chart {
40306
40498
  * Note that when changing series data, `chart.update` may mutate the passed
40307
40499
  * data options.
40308
40500
  *
40501
+ * If the given options don't differ from the current chart options, the
40502
+ * update is skipped and the `afterUpdate` event is not emitted.
40503
+ *
40309
40504
  * See also the
40310
40505
  * [responsive option set](https://api.highcharts.com/highcharts/responsive).
40311
40506
  * Switching between `responsive.rules` basically runs `chart.update` under
@@ -40350,14 +40545,24 @@ class Chart {
40350
40545
  caption: 'setCaption'
40351
40546
  }, isResponsiveOptions = options.isResponsiveOptions, itemsForRemoval = [];
40352
40547
  let updateAllAxes, updateAllSeries, runSetSize;
40353
- fireEvent(chart, 'update', { options: options });
40548
+ options = diffObjects(options, chart.options);
40549
+ const e = {
40550
+ options,
40551
+ // Event handlers can turn this on or off to control further
40552
+ // processing
40553
+ hasChanged: !!Object.keys(options).length
40554
+ };
40555
+ fireEvent(chart, 'update', e);
40556
+ // If no changes are detected, stop further processing (#24805).
40557
+ if (!e.hasChanged) {
40558
+ return;
40559
+ }
40354
40560
  // If there are responsive rules in action, undo the responsive rules
40355
40561
  // before we apply the updated options and replay the responsive rules
40356
40562
  // on top from the chart.redraw function (#9617).
40357
40563
  if (!isResponsiveOptions) {
40358
40564
  chart.setResponsive(false, true);
40359
40565
  }
40360
- options = diffObjects(options, chart.options);
40361
40566
  chart.userOptions = merge(chart.userOptions, options);
40362
40567
  // If the top-level chart option is present, some special updates are
40363
40568
  // required
@@ -40460,7 +40665,7 @@ class Chart {
40460
40665
  }
40461
40666
  // No match by id found, match by index instead
40462
40667
  if (!item && chart[coll]) {
40463
- item = chart[coll][pick(newOptions.index, i)];
40668
+ item = chart[coll][(newOptions.index ?? i)];
40464
40669
  // Check if we grabbed an item with an existing but
40465
40670
  // different id (#13541). Check that the item in this
40466
40671
  // position is not internal (navigator).
@@ -40536,7 +40741,7 @@ class Chart {
40536
40741
  (isNumber(newHeight) && newHeight !== chart.chartHeight)) {
40537
40742
  chart.setSize(newWidth, newHeight, animation);
40538
40743
  }
40539
- else if (pick(redraw, true)) {
40744
+ else if (redraw ?? true) {
40540
40745
  chart.redraw(animation);
40541
40746
  }
40542
40747
  fireEvent(chart, 'afterUpdate', {
@@ -40585,15 +40790,11 @@ class Chart {
40585
40790
  showResetZoom() {
40586
40791
  const chart = this, lang = chart.options.lang, btnOptions = chart.zooming.resetButton, theme = btnOptions.theme, alignTo = (btnOptions.relativeTo === 'chart' ||
40587
40792
  btnOptions.relativeTo === 'spacingBox' ?
40588
- null :
40793
+ void 0 :
40589
40794
  'plotBox');
40590
- /** @internal */
40591
- function zoomOut() {
40592
- chart.zoomOut();
40593
- }
40594
- fireEvent(this, 'beforeShowResetZoom', null, function () {
40795
+ fireEvent(this, 'beforeShowResetZoom', void 0, () => {
40595
40796
  chart.resetZoomButton = chart.renderer
40596
- .button(lang.resetZoom, null, null, zoomOut, theme)
40797
+ .button(lang.resetZoom, 0, 0, () => chart.zoomOut(), theme)
40597
40798
  .attr({
40598
40799
  align: btnOptions.position.align,
40599
40800
  title: lang.resetZoomTitle
@@ -40671,21 +40872,21 @@ class Chart {
40671
40872
  * @function Highcharts.Chart#transform
40672
40873
  */
40673
40874
  transform(params) {
40674
- const { axes = this.axes, event, from = {}, reset, selection, to = {}, trigger, allowResetButton = true } = params, { inverted, time } = this;
40875
+ const { axes = this.axes, event, from = {}, reset, selection, to = {}, trigger, allowResetButton = true } = params, { time } = this;
40675
40876
  // Remove active points for shared tooltip
40676
40877
  this.hoverPoints?.forEach((point) => point.setState());
40677
40878
  fireEvent(this, 'transform', params);
40678
40879
  let hasZoomed = params.hasZoomed || false, displayButton, isAnyAxisPanning;
40679
40880
  for (const axis of axes) {
40680
- 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),
40881
+ 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),
40681
40882
  // If fingers pinched very close on this axis, treat as pan
40682
40883
  scale = Math.abs(toLength) < 10 ?
40683
40884
  1 :
40684
40885
  toLength / fromLength, fromCenter = (from[xy] || 0) + fromLength / 2 - axis.pos, toCenter = (to[xy] ?? axis.pos) +
40685
- toLength / 2 - axis.pos, move = fromCenter - toCenter / scale, pointRangeDirection = (reversed && !inverted) ||
40686
- (!reversed && inverted) ?
40687
- -1 :
40688
- 1, minPx = move;
40886
+ toLength / 2 - axis.pos, move = fromCenter - toCenter / scale, pointRangeDirection = ((horiz && !reversed) ||
40887
+ (!horiz && reversed)) ?
40888
+ 1 :
40889
+ -1, minPx = move;
40689
40890
  // Zooming in multiple panes, zoom only in the pane that receives
40690
40891
  // the input
40691
40892
  if (!reset && (fromCenter < 0 || fromCenter > axis.len)) {
@@ -40694,17 +40895,11 @@ class Chart {
40694
40895
  // Adjust offset to ensure selection zoom triggers correctly
40695
40896
  // (#22945)
40696
40897
  // Set offset to 0 for ordinal axis only when zooming out, (#24545).
40697
- const offset = (axis.chart.polar || (axis.isOrdinal && scale <= 1)) ?
40898
+ const offset = (selection || axis.chart.polar ||
40899
+ (axis.isOrdinal && scale <= 1)) ?
40698
40900
  0 :
40699
40901
  (minPointOffset * pointRangeDirection || 0), eventMin = axis.toValue(minPx, true), eventMax = axis.toValue(minPx + len / scale, true);
40700
40902
  let newMin = eventMin + offset, newMax = eventMax - offset, allExtremes = axis.allExtremes;
40701
- if (selection) {
40702
- selection[axis.coll].push({
40703
- axis,
40704
- min: Math.min(eventMin, eventMax),
40705
- max: Math.max(eventMin, eventMax)
40706
- });
40707
- }
40708
40903
  if (newMin > newMax) {
40709
40904
  [newMin, newMax] = [newMax, newMin];
40710
40905
  }
@@ -40761,14 +40956,15 @@ class Chart {
40761
40956
  }
40762
40957
  // Set new extremes if they are actually new
40763
40958
  if (reset || (axis.series.length &&
40764
- (newMin !== min || newMax !== max) &&
40765
- newMin >= floor &&
40766
- newMax <= ceiling)) {
40959
+ (selection ||
40960
+ ((newMin !== min || newMax !== max) &&
40961
+ newMin >= floor &&
40962
+ newMax <= ceiling)))) {
40767
40963
  if (selection) {
40768
40964
  selection[axis.coll].push({
40769
40965
  axis,
40770
- min: newMin,
40771
- max: newMax
40966
+ min: Math.min(eventMin, eventMax),
40967
+ max: Math.max(eventMin, eventMax)
40772
40968
  });
40773
40969
  }
40774
40970
  else {
@@ -40776,11 +40972,14 @@ class Chart {
40776
40972
  // disallow certain axis padding options that would make
40777
40973
  // panning/zooming hard. Reset and redraw after the
40778
40974
  // operation has finished.
40779
- axis.isPanning = trigger !== 'zoom';
40975
+ axis.isPanning = trigger !== 'zoom' &&
40976
+ trigger !== 'drop';
40780
40977
  if (axis.isPanning && trigger !== 'mousewheel') {
40781
40978
  isAnyAxisPanning = true; // #21319
40782
40979
  }
40783
- axis.setExtremes(reset ? void 0 : newMin, reset ? void 0 : newMax, false, false, { move, trigger, scale });
40980
+ if (trigger !== 'drop') {
40981
+ axis.setExtremes(reset ? void 0 : newMin, reset ? void 0 : newMax, false, false, { move, trigger, scale });
40982
+ }
40784
40983
  if (!reset &&
40785
40984
  (newMin > floor || newMax < ceiling)) {
40786
40985
  displayButton = allowResetButton;
@@ -40811,7 +41010,8 @@ class Chart {
40811
41010
  });
40812
41011
  }
40813
41012
  else {
40814
- // Show or hide the Reset zoom button, but not while panning
41013
+ // Show or hide the Reset zoom button, but not while
41014
+ // panning.
40815
41015
  if (displayButton &&
40816
41016
  !isAnyAxisPanning &&
40817
41017
  !this.resetZoomButton) {
@@ -41053,7 +41253,6 @@ extend(Chart.prototype, {
41053
41253
  */
41054
41254
 
41055
41255
 
41056
- const { stop: ScrollablePlotArea_stop } = AnimationUtilities;
41057
41256
 
41058
41257
  const { composed: ScrollablePlotArea_composed } = Core_Globals;
41059
41258
 
@@ -41219,7 +41418,7 @@ class ScrollablePlotArea {
41219
41418
  this.moveFixedElements();
41220
41419
  }
41221
41420
  // Increase the size of the scrollable renderer and background
41222
- ScrollablePlotArea_stop(chart.container);
41421
+ stop(chart.container);
41223
41422
  css(container, {
41224
41423
  width: `${scrollableWidth}px`,
41225
41424
  height: `${scrollableHeight}px`
@@ -41376,6 +41575,13 @@ ScrollablePlotArea.fixedSelectors = [
41376
41575
  * vertical scrolling, depending on whether the `minWidth` or `minHeight`
41377
41576
  * option is set.
41378
41577
  *
41578
+ * **Note:** Because native browser scrollbars are used, they may
41579
+ * overlap with fixed chart elements such as credits or the chart
41580
+ * border. To avoid this collision, it is recommended to manually add
41581
+ * extra space to the corresponding side using `chart.spacingBottom`
41582
+ * (for horizontal scrollbars) or `chart.spacingRight` (for vertical
41583
+ * scrollbars).
41584
+ *
41379
41585
  * @sample highcharts/chart/scrollable-plotarea
41380
41586
  * Scrollable plot area
41381
41587
  * @sample highcharts/chart/scrollable-plotarea-vertical
@@ -41536,7 +41742,7 @@ class StackItem {
41536
41742
  r: options.borderRadius || 0,
41537
41743
  text: str,
41538
41744
  // Set default padding to 5 as it is in dataLabels #12308
41539
- padding: pick(options.padding, 5),
41745
+ padding: (options.padding ?? 5),
41540
41746
  visibility: 'hidden' // Hidden until setOffset is called
41541
41747
  };
41542
41748
  if (!chart.styledMode) {
@@ -41570,7 +41776,7 @@ class StackItem {
41570
41776
  }), { verticalAlign } = alignOptions;
41571
41777
  if (label && stackBox) {
41572
41778
  const labelBox = label.getBBox(void 0, 0), padding = label.padding;
41573
- let isJustify = pick(options.overflow, 'justify') === 'justify', visible;
41779
+ let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
41574
41780
  // Reset alignOptions property after justify #12337
41575
41781
  alignOptions.x = options.x || 0;
41576
41782
  alignOptions.y = options.y || 0;
@@ -41607,7 +41813,7 @@ class StackItem {
41607
41813
  rotationOriginY: labelBox.height / 2
41608
41814
  });
41609
41815
  // Check if the dataLabel should be visible.
41610
- if (pick(!isJustify && options.crop, true)) {
41816
+ if (((!isJustify && options.crop) ?? true)) {
41611
41817
  visible =
41612
41818
  isNumber(label.x) &&
41613
41819
  isNumber(label.y) &&
@@ -41641,7 +41847,7 @@ class StackItem {
41641
41847
  getStackBox(stackBoxProps) {
41642
41848
  const stackItem = this, axis = this.axis, chart = axis.chart, { boxTop, defaultX, xOffset, width, boxBottom } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
41643
41849
  100 :
41644
- 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 ||
41850
+ (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 ||
41645
41851
  (isNumber(axis.min) &&
41646
41852
  axis.logarithmic &&
41647
41853
  axis.logarithmic.lin2log(axis.min)) ||
@@ -41726,7 +41932,6 @@ class StackItem {
41726
41932
  * */
41727
41933
 
41728
41934
 
41729
- const { getDeferredAnimation: StackingAxis_getDeferredAnimation } = AnimationUtilities;
41730
41935
 
41731
41936
  const { series: { prototype: seriesProto } } = Series_SeriesRegistry;
41732
41937
 
@@ -41755,7 +41960,7 @@ function chartGetStacks() {
41755
41960
  if (series.options.stacking && series.reserveSpace()) {
41756
41961
  series.stackKey = [
41757
41962
  series.type,
41758
- pick(series.options.stack, ''),
41963
+ (series.options.stack ?? ''),
41759
41964
  inverted ? xAxisOptions.top : xAxisOptions.left,
41760
41965
  inverted ? xAxisOptions.height : xAxisOptions.width
41761
41966
  ].join(',');
@@ -41918,7 +42123,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
41918
42123
  stack = stacks[key][x];
41919
42124
  if (y !== null) {
41920
42125
  stack.points[pointKey] = stack.points[series.index] = [
41921
- pick(stack.cumulative, stackThreshold)
42126
+ (stack.cumulative ?? stackThreshold)
41922
42127
  ];
41923
42128
  // Record the base of the stack
41924
42129
  if (!defined(stack.cumulative)) {
@@ -41966,7 +42171,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
41966
42171
  stack.cumulative = (total || 1) - 1;
41967
42172
  }
41968
42173
  else {
41969
- stack.cumulative = correctFloat(pick(stack.cumulative, stackThreshold) + yNumber);
42174
+ stack.cumulative = correctFloat((stack.cumulative ?? stackThreshold) + yNumber);
41970
42175
  }
41971
42176
  stack.total = total;
41972
42177
  if (y !== null) {
@@ -42070,7 +42275,7 @@ class AxisAdditions {
42070
42275
  }
42071
42276
  /** @internal */
42072
42277
  renderStackTotals() {
42073
- 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 ||
42278
+ const stacking = this, axis = stacking.axis, chart = axis.chart, renderer = chart.renderer, stacks = stacking.stacks, stackLabelsAnim = axis.options.stackLabels?.animation, animationConfig = getDeferredAnimation(chart, stackLabelsAnim || false), stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||
42074
42279
  renderer
42075
42280
  .g('stack-labels')
42076
42281
  .attr({
@@ -42981,8 +43186,7 @@ class AreaSeries extends AreaSeries_LineSeries {
42981
43186
  */
42982
43187
  getGraphPath(points) {
42983
43188
  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
42984
- yAxis.getThreshold(options.threshold)), connectNulls = pick(// #10574
42985
- options.connectNulls, stacking === 'percent'),
43189
+ yAxis.getThreshold(options.threshold)), connectNulls = (options.connectNulls ?? stacking === 'percent'),
42986
43190
  // To display null points in underlying stacked series, this
42987
43191
  // series graph must be broken, and the area also fall down to
42988
43192
  // fill the gap left by the null point. #2069
@@ -43035,9 +43239,9 @@ class AreaSeries extends AreaSeries_LineSeries {
43035
43239
  // Treat points with undefined plotY as null (e.g. non-positive
43036
43240
  // values on logarithmic axis, #18422)
43037
43241
  isNull = points[i].isNull || !defined(points[i].plotY);
43038
- plotX = pick(points[i].rectPlotX, points[i].plotX);
43242
+ plotX = (points[i].rectPlotX ?? points[i].plotX);
43039
43243
  yBottom = stacking ?
43040
- pick(points[i].yBottom, translatedThreshold) :
43244
+ (points[i].yBottom ?? translatedThreshold) :
43041
43245
  translatedThreshold;
43042
43246
  if (!isNull || connectNulls) {
43043
43247
  if (!connectNulls) {
@@ -43375,10 +43579,10 @@ class SplineSeries extends SplineSeries_LineSeries {
43375
43579
  }
43376
43580
  const ret = [
43377
43581
  'C',
43378
- pick(lastPoint.rightContX, lastPoint.plotX, 0),
43379
- pick(lastPoint.rightContY, lastPoint.plotY, 0),
43380
- pick(leftContX, plotX, 0),
43381
- pick(leftContY, plotY, 0),
43582
+ (lastPoint.rightContX ?? lastPoint.plotX ?? 0),
43583
+ (lastPoint.rightContY ?? lastPoint.plotY ?? 0),
43584
+ (leftContX ?? plotX ?? 0),
43585
+ (leftContY ?? plotY ?? 0),
43382
43586
  plotX,
43383
43587
  plotY
43384
43588
  ];
@@ -43823,6 +44027,8 @@ const ColumnSeriesDefaults = {
43823
44027
  * 0.25
43824
44028
  * @sample {highcharts} highcharts/plotoptions/column-pointpadding-none/
43825
44029
  * 0 for tightly packed columns
44030
+ * @sample {highcharts} highcharts/plotoptions/pie-pointpadding/
44031
+ * Pie point padding plugin
43826
44032
  *
43827
44033
  * @product highcharts highstock gantt
43828
44034
  */
@@ -44154,12 +44360,12 @@ const ColumnSeriesDefaults = {
44154
44360
  */
44155
44361
  /**
44156
44362
  * @excluding halo, lineWidth, lineWidthPlus, marker
44157
- * @product highcharts highstock
44363
+ * @product highcharts highstock gantt
44158
44364
  * @apioption series.column.states.hover
44159
44365
  */
44160
44366
  /**
44161
44367
  * @excluding halo, lineWidth, lineWidthPlus, marker
44162
- * @product highcharts highstock
44368
+ * @product highcharts highstock gantt
44163
44369
  * @apioption series.column.states.select
44164
44370
  */
44165
44371
  /**
@@ -44189,7 +44395,6 @@ const ColumnSeriesDefaults = {
44189
44395
  * */
44190
44396
 
44191
44397
 
44192
- const { animObject: ColumnSeries_animObject } = AnimationUtilities;
44193
44398
 
44194
44399
  const { parse: ColumnSeries_color } = Color_Color;
44195
44400
 
@@ -44260,7 +44465,7 @@ class ColumnSeries extends Series_Series {
44260
44465
  }
44261
44466
  else { // Run the animation
44262
44467
  translateStart = Number(series.group.attr(translateProp));
44263
- series.group.animate({ scaleY: 1 }, extend(ColumnSeries_animObject(series.options.animation), {
44468
+ series.group.animate({ scaleY: 1 }, extend(animObject(series.options.animation), {
44264
44469
  // Do the scale synchronously to ensure smooth
44265
44470
  // updating (#5030, #7228)
44266
44471
  step: function (val, fx) {
@@ -44346,7 +44551,7 @@ class ColumnSeries extends Series_Series {
44346
44551
  xAxis.tickInterval ||
44347
44552
  1), // #2610
44348
44553
  xAxis.len // #1535
44349
- ), 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,
44554
+ ), 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,
44350
44555
  // #1251, #3737
44351
44556
  colIndex = (series.columnIndex || 0) + (reverseStacks ? 1 : 0), pointXOffset = pointPadding +
44352
44557
  (groupPadding +
@@ -44596,11 +44801,11 @@ class ColumnSeries extends Series_Series {
44596
44801
  */
44597
44802
  pointAttribs(point, state) {
44598
44803
  const options = this.options, p2o = this.pointAttrToOptions || {}, strokeOption = p2o.stroke || 'borderColor', strokeWidthOption = p2o['stroke-width'] || 'borderWidth';
44599
- let stateOptions, zone, brightness, fill = (point && point.color) || this.color,
44804
+ let stateOptions, zone, brightness, fill = point?.color || this.color,
44600
44805
  // Set to fill when borderColor null:
44601
- stroke = ((point && point[strokeOption]) ||
44806
+ stroke = (point?.[strokeOption] ||
44602
44807
  options[strokeOption] ||
44603
- fill), dashstyle = (point && point.options.dashStyle) || options.dashStyle, strokeWidth = (point?.[strokeWidthOption]) ??
44808
+ fill), dashstyle = point?.options.dashStyle || options.dashStyle, strokeWidth = point?.[strokeWidthOption] ??
44604
44809
  options[strokeWidthOption] ??
44605
44810
  this[strokeWidthOption] ?? 1, opacity = (point?.isNull && options.nullInteraction) ?
44606
44811
  0 :
@@ -44621,7 +44826,7 @@ class ColumnSeries extends Series_Series {
44621
44826
  }
44622
44827
  // Select or hover states
44623
44828
  if (state && point) {
44624
- stateOptions = merge(options.states[state],
44829
+ stateOptions = merge(options.states?.[state],
44625
44830
  // #6401
44626
44831
  point.options.states?.[state] || {});
44627
44832
  brightness = stateOptions.brightness;
@@ -44631,14 +44836,13 @@ class ColumnSeries extends Series_Series {
44631
44836
  .brighten(stateOptions.brightness)
44632
44837
  .get()) || fill;
44633
44838
  stroke = stateOptions[strokeOption] || stroke;
44634
- strokeWidth =
44635
- stateOptions[strokeWidthOption] || strokeWidth;
44839
+ strokeWidth = stateOptions[strokeWidthOption] || strokeWidth;
44636
44840
  dashstyle = stateOptions.dashStyle || dashstyle;
44637
- opacity = pick(stateOptions.opacity, opacity);
44841
+ opacity = stateOptions.opacity ?? opacity;
44638
44842
  }
44639
44843
  const ret = {
44640
- fill: fill,
44641
- stroke: stroke,
44844
+ fill,
44845
+ stroke,
44642
44846
  'stroke-width': strokeWidth,
44643
44847
  opacity: point?.condemned ? 0 : opacity
44644
44848
  };
@@ -44679,6 +44883,7 @@ class ColumnSeries extends Series_Series {
44679
44883
  initialAttr = merge(shapeArgs, point.getOrigin(point.origin, shapeArgs));
44680
44884
  if (!styledMode) {
44681
44885
  initialAttr.opacity = 0;
44886
+ initialAttr['stroke-width'] = 0;
44682
44887
  }
44683
44888
  shouldUpdate = true;
44684
44889
  verb = 'animate';
@@ -44694,7 +44899,7 @@ class ColumnSeries extends Series_Series {
44694
44899
  }
44695
44900
  // Presentational
44696
44901
  if (!styledMode) {
44697
- graphic[verb](series.pointAttribs(point, (point.selected && 'select')))
44902
+ graphic[verb](series.pointAttribs(point, point.selected ? 'select' : ''))
44698
44903
  .shadow(point.allowShadow !== false && options.shadow);
44699
44904
  }
44700
44905
  graphic
@@ -44818,6 +45023,7 @@ Series_SeriesRegistry.registerSeriesType('column', ColumnSeries);
44818
45023
  * Default Export
44819
45024
  *
44820
45025
  * */
45026
+ /** @internal */
44821
45027
  /* harmony default export */ const Column_ColumnSeries = (ColumnSeries);
44822
45028
  /* *
44823
45029
  *
@@ -44854,7 +45060,6 @@ Series_SeriesRegistry.registerSeriesType('column', ColumnSeries);
44854
45060
  * */
44855
45061
 
44856
45062
 
44857
- const { getDeferredAnimation: DataLabel_getDeferredAnimation } = AnimationUtilities;
44858
45063
 
44859
45064
  const { format: DataLabel_format } = Core_Templating;
44860
45065
 
@@ -44910,7 +45115,7 @@ var DataLabel;
44910
45115
  // that parts of the align box is inside the plot area
44911
45116
  // (#12370). When stacking, it is always inside regardless
44912
45117
  // of the option (#15148).
44913
- pick(options.inside, !!this.options.stacking) &&
45118
+ (options.inside ?? !!this.options.stacking) &&
44914
45119
  alignTo &&
44915
45120
  chart.isInsidePlot(plotX, inverted ?
44916
45121
  alignTo.x + 1 :
@@ -45013,8 +45218,8 @@ var DataLabel;
45013
45218
  // zIndex: 20
45014
45219
  // }).add();
45015
45220
  // chart.renderer.circle(
45016
- // chart.plotLeft + pick(dataLabel.alignAttr.x, 0),
45017
- // chart.plotTop + pick(dataLabel.alignAttr.y, 0),
45221
+ // chart.plotLeft + (dataLabel.alignAttr.x ?? 0),
45222
+ // chart.plotTop + (dataLabel.alignAttr.y ?? 0),
45018
45223
  // 2
45019
45224
  // ).attr({
45020
45225
  // fill: 'red',
@@ -45171,7 +45376,7 @@ var DataLabel;
45171
45376
  'var(--highcharts-background-color)'), groupByIndex = [], seriesDlOptions = mergedDataLabelOptions(series);
45172
45377
  // Resolve the animation
45173
45378
  const { animation, defer } = seriesDlOptions[0], animationConfig = defer ?
45174
- DataLabel_getDeferredAnimation(chart, animation, series) :
45379
+ getDeferredAnimation(chart, animation, series) :
45175
45380
  { defer: 0, duration: 0 };
45176
45381
  fireEvent(this, 'drawDataLabels');
45177
45382
  if (series.hasDataLabels?.()) {
@@ -45197,7 +45402,7 @@ var DataLabel;
45197
45402
  if (labelEnabled) {
45198
45403
  // Create individual options structure that can be
45199
45404
  // extended without affecting others
45200
- formatString = pick(labelOptions[point.formatPrefix + 'Format'], labelOptions.format);
45405
+ formatString = (labelOptions[point.formatPrefix + 'Format'] ?? labelOptions.format);
45201
45406
  labelText = defined(formatString) ?
45202
45407
  DataLabel_format(formatString, point, chart) :
45203
45408
  (labelOptions[point.formatPrefix + 'Formatter'] ||
@@ -45205,7 +45410,9 @@ var DataLabel;
45205
45410
  rotation = labelOptions.rotation;
45206
45411
  if (!chart.styledMode) {
45207
45412
  // Determine the color
45208
- style.color = pick(labelOptions.color, style.color, isString(series.color) ? series.color : void 0, 'var(--highcharts-neutral-color-100)');
45413
+ style.color = (isString(labelOptions.color) ?
45414
+ labelOptions.color :
45415
+ void 0) ?? style.color ?? (isString(series.color) ? series.color : void 0) ?? 'var(--highcharts-neutral-color-100)';
45209
45416
  // Get automated contrast color
45210
45417
  if (style.color === 'contrast') {
45211
45418
  if (backgroundColor !== 'none') {
@@ -45937,6 +46144,8 @@ const ScatterSeriesDefaults = {
45937
46144
  * Arrays of datetime x and y
45938
46145
  * @sample {highcharts} highcharts/series/data-array-of-name-value/
45939
46146
  * Arrays of point.name and y
46147
+ * @sample {highcharts} highcharts/series-scatter/scatter-cluster/
46148
+ * Computed clusters
45940
46149
  * @sample {highcharts} highcharts/series/data-array-of-objects/
45941
46150
  * Config objects
45942
46151
  *
@@ -46004,14 +46213,15 @@ class ScatterSeries extends ScatterSeries_LineSeries {
46004
46213
  return rand - Math.floor(rand);
46005
46214
  }
46006
46215
  if (jitter) {
46007
- this.points.forEach(function (point, i) {
46008
- ['x', 'y'].forEach(function (dim, j) {
46216
+ this.points.forEach((point, i) => {
46217
+ ['x', 'y'].forEach((dim, j) => {
46009
46218
  if (jitter[dim] && !point.isNull) {
46010
- const plotProp = `plot${dim.toUpperCase()}`, axis = series[`${dim}Axis`], translatedJitter = jitter[dim] *
46011
- axis.transA;
46219
+ const plotProp = `plot${dim.toUpperCase()}`, axis = series[`${dim}Axis`];
46012
46220
  if (axis && !axis.logarithmic) {
46013
46221
  // Identify the outer bounds of the jitter range
46014
- const min = Math.max(0, (point[plotProp] || 0) - translatedJitter), max = Math.min(axis.len, (point[plotProp] || 0) + translatedJitter);
46222
+ // (#25054)
46223
+ const translatedJitter = jitter[dim] * axis.transA *
46224
+ (axis.reversed ? -1 : 1), min = (point[plotProp] || 0) - translatedJitter, max = (point[plotProp] || 0) + translatedJitter;
46015
46225
  // Find a random position within this range
46016
46226
  point[plotProp] = min +
46017
46227
  (max - min) * unrandom(i + j * len);
@@ -46085,7 +46295,7 @@ Series_SeriesRegistry.registerSeriesType('scatter', ScatterSeries);
46085
46295
  const { deg2rad: CenteredUtilities_deg2rad } = Core_Globals;
46086
46296
 
46087
46297
  /**
46088
- * @private
46298
+ * @internal
46089
46299
  */
46090
46300
  var CenteredUtilities;
46091
46301
  (function (CenteredUtilities) {
@@ -46103,7 +46313,7 @@ var CenteredUtilities;
46103
46313
  * Get the center of the pie based on the size and center options relative
46104
46314
  * to the plot area. Borrowed by the polar and gauge series types.
46105
46315
  *
46106
- * @private
46316
+ * @internal
46107
46317
  * @function Highcharts.CenteredSeriesMixin.getCenter
46108
46318
  */
46109
46319
  function getCenter() {
@@ -46116,11 +46326,13 @@ var CenteredUtilities;
46116
46326
  innerSize = parseFloat(innerSize);
46117
46327
  }
46118
46328
  const positions = [
46119
- pick(centerOption?.[0], '50%'),
46120
- pick(centerOption?.[1], '50%'),
46329
+ (centerOption?.[0] ?? '50%'),
46330
+ (centerOption?.[1] ?? '50%'),
46121
46331
  // Prevent from negative values
46122
- pick(size && size < 0 ? void 0 : options.size, '100%'),
46123
- pick(innerSize && innerSize < 0 ? void 0 : options.innerSize || 0, '0%')
46332
+ ((size && size < 0 ? void 0 : options.size) ?? '100%'),
46333
+ ((innerSize && innerSize < 0 ?
46334
+ void 0 :
46335
+ options.innerSize || 0) ?? '0%')
46124
46336
  ];
46125
46337
  for (i = 0; i < 4; ++i) {
46126
46338
  value = positions[i];
@@ -46148,7 +46360,7 @@ var CenteredUtilities;
46148
46360
  * GetStartAndEndRadians - Calculates start and end angles in radians.
46149
46361
  * Used in series types such as pie and sunburst.
46150
46362
  *
46151
- * @private
46363
+ * @internal
46152
46364
  * @function Highcharts.CenteredSeriesMixin.getStartAndEndRadians
46153
46365
  *
46154
46366
  * @param {number} [start]
@@ -46180,6 +46392,7 @@ var CenteredUtilities;
46180
46392
  * Default Export
46181
46393
  *
46182
46394
  * */
46395
+ /** @internal */
46183
46396
  /* harmony default export */ const Series_CenteredUtilities = (CenteredUtilities);
46184
46397
  /* *
46185
46398
  *
@@ -46187,7 +46400,7 @@ var CenteredUtilities;
46187
46400
  *
46188
46401
  * */
46189
46402
  /**
46190
- * @private
46403
+ * @internal
46191
46404
  * @interface Highcharts.RadianAngles
46192
46405
  */ /**
46193
46406
  * @name Highcharts.RadianAngles#end
@@ -46212,7 +46425,6 @@ var CenteredUtilities;
46212
46425
  * */
46213
46426
 
46214
46427
 
46215
- const { setAnimation: PiePoint_setAnimation } = AnimationUtilities;
46216
46428
 
46217
46429
 
46218
46430
  /* *
@@ -46320,9 +46532,9 @@ class PiePoint extends Series_Point {
46320
46532
  */
46321
46533
  slice(sliced, redraw, animation) {
46322
46534
  const series = this.series, chart = series.chart;
46323
- PiePoint_setAnimation(animation, chart);
46535
+ setAnimation(animation, chart);
46324
46536
  // Redraw is true by default
46325
- redraw = pick(redraw, true);
46537
+ redraw = (redraw ?? true);
46326
46538
  this.sliced = this.options.sliced = sliced ?? !this.sliced;
46327
46539
  // Update options.data
46328
46540
  if (series.options.data) {
@@ -47127,7 +47339,8 @@ class PieSeries extends Series_Series {
47127
47339
  // Start values
47128
47340
  graphic.attr({
47129
47341
  // Animate from inner radius (#779)
47130
- r: pick(point.startR, (series.center && series.center[3] / 2)),
47342
+ r: point.startR ??
47343
+ (series.center && series.center[3] / 2),
47131
47344
  start: startAngleRad,
47132
47345
  end: startAngleRad
47133
47346
  });
@@ -47768,7 +47981,7 @@ var PieDataLabel_ColumnDataLabel;
47768
47981
  labelPosition.computed.x = x;
47769
47982
  labelPosition.computed.y = y - topOffset;
47770
47983
  // Detect overflowing data labels
47771
- if (pick(dataLabelOptions.crop, true)) {
47984
+ if (dataLabelOptions.crop ?? true) {
47772
47985
  dataLabelWidth = dataLabel.getBBox().width;
47773
47986
  let sideOverflow;
47774
47987
  // Overflow left
@@ -48284,7 +48497,10 @@ function OverlappingDataLabels_onChartRender() {
48284
48497
  if (point.visible) {
48285
48498
  (point.dataLabels || []).forEach((label) => {
48286
48499
  const options = label.options || {};
48287
- label.labelrank = pick(options.labelrank, point.labelrank, point.shapeArgs?.height); // #4118
48500
+ label.labelrank =
48501
+ options.labelrank ??
48502
+ point.labelrank ??
48503
+ point.shapeArgs?.height; // #4118
48288
48504
  // #21725: Sync target positions for generic overlap
48289
48505
  // checking. During animations (e.g., toggling a
48290
48506
  // point), DOM positions may overlap. We force
@@ -48458,7 +48674,7 @@ function BorderRadius_arc(x, y, w, h, options = {}) {
48458
48674
  if (options.open || !options.borderRadius) {
48459
48675
  return path;
48460
48676
  }
48461
- const alpha = end - start, sinHalfAlpha = Math.sin(alpha / 2), borderRadius = Math.max(Math.min(relativeLength(options.borderRadius || 0, r - innerR),
48677
+ const alpha = end - start, sinHalfAlpha = Math.sin(alpha / 2), borderRadius = Math.max(Math.min(relativeLength(borderRadiusObject(options.borderRadius).radius, r - innerR),
48462
48678
  // Cap to half the sector radius
48463
48679
  (r - innerR) / 2,
48464
48680
  // For smaller pie slices, cap to the largest small circle that
@@ -48484,7 +48700,7 @@ function seriesOnAfterColumnTranslate() {
48484
48700
  if (this.options.borderRadius &&
48485
48701
  !(this.chart.is3d && this.chart.is3d())) {
48486
48702
  const { options, yAxis } = this, percent = options.stacking === 'percent', seriesDefault = BorderRadius_defaultOptions.plotOptions?.[this.type]
48487
- ?.borderRadius, borderRadius = optionsToObject(options.borderRadius, isObject(seriesDefault) ? seriesDefault : {}), reversed = yAxis.options.reversed;
48703
+ ?.borderRadius, borderRadius = borderRadiusObject(options.borderRadius, isObject(seriesDefault) ? seriesDefault : {}), reversed = yAxis.options.reversed;
48488
48704
  for (const point of this.points) {
48489
48705
  const { shapeArgs } = point;
48490
48706
  if (point.shapeType === 'roundedRect' && shapeArgs) {
@@ -48556,8 +48772,12 @@ function composeBorderRadius(SeriesClass, SVGElementClass, SVGRendererClass) {
48556
48772
  symbols.roundedRect = BorderRadius_roundedRect;
48557
48773
  }
48558
48774
  }
48559
- /** @internal */
48560
- function optionsToObject(options, seriesBROptions) {
48775
+ /**
48776
+ * Utility function to get the full border radius options object, from a simple
48777
+ * number or a partial options object.
48778
+ * @internal
48779
+ */
48780
+ function borderRadiusObject(options, seriesBROptions) {
48561
48781
  if (!isObject(options)) {
48562
48782
  options = { radius: options || 0 };
48563
48783
  }
@@ -48565,7 +48785,7 @@ function optionsToObject(options, seriesBROptions) {
48565
48785
  }
48566
48786
  /** @internal */
48567
48787
  function pieSeriesOnAfterTranslate() {
48568
- const borderRadius = optionsToObject(this.options.borderRadius);
48788
+ const borderRadius = borderRadiusObject(this.options.borderRadius);
48569
48789
  for (const point of this.points) {
48570
48790
  const shapeArgs = point.shapeArgs;
48571
48791
  if (shapeArgs) {
@@ -48684,7 +48904,7 @@ function BorderRadius_roundedRect(x, y, width, height, options = {}) {
48684
48904
  * Column and pie with rounded border
48685
48905
  *
48686
48906
  * @name Highcharts.BorderRadiusOptionsObject#radius
48687
- * @type {string|number}
48907
+ * @type {string|number|undefined}
48688
48908
  */ /**
48689
48909
  * The scope of the rounding for column charts or plot bands. In a stacked
48690
48910
  * column chart, the value `point` means each single point will get rounded
@@ -48699,8 +48919,7 @@ function BorderRadius_roundedRect(x, y, width, height, options = {}) {
48699
48919
  * Rounded columns
48700
48920
  *
48701
48921
  * @name Highcharts.BorderRadiusOptionsObject#scope
48702
- * @validvalue ["individual", "point", "stack"]
48703
- * @type {string}
48922
+ * @type {"individual"|"point"|"stack"|undefined}
48704
48923
  */ /**
48705
48924
  * For column charts, where in the point or stack to apply rounding. The `end`
48706
48925
  * value means only those corners at the point value will be rounded, leaving
@@ -48711,8 +48930,7 @@ function BorderRadius_roundedRect(x, y, width, height, options = {}) {
48711
48930
  * Rounding on all corners
48712
48931
  *
48713
48932
  * @name Highcharts.BorderRadiusOptionsObject#where
48714
- * @validvalue ["all", "end"]
48715
- * @type {string}
48933
+ * @type {"all"|"end"|undefined}
48716
48934
  * @default end
48717
48935
  */
48718
48936
  (''); // Keeps doclets above in JS file
@@ -48771,10 +48989,12 @@ var Responsive;
48771
48989
  */
48772
48990
  function matchResponsiveRule(rule, matches) {
48773
48991
  const condition = rule.condition, fn = condition.callback || function () {
48774
- return (this.chartWidth <= pick(condition.maxWidth, Number.MAX_VALUE) &&
48775
- this.chartHeight <= pick(condition.maxHeight, Number.MAX_VALUE) &&
48776
- this.chartWidth >= pick(condition.minWidth, 0) &&
48777
- this.chartHeight >= pick(condition.minHeight, 0));
48992
+ return (this.chartWidth <=
48993
+ (condition.maxWidth ?? Number.MAX_VALUE) &&
48994
+ this.chartHeight <=
48995
+ (condition.maxHeight ?? Number.MAX_VALUE) &&
48996
+ this.chartWidth >= (condition.minWidth ?? 0) &&
48997
+ this.chartHeight >= (condition.minHeight ?? 0));
48778
48998
  };
48779
48999
  if (fn.call(this, this)) {
48780
49000
  matches.push(rule._id);
@@ -48988,7 +49208,7 @@ var Responsive;
48988
49208
  ;// ./code/es-modules/masters/highcharts.src.js
48989
49209
  // SPDX-License-Identifier: LicenseRef-Highcharts
48990
49210
  /**
48991
- * @license Highcharts JS v13.0.0 (2026-06-11)
49211
+ * @license Highcharts JS v13.0.2 (2026-08-27)
48992
49212
  * @module highcharts/highcharts
48993
49213
  *
48994
49214
  * (c) 2009-2026 Highsoft AS
@@ -49065,12 +49285,17 @@ G.SVGElement = SVG_SVGElement;
49065
49285
  G.SVGRenderer = SVG_SVGRenderer;
49066
49286
  G.Templating = Core_Templating;
49067
49287
  G.Tick = Axis_Tick;
49068
- G.Time = Core_Time;
49288
+ G.Time = class extends Core_Time {
49289
+ constructor(options, lang) {
49290
+ const defaultOptions = Defaults.getOptions();
49291
+ super(options ?? defaultOptions.time, lang ?? defaultOptions.lang);
49292
+ }
49293
+ };
49069
49294
  G.Tooltip = Core_Tooltip;
49070
49295
  // Utilities
49071
49296
  G.addEvent = addEvent;
49072
- G.animObject = AnimationUtilities.animObject;
49073
- G.animate = AnimationUtilities.animate;
49297
+ G.animObject = animObject;
49298
+ G.animate = animate;
49074
49299
  G.arrayMax = arrayMax;
49075
49300
  G.arrayMin = arrayMin;
49076
49301
  G.attr = attr;
@@ -49097,7 +49322,7 @@ G.fireEvent = fireEvent;
49097
49322
  G.format = Core_Templating.format;
49098
49323
  G.getAlignFactor = getAlignFactor;
49099
49324
  G.getClosestDistance = getClosestDistance;
49100
- G.getDeferredAnimation = AnimationUtilities.getDeferredAnimation;
49325
+ G.getDeferredAnimation = getDeferredAnimation;
49101
49326
  G.getMagnitude = getMagnitude;
49102
49327
  G.getNestedProperty = getNestedProperty;
49103
49328
  G.getOptions = Defaults.getOptions;
@@ -49124,11 +49349,11 @@ G.relativeLength = relativeLength;
49124
49349
  G.removeEvent = removeEvent;
49125
49350
  G.replaceNested = replaceNested;
49126
49351
  G.seriesType = Series_SeriesRegistry.seriesType;
49127
- G.setAnimation = AnimationUtilities.setAnimation;
49352
+ G.setAnimation = setAnimation;
49128
49353
  G.setOptions = Defaults.setOptions;
49129
49354
  G.splat = splat;
49130
49355
  G.stableSort = stableSort;
49131
- G.stop = AnimationUtilities.stop;
49356
+ G.stop = stop;
49132
49357
  G.syncTimeout = syncTimeout;
49133
49358
  G.time = Defaults.defaultTime;
49134
49359
  G.ucfirst = ucfirst;
@@ -50065,7 +50290,7 @@ function onChartAfterSetChartSize() {
50065
50290
  navigator.top = this.plotTop + scrollButtonSize;
50066
50291
  }
50067
50292
  else {
50068
- navigator.left = pick(xAxis.left, this.plotLeft + scrollButtonSize);
50293
+ navigator.left = (xAxis.left ?? this.plotLeft + scrollButtonSize);
50069
50294
  navigator.top = navigator.navigatorOptions.top ||
50070
50295
  this.chartHeight -
50071
50296
  navigator.height -
@@ -50081,7 +50306,7 @@ function onChartAfterSetChartSize() {
50081
50306
  legendOptions.enabled &&
50082
50307
  !legendOptions.floating) ?
50083
50308
  legend.legendHeight +
50084
- pick(legendOptions.margin, 10) :
50309
+ (legendOptions.margin ?? 10) :
50085
50310
  0) -
50086
50311
  (this.titleOffset ? this.titleOffset[2] : 0);
50087
50312
  }
@@ -50106,7 +50331,7 @@ function onChartAfterUpdate(event) {
50106
50331
  (this.options.navigator.enabled ||
50107
50332
  this.options.scrollbar.enabled)) {
50108
50333
  this.scroller = this.navigator = new NavigatorConstructor(this);
50109
- if (pick(event.redraw, true)) {
50334
+ if (event.redraw ?? true) {
50110
50335
  this.redraw(event.animation); // #7067
50111
50336
  }
50112
50337
  }
@@ -50284,7 +50509,7 @@ class NavigatorAxisAdditions {
50284
50509
  */
50285
50510
  toFixedRange(pxMin, pxMax, fixedMin, fixedMax) {
50286
50511
  const axis = this.axis, halfPointRange = (axis.pointRange || 0) / 2;
50287
- let newMin = pick(fixedMin, axis.translate(pxMin, true, !axis.horiz)), newMax = pick(fixedMax, axis.translate(pxMax, true, !axis.horiz));
50512
+ let newMin = fixedMin ?? axis.translate(pxMin, true, !axis.horiz), newMax = fixedMax ?? axis.translate(pxMax, true, !axis.horiz);
50288
50513
  // Add/remove half point range to/from the extremes (#1172)
50289
50514
  if (!defined(fixedMin)) {
50290
50515
  newMin = correctFloat(newMin + halfPointRange);
@@ -50508,7 +50733,7 @@ const NavigatorDefaults = {
50508
50733
  *
50509
50734
  * @type {Highcharts.ColorType}
50510
50735
  */
50511
- maskFill: 'color-mix(var(--highcharts-highlight-color-60) 30%, transparent)',
50736
+ maskFill: 'color-mix(in srgb, var(--highcharts-highlight-color-60) 30%, transparent)', // eslint-disable-line max-len
50512
50737
  /**
50513
50738
  * The color of the line marking the currently zoomed area in the
50514
50739
  * navigator.
@@ -50647,11 +50872,18 @@ const NavigatorDefaults = {
50647
50872
  id: 'highcharts-navigator-series',
50648
50873
  className: 'highcharts-navigator-series',
50649
50874
  /**
50650
- * Sets the fill color of the navigator series.
50875
+ * Sets the color of the navigator series.
50651
50876
  *
50652
50877
  * @type {Highcharts.ColorType}
50653
50878
  * @apioption navigator.series.color
50654
50879
  */
50880
+ /**
50881
+ * Sets the fill color of the navigator series. Applies to series
50882
+ * types with a filled area, like the default `areaspline`.
50883
+ *
50884
+ * @type {Highcharts.ColorType}
50885
+ * @apioption navigator.series.fillColor
50886
+ */
50655
50887
  /**
50656
50888
  * Line color for the navigator series. Allows setting the color
50657
50889
  * while disallowing the default candlestick setting.
@@ -50851,6 +51083,7 @@ const NavigatorDefaults = {
50851
51083
 
50852
51084
 
50853
51085
 
51086
+
50854
51087
  /* *
50855
51088
  *
50856
51089
  * Constants
@@ -50861,7 +51094,7 @@ const NavigatorDefaults = {
50861
51094
  * @internal
50862
51095
  */
50863
51096
  function navigatorHandle(_x, _y, width, height, options = {}) {
50864
- const halfWidth = options.width ? options.width / 2 : width, markerPosition = 1.5, r = relativeLength(options.borderRadius || 0, Math.min(halfWidth * 2, height));
51097
+ const halfWidth = options.width ? options.width / 2 : width, markerPosition = 1.5, r = relativeLength(borderRadiusObject(options.borderRadius).radius, Math.min(halfWidth * 2, height));
50865
51098
  height = options.height || height;
50866
51099
  return [
50867
51100
  ['M', -markerPosition, height / 2 - 3.5],
@@ -51051,8 +51284,8 @@ var ScrollbarAxis;
51051
51284
  ScrollbarAxis.compose = compose;
51052
51285
  /** @internal */
51053
51286
  function getExtremes(axis) {
51054
- const axisMin = pick(axis.options?.min, axis.min);
51055
- const axisMax = pick(axis.options?.max, axis.max);
51287
+ const axisMin = (axis.options?.min ?? axis.min);
51288
+ const axisMax = (axis.options?.max ?? axis.max);
51056
51289
  return {
51057
51290
  axisMin,
51058
51291
  axisMax,
@@ -51591,7 +51824,7 @@ class Scrollbar {
51591
51824
  buttonToMaxClick(e) {
51592
51825
  const scroller = this;
51593
51826
  const range = ((scroller.to - scroller.from) *
51594
- pick(scroller.options.step, 0.2));
51827
+ (scroller.options.step ?? 0.2));
51595
51828
  scroller.updatePosition(scroller.from + range, scroller.to + range);
51596
51829
  fireEvent(scroller, 'changed', {
51597
51830
  from: scroller.from,
@@ -51603,7 +51836,7 @@ class Scrollbar {
51603
51836
  buttonToMinClick(e) {
51604
51837
  const scroller = this;
51605
51838
  const range = correctFloat(scroller.to - scroller.from) *
51606
- pick(scroller.options.step, 0.2);
51839
+ (scroller.options.step ?? 0.2);
51607
51840
  scroller.updatePosition(correctFloat(scroller.from - range), correctFloat(scroller.to - range));
51608
51841
  fireEvent(scroller, 'changed', {
51609
51842
  from: scroller.from,
@@ -51735,10 +51968,11 @@ class Scrollbar {
51735
51968
  scroller.renderer = renderer;
51736
51969
  scroller.userOptions = options;
51737
51970
  scroller.options = merge(Scrollbar_ScrollbarDefaults, Scrollbar_defaultOptions.scrollbar, options);
51738
- scroller.options.margin = pick(scroller.options.margin, 10);
51971
+ scroller.options.margin = (scroller.options.margin ?? 10);
51739
51972
  scroller.chart = chart;
51740
51973
  // Backward compatibility
51741
- scroller.size = pick(scroller.options.size, scroller.options.height);
51974
+ scroller.size = scroller.options.size ??
51975
+ scroller.options.height;
51742
51976
  // Init
51743
51977
  if (options.enabled) {
51744
51978
  scroller.render();
@@ -52028,9 +52262,9 @@ class Scrollbar {
52028
52262
  * @function Highcharts.Scrollbar#shouldUpdateExtremes
52029
52263
  */
52030
52264
  shouldUpdateExtremes(eventType) {
52031
- return (pick(this.options.liveRedraw, Core_Globals.svg &&
52265
+ return ((this.options.liveRedraw ?? (Core_Globals.svg &&
52032
52266
  !Core_Globals.isTouchDevice &&
52033
- !this.chart.boosted) ||
52267
+ !this.chart.boosted)) ||
52034
52268
  // Mouseup always should change extremes
52035
52269
  eventType === 'mouseup' ||
52036
52270
  eventType === 'touchend' ||
@@ -52550,18 +52784,18 @@ class Navigator {
52550
52784
  // it. For example hidden series, but visible navigator (#6022).
52551
52785
  if (rendered) {
52552
52786
  pxMin = 0;
52553
- pxMax = pick(xAxis.width, scrollbarXAxis.width);
52787
+ pxMax = (xAxis.width ?? scrollbarXAxis.width);
52554
52788
  }
52555
52789
  else {
52556
52790
  return;
52557
52791
  }
52558
52792
  }
52559
- navigator.left = pick(xAxis.left,
52560
- // In case of scrollbar only, without navigator
52561
- chart.plotLeft + scrollButtonSize +
52793
+ navigator.left = (xAxis.left ?? chart.plotLeft + scrollButtonSize +
52562
52794
  (inverted ? chart.plotWidth : 0));
52563
- let zoomedMax = navigator.size = navigatorSize = pick(xAxis.len, (inverted ? chart.plotHeight : chart.plotWidth) -
52564
- 2 * scrollButtonSize);
52795
+ let zoomedMax = navigator.size = navigatorSize =
52796
+ xAxis.len ??
52797
+ (inverted ? chart.plotHeight : chart.plotWidth) -
52798
+ 2 * scrollButtonSize;
52565
52799
  if (inverted) {
52566
52800
  navigatorWidth = scrollbarHeight;
52567
52801
  }
@@ -52569,8 +52803,8 @@ class Navigator {
52569
52803
  navigatorWidth = navigatorSize + 2 * scrollButtonSize;
52570
52804
  }
52571
52805
  // Get the pixel position of the handles
52572
- pxMin = pick(pxMin, xAxis.toPixels(min, true));
52573
- pxMax = pick(pxMax, xAxis.toPixels(max, true));
52806
+ pxMin = (pxMin ?? xAxis.toPixels(min, true));
52807
+ pxMax = (pxMax ?? xAxis.toPixels(max, true));
52574
52808
  // Verify (#1851, #2238)
52575
52809
  if (!isNumber(pxMin) || Math.abs(pxMin) === Infinity) {
52576
52810
  pxMin = 0;
@@ -52849,11 +53083,10 @@ class Navigator {
52849
53083
  navigator.render(0, 0, chartX - dragOffset, chartX - dragOffset + range);
52850
53084
  }
52851
53085
  if (navigator.hasDragged &&
52852
- pick(navigator.scrollbarOptions?.liveRedraw,
53086
+ (navigator.scrollbarOptions?.liveRedraw ?? (
52853
53087
  // By default, don't run live redraw on touch
52854
53088
  // devices or if the chart is in boost.
52855
- !Navigator_isTouchDevice &&
52856
- !this.chart.boosted)) {
53089
+ !Navigator_isTouchDevice && !this.chart.boosted))) {
52857
53090
  e.DOMType = e.type;
52858
53091
  setTimeout(function () {
52859
53092
  navigator.onMouseUp(e);
@@ -53042,8 +53275,10 @@ class Navigator {
53042
53275
  offset: 0,
53043
53276
  index: yAxisIndex,
53044
53277
  isInternal: true,
53045
- reversed: pick((navigatorOptions.yAxis &&
53046
- navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false), // #14060
53278
+ reversed: ((navigatorOptions.yAxis &&
53279
+ navigatorOptions.yAxis.reversed) ??
53280
+ (chart.yAxis[0] && chart.yAxis[0].reversed) ??
53281
+ false), // #14060
53047
53282
  zoomEnabled: false
53048
53283
  }, chart.inverted ? {
53049
53284
  width: height
@@ -53129,7 +53364,9 @@ class Navigator {
53129
53364
  */
53130
53365
  setOpposite() {
53131
53366
  const navigatorOptions = this.navigatorOptions, navigatorEnabled = this.navigatorEnabled, chart = this.chart;
53132
- this.opposite = pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262
53367
+ this.opposite =
53368
+ navigatorOptions.opposite ??
53369
+ Boolean(!navigatorEnabled && chart.inverted); // #6262
53133
53370
  }
53134
53371
  /**
53135
53372
  * Get the union data extremes of the chart - the outer data extremes of the
@@ -53143,9 +53380,8 @@ class Navigator {
53143
53380
  let ret;
53144
53381
  if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {
53145
53382
  ret = {
53146
- dataMin: pick(// #4053
53147
- time.parse(navAxisOptions?.min), numExt('min', time.parse(baseAxisOptions.min), baseAxis.dataMin, navAxis.dataMin, navAxis.min)),
53148
- dataMax: pick(time.parse(navAxisOptions?.max), numExt('max', time.parse(baseAxisOptions.max), baseAxis.dataMax, navAxis.dataMax, navAxis.max))
53383
+ dataMin: (time.parse(navAxisOptions?.min) ?? numExt('min', time.parse(baseAxisOptions.min), baseAxis.dataMin, navAxis.dataMin, navAxis.min)),
53384
+ dataMax: (time.parse(navAxisOptions?.max) ?? numExt('max', time.parse(baseAxisOptions.max), baseAxis.dataMax, navAxis.dataMax, navAxis.max))
53149
53385
  };
53150
53386
  }
53151
53387
  return ret;
@@ -53260,11 +53496,9 @@ class Navigator {
53260
53496
  userNavOptions.dataLabels = splat(userNavOptions.dataLabels);
53261
53497
  mergedNavSeriesOptions = merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);
53262
53498
  // Once nav series type is resolved, pick correct pointRange
53263
- mergedNavSeriesOptions.pointRange = pick(
53264
- // Strictly set pointRange in options
53265
- userNavOptions.pointRange, baseNavigatorOptions.pointRange,
53266
- // Fallback to default values, e.g. `null` for column
53267
- Navigator_defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line']?.pointRange);
53499
+ mergedNavSeriesOptions.pointRange = (userNavOptions.pointRange ??
53500
+ baseNavigatorOptions.pointRange ??
53501
+ Navigator_defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line']?.pointRange);
53268
53502
  // Merge data separately. Do a slice to avoid mutating the
53269
53503
  // navigator options from base series (#4923).
53270
53504
  const navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data, navigatorSeriesDataTable = baseNavigatorOptions.dataTable ||
@@ -53424,7 +53658,7 @@ class Navigator {
53424
53658
  * @function Highcharts.Navigator#modifyBaseAxisExtremes
53425
53659
  */
53426
53660
  modifyBaseAxisExtremes() {
53427
- 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,
53661
+ 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,
53428
53662
  // When the extremes have been set by range selector button, don't
53429
53663
  // stick to min or max. The range selector buttons will handle the
53430
53664
  // extremes. (#5489)
@@ -53476,8 +53710,8 @@ class Navigator {
53476
53710
  Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
53477
53711
  // If the scrollbar is scrolled all the way to the right, keep right as
53478
53712
  // new data comes in, unless user set navigator.stickToMax to false.
53479
- navigator.stickToMax = pick(this.chart.options.navigator &&
53480
- this.chart.options.navigator.stickToMax, shouldStickToMax);
53713
+ navigator.stickToMax = (this.chart.options.navigator &&
53714
+ this.chart.options.navigator.stickToMax) ?? shouldStickToMax;
53481
53715
  navigator.stickToMin = navigator.shouldStickToMin(baseSeries, navigator);
53482
53716
  // Set the navigator series data to the new data of the base series
53483
53717
  if (navigatorSeries && !navigator.hasNavigatorData) {
@@ -54252,7 +54486,7 @@ function axisMinFromRange() {
54252
54486
  this.chart.setFixedRange(max - min);
54253
54487
  }
54254
54488
  }
54255
- const dataMin = pick(this.dataMin, Number.MIN_VALUE);
54489
+ const dataMin = (this.dataMin ?? Number.MIN_VALUE);
54256
54490
  if (!isNumber(min)) {
54257
54491
  min = dataMin;
54258
54492
  }
@@ -54261,7 +54495,7 @@ function axisMinFromRange() {
54261
54495
  if (typeof range === 'undefined') { // #4501
54262
54496
  range = getTrueRange(min, rangeOptions.count);
54263
54497
  }
54264
- this.newMax = Math.min(min + range, pick(this.dataMax, Number.MAX_VALUE));
54498
+ this.newMax = Math.min(min + range, (this.dataMax ?? Number.MAX_VALUE));
54265
54499
  }
54266
54500
  if (!isNumber(max)) {
54267
54501
  min = void 0;
@@ -54682,7 +54916,7 @@ class RangeSelector {
54682
54916
  }
54683
54917
  else if (isNumber(newMin) || isNumber(newMax)) {
54684
54918
  // Existing axis object. Set extremes after render time.
54685
- baseAxis.setExtremes(newMin, newMax, pick(redraw, true), void 0, // Auto animation
54919
+ baseAxis.setExtremes(newMin, newMax, (redraw ?? true), void 0, // Auto animation
54686
54920
  {
54687
54921
  trigger: 'rangeSelectorButton',
54688
54922
  rangeSelectorButton: rangeOptions
@@ -54917,8 +55151,8 @@ class RangeSelector {
54917
55151
  year: 365
54918
55152
  }[type] * 24 * 36e5 * count;
54919
55153
  }
54920
- rangeOptions._offsetMin = pick(rangeOptions.offsetMin, 0);
54921
- rangeOptions._offsetMax = pick(rangeOptions.offsetMax, 0);
55154
+ rangeOptions._offsetMin = (rangeOptions.offsetMin ?? 0);
55155
+ rangeOptions._offsetMax = (rangeOptions.offsetMax ?? 0);
54922
55156
  rangeOptions._range +=
54923
55157
  rangeOptions._offsetMax - rangeOptions._offsetMin;
54924
55158
  }
@@ -55229,7 +55463,7 @@ class RangeSelector {
55229
55463
  };
55230
55464
  }
55231
55465
  createElements() {
55232
- const chart = this.chart, renderer = chart.renderer, container = chart.container, chartOptions = chart.options, options = chartOptions.rangeSelector, inputEnabled = options.inputEnabled, inputsZIndex = pick(chartOptions.chart.style?.zIndex, 0) + 1;
55466
+ const chart = this.chart, renderer = chart.renderer, container = chart.container, chartOptions = chart.options, options = chartOptions.rangeSelector, inputEnabled = options.inputEnabled, inputsZIndex = (chartOptions.chart.style?.zIndex ?? 0) + 1;
55233
55467
  if (options.enabled === false) {
55234
55468
  return;
55235
55469
  }
@@ -55370,10 +55604,14 @@ class RangeSelector {
55370
55604
  // Create a label for dropdown select element
55371
55605
  const userButtonTheme = chart.userOptions.rangeSelector?.buttonTheme;
55372
55606
  this.dropdownLabel = renderer.button('', 0, 0, () => { }, merge(buttonTheme, {
55373
- 'stroke-width': pick(buttonTheme['stroke-width'], 0),
55607
+ 'stroke-width': (buttonTheme['stroke-width'] ?? 0),
55374
55608
  width: 'auto',
55375
- paddingLeft: pick(options.buttonTheme.paddingLeft, userButtonTheme?.padding, 8),
55376
- paddingRight: pick(options.buttonTheme.paddingRight, userButtonTheme?.padding, 8)
55609
+ paddingLeft: options.buttonTheme.paddingLeft ??
55610
+ userButtonTheme?.padding ??
55611
+ 8,
55612
+ paddingRight: options.buttonTheme.paddingRight ??
55613
+ userButtonTheme?.padding ??
55614
+ 8
55377
55615
  }), states && states.hover, states && states.select, states && states.disabled)
55378
55616
  .hide()
55379
55617
  .add(this.group);
@@ -55554,7 +55792,7 @@ class RangeSelector {
55554
55792
  legendOptions.enabled &&
55555
55793
  !legendOptions.floating ?
55556
55794
  (chart.legend.legendHeight +
55557
- pick(legendOptions.margin, 10)) :
55795
+ (legendOptions.margin ?? 10)) :
55558
55796
  0);
55559
55797
  groupHeight = groupHeight + legendHeight - 20;
55560
55798
  translateY = (alignTranslateY -
@@ -55700,7 +55938,7 @@ class RangeSelector {
55700
55938
  // Align button group
55701
55939
  buttonGroup.align({
55702
55940
  y: buttonPosition.y,
55703
- width: pick(width, this.initialButtonGroupWidth),
55941
+ width: (width ?? this.initialButtonGroupWidth),
55704
55942
  align: buttonPosition.align,
55705
55943
  x: translateX
55706
55944
  }, true, chart.spacingBox);
@@ -55719,7 +55957,7 @@ class RangeSelector {
55719
55957
  if (zoomText && zoomText.visibility !== 'hidden') {
55720
55958
  // #8769, allow dynamically updating margins
55721
55959
  zoomText[verb]({
55722
- x: pick(plotLeft + buttonPosition.x, plotLeft)
55960
+ x: plotLeft + (buttonPosition.x ?? 0)
55723
55961
  });
55724
55962
  // Button start position
55725
55963
  buttonLeft += buttonPosition.x +
@@ -56183,7 +56421,6 @@ const PathUtilities = {
56183
56421
  * */
56184
56422
 
56185
56423
 
56186
-
56187
56424
  /* *
56188
56425
  *
56189
56426
  * Constants
@@ -56380,7 +56617,8 @@ function straight(start, end) {
56380
56617
  */
56381
56618
  const simpleConnect = function (start, end, options) {
56382
56619
  const segments = [], chartObstacles = options.chartObstacles, startObstacleIx = findObstacleFromPoint(chartObstacles, start), endObstacleIx = findObstacleFromPoint(chartObstacles, end);
56383
- let endSegment, dir = pick(options.startDirectionX, abs(end.x - start.x) > abs(end.y - start.y)) ? 'x' : 'y', startObstacle, endObstacle, waypoint, useMax, endPoint;
56620
+ let endSegment, dir = (options.startDirectionX ??
56621
+ (abs(end.x - start.x) > abs(end.y - start.y))) ? 'x' : 'y', startObstacle, endObstacle, waypoint, useMax, endPoint;
56384
56622
  // eslint-disable-next-line valid-jsdoc
56385
56623
  /**
56386
56624
  * Return a clone of a point with a property set from a target object,
@@ -56522,7 +56760,8 @@ function fastAvoid(start, end, options) {
56522
56760
  - When going around the end obstacle we should not always go the
56523
56761
  shortest route, rather pick the one closer to the end point
56524
56762
  */
56525
- const dirIsX = pick(options.startDirectionX, abs(end.x - start.x) > abs(end.y - start.y)), dir = dirIsX ? 'x' : 'y', endSegments = [],
56763
+ const dirIsX = options.startDirectionX ??
56764
+ (abs(end.x - start.x) > abs(end.y - start.y)), dir = dirIsX ? 'x' : 'y', endSegments = [],
56526
56765
  // Boundaries to stay within. If beyond soft boundary, prefer to
56527
56766
  // change direction ASAP. If at hard max, always change immediately.
56528
56767
  metrics = options.obstacleMetrics, softMinX = PathfinderAlgorithms_min(start.x, end.x) - metrics.maxWidth - 10, softMaxX = PathfinderAlgorithms_max(start.x, end.x) + metrics.maxWidth + 10, softMinY = PathfinderAlgorithms_min(start.y, end.y) - metrics.maxHeight - 10, softMaxY = PathfinderAlgorithms_max(start.y, end.y) + metrics.maxHeight + 10;
@@ -57476,7 +57715,7 @@ function Pathfinder_getPointBB(point) {
57476
57715
  */
57477
57716
  function calculateObstacleDistance(a, b, bbMargin) {
57478
57717
  // Count the distance even if we are slightly off
57479
- const margin = pick(bbMargin, 10), yOverlap = a.yMax + margin > b.yMin - margin &&
57718
+ const margin = (bbMargin ?? 10), yOverlap = a.yMax + margin > b.yMin - margin &&
57480
57719
  a.yMin - margin < b.yMax + margin, xOverlap = a.xMax + margin > b.xMin - margin &&
57481
57720
  a.xMin - margin < b.xMax + margin, xDistance = yOverlap ? (a.xMin > b.xMax ? a.xMin - b.xMax : b.xMin - a.xMax) : Infinity, yDistance = xOverlap ? (a.yMin > b.yMax ? a.yMin - b.yMax : b.yMin - a.yMax) : Infinity;
57482
57721
  // If the rectangles collide, try recomputing with smaller margin.
@@ -57721,7 +57960,7 @@ class Pathfinder {
57721
57960
  * with xMin, xMax, yMin and yMax properties.
57722
57961
  */
57723
57962
  getChartObstacles(options) {
57724
- const series = this.chart.series, margin = pick(options.algorithmMargin, 0);
57963
+ const series = this.chart.series, margin = (options.algorithmMargin ?? 0);
57725
57964
  let obstacles = [], calculatedMargin;
57726
57965
  for (let i = 0, sLen = series.length; i < sLen; ++i) {
57727
57966
  if (series[i].visible && !series[i].options.isInternal) {
@@ -57854,9 +58093,10 @@ Pathfinder.prototype.algorithms = PathfinderAlgorithms;
57854
58093
  ''; // Keeps doclets above in JS file
57855
58094
 
57856
58095
  ;// ./code/es-modules/masters/modules/pathfinder.src.js
58096
+ /* unused harmony import specifier */ var Highcharts;
57857
58097
  // SPDX-License-Identifier: LicenseRef-Highcharts
57858
58098
  /**
57859
- * @license Highcharts Gantt JS v13.0.0 (2026-06-11)
58099
+ * @license Highcharts Gantt JS v13.0.2 (2026-08-27)
57860
58100
  * @module highcharts/modules/pathfinder
57861
58101
  * @requires highcharts
57862
58102
  *
@@ -57984,9 +58224,10 @@ function chartAdjustHeight() {
57984
58224
  ''; // Keeps doclets above in JS file
57985
58225
 
57986
58226
  ;// ./code/es-modules/masters/modules/static-scale.src.js
58227
+ /* unused harmony import specifier */ var static_scale_src_Highcharts;
57987
58228
  // SPDX-License-Identifier: LicenseRef-Highcharts
57988
58229
  /**
57989
- * @license Highcharts Gantt JS v13.0.0 (2026-06-11)
58230
+ * @license Highcharts Gantt JS v13.0.2 (2026-08-27)
57990
58231
  * @module highcharts/modules/static-scale
57991
58232
  * @requires highcharts
57992
58233
  *
@@ -58003,7 +58244,7 @@ function chartAdjustHeight() {
58003
58244
 
58004
58245
  const static_scale_src_G = Core_Globals;
58005
58246
  composeStaticScale(static_scale_src_G.Axis, static_scale_src_G.Chart);
58006
- /* harmony default export */ const static_scale_src = ((/* unused pure expression or super */ null && (Highcharts)));
58247
+ /* harmony default export */ const static_scale_src = ((/* unused pure expression or super */ null && (static_scale_src_Highcharts)));
58007
58248
 
58008
58249
  ;// ./code/es-modules/Series/XRange/XRangeSeriesDefaults.js
58009
58250
  /* *
@@ -58401,7 +58642,7 @@ function onAxisAfterGetSeriesExtremes() {
58401
58642
  const time = this.chart.time;
58402
58643
  let dataMax, modMax;
58403
58644
  if (this.isXAxis) {
58404
- dataMax = pick(this.dataMax, -Number.MAX_VALUE);
58645
+ dataMax = this.dataMax ?? -Number.MAX_VALUE;
58405
58646
  for (const series of this.series) {
58406
58647
  const column = (series.dataTable.getColumn('x2', true) ||
58407
58648
  series.dataTable.getColumn('end', true) ||
@@ -58526,7 +58767,7 @@ class XRangeSeries extends XRangeSeries_ColumnSeries {
58526
58767
  }
58527
58768
  alignDataLabel(point) {
58528
58769
  const oldPlotX = point.plotX;
58529
- point.plotX = pick(point.dlBox?.centerX, point.plotX);
58770
+ point.plotX = point.dlBox?.centerX ?? point.plotX;
58530
58771
  if (point.dataLabel && point.shapeArgs?.width) {
58531
58772
  point.dataLabel.css({
58532
58773
  width: `${point.shapeArgs.width}px`
@@ -58539,9 +58780,9 @@ class XRangeSeries extends XRangeSeries_ColumnSeries {
58539
58780
  * @private
58540
58781
  */
58541
58782
  translatePoint(point) {
58542
- const xAxis = this.xAxis, yAxis = this.yAxis, metrics = this.columnMetrics, options = this.options, minPointLength = options.minPointLength || 0, oldColWidth = (point.shapeArgs?.width || 0) / 2, seriesXOffset = this.pointXOffset = metrics.offset, posX = pick(point.x2, point.x + (point.len || 0)), borderRadius = options.borderRadius, plotTop = this.chart.plotTop, plotLeft = this.chart.plotLeft;
58783
+ const xAxis = this.xAxis, yAxis = this.yAxis, metrics = this.columnMetrics, options = this.options, minPointLength = options.minPointLength || 0, oldColWidth = (point.shapeArgs?.width || 0) / 2, seriesXOffset = this.pointXOffset = metrics.offset, posX = point.x2 ?? (point.x + (point.len || 0)), borderRadius = options.borderRadius, plotTop = this.chart.plotTop, plotLeft = this.chart.plotLeft;
58543
58784
  let plotX = point.plotX, plotX2 = xAxis.translate(posX, 0, 0, 0, 1);
58544
- const length = Math.abs(plotX2 - plotX), inverted = this.chart.inverted, borderWidth = pick(options.borderWidth, 1);
58785
+ const length = Math.abs(plotX2 - plotX), inverted = this.chart.inverted, borderWidth = options.borderWidth ?? 1;
58545
58786
  let widthDifference, partialFill, yOffset = metrics.offset, pointHeight = Math.round(metrics.width), dlLeft, dlRight, dlWidth, clipRectWidth;
58546
58787
  if (minPointLength) {
58547
58788
  widthDifference = minPointLength - length;
@@ -58671,9 +58912,9 @@ class XRangeSeries extends XRangeSeries_ColumnSeries {
58671
58912
  * 'animate' (animates changes) or 'attr' (sets options)
58672
58913
  */
58673
58914
  drawPoint(point, verb) {
58674
- const seriesOpts = this.options, renderer = this.chart.renderer, type = point.shapeType, shapeArgs = point.shapeArgs, partShapeArgs = point.partShapeArgs, clipRectArgs = point.clipRectArgs, pointState = point.state, stateOpts = (seriesOpts.states[pointState || 'normal'] ||
58675
- {}), pointStateVerb = typeof pointState === 'undefined' ?
58676
- 'attr' : verb, pointAttr = this.pointAttribs(point, pointState), animation = pick(this.chart.options.chart.animation, stateOpts.animation);
58915
+ const seriesOpts = this.options, renderer = this.chart.renderer, type = point.shapeType, shapeArgs = point.shapeArgs, partShapeArgs = point.partShapeArgs, clipRectArgs = point.clipRectArgs, pointState = point.state, stateOpts = seriesOpts.states?.[pointState || 'normal'] || {}, pointStateVerb = typeof pointState === 'undefined' ?
58916
+ 'attr' : verb, pointAttr = this.pointAttribs(point, pointState), animation = (this.chart.options.chart.animation ??
58917
+ stateOpts.animation);
58677
58918
  let graphic = point.graphic, pfOptions = point.partialFill;
58678
58919
  if (!point.isNull && point.visible !== false) {
58679
58920
  const className = point.getClassName();
@@ -58799,9 +59040,10 @@ Series_SeriesRegistry.registerSeriesType('xrange', XRangeSeries);
58799
59040
  /* harmony default export */ const XRange_XRangeSeries = (XRangeSeries);
58800
59041
 
58801
59042
  ;// ./code/es-modules/masters/modules/xrange.src.js
59043
+ /* unused harmony import specifier */ var xrange_src_Highcharts;
58802
59044
  // SPDX-License-Identifier: LicenseRef-Highcharts
58803
59045
  /**
58804
- * @license Highcharts JS v13.0.0 (2026-06-11)
59046
+ * @license Highcharts JS v13.0.2 (2026-08-27)
58805
59047
  * @module highcharts/modules/xrange
58806
59048
  * @requires highcharts
58807
59049
  *
@@ -58818,7 +59060,7 @@ Series_SeriesRegistry.registerSeriesType('xrange', XRangeSeries);
58818
59060
 
58819
59061
  const xrange_src_G = Core_Globals;
58820
59062
  XRange_XRangeSeries.compose(xrange_src_G.Axis);
58821
- /* harmony default export */ const xrange_src = ((/* unused pure expression or super */ null && (Highcharts)));
59063
+ /* harmony default export */ const xrange_src = ((/* unused pure expression or super */ null && (xrange_src_Highcharts)));
58822
59064
 
58823
59065
  ;// ./code/es-modules/Series/Gantt/GanttPoint.js
58824
59066
  /* *
@@ -59246,7 +59488,7 @@ var BrokenAxis;
59246
59488
  /** @internal */
59247
59489
  function onSeriesAfterRender() {
59248
59490
  this.drawBreaks(this.xAxis, ['x']);
59249
- this.drawBreaks(this.yAxis, pick(this.pointArrayMap, ['y']));
59491
+ this.drawBreaks(this.yAxis, (this.pointArrayMap ?? ['y']));
59250
59492
  }
59251
59493
  /** @internal */
59252
59494
  function seriesDrawBreaks(axis, keys) {
@@ -59258,7 +59500,7 @@ var BrokenAxis;
59258
59500
  breaks = brokenAxis?.breakArray || [];
59259
59501
  threshold = axis.isXAxis ?
59260
59502
  axis.min :
59261
- pick(series.options.threshold, axis.min);
59503
+ (series.options.threshold ?? axis.min);
59262
59504
  points.forEach(function (point) {
59263
59505
  y = point['stack' + key.toUpperCase()] ??
59264
59506
  point[key];
@@ -59551,7 +59793,8 @@ var BrokenAxis;
59551
59793
  if (Additions.isInBreak(breaks[i], val)) {
59552
59794
  inbrk = true;
59553
59795
  if (!keep) {
59554
- keep = pick(breaks[i].showPoints, !axis.isXAxis);
59796
+ keep =
59797
+ breaks[i].showPoints ?? !axis.isXAxis;
59555
59798
  }
59556
59799
  }
59557
59800
  }
@@ -59734,7 +59977,7 @@ var BrokenAxis;
59734
59977
  }
59735
59978
  };
59736
59979
  }
59737
- if (pick(redraw, true)) {
59980
+ if (redraw ?? true) {
59738
59981
  axis.chart.redraw();
59739
59982
  }
59740
59983
  }
@@ -59806,7 +60049,7 @@ function applyGridOptions(axis) {
59806
60049
  options.labels = {};
59807
60050
  }
59808
60051
  */
59809
- options.labels.align = pick(options.labels.align, 'center');
60052
+ options.labels.align = (options.labels.align ?? 'center');
59810
60053
  // @todo: Check against tickLabelPlacement between/on etc
59811
60054
  /* Prevents adding the last tick label if the axis is not a category
59812
60055
  axis.
@@ -60350,8 +60593,8 @@ function onAfterSetOptions(e) {
60350
60593
  _________________________
60351
60594
  Into this: |_____|_____|_____|_____|
60352
60595
  ^ ^ */
60353
- options.minPadding = pick(userOptions.minPadding, 0);
60354
- options.maxPadding = pick(userOptions.maxPadding, 0);
60596
+ options.minPadding = (userOptions.minPadding ?? 0);
60597
+ options.maxPadding = (userOptions.maxPadding ?? 0);
60355
60598
  }
60356
60599
  // If borderWidth is set, then use its value for tick and
60357
60600
  // line width.
@@ -60414,6 +60657,11 @@ function GridAxis_onChartAfterSetChartSize() {
60414
60657
  /** @internal */
60415
60658
  function onDestroy(e) {
60416
60659
  const { grid } = this;
60660
+ // Axes created before the Gantt module was loaded have no grid
60661
+ // additions to be destroyed (#24644).
60662
+ if (!grid) {
60663
+ return;
60664
+ }
60417
60665
  (grid.columns || []).forEach((column) => column.destroy(e.keepEvents));
60418
60666
  grid.columns = void 0;
60419
60667
  }
@@ -60433,7 +60681,9 @@ function onInit(e) {
60433
60681
  }
60434
60682
  axis.hiddenLabels = [];
60435
60683
  axis.hiddenMarks = [];
60436
- axis.clippable = false;
60684
+ if (gridOptions.enabled) {
60685
+ axis.clippable = false;
60686
+ }
60437
60687
  }
60438
60688
  /**
60439
60689
  * Center tick labels in cells.
@@ -60863,7 +61113,7 @@ function getNode(id, parent, level, data, mapOfIdToChildren, options) {
60863
61113
  }
60864
61114
  // Call getNode recursively on the children. Calculate the height of the
60865
61115
  // node, and the number of descendants.
60866
- const children = ((mapOfIdToChildren[id] || [])).map((child) => {
61116
+ const children = (mapOfIdToChildren[id] || []).map((child) => {
60867
61117
  const node = getNode(child.id, id, (level + 1), child, mapOfIdToChildren, options), childStart = child.start || NaN, childEnd = (child.milestone === true ?
60868
61118
  childStart :
60869
61119
  child.end ||
@@ -60992,7 +61242,7 @@ function renderLabelIcon(tick, params) {
60992
61242
  }
60993
61243
  /** @internal */
60994
61244
  function wrapGetLabelPosition(proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
60995
- const tick = this, lbOptions = pick(tick.options?.labels, labelOptions), pos = tick.pos, axis = tick.axis, isTreeGrid = axis.type === 'treegrid', result = proceed.apply(tick, [x, y, label, horiz, lbOptions, tickmarkOffset, index, step]);
61245
+ const tick = this, lbOptions = (tick.options?.labels ?? labelOptions), pos = tick.pos, axis = tick.axis, isTreeGrid = axis.type === 'treegrid', result = proceed.apply(tick, [x, y, label, horiz, lbOptions, tickmarkOffset, index, step]);
60996
61246
  let mapOfPosToGridNode, node, level;
60997
61247
  if (isTreeGrid) {
60998
61248
  const { width = 0, padding = axis.linkedParent ? 0 : 5 } = (lbOptions && isObject(lbOptions.symbol, true) ?
@@ -61013,7 +61263,7 @@ function wrapGetLabelPosition(proceed, x, y, label, horiz, labelOptions, tickmar
61013
61263
  }
61014
61264
  /** @internal */
61015
61265
  function wrapRenderLabel(proceed) {
61016
- const tick = this, { pos, axis, label, treeGrid: tickGrid, options: tickOptions } = tick, icon = tickGrid?.labelIcon, labelElement = label?.element, { treeGrid: axisGrid, options: axisOptions, chart, tickPositions } = axis, mapOfPosToGridNode = axisGrid.mapOfPosToGridNode, labelOptions = pick(tickOptions?.labels, axisOptions?.labels), symbolOptions = (labelOptions && isObject(labelOptions.symbol, true) ?
61266
+ const tick = this, { pos, axis, label, treeGrid: tickGrid, options: tickOptions } = tick, icon = tickGrid?.labelIcon, labelElement = label?.element, { treeGrid: axisGrid, options: axisOptions, chart, tickPositions } = axis, mapOfPosToGridNode = axisGrid.mapOfPosToGridNode, labelOptions = (tickOptions?.labels ?? axisOptions?.labels), symbolOptions = (labelOptions && isObject(labelOptions.symbol, true) ?
61017
61267
  labelOptions.symbol :
61018
61268
  {}), node = mapOfPosToGridNode?.[pos], { descendants, depth } = node || {}, hasDescendants = node && descendants && descendants > 0, level = depth, isTreeGridElement = (axis.type === 'treegrid') && labelElement, shouldRender = tickPositions.indexOf(pos) > -1, prefixClassName = 'highcharts-treegrid-node-', prefixLevelClass = prefixClassName + 'level-', styledMode = chart.styledMode;
61019
61269
  let collapsed, addClassName, removeClassName;
@@ -61276,9 +61526,17 @@ function getColor(node, options) {
61276
61526
  }
61277
61527
  // Select either point color, level color or inherited color.
61278
61528
  if (!series.chart.styledMode) {
61279
- color = pick(point && point.options.color, level && level.color, colorByPoint, parentColor && variateColor(parentColor), series.color);
61280
- }
61281
- colorIndex = pick(point && point.options.colorIndex, level && level.colorIndex, colorIndexByPoint, parentColorIndex, options.colorIndex);
61529
+ color = ((point && point.options.color) ??
61530
+ (level && level.color) ??
61531
+ colorByPoint ??
61532
+ (parentColor && variateColor(parentColor)) ??
61533
+ series.color);
61534
+ }
61535
+ colorIndex = ((point && point.options.colorIndex) ??
61536
+ (level && level.colorIndex) ??
61537
+ colorIndexByPoint ??
61538
+ parentColorIndex ??
61539
+ options.colorIndex);
61282
61540
  }
61283
61541
  return {
61284
61542
  color: color,
@@ -61315,7 +61573,8 @@ function getLevelOptions(params) {
61315
61573
  let level, levelIsConstant, options;
61316
61574
  if (isObject(item) && isNumber(item.level)) {
61317
61575
  options = merge({}, item);
61318
- levelIsConstant = pick(options.levelIsConstant, defaults.levelIsConstant);
61576
+ levelIsConstant =
61577
+ options.levelIsConstant ?? defaults.levelIsConstant;
61319
61578
  // Delete redundant properties.
61320
61579
  delete options.levelIsConstant;
61321
61580
  delete options.level;
@@ -61347,7 +61606,7 @@ function setTreeValues(tree, options) {
61347
61606
  const before = options.before, idRoot = options.idRoot, mapIdToNode = options.mapIdToNode, nodeRoot = mapIdToNode[idRoot], levelIsConstant = (options.levelIsConstant !== false), points = options.points, point = points[tree.i], optionsPoint = point && point.options || {}, children = [];
61348
61607
  let childrenTotal = 0;
61349
61608
  tree.levelDynamic = tree.level - (levelIsConstant ? 0 : nodeRoot.level);
61350
- tree.name = pick(point && point.name, '');
61609
+ tree.name = ((point && point.name) ?? '');
61351
61610
  tree.visible = (idRoot === tree.id ||
61352
61611
  options.visible === true);
61353
61612
  if (typeof before === 'function') {
@@ -61368,7 +61627,7 @@ function setTreeValues(tree, options) {
61368
61627
  }
61369
61628
  });
61370
61629
  // Set the values
61371
- const value = pick(optionsPoint.value, childrenTotal);
61630
+ const value = (optionsPoint.value ?? childrenTotal);
61372
61631
  tree.visible = value >= 0 && (childrenTotal > 0 || tree.visible);
61373
61632
  tree.children = children;
61374
61633
  tree.childrenTotal = childrenTotal;
@@ -61394,7 +61653,7 @@ function updateRootId(series) {
61394
61653
  // Get the series options.
61395
61654
  options = isObject(series.options) ? series.options : {};
61396
61655
  // Calculate the rootId.
61397
- rootId = pick(series.rootNode, options.rootId, '');
61656
+ rootId = (series.rootNode ?? options.rootId ?? '');
61398
61657
  // Set rootId on series.userOptions to pick it up in exporting.
61399
61658
  if (isObject(series.userOptions)) {
61400
61659
  series.userOptions.rootId = rootId;
@@ -61786,7 +62045,7 @@ function wrapInit(proceed, chart, userOptions, coll) {
61786
62045
  if (isTreeGrid) {
61787
62046
  // Add event for updating the categories of a treegrid.
61788
62047
  // NOTE Preferably these events should be set on the axis.
61789
- addEvent(chart, 'beforeRender', onBeforeRender);
62048
+ addEvent(chart, 'beforeRender', onBeforeRender, { order: 0 });
61790
62049
  addEvent(chart, 'beforeRedraw', onBeforeRender);
61791
62050
  // Add new collapsed nodes on addSeries
61792
62051
  addEvent(chart, 'addSeries', function (e) {
@@ -62204,7 +62463,8 @@ class GanttSeries extends GanttSeries_XRangeSeries {
62204
62463
  if (columnName === 'x') {
62205
62464
  const startColumn = super.getColumn('start');
62206
62465
  if (startColumn.length) {
62207
- return startColumn.map((val) => time.parse(val) || 0);
62466
+ return startColumn.map((val) => time.parse(val) ?? NaN // #24849
62467
+ );
62208
62468
  }
62209
62469
  }
62210
62470
  return super.getColumn.apply(this, arguments);
@@ -62298,9 +62558,10 @@ Series_SeriesRegistry.registerSeriesType('gantt', GanttSeries);
62298
62558
  /* harmony default export */ const Gantt_GanttSeries = (GanttSeries);
62299
62559
 
62300
62560
  ;// ./code/es-modules/masters/modules/gantt.src.js
62561
+ /* unused harmony import specifier */ var gantt_src_Highcharts;
62301
62562
  // SPDX-License-Identifier: LicenseRef-Highcharts
62302
62563
  /**
62303
- * @license Highcharts Gantt JS v13.0.0 (2026-06-11)
62564
+ * @license Highcharts Gantt JS v13.0.2 (2026-08-27)
62304
62565
  * @module highcharts/modules/gantt
62305
62566
  * @requires highcharts
62306
62567
  *
@@ -62342,7 +62603,7 @@ Gantt_GanttSeries.compose(gantt_src_G.Axis, gantt_src_G.Chart, gantt_src_G.Serie
62342
62603
  gantt_src_G.Navigator.compose(gantt_src_G.Chart, gantt_src_G.Axis, gantt_src_G.Series);
62343
62604
  gantt_src_G.RangeSelector.compose(gantt_src_G.Axis, gantt_src_G.Chart);
62344
62605
  gantt_src_G.Scrollbar.compose(gantt_src_G.Axis);
62345
- /* harmony default export */ const gantt_src = ((/* unused pure expression or super */ null && (Highcharts)));
62606
+ /* harmony default export */ const gantt_src = ((/* unused pure expression or super */ null && (gantt_src_Highcharts)));
62346
62607
 
62347
62608
  ;// ./code/es-modules/masters/highcharts-gantt.src.js
62348
62609