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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v9.3.3 (2022-02-01)
2
+ * @license Highcharts JS v10.0.0 (2022-03-07)
3
3
  *
4
4
  * Accessibility module
5
5
  *
@@ -8,7 +8,6 @@
8
8
  *
9
9
  * License: www.highcharts.com/license
10
10
  */
11
- 'use strict';
12
11
  (function (factory) {
13
12
  if (typeof module === 'object' && module.exports) {
14
13
  factory['default'] = factory;
@@ -23,10 +22,20 @@
23
22
  factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
24
23
  }
25
24
  }(function (Highcharts) {
25
+ 'use strict';
26
26
  var _modules = Highcharts ? Highcharts._modules : {};
27
27
  function _registerModule(obj, path, args, fn) {
28
28
  if (!obj.hasOwnProperty(path)) {
29
29
  obj[path] = fn.apply(null, args);
30
+
31
+ if (typeof CustomEvent === 'function') {
32
+ window.dispatchEvent(
33
+ new CustomEvent(
34
+ 'HighchartsModuleLoaded',
35
+ { detail: { path: path, module: obj[path] }
36
+ })
37
+ );
38
+ }
30
39
  }
31
40
  }
32
41
  _registerModule(_modules, 'Accessibility/A11yI18n.js', [_modules['Core/FormatUtilities.js'], _modules['Core/Utilities.js']], function (F, U) {
@@ -2758,7 +2767,6 @@
2758
2767
  if (menu) {
2759
2768
  menu.setAttribute('aria-hidden', 'true');
2760
2769
  }
2761
- this.isExportMenuShown = false;
2762
2770
  this.setExportButtonExpandedState('false');
2763
2771
  };
2764
2772
  /**
@@ -2771,7 +2779,6 @@
2771
2779
  this.addAccessibleContextMenuAttribs();
2772
2780
  unhideChartElementFromAT(chart, menu);
2773
2781
  }
2774
- this.isExportMenuShown = true;
2775
2782
  this.setExportButtonExpandedState('true');
2776
2783
  };
2777
2784
  /**
@@ -2817,7 +2824,8 @@
2817
2824
  chart: chart,
2818
2825
  chartTitle: getChartTitle(chart)
2819
2826
  }),
2820
- 'aria-expanded': false
2827
+ 'aria-expanded': false,
2828
+ title: chart.options.lang.contextButtonTitle || null
2821
2829
  });
2822
2830
  }
2823
2831
  };
@@ -2971,7 +2979,7 @@
2971
2979
  var chart = this.chart;
2972
2980
  var curHighlightedItem = chart.exportDivElements[chart.highlightedExportItemIx];
2973
2981
  var exportButtonElement = getExportMenuButtonElement(chart).element;
2974
- if (this.isExportMenuShown) {
2982
+ if (chart.openMenu) {
2975
2983
  this.fakeClickEvent(curHighlightedItem);
2976
2984
  }
2977
2985
  else {
@@ -3041,7 +3049,7 @@
3041
3049
  function chartHideExportMenu() {
3042
3050
  var chart = this,
3043
3051
  exportList = chart.exportDivElements;
3044
- if (exportList && chart.exportContextMenu) {
3052
+ if (exportList && chart.exportContextMenu && chart.openMenu) {
3045
3053
  // Reset hover states etc.
3046
3054
  exportList.forEach(function (el) {
3047
3055
  if (el &&
@@ -3239,6 +3247,65 @@
3239
3247
  this.removeExitAnchor();
3240
3248
  }
3241
3249
  };
3250
+ /**
3251
+ * We use an exit anchor to move focus out of chart whenever we want, by
3252
+ * setting focus to this div and not preventing the default tab action. We
3253
+ * also use this when users come back into the chart by tabbing back, in
3254
+ * order to navigate from the end of the chart.
3255
+ * @private
3256
+ */
3257
+ KeyboardNavigation.prototype.updateExitAnchor = function () {
3258
+ var endMarkerId = "highcharts-end-of-chart-marker-" + this.chart.index,
3259
+ endMarker = getElement(endMarkerId);
3260
+ this.removeExitAnchor();
3261
+ if (endMarker) {
3262
+ this.makeElementAnExitAnchor(endMarker);
3263
+ this.exitAnchor = endMarker;
3264
+ }
3265
+ else {
3266
+ this.createExitAnchor();
3267
+ }
3268
+ };
3269
+ /**
3270
+ * Move to prev/next module.
3271
+ * @private
3272
+ * @param {number} direction
3273
+ * Direction to move. +1 for next, -1 for prev.
3274
+ * @return {boolean}
3275
+ * True if there was a valid module in direction.
3276
+ */
3277
+ KeyboardNavigation.prototype.move = function (direction) {
3278
+ var curModule = this.modules && this.modules[this.currentModuleIx];
3279
+ if (curModule && curModule.terminate) {
3280
+ curModule.terminate(direction);
3281
+ }
3282
+ // Remove existing focus border if any
3283
+ if (this.chart.focusElement) {
3284
+ this.chart.focusElement.removeFocusBorder();
3285
+ }
3286
+ this.currentModuleIx += direction;
3287
+ var newModule = this.modules && this.modules[this.currentModuleIx];
3288
+ if (newModule) {
3289
+ if (newModule.validate && !newModule.validate()) {
3290
+ return this.move(direction); // Invalid module, recurse
3291
+ }
3292
+ if (newModule.init) {
3293
+ newModule.init(direction); // Valid module, init it
3294
+ return true;
3295
+ }
3296
+ }
3297
+ // No module
3298
+ this.currentModuleIx = 0; // Reset counter
3299
+ // Set focus to chart or exit anchor depending on direction
3300
+ this.exiting = true;
3301
+ if (direction > 0) {
3302
+ this.exitAnchor.focus();
3303
+ }
3304
+ else {
3305
+ this.tabindexContainer.focus();
3306
+ }
3307
+ return false;
3308
+ };
3242
3309
  /**
3243
3310
  * Function to run on container focus
3244
3311
  * @private
@@ -3252,30 +3319,37 @@
3252
3319
  if (!this.exiting &&
3253
3320
  !this.tabbingInBackwards &&
3254
3321
  !this.isClickingChart &&
3255
- !focusComesFromChart &&
3256
- this.modules[0]) {
3257
- this.modules[0].init(1);
3322
+ !focusComesFromChart) {
3323
+ var ix = this.getFirstValidModuleIx();
3324
+ if (ix !== null) {
3325
+ this.currentModuleIx = ix;
3326
+ this.modules[ix].init(1);
3327
+ }
3258
3328
  }
3259
3329
  this.exiting = false;
3260
3330
  };
3261
3331
  /**
3262
- * Reset chart navigation state if we click outside the chart and it's
3263
- * not already reset.
3332
+ * Reset chart navigation state if we mouse click and it's not already
3333
+ * reset. Reset fully if outside the chart, otherwise just hide focus
3334
+ * indicator.
3264
3335
  * @private
3265
3336
  */
3266
3337
  KeyboardNavigation.prototype.onMouseUp = function () {
3267
3338
  delete this.isClickingChart;
3268
- if (!this.keyboardReset && !this.pointerIsOverChart) {
3269
- var chart = this.chart,
3270
- curMod = this.modules &&
3271
- this.modules[this.currentModuleIx || 0];
3272
- if (curMod && curMod.terminate) {
3273
- curMod.terminate();
3339
+ if (!this.keyboardReset) {
3340
+ var chart = this.chart;
3341
+ if (!this.pointerIsOverChart) {
3342
+ var curMod = this.modules &&
3343
+ this.modules[this.currentModuleIx || 0];
3344
+ if (curMod && curMod.terminate) {
3345
+ curMod.terminate();
3346
+ }
3347
+ this.currentModuleIx = 0;
3274
3348
  }
3275
3349
  if (chart.focusElement) {
3276
3350
  chart.focusElement.removeFocusBorder();
3351
+ delete chart.focusElement;
3277
3352
  }
3278
- this.currentModuleIx = 0;
3279
3353
  this.keyboardReset = true;
3280
3354
  }
3281
3355
  };
@@ -3302,10 +3376,10 @@
3302
3376
  preventDefault = true;
3303
3377
  }
3304
3378
  else if (response === curNavModule.response.prev) {
3305
- preventDefault = this.prev();
3379
+ preventDefault = this.move(-1);
3306
3380
  }
3307
3381
  else if (response === curNavModule.response.next) {
3308
- preventDefault = this.next();
3382
+ preventDefault = this.move(1);
3309
3383
  }
3310
3384
  if (preventDefault) {
3311
3385
  e.preventDefault();
@@ -3313,79 +3387,6 @@
3313
3387
  }
3314
3388
  }
3315
3389
  };
3316
- /**
3317
- * Go to previous module.
3318
- * @private
3319
- */
3320
- KeyboardNavigation.prototype.prev = function () {
3321
- return this.move(-1);
3322
- };
3323
- /**
3324
- * Go to next module.
3325
- * @private
3326
- */
3327
- KeyboardNavigation.prototype.next = function () {
3328
- return this.move(1);
3329
- };
3330
- /**
3331
- * Move to prev/next module.
3332
- * @private
3333
- * @param {number} direction
3334
- * Direction to move. +1 for next, -1 for prev.
3335
- * @return {boolean}
3336
- * True if there was a valid module in direction.
3337
- */
3338
- KeyboardNavigation.prototype.move = function (direction) {
3339
- var curModule = this.modules && this.modules[this.currentModuleIx];
3340
- if (curModule && curModule.terminate) {
3341
- curModule.terminate(direction);
3342
- }
3343
- // Remove existing focus border if any
3344
- if (this.chart.focusElement) {
3345
- this.chart.focusElement.removeFocusBorder();
3346
- }
3347
- this.currentModuleIx += direction;
3348
- var newModule = this.modules && this.modules[this.currentModuleIx];
3349
- if (newModule) {
3350
- if (newModule.validate && !newModule.validate()) {
3351
- return this.move(direction); // Invalid module, recurse
3352
- }
3353
- if (newModule.init) {
3354
- newModule.init(direction); // Valid module, init it
3355
- return true;
3356
- }
3357
- }
3358
- // No module
3359
- this.currentModuleIx = 0; // Reset counter
3360
- // Set focus to chart or exit anchor depending on direction
3361
- this.exiting = true;
3362
- if (direction > 0) {
3363
- this.exitAnchor.focus();
3364
- }
3365
- else {
3366
- this.tabindexContainer.focus();
3367
- }
3368
- return false;
3369
- };
3370
- /**
3371
- * We use an exit anchor to move focus out of chart whenever we want, by
3372
- * setting focus to this div and not preventing the default tab action. We
3373
- * also use this when users come back into the chart by tabbing back, in
3374
- * order to navigate from the end of the chart.
3375
- * @private
3376
- */
3377
- KeyboardNavigation.prototype.updateExitAnchor = function () {
3378
- var endMarkerId = ('highcharts-end-of-chart-marker-' + this.chart.index),
3379
- endMarker = getElement(endMarkerId);
3380
- this.removeExitAnchor();
3381
- if (endMarker) {
3382
- this.makeElementAnExitAnchor(endMarker);
3383
- this.exitAnchor = endMarker;
3384
- }
3385
- else {
3386
- this.createExitAnchor();
3387
- }
3388
- };
3389
3390
  /**
3390
3391
  * Chart container should have tabindex if navigation is enabled.
3391
3392
  * @private
@@ -3414,6 +3415,18 @@
3414
3415
  }
3415
3416
  };
3416
3417
  /**
3418
+ * Add new exit anchor to the chart.
3419
+ * @private
3420
+ */
3421
+ KeyboardNavigation.prototype.createExitAnchor = function () {
3422
+ var chart = this.chart,
3423
+ exitAnchor = this.exitAnchor = doc.createElement('div');
3424
+ chart.renderTo.appendChild(exitAnchor);
3425
+ this.makeElementAnExitAnchor(exitAnchor);
3426
+ };
3427
+ /**
3428
+ * Add attributes and events to an element to make it function as an
3429
+ * exit anchor.
3417
3430
  * @private
3418
3431
  */
3419
3432
  KeyboardNavigation.prototype.makeElementAnExitAnchor = function (el) {
@@ -3425,27 +3438,17 @@
3425
3438
  this.addExitAnchorEventsToEl(el);
3426
3439
  };
3427
3440
  /**
3428
- * Add new exit anchor to the chart.
3429
- *
3430
- * @private
3431
- */
3432
- KeyboardNavigation.prototype.createExitAnchor = function () {
3433
- var chart = this.chart,
3434
- exitAnchor = this.exitAnchor = doc.createElement('div');
3435
- chart.renderTo.appendChild(exitAnchor);
3436
- this.makeElementAnExitAnchor(exitAnchor);
3437
- };
3438
- /**
3441
+ * Destroy the exit anchor and remove from DOM.
3439
3442
  * @private
3440
3443
  */
3441
3444
  KeyboardNavigation.prototype.removeExitAnchor = function () {
3442
3445
  if (this.exitAnchor && this.exitAnchor.parentNode) {
3443
- this.exitAnchor.parentNode
3444
- .removeChild(this.exitAnchor);
3446
+ this.exitAnchor.parentNode.removeChild(this.exitAnchor);
3445
3447
  delete this.exitAnchor;
3446
3448
  }
3447
3449
  };
3448
3450
  /**
3451
+ * Add focus handler to exit anchor element.
3449
3452
  * @private
3450
3453
  */
3451
3454
  KeyboardNavigation.prototype.addExitAnchorEventsToEl = function (element) {
@@ -3456,6 +3459,9 @@
3456
3459
  focusComesFromChart = (e.relatedTarget &&
3457
3460
  chart.container.contains(e.relatedTarget)),
3458
3461
  comingInBackwards = !(focusComesFromChart || keyboardNavigation.exiting);
3462
+ if (chart.focusElement) {
3463
+ delete chart.focusElement;
3464
+ }
3459
3465
  if (comingInBackwards) {
3460
3466
  // Focus the container instead
3461
3467
  keyboardNavigation.tabbingInBackwards = true;
@@ -3473,7 +3479,7 @@
3473
3479
  if (curModule &&
3474
3480
  curModule.validate && !curModule.validate()) {
3475
3481
  // Invalid. Try moving backwards to find next valid.
3476
- keyboardNavigation.prev();
3482
+ keyboardNavigation.move(-1);
3477
3483
  }
3478
3484
  else if (curModule) {
3479
3485
  // We have a valid module, init it
@@ -3487,6 +3493,21 @@
3487
3493
  }
3488
3494
  });
3489
3495
  };
3496
+ /**
3497
+ * Get the ix of the first module that either does not require validation or
3498
+ * validates positively.
3499
+ * @private
3500
+ */
3501
+ KeyboardNavigation.prototype.getFirstValidModuleIx = function () {
3502
+ var len = this.modules.length;
3503
+ for (var i = 0; i < len; ++i) {
3504
+ var mod = this.modules[i];
3505
+ if (!mod.validate || mod.validate()) {
3506
+ return i;
3507
+ }
3508
+ }
3509
+ return null;
3510
+ };
3490
3511
  /**
3491
3512
  * Remove all traces of keyboard navigation.
3492
3513
  * @private
@@ -3522,6 +3543,7 @@
3522
3543
  * */
3523
3544
  /* eslint-disable valid-jsdoc */
3524
3545
  /**
3546
+ * Composition function.
3525
3547
  * @private
3526
3548
  */
3527
3549
  function compose(ChartClass) {
@@ -3605,6 +3627,7 @@
3605
3627
  };
3606
3628
  })();
3607
3629
  var animObject = A.animObject;
3630
+ var doc = H.doc;
3608
3631
  var addEvent = U.addEvent,
3609
3632
  fireEvent = U.fireEvent,
3610
3633
  isNumber = U.isNumber,
@@ -3640,6 +3663,19 @@
3640
3663
  !(chart.colorAxis && chart.colorAxis.length) &&
3641
3664
  legendA11yOptions.enabled !== false);
3642
3665
  }
3666
+ /**
3667
+ * @private
3668
+ */
3669
+ function setLegendItemHoverState(hoverActive, legendItem) {
3670
+ legendItem.setState(hoverActive ? 'hover' : '', true);
3671
+ ['legendGroup', 'legendItem', 'legendSymbol'].forEach(function (i) {
3672
+ var obj = legendItem[i];
3673
+ var el = obj && obj.element || obj;
3674
+ if (el) {
3675
+ fireEvent(el, hoverActive ? 'mouseover' : 'mouseout');
3676
+ }
3677
+ });
3678
+ }
3643
3679
  /* *
3644
3680
  *
3645
3681
  * Class
@@ -3663,6 +3699,7 @@
3663
3699
  var _this = _super !== null && _super.apply(this,
3664
3700
  arguments) || this;
3665
3701
  _this.highlightedLegendItemIx = NaN;
3702
+ _this.proxyGroup = null;
3666
3703
  return _this;
3667
3704
  }
3668
3705
  /* *
@@ -3788,12 +3825,19 @@
3788
3825
  * @private
3789
3826
  */
3790
3827
  LegendComponent.prototype.recreateProxies = function () {
3828
+ var focusedElement = doc.activeElement;
3829
+ var proxyGroup = this.proxyGroup;
3830
+ var shouldRestoreFocus = focusedElement && proxyGroup &&
3831
+ proxyGroup.contains(focusedElement);
3791
3832
  this.removeProxies();
3792
3833
  if (shouldDoLegendA11y(this.chart)) {
3793
3834
  this.addLegendProxyGroup();
3794
3835
  this.proxyLegendItems();
3795
3836
  this.updateLegendItemProxyVisibility();
3796
3837
  this.updateLegendTitle();
3838
+ if (shouldRestoreFocus) {
3839
+ this.chart.highlightLegendItem(this.highlightedLegendItemIx);
3840
+ }
3797
3841
  return true;
3798
3842
  }
3799
3843
  return false;
@@ -3829,7 +3873,7 @@
3829
3873
  var a11yOptions = this.chart.options.accessibility;
3830
3874
  var groupRole = a11yOptions.landmarkVerbosity === 'all' ?
3831
3875
  'region' : null;
3832
- this.proxyProvider.addGroup('legend', 'ul', {
3876
+ this.proxyGroup = this.proxyProvider.addGroup('legend', 'ul', {
3833
3877
  // Filled by updateLegendTitle, to keep up to date without
3834
3878
  // recreating group
3835
3879
  'aria-label': '_placeholder_',
@@ -3913,21 +3957,19 @@
3913
3957
  validate: function () {
3914
3958
  return component.shouldHaveLegendNavigation();
3915
3959
  },
3916
- init: function (direction) {
3917
- return component.onKbdNavigationInit(direction);
3960
+ init: function () {
3961
+ chart.highlightLegendItem(0);
3962
+ component.highlightedLegendItemIx = 0;
3918
3963
  },
3919
3964
  terminate: function () {
3920
3965
  component.highlightedLegendItemIx = -1;
3921
- chart.legend.allItems.forEach(function (item) { return item.setState('', true); });
3966
+ chart.legend.allItems.forEach(function (item) { return setLegendItemHoverState(false, item); });
3922
3967
  }
3923
3968
  });
3924
3969
  };
3925
3970
  /**
3971
+ * Arrow key navigation
3926
3972
  * @private
3927
- * @param {Highcharts.KeyboardNavigationHandler} keyboardNavigationHandler
3928
- * @param {number} keyCode
3929
- * @return {number}
3930
- * Response code
3931
3973
  */
3932
3974
  LegendComponent.prototype.onKbdArrowKey = function (keyboardNavigationHandler, keyCode) {
3933
3975
  var keys = this.keyCodes,
@@ -3946,8 +3988,7 @@
3946
3988
  keyboardNavigationHandler.init(direction);
3947
3989
  return response.success;
3948
3990
  }
3949
- // No wrap, move
3950
- return response[direction > 0 ? 'next' : 'prev'];
3991
+ return response.success;
3951
3992
  };
3952
3993
  /**
3953
3994
  * @private
@@ -3977,17 +4018,6 @@
3977
4018
  legendA11yOptions.keyboardNavigation &&
3978
4019
  legendA11yOptions.keyboardNavigation.enabled);
3979
4020
  };
3980
- /**
3981
- * @private
3982
- * @param {number} direction
3983
- */
3984
- LegendComponent.prototype.onKbdNavigationInit = function (direction) {
3985
- var chart = this.chart,
3986
- lastIx = chart.legend.allItems.length - 1,
3987
- ixToHighlight = direction > 0 ? 0 : lastIx;
3988
- chart.highlightLegendItem(ixToHighlight);
3989
- this.highlightedLegendItemIx = ixToHighlight;
3990
- };
3991
4021
  return LegendComponent;
3992
4022
  }(AccessibilityComponent));
3993
4023
  /* *
@@ -4024,7 +4054,7 @@
4024
4054
  var itemToHighlight = items[ix];
4025
4055
  if (itemToHighlight) {
4026
4056
  if (isNumber(oldIx) && items[oldIx]) {
4027
- fireEvent(items[oldIx].legendGroup.element, 'mouseout');
4057
+ setLegendItemHoverState(false, items[oldIx]);
4028
4058
  }
4029
4059
  scrollLegendToItem(this.legend, ix);
4030
4060
  var legendItemProp = itemToHighlight.legendItem;
@@ -4033,9 +4063,7 @@
4033
4063
  if (legendItemProp && legendItemProp.element && proxyBtn) {
4034
4064
  this.setFocusToElement(legendItemProp, proxyBtn);
4035
4065
  }
4036
- if (itemToHighlight.legendGroup) {
4037
- fireEvent(itemToHighlight.legendGroup.element, 'mouseover');
4038
- }
4066
+ setLegendItemHoverState(true, itemToHighlight);
4039
4067
  return true;
4040
4068
  }
4041
4069
  return false;
@@ -4379,9 +4407,9 @@
4379
4407
  * @private
4380
4408
  */
4381
4409
  function defaultPointDescriptionFormatter(point) {
4382
- var series = point.series, chart = series.chart, valText = getPointValueDescription(point), description = point.options && point.options.accessibility &&
4383
- point.options.accessibility.description, userDescText = description ? ' ' + description : '', seriesNameText = chart.series.length > 1 && series.name ?
4384
- ' ' + series.name + '.' : '', annotationsDesc = getPointAnnotationDescription(point), pointAnnotationsText = annotationsDesc ? ' ' + annotationsDesc : '';
4410
+ var series = point.series, shouldExposeSeriesName = series.chart.series.length > 1 ||
4411
+ series.options.name, valText = getPointValueDescription(point), description = point.options && point.options.accessibility &&
4412
+ point.options.accessibility.description, userDescText = description ? ' ' + description : '', seriesNameText = shouldExposeSeriesName ? ' ' + series.name + '.' : '', annotationsDesc = getPointAnnotationDescription(point), pointAnnotationsText = annotationsDesc ? ' ' + annotationsDesc : '';
4385
4413
  point.accessibility = point.accessibility || {};
4386
4414
  point.accessibility.valueDescription = valText;
4387
4415
  return valText + userDescText + seriesNameText + pointAnnotationsText;
@@ -4641,7 +4669,7 @@
4641
4669
  var announcer = this,
4642
4670
  chart = this.chart,
4643
4671
  e = this.eventProvider;
4644
- e.addEvent(chart, 'afterDrilldown', function () {
4672
+ e.addEvent(chart, 'afterApplyDrilldown', function () {
4645
4673
  announcer.lastAnnouncementTime = 0;
4646
4674
  });
4647
4675
  e.addEvent(chart, 'afterAddSeries', function (e) {
@@ -4951,9 +4979,15 @@
4951
4979
  ProxyElement.prototype.updateTarget = function (target, attributes) {
4952
4980
  this.target = target;
4953
4981
  this.updateCSSClassName();
4982
+ var attrs = attributes || {};
4983
+ Object.keys(attrs).forEach(function (a) {
4984
+ if (attrs[a] === null) {
4985
+ delete attrs[a];
4986
+ }
4987
+ });
4954
4988
  attr(this.buttonElement, merge({
4955
4989
  'aria-label': this.getTargetAttr(target.click, 'aria-label')
4956
- }, attributes));
4990
+ }, attrs));
4957
4991
  this.eventProvider.removeAddedEvents();
4958
4992
  this.addProxyEventsToButton(this.buttonElement, target.click);
4959
4993
  this.refreshPosition();
@@ -5051,12 +5085,14 @@
5051
5085
  var chartDiv = this.chart.renderTo;
5052
5086
  if (chartDiv && posElement && posElement.getBoundingClientRect) {
5053
5087
  var rectEl = posElement.getBoundingClientRect(),
5054
- rectDiv = chartDiv.getBoundingClientRect();
5088
+ chartPos = this.chart.pointer.getChartPosition();
5055
5089
  return {
5056
- x: rectEl.left - rectDiv.left,
5057
- y: rectEl.top - rectDiv.top,
5058
- width: rectEl.right - rectEl.left,
5059
- height: rectEl.bottom - rectEl.top
5090
+ x: (rectEl.left - chartPos.left) / chartPos.scaleX,
5091
+ y: (rectEl.top - chartPos.top) / chartPos.scaleY,
5092
+ width: rectEl.right / chartPos.scaleX -
5093
+ rectEl.left / chartPos.scaleX,
5094
+ height: rectEl.bottom / chartPos.scaleY -
5095
+ rectEl.top / chartPos.scaleY
5060
5096
  };
5061
5097
  }
5062
5098
  return { x: 0, y: 0, width: 1, height: 1 };
@@ -5153,10 +5189,13 @@
5153
5189
  /**
5154
5190
  * Create a group that will contain proxy elements. The group order is
5155
5191
  * automatically updated according to the last group order keys.
5192
+ *
5193
+ * Returns the added group.
5156
5194
  */
5157
5195
  ProxyProvider.prototype.addGroup = function (groupKey, groupType, attributes) {
5158
- if (this.groups[groupKey]) {
5159
- return;
5196
+ var existingGroup = this.groups[groupKey];
5197
+ if (existingGroup) {
5198
+ return existingGroup.groupElement;
5160
5199
  }
5161
5200
  var proxyContainer = this.domElementProvider.createElement(groupType);
5162
5201
  // If we want to add a role to the group, and still use e.g.
@@ -5185,6 +5224,7 @@
5185
5224
  // won't have to reorder the whole set of groups.
5186
5225
  this.afterChartProxyPosContainer.appendChild(groupElement);
5187
5226
  this.updateGroupOrder(this.groupOrder);
5227
+ return groupElement;
5188
5228
  };
5189
5229
  /**
5190
5230
  * Update HTML attributes of a group.
@@ -5368,6 +5408,10 @@
5368
5408
  */
5369
5409
  ProxyProvider.prototype.updatePosContainerPositions = function () {
5370
5410
  var chart = this.chart;
5411
+ // If exporting, don't add these containers to the DOM.
5412
+ if (chart.renderer.forExport) {
5413
+ return;
5414
+ }
5371
5415
  var rendererSVGEl = chart.renderer.box;
5372
5416
  chart.container.insertBefore(this.afterChartProxyPosContainer, rendererSVGEl.nextSibling);
5373
5417
  chart.container.insertBefore(this.beforeChartProxyPosContainer, rendererSVGEl);
@@ -7981,7 +8025,7 @@
7981
8025
  if (chart.accessibility) {
7982
8026
  chart.accessibility.keyboardNavigation.tabindexContainer
7983
8027
  .focus();
7984
- chart.accessibility.keyboardNavigation[direction < 0 ? 'prev' : 'next']();
8028
+ chart.accessibility.keyboardNavigation.move(direction);
7985
8029
  }
7986
8030
  }
7987
8031
  else if (rangeSel) {
@@ -8072,7 +8116,7 @@
8072
8116
  e.stopPropagation();
8073
8117
  if (a11y) {
8074
8118
  a11y.keyboardNavigation.tabindexContainer.focus();
8075
- a11y.keyboardNavigation[e.shiftKey ? 'prev' : 'next']();
8119
+ a11y.keyboardNavigation.move(e.shiftKey ? -1 : 1);
8076
8120
  }
8077
8121
  }
8078
8122
  });
@@ -8430,6 +8474,7 @@
8430
8474
  else if (series.a11yMarkersForced) {
8431
8475
  delete series.a11yMarkersForced;
8432
8476
  unforceSeriesMarkerOptions(series);
8477
+ delete series.resetA11yMarkerOptions;
8433
8478
  }
8434
8479
  }
8435
8480
  /**
@@ -8457,20 +8502,20 @@
8457
8502
  });
8458
8503
  }
8459
8504
  /**
8505
+ * Reset markers to normal
8460
8506
  * @private
8461
8507
  */
8462
8508
  function unforceSeriesMarkerOptions(series) {
8463
8509
  var resetMarkerOptions = series.resetA11yMarkerOptions;
8464
8510
  if (resetMarkerOptions) {
8465
- merge(true, series.options, {
8511
+ var originalOpactiy = resetMarkerOptions.states &&
8512
+ resetMarkerOptions.states.normal &&
8513
+ resetMarkerOptions.states.normal.opacity;
8514
+ series.update({
8466
8515
  marker: {
8467
8516
  enabled: resetMarkerOptions.enabled,
8468
8517
  states: {
8469
- normal: {
8470
- opacity: resetMarkerOptions.states &&
8471
- resetMarkerOptions.states.normal &&
8472
- resetMarkerOptions.states.normal.opacity
8473
- }
8518
+ normal: { opacity: originalOpactiy }
8474
8519
  }
8475
8520
  }
8476
8521
  });
@@ -8570,6 +8615,37 @@
8570
8615
  pointA11yDisabled ||
8571
8616
  isSkipSeries(point.series);
8572
8617
  }
8618
+ /**
8619
+ * Get the first point that is not a skip point in this series.
8620
+ * @private
8621
+ */
8622
+ function getFirstValidPointInSeries(series) {
8623
+ var points = series.points || [],
8624
+ len = points.length;
8625
+ for (var i = 0; i < len; ++i) {
8626
+ if (!isSkipPoint(points[i])) {
8627
+ return points[i];
8628
+ }
8629
+ }
8630
+ return null;
8631
+ }
8632
+ /**
8633
+ * Get the first point that is not a skip point in this chart.
8634
+ * @private
8635
+ */
8636
+ function getFirstValidPointInChart(chart) {
8637
+ var series = chart.series || [],
8638
+ len = series.length;
8639
+ for (var i = 0; i < len; ++i) {
8640
+ if (!isSkipSeries(series[i])) {
8641
+ var point = getFirstValidPointInSeries(series[i]);
8642
+ if (point) {
8643
+ return point;
8644
+ }
8645
+ }
8646
+ }
8647
+ return null;
8648
+ }
8573
8649
  /**
8574
8650
  * @private
8575
8651
  */
@@ -8582,7 +8658,7 @@
8582
8658
  // Highlight first valid point in the series will also
8583
8659
  // look backwards. It always starts from currently
8584
8660
  // highlighted point.
8585
- res = chart.series[i].highlightFirstValidPoint();
8661
+ res = chart.series[i].highlightNextValidPoint();
8586
8662
  if (res) {
8587
8663
  break;
8588
8664
  }
@@ -8590,24 +8666,24 @@
8590
8666
  return res;
8591
8667
  }
8592
8668
  /**
8669
+ * After drilling down/up, we need to set focus to the first point for
8670
+ * screen readers and keyboard nav.
8593
8671
  * @private
8594
8672
  */
8595
8673
  function updateChartFocusAfterDrilling(chart) {
8596
- highlightFirstValidPointInChart(chart);
8597
- if (chart.focusElement) {
8598
- chart.focusElement.removeFocusBorder();
8674
+ var point = getFirstValidPointInChart(chart);
8675
+ if (point) {
8676
+ point.highlight(false); // Do not visually highlight
8599
8677
  }
8600
8678
  }
8601
8679
  /**
8680
+ * Highlight the first point in chart that is not a skip point
8602
8681
  * @private
8603
8682
  */
8604
8683
  function highlightFirstValidPointInChart(chart) {
8605
- var res = false;
8606
8684
  delete chart.highlightedPoint;
8607
- res = chart.series.reduce(function (acc, cur) {
8608
- return acc || cur.highlightFirstValidPoint();
8609
- }, false);
8610
- return res;
8685
+ var point = getFirstValidPointInChart(chart);
8686
+ return point ? point.highlight() : false;
8611
8687
  }
8612
8688
  /* *
8613
8689
  *
@@ -8645,7 +8721,7 @@
8645
8721
  e.addEvent(Series, 'destroy', function () {
8646
8722
  return keyboardNavigation.onSeriesDestroy(this);
8647
8723
  });
8648
- e.addEvent(chart, 'afterDrilldown', function () {
8724
+ e.addEvent(chart, 'afterApplyDrilldown', function () {
8649
8725
  updateChartFocusAfterDrilling(this);
8650
8726
  });
8651
8727
  e.addEvent(chart, 'drilldown', function (e) {
@@ -8685,11 +8761,11 @@
8685
8761
  });
8686
8762
  };
8687
8763
  /**
8764
+ * After drillup we want to find the point that was drilled down to and
8765
+ * highlight it.
8688
8766
  * @private
8689
8767
  */
8690
8768
  SeriesKeyboardNavigation.prototype.onDrillupAll = function () {
8691
- // After drillup we want to find the point that was drilled down to and
8692
- // highlight it.
8693
8769
  var last = this.lastDrilledDownPoint,
8694
8770
  chart = this.chart,
8695
8771
  series = last && getSeriesFromName(chart,
@@ -8698,15 +8774,13 @@
8698
8774
  if (last && series && defined(last.x) && defined(last.y)) {
8699
8775
  point = getPointFromXY(series, last.x, last.y);
8700
8776
  }
8777
+ point = point || getFirstValidPointInChart(chart);
8701
8778
  // Container focus can be lost on drillup due to deleted elements.
8702
8779
  if (chart.container) {
8703
8780
  chart.container.focus();
8704
8781
  }
8705
8782
  if (point && point.highlight) {
8706
- point.highlight();
8707
- }
8708
- if (chart.focusElement) {
8709
- chart.focusElement.removeFocusBorder();
8783
+ point.highlight(false); // Do not visually highlight
8710
8784
  }
8711
8785
  };
8712
8786
  /**
@@ -8751,6 +8825,9 @@
8751
8825
  highlightFirstValidPointInChart(chart);
8752
8826
  return this.response.success;
8753
8827
  },
8828
+ validate: function () {
8829
+ return !!getFirstValidPointInChart(chart);
8830
+ },
8754
8831
  terminate: function () {
8755
8832
  return keyboardNavigation.onHandlerTerminate();
8756
8833
  }
@@ -8813,10 +8890,6 @@
8813
8890
  /**
8814
8891
  * Function that attempts to highlight next/prev point. Handles wrap around.
8815
8892
  * @private
8816
- * @param {Highcharts.KeyboardNavigationHandler} handler
8817
- * @param {boolean} directionIsNext
8818
- * @return {number}
8819
- * response
8820
8893
  */
8821
8894
  SeriesKeyboardNavigation.prototype.attemptHighlightAdjacentPoint = function (handler, directionIsNext) {
8822
8895
  var chart = this.chart,
@@ -8824,8 +8897,10 @@
8824
8897
  .wrapAround,
8825
8898
  highlightSuccessful = chart.highlightAdjacentPoint(directionIsNext);
8826
8899
  if (!highlightSuccessful) {
8827
- if (wrapAround) {
8828
- return handler.init(directionIsNext ? 1 : -1);
8900
+ if (wrapAround && (directionIsNext ?
8901
+ highlightFirstValidPointInChart(chart) :
8902
+ highlightLastValidPointInChart(chart))) {
8903
+ return handler.response.success;
8829
8904
  }
8830
8905
  return handler.response[directionIsNext ? 'next' : 'prev'];
8831
8906
  }
@@ -9032,7 +9107,7 @@
9032
9107
  // Highlight the new point or any first valid point back or forwards
9033
9108
  // from it
9034
9109
  newPoint.highlight();
9035
- return newPoint.series.highlightFirstValidPoint();
9110
+ return newPoint.series.highlightNextValidPoint();
9036
9111
  }
9037
9112
  /**
9038
9113
  * @private
@@ -9069,7 +9144,7 @@
9069
9144
  seriesTypes[type].prototype.keyboardMoveVertical = false;
9070
9145
  }
9071
9146
  });
9072
- seriesProto.highlightFirstValidPoint = (seriesHighlightFirstValidPoint);
9147
+ seriesProto.highlightNextValidPoint = (seriesHighlightNextValidPoint);
9073
9148
  }
9074
9149
  }
9075
9150
  SeriesKeyboardNavigation.compose = compose;
@@ -9107,7 +9182,7 @@
9107
9182
  return defined(minIx) ? series.points[minIx] : void 0;
9108
9183
  }
9109
9184
  /**
9110
- * Highlights a point (show tooltip and display hover state).
9185
+ * Highlights a point (show tooltip, display hover state, focus element).
9111
9186
  *
9112
9187
  * @private
9113
9188
  * @function Highcharts.Point#highlight
@@ -9115,9 +9190,10 @@
9115
9190
  * @return {Highcharts.Point}
9116
9191
  * This highlighted point.
9117
9192
  */
9118
- function pointHighlight() {
9193
+ function pointHighlight(highlightVisually) {
9194
+ if (highlightVisually === void 0) { highlightVisually = true; }
9119
9195
  var chart = this.series.chart;
9120
- if (!this.isNull) {
9196
+ if (!this.isNull && highlightVisually) {
9121
9197
  this.onMouseOver(); // Show the hover marker and tooltip
9122
9198
  }
9123
9199
  else {
@@ -9132,6 +9208,9 @@
9132
9208
  // change z-index and mess up the element.
9133
9209
  if (this.graphic) {
9134
9210
  chart.setFocusToElement(this.graphic);
9211
+ if (!highlightVisually && chart.focusElement) {
9212
+ chart.focusElement.removeFocusBorder();
9213
+ }
9135
9214
  }
9136
9215
  chart.highlightedPoint = this;
9137
9216
  return this;
@@ -9142,9 +9221,9 @@
9142
9221
  * point in the series, use that as starting point.
9143
9222
  *
9144
9223
  * @private
9145
- * @function Highcharts.Series#highlightFirstValidPoint
9224
+ * @function Highcharts.Series#highlightNextValidPoint
9146
9225
  */
9147
- function seriesHighlightFirstValidPoint() {
9226
+ function seriesHighlightNextValidPoint() {
9148
9227
  var curPoint = this.chart.highlightedPoint,
9149
9228
  start = (curPoint && curPoint.series) === this ?
9150
9229
  getPointIndex(curPoint) :
@@ -9231,7 +9310,6 @@
9231
9310
  * @private
9232
9311
  */
9233
9312
  SeriesComponent.compose = function (ChartClass, PointClass, SeriesClass) {
9234
- // Handle forcing markers
9235
9313
  NewDataAnnouncer.compose(SeriesClass);
9236
9314
  ForcedMarkers.compose(SeriesClass);
9237
9315
  SeriesKeyboardNavigation.compose(ChartClass, PointClass, SeriesClass);
@@ -9364,8 +9442,8 @@
9364
9442
  */
9365
9443
  function chartHasMapZoom(chart) {
9366
9444
  return !!(chart.mapZoom &&
9367
- chart.mapNavButtons &&
9368
- chart.mapNavButtons.length);
9445
+ chart.mapNavigation &&
9446
+ chart.mapNavigation.navButtons.length);
9369
9447
  }
9370
9448
  /* *
9371
9449
  *
@@ -9405,7 +9483,7 @@
9405
9483
  chart = this.chart;
9406
9484
  this.proxyProvider.addGroup('zoom', 'div');
9407
9485
  [
9408
- 'afterShowResetZoom', 'afterDrilldown', 'drillupall'
9486
+ 'afterShowResetZoom', 'afterApplyDrilldown', 'drillupall'
9409
9487
  ].forEach(function (eventType) {
9410
9488
  component.addEvent(chart, eventType, function () {
9411
9489
  component.updateProxyOverlays();
@@ -9419,8 +9497,8 @@
9419
9497
  var chart = this.chart,
9420
9498
  component = this;
9421
9499
  // Make map zoom buttons accessible
9422
- if (chart.mapNavButtons) {
9423
- chart.mapNavButtons.forEach(function (button, i) {
9500
+ if (chart.mapNavigation) {
9501
+ chart.mapNavigation.navButtons.forEach(function (button, i) {
9424
9502
  unhideChartElementFromAT(chart, button.element);
9425
9503
  component.setMapNavButtonAttrs(button.element, 'accessibility.zoom.mapZoom' + (i ? 'Out' : 'In'));
9426
9504
  });
@@ -9457,10 +9535,13 @@
9457
9535
  if (chart.resetZoomButton) {
9458
9536
  this.createZoomProxyButton(chart.resetZoomButton, 'resetZoomProxyButton', chart.langFormat('accessibility.zoom.resetZoomButton', { chart: chart }));
9459
9537
  }
9460
- if (chart.drillUpButton) {
9538
+ if (chart.drillUpButton &&
9539
+ chart.breadcrumbs &&
9540
+ chart.breadcrumbs.list) {
9541
+ var lastBreadcrumb = chart.breadcrumbs.list[chart.breadcrumbs.list.length - 1];
9461
9542
  this.createZoomProxyButton(chart.drillUpButton, 'drillUpProxyButton', chart.langFormat('accessibility.drillUpButton', {
9462
9543
  chart: chart,
9463
- buttonText: chart.getDrilldownBackText()
9544
+ buttonText: chart.breadcrumbs.getButtonText(lastBreadcrumb)
9464
9545
  }));
9465
9546
  }
9466
9547
  };
@@ -9544,14 +9625,14 @@
9544
9625
  var isMoveOutOfRange = isBackwards && !this.focusedMapNavButtonIx ||
9545
9626
  !isBackwards && this.focusedMapNavButtonIx;
9546
9627
  // Deselect old
9547
- chart.mapNavButtons[this.focusedMapNavButtonIx].setState(0);
9628
+ chart.mapNavigation.navButtons[this.focusedMapNavButtonIx].setState(0);
9548
9629
  if (isMoveOutOfRange) {
9549
9630
  chart.mapZoom(); // Reset zoom
9550
9631
  return response[isBackwards ? 'prev' : 'next'];
9551
9632
  }
9552
9633
  // Select other button
9553
9634
  this.focusedMapNavButtonIx += isBackwards ? -1 : 1;
9554
- var button = chart.mapNavButtons[this.focusedMapNavButtonIx];
9635
+ var button = chart.mapNavigation.navButtons[this.focusedMapNavButtonIx];
9555
9636
  chart.setFocusToElement(button.box, button.element);
9556
9637
  button.setState(2);
9557
9638
  return response.success;
@@ -9572,8 +9653,8 @@
9572
9653
  */
9573
9654
  ZoomComponent.prototype.onMapNavInit = function (direction) {
9574
9655
  var chart = this.chart,
9575
- zoomIn = chart.mapNavButtons[0],
9576
- zoomOut = chart.mapNavButtons[1],
9656
+ zoomIn = chart.mapNavigation.navButtons[0],
9657
+ zoomOut = chart.mapNavigation.navButtons[1],
9577
9658
  initialButton = direction > 0 ? zoomIn : zoomOut;
9578
9659
  chart.setFocusToElement(initialButton.box, initialButton.element);
9579
9660
  initialButton.setState(2);
@@ -9756,8 +9837,8 @@
9756
9837
  doc.body.removeChild(testDiv);
9757
9838
  return bi === 'none';
9758
9839
  }
9759
- // Not used for other browsers
9760
- return false;
9840
+ // Other browsers use the forced-colors standard
9841
+ return win.matchMedia && win.matchMedia('(forced-colors: active)').matches;
9761
9842
  }
9762
9843
  /**
9763
9844
  * Force high contrast theme for the chart. The default theme is defined in
@@ -11797,7 +11878,7 @@
11797
11878
  });
11798
11879
  });
11799
11880
  // Direct updates (events happen after render)
11800
- ['afterDrilldown', 'drillupall'].forEach(function (event) {
11881
+ ['afterApplyDrilldown', 'drillupall'].forEach(function (event) {
11801
11882
  addEvent(ChartClass, event, function chartOnAfterDrilldown() {
11802
11883
  var a11y = this.accessibility;
11803
11884
  if (a11y && !a11y.zombie) {