highcharts 9.2.2 → 9.3.3

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 (894) hide show
  1. package/README.md +13 -6
  2. package/bower.json +1 -1
  3. package/css/annotations/popup.css +48 -8
  4. package/css/annotations/popup.scss +70 -22
  5. package/css/highcharts.css +46 -1
  6. package/css/highcharts.scss +40 -0
  7. package/css/stocktools/gui.css +1 -1
  8. package/css/themes/dark-unica.css +46 -1
  9. package/css/themes/grid-light.css +46 -1
  10. package/css/themes/sand-signika.css +46 -1
  11. package/es-modules/Accessibility/A11yI18n.js +269 -224
  12. package/es-modules/Accessibility/Accessibility.js +244 -129
  13. package/es-modules/Accessibility/AccessibilityComponent.js +78 -313
  14. package/es-modules/Accessibility/Components/AnnotationsA11y.js +19 -5
  15. package/es-modules/Accessibility/Components/ContainerComponent.js +53 -28
  16. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +178 -120
  17. package/es-modules/Accessibility/Components/LegendComponent.js +251 -129
  18. package/es-modules/Accessibility/Components/MenuComponent.js +250 -154
  19. package/es-modules/Accessibility/Components/RangeSelectorComponent.js +172 -93
  20. package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +161 -115
  21. package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +138 -69
  22. package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +67 -28
  23. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +48 -56
  24. package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +387 -343
  25. package/es-modules/Accessibility/Components/ZoomComponent.js +156 -70
  26. package/es-modules/Accessibility/FocusBorder.js +192 -152
  27. package/es-modules/Accessibility/HighContrastMode.js +79 -66
  28. package/es-modules/Accessibility/HighContrastTheme.js +10 -0
  29. package/es-modules/Accessibility/KeyboardNavigation.js +151 -75
  30. package/es-modules/Accessibility/KeyboardNavigationHandler.js +71 -44
  31. package/es-modules/Accessibility/Options/DeprecatedOptions.js +21 -4
  32. package/es-modules/Accessibility/Options/LangOptions.js +4 -5
  33. package/es-modules/Accessibility/Options/Options.js +32 -17
  34. package/es-modules/Accessibility/ProxyElement.js +218 -0
  35. package/es-modules/Accessibility/ProxyProvider.js +302 -0
  36. package/es-modules/Accessibility/Utils/Announcer.js +17 -10
  37. package/es-modules/Accessibility/Utils/ChartUtilities.js +55 -45
  38. package/es-modules/Accessibility/Utils/DOMElementProvider.js +27 -15
  39. package/es-modules/Accessibility/Utils/EventProvider.js +27 -17
  40. package/es-modules/Accessibility/Utils/HTMLUtilities.js +125 -42
  41. package/es-modules/Core/Animation/Fx.js +5 -14
  42. package/es-modules/Core/Axis/Axis.js +77 -96
  43. package/es-modules/Core/Axis/Axis3D.js +10 -4
  44. package/es-modules/Core/Axis/AxisDefaults.js +35 -24
  45. package/es-modules/Core/Axis/BrokenAxis.js +17 -11
  46. package/es-modules/Core/Axis/Color/ColorAxis.js +7 -4
  47. package/es-modules/Core/Axis/Color/ColorAxisComposition.js +55 -5
  48. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +5 -5
  49. package/es-modules/Core/Axis/DateTimeAxis.js +3 -14
  50. package/es-modules/Core/Axis/GridAxis.js +26 -16
  51. package/es-modules/Core/Axis/NavigatorAxis.js +0 -5
  52. package/es-modules/Core/Axis/OrdinalAxis.js +88 -92
  53. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +4 -5
  54. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +0 -5
  55. package/es-modules/Core/Axis/RadialAxis.js +7 -28
  56. package/es-modules/Core/Axis/ScrollbarAxis.js +27 -12
  57. package/es-modules/Core/Axis/StackingAxis.js +2 -1
  58. package/es-modules/Core/Axis/Tick.js +2 -4
  59. package/es-modules/Core/Axis/TreeGridAxis.js +28 -19
  60. package/es-modules/Core/Axis/TreeGridTick.js +5 -3
  61. package/es-modules/Core/Axis/WaterfallAxis.js +1 -1
  62. package/es-modules/Core/Axis/ZAxis.js +1 -1
  63. package/es-modules/Core/Chart/Chart.js +44 -47
  64. package/es-modules/Core/Chart/Chart3D.js +23 -10
  65. package/es-modules/Core/Chart/ChartDefaults.js +3 -4
  66. package/es-modules/Core/Chart/ChartNavigationComposition.js +92 -0
  67. package/es-modules/Core/Chart/GanttChart.js +4 -4
  68. package/es-modules/Core/Chart/MapChart.js +13 -25
  69. package/es-modules/Core/Chart/StockChart.js +13 -316
  70. package/es-modules/Core/Color/Palettes.js +22 -0
  71. package/es-modules/Core/DefaultOptions.js +22 -19
  72. package/es-modules/Core/Foundation.js +39 -31
  73. package/es-modules/Core/Geometry/CircleUtilities.js +2 -1
  74. package/es-modules/Core/Globals.js +1 -1
  75. package/es-modules/Core/HttpUtilities.js +8 -7
  76. package/es-modules/Core/Legend/Legend.js +19 -16
  77. package/es-modules/Core/Navigator.js +41 -30
  78. package/es-modules/Core/Pointer.js +52 -45
  79. package/es-modules/Core/Renderer/HTML/AST.js +29 -14
  80. package/es-modules/Core/Renderer/HTML/HTMLElement.js +27 -20
  81. package/es-modules/Core/Renderer/HTML/HTMLRenderer.js +8 -6
  82. package/es-modules/Core/Renderer/RendererUtilities.js +2 -2
  83. package/es-modules/Core/Renderer/SVG/SVGElement.js +11 -20
  84. package/es-modules/Core/Renderer/SVG/SVGLabel.js +17 -8
  85. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +25 -29
  86. package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +12 -5
  87. package/es-modules/Core/Renderer/SVG/TextBuilder.js +18 -12
  88. package/es-modules/Core/Responsive.js +2 -3
  89. package/es-modules/Core/Scrollbar.js +14 -12
  90. package/es-modules/Core/ScrollbarDefaults.js +10 -9
  91. package/es-modules/Core/Series/DataLabel.js +19 -15
  92. package/es-modules/Core/Series/Point.js +22 -19
  93. package/es-modules/Core/Series/Series.js +197 -235
  94. package/es-modules/Core/Series/SeriesDefaults.js +8 -8
  95. package/es-modules/Core/Series/SeriesRegistry.js +1 -2
  96. package/es-modules/Core/Time.js +14 -11
  97. package/es-modules/Core/Tooltip.js +63 -53
  98. package/es-modules/Core/Utilities.js +20 -24
  99. package/es-modules/Data/DataConverter.js +483 -0
  100. package/es-modules/Data/DataPromise.js +252 -0
  101. package/es-modules/Data/DataSeriesConverter.js +207 -0
  102. package/es-modules/Data/DataTable.js +1205 -0
  103. package/es-modules/Data/Modifiers/ChainModifier.js +299 -0
  104. package/es-modules/Data/Modifiers/DataModifier.js +303 -0
  105. package/es-modules/Data/Modifiers/GroupModifier.js +144 -0
  106. package/es-modules/Data/Modifiers/InvertModifier.js +254 -0
  107. package/es-modules/Data/Modifiers/RangeModifier.js +143 -0
  108. package/es-modules/Data/Modifiers/SeriesPointsModifier.js +110 -0
  109. package/es-modules/Data/Modifiers/SortModifier.js +249 -0
  110. package/es-modules/Data/Parsers/CSVParser.js +400 -0
  111. package/es-modules/Data/Parsers/DataParser.js +101 -0
  112. package/es-modules/Data/Parsers/GoogleSheetsParser.js +223 -0
  113. package/es-modules/Data/Parsers/HTMLTableParser.js +213 -0
  114. package/es-modules/Data/Stores/CSVStore.js +317 -0
  115. package/es-modules/Data/Stores/DataStore.js +276 -0
  116. package/es-modules/Data/Stores/GoogleSheetsStore.js +169 -0
  117. package/es-modules/Data/Stores/HTMLTableStore.js +353 -0
  118. package/es-modules/Extensions/Annotations/Annotations.js +69 -18
  119. package/es-modules/Extensions/Annotations/ControlPoint.js +1 -3
  120. package/es-modules/Extensions/Annotations/Controllables/ControllableCircle.js +1 -1
  121. package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +199 -0
  122. package/es-modules/Extensions/Annotations/Controllables/ControllableImage.js +1 -1
  123. package/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +3 -6
  124. package/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +3 -2
  125. package/es-modules/Extensions/Annotations/Controllables/ControllableRect.js +1 -1
  126. package/es-modules/Extensions/Annotations/Mixins/ControllableMixin.js +13 -4
  127. package/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js +0 -1
  128. package/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js +5 -4
  129. package/es-modules/Extensions/Annotations/NavigationBindings.js +120 -53
  130. package/es-modules/Extensions/Annotations/Popup.js +494 -148
  131. package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +51 -2
  132. package/es-modules/Extensions/Annotations/Types/CrookedLine.js +5 -3
  133. package/es-modules/Extensions/Annotations/Types/ElliottWave.js +1 -1
  134. package/es-modules/Extensions/Annotations/Types/Fibonacci.js +2 -3
  135. package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +219 -0
  136. package/es-modules/Extensions/Annotations/Types/InfinityLine.js +1 -1
  137. package/es-modules/Extensions/Annotations/Types/Measure.js +29 -19
  138. package/es-modules/Extensions/Annotations/Types/Pitchfork.js +7 -6
  139. package/es-modules/Extensions/Annotations/Types/TimeCycles.js +211 -0
  140. package/es-modules/Extensions/Annotations/Types/Tunnel.js +13 -10
  141. package/es-modules/Extensions/Annotations/Types/VerticalLine.js +1 -1
  142. package/es-modules/Extensions/Boost/BoostOptions.js +2 -2
  143. package/es-modules/Extensions/Boost/BoostOverrides.js +6 -10
  144. package/es-modules/Extensions/Boost/BoostUtils.js +0 -6
  145. package/es-modules/Extensions/Boost/WGLRenderer.js +16 -12
  146. package/es-modules/Extensions/Boost/WGLShader.js +13 -11
  147. package/es-modules/Extensions/Boost/WGLVBuffer.js +4 -7
  148. package/es-modules/Extensions/BoostCanvas.js +1 -2
  149. package/es-modules/Extensions/CurrentDateIndication.js +2 -3
  150. package/es-modules/Extensions/Data.js +4 -48
  151. package/es-modules/Extensions/DataGrouping.js +52 -32
  152. package/es-modules/Extensions/DownloadURL.js +2 -2
  153. package/es-modules/Extensions/DragPanes.js +1 -2
  154. package/es-modules/Extensions/DraggablePoints.js +7 -8
  155. package/es-modules/Extensions/Drilldown.js +11 -7
  156. package/es-modules/Extensions/ExportData.js +6 -5
  157. package/es-modules/Extensions/Exporting/Exporting.js +33 -46
  158. package/es-modules/Extensions/Exporting/ExportingDefaults.js +8 -15
  159. package/es-modules/Extensions/FullScreen.js +4 -3
  160. package/es-modules/Extensions/GeoJSON.js +42 -66
  161. package/es-modules/Extensions/MarkerClusters.js +118 -98
  162. package/es-modules/Extensions/Math3D.js +4 -4
  163. package/es-modules/Extensions/NoDataToDisplay.js +1 -2
  164. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +32 -32
  165. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
  166. package/es-modules/Extensions/Oldie/Oldie.js +14 -79
  167. package/es-modules/Extensions/Oldie/VMLAxis3D.js +5 -1
  168. package/es-modules/Extensions/OverlappingDataLabels.js +10 -6
  169. package/es-modules/Extensions/Pane.js +11 -12
  170. package/es-modules/Extensions/ParallelCoordinates.js +5 -3
  171. package/es-modules/Extensions/PatternFill.js +17 -11
  172. package/es-modules/Extensions/Polar.js +7 -4
  173. package/es-modules/Extensions/PriceIndication.js +2 -1
  174. package/es-modules/Extensions/RangeSelector.js +22 -59
  175. package/es-modules/Extensions/ScrollablePlotArea.js +2 -2
  176. package/es-modules/Extensions/SeriesLabel.js +1 -1
  177. package/es-modules/Extensions/Sonification/ChartSonify.js +279 -663
  178. package/es-modules/Extensions/Sonification/Earcon.js +136 -102
  179. package/es-modules/Extensions/Sonification/Instrument.js +493 -426
  180. package/es-modules/Extensions/Sonification/MusicalFrequencies.js +10 -0
  181. package/es-modules/Extensions/Sonification/Options.js +10 -0
  182. package/es-modules/Extensions/Sonification/PointSonify.js +207 -152
  183. package/es-modules/Extensions/Sonification/SeriesSonify.js +474 -0
  184. package/es-modules/Extensions/Sonification/SignalHandler.js +122 -0
  185. package/es-modules/Extensions/Sonification/Sonification.js +27 -53
  186. package/es-modules/Extensions/Sonification/{Utilities.js → SonificationUtilities.js} +70 -88
  187. package/es-modules/Extensions/Sonification/Timeline.js +250 -567
  188. package/es-modules/Extensions/Sonification/TimelineEvent.js +157 -0
  189. package/es-modules/Extensions/Sonification/TimelinePath.js +311 -0
  190. package/es-modules/Extensions/Stacking.js +5 -23
  191. package/es-modules/Extensions/Themes/BrandDark.js +293 -0
  192. package/es-modules/Extensions/Themes/BrandLight.js +259 -0
  193. package/es-modules/Extensions/Themes/DarkUnica.js +4 -2
  194. package/es-modules/Extensions/Themes/Grid.js +4 -2
  195. package/es-modules/Extensions/Themes/GridLight.js +4 -2
  196. package/es-modules/Gantt/Connection.js +2 -2
  197. package/es-modules/Gantt/Pathfinder.js +6 -5
  198. package/es-modules/Gantt/PathfinderAlgorithms.js +12 -12
  199. package/es-modules/Maps/MapNavigation.js +30 -68
  200. package/es-modules/Maps/MapNavigationOptionsDefault.js +3 -0
  201. package/es-modules/Maps/MapPointer.js +8 -5
  202. package/es-modules/Maps/MapSymbols.js +23 -3
  203. package/es-modules/Maps/MapView.js +450 -0
  204. package/es-modules/Maps/MapViewOptionsDefault.js +97 -0
  205. package/es-modules/Maps/Projection.js +436 -0
  206. package/es-modules/Maps/ProjectionDefinition.js +9 -0
  207. package/es-modules/Maps/Projections/EqualEarth.js +42 -0
  208. package/es-modules/Maps/Projections/LambertConformalConic.js +52 -0
  209. package/es-modules/Maps/Projections/Miller.js +16 -0
  210. package/es-modules/Maps/Projections/Orthographic.js +26 -0
  211. package/es-modules/Maps/Projections/ProjectionRegistry.js +19 -0
  212. package/es-modules/Maps/Projections/WebMercator.js +24 -0
  213. package/es-modules/Series/Area/AreaSeries.js +13 -13
  214. package/es-modules/Series/Area3DSeries.js +4 -2
  215. package/es-modules/Series/AreaRange/AreaRangeSeries.js +28 -17
  216. package/es-modules/Series/Bellcurve/BellcurveSeries.js +4 -9
  217. package/es-modules/Series/BoxPlot/BoxPlotSeries.js +1 -2
  218. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -2
  219. package/es-modules/Series/Bubble/BubbleLegendItem.js +5 -15
  220. package/es-modules/Series/Bubble/BubblePoint.js +5 -0
  221. package/es-modules/Series/Bubble/BubbleSeries.js +90 -50
  222. package/es-modules/Series/Candlestick/CandlestickSeries.js +10 -19
  223. package/es-modules/{Mixins/CenteredSeries.js → Series/CenteredUtilities.js} +45 -23
  224. package/es-modules/{Mixins/ColorMapSeries.js → Series/ColorMapMixin.js} +10 -8
  225. package/es-modules/Series/Column/ColumnDataLabel.js +5 -5
  226. package/es-modules/Series/Column/ColumnSeries.js +19 -18
  227. package/es-modules/Series/Column3D/Column3DComposition.js +1 -2
  228. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +11 -8
  229. package/es-modules/Series/ColumnRange/ColumnRangeSeries.js +2 -1
  230. package/es-modules/Series/Cylinder/CylinderComposition.js +36 -4
  231. package/es-modules/Series/DataModifyComposition.js +539 -0
  232. package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +2 -6
  233. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +1 -1
  234. package/es-modules/Series/DerivedComposition.js +137 -0
  235. package/es-modules/Series/DrawPointComposition.js +111 -0
  236. package/es-modules/Series/Dumbbell/DumbbellPoint.js +0 -1
  237. package/es-modules/Series/Dumbbell/DumbbellSeries.js +2 -6
  238. package/es-modules/Series/ErrorBar/ErrorBarSeries.js +1 -2
  239. package/es-modules/Series/Flags/FlagsSeries.js +18 -25
  240. package/es-modules/Series/Flags/FlagsSymbols.js +2 -2
  241. package/es-modules/Series/Funnel/FunnelSeries.js +6 -5
  242. package/es-modules/Series/Funnel3D/Funnel3DComposition.js +14 -8
  243. package/es-modules/Series/Funnel3D/Funnel3DSeries.js +2 -1
  244. package/es-modules/Series/Gantt/GanttPoint.js +1 -1
  245. package/es-modules/Series/Gantt/GanttSeries.js +3 -3
  246. package/es-modules/Series/Gauge/GaugePoint.js +1 -1
  247. package/es-modules/Series/Gauge/GaugeSeries.js +7 -7
  248. package/es-modules/Series/HLC/HLCPoint.js +55 -0
  249. package/es-modules/Series/HLC/HLCSeries.js +378 -0
  250. package/es-modules/Series/Heatmap/HeatmapPoint.js +13 -14
  251. package/es-modules/Series/Heatmap/HeatmapSeries.js +24 -12
  252. package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +10 -9
  253. package/es-modules/Series/Histogram/HistogramSeries.js +7 -11
  254. package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +1 -4
  255. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +28 -30
  256. package/es-modules/Series/Item/ItemSeries.js +4 -5
  257. package/es-modules/Series/Line/LineSeries.js +1 -2
  258. package/es-modules/Series/Map/MapPoint.js +27 -14
  259. package/es-modules/Series/Map/MapSeries.js +283 -322
  260. package/es-modules/Series/MapBubble/MapBubblePoint.js +0 -3
  261. package/es-modules/Series/MapBubble/MapBubbleSeries.js +10 -1
  262. package/es-modules/Series/MapLine/MapLineSeries.js +2 -4
  263. package/es-modules/Series/MapPoint/MapPointPoint.js +5 -1
  264. package/es-modules/Series/MapPoint/MapPointSeries.js +99 -14
  265. package/es-modules/Series/Networkgraph/DraggableNodes.js +0 -4
  266. package/es-modules/Series/Networkgraph/Integrations.js +8 -22
  267. package/es-modules/Series/Networkgraph/Networkgraph.js +6 -10
  268. package/es-modules/Series/Networkgraph/QuadTree.js +1 -3
  269. package/es-modules/{Mixins/Nodes.js → Series/NodesComposition.js} +78 -30
  270. package/es-modules/Series/OHLC/OHLCPoint.js +2 -7
  271. package/es-modules/Series/OHLC/OHLCSeries.js +55 -183
  272. package/es-modules/{Mixins/OnSeries.js → Series/OnSeriesComposition.js} +53 -21
  273. package/es-modules/Series/Organization/OrganizationSeries.js +6 -5
  274. package/es-modules/Series/PackedBubble/PackedBubbleComposition.js +1 -0
  275. package/es-modules/Series/PackedBubble/PackedBubblePoint.js +1 -1
  276. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +48 -10
  277. package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -7
  278. package/es-modules/Series/Pie/PieDataLabel.js +1 -2
  279. package/es-modules/Series/Pie/PiePoint.js +2 -2
  280. package/es-modules/Series/Pie/PieSeries.js +7 -8
  281. package/es-modules/Series/Pie3D/Pie3DComposition.js +2 -1
  282. package/es-modules/Series/Pie3D/Pie3DPoint.js +2 -1
  283. package/es-modules/Series/Pie3D/Pie3DSeries.js +1 -1
  284. package/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +2 -1
  285. package/es-modules/Series/Sankey/SankeyPoint.js +0 -4
  286. package/es-modules/Series/Sankey/SankeySeries.js +92 -22
  287. package/es-modules/Series/SolidGauge/SolidGaugeComposition.js +3 -1
  288. package/es-modules/Series/Spline/SplineSeries.js +0 -8
  289. package/es-modules/Series/Sunburst/SunburstPoint.js +2 -3
  290. package/es-modules/Series/Sunburst/SunburstSeries.js +6 -6
  291. package/es-modules/Series/Sunburst/SunburstUtilities.js +3 -2
  292. package/es-modules/Series/Tilemap/TilemapPoint.js +2 -5
  293. package/es-modules/Series/Tilemap/TilemapShapes.js +0 -7
  294. package/es-modules/Series/Timeline/TimelineSeries.js +3 -4
  295. package/es-modules/{Mixins/TreeSeries.js → Series/TreeUtilities.js} +88 -78
  296. package/es-modules/Series/Treemap/TreemapPoint.js +2 -2
  297. package/es-modules/Series/Treemap/TreemapSeries.js +22 -25
  298. package/es-modules/Series/Variwide/VariwideSeries.js +5 -1
  299. package/es-modules/Series/Venn/VennPoint.js +16 -7
  300. package/es-modules/Series/Venn/VennSeries.js +11 -17
  301. package/es-modules/Series/Venn/VennUtils.js +551 -439
  302. package/es-modules/Series/Waterfall/WaterfallSeries.js +8 -6
  303. package/es-modules/Series/Windbarb/WindbarbSeries.js +23 -24
  304. package/es-modules/Series/Wordcloud/WordcloudPoint.js +8 -6
  305. package/es-modules/Series/Wordcloud/WordcloudSeries.js +26 -22
  306. package/es-modules/Series/Wordcloud/WordcloudUtils.js +669 -484
  307. package/es-modules/Series/XRange/XRangePoint.js +7 -12
  308. package/es-modules/Series/XRange/XRangeSeries.js +4 -20
  309. package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +15 -6
  310. package/es-modules/Stock/Indicators/AO/AOIndicator.js +2 -3
  311. package/es-modules/Stock/Indicators/APO/APOIndicator.js +14 -20
  312. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +4 -6
  313. package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +11 -13
  314. package/es-modules/Stock/Indicators/ArrayUtilities.js +47 -0
  315. package/es-modules/Stock/Indicators/BB/BBIndicator.js +39 -11
  316. package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +35 -15
  317. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +6 -12
  318. package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +1 -11
  319. package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +28 -16
  320. package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +18 -11
  321. package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +1 -3
  322. package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +6 -6
  323. package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +23 -9
  324. package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +16 -19
  325. package/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +32 -14
  326. package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +2 -2
  327. package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +2 -2
  328. package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +2 -2
  329. package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +2 -3
  330. package/es-modules/Stock/Indicators/MultipleLinesComposition.js +294 -0
  331. package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +1 -3
  332. package/es-modules/Stock/Indicators/PC/PCIndicator.js +25 -13
  333. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -11
  334. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +2 -1
  335. package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +2 -1
  336. package/es-modules/Stock/Indicators/SMA/SMAComposition.js +0 -26
  337. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +32 -50
  338. package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +0 -8
  339. package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +18 -9
  340. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +4 -6
  341. package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +26 -11
  342. package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +6 -12
  343. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +26 -10
  344. package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +19 -7
  345. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +2 -3
  346. package/es-modules/Stock/StockToolsBindings.js +156 -47
  347. package/es-modules/Stock/StockToolsGui.js +442 -37
  348. package/es-modules/masters/highcharts-3d.src.js +1 -1
  349. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  350. package/es-modules/masters/highcharts-more.src.js +1 -1
  351. package/es-modules/masters/highcharts.src.js +1 -1
  352. package/es-modules/masters/highmaps.src.js +1 -1
  353. package/es-modules/masters/highstock.src.js +1 -1
  354. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  355. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  356. package/es-modules/masters/indicators/ao.src.js +1 -1
  357. package/es-modules/masters/indicators/apo.src.js +1 -1
  358. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  359. package/es-modules/masters/indicators/aroon.src.js +1 -1
  360. package/es-modules/masters/indicators/atr.src.js +1 -1
  361. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  362. package/es-modules/masters/indicators/cci.src.js +1 -1
  363. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  364. package/es-modules/masters/indicators/cmf.src.js +1 -1
  365. package/es-modules/masters/indicators/cmo.src.js +1 -1
  366. package/es-modules/masters/indicators/dema.src.js +1 -1
  367. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  368. package/es-modules/masters/indicators/dmi.src.js +1 -1
  369. package/es-modules/masters/indicators/dpo.src.js +1 -1
  370. package/es-modules/masters/indicators/ema.src.js +4 -10
  371. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  372. package/es-modules/masters/indicators/indicators-all.src.js +2 -2
  373. package/es-modules/masters/indicators/indicators.src.js +2 -1
  374. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  375. package/es-modules/masters/indicators/klinger.src.js +1 -1
  376. package/es-modules/masters/indicators/macd.src.js +1 -1
  377. package/es-modules/masters/indicators/mfi.src.js +1 -1
  378. package/es-modules/masters/indicators/momentum.src.js +1 -1
  379. package/es-modules/masters/indicators/natr.src.js +1 -1
  380. package/es-modules/masters/indicators/obv.src.js +1 -1
  381. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  382. package/es-modules/masters/indicators/ppo.src.js +1 -1
  383. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  384. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  385. package/es-modules/masters/indicators/psar.src.js +1 -1
  386. package/es-modules/masters/indicators/regressions.src.js +1 -1
  387. package/es-modules/masters/indicators/roc.src.js +1 -1
  388. package/es-modules/masters/indicators/rsi.src.js +1 -1
  389. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  390. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  391. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  392. package/es-modules/masters/indicators/tema.src.js +1 -1
  393. package/es-modules/masters/indicators/trendline.src.js +1 -1
  394. package/es-modules/masters/indicators/trix.src.js +1 -1
  395. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  396. package/es-modules/masters/indicators/vwap.src.js +1 -1
  397. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  398. package/es-modules/masters/indicators/wma.src.js +1 -1
  399. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  400. package/es-modules/masters/modules/accessibility.src.js +16 -2
  401. package/es-modules/masters/modules/annotations-advanced.src.js +3 -1
  402. package/es-modules/masters/modules/annotations.src.js +1 -1
  403. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  404. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  405. package/es-modules/masters/modules/boost.src.js +1 -1
  406. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  407. package/es-modules/masters/modules/bullet.src.js +1 -1
  408. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  409. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  410. package/es-modules/masters/modules/cylinder.src.js +1 -1
  411. package/es-modules/masters/modules/data.src.js +6 -3
  412. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  413. package/es-modules/masters/modules/debugger.src.js +1 -1
  414. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  415. package/es-modules/masters/modules/dotplot.src.js +1 -1
  416. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  417. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  418. package/es-modules/masters/modules/drilldown.src.js +1 -1
  419. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  420. package/es-modules/masters/modules/export-data.src.js +1 -1
  421. package/es-modules/masters/modules/exporting.src.js +1 -1
  422. package/es-modules/masters/modules/full-screen.src.js +1 -1
  423. package/es-modules/masters/modules/funnel.src.js +1 -1
  424. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  425. package/es-modules/masters/modules/gantt.src.js +1 -1
  426. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  427. package/es-modules/masters/modules/heatmap.src.js +1 -2
  428. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  429. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  430. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  431. package/es-modules/masters/modules/item-series.src.js +1 -1
  432. package/es-modules/masters/modules/lollipop.src.js +1 -1
  433. package/es-modules/masters/modules/map.src.js +1 -3
  434. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  435. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  436. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  437. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  438. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  439. package/es-modules/masters/modules/oldie.src.js +1 -1
  440. package/es-modules/masters/modules/organization.src.js +1 -1
  441. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  442. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  443. package/es-modules/masters/modules/pareto.src.js +1 -1
  444. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  445. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  446. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  447. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  448. package/es-modules/masters/modules/sankey.src.js +1 -1
  449. package/es-modules/masters/modules/series-label.src.js +1 -1
  450. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  451. package/es-modules/masters/modules/sonification.src.js +33 -2
  452. package/es-modules/masters/modules/static-scale.src.js +1 -1
  453. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  454. package/es-modules/masters/modules/stock.src.js +4 -1
  455. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  456. package/es-modules/masters/modules/sunburst.src.js +1 -1
  457. package/es-modules/masters/modules/tilemap.src.js +1 -1
  458. package/es-modules/masters/modules/timeline.src.js +1 -1
  459. package/es-modules/masters/modules/treegrid.src.js +1 -1
  460. package/es-modules/masters/modules/treemap.src.js +1 -1
  461. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  462. package/es-modules/masters/modules/variwide.src.js +1 -1
  463. package/es-modules/masters/modules/vector.src.js +1 -1
  464. package/es-modules/masters/modules/venn.src.js +1 -1
  465. package/es-modules/masters/modules/windbarb.src.js +1 -1
  466. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  467. package/es-modules/masters/modules/xrange.src.js +1 -1
  468. package/es-modules/masters/themes/avocado.src.js +1 -1
  469. package/es-modules/masters/themes/brand-dark.src.js +14 -0
  470. package/es-modules/masters/themes/brand-light.src.js +14 -0
  471. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  472. package/es-modules/masters/themes/dark-green.src.js +1 -1
  473. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  474. package/es-modules/masters/themes/gray.src.js +1 -1
  475. package/es-modules/masters/themes/grid-light.src.js +1 -1
  476. package/es-modules/masters/themes/grid.src.js +1 -1
  477. package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  478. package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  479. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  480. package/es-modules/masters/themes/skies.src.js +1 -1
  481. package/es-modules/masters/themes/sunset.src.js +1 -1
  482. package/highcharts-3d.js +1 -1
  483. package/highcharts-3d.js.map +1 -1
  484. package/highcharts-3d.src.js +65 -35
  485. package/highcharts-gantt.js +800 -803
  486. package/highcharts-gantt.js.map +1 -1
  487. package/highcharts-gantt.src.js +1356 -1429
  488. package/highcharts-more.js +194 -193
  489. package/highcharts-more.js.map +1 -1
  490. package/highcharts-more.src.js +280 -222
  491. package/highcharts.d.ts +10208 -761
  492. package/highcharts.js +585 -588
  493. package/highcharts.js.map +1 -1
  494. package/highcharts.src.d.ts +10208 -761
  495. package/highcharts.src.js +992 -1066
  496. package/highmaps.js +727 -707
  497. package/highmaps.js.map +1 -1
  498. package/highmaps.src.js +3240 -2135
  499. package/highstock.js +788 -783
  500. package/highstock.js.map +1 -1
  501. package/highstock.src.js +2487 -1981
  502. package/indicators/acceleration-bands.d.ts +17 -1
  503. package/indicators/acceleration-bands.js +11 -9
  504. package/indicators/acceleration-bands.js.map +1 -1
  505. package/indicators/acceleration-bands.src.d.ts +17 -1
  506. package/indicators/acceleration-bands.src.js +238 -112
  507. package/indicators/accumulation-distribution.js +1 -1
  508. package/indicators/accumulation-distribution.src.js +1 -1
  509. package/indicators/ao.js +6 -6
  510. package/indicators/ao.js.map +1 -1
  511. package/indicators/ao.src.js +4 -4
  512. package/indicators/apo.js +5 -6
  513. package/indicators/apo.js.map +1 -1
  514. package/indicators/apo.src.js +16 -84
  515. package/indicators/aroon-oscillator.d.ts +17 -1
  516. package/indicators/aroon-oscillator.js +10 -9
  517. package/indicators/aroon-oscillator.js.map +1 -1
  518. package/indicators/aroon-oscillator.src.d.ts +17 -1
  519. package/indicators/aroon-oscillator.src.js +230 -177
  520. package/indicators/aroon.d.ts +17 -1
  521. package/indicators/aroon.js +11 -9
  522. package/indicators/aroon.js.map +1 -1
  523. package/indicators/aroon.src.d.ts +17 -1
  524. package/indicators/aroon.src.js +227 -112
  525. package/indicators/atr.js +1 -1
  526. package/indicators/atr.src.js +1 -1
  527. package/indicators/bollinger-bands.d.ts +17 -1
  528. package/indicators/bollinger-bands.js +12 -9
  529. package/indicators/bollinger-bands.js.map +1 -1
  530. package/indicators/bollinger-bands.src.d.ts +17 -1
  531. package/indicators/bollinger-bands.src.js +262 -117
  532. package/indicators/cci.js +1 -1
  533. package/indicators/cci.src.js +1 -1
  534. package/indicators/chaikin.js +8 -9
  535. package/indicators/chaikin.js.map +1 -1
  536. package/indicators/chaikin.src.js +8 -76
  537. package/indicators/cmf.js +1 -1
  538. package/indicators/cmf.js.map +1 -1
  539. package/indicators/cmf.src.js +36 -16
  540. package/indicators/cmo.js +1 -1
  541. package/indicators/cmo.src.js +1 -1
  542. package/indicators/dema.js +5 -6
  543. package/indicators/dema.js.map +1 -1
  544. package/indicators/dema.src.js +3 -75
  545. package/indicators/disparity-index.js +6 -7
  546. package/indicators/disparity-index.js.map +1 -1
  547. package/indicators/disparity-index.src.js +20 -74
  548. package/indicators/dmi.js +12 -11
  549. package/indicators/dmi.js.map +1 -1
  550. package/indicators/dmi.src.js +252 -121
  551. package/indicators/dpo.js +1 -1
  552. package/indicators/dpo.src.js +1 -1
  553. package/indicators/ema.js +1 -13
  554. package/indicators/ema.js.map +1 -1
  555. package/indicators/ema.src.js +7 -188
  556. package/indicators/ichimoku-kinko-hyo.js +1 -1
  557. package/indicators/ichimoku-kinko-hyo.js.map +1 -1
  558. package/indicators/ichimoku-kinko-hyo.src.js +7 -7
  559. package/indicators/indicators-all.d.ts +17 -1
  560. package/indicators/indicators-all.js +198 -203
  561. package/indicators/indicators-all.js.map +1 -1
  562. package/indicators/indicators-all.src.d.ts +17 -1
  563. package/indicators/indicators-all.src.js +892 -777
  564. package/indicators/indicators.js +12 -12
  565. package/indicators/indicators.js.map +1 -1
  566. package/indicators/indicators.src.js +213 -144
  567. package/indicators/keltner-channels.d.ts +17 -1
  568. package/indicators/keltner-channels.js +11 -10
  569. package/indicators/keltner-channels.js.map +1 -1
  570. package/indicators/keltner-channels.src.d.ts +17 -1
  571. package/indicators/keltner-channels.src.js +246 -118
  572. package/indicators/klinger.js +14 -13
  573. package/indicators/klinger.js.map +1 -1
  574. package/indicators/klinger.src.js +239 -187
  575. package/indicators/macd.js +2 -2
  576. package/indicators/macd.js.map +1 -1
  577. package/indicators/macd.src.js +3 -4
  578. package/indicators/mfi.js +1 -1
  579. package/indicators/mfi.src.js +1 -1
  580. package/indicators/momentum.js +1 -1
  581. package/indicators/momentum.src.js +1 -1
  582. package/indicators/natr.js +3 -3
  583. package/indicators/natr.js.map +1 -1
  584. package/indicators/natr.src.js +2 -4
  585. package/indicators/obv.js +1 -1
  586. package/indicators/obv.src.js +1 -1
  587. package/indicators/pivot-points.js +1 -1
  588. package/indicators/pivot-points.js.map +1 -1
  589. package/indicators/pivot-points.src.js +3 -2
  590. package/indicators/ppo.js +5 -6
  591. package/indicators/ppo.js.map +1 -1
  592. package/indicators/ppo.src.js +3 -75
  593. package/indicators/price-channel.d.ts +17 -1
  594. package/indicators/price-channel.js +11 -9
  595. package/indicators/price-channel.js.map +1 -1
  596. package/indicators/price-channel.src.d.ts +17 -1
  597. package/indicators/price-channel.src.js +288 -168
  598. package/indicators/price-envelopes.js +1 -1
  599. package/indicators/price-envelopes.src.js +1 -1
  600. package/indicators/psar.js +1 -1
  601. package/indicators/psar.src.js +1 -1
  602. package/indicators/regressions.js +1 -1
  603. package/indicators/regressions.js.map +1 -1
  604. package/indicators/regressions.src.js +39 -21
  605. package/indicators/roc.js +1 -1
  606. package/indicators/roc.src.js +1 -1
  607. package/indicators/rsi.js +1 -1
  608. package/indicators/rsi.js.map +1 -1
  609. package/indicators/rsi.src.js +3 -2
  610. package/indicators/slow-stochastic.js +5 -6
  611. package/indicators/slow-stochastic.js.map +1 -1
  612. package/indicators/slow-stochastic.src.js +2 -72
  613. package/indicators/stochastic.d.ts +17 -1
  614. package/indicators/stochastic.js +12 -10
  615. package/indicators/stochastic.js.map +1 -1
  616. package/indicators/stochastic.src.d.ts +17 -1
  617. package/indicators/stochastic.src.js +282 -165
  618. package/indicators/supertrend.js +10 -10
  619. package/indicators/supertrend.js.map +1 -1
  620. package/indicators/supertrend.src.js +6 -7
  621. package/indicators/tema.js +6 -7
  622. package/indicators/tema.js.map +1 -1
  623. package/indicators/tema.src.js +28 -75
  624. package/indicators/trendline.js +1 -1
  625. package/indicators/trendline.src.js +1 -1
  626. package/indicators/trix.js +4 -5
  627. package/indicators/trix.js.map +1 -1
  628. package/indicators/trix.src.js +8 -76
  629. package/indicators/volume-by-price.js +16 -16
  630. package/indicators/volume-by-price.js.map +1 -1
  631. package/indicators/volume-by-price.src.js +27 -10
  632. package/indicators/vwap.js +1 -1
  633. package/indicators/vwap.js.map +1 -1
  634. package/indicators/vwap.src.js +20 -8
  635. package/indicators/williams-r.js +5 -6
  636. package/indicators/williams-r.js.map +1 -1
  637. package/indicators/williams-r.src.js +41 -51
  638. package/indicators/wma.js +1 -1
  639. package/indicators/wma.src.js +1 -1
  640. package/indicators/zigzag.js +1 -1
  641. package/indicators/zigzag.src.js +1 -1
  642. package/modules/accessibility.d.ts +0 -30
  643. package/modules/accessibility.js +241 -216
  644. package/modules/accessibility.js.map +1 -1
  645. package/modules/accessibility.src.d.ts +0 -30
  646. package/modules/accessibility.src.js +7818 -6398
  647. package/modules/annotations-advanced.d.ts +30 -0
  648. package/modules/annotations-advanced.js +192 -165
  649. package/modules/annotations-advanced.js.map +1 -1
  650. package/modules/annotations-advanced.src.d.ts +30 -0
  651. package/modules/annotations-advanced.src.js +1716 -416
  652. package/modules/annotations.js +125 -110
  653. package/modules/annotations.js.map +1 -1
  654. package/modules/annotations.src.js +1059 -304
  655. package/modules/arrow-symbols.js +1 -1
  656. package/modules/arrow-symbols.src.js +1 -1
  657. package/modules/boost-canvas.js +15 -15
  658. package/modules/boost-canvas.js.map +1 -1
  659. package/modules/boost-canvas.src.js +3 -3
  660. package/modules/boost.js +79 -79
  661. package/modules/boost.js.map +1 -1
  662. package/modules/boost.src.js +42 -51
  663. package/modules/broken-axis.js +1 -1
  664. package/modules/broken-axis.js.map +1 -1
  665. package/modules/broken-axis.src.js +18 -12
  666. package/modules/bullet.js +1 -1
  667. package/modules/bullet.src.js +1 -1
  668. package/modules/coloraxis.js +24 -24
  669. package/modules/coloraxis.js.map +1 -1
  670. package/modules/coloraxis.src.js +77 -103
  671. package/modules/current-date-indicator.js +4 -4
  672. package/modules/current-date-indicator.js.map +1 -1
  673. package/modules/current-date-indicator.src.js +4 -4
  674. package/modules/cylinder.js +1 -1
  675. package/modules/cylinder.js.map +1 -1
  676. package/modules/cylinder.src.js +37 -5
  677. package/modules/data.d.ts +6 -6
  678. package/modules/data.js +31 -31
  679. package/modules/data.js.map +1 -1
  680. package/modules/data.src.d.ts +6 -6
  681. package/modules/data.src.js +18 -58
  682. package/modules/datagrouping.js +20 -20
  683. package/modules/datagrouping.js.map +1 -1
  684. package/modules/datagrouping.src.js +54 -33
  685. package/modules/debugger.js +1 -1
  686. package/modules/debugger.src.js +1 -1
  687. package/modules/dependency-wheel.js +11 -11
  688. package/modules/dependency-wheel.js.map +1 -1
  689. package/modules/dependency-wheel.src.js +5 -8
  690. package/modules/dotplot.js +1 -1
  691. package/modules/dotplot.src.js +1 -1
  692. package/modules/drag-panes.js +8 -8
  693. package/modules/drag-panes.js.map +1 -1
  694. package/modules/drag-panes.src.js +3 -3
  695. package/modules/draggable-points.js +1 -1
  696. package/modules/draggable-points.js.map +1 -1
  697. package/modules/draggable-points.src.js +8 -9
  698. package/modules/drilldown.js +24 -24
  699. package/modules/drilldown.js.map +1 -1
  700. package/modules/drilldown.src.js +13 -8
  701. package/modules/dumbbell.js +17 -17
  702. package/modules/dumbbell.js.map +1 -1
  703. package/modules/dumbbell.src.js +4 -8
  704. package/modules/export-data.js +19 -19
  705. package/modules/export-data.js.map +1 -1
  706. package/modules/export-data.src.js +9 -8
  707. package/modules/exporting.js +39 -38
  708. package/modules/exporting.js.map +1 -1
  709. package/modules/exporting.src.js +132 -113
  710. package/modules/full-screen.js +1 -1
  711. package/modules/full-screen.js.map +1 -1
  712. package/modules/full-screen.src.js +5 -4
  713. package/modules/funnel.js +12 -12
  714. package/modules/funnel.js.map +1 -1
  715. package/modules/funnel.src.js +9 -6
  716. package/modules/funnel3d.js +1 -1
  717. package/modules/funnel3d.js.map +1 -1
  718. package/modules/funnel3d.src.js +17 -10
  719. package/modules/gantt.js +217 -218
  720. package/modules/gantt.js.map +1 -1
  721. package/modules/gantt.src.js +364 -363
  722. package/modules/grid-axis.js +1 -1
  723. package/modules/grid-axis.js.map +1 -1
  724. package/modules/grid-axis.src.js +27 -19
  725. package/modules/heatmap.js +39 -39
  726. package/modules/heatmap.js.map +1 -1
  727. package/modules/heatmap.src.js +132 -141
  728. package/modules/heikinashi.js +1 -1
  729. package/modules/heikinashi.js.map +1 -1
  730. package/modules/heikinashi.src.js +12 -10
  731. package/modules/histogram-bellcurve.js +13 -13
  732. package/modules/histogram-bellcurve.js.map +1 -1
  733. package/modules/histogram-bellcurve.src.js +97 -91
  734. package/modules/hollowcandlestick.js +9 -9
  735. package/modules/hollowcandlestick.js.map +1 -1
  736. package/modules/hollowcandlestick.src.js +31 -35
  737. package/modules/item-series.js +6 -6
  738. package/modules/item-series.js.map +1 -1
  739. package/modules/item-series.src.js +6 -6
  740. package/modules/lollipop.js +1 -1
  741. package/modules/lollipop.src.js +1 -1
  742. package/modules/map.d.ts +138 -14
  743. package/modules/map.js +144 -122
  744. package/modules/map.js.map +1 -1
  745. package/modules/map.src.d.ts +138 -14
  746. package/modules/map.src.js +2253 -1074
  747. package/modules/marker-clusters.js +36 -36
  748. package/modules/marker-clusters.js.map +1 -1
  749. package/modules/marker-clusters.src.js +176 -143
  750. package/modules/networkgraph.d.ts +12 -1
  751. package/modules/networkgraph.js +49 -49
  752. package/modules/networkgraph.js.map +1 -1
  753. package/modules/networkgraph.src.d.ts +12 -1
  754. package/modules/networkgraph.src.js +103 -78
  755. package/modules/no-data-to-display.js +5 -5
  756. package/modules/no-data-to-display.js.map +1 -1
  757. package/modules/no-data-to-display.src.js +3 -3
  758. package/modules/offline-exporting.js +18 -18
  759. package/modules/offline-exporting.js.map +1 -1
  760. package/modules/offline-exporting.src.js +38 -43
  761. package/modules/oldie-polyfills.js +1 -1
  762. package/modules/oldie-polyfills.src.js +1 -1
  763. package/modules/oldie.js +26 -26
  764. package/modules/oldie.js.map +1 -1
  765. package/modules/oldie.src.js +21 -81
  766. package/modules/organization.js +13 -13
  767. package/modules/organization.js.map +1 -1
  768. package/modules/organization.src.js +8 -6
  769. package/modules/overlapping-datalabels.js +1 -1
  770. package/modules/overlapping-datalabels.src.js +1 -1
  771. package/modules/parallel-coordinates.js +1 -1
  772. package/modules/parallel-coordinates.js.map +1 -1
  773. package/modules/parallel-coordinates.src.js +6 -4
  774. package/modules/pareto.js +7 -7
  775. package/modules/pareto.js.map +1 -1
  776. package/modules/pareto.src.js +89 -78
  777. package/modules/pathfinder.js +1 -1
  778. package/modules/pathfinder.js.map +1 -1
  779. package/modules/pathfinder.src.js +21 -20
  780. package/modules/pattern-fill.js +1 -1
  781. package/modules/pattern-fill.js.map +1 -1
  782. package/modules/pattern-fill.src.js +18 -12
  783. package/modules/price-indicator.js +1 -1
  784. package/modules/price-indicator.js.map +1 -1
  785. package/modules/price-indicator.src.js +3 -2
  786. package/modules/pyramid3d.js +1 -1
  787. package/modules/pyramid3d.js.map +1 -1
  788. package/modules/pyramid3d.src.js +3 -2
  789. package/modules/sankey.d.ts +12 -1
  790. package/modules/sankey.js +29 -29
  791. package/modules/sankey.js.map +1 -1
  792. package/modules/sankey.src.d.ts +12 -1
  793. package/modules/sankey.src.js +307 -181
  794. package/modules/series-label.js +1 -1
  795. package/modules/series-label.js.map +1 -1
  796. package/modules/series-label.src.js +2 -2
  797. package/modules/solid-gauge.js +1 -1
  798. package/modules/solid-gauge.js.map +1 -1
  799. package/modules/solid-gauge.src.js +17 -2
  800. package/modules/sonification.js +59 -55
  801. package/modules/sonification.js.map +1 -1
  802. package/modules/sonification.src.js +3093 -2594
  803. package/modules/static-scale.js +1 -1
  804. package/modules/static-scale.src.js +1 -1
  805. package/modules/stock-tools.js +178 -163
  806. package/modules/stock-tools.js.map +1 -1
  807. package/modules/stock-tools.src.js +1136 -229
  808. package/modules/stock.d.ts +39 -6
  809. package/modules/stock.js +204 -196
  810. package/modules/stock.js.map +1 -1
  811. package/modules/stock.src.d.ts +39 -6
  812. package/modules/stock.src.js +1820 -1240
  813. package/modules/streamgraph.js +1 -1
  814. package/modules/streamgraph.src.js +1 -1
  815. package/modules/sunburst.js +60 -60
  816. package/modules/sunburst.js.map +1 -1
  817. package/modules/sunburst.src.js +281 -248
  818. package/modules/tilemap.js +17 -17
  819. package/modules/tilemap.js.map +1 -1
  820. package/modules/tilemap.src.js +3 -13
  821. package/modules/timeline.js +18 -18
  822. package/modules/timeline.js.map +1 -1
  823. package/modules/timeline.src.js +5 -5
  824. package/modules/treegrid.js +56 -57
  825. package/modules/treegrid.js.map +1 -1
  826. package/modules/treegrid.src.js +201 -169
  827. package/modules/treemap.js +41 -41
  828. package/modules/treemap.js.map +1 -1
  829. package/modules/treemap.src.js +266 -232
  830. package/modules/variable-pie.js +1 -1
  831. package/modules/variable-pie.src.js +1 -1
  832. package/modules/variwide.js +1 -1
  833. package/modules/variwide.js.map +1 -1
  834. package/modules/variwide.src.js +7 -3
  835. package/modules/vector.js +1 -1
  836. package/modules/vector.src.js +1 -1
  837. package/modules/venn.js +31 -31
  838. package/modules/venn.js.map +1 -1
  839. package/modules/venn.src.js +740 -731
  840. package/modules/windbarb.js +15 -15
  841. package/modules/windbarb.js.map +1 -1
  842. package/modules/windbarb.src.js +90 -62
  843. package/modules/wordcloud.js +23 -24
  844. package/modules/wordcloud.js.map +1 -1
  845. package/modules/wordcloud.src.js +898 -954
  846. package/modules/xrange.js +2 -2
  847. package/modules/xrange.js.map +1 -1
  848. package/modules/xrange.src.js +12 -33
  849. package/package.json +1 -1
  850. package/themes/avocado.js +1 -1
  851. package/themes/avocado.src.js +1 -1
  852. package/themes/brand-dark.js +15 -0
  853. package/themes/brand-dark.js.map +1 -0
  854. package/themes/brand-dark.src.js +328 -0
  855. package/themes/brand-light.js +15 -0
  856. package/themes/brand-light.js.map +1 -0
  857. package/themes/brand-light.src.js +294 -0
  858. package/themes/dark-blue.js +1 -1
  859. package/themes/dark-blue.src.js +1 -1
  860. package/themes/dark-green.js +1 -1
  861. package/themes/dark-green.src.js +1 -1
  862. package/themes/dark-unica.js +1 -1
  863. package/themes/dark-unica.js.map +1 -1
  864. package/themes/dark-unica.src.js +5 -3
  865. package/themes/gray.js +1 -1
  866. package/themes/gray.src.js +1 -1
  867. package/themes/grid-light.js +1 -1
  868. package/themes/grid-light.js.map +1 -1
  869. package/themes/grid-light.src.js +5 -3
  870. package/themes/grid.js +1 -1
  871. package/themes/grid.js.map +1 -1
  872. package/themes/grid.src.js +5 -3
  873. package/themes/high-contrast-dark.js +1 -1
  874. package/themes/high-contrast-dark.src.js +1 -1
  875. package/themes/high-contrast-light.js +1 -1
  876. package/themes/high-contrast-light.src.js +1 -1
  877. package/themes/sand-signika.js +1 -1
  878. package/themes/sand-signika.src.js +1 -1
  879. package/themes/skies.js +1 -1
  880. package/themes/skies.src.js +1 -1
  881. package/themes/sunset.js +1 -1
  882. package/themes/sunset.src.js +1 -1
  883. package/es-modules/Core/Axis/MapAxis.js +0 -157
  884. package/es-modules/Core/Color/Palette.js +0 -82
  885. package/es-modules/Extensions/Sonification/InstrumentDefinitions.js +0 -32
  886. package/es-modules/Mixins/ColorSeries.js +0 -77
  887. package/es-modules/Mixins/DerivedSeries.js +0 -118
  888. package/es-modules/Mixins/DrawPoint.js +0 -81
  889. package/es-modules/Mixins/IndicatorRequired.js +0 -56
  890. package/es-modules/Mixins/MultipleLines.js +0 -181
  891. package/es-modules/Mixins/Navigation.js +0 -54
  892. package/es-modules/Mixins/NelderMead.js +0 -132
  893. package/es-modules/Mixins/Polygon.js +0 -259
  894. package/es-modules/Mixins/ReduceArray.js +0 -54
@@ -10,468 +10,38 @@
10
10
  *
11
11
  * */
12
12
  'use strict';
13
- import H from '../../Core/Globals.js';
14
- /**
15
- * An Earcon configuration, specifying an Earcon and when to play it.
16
- *
17
- * @requires module:modules/sonification
18
- *
19
- * @interface Highcharts.EarconConfiguration
20
- */ /**
21
- * An Earcon instance.
22
- * @name Highcharts.EarconConfiguration#earcon
23
- * @type {Highcharts.Earcon}
24
- */ /**
25
- * The ID of the point to play the Earcon on.
26
- * @name Highcharts.EarconConfiguration#onPoint
27
- * @type {string|undefined}
28
- */ /**
29
- * A function to determine whether or not to play this earcon on a point. The
30
- * function is called for every point, receiving that point as parameter. It
31
- * should return either a boolean indicating whether or not to play the earcon,
32
- * or a new Earcon instance - in which case the new Earcon will be played.
33
- * @name Highcharts.EarconConfiguration#condition
34
- * @type {Function|undefined}
35
- */
36
- /**
37
- * Options for sonifying a series.
38
- *
39
- * @requires module:modules/sonification
40
- *
41
- * @interface Highcharts.SonifySeriesOptionsObject
42
- */ /**
43
- * The duration for playing the points. Note that points might continue to play
44
- * after the duration has passed, but no new points will start playing.
45
- * @name Highcharts.SonifySeriesOptionsObject#duration
46
- * @type {number}
47
- */ /**
48
- * The axis to use for when to play the points. Can be a string with a data
49
- * property (e.g. `x`), or a function. If it is a function, this function
50
- * receives the point as argument, and should return a numeric value. The points
51
- * with the lowest numeric values are then played first, and the time between
52
- * points will be proportional to the distance between the numeric values.
53
- * @name Highcharts.SonifySeriesOptionsObject#pointPlayTime
54
- * @type {string|Function}
55
- */ /**
56
- * The instrument definitions for the points in this series.
57
- * @name Highcharts.SonifySeriesOptionsObject#instruments
58
- * @type {Array<Highcharts.PointInstrumentObject>}
59
- */ /**
60
- * Earcons to add to the series.
61
- * @name Highcharts.SonifySeriesOptionsObject#earcons
62
- * @type {Array<Highcharts.EarconConfiguration>|undefined}
63
- */ /**
64
- * Optionally provide the minimum/maximum data values for the points. If this is
65
- * not supplied, it is calculated from all points in the chart on demand. This
66
- * option is supplied in the following format, as a map of point data properties
67
- * to objects with min/max values:
68
- * ```js
69
- * dataExtremes: {
70
- * y: {
71
- * min: 0,
72
- * max: 100
73
- * },
74
- * z: {
75
- * min: -10,
76
- * max: 10
77
- * }
78
- * // Properties used and not provided are calculated on demand
79
- * }
80
- * ```
81
- * @name Highcharts.SonifySeriesOptionsObject#dataExtremes
82
- * @type {Highcharts.Dictionary<Highcharts.RangeObject>|undefined}
83
- */ /**
84
- * Callback before a point is played.
85
- * @name Highcharts.SonifySeriesOptionsObject#onPointStart
86
- * @type {Function|undefined}
87
- */ /**
88
- * Callback after a point has finished playing.
89
- * @name Highcharts.SonifySeriesOptionsObject#onPointEnd
90
- * @type {Function|undefined}
91
- */ /**
92
- * Callback after the series has played.
93
- * @name Highcharts.SonifySeriesOptionsObject#onEnd
94
- * @type {Function|undefined}
95
- */
96
- ''; // detach doclets above
13
+ import Earcon from './Earcon.js';
97
14
  import Point from '../../Core/Series/Point.js';
15
+ import SeriesSonify from './SeriesSonify.js';
16
+ import SU from './SonificationUtilities.js';
17
+ var getExtremesForInstrumentProps = SU.getExtremesForInstrumentProps, virtualAxisTranslate = SU.virtualAxisTranslate;
18
+ import Timeline from './Timeline.js';
19
+ import TimelineEvent from './TimelineEvent.js';
20
+ import TimelinePath from './TimelinePath.js';
98
21
  import U from '../../Core/Utilities.js';
99
- var find = U.find, isArray = U.isArray, merge = U.merge, pick = U.pick, splat = U.splat, objectEach = U.objectEach;
100
- import utilities from './Utilities.js';
101
- /**
102
- * Get the relative time value of a point.
103
- * @private
104
- * @param {Highcharts.Point} point
105
- * The point.
106
- * @param {Function|string} timeProp
107
- * The time axis data prop or the time function.
108
- * @return {number}
109
- * The time value.
110
- */
111
- function getPointTimeValue(point, timeProp) {
112
- return typeof timeProp === 'function' ?
113
- timeProp(point) :
114
- pick(point[timeProp], point.options[timeProp]);
115
- }
116
- /**
117
- * Get the time extremes of this series. This is handled outside of the
118
- * dataExtremes, as we always want to just sonify the visible points, and we
119
- * always want the extremes to be the extremes of the visible points.
120
- * @private
121
- * @param {Highcharts.Series} series
122
- * The series to compute on.
123
- * @param {Function|string} timeProp
124
- * The time axis data prop or the time function.
125
- * @return {Highcharts.RangeObject}
126
- * Object with min/max extremes for the time values.
127
- */
128
- function getTimeExtremes(series, timeProp) {
129
- // Compute the extremes from the visible points.
130
- return series.points.reduce(function (acc, point) {
131
- var value = getPointTimeValue(point, timeProp);
132
- acc.min = Math.min(acc.min, value);
133
- acc.max = Math.max(acc.max, value);
134
- return acc;
135
- }, {
136
- min: Infinity,
137
- max: -Infinity
138
- });
139
- }
140
- /**
141
- * Calculate value extremes for used instrument data properties on a chart.
142
- * @private
143
- * @param {Highcharts.Chart} chart
144
- * The chart to calculate extremes from.
145
- * @param {Array<Highcharts.PointInstrumentObject>} [instruments]
146
- * Additional instrument definitions to inspect for data props used, in
147
- * addition to the instruments defined in the chart options.
148
- * @param {Highcharts.Dictionary<Highcharts.RangeObject>} [dataExtremes]
149
- * Predefined extremes for each data prop.
150
- * @return {Highcharts.Dictionary<Highcharts.RangeObject>}
151
- * New extremes with data properties mapped to min/max objects.
152
- */
153
- function getExtremesForInstrumentProps(chart, instruments, dataExtremes) {
154
- var allInstrumentDefinitions = (instruments || []).slice(0);
155
- var defaultInstrumentDef = (chart.options.sonification &&
156
- chart.options.sonification.defaultInstrumentOptions);
157
- var optionDefToInstrDef = function (optionDef) { return ({
158
- instrumentMapping: optionDef.mapping
159
- }); };
160
- if (defaultInstrumentDef) {
161
- allInstrumentDefinitions.push(optionDefToInstrDef(defaultInstrumentDef));
162
- }
163
- chart.series.forEach(function (series) {
164
- var instrOptions = (series.options.sonification &&
165
- series.options.sonification.instruments);
166
- if (instrOptions) {
167
- allInstrumentDefinitions = allInstrumentDefinitions.concat(instrOptions.map(optionDefToInstrDef));
168
- }
169
- });
170
- return (allInstrumentDefinitions).reduce(function (newExtremes, instrumentDefinition) {
171
- Object.keys(instrumentDefinition.instrumentMapping || {}).forEach(function (instrumentParameter) {
172
- var value = instrumentDefinition.instrumentMapping[instrumentParameter];
173
- if (typeof value === 'string' && !newExtremes[value]) {
174
- // This instrument parameter is mapped to a data prop.
175
- // If we don't have predefined data extremes, find them.
176
- newExtremes[value] = utilities.calculateDataExtremes(chart, value);
177
- }
178
- });
179
- return newExtremes;
180
- }, merge(dataExtremes));
181
- }
182
- /**
183
- * Get earcons for the point if there are any.
184
- * @private
185
- * @param {Highcharts.Point} point
186
- * The point to find earcons for.
187
- * @param {Array<Highcharts.EarconConfiguration>} earconDefinitions
188
- * Earcons to check.
189
- * @return {Array<Highcharts.Earcon>}
190
- * Array of earcons to be played with this point.
191
- */
192
- function getPointEarcons(point, earconDefinitions) {
193
- return earconDefinitions.reduce(function (earcons, earconDefinition) {
194
- var cond, earcon = earconDefinition.earcon;
195
- if (earconDefinition.condition) {
196
- // We have a condition. This overrides onPoint
197
- cond = earconDefinition.condition(point);
198
- if (cond instanceof H.sonification.Earcon) {
199
- // Condition returned an earcon
200
- earcons.push(cond);
201
- }
202
- else if (cond) {
203
- // Condition returned true
204
- earcons.push(earcon);
205
- }
206
- }
207
- else if (earconDefinition.onPoint &&
208
- point.id === earconDefinition.onPoint) {
209
- // We have earcon onPoint
210
- earcons.push(earcon);
211
- }
212
- return earcons;
213
- }, []);
214
- }
215
- /**
216
- * Utility function to get a new list of instrument options where all the
217
- * instrument references are copies.
218
- * @private
219
- * @param {Array<Highcharts.PointInstrumentObject>} instruments
220
- * The instrument options.
221
- * @return {Array<Highcharts.PointInstrumentObject>}
222
- * Array of copied instrument options.
223
- */
224
- function makeInstrumentCopies(instruments) {
225
- return instruments.map(function (instrumentDef) {
226
- var instrument = instrumentDef.instrument, copy = (typeof instrument === 'string' ?
227
- H.sonification.instruments[instrument] :
228
- instrument).copy();
229
- return merge(instrumentDef, { instrument: copy });
230
- });
231
- }
232
- /**
233
- * Utility function to apply a master volume to a list of instrument
234
- * options.
235
- * @private
236
- * @param {Array<Highcharts.PointInstrumentObject>} instruments
237
- * The instrument options. Only options with Instrument object instances
238
- * will be affected.
239
- * @param {number} masterVolume
240
- * The master volume multiplier to apply to the instruments.
241
- * @return {Array<Highcharts.PointInstrumentObject>}
242
- * Array of instrument options.
243
- */
244
- function applyMasterVolumeToInstruments(instruments, masterVolume) {
245
- instruments.forEach(function (instrOpts) {
246
- var instr = instrOpts.instrument;
247
- if (typeof instr !== 'string') {
248
- instr.setMasterVolume(masterVolume);
249
- }
250
- });
251
- return instruments;
252
- }
253
- /**
254
- * Utility function to find the duration of the final note in a series.
255
- * @private
256
- * @param {Highcharts.Series} series The data series to calculate on.
257
- * @param {Array<Highcharts.PointInstrumentObject>} instruments The instrument options for this series.
258
- * @param {Highcharts.Dictionary<Highcharts.RangeObject>} dataExtremes Value extremes for the data series props.
259
- * @return {number} The duration of the final note in milliseconds.
260
- */
261
- function getFinalNoteDuration(series, instruments, dataExtremes) {
262
- var finalPoint = series.points[series.points.length - 1];
263
- return instruments.reduce(function (duration, instrument) {
264
- var mapping = instrument.instrumentMapping.duration;
265
- var instrumentDuration;
266
- if (typeof mapping === 'string') {
267
- instrumentDuration = 0; // Ignore, no easy way to map this
268
- }
269
- else if (typeof mapping === 'function') {
270
- instrumentDuration = mapping(finalPoint, dataExtremes);
271
- }
272
- else {
273
- instrumentDuration = mapping;
274
- }
275
- return Math.max(duration, instrumentDuration);
276
- }, 0);
277
- }
278
- /**
279
- * Create a TimelinePath from a series. Takes the same options as seriesSonify.
280
- * To intuitively allow multiple series to play simultaneously we make copies of
281
- * the instruments for each series.
282
- * @private
283
- * @param {Highcharts.Series} series
284
- * The series to build from.
285
- * @param {Highcharts.SonifySeriesOptionsObject} options
286
- * The options for building the TimelinePath.
287
- * @return {Highcharts.TimelinePath}
288
- * A timeline path with events.
289
- */
290
- function buildTimelinePathFromSeries(series, options) {
291
- // options.timeExtremes is internal and used so that the calculations from
292
- // chart.sonify can be reused.
293
- var timeExtremes = options.timeExtremes || getTimeExtremes(series, options.pointPlayTime),
294
- // Compute any data extremes that aren't defined yet
295
- dataExtremes = getExtremesForInstrumentProps(series.chart, options.instruments, options.dataExtremes), minimumSeriesDurationMs = 10,
296
- // Get the duration of the final note
297
- finalNoteDuration = getFinalNoteDuration(series, options.instruments, dataExtremes),
298
- // Get time offset for a point, relative to duration
299
- pointToTime = function (point) {
300
- return utilities.virtualAxisTranslate(getPointTimeValue(point, options.pointPlayTime), timeExtremes, { min: 0, max: Math.max(options.duration - finalNoteDuration, minimumSeriesDurationMs) });
301
- }, masterVolume = pick(options.masterVolume, 1),
302
- // Make copies of the instruments used for this series, to allow
303
- // multiple series with the same instrument to play together
304
- instrumentCopies = makeInstrumentCopies(options.instruments), instruments = applyMasterVolumeToInstruments(instrumentCopies, masterVolume),
305
- // Go through the points, convert to events, optionally add Earcons
306
- timelineEvents = series.points.reduce(function (events, point) {
307
- var earcons = getPointEarcons(point, options.earcons || []), time = pointToTime(point);
308
- return events.concat(
309
- // Event object for point
310
- new H.sonification.TimelineEvent({
311
- eventObject: point,
312
- time: time,
313
- id: point.id,
314
- playOptions: {
315
- instruments: instruments,
316
- dataExtremes: dataExtremes,
317
- masterVolume: masterVolume
318
- }
319
- }),
320
- // Earcons
321
- earcons.map(function (earcon) {
322
- return new H.sonification.TimelineEvent({
323
- eventObject: earcon,
324
- time: time,
325
- playOptions: {
326
- volume: masterVolume
327
- }
328
- });
329
- }));
330
- }, []);
331
- // Build the timeline path
332
- return new H.sonification.TimelinePath({
333
- events: timelineEvents,
334
- onStart: function () {
335
- if (options.onStart) {
336
- options.onStart(series);
337
- }
338
- },
339
- onEventStart: function (event) {
340
- var eventObject = event.options && event.options.eventObject;
341
- if (eventObject instanceof Point) {
342
- // Check for hidden series
343
- if (!eventObject.series.visible &&
344
- !eventObject.series.chart.series.some(function (series) {
345
- return series.visible;
346
- })) {
347
- // We have no visible series, stop the path.
348
- event.timelinePath.timeline.pause();
349
- event.timelinePath.timeline.resetCursor();
350
- return false;
351
- }
352
- // Emit onPointStart
353
- if (options.onPointStart) {
354
- options.onPointStart(event, eventObject);
355
- }
356
- }
357
- },
358
- onEventEnd: function (eventData) {
359
- var eventObject = eventData.event && eventData.event.options &&
360
- eventData.event.options.eventObject;
361
- if (eventObject instanceof Point && options.onPointEnd) {
362
- options.onPointEnd(eventData.event, eventObject);
363
- }
364
- },
365
- onEnd: function () {
366
- if (options.onEnd) {
367
- options.onEnd(series);
368
- }
369
- },
370
- targetDuration: options.duration
371
- });
372
- }
373
- /* eslint-disable no-invalid-this, valid-jsdoc */
374
- /**
375
- * Sonify a series.
376
- *
377
- * @sample highcharts/sonification/series-basic/
378
- * Click on series to sonify
379
- * @sample highcharts/sonification/series-earcon/
380
- * Series with earcon
381
- * @sample highcharts/sonification/point-play-time/
382
- * Play y-axis by time
383
- * @sample highcharts/sonification/earcon-on-point/
384
- * Earcon set on point
385
- *
386
- * @requires module:modules/sonification
387
- *
388
- * @function Highcharts.Series#sonify
22
+ var addEvent = U.addEvent, extend = U.extend, merge = U.merge, pick = U.pick, splat = U.splat;
23
+ /* *
389
24
  *
390
- * @param {Highcharts.SonifySeriesOptionsObject} [options]
391
- * The options for sonifying this series. If not provided,
392
- * uses options set on chart and series.
25
+ * Functions
393
26
  *
394
- * @return {void}
395
- */
396
- function seriesSonify(options) {
397
- var mergedOptions = getSeriesSonifyOptions(this, options);
398
- var timelinePath = buildTimelinePathFromSeries(this, mergedOptions);
399
- var chartSonification = this.chart.sonification;
400
- // Only one timeline can play at a time. If we want multiple series playing
401
- // at the same time, use chart.sonify.
402
- if (chartSonification.timeline) {
403
- chartSonification.timeline.pause();
404
- }
405
- // Store reference to duration
406
- chartSonification.duration = mergedOptions.duration;
407
- // Create new timeline for this series, and play it.
408
- chartSonification.timeline = new H.sonification.Timeline({
409
- paths: [timelinePath]
410
- });
411
- chartSonification.timeline.play();
412
- }
413
- /**
414
- * Utility function to assemble options for creating a TimelinePath from a
415
- * series when sonifying an entire chart.
416
- * @private
417
- * @param {Highcharts.Series} series
418
- * The series to return options for.
419
- * @param {Highcharts.RangeObject} dataExtremes
420
- * Pre-calculated data extremes for the chart.
421
- * @param {Highcharts.SonificationOptions} chartSonifyOptions
422
- * Options passed in to chart.sonify.
423
- * @return {Partial<Highcharts.SonifySeriesOptionsObject>}
424
- * Options for buildTimelinePathFromSeries.
425
- */
426
- function buildChartSonifySeriesOptions(series, dataExtremes, chartSonifyOptions) {
427
- var additionalSeriesOptions = chartSonifyOptions.seriesOptions || {};
428
- var pointPlayTime = (series.chart.options.sonification &&
429
- series.chart.options.sonification.defaultInstrumentOptions &&
430
- series.chart.options.sonification.defaultInstrumentOptions.mapping &&
431
- series.chart.options.sonification.defaultInstrumentOptions.mapping.pointPlayTime ||
432
- 'x');
433
- var configOptions = chartOptionsToSonifySeriesOptions(series);
434
- return merge(
435
- // Options from chart configuration
436
- configOptions,
437
- // Options passed in
438
- {
439
- // Calculated dataExtremes for chart
440
- dataExtremes: dataExtremes,
441
- // We need to get timeExtremes for each series. We pass this
442
- // in when building the TimelinePath objects to avoid
443
- // calculating twice.
444
- timeExtremes: getTimeExtremes(series, pointPlayTime),
445
- // Some options we just pass on
446
- instruments: chartSonifyOptions.instruments || configOptions.instruments,
447
- onStart: chartSonifyOptions.onSeriesStart || configOptions.onStart,
448
- onEnd: chartSonifyOptions.onSeriesEnd || configOptions.onEnd,
449
- earcons: chartSonifyOptions.earcons || configOptions.earcons,
450
- masterVolume: pick(chartSonifyOptions.masterVolume, configOptions.masterVolume)
451
- },
452
- // Merge in the specific series options by ID if any are passed in
453
- isArray(additionalSeriesOptions) ? (find(additionalSeriesOptions, function (optEntry) {
454
- return optEntry.id === pick(series.id, series.options.id);
455
- }) || {}) : additionalSeriesOptions, {
456
- // Forced options
457
- pointPlayTime: pointPlayTime
458
- });
459
- }
27
+ * */
28
+ /* eslint-disable valid-jsdoc */
460
29
  /**
461
30
  * Utility function to normalize the ordering of timeline paths when sonifying
462
31
  * a chart.
463
32
  * @private
464
- * @param {string|Array<string|Highcharts.Earcon|Array<string|Highcharts.Earcon>>} orderOptions -
33
+ * @param {string|Array<string|Highcharts.Earcon|Array<string|Highcharts.Earcon>>} orderOptions
465
34
  * Order options for the sonification.
466
- * @param {Highcharts.Chart} chart - The chart we are sonifying.
35
+ * @param {Highcharts.Chart} chart
36
+ * The chart we are sonifying.
467
37
  * @param {Function} seriesOptionsCallback
468
38
  * A function that takes a series as argument, and returns the series options
469
39
  * for that series to be used with buildTimelinePathFromSeries.
470
- * @return {Array<object|Array<object|Highcharts.TimelinePath>>} If order is
471
- * sequential, we return an array of objects to create series paths from. If
472
- * order is simultaneous we return an array of an array with the same. If there
473
- * is a custom order, we return an array of arrays of either objects (for
474
- * series) or TimelinePaths (for earcons and delays).
40
+ * @return {Array<object|Array<object|Highcharts.TimelinePath>>}
41
+ * If order is sequential, we return an array of objects to create series paths
42
+ * from. If order is simultaneous we return an array of an array with the same.
43
+ * If there is a custom order, we return an array of arrays of either objects
44
+ * (for series) or TimelinePaths (for earcons and delays).
475
45
  */
476
46
  function buildPathOrder(orderOptions, chart, seriesOptionsCallback) {
477
47
  var order;
@@ -511,17 +81,17 @@ function buildPathOrder(orderOptions, chart, seriesOptionsCallback) {
511
81
  }
512
82
  // Is it an earcon? If so, just create the path.
513
83
  }
514
- else if (item instanceof H.sonification.Earcon) {
84
+ else if (item instanceof Earcon) {
515
85
  // Path with a single event
516
- itemObject = new H.sonification.TimelinePath({
517
- events: [new H.sonification.TimelineEvent({
86
+ itemObject = new TimelinePath({
87
+ events: [new TimelineEvent({
518
88
  eventObject: item
519
89
  })]
520
90
  });
521
91
  }
522
92
  // Is this item a silent wait? If so, just create the path.
523
93
  if (item.silentWait) {
524
- itemObject = new H.sonification.TimelinePath({
94
+ itemObject = new TimelinePath({
525
95
  silentWait: item.silentWait
526
96
  });
527
97
  }
@@ -564,7 +134,7 @@ function addAfterSeriesWaits(order, wait) {
564
134
  })) {
565
135
  // We have a series, meaning we should add a wait after these
566
136
  // paths have finished.
567
- newOrder.push(new H.sonification.TimelinePath({
137
+ newOrder.push(new TimelinePath({
568
138
  silentWait: wait
569
139
  }));
570
140
  }
@@ -574,9 +144,10 @@ function addAfterSeriesWaits(order, wait) {
574
144
  /**
575
145
  * Utility function to find the total amout of wait time in the TimelinePaths.
576
146
  * @private
577
- * @param {Array<object|Array<object|TimelinePath>>} order - The order of
578
- * TimelinePaths/items.
579
- * @return {number} The total time in ms spent on wait paths between playing.
147
+ * @param {Array<object|Array<object|TimelinePath>>} order
148
+ * The order of TimelinePaths/items.
149
+ * @return {number}
150
+ * The total time in ms spent on wait paths between playing.
580
151
  */
581
152
  function getWaitTime(order) {
582
153
  return order.reduce(function (waitTime, orderDef) {
@@ -590,7 +161,8 @@ function getWaitTime(order) {
590
161
  * Utility function to ensure simultaneous paths have start/end events at the
591
162
  * same time, to sync them.
592
163
  * @private
593
- * @param {Array<Highcharts.TimelinePath>} paths - The paths to sync.
164
+ * @param {Array<Highcharts.TimelinePath>} paths
165
+ * The paths to sync.
594
166
  */
595
167
  function syncSimultaneousPaths(paths) {
596
168
  // Find the extremes for these paths
@@ -609,12 +181,12 @@ function syncSimultaneousPaths(paths) {
609
181
  paths.forEach(function (path) {
610
182
  var events = path.events, hasEvents = events && events.length, eventsToAdd = [];
611
183
  if (!(hasEvents && events[0].time <= extremes.min)) {
612
- eventsToAdd.push(new H.sonification.TimelineEvent({
184
+ eventsToAdd.push(new TimelineEvent({
613
185
  time: extremes.min
614
186
  }));
615
187
  }
616
188
  if (!(hasEvents && events[events.length - 1].time >= extremes.max)) {
617
- eventsToAdd.push(new H.sonification.TimelineEvent({
189
+ eventsToAdd.push(new TimelineEvent({
618
190
  time: extremes.max
619
191
  }));
620
192
  }
@@ -627,9 +199,10 @@ function syncSimultaneousPaths(paths) {
627
199
  * Utility function to find the total duration span for all simul path sets
628
200
  * that include series.
629
201
  * @private
630
- * @param {Array<object|Array<object|Highcharts.TimelinePath>>} order - The
631
- * order of TimelinePaths/items.
632
- * @return {number} The total time value span difference for all series.
202
+ * @param {Array<object|Array<object|Highcharts.TimelinePath>>} order
203
+ * The order of TimelinePaths/items.
204
+ * @return {number}
205
+ * The total time value span difference for all series.
633
206
  */
634
207
  function getSimulPathDurationTotal(order) {
635
208
  return order.reduce(function (durationTotal, orderDef) {
@@ -645,27 +218,29 @@ function getSimulPathDurationTotal(order) {
645
218
  /**
646
219
  * Function to calculate the duration in ms for a series.
647
220
  * @private
648
- * @param {number} seriesValueDuration - The duration of the series in value
649
- * difference.
650
- * @param {number} totalValueDuration - The total duration of all (non
651
- * simultaneous) series in value difference.
652
- * @param {number} totalDurationMs - The desired total duration for all series
653
- * in milliseconds.
654
- * @return {number} The duration for the series in milliseconds.
221
+ * @param {number} seriesValueDuration
222
+ * The duration of the series in value difference.
223
+ * @param {number} totalValueDuration
224
+ * The total duration of all (non simultaneous) series in value difference.
225
+ * @param {number} totalDurationMs
226
+ * The desired total duration for all series in milliseconds.
227
+ * @return {number}
228
+ * The duration for the series in milliseconds.
655
229
  */
656
230
  function getSeriesDurationMs(seriesValueDuration, totalValueDuration, totalDurationMs) {
657
231
  // A series spanning the whole chart would get the full duration.
658
- return utilities.virtualAxisTranslate(seriesValueDuration, { min: 0, max: totalValueDuration }, { min: 0, max: totalDurationMs });
232
+ return virtualAxisTranslate(seriesValueDuration, { min: 0, max: totalValueDuration }, { min: 0, max: totalDurationMs });
659
233
  }
660
234
  /**
661
235
  * Convert series building objects into paths and return a new list of
662
236
  * TimelinePaths.
663
237
  * @private
664
- * @param {Array<object|Array<object|Highcharts.TimelinePath>>} order - The
665
- * order list.
666
- * @param {number} duration - Total duration to aim for in milliseconds.
667
- * @return {Array<Array<Highcharts.TimelinePath>>} Array of TimelinePath objects
668
- * to play.
238
+ * @param {Array<object|Array<object|Highcharts.TimelinePath>>} order
239
+ * The order list.
240
+ * @param {number} duration
241
+ * Total duration to aim for in milliseconds.
242
+ * @return {Array<Array<Highcharts.TimelinePath>>}
243
+ * Array of TimelinePath objects to play.
669
244
  */
670
245
  function buildPathsFromOrder(order, duration) {
671
246
  // Find time used for waits (custom or after series), and subtract it from
@@ -677,7 +252,7 @@ function buildPathsFromOrder(order, duration) {
677
252
  // Go through the order list and convert the items
678
253
  return order.reduce(function (allPaths, orderDef) {
679
254
  var simultaneousPaths = splat(orderDef).reduce(function (simulPaths, item) {
680
- if (item instanceof H.sonification.TimelinePath) {
255
+ if (item instanceof TimelinePath) {
681
256
  // This item is already a path object
682
257
  simulPaths.push(item);
683
258
  }
@@ -688,7 +263,7 @@ function buildPathsFromOrder(order, duration) {
688
263
  item.seriesOptions.duration || getSeriesDurationMs(item.seriesOptions.timeExtremes.max -
689
264
  item.seriesOptions.timeExtremes.min, totalUsedDuration, totalAvailableDurationMs);
690
265
  // Add the path
691
- simulPaths.push(buildTimelinePathFromSeries(item.series, item.seriesOptions));
266
+ simulPaths.push(SeriesSonify.buildTimelinePathFromSeries(item.series, item.seriesOptions));
692
267
  }
693
268
  return simulPaths;
694
269
  }, []);
@@ -697,95 +272,12 @@ function buildPathsFromOrder(order, duration) {
697
272
  return allPaths;
698
273
  }, []);
699
274
  }
700
- /**
701
- * @private
702
- * @param {Highcharts.Series} series The series to get options for.
703
- * @param {Highcharts.SonifySeriesOptionsObject} options
704
- * Options to merge with user options on series/chart and default options.
705
- * @returns {Array<Highcharts.PointInstrumentObject>} The merged options.
706
- */
707
- function getSeriesInstrumentOptions(series, options) {
708
- if (options && options.instruments) {
709
- return options.instruments;
710
- }
711
- var defaultInstrOpts = (series.chart.options.sonification &&
712
- series.chart.options.sonification.defaultInstrumentOptions ||
713
- {});
714
- var seriesInstrOpts = (series.options.sonification &&
715
- series.options.sonification.instruments ||
716
- [{}]);
717
- var removeNullsFromObject = function (obj) {
718
- objectEach(obj, function (val, key) {
719
- if (val === null) {
720
- delete obj[key];
721
- }
722
- });
723
- };
724
- // Convert series options to PointInstrumentObjects and merge with
725
- // default options
726
- return (seriesInstrOpts).map(function (optionSet) {
727
- // Allow setting option to null to use default
728
- removeNullsFromObject(optionSet.mapping || {});
729
- removeNullsFromObject(optionSet);
730
- return {
731
- instrument: optionSet.instrument || defaultInstrOpts.instrument,
732
- instrumentOptions: merge(defaultInstrOpts, optionSet, {
733
- // Instrument options are lifted to root in the API options
734
- // object, so merge all in order to avoid missing any. But
735
- // remove the following which are not instrumentOptions:
736
- mapping: void 0,
737
- instrument: void 0
738
- }),
739
- instrumentMapping: merge(defaultInstrOpts.mapping, optionSet.mapping)
740
- };
741
- });
742
- }
743
- /**
744
- * Utility function to translate between options set in chart configuration and
745
- * a SonifySeriesOptionsObject.
746
- * @private
747
- * @param {Highcharts.Series} series The series to get options for.
748
- * @returns {Highcharts.SonifySeriesOptionsObject} Options for chart/series.sonify()
749
- */
750
- function chartOptionsToSonifySeriesOptions(series) {
751
- var seriesOpts = series.options.sonification || {};
752
- var chartOpts = series.chart.options.sonification || {};
753
- var chartEvents = chartOpts.events || {};
754
- var seriesEvents = seriesOpts.events || {};
755
- return {
756
- onEnd: seriesEvents.onSeriesEnd || chartEvents.onSeriesEnd,
757
- onStart: seriesEvents.onSeriesStart || chartEvents.onSeriesStart,
758
- onPointEnd: seriesEvents.onPointEnd || chartEvents.onPointEnd,
759
- onPointStart: seriesEvents.onPointStart || chartEvents.onPointStart,
760
- pointPlayTime: (chartOpts.defaultInstrumentOptions &&
761
- chartOpts.defaultInstrumentOptions.mapping &&
762
- chartOpts.defaultInstrumentOptions.mapping.pointPlayTime),
763
- masterVolume: chartOpts.masterVolume,
764
- instruments: getSeriesInstrumentOptions(series),
765
- earcons: seriesOpts.earcons || chartOpts.earcons
766
- };
767
- }
768
- /**
769
- * @private
770
- * @param {Highcharts.Series} series The series to get options for.
771
- * @param {Highcharts.SonifySeriesOptionsObject} options
772
- * Options to merge with user options on series/chart and default options.
773
- * @returns {Highcharts.SonifySeriesOptionsObject} The merged options.
774
- */
775
- function getSeriesSonifyOptions(series, options) {
776
- var chartOpts = series.chart.options.sonification;
777
- var seriesOpts = series.options.sonification;
778
- return merge({
779
- duration: ((seriesOpts && seriesOpts.duration) ||
780
- (chartOpts && chartOpts.duration))
781
- }, chartOptionsToSonifySeriesOptions(series), options);
782
- }
783
275
  /**
784
276
  * @private
785
277
  * @param {Highcharts.Chart} chart The chart to get options for.
786
278
  * @param {Highcharts.SonificationOptions} options
787
279
  * Options to merge with user options on chart and default options.
788
- * @returns {Highcharts.SonificationOptions} The merged options.
280
+ * @return {Highcharts.SonificationOptions} The merged options.
789
281
  */
790
282
  function getChartSonifyOptions(chart, options) {
791
283
  var chartOpts = chart.options.sonification || {};
@@ -801,95 +293,6 @@ function getChartSonifyOptions(chart, options) {
801
293
  onEnd: (chartOpts.events && chartOpts.events.onEnd)
802
294
  }, options);
803
295
  }
804
- /**
805
- * Options for sonifying a chart.
806
- *
807
- * @requires module:modules/sonification
808
- *
809
- * @interface Highcharts.SonificationOptions
810
- */ /**
811
- * Duration for sonifying the entire chart. The duration is distributed across
812
- * the different series intelligently, but does not take earcons into account.
813
- * It is also possible to set the duration explicitly per series, using
814
- * `seriesOptions`. Note that points may continue to play after the duration has
815
- * passed, but no new points will start playing.
816
- * @name Highcharts.SonificationOptions#duration
817
- * @type {number}
818
- */ /**
819
- * Define the order to play the series in. This can be given as a string, or an
820
- * array specifying a custom ordering. If given as a string, valid values are
821
- * `sequential` - where each series is played in order - or `simultaneous`,
822
- * where all series are played at once. For custom ordering, supply an array as
823
- * the order. Each element in the array can be either a string with a series ID,
824
- * an Earcon object, or an object with a numeric `silentWait` property
825
- * designating a number of milliseconds to wait before continuing. Each element
826
- * of the array will be played in order. To play elements simultaneously, group
827
- * the elements in an array.
828
- * @name Highcharts.SonificationOptions#order
829
- * @type {string|Array<string|Highcharts.Earcon|Array<string|Highcharts.Earcon>>}
830
- */ /**
831
- * The axis to use for when to play the points. Can be a string with a data
832
- * property (e.g. `x`), or a function. If it is a function, this function
833
- * receives the point as argument, and should return a numeric value. The points
834
- * with the lowest numeric values are then played first, and the time between
835
- * points will be proportional to the distance between the numeric values. This
836
- * option can not be overridden per series.
837
- * @name Highcharts.SonificationOptions#pointPlayTime
838
- * @type {string|Function}
839
- */ /**
840
- * Milliseconds of silent waiting to add between series. Note that waiting time
841
- * is considered part of the sonify duration.
842
- * @name Highcharts.SonificationOptions#afterSeriesWait
843
- * @type {number|undefined}
844
- */ /**
845
- * Options as given to `series.sonify` to override options per series. If the
846
- * option is supplied as an array of options objects, the `id` property of the
847
- * object should correspond to the series' id. If the option is supplied as a
848
- * single object, the options apply to all series.
849
- * @name Highcharts.SonificationOptions#seriesOptions
850
- * @type {Object|Array<object>|undefined}
851
- */ /**
852
- * The instrument definitions for the points in this chart.
853
- * @name Highcharts.SonificationOptions#instruments
854
- * @type {Array<Highcharts.PointInstrumentObject>|undefined}
855
- */ /**
856
- * Earcons to add to the chart. Note that earcons can also be added per series
857
- * using `seriesOptions`.
858
- * @name Highcharts.SonificationOptions#earcons
859
- * @type {Array<Highcharts.EarconConfiguration>|undefined}
860
- */ /**
861
- * Optionally provide the minimum/maximum data values for the points. If this is
862
- * not supplied, it is calculated from all points in the chart on demand. This
863
- * option is supplied in the following format, as a map of point data properties
864
- * to objects with min/max values:
865
- * ```js
866
- * dataExtremes: {
867
- * y: {
868
- * min: 0,
869
- * max: 100
870
- * },
871
- * z: {
872
- * min: -10,
873
- * max: 10
874
- * }
875
- * // Properties used and not provided are calculated on demand
876
- * }
877
- * ```
878
- * @name Highcharts.SonificationOptions#dataExtremes
879
- * @type {Highcharts.Dictionary<Highcharts.RangeObject>|undefined}
880
- */ /**
881
- * Callback before a series is played.
882
- * @name Highcharts.SonificationOptions#onSeriesStart
883
- * @type {Function|undefined}
884
- */ /**
885
- * Callback after a series has finished playing.
886
- * @name Highcharts.SonificationOptions#onSeriesEnd
887
- * @type {Function|undefined}
888
- */ /**
889
- * Callback after the chart has played.
890
- * @name Highcharts.SonificationOptions#onEnd
891
- * @type {Function|undefined}
892
- */
893
296
  /**
894
297
  * Sonify a chart.
895
298
  *
@@ -909,10 +312,8 @@ function getChartSonifyOptions(chart, options) {
909
312
  * @function Highcharts.Chart#sonify
910
313
  *
911
314
  * @param {Highcharts.SonificationOptions} [options]
912
- * The options for sonifying this chart. If not provided,
913
- * uses options set on chart and series.
914
- *
915
- * @return {void}
315
+ * The options for sonifying this chart. If not provided,
316
+ * uses options set on chart and series.
916
317
  */
917
318
  function chartSonify(options) {
918
319
  var opts = getChartSonifyOptions(this, options);
@@ -926,7 +327,7 @@ function chartSonify(options) {
926
327
  var dataExtremes = getExtremesForInstrumentProps(this, opts.instruments, opts.dataExtremes);
927
328
  // Figure out ordering of series and custom paths
928
329
  var order = buildPathOrder(opts.order, this, function (series) {
929
- return buildChartSonifySeriesOptions(series, dataExtremes, opts);
330
+ return SeriesSonify.buildChartSonifySeriesOptions(series, dataExtremes, opts);
930
331
  });
931
332
  // Add waits after simultaneous paths with series in them.
932
333
  order = addAfterSeriesWaits(order, opts.afterSeriesWait || 0);
@@ -938,7 +339,7 @@ function chartSonify(options) {
938
339
  syncSimultaneousPaths(simultaneousPaths);
939
340
  });
940
341
  // We have a set of paths. Create the timeline, and play it.
941
- this.sonification.timeline = new H.sonification.Timeline({
342
+ this.sonification.timeline = new Timeline({
942
343
  paths: paths,
943
344
  onEnd: opts.onEnd
944
345
  });
@@ -960,7 +361,7 @@ function getCurrentPoints() {
960
361
  cursorObj = this.sonification.timeline.getCursor(); // Cursor per pathID
961
362
  return Object.keys(cursorObj).map(function (path) {
962
363
  // Get the event objects under cursor for each path
963
- return cursorObj[path].eventObject;
364
+ return cursorObj[path].options.eventObject;
964
365
  }).filter(function (eventObj) {
965
366
  // Return the events that are points
966
367
  return eventObj instanceof Point;
@@ -1092,10 +493,48 @@ function resetCursorEnd() {
1092
493
  this.sonification.timeline.resetCursorEnd();
1093
494
  }
1094
495
  }
1095
- // Export functions
1096
- var chartSonifyFunctions = {
496
+ var composedClasses = [];
497
+ /**
498
+ * @private
499
+ * @todo move to composition namespace with all functions
500
+ */
501
+ function compose(ChartClass) {
502
+ if (composedClasses.indexOf(ChartClass) === -1) {
503
+ composedClasses.push(ChartClass);
504
+ var chartProto = ChartClass.prototype;
505
+ extend(chartProto, {
506
+ sonify: chartSonify,
507
+ pauseSonify: pause,
508
+ resumeSonify: resume,
509
+ rewindSonify: rewind,
510
+ cancelSonify: cancel,
511
+ getCurrentSonifyPoints: getCurrentPoints,
512
+ setSonifyCursor: setCursor,
513
+ resetSonifyCursor: resetCursor,
514
+ resetSonifyCursorEnd: resetCursorEnd
515
+ });
516
+ // Prepare charts for sonification on init
517
+ addEvent(ChartClass, 'init', function () {
518
+ this.sonification = {};
519
+ });
520
+ // Update with chart/series/point updates
521
+ addEvent(ChartClass, 'update', function (e) {
522
+ var newOptions = e.options.sonification;
523
+ if (newOptions) {
524
+ merge(true, this.options.sonification, newOptions);
525
+ }
526
+ });
527
+ }
528
+ return ChartClass;
529
+ }
530
+ /* *
531
+ *
532
+ * Default Export
533
+ *
534
+ * */
535
+ var ChartSonify = {
1097
536
  chartSonify: chartSonify,
1098
- seriesSonify: seriesSonify,
537
+ compose: compose,
1099
538
  pause: pause,
1100
539
  resume: resume,
1101
540
  rewind: rewind,
@@ -1105,4 +544,181 @@ var chartSonifyFunctions = {
1105
544
  resetCursor: resetCursor,
1106
545
  resetCursorEnd: resetCursorEnd
1107
546
  };
1108
- export default chartSonifyFunctions;
547
+ export default ChartSonify;
548
+ /* *
549
+ *
550
+ * API Declarations
551
+ *
552
+ * */
553
+ /**
554
+ * An Earcon configuration, specifying an Earcon and when to play it.
555
+ *
556
+ * @requires module:modules/sonification
557
+ *
558
+ * @interface Highcharts.EarconConfiguration
559
+ */ /**
560
+ * An Earcon instance.
561
+ * @name Highcharts.EarconConfiguration#earcon
562
+ * @type {Highcharts.Earcon}
563
+ */ /**
564
+ * The ID of the point to play the Earcon on.
565
+ * @name Highcharts.EarconConfiguration#onPoint
566
+ * @type {string|undefined}
567
+ */ /**
568
+ * A function to determine whether or not to play this earcon on a point. The
569
+ * function is called for every point, receiving that point as parameter. It
570
+ * should return either a boolean indicating whether or not to play the earcon,
571
+ * or a new Earcon instance - in which case the new Earcon will be played.
572
+ * @name Highcharts.EarconConfiguration#condition
573
+ * @type {Function|undefined}
574
+ */
575
+ /**
576
+ * Options for sonifying a chart.
577
+ *
578
+ * @requires module:modules/sonification
579
+ *
580
+ * @interface Highcharts.SonificationOptions
581
+ */ /**
582
+ * Duration for sonifying the entire chart. The duration is distributed across
583
+ * the different series intelligently, but does not take earcons into account.
584
+ * It is also possible to set the duration explicitly per series, using
585
+ * `seriesOptions`. Note that points may continue to play after the duration has
586
+ * passed, but no new points will start playing.
587
+ * @name Highcharts.SonificationOptions#duration
588
+ * @type {number}
589
+ */ /**
590
+ * Define the order to play the series in. This can be given as a string, or an
591
+ * array specifying a custom ordering. If given as a string, valid values are
592
+ * `sequential` - where each series is played in order - or `simultaneous`,
593
+ * where all series are played at once. For custom ordering, supply an array as
594
+ * the order. Each element in the array can be either a string with a series ID,
595
+ * an Earcon object, or an object with a numeric `silentWait` property
596
+ * designating a number of milliseconds to wait before continuing. Each element
597
+ * of the array will be played in order. To play elements simultaneously, group
598
+ * the elements in an array.
599
+ * @name Highcharts.SonificationOptions#order
600
+ * @type {string|Array<string|Highcharts.Earcon|Array<string|Highcharts.Earcon>>}
601
+ */ /**
602
+ * The axis to use for when to play the points. Can be a string with a data
603
+ * property (e.g. `x`), or a function. If it is a function, this function
604
+ * receives the point as argument, and should return a numeric value. The points
605
+ * with the lowest numeric values are then played first, and the time between
606
+ * points will be proportional to the distance between the numeric values. This
607
+ * option can not be overridden per series.
608
+ * @name Highcharts.SonificationOptions#pointPlayTime
609
+ * @type {string|Function}
610
+ */ /**
611
+ * Milliseconds of silent waiting to add between series. Note that waiting time
612
+ * is considered part of the sonify duration.
613
+ * @name Highcharts.SonificationOptions#afterSeriesWait
614
+ * @type {number|undefined}
615
+ */ /**
616
+ * Options as given to `series.sonify` to override options per series. If the
617
+ * option is supplied as an array of options objects, the `id` property of the
618
+ * object should correspond to the series' id. If the option is supplied as a
619
+ * single object, the options apply to all series.
620
+ * @name Highcharts.SonificationOptions#seriesOptions
621
+ * @type {Object|Array<object>|undefined}
622
+ */ /**
623
+ * The instrument definitions for the points in this chart.
624
+ * @name Highcharts.SonificationOptions#instruments
625
+ * @type {Array<Highcharts.PointInstrumentObject>|undefined}
626
+ */ /**
627
+ * Earcons to add to the chart. Note that earcons can also be added per series
628
+ * using `seriesOptions`.
629
+ * @name Highcharts.SonificationOptions#earcons
630
+ * @type {Array<Highcharts.EarconConfiguration>|undefined}
631
+ */ /**
632
+ * Optionally provide the minimum/maximum data values for the points. If this is
633
+ * not supplied, it is calculated from all points in the chart on demand. This
634
+ * option is supplied in the following format, as a map of point data properties
635
+ * to objects with min/max values:
636
+ * ```js
637
+ * dataExtremes: {
638
+ * y: {
639
+ * min: 0,
640
+ * max: 100
641
+ * },
642
+ * z: {
643
+ * min: -10,
644
+ * max: 10
645
+ * }
646
+ * // Properties used and not provided are calculated on demand
647
+ * }
648
+ * ```
649
+ * @name Highcharts.SonificationOptions#dataExtremes
650
+ * @type {Highcharts.Dictionary<Highcharts.RangeObject>|undefined}
651
+ */ /**
652
+ * Callback before a series is played.
653
+ * @name Highcharts.SonificationOptions#onSeriesStart
654
+ * @type {Function|undefined}
655
+ */ /**
656
+ * Callback after a series has finished playing.
657
+ * @name Highcharts.SonificationOptions#onSeriesEnd
658
+ * @type {Function|undefined}
659
+ */ /**
660
+ * Callback after the chart has played.
661
+ * @name Highcharts.SonificationOptions#onEnd
662
+ * @type {Function|undefined}
663
+ */
664
+ /**
665
+ * Options for sonifying a series.
666
+ *
667
+ * @requires module:modules/sonification
668
+ *
669
+ * @interface Highcharts.SonifySeriesOptionsObject
670
+ */ /**
671
+ * The duration for playing the points. Note that points might continue to play
672
+ * after the duration has passed, but no new points will start playing.
673
+ * @name Highcharts.SonifySeriesOptionsObject#duration
674
+ * @type {number}
675
+ */ /**
676
+ * The axis to use for when to play the points. Can be a string with a data
677
+ * property (e.g. `x`), or a function. If it is a function, this function
678
+ * receives the point as argument, and should return a numeric value. The points
679
+ * with the lowest numeric values are then played first, and the time between
680
+ * points will be proportional to the distance between the numeric values.
681
+ * @name Highcharts.SonifySeriesOptionsObject#pointPlayTime
682
+ * @type {string|Function}
683
+ */ /**
684
+ * The instrument definitions for the points in this series.
685
+ * @name Highcharts.SonifySeriesOptionsObject#instruments
686
+ * @type {Array<Highcharts.PointInstrumentObject>}
687
+ */ /**
688
+ * Earcons to add to the series.
689
+ * @name Highcharts.SonifySeriesOptionsObject#earcons
690
+ * @type {Array<Highcharts.EarconConfiguration>|undefined}
691
+ */ /**
692
+ * Optionally provide the minimum/maximum data values for the points. If this is
693
+ * not supplied, it is calculated from all points in the chart on demand. This
694
+ * option is supplied in the following format, as a map of point data properties
695
+ * to objects with min/max values:
696
+ * ```js
697
+ * dataExtremes: {
698
+ * y: {
699
+ * min: 0,
700
+ * max: 100
701
+ * },
702
+ * z: {
703
+ * min: -10,
704
+ * max: 10
705
+ * }
706
+ * // Properties used and not provided are calculated on demand
707
+ * }
708
+ * ```
709
+ * @name Highcharts.SonifySeriesOptionsObject#dataExtremes
710
+ * @type {Highcharts.Dictionary<Highcharts.RangeObject>|undefined}
711
+ */ /**
712
+ * Callback before a point is played.
713
+ * @name Highcharts.SonifySeriesOptionsObject#onPointStart
714
+ * @type {Function|undefined}
715
+ */ /**
716
+ * Callback after a point has finished playing.
717
+ * @name Highcharts.SonifySeriesOptionsObject#onPointEnd
718
+ * @type {Function|undefined}
719
+ */ /**
720
+ * Callback after the series has played.
721
+ * @name Highcharts.SonifySeriesOptionsObject#onEnd
722
+ * @type {Function|undefined}
723
+ */
724
+ ''; // detach doclets above