highcharts 9.3.3 → 10.2.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 (917) 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/A11yI18n.js +4 -4
  8. package/es-modules/Accessibility/Accessibility.js +3 -4
  9. package/es-modules/Accessibility/Components/AnnotationsA11y.js +3 -3
  10. package/es-modules/Accessibility/Components/ContainerComponent.js +11 -10
  11. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +18 -11
  12. package/es-modules/Accessibility/Components/LegendComponent.js +34 -26
  13. package/es-modules/Accessibility/Components/MenuComponent.js +7 -6
  14. package/es-modules/Accessibility/Components/RangeSelectorComponent.js +5 -3
  15. package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +7 -6
  16. package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +1 -1
  17. package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +3 -2
  18. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +34 -18
  19. package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +96 -39
  20. package/es-modules/Accessibility/Components/ZoomComponent.js +43 -80
  21. package/es-modules/Accessibility/FocusBorder.js +6 -5
  22. package/es-modules/Accessibility/HighContrastMode.js +3 -3
  23. package/es-modules/Accessibility/KeyboardNavigation.js +113 -98
  24. package/es-modules/Accessibility/Options/{Options.js → A11yDefaults.js} +72 -4
  25. package/es-modules/Accessibility/Options/DeprecatedOptions.js +12 -2
  26. package/es-modules/Accessibility/Options/{LangOptions.js → LangDefaults.js} +46 -31
  27. package/es-modules/Accessibility/ProxyElement.js +14 -6
  28. package/es-modules/Accessibility/ProxyProvider.js +10 -2
  29. package/es-modules/Accessibility/Utils/ChartUtilities.js +10 -5
  30. package/es-modules/Core/Animation/Fx.js +1 -1
  31. package/es-modules/Core/Axis/Axis.js +197 -91
  32. package/es-modules/Core/Axis/AxisDefaults.js +8 -8
  33. package/es-modules/Core/Axis/Color/ColorAxis.js +26 -7
  34. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +3 -3
  35. package/es-modules/Core/Axis/DateTimeAxis.js +5 -3
  36. package/es-modules/Core/Axis/GridAxis.js +821 -821
  37. package/es-modules/Core/Axis/LogarithmicAxis.js +1 -1
  38. package/es-modules/Core/Axis/OrdinalAxis.js +26 -3
  39. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +3 -3
  40. package/es-modules/Core/Axis/StackingAxis.js +0 -1
  41. package/es-modules/Core/Axis/Tick.js +22 -18
  42. package/es-modules/Core/Axis/TreeGridTick.js +13 -2
  43. package/es-modules/Core/Axis/ZAxis.js +3 -1
  44. package/es-modules/Core/Chart/Chart.js +27 -8
  45. package/es-modules/Core/Chart/Chart3D.js +1 -11
  46. package/es-modules/Core/Chart/ChartDefaults.js +46 -14
  47. package/es-modules/Core/Chart/GanttChart.js +3 -1
  48. package/es-modules/Core/Chart/MapChart.js +4 -7
  49. package/es-modules/Core/Chart/StockChart.js +7 -5
  50. package/es-modules/Core/Color/Color.js +1 -1
  51. package/es-modules/Core/DefaultOptions.js +19 -15
  52. package/es-modules/Core/Geometry/PolygonClip.js +84 -0
  53. package/es-modules/Core/Globals.js +4 -18
  54. package/es-modules/Core/HttpUtilities.js +46 -39
  55. package/es-modules/Core/Legend/Legend.js +14 -12
  56. package/es-modules/Core/MSPointer.js +3 -1
  57. package/es-modules/Core/Navigator.js +16 -13
  58. package/es-modules/Core/Pointer.js +16 -12
  59. package/es-modules/Core/Renderer/HTML/AST.js +68 -8
  60. package/es-modules/Core/Renderer/HTML/HTMLElement.js +3 -1
  61. package/es-modules/Core/Renderer/HTML/HTMLRenderer.js +3 -1
  62. package/es-modules/Core/Renderer/SVG/SVGElement.js +54 -70
  63. package/es-modules/Core/Renderer/SVG/SVGElement3D.js +17 -5
  64. package/es-modules/Core/Renderer/SVG/SVGLabel.js +3 -1
  65. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +60 -55
  66. package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +4 -2
  67. package/es-modules/Core/Renderer/SVG/TextBuilder.js +12 -10
  68. package/es-modules/Core/Scrollbar.js +9 -5
  69. package/es-modules/Core/ScrollbarDefaults.js +8 -8
  70. package/es-modules/Core/Series/DataLabel.js +67 -38
  71. package/es-modules/Core/Series/Point.js +11 -2
  72. package/es-modules/Core/Series/Series.js +57 -27
  73. package/es-modules/Core/Series/Series3D.js +3 -1
  74. package/es-modules/Core/Series/SeriesDefaults.js +7 -4
  75. package/es-modules/Core/Time.js +6 -7
  76. package/es-modules/Core/Tooltip.js +17 -34
  77. package/es-modules/Core/Utilities.js +33 -33
  78. package/es-modules/Data/DataConverter.js +1 -1
  79. package/es-modules/Data/DataTable.js +12 -10
  80. package/es-modules/Data/Modifiers/ChainModifier.js +3 -1
  81. package/es-modules/Data/Modifiers/GroupModifier.js +3 -1
  82. package/es-modules/Data/Modifiers/InvertModifier.js +9 -7
  83. package/es-modules/Data/Modifiers/RangeModifier.js +3 -1
  84. package/es-modules/Data/Modifiers/SeriesPointsModifier.js +3 -1
  85. package/es-modules/Data/Modifiers/SortModifier.js +3 -1
  86. package/es-modules/Data/Parsers/CSVParser.js +3 -1
  87. package/es-modules/Data/Parsers/DataParser.js +1 -1
  88. package/es-modules/Data/Parsers/GoogleSheetsParser.js +3 -2
  89. package/es-modules/Data/Parsers/HTMLTableParser.js +3 -1
  90. package/es-modules/Data/Stores/CSVStore.js +8 -5
  91. package/es-modules/Data/Stores/GoogleSheetsStore.js +3 -1
  92. package/es-modules/Data/Stores/HTMLTableStore.js +3 -1
  93. package/es-modules/Extensions/Annotations/{Annotations.js → Annotation.js} +30 -11
  94. package/es-modules/Extensions/Annotations/AnnotationsDefaults.js +0 -0
  95. package/es-modules/Extensions/Annotations/ControlPoint.js +1 -1
  96. package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +5 -2
  97. package/es-modules/Extensions/Annotations/MockPoint.js +1 -1
  98. package/es-modules/Extensions/Annotations/NavigationBindings.js +16 -5
  99. package/es-modules/Extensions/Annotations/Popup.js +2 -2
  100. package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +18 -12
  101. package/es-modules/Extensions/Annotations/Types/CrookedLine.js +4 -2
  102. package/es-modules/Extensions/Annotations/Types/ElliottWave.js +4 -2
  103. package/es-modules/Extensions/Annotations/Types/Fibonacci.js +5 -3
  104. package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +4 -2
  105. package/es-modules/Extensions/Annotations/Types/InfinityLine.js +4 -2
  106. package/es-modules/Extensions/Annotations/Types/Measure.js +4 -2
  107. package/es-modules/Extensions/Annotations/Types/Pitchfork.js +4 -2
  108. package/es-modules/Extensions/Annotations/Types/TimeCycles.js +4 -2
  109. package/es-modules/Extensions/Annotations/Types/Tunnel.js +5 -2
  110. package/es-modules/Extensions/Annotations/Types/VerticalLine.js +4 -2
  111. package/es-modules/Extensions/Boost/BoostAttach.js +5 -1
  112. package/es-modules/Extensions/Boost/BoostInit.js +9 -3
  113. package/es-modules/Extensions/Boost/BoostOptions.js +26 -0
  114. package/es-modules/Extensions/Boost/Boostables.js +1 -0
  115. package/es-modules/Extensions/Boost/WGLRenderer.js +48 -37
  116. package/es-modules/Extensions/Boost/WGLShader.js +4 -3
  117. package/es-modules/Extensions/BoostCanvas.js +11 -5
  118. package/es-modules/Extensions/Breadcrumbs.js +898 -0
  119. package/es-modules/Extensions/CurrentDateIndication.js +1 -1
  120. package/es-modules/Extensions/Data.js +661 -613
  121. package/es-modules/Extensions/DataGrouping.js +8 -3
  122. package/es-modules/Extensions/Debugger/ErrorMessages.js +4 -0
  123. package/es-modules/Extensions/DownloadURL.js +3 -3
  124. package/es-modules/Extensions/DragPanes.js +1 -1
  125. package/es-modules/Extensions/DraggablePoints.js +9 -7
  126. package/es-modules/Extensions/Drilldown.js +152 -97
  127. package/es-modules/Extensions/ExportData.js +58 -9
  128. package/es-modules/Extensions/Exporting/Exporting.js +34 -23
  129. package/es-modules/Extensions/Exporting/ExportingDefaults.js +56 -8
  130. package/es-modules/Extensions/FullScreen.js +121 -54
  131. package/es-modules/Extensions/GeoJSON.js +149 -125
  132. package/es-modules/Extensions/MarkerClusters.js +36 -22
  133. package/es-modules/Extensions/NoDataToDisplay.js +1 -1
  134. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +110 -22
  135. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
  136. package/es-modules/Extensions/Oldie/Oldie.js +2 -2
  137. package/es-modules/Extensions/OverlappingDataLabels.js +5 -4
  138. package/es-modules/Extensions/Pane.js +3 -3
  139. package/es-modules/Extensions/ParallelCoordinates.js +1 -1
  140. package/es-modules/Extensions/PatternFill.js +14 -2
  141. package/es-modules/Extensions/RangeSelector.js +29 -18
  142. package/es-modules/Extensions/ScrollablePlotArea.js +8 -4
  143. package/es-modules/Extensions/{SeriesLabel.js → SeriesLabel/SeriesLabel.js} +262 -384
  144. package/es-modules/Extensions/SeriesLabel/SeriesLabelDefaults.js +124 -0
  145. package/es-modules/Extensions/SeriesLabel/SeriesLabelUtilities.js +67 -0
  146. package/es-modules/Extensions/Sonification/Earcon.js +1 -1
  147. package/es-modules/Extensions/Stacking.js +5 -4
  148. package/es-modules/Extensions/Themes/HighContrastDark.js +10 -10
  149. package/es-modules/Extensions/Themes/HighContrastLight.js +10 -10
  150. package/es-modules/Maps/MapNavigation.js +49 -12
  151. package/es-modules/Maps/MapPointer.js +16 -0
  152. package/es-modules/Maps/MapUtilities.js +56 -0
  153. package/es-modules/Maps/MapView.js +619 -137
  154. package/es-modules/Maps/MapViewInsetsOptionsDefault.js +148 -0
  155. package/es-modules/Maps/MapViewOptionsDefault.js +60 -20
  156. package/es-modules/Maps/Projection.js +182 -88
  157. package/es-modules/Maps/Projections/EqualEarth.js +15 -6
  158. package/es-modules/Maps/Projections/LambertConformalConic.js +27 -19
  159. package/es-modules/Maps/Projections/Miller.js +23 -10
  160. package/es-modules/Maps/Projections/Orthographic.js +21 -10
  161. package/es-modules/Maps/Projections/WebMercator.js +25 -13
  162. package/es-modules/Series/ArcDiagram/ArcDiagramPoint.js +79 -0
  163. package/es-modules/Series/ArcDiagram/ArcDiagramSeries.js +591 -0
  164. package/es-modules/Series/Area/AreaSeries.js +21 -14
  165. package/es-modules/Series/AreaRange/AreaRangePoint.js +24 -11
  166. package/es-modules/Series/AreaRange/AreaRangeSeries.js +154 -147
  167. package/es-modules/Series/AreaSpline/AreaSplineSeries.js +45 -41
  168. package/es-modules/Series/AreaSplineRange/AreaSplineRangeSeries.js +43 -43
  169. package/es-modules/Series/Bar/BarSeries.js +3 -1
  170. package/es-modules/Series/Bellcurve/BellcurveSeries.js +3 -1
  171. package/es-modules/Series/BoxPlot/BoxPlotSeries.js +4 -2
  172. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -1
  173. package/es-modules/Series/Bubble/BubblePoint.js +3 -1
  174. package/es-modules/Series/Bubble/BubbleSeries.js +15 -6
  175. package/es-modules/Series/Bullet/BulletPoint.js +3 -1
  176. package/es-modules/Series/Bullet/BulletSeries.js +4 -3
  177. package/es-modules/Series/Candlestick/CandlestickSeries.js +5 -3
  178. package/es-modules/Series/CenteredUtilities.js +8 -2
  179. package/es-modules/Series/ColorMapComposition.js +111 -0
  180. package/es-modules/Series/Column/ColumnSeries.js +10 -7
  181. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +3 -1
  182. package/es-modules/Series/ColumnRange/ColumnRangePoint.js +17 -13
  183. package/es-modules/Series/ColumnRange/ColumnRangeSeries.js +60 -57
  184. package/es-modules/Series/Cylinder/CylinderPoint.js +3 -1
  185. package/es-modules/Series/Cylinder/CylinderSeries.js +3 -1
  186. package/es-modules/Series/DataModifyComposition.js +1 -0
  187. package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +3 -1
  188. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +5 -3
  189. package/es-modules/Series/DotPlot/DotPlotSeries.js +3 -1
  190. package/es-modules/Series/DrawPointUtilities.js +87 -0
  191. package/es-modules/Series/Dumbbell/DumbbellPoint.js +3 -1
  192. package/es-modules/Series/Dumbbell/DumbbellSeries.js +4 -2
  193. package/es-modules/Series/ErrorBar/ErrorBarSeries.js +4 -2
  194. package/es-modules/Series/Flags/FlagsPoint.js +4 -1
  195. package/es-modules/Series/Flags/FlagsSeries.js +13 -16
  196. package/es-modules/Series/Funnel/FunnelSeries.js +5 -3
  197. package/es-modules/Series/Funnel3D/Funnel3DPoint.js +3 -1
  198. package/es-modules/Series/Funnel3D/Funnel3DSeries.js +3 -1
  199. package/es-modules/Series/Gantt/GanttPoint.js +3 -1
  200. package/es-modules/Series/Gantt/GanttSeries.js +3 -1
  201. package/es-modules/Series/Gauge/GaugePoint.js +3 -1
  202. package/es-modules/Series/Gauge/GaugeSeries.js +196 -174
  203. package/es-modules/Series/HLC/HLCPoint.js +3 -1
  204. package/es-modules/Series/HLC/HLCSeries.js +4 -2
  205. package/es-modules/Series/Heatmap/HeatmapPoint.js +7 -5
  206. package/es-modules/Series/Heatmap/HeatmapSeries.js +29 -33
  207. package/es-modules/Series/HeikinAshi/HeikinAshiPoint.js +3 -1
  208. package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +3 -1
  209. package/es-modules/Series/Histogram/HistogramSeries.js +3 -1
  210. package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +3 -1
  211. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +11 -9
  212. package/es-modules/Series/Item/ItemPoint.js +3 -1
  213. package/es-modules/Series/Item/ItemSeries.js +3 -1
  214. package/es-modules/Series/Line/LineSeries.js +4 -2
  215. package/es-modules/Series/Lollipop/LollipopPoint.js +3 -1
  216. package/es-modules/Series/Lollipop/LollipopSeries.js +4 -2
  217. package/es-modules/Series/Map/MapPoint.js +32 -7
  218. package/es-modules/Series/Map/MapSeries.js +298 -189
  219. package/es-modules/Series/MapBubble/MapBubblePoint.js +19 -25
  220. package/es-modules/Series/MapBubble/MapBubbleSeries.js +61 -2
  221. package/es-modules/Series/MapLine/MapLineSeries.js +18 -1
  222. package/es-modules/Series/MapPoint/MapPointPoint.js +6 -10
  223. package/es-modules/Series/MapPoint/MapPointSeries.js +50 -16
  224. package/es-modules/Series/Networkgraph/Networkgraph.js +3 -1
  225. package/es-modules/Series/NodesComposition.js +101 -49
  226. package/es-modules/Series/OHLC/OHLCPoint.js +3 -1
  227. package/es-modules/Series/OHLC/OHLCSeries.js +10 -1
  228. package/es-modules/Series/Organization/OrganizationPoint.js +71 -3
  229. package/es-modules/Series/Organization/OrganizationSeries.js +84 -28
  230. package/es-modules/Series/PackedBubble/PackedBubbleComposition.js +0 -2
  231. package/es-modules/Series/PackedBubble/PackedBubblePoint.js +3 -1
  232. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +3 -1
  233. package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -1
  234. package/es-modules/Series/Pie/PieDataLabel.js +4 -2
  235. package/es-modules/Series/Pie/PiePoint.js +15 -6
  236. package/es-modules/Series/Pie/PieSeries.js +51 -37
  237. package/es-modules/Series/Pie3D/Pie3DPoint.js +3 -1
  238. package/es-modules/Series/Pie3D/Pie3DSeries.js +22 -1
  239. package/es-modules/Series/PolarComposition.js +819 -0
  240. package/es-modules/Series/Polygon/PolygonSeries.js +3 -1
  241. package/es-modules/Series/Pyramid/PyramidSeries.js +3 -1
  242. package/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +3 -1
  243. package/es-modules/Series/Sankey/SankeyColumnComposition.js +193 -0
  244. package/es-modules/Series/Sankey/SankeyPoint.js +40 -2
  245. package/es-modules/Series/Sankey/SankeySeries.js +35 -136
  246. package/es-modules/Series/Scatter/ScatterSeries.js +11 -6
  247. package/es-modules/Series/Scatter3D/Scatter3DPoint.js +3 -1
  248. package/es-modules/Series/Scatter3D/Scatter3DSeries.js +3 -1
  249. package/es-modules/Series/SeriesOnPointComposition.js +391 -0
  250. package/es-modules/Series/SolidGauge/SolidGaugeSeries.js +5 -3
  251. package/es-modules/Series/Spline/SplineSeries.js +13 -4
  252. package/es-modules/Series/Streamgraph/StreamgraphSeries.js +3 -1
  253. package/es-modules/Series/Sunburst/SunburstPoint.js +3 -3
  254. package/es-modules/Series/Sunburst/SunburstSeries.js +21 -5
  255. package/es-modules/Series/Tilemap/TilemapPoint.js +3 -1
  256. package/es-modules/Series/Tilemap/TilemapSeries.js +3 -1
  257. package/es-modules/Series/Timeline/TimelinePoint.js +3 -1
  258. package/es-modules/Series/Timeline/TimelineSeries.js +6 -4
  259. package/es-modules/Series/Treemap/TreemapPoint.js +8 -4
  260. package/es-modules/Series/Treemap/TreemapSeries.js +97 -87
  261. package/es-modules/Series/VariablePie/VariablePieSeries.js +3 -1
  262. package/es-modules/Series/Variwide/VariwidePoint.js +3 -1
  263. package/es-modules/Series/Variwide/VariwideSeries.js +3 -1
  264. package/es-modules/Series/Vector/VectorSeries.js +3 -1
  265. package/es-modules/Series/Venn/VennPoint.js +5 -5
  266. package/es-modules/Series/Venn/VennSeries.js +9 -6
  267. package/es-modules/Series/Waterfall/WaterfallPoint.js +3 -1
  268. package/es-modules/Series/Waterfall/WaterfallSeries.js +16 -12
  269. package/es-modules/Series/Windbarb/WindbarbPoint.js +3 -1
  270. package/es-modules/Series/Windbarb/WindbarbSeries.js +3 -1
  271. package/es-modules/Series/Wordcloud/WordcloudPoint.js +6 -6
  272. package/es-modules/Series/Wordcloud/WordcloudSeries.js +11 -8
  273. package/es-modules/Series/XRange/XRangePoint.js +3 -1
  274. package/es-modules/Series/XRange/XRangeSeries.js +3 -1
  275. package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +3 -1
  276. package/es-modules/Stock/Indicators/AD/ADIndicator.js +3 -1
  277. package/es-modules/Stock/Indicators/AO/AOIndicator.js +5 -3
  278. package/es-modules/Stock/Indicators/APO/APOIndicator.js +3 -1
  279. package/es-modules/Stock/Indicators/ATR/ATRIndicator.js +3 -1
  280. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +3 -1
  281. package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +3 -1
  282. package/es-modules/Stock/Indicators/BB/BBIndicator.js +6 -4
  283. package/es-modules/Stock/Indicators/CCI/CCIIndicator.js +3 -1
  284. package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +3 -1
  285. package/es-modules/Stock/Indicators/CMO/CMOIndicator.js +3 -1
  286. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +3 -1
  287. package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +3 -1
  288. package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +13 -7
  289. package/es-modules/Stock/Indicators/DPO/DPOIndicator.js +3 -1
  290. package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +3 -1
  291. package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +3 -1
  292. package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +3 -1
  293. package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +3 -1
  294. package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +3 -1
  295. package/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +3 -1
  296. package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +3 -1
  297. package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +3 -1
  298. package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +3 -1
  299. package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +26 -13
  300. package/es-modules/Stock/Indicators/MFI/MFIIndicator.js +3 -1
  301. package/es-modules/Stock/Indicators/Momentum/MomentumIndicator.js +3 -1
  302. package/es-modules/Stock/Indicators/MultipleLinesComposition.js +85 -95
  303. package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +3 -1
  304. package/es-modules/Stock/Indicators/OBV/OBVIndicator.js +3 -1
  305. package/es-modules/Stock/Indicators/PC/PCIndicator.js +3 -1
  306. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +3 -1
  307. package/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +3 -1
  308. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +3 -1
  309. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsPoint.js +3 -1
  310. package/es-modules/Stock/Indicators/PriceEnvelopes/PriceEnvelopesIndicator.js +3 -1
  311. package/es-modules/Stock/Indicators/ROC/ROCIndicator.js +3 -1
  312. package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +3 -1
  313. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +12 -3
  314. package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +3 -1
  315. package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +3 -1
  316. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +6 -4
  317. package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +3 -1
  318. package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +3 -1
  319. package/es-modules/Stock/Indicators/TrendLine/TrendLineIndicator.js +3 -1
  320. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +3 -1
  321. package/es-modules/Stock/Indicators/VBP/VBPPoint.js +3 -1
  322. package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +3 -1
  323. package/es-modules/Stock/Indicators/WMA/WMAIndicator.js +3 -1
  324. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +3 -1
  325. package/es-modules/Stock/Indicators/Zigzag/ZigzagIndicator.js +3 -1
  326. package/es-modules/Stock/StockToolsBindings.js +51 -43
  327. package/es-modules/Stock/StockToolsGui.js +1 -1
  328. package/es-modules/masters/highcharts-3d.src.js +1 -1
  329. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  330. package/es-modules/masters/highcharts-more.src.js +4 -4
  331. package/es-modules/masters/highcharts.src.js +1 -1
  332. package/es-modules/masters/highmaps.src.js +1 -1
  333. package/es-modules/masters/highstock.src.js +1 -1
  334. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  335. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  336. package/es-modules/masters/indicators/ao.src.js +1 -1
  337. package/es-modules/masters/indicators/apo.src.js +1 -1
  338. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  339. package/es-modules/masters/indicators/aroon.src.js +1 -1
  340. package/es-modules/masters/indicators/atr.src.js +1 -1
  341. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  342. package/es-modules/masters/indicators/cci.src.js +1 -1
  343. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  344. package/es-modules/masters/indicators/cmf.src.js +1 -1
  345. package/es-modules/masters/indicators/cmo.src.js +1 -1
  346. package/es-modules/masters/indicators/dema.src.js +1 -1
  347. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  348. package/es-modules/masters/indicators/dmi.src.js +1 -1
  349. package/es-modules/masters/indicators/dpo.src.js +1 -1
  350. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  351. package/es-modules/masters/indicators/indicators-all.src.js +1 -1
  352. package/es-modules/masters/indicators/indicators.src.js +1 -1
  353. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  354. package/es-modules/masters/indicators/klinger.src.js +1 -1
  355. package/es-modules/masters/indicators/macd.src.js +1 -1
  356. package/es-modules/masters/indicators/mfi.src.js +1 -1
  357. package/es-modules/masters/indicators/momentum.src.js +1 -1
  358. package/es-modules/masters/indicators/natr.src.js +1 -1
  359. package/es-modules/masters/indicators/obv.src.js +1 -1
  360. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  361. package/es-modules/masters/indicators/ppo.src.js +1 -1
  362. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  363. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  364. package/es-modules/masters/indicators/psar.src.js +1 -1
  365. package/es-modules/masters/indicators/regressions.src.js +1 -1
  366. package/es-modules/masters/indicators/roc.src.js +1 -1
  367. package/es-modules/masters/indicators/rsi.src.js +1 -1
  368. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  369. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  370. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  371. package/es-modules/masters/indicators/tema.src.js +1 -1
  372. package/es-modules/masters/indicators/trendline.src.js +1 -1
  373. package/es-modules/masters/indicators/trix.src.js +1 -1
  374. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  375. package/es-modules/masters/indicators/vwap.src.js +1 -1
  376. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  377. package/es-modules/masters/indicators/wma.src.js +1 -1
  378. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  379. package/es-modules/masters/modules/accessibility.src.js +1 -1
  380. package/es-modules/masters/modules/annotations-advanced.src.js +2 -2
  381. package/es-modules/masters/modules/annotations.src.js +2 -2
  382. package/es-modules/masters/modules/arc-diagram.src.js +14 -0
  383. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  384. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  385. package/es-modules/masters/modules/boost.src.js +1 -1
  386. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  387. package/es-modules/masters/modules/bullet.src.js +1 -1
  388. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  389. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  390. package/es-modules/masters/modules/cylinder.src.js +1 -1
  391. package/es-modules/masters/modules/data.src.js +2 -1
  392. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  393. package/es-modules/masters/modules/debugger.src.js +1 -1
  394. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  395. package/es-modules/masters/modules/dotplot.src.js +1 -1
  396. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  397. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  398. package/es-modules/masters/modules/drilldown.src.js +2 -1
  399. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  400. package/es-modules/masters/modules/export-data.src.js +1 -1
  401. package/es-modules/masters/modules/exporting.src.js +1 -1
  402. package/es-modules/masters/modules/full-screen.src.js +1 -1
  403. package/es-modules/masters/modules/funnel.src.js +1 -1
  404. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  405. package/es-modules/masters/modules/gantt.src.js +1 -1
  406. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  407. package/es-modules/masters/modules/heatmap.src.js +1 -1
  408. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  409. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  410. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  411. package/es-modules/masters/modules/item-series.src.js +1 -1
  412. package/es-modules/masters/modules/lollipop.src.js +1 -1
  413. package/es-modules/masters/modules/map.src.js +5 -1
  414. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  415. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  416. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  417. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  418. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  419. package/es-modules/masters/modules/oldie.src.js +1 -1
  420. package/es-modules/masters/modules/organization.src.js +1 -1
  421. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  422. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  423. package/es-modules/masters/modules/pareto.src.js +1 -1
  424. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  425. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  426. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  427. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  428. package/es-modules/masters/modules/sankey.src.js +1 -1
  429. package/es-modules/masters/modules/series-label.src.js +5 -2
  430. package/es-modules/masters/modules/series-on-point.src.js +16 -0
  431. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  432. package/es-modules/masters/modules/sonification.src.js +2 -6
  433. package/es-modules/masters/modules/static-scale.src.js +1 -1
  434. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  435. package/es-modules/masters/modules/stock.src.js +1 -1
  436. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  437. package/es-modules/masters/modules/sunburst.src.js +1 -1
  438. package/es-modules/masters/modules/tilemap.src.js +1 -1
  439. package/es-modules/masters/modules/timeline.src.js +1 -1
  440. package/es-modules/masters/modules/treegrid.src.js +1 -1
  441. package/es-modules/masters/modules/treemap.src.js +5 -1
  442. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  443. package/es-modules/masters/modules/variwide.src.js +1 -1
  444. package/es-modules/masters/modules/vector.src.js +1 -1
  445. package/es-modules/masters/modules/venn.src.js +1 -1
  446. package/es-modules/masters/modules/windbarb.src.js +1 -1
  447. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  448. package/es-modules/masters/modules/xrange.src.js +1 -1
  449. package/es-modules/masters/themes/avocado.src.js +1 -1
  450. package/es-modules/masters/themes/brand-dark.src.js +1 -1
  451. package/es-modules/masters/themes/brand-light.src.js +1 -1
  452. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  453. package/es-modules/masters/themes/dark-green.src.js +1 -1
  454. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  455. package/es-modules/masters/themes/gray.src.js +1 -1
  456. package/es-modules/masters/themes/grid-light.src.js +1 -1
  457. package/es-modules/masters/themes/grid.src.js +1 -1
  458. package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  459. package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  460. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  461. package/es-modules/masters/themes/skies.src.js +1 -1
  462. package/es-modules/masters/themes/sunset.src.js +1 -1
  463. package/highcharts-3d.js +99 -98
  464. package/highcharts-3d.js.map +1 -1
  465. package/highcharts-3d.src.js +51 -21
  466. package/highcharts-gantt.js +811 -801
  467. package/highcharts-gantt.js.map +1 -1
  468. package/highcharts-gantt.src.js +2020 -1607
  469. package/highcharts-more.d.ts +10 -0
  470. package/highcharts-more.js +194 -194
  471. package/highcharts-more.js.map +1 -1
  472. package/highcharts-more.src.d.ts +10 -0
  473. package/highcharts-more.src.js +3512 -3364
  474. package/highcharts.d.ts +12336 -965
  475. package/highcharts.js +595 -586
  476. package/highcharts.js.map +1 -1
  477. package/highcharts.src.d.ts +12336 -965
  478. package/highcharts.src.js +1047 -665
  479. package/highmaps.js +763 -728
  480. package/highmaps.js.map +1 -1
  481. package/highmaps.src.js +4482 -2639
  482. package/highstock.js +798 -788
  483. package/highstock.js.map +1 -1
  484. package/highstock.src.js +1177 -739
  485. package/indicators/acceleration-bands.d.ts +1 -17
  486. package/indicators/acceleration-bands.js +11 -11
  487. package/indicators/acceleration-bands.js.map +1 -1
  488. package/indicators/acceleration-bands.src.d.ts +1 -17
  489. package/indicators/acceleration-bands.src.js +99 -100
  490. package/indicators/accumulation-distribution.js +5 -5
  491. package/indicators/accumulation-distribution.js.map +1 -1
  492. package/indicators/accumulation-distribution.src.js +11 -2
  493. package/indicators/ao.js +6 -6
  494. package/indicators/ao.js.map +1 -1
  495. package/indicators/ao.src.js +13 -4
  496. package/indicators/apo.js +5 -5
  497. package/indicators/apo.js.map +1 -1
  498. package/indicators/apo.src.js +11 -2
  499. package/indicators/aroon-oscillator.d.ts +1 -17
  500. package/indicators/aroon-oscillator.js +10 -10
  501. package/indicators/aroon-oscillator.js.map +1 -1
  502. package/indicators/aroon-oscillator.src.d.ts +1 -17
  503. package/indicators/aroon-oscillator.src.js +99 -100
  504. package/indicators/aroon.d.ts +1 -17
  505. package/indicators/aroon.js +11 -11
  506. package/indicators/aroon.js.map +1 -1
  507. package/indicators/aroon.src.d.ts +1 -17
  508. package/indicators/aroon.src.js +99 -100
  509. package/indicators/atr.js +5 -5
  510. package/indicators/atr.js.map +1 -1
  511. package/indicators/atr.src.js +11 -2
  512. package/indicators/bollinger-bands.d.ts +1 -17
  513. package/indicators/bollinger-bands.js +11 -12
  514. package/indicators/bollinger-bands.js.map +1 -1
  515. package/indicators/bollinger-bands.src.d.ts +1 -17
  516. package/indicators/bollinger-bands.src.js +102 -103
  517. package/indicators/cci.js +5 -5
  518. package/indicators/cci.js.map +1 -1
  519. package/indicators/cci.src.js +11 -2
  520. package/indicators/chaikin.js +8 -8
  521. package/indicators/chaikin.js.map +1 -1
  522. package/indicators/chaikin.src.js +11 -2
  523. package/indicators/cmf.js +6 -6
  524. package/indicators/cmf.js.map +1 -1
  525. package/indicators/cmf.src.js +11 -2
  526. package/indicators/cmo.js +5 -5
  527. package/indicators/cmo.js.map +1 -1
  528. package/indicators/cmo.src.js +11 -2
  529. package/indicators/dema.js +5 -5
  530. package/indicators/dema.js.map +1 -1
  531. package/indicators/dema.src.js +11 -2
  532. package/indicators/disparity-index.js +6 -6
  533. package/indicators/disparity-index.js.map +1 -1
  534. package/indicators/disparity-index.src.js +11 -2
  535. package/indicators/dmi.js +12 -12
  536. package/indicators/dmi.js.map +1 -1
  537. package/indicators/dmi.src.js +109 -106
  538. package/indicators/dpo.js +5 -5
  539. package/indicators/dpo.js.map +1 -1
  540. package/indicators/dpo.src.js +11 -2
  541. package/indicators/ema.js +2 -1
  542. package/indicators/ema.js.map +1 -1
  543. package/indicators/ema.src.js +10 -1
  544. package/indicators/ichimoku-kinko-hyo.js +16 -16
  545. package/indicators/ichimoku-kinko-hyo.js.map +1 -1
  546. package/indicators/ichimoku-kinko-hyo.src.js +11 -2
  547. package/indicators/indicators-all.d.ts +1 -17
  548. package/indicators/indicators-all.js +198 -196
  549. package/indicators/indicators-all.js.map +1 -1
  550. package/indicators/indicators-all.src.d.ts +1 -17
  551. package/indicators/indicators-all.src.js +151 -129
  552. package/indicators/indicators.js +13 -12
  553. package/indicators/indicators.js.map +1 -1
  554. package/indicators/indicators.src.js +21 -5
  555. package/indicators/keltner-channels.d.ts +1 -17
  556. package/indicators/keltner-channels.js +11 -11
  557. package/indicators/keltner-channels.js.map +1 -1
  558. package/indicators/keltner-channels.src.d.ts +1 -17
  559. package/indicators/keltner-channels.src.js +99 -100
  560. package/indicators/klinger.js +14 -14
  561. package/indicators/klinger.js.map +1 -1
  562. package/indicators/klinger.src.js +99 -100
  563. package/indicators/macd.js +13 -11
  564. package/indicators/macd.js.map +1 -1
  565. package/indicators/macd.src.js +35 -14
  566. package/indicators/mfi.js +6 -6
  567. package/indicators/mfi.js.map +1 -1
  568. package/indicators/mfi.src.js +11 -2
  569. package/indicators/momentum.js +5 -5
  570. package/indicators/momentum.js.map +1 -1
  571. package/indicators/momentum.src.js +11 -2
  572. package/indicators/natr.js +5 -4
  573. package/indicators/natr.js.map +1 -1
  574. package/indicators/natr.src.js +11 -2
  575. package/indicators/obv.js +5 -5
  576. package/indicators/obv.js.map +1 -1
  577. package/indicators/obv.src.js +11 -2
  578. package/indicators/pivot-points.js +11 -11
  579. package/indicators/pivot-points.js.map +1 -1
  580. package/indicators/pivot-points.src.js +11 -2
  581. package/indicators/ppo.js +5 -5
  582. package/indicators/ppo.js.map +1 -1
  583. package/indicators/ppo.src.js +11 -2
  584. package/indicators/price-channel.d.ts +1 -17
  585. package/indicators/price-channel.js +11 -11
  586. package/indicators/price-channel.js.map +1 -1
  587. package/indicators/price-channel.src.d.ts +1 -17
  588. package/indicators/price-channel.src.js +99 -100
  589. package/indicators/price-envelopes.js +8 -8
  590. package/indicators/price-envelopes.js.map +1 -1
  591. package/indicators/price-envelopes.src.js +11 -2
  592. package/indicators/psar.js +7 -6
  593. package/indicators/psar.js.map +1 -1
  594. package/indicators/psar.src.js +11 -2
  595. package/indicators/regressions.js +12 -12
  596. package/indicators/regressions.js.map +1 -1
  597. package/indicators/regressions.src.js +11 -2
  598. package/indicators/roc.js +5 -5
  599. package/indicators/roc.js.map +1 -1
  600. package/indicators/roc.src.js +11 -2
  601. package/indicators/rsi.js +6 -5
  602. package/indicators/rsi.js.map +1 -1
  603. package/indicators/rsi.src.js +11 -2
  604. package/indicators/slow-stochastic.js +5 -5
  605. package/indicators/slow-stochastic.js.map +1 -1
  606. package/indicators/slow-stochastic.src.js +11 -2
  607. package/indicators/stochastic.d.ts +1 -17
  608. package/indicators/stochastic.js +12 -12
  609. package/indicators/stochastic.js.map +1 -1
  610. package/indicators/stochastic.src.d.ts +1 -17
  611. package/indicators/stochastic.src.js +99 -100
  612. package/indicators/supertrend.js +10 -10
  613. package/indicators/supertrend.js.map +1 -1
  614. package/indicators/supertrend.src.js +14 -5
  615. package/indicators/tema.js +6 -6
  616. package/indicators/tema.js.map +1 -1
  617. package/indicators/tema.src.js +11 -2
  618. package/indicators/trendline.js +5 -5
  619. package/indicators/trendline.js.map +1 -1
  620. package/indicators/trendline.src.js +11 -2
  621. package/indicators/trix.js +4 -4
  622. package/indicators/trix.js.map +1 -1
  623. package/indicators/trix.src.js +11 -2
  624. package/indicators/volume-by-price.js +17 -17
  625. package/indicators/volume-by-price.js.map +1 -1
  626. package/indicators/volume-by-price.src.js +11 -2
  627. package/indicators/vwap.js +5 -5
  628. package/indicators/vwap.js.map +1 -1
  629. package/indicators/vwap.src.js +11 -2
  630. package/indicators/williams-r.js +6 -5
  631. package/indicators/williams-r.js.map +1 -1
  632. package/indicators/williams-r.src.js +11 -2
  633. package/indicators/wma.js +5 -5
  634. package/indicators/wma.js.map +1 -1
  635. package/indicators/wma.src.js +11 -2
  636. package/indicators/zigzag.js +6 -6
  637. package/indicators/zigzag.js.map +1 -1
  638. package/indicators/zigzag.src.js +11 -2
  639. package/lib/jspdf.js +299 -184
  640. package/lib/jspdf.src.js +25266 -18067
  641. package/lib/svg2pdf.js +35 -31
  642. package/lib/svg2pdf.src.js +5721 -4179
  643. package/modules/accessibility.js +242 -237
  644. package/modules/accessibility.js.map +1 -1
  645. package/modules/accessibility.src.js +599 -390
  646. package/modules/annotations-advanced.js +192 -192
  647. package/modules/annotations-advanced.js.map +1 -1
  648. package/modules/annotations-advanced.src.js +96 -47
  649. package/modules/annotations.js +126 -126
  650. package/modules/annotations.js.map +1 -1
  651. package/modules/annotations.src.js +67 -25
  652. package/modules/arc-diagram.js +25 -0
  653. package/modules/arc-diagram.js.map +1 -0
  654. package/modules/arc-diagram.src.js +778 -0
  655. package/modules/arrow-symbols.js +4 -3
  656. package/modules/arrow-symbols.js.map +1 -1
  657. package/modules/arrow-symbols.src.js +11 -2
  658. package/modules/boost-canvas.js +16 -15
  659. package/modules/boost-canvas.js.map +1 -1
  660. package/modules/boost-canvas.src.js +22 -7
  661. package/modules/boost.js +81 -79
  662. package/modules/boost.js.map +1 -1
  663. package/modules/boost.src.js +90 -51
  664. package/modules/broken-axis.js +13 -13
  665. package/modules/broken-axis.js.map +1 -1
  666. package/modules/broken-axis.src.js +11 -2
  667. package/modules/bullet.js +9 -9
  668. package/modules/bullet.js.map +1 -1
  669. package/modules/bullet.src.js +12 -6
  670. package/modules/coloraxis.js +24 -24
  671. package/modules/coloraxis.js.map +1 -1
  672. package/modules/coloraxis.src.js +37 -11
  673. package/modules/current-date-indicator.js +5 -4
  674. package/modules/current-date-indicator.js.map +1 -1
  675. package/modules/current-date-indicator.src.js +12 -3
  676. package/modules/cylinder.js +11 -11
  677. package/modules/cylinder.js.map +1 -1
  678. package/modules/cylinder.src.js +11 -2
  679. package/modules/data.d.ts +12 -12
  680. package/modules/data.js +33 -33
  681. package/modules/data.js.map +1 -1
  682. package/modules/data.src.d.ts +12 -12
  683. package/modules/data.src.js +906 -846
  684. package/modules/datagrouping.js +21 -20
  685. package/modules/datagrouping.js.map +1 -1
  686. package/modules/datagrouping.src.js +19 -5
  687. package/modules/debugger.js +8 -7
  688. package/modules/debugger.js.map +1 -1
  689. package/modules/debugger.src.js +15 -2
  690. package/modules/dependency-wheel.js +12 -11
  691. package/modules/dependency-wheel.js.map +1 -1
  692. package/modules/dependency-wheel.src.js +14 -5
  693. package/modules/dotplot.js +6 -6
  694. package/modules/dotplot.js.map +1 -1
  695. package/modules/dotplot.src.js +11 -2
  696. package/modules/drag-panes.js +10 -10
  697. package/modules/drag-panes.js.map +1 -1
  698. package/modules/drag-panes.src.js +12 -3
  699. package/modules/draggable-points.js +35 -34
  700. package/modules/draggable-points.js.map +1 -1
  701. package/modules/draggable-points.src.js +20 -9
  702. package/modules/drilldown.d.ts +19 -0
  703. package/modules/drilldown.js +37 -25
  704. package/modules/drilldown.js.map +1 -1
  705. package/modules/drilldown.src.d.ts +19 -0
  706. package/modules/drilldown.src.js +1124 -108
  707. package/modules/dumbbell.d.ts +4 -0
  708. package/modules/dumbbell.js +17 -17
  709. package/modules/dumbbell.js.map +1 -1
  710. package/modules/dumbbell.src.d.ts +4 -0
  711. package/modules/dumbbell.src.js +34 -13
  712. package/modules/export-data.js +24 -21
  713. package/modules/export-data.js.map +1 -1
  714. package/modules/export-data.src.js +87 -14
  715. package/modules/exporting.d.ts +8 -8
  716. package/modules/exporting.js +39 -39
  717. package/modules/exporting.js.map +1 -1
  718. package/modules/exporting.src.d.ts +8 -8
  719. package/modules/exporting.src.js +270 -135
  720. package/modules/full-screen.js +8 -7
  721. package/modules/full-screen.js.map +1 -1
  722. package/modules/full-screen.src.js +135 -58
  723. package/modules/funnel.js +12 -12
  724. package/modules/funnel.js.map +1 -1
  725. package/modules/funnel.src.js +13 -4
  726. package/modules/funnel3d.js +21 -21
  727. package/modules/funnel3d.js.map +1 -1
  728. package/modules/funnel3d.src.js +11 -2
  729. package/modules/gantt.js +218 -217
  730. package/modules/gantt.js.map +1 -1
  731. package/modules/gantt.src.js +983 -943
  732. package/modules/grid-axis.js +23 -23
  733. package/modules/grid-axis.js.map +1 -1
  734. package/modules/grid-axis.src.js +900 -890
  735. package/modules/heatmap.js +40 -39
  736. package/modules/heatmap.js.map +1 -1
  737. package/modules/heatmap.src.js +160 -113
  738. package/modules/heikinashi.js +8 -8
  739. package/modules/heikinashi.js.map +1 -1
  740. package/modules/heikinashi.src.js +11 -2
  741. package/modules/histogram-bellcurve.js +13 -13
  742. package/modules/histogram-bellcurve.js.map +1 -1
  743. package/modules/histogram-bellcurve.src.js +11 -2
  744. package/modules/hollowcandlestick.js +9 -9
  745. package/modules/hollowcandlestick.js.map +1 -1
  746. package/modules/hollowcandlestick.src.js +19 -10
  747. package/modules/item-series.js +12 -12
  748. package/modules/item-series.js.map +1 -1
  749. package/modules/item-series.src.js +11 -2
  750. package/modules/lollipop.js +7 -7
  751. package/modules/lollipop.js.map +1 -1
  752. package/modules/lollipop.src.js +12 -3
  753. package/modules/map.d.ts +80 -43
  754. package/modules/map.js +171 -144
  755. package/modules/map.js.map +1 -1
  756. package/modules/map.src.d.ts +80 -43
  757. package/modules/map.src.js +8292 -6822
  758. package/modules/marker-clusters.js +36 -36
  759. package/modules/marker-clusters.js.map +1 -1
  760. package/modules/marker-clusters.src.js +48 -28
  761. package/modules/networkgraph.d.ts +1 -12
  762. package/modules/networkgraph.js +46 -45
  763. package/modules/networkgraph.js.map +1 -1
  764. package/modules/networkgraph.src.d.ts +1 -12
  765. package/modules/networkgraph.src.js +127 -55
  766. package/modules/no-data-to-display.js +5 -5
  767. package/modules/no-data-to-display.js.map +1 -1
  768. package/modules/no-data-to-display.src.js +12 -3
  769. package/modules/offline-exporting.js +20 -18
  770. package/modules/offline-exporting.js.map +1 -1
  771. package/modules/offline-exporting.src.js +129 -28
  772. package/modules/oldie-polyfills.js +7 -7
  773. package/modules/oldie-polyfills.js.map +1 -1
  774. package/modules/oldie-polyfills.src.js +11 -2
  775. package/modules/oldie.js +30 -30
  776. package/modules/oldie.js.map +1 -1
  777. package/modules/oldie.src.js +13 -4
  778. package/modules/organization.js +16 -14
  779. package/modules/organization.js.map +1 -1
  780. package/modules/organization.src.js +168 -34
  781. package/modules/overlapping-datalabels.js +3 -2
  782. package/modules/overlapping-datalabels.js.map +1 -1
  783. package/modules/overlapping-datalabels.src.js +11 -2
  784. package/modules/parallel-coordinates.js +11 -11
  785. package/modules/parallel-coordinates.js.map +1 -1
  786. package/modules/parallel-coordinates.src.js +12 -3
  787. package/modules/pareto.js +7 -7
  788. package/modules/pareto.js.map +1 -1
  789. package/modules/pareto.src.js +11 -2
  790. package/modules/pathfinder.js +31 -31
  791. package/modules/pathfinder.js.map +1 -1
  792. package/modules/pathfinder.src.js +11 -2
  793. package/modules/pattern-fill.js +15 -14
  794. package/modules/pattern-fill.js.map +1 -1
  795. package/modules/pattern-fill.src.js +25 -3
  796. package/modules/price-indicator.js +5 -5
  797. package/modules/price-indicator.js.map +1 -1
  798. package/modules/price-indicator.src.js +11 -2
  799. package/modules/pyramid3d.js +4 -4
  800. package/modules/pyramid3d.js.map +1 -1
  801. package/modules/pyramid3d.src.js +11 -2
  802. package/modules/sankey.d.ts +1 -12
  803. package/modules/sankey.js +32 -29
  804. package/modules/sankey.js.map +1 -1
  805. package/modules/sankey.src.d.ts +1 -12
  806. package/modules/sankey.src.js +422 -207
  807. package/modules/series-label.js +18 -17
  808. package/modules/series-label.js.map +1 -1
  809. package/modules/series-label.src.js +482 -386
  810. package/modules/series-on-point.js +18 -0
  811. package/modules/series-on-point.js.map +1 -0
  812. package/modules/series-on-point.src.js +464 -0
  813. package/modules/solid-gauge.js +10 -10
  814. package/modules/solid-gauge.js.map +1 -1
  815. package/modules/solid-gauge.src.js +15 -6
  816. package/modules/sonification.js +59 -59
  817. package/modules/sonification.js.map +1 -1
  818. package/modules/sonification.src.js +13 -8
  819. package/modules/static-scale.js +5 -4
  820. package/modules/static-scale.js.map +1 -1
  821. package/modules/static-scale.src.js +11 -2
  822. package/modules/stock-tools.js +167 -167
  823. package/modules/stock-tools.js.map +1 -1
  824. package/modules/stock-tools.src.js +118 -67
  825. package/modules/stock.js +205 -204
  826. package/modules/stock.js.map +1 -1
  827. package/modules/stock.src.js +141 -76
  828. package/modules/streamgraph.js +5 -4
  829. package/modules/streamgraph.js.map +1 -1
  830. package/modules/streamgraph.src.js +11 -2
  831. package/modules/sunburst.d.ts +3 -0
  832. package/modules/sunburst.js +73 -60
  833. package/modules/sunburst.js.map +1 -1
  834. package/modules/sunburst.src.d.ts +3 -0
  835. package/modules/sunburst.src.js +1391 -406
  836. package/modules/tilemap.js +17 -17
  837. package/modules/tilemap.js.map +1 -1
  838. package/modules/tilemap.src.js +11 -2
  839. package/modules/timeline.js +18 -18
  840. package/modules/timeline.js.map +1 -1
  841. package/modules/timeline.src.js +14 -5
  842. package/modules/treegrid.js +57 -56
  843. package/modules/treegrid.js.map +1 -1
  844. package/modules/treegrid.src.js +913 -892
  845. package/modules/treemap.d.ts +3 -0
  846. package/modules/treemap.js +54 -41
  847. package/modules/treemap.js.map +1 -1
  848. package/modules/treemap.src.d.ts +3 -0
  849. package/modules/treemap.src.js +1229 -255
  850. package/modules/variable-pie.js +9 -9
  851. package/modules/variable-pie.js.map +1 -1
  852. package/modules/variable-pie.src.js +11 -2
  853. package/modules/variwide.js +12 -12
  854. package/modules/variwide.js.map +1 -1
  855. package/modules/variwide.src.js +11 -2
  856. package/modules/vector.js +8 -7
  857. package/modules/vector.js.map +1 -1
  858. package/modules/vector.src.js +11 -2
  859. package/modules/venn.js +31 -31
  860. package/modules/venn.js.map +1 -1
  861. package/modules/venn.src.js +88 -105
  862. package/modules/windbarb.js +15 -15
  863. package/modules/windbarb.js.map +1 -1
  864. package/modules/windbarb.src.js +11 -2
  865. package/modules/wordcloud.js +23 -23
  866. package/modules/wordcloud.js.map +1 -1
  867. package/modules/wordcloud.src.js +92 -109
  868. package/modules/xrange.js +16 -16
  869. package/modules/xrange.js.map +1 -1
  870. package/modules/xrange.src.js +11 -2
  871. package/package.json +1 -1
  872. package/themes/avocado.js +4 -3
  873. package/themes/avocado.js.map +1 -1
  874. package/themes/avocado.src.js +11 -2
  875. package/themes/brand-dark.js +9 -8
  876. package/themes/brand-dark.js.map +1 -1
  877. package/themes/brand-dark.src.js +11 -2
  878. package/themes/brand-light.js +8 -8
  879. package/themes/brand-light.js.map +1 -1
  880. package/themes/brand-light.src.js +11 -2
  881. package/themes/dark-blue.js +9 -8
  882. package/themes/dark-blue.js.map +1 -1
  883. package/themes/dark-blue.src.js +11 -2
  884. package/themes/dark-green.js +9 -8
  885. package/themes/dark-green.js.map +1 -1
  886. package/themes/dark-green.src.js +11 -2
  887. package/themes/dark-unica.js +8 -7
  888. package/themes/dark-unica.js.map +1 -1
  889. package/themes/dark-unica.src.js +11 -2
  890. package/themes/gray.js +9 -8
  891. package/themes/gray.js.map +1 -1
  892. package/themes/gray.src.js +11 -2
  893. package/themes/grid-light.js +5 -4
  894. package/themes/grid-light.js.map +1 -1
  895. package/themes/grid-light.src.js +11 -2
  896. package/themes/grid.js +5 -5
  897. package/themes/grid.js.map +1 -1
  898. package/themes/grid.src.js +11 -2
  899. package/themes/high-contrast-dark.js +7 -7
  900. package/themes/high-contrast-dark.js.map +1 -1
  901. package/themes/high-contrast-dark.src.js +21 -12
  902. package/themes/high-contrast-light.js +3 -3
  903. package/themes/high-contrast-light.js.map +1 -1
  904. package/themes/high-contrast-light.src.js +21 -12
  905. package/themes/sand-signika.js +5 -5
  906. package/themes/sand-signika.js.map +1 -1
  907. package/themes/sand-signika.src.js +11 -2
  908. package/themes/skies.js +5 -5
  909. package/themes/skies.js.map +1 -1
  910. package/themes/skies.src.js +11 -2
  911. package/themes/sunset.js +3 -3
  912. package/themes/sunset.js.map +1 -1
  913. package/themes/sunset.src.js +11 -2
  914. package/es-modules/Extensions/Polar.js +0 -740
  915. package/es-modules/Maps/ProjectionDefinition.js +0 -9
  916. package/es-modules/Series/ColorMapMixin.js +0 -84
  917. package/es-modules/Series/DrawPointComposition.js +0 -111
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v9.3.3 (2022-02-01)
2
+ * @license Highcharts JS v10.2.0 (2022-07-05)
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) {
@@ -43,7 +52,8 @@
43
52
  *
44
53
  * */
45
54
  var format = F.format;
46
- var pick = U.pick;
55
+ var getNestedProperty = U.getNestedProperty,
56
+ pick = U.pick;
47
57
  /* *
48
58
  *
49
59
  * Composition
@@ -102,7 +112,7 @@
102
112
  var lenArg = Number(eachArguments[1]),
103
113
  len = void 0;
104
114
  result = '';
105
- arr = ctx[eachArguments[0]];
115
+ arr = getNestedProperty(eachArguments[0], ctx);
106
116
  if (arr) {
107
117
  lenArg = isNaN(lenArg) ? arr.length : lenArg;
108
118
  len = lenArg < 0 ?
@@ -117,7 +127,7 @@
117
127
  }
118
128
  // Dealing with a plural-function?
119
129
  if (pluralStart > -1) {
120
- var pluralEnd = (statement.slice(pluralStart).indexOf(')') + pluralStart), pluralStatement = statement.substring(pluralStart + 8, pluralEnd), pluralArguments = pluralStatement.split(','), num = Number(ctx[pluralArguments[0]]);
130
+ var pluralEnd = (statement.slice(pluralStart).indexOf(')') + pluralStart), pluralStatement = statement.substring(pluralStart + 8, pluralEnd), pluralArguments = pluralStatement.split(','), num = Number(getNestedProperty(pluralArguments[0], ctx));
121
131
  switch (num) {
122
132
  case 0:
123
133
  result = pick(pluralArguments[4], pluralArguments[1]);
@@ -140,7 +150,7 @@
140
150
  ix = Number(statement.substring(indexStart + 1,
141
151
  indexEnd));
142
152
  var val = void 0;
143
- arr = ctx[arrayName];
153
+ arr = getNestedProperty(arrayName, ctx);
144
154
  if (!isNaN(ix) && arr) {
145
155
  if (ix < 0) {
146
156
  val = arr[arr.length + ix];
@@ -675,7 +685,7 @@
675
685
  function fireEventOnWrappedOrUnwrappedElement(el, eventObject) {
676
686
  var type = eventObject.type;
677
687
  var hcEvents = el.hcEvents;
678
- if (doc.createEvent &&
688
+ if ((doc.createEvent) &&
679
689
  (el.dispatchEvent || el.fireEvent)) {
680
690
  if (el.dispatchEvent) {
681
691
  el.dispatchEvent(eventObject);
@@ -759,9 +769,11 @@
759
769
  */
760
770
  function getAxisTimeLengthDesc(axis) {
761
771
  var chart = axis.chart,
762
- range = {};
772
+ range = {},
773
+ min = axis.dataMin || axis.min || 0,
774
+ max = axis.dataMax || axis.max || 0;
763
775
  var rangeUnit = 'Seconds';
764
- range.Seconds = ((axis.max || 0) - (axis.min || 0)) / 1000;
776
+ range.Seconds = (max - min) / 1000;
765
777
  range.Minutes = range.Seconds / 60;
766
778
  range.Hours = range.Minutes / 60;
767
779
  range.Days = range.Hours / 24;
@@ -791,9 +803,15 @@
791
803
  options.accessibility &&
792
804
  options.accessibility.screenReaderSection.axisRangeDateFormat ||
793
805
  ''),
794
- format = function (axisKey) {
795
- return axis.dateTime ? chart.time.dateFormat(dateRangeFormat,
796
- axis[axisKey]) : axis[axisKey];
806
+ extremes = {
807
+ min: axis.dataMin || axis.min || 0,
808
+ max: axis.dataMax || axis.max || 0
809
+ },
810
+ format = function (key) {
811
+ return axis.dateTime ?
812
+ chart.time.dateFormat(dateRangeFormat,
813
+ extremes[key]) :
814
+ extremes[key].toString();
797
815
  };
798
816
  return chart.langFormat('accessibility.axis.rangeFromTo', {
799
817
  chart: chart,
@@ -1454,20 +1472,19 @@
1454
1472
  }
1455
1473
  };
1456
1474
  /**
1475
+ * Set attributes on the chart container element.
1457
1476
  * @private
1458
1477
  */
1459
1478
  ContainerComponent.prototype.setRenderToAttrs = function () {
1460
- var chart = this.chart;
1461
- if (chart.options.accessibility.landmarkVerbosity !== 'disabled') {
1462
- chart.renderTo.setAttribute('role', 'region');
1463
- }
1464
- else {
1465
- chart.renderTo.removeAttribute('role');
1479
+ var chart = this.chart, shouldHaveLandmark = chart.options.accessibility
1480
+ .landmarkVerbosity !== 'disabled', containerLabel = chart.langFormat('accessibility.chartContainerLabel', {
1481
+ title: getChartTitle(chart),
1482
+ chart: chart
1483
+ });
1484
+ if (containerLabel) {
1485
+ chart.renderTo.setAttribute('role', shouldHaveLandmark ? 'region' : 'group');
1486
+ chart.renderTo.setAttribute('aria-label', containerLabel);
1466
1487
  }
1467
- chart.renderTo.setAttribute('aria-label', chart.langFormat('accessibility.chartContainerLabel', {
1468
- title: getChartTitle(chart),
1469
- chart: chart
1470
- }));
1471
1488
  };
1472
1489
  /**
1473
1490
  * @private
@@ -1672,15 +1689,21 @@
1672
1689
  }
1673
1690
  // Add the border rect
1674
1691
  var bb = this.getBBox(),
1675
- pad = pick(margin, 3);
1692
+ pad = pick(margin, 3),
1693
+ parent = this.parentGroup,
1694
+ scaleX = this.scaleX || parent && parent.scaleX,
1695
+ scaleY = this.scaleY || parent && parent.scaleY,
1696
+ oneDefined = scaleX ? !scaleY : scaleY,
1697
+ scaleBoth = oneDefined ? Math.abs(scaleX || scaleY || 1) :
1698
+ (Math.abs(scaleX || 1) + Math.abs(scaleY || 1)) / 2;
1676
1699
  bb.x += this.translateX ? this.translateX : 0;
1677
1700
  bb.y += this.translateY ? this.translateY : 0;
1678
1701
  var borderPosX = bb.x - pad,
1679
1702
  borderPosY = bb.y - pad,
1680
1703
  borderWidth = bb.width + 2 * pad,
1681
1704
  borderHeight = bb.height + 2 * pad;
1682
- // For text elements, apply x and y offset, #11397.
1683
1705
  /**
1706
+ * For text elements, apply x and y offset, #11397.
1684
1707
  * @private
1685
1708
  */
1686
1709
  function getTextAnchorCorrection(text) {
@@ -1728,16 +1751,16 @@
1728
1751
  }
1729
1752
  }
1730
1753
  }
1731
- this.focusBorder = this.renderer.rect(borderPosX, borderPosY, borderWidth, borderHeight, parseInt((attribs && attribs.r || 0).toString(), 10))
1754
+ this.focusBorder = this.renderer.rect(borderPosX, borderPosY, borderWidth, borderHeight, parseInt((attribs && attribs.r || 0).toString(), 10) / scaleBoth)
1732
1755
  .addClass('highcharts-focus-border')
1733
1756
  .attr({
1734
1757
  zIndex: 99
1735
1758
  })
1736
- .add(this.parentGroup);
1759
+ .add(parent);
1737
1760
  if (!this.renderer.styledMode) {
1738
1761
  this.focusBorder.attr({
1739
1762
  stroke: attribs && attribs.stroke,
1740
- 'stroke-width': attribs && attribs.strokeWidth
1763
+ 'stroke-width': (attribs && attribs.strokeWidth || 0) / scaleBoth
1741
1764
  });
1742
1765
  }
1743
1766
  avgElementAddUpdateFocusBorderHooks(this, margin, attribs);
@@ -2032,7 +2055,7 @@
2032
2055
  var labels = getChartAnnotationLabels(chart);
2033
2056
  return labels.map(function (label) {
2034
2057
  var desc = escapeStringForHTML(stripHTMLTagsFromString(getAnnotationLabelDescription(label)));
2035
- return desc ? "<li>" + desc + "</li>" : '';
2058
+ return desc ? "<li>".concat(desc, "</li>") : '';
2036
2059
  });
2037
2060
  }
2038
2061
  /**
@@ -2048,7 +2071,7 @@
2048
2071
  return '';
2049
2072
  }
2050
2073
  var annotationItems = getAnnotationListItems(chart);
2051
- return "<ul style=\"list-style-type: none\">" + annotationItems.join(' ') + "</ul>";
2074
+ return "<ul style=\"list-style-type: none\">".concat(annotationItems.join(' '), "</ul>");
2052
2075
  }
2053
2076
  /**
2054
2077
  * Return the texts for the annotation(s) connected to a point, or empty array
@@ -2065,7 +2088,7 @@
2065
2088
  if (!pointLabels.length) {
2066
2089
  return [];
2067
2090
  }
2068
- return pointLabels.map(function (label) { return "" + getLabelText(label); });
2091
+ return pointLabels.map(function (label) { return "".concat(getLabelText(label)); });
2069
2092
  }
2070
2093
  /* *
2071
2094
  *
@@ -2176,11 +2199,13 @@
2176
2199
  function getTypeDescription(chart, types) {
2177
2200
  var firstType = types[0],
2178
2201
  firstSeries = chart.series && chart.series[0] || {},
2202
+ mapTitle = chart.mapView && chart.mapView.geoMap &&
2203
+ chart.mapView.geoMap.title,
2179
2204
  formatContext = {
2180
2205
  numSeries: chart.series.length,
2181
2206
  numPoints: firstSeries.points && firstSeries.points.length,
2182
2207
  chart: chart,
2183
- mapTitle: firstSeries.mapTitle
2208
+ mapTitle: mapTitle
2184
2209
  };
2185
2210
  if (!firstType) {
2186
2211
  return getTypeDescForEmptyChart(chart, formatContext);
@@ -2370,27 +2395,28 @@
2370
2395
  if (sectionDiv.parentNode) {
2371
2396
  sectionDiv.parentNode.removeChild(sectionDiv);
2372
2397
  }
2373
- delete region.element;
2398
+ region.element = null;
2374
2399
  }
2375
2400
  };
2376
2401
  /**
2402
+ * Apply a11y attributes to a screen reader info section
2377
2403
  * @private
2378
2404
  * @param {Highcharts.HTMLDOMElement} sectionDiv The section element
2379
2405
  * @param {string} regionKey Name/key of the region we are setting attrs for
2380
2406
  */
2381
2407
  InfoRegionsComponent.prototype.setScreenReaderSectionAttribs = function (sectionDiv, regionKey) {
2382
- var labelLangKey = ('accessibility.screenReaderSection.' + regionKey + 'RegionLabel'), chart = this.chart, labelText = chart.langFormat(labelLangKey, { chart: chart, chartTitle: getChartTitle(chart) }), sectionId = 'highcharts-screen-reader-region-' + regionKey + '-' +
2383
- chart.index;
2408
+ var chart = this.chart, labelText = chart.langFormat('accessibility.screenReaderSection.' + regionKey +
2409
+ 'RegionLabel', { chart: chart, chartTitle: getChartTitle(chart) }), sectionId = "highcharts-screen-reader-region-".concat(regionKey, "-").concat(chart.index);
2384
2410
  attr(sectionDiv, {
2385
2411
  id: sectionId,
2386
- 'aria-label': labelText
2412
+ 'aria-label': labelText || void 0
2387
2413
  });
2388
2414
  // Sections are wrapped to be positioned relatively to chart in case
2389
2415
  // elements inside are tabbed to.
2390
2416
  sectionDiv.style.position = 'relative';
2391
- if (chart.options.accessibility.landmarkVerbosity === 'all' &&
2392
- labelText) {
2393
- sectionDiv.setAttribute('role', 'region');
2417
+ if (labelText) {
2418
+ sectionDiv.setAttribute('role', chart.options.accessibility.landmarkVerbosity === 'all' ?
2419
+ 'region' : 'group');
2394
2420
  }
2395
2421
  };
2396
2422
  /**
@@ -2611,7 +2637,10 @@
2611
2637
  return axes.length > 1 || axes[0] &&
2612
2638
  pick(axes[0].options.accessibility &&
2613
2639
  axes[0].options.accessibility.enabled, defaultCondition);
2614
- }, hasNoMap = !!chart.types && chart.types.indexOf('map') < 0, hasCartesian = !!chart.hasCartesianSeries, showXAxes = shouldDescribeColl('xAxis', !chart.angular && hasCartesian && hasNoMap), showYAxes = shouldDescribeColl('yAxis', hasCartesian && hasNoMap), desc = {};
2640
+ }, hasNoMap = !!chart.types &&
2641
+ chart.types.indexOf('map') < 0 &&
2642
+ chart.types.indexOf('treemap') < 0 &&
2643
+ chart.types.indexOf('tilemap') < 0, hasCartesian = !!chart.hasCartesianSeries, showXAxes = shouldDescribeColl('xAxis', !chart.angular && hasCartesian && hasNoMap), showYAxes = shouldDescribeColl('yAxis', hasCartesian && hasNoMap), desc = {};
2615
2644
  if (showXAxes) {
2616
2645
  desc.xAxis = this.getAxisDescriptionText('xAxis');
2617
2646
  }
@@ -2758,7 +2787,6 @@
2758
2787
  if (menu) {
2759
2788
  menu.setAttribute('aria-hidden', 'true');
2760
2789
  }
2761
- this.isExportMenuShown = false;
2762
2790
  this.setExportButtonExpandedState('false');
2763
2791
  };
2764
2792
  /**
@@ -2771,7 +2799,6 @@
2771
2799
  this.addAccessibleContextMenuAttribs();
2772
2800
  unhideChartElementFromAT(chart, menu);
2773
2801
  }
2774
- this.isExportMenuShown = true;
2775
2802
  this.setExportButtonExpandedState('true');
2776
2803
  };
2777
2804
  /**
@@ -2817,7 +2844,8 @@
2817
2844
  chart: chart,
2818
2845
  chartTitle: getChartTitle(chart)
2819
2846
  }),
2820
- 'aria-expanded': false
2847
+ 'aria-expanded': false,
2848
+ title: chart.options.lang.contextButtonTitle || null
2821
2849
  });
2822
2850
  }
2823
2851
  };
@@ -2971,7 +2999,7 @@
2971
2999
  var chart = this.chart;
2972
3000
  var curHighlightedItem = chart.exportDivElements[chart.highlightedExportItemIx];
2973
3001
  var exportButtonElement = getExportMenuButtonElement(chart).element;
2974
- if (this.isExportMenuShown) {
3002
+ if (chart.openMenu) {
2975
3003
  this.fakeClickEvent(curHighlightedItem);
2976
3004
  }
2977
3005
  else {
@@ -3041,7 +3069,7 @@
3041
3069
  function chartHideExportMenu() {
3042
3070
  var chart = this,
3043
3071
  exportList = chart.exportDivElements;
3044
- if (exportList && chart.exportContextMenu) {
3072
+ if (exportList && chart.exportContextMenu && chart.openMenu) {
3045
3073
  // Reset hover states etc.
3046
3074
  exportList.forEach(function (el) {
3047
3075
  if (el &&
@@ -3239,6 +3267,65 @@
3239
3267
  this.removeExitAnchor();
3240
3268
  }
3241
3269
  };
3270
+ /**
3271
+ * We use an exit anchor to move focus out of chart whenever we want, by
3272
+ * setting focus to this div and not preventing the default tab action. We
3273
+ * also use this when users come back into the chart by tabbing back, in
3274
+ * order to navigate from the end of the chart.
3275
+ * @private
3276
+ */
3277
+ KeyboardNavigation.prototype.updateExitAnchor = function () {
3278
+ var endMarkerId = "highcharts-end-of-chart-marker-".concat(this.chart.index),
3279
+ endMarker = getElement(endMarkerId);
3280
+ this.removeExitAnchor();
3281
+ if (endMarker) {
3282
+ this.makeElementAnExitAnchor(endMarker);
3283
+ this.exitAnchor = endMarker;
3284
+ }
3285
+ else {
3286
+ this.createExitAnchor();
3287
+ }
3288
+ };
3289
+ /**
3290
+ * Move to prev/next module.
3291
+ * @private
3292
+ * @param {number} direction
3293
+ * Direction to move. +1 for next, -1 for prev.
3294
+ * @return {boolean}
3295
+ * True if there was a valid module in direction.
3296
+ */
3297
+ KeyboardNavigation.prototype.move = function (direction) {
3298
+ var curModule = this.modules && this.modules[this.currentModuleIx];
3299
+ if (curModule && curModule.terminate) {
3300
+ curModule.terminate(direction);
3301
+ }
3302
+ // Remove existing focus border if any
3303
+ if (this.chart.focusElement) {
3304
+ this.chart.focusElement.removeFocusBorder();
3305
+ }
3306
+ this.currentModuleIx += direction;
3307
+ var newModule = this.modules && this.modules[this.currentModuleIx];
3308
+ if (newModule) {
3309
+ if (newModule.validate && !newModule.validate()) {
3310
+ return this.move(direction); // Invalid module, recurse
3311
+ }
3312
+ if (newModule.init) {
3313
+ newModule.init(direction); // Valid module, init it
3314
+ return true;
3315
+ }
3316
+ }
3317
+ // No module
3318
+ this.currentModuleIx = 0; // Reset counter
3319
+ // Set focus to chart or exit anchor depending on direction
3320
+ this.exiting = true;
3321
+ if (direction > 0) {
3322
+ this.exitAnchor && this.exitAnchor.focus();
3323
+ }
3324
+ else {
3325
+ this.tabindexContainer.focus();
3326
+ }
3327
+ return false;
3328
+ };
3242
3329
  /**
3243
3330
  * Function to run on container focus
3244
3331
  * @private
@@ -3252,30 +3339,37 @@
3252
3339
  if (!this.exiting &&
3253
3340
  !this.tabbingInBackwards &&
3254
3341
  !this.isClickingChart &&
3255
- !focusComesFromChart &&
3256
- this.modules[0]) {
3257
- this.modules[0].init(1);
3342
+ !focusComesFromChart) {
3343
+ var ix = this.getFirstValidModuleIx();
3344
+ if (ix !== null) {
3345
+ this.currentModuleIx = ix;
3346
+ this.modules[ix].init(1);
3347
+ }
3258
3348
  }
3259
3349
  this.exiting = false;
3260
3350
  };
3261
3351
  /**
3262
- * Reset chart navigation state if we click outside the chart and it's
3263
- * not already reset.
3352
+ * Reset chart navigation state if we mouse click and it's not already
3353
+ * reset. Reset fully if outside the chart, otherwise just hide focus
3354
+ * indicator.
3264
3355
  * @private
3265
3356
  */
3266
3357
  KeyboardNavigation.prototype.onMouseUp = function () {
3267
3358
  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();
3359
+ if (!this.keyboardReset) {
3360
+ var chart = this.chart;
3361
+ if (!this.pointerIsOverChart) {
3362
+ var curMod = this.modules &&
3363
+ this.modules[this.currentModuleIx || 0];
3364
+ if (curMod && curMod.terminate) {
3365
+ curMod.terminate();
3366
+ }
3367
+ this.currentModuleIx = 0;
3274
3368
  }
3275
3369
  if (chart.focusElement) {
3276
3370
  chart.focusElement.removeFocusBorder();
3371
+ delete chart.focusElement;
3277
3372
  }
3278
- this.currentModuleIx = 0;
3279
3373
  this.keyboardReset = true;
3280
3374
  }
3281
3375
  };
@@ -3302,10 +3396,10 @@
3302
3396
  preventDefault = true;
3303
3397
  }
3304
3398
  else if (response === curNavModule.response.prev) {
3305
- preventDefault = this.prev();
3399
+ preventDefault = this.move(-1);
3306
3400
  }
3307
3401
  else if (response === curNavModule.response.next) {
3308
- preventDefault = this.next();
3402
+ preventDefault = this.move(1);
3309
3403
  }
3310
3404
  if (preventDefault) {
3311
3405
  e.preventDefault();
@@ -3313,79 +3407,6 @@
3313
3407
  }
3314
3408
  }
3315
3409
  };
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
3410
  /**
3390
3411
  * Chart container should have tabindex if navigation is enabled.
3391
3412
  * @private
@@ -3414,6 +3435,18 @@
3414
3435
  }
3415
3436
  };
3416
3437
  /**
3438
+ * Add new exit anchor to the chart.
3439
+ * @private
3440
+ */
3441
+ KeyboardNavigation.prototype.createExitAnchor = function () {
3442
+ var chart = this.chart,
3443
+ exitAnchor = this.exitAnchor = doc.createElement('div');
3444
+ chart.renderTo.appendChild(exitAnchor);
3445
+ this.makeElementAnExitAnchor(exitAnchor);
3446
+ };
3447
+ /**
3448
+ * Add attributes and events to an element to make it function as an
3449
+ * exit anchor.
3417
3450
  * @private
3418
3451
  */
3419
3452
  KeyboardNavigation.prototype.makeElementAnExitAnchor = function (el) {
@@ -3425,27 +3458,17 @@
3425
3458
  this.addExitAnchorEventsToEl(el);
3426
3459
  };
3427
3460
  /**
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
- /**
3461
+ * Destroy the exit anchor and remove from DOM.
3439
3462
  * @private
3440
3463
  */
3441
3464
  KeyboardNavigation.prototype.removeExitAnchor = function () {
3442
3465
  if (this.exitAnchor && this.exitAnchor.parentNode) {
3443
- this.exitAnchor.parentNode
3444
- .removeChild(this.exitAnchor);
3466
+ this.exitAnchor.parentNode.removeChild(this.exitAnchor);
3445
3467
  delete this.exitAnchor;
3446
3468
  }
3447
3469
  };
3448
3470
  /**
3471
+ * Add focus handler to exit anchor element.
3449
3472
  * @private
3450
3473
  */
3451
3474
  KeyboardNavigation.prototype.addExitAnchorEventsToEl = function (element) {
@@ -3456,6 +3479,9 @@
3456
3479
  focusComesFromChart = (e.relatedTarget &&
3457
3480
  chart.container.contains(e.relatedTarget)),
3458
3481
  comingInBackwards = !(focusComesFromChart || keyboardNavigation.exiting);
3482
+ if (chart.focusElement) {
3483
+ delete chart.focusElement;
3484
+ }
3459
3485
  if (comingInBackwards) {
3460
3486
  // Focus the container instead
3461
3487
  keyboardNavigation.tabbingInBackwards = true;
@@ -3473,7 +3499,7 @@
3473
3499
  if (curModule &&
3474
3500
  curModule.validate && !curModule.validate()) {
3475
3501
  // Invalid. Try moving backwards to find next valid.
3476
- keyboardNavigation.prev();
3502
+ keyboardNavigation.move(-1);
3477
3503
  }
3478
3504
  else if (curModule) {
3479
3505
  // We have a valid module, init it
@@ -3487,6 +3513,21 @@
3487
3513
  }
3488
3514
  });
3489
3515
  };
3516
+ /**
3517
+ * Get the ix of the first module that either does not require validation or
3518
+ * validates positively.
3519
+ * @private
3520
+ */
3521
+ KeyboardNavigation.prototype.getFirstValidModuleIx = function () {
3522
+ var len = this.modules.length;
3523
+ for (var i = 0; i < len; ++i) {
3524
+ var mod = this.modules[i];
3525
+ if (!mod.validate || mod.validate()) {
3526
+ return i;
3527
+ }
3528
+ }
3529
+ return null;
3530
+ };
3490
3531
  /**
3491
3532
  * Remove all traces of keyboard navigation.
3492
3533
  * @private
@@ -3522,6 +3563,7 @@
3522
3563
  * */
3523
3564
  /* eslint-disable valid-jsdoc */
3524
3565
  /**
3566
+ * Composition function.
3525
3567
  * @private
3526
3568
  */
3527
3569
  function compose(ChartClass) {
@@ -3605,6 +3647,7 @@
3605
3647
  };
3606
3648
  })();
3607
3649
  var animObject = A.animObject;
3650
+ var doc = H.doc;
3608
3651
  var addEvent = U.addEvent,
3609
3652
  fireEvent = U.fireEvent,
3610
3653
  isNumber = U.isNumber,
@@ -3619,7 +3662,6 @@
3619
3662
  * Functions
3620
3663
  *
3621
3664
  * */
3622
- /* eslint-disable valid-jsdoc */
3623
3665
  /**
3624
3666
  * @private
3625
3667
  */
@@ -3640,6 +3682,19 @@
3640
3682
  !(chart.colorAxis && chart.colorAxis.length) &&
3641
3683
  legendA11yOptions.enabled !== false);
3642
3684
  }
3685
+ /**
3686
+ * @private
3687
+ */
3688
+ function setLegendItemHoverState(hoverActive, legendItem) {
3689
+ legendItem.setState(hoverActive ? 'hover' : '', true);
3690
+ ['legendGroup', 'legendItem', 'legendSymbol'].forEach(function (i) {
3691
+ var obj = legendItem[i];
3692
+ var el = obj && obj.element || obj;
3693
+ if (el) {
3694
+ fireEvent(el, hoverActive ? 'mouseover' : 'mouseout');
3695
+ }
3696
+ });
3697
+ }
3643
3698
  /* *
3644
3699
  *
3645
3700
  * Class
@@ -3663,6 +3718,7 @@
3663
3718
  var _this = _super !== null && _super.apply(this,
3664
3719
  arguments) || this;
3665
3720
  _this.highlightedLegendItemIx = NaN;
3721
+ _this.proxyGroup = null;
3666
3722
  return _this;
3667
3723
  }
3668
3724
  /* *
@@ -3670,7 +3726,6 @@
3670
3726
  * Functions
3671
3727
  *
3672
3728
  * */
3673
- /* eslint-disable valid-jsdoc */
3674
3729
  /**
3675
3730
  * Init the component
3676
3731
  * @private
@@ -3788,12 +3843,19 @@
3788
3843
  * @private
3789
3844
  */
3790
3845
  LegendComponent.prototype.recreateProxies = function () {
3846
+ var focusedElement = doc.activeElement;
3847
+ var proxyGroup = this.proxyGroup;
3848
+ var shouldRestoreFocus = focusedElement && proxyGroup &&
3849
+ proxyGroup.contains(focusedElement);
3791
3850
  this.removeProxies();
3792
3851
  if (shouldDoLegendA11y(this.chart)) {
3793
3852
  this.addLegendProxyGroup();
3794
3853
  this.proxyLegendItems();
3795
3854
  this.updateLegendItemProxyVisibility();
3796
3855
  this.updateLegendTitle();
3856
+ if (shouldRestoreFocus) {
3857
+ this.chart.highlightLegendItem(this.highlightedLegendItemIx);
3858
+ }
3797
3859
  return true;
3798
3860
  }
3799
3861
  return false;
@@ -3829,7 +3891,7 @@
3829
3891
  var a11yOptions = this.chart.options.accessibility;
3830
3892
  var groupRole = a11yOptions.landmarkVerbosity === 'all' ?
3831
3893
  'region' : null;
3832
- this.proxyProvider.addGroup('legend', 'ul', {
3894
+ this.proxyGroup = this.proxyProvider.addGroup('legend', 'ul', {
3833
3895
  // Filled by updateLegendTitle, to keep up to date without
3834
3896
  // recreating group
3835
3897
  'aria-label': '_placeholder_',
@@ -3913,21 +3975,19 @@
3913
3975
  validate: function () {
3914
3976
  return component.shouldHaveLegendNavigation();
3915
3977
  },
3916
- init: function (direction) {
3917
- return component.onKbdNavigationInit(direction);
3978
+ init: function () {
3979
+ chart.highlightLegendItem(0);
3980
+ component.highlightedLegendItemIx = 0;
3918
3981
  },
3919
3982
  terminate: function () {
3920
3983
  component.highlightedLegendItemIx = -1;
3921
- chart.legend.allItems.forEach(function (item) { return item.setState('', true); });
3984
+ chart.legend.allItems.forEach(function (item) { return setLegendItemHoverState(false, item); });
3922
3985
  }
3923
3986
  });
3924
3987
  };
3925
3988
  /**
3989
+ * Arrow key navigation
3926
3990
  * @private
3927
- * @param {Highcharts.KeyboardNavigationHandler} keyboardNavigationHandler
3928
- * @param {number} keyCode
3929
- * @return {number}
3930
- * Response code
3931
3991
  */
3932
3992
  LegendComponent.prototype.onKbdArrowKey = function (keyboardNavigationHandler, keyCode) {
3933
3993
  var keys = this.keyCodes,
@@ -3946,8 +4006,7 @@
3946
4006
  keyboardNavigationHandler.init(direction);
3947
4007
  return response.success;
3948
4008
  }
3949
- // No wrap, move
3950
- return response[direction > 0 ? 'next' : 'prev'];
4009
+ return response.success;
3951
4010
  };
3952
4011
  /**
3953
4012
  * @private
@@ -3977,17 +4036,6 @@
3977
4036
  legendA11yOptions.keyboardNavigation &&
3978
4037
  legendA11yOptions.keyboardNavigation.enabled);
3979
4038
  };
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
4039
  return LegendComponent;
3992
4040
  }(AccessibilityComponent));
3993
4041
  /* *
@@ -4024,7 +4072,7 @@
4024
4072
  var itemToHighlight = items[ix];
4025
4073
  if (itemToHighlight) {
4026
4074
  if (isNumber(oldIx) && items[oldIx]) {
4027
- fireEvent(items[oldIx].legendGroup.element, 'mouseout');
4075
+ setLegendItemHoverState(false, items[oldIx]);
4028
4076
  }
4029
4077
  scrollLegendToItem(this.legend, ix);
4030
4078
  var legendItemProp = itemToHighlight.legendItem;
@@ -4033,9 +4081,7 @@
4033
4081
  if (legendItemProp && legendItemProp.element && proxyBtn) {
4034
4082
  this.setFocusToElement(legendItemProp, proxyBtn);
4035
4083
  }
4036
- if (itemToHighlight.legendGroup) {
4037
- fireEvent(itemToHighlight.legendGroup.element, 'mouseover');
4038
- }
4084
+ setLegendItemHoverState(true, itemToHighlight);
4039
4085
  return true;
4040
4086
  }
4041
4087
  return false;
@@ -4124,14 +4170,21 @@
4124
4170
  }) || null;
4125
4171
  }
4126
4172
  /**
4173
+ * Whether or not we should add a dummy point element in
4174
+ * order to describe a point that has no graphic.
4127
4175
  * @private
4128
4176
  */
4129
4177
  function shouldAddDummyPoint(point) {
4130
4178
  // Note: Sunburst series use isNull for hidden points on drilldown.
4131
4179
  // Ignore these.
4132
- var isSunburst = point.series && point.series.is('sunburst'),
4133
- isNull = point.isNull;
4134
- return isNull && !isSunburst;
4180
+ var series = point.series,
4181
+ chart = series && series.chart,
4182
+ isSunburst = series && series.is('sunburst'),
4183
+ isNull = point.isNull,
4184
+ shouldDescribeNull = chart &&
4185
+ chart
4186
+ .options.accessibility.point.describeNull;
4187
+ return isNull && !isSunburst && shouldDescribeNull;
4135
4188
  }
4136
4189
  /**
4137
4190
  * @private
@@ -4379,9 +4432,9 @@
4379
4432
  * @private
4380
4433
  */
4381
4434
  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 : '';
4435
+ var series = point.series, shouldExposeSeriesName = series.chart.series.length > 1 ||
4436
+ series.options.name, valText = getPointValueDescription(point), description = point.options && point.options.accessibility &&
4437
+ point.options.accessibility.description, userDescText = description ? ' ' + description : '', seriesNameText = shouldExposeSeriesName ? ' ' + series.name + '.' : '', annotationsDesc = getPointAnnotationDescription(point), pointAnnotationsText = annotationsDesc ? ' ' + annotationsDesc : '';
4385
4438
  point.accessibility = point.accessibility || {};
4386
4439
  point.accessibility.valueDescription = valText;
4387
4440
  return valText + userDescText + seriesNameText + pointAnnotationsText;
@@ -4412,15 +4465,21 @@
4412
4465
  */
4413
4466
  function describePointsInSeries(series) {
4414
4467
  var setScreenReaderProps = shouldSetScreenReaderPropsOnPoints(series),
4415
- setKeyboardProps = shouldSetKeyboardNavPropsOnPoints(series);
4468
+ setKeyboardProps = shouldSetKeyboardNavPropsOnPoints(series),
4469
+ shouldDescribeNullPoints = series.chart.options.accessibility
4470
+ .point.describeNull;
4416
4471
  if (setScreenReaderProps || setKeyboardProps) {
4417
4472
  series.points.forEach(function (point) {
4418
4473
  var pointEl = point.graphic && point.graphic.element ||
4419
- shouldAddDummyPoint(point) && addDummyPointElement(point);
4420
- var pointA11yDisabled = (point.options &&
4474
+ shouldAddDummyPoint(point) && addDummyPointElement(point),
4475
+ pointA11yDisabled = (point.options &&
4421
4476
  point.options.accessibility &&
4422
4477
  point.options.accessibility.enabled === false);
4423
4478
  if (pointEl) {
4479
+ if (point.isNull && !shouldDescribeNullPoints) {
4480
+ pointEl.setAttribute('aria-hidden', true);
4481
+ return;
4482
+ }
4424
4483
  // We always set tabindex, as long as we are setting props.
4425
4484
  // When setting tabindex, also remove default outline to
4426
4485
  // avoid ugly border on click.
@@ -4448,14 +4507,19 @@
4448
4507
  description = getSeriesDescriptionText(series),
4449
4508
  shouldDescribeAxis = function (coll) {
4450
4509
  return chart[coll] && chart[coll].length > 1 && series[coll];
4451
- }, xAxisInfo = getSeriesAxisDescriptionText(series, 'xAxis'), yAxisInfo = getSeriesAxisDescriptionText(series, 'yAxis'), summaryContext = {
4452
- name: series.name || '',
4453
- ix: series.index + 1,
4454
- numSeries: chart.series && chart.series.length,
4455
- numPoints: series.points && series.points.length,
4456
- series: series
4457
- }, combinationSuffix = chartTypes.length > 1 ? 'Combination' : '', summary = chart.langFormat('accessibility.series.summary.' + series.type + combinationSuffix, summaryContext) || chart.langFormat('accessibility.series.summary.default' + combinationSuffix, summaryContext);
4458
- return summary + (description ? ' ' + description : '') + (shouldDescribeAxis('yAxis') ? ' ' + yAxisInfo : '') + (shouldDescribeAxis('xAxis') ? ' ' + xAxisInfo : '');
4510
+ }, seriesNumber = series.index + 1, xAxisInfo = getSeriesAxisDescriptionText(series, 'xAxis'), yAxisInfo = getSeriesAxisDescriptionText(series, 'yAxis'), summaryContext = {
4511
+ seriesNumber: seriesNumber,
4512
+ series: series,
4513
+ chart: chart
4514
+ }, combinationSuffix = chartTypes.length > 1 ? 'Combination' : '', summary = chart.langFormat('accessibility.series.summary.' + series.type + combinationSuffix, summaryContext) || chart.langFormat('accessibility.series.summary.default' + combinationSuffix, summaryContext), axisDescription = (shouldDescribeAxis('yAxis') ? ' ' + yAxisInfo + '.' : '') + (shouldDescribeAxis('xAxis') ? ' ' + xAxisInfo + '.' : ''), formatStr = chart.options.accessibility.series.descriptionFormat || '';
4515
+ return format(formatStr, {
4516
+ seriesDescription: summary,
4517
+ authorDescription: (description ? ' ' + description : ''),
4518
+ axisDescription: axisDescription,
4519
+ series: series,
4520
+ chart: chart,
4521
+ seriesNumber: seriesNumber
4522
+ }, void 0);
4459
4523
  }
4460
4524
  /**
4461
4525
  * Set a11y props on a series element
@@ -4473,7 +4537,10 @@
4473
4537
  }
4474
4538
  else if (landmarkVerbosity === 'all') {
4475
4539
  seriesElement.setAttribute('role', 'region');
4476
- } /* else do not add role */
4540
+ }
4541
+ else {
4542
+ seriesElement.setAttribute('role', 'group');
4543
+ }
4477
4544
  seriesElement.setAttribute('tabindex', '-1');
4478
4545
  if (!series.chart.styledMode) {
4479
4546
  // Don't show browser outline on click, despite tabindex
@@ -4506,7 +4573,7 @@
4506
4573
  describeSeriesElement(series, seriesEl);
4507
4574
  }
4508
4575
  else {
4509
- seriesEl.setAttribute('aria-label', '');
4576
+ seriesEl.removeAttribute('aria-label');
4510
4577
  }
4511
4578
  }
4512
4579
  }
@@ -4641,7 +4708,7 @@
4641
4708
  var announcer = this,
4642
4709
  chart = this.chart,
4643
4710
  e = this.eventProvider;
4644
- e.addEvent(chart, 'afterDrilldown', function () {
4711
+ e.addEvent(chart, 'afterApplyDrilldown', function () {
4645
4712
  announcer.lastAnnouncementTime = 0;
4646
4713
  });
4647
4714
  e.addEvent(chart, 'afterAddSeries', function (e) {
@@ -4951,9 +5018,15 @@
4951
5018
  ProxyElement.prototype.updateTarget = function (target, attributes) {
4952
5019
  this.target = target;
4953
5020
  this.updateCSSClassName();
5021
+ var attrs = attributes || {};
5022
+ Object.keys(attrs).forEach(function (a) {
5023
+ if (attrs[a] === null) {
5024
+ delete attrs[a];
5025
+ }
5026
+ });
4954
5027
  attr(this.buttonElement, merge({
4955
5028
  'aria-label': this.getTargetAttr(target.click, 'aria-label')
4956
- }, attributes));
5029
+ }, attrs));
4957
5030
  this.eventProvider.removeAddedEvents();
4958
5031
  this.addProxyEventsToButton(this.buttonElement, target.click);
4959
5032
  this.refreshPosition();
@@ -5051,12 +5124,14 @@
5051
5124
  var chartDiv = this.chart.renderTo;
5052
5125
  if (chartDiv && posElement && posElement.getBoundingClientRect) {
5053
5126
  var rectEl = posElement.getBoundingClientRect(),
5054
- rectDiv = chartDiv.getBoundingClientRect();
5127
+ chartPos = this.chart.pointer.getChartPosition();
5055
5128
  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
5129
+ x: (rectEl.left - chartPos.left) / chartPos.scaleX,
5130
+ y: (rectEl.top - chartPos.top) / chartPos.scaleY,
5131
+ width: rectEl.right / chartPos.scaleX -
5132
+ rectEl.left / chartPos.scaleX,
5133
+ height: rectEl.bottom / chartPos.scaleY -
5134
+ rectEl.top / chartPos.scaleY
5060
5135
  };
5061
5136
  }
5062
5137
  return { x: 0, y: 0, width: 1, height: 1 };
@@ -5153,10 +5228,13 @@
5153
5228
  /**
5154
5229
  * Create a group that will contain proxy elements. The group order is
5155
5230
  * automatically updated according to the last group order keys.
5231
+ *
5232
+ * Returns the added group.
5156
5233
  */
5157
5234
  ProxyProvider.prototype.addGroup = function (groupKey, groupType, attributes) {
5158
- if (this.groups[groupKey]) {
5159
- return;
5235
+ var existingGroup = this.groups[groupKey];
5236
+ if (existingGroup) {
5237
+ return existingGroup.groupElement;
5160
5238
  }
5161
5239
  var proxyContainer = this.domElementProvider.createElement(groupType);
5162
5240
  // If we want to add a role to the group, and still use e.g.
@@ -5185,6 +5263,7 @@
5185
5263
  // won't have to reorder the whole set of groups.
5186
5264
  this.afterChartProxyPosContainer.appendChild(groupElement);
5187
5265
  this.updateGroupOrder(this.groupOrder);
5266
+ return groupElement;
5188
5267
  };
5189
5268
  /**
5190
5269
  * Update HTML attributes of a group.
@@ -5368,6 +5447,10 @@
5368
5447
  */
5369
5448
  ProxyProvider.prototype.updatePosContainerPositions = function () {
5370
5449
  var chart = this.chart;
5450
+ // If exporting, don't add these containers to the DOM.
5451
+ if (chart.renderer.forExport) {
5452
+ return;
5453
+ }
5371
5454
  var rendererSVGEl = chart.renderer.box;
5372
5455
  chart.container.insertBefore(this.afterChartProxyPosContainer, rendererSVGEl.nextSibling);
5373
5456
  chart.container.insertBefore(this.beforeChartProxyPosContainer, rendererSVGEl);
@@ -5874,7 +5957,7 @@
5874
5957
  */
5875
5958
  inputStyle: {
5876
5959
  /** @ignore */
5877
- color: "#335cad" /* highlightColor80 */,
5960
+ color: "#335cad" /* Palette.highlightColor80 */,
5878
5961
  /** @ignore */
5879
5962
  cursor: 'pointer'
5880
5963
  },
@@ -5891,7 +5974,7 @@
5891
5974
  */
5892
5975
  labelStyle: {
5893
5976
  /** @ignore */
5894
- color: "#666666" /* neutralColor60 */
5977
+ color: "#666666" /* Palette.neutralColor60 */
5895
5978
  }
5896
5979
  }
5897
5980
  });
@@ -5995,7 +6078,8 @@
5995
6078
  rangeSetting,
5996
6079
  ctx,
5997
6080
  ytdExtremes,
5998
- dataGrouping = rangeOptions.dataGrouping;
6081
+ dataGrouping = rangeOptions.dataGrouping,
6082
+ addOffsetMin = true;
5999
6083
  // chart has no data, base series is removed
6000
6084
  if (dataMin === null || dataMax === null) {
6001
6085
  return;
@@ -6028,12 +6112,16 @@
6028
6112
  if (isNumber(ctx.newMax)) {
6029
6113
  newMax = ctx.newMax;
6030
6114
  }
6115
+ // #15799: offsetMin is added in minFromRange so that it works
6116
+ // with pre-selected buttons as well
6117
+ addOffsetMin = false;
6031
6118
  }
6032
6119
  // Fixed times like minutes, hours, days
6033
6120
  }
6034
6121
  else if (range) {
6035
6122
  newMin = Math.max(newMax - range, dataMin);
6036
6123
  newMax = Math.min(newMin + range, dataMax);
6124
+ addOffsetMin = false;
6037
6125
  }
6038
6126
  else if (type === 'ytd') {
6039
6127
  // On user clicks on the buttons, or a delayed action running from
@@ -6044,14 +6132,17 @@
6044
6132
  // event (below). When the series are initialized, but before
6045
6133
  // the chart is rendered, we have access to the xData array
6046
6134
  // (#942).
6047
- if (typeof dataMax === 'undefined') {
6135
+ if (typeof dataMax === 'undefined' ||
6136
+ typeof dataMin === 'undefined') {
6048
6137
  dataMin = Number.MAX_VALUE;
6049
6138
  dataMax = Number.MIN_VALUE;
6050
6139
  chart.series.forEach(function (series) {
6051
6140
  // reassign it to the last item
6052
6141
  var xData = series.xData;
6053
- dataMin = Math.min(xData[0], dataMin);
6054
- dataMax = Math.max(xData[xData.length - 1], dataMax);
6142
+ if (xData) {
6143
+ dataMin = Math.min(xData[0], dataMin);
6144
+ dataMax = Math.max(xData[xData.length - 1], dataMax);
6145
+ }
6055
6146
  });
6056
6147
  redraw = false;
6057
6148
  }
@@ -6071,16 +6162,15 @@
6071
6162
  // If the navigator exist and the axis range is declared reset that
6072
6163
  // range and from now on only use the range set by a user, #14742.
6073
6164
  if (chart.navigator && chart.navigator.baseSeries[0]) {
6074
- chart.navigator.baseSeries[0].xAxis.options
6075
- .range = void 0;
6165
+ chart.navigator.baseSeries[0].xAxis.options.range = void 0;
6076
6166
  }
6077
6167
  newMin = dataMin;
6078
6168
  newMax = dataMax;
6079
6169
  }
6080
- if (defined(newMin)) {
6170
+ if (addOffsetMin && rangeOptions._offsetMin && defined(newMin)) {
6081
6171
  newMin += rangeOptions._offsetMin;
6082
6172
  }
6083
- if (defined(newMax)) {
6173
+ if (rangeOptions._offsetMax && defined(newMax)) {
6084
6174
  newMax += rangeOptions._offsetMax;
6085
6175
  }
6086
6176
  if (this.dropdown) {
@@ -6137,10 +6227,10 @@
6137
6227
  var minInput = rangeSelector.minInput,
6138
6228
  maxInput = rangeSelector.maxInput;
6139
6229
  // #3274 in some case blur is not defined
6140
- if (minInput && minInput.blur) {
6230
+ if (minInput && (minInput.blur)) {
6141
6231
  fireEvent(minInput, 'blur');
6142
6232
  }
6143
- if (maxInput && maxInput.blur) {
6233
+ if (maxInput && (maxInput.blur)) {
6144
6234
  fireEvent(maxInput, 'blur');
6145
6235
  }
6146
6236
  };
@@ -6459,7 +6549,7 @@
6459
6549
  }
6460
6550
  else if (H.isSafari && !hasTimezone(input)) {
6461
6551
  var offset = new Date(input).getTimezoneOffset() / 60;
6462
- input += offset <= 0 ? "+" + pad(-offset) + ":00" : "-" + pad(offset) + ":00";
6552
+ input += offset <= 0 ? "+".concat(pad(-offset), ":00") : "-".concat(pad(offset), ":00");
6463
6553
  }
6464
6554
  var date = Date.parse(input);
6465
6555
  // If the value isn't parsed directly to a value by the
@@ -6581,7 +6671,7 @@
6581
6671
  // Styles
6582
6672
  label.css(merge(chartStyle, options.labelStyle));
6583
6673
  dateBox.css(merge({
6584
- color: "#333333" /* neutralColor80 */
6674
+ color: "#333333" /* Palette.neutralColor80 */
6585
6675
  }, chartStyle, options.inputStyle));
6586
6676
  css(input, extend({
6587
6677
  position: 'absolute',
@@ -7219,7 +7309,7 @@
7219
7309
  var userButtonTheme = (chart.userOptions.rangeSelector &&
7220
7310
  chart.userOptions.rangeSelector.buttonTheme) || {};
7221
7311
  var getAttribs = function (text) { return ({
7222
- text: text ? text + " \u25BE" : '▾',
7312
+ text: text ? "" + text + " \u25BE" : '▾',
7223
7313
  width: 'auto',
7224
7314
  paddingLeft: pick(options.buttonTheme.paddingLeft,
7225
7315
  userButtonTheme.padding, 8),
@@ -7548,8 +7638,8 @@
7548
7638
  min = max - rangeOptions;
7549
7639
  range = rangeOptions;
7550
7640
  }
7551
- else {
7552
- min = max + getTrueRange(max, -rangeOptions.count);
7641
+ else if (rangeOptions) {
7642
+ min = max + getTrueRange(max, -(rangeOptions.count || 1));
7553
7643
  // Let the fixedRange reflect initial settings (#5930)
7554
7644
  if (this.chart) {
7555
7645
  this.chart.fixedRange = max - min;
@@ -7564,11 +7654,16 @@
7564
7654
  if (typeof range === 'undefined') { // #4501
7565
7655
  range = getTrueRange(min, rangeOptions.count);
7566
7656
  }
7567
- this.newMax = Math.min(min + range, this.dataMax);
7657
+ this.newMax = Math.min(min + range, pick(this.dataMax, Number.MAX_VALUE));
7568
7658
  }
7569
7659
  if (!isNumber(max)) {
7570
7660
  min = void 0;
7571
7661
  }
7662
+ else if (!isNumber(rangeOptions) &&
7663
+ rangeOptions &&
7664
+ rangeOptions._offsetMin) {
7665
+ min += rangeOptions._offsetMin;
7666
+ }
7572
7667
  return min;
7573
7668
  };
7574
7669
  if (!H.RangeSelector) {
@@ -7981,7 +8076,7 @@
7981
8076
  if (chart.accessibility) {
7982
8077
  chart.accessibility.keyboardNavigation.tabindexContainer
7983
8078
  .focus();
7984
- chart.accessibility.keyboardNavigation[direction < 0 ? 'prev' : 'next']();
8079
+ chart.accessibility.keyboardNavigation.move(direction);
7985
8080
  }
7986
8081
  }
7987
8082
  else if (rangeSel) {
@@ -8072,7 +8167,7 @@
8072
8167
  e.stopPropagation();
8073
8168
  if (a11y) {
8074
8169
  a11y.keyboardNavigation.tabindexContainer.focus();
8075
- a11y.keyboardNavigation[e.shiftKey ? 'prev' : 'next']();
8170
+ a11y.keyboardNavigation.move(e.shiftKey ? -1 : 1);
8076
8171
  }
8077
8172
  }
8078
8173
  });
@@ -8430,6 +8525,7 @@
8430
8525
  else if (series.a11yMarkersForced) {
8431
8526
  delete series.a11yMarkersForced;
8432
8527
  unforceSeriesMarkerOptions(series);
8528
+ delete series.resetA11yMarkerOptions;
8433
8529
  }
8434
8530
  }
8435
8531
  /**
@@ -8457,20 +8553,20 @@
8457
8553
  });
8458
8554
  }
8459
8555
  /**
8556
+ * Reset markers to normal
8460
8557
  * @private
8461
8558
  */
8462
8559
  function unforceSeriesMarkerOptions(series) {
8463
8560
  var resetMarkerOptions = series.resetA11yMarkerOptions;
8464
8561
  if (resetMarkerOptions) {
8465
- merge(true, series.options, {
8562
+ var originalOpactiy = resetMarkerOptions.states &&
8563
+ resetMarkerOptions.states.normal &&
8564
+ resetMarkerOptions.states.normal.opacity;
8565
+ series.update({
8466
8566
  marker: {
8467
8567
  enabled: resetMarkerOptions.enabled,
8468
8568
  states: {
8469
- normal: {
8470
- opacity: resetMarkerOptions.states &&
8471
- resetMarkerOptions.states.normal &&
8472
- resetMarkerOptions.states.normal.opacity
8473
- }
8569
+ normal: { opacity: originalOpactiy }
8474
8570
  }
8475
8571
  }
8476
8572
  });
@@ -8570,6 +8666,37 @@
8570
8666
  pointA11yDisabled ||
8571
8667
  isSkipSeries(point.series);
8572
8668
  }
8669
+ /**
8670
+ * Get the first point that is not a skip point in this series.
8671
+ * @private
8672
+ */
8673
+ function getFirstValidPointInSeries(series) {
8674
+ var points = series.points || [],
8675
+ len = points.length;
8676
+ for (var i = 0; i < len; ++i) {
8677
+ if (!isSkipPoint(points[i])) {
8678
+ return points[i];
8679
+ }
8680
+ }
8681
+ return null;
8682
+ }
8683
+ /**
8684
+ * Get the first point that is not a skip point in this chart.
8685
+ * @private
8686
+ */
8687
+ function getFirstValidPointInChart(chart) {
8688
+ var series = chart.series || [],
8689
+ len = series.length;
8690
+ for (var i = 0; i < len; ++i) {
8691
+ if (!isSkipSeries(series[i])) {
8692
+ var point = getFirstValidPointInSeries(series[i]);
8693
+ if (point) {
8694
+ return point;
8695
+ }
8696
+ }
8697
+ }
8698
+ return null;
8699
+ }
8573
8700
  /**
8574
8701
  * @private
8575
8702
  */
@@ -8582,7 +8709,7 @@
8582
8709
  // Highlight first valid point in the series will also
8583
8710
  // look backwards. It always starts from currently
8584
8711
  // highlighted point.
8585
- res = chart.series[i].highlightFirstValidPoint();
8712
+ res = chart.series[i].highlightNextValidPoint();
8586
8713
  if (res) {
8587
8714
  break;
8588
8715
  }
@@ -8590,24 +8717,24 @@
8590
8717
  return res;
8591
8718
  }
8592
8719
  /**
8720
+ * After drilling down/up, we need to set focus to the first point for
8721
+ * screen readers and keyboard nav.
8593
8722
  * @private
8594
8723
  */
8595
8724
  function updateChartFocusAfterDrilling(chart) {
8596
- highlightFirstValidPointInChart(chart);
8597
- if (chart.focusElement) {
8598
- chart.focusElement.removeFocusBorder();
8725
+ var point = getFirstValidPointInChart(chart);
8726
+ if (point) {
8727
+ point.highlight(false); // Do not visually highlight
8599
8728
  }
8600
8729
  }
8601
8730
  /**
8731
+ * Highlight the first point in chart that is not a skip point
8602
8732
  * @private
8603
8733
  */
8604
8734
  function highlightFirstValidPointInChart(chart) {
8605
- var res = false;
8606
8735
  delete chart.highlightedPoint;
8607
- res = chart.series.reduce(function (acc, cur) {
8608
- return acc || cur.highlightFirstValidPoint();
8609
- }, false);
8610
- return res;
8736
+ var point = getFirstValidPointInChart(chart);
8737
+ return point ? point.highlight() : false;
8611
8738
  }
8612
8739
  /* *
8613
8740
  *
@@ -8645,7 +8772,7 @@
8645
8772
  e.addEvent(Series, 'destroy', function () {
8646
8773
  return keyboardNavigation.onSeriesDestroy(this);
8647
8774
  });
8648
- e.addEvent(chart, 'afterDrilldown', function () {
8775
+ e.addEvent(chart, 'afterApplyDrilldown', function () {
8649
8776
  updateChartFocusAfterDrilling(this);
8650
8777
  });
8651
8778
  e.addEvent(chart, 'drilldown', function (e) {
@@ -8685,11 +8812,11 @@
8685
8812
  });
8686
8813
  };
8687
8814
  /**
8815
+ * After drillup we want to find the point that was drilled down to and
8816
+ * highlight it.
8688
8817
  * @private
8689
8818
  */
8690
8819
  SeriesKeyboardNavigation.prototype.onDrillupAll = function () {
8691
- // After drillup we want to find the point that was drilled down to and
8692
- // highlight it.
8693
8820
  var last = this.lastDrilledDownPoint,
8694
8821
  chart = this.chart,
8695
8822
  series = last && getSeriesFromName(chart,
@@ -8698,15 +8825,13 @@
8698
8825
  if (last && series && defined(last.x) && defined(last.y)) {
8699
8826
  point = getPointFromXY(series, last.x, last.y);
8700
8827
  }
8828
+ point = point || getFirstValidPointInChart(chart);
8701
8829
  // Container focus can be lost on drillup due to deleted elements.
8702
8830
  if (chart.container) {
8703
8831
  chart.container.focus();
8704
8832
  }
8705
8833
  if (point && point.highlight) {
8706
- point.highlight();
8707
- }
8708
- if (chart.focusElement) {
8709
- chart.focusElement.removeFocusBorder();
8834
+ point.highlight(false); // Do not visually highlight
8710
8835
  }
8711
8836
  };
8712
8837
  /**
@@ -8719,13 +8844,16 @@
8719
8844
  inverted = chart.inverted;
8720
8845
  return new KeyboardNavigationHandler(chart, {
8721
8846
  keyCodeMap: [
8722
- [inverted ? [keys.up, keys.down] : [keys.left, keys.right], function (keyCode) {
8847
+ [inverted ? [keys.up, keys.down] : [keys.left, keys.right],
8848
+ function (keyCode) {
8723
8849
  return keyboardNavigation.onKbdSideways(this, keyCode);
8724
8850
  }],
8725
- [inverted ? [keys.left, keys.right] : [keys.up, keys.down], function (keyCode) {
8851
+ [inverted ? [keys.left, keys.right] : [keys.up, keys.down],
8852
+ function (keyCode) {
8726
8853
  return keyboardNavigation.onKbdVertical(this, keyCode);
8727
8854
  }],
8728
- [[keys.enter, keys.space], function (keyCode, event) {
8855
+ [[keys.enter, keys.space],
8856
+ function (keyCode, event) {
8729
8857
  var point = chart.highlightedPoint;
8730
8858
  if (point) {
8731
8859
  event.point = point;
@@ -8734,22 +8862,27 @@
8734
8862
  }
8735
8863
  return this.response.success;
8736
8864
  }],
8737
- [[keys.home], function () {
8865
+ [[keys.home],
8866
+ function () {
8738
8867
  highlightFirstValidPointInChart(chart);
8739
8868
  return this.response.success;
8740
8869
  }],
8741
- [[keys.end], function () {
8870
+ [[keys.end],
8871
+ function () {
8742
8872
  highlightLastValidPointInChart(chart);
8743
8873
  return this.response.success;
8744
8874
  }],
8745
- [[keys.pageDown, keys.pageUp], function (keyCode) {
8875
+ [[keys.pageDown, keys.pageUp],
8876
+ function (keyCode) {
8746
8877
  chart.highlightAdjacentSeries(keyCode === keys.pageDown);
8747
8878
  return this.response.success;
8748
8879
  }]
8749
8880
  ],
8750
8881
  init: function () {
8751
- highlightFirstValidPointInChart(chart);
8752
- return this.response.success;
8882
+ return keyboardNavigation.onHandlerInit(this);
8883
+ },
8884
+ validate: function () {
8885
+ return !!getFirstValidPointInChart(chart);
8753
8886
  },
8754
8887
  terminate: function () {
8755
8888
  return keyboardNavigation.onHandlerTerminate();
@@ -8768,6 +8901,25 @@
8768
8901
  isNext = keyCode === keys.right || keyCode === keys.down;
8769
8902
  return this.attemptHighlightAdjacentPoint(handler, isNext);
8770
8903
  };
8904
+ /**
8905
+ * When keyboard navigation inits.
8906
+ * @private
8907
+ * @param {Highcharts.KeyboardNavigationHandler} handler The handler object
8908
+ * @return {number}
8909
+ * response
8910
+ */
8911
+ SeriesKeyboardNavigation.prototype.onHandlerInit = function (handler) {
8912
+ var chart = this.chart,
8913
+ kbdNavOptions = chart.options.accessibility.keyboardNavigation;
8914
+ if (kbdNavOptions.seriesNavigation.rememberPointFocus &&
8915
+ chart.highlightedPoint) {
8916
+ chart.highlightedPoint.highlight();
8917
+ }
8918
+ else {
8919
+ highlightFirstValidPointInChart(chart);
8920
+ }
8921
+ return handler.response.success;
8922
+ };
8771
8923
  /**
8772
8924
  * @private
8773
8925
  * @param {Highcharts.KeyboardNavigationHandler} handler
@@ -8797,7 +8949,8 @@
8797
8949
  * @private
8798
8950
  */
8799
8951
  SeriesKeyboardNavigation.prototype.onHandlerTerminate = function () {
8800
- var chart = this.chart;
8952
+ var chart = this.chart,
8953
+ kbdNavOptions = chart.options.accessibility.keyboardNavigation;
8801
8954
  if (chart.tooltip) {
8802
8955
  chart.tooltip.hide(0);
8803
8956
  }
@@ -8808,15 +8961,13 @@
8808
8961
  if (chart.highlightedPoint && chart.highlightedPoint.onMouseOut) {
8809
8962
  chart.highlightedPoint.onMouseOut();
8810
8963
  }
8811
- delete chart.highlightedPoint;
8964
+ if (!kbdNavOptions.seriesNavigation.rememberPointFocus) {
8965
+ delete chart.highlightedPoint;
8966
+ }
8812
8967
  };
8813
8968
  /**
8814
8969
  * Function that attempts to highlight next/prev point. Handles wrap around.
8815
8970
  * @private
8816
- * @param {Highcharts.KeyboardNavigationHandler} handler
8817
- * @param {boolean} directionIsNext
8818
- * @return {number}
8819
- * response
8820
8971
  */
8821
8972
  SeriesKeyboardNavigation.prototype.attemptHighlightAdjacentPoint = function (handler, directionIsNext) {
8822
8973
  var chart = this.chart,
@@ -8824,8 +8975,10 @@
8824
8975
  .wrapAround,
8825
8976
  highlightSuccessful = chart.highlightAdjacentPoint(directionIsNext);
8826
8977
  if (!highlightSuccessful) {
8827
- if (wrapAround) {
8828
- return handler.init(directionIsNext ? 1 : -1);
8978
+ if (wrapAround && (directionIsNext ?
8979
+ highlightFirstValidPointInChart(chart) :
8980
+ highlightLastValidPointInChart(chart))) {
8981
+ return handler.response.success;
8829
8982
  }
8830
8983
  return handler.response[directionIsNext ? 'next' : 'prev'];
8831
8984
  }
@@ -9032,7 +9185,7 @@
9032
9185
  // Highlight the new point or any first valid point back or forwards
9033
9186
  // from it
9034
9187
  newPoint.highlight();
9035
- return newPoint.series.highlightFirstValidPoint();
9188
+ return newPoint.series.highlightNextValidPoint();
9036
9189
  }
9037
9190
  /**
9038
9191
  * @private
@@ -9069,7 +9222,7 @@
9069
9222
  seriesTypes[type].prototype.keyboardMoveVertical = false;
9070
9223
  }
9071
9224
  });
9072
- seriesProto.highlightFirstValidPoint = (seriesHighlightFirstValidPoint);
9225
+ seriesProto.highlightNextValidPoint = (seriesHighlightNextValidPoint);
9073
9226
  }
9074
9227
  }
9075
9228
  SeriesKeyboardNavigation.compose = compose;
@@ -9107,7 +9260,7 @@
9107
9260
  return defined(minIx) ? series.points[minIx] : void 0;
9108
9261
  }
9109
9262
  /**
9110
- * Highlights a point (show tooltip and display hover state).
9263
+ * Highlights a point (show tooltip, display hover state, focus element).
9111
9264
  *
9112
9265
  * @private
9113
9266
  * @function Highcharts.Point#highlight
@@ -9115,9 +9268,10 @@
9115
9268
  * @return {Highcharts.Point}
9116
9269
  * This highlighted point.
9117
9270
  */
9118
- function pointHighlight() {
9271
+ function pointHighlight(highlightVisually) {
9272
+ if (highlightVisually === void 0) { highlightVisually = true; }
9119
9273
  var chart = this.series.chart;
9120
- if (!this.isNull) {
9274
+ if (!this.isNull && highlightVisually) {
9121
9275
  this.onMouseOver(); // Show the hover marker and tooltip
9122
9276
  }
9123
9277
  else {
@@ -9132,6 +9286,9 @@
9132
9286
  // change z-index and mess up the element.
9133
9287
  if (this.graphic) {
9134
9288
  chart.setFocusToElement(this.graphic);
9289
+ if (!highlightVisually && chart.focusElement) {
9290
+ chart.focusElement.removeFocusBorder();
9291
+ }
9135
9292
  }
9136
9293
  chart.highlightedPoint = this;
9137
9294
  return this;
@@ -9142,9 +9299,9 @@
9142
9299
  * point in the series, use that as starting point.
9143
9300
  *
9144
9301
  * @private
9145
- * @function Highcharts.Series#highlightFirstValidPoint
9302
+ * @function Highcharts.Series#highlightNextValidPoint
9146
9303
  */
9147
- function seriesHighlightFirstValidPoint() {
9304
+ function seriesHighlightNextValidPoint() {
9148
9305
  var curPoint = this.chart.highlightedPoint,
9149
9306
  start = (curPoint && curPoint.series) === this ?
9150
9307
  getPointIndex(curPoint) :
@@ -9231,7 +9388,6 @@
9231
9388
  * @private
9232
9389
  */
9233
9390
  SeriesComponent.compose = function (ChartClass, PointClass, SeriesClass) {
9234
- // Handle forcing markers
9235
9391
  NewDataAnnouncer.compose(SeriesClass);
9236
9392
  ForcedMarkers.compose(SeriesClass);
9237
9393
  SeriesKeyboardNavigation.compose(ChartClass, PointClass, SeriesClass);
@@ -9320,7 +9476,7 @@
9320
9476
 
9321
9477
  return SeriesComponent;
9322
9478
  });
9323
- _registerModule(_modules, 'Accessibility/Components/ZoomComponent.js', [_modules['Accessibility/AccessibilityComponent.js'], _modules['Accessibility/Utils/ChartUtilities.js'], _modules['Core/Globals.js'], _modules['Accessibility/KeyboardNavigationHandler.js'], _modules['Core/Utilities.js']], function (AccessibilityComponent, ChartUtilities, H, KeyboardNavigationHandler, U) {
9479
+ _registerModule(_modules, 'Accessibility/Components/ZoomComponent.js', [_modules['Accessibility/AccessibilityComponent.js'], _modules['Accessibility/Utils/ChartUtilities.js'], _modules['Accessibility/KeyboardNavigationHandler.js'], _modules['Core/Utilities.js']], function (AccessibilityComponent, CU, KeyboardNavigationHandler, U) {
9324
9480
  /* *
9325
9481
  *
9326
9482
  * (c) 2009-2021 Øystein Moseng
@@ -9348,24 +9504,43 @@
9348
9504
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
9349
9505
  };
9350
9506
  })();
9351
- var unhideChartElementFromAT = ChartUtilities.unhideChartElementFromAT;
9352
- var noop = H.noop;
9507
+ var unhideChartElementFromAT = CU.unhideChartElementFromAT;
9353
9508
  var attr = U.attr,
9354
- extend = U.extend,
9355
9509
  pick = U.pick;
9356
9510
  /* *
9357
9511
  *
9358
9512
  * Functions
9359
9513
  *
9360
9514
  * */
9361
- /* eslint-disable valid-jsdoc */
9515
+ /**
9516
+ * Pan along axis in a direction (1 or -1), optionally with a defined
9517
+ * granularity (number of steps it takes to walk across current view)
9518
+ * @private
9519
+ */
9520
+ function axisPanStep(axis, direction, granularity) {
9521
+ var gran = granularity || 3;
9522
+ var extremes = axis.getExtremes();
9523
+ var step = (extremes.max - extremes.min) / gran * direction;
9524
+ var newMax = extremes.max + step;
9525
+ var newMin = extremes.min + step;
9526
+ var size = newMax - newMin;
9527
+ if (direction < 0 && newMin < extremes.dataMin) {
9528
+ newMin = extremes.dataMin;
9529
+ newMax = newMin + size;
9530
+ }
9531
+ else if (direction > 0 && newMax > extremes.dataMax) {
9532
+ newMax = extremes.dataMax;
9533
+ newMin = newMax - size;
9534
+ }
9535
+ axis.setExtremes(newMin, newMax);
9536
+ }
9362
9537
  /**
9363
9538
  * @private
9364
9539
  */
9365
9540
  function chartHasMapZoom(chart) {
9366
- return !!(chart.mapZoom &&
9367
- chart.mapNavButtons &&
9368
- chart.mapNavButtons.length);
9541
+ return !!((chart.mapZoom) &&
9542
+ chart.mapNavigation &&
9543
+ chart.mapNavigation.navButtons.length);
9369
9544
  }
9370
9545
  /* *
9371
9546
  *
@@ -9405,7 +9580,7 @@
9405
9580
  chart = this.chart;
9406
9581
  this.proxyProvider.addGroup('zoom', 'div');
9407
9582
  [
9408
- 'afterShowResetZoom', 'afterDrilldown', 'drillupall'
9583
+ 'afterShowResetZoom', 'afterApplyDrilldown', 'drillupall'
9409
9584
  ].forEach(function (eventType) {
9410
9585
  component.addEvent(chart, eventType, function () {
9411
9586
  component.updateProxyOverlays();
@@ -9419,8 +9594,8 @@
9419
9594
  var chart = this.chart,
9420
9595
  component = this;
9421
9596
  // Make map zoom buttons accessible
9422
- if (chart.mapNavButtons) {
9423
- chart.mapNavButtons.forEach(function (button, i) {
9597
+ if (chart.mapNavigation) {
9598
+ chart.mapNavigation.navButtons.forEach(function (button, i) {
9424
9599
  unhideChartElementFromAT(chart, button.element);
9425
9600
  component.setMapNavButtonAttrs(button.element, 'accessibility.zoom.mapZoom' + (i ? 'Out' : 'In'));
9426
9601
  });
@@ -9457,10 +9632,13 @@
9457
9632
  if (chart.resetZoomButton) {
9458
9633
  this.createZoomProxyButton(chart.resetZoomButton, 'resetZoomProxyButton', chart.langFormat('accessibility.zoom.resetZoomButton', { chart: chart }));
9459
9634
  }
9460
- if (chart.drillUpButton) {
9635
+ if (chart.drillUpButton &&
9636
+ chart.breadcrumbs &&
9637
+ chart.breadcrumbs.list) {
9638
+ var lastBreadcrumb = chart.breadcrumbs.list[chart.breadcrumbs.list.length - 1];
9461
9639
  this.createZoomProxyButton(chart.drillUpButton, 'drillUpProxyButton', chart.langFormat('accessibility.drillUpButton', {
9462
9640
  chart: chart,
9463
- buttonText: chart.getDrilldownBackText()
9641
+ buttonText: chart.breadcrumbs.getButtonText(lastBreadcrumb)
9464
9642
  }));
9465
9643
  }
9466
9644
  };
@@ -9528,7 +9706,7 @@
9528
9706
  'yAxis' : 'xAxis',
9529
9707
  stepDirection = (keyCode === keys.left || keyCode === keys.up) ?
9530
9708
  -1 : 1;
9531
- this.chart[panAxis][0].panStep(stepDirection);
9709
+ axisPanStep(this.chart[panAxis][0], stepDirection);
9532
9710
  return keyboardNavigationHandler.response.success;
9533
9711
  };
9534
9712
  /**
@@ -9544,14 +9722,14 @@
9544
9722
  var isMoveOutOfRange = isBackwards && !this.focusedMapNavButtonIx ||
9545
9723
  !isBackwards && this.focusedMapNavButtonIx;
9546
9724
  // Deselect old
9547
- chart.mapNavButtons[this.focusedMapNavButtonIx].setState(0);
9725
+ chart.mapNavigation.navButtons[this.focusedMapNavButtonIx].setState(0);
9548
9726
  if (isMoveOutOfRange) {
9549
9727
  chart.mapZoom(); // Reset zoom
9550
9728
  return response[isBackwards ? 'prev' : 'next'];
9551
9729
  }
9552
9730
  // Select other button
9553
9731
  this.focusedMapNavButtonIx += isBackwards ? -1 : 1;
9554
- var button = chart.mapNavButtons[this.focusedMapNavButtonIx];
9732
+ var button = chart.mapNavigation.navButtons[this.focusedMapNavButtonIx];
9555
9733
  chart.setFocusToElement(button.box, button.element);
9556
9734
  button.setState(2);
9557
9735
  return response.success;
@@ -9572,8 +9750,8 @@
9572
9750
  */
9573
9751
  ZoomComponent.prototype.onMapNavInit = function (direction) {
9574
9752
  var chart = this.chart,
9575
- zoomIn = chart.mapNavButtons[0],
9576
- zoomOut = chart.mapNavButtons[1],
9753
+ zoomIn = chart.mapNavigation.navButtons[0],
9754
+ zoomOut = chart.mapNavigation.navButtons[1],
9577
9755
  initialButton = direction > 0 ? zoomIn : zoomOut;
9578
9756
  chart.setFocusToElement(initialButton.box, initialButton.element);
9579
9757
  initialButton.setState(2);
@@ -9642,67 +9820,6 @@
9642
9820
  };
9643
9821
  return ZoomComponent;
9644
9822
  }(AccessibilityComponent));
9645
- /* *
9646
- *
9647
- * Class Namespace
9648
- *
9649
- * */
9650
- (function (ZoomComponent) {
9651
- /* *
9652
- *
9653
- * Declarations
9654
- *
9655
- * */
9656
- /* *
9657
- *
9658
- * Constants
9659
- *
9660
- * */
9661
- ZoomComponent.composedClasses = [];
9662
- /* *
9663
- *
9664
- * Functions
9665
- *
9666
- * */
9667
- /**
9668
- * @private
9669
- */
9670
- function compose(AxisClass) {
9671
- if (ZoomComponent.composedClasses.indexOf(AxisClass) === -1) {
9672
- ZoomComponent.composedClasses.push(AxisClass);
9673
- var axisProto = AxisClass.prototype;
9674
- axisProto.panStep = axisPanStep;
9675
- }
9676
- }
9677
- ZoomComponent.compose = compose;
9678
- /**
9679
- * Pan along axis in a direction (1 or -1), optionally with a defined
9680
- * granularity (number of steps it takes to walk across current view)
9681
- *
9682
- * @private
9683
- * @function Highcharts.Axis#panStep
9684
- *
9685
- * @param {number} direction
9686
- * @param {number} [granularity]
9687
- */
9688
- function axisPanStep(direction, granularity) {
9689
- var gran = granularity || 3;
9690
- var extremes = this.getExtremes();
9691
- var step = (extremes.max - extremes.min) / gran * direction;
9692
- var newMax = extremes.max + step;
9693
- var newMin = extremes.min + step;
9694
- var size = newMax - newMin;
9695
- if (direction < 0 && newMin < extremes.dataMin) {
9696
- newMin = extremes.dataMin;
9697
- newMax = newMin + size;
9698
- }
9699
- else if (direction > 0 && newMax > extremes.dataMax) {
9700
- newMax = extremes.dataMax;
9701
- newMin = newMax - size;
9702
- }
9703
- this.setExtremes(newMin, newMax);
9704
- }
9705
- })(ZoomComponent || (ZoomComponent = {}));
9706
9823
  /* *
9707
9824
  *
9708
9825
  * Default Export
@@ -9749,15 +9866,15 @@
9749
9866
  var testDiv = doc.createElement('div');
9750
9867
  var imageSrc = 'data:image/gif;base64,' +
9751
9868
  'R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
9752
- testDiv.style.backgroundImage = "url(" + imageSrc + ")"; // #13071
9869
+ testDiv.style.backgroundImage = "url(".concat(imageSrc, ")"); // #13071
9753
9870
  doc.body.appendChild(testDiv);
9754
9871
  var bi = (testDiv.currentStyle ||
9755
9872
  win.getComputedStyle(testDiv)).backgroundImage;
9756
9873
  doc.body.removeChild(testDiv);
9757
9874
  return bi === 'none';
9758
9875
  }
9759
- // Not used for other browsers
9760
- return false;
9876
+ // Other browsers use the forced-colors standard
9877
+ return win.matchMedia && win.matchMedia('(forced-colors: active)').matches;
9761
9878
  }
9762
9879
  /**
9763
9880
  * Force high contrast theme for the chart. The default theme is defined in
@@ -10033,7 +10150,7 @@
10033
10150
 
10034
10151
  return theme;
10035
10152
  });
10036
- _registerModule(_modules, 'Accessibility/Options/Options.js', [], function () {
10153
+ _registerModule(_modules, 'Accessibility/Options/A11yDefaults.js', [], function () {
10037
10154
  /* *
10038
10155
  *
10039
10156
  * (c) 2009-2021 Øystein Moseng
@@ -10045,6 +10162,11 @@
10045
10162
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
10046
10163
  *
10047
10164
  * */
10165
+ /* *
10166
+ *
10167
+ * API Options
10168
+ *
10169
+ * */
10048
10170
  /**
10049
10171
  * Formatter callback for the accessibility announcement.
10050
10172
  *
@@ -10125,7 +10247,17 @@
10125
10247
  */
10126
10248
  accessibility: {
10127
10249
  /**
10128
- * Enable accessibility functionality for the chart.
10250
+ * Enable accessibility functionality for the chart. For more
10251
+ * information on how to include these features, and why this is
10252
+ * recommended, see [Highcharts Accessibility](https://www.highcharts.com/docs/accessibility/accessibility-module).
10253
+ *
10254
+ * Highcharts will by default emit a warning to the console if
10255
+ * the [accessibility module](https://code.highcharts.com/modules/accessibility.js)
10256
+ * is not loaded. Setting this option to `false` will override
10257
+ * and silence the warning.
10258
+ *
10259
+ * Once the module is loaded, setting this option to `false`
10260
+ * will disable the module for this chart.
10129
10261
  *
10130
10262
  * @since 5.0.0
10131
10263
  */
@@ -10239,12 +10371,43 @@
10239
10371
  * of the series for a screen reader user. If `false` is returned,
10240
10372
  * the default formatter will be used for that series.
10241
10373
  *
10374
+ * @see [series.descriptionFormat](#accessibility.series.descriptionFormat)
10242
10375
  * @see [series.description](#plotOptions.series.description)
10243
10376
  *
10244
10377
  * @type {Highcharts.ScreenReaderFormatterCallbackFunction<Highcharts.Series>}
10245
10378
  * @since 8.0.0
10246
10379
  * @apioption accessibility.series.descriptionFormatter
10247
10380
  */
10381
+ /**
10382
+ * Format to use for describing the data series group to assistive
10383
+ * technology - including screen readers.
10384
+ *
10385
+ * The series context and its subproperties are available under the
10386
+ * variable `{series}`, for example `{series.name}` for the series
10387
+ * name, and `{series.points.length}` for the number of data points.
10388
+ *
10389
+ * The chart context and its subproperties are available under the
10390
+ * variable `{chart}`, for example `{chart.series.length}` for the
10391
+ * number of series in the chart.
10392
+ *
10393
+ * `{seriesDescription}` refers to the automatic description of the
10394
+ * series type and number of points added by Highcharts by default.
10395
+ * `{authorDescription}` refers to the description added in
10396
+ * [series.description](#plotOptions.series.description) if one is
10397
+ * present. `{axisDescription}` refers to the description added if
10398
+ * the chart has multiple X or Y axes.
10399
+ *
10400
+ * Note that if [series.descriptionFormatter](#accessibility.series.descriptionFormatter)
10401
+ * is declared it will take precedence, and this option will be
10402
+ * overridden.
10403
+ *
10404
+ * @sample highcharts/accessibility/advanced-accessible
10405
+ * Accessible low-medium-high chart
10406
+ *
10407
+ * @type {string}
10408
+ * @since 10.1.0
10409
+ */
10410
+ descriptionFormat: '{seriesDescription}{authorDescription}{axisDescription}',
10248
10411
  /**
10249
10412
  * Whether or not to add series descriptions to charts with a single
10250
10413
  * series.
@@ -10346,6 +10509,8 @@
10346
10509
  * to assistive technology - including screen readers.
10347
10510
  * The point context is available as `{point}`.
10348
10511
  *
10512
+ * Other available context variables include `{index}`, `{value}`, and `{xDescription}`.
10513
+ *
10349
10514
  * Additionally, the series name, annotation info, and
10350
10515
  * description added in `point.accessibility.description`
10351
10516
  * is added by default if relevant. To override this, use the
@@ -10358,7 +10523,18 @@
10358
10523
  * @type {string}
10359
10524
  * @since 8.0.1
10360
10525
  */
10361
- valueDescriptionFormat: '{index}. {xDescription}{separator}{value}.'
10526
+ valueDescriptionFormat: '{xDescription}{separator}{value}.',
10527
+ /**
10528
+ * Whether or not to describe points with the value `null` to
10529
+ * assistive technology, such as screen readers.
10530
+ *
10531
+ * @sample {highmaps} maps/demo/all-areas-as-null
10532
+ * Accessible map with null points
10533
+ *
10534
+ * @type {boolean}
10535
+ * @since 10.1.0
10536
+ */
10537
+ describeNull: true
10362
10538
  },
10363
10539
  /**
10364
10540
  * Amount of landmarks/regions to create for screen reader users. More
@@ -10527,7 +10703,7 @@
10527
10703
  */
10528
10704
  style: {
10529
10705
  /** @internal */
10530
- color: "#335cad" /* highlightColor80 */,
10706
+ color: "#335cad" /* Palette.highlightColor80 */,
10531
10707
  /** @internal */
10532
10708
  lineWidth: 2,
10533
10709
  /** @internal */
@@ -10602,7 +10778,16 @@
10602
10778
  * @type {boolean|number}
10603
10779
  * @since 8.0.0
10604
10780
  */
10605
- pointNavigationEnabledThreshold: false
10781
+ pointNavigationEnabledThreshold: false,
10782
+ /**
10783
+ * Remember which point was focused even after navigating away
10784
+ * from the series, so that when navigating back to the series
10785
+ * you start at the last focused point.
10786
+ *
10787
+ * @type {boolean}
10788
+ * @since 10.1.0
10789
+ */
10790
+ rememberPointFocus: false
10606
10791
  }
10607
10792
  },
10608
10793
  /**
@@ -10866,7 +11051,7 @@
10866
11051
 
10867
11052
  return Options;
10868
11053
  });
10869
- _registerModule(_modules, 'Accessibility/Options/LangOptions.js', [], function () {
11054
+ _registerModule(_modules, 'Accessibility/Options/LangDefaults.js', [], function () {
10870
11055
  /* *
10871
11056
  *
10872
11057
  * (c) 2009-2021 Øystein Moseng
@@ -10878,6 +11063,11 @@
10878
11063
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
10879
11064
  *
10880
11065
  * */
11066
+ /* *
11067
+ *
11068
+ * API Options
11069
+ *
11070
+ * */
10881
11071
  var langOptions = {
10882
11072
  /**
10883
11073
  * Configure the accessibility strings in the chart. Requires the
@@ -10936,7 +11126,7 @@
10936
11126
  * @since 8.0.0
10937
11127
  */
10938
11128
  screenReaderSection: {
10939
- beforeRegionLabel: 'Chart screen reader information, {chartTitle}.',
11129
+ beforeRegionLabel: '',
10940
11130
  afterRegionLabel: '',
10941
11131
  /**
10942
11132
  * Language options for annotation descriptions.
@@ -11102,12 +11292,12 @@
11102
11292
  xAxisDescriptionPlural: 'The chart has {numAxes} X axes displaying {#each(names, -1) }and {names[-1]}.',
11103
11293
  yAxisDescriptionSingular: 'The chart has 1 Y axis displaying {names[0]}. {ranges[0]}',
11104
11294
  yAxisDescriptionPlural: 'The chart has {numAxes} Y axes displaying {#each(names, -1) }and {names[-1]}.',
11105
- timeRangeDays: 'Range: {range} days.',
11106
- timeRangeHours: 'Range: {range} hours.',
11107
- timeRangeMinutes: 'Range: {range} minutes.',
11108
- timeRangeSeconds: 'Range: {range} seconds.',
11109
- rangeFromTo: 'Range: {rangeFrom} to {rangeTo}.',
11110
- rangeCategories: 'Range: {numCategories} categories.'
11295
+ timeRangeDays: 'Data range: {range} days.',
11296
+ timeRangeHours: 'Data range: {range} hours.',
11297
+ timeRangeMinutes: 'Data range: {range} minutes.',
11298
+ timeRangeSeconds: 'Data range: {range} seconds.',
11299
+ rangeFromTo: 'Data ranges from {rangeFrom} to {rangeTo}.',
11300
+ rangeCategories: 'Data range: {numCategories} categories.'
11111
11301
  },
11112
11302
  /**
11113
11303
  * Exporting menu format strings for accessibility module.
@@ -11138,34 +11328,39 @@
11138
11328
  * If a definition does not exist for the specific series type
11139
11329
  * and mode, the 'default' lang definitions are used.
11140
11330
  *
11331
+ * Chart and its subproperties can be accessed with the `{chart}` variable.
11332
+ * The series and its subproperties can be accessed with the `{series}` variable.
11333
+ *
11334
+ * The series index (starting from 1) can be accessed with the `{seriesNumber}` variable.
11335
+ *
11141
11336
  * @since 6.0.6
11142
11337
  */
11143
11338
  summary: {
11144
11339
  /* eslint-disable max-len */
11145
- 'default': '{name}, series {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
11146
- defaultCombination: '{name}, series {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
11147
- line: '{name}, line {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
11148
- lineCombination: '{name}, series {ix} of {numSeries}. Line with {numPoints} data {#plural(numPoints, points, point)}.',
11149
- spline: '{name}, line {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
11150
- splineCombination: '{name}, series {ix} of {numSeries}. Line with {numPoints} data {#plural(numPoints, points, point)}.',
11151
- column: '{name}, bar series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bars, bar)}.',
11152
- columnCombination: '{name}, series {ix} of {numSeries}. Bar series with {numPoints} {#plural(numPoints, bars, bar)}.',
11153
- bar: '{name}, bar series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bars, bar)}.',
11154
- barCombination: '{name}, series {ix} of {numSeries}. Bar series with {numPoints} {#plural(numPoints, bars, bar)}.',
11155
- pie: '{name}, pie {ix} of {numSeries} with {numPoints} {#plural(numPoints, slices, slice)}.',
11156
- pieCombination: '{name}, series {ix} of {numSeries}. Pie with {numPoints} {#plural(numPoints, slices, slice)}.',
11157
- scatter: '{name}, scatter plot {ix} of {numSeries} with {numPoints} {#plural(numPoints, points, point)}.',
11158
- scatterCombination: '{name}, series {ix} of {numSeries}, scatter plot with {numPoints} {#plural(numPoints, points, point)}.',
11159
- boxplot: '{name}, boxplot {ix} of {numSeries} with {numPoints} {#plural(numPoints, boxes, box)}.',
11160
- boxplotCombination: '{name}, series {ix} of {numSeries}. Boxplot with {numPoints} {#plural(numPoints, boxes, box)}.',
11161
- bubble: '{name}, bubble series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bubbles, bubble)}.',
11162
- bubbleCombination: '{name}, series {ix} of {numSeries}. Bubble series with {numPoints} {#plural(numPoints, bubbles, bubble)}.',
11163
- map: '{name}, map {ix} of {numSeries} with {numPoints} {#plural(numPoints, areas, area)}.',
11164
- mapCombination: '{name}, series {ix} of {numSeries}. Map with {numPoints} {#plural(numPoints, areas, area)}.',
11165
- mapline: '{name}, line {ix} of {numSeries} with {numPoints} data {#plural(numPoints, points, point)}.',
11166
- maplineCombination: '{name}, series {ix} of {numSeries}. Line with {numPoints} data {#plural(numPoints, points, point)}.',
11167
- mapbubble: '{name}, bubble series {ix} of {numSeries} with {numPoints} {#plural(numPoints, bubbles, bubble)}.',
11168
- mapbubbleCombination: '{name}, series {ix} of {numSeries}. Bubble series with {numPoints} {#plural(numPoints, bubbles, bubble)}.'
11340
+ 'default': '{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#plural(series.points.length, points, point)}.',
11341
+ defaultCombination: '{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#plural(series.points.length, points, point)}.',
11342
+ line: '{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#plural(series.points.length, points, point)}.',
11343
+ lineCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#plural(series.points.length, points, point)}.',
11344
+ spline: '{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#plural(series.points.length, points, point)}.',
11345
+ splineCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#plural(series.points.length, points, point)}.',
11346
+ column: '{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#plural(series.points.length, bars, bar)}.',
11347
+ columnCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#plural(series.points.length, bars, bar)}.',
11348
+ bar: '{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#plural(series.points.length, bars, bar)}.',
11349
+ barCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#plural(series.points.length, bars, bar)}.',
11350
+ pie: '{series.name}, pie {seriesNumber} of {chart.series.length} with {series.points.length} {#plural(series.points.length, slices, slice)}.',
11351
+ pieCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Pie with {series.points.length} {#plural(series.points.length, slices, slice)}.',
11352
+ scatter: '{series.name}, scatter plot {seriesNumber} of {chart.series.length} with {series.points.length} {#plural(series.points.length, points, point)}.',
11353
+ scatterCombination: '{series.name}, series {seriesNumber} of {chart.series.length}, scatter plot with {series.points.length} {#plural(series.points.length, points, point)}.',
11354
+ boxplot: '{series.name}, boxplot {seriesNumber} of {chart.series.length} with {series.points.length} {#plural(series.points.length, boxes, box)}.',
11355
+ boxplotCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Boxplot with {series.points.length} {#plural(series.points.length, boxes, box)}.',
11356
+ bubble: '{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#plural(series.points.length, bubbles, bubble)}.',
11357
+ bubbleCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#plural(series.points.length, bubbles, bubble)}.',
11358
+ map: '{series.name}, map {seriesNumber} of {chart.series.length} with {series.points.length} {#plural(series.points.length, areas, area)}.',
11359
+ mapCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Map with {series.points.length} {#plural(series.points.length, areas, area)}.',
11360
+ mapline: '{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#plural(series.points.length, points, point)}.',
11361
+ maplineCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#plural(series.points.length, points, point)}.',
11362
+ mapbubble: '{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#plural(series.points.length, bubbles, bubble)}.',
11363
+ mapbubbleCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#plural(series.points.length, bubbles, bubble)}.'
11169
11364
  },
11170
11365
  /**
11171
11366
  * User supplied description text. This is added in the point
@@ -11204,6 +11399,11 @@
11204
11399
  }
11205
11400
  }
11206
11401
  };
11402
+ /* *
11403
+ *
11404
+ * Default Export
11405
+ *
11406
+ * */
11207
11407
 
11208
11408
  return langOptions;
11209
11409
  });
@@ -11271,6 +11471,11 @@
11271
11471
  /* eslint-enable max-len */
11272
11472
  var error = U.error,
11273
11473
  pick = U.pick;
11474
+ /* *
11475
+ *
11476
+ * Functions
11477
+ *
11478
+ * */
11274
11479
  /* eslint-disable valid-jsdoc */
11275
11480
  /**
11276
11481
  * Set a new option on a root prop, where the option is defined as an array of
@@ -11330,7 +11535,7 @@
11330
11535
  var _a;
11331
11536
  if (chartOptions[prop]) {
11332
11537
  a11yOptions[prop] = chartOptions[prop];
11333
- error(32, false, chart, (_a = {}, _a["chart." + prop] = "use accessibility." + prop, _a));
11538
+ error(32, false, chart, (_a = {}, _a["chart.".concat(prop)] = "use accessibility.".concat(prop), _a));
11334
11539
  }
11335
11540
  });
11336
11541
  }
@@ -11387,7 +11592,7 @@
11387
11592
  oldOption === 'skipKeyboardNavigation' ?
11388
11593
  !optionVal : optionVal);
11389
11594
  error(32, false, chart, (_a = {},
11390
- _a["series." + oldOption] = ('series.' +
11595
+ _a["series.".concat(oldOption)] = ('series.' +
11391
11596
  oldToNewSeriesOptions[oldOption].join('.')),
11392
11597
  _a));
11393
11598
  }
@@ -11462,10 +11667,15 @@
11462
11667
  copyDeprecatedKeyboardNavigationOptions(chart);
11463
11668
  copyDeprecatedLangOptions(chart);
11464
11669
  }
11670
+ /* *
11671
+ *
11672
+ * Default Export
11673
+ *
11674
+ * */
11465
11675
 
11466
11676
  return copyDeprecatedOptions;
11467
11677
  });
11468
- _registerModule(_modules, 'Accessibility/Accessibility.js', [_modules['Core/DefaultOptions.js'], _modules['Core/Globals.js'], _modules['Core/Utilities.js'], _modules['Accessibility/A11yI18n.js'], _modules['Accessibility/Components/ContainerComponent.js'], _modules['Accessibility/FocusBorder.js'], _modules['Accessibility/Components/InfoRegionsComponent.js'], _modules['Accessibility/KeyboardNavigation.js'], _modules['Accessibility/Components/LegendComponent.js'], _modules['Accessibility/Components/MenuComponent.js'], _modules['Accessibility/Components/SeriesComponent/NewDataAnnouncer.js'], _modules['Accessibility/ProxyProvider.js'], _modules['Accessibility/Components/RangeSelectorComponent.js'], _modules['Accessibility/Components/SeriesComponent/SeriesComponent.js'], _modules['Accessibility/Components/ZoomComponent.js'], _modules['Accessibility/HighContrastMode.js'], _modules['Accessibility/HighContrastTheme.js'], _modules['Accessibility/Options/Options.js'], _modules['Accessibility/Options/LangOptions.js'], _modules['Accessibility/Options/DeprecatedOptions.js']], function (D, H, U, A11yI18n, ContainerComponent, FocusBorder, InfoRegionsComponent, KeyboardNavigation, LegendComponent, MenuComponent, NewDataAnnouncer, ProxyProvider, RangeSelectorComponent, SeriesComponent, ZoomComponent, whcm, highContrastTheme, defaultOptionsA11Y, defaultLangOptions, copyDeprecatedOptions) {
11678
+ _registerModule(_modules, 'Accessibility/Accessibility.js', [_modules['Core/DefaultOptions.js'], _modules['Core/Globals.js'], _modules['Core/Utilities.js'], _modules['Accessibility/A11yI18n.js'], _modules['Accessibility/Components/ContainerComponent.js'], _modules['Accessibility/FocusBorder.js'], _modules['Accessibility/Components/InfoRegionsComponent.js'], _modules['Accessibility/KeyboardNavigation.js'], _modules['Accessibility/Components/LegendComponent.js'], _modules['Accessibility/Components/MenuComponent.js'], _modules['Accessibility/Components/SeriesComponent/NewDataAnnouncer.js'], _modules['Accessibility/ProxyProvider.js'], _modules['Accessibility/Components/RangeSelectorComponent.js'], _modules['Accessibility/Components/SeriesComponent/SeriesComponent.js'], _modules['Accessibility/Components/ZoomComponent.js'], _modules['Accessibility/HighContrastMode.js'], _modules['Accessibility/HighContrastTheme.js'], _modules['Accessibility/Options/A11yDefaults.js'], _modules['Accessibility/Options/LangDefaults.js'], _modules['Accessibility/Options/DeprecatedOptions.js']], function (D, H, U, A11yI18n, ContainerComponent, FocusBorder, InfoRegionsComponent, KeyboardNavigation, LegendComponent, MenuComponent, NewDataAnnouncer, ProxyProvider, RangeSelectorComponent, SeriesComponent, ZoomComponent, whcm, highContrastTheme, defaultOptionsA11Y, defaultLangOptions, copyDeprecatedOptions) {
11469
11679
  /* *
11470
11680
  *
11471
11681
  * (c) 2009-2021 Øystein Moseng
@@ -11776,7 +11986,6 @@
11776
11986
  LegendComponent.compose(ChartClass, LegendClass);
11777
11987
  MenuComponent.compose(ChartClass);
11778
11988
  SeriesComponent.compose(ChartClass, PointClass, SeriesClass);
11779
- ZoomComponent.compose(AxisClass);
11780
11989
  // RangeSelector
11781
11990
  A11yI18n.compose(ChartClass);
11782
11991
  FocusBorder.compose(ChartClass, SVGElementClass);
@@ -11797,7 +12006,7 @@
11797
12006
  });
11798
12007
  });
11799
12008
  // Direct updates (events happen after render)
11800
- ['afterDrilldown', 'drillupall'].forEach(function (event) {
12009
+ ['afterApplyDrilldown', 'drillupall'].forEach(function (event) {
11801
12010
  addEvent(ChartClass, event, function chartOnAfterDrilldown() {
11802
12011
  var a11y = this.accessibility;
11803
12012
  if (a11y && !a11y.zombie) {