highcharts 9.3.3 → 10.0.0

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 (670) hide show
  1. package/bower.json +1 -1
  2. package/css/highcharts.css +19 -2
  3. package/css/highcharts.scss +17 -2
  4. package/css/themes/dark-unica.css +19 -2
  5. package/css/themes/grid-light.css +19 -2
  6. package/css/themes/sand-signika.css +19 -2
  7. package/es-modules/Accessibility/Accessibility.js +1 -1
  8. package/es-modules/Accessibility/Components/LegendComponent.js +31 -23
  9. package/es-modules/Accessibility/Components/MenuComponent.js +4 -5
  10. package/es-modules/Accessibility/Components/RangeSelectorComponent.js +2 -2
  11. package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +7 -6
  12. package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +1 -1
  13. package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +0 -1
  14. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +3 -3
  15. package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +61 -29
  16. package/es-modules/Accessibility/Components/ZoomComponent.js +13 -10
  17. package/es-modules/Accessibility/HighContrastMode.js +2 -2
  18. package/es-modules/Accessibility/KeyboardNavigation.js +113 -98
  19. package/es-modules/Accessibility/ProxyElement.js +14 -6
  20. package/es-modules/Accessibility/ProxyProvider.js +10 -2
  21. package/es-modules/Core/Axis/Axis.js +150 -46
  22. package/es-modules/Core/Axis/Color/ColorAxis.js +22 -5
  23. package/es-modules/Core/Axis/GridAxis.js +10 -9
  24. package/es-modules/Core/Axis/TreeGridTick.js +11 -0
  25. package/es-modules/Core/Chart/Chart3D.js +1 -11
  26. package/es-modules/Core/Chart/ChartDefaults.js +32 -11
  27. package/es-modules/Core/Chart/MapChart.js +1 -6
  28. package/es-modules/Core/DefaultOptions.js +2 -0
  29. package/es-modules/Core/Geometry/PolygonClip.js +84 -0
  30. package/es-modules/Core/Globals.js +4 -18
  31. package/es-modules/Core/HttpUtilities.js +13 -8
  32. package/es-modules/Core/Legend/Legend.js +10 -8
  33. package/es-modules/Core/Navigator.js +9 -6
  34. package/es-modules/Core/Pointer.js +15 -11
  35. package/es-modules/Core/Renderer/HTML/AST.js +62 -5
  36. package/es-modules/Core/Renderer/SVG/SVGElement.js +25 -41
  37. package/es-modules/Core/Renderer/SVG/SVGElement3D.js +17 -5
  38. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +17 -17
  39. package/es-modules/Core/Renderer/SVG/TextBuilder.js +12 -10
  40. package/es-modules/Core/Series/DataLabel.js +11 -3
  41. package/es-modules/Core/Series/Point.js +2 -2
  42. package/es-modules/Core/Series/Series.js +33 -15
  43. package/es-modules/Core/Series/SeriesDefaults.js +4 -1
  44. package/es-modules/Core/Tooltip.js +14 -31
  45. package/es-modules/Core/Utilities.js +28 -28
  46. package/es-modules/Extensions/Annotations/Annotations.js +7 -0
  47. package/es-modules/Extensions/Annotations/MockPoint.js +1 -1
  48. package/es-modules/Extensions/Annotations/NavigationBindings.js +1 -1
  49. package/es-modules/Extensions/Annotations/Popup.js +1 -1
  50. package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +5 -3
  51. package/es-modules/Extensions/Boost/BoostInit.js +6 -1
  52. package/es-modules/Extensions/Boost/BoostOptions.js +26 -0
  53. package/es-modules/Extensions/Boost/Boostables.js +1 -0
  54. package/es-modules/Extensions/Boost/WGLRenderer.js +48 -37
  55. package/es-modules/Extensions/Boost/WGLShader.js +4 -3
  56. package/es-modules/Extensions/Breadcrumbs.js +874 -0
  57. package/es-modules/Extensions/Data.js +26 -14
  58. package/es-modules/Extensions/DataGrouping.js +5 -2
  59. package/es-modules/Extensions/DraggablePoints.js +9 -7
  60. package/es-modules/Extensions/Drilldown.js +147 -94
  61. package/es-modules/Extensions/Exporting/Exporting.js +9 -7
  62. package/es-modules/Extensions/Exporting/ExportingDefaults.js +49 -1
  63. package/es-modules/Extensions/GeoJSON.js +149 -124
  64. package/es-modules/Extensions/MarkerClusters.js +34 -20
  65. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +110 -22
  66. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
  67. package/es-modules/Extensions/Oldie/Oldie.js +1 -1
  68. package/es-modules/Extensions/ScrollablePlotArea.js +5 -1
  69. package/es-modules/Extensions/Stacking.js +3 -2
  70. package/es-modules/Extensions/Themes/HighContrastDark.js +10 -10
  71. package/es-modules/Extensions/Themes/HighContrastLight.js +10 -10
  72. package/es-modules/Maps/MapNavigation.js +49 -8
  73. package/es-modules/Maps/MapPointer.js +16 -0
  74. package/es-modules/Maps/MapUtilities.js +56 -0
  75. package/es-modules/Maps/MapView.js +606 -135
  76. package/es-modules/Maps/MapViewInsetsOptionsDefault.js +148 -0
  77. package/es-modules/Maps/MapViewOptionsDefault.js +58 -20
  78. package/es-modules/Maps/Projection.js +169 -77
  79. package/es-modules/Maps/Projections/EqualEarth.js +15 -6
  80. package/es-modules/Maps/Projections/LambertConformalConic.js +27 -19
  81. package/es-modules/Maps/Projections/Miller.js +23 -10
  82. package/es-modules/Maps/Projections/Orthographic.js +21 -10
  83. package/es-modules/Maps/Projections/WebMercator.js +25 -13
  84. package/es-modules/Series/ArcDiagram/ArcDiagramPoint.js +77 -0
  85. package/es-modules/Series/ArcDiagram/ArcDiagramSeries.js +581 -0
  86. package/es-modules/Series/Column/ColumnSeries.js +4 -3
  87. package/es-modules/Series/DataModifyComposition.js +1 -0
  88. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +2 -2
  89. package/es-modules/Series/DrawPointComposition.js +7 -4
  90. package/es-modules/Series/Lollipop/LollipopSeries.js +1 -1
  91. package/es-modules/Series/Map/MapPoint.js +24 -1
  92. package/es-modules/Series/Map/MapSeries.js +196 -169
  93. package/es-modules/Series/MapBubble/MapBubblePoint.js +16 -24
  94. package/es-modules/Series/MapBubble/MapBubbleSeries.js +11 -0
  95. package/es-modules/Series/MapPoint/MapPointPoint.js +2 -8
  96. package/es-modules/Series/MapPoint/MapPointSeries.js +36 -14
  97. package/es-modules/Series/NodesComposition.js +60 -13
  98. package/es-modules/Series/OHLC/OHLCSeries.js +7 -0
  99. package/es-modules/Series/Organization/OrganizationPoint.js +68 -2
  100. package/es-modules/Series/Organization/OrganizationSeries.js +79 -25
  101. package/es-modules/Series/Pie/PiePoint.js +12 -5
  102. package/es-modules/Series/Pie3D/Pie3DSeries.js +19 -0
  103. package/es-modules/Series/Sankey/SankeyColumnComposition.js +193 -0
  104. package/es-modules/Series/Sankey/SankeyPoint.js +37 -1
  105. package/es-modules/Series/Sankey/SankeySeries.js +10 -127
  106. package/es-modules/Series/Scatter/ScatterSeries.js +1 -1
  107. package/es-modules/Series/Sunburst/SunburstSeries.js +13 -2
  108. package/es-modules/Series/Treemap/TreemapSeries.js +88 -80
  109. package/es-modules/Series/Waterfall/WaterfallSeries.js +2 -0
  110. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +9 -2
  111. package/es-modules/Stock/StockToolsGui.js +1 -1
  112. package/es-modules/masters/highcharts-3d.src.js +1 -1
  113. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  114. package/es-modules/masters/highcharts-more.src.js +1 -1
  115. package/es-modules/masters/highcharts.src.js +1 -1
  116. package/es-modules/masters/highmaps.src.js +1 -1
  117. package/es-modules/masters/highstock.src.js +1 -1
  118. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  119. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  120. package/es-modules/masters/indicators/ao.src.js +1 -1
  121. package/es-modules/masters/indicators/apo.src.js +1 -1
  122. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  123. package/es-modules/masters/indicators/aroon.src.js +1 -1
  124. package/es-modules/masters/indicators/atr.src.js +1 -1
  125. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  126. package/es-modules/masters/indicators/cci.src.js +1 -1
  127. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  128. package/es-modules/masters/indicators/cmf.src.js +1 -1
  129. package/es-modules/masters/indicators/cmo.src.js +1 -1
  130. package/es-modules/masters/indicators/dema.src.js +1 -1
  131. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  132. package/es-modules/masters/indicators/dmi.src.js +1 -1
  133. package/es-modules/masters/indicators/dpo.src.js +1 -1
  134. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  135. package/es-modules/masters/indicators/indicators-all.src.js +1 -1
  136. package/es-modules/masters/indicators/indicators.src.js +1 -1
  137. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  138. package/es-modules/masters/indicators/klinger.src.js +1 -1
  139. package/es-modules/masters/indicators/macd.src.js +1 -1
  140. package/es-modules/masters/indicators/mfi.src.js +1 -1
  141. package/es-modules/masters/indicators/momentum.src.js +1 -1
  142. package/es-modules/masters/indicators/natr.src.js +1 -1
  143. package/es-modules/masters/indicators/obv.src.js +1 -1
  144. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  145. package/es-modules/masters/indicators/ppo.src.js +1 -1
  146. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  147. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  148. package/es-modules/masters/indicators/psar.src.js +1 -1
  149. package/es-modules/masters/indicators/regressions.src.js +1 -1
  150. package/es-modules/masters/indicators/roc.src.js +1 -1
  151. package/es-modules/masters/indicators/rsi.src.js +1 -1
  152. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  153. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  154. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  155. package/es-modules/masters/indicators/tema.src.js +1 -1
  156. package/es-modules/masters/indicators/trendline.src.js +1 -1
  157. package/es-modules/masters/indicators/trix.src.js +1 -1
  158. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  159. package/es-modules/masters/indicators/vwap.src.js +1 -1
  160. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  161. package/es-modules/masters/indicators/wma.src.js +1 -1
  162. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  163. package/es-modules/masters/modules/accessibility.src.js +1 -1
  164. package/es-modules/masters/modules/annotations-advanced.src.js +1 -1
  165. package/es-modules/masters/modules/annotations.src.js +1 -1
  166. package/es-modules/masters/modules/arc-diagram.src.js +14 -0
  167. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  168. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  169. package/es-modules/masters/modules/boost.src.js +1 -1
  170. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  171. package/es-modules/masters/modules/bullet.src.js +1 -1
  172. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  173. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  174. package/es-modules/masters/modules/cylinder.src.js +1 -1
  175. package/es-modules/masters/modules/data.src.js +1 -1
  176. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  177. package/es-modules/masters/modules/debugger.src.js +1 -1
  178. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  179. package/es-modules/masters/modules/dotplot.src.js +1 -1
  180. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  181. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  182. package/es-modules/masters/modules/drilldown.src.js +2 -1
  183. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  184. package/es-modules/masters/modules/export-data.src.js +1 -1
  185. package/es-modules/masters/modules/exporting.src.js +1 -1
  186. package/es-modules/masters/modules/full-screen.src.js +1 -1
  187. package/es-modules/masters/modules/funnel.src.js +1 -1
  188. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  189. package/es-modules/masters/modules/gantt.src.js +1 -1
  190. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  191. package/es-modules/masters/modules/heatmap.src.js +1 -1
  192. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  193. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  194. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  195. package/es-modules/masters/modules/item-series.src.js +1 -1
  196. package/es-modules/masters/modules/lollipop.src.js +1 -1
  197. package/es-modules/masters/modules/map.src.js +5 -1
  198. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  199. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  200. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  201. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  202. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  203. package/es-modules/masters/modules/oldie.src.js +1 -1
  204. package/es-modules/masters/modules/organization.src.js +1 -1
  205. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  206. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  207. package/es-modules/masters/modules/pareto.src.js +1 -1
  208. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  209. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  210. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  211. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  212. package/es-modules/masters/modules/sankey.src.js +1 -1
  213. package/es-modules/masters/modules/series-label.src.js +1 -1
  214. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  215. package/es-modules/masters/modules/sonification.src.js +1 -1
  216. package/es-modules/masters/modules/static-scale.src.js +1 -1
  217. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  218. package/es-modules/masters/modules/stock.src.js +1 -1
  219. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  220. package/es-modules/masters/modules/sunburst.src.js +1 -1
  221. package/es-modules/masters/modules/tilemap.src.js +1 -1
  222. package/es-modules/masters/modules/timeline.src.js +1 -1
  223. package/es-modules/masters/modules/treegrid.src.js +1 -1
  224. package/es-modules/masters/modules/treemap.src.js +5 -1
  225. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  226. package/es-modules/masters/modules/variwide.src.js +1 -1
  227. package/es-modules/masters/modules/vector.src.js +1 -1
  228. package/es-modules/masters/modules/venn.src.js +1 -1
  229. package/es-modules/masters/modules/windbarb.src.js +1 -1
  230. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  231. package/es-modules/masters/modules/xrange.src.js +1 -1
  232. package/es-modules/masters/themes/avocado.src.js +1 -1
  233. package/es-modules/masters/themes/brand-dark.src.js +1 -1
  234. package/es-modules/masters/themes/brand-light.src.js +1 -1
  235. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  236. package/es-modules/masters/themes/dark-green.src.js +1 -1
  237. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  238. package/es-modules/masters/themes/gray.src.js +1 -1
  239. package/es-modules/masters/themes/grid-light.src.js +1 -1
  240. package/es-modules/masters/themes/grid.src.js +1 -1
  241. package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  242. package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  243. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  244. package/es-modules/masters/themes/skies.src.js +1 -1
  245. package/es-modules/masters/themes/sunset.src.js +1 -1
  246. package/highcharts-3d.js +99 -98
  247. package/highcharts-3d.js.map +1 -1
  248. package/highcharts-3d.src.js +50 -20
  249. package/highcharts-gantt.js +800 -795
  250. package/highcharts-gantt.js.map +1 -1
  251. package/highcharts-gantt.src.js +528 -290
  252. package/highcharts-more.js +195 -194
  253. package/highcharts-more.js.map +1 -1
  254. package/highcharts-more.src.js +13 -2
  255. package/highcharts.d.ts +2162 -504
  256. package/highcharts.js +586 -581
  257. package/highcharts.js.map +1 -1
  258. package/highcharts.src.d.ts +2162 -504
  259. package/highcharts.src.js +494 -272
  260. package/highmaps.js +753 -723
  261. package/highmaps.js.map +1 -1
  262. package/highmaps.src.js +3603 -2117
  263. package/highstock.js +790 -786
  264. package/highstock.js.map +1 -1
  265. package/highstock.src.js +519 -283
  266. package/indicators/acceleration-bands.js +12 -11
  267. package/indicators/acceleration-bands.js.map +1 -1
  268. package/indicators/acceleration-bands.src.js +11 -2
  269. package/indicators/accumulation-distribution.js +5 -5
  270. package/indicators/accumulation-distribution.js.map +1 -1
  271. package/indicators/accumulation-distribution.src.js +11 -2
  272. package/indicators/ao.js +6 -6
  273. package/indicators/ao.js.map +1 -1
  274. package/indicators/ao.src.js +11 -2
  275. package/indicators/apo.js +5 -5
  276. package/indicators/apo.js.map +1 -1
  277. package/indicators/apo.src.js +11 -2
  278. package/indicators/aroon-oscillator.js +10 -10
  279. package/indicators/aroon-oscillator.js.map +1 -1
  280. package/indicators/aroon-oscillator.src.js +11 -2
  281. package/indicators/aroon.js +11 -11
  282. package/indicators/aroon.js.map +1 -1
  283. package/indicators/aroon.src.js +11 -2
  284. package/indicators/atr.js +5 -5
  285. package/indicators/atr.js.map +1 -1
  286. package/indicators/atr.src.js +11 -2
  287. package/indicators/bollinger-bands.js +12 -12
  288. package/indicators/bollinger-bands.js.map +1 -1
  289. package/indicators/bollinger-bands.src.js +11 -2
  290. package/indicators/cci.js +5 -5
  291. package/indicators/cci.js.map +1 -1
  292. package/indicators/cci.src.js +11 -2
  293. package/indicators/chaikin.js +8 -8
  294. package/indicators/chaikin.js.map +1 -1
  295. package/indicators/chaikin.src.js +11 -2
  296. package/indicators/cmf.js +6 -6
  297. package/indicators/cmf.js.map +1 -1
  298. package/indicators/cmf.src.js +11 -2
  299. package/indicators/cmo.js +5 -5
  300. package/indicators/cmo.js.map +1 -1
  301. package/indicators/cmo.src.js +11 -2
  302. package/indicators/dema.js +5 -5
  303. package/indicators/dema.js.map +1 -1
  304. package/indicators/dema.src.js +11 -2
  305. package/indicators/disparity-index.js +6 -6
  306. package/indicators/disparity-index.js.map +1 -1
  307. package/indicators/disparity-index.src.js +11 -2
  308. package/indicators/dmi.js +12 -12
  309. package/indicators/dmi.js.map +1 -1
  310. package/indicators/dmi.src.js +11 -2
  311. package/indicators/dpo.js +5 -5
  312. package/indicators/dpo.js.map +1 -1
  313. package/indicators/dpo.src.js +11 -2
  314. package/indicators/ema.js +2 -1
  315. package/indicators/ema.js.map +1 -1
  316. package/indicators/ema.src.js +10 -1
  317. package/indicators/ichimoku-kinko-hyo.js +16 -16
  318. package/indicators/ichimoku-kinko-hyo.js.map +1 -1
  319. package/indicators/ichimoku-kinko-hyo.src.js +11 -2
  320. package/indicators/indicators-all.js +195 -194
  321. package/indicators/indicators-all.js.map +1 -1
  322. package/indicators/indicators-all.src.js +21 -5
  323. package/indicators/indicators.js +13 -12
  324. package/indicators/indicators.js.map +1 -1
  325. package/indicators/indicators.src.js +21 -5
  326. package/indicators/keltner-channels.js +12 -11
  327. package/indicators/keltner-channels.js.map +1 -1
  328. package/indicators/keltner-channels.src.js +11 -2
  329. package/indicators/klinger.js +13 -13
  330. package/indicators/klinger.js.map +1 -1
  331. package/indicators/klinger.src.js +11 -2
  332. package/indicators/macd.js +12 -11
  333. package/indicators/macd.js.map +1 -1
  334. package/indicators/macd.src.js +11 -2
  335. package/indicators/mfi.js +6 -6
  336. package/indicators/mfi.js.map +1 -1
  337. package/indicators/mfi.src.js +11 -2
  338. package/indicators/momentum.js +5 -5
  339. package/indicators/momentum.js.map +1 -1
  340. package/indicators/momentum.src.js +11 -2
  341. package/indicators/natr.js +5 -4
  342. package/indicators/natr.js.map +1 -1
  343. package/indicators/natr.src.js +11 -2
  344. package/indicators/obv.js +5 -5
  345. package/indicators/obv.js.map +1 -1
  346. package/indicators/obv.src.js +11 -2
  347. package/indicators/pivot-points.js +11 -11
  348. package/indicators/pivot-points.js.map +1 -1
  349. package/indicators/pivot-points.src.js +11 -2
  350. package/indicators/ppo.js +5 -5
  351. package/indicators/ppo.js.map +1 -1
  352. package/indicators/ppo.src.js +11 -2
  353. package/indicators/price-channel.js +11 -11
  354. package/indicators/price-channel.js.map +1 -1
  355. package/indicators/price-channel.src.js +11 -2
  356. package/indicators/price-envelopes.js +8 -8
  357. package/indicators/price-envelopes.js.map +1 -1
  358. package/indicators/price-envelopes.src.js +11 -2
  359. package/indicators/psar.js +7 -6
  360. package/indicators/psar.js.map +1 -1
  361. package/indicators/psar.src.js +11 -2
  362. package/indicators/regressions.js +12 -12
  363. package/indicators/regressions.js.map +1 -1
  364. package/indicators/regressions.src.js +11 -2
  365. package/indicators/roc.js +5 -5
  366. package/indicators/roc.js.map +1 -1
  367. package/indicators/roc.src.js +11 -2
  368. package/indicators/rsi.js +6 -5
  369. package/indicators/rsi.js.map +1 -1
  370. package/indicators/rsi.src.js +11 -2
  371. package/indicators/slow-stochastic.js +5 -5
  372. package/indicators/slow-stochastic.js.map +1 -1
  373. package/indicators/slow-stochastic.src.js +11 -2
  374. package/indicators/stochastic.js +12 -12
  375. package/indicators/stochastic.js.map +1 -1
  376. package/indicators/stochastic.src.js +11 -2
  377. package/indicators/supertrend.js +10 -10
  378. package/indicators/supertrend.js.map +1 -1
  379. package/indicators/supertrend.src.js +11 -2
  380. package/indicators/tema.js +6 -6
  381. package/indicators/tema.js.map +1 -1
  382. package/indicators/tema.src.js +11 -2
  383. package/indicators/trendline.js +5 -5
  384. package/indicators/trendline.js.map +1 -1
  385. package/indicators/trendline.src.js +11 -2
  386. package/indicators/trix.js +4 -4
  387. package/indicators/trix.js.map +1 -1
  388. package/indicators/trix.src.js +11 -2
  389. package/indicators/volume-by-price.js +17 -17
  390. package/indicators/volume-by-price.js.map +1 -1
  391. package/indicators/volume-by-price.src.js +11 -2
  392. package/indicators/vwap.js +5 -5
  393. package/indicators/vwap.js.map +1 -1
  394. package/indicators/vwap.src.js +11 -2
  395. package/indicators/williams-r.js +6 -5
  396. package/indicators/williams-r.js.map +1 -1
  397. package/indicators/williams-r.src.js +11 -2
  398. package/indicators/wma.js +5 -5
  399. package/indicators/wma.js.map +1 -1
  400. package/indicators/wma.src.js +11 -2
  401. package/indicators/zigzag.js +6 -6
  402. package/indicators/zigzag.js.map +1 -1
  403. package/indicators/zigzag.src.js +11 -2
  404. package/lib/jspdf.js +299 -184
  405. package/lib/jspdf.src.js +25266 -18067
  406. package/lib/svg2pdf.js +35 -31
  407. package/lib/svg2pdf.src.js +5721 -4179
  408. package/modules/accessibility.js +231 -229
  409. package/modules/accessibility.js.map +1 -1
  410. package/modules/accessibility.src.js +278 -197
  411. package/modules/annotations-advanced.js +144 -144
  412. package/modules/annotations-advanced.js.map +1 -1
  413. package/modules/annotations-advanced.src.js +26 -8
  414. package/modules/annotations.js +79 -79
  415. package/modules/annotations.js.map +1 -1
  416. package/modules/annotations.src.js +21 -5
  417. package/modules/arc-diagram.js +25 -0
  418. package/modules/arc-diagram.js.map +1 -0
  419. package/modules/arc-diagram.src.js +770 -0
  420. package/modules/arrow-symbols.js +4 -3
  421. package/modules/arrow-symbols.js.map +1 -1
  422. package/modules/arrow-symbols.src.js +11 -2
  423. package/modules/boost-canvas.js +15 -15
  424. package/modules/boost-canvas.js.map +1 -1
  425. package/modules/boost-canvas.src.js +11 -2
  426. package/modules/boost.js +80 -79
  427. package/modules/boost.js.map +1 -1
  428. package/modules/boost.src.js +71 -43
  429. package/modules/broken-axis.js +13 -13
  430. package/modules/broken-axis.js.map +1 -1
  431. package/modules/broken-axis.src.js +11 -2
  432. package/modules/bullet.js +9 -9
  433. package/modules/bullet.js.map +1 -1
  434. package/modules/bullet.src.js +11 -2
  435. package/modules/coloraxis.js +24 -24
  436. package/modules/coloraxis.js.map +1 -1
  437. package/modules/coloraxis.src.js +33 -7
  438. package/modules/current-date-indicator.js +5 -4
  439. package/modules/current-date-indicator.js.map +1 -1
  440. package/modules/current-date-indicator.src.js +11 -2
  441. package/modules/cylinder.js +11 -11
  442. package/modules/cylinder.js.map +1 -1
  443. package/modules/cylinder.src.js +11 -2
  444. package/modules/data.js +34 -33
  445. package/modules/data.js.map +1 -1
  446. package/modules/data.src.js +59 -32
  447. package/modules/datagrouping.js +21 -20
  448. package/modules/datagrouping.js.map +1 -1
  449. package/modules/datagrouping.src.js +16 -4
  450. package/modules/debugger.js +6 -6
  451. package/modules/debugger.js.map +1 -1
  452. package/modules/debugger.src.js +11 -2
  453. package/modules/dependency-wheel.js +12 -11
  454. package/modules/dependency-wheel.js.map +1 -1
  455. package/modules/dependency-wheel.src.js +14 -5
  456. package/modules/dotplot.js +6 -6
  457. package/modules/dotplot.js.map +1 -1
  458. package/modules/dotplot.src.js +11 -2
  459. package/modules/drag-panes.js +10 -10
  460. package/modules/drag-panes.js.map +1 -1
  461. package/modules/drag-panes.src.js +11 -2
  462. package/modules/draggable-points.js +35 -34
  463. package/modules/draggable-points.js.map +1 -1
  464. package/modules/draggable-points.src.js +20 -9
  465. package/modules/drilldown.d.ts +19 -0
  466. package/modules/drilldown.js +37 -25
  467. package/modules/drilldown.js.map +1 -1
  468. package/modules/drilldown.src.d.ts +19 -0
  469. package/modules/drilldown.src.js +1090 -105
  470. package/modules/dumbbell.js +17 -17
  471. package/modules/dumbbell.js.map +1 -1
  472. package/modules/dumbbell.src.js +11 -2
  473. package/modules/export-data.js +21 -20
  474. package/modules/export-data.js.map +1 -1
  475. package/modules/export-data.src.js +11 -2
  476. package/modules/exporting.js +39 -39
  477. package/modules/exporting.js.map +1 -1
  478. package/modules/exporting.src.js +82 -18
  479. package/modules/full-screen.js +8 -7
  480. package/modules/full-screen.js.map +1 -1
  481. package/modules/full-screen.src.js +11 -2
  482. package/modules/funnel.js +12 -12
  483. package/modules/funnel.js.map +1 -1
  484. package/modules/funnel.src.js +11 -2
  485. package/modules/funnel3d.js +21 -21
  486. package/modules/funnel3d.js.map +1 -1
  487. package/modules/funnel3d.src.js +11 -2
  488. package/modules/gantt.js +217 -217
  489. package/modules/gantt.js.map +1 -1
  490. package/modules/gantt.src.js +45 -20
  491. package/modules/grid-axis.js +23 -23
  492. package/modules/grid-axis.js.map +1 -1
  493. package/modules/grid-axis.src.js +22 -11
  494. package/modules/heatmap.js +40 -39
  495. package/modules/heatmap.js.map +1 -1
  496. package/modules/heatmap.src.js +33 -7
  497. package/modules/heikinashi.js +8 -8
  498. package/modules/heikinashi.js.map +1 -1
  499. package/modules/heikinashi.src.js +11 -2
  500. package/modules/histogram-bellcurve.js +13 -13
  501. package/modules/histogram-bellcurve.js.map +1 -1
  502. package/modules/histogram-bellcurve.src.js +11 -2
  503. package/modules/hollowcandlestick.js +9 -9
  504. package/modules/hollowcandlestick.js.map +1 -1
  505. package/modules/hollowcandlestick.src.js +11 -2
  506. package/modules/item-series.js +12 -12
  507. package/modules/item-series.js.map +1 -1
  508. package/modules/item-series.src.js +11 -2
  509. package/modules/lollipop.js +7 -7
  510. package/modules/lollipop.js.map +1 -1
  511. package/modules/lollipop.src.js +12 -3
  512. package/modules/map.d.ts +80 -43
  513. package/modules/map.js +169 -144
  514. package/modules/map.js.map +1 -1
  515. package/modules/map.src.d.ts +80 -43
  516. package/modules/map.src.js +7960 -6687
  517. package/modules/marker-clusters.js +36 -36
  518. package/modules/marker-clusters.js.map +1 -1
  519. package/modules/marker-clusters.src.js +47 -23
  520. package/modules/networkgraph.d.ts +5 -0
  521. package/modules/networkgraph.js +49 -48
  522. package/modules/networkgraph.js.map +1 -1
  523. package/modules/networkgraph.src.d.ts +5 -0
  524. package/modules/networkgraph.src.js +77 -15
  525. package/modules/no-data-to-display.js +5 -5
  526. package/modules/no-data-to-display.js.map +1 -1
  527. package/modules/no-data-to-display.src.js +11 -2
  528. package/modules/offline-exporting.js +20 -18
  529. package/modules/offline-exporting.js.map +1 -1
  530. package/modules/offline-exporting.src.js +126 -25
  531. package/modules/oldie-polyfills.js +7 -7
  532. package/modules/oldie-polyfills.js.map +1 -1
  533. package/modules/oldie-polyfills.src.js +11 -2
  534. package/modules/oldie.js +30 -30
  535. package/modules/oldie.js.map +1 -1
  536. package/modules/oldie.src.js +12 -3
  537. package/modules/organization.js +16 -14
  538. package/modules/organization.js.map +1 -1
  539. package/modules/organization.src.js +166 -32
  540. package/modules/overlapping-datalabels.js +3 -2
  541. package/modules/overlapping-datalabels.js.map +1 -1
  542. package/modules/overlapping-datalabels.src.js +11 -2
  543. package/modules/parallel-coordinates.js +11 -11
  544. package/modules/parallel-coordinates.js.map +1 -1
  545. package/modules/parallel-coordinates.src.js +11 -2
  546. package/modules/pareto.js +7 -7
  547. package/modules/pareto.js.map +1 -1
  548. package/modules/pareto.src.js +11 -2
  549. package/modules/pathfinder.js +31 -31
  550. package/modules/pathfinder.js.map +1 -1
  551. package/modules/pathfinder.src.js +11 -2
  552. package/modules/pattern-fill.js +14 -14
  553. package/modules/pattern-fill.js.map +1 -1
  554. package/modules/pattern-fill.src.js +11 -2
  555. package/modules/price-indicator.js +5 -5
  556. package/modules/price-indicator.js.map +1 -1
  557. package/modules/price-indicator.src.js +11 -2
  558. package/modules/pyramid3d.js +4 -4
  559. package/modules/pyramid3d.js.map +1 -1
  560. package/modules/pyramid3d.src.js +11 -2
  561. package/modules/sankey.d.ts +5 -0
  562. package/modules/sankey.js +32 -29
  563. package/modules/sankey.js.map +1 -1
  564. package/modules/sankey.src.d.ts +5 -0
  565. package/modules/sankey.src.js +338 -156
  566. package/modules/series-label.js +18 -17
  567. package/modules/series-label.js.map +1 -1
  568. package/modules/series-label.src.js +11 -2
  569. package/modules/solid-gauge.js +10 -10
  570. package/modules/solid-gauge.js.map +1 -1
  571. package/modules/solid-gauge.src.js +11 -2
  572. package/modules/sonification.js +59 -59
  573. package/modules/sonification.js.map +1 -1
  574. package/modules/sonification.src.js +11 -2
  575. package/modules/static-scale.js +5 -4
  576. package/modules/static-scale.js.map +1 -1
  577. package/modules/static-scale.src.js +11 -2
  578. package/modules/stock-tools.js +78 -78
  579. package/modules/stock-tools.js.map +1 -1
  580. package/modules/stock-tools.src.js +21 -5
  581. package/modules/stock.js +162 -162
  582. package/modules/stock.js.map +1 -1
  583. package/modules/stock.src.js +36 -13
  584. package/modules/streamgraph.js +5 -4
  585. package/modules/streamgraph.js.map +1 -1
  586. package/modules/streamgraph.src.js +11 -2
  587. package/modules/sunburst.d.ts +3 -0
  588. package/modules/sunburst.js +73 -60
  589. package/modules/sunburst.js.map +1 -1
  590. package/modules/sunburst.src.d.ts +3 -0
  591. package/modules/sunburst.src.js +1049 -96
  592. package/modules/tilemap.js +17 -17
  593. package/modules/tilemap.js.map +1 -1
  594. package/modules/tilemap.src.js +11 -2
  595. package/modules/timeline.js +18 -18
  596. package/modules/timeline.js.map +1 -1
  597. package/modules/timeline.src.js +11 -2
  598. package/modules/treegrid.js +57 -56
  599. package/modules/treegrid.js.map +1 -1
  600. package/modules/treegrid.src.js +33 -11
  601. package/modules/treemap.d.ts +3 -0
  602. package/modules/treemap.js +53 -41
  603. package/modules/treemap.js.map +1 -1
  604. package/modules/treemap.src.d.ts +3 -0
  605. package/modules/treemap.src.js +1039 -95
  606. package/modules/variable-pie.js +9 -9
  607. package/modules/variable-pie.js.map +1 -1
  608. package/modules/variable-pie.src.js +11 -2
  609. package/modules/variwide.js +12 -12
  610. package/modules/variwide.js.map +1 -1
  611. package/modules/variwide.src.js +11 -2
  612. package/modules/vector.js +8 -7
  613. package/modules/vector.js.map +1 -1
  614. package/modules/vector.src.js +11 -2
  615. package/modules/venn.js +31 -31
  616. package/modules/venn.js.map +1 -1
  617. package/modules/venn.src.js +18 -6
  618. package/modules/windbarb.js +15 -15
  619. package/modules/windbarb.js.map +1 -1
  620. package/modules/windbarb.src.js +11 -2
  621. package/modules/wordcloud.js +23 -23
  622. package/modules/wordcloud.js.map +1 -1
  623. package/modules/wordcloud.src.js +18 -6
  624. package/modules/xrange.js +16 -16
  625. package/modules/xrange.js.map +1 -1
  626. package/modules/xrange.src.js +11 -2
  627. package/package.json +1 -1
  628. package/themes/avocado.js +4 -3
  629. package/themes/avocado.js.map +1 -1
  630. package/themes/avocado.src.js +11 -2
  631. package/themes/brand-dark.js +9 -8
  632. package/themes/brand-dark.js.map +1 -1
  633. package/themes/brand-dark.src.js +11 -2
  634. package/themes/brand-light.js +8 -8
  635. package/themes/brand-light.js.map +1 -1
  636. package/themes/brand-light.src.js +11 -2
  637. package/themes/dark-blue.js +9 -8
  638. package/themes/dark-blue.js.map +1 -1
  639. package/themes/dark-blue.src.js +11 -2
  640. package/themes/dark-green.js +9 -8
  641. package/themes/dark-green.js.map +1 -1
  642. package/themes/dark-green.src.js +11 -2
  643. package/themes/dark-unica.js +8 -7
  644. package/themes/dark-unica.js.map +1 -1
  645. package/themes/dark-unica.src.js +11 -2
  646. package/themes/gray.js +9 -8
  647. package/themes/gray.js.map +1 -1
  648. package/themes/gray.src.js +11 -2
  649. package/themes/grid-light.js +5 -4
  650. package/themes/grid-light.js.map +1 -1
  651. package/themes/grid-light.src.js +11 -2
  652. package/themes/grid.js +5 -5
  653. package/themes/grid.js.map +1 -1
  654. package/themes/grid.src.js +11 -2
  655. package/themes/high-contrast-dark.js +7 -7
  656. package/themes/high-contrast-dark.js.map +1 -1
  657. package/themes/high-contrast-dark.src.js +21 -12
  658. package/themes/high-contrast-light.js +3 -3
  659. package/themes/high-contrast-light.js.map +1 -1
  660. package/themes/high-contrast-light.src.js +21 -12
  661. package/themes/sand-signika.js +5 -5
  662. package/themes/sand-signika.js.map +1 -1
  663. package/themes/sand-signika.src.js +11 -2
  664. package/themes/skies.js +5 -5
  665. package/themes/skies.js.map +1 -1
  666. package/themes/skies.src.js +11 -2
  667. package/themes/sunset.js +3 -3
  668. package/themes/sunset.js.map +1 -1
  669. package/themes/sunset.src.js +11 -2
  670. package/es-modules/Maps/ProjectionDefinition.js +0 -9
@@ -84,6 +84,35 @@ function isSkipPoint(point) {
84
84
  pointA11yDisabled ||
85
85
  isSkipSeries(point.series);
86
86
  }
87
+ /**
88
+ * Get the first point that is not a skip point in this series.
89
+ * @private
90
+ */
91
+ function getFirstValidPointInSeries(series) {
92
+ var points = series.points || [], len = points.length;
93
+ for (var i = 0; i < len; ++i) {
94
+ if (!isSkipPoint(points[i])) {
95
+ return points[i];
96
+ }
97
+ }
98
+ return null;
99
+ }
100
+ /**
101
+ * Get the first point that is not a skip point in this chart.
102
+ * @private
103
+ */
104
+ function getFirstValidPointInChart(chart) {
105
+ var series = chart.series || [], len = series.length;
106
+ for (var i = 0; i < len; ++i) {
107
+ if (!isSkipSeries(series[i])) {
108
+ var point = getFirstValidPointInSeries(series[i]);
109
+ if (point) {
110
+ return point;
111
+ }
112
+ }
113
+ }
114
+ return null;
115
+ }
87
116
  /**
88
117
  * @private
89
118
  */
@@ -95,7 +124,7 @@ function highlightLastValidPointInChart(chart) {
95
124
  // Highlight first valid point in the series will also
96
125
  // look backwards. It always starts from currently
97
126
  // highlighted point.
98
- res = chart.series[i].highlightFirstValidPoint();
127
+ res = chart.series[i].highlightNextValidPoint();
99
128
  if (res) {
100
129
  break;
101
130
  }
@@ -103,24 +132,24 @@ function highlightLastValidPointInChart(chart) {
103
132
  return res;
104
133
  }
105
134
  /**
135
+ * After drilling down/up, we need to set focus to the first point for
136
+ * screen readers and keyboard nav.
106
137
  * @private
107
138
  */
108
139
  function updateChartFocusAfterDrilling(chart) {
109
- highlightFirstValidPointInChart(chart);
110
- if (chart.focusElement) {
111
- chart.focusElement.removeFocusBorder();
140
+ var point = getFirstValidPointInChart(chart);
141
+ if (point) {
142
+ point.highlight(false); // Do not visually highlight
112
143
  }
113
144
  }
114
145
  /**
146
+ * Highlight the first point in chart that is not a skip point
115
147
  * @private
116
148
  */
117
149
  function highlightFirstValidPointInChart(chart) {
118
- var res = false;
119
150
  delete chart.highlightedPoint;
120
- res = chart.series.reduce(function (acc, cur) {
121
- return acc || cur.highlightFirstValidPoint();
122
- }, false);
123
- return res;
151
+ var point = getFirstValidPointInChart(chart);
152
+ return point ? point.highlight() : false;
124
153
  }
125
154
  /* *
126
155
  *
@@ -156,7 +185,7 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
156
185
  e.addEvent(Series, 'destroy', function () {
157
186
  return keyboardNavigation.onSeriesDestroy(this);
158
187
  });
159
- e.addEvent(chart, 'afterDrilldown', function () {
188
+ e.addEvent(chart, 'afterApplyDrilldown', function () {
160
189
  updateChartFocusAfterDrilling(this);
161
190
  });
162
191
  e.addEvent(chart, 'drilldown', function (e) {
@@ -195,25 +224,23 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
195
224
  });
196
225
  };
197
226
  /**
227
+ * After drillup we want to find the point that was drilled down to and
228
+ * highlight it.
198
229
  * @private
199
230
  */
200
231
  SeriesKeyboardNavigation.prototype.onDrillupAll = function () {
201
- // After drillup we want to find the point that was drilled down to and
202
- // highlight it.
203
232
  var last = this.lastDrilledDownPoint, chart = this.chart, series = last && getSeriesFromName(chart, last.seriesName);
204
233
  var point;
205
234
  if (last && series && defined(last.x) && defined(last.y)) {
206
235
  point = getPointFromXY(series, last.x, last.y);
207
236
  }
237
+ point = point || getFirstValidPointInChart(chart);
208
238
  // Container focus can be lost on drillup due to deleted elements.
209
239
  if (chart.container) {
210
240
  chart.container.focus();
211
241
  }
212
242
  if (point && point.highlight) {
213
- point.highlight();
214
- }
215
- if (chart.focusElement) {
216
- chart.focusElement.removeFocusBorder();
243
+ point.highlight(false); // Do not visually highlight
217
244
  }
218
245
  };
219
246
  /**
@@ -255,6 +282,9 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
255
282
  highlightFirstValidPointInChart(chart);
256
283
  return this.response.success;
257
284
  },
285
+ validate: function () {
286
+ return !!getFirstValidPointInChart(chart);
287
+ },
258
288
  terminate: function () {
259
289
  return keyboardNavigation.onHandlerTerminate();
260
290
  }
@@ -313,17 +343,15 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
313
343
  /**
314
344
  * Function that attempts to highlight next/prev point. Handles wrap around.
315
345
  * @private
316
- * @param {Highcharts.KeyboardNavigationHandler} handler
317
- * @param {boolean} directionIsNext
318
- * @return {number}
319
- * response
320
346
  */
321
347
  SeriesKeyboardNavigation.prototype.attemptHighlightAdjacentPoint = function (handler, directionIsNext) {
322
348
  var chart = this.chart, wrapAround = chart.options.accessibility.keyboardNavigation
323
349
  .wrapAround, highlightSuccessful = chart.highlightAdjacentPoint(directionIsNext);
324
350
  if (!highlightSuccessful) {
325
- if (wrapAround) {
326
- return handler.init(directionIsNext ? 1 : -1);
351
+ if (wrapAround && (directionIsNext ?
352
+ highlightFirstValidPointInChart(chart) :
353
+ highlightLastValidPointInChart(chart))) {
354
+ return handler.response.success;
327
355
  }
328
356
  return handler.response[directionIsNext ? 'next' : 'prev'];
329
357
  }
@@ -515,7 +543,7 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
515
543
  // Highlight the new point or any first valid point back or forwards
516
544
  // from it
517
545
  newPoint.highlight();
518
- return newPoint.series.highlightFirstValidPoint();
546
+ return newPoint.series.highlightNextValidPoint();
519
547
  }
520
548
  /**
521
549
  * @private
@@ -552,7 +580,7 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
552
580
  seriesTypes[type].prototype.keyboardMoveVertical = false;
553
581
  }
554
582
  });
555
- seriesProto.highlightFirstValidPoint = (seriesHighlightFirstValidPoint);
583
+ seriesProto.highlightNextValidPoint = (seriesHighlightNextValidPoint);
556
584
  }
557
585
  }
558
586
  SeriesKeyboardNavigation.compose = compose;
@@ -586,7 +614,7 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
586
614
  return defined(minIx) ? series.points[minIx] : void 0;
587
615
  }
588
616
  /**
589
- * Highlights a point (show tooltip and display hover state).
617
+ * Highlights a point (show tooltip, display hover state, focus element).
590
618
  *
591
619
  * @private
592
620
  * @function Highcharts.Point#highlight
@@ -594,9 +622,10 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
594
622
  * @return {Highcharts.Point}
595
623
  * This highlighted point.
596
624
  */
597
- function pointHighlight() {
625
+ function pointHighlight(highlightVisually) {
626
+ if (highlightVisually === void 0) { highlightVisually = true; }
598
627
  var chart = this.series.chart;
599
- if (!this.isNull) {
628
+ if (!this.isNull && highlightVisually) {
600
629
  this.onMouseOver(); // Show the hover marker and tooltip
601
630
  }
602
631
  else {
@@ -611,6 +640,9 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
611
640
  // change z-index and mess up the element.
612
641
  if (this.graphic) {
613
642
  chart.setFocusToElement(this.graphic);
643
+ if (!highlightVisually && chart.focusElement) {
644
+ chart.focusElement.removeFocusBorder();
645
+ }
614
646
  }
615
647
  chart.highlightedPoint = this;
616
648
  return this;
@@ -621,9 +653,9 @@ var SeriesKeyboardNavigation = /** @class */ (function () {
621
653
  * point in the series, use that as starting point.
622
654
  *
623
655
  * @private
624
- * @function Highcharts.Series#highlightFirstValidPoint
656
+ * @function Highcharts.Series#highlightNextValidPoint
625
657
  */
626
- function seriesHighlightFirstValidPoint() {
658
+ function seriesHighlightNextValidPoint() {
627
659
  var curPoint = this.chart.highlightedPoint, start = (curPoint && curPoint.series) === this ?
628
660
  getPointIndex(curPoint) :
629
661
  0, points = this.points, len = points.length;
@@ -42,8 +42,8 @@ var attr = U.attr, extend = U.extend, pick = U.pick;
42
42
  */
43
43
  function chartHasMapZoom(chart) {
44
44
  return !!(chart.mapZoom &&
45
- chart.mapNavButtons &&
46
- chart.mapNavButtons.length);
45
+ chart.mapNavigation &&
46
+ chart.mapNavigation.navButtons.length);
47
47
  }
48
48
  /* *
49
49
  *
@@ -81,7 +81,7 @@ var ZoomComponent = /** @class */ (function (_super) {
81
81
  var component = this, chart = this.chart;
82
82
  this.proxyProvider.addGroup('zoom', 'div');
83
83
  [
84
- 'afterShowResetZoom', 'afterDrilldown', 'drillupall'
84
+ 'afterShowResetZoom', 'afterApplyDrilldown', 'drillupall'
85
85
  ].forEach(function (eventType) {
86
86
  component.addEvent(chart, eventType, function () {
87
87
  component.updateProxyOverlays();
@@ -94,8 +94,8 @@ var ZoomComponent = /** @class */ (function (_super) {
94
94
  ZoomComponent.prototype.onChartUpdate = function () {
95
95
  var chart = this.chart, component = this;
96
96
  // Make map zoom buttons accessible
97
- if (chart.mapNavButtons) {
98
- chart.mapNavButtons.forEach(function (button, i) {
97
+ if (chart.mapNavigation) {
98
+ chart.mapNavigation.navButtons.forEach(function (button, i) {
99
99
  unhideChartElementFromAT(chart, button.element);
100
100
  component.setMapNavButtonAttrs(button.element, 'accessibility.zoom.mapZoom' + (i ? 'Out' : 'In'));
101
101
  });
@@ -131,10 +131,13 @@ var ZoomComponent = /** @class */ (function (_super) {
131
131
  if (chart.resetZoomButton) {
132
132
  this.createZoomProxyButton(chart.resetZoomButton, 'resetZoomProxyButton', chart.langFormat('accessibility.zoom.resetZoomButton', { chart: chart }));
133
133
  }
134
- if (chart.drillUpButton) {
134
+ if (chart.drillUpButton &&
135
+ chart.breadcrumbs &&
136
+ chart.breadcrumbs.list) {
137
+ var lastBreadcrumb = chart.breadcrumbs.list[chart.breadcrumbs.list.length - 1];
135
138
  this.createZoomProxyButton(chart.drillUpButton, 'drillUpProxyButton', chart.langFormat('accessibility.drillUpButton', {
136
139
  chart: chart,
137
- buttonText: chart.getDrilldownBackText()
140
+ buttonText: chart.breadcrumbs.getButtonText(lastBreadcrumb)
138
141
  }));
139
142
  }
140
143
  };
@@ -214,14 +217,14 @@ var ZoomComponent = /** @class */ (function (_super) {
214
217
  var isMoveOutOfRange = isBackwards && !this.focusedMapNavButtonIx ||
215
218
  !isBackwards && this.focusedMapNavButtonIx;
216
219
  // Deselect old
217
- chart.mapNavButtons[this.focusedMapNavButtonIx].setState(0);
220
+ chart.mapNavigation.navButtons[this.focusedMapNavButtonIx].setState(0);
218
221
  if (isMoveOutOfRange) {
219
222
  chart.mapZoom(); // Reset zoom
220
223
  return response[isBackwards ? 'prev' : 'next'];
221
224
  }
222
225
  // Select other button
223
226
  this.focusedMapNavButtonIx += isBackwards ? -1 : 1;
224
- var button = chart.mapNavButtons[this.focusedMapNavButtonIx];
227
+ var button = chart.mapNavigation.navButtons[this.focusedMapNavButtonIx];
225
228
  chart.setFocusToElement(button.box, button.element);
226
229
  button.setState(2);
227
230
  return response.success;
@@ -241,7 +244,7 @@ var ZoomComponent = /** @class */ (function (_super) {
241
244
  * @param {number} direction
242
245
  */
243
246
  ZoomComponent.prototype.onMapNavInit = function (direction) {
244
- var chart = this.chart, zoomIn = chart.mapNavButtons[0], zoomOut = chart.mapNavButtons[1], initialButton = direction > 0 ? zoomIn : zoomOut;
247
+ var chart = this.chart, zoomIn = chart.mapNavigation.navButtons[0], zoomOut = chart.mapNavigation.navButtons[1], initialButton = direction > 0 ? zoomIn : zoomOut;
245
248
  chart.setFocusToElement(initialButton.box, initialButton.element);
246
249
  initialButton.setState(2);
247
250
  this.focusedMapNavButtonIx = direction > 0 ? 0 : 1;
@@ -42,8 +42,8 @@ function isHighContrastModeActive() {
42
42
  doc.body.removeChild(testDiv);
43
43
  return bi === 'none';
44
44
  }
45
- // Not used for other browsers
46
- return false;
45
+ // Other browsers use the forced-colors standard
46
+ return win.matchMedia && win.matchMedia('(forced-colors: active)').matches;
47
47
  }
48
48
  /**
49
49
  * Force high contrast theme for the chart. The default theme is defined in
@@ -123,6 +123,64 @@ var KeyboardNavigation = /** @class */ (function () {
123
123
  this.removeExitAnchor();
124
124
  }
125
125
  };
126
+ /**
127
+ * We use an exit anchor to move focus out of chart whenever we want, by
128
+ * setting focus to this div and not preventing the default tab action. We
129
+ * also use this when users come back into the chart by tabbing back, in
130
+ * order to navigate from the end of the chart.
131
+ * @private
132
+ */
133
+ KeyboardNavigation.prototype.updateExitAnchor = function () {
134
+ var endMarkerId = "highcharts-end-of-chart-marker-" + this.chart.index, endMarker = getElement(endMarkerId);
135
+ this.removeExitAnchor();
136
+ if (endMarker) {
137
+ this.makeElementAnExitAnchor(endMarker);
138
+ this.exitAnchor = endMarker;
139
+ }
140
+ else {
141
+ this.createExitAnchor();
142
+ }
143
+ };
144
+ /**
145
+ * Move to prev/next module.
146
+ * @private
147
+ * @param {number} direction
148
+ * Direction to move. +1 for next, -1 for prev.
149
+ * @return {boolean}
150
+ * True if there was a valid module in direction.
151
+ */
152
+ KeyboardNavigation.prototype.move = function (direction) {
153
+ var curModule = this.modules && this.modules[this.currentModuleIx];
154
+ if (curModule && curModule.terminate) {
155
+ curModule.terminate(direction);
156
+ }
157
+ // Remove existing focus border if any
158
+ if (this.chart.focusElement) {
159
+ this.chart.focusElement.removeFocusBorder();
160
+ }
161
+ this.currentModuleIx += direction;
162
+ var newModule = this.modules && this.modules[this.currentModuleIx];
163
+ if (newModule) {
164
+ if (newModule.validate && !newModule.validate()) {
165
+ return this.move(direction); // Invalid module, recurse
166
+ }
167
+ if (newModule.init) {
168
+ newModule.init(direction); // Valid module, init it
169
+ return true;
170
+ }
171
+ }
172
+ // No module
173
+ this.currentModuleIx = 0; // Reset counter
174
+ // Set focus to chart or exit anchor depending on direction
175
+ this.exiting = true;
176
+ if (direction > 0) {
177
+ this.exitAnchor.focus();
178
+ }
179
+ else {
180
+ this.tabindexContainer.focus();
181
+ }
182
+ return false;
183
+ };
126
184
  /**
127
185
  * Function to run on container focus
128
186
  * @private
@@ -136,29 +194,37 @@ var KeyboardNavigation = /** @class */ (function () {
136
194
  if (!this.exiting &&
137
195
  !this.tabbingInBackwards &&
138
196
  !this.isClickingChart &&
139
- !focusComesFromChart &&
140
- this.modules[0]) {
141
- this.modules[0].init(1);
197
+ !focusComesFromChart) {
198
+ var ix = this.getFirstValidModuleIx();
199
+ if (ix !== null) {
200
+ this.currentModuleIx = ix;
201
+ this.modules[ix].init(1);
202
+ }
142
203
  }
143
204
  this.exiting = false;
144
205
  };
145
206
  /**
146
- * Reset chart navigation state if we click outside the chart and it's
147
- * not already reset.
207
+ * Reset chart navigation state if we mouse click and it's not already
208
+ * reset. Reset fully if outside the chart, otherwise just hide focus
209
+ * indicator.
148
210
  * @private
149
211
  */
150
212
  KeyboardNavigation.prototype.onMouseUp = function () {
151
213
  delete this.isClickingChart;
152
- if (!this.keyboardReset && !this.pointerIsOverChart) {
153
- var chart = this.chart, curMod = this.modules &&
154
- this.modules[this.currentModuleIx || 0];
155
- if (curMod && curMod.terminate) {
156
- curMod.terminate();
214
+ if (!this.keyboardReset) {
215
+ var chart = this.chart;
216
+ if (!this.pointerIsOverChart) {
217
+ var curMod = this.modules &&
218
+ this.modules[this.currentModuleIx || 0];
219
+ if (curMod && curMod.terminate) {
220
+ curMod.terminate();
221
+ }
222
+ this.currentModuleIx = 0;
157
223
  }
158
224
  if (chart.focusElement) {
159
225
  chart.focusElement.removeFocusBorder();
226
+ delete chart.focusElement;
160
227
  }
161
- this.currentModuleIx = 0;
162
228
  this.keyboardReset = true;
163
229
  }
164
230
  };
@@ -184,10 +250,10 @@ var KeyboardNavigation = /** @class */ (function () {
184
250
  preventDefault = true;
185
251
  }
186
252
  else if (response === curNavModule.response.prev) {
187
- preventDefault = this.prev();
253
+ preventDefault = this.move(-1);
188
254
  }
189
255
  else if (response === curNavModule.response.next) {
190
- preventDefault = this.next();
256
+ preventDefault = this.move(1);
191
257
  }
192
258
  if (preventDefault) {
193
259
  e.preventDefault();
@@ -195,78 +261,6 @@ var KeyboardNavigation = /** @class */ (function () {
195
261
  }
196
262
  }
197
263
  };
198
- /**
199
- * Go to previous module.
200
- * @private
201
- */
202
- KeyboardNavigation.prototype.prev = function () {
203
- return this.move(-1);
204
- };
205
- /**
206
- * Go to next module.
207
- * @private
208
- */
209
- KeyboardNavigation.prototype.next = function () {
210
- return this.move(1);
211
- };
212
- /**
213
- * Move to prev/next module.
214
- * @private
215
- * @param {number} direction
216
- * Direction to move. +1 for next, -1 for prev.
217
- * @return {boolean}
218
- * True if there was a valid module in direction.
219
- */
220
- KeyboardNavigation.prototype.move = function (direction) {
221
- var curModule = this.modules && this.modules[this.currentModuleIx];
222
- if (curModule && curModule.terminate) {
223
- curModule.terminate(direction);
224
- }
225
- // Remove existing focus border if any
226
- if (this.chart.focusElement) {
227
- this.chart.focusElement.removeFocusBorder();
228
- }
229
- this.currentModuleIx += direction;
230
- var newModule = this.modules && this.modules[this.currentModuleIx];
231
- if (newModule) {
232
- if (newModule.validate && !newModule.validate()) {
233
- return this.move(direction); // Invalid module, recurse
234
- }
235
- if (newModule.init) {
236
- newModule.init(direction); // Valid module, init it
237
- return true;
238
- }
239
- }
240
- // No module
241
- this.currentModuleIx = 0; // Reset counter
242
- // Set focus to chart or exit anchor depending on direction
243
- this.exiting = true;
244
- if (direction > 0) {
245
- this.exitAnchor.focus();
246
- }
247
- else {
248
- this.tabindexContainer.focus();
249
- }
250
- return false;
251
- };
252
- /**
253
- * We use an exit anchor to move focus out of chart whenever we want, by
254
- * setting focus to this div and not preventing the default tab action. We
255
- * also use this when users come back into the chart by tabbing back, in
256
- * order to navigate from the end of the chart.
257
- * @private
258
- */
259
- KeyboardNavigation.prototype.updateExitAnchor = function () {
260
- var endMarkerId = ('highcharts-end-of-chart-marker-' + this.chart.index), endMarker = getElement(endMarkerId);
261
- this.removeExitAnchor();
262
- if (endMarker) {
263
- this.makeElementAnExitAnchor(endMarker);
264
- this.exitAnchor = endMarker;
265
- }
266
- else {
267
- this.createExitAnchor();
268
- }
269
- };
270
264
  /**
271
265
  * Chart container should have tabindex if navigation is enabled.
272
266
  * @private
@@ -291,6 +285,17 @@ var KeyboardNavigation = /** @class */ (function () {
291
285
  }
292
286
  };
293
287
  /**
288
+ * Add new exit anchor to the chart.
289
+ * @private
290
+ */
291
+ KeyboardNavigation.prototype.createExitAnchor = function () {
292
+ var chart = this.chart, exitAnchor = this.exitAnchor = doc.createElement('div');
293
+ chart.renderTo.appendChild(exitAnchor);
294
+ this.makeElementAnExitAnchor(exitAnchor);
295
+ };
296
+ /**
297
+ * Add attributes and events to an element to make it function as an
298
+ * exit anchor.
294
299
  * @private
295
300
  */
296
301
  KeyboardNavigation.prototype.makeElementAnExitAnchor = function (el) {
@@ -302,26 +307,17 @@ var KeyboardNavigation = /** @class */ (function () {
302
307
  this.addExitAnchorEventsToEl(el);
303
308
  };
304
309
  /**
305
- * Add new exit anchor to the chart.
306
- *
307
- * @private
308
- */
309
- KeyboardNavigation.prototype.createExitAnchor = function () {
310
- var chart = this.chart, exitAnchor = this.exitAnchor = doc.createElement('div');
311
- chart.renderTo.appendChild(exitAnchor);
312
- this.makeElementAnExitAnchor(exitAnchor);
313
- };
314
- /**
310
+ * Destroy the exit anchor and remove from DOM.
315
311
  * @private
316
312
  */
317
313
  KeyboardNavigation.prototype.removeExitAnchor = function () {
318
314
  if (this.exitAnchor && this.exitAnchor.parentNode) {
319
- this.exitAnchor.parentNode
320
- .removeChild(this.exitAnchor);
315
+ this.exitAnchor.parentNode.removeChild(this.exitAnchor);
321
316
  delete this.exitAnchor;
322
317
  }
323
318
  };
324
319
  /**
320
+ * Add focus handler to exit anchor element.
325
321
  * @private
326
322
  */
327
323
  KeyboardNavigation.prototype.addExitAnchorEventsToEl = function (element) {
@@ -329,6 +325,9 @@ var KeyboardNavigation = /** @class */ (function () {
329
325
  this.eventProvider.addEvent(element, 'focus', function (ev) {
330
326
  var e = ev || win.event, focusComesFromChart = (e.relatedTarget &&
331
327
  chart.container.contains(e.relatedTarget)), comingInBackwards = !(focusComesFromChart || keyboardNavigation.exiting);
328
+ if (chart.focusElement) {
329
+ delete chart.focusElement;
330
+ }
332
331
  if (comingInBackwards) {
333
332
  // Focus the container instead
334
333
  keyboardNavigation.tabbingInBackwards = true;
@@ -346,7 +345,7 @@ var KeyboardNavigation = /** @class */ (function () {
346
345
  if (curModule &&
347
346
  curModule.validate && !curModule.validate()) {
348
347
  // Invalid. Try moving backwards to find next valid.
349
- keyboardNavigation.prev();
348
+ keyboardNavigation.move(-1);
350
349
  }
351
350
  else if (curModule) {
352
351
  // We have a valid module, init it
@@ -360,6 +359,21 @@ var KeyboardNavigation = /** @class */ (function () {
360
359
  }
361
360
  });
362
361
  };
362
+ /**
363
+ * Get the ix of the first module that either does not require validation or
364
+ * validates positively.
365
+ * @private
366
+ */
367
+ KeyboardNavigation.prototype.getFirstValidModuleIx = function () {
368
+ var len = this.modules.length;
369
+ for (var i = 0; i < len; ++i) {
370
+ var mod = this.modules[i];
371
+ if (!mod.validate || mod.validate()) {
372
+ return i;
373
+ }
374
+ }
375
+ return null;
376
+ };
363
377
  /**
364
378
  * Remove all traces of keyboard navigation.
365
379
  * @private
@@ -395,6 +409,7 @@ var KeyboardNavigation = /** @class */ (function () {
395
409
  * */
396
410
  /* eslint-disable valid-jsdoc */
397
411
  /**
412
+ * Composition function.
398
413
  * @private
399
414
  */
400
415
  function compose(ChartClass) {
@@ -90,9 +90,15 @@ var ProxyElement = /** @class */ (function () {
90
90
  ProxyElement.prototype.updateTarget = function (target, attributes) {
91
91
  this.target = target;
92
92
  this.updateCSSClassName();
93
+ var attrs = attributes || {};
94
+ Object.keys(attrs).forEach(function (a) {
95
+ if (attrs[a] === null) {
96
+ delete attrs[a];
97
+ }
98
+ });
93
99
  attr(this.buttonElement, merge({
94
100
  'aria-label': this.getTargetAttr(target.click, 'aria-label')
95
- }, attributes));
101
+ }, attrs));
96
102
  this.eventProvider.removeAddedEvents();
97
103
  this.addProxyEventsToButton(this.buttonElement, target.click);
98
104
  this.refreshPosition();
@@ -189,12 +195,14 @@ var ProxyElement = /** @class */ (function () {
189
195
  var posElement = this.target.visual || clickTargetElement;
190
196
  var chartDiv = this.chart.renderTo;
191
197
  if (chartDiv && posElement && posElement.getBoundingClientRect) {
192
- var rectEl = posElement.getBoundingClientRect(), rectDiv = chartDiv.getBoundingClientRect();
198
+ var rectEl = posElement.getBoundingClientRect(), chartPos = this.chart.pointer.getChartPosition();
193
199
  return {
194
- x: rectEl.left - rectDiv.left,
195
- y: rectEl.top - rectDiv.top,
196
- width: rectEl.right - rectEl.left,
197
- height: rectEl.bottom - rectEl.top
200
+ x: (rectEl.left - chartPos.left) / chartPos.scaleX,
201
+ y: (rectEl.top - chartPos.top) / chartPos.scaleY,
202
+ width: rectEl.right / chartPos.scaleX -
203
+ rectEl.left / chartPos.scaleX,
204
+ height: rectEl.bottom / chartPos.scaleY -
205
+ rectEl.top / chartPos.scaleY
198
206
  };
199
207
  }
200
208
  return { x: 0, y: 0, width: 1, height: 1 };
@@ -72,10 +72,13 @@ var ProxyProvider = /** @class */ (function () {
72
72
  /**
73
73
  * Create a group that will contain proxy elements. The group order is
74
74
  * automatically updated according to the last group order keys.
75
+ *
76
+ * Returns the added group.
75
77
  */
76
78
  ProxyProvider.prototype.addGroup = function (groupKey, groupType, attributes) {
77
- if (this.groups[groupKey]) {
78
- return;
79
+ var existingGroup = this.groups[groupKey];
80
+ if (existingGroup) {
81
+ return existingGroup.groupElement;
79
82
  }
80
83
  var proxyContainer = this.domElementProvider.createElement(groupType);
81
84
  // If we want to add a role to the group, and still use e.g.
@@ -104,6 +107,7 @@ var ProxyProvider = /** @class */ (function () {
104
107
  // won't have to reorder the whole set of groups.
105
108
  this.afterChartProxyPosContainer.appendChild(groupElement);
106
109
  this.updateGroupOrder(this.groupOrder);
110
+ return groupElement;
107
111
  };
108
112
  /**
109
113
  * Update HTML attributes of a group.
@@ -286,6 +290,10 @@ var ProxyProvider = /** @class */ (function () {
286
290
  */
287
291
  ProxyProvider.prototype.updatePosContainerPositions = function () {
288
292
  var chart = this.chart;
293
+ // If exporting, don't add these containers to the DOM.
294
+ if (chart.renderer.forExport) {
295
+ return;
296
+ }
289
297
  var rendererSVGEl = chart.renderer.box;
290
298
  chart.container.insertBefore(this.afterChartProxyPosContainer, rendererSVGEl.nextSibling);
291
299
  chart.container.insertBefore(this.beforeChartProxyPosContainer, rendererSVGEl);