@ntlab/ntjs-assets 2.0.21 → 2.0.22

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 (402) hide show
  1. package/assets/js/cdn.json +1 -1
  2. package/assets/js/highcharts/css/highcharts.css +74 -0
  3. package/assets/js/highcharts/es-modules/Accessibility/Components/LegendComponent.js +1 -1
  4. package/assets/js/highcharts/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +1 -1
  5. package/assets/js/highcharts/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +9 -2
  6. package/assets/js/highcharts/es-modules/Core/Axis/Axis.js +25 -15
  7. package/assets/js/highcharts/es-modules/Core/Axis/AxisDefaults.js +3 -2
  8. package/assets/js/highcharts/es-modules/Core/Axis/Color/ColorAxis.js +1 -1
  9. package/assets/js/highcharts/es-modules/Core/Axis/Color/ColorAxisDefaults.js +2 -2
  10. package/assets/js/highcharts/es-modules/Core/Axis/GridAxis.js +1 -1
  11. package/assets/js/highcharts/es-modules/Core/Axis/OrdinalAxis.js +1 -1
  12. package/assets/js/highcharts/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +10 -0
  13. package/assets/js/highcharts/es-modules/Core/Axis/RadialAxis.js +19 -113
  14. package/assets/js/highcharts/es-modules/Core/Axis/RadialAxisDefaults.js +128 -0
  15. package/assets/js/highcharts/es-modules/Core/Axis/Tick.js +9 -13
  16. package/assets/js/highcharts/es-modules/Core/Chart/Chart.js +21 -17
  17. package/assets/js/highcharts/es-modules/Core/Chart/ChartDefaults.js +4 -2
  18. package/assets/js/highcharts/es-modules/Core/Chart/StockChart.js +5 -9
  19. package/assets/js/highcharts/es-modules/Core/Defaults.js +180 -91
  20. package/assets/js/highcharts/es-modules/Core/Renderer/SVG/SVGElement.js +50 -28
  21. package/assets/js/highcharts/es-modules/Core/Renderer/SVG/SVGLabel.js +6 -3
  22. package/assets/js/highcharts/es-modules/Core/Renderer/SVG/SVGRenderer.js +38 -80
  23. package/assets/js/highcharts/es-modules/Core/Renderer/SVG/Symbols.js +9 -5
  24. package/assets/js/highcharts/es-modules/Core/Series/DataLabel.js +17 -10
  25. package/assets/js/highcharts/es-modules/Core/Series/Point.js +4 -3
  26. package/assets/js/highcharts/es-modules/Core/Series/Series.js +24 -15
  27. package/assets/js/highcharts/es-modules/Core/Series/SeriesDefaults.js +15 -0
  28. package/assets/js/highcharts/es-modules/Core/Templating.js +4 -1
  29. package/assets/js/highcharts/es-modules/Core/Tooltip.js +17 -55
  30. package/assets/js/highcharts/es-modules/Core/Utilities.js +16 -0
  31. package/assets/js/highcharts/es-modules/Data/Converters/CSVConverter.js +1 -1
  32. package/assets/js/highcharts/es-modules/Data/DataCursor.js +34 -16
  33. package/assets/js/highcharts/es-modules/Data/DataPool.js +1 -1
  34. package/assets/js/highcharts/es-modules/Extensions/Annotations/Controllables/Controllable.js +3 -0
  35. package/assets/js/highcharts/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +0 -3
  36. package/assets/js/highcharts/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +0 -3
  37. package/assets/js/highcharts/es-modules/Extensions/Annotations/EventEmitter.js +6 -6
  38. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +2 -0
  39. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/CrookedLine.js +1 -0
  40. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/Fibonacci.js +4 -2
  41. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +2 -1
  42. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/InfinityLine.js +2 -1
  43. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/Measure.js +4 -3
  44. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/Pitchfork.js +11 -5
  45. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/TimeCycles.js +2 -1
  46. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/Tunnel.js +4 -2
  47. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/VerticalLine.js +2 -1
  48. package/assets/js/highcharts/es-modules/Extensions/Boost/BoostChart.js +11 -3
  49. package/assets/js/highcharts/es-modules/Extensions/Boost/BoostSeries.js +7 -4
  50. package/assets/js/highcharts/es-modules/Extensions/Boost/WGLRenderer.js +11 -2
  51. package/assets/js/highcharts/es-modules/Extensions/Data.js +3 -3
  52. package/assets/js/highcharts/es-modules/Extensions/DataGrouping/DataGroupingSeriesComposition.js +1 -0
  53. package/assets/js/highcharts/es-modules/Extensions/DownloadURL.js +3 -0
  54. package/assets/js/highcharts/es-modules/Extensions/DragPanes/AxisResizer.js +1 -2
  55. package/assets/js/highcharts/es-modules/Extensions/DraggablePoints/DragDropProps.js +17 -0
  56. package/assets/js/highcharts/es-modules/Extensions/DraggablePoints/DraggablePoints.js +1 -0
  57. package/assets/js/highcharts/es-modules/Extensions/Drilldown/Drilldown.js +14 -14
  58. package/assets/js/highcharts/es-modules/Extensions/Exporting/Exporting.js +13 -18
  59. package/assets/js/highcharts/es-modules/Extensions/Exporting/ExportingDefaults.js +8 -6
  60. package/assets/js/highcharts/es-modules/Extensions/OfflineExporting/OfflineExporting.js +38 -30
  61. package/assets/js/highcharts/es-modules/Extensions/Pane/PaneDefaults.js +11 -0
  62. package/assets/js/highcharts/es-modules/Extensions/RegexLimits.js +1 -0
  63. package/assets/js/highcharts/es-modules/Extensions/ScrollablePlotArea.js +19 -17
  64. package/assets/js/highcharts/es-modules/Extensions/Themes/BrandDark.js +13 -1
  65. package/assets/js/highcharts/es-modules/Maps/MapNavigation.js +5 -3
  66. package/assets/js/highcharts/es-modules/Maps/MapView.js +5 -5
  67. package/assets/js/highcharts/es-modules/Maps/Projection.js +39 -20
  68. package/assets/js/highcharts/es-modules/Series/ArcDiagram/ArcDiagramSeries.js +10 -231
  69. package/assets/js/highcharts/es-modules/Series/ArcDiagram/ArcDiagramSeriesDefaults.js +245 -0
  70. package/assets/js/highcharts/es-modules/Series/Area/AreaSeries.js +2 -222
  71. package/assets/js/highcharts/es-modules/Series/Area/AreaSeriesDefaults.js +239 -0
  72. package/assets/js/highcharts/es-modules/Series/AreaRange/AreaRangeSeries.js +0 -133
  73. package/assets/js/highcharts/es-modules/Series/AreaRange/AreaRangeSeriesDefaults.js +273 -0
  74. package/assets/js/highcharts/es-modules/Series/BoxPlot/BoxPlotSeries.js +36 -38
  75. package/assets/js/highcharts/es-modules/Series/Bubble/BubbleSeries.js +17 -6
  76. package/assets/js/highcharts/es-modules/Series/Candlestick/CandlestickSeries.js +9 -11
  77. package/assets/js/highcharts/es-modules/Series/ColorMapComposition.js +28 -4
  78. package/assets/js/highcharts/es-modules/Series/Column/ColumnDataLabel.js +1 -1
  79. package/assets/js/highcharts/es-modules/Series/Column/ColumnSeries.js +25 -30
  80. package/assets/js/highcharts/es-modules/Series/DataModifyComposition.js +26 -2
  81. package/assets/js/highcharts/es-modules/Series/DotPlot/DotPlotSeries.js +37 -27
  82. package/assets/js/highcharts/es-modules/Series/DotPlot/DotPlotSeriesDefaults.js +3 -2
  83. package/assets/js/highcharts/es-modules/Series/Dumbbell/DumbbellSeries.js +1 -39
  84. package/assets/js/highcharts/es-modules/Series/Dumbbell/DumbbellSeriesDefaults.js +29 -0
  85. package/assets/js/highcharts/es-modules/Series/Flags/FlagsSeries.js +2 -1
  86. package/assets/js/highcharts/es-modules/Series/GeoHeatmap/GeoHeatmapSeries.js +3 -10
  87. package/assets/js/highcharts/es-modules/Series/HLC/HLCSeries.js +4 -5
  88. package/assets/js/highcharts/es-modules/Series/MapLine/MapLineSeriesDefaults.js +7 -6
  89. package/assets/js/highcharts/es-modules/Series/MapPoint/MapPointSeriesDefaults.js +17 -11
  90. package/assets/js/highcharts/es-modules/Series/Networkgraph/NetworkgraphSeriesDefaults.js +1 -1
  91. package/assets/js/highcharts/es-modules/Series/Networkgraph/ReingoldFruchtermanLayout.js +1 -1
  92. package/assets/js/highcharts/es-modules/Series/OHLC/OHLCSeries.js +3 -5
  93. package/assets/js/highcharts/es-modules/Series/Organization/OrganizationSeries.js +17 -19
  94. package/assets/js/highcharts/es-modules/Series/Organization/OrganizationSeriesDefaults.js +1 -1
  95. package/assets/js/highcharts/es-modules/Series/PackedBubble/PackedBubbleLayout.js +3 -3
  96. package/assets/js/highcharts/es-modules/Series/PackedBubble/PackedBubbleSeries.js +3 -3
  97. package/assets/js/highcharts/es-modules/Series/PackedBubble/PackedBubbleSeriesDefaults.js +0 -1
  98. package/assets/js/highcharts/es-modules/Series/Pyramid/PyramidSeriesDefaults.js +3 -3
  99. package/assets/js/highcharts/es-modules/Series/Sankey/SankeySeries.js +5 -6
  100. package/assets/js/highcharts/es-modules/Series/Sankey/SankeySeriesDefaults.js +1 -1
  101. package/assets/js/highcharts/es-modules/Series/SeriesOnPointComposition.js +2 -2
  102. package/assets/js/highcharts/es-modules/Series/Sunburst/SunburstSeriesDefaults.js +1 -1
  103. package/assets/js/highcharts/es-modules/Series/Treegraph/TreegraphLink.js +12 -7
  104. package/assets/js/highcharts/es-modules/Series/Treegraph/TreegraphSeries.js +8 -9
  105. package/assets/js/highcharts/es-modules/Series/Treemap/TreemapSeries.js +8 -8
  106. package/assets/js/highcharts/es-modules/Series/Treemap/TreemapSeriesDefaults.js +1 -1
  107. package/assets/js/highcharts/es-modules/Series/Variwide/VariwideSeries.js +4 -4
  108. package/assets/js/highcharts/es-modules/Series/Venn/VennSeriesDefaults.js +2 -2
  109. package/assets/js/highcharts/es-modules/Series/Waterfall/WaterfallSeries.js +11 -12
  110. package/assets/js/highcharts/es-modules/Series/XRange/XRangeSeries.js +4 -4
  111. package/assets/js/highcharts/es-modules/Stock/Navigator/Navigator.js +2 -5
  112. package/assets/js/highcharts/es-modules/Stock/Navigator/NavigatorDefaults.js +11 -0
  113. package/assets/js/highcharts/es-modules/Stock/Navigator/NavigatorSymbols.js +9 -10
  114. package/assets/js/highcharts/es-modules/Stock/RangeSelector/RangeSelector.js +162 -187
  115. package/assets/js/highcharts/es-modules/Stock/RangeSelector/RangeSelectorComposition.js +32 -74
  116. package/assets/js/highcharts/es-modules/Stock/Scrollbar/Scrollbar.js +6 -7
  117. package/assets/js/highcharts/es-modules/masters/highcharts-more.src.js +2 -0
  118. package/assets/js/highcharts/highcharts-3d.js +1 -1
  119. package/assets/js/highcharts/highcharts-3d.src.js +1 -1
  120. package/assets/js/highcharts/highcharts-gantt.js +3 -3
  121. package/assets/js/highcharts/highcharts-gantt.src.js +2008 -906
  122. package/assets/js/highcharts/highcharts-more.js +2 -2
  123. package/assets/js/highcharts/highcharts-more.src.js +234 -313
  124. package/assets/js/highcharts/highcharts.js +3 -3
  125. package/assets/js/highcharts/highcharts.src.js +743 -616
  126. package/assets/js/highcharts/highmaps.js +3 -3
  127. package/assets/js/highcharts/highmaps.src.js +862 -673
  128. package/assets/js/highcharts/highstock.js +3 -3
  129. package/assets/js/highcharts/highstock.src.js +1016 -935
  130. package/assets/js/highcharts/indicators/acceleration-bands.js +1 -1
  131. package/assets/js/highcharts/indicators/acceleration-bands.src.js +1 -1
  132. package/assets/js/highcharts/indicators/accumulation-distribution.js +1 -1
  133. package/assets/js/highcharts/indicators/accumulation-distribution.src.js +1 -1
  134. package/assets/js/highcharts/indicators/ao.js +1 -1
  135. package/assets/js/highcharts/indicators/ao.src.js +1 -1
  136. package/assets/js/highcharts/indicators/apo.js +1 -1
  137. package/assets/js/highcharts/indicators/apo.src.js +1 -1
  138. package/assets/js/highcharts/indicators/aroon-oscillator.js +1 -1
  139. package/assets/js/highcharts/indicators/aroon-oscillator.src.js +1 -1
  140. package/assets/js/highcharts/indicators/aroon.js +1 -1
  141. package/assets/js/highcharts/indicators/aroon.src.js +1 -1
  142. package/assets/js/highcharts/indicators/atr.js +1 -1
  143. package/assets/js/highcharts/indicators/atr.src.js +1 -1
  144. package/assets/js/highcharts/indicators/bollinger-bands.js +1 -1
  145. package/assets/js/highcharts/indicators/bollinger-bands.src.js +1 -1
  146. package/assets/js/highcharts/indicators/cci.js +1 -1
  147. package/assets/js/highcharts/indicators/cci.src.js +1 -1
  148. package/assets/js/highcharts/indicators/chaikin.js +1 -1
  149. package/assets/js/highcharts/indicators/chaikin.src.js +1 -1
  150. package/assets/js/highcharts/indicators/cmf.js +1 -1
  151. package/assets/js/highcharts/indicators/cmf.src.js +1 -1
  152. package/assets/js/highcharts/indicators/cmo.js +1 -1
  153. package/assets/js/highcharts/indicators/cmo.src.js +1 -1
  154. package/assets/js/highcharts/indicators/dema.js +1 -1
  155. package/assets/js/highcharts/indicators/dema.src.js +1 -1
  156. package/assets/js/highcharts/indicators/disparity-index.js +1 -1
  157. package/assets/js/highcharts/indicators/disparity-index.src.js +1 -1
  158. package/assets/js/highcharts/indicators/dmi.js +1 -1
  159. package/assets/js/highcharts/indicators/dmi.src.js +1 -1
  160. package/assets/js/highcharts/indicators/dpo.js +1 -1
  161. package/assets/js/highcharts/indicators/dpo.src.js +1 -1
  162. package/assets/js/highcharts/indicators/ichimoku-kinko-hyo.js +1 -1
  163. package/assets/js/highcharts/indicators/ichimoku-kinko-hyo.src.js +1 -1
  164. package/assets/js/highcharts/indicators/indicators-all.js +1 -1
  165. package/assets/js/highcharts/indicators/indicators-all.src.js +1 -1
  166. package/assets/js/highcharts/indicators/indicators.js +1 -1
  167. package/assets/js/highcharts/indicators/indicators.src.js +1 -1
  168. package/assets/js/highcharts/indicators/keltner-channels.js +1 -1
  169. package/assets/js/highcharts/indicators/keltner-channels.src.js +1 -1
  170. package/assets/js/highcharts/indicators/klinger.js +1 -1
  171. package/assets/js/highcharts/indicators/klinger.src.js +1 -1
  172. package/assets/js/highcharts/indicators/macd.js +1 -1
  173. package/assets/js/highcharts/indicators/macd.src.js +1 -1
  174. package/assets/js/highcharts/indicators/mfi.js +1 -1
  175. package/assets/js/highcharts/indicators/mfi.src.js +1 -1
  176. package/assets/js/highcharts/indicators/momentum.js +1 -1
  177. package/assets/js/highcharts/indicators/momentum.src.js +1 -1
  178. package/assets/js/highcharts/indicators/natr.js +1 -1
  179. package/assets/js/highcharts/indicators/natr.src.js +1 -1
  180. package/assets/js/highcharts/indicators/obv.js +1 -1
  181. package/assets/js/highcharts/indicators/obv.src.js +1 -1
  182. package/assets/js/highcharts/indicators/pivot-points.js +1 -1
  183. package/assets/js/highcharts/indicators/pivot-points.src.js +1 -1
  184. package/assets/js/highcharts/indicators/ppo.js +1 -1
  185. package/assets/js/highcharts/indicators/ppo.src.js +1 -1
  186. package/assets/js/highcharts/indicators/price-channel.js +1 -1
  187. package/assets/js/highcharts/indicators/price-channel.src.js +1 -1
  188. package/assets/js/highcharts/indicators/price-envelopes.js +1 -1
  189. package/assets/js/highcharts/indicators/price-envelopes.src.js +1 -1
  190. package/assets/js/highcharts/indicators/psar.js +1 -1
  191. package/assets/js/highcharts/indicators/psar.src.js +1 -1
  192. package/assets/js/highcharts/indicators/regressions.js +1 -1
  193. package/assets/js/highcharts/indicators/regressions.src.js +1 -1
  194. package/assets/js/highcharts/indicators/roc.js +1 -1
  195. package/assets/js/highcharts/indicators/roc.src.js +1 -1
  196. package/assets/js/highcharts/indicators/rsi.js +1 -1
  197. package/assets/js/highcharts/indicators/rsi.src.js +1 -1
  198. package/assets/js/highcharts/indicators/slow-stochastic.js +1 -1
  199. package/assets/js/highcharts/indicators/slow-stochastic.src.js +1 -1
  200. package/assets/js/highcharts/indicators/stochastic.js +1 -1
  201. package/assets/js/highcharts/indicators/stochastic.src.js +1 -1
  202. package/assets/js/highcharts/indicators/supertrend.js +1 -1
  203. package/assets/js/highcharts/indicators/supertrend.src.js +1 -1
  204. package/assets/js/highcharts/indicators/tema.js +1 -1
  205. package/assets/js/highcharts/indicators/tema.src.js +1 -1
  206. package/assets/js/highcharts/indicators/trendline.js +1 -1
  207. package/assets/js/highcharts/indicators/trendline.src.js +1 -1
  208. package/assets/js/highcharts/indicators/trix.js +1 -1
  209. package/assets/js/highcharts/indicators/trix.src.js +1 -1
  210. package/assets/js/highcharts/indicators/volume-by-price.js +1 -1
  211. package/assets/js/highcharts/indicators/volume-by-price.src.js +1 -1
  212. package/assets/js/highcharts/indicators/vwap.js +1 -1
  213. package/assets/js/highcharts/indicators/vwap.src.js +1 -1
  214. package/assets/js/highcharts/indicators/williams-r.js +1 -1
  215. package/assets/js/highcharts/indicators/williams-r.src.js +1 -1
  216. package/assets/js/highcharts/indicators/wma.js +1 -1
  217. package/assets/js/highcharts/indicators/wma.src.js +1 -1
  218. package/assets/js/highcharts/indicators/zigzag.js +1 -1
  219. package/assets/js/highcharts/indicators/zigzag.src.js +1 -1
  220. package/assets/js/highcharts/modules/accessibility.js +2 -2
  221. package/assets/js/highcharts/modules/accessibility.src.js +39 -28
  222. package/assets/js/highcharts/modules/annotations-advanced.js +2 -2
  223. package/assets/js/highcharts/modules/annotations-advanced.src.js +46 -31
  224. package/assets/js/highcharts/modules/annotations.js +2 -2
  225. package/assets/js/highcharts/modules/annotations.src.js +12 -15
  226. package/assets/js/highcharts/modules/arc-diagram.js +2 -2
  227. package/assets/js/highcharts/modules/arc-diagram.src.js +258 -233
  228. package/assets/js/highcharts/modules/arrow-symbols.js +1 -1
  229. package/assets/js/highcharts/modules/arrow-symbols.src.js +1 -1
  230. package/assets/js/highcharts/modules/boost-canvas.js +2 -2
  231. package/assets/js/highcharts/modules/boost-canvas.src.js +30 -10
  232. package/assets/js/highcharts/modules/boost.js +2 -2
  233. package/assets/js/highcharts/modules/boost.src.js +30 -10
  234. package/assets/js/highcharts/modules/broken-axis.js +1 -1
  235. package/assets/js/highcharts/modules/broken-axis.src.js +1 -1
  236. package/assets/js/highcharts/modules/bullet.js +1 -1
  237. package/assets/js/highcharts/modules/bullet.src.js +1 -1
  238. package/assets/js/highcharts/modules/coloraxis.js +2 -2
  239. package/assets/js/highcharts/modules/coloraxis.src.js +4 -4
  240. package/assets/js/highcharts/modules/current-date-indicator.js +1 -1
  241. package/assets/js/highcharts/modules/current-date-indicator.src.js +1 -1
  242. package/assets/js/highcharts/modules/cylinder.js +1 -1
  243. package/assets/js/highcharts/modules/cylinder.src.js +1 -1
  244. package/assets/js/highcharts/modules/data-tools.js +2 -2
  245. package/assets/js/highcharts/modules/data-tools.src.js +37 -19
  246. package/assets/js/highcharts/modules/data.js +1 -1
  247. package/assets/js/highcharts/modules/data.src.js +4 -4
  248. package/assets/js/highcharts/modules/datagrouping.js +2 -2
  249. package/assets/js/highcharts/modules/datagrouping.src.js +2 -1
  250. package/assets/js/highcharts/modules/debugger.js +1 -1
  251. package/assets/js/highcharts/modules/debugger.src.js +1 -1
  252. package/assets/js/highcharts/modules/dependency-wheel.js +1 -1
  253. package/assets/js/highcharts/modules/dependency-wheel.src.js +1 -1
  254. package/assets/js/highcharts/modules/dotplot.js +2 -2
  255. package/assets/js/highcharts/modules/dotplot.src.js +41 -30
  256. package/assets/js/highcharts/modules/drag-panes.js +2 -2
  257. package/assets/js/highcharts/modules/drag-panes.src.js +2 -3
  258. package/assets/js/highcharts/modules/draggable-points.js +2 -2
  259. package/assets/js/highcharts/modules/draggable-points.src.js +19 -1
  260. package/assets/js/highcharts/modules/drilldown.js +2 -2
  261. package/assets/js/highcharts/modules/drilldown.src.js +15 -15
  262. package/assets/js/highcharts/modules/dumbbell.js +2 -2
  263. package/assets/js/highcharts/modules/dumbbell.src.js +31 -40
  264. package/assets/js/highcharts/modules/export-data.js +2 -2
  265. package/assets/js/highcharts/modules/export-data.src.js +4 -1
  266. package/assets/js/highcharts/modules/exporting.js +2 -2
  267. package/assets/js/highcharts/modules/exporting.src.js +22 -25
  268. package/assets/js/highcharts/modules/flowmap.js +1 -1
  269. package/assets/js/highcharts/modules/flowmap.src.js +1 -1
  270. package/assets/js/highcharts/modules/full-screen.js +1 -1
  271. package/assets/js/highcharts/modules/full-screen.src.js +1 -1
  272. package/assets/js/highcharts/modules/funnel.js +2 -2
  273. package/assets/js/highcharts/modules/funnel.src.js +4 -4
  274. package/assets/js/highcharts/modules/funnel3d.js +1 -1
  275. package/assets/js/highcharts/modules/funnel3d.src.js +1 -1
  276. package/assets/js/highcharts/modules/gantt.js +2 -2
  277. package/assets/js/highcharts/modules/gantt.src.js +1266 -291
  278. package/assets/js/highcharts/modules/geoheatmap.js +1 -1
  279. package/assets/js/highcharts/modules/geoheatmap.src.js +4 -11
  280. package/assets/js/highcharts/modules/grid-axis.js +2 -2
  281. package/assets/js/highcharts/modules/grid-axis.src.js +2 -2
  282. package/assets/js/highcharts/modules/heatmap.js +2 -2
  283. package/assets/js/highcharts/modules/heatmap.src.js +32 -9
  284. package/assets/js/highcharts/modules/heikinashi.js +1 -1
  285. package/assets/js/highcharts/modules/heikinashi.src.js +1 -1
  286. package/assets/js/highcharts/modules/histogram-bellcurve.js +1 -1
  287. package/assets/js/highcharts/modules/histogram-bellcurve.src.js +1 -1
  288. package/assets/js/highcharts/modules/hollowcandlestick.js +1 -1
  289. package/assets/js/highcharts/modules/hollowcandlestick.src.js +1 -1
  290. package/assets/js/highcharts/modules/item-series.js +1 -1
  291. package/assets/js/highcharts/modules/item-series.src.js +1 -1
  292. package/assets/js/highcharts/modules/lollipop.js +1 -1
  293. package/assets/js/highcharts/modules/lollipop.src.js +1 -1
  294. package/assets/js/highcharts/modules/map.js +2 -2
  295. package/assets/js/highcharts/modules/map.src.js +120 -58
  296. package/assets/js/highcharts/modules/marker-clusters.js +1 -1
  297. package/assets/js/highcharts/modules/marker-clusters.src.js +1 -1
  298. package/assets/js/highcharts/modules/mouse-wheel-zoom.js +1 -1
  299. package/assets/js/highcharts/modules/mouse-wheel-zoom.src.js +1 -1
  300. package/assets/js/highcharts/modules/navigator.js +2 -2
  301. package/assets/js/highcharts/modules/navigator.src.js +28 -24
  302. package/assets/js/highcharts/modules/networkgraph.js +2 -2
  303. package/assets/js/highcharts/modules/networkgraph.src.js +3 -3
  304. package/assets/js/highcharts/modules/no-data-to-display.js +1 -1
  305. package/assets/js/highcharts/modules/no-data-to-display.src.js +1 -1
  306. package/assets/js/highcharts/modules/offline-exporting.js +2 -2
  307. package/assets/js/highcharts/modules/offline-exporting.src.js +43 -32
  308. package/assets/js/highcharts/modules/organization.js +2 -2
  309. package/assets/js/highcharts/modules/organization.src.js +19 -21
  310. package/assets/js/highcharts/modules/overlapping-datalabels.js +1 -1
  311. package/assets/js/highcharts/modules/overlapping-datalabels.src.js +1 -1
  312. package/assets/js/highcharts/modules/parallel-coordinates.js +1 -1
  313. package/assets/js/highcharts/modules/parallel-coordinates.src.js +1 -1
  314. package/assets/js/highcharts/modules/pareto.js +1 -1
  315. package/assets/js/highcharts/modules/pareto.src.js +1 -1
  316. package/assets/js/highcharts/modules/pathfinder.js +1 -1
  317. package/assets/js/highcharts/modules/pathfinder.src.js +1 -1
  318. package/assets/js/highcharts/modules/pattern-fill.js +1 -1
  319. package/assets/js/highcharts/modules/pattern-fill.src.js +1 -1
  320. package/assets/js/highcharts/modules/pictorial.js +1 -1
  321. package/assets/js/highcharts/modules/pictorial.src.js +1 -1
  322. package/assets/js/highcharts/modules/price-indicator.js +1 -1
  323. package/assets/js/highcharts/modules/price-indicator.src.js +1 -1
  324. package/assets/js/highcharts/modules/pyramid3d.js +1 -1
  325. package/assets/js/highcharts/modules/pyramid3d.src.js +1 -1
  326. package/assets/js/highcharts/modules/sankey.js +2 -2
  327. package/assets/js/highcharts/modules/sankey.src.js +7 -8
  328. package/assets/js/highcharts/modules/series-label.js +1 -1
  329. package/assets/js/highcharts/modules/series-label.src.js +1 -1
  330. package/assets/js/highcharts/modules/series-on-point.js +2 -2
  331. package/assets/js/highcharts/modules/series-on-point.src.js +3 -3
  332. package/assets/js/highcharts/modules/solid-gauge.js +1 -1
  333. package/assets/js/highcharts/modules/solid-gauge.src.js +1 -1
  334. package/assets/js/highcharts/modules/sonification.js +2 -2
  335. package/assets/js/highcharts/modules/sonification.src.js +4 -1
  336. package/assets/js/highcharts/modules/static-scale.js +1 -1
  337. package/assets/js/highcharts/modules/static-scale.src.js +1 -1
  338. package/assets/js/highcharts/modules/stock-tools.js +2 -2
  339. package/assets/js/highcharts/modules/stock-tools.src.js +3 -3
  340. package/assets/js/highcharts/modules/stock.js +2 -2
  341. package/assets/js/highcharts/modules/stock.src.js +274 -320
  342. package/assets/js/highcharts/modules/streamgraph.js +1 -1
  343. package/assets/js/highcharts/modules/streamgraph.src.js +1 -1
  344. package/assets/js/highcharts/modules/sunburst.js +2 -2
  345. package/assets/js/highcharts/modules/sunburst.src.js +39 -16
  346. package/assets/js/highcharts/modules/tiledwebmap.js +1 -1
  347. package/assets/js/highcharts/modules/tiledwebmap.src.js +1 -1
  348. package/assets/js/highcharts/modules/tilemap.js +1 -1
  349. package/assets/js/highcharts/modules/tilemap.src.js +1 -1
  350. package/assets/js/highcharts/modules/timeline.js +1 -1
  351. package/assets/js/highcharts/modules/timeline.src.js +1 -1
  352. package/assets/js/highcharts/modules/treegraph.js +2 -2
  353. package/assets/js/highcharts/modules/treegraph.src.js +21 -17
  354. package/assets/js/highcharts/modules/treegrid.js +2 -2
  355. package/assets/js/highcharts/modules/treegrid.src.js +2 -2
  356. package/assets/js/highcharts/modules/treemap.js +2 -2
  357. package/assets/js/highcharts/modules/treemap.src.js +38 -15
  358. package/assets/js/highcharts/modules/variable-pie.js +1 -1
  359. package/assets/js/highcharts/modules/variable-pie.src.js +1 -1
  360. package/assets/js/highcharts/modules/variwide.js +2 -2
  361. package/assets/js/highcharts/modules/variwide.src.js +5 -5
  362. package/assets/js/highcharts/modules/vector.js +1 -1
  363. package/assets/js/highcharts/modules/vector.src.js +1 -1
  364. package/assets/js/highcharts/modules/venn.js +1 -1
  365. package/assets/js/highcharts/modules/venn.src.js +3 -3
  366. package/assets/js/highcharts/modules/windbarb.js +1 -1
  367. package/assets/js/highcharts/modules/windbarb.src.js +1 -1
  368. package/assets/js/highcharts/modules/wordcloud.js +1 -1
  369. package/assets/js/highcharts/modules/wordcloud.src.js +1 -1
  370. package/assets/js/highcharts/modules/xrange.js +2 -2
  371. package/assets/js/highcharts/modules/xrange.src.js +5 -5
  372. package/assets/js/highcharts/standalone-navigator.js +2 -2
  373. package/assets/js/highcharts/standalone-navigator.src.js +769 -638
  374. package/assets/js/highcharts/themes/avocado.js +1 -1
  375. package/assets/js/highcharts/themes/avocado.src.js +1 -1
  376. package/assets/js/highcharts/themes/brand-dark.js +2 -2
  377. package/assets/js/highcharts/themes/brand-dark.src.js +14 -2
  378. package/assets/js/highcharts/themes/brand-light.js +1 -1
  379. package/assets/js/highcharts/themes/brand-light.src.js +1 -1
  380. package/assets/js/highcharts/themes/dark-blue.js +1 -1
  381. package/assets/js/highcharts/themes/dark-blue.src.js +1 -1
  382. package/assets/js/highcharts/themes/dark-green.js +1 -1
  383. package/assets/js/highcharts/themes/dark-green.src.js +1 -1
  384. package/assets/js/highcharts/themes/dark-unica.js +1 -1
  385. package/assets/js/highcharts/themes/dark-unica.src.js +1 -1
  386. package/assets/js/highcharts/themes/gray.js +1 -1
  387. package/assets/js/highcharts/themes/gray.src.js +1 -1
  388. package/assets/js/highcharts/themes/grid-light.js +1 -1
  389. package/assets/js/highcharts/themes/grid-light.src.js +1 -1
  390. package/assets/js/highcharts/themes/grid.js +1 -1
  391. package/assets/js/highcharts/themes/grid.src.js +1 -1
  392. package/assets/js/highcharts/themes/high-contrast-dark.js +1 -1
  393. package/assets/js/highcharts/themes/high-contrast-dark.src.js +1 -1
  394. package/assets/js/highcharts/themes/high-contrast-light.js +1 -1
  395. package/assets/js/highcharts/themes/high-contrast-light.src.js +1 -1
  396. package/assets/js/highcharts/themes/sand-signika.js +1 -1
  397. package/assets/js/highcharts/themes/sand-signika.src.js +1 -1
  398. package/assets/js/highcharts/themes/skies.js +1 -1
  399. package/assets/js/highcharts/themes/skies.src.js +1 -1
  400. package/assets/js/highcharts/themes/sunset.js +1 -1
  401. package/assets/js/highcharts/themes/sunset.src.js +1 -1
  402. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highstock JS v11.4.1 (2024-04-04)
2
+ * @license Highstock JS v11.4.3 (2024-05-22)
3
3
  *
4
4
  * Highcharts Stock as a plugin for Highcharts
5
5
  *
@@ -460,8 +460,15 @@
460
460
  }
461
461
  // Record for tooltip etc.
462
462
  const point = this.series.points[index];
463
+ const cumulativeStart = point.series.options.cumulativeStart, withinRange = point.x <= this.series.xAxis.max &&
464
+ point.x >= this.series.xAxis.min;
463
465
  if (point) {
464
- point.cumulativeSum = value;
466
+ if (!cumulativeStart || withinRange) {
467
+ point.cumulativeSum = value;
468
+ }
469
+ else {
470
+ point.cumulativeSum = void 0;
471
+ }
465
472
  }
466
473
  return value;
467
474
  }
@@ -506,7 +513,7 @@
506
513
  */
507
514
  /**
508
515
  * Defines if comparison should start from the first point within the visible
509
- * range or should start from the first point **before** the range.
516
+ * range or should start from the last point **before** the range.
510
517
  *
511
518
  * In other words, this flag determines if first point within the visible range
512
519
  * will have 0% (`compareStart=true`) or should have been already calculated
@@ -556,6 +563,23 @@
556
563
  * @product highstock
557
564
  * @apioption plotOptions.series.cumulative
558
565
  */
566
+ /**
567
+ * Defines if cumulation should start from the first point within the visible
568
+ * range or should start from the last point **before** the range.
569
+ *
570
+ * In other words, this flag determines if first point within the visible range
571
+ * will start at 0 (`cumulativeStart=true`) or should have been already calculated
572
+ * according to the previous point (`cumulativeStart=false`).
573
+ *
574
+ * @sample {highstock} stock/plotoptions/series-cumulativestart/
575
+ * Cumulative Start
576
+ *
577
+ * @type {boolean}
578
+ * @default false
579
+ * @since 11.4.2
580
+ * @product highstock
581
+ * @apioption plotOptions.series.cumulativeStart
582
+ */
559
583
  ''; // Keeps doclets above in transpiled file
560
584
 
561
585
  return DataModifyComposition;
@@ -1005,6 +1029,15 @@
1005
1029
  * @since 6.0.0
1006
1030
  */
1007
1031
  width: 7,
1032
+ /**
1033
+ * Border radius of the handles.
1034
+ *
1035
+ * @sample {highstock} stock/navigator/handles-border-radius/
1036
+ * Border radius on the navigator handles.
1037
+ *
1038
+ * @since 11.4.2
1039
+ */
1040
+ borderRadius: 0,
1008
1041
  /**
1009
1042
  * Height for handles.
1010
1043
  *
@@ -1316,6 +1349,7 @@
1316
1349
  tickLength: 0,
1317
1350
  lineWidth: 0,
1318
1351
  gridLineColor: "#e6e6e6" /* Palette.neutralColor10 */,
1352
+ id: 'navigator-x-axis',
1319
1353
  gridLineWidth: 1,
1320
1354
  tickPixelInterval: 200,
1321
1355
  labels: {
@@ -1369,6 +1403,7 @@
1369
1403
  startOnTick: false,
1370
1404
  endOnTick: false,
1371
1405
  minPadding: 0.1,
1406
+ id: 'navigator-y-axis',
1372
1407
  maxPadding: 0.1,
1373
1408
  labels: {
1374
1409
  enabled: false
@@ -1407,7 +1442,7 @@
1407
1442
 
1408
1443
  return NavigatorDefaults;
1409
1444
  });
1410
- _registerModule(_modules, 'Stock/Navigator/NavigatorSymbols.js', [], function () {
1445
+ _registerModule(_modules, 'Stock/Navigator/NavigatorSymbols.js', [_modules['Core/Renderer/SVG/Symbols.js'], _modules['Core/Utilities.js']], function (rect, U) {
1411
1446
  /* *
1412
1447
  *
1413
1448
  * (c) 2010-2024 Torstein Honsi
@@ -1417,6 +1452,7 @@
1417
1452
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
1418
1453
  *
1419
1454
  * */
1455
+ const { relativeLength } = U;
1420
1456
  /* *
1421
1457
  *
1422
1458
  * Constants
@@ -1427,18 +1463,14 @@
1427
1463
  * @private
1428
1464
  */
1429
1465
  function navigatorHandle(_x, _y, width, height, options = {}) {
1430
- const halfWidth = options.width ? options.width / 2 : width, markerPosition = Math.round(halfWidth / 3) + 0.5;
1466
+ const halfWidth = options.width ? options.width / 2 : width, markerPosition = 1.5, r = relativeLength(options.borderRadius || 0, Math.min(halfWidth * 2, height));
1431
1467
  height = options.height || height;
1432
1468
  return [
1433
- ['M', -halfWidth - 1, 0.5],
1434
- ['L', halfWidth, 0.5],
1435
- ['L', halfWidth, height + 0.5],
1436
- ['L', -halfWidth - 1, height + 0.5],
1437
- ['L', -halfWidth - 1, 0.5],
1438
- ['M', -markerPosition, 4],
1439
- ['L', -markerPosition, height - 3],
1440
- ['M', markerPosition - 1, 4],
1441
- ['L', markerPosition - 1, height - 3]
1469
+ ['M', -markerPosition, height / 2 - 3.5],
1470
+ ['L', -markerPosition, height / 2 + 4.5],
1471
+ ['M', markerPosition - 1, height / 2 - 3.5],
1472
+ ['L', markerPosition - 1, height / 2 + 4.5],
1473
+ ...rect.rect(-halfWidth - 1, 0.5, halfWidth * 2 + 1, height, { r })
1442
1474
  ];
1443
1475
  }
1444
1476
  /* *
@@ -1991,7 +2023,7 @@
1991
2023
  *
1992
2024
  * */
1993
2025
  const { defaultOptions } = D;
1994
- const { addEvent, correctFloat, defined, destroyObjectProperties, fireEvent, merge, pick, removeEvent } = U;
2026
+ const { addEvent, correctFloat, crisp, defined, destroyObjectProperties, fireEvent, merge, pick, removeEvent } = U;
1995
2027
  /* *
1996
2028
  *
1997
2029
  * Constants
@@ -2223,9 +2255,8 @@
2223
2255
  rect.attr(rect.crisp({
2224
2256
  x: -0.5,
2225
2257
  y: -0.5,
2226
- // +1 to compensate for crispifying in rect method
2227
- width: size + 1,
2228
- height: size + 1,
2258
+ width: size,
2259
+ height: size,
2229
2260
  r: options.buttonBorderRadius
2230
2261
  }, rect.strokeWidth()));
2231
2262
  // Button arrow
@@ -2435,8 +2466,8 @@
2435
2466
  const trackBorderWidth = scroller.trackBorderWidth =
2436
2467
  scroller.track.strokeWidth();
2437
2468
  scroller.track.attr({
2438
- x: -trackBorderWidth % 2 / 2,
2439
- y: -trackBorderWidth % 2 / 2
2469
+ x: -crisp(0, trackBorderWidth),
2470
+ y: -crisp(0, trackBorderWidth)
2440
2471
  });
2441
2472
  // Draw the scrollbar itself
2442
2473
  scroller.scrollbarGroup = renderer.g().add(group);
@@ -2470,7 +2501,7 @@
2470
2501
  });
2471
2502
  }
2472
2503
  scroller.scrollbarStrokeWidth = scroller.scrollbar.strokeWidth();
2473
- scroller.scrollbarGroup.translate(-scroller.scrollbarStrokeWidth % 2 / 2, -scroller.scrollbarStrokeWidth % 2 / 2);
2504
+ scroller.scrollbarGroup.translate(-crisp(0, scroller.scrollbarStrokeWidth), -crisp(0, scroller.scrollbarStrokeWidth));
2474
2505
  // Draw the buttons:
2475
2506
  scroller.drawScrollbarButton(0);
2476
2507
  scroller.drawScrollbarButton(1);
@@ -3472,8 +3503,6 @@
3472
3503
  ordinal: baseXaxis.options.ordinal,
3473
3504
  overscroll: baseXaxis.options.overscroll
3474
3505
  }, navigatorOptions.xAxis, {
3475
- id: 'navigator-x-axis',
3476
- yAxis: 'navigator-y-axis',
3477
3506
  type: 'datetime',
3478
3507
  index: xAxisIndex,
3479
3508
  isInternal: true,
@@ -3492,7 +3521,6 @@
3492
3521
  height: height
3493
3522
  }), 'xAxis');
3494
3523
  navigator.yAxis = new Axis(chart, merge(navigatorOptions.yAxis, {
3495
- id: 'navigator-y-axis',
3496
3524
  alignTicks: false,
3497
3525
  offset: 0,
3498
3526
  index: yAxisIndex,
@@ -3644,8 +3672,8 @@
3644
3672
  linkedTo: null,
3645
3673
  group: 'nav',
3646
3674
  padXAxis: false,
3647
- xAxis: 'navigator-x-axis',
3648
- yAxis: 'navigator-y-axis',
3675
+ xAxis: this.navigatorOptions.xAxis?.id,
3676
+ yAxis: this.navigatorOptions.yAxis?.id,
3649
3677
  showInLegend: false,
3650
3678
  stacking: void 0,
3651
3679
  isInternal: true,
@@ -4200,7 +4228,7 @@
4200
4228
  }
4201
4229
  translatedArr[i] = lastTranslated = translated;
4202
4230
  }
4203
- distances.sort();
4231
+ distances.sort((a, b) => a - b);
4204
4232
  medianDistance = distances[Math.floor(distances.length / 2)];
4205
4233
  if (medianDistance < tickPixelIntervalOption * 0.6) {
4206
4234
  medianDistance = null;
@@ -5608,7 +5636,7 @@
5608
5636
  * */
5609
5637
  const { defaultOptions } = D;
5610
5638
  const { composed } = H;
5611
- const { addEvent, defined, extend, find, isNumber, merge, pick, pushUnique } = U;
5639
+ const { addEvent, defined, extend, isNumber, merge, pick, pushUnique } = U;
5612
5640
  /* *
5613
5641
  *
5614
5642
  * Constants
@@ -5692,13 +5720,13 @@
5692
5720
  if (pushUnique(composed, 'RangeSelector')) {
5693
5721
  const chartProto = ChartClass.prototype;
5694
5722
  AxisClass.prototype.minFromRange = axisMinFromRange;
5695
- addEvent(ChartClass, 'afterGetContainer', onChartAfterGetContainer);
5723
+ addEvent(ChartClass, 'afterGetContainer', createRangeSelector);
5696
5724
  addEvent(ChartClass, 'beforeRender', onChartBeforeRender);
5697
5725
  addEvent(ChartClass, 'destroy', onChartDestroy);
5698
5726
  addEvent(ChartClass, 'getMargins', onChartGetMargins);
5699
- addEvent(ChartClass, 'render', onChartRender);
5727
+ addEvent(ChartClass, 'redraw', redrawRangeSelector);
5700
5728
  addEvent(ChartClass, 'update', onChartUpdate);
5701
- chartProto.callbacks.push(onChartCallback);
5729
+ chartProto.callbacks.push(redrawRangeSelector);
5702
5730
  extend(defaultOptions, { rangeSelector: RangeSelectorDefaults.rangeSelector });
5703
5731
  extend(defaultOptions.lang, RangeSelectorDefaults.lang);
5704
5732
  }
@@ -5707,7 +5735,7 @@
5707
5735
  * Initialize rangeselector for stock charts
5708
5736
  * @private
5709
5737
  */
5710
- function onChartAfterGetContainer() {
5738
+ function createRangeSelector() {
5711
5739
  if (this.options.rangeSelector &&
5712
5740
  this.options.rangeSelector.enabled) {
5713
5741
  this.rangeSelector = new RangeSelectorConstructor(this);
@@ -5717,18 +5745,12 @@
5717
5745
  * @private
5718
5746
  */
5719
5747
  function onChartBeforeRender() {
5720
- const chart = this, axes = chart.axes, rangeSelector = chart.rangeSelector;
5748
+ const chart = this, rangeSelector = chart.rangeSelector;
5721
5749
  if (rangeSelector) {
5722
5750
  if (isNumber(rangeSelector.deferredYTDClick)) {
5723
5751
  rangeSelector.clickButton(rangeSelector.deferredYTDClick);
5724
5752
  delete rangeSelector.deferredYTDClick;
5725
5753
  }
5726
- axes.forEach((axis) => {
5727
- axis.updateNames();
5728
- axis.setScale();
5729
- });
5730
- chart.getAxisMargins();
5731
- rangeSelector.render();
5732
5754
  const verticalAlign = rangeSelector.options.verticalAlign;
5733
5755
  if (!rangeSelector.options.floating) {
5734
5756
  if (verticalAlign === 'bottom') {
@@ -5740,53 +5762,34 @@
5740
5762
  }
5741
5763
  }
5742
5764
  }
5743
- /**
5744
- * @private
5745
- */
5746
- function onChartCallback(chart) {
5747
- let extremes, legend, alignTo, verticalAlign;
5748
- const rangeSelector = chart.rangeSelector, redraw = () => {
5749
- if (rangeSelector) {
5750
- extremes = chart.xAxis[0].getExtremes();
5751
- legend = chart.legend;
5752
- verticalAlign = (rangeSelector &&
5753
- rangeSelector.options.verticalAlign);
5754
- if (isNumber(extremes.min)) {
5755
- rangeSelector.render(extremes.min, extremes.max);
5756
- }
5757
- // Re-align the legend so that it's below the rangeselector
5758
- if (legend.display &&
5759
- verticalAlign === 'top' &&
5760
- verticalAlign === legend.options.verticalAlign) {
5761
- // Create a new alignment box for the legend.
5762
- alignTo = merge(chart.spacingBox);
5763
- if (legend.options.layout === 'vertical') {
5764
- alignTo.y = chart.plotTop;
5765
- }
5766
- else {
5767
- alignTo.y += rangeSelector.getHeight();
5768
- }
5769
- legend.group.placed = false; // Don't animate the alignment.
5770
- legend.align(alignTo);
5771
- }
5765
+ function redrawRangeSelector() {
5766
+ const chart = this;
5767
+ const rangeSelector = this.rangeSelector;
5768
+ if (!rangeSelector) {
5769
+ return;
5770
+ }
5771
+ let alignTo;
5772
+ const extremes = chart.xAxis[0].getExtremes();
5773
+ const legend = chart.legend;
5774
+ const verticalAlign = (rangeSelector &&
5775
+ rangeSelector.options.verticalAlign);
5776
+ if (isNumber(extremes.min)) {
5777
+ rangeSelector.render(extremes.min, extremes.max);
5778
+ }
5779
+ // Re-align the legend so that it's below the rangeselector
5780
+ if (legend.display &&
5781
+ verticalAlign === 'top' &&
5782
+ verticalAlign === legend.options.verticalAlign) {
5783
+ // Create a new alignment box for the legend.
5784
+ alignTo = merge(chart.spacingBox);
5785
+ if (legend.options.layout === 'vertical') {
5786
+ alignTo.y = chart.plotTop;
5772
5787
  }
5773
- };
5774
- if (rangeSelector) {
5775
- const events = find(chartDestroyEvents, (e) => e[0] === chart);
5776
- if (!events) {
5777
- chartDestroyEvents.push([chart, [
5778
- // Redraw the scroller on setExtremes
5779
- addEvent(chart.xAxis[0], 'afterSetExtremes', function (e) {
5780
- if (rangeSelector) {
5781
- rangeSelector.render(e.min, e.max);
5782
- }
5783
- }),
5784
- // Redraw the scroller chart resize
5785
- addEvent(chart, 'redraw', redraw)
5786
- ]]);
5788
+ else {
5789
+ alignTo.y += rangeSelector.getHeight();
5787
5790
  }
5788
- // Do it now
5789
- redraw();
5791
+ legend.group.placed = false; // Don't animate the alignment.
5792
+ legend.align(alignTo);
5790
5793
  }
5791
5794
  }
5792
5795
  /**
@@ -5818,22 +5821,6 @@
5818
5821
  }
5819
5822
  }
5820
5823
  }
5821
- /**
5822
- * @private
5823
- */
5824
- function onChartRender() {
5825
- const chart = this, rangeSelector = chart.rangeSelector;
5826
- if (rangeSelector && !rangeSelector.options.floating) {
5827
- rangeSelector.render();
5828
- const verticalAlign = rangeSelector.options.verticalAlign;
5829
- if (verticalAlign === 'bottom') {
5830
- this.extraBottomMargin = true;
5831
- }
5832
- else if (verticalAlign !== 'middle') {
5833
- this.extraTopMargin = true;
5834
- }
5835
- }
5836
- }
5837
5824
  /**
5838
5825
  * @private
5839
5826
  */
@@ -5850,7 +5837,6 @@
5850
5837
  this.extraBottomMargin = false;
5851
5838
  this.extraTopMargin = false;
5852
5839
  if (rangeSelector) {
5853
- onChartCallback(this);
5854
5840
  const verticalAlign = (optionsRangeSelector &&
5855
5841
  optionsRangeSelector.verticalAlign) || (rangeSelector.options && rangeSelector.options.verticalAlign);
5856
5842
  if (!rangeSelector.options.floating) {
@@ -5878,7 +5864,7 @@
5878
5864
 
5879
5865
  return RangeSelectorComposition;
5880
5866
  });
5881
- _registerModule(_modules, 'Stock/RangeSelector/RangeSelector.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Defaults.js'], _modules['Core/Globals.js'], _modules['Stock/RangeSelector/RangeSelectorComposition.js'], _modules['Core/Renderer/SVG/SVGElement.js'], _modules['Core/Utilities.js']], function (Axis, D, H, RangeSelectorComposition, SVGElement, U) {
5867
+ _registerModule(_modules, 'Stock/RangeSelector/RangeSelector.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Defaults.js'], _modules['Core/Globals.js'], _modules['Stock/RangeSelector/RangeSelectorComposition.js'], _modules['Core/Renderer/SVG/SVGElement.js'], _modules['Core/Utilities.js'], _modules['Core/Axis/OrdinalAxis.js']], function (Axis, D, H, RangeSelectorComposition, SVGElement, U, OrdinalAxis) {
5882
5868
  /* *
5883
5869
  *
5884
5870
  * (c) 2010-2024 Torstein Honsi
@@ -5954,7 +5940,6 @@
5954
5940
  constructor(chart) {
5955
5941
  this.buttonOptions = RangeSelector.prototype.defaultButtons;
5956
5942
  this.initialButtonGroupWidth = 0;
5957
- this.chart = chart;
5958
5943
  this.init(chart);
5959
5944
  }
5960
5945
  /* *
@@ -5975,7 +5960,7 @@
5975
5960
  clickButton(i, redraw) {
5976
5961
  const rangeSelector = this, chart = rangeSelector.chart, rangeOptions = rangeSelector.buttonOptions[i], baseAxis = chart.xAxis[0], unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis || {}, type = rangeOptions.type, dataGrouping = rangeOptions.dataGrouping;
5977
5962
  let dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, newMin, newMax = baseAxis && Math.round(Math.min(baseAxis.max, pick(dataMax, baseAxis.max))), // #1568
5978
- baseXAxisOptions, range = rangeOptions._range, rangeMin, minSetting, rangeSetting, ctx, ytdExtremes, addOffsetMin = true;
5963
+ baseXAxisOptions, range = rangeOptions._range, rangeMin, ctx, ytdExtremes, addOffsetMin = true;
5979
5964
  // Chart has no data, base series is removed
5980
5965
  if (dataMin === null || dataMax === null) {
5981
5966
  return;
@@ -6073,16 +6058,20 @@
6073
6058
  // Update the chart
6074
6059
  if (!baseAxis) {
6075
6060
  // Axis not yet instantiated. Temporarily set min and range
6076
- // options and remove them on chart load (#4317).
6061
+ // options and axes once defined and remove them on
6062
+ // chart load (#4317 & #20529).
6077
6063
  baseXAxisOptions = splat(chart.options.xAxis)[0];
6078
- rangeSetting = baseXAxisOptions.range;
6079
- baseXAxisOptions.range = range;
6080
- minSetting = baseXAxisOptions.min;
6081
- baseXAxisOptions.min = rangeMin;
6064
+ const axisRangeUpdateEvent = addEvent(chart, 'afterGetAxes', function () {
6065
+ const xAxis = chart.xAxis[0];
6066
+ xAxis.range = xAxis.options.range = range;
6067
+ xAxis.min = xAxis.options.min = rangeMin;
6068
+ });
6082
6069
  addEvent(chart, 'load', function resetMinAndRange() {
6070
+ const xAxis = chart.xAxis[0];
6083
6071
  chart.setFixedRange(rangeOptions._range);
6084
- baseXAxisOptions.range = rangeSetting;
6085
- baseXAxisOptions.min = minSetting;
6072
+ xAxis.options.range = baseXAxisOptions.range;
6073
+ xAxis.options.min = baseXAxisOptions.min;
6074
+ axisRangeUpdateEvent(); // Remove event
6086
6075
  });
6087
6076
  }
6088
6077
  else {
@@ -6156,6 +6145,7 @@
6156
6145
  });
6157
6146
  }
6158
6147
  }));
6148
+ this.createElements();
6159
6149
  }
6160
6150
  /**
6161
6151
  * Dynamically update the range selector buttons after a new range has been
@@ -6165,25 +6155,25 @@
6165
6155
  * @function Highcharts.RangeSelector#updateButtonStates
6166
6156
  */
6167
6157
  updateButtonStates() {
6168
- const rangeSelector = this, chart = this.chart, dropdown = this.dropdown, baseAxis = chart.xAxis[0], actualRange = Math.round(baseAxis.max - baseAxis.min), hasNoData = !baseAxis.hasVisibleSeries, day = 24 * 36e5, // A single day in milliseconds
6158
+ const rangeSelector = this, chart = this.chart, dropdown = this.dropdown, dropdownLabel = this.dropdownLabel, baseAxis = chart.xAxis[0], actualRange = Math.round(baseAxis.max - baseAxis.min), hasNoData = !baseAxis.hasVisibleSeries, day = 24 * 36e5, // A single day in milliseconds
6169
6159
  unionExtremes = (chart.scroller &&
6170
- chart.scroller.getUnionExtremes()) || baseAxis, dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin, chart.time.useUTC), ytdMin = ytdExtremes.min, ytdMax = ytdExtremes.max, selected = rangeSelector.selected, allButtonsEnabled = rangeSelector.options.allButtonsEnabled, buttons = rangeSelector.buttons;
6171
- let selectedExists = isNumber(selected), isSelectedTooGreat = false;
6160
+ chart.scroller.getUnionExtremes()) || baseAxis, dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin, chart.time.useUTC), ytdMin = ytdExtremes.min, ytdMax = ytdExtremes.max, selected = rangeSelector.selected, allButtonsEnabled = rangeSelector.options.allButtonsEnabled, buttonStates = new Array(rangeSelector.buttonOptions.length)
6161
+ .fill(0), selectedExists = isNumber(selected), buttons = rangeSelector.buttons;
6162
+ let isSelectedTooGreat = false, selectedIndex = null;
6172
6163
  rangeSelector.buttonOptions.forEach((rangeOptions, i) => {
6173
- const range = rangeOptions._range, type = rangeOptions.type, count = rangeOptions.count || 1, button = buttons[i], offsetRange = rangeOptions._offsetMax -
6164
+ const range = rangeOptions._range, type = rangeOptions.type, count = rangeOptions.count || 1, offsetRange = rangeOptions._offsetMax -
6174
6165
  rangeOptions._offsetMin, isSelected = i === selected,
6175
- // Disable buttons where the range exceeds what is allowed in
6166
+ // Disable buttons where the range exceeds what is allowed i;
6176
6167
  // the current view
6177
6168
  isTooGreatRange = range >
6178
6169
  dataMax - dataMin,
6179
6170
  // Disable buttons where the range is smaller than the minimum
6180
6171
  // range
6181
6172
  isTooSmallRange = range < baseAxis.minRange;
6182
- let state = 0,
6183
6173
  // Do not select the YTD button if not explicitly told so
6184
- isYTDButNotSelected = false,
6174
+ let isYTDButNotSelected = false,
6185
6175
  // Disable the All button if we're already showing all
6186
- isAllButAlreadyShowingAll = false, isSameRange = range === actualRange;
6176
+ isSameRange = range === actualRange;
6187
6177
  if (isSelected && isTooGreatRange) {
6188
6178
  isSelectedTooGreat = true;
6189
6179
  }
@@ -6192,8 +6182,9 @@
6192
6182
  range &&
6193
6183
  actualRange < range) {
6194
6184
  // Handle ordinal ranges
6195
- const positions = baseAxis.ordinal.positions;
6196
- if (positions[positions.length - 1] - positions[0] > range) {
6185
+ const positions = baseAxis.ordinal.positions, prevOrdinalPosition = OrdinalAxis.Additions.findIndexOf(positions, baseAxis.min, true), nextOrdinalPosition = Math.min(OrdinalAxis.Additions.findIndexOf(positions, baseAxis.max, true) + 1, positions.length - 1);
6186
+ if (positions[nextOrdinalPosition] -
6187
+ positions[prevOrdinalPosition] > range) {
6197
6188
  isSameRange = true;
6198
6189
  }
6199
6190
  }
@@ -6213,9 +6204,6 @@
6213
6204
  else if (type === 'all') {
6214
6205
  isSameRange = (baseAxis.max - baseAxis.min >=
6215
6206
  dataMax - dataMin);
6216
- isAllButAlreadyShowingAll = (!isSelected &&
6217
- selectedExists &&
6218
- isSameRange);
6219
6207
  }
6220
6208
  // The new zoom area happens to match the range for a button - mark
6221
6209
  // it selected. This happens when scrolling across an ordinal gap.
@@ -6225,38 +6213,56 @@
6225
6213
  !(isSelectedTooGreat && type === 'all') &&
6226
6214
  (isTooGreatRange ||
6227
6215
  isTooSmallRange ||
6228
- isAllButAlreadyShowingAll ||
6229
6216
  hasNoData));
6230
6217
  const select = ((isSelectedTooGreat && type === 'all') ||
6231
- (isSelected && isSameRange) ||
6232
- (isSameRange && !selectedExists && !isYTDButNotSelected) ||
6218
+ (isYTDButNotSelected ? false : isSameRange) ||
6233
6219
  (isSelected && rangeSelector.frozenStates));
6234
6220
  if (disable) {
6235
- state = 3;
6221
+ buttonStates[i] = 3;
6236
6222
  }
6237
6223
  else if (select) {
6238
- selectedExists = true; // Only one button can be selected
6239
- state = 2;
6224
+ if (!selectedExists || i === selected) {
6225
+ selectedIndex = i;
6226
+ }
6227
+ }
6228
+ });
6229
+ if (selectedIndex !== null) {
6230
+ buttonStates[selectedIndex] = 2;
6231
+ rangeSelector.setSelected(selectedIndex);
6232
+ }
6233
+ else {
6234
+ rangeSelector.setSelected();
6235
+ if (dropdownLabel) {
6236
+ dropdownLabel.setState(0);
6237
+ dropdownLabel.attr({
6238
+ text: (defaultOptions.lang.rangeSelectorZoom || '') + ' ▾'
6239
+ });
6240
6240
  }
6241
- // If state has changed, update the button
6241
+ }
6242
+ for (let i = 0; i < buttonStates.length; i++) {
6243
+ const state = buttonStates[i];
6244
+ const button = buttons[i];
6242
6245
  if (button.state !== state) {
6243
6246
  button.setState(state);
6244
6247
  if (dropdown) {
6245
- dropdown.options[i + 1].disabled = disable;
6248
+ dropdown.options[i + 1].disabled = (state === 3);
6246
6249
  if (state === 2) {
6250
+ if (dropdownLabel) {
6251
+ dropdownLabel.setState(2);
6252
+ dropdownLabel.attr({
6253
+ text: rangeSelector.buttonOptions[i].text + ' ▾'
6254
+ });
6255
+ }
6247
6256
  dropdown.selectedIndex = i + 1;
6248
6257
  }
6249
- }
6250
- // Reset (#9209)
6251
- if (state === 0 && selected === i) {
6252
- rangeSelector.setSelected();
6253
- }
6254
- else if ((state === 2 && !defined(selected)) ||
6255
- isSelectedTooGreat) {
6256
- rangeSelector.setSelected(i);
6258
+ const bbox = dropdownLabel.getBBox();
6259
+ css(dropdown, {
6260
+ width: `${bbox.width}px`,
6261
+ height: `${bbox.height}px`
6262
+ });
6257
6263
  }
6258
6264
  }
6259
- });
6265
+ }
6260
6266
  }
6261
6267
  /**
6262
6268
  * Compute and cache the range for an individual button
@@ -6454,12 +6460,10 @@
6454
6460
  /**
6455
6461
  * @private
6456
6462
  */
6457
- function updateExtremes() {
6458
- const { maxInput, minInput } = rangeSelector, chartAxis = chart.xAxis[0], unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || chartAxis, dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax;
6463
+ function updateExtremes(name) {
6464
+ const { maxInput, minInput } = rangeSelector, chartAxis = chart.xAxis[0], unionExtremes = chart.scroller?.getUnionExtremes() || chartAxis, dataMin = unionExtremes.dataMin, dataMax = unionExtremes.dataMax, currentExtreme = chart.xAxis[0].getExtremes()[name];
6459
6465
  let value = rangeSelector.getInputValue(name);
6460
- if (value !== Number(input.getAttribute('data-hc-time-previous')) &&
6461
- isNumber(value)) {
6462
- input.setAttribute('data-hc-time-previous', value);
6466
+ if (isNumber(value) && value !== currentExtreme) {
6463
6467
  // Validate the extremes. If it goes beyond the data min or
6464
6468
  // max, use the actual data extreme (#2438).
6465
6469
  if (isMin && maxInput && isNumber(dataMin)) {
@@ -6556,7 +6560,7 @@
6556
6560
  if (input === H.doc.activeElement) { // Only when focused
6557
6561
  // Update also when no `change` event is triggered, like when
6558
6562
  // clicking inside the SVG (#4710)
6559
- updateExtremes();
6563
+ updateExtremes(name);
6560
6564
  }
6561
6565
  // #10404 - move hide and blur outside focus
6562
6566
  rangeSelector.hideInput(name);
@@ -6568,7 +6572,7 @@
6568
6572
  input.onchange = () => {
6569
6573
  // Update extremes and blur input when clicking date input calendar
6570
6574
  if (!keyDown) {
6571
- updateExtremes();
6575
+ updateExtremes(name);
6572
6576
  rangeSelector.hideInput(name);
6573
6577
  input.blur();
6574
6578
  }
@@ -6576,14 +6580,16 @@
6576
6580
  input.onkeypress = (event) => {
6577
6581
  // IE does not fire onchange on enter
6578
6582
  if (event.keyCode === 13) {
6579
- updateExtremes();
6583
+ updateExtremes(name);
6580
6584
  }
6581
6585
  };
6582
6586
  input.onkeydown = (event) => {
6583
6587
  keyDown = true;
6584
6588
  // Arrow keys
6585
- if (event.keyCode === 38 || event.keyCode === 40) {
6586
- updateExtremes();
6589
+ if (event.key === 'ArrowUp' ||
6590
+ event.key === 'ArrowDown' ||
6591
+ event.key === 'Tab') {
6592
+ updateExtremes(name);
6587
6593
  }
6588
6594
  };
6589
6595
  input.onkeyup = () => {
@@ -6626,6 +6632,42 @@
6626
6632
  min
6627
6633
  };
6628
6634
  }
6635
+ createElements() {
6636
+ 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;
6637
+ if (options.enabled === false) {
6638
+ return;
6639
+ }
6640
+ this.group = renderer.g('range-selector-group')
6641
+ .attr({
6642
+ zIndex: 7
6643
+ })
6644
+ .add();
6645
+ this.div = createElement('div', void 0, {
6646
+ position: 'relative',
6647
+ height: 0,
6648
+ zIndex: inputsZIndex
6649
+ });
6650
+ if (this.buttonOptions.length) {
6651
+ this.renderButtons();
6652
+ }
6653
+ // First create a wrapper outside the container in order to make
6654
+ // the inputs work and make export correct
6655
+ if (container.parentNode) {
6656
+ container.parentNode.insertBefore(this.div, container);
6657
+ }
6658
+ if (inputEnabled) {
6659
+ // Create the group to keep the inputs
6660
+ this.inputGroup = renderer.g('input-group').add(this.group);
6661
+ const minElems = this.drawInput('min');
6662
+ this.minDateBox = minElems.dateBox;
6663
+ this.minLabel = minElems.label;
6664
+ this.minInput = minElems.input;
6665
+ const maxElems = this.drawInput('max');
6666
+ this.maxDateBox = maxElems.dateBox;
6667
+ this.maxLabel = maxElems.label;
6668
+ this.maxInput = maxElems.input;
6669
+ }
6670
+ }
6629
6671
  /**
6630
6672
  * Render the range selector including the buttons and the inputs. The first
6631
6673
  * time render is called, the elements are created and positioned. On
@@ -6639,46 +6681,12 @@
6639
6681
  * X axis maximum
6640
6682
  */
6641
6683
  render(min, max) {
6642
- const chart = this.chart, renderer = chart.renderer, container = chart.container, chartOptions = chart.options, options = chartOptions.rangeSelector,
6684
+ const chart = this.chart, chartOptions = chart.options, options = chartOptions.rangeSelector,
6643
6685
  // Place inputs above the container
6644
- inputsZIndex = pick(chartOptions.chart.style &&
6645
- chartOptions.chart.style.zIndex, 0) + 1, inputEnabled = options.inputEnabled, rendered = this.rendered;
6686
+ inputEnabled = options.inputEnabled;
6646
6687
  if (options.enabled === false) {
6647
6688
  return;
6648
6689
  }
6649
- // Create the elements
6650
- if (!rendered) {
6651
- this.group = renderer.g('range-selector-group')
6652
- .attr({
6653
- zIndex: 7
6654
- })
6655
- .add();
6656
- this.div = createElement('div', void 0, {
6657
- position: 'relative',
6658
- height: 0,
6659
- zIndex: inputsZIndex
6660
- });
6661
- if (this.buttonOptions.length) {
6662
- this.renderButtons();
6663
- }
6664
- // First create a wrapper outside the container in order to make
6665
- // the inputs work and make export correct
6666
- if (container.parentNode) {
6667
- container.parentNode.insertBefore(this.div, container);
6668
- }
6669
- if (inputEnabled) {
6670
- // Create the group to keep the inputs
6671
- this.inputGroup = renderer.g('input-group').add(this.group);
6672
- const minElems = this.drawInput('min');
6673
- this.minDateBox = minElems.dateBox;
6674
- this.minLabel = minElems.label;
6675
- this.minInput = minElems.input;
6676
- const maxElems = this.drawInput('max');
6677
- this.maxDateBox = maxElems.dateBox;
6678
- this.maxLabel = maxElems.label;
6679
- this.maxInput = maxElems.input;
6680
- }
6681
- }
6682
6690
  if (inputEnabled) {
6683
6691
  // Set or reset the input values
6684
6692
  this.setInputValue('min', min);
@@ -6710,7 +6718,7 @@
6710
6718
  }
6711
6719
  }
6712
6720
  this.alignElements();
6713
- this.rendered = true;
6721
+ this.updateButtonStates();
6714
6722
  }
6715
6723
  /**
6716
6724
  * Render the range buttons. This only runs the first time, later the
@@ -6734,33 +6742,39 @@
6734
6742
  this.buttonGroup = renderer.g('range-selector-buttons').add(this.group);
6735
6743
  const dropdown = this.dropdown = createElement('select', void 0, {
6736
6744
  position: 'absolute',
6737
- width: '1px',
6738
- height: '1px',
6739
6745
  padding: 0,
6740
6746
  border: 0,
6741
- top: '-9999em',
6742
6747
  cursor: 'pointer',
6743
6748
  opacity: 0.0001
6744
6749
  }, this.div);
6750
+ // Create a label for dropdown select element
6751
+ const userButtonTheme = chart.userOptions.rangeSelector?.buttonTheme;
6752
+ this.dropdownLabel = renderer.button('', 0, 0, () => { }, merge(buttonTheme, {
6753
+ 'stroke-width': pick(buttonTheme['stroke-width'], 0),
6754
+ width: 'auto',
6755
+ paddingLeft: pick(options.buttonTheme.paddingLeft, userButtonTheme?.padding, 8),
6756
+ paddingRight: pick(options.buttonTheme.paddingRight, userButtonTheme?.padding, 8)
6757
+ }), states && states.hover, states && states.select, states && states.disabled)
6758
+ .hide()
6759
+ .add(this.group);
6745
6760
  // Prevent page zoom on iPhone
6746
6761
  addEvent(dropdown, 'touchstart', () => {
6747
6762
  dropdown.style.fontSize = '16px';
6748
6763
  });
6749
6764
  // Forward events from select to button
6750
- [
6751
- [H.isMS ? 'mouseover' : 'mouseenter'],
6752
- [H.isMS ? 'mouseout' : 'mouseleave'],
6753
- ['change', 'click']
6754
- ].forEach(([from, to]) => {
6755
- addEvent(dropdown, from, () => {
6756
- const button = buttons[this.currentButtonIndex()];
6757
- if (button) {
6758
- fireEvent(button.element, to || from);
6759
- }
6760
- });
6765
+ const mouseOver = H.isMS ? 'mouseover' : 'mouseenter', mouseOut = H.isMS ? 'mouseout' : 'mouseleave';
6766
+ addEvent(dropdown, mouseOver, () => {
6767
+ fireEvent(this.dropdownLabel.element, mouseOver);
6768
+ });
6769
+ addEvent(dropdown, mouseOut, () => {
6770
+ fireEvent(this.dropdownLabel.element, mouseOut);
6771
+ });
6772
+ addEvent(dropdown, 'change', () => {
6773
+ const button = this.buttons[dropdown.selectedIndex - 1];
6774
+ fireEvent(button.element, 'click');
6761
6775
  });
6762
6776
  this.zoomText = renderer
6763
- .label((lang && lang.rangeSelectorZoom) || '', 0)
6777
+ .label(lang.rangeSelectorZoom || '', 0)
6764
6778
  .attr({
6765
6779
  padding: options.buttonTheme.padding,
6766
6780
  height: options.buttonTheme.height,
@@ -6852,10 +6866,13 @@
6852
6866
  this.initialButtonGroupWidth = width;
6853
6867
  }
6854
6868
  plotLeft -= chart.spacing[3];
6855
- this.updateButtonStates();
6856
6869
  // Detect collision between button group and exporting
6857
6870
  const xOffsetForExportButton = getXOffsetForExportButton(buttonGroup, buttonPosition);
6858
6871
  this.alignButtonGroup(xOffsetForExportButton);
6872
+ if (this.buttonGroup?.translateY) {
6873
+ this.dropdownLabel
6874
+ .attr({ y: this.buttonGroup.translateY });
6875
+ }
6859
6876
  // Skip animation
6860
6877
  group.placed = buttonGroup.placed = chart.hasLoaded;
6861
6878
  }
@@ -7025,7 +7042,7 @@
7025
7042
  return buttonWidth;
7026
7043
  };
7027
7044
  const groupsOverlap = (buttonGroupWidth) => {
7028
- if (inputGroup && buttonGroup) {
7045
+ if (inputGroup?.alignOptions && buttonGroup) {
7029
7046
  const inputGroupX = (inputGroup.alignAttr.translateX +
7030
7047
  inputGroup.alignOptions.x -
7031
7048
  xOffsetForExportButton +
@@ -7033,7 +7050,7 @@
7033
7050
  inputGroup.getBBox().x +
7034
7051
  // 2px padding to not overlap input and label
7035
7052
  2);
7036
- const inputGroupWidth = inputGroup.alignOptions.width;
7053
+ const inputGroupWidth = inputGroup.alignOptions.width || 0;
7037
7054
  const buttonGroupX = buttonGroup.alignAttr.translateX +
7038
7055
  buttonGroup.getBBox().x;
7039
7056
  return (buttonGroupX + buttonGroupWidth > inputGroupX) &&
@@ -7057,7 +7074,7 @@
7057
7074
  };
7058
7075
  if (buttonGroup) {
7059
7076
  if (dropdown === 'always') {
7060
- this.collapseButtons(xOffsetForExportButton);
7077
+ this.collapseButtons();
7061
7078
  if (groupsOverlap(maxButtonWidth())) {
7062
7079
  // Move the inputs down if there is still a collision
7063
7080
  // after collapsing the buttons
@@ -7075,7 +7092,7 @@
7075
7092
  // 20 is minimal spacing between elements
7076
7093
  groupsOverlap(this.initialButtonGroupWidth + 20)) {
7077
7094
  if (dropdown === 'responsive') {
7078
- this.collapseButtons(xOffsetForExportButton);
7095
+ this.collapseButtons();
7079
7096
  if (groupsOverlap(maxButtonWidth())) {
7080
7097
  moveInputsDown();
7081
7098
  }
@@ -7090,7 +7107,7 @@
7090
7107
  }
7091
7108
  else if (buttonGroup && dropdown === 'responsive') {
7092
7109
  if (this.initialButtonGroupWidth > chart.plotWidth) {
7093
- this.collapseButtons(xOffsetForExportButton);
7110
+ this.collapseButtons();
7094
7111
  }
7095
7112
  else {
7096
7113
  this.expandButtons();
@@ -7098,54 +7115,20 @@
7098
7115
  }
7099
7116
  }
7100
7117
  /**
7101
- * Collapse the buttons and put the select element on top.
7118
+ * Collapse the buttons and show the select element.
7102
7119
  *
7103
7120
  * @private
7104
7121
  * @function Highcharts.RangeSelector#collapseButtons
7105
7122
  * @param {number} xOffsetForExportButton
7106
7123
  */
7107
- collapseButtons(xOffsetForExportButton) {
7108
- const { buttons, buttonOptions, chart, dropdown, options, zoomText } = this;
7109
- // If the buttons are already collapsed do nothing.
7124
+ collapseButtons() {
7125
+ const { buttons, zoomText } = this;
7110
7126
  if (this.isCollapsed === true) {
7111
7127
  return;
7112
7128
  }
7113
7129
  this.isCollapsed = true;
7114
- const userButtonTheme = (chart.userOptions.rangeSelector &&
7115
- chart.userOptions.rangeSelector.buttonTheme) || {};
7116
- const getAttribs = (text) => ({
7117
- text: text ? `${text} ▾` : '▾',
7118
- width: 'auto',
7119
- paddingLeft: pick(options.buttonTheme.paddingLeft, userButtonTheme.padding, 8),
7120
- paddingRight: pick(options.buttonTheme.paddingRight, userButtonTheme.padding, 8)
7121
- });
7122
- if (zoomText) {
7123
- zoomText.hide();
7124
- }
7125
- let hasActiveButton = false;
7126
- buttonOptions.forEach((rangeOptions, i) => {
7127
- const button = buttons[i];
7128
- if (button.state !== 2) {
7129
- button.hide();
7130
- }
7131
- else {
7132
- button.show();
7133
- button.attr(getAttribs(rangeOptions.text));
7134
- hasActiveButton = true;
7135
- }
7136
- });
7137
- if (!hasActiveButton) {
7138
- if (dropdown) {
7139
- dropdown.selectedIndex = 0;
7140
- }
7141
- buttons[0].show();
7142
- buttons[0].attr(getAttribs(this.zoomText && this.zoomText.textStr));
7143
- }
7144
- const { align } = options.buttonPosition;
7145
- this.positionButtons();
7146
- if (align === 'right' || align === 'center') {
7147
- this.alignButtonGroup(xOffsetForExportButton, buttons[this.currentButtonIndex()].getBBox().width);
7148
- }
7130
+ zoomText.hide();
7131
+ buttons.forEach((button) => void button.hide());
7149
7132
  this.showDropdown();
7150
7133
  }
7151
7134
  /**
@@ -7155,44 +7138,16 @@
7155
7138
  * @function Highcharts.RangeSelector#expandButtons
7156
7139
  */
7157
7140
  expandButtons() {
7158
- const { buttons, buttonOptions, options, zoomText } = this;
7159
- this.hideDropdown();
7160
- // If buttons are already not collapsed, do nothing.
7141
+ const { buttons, zoomText } = this;
7161
7142
  if (this.isCollapsed === false) {
7162
7143
  return;
7163
7144
  }
7164
7145
  this.isCollapsed = false;
7165
- if (zoomText) {
7166
- zoomText.show();
7167
- }
7168
- buttonOptions.forEach((rangeOptions, i) => {
7169
- const button = buttons[i];
7170
- button.show();
7171
- button.attr({
7172
- text: rangeOptions.text,
7173
- width: options.buttonTheme.width || 28,
7174
- paddingLeft: pick(options.buttonTheme.paddingLeft, 'unset'),
7175
- paddingRight: pick(options.buttonTheme.paddingRight, 'unset')
7176
- });
7177
- if (button.state < 2) {
7178
- button.setState(0);
7179
- }
7180
- });
7146
+ this.hideDropdown();
7147
+ zoomText.show();
7148
+ buttons.forEach((button) => void button.show());
7181
7149
  this.positionButtons();
7182
7150
  }
7183
- /**
7184
- * Get the index of the visible button when the buttons are collapsed.
7185
- *
7186
- * @private
7187
- * @function Highcharts.RangeSelector#currentButtonIndex
7188
- */
7189
- currentButtonIndex() {
7190
- const { dropdown } = this;
7191
- if (dropdown && dropdown.selectedIndex > 0) {
7192
- return dropdown.selectedIndex - 1;
7193
- }
7194
- return 0;
7195
- }
7196
7151
  /**
7197
7152
  * Position the select element on top of the button.
7198
7153
  *
@@ -7200,14 +7155,16 @@
7200
7155
  * @function Highcharts.RangeSelector#showDropdown
7201
7156
  */
7202
7157
  showDropdown() {
7203
- const { buttonGroup, buttons, chart, dropdown } = this;
7158
+ const { buttonGroup, chart, dropdownLabel, dropdown } = this;
7204
7159
  if (buttonGroup && dropdown) {
7205
- const { translateX = 0, translateY = 0 } = buttonGroup, bBox = buttons[this.currentButtonIndex()].getBBox();
7160
+ const { translateX = 0, translateY = 0 } = buttonGroup, left = chart.plotLeft + translateX, top = translateY;
7161
+ dropdownLabel
7162
+ .attr({ x: left, y: top })
7163
+ .show();
7206
7164
  css(dropdown, {
7207
- left: (chart.plotLeft + translateX) + 'px',
7208
- top: (translateY + 0.5) + 'px',
7209
- width: bBox.width + 'px',
7210
- height: bBox.height + 'px'
7165
+ left: left + 'px',
7166
+ top: top + 'px',
7167
+ visibility: 'inherit'
7211
7168
  });
7212
7169
  this.hasVisibleDropdown = true;
7213
7170
  }
@@ -7219,8 +7176,9 @@
7219
7176
  hideDropdown() {
7220
7177
  const { dropdown } = this;
7221
7178
  if (dropdown) {
7179
+ this.dropdownLabel.hide();
7222
7180
  css(dropdown, {
7223
- top: '-9999em',
7181
+ visibility: 'hidden',
7224
7182
  width: '1px',
7225
7183
  height: '1px'
7226
7184
  });
@@ -7275,12 +7233,14 @@
7275
7233
  * @function Highcharts.RangeSelector#update
7276
7234
  * @param {Highcharts.RangeSelectorOptions} options
7277
7235
  */
7278
- update(options) {
7236
+ update(options, redraw = true) {
7279
7237
  const chart = this.chart;
7280
7238
  merge(true, chart.options.rangeSelector, options);
7281
7239
  this.destroy();
7282
7240
  this.init(chart);
7283
- this.render();
7241
+ if (redraw) {
7242
+ this.render();
7243
+ }
7284
7244
  }
7285
7245
  /**
7286
7246
  * Destroys allocated elements.
@@ -7420,7 +7380,7 @@
7420
7380
  const { format } = F;
7421
7381
  const { getOptions } = D;
7422
7382
  const { setFixedRange } = StockUtilities;
7423
- const { addEvent, clamp, defined, extend, find, isNumber, isString, merge, pick, splat } = U;
7383
+ const { addEvent, clamp, crisp, defined, extend, find, isNumber, isString, merge, pick, splat } = U;
7424
7384
  /* *
7425
7385
  *
7426
7386
  * Functions
@@ -8039,15 +7999,11 @@
8039
7999
  // normalize to a crisp line
8040
8000
  for (let i = 0; i < points.length; i = i + 2) {
8041
8001
  const start = points[i], end = points[i + 1];
8042
- if (start[1] === end[1]) {
8043
- // Subtract due to #1129. Now bottom and left axis gridlines
8044
- // behave the same.
8045
- start[1] = end[1] =
8046
- Math.round(start[1]) - (width % 2 / 2);
8002
+ if (defined(start[1]) && start[1] === end[1]) {
8003
+ start[1] = end[1] = crisp(start[1], width);
8047
8004
  }
8048
- if (start[2] === end[2]) {
8049
- start[2] = end[2] =
8050
- Math.round(start[2]) + (width % 2 / 2);
8005
+ if (defined(start[2]) && start[2] === end[2]) {
8006
+ start[2] = end[2] = crisp(start[2], width);
8051
8007
  }
8052
8008
  }
8053
8009
  return points;
@@ -8285,7 +8241,7 @@
8285
8241
  *
8286
8242
  * */
8287
8243
  const { column: ColumnSeries } = SeriesRegistry.seriesTypes;
8288
- const { extend, merge } = U;
8244
+ const { crisp, extend, merge } = U;
8289
8245
  /* *
8290
8246
  *
8291
8247
  * Class
@@ -8332,10 +8288,9 @@
8332
8288
  */
8333
8289
  getPointPath(point, graphic) {
8334
8290
  // Crisp vector coordinates
8335
- const strokeWidth = graphic.strokeWidth(), series = point.series, crispCorr = (strokeWidth % 2) / 2,
8291
+ const strokeWidth = graphic.strokeWidth(), series = point.series,
8336
8292
  // #2596:
8337
- crispX = Math.round(point.plotX) - crispCorr, halfWidth = Math.round(point.shapeArgs.width / 2);
8338
- let plotClose = point.plotClose;
8293
+ crispX = crisp(point.plotX || 0, strokeWidth), halfWidth = Math.round(point.shapeArgs.width / 2);
8339
8294
  // The vertical stem
8340
8295
  const path = [
8341
8296
  ['M', crispX, Math.round(point.yBottom)],
@@ -8343,7 +8298,7 @@
8343
8298
  ];
8344
8299
  // Close
8345
8300
  if (point.close !== null) {
8346
- plotClose = Math.round(point.plotClose) + crispCorr;
8301
+ const plotClose = crisp(point.plotClose, strokeWidth);
8347
8302
  path.push(['M', crispX, plotClose], ['L', crispX + halfWidth, plotClose]);
8348
8303
  series.extendStem(path, strokeWidth / 2, plotClose);
8349
8304
  }
@@ -8710,7 +8665,7 @@
8710
8665
  * */
8711
8666
  const { composed } = H;
8712
8667
  const { hlc: HLCSeries } = SeriesRegistry.seriesTypes;
8713
- const { addEvent, extend, merge, pushUnique } = U;
8668
+ const { addEvent, crisp, extend, merge, pushUnique } = U;
8714
8669
  /* *
8715
8670
  *
8716
8671
  * Functions
@@ -8776,11 +8731,9 @@
8776
8731
  *
8777
8732
  * */
8778
8733
  getPointPath(point, graphic) {
8779
- const path = super.getPointPath(point, graphic), strokeWidth = graphic.strokeWidth(), crispCorr = (strokeWidth % 2) / 2, crispX = Math.round(point.plotX) - crispCorr, halfWidth = Math.round(point.shapeArgs.width / 2);
8780
- let plotOpen = point.plotOpen;
8781
- // Crisp vector coordinates
8734
+ const path = super.getPointPath(point, graphic), strokeWidth = graphic.strokeWidth(), crispX = crisp(point.plotX || 0, strokeWidth), halfWidth = Math.round(point.shapeArgs.width / 2);
8782
8735
  if (point.open !== null) {
8783
- plotOpen = Math.round(point.plotOpen) + crispCorr;
8736
+ const plotOpen = crisp(point.plotOpen, strokeWidth);
8784
8737
  path.push(['M', crispX, plotOpen], ['L', crispX - halfWidth, plotOpen]);
8785
8738
  super.extendStem(path, strokeWidth / 2, plotOpen);
8786
8739
  }
@@ -9001,7 +8954,7 @@
9001
8954
 
9002
8955
  return CandlestickSeriesDefaults;
9003
8956
  });
9004
- _registerModule(_modules, 'Series/Candlestick/CandlestickSeries.js', [_modules['Series/Candlestick/CandlestickSeriesDefaults.js'], _modules['Core/Defaults.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (CandlestickSeriesDefaults, D, SeriesRegistry, U) {
8957
+ _registerModule(_modules, 'Series/Candlestick/CandlestickSeries.js', [_modules['Series/Candlestick/CandlestickSeriesDefaults.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (CandlestickSeriesDefaults, SeriesRegistry, U) {
9005
8958
  /* *
9006
8959
  *
9007
8960
  * (c) 2010-2024 Torstein Honsi
@@ -9011,9 +8964,8 @@
9011
8964
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
9012
8965
  *
9013
8966
  * */
9014
- const { defaultOptions } = D;
9015
8967
  const { column: ColumnSeries, ohlc: OHLCSeries } = SeriesRegistry.seriesTypes;
9016
- const { merge } = U;
8968
+ const { crisp, merge } = U;
9017
8969
  /* *
9018
8970
  *
9019
8971
  * Class
@@ -9066,7 +9018,7 @@
9066
9018
  drawPoints() {
9067
9019
  const series = this, points = series.points, chart = series.chart, reversedYAxis = series.yAxis.reversed;
9068
9020
  for (const point of points) {
9069
- let graphic = point.graphic, plotOpen, plotClose, topBox, bottomBox, hasTopWhisker, hasBottomWhisker, crispCorr, crispX, path, halfWidth;
9021
+ let graphic = point.graphic, plotOpen, plotClose, topBox, bottomBox, hasTopWhisker, hasBottomWhisker, crispX, path, halfWidth;
9070
9022
  const isNew = !graphic;
9071
9023
  if (typeof point.plotY !== 'undefined') {
9072
9024
  if (!graphic) {
@@ -9079,9 +9031,9 @@
9079
9031
  .shadow(series.options.shadow);
9080
9032
  }
9081
9033
  // Crisp vector coordinates
9082
- crispCorr = (graphic.strokeWidth() % 2) / 2;
9034
+ const strokeWidth = graphic.strokeWidth();
9083
9035
  // #2596:
9084
- crispX = Math.round(point.plotX) - crispCorr;
9036
+ crispX = crisp(point.plotX || 0, strokeWidth);
9085
9037
  plotOpen = point.plotOpen;
9086
9038
  plotClose = point.plotClose;
9087
9039
  topBox = Math.min(plotOpen, plotClose);
@@ -9090,13 +9042,13 @@
9090
9042
  hasTopWhisker = reversedYAxis ?
9091
9043
  bottomBox !== point.yBottom :
9092
9044
  Math.round(topBox) !==
9093
- Math.round(point.plotHigh);
9045
+ Math.round(point.plotHigh || 0);
9094
9046
  hasBottomWhisker = reversedYAxis ?
9095
9047
  Math.round(topBox) !==
9096
- Math.round(point.plotHigh) :
9048
+ Math.round(point.plotHigh || 0) :
9097
9049
  bottomBox !== point.yBottom;
9098
- topBox = Math.round(topBox) + crispCorr;
9099
- bottomBox = Math.round(bottomBox) + crispCorr;
9050
+ topBox = crisp(topBox, strokeWidth);
9051
+ bottomBox = crisp(bottomBox, strokeWidth);
9100
9052
  // Create the path. Due to a bug in Chrome 49, the path is
9101
9053
  // first instantiated with no values, then the values
9102
9054
  // pushed. For unknown reasons, instantiating the path array
@@ -9134,7 +9086,7 @@
9134
9086
  * Static Properties
9135
9087
  *
9136
9088
  * */
9137
- CandlestickSeries.defaultOptions = merge(OHLCSeries.defaultOptions, defaultOptions.plotOptions, { tooltip: OHLCSeries.defaultOptions.tooltip }, CandlestickSeriesDefaults);
9089
+ CandlestickSeries.defaultOptions = merge(OHLCSeries.defaultOptions, { tooltip: OHLCSeries.defaultOptions.tooltip }, CandlestickSeriesDefaults);
9138
9090
  SeriesRegistry.registerSeriesType('candlestick', CandlestickSeries);
9139
9091
  /* *
9140
9092
  *
@@ -9942,7 +9894,8 @@
9942
9894
  attribs.anchorX = point.anchorX;
9943
9895
  }
9944
9896
  graphic.attr({
9945
- text: point.options.title || options.title || 'A'
9897
+ // Allow empty string as a flag title (#20549)
9898
+ text: point.options.title ?? options.title ?? 'A'
9946
9899
  })[graphic.isNew ? 'attr' : 'animate'](attribs);
9947
9900
  // Rig for the distribute function
9948
9901
  if (!options.allowOverlapX) {
@@ -11460,6 +11413,7 @@
11460
11413
  }
11461
11414
  else {
11462
11415
  series.groupMap = null;
11416
+ series.currentDataGrouping = void 0;
11463
11417
  }
11464
11418
  series.hasGroupedData = hasGroupedData;
11465
11419
  series.preventGraphAnimation =