highcharts 11.4.3 → 11.4.5

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 (571) hide show
  1. package/bower.json +1 -1
  2. package/es-modules/Accessibility/Accessibility.js +1 -1
  3. package/es-modules/Accessibility/AccessibilityComponent.js +1 -1
  4. package/es-modules/Accessibility/Components/NavigatorComponent.js +2 -2
  5. package/es-modules/Accessibility/KeyboardNavigation.js +1 -1
  6. package/es-modules/Accessibility/KeyboardNavigationHandler.js +5 -5
  7. package/es-modules/Accessibility/Options/A11yDefaults.js +1 -1
  8. package/es-modules/Accessibility/Options/LangDefaults.js +3 -3
  9. package/es-modules/Accessibility/Utils/EventProvider.js +1 -1
  10. package/es-modules/Accessibility/Utils/HTMLUtilities.js +1 -1
  11. package/es-modules/Core/Animation/Fx.js +4 -2
  12. package/es-modules/Core/Axis/Axis.js +6 -4
  13. package/es-modules/Core/Axis/AxisDefaults.js +1 -0
  14. package/es-modules/Core/Axis/Color/ColorAxisComposition.js +2 -1
  15. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +7 -3
  16. package/es-modules/Core/Axis/GridAxis.js +1 -1
  17. package/es-modules/Core/Axis/OrdinalAxis.js +5 -2
  18. package/es-modules/Core/Axis/RadialAxisDefaults.js +3 -3
  19. package/es-modules/Core/Axis/Stacking/StackItem.js +1 -1
  20. package/es-modules/Core/Chart/Chart.js +16 -7
  21. package/es-modules/Core/Chart/MapChart.js +3 -3
  22. package/es-modules/Core/Chart/StockChart.js +1 -1
  23. package/es-modules/Core/Color/Color.js +2 -2
  24. package/es-modules/Core/Defaults.js +27 -1
  25. package/es-modules/Core/Geometry/GeometryUtilities.js +22 -0
  26. package/es-modules/Core/Globals.js +1 -1
  27. package/es-modules/Core/Legend/Legend.js +82 -14
  28. package/es-modules/Core/MSPointer.js +42 -1
  29. package/es-modules/Core/Pointer.js +10 -6
  30. package/es-modules/Core/Renderer/HTML/AST.js +6 -0
  31. package/es-modules/Core/Renderer/HTML/HTMLElement.js +2 -2
  32. package/es-modules/Core/Renderer/SVG/SVGElement.js +31 -98
  33. package/es-modules/Core/Renderer/SVG/SVGLabel.js +20 -0
  34. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +29 -14
  35. package/es-modules/Core/Renderer/SVG/Symbols.js +18 -18
  36. package/es-modules/Core/Responsive.js +6 -1
  37. package/es-modules/Core/Series/DataLabel.js +1 -10
  38. package/es-modules/Core/Series/DataSeriesComposition.js +0 -2
  39. package/es-modules/Core/Series/Point.js +7 -10
  40. package/es-modules/Core/Series/Series.js +40 -24
  41. package/es-modules/Core/Series/SeriesDefaults.js +18 -12
  42. package/es-modules/Core/Templating.js +2 -2
  43. package/es-modules/Core/Tooltip.js +6 -3
  44. package/es-modules/Data/Connectors/JSONConnector.js +1 -0
  45. package/es-modules/Data/Converters/CSVConverter.js +1 -1
  46. package/es-modules/Data/Converters/DataConverter.js +7 -7
  47. package/es-modules/Data/Converters/GoogleSheetsConverter.js +8 -3
  48. package/es-modules/Data/DataTable.js +106 -5
  49. package/es-modules/Data/Formula/FormulaParser.js +2 -2
  50. package/es-modules/Extensions/Annotations/Controllables/ControllableDefaults.js +1 -1
  51. package/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +1 -1
  52. package/es-modules/Extensions/Annotations/NavigationBindings.js +1 -2
  53. package/es-modules/Extensions/Boost/Boost.js +1 -1
  54. package/es-modules/Extensions/Boost/BoostChart.js +8 -2
  55. package/es-modules/Extensions/Boost/BoostSeries.js +41 -10
  56. package/es-modules/Extensions/Boost/WGLShader.js +1 -1
  57. package/es-modules/Extensions/BorderRadius.js +3 -3
  58. package/es-modules/Extensions/Breadcrumbs/Breadcrumbs.js +0 -38
  59. package/es-modules/Extensions/Data.js +11 -11
  60. package/es-modules/Extensions/DataGrouping/DataGrouping.js +1 -2
  61. package/es-modules/Extensions/DataGrouping/DataGroupingDefaults.js +1 -1
  62. package/es-modules/Extensions/DownloadURL.js +1 -1
  63. package/es-modules/Extensions/Drilldown/Drilldown.js +0 -2
  64. package/es-modules/Extensions/Exporting/Exporting.js +14 -14
  65. package/es-modules/Extensions/OverlappingDataLabels.js +36 -5
  66. package/es-modules/Extensions/Pane/PaneDefaults.js +3 -2
  67. package/es-modules/Extensions/ParallelCoordinates/ParallelCoordinates.js +1 -1
  68. package/es-modules/Extensions/Sonification/MIDI.js +7 -7
  69. package/es-modules/Extensions/Sonification/SonificationInstrument.js +0 -1
  70. package/es-modules/Extensions/Sonification/TimelineFromChart.js +1 -3
  71. package/es-modules/Extensions/TextPath.js +227 -0
  72. package/es-modules/Maps/MapUtilities.js +1 -20
  73. package/es-modules/Maps/MapView.js +3 -1
  74. package/es-modules/Series/ArcDiagram/ArcDiagramSeries.js +3 -0
  75. package/es-modules/Series/Area/AreaSeries.js +5 -0
  76. package/es-modules/Series/Area/AreaSeriesDefaults.js +1 -1
  77. package/es-modules/Series/Bar/BarSeries.js +1 -1
  78. package/es-modules/Series/Bellcurve/BellcurveSeriesDefaults.js +2 -2
  79. package/es-modules/Series/BoxPlot/BoxPlotSeries.js +2 -1
  80. package/es-modules/Series/Bubble/BubbleLegendComposition.js +4 -7
  81. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +3 -3
  82. package/es-modules/Series/Bubble/BubbleSeries.js +4 -4
  83. package/es-modules/Series/Column/ColumnSeriesDefaults.js +1 -1
  84. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +5 -2
  85. package/es-modules/Series/Dumbbell/DumbbellSeriesDefaults.js +2 -2
  86. package/es-modules/Series/ErrorBar/ErrorBarSeries.js +2 -2
  87. package/es-modules/Series/Flags/FlagsSeries.js +2 -2
  88. package/es-modules/Series/Flags/FlagsSeriesDefaults.js +1 -1
  89. package/es-modules/Series/Gantt/GanttSeriesDefaults.js +1 -1
  90. package/es-modules/Series/Gauge/GaugeSeries.js +1 -1
  91. package/es-modules/Series/HLC/HLCSeries.js +1 -1
  92. package/es-modules/Series/Heatmap/HeatmapSeriesDefaults.js +2 -2
  93. package/es-modules/Series/Item/ItemSeries.js +1 -1
  94. package/es-modules/Series/Map/MapSeries.js +1 -1
  95. package/es-modules/Series/Map/MapSeriesDefaults.js +2 -2
  96. package/es-modules/Series/Networkgraph/NetworkgraphSeries.js +4 -1
  97. package/es-modules/Series/Organization/OrganizationSeries.js +3 -0
  98. package/es-modules/Series/PackedBubble/PackedBubblePoint.js +1 -1
  99. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +8 -5
  100. package/es-modules/Series/Pie/PieDataLabel.js +7 -6
  101. package/es-modules/Series/Pie/PiePoint.js +6 -6
  102. package/es-modules/Series/Pie/PieSeriesDefaults.js +11 -10
  103. package/es-modules/Series/Pie3D/Pie3DSeries.js +1 -1
  104. package/es-modules/Series/Sankey/SankeySeries.js +7 -4
  105. package/es-modules/Series/Sankey/SankeySeriesDefaults.js +1 -1
  106. package/es-modules/Series/Sunburst/SunburstSeries.js +8 -5
  107. package/es-modules/Series/Sunburst/SunburstSeriesDefaults.js +2 -2
  108. package/es-modules/Series/Tilemap/TilemapSeriesDefaults.js +2 -2
  109. package/es-modules/Series/Treegraph/TreegraphSeries.js +23 -2
  110. package/es-modules/Series/Treegraph/TreegraphSeriesDefaults.js +2 -2
  111. package/es-modules/Series/Treemap/TreemapPoint.js +2 -1
  112. package/es-modules/Series/Treemap/TreemapSeries.js +15 -7
  113. package/es-modules/Series/Treemap/TreemapSeriesDefaults.js +15 -1
  114. package/es-modules/Series/VariablePie/VariablePieSeriesDefaults.js +2 -2
  115. package/es-modules/Series/Variwide/VariwideComposition.js +1 -1
  116. package/es-modules/Series/Vector/VectorSeries.js +1 -1
  117. package/es-modules/Series/Windbarb/WindbarbSeries.js +2 -2
  118. package/es-modules/Series/Wordcloud/WordcloudSeries.js +2 -2
  119. package/es-modules/Series/Wordcloud/WordcloudSeriesDefaults.js +1 -1
  120. package/es-modules/Stock/Indicators/AD/ADIndicator.js +1 -1
  121. package/es-modules/Stock/Indicators/APO/APOIndicator.js +1 -1
  122. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +1 -1
  123. package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +1 -1
  124. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +1 -1
  125. package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +3 -3
  126. package/es-modules/Stock/Indicators/LinearRegression/LinearRegressionIndicator.js +1 -1
  127. package/es-modules/Stock/Indicators/MFI/MFIIndicator.js +1 -1
  128. package/es-modules/Stock/Indicators/PC/PCIndicator.js +1 -1
  129. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -1
  130. package/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +1 -1
  131. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +3 -3
  132. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +1 -1
  133. package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +2 -2
  134. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +3 -3
  135. package/es-modules/Stock/Indicators/TrendLine/TrendLineIndicator.js +1 -1
  136. package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +1 -1
  137. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +1 -1
  138. package/es-modules/Stock/Navigator/Navigator.js +141 -55
  139. package/es-modules/Stock/Navigator/NavigatorDefaults.js +1 -1
  140. package/es-modules/Stock/RangeSelector/RangeSelector.js +1 -1
  141. package/es-modules/Stock/RangeSelector/RangeSelectorDefaults.js +1 -1
  142. package/es-modules/Stock/Scrollbar/ScrollbarDefaults.js +1 -1
  143. package/es-modules/Stock/StockTools/StockToolbar.js +115 -37
  144. package/es-modules/Stock/StockTools/StockToolsDefaults.js +7 -1
  145. package/es-modules/Stock/StockTools/StockToolsGui.js +24 -23
  146. package/es-modules/Stock/StockTools/StockToolsUtilities.js +26 -0
  147. package/es-modules/masters/highcharts-more.src.js +2 -2
  148. package/es-modules/masters/modules/arc-diagram.src.js +1 -2
  149. package/es-modules/masters/modules/cylinder.src.js +1 -1
  150. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  151. package/es-modules/masters/modules/map.src.js +1 -1
  152. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  153. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  154. package/es-modules/masters/modules/textpath.src.d.ts +1 -0
  155. package/es-modules/masters/modules/textpath.src.js +16 -0
  156. package/es-modules/tsconfig.tsbuildinfo +1 -1
  157. package/highcharts-3d.js +2 -2
  158. package/highcharts-3d.src.js +4 -4
  159. package/highcharts-gantt.js +3 -3
  160. package/highcharts-gantt.src.js +3376 -3042
  161. package/highcharts-more.d.ts +42 -2
  162. package/highcharts-more.js +2 -2
  163. package/highcharts-more.src.d.ts +42 -2
  164. package/highcharts-more.src.js +262 -35
  165. package/highcharts.d.ts +840 -407
  166. package/highcharts.js +3 -3
  167. package/highcharts.src.d.ts +840 -407
  168. package/highcharts.src.js +6064 -5818
  169. package/highmaps.js +3 -3
  170. package/highmaps.src.js +3276 -3046
  171. package/highstock.js +3 -3
  172. package/highstock.src.js +3395 -3062
  173. package/indicators/acceleration-bands.js +2 -2
  174. package/indicators/acceleration-bands.src.js +3 -3
  175. package/indicators/accumulation-distribution.js +2 -2
  176. package/indicators/accumulation-distribution.src.js +4 -4
  177. package/indicators/ao.js +2 -2
  178. package/indicators/ao.src.js +3 -3
  179. package/indicators/apo.js +2 -2
  180. package/indicators/apo.src.js +4 -4
  181. package/indicators/aroon-oscillator.js +2 -2
  182. package/indicators/aroon-oscillator.src.js +3 -3
  183. package/indicators/aroon.js +2 -2
  184. package/indicators/aroon.src.js +4 -4
  185. package/indicators/atr.js +2 -2
  186. package/indicators/atr.src.js +3 -3
  187. package/indicators/bollinger-bands.js +2 -2
  188. package/indicators/bollinger-bands.src.js +3 -3
  189. package/indicators/cci.js +2 -2
  190. package/indicators/cci.src.js +3 -3
  191. package/indicators/chaikin.js +2 -2
  192. package/indicators/chaikin.src.js +5 -5
  193. package/indicators/cmf.js +2 -2
  194. package/indicators/cmf.src.js +4 -4
  195. package/indicators/cmo.js +2 -2
  196. package/indicators/cmo.src.js +3 -3
  197. package/indicators/dema.js +2 -2
  198. package/indicators/dema.src.js +3 -3
  199. package/indicators/disparity-index.js +2 -2
  200. package/indicators/disparity-index.src.js +3 -3
  201. package/indicators/dmi.js +2 -2
  202. package/indicators/dmi.src.js +3 -3
  203. package/indicators/dpo.js +2 -2
  204. package/indicators/dpo.src.js +3 -3
  205. package/indicators/ema.js +1 -1
  206. package/indicators/ema.src.js +2 -2
  207. package/indicators/ichimoku-kinko-hyo.js +2 -2
  208. package/indicators/ichimoku-kinko-hyo.src.js +6 -6
  209. package/indicators/indicators-all.js +2 -2
  210. package/indicators/indicators-all.src.js +28 -28
  211. package/indicators/indicators.js +2 -2
  212. package/indicators/indicators.src.js +4 -4
  213. package/indicators/keltner-channels.js +2 -2
  214. package/indicators/keltner-channels.src.js +3 -3
  215. package/indicators/klinger.js +2 -2
  216. package/indicators/klinger.src.js +3 -3
  217. package/indicators/macd.js +2 -2
  218. package/indicators/macd.src.js +3 -3
  219. package/indicators/mfi.js +2 -2
  220. package/indicators/mfi.src.js +4 -4
  221. package/indicators/momentum.js +2 -2
  222. package/indicators/momentum.src.js +3 -3
  223. package/indicators/natr.js +2 -2
  224. package/indicators/natr.src.js +3 -3
  225. package/indicators/obv.js +2 -2
  226. package/indicators/obv.src.js +3 -3
  227. package/indicators/pivot-points.js +2 -2
  228. package/indicators/pivot-points.src.js +6 -6
  229. package/indicators/ppo.js +2 -2
  230. package/indicators/ppo.src.js +4 -4
  231. package/indicators/price-channel.js +2 -2
  232. package/indicators/price-channel.src.js +4 -4
  233. package/indicators/price-envelopes.js +2 -2
  234. package/indicators/price-envelopes.src.js +3 -3
  235. package/indicators/psar.js +2 -2
  236. package/indicators/psar.src.js +4 -4
  237. package/indicators/regressions.js +2 -2
  238. package/indicators/regressions.src.js +4 -4
  239. package/indicators/roc.js +2 -2
  240. package/indicators/roc.src.js +3 -3
  241. package/indicators/rsi.js +2 -2
  242. package/indicators/rsi.src.js +3 -3
  243. package/indicators/slow-stochastic.js +2 -2
  244. package/indicators/slow-stochastic.src.js +5 -5
  245. package/indicators/stochastic.js +2 -2
  246. package/indicators/stochastic.src.js +3 -3
  247. package/indicators/supertrend.js +2 -2
  248. package/indicators/supertrend.src.js +6 -6
  249. package/indicators/tema.js +2 -2
  250. package/indicators/tema.src.js +3 -3
  251. package/indicators/trendline.js +2 -2
  252. package/indicators/trendline.src.js +4 -4
  253. package/indicators/trix.js +2 -2
  254. package/indicators/trix.src.js +3 -3
  255. package/indicators/volume-by-price.js +2 -2
  256. package/indicators/volume-by-price.src.js +3 -3
  257. package/indicators/vwap.js +2 -2
  258. package/indicators/vwap.src.js +4 -4
  259. package/indicators/williams-r.js +2 -2
  260. package/indicators/williams-r.src.js +4 -4
  261. package/indicators/wma.js +2 -2
  262. package/indicators/wma.src.js +3 -3
  263. package/indicators/zigzag.js +2 -2
  264. package/indicators/zigzag.src.js +3 -3
  265. package/modules/accessibility.js +2 -2
  266. package/modules/accessibility.src.js +162 -77
  267. package/modules/annotations-advanced.js +2 -2
  268. package/modules/annotations-advanced.src.js +8 -9
  269. package/modules/annotations.js +2 -2
  270. package/modules/annotations.src.js +8 -9
  271. package/modules/arc-diagram.d.ts +120 -1
  272. package/modules/arc-diagram.js +2 -2
  273. package/modules/arc-diagram.src.d.ts +120 -1
  274. package/modules/arc-diagram.src.js +9363 -5
  275. package/modules/arrow-symbols.js +2 -2
  276. package/modules/arrow-symbols.src.js +3 -3
  277. package/modules/boost-canvas.js +2 -2
  278. package/modules/boost-canvas.src.js +53 -16
  279. package/modules/boost.js +2 -2
  280. package/modules/boost.src.js +54 -17
  281. package/modules/broken-axis.js +2 -2
  282. package/modules/broken-axis.src.js +3 -3
  283. package/modules/bullet.js +2 -2
  284. package/modules/bullet.src.js +3 -3
  285. package/modules/coloraxis.js +2 -2
  286. package/modules/coloraxis.src.js +12 -7
  287. package/modules/current-date-indicator.js +2 -2
  288. package/modules/current-date-indicator.src.js +3 -3
  289. package/modules/cylinder.js +2 -2
  290. package/modules/cylinder.src.js +4 -4
  291. package/modules/data-tools.js +2 -2
  292. package/modules/data-tools.src.js +128 -21
  293. package/modules/data.js +2 -2
  294. package/modules/data.src.js +14 -14
  295. package/modules/datagrouping.js +2 -2
  296. package/modules/datagrouping.src.js +5 -6
  297. package/modules/debugger.js +2 -2
  298. package/modules/debugger.src.js +3 -3
  299. package/modules/dependency-wheel.js +2 -2
  300. package/modules/dependency-wheel.src.js +7 -6
  301. package/modules/dotplot.js +2 -2
  302. package/modules/dotplot.src.js +3 -3
  303. package/modules/drag-panes.js +2 -2
  304. package/modules/drag-panes.src.js +3 -3
  305. package/modules/draggable-points.js +2 -2
  306. package/modules/draggable-points.src.js +3 -3
  307. package/modules/drilldown.js +2 -2
  308. package/modules/drilldown.src.js +3 -43
  309. package/modules/dumbbell.js +2 -2
  310. package/modules/dumbbell.src.js +5 -5
  311. package/modules/export-data.js +2 -2
  312. package/modules/export-data.src.js +4 -4
  313. package/modules/exporting.js +2 -2
  314. package/modules/exporting.src.js +17 -17
  315. package/modules/flowmap.js +2 -2
  316. package/modules/flowmap.src.js +3 -3
  317. package/modules/full-screen.js +2 -2
  318. package/modules/full-screen.src.js +3 -3
  319. package/modules/funnel.js +2 -2
  320. package/modules/funnel.src.js +3 -3
  321. package/modules/funnel3d.js +2 -2
  322. package/modules/funnel3d.src.js +4 -4
  323. package/modules/gantt.js +2 -2
  324. package/modules/gantt.src.js +155 -67
  325. package/modules/geoheatmap.js +2 -2
  326. package/modules/geoheatmap.src.js +3 -3
  327. package/modules/grid-axis.js +2 -2
  328. package/modules/grid-axis.src.js +4 -4
  329. package/modules/heatmap.js +2 -2
  330. package/modules/heatmap.src.js +14 -9
  331. package/modules/heikinashi.js +2 -2
  332. package/modules/heikinashi.src.js +3 -3
  333. package/modules/histogram-bellcurve.js +2 -2
  334. package/modules/histogram-bellcurve.src.js +5 -5
  335. package/modules/hollowcandlestick.js +2 -2
  336. package/modules/hollowcandlestick.src.js +3 -3
  337. package/modules/item-series.js +2 -2
  338. package/modules/item-series.src.js +4 -4
  339. package/modules/lollipop.js +2 -2
  340. package/modules/lollipop.src.js +3 -3
  341. package/modules/map.d.ts +1 -1
  342. package/modules/map.js +2 -2
  343. package/modules/map.src.d.ts +1 -1
  344. package/modules/map.src.js +36 -52
  345. package/modules/marker-clusters.js +2 -2
  346. package/modules/marker-clusters.src.js +3 -3
  347. package/modules/mouse-wheel-zoom.js +2 -2
  348. package/modules/mouse-wheel-zoom.src.js +3 -3
  349. package/modules/navigator.js +2 -2
  350. package/modules/navigator.src.js +146 -61
  351. package/modules/networkgraph.d.ts +40 -0
  352. package/modules/networkgraph.js +2 -2
  353. package/modules/networkgraph.src.d.ts +40 -0
  354. package/modules/networkgraph.src.js +233 -5
  355. package/modules/no-data-to-display.js +2 -2
  356. package/modules/no-data-to-display.src.js +3 -3
  357. package/modules/offline-exporting.js +2 -2
  358. package/modules/offline-exporting.src.js +5 -5
  359. package/modules/organization.js +2 -2
  360. package/modules/organization.src.js +5 -4
  361. package/modules/overlapping-datalabels.js +2 -2
  362. package/modules/overlapping-datalabels.src.js +3 -3
  363. package/modules/parallel-coordinates.js +2 -2
  364. package/modules/parallel-coordinates.src.js +4 -4
  365. package/modules/pareto.js +2 -2
  366. package/modules/pareto.src.js +3 -3
  367. package/modules/pathfinder.js +2 -2
  368. package/modules/pathfinder.src.js +3 -3
  369. package/modules/pattern-fill.js +2 -2
  370. package/modules/pattern-fill.src.js +3 -3
  371. package/modules/pictorial.js +2 -2
  372. package/modules/pictorial.src.js +3 -3
  373. package/modules/price-indicator.js +2 -2
  374. package/modules/price-indicator.src.js +3 -3
  375. package/modules/pyramid3d.js +2 -2
  376. package/modules/pyramid3d.src.js +4 -4
  377. package/modules/sankey.d.ts +42 -1
  378. package/modules/sankey.js +2 -2
  379. package/modules/sankey.src.d.ts +42 -1
  380. package/modules/sankey.src.js +237 -9
  381. package/modules/series-label.js +2 -2
  382. package/modules/series-label.src.js +3 -3
  383. package/modules/series-on-point.js +2 -2
  384. package/modules/series-on-point.src.js +3 -3
  385. package/modules/solid-gauge.js +2 -2
  386. package/modules/solid-gauge.src.js +4 -4
  387. package/modules/sonification.js +2 -2
  388. package/modules/sonification.src.js +12 -15
  389. package/modules/static-scale.js +2 -2
  390. package/modules/static-scale.src.js +3 -3
  391. package/modules/stock-tools.d.ts +15 -1
  392. package/modules/stock-tools.js +2 -2
  393. package/modules/stock-tools.src.d.ts +15 -1
  394. package/modules/stock-tools.src.js +177 -69
  395. package/modules/stock.js +2 -2
  396. package/modules/stock.src.js +160 -73
  397. package/modules/streamgraph.js +2 -2
  398. package/modules/streamgraph.src.js +3 -3
  399. package/modules/sunburst.d.ts +40 -0
  400. package/modules/sunburst.js +2 -2
  401. package/modules/sunburst.src.d.ts +40 -0
  402. package/modules/sunburst.src.js +271 -58
  403. package/modules/textpath.d.ts +58 -0
  404. package/modules/textpath.js +7 -0
  405. package/modules/textpath.src.d.ts +58 -0
  406. package/modules/textpath.src.js +271 -0
  407. package/modules/tiledwebmap.js +3 -3
  408. package/modules/tiledwebmap.src.js +3 -3
  409. package/modules/tilemap.js +2 -2
  410. package/modules/tilemap.src.js +5 -5
  411. package/modules/timeline.js +2 -2
  412. package/modules/timeline.src.js +3 -3
  413. package/modules/treegraph.d.ts +40 -0
  414. package/modules/treegraph.js +2 -2
  415. package/modules/treegraph.src.d.ts +40 -0
  416. package/modules/treegraph.src.js +254 -8
  417. package/modules/treegrid.js +2 -2
  418. package/modules/treegrid.src.js +4 -4
  419. package/modules/treemap.js +2 -2
  420. package/modules/treemap.src.js +35 -50
  421. package/modules/variable-pie.js +2 -2
  422. package/modules/variable-pie.src.js +5 -5
  423. package/modules/variwide.js +2 -2
  424. package/modules/variwide.src.js +4 -4
  425. package/modules/vector.js +2 -2
  426. package/modules/vector.src.js +4 -4
  427. package/modules/venn.js +2 -2
  428. package/modules/venn.src.js +3 -88
  429. package/modules/windbarb.js +2 -2
  430. package/modules/windbarb.src.js +5 -5
  431. package/modules/wordcloud.js +2 -2
  432. package/modules/wordcloud.src.js +6 -6
  433. package/modules/xrange.js +2 -2
  434. package/modules/xrange.src.js +3 -3
  435. package/options/ad.d.ts +17 -9
  436. package/options/ad.src.d.ts +17 -9
  437. package/options/apo.d.ts +17 -9
  438. package/options/apo.src.d.ts +17 -9
  439. package/options/arearange.d.ts +17 -9
  440. package/options/arearange.src.d.ts +17 -9
  441. package/options/areaspline.d.ts +17 -9
  442. package/options/areaspline.src.d.ts +17 -9
  443. package/options/bar.d.ts +17 -9
  444. package/options/bar.src.d.ts +17 -9
  445. package/options/bb.d.ts +17 -9
  446. package/options/bb.src.d.ts +17 -9
  447. package/options/bubble.d.ts +17 -9
  448. package/options/bubble.src.d.ts +17 -9
  449. package/options/candlestick.d.ts +17 -9
  450. package/options/candlestick.src.d.ts +17 -9
  451. package/options/cci.d.ts +17 -9
  452. package/options/cci.src.d.ts +17 -9
  453. package/options/cmf.d.ts +17 -9
  454. package/options/cmf.src.d.ts +17 -9
  455. package/options/column.d.ts +17 -9
  456. package/options/column.src.d.ts +17 -9
  457. package/options/columnpyramid.d.ts +17 -9
  458. package/options/columnpyramid.src.d.ts +17 -9
  459. package/options/columnrange.d.ts +17 -9
  460. package/options/columnrange.src.d.ts +17 -9
  461. package/options/cylinder.d.ts +17 -9
  462. package/options/cylinder.src.d.ts +17 -9
  463. package/options/dema.d.ts +17 -9
  464. package/options/dema.src.d.ts +17 -9
  465. package/options/dependencywheel.d.ts +17 -9
  466. package/options/dependencywheel.src.d.ts +17 -9
  467. package/options/disparityindex.d.ts +17 -9
  468. package/options/disparityindex.src.d.ts +17 -9
  469. package/options/dpo.d.ts +17 -9
  470. package/options/dpo.src.d.ts +17 -9
  471. package/options/dumbbell.d.ts +17 -9
  472. package/options/dumbbell.src.d.ts +17 -9
  473. package/options/ema.d.ts +17 -9
  474. package/options/ema.src.d.ts +17 -9
  475. package/options/funnel.d.ts +17 -9
  476. package/options/funnel.src.d.ts +17 -9
  477. package/options/gantt.d.ts +16 -8
  478. package/options/gantt.src.d.ts +16 -8
  479. package/options/klinger.d.ts +17 -9
  480. package/options/klinger.src.d.ts +17 -9
  481. package/options/linearregression.d.ts +17 -9
  482. package/options/linearregression.src.d.ts +17 -9
  483. package/options/lollipop.d.ts +17 -9
  484. package/options/lollipop.src.d.ts +17 -9
  485. package/options/macd.d.ts +17 -9
  486. package/options/macd.src.d.ts +17 -9
  487. package/options/momentum.d.ts +17 -9
  488. package/options/momentum.src.d.ts +17 -9
  489. package/options/ohlc.d.ts +17 -9
  490. package/options/ohlc.src.d.ts +17 -9
  491. package/options/organization.d.ts +17 -9
  492. package/options/organization.src.d.ts +17 -9
  493. package/options/pareto.d.ts +16 -8
  494. package/options/pareto.src.d.ts +16 -8
  495. package/options/pc.d.ts +17 -9
  496. package/options/pc.src.d.ts +17 -9
  497. package/options/polygon.d.ts +17 -9
  498. package/options/polygon.src.d.ts +17 -9
  499. package/options/ppo.d.ts +17 -9
  500. package/options/ppo.src.d.ts +17 -9
  501. package/options/psar.d.ts +17 -9
  502. package/options/psar.src.d.ts +17 -9
  503. package/options/pyramid.d.ts +17 -9
  504. package/options/pyramid.src.d.ts +17 -9
  505. package/options/roc.d.ts +17 -9
  506. package/options/roc.src.d.ts +17 -9
  507. package/options/sankey.d.ts +17 -9
  508. package/options/sankey.src.d.ts +17 -9
  509. package/options/scatter.d.ts +17 -9
  510. package/options/scatter.src.d.ts +17 -9
  511. package/options/series.d.ts +17 -9
  512. package/options/series.src.d.ts +17 -9
  513. package/options/sma.d.ts +17 -9
  514. package/options/sma.src.d.ts +17 -9
  515. package/options/spline.d.ts +17 -9
  516. package/options/spline.src.d.ts +17 -9
  517. package/options/stochastic.d.ts +17 -9
  518. package/options/stochastic.src.d.ts +17 -9
  519. package/options/supertrend.d.ts +17 -9
  520. package/options/supertrend.src.d.ts +17 -9
  521. package/options/tilemap.d.ts +17 -9
  522. package/options/tilemap.src.d.ts +17 -9
  523. package/options/treegraph.d.ts +24 -9
  524. package/options/treegraph.src.d.ts +24 -9
  525. package/options/treemap.d.ts +23 -8
  526. package/options/treemap.src.d.ts +23 -8
  527. package/options/trendline.d.ts +17 -9
  528. package/options/trendline.src.d.ts +17 -9
  529. package/options/variwide.d.ts +17 -9
  530. package/options/variwide.src.d.ts +17 -9
  531. package/options/vbp.d.ts +17 -9
  532. package/options/vbp.src.d.ts +17 -9
  533. package/options/vector.d.ts +17 -9
  534. package/options/vector.src.d.ts +17 -9
  535. package/options/waterfall.d.ts +17 -9
  536. package/options/waterfall.src.d.ts +17 -9
  537. package/options/williamsr.d.ts +17 -9
  538. package/options/williamsr.src.d.ts +17 -9
  539. package/options/xrange.d.ts +17 -9
  540. package/options/xrange.src.d.ts +17 -9
  541. package/package.json +1 -1
  542. package/standalone-navigator.js +2 -2
  543. package/standalone-navigator.src.js +3380 -3049
  544. package/themes/avocado.js +2 -2
  545. package/themes/avocado.src.js +3 -3
  546. package/themes/brand-dark.js +2 -2
  547. package/themes/brand-dark.src.js +3 -3
  548. package/themes/brand-light.js +2 -2
  549. package/themes/brand-light.src.js +3 -3
  550. package/themes/dark-blue.js +2 -2
  551. package/themes/dark-blue.src.js +3 -3
  552. package/themes/dark-green.js +2 -2
  553. package/themes/dark-green.src.js +3 -3
  554. package/themes/dark-unica.js +2 -2
  555. package/themes/dark-unica.src.js +3 -3
  556. package/themes/gray.js +2 -2
  557. package/themes/gray.src.js +3 -3
  558. package/themes/grid-light.js +2 -2
  559. package/themes/grid-light.src.js +3 -3
  560. package/themes/grid.js +2 -2
  561. package/themes/grid.src.js +3 -3
  562. package/themes/high-contrast-dark.js +2 -2
  563. package/themes/high-contrast-dark.src.js +3 -3
  564. package/themes/high-contrast-light.js +2 -2
  565. package/themes/high-contrast-light.src.js +3 -3
  566. package/themes/sand-signika.js +2 -2
  567. package/themes/sand-signika.src.js +3 -3
  568. package/themes/skies.js +2 -2
  569. package/themes/skies.src.js +3 -3
  570. package/themes/sunset.js +2 -2
  571. package/themes/sunset.src.js +3 -3
@@ -17,6 +17,8 @@ const { isTouchDevice } = H;
17
17
  import NavigatorAxisAdditions from '../../Core/Axis/NavigatorAxisComposition.js';
18
18
  import NavigatorComposition from './NavigatorComposition.js';
19
19
  import Scrollbar from '../Scrollbar/Scrollbar.js';
20
+ import SVGRenderer from '../../Core/Renderer/SVG/SVGRenderer.js';
21
+ const { prototype: { symbols } } = SVGRenderer;
20
22
  import U from '../../Core/Utilities.js';
21
23
  const { addEvent, clamp, correctFloat, defined, destroyObjectProperties, erase, extend, find, fireEvent, isArray, isNumber, merge, pick, removeEvent, splat } = U;
22
24
  /* *
@@ -67,6 +69,7 @@ class Navigator {
67
69
  *
68
70
  * */
69
71
  constructor(chart) {
72
+ this.isDirty = false;
70
73
  this.scrollbarHeight = 0;
71
74
  this.init(chart);
72
75
  }
@@ -137,9 +140,9 @@ class Navigator {
137
140
  ],
138
141
  // Top right of zoomed range
139
142
  ['L', left + height, verticalMin],
140
- ['L', left, verticalMin],
141
- ['M', left, zoomedMax],
142
- ['L', left + height, zoomedMax],
143
+ ['L', left, verticalMin], // Top left of z.r.
144
+ ['M', left, zoomedMax], // Bottom left of z.r.
145
+ ['L', left + height, zoomedMax], // Bottom right of z.r.
143
146
  [
144
147
  'L',
145
148
  left + height,
@@ -177,7 +180,7 @@ class Navigator {
177
180
  [
178
181
  'L',
179
182
  left + navigatorSize + scrollButtonSize * 2,
180
- navigatorTop + halfOutline
183
+ lineTop
181
184
  ]
182
185
  ];
183
186
  if (maskInside) {
@@ -245,7 +248,7 @@ class Navigator {
245
248
  });
246
249
  }
247
250
  /**
248
- * Generate DOM elements for a navigator:
251
+ * Generate and update DOM elements for a navigator:
249
252
  *
250
253
  * - main navigator group
251
254
  *
@@ -263,39 +266,40 @@ class Navigator {
263
266
  cursor: inverted ? 'ns-resize' : 'ew-resize'
264
267
  },
265
268
  // Create the main navigator group
266
- navigatorGroup = navigator.navigatorGroup = renderer
267
- .g('navigator')
268
- .attr({
269
- zIndex: 8,
270
- visibility: 'hidden'
271
- })
272
- .add();
269
+ navigatorGroup = navigator.navigatorGroup ??
270
+ (navigator.navigatorGroup = renderer
271
+ .g('navigator')
272
+ .attr({
273
+ zIndex: 8,
274
+ visibility: 'hidden'
275
+ })
276
+ .add());
273
277
  // Create masks, each mask will get events and fill:
274
278
  [
275
279
  !maskInside,
276
280
  maskInside,
277
281
  !maskInside
278
282
  ].forEach((hasMask, index) => {
279
- const shade = renderer.rect()
280
- .addClass('highcharts-navigator-mask' +
281
- (index === 1 ? '-inside' : '-outside'))
282
- .add(navigatorGroup);
283
+ const shade = navigator.shades[index] ??
284
+ (navigator.shades[index] = renderer.rect()
285
+ .addClass('highcharts-navigator-mask' +
286
+ (index === 1 ? '-inside' : '-outside'))
287
+ .add(navigatorGroup));
283
288
  if (!chart.styledMode) {
284
289
  shade.attr({
285
- fill: hasMask ?
286
- navigatorOptions.maskFill :
287
- 'rgba(0,0,0,0)'
290
+ fill: hasMask ? navigatorOptions.maskFill : 'rgba(0,0,0,0)'
288
291
  });
289
292
  if (index === 1) {
290
293
  shade.css(mouseCursor);
291
294
  }
292
295
  }
293
- navigator.shades[index] = shade;
294
296
  });
295
297
  // Create the outline:
296
- navigator.outline = renderer.path()
297
- .addClass('highcharts-navigator-outline')
298
- .add(navigatorGroup);
298
+ if (!navigator.outline) {
299
+ navigator.outline = renderer.path()
300
+ .addClass('highcharts-navigator-outline')
301
+ .add(navigatorGroup);
302
+ }
299
303
  if (!chart.styledMode) {
300
304
  navigator.outline.attr({
301
305
  'stroke-width': navigatorOptions.outlineWidth,
@@ -303,10 +307,27 @@ class Navigator {
303
307
  });
304
308
  }
305
309
  // Create the handlers:
306
- if (navigatorOptions.handles && navigatorOptions.handles.enabled) {
310
+ if (navigatorOptions.handles?.enabled) {
307
311
  const handlesOptions = navigatorOptions.handles, { height, width } = handlesOptions;
308
312
  [0, 1].forEach((index) => {
309
- navigator.handles[index] = renderer.symbol(handlesOptions.symbols[index], -width / 2 - 1, 0, width, height, handlesOptions);
313
+ const symbolName = handlesOptions.symbols[index];
314
+ if (!navigator.handles[index]) {
315
+ navigator.handles[index] = renderer.symbol(symbolName, -width / 2 - 1, 0, width, height, handlesOptions);
316
+ // Z index is 6 for right handle, 7 for left. Can't be 10,
317
+ // because of the tooltip in inverted chart (#2908).
318
+ navigator.handles[index].attr({ zIndex: 7 - index })
319
+ .addClass('highcharts-navigator-handle ' +
320
+ 'highcharts-navigator-handle-' +
321
+ ['left', 'right'][index]).add(navigatorGroup);
322
+ // If the navigator symbol changed, update its path and name
323
+ }
324
+ else if (symbolName !== navigator.handles[index].symbolName) {
325
+ const symbolFn = symbols[symbolName], path = symbolFn.call(symbols, -width / 2 - 1, 0, width, height);
326
+ navigator.handles[index].attr({
327
+ d: path
328
+ });
329
+ navigator.handles[index].symbolName = symbolName;
330
+ }
310
331
  if (chart.inverted) {
311
332
  navigator.handles[index].attr({
312
333
  rotation: 90,
@@ -314,18 +335,16 @@ class Navigator {
314
335
  rotationOriginY: (height + width) / 2
315
336
  });
316
337
  }
317
- // Z index is 6 for right handle, 7 for left. Can't be 10,
318
- // because of the tooltip in inverted chart (#2908).
319
- navigator.handles[index].attr({ zIndex: 7 - index })
320
- .addClass('highcharts-navigator-handle ' +
321
- 'highcharts-navigator-handle-' +
322
- ['left', 'right'][index]).add(navigatorGroup);
323
338
  if (!chart.styledMode) {
324
339
  navigator.handles[index]
325
340
  .attr({
326
341
  fill: handlesOptions.backgroundColor,
327
342
  stroke: handlesOptions.borderColor,
328
- 'stroke-width': handlesOptions.lineWidth
343
+ 'stroke-width': handlesOptions.lineWidth,
344
+ width: handlesOptions.width,
345
+ height: handlesOptions.height,
346
+ x: -width / 2 - 1,
347
+ y: 0
329
348
  })
330
349
  .css(mouseCursor);
331
350
  }
@@ -341,18 +360,53 @@ class Navigator {
341
360
  * @param {Highcharts.NavigatorOptions} options
342
361
  * Options to merge in when updating navigator
343
362
  */
344
- update(options) {
345
- // Remove references to old navigator series in base series
346
- (this.series || []).forEach((series) => {
347
- if (series.baseSeries) {
348
- delete series.baseSeries.navigatorSeries;
363
+ update(options, redraw = false) {
364
+ const chart = this.chart, invertedUpdate = chart.options.chart.inverted !==
365
+ chart.scrollbar?.options.vertical;
366
+ merge(true, chart.options.navigator, options);
367
+ this.navigatorOptions = chart.options.navigator || {};
368
+ this.setOpposite();
369
+ // Revert to destroy/init for navigator/scrollbar enabled toggle
370
+ if (defined(options.enabled) || invertedUpdate) {
371
+ this.destroy();
372
+ this.navigatorEnabled = options.enabled || this.navigatorEnabled;
373
+ return this.init(chart);
374
+ }
375
+ if (this.navigatorEnabled) {
376
+ this.isDirty = true;
377
+ if (options.adaptToUpdatedData === false) {
378
+ this.baseSeries.forEach((series) => {
379
+ removeEvent(series, 'updatedData', this.updatedDataHandler);
380
+ }, this);
349
381
  }
350
- });
351
- // Destroy and rebuild navigator
352
- this.destroy();
353
- const chartOptions = this.chart.options;
354
- merge(true, chartOptions.navigator, options);
355
- this.init(this.chart);
382
+ if (options.adaptToUpdatedData) {
383
+ this.baseSeries.forEach((series) => {
384
+ series.eventsToUnbind.push(addEvent(series, 'updatedData', this.updatedDataHandler));
385
+ }, this);
386
+ }
387
+ // Update navigator series
388
+ if (options.series || options.baseSeries) {
389
+ this.setBaseSeries(void 0, false);
390
+ }
391
+ // Update navigator axis
392
+ if (options.height || options.xAxis || options.yAxis) {
393
+ this.height = options.height ?? this.height;
394
+ const offsets = this.getXAxisOffsets();
395
+ this.xAxis.update({
396
+ ...options.xAxis,
397
+ offsets,
398
+ [chart.inverted ? 'width' : 'height']: this.height,
399
+ [chart.inverted ? 'height' : 'width']: void 0
400
+ }, false);
401
+ this.yAxis.update({
402
+ ...options.yAxis,
403
+ [chart.inverted ? 'width' : 'height']: this.height
404
+ }, false);
405
+ }
406
+ }
407
+ if (redraw) {
408
+ chart.redraw();
409
+ }
356
410
  }
357
411
  /**
358
412
  * Render the navigator
@@ -375,6 +429,10 @@ class Navigator {
375
429
  if (this.hasDragged && !defined(pxMin)) {
376
430
  return;
377
431
  }
432
+ if (this.isDirty) {
433
+ // Update DOM navigator elements
434
+ this.renderElements();
435
+ }
378
436
  min = correctFloat(min - pointRange / 2);
379
437
  max = correctFloat(max + pointRange / 2);
380
438
  // Don't render the navigator until we have data (#486, #4202, #5172).
@@ -475,6 +533,7 @@ class Navigator {
475
533
  navigator.zoomedMin / (navigatorSize || 1), navigator.zoomedMax / (navigatorSize || 1));
476
534
  }
477
535
  navigator.rendered = true;
536
+ this.isDirty = false;
478
537
  fireEvent(this, 'afterRender');
479
538
  }
480
539
  /**
@@ -809,6 +868,16 @@ class Navigator {
809
868
  }
810
869
  }
811
870
  }
871
+ /**
872
+ * Calculate the navigator xAxis offsets
873
+ *
874
+ * @private
875
+ */
876
+ getXAxisOffsets() {
877
+ return (this.chart.inverted ?
878
+ [this.scrollButtonSize, 0, -this.scrollButtonSize, 0] :
879
+ [0, -this.scrollButtonSize, 0, this.scrollButtonSize]);
880
+ }
812
881
  /**
813
882
  * Initialize the Navigator object
814
883
  *
@@ -828,11 +897,12 @@ class Navigator {
828
897
  this.navigatorEnabled = navigatorEnabled;
829
898
  this.navigatorOptions = navigatorOptions;
830
899
  this.scrollbarOptions = scrollbarOptions;
831
- this.opposite = pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262
900
+ this.setOpposite();
832
901
  const navigator = this, baseSeries = navigator.baseSeries, xAxisIndex = chart.xAxis.length, yAxisIndex = chart.yAxis.length, baseXaxis = baseSeries && baseSeries[0] && baseSeries[0].xAxis ||
833
902
  chart.xAxis[0] || { options: {} };
834
903
  chart.isDirtyBox = true;
835
904
  if (navigator.navigatorEnabled) {
905
+ const offsets = this.getXAxisOffsets();
836
906
  // An x axis is required for scrollbar also
837
907
  navigator.xAxis = new Axis(chart, merge({
838
908
  // Inherit base xAxis' break, ordinal options and overscroll
@@ -844,18 +914,21 @@ class Navigator {
844
914
  index: xAxisIndex,
845
915
  isInternal: true,
846
916
  offset: 0,
847
- keepOrdinalPadding: true,
917
+ keepOrdinalPadding: true, // #2436
848
918
  startOnTick: false,
849
919
  endOnTick: false,
850
- minPadding: 0,
851
- maxPadding: 0,
920
+ // Inherit base xAxis' padding when ordinal is false (#16915).
921
+ minPadding: baseXaxis.options.ordinal ? 0 :
922
+ baseXaxis.options.minPadding,
923
+ maxPadding: baseXaxis.options.ordinal ? 0 :
924
+ baseXaxis.options.maxPadding,
852
925
  zoomEnabled: false
853
926
  }, chart.inverted ? {
854
- offsets: [scrollButtonSize, 0, -scrollButtonSize, 0],
927
+ offsets,
855
928
  width: height
856
929
  } : {
857
- offsets: [0, -scrollButtonSize, 0, scrollButtonSize],
858
- height: height
930
+ offsets,
931
+ height
859
932
  }), 'xAxis');
860
933
  navigator.yAxis = new Axis(chart, merge(navigatorOptions.yAxis, {
861
934
  alignTicks: false,
@@ -863,7 +936,7 @@ class Navigator {
863
936
  index: yAxisIndex,
864
937
  isInternal: true,
865
938
  reversed: pick((navigatorOptions.yAxis &&
866
- navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false),
939
+ navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false), // #14060
867
940
  zoomEnabled: false
868
941
  }, chart.inverted ? {
869
942
  width: height
@@ -938,6 +1011,15 @@ class Navigator {
938
1011
  // Add redraw events
939
1012
  navigator.addChartEvents();
940
1013
  }
1014
+ /**
1015
+ * Set the opposite property on navigator
1016
+ *
1017
+ * @private
1018
+ */
1019
+ setOpposite() {
1020
+ const navigatorOptions = this.navigatorOptions, navigatorEnabled = this.navigatorEnabled, chart = this.chart;
1021
+ this.opposite = pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262
1022
+ }
941
1023
  /**
942
1024
  * Get the union data extremes of the chart - the outer data extremes of the
943
1025
  * base X axis and the navigator axis.
@@ -1005,14 +1087,14 @@ class Navigator {
1005
1087
  updateNavigatorSeries(addEvents, redraw) {
1006
1088
  const navigator = this, chart = navigator.chart, baseSeries = navigator.baseSeries, navSeriesMixin = {
1007
1089
  enableMouseTracking: false,
1008
- index: null,
1009
- linkedTo: null,
1010
- group: 'nav',
1090
+ index: null, // #6162
1091
+ linkedTo: null, // #6734
1092
+ group: 'nav', // For columns
1011
1093
  padXAxis: false,
1012
1094
  xAxis: this.navigatorOptions.xAxis?.id,
1013
1095
  yAxis: this.navigatorOptions.yAxis?.id,
1014
1096
  showInLegend: false,
1015
- stacking: void 0,
1097
+ stacking: void 0, // #4823
1016
1098
  isInternal: true,
1017
1099
  states: {
1018
1100
  inactive: {
@@ -1167,6 +1249,9 @@ class Navigator {
1167
1249
  }
1168
1250
  // Handle series removal
1169
1251
  base.eventsToUnbind.push(addEvent(base, 'remove', function () {
1252
+ if (baseSeries) {
1253
+ erase(baseSeries, base); // #21043
1254
+ }
1170
1255
  if (this.navigatorSeries) {
1171
1256
  erase(navigator.series, this.navigatorSeries);
1172
1257
  if (defined(this.navigatorSeries.options)) {
@@ -1383,6 +1468,7 @@ class Navigator {
1383
1468
  [this.handles].forEach((coll) => {
1384
1469
  destroyObjectProperties(coll);
1385
1470
  });
1471
+ this.navigatorEnabled = false;
1386
1472
  }
1387
1473
  }
1388
1474
  /* *
@@ -348,7 +348,7 @@ const NavigatorDefaults = {
348
348
  *
349
349
  * @type {Highcharts.ColorString|null}
350
350
  */
351
- lineColor: null,
351
+ lineColor: null, // #4602
352
352
  marker: {
353
353
  enabled: false
354
354
  },
@@ -682,7 +682,7 @@ class RangeSelector {
682
682
  position: 'absolute',
683
683
  border: 0,
684
684
  boxShadow: '0 0 15px rgba(0,0,0,0.3)',
685
- width: '1px',
685
+ width: '1px', // Chrome needs a pixel to see it
686
686
  height: '1px',
687
687
  padding: 0,
688
688
  textAlign: 'center',
@@ -326,7 +326,7 @@ const rangeSelector = {
326
326
  * @type {number|undefined}
327
327
  * @since 2.1.9
328
328
  */
329
- height: void 0,
329
+ height: void 0, // Reserved space for buttons and input
330
330
  /**
331
331
  * The border color of the date input boxes.
332
332
  *
@@ -188,7 +188,7 @@ const ScrollbarDefaults = {
188
188
  *
189
189
  * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
190
190
  */
191
- trackBackgroundColor: 'rgba(255, 255, 255, 0.001)',
191
+ trackBackgroundColor: 'rgba(255, 255, 255, 0.001)', // #18922
192
192
  /**
193
193
  * The color of the border of the scrollbar track.
194
194
  *
@@ -11,7 +11,10 @@
11
11
  * */
12
12
  'use strict';
13
13
  import U from '../../Core/Utilities.js';
14
- const { addEvent, createElement, css, fireEvent, getStyle, isArray, merge, pick } = U;
14
+ import AST from '../../Core/Renderer/HTML/AST.js';
15
+ import StockToolsUtilities from './StockToolsUtilities.js';
16
+ const { addEvent, createElement, css, defined, fireEvent, getStyle, isArray, merge, pick } = U;
17
+ const { shallowArraysEqual } = StockToolsUtilities;
15
18
  /* *
16
19
  *
17
20
  * Classes
@@ -39,6 +42,8 @@ class Toolbar {
39
42
  *
40
43
  * */
41
44
  constructor(options, langOptions, chart) {
45
+ this.width = 0;
46
+ this.isDirty = false;
42
47
  this.chart = chart;
43
48
  this.options = options;
44
49
  this.lang = langOptions;
@@ -46,14 +51,15 @@ class Toolbar {
46
51
  this.iconsURL = this.getIconsURL();
47
52
  this.guiEnabled = options.enabled;
48
53
  this.visible = pick(options.visible, true);
49
- this.placed = pick(options.placed, false);
54
+ this.guiClassName = options.className;
55
+ this.toolbarClassName = options.toolbarClassName;
50
56
  // General events collection which should be removed upon
51
57
  // destroy/update:
52
58
  this.eventsToUnbind = [];
53
59
  if (this.guiEnabled) {
54
- this.createHTML();
55
- this.init();
56
- this.showHideNavigatorion();
60
+ this.createContainer();
61
+ this.createButtons();
62
+ this.showHideNavigation();
57
63
  }
58
64
  fireEvent(this, 'afterInit');
59
65
  }
@@ -63,12 +69,12 @@ class Toolbar {
63
69
  *
64
70
  * */
65
71
  /**
66
- * Initialize the toolbar. Create buttons and submenu for each option
67
- * defined in `stockTools.gui`.
72
+ * Create and set up stockTools buttons with their events and submenus.
68
73
  * @private
69
74
  */
70
- init() {
75
+ createButtons() {
71
76
  const lang = this.lang, guiOptions = this.options, toolbar = this.toolbar, buttons = guiOptions.buttons, defs = guiOptions.definitions, allButtons = toolbar.childNodes;
77
+ this.buttonList = buttons;
72
78
  // Create buttons
73
79
  buttons.forEach((btnName) => {
74
80
  const button = this.addButton(toolbar, defs, btnName, lang);
@@ -292,11 +298,11 @@ class Toolbar {
292
298
  }));
293
299
  }
294
300
  /*
295
- * Create stockTools HTML main elements.
301
+ * Create the stockTools container and sets up event bindings.
296
302
  *
297
303
  */
298
- createHTML() {
299
- const chart = this.chart, guiOptions = this.options, container = chart.container, navigation = chart.options.navigation, bindingsClassName = navigation && navigation.bindingsClassName;
304
+ createContainer() {
305
+ const chart = this.chart, guiOptions = this.options, container = chart.container, navigation = chart.options.navigation, bindingsClassName = navigation?.bindingsClassName, self = this;
300
306
  let listWrapper, toolbar;
301
307
  // Create main container
302
308
  const wrapper = this.wrapper = createElement('div', {
@@ -304,6 +310,17 @@ class Toolbar {
304
310
  guiOptions.className + ' ' + bindingsClassName
305
311
  });
306
312
  container.appendChild(wrapper);
313
+ this.showHideBtn = createElement('div', {
314
+ className: 'highcharts-toggle-toolbar highcharts-arrow-left'
315
+ }, void 0, wrapper);
316
+ // Toggle menu
317
+ this.eventsToUnbind.push(addEvent(this.showHideBtn, 'click', () => {
318
+ this.update({
319
+ gui: {
320
+ visible: !self.visible
321
+ }
322
+ });
323
+ }));
307
324
  // Mimic event behaviour of being outside chart.container
308
325
  [
309
326
  'mousedown',
@@ -333,7 +350,7 @@ class Toolbar {
333
350
  * Function called in redraw verifies if the navigation should be visible.
334
351
  * @private
335
352
  */
336
- showHideNavigatorion() {
353
+ showHideNavigation() {
337
354
  // Arrows
338
355
  // 50px space for arrows
339
356
  if (this.visible &&
@@ -352,42 +369,31 @@ class Toolbar {
352
369
  * @private
353
370
  */
354
371
  showHideToolbar() {
355
- const chart = this.chart, wrapper = this.wrapper, toolbar = this.listWrapper, submenu = this.submenu,
372
+ const wrapper = this.wrapper, toolbar = this.listWrapper, submenu = this.submenu,
356
373
  // Show hide toolbar
357
- showhideBtn = this.showhideBtn = createElement('div', {
358
- className: 'highcharts-toggle-toolbar highcharts-arrow-left'
359
- }, void 0, wrapper);
374
+ showHideBtn = this.showHideBtn;
360
375
  let visible = this.visible;
361
- showhideBtn.style.backgroundImage =
376
+ showHideBtn.style.backgroundImage =
362
377
  'url(' + this.iconsURL + 'arrow-right.svg)';
363
378
  if (!visible) {
364
379
  // Hide
365
380
  if (submenu) {
366
381
  submenu.style.display = 'none';
367
382
  }
368
- showhideBtn.style.left = '0px';
383
+ showHideBtn.style.left = '0px';
369
384
  visible = this.visible = false;
370
385
  toolbar.classList.add('highcharts-hide');
371
- showhideBtn.classList.toggle('highcharts-arrow-right');
372
- wrapper.style.height = showhideBtn.offsetHeight + 'px';
386
+ showHideBtn.classList.add('highcharts-arrow-right');
387
+ wrapper.style.height = showHideBtn.offsetHeight + 'px';
373
388
  }
374
389
  else {
375
390
  wrapper.style.height = '100%';
376
- showhideBtn.style.top = getStyle(toolbar, 'padding-top') + 'px';
377
- showhideBtn.style.left = (wrapper.offsetWidth +
391
+ toolbar.classList.remove('highcharts-hide');
392
+ showHideBtn.classList.remove('highcharts-arrow-right');
393
+ showHideBtn.style.top = getStyle(toolbar, 'padding-top') + 'px';
394
+ showHideBtn.style.left = (wrapper.offsetWidth +
378
395
  getStyle(toolbar, 'padding-left')) + 'px';
379
396
  }
380
- // Toggle menu
381
- this.eventsToUnbind.push(addEvent(showhideBtn, 'click', () => {
382
- chart.update({
383
- stockTools: {
384
- gui: {
385
- visible: !visible,
386
- placed: true
387
- }
388
- }
389
- });
390
- }));
391
397
  }
392
398
  /*
393
399
  * In main GUI button, replace icon and class with submenu button's
@@ -451,9 +457,10 @@ class Toolbar {
451
457
  * @private
452
458
  */
453
459
  update(options, redraw) {
460
+ this.isDirty = !!options.gui.definitions;
454
461
  merge(true, this.chart.options.stockTools, options);
455
- this.destroy();
456
- this.chart.setStockTools(options);
462
+ merge(true, this.options, options.gui);
463
+ this.visible = pick(this.options.visible && this.options.enabled, true);
457
464
  // If Stock Tools are updated, then bindings should be updated too:
458
465
  if (this.chart.navigationBindings) {
459
466
  this.chart.navigationBindings.update();
@@ -476,11 +483,82 @@ class Toolbar {
476
483
  }
477
484
  }
478
485
  /**
479
- * Redraw, GUI requires to verify if the navigation should be visible.
486
+ * Redraws the toolbar based on the current state of the options.
480
487
  * @private
481
488
  */
482
489
  redraw() {
483
- this.showHideNavigatorion();
490
+ if (this.options.enabled !== this.guiEnabled) {
491
+ this.handleGuiEnabledChange();
492
+ }
493
+ else {
494
+ if (!this.guiEnabled) {
495
+ return;
496
+ }
497
+ this.updateClassNames();
498
+ this.updateButtons();
499
+ this.updateVisibility();
500
+ this.showHideNavigation();
501
+ this.showHideToolbar();
502
+ }
503
+ }
504
+ /**
505
+ * Hadles the change of the `enabled` option.
506
+ * @private
507
+ */
508
+ handleGuiEnabledChange() {
509
+ if (this.options.enabled === false) {
510
+ this.destroy();
511
+ this.visible = false;
512
+ }
513
+ if (this.options.enabled === true) {
514
+ this.createContainer();
515
+ this.createButtons();
516
+ }
517
+ this.guiEnabled = this.options.enabled;
518
+ }
519
+ /**
520
+ * Updates the class names of the GUI and toolbar elements.
521
+ * @private
522
+ */
523
+ updateClassNames() {
524
+ if (this.options.className !== this.guiClassName) {
525
+ if (this.guiClassName) {
526
+ this.wrapper.classList.remove(this.guiClassName);
527
+ }
528
+ if (this.options.className) {
529
+ this.wrapper.classList.add(this.options.className);
530
+ }
531
+ this.guiClassName = this.options.className;
532
+ }
533
+ if (this.options.toolbarClassName !== this.toolbarClassName) {
534
+ if (this.toolbarClassName) {
535
+ this.toolbar.classList.remove(this.toolbarClassName);
536
+ }
537
+ if (this.options.toolbarClassName) {
538
+ this.toolbar.classList.add(this.options.toolbarClassName);
539
+ }
540
+ this.toolbarClassName = this.options.toolbarClassName;
541
+ }
542
+ }
543
+ /**
544
+ * Updates the buttons in the toolbar if the button options have changed.
545
+ * @private
546
+ */
547
+ updateButtons() {
548
+ if (!shallowArraysEqual(this.options.buttons, this.buttonList) ||
549
+ this.isDirty) {
550
+ this.toolbar.innerHTML = AST.emptyHTML;
551
+ this.createButtons();
552
+ }
553
+ }
554
+ /**
555
+ * Updates visibility based on current options.
556
+ * @private
557
+ */
558
+ updateVisibility() {
559
+ if (defined(this.options.visible)) {
560
+ this.visible = this.options.visible;
561
+ }
484
562
  }
485
563
  /**
486
564
  * @private
@@ -1176,7 +1176,13 @@ const stockTools = {
1176
1176
  */
1177
1177
  symbol: 'save-chart.svg'
1178
1178
  }
1179
- }
1179
+ },
1180
+ /**
1181
+ * Whether the stock tools toolbar is visible.
1182
+ *
1183
+ * @since 11.4.4
1184
+ */
1185
+ visible: true
1180
1186
  }
1181
1187
  };
1182
1188
  /* *