highcharts 9.2.1 → 9.3.2
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.
- package/README.md +13 -6
- package/bower.json +1 -1
- package/css/annotations/popup.css +48 -8
- package/css/annotations/popup.scss +70 -22
- package/css/highcharts.css +46 -1
- package/css/highcharts.scss +40 -0
- package/css/stocktools/gui.css +1 -1
- package/css/themes/dark-unica.css +46 -1
- package/css/themes/grid-light.css +46 -1
- package/css/themes/sand-signika.css +46 -1
- package/es-modules/Accessibility/A11yI18n.js +269 -224
- package/es-modules/Accessibility/Accessibility.js +244 -129
- package/es-modules/Accessibility/AccessibilityComponent.js +78 -313
- package/es-modules/Accessibility/Components/AnnotationsA11y.js +19 -5
- package/es-modules/Accessibility/Components/ContainerComponent.js +53 -28
- package/es-modules/Accessibility/Components/InfoRegionsComponent.js +178 -120
- package/es-modules/Accessibility/Components/LegendComponent.js +251 -129
- package/es-modules/Accessibility/Components/MenuComponent.js +239 -154
- package/es-modules/Accessibility/Components/RangeSelectorComponent.js +172 -93
- package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +161 -115
- package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +138 -69
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +67 -28
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +48 -56
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +387 -343
- package/es-modules/Accessibility/Components/ZoomComponent.js +156 -70
- package/es-modules/Accessibility/FocusBorder.js +192 -152
- package/es-modules/Accessibility/HighContrastMode.js +79 -66
- package/es-modules/Accessibility/HighContrastTheme.js +10 -0
- package/es-modules/Accessibility/KeyboardNavigation.js +151 -75
- package/es-modules/Accessibility/KeyboardNavigationHandler.js +71 -44
- package/es-modules/Accessibility/Options/DeprecatedOptions.js +21 -4
- package/es-modules/Accessibility/Options/LangOptions.js +4 -5
- package/es-modules/Accessibility/Options/Options.js +32 -17
- package/es-modules/Accessibility/ProxyElement.js +218 -0
- package/es-modules/Accessibility/ProxyProvider.js +302 -0
- package/es-modules/Accessibility/Utils/Announcer.js +17 -10
- package/es-modules/Accessibility/Utils/ChartUtilities.js +55 -45
- package/es-modules/Accessibility/Utils/DOMElementProvider.js +27 -15
- package/es-modules/Accessibility/Utils/EventProvider.js +27 -17
- package/es-modules/Accessibility/Utils/HTMLUtilities.js +125 -42
- package/es-modules/Core/Animation/Fx.js +5 -14
- package/es-modules/Core/Axis/Axis.js +77 -96
- package/es-modules/Core/Axis/Axis3D.js +10 -4
- package/es-modules/Core/Axis/AxisDefaults.js +35 -24
- package/es-modules/Core/Axis/BrokenAxis.js +17 -11
- package/es-modules/Core/Axis/Color/ColorAxis.js +7 -4
- package/es-modules/Core/Axis/Color/ColorAxisComposition.js +55 -5
- package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +5 -5
- package/es-modules/Core/Axis/DateTimeAxis.js +3 -14
- package/es-modules/Core/Axis/GridAxis.js +26 -16
- package/es-modules/Core/Axis/NavigatorAxis.js +0 -5
- package/es-modules/Core/Axis/OrdinalAxis.js +88 -92
- package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +4 -5
- package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +0 -5
- package/es-modules/Core/Axis/RadialAxis.js +7 -28
- package/es-modules/Core/Axis/ScrollbarAxis.js +27 -12
- package/es-modules/Core/Axis/StackingAxis.js +2 -1
- package/es-modules/Core/Axis/Tick.js +2 -4
- package/es-modules/Core/Axis/TreeGridAxis.js +28 -19
- package/es-modules/Core/Axis/TreeGridTick.js +5 -3
- package/es-modules/Core/Axis/WaterfallAxis.js +1 -1
- package/es-modules/Core/Axis/ZAxis.js +1 -1
- package/es-modules/Core/Chart/Chart.js +44 -47
- package/es-modules/Core/Chart/Chart3D.js +23 -10
- package/es-modules/Core/Chart/ChartDefaults.js +3 -4
- package/es-modules/Core/Chart/ChartNavigationComposition.js +92 -0
- package/es-modules/Core/Chart/GanttChart.js +4 -4
- package/es-modules/Core/Chart/MapChart.js +13 -25
- package/es-modules/Core/Chart/StockChart.js +13 -316
- package/es-modules/Core/Color/Palettes.js +22 -0
- package/es-modules/Core/DefaultOptions.js +22 -19
- package/es-modules/Core/Foundation.js +39 -31
- package/es-modules/Core/Geometry/CircleUtilities.js +2 -1
- package/es-modules/Core/Globals.js +1 -1
- package/es-modules/Core/HttpUtilities.js +8 -7
- package/es-modules/Core/Legend/Legend.js +19 -16
- package/es-modules/Core/Navigator.js +41 -30
- package/es-modules/Core/Pointer.js +52 -45
- package/es-modules/Core/Renderer/HTML/AST.js +29 -14
- package/es-modules/Core/Renderer/HTML/HTMLElement.js +27 -20
- package/es-modules/Core/Renderer/HTML/HTMLRenderer.js +8 -6
- package/es-modules/Core/Renderer/RendererUtilities.js +2 -2
- package/es-modules/Core/Renderer/SVG/SVGElement.js +11 -20
- package/es-modules/Core/Renderer/SVG/SVGLabel.js +17 -8
- package/es-modules/Core/Renderer/SVG/SVGRenderer.js +25 -29
- package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +12 -5
- package/es-modules/Core/Renderer/SVG/TextBuilder.js +18 -12
- package/es-modules/Core/Responsive.js +2 -3
- package/es-modules/Core/Scrollbar.js +14 -12
- package/es-modules/Core/ScrollbarDefaults.js +10 -9
- package/es-modules/Core/Series/DataLabel.js +19 -15
- package/es-modules/Core/Series/Point.js +22 -19
- package/es-modules/Core/Series/Series.js +200 -235
- package/es-modules/Core/Series/SeriesDefaults.js +8 -8
- package/es-modules/Core/Series/SeriesRegistry.js +1 -2
- package/es-modules/Core/Time.js +14 -11
- package/es-modules/Core/Tooltip.js +63 -53
- package/es-modules/Core/Utilities.js +20 -24
- package/es-modules/Data/DataConverter.js +483 -0
- package/es-modules/Data/DataPromise.js +252 -0
- package/es-modules/Data/DataSeriesConverter.js +207 -0
- package/es-modules/Data/DataTable.js +1205 -0
- package/es-modules/Data/Modifiers/ChainModifier.js +299 -0
- package/es-modules/Data/Modifiers/DataModifier.js +303 -0
- package/es-modules/Data/Modifiers/GroupModifier.js +144 -0
- package/es-modules/Data/Modifiers/InvertModifier.js +254 -0
- package/es-modules/Data/Modifiers/RangeModifier.js +143 -0
- package/es-modules/Data/Modifiers/SeriesPointsModifier.js +110 -0
- package/es-modules/Data/Modifiers/SortModifier.js +249 -0
- package/es-modules/Data/Parsers/CSVParser.js +400 -0
- package/es-modules/Data/Parsers/DataParser.js +101 -0
- package/es-modules/Data/Parsers/GoogleSheetsParser.js +223 -0
- package/es-modules/Data/Parsers/HTMLTableParser.js +213 -0
- package/es-modules/Data/Stores/CSVStore.js +317 -0
- package/es-modules/Data/Stores/DataStore.js +276 -0
- package/es-modules/Data/Stores/GoogleSheetsStore.js +169 -0
- package/es-modules/Data/Stores/HTMLTableStore.js +353 -0
- package/es-modules/Extensions/Annotations/Annotations.js +69 -18
- package/es-modules/Extensions/Annotations/ControlPoint.js +1 -3
- package/es-modules/Extensions/Annotations/Controllables/ControllableCircle.js +1 -1
- package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +199 -0
- package/es-modules/Extensions/Annotations/Controllables/ControllableImage.js +1 -1
- package/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +3 -6
- package/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +3 -2
- package/es-modules/Extensions/Annotations/Controllables/ControllableRect.js +1 -1
- package/es-modules/Extensions/Annotations/Mixins/ControllableMixin.js +13 -4
- package/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js +0 -1
- package/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js +5 -4
- package/es-modules/Extensions/Annotations/NavigationBindings.js +120 -53
- package/es-modules/Extensions/Annotations/Popup.js +494 -148
- package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +51 -2
- package/es-modules/Extensions/Annotations/Types/CrookedLine.js +5 -3
- package/es-modules/Extensions/Annotations/Types/ElliottWave.js +1 -1
- package/es-modules/Extensions/Annotations/Types/Fibonacci.js +2 -3
- package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +219 -0
- package/es-modules/Extensions/Annotations/Types/InfinityLine.js +1 -1
- package/es-modules/Extensions/Annotations/Types/Measure.js +29 -19
- package/es-modules/Extensions/Annotations/Types/Pitchfork.js +7 -6
- package/es-modules/Extensions/Annotations/Types/TimeCycles.js +211 -0
- package/es-modules/Extensions/Annotations/Types/Tunnel.js +13 -10
- package/es-modules/Extensions/Annotations/Types/VerticalLine.js +1 -1
- package/es-modules/Extensions/Boost/BoostOptions.js +2 -2
- package/es-modules/Extensions/Boost/BoostOverrides.js +6 -10
- package/es-modules/Extensions/Boost/BoostUtils.js +0 -6
- package/es-modules/Extensions/Boost/WGLRenderer.js +16 -12
- package/es-modules/Extensions/Boost/WGLShader.js +13 -11
- package/es-modules/Extensions/Boost/WGLVBuffer.js +4 -7
- package/es-modules/Extensions/BoostCanvas.js +1 -2
- package/es-modules/Extensions/CurrentDateIndication.js +2 -3
- package/es-modules/Extensions/Data.js +77 -115
- package/es-modules/Extensions/DataGrouping.js +54 -32
- package/es-modules/Extensions/Debugger/ErrorMessages.js +2 -2
- package/es-modules/Extensions/DownloadURL.js +2 -2
- package/es-modules/Extensions/DragPanes.js +1 -2
- package/es-modules/Extensions/DraggablePoints.js +7 -8
- package/es-modules/Extensions/Drilldown.js +11 -7
- package/es-modules/Extensions/ExportData.js +6 -5
- package/es-modules/Extensions/Exporting/Exporting.js +35 -48
- package/es-modules/Extensions/Exporting/ExportingDefaults.js +8 -15
- package/es-modules/Extensions/FullScreen.js +4 -3
- package/es-modules/Extensions/GeoJSON.js +42 -66
- package/es-modules/Extensions/MarkerClusters.js +118 -98
- package/es-modules/Extensions/Math3D.js +4 -4
- package/es-modules/Extensions/NoDataToDisplay.js +1 -2
- package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +33 -33
- package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
- package/es-modules/Extensions/Oldie/Oldie.js +14 -79
- package/es-modules/Extensions/Oldie/VMLAxis3D.js +5 -1
- package/es-modules/Extensions/OverlappingDataLabels.js +10 -6
- package/es-modules/Extensions/Pane.js +11 -12
- package/es-modules/Extensions/ParallelCoordinates.js +5 -3
- package/es-modules/Extensions/PatternFill.js +17 -11
- package/es-modules/Extensions/Polar.js +7 -4
- package/es-modules/Extensions/PriceIndication.js +2 -1
- package/es-modules/Extensions/RangeSelector.js +22 -59
- package/es-modules/Extensions/ScrollablePlotArea.js +2 -2
- package/es-modules/Extensions/SeriesLabel.js +1 -1
- package/es-modules/Extensions/Sonification/ChartSonify.js +279 -663
- package/es-modules/Extensions/Sonification/Earcon.js +136 -102
- package/es-modules/Extensions/Sonification/Instrument.js +493 -426
- package/es-modules/Extensions/Sonification/MusicalFrequencies.js +10 -0
- package/es-modules/Extensions/Sonification/Options.js +10 -0
- package/es-modules/Extensions/Sonification/PointSonify.js +207 -152
- package/es-modules/Extensions/Sonification/SeriesSonify.js +474 -0
- package/es-modules/Extensions/Sonification/SignalHandler.js +122 -0
- package/es-modules/Extensions/Sonification/Sonification.js +27 -53
- package/es-modules/Extensions/Sonification/{Utilities.js → SonificationUtilities.js} +70 -88
- package/es-modules/Extensions/Sonification/Timeline.js +250 -567
- package/es-modules/Extensions/Sonification/TimelineEvent.js +157 -0
- package/es-modules/Extensions/Sonification/TimelinePath.js +311 -0
- package/es-modules/Extensions/Stacking.js +5 -23
- package/es-modules/Extensions/Themes/BrandDark.js +293 -0
- package/es-modules/Extensions/Themes/BrandLight.js +259 -0
- package/es-modules/Extensions/Themes/DarkUnica.js +4 -2
- package/es-modules/Extensions/Themes/Grid.js +4 -2
- package/es-modules/Extensions/Themes/GridLight.js +4 -2
- package/es-modules/Gantt/Connection.js +2 -2
- package/es-modules/Gantt/Pathfinder.js +6 -5
- package/es-modules/Gantt/PathfinderAlgorithms.js +12 -12
- package/es-modules/Maps/MapNavigation.js +30 -68
- package/es-modules/Maps/MapNavigationOptionsDefault.js +3 -0
- package/es-modules/Maps/MapPointer.js +8 -5
- package/es-modules/Maps/MapSymbols.js +23 -3
- package/es-modules/Maps/MapView.js +450 -0
- package/es-modules/Maps/MapViewOptionsDefault.js +97 -0
- package/es-modules/Maps/Projection.js +436 -0
- package/es-modules/Maps/ProjectionDefinition.js +9 -0
- package/es-modules/Maps/Projections/EqualEarth.js +42 -0
- package/es-modules/Maps/Projections/LambertConformalConic.js +52 -0
- package/es-modules/Maps/Projections/Miller.js +16 -0
- package/es-modules/Maps/Projections/Orthographic.js +26 -0
- package/es-modules/Maps/Projections/ProjectionRegistry.js +19 -0
- package/es-modules/Maps/Projections/WebMercator.js +24 -0
- package/es-modules/Series/Area/AreaSeries.js +13 -13
- package/es-modules/Series/Area3DSeries.js +4 -2
- package/es-modules/Series/AreaRange/AreaRangeSeries.js +28 -17
- package/es-modules/Series/Bellcurve/BellcurveSeries.js +4 -9
- package/es-modules/Series/BoxPlot/BoxPlotSeries.js +1 -2
- package/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -2
- package/es-modules/Series/Bubble/BubbleLegendItem.js +5 -15
- package/es-modules/Series/Bubble/BubblePoint.js +5 -0
- package/es-modules/Series/Bubble/BubbleSeries.js +90 -50
- package/es-modules/Series/Candlestick/CandlestickSeries.js +10 -19
- package/es-modules/{Mixins/CenteredSeries.js → Series/CenteredUtilities.js} +45 -23
- package/es-modules/{Mixins/ColorMapSeries.js → Series/ColorMapMixin.js} +10 -8
- package/es-modules/Series/Column/ColumnDataLabel.js +5 -5
- package/es-modules/Series/Column/ColumnSeries.js +19 -18
- package/es-modules/Series/Column3D/Column3DComposition.js +1 -2
- package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +11 -8
- package/es-modules/Series/ColumnRange/ColumnRangeSeries.js +2 -1
- package/es-modules/Series/Cylinder/CylinderComposition.js +36 -4
- package/es-modules/Series/DataModifyComposition.js +539 -0
- package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +2 -6
- package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +1 -1
- package/es-modules/Series/DerivedComposition.js +137 -0
- package/es-modules/Series/DrawPointComposition.js +111 -0
- package/es-modules/Series/Dumbbell/DumbbellPoint.js +0 -1
- package/es-modules/Series/Dumbbell/DumbbellSeries.js +2 -6
- package/es-modules/Series/ErrorBar/ErrorBarSeries.js +1 -2
- package/es-modules/Series/Flags/FlagsSeries.js +18 -25
- package/es-modules/Series/Flags/FlagsSymbols.js +2 -2
- package/es-modules/Series/Funnel/FunnelSeries.js +6 -5
- package/es-modules/Series/Funnel3D/Funnel3DComposition.js +14 -8
- package/es-modules/Series/Funnel3D/Funnel3DSeries.js +2 -1
- package/es-modules/Series/Gantt/GanttPoint.js +1 -1
- package/es-modules/Series/Gantt/GanttSeries.js +3 -3
- package/es-modules/Series/Gauge/GaugePoint.js +1 -1
- package/es-modules/Series/Gauge/GaugeSeries.js +7 -7
- package/es-modules/Series/HLC/HLCPoint.js +55 -0
- package/es-modules/Series/HLC/HLCSeries.js +378 -0
- package/es-modules/Series/Heatmap/HeatmapPoint.js +13 -14
- package/es-modules/Series/Heatmap/HeatmapSeries.js +24 -12
- package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +10 -9
- package/es-modules/Series/Histogram/HistogramSeries.js +7 -11
- package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +1 -4
- package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +28 -30
- package/es-modules/Series/Item/ItemSeries.js +4 -5
- package/es-modules/Series/Line/LineSeries.js +1 -2
- package/es-modules/Series/Map/MapPoint.js +27 -14
- package/es-modules/Series/Map/MapSeries.js +283 -322
- package/es-modules/Series/MapBubble/MapBubblePoint.js +0 -3
- package/es-modules/Series/MapBubble/MapBubbleSeries.js +10 -1
- package/es-modules/Series/MapLine/MapLineSeries.js +2 -4
- package/es-modules/Series/MapPoint/MapPointPoint.js +5 -1
- package/es-modules/Series/MapPoint/MapPointSeries.js +99 -14
- package/es-modules/Series/Networkgraph/DraggableNodes.js +0 -4
- package/es-modules/Series/Networkgraph/Integrations.js +8 -22
- package/es-modules/Series/Networkgraph/Networkgraph.js +6 -10
- package/es-modules/Series/Networkgraph/QuadTree.js +1 -3
- package/es-modules/{Mixins/Nodes.js → Series/NodesComposition.js} +78 -30
- package/es-modules/Series/OHLC/OHLCPoint.js +2 -7
- package/es-modules/Series/OHLC/OHLCSeries.js +55 -183
- package/es-modules/{Mixins/OnSeries.js → Series/OnSeriesComposition.js} +53 -21
- package/es-modules/Series/Organization/OrganizationSeries.js +6 -5
- package/es-modules/Series/PackedBubble/PackedBubbleComposition.js +1 -0
- package/es-modules/Series/PackedBubble/PackedBubblePoint.js +1 -1
- package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +48 -10
- package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -7
- package/es-modules/Series/Pie/PieDataLabel.js +1 -2
- package/es-modules/Series/Pie/PiePoint.js +2 -2
- package/es-modules/Series/Pie/PieSeries.js +7 -8
- package/es-modules/Series/Pie3D/Pie3DComposition.js +2 -1
- package/es-modules/Series/Pie3D/Pie3DPoint.js +2 -1
- package/es-modules/Series/Pie3D/Pie3DSeries.js +1 -1
- package/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +2 -1
- package/es-modules/Series/Sankey/SankeyPoint.js +0 -4
- package/es-modules/Series/Sankey/SankeySeries.js +92 -22
- package/es-modules/Series/SolidGauge/SolidGaugeComposition.js +3 -1
- package/es-modules/Series/Spline/SplineSeries.js +0 -8
- package/es-modules/Series/Sunburst/SunburstPoint.js +2 -3
- package/es-modules/Series/Sunburst/SunburstSeries.js +6 -6
- package/es-modules/Series/Sunburst/SunburstUtilities.js +3 -2
- package/es-modules/Series/Tilemap/TilemapPoint.js +2 -5
- package/es-modules/Series/Tilemap/TilemapShapes.js +0 -7
- package/es-modules/Series/Timeline/TimelineSeries.js +3 -4
- package/es-modules/{Mixins/TreeSeries.js → Series/TreeUtilities.js} +88 -78
- package/es-modules/Series/Treemap/TreemapPoint.js +2 -2
- package/es-modules/Series/Treemap/TreemapSeries.js +22 -25
- package/es-modules/Series/Variwide/VariwideSeries.js +5 -1
- package/es-modules/Series/Venn/VennPoint.js +16 -7
- package/es-modules/Series/Venn/VennSeries.js +11 -17
- package/es-modules/Series/Venn/VennUtils.js +551 -439
- package/es-modules/Series/Waterfall/WaterfallSeries.js +8 -6
- package/es-modules/Series/Windbarb/WindbarbSeries.js +23 -24
- package/es-modules/Series/Wordcloud/WordcloudPoint.js +8 -6
- package/es-modules/Series/Wordcloud/WordcloudSeries.js +26 -22
- package/es-modules/Series/Wordcloud/WordcloudUtils.js +669 -484
- package/es-modules/Series/XRange/XRangePoint.js +7 -12
- package/es-modules/Series/XRange/XRangeSeries.js +4 -20
- package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +15 -6
- package/es-modules/Stock/Indicators/AO/AOIndicator.js +2 -3
- package/es-modules/Stock/Indicators/APO/APOIndicator.js +14 -20
- package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +4 -6
- package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +11 -13
- package/es-modules/Stock/Indicators/ArrayUtilities.js +47 -0
- package/es-modules/Stock/Indicators/BB/BBIndicator.js +39 -11
- package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +35 -15
- package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +6 -12
- package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +1 -11
- package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +28 -16
- package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +18 -11
- package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +1 -3
- package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +6 -6
- package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +23 -9
- package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +16 -19
- package/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +32 -14
- package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +2 -2
- package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +2 -2
- package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +2 -2
- package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +2 -3
- package/es-modules/Stock/Indicators/MultipleLinesComposition.js +294 -0
- package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +1 -3
- package/es-modules/Stock/Indicators/PC/PCIndicator.js +25 -13
- package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -11
- package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +2 -1
- package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +2 -1
- package/es-modules/Stock/Indicators/SMA/SMAComposition.js +0 -26
- package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +32 -50
- package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +0 -8
- package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +18 -9
- package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +4 -6
- package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +26 -11
- package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +6 -12
- package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +26 -10
- package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +19 -7
- package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +2 -3
- package/es-modules/Stock/StockToolsBindings.js +156 -47
- package/es-modules/Stock/StockToolsGui.js +442 -37
- package/es-modules/masters/highcharts-3d.src.js +1 -1
- package/es-modules/masters/highcharts-gantt.src.js +1 -1
- package/es-modules/masters/highcharts-more.src.js +1 -1
- package/es-modules/masters/highcharts.src.js +1 -1
- package/es-modules/masters/highmaps.src.js +1 -1
- package/es-modules/masters/highstock.src.js +1 -1
- package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
- package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
- package/es-modules/masters/indicators/ao.src.js +1 -1
- package/es-modules/masters/indicators/apo.src.js +1 -1
- package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
- package/es-modules/masters/indicators/aroon.src.js +1 -1
- package/es-modules/masters/indicators/atr.src.js +1 -1
- package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
- package/es-modules/masters/indicators/cci.src.js +1 -1
- package/es-modules/masters/indicators/chaikin.src.js +1 -1
- package/es-modules/masters/indicators/cmf.src.js +1 -1
- package/es-modules/masters/indicators/cmo.src.js +1 -1
- package/es-modules/masters/indicators/dema.src.js +1 -1
- package/es-modules/masters/indicators/disparity-index.src.js +1 -1
- package/es-modules/masters/indicators/dmi.src.js +1 -1
- package/es-modules/masters/indicators/dpo.src.js +1 -1
- package/es-modules/masters/indicators/ema.src.js +4 -10
- package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
- package/es-modules/masters/indicators/indicators-all.src.js +2 -2
- package/es-modules/masters/indicators/indicators.src.js +2 -1
- package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
- package/es-modules/masters/indicators/klinger.src.js +1 -1
- package/es-modules/masters/indicators/macd.src.js +1 -1
- package/es-modules/masters/indicators/mfi.src.js +1 -1
- package/es-modules/masters/indicators/momentum.src.js +1 -1
- package/es-modules/masters/indicators/natr.src.js +1 -1
- package/es-modules/masters/indicators/obv.src.js +1 -1
- package/es-modules/masters/indicators/pivot-points.src.js +1 -1
- package/es-modules/masters/indicators/ppo.src.js +1 -1
- package/es-modules/masters/indicators/price-channel.src.js +1 -1
- package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
- package/es-modules/masters/indicators/psar.src.js +1 -1
- package/es-modules/masters/indicators/regressions.src.js +1 -1
- package/es-modules/masters/indicators/roc.src.js +1 -1
- package/es-modules/masters/indicators/rsi.src.js +1 -1
- package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
- package/es-modules/masters/indicators/stochastic.src.js +1 -1
- package/es-modules/masters/indicators/supertrend.src.js +1 -1
- package/es-modules/masters/indicators/tema.src.js +1 -1
- package/es-modules/masters/indicators/trendline.src.js +1 -1
- package/es-modules/masters/indicators/trix.src.js +1 -1
- package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
- package/es-modules/masters/indicators/vwap.src.js +1 -1
- package/es-modules/masters/indicators/williams-r.src.js +1 -1
- package/es-modules/masters/indicators/wma.src.js +1 -1
- package/es-modules/masters/indicators/zigzag.src.js +1 -1
- package/es-modules/masters/modules/accessibility.src.js +16 -2
- package/es-modules/masters/modules/annotations-advanced.src.js +3 -1
- package/es-modules/masters/modules/annotations.src.js +1 -1
- package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
- package/es-modules/masters/modules/boost-canvas.src.js +1 -1
- package/es-modules/masters/modules/boost.src.js +1 -1
- package/es-modules/masters/modules/broken-axis.src.js +1 -1
- package/es-modules/masters/modules/bullet.src.js +1 -1
- package/es-modules/masters/modules/coloraxis.src.js +1 -1
- package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
- package/es-modules/masters/modules/cylinder.src.js +1 -1
- package/es-modules/masters/modules/data.src.js +6 -3
- package/es-modules/masters/modules/datagrouping.src.js +1 -1
- package/es-modules/masters/modules/debugger.src.js +1 -1
- package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
- package/es-modules/masters/modules/dotplot.src.js +1 -1
- package/es-modules/masters/modules/drag-panes.src.js +1 -1
- package/es-modules/masters/modules/draggable-points.src.js +1 -1
- package/es-modules/masters/modules/drilldown.src.js +1 -1
- package/es-modules/masters/modules/dumbbell.src.js +1 -1
- package/es-modules/masters/modules/export-data.src.js +1 -1
- package/es-modules/masters/modules/exporting.src.js +1 -1
- package/es-modules/masters/modules/full-screen.src.js +1 -1
- package/es-modules/masters/modules/funnel.src.js +1 -1
- package/es-modules/masters/modules/funnel3d.src.js +1 -1
- package/es-modules/masters/modules/gantt.src.js +1 -1
- package/es-modules/masters/modules/grid-axis.src.js +1 -1
- package/es-modules/masters/modules/heatmap.src.js +1 -2
- package/es-modules/masters/modules/heikinashi.src.js +1 -1
- package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
- package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
- package/es-modules/masters/modules/item-series.src.js +1 -1
- package/es-modules/masters/modules/lollipop.src.js +1 -1
- package/es-modules/masters/modules/map.src.js +1 -3
- package/es-modules/masters/modules/marker-clusters.src.js +1 -1
- package/es-modules/masters/modules/networkgraph.src.js +1 -1
- package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
- package/es-modules/masters/modules/offline-exporting.src.js +1 -1
- package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
- package/es-modules/masters/modules/oldie.src.js +1 -1
- package/es-modules/masters/modules/organization.src.js +1 -1
- package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
- package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
- package/es-modules/masters/modules/pareto.src.js +1 -1
- package/es-modules/masters/modules/pathfinder.src.js +1 -1
- package/es-modules/masters/modules/pattern-fill.src.js +1 -1
- package/es-modules/masters/modules/price-indicator.src.js +1 -1
- package/es-modules/masters/modules/pyramid3d.src.js +1 -1
- package/es-modules/masters/modules/sankey.src.js +1 -1
- package/es-modules/masters/modules/series-label.src.js +1 -1
- package/es-modules/masters/modules/solid-gauge.src.js +1 -1
- package/es-modules/masters/modules/sonification.src.js +33 -2
- package/es-modules/masters/modules/static-scale.src.js +1 -1
- package/es-modules/masters/modules/stock-tools.src.js +1 -1
- package/es-modules/masters/modules/stock.src.js +4 -1
- package/es-modules/masters/modules/streamgraph.src.js +1 -1
- package/es-modules/masters/modules/sunburst.src.js +1 -1
- package/es-modules/masters/modules/tilemap.src.js +1 -1
- package/es-modules/masters/modules/timeline.src.js +1 -1
- package/es-modules/masters/modules/treegrid.src.js +1 -1
- package/es-modules/masters/modules/treemap.src.js +1 -1
- package/es-modules/masters/modules/variable-pie.src.js +1 -1
- package/es-modules/masters/modules/variwide.src.js +1 -1
- package/es-modules/masters/modules/vector.src.js +1 -1
- package/es-modules/masters/modules/venn.src.js +1 -1
- package/es-modules/masters/modules/windbarb.src.js +1 -1
- package/es-modules/masters/modules/wordcloud.src.js +1 -1
- package/es-modules/masters/modules/xrange.src.js +1 -1
- package/es-modules/masters/themes/avocado.src.js +1 -1
- package/es-modules/masters/themes/brand-dark.src.js +14 -0
- package/es-modules/masters/themes/brand-light.src.js +14 -0
- package/es-modules/masters/themes/dark-blue.src.js +1 -1
- package/es-modules/masters/themes/dark-green.src.js +1 -1
- package/es-modules/masters/themes/dark-unica.src.js +1 -1
- package/es-modules/masters/themes/gray.src.js +1 -1
- package/es-modules/masters/themes/grid-light.src.js +1 -1
- package/es-modules/masters/themes/grid.src.js +1 -1
- package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
- package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
- package/es-modules/masters/themes/sand-signika.src.js +1 -1
- package/es-modules/masters/themes/skies.src.js +1 -1
- package/es-modules/masters/themes/sunset.src.js +1 -1
- package/highcharts-3d.js +1 -1
- package/highcharts-3d.js.map +1 -1
- package/highcharts-3d.src.js +65 -35
- package/highcharts-gantt.js +800 -803
- package/highcharts-gantt.js.map +1 -1
- package/highcharts-gantt.src.js +1359 -1429
- package/highcharts-more.js +194 -193
- package/highcharts-more.js.map +1 -1
- package/highcharts-more.src.js +280 -222
- package/highcharts.d.ts +10228 -768
- package/highcharts.js +585 -588
- package/highcharts.js.map +1 -1
- package/highcharts.src.d.ts +10228 -768
- package/highcharts.src.js +995 -1066
- package/highmaps.js +727 -707
- package/highmaps.js.map +1 -1
- package/highmaps.src.js +3243 -2135
- package/highstock.js +788 -783
- package/highstock.js.map +1 -1
- package/highstock.src.js +2492 -1981
- package/indicators/acceleration-bands.d.ts +17 -1
- package/indicators/acceleration-bands.js +11 -9
- package/indicators/acceleration-bands.js.map +1 -1
- package/indicators/acceleration-bands.src.d.ts +17 -1
- package/indicators/acceleration-bands.src.js +238 -112
- package/indicators/accumulation-distribution.js +1 -1
- package/indicators/accumulation-distribution.src.js +1 -1
- package/indicators/ao.js +6 -6
- package/indicators/ao.js.map +1 -1
- package/indicators/ao.src.js +4 -4
- package/indicators/apo.js +5 -6
- package/indicators/apo.js.map +1 -1
- package/indicators/apo.src.js +16 -84
- package/indicators/aroon-oscillator.d.ts +17 -1
- package/indicators/aroon-oscillator.js +10 -9
- package/indicators/aroon-oscillator.js.map +1 -1
- package/indicators/aroon-oscillator.src.d.ts +17 -1
- package/indicators/aroon-oscillator.src.js +230 -177
- package/indicators/aroon.d.ts +17 -1
- package/indicators/aroon.js +11 -9
- package/indicators/aroon.js.map +1 -1
- package/indicators/aroon.src.d.ts +17 -1
- package/indicators/aroon.src.js +227 -112
- package/indicators/atr.js +1 -1
- package/indicators/atr.src.js +1 -1
- package/indicators/bollinger-bands.d.ts +17 -1
- package/indicators/bollinger-bands.js +12 -9
- package/indicators/bollinger-bands.js.map +1 -1
- package/indicators/bollinger-bands.src.d.ts +17 -1
- package/indicators/bollinger-bands.src.js +262 -117
- package/indicators/cci.js +1 -1
- package/indicators/cci.src.js +1 -1
- package/indicators/chaikin.js +8 -9
- package/indicators/chaikin.js.map +1 -1
- package/indicators/chaikin.src.js +8 -76
- package/indicators/cmf.js +1 -1
- package/indicators/cmf.js.map +1 -1
- package/indicators/cmf.src.js +36 -16
- package/indicators/cmo.js +1 -1
- package/indicators/cmo.src.js +1 -1
- package/indicators/dema.js +5 -6
- package/indicators/dema.js.map +1 -1
- package/indicators/dema.src.js +3 -75
- package/indicators/disparity-index.js +6 -7
- package/indicators/disparity-index.js.map +1 -1
- package/indicators/disparity-index.src.js +20 -74
- package/indicators/dmi.js +12 -11
- package/indicators/dmi.js.map +1 -1
- package/indicators/dmi.src.js +252 -121
- package/indicators/dpo.js +1 -1
- package/indicators/dpo.src.js +1 -1
- package/indicators/ema.js +1 -13
- package/indicators/ema.js.map +1 -1
- package/indicators/ema.src.js +7 -188
- package/indicators/ichimoku-kinko-hyo.js +1 -1
- package/indicators/ichimoku-kinko-hyo.js.map +1 -1
- package/indicators/ichimoku-kinko-hyo.src.js +7 -7
- package/indicators/indicators-all.d.ts +17 -1
- package/indicators/indicators-all.js +198 -203
- package/indicators/indicators-all.js.map +1 -1
- package/indicators/indicators-all.src.d.ts +17 -1
- package/indicators/indicators-all.src.js +892 -777
- package/indicators/indicators.js +12 -12
- package/indicators/indicators.js.map +1 -1
- package/indicators/indicators.src.js +213 -144
- package/indicators/keltner-channels.d.ts +17 -1
- package/indicators/keltner-channels.js +11 -10
- package/indicators/keltner-channels.js.map +1 -1
- package/indicators/keltner-channels.src.d.ts +17 -1
- package/indicators/keltner-channels.src.js +246 -118
- package/indicators/klinger.js +14 -13
- package/indicators/klinger.js.map +1 -1
- package/indicators/klinger.src.js +239 -187
- package/indicators/macd.js +2 -2
- package/indicators/macd.js.map +1 -1
- package/indicators/macd.src.js +3 -4
- package/indicators/mfi.js +1 -1
- package/indicators/mfi.src.js +1 -1
- package/indicators/momentum.js +1 -1
- package/indicators/momentum.src.js +1 -1
- package/indicators/natr.js +3 -3
- package/indicators/natr.js.map +1 -1
- package/indicators/natr.src.js +2 -4
- package/indicators/obv.js +1 -1
- package/indicators/obv.src.js +1 -1
- package/indicators/pivot-points.js +1 -1
- package/indicators/pivot-points.js.map +1 -1
- package/indicators/pivot-points.src.js +3 -2
- package/indicators/ppo.js +5 -6
- package/indicators/ppo.js.map +1 -1
- package/indicators/ppo.src.js +3 -75
- package/indicators/price-channel.d.ts +17 -1
- package/indicators/price-channel.js +11 -9
- package/indicators/price-channel.js.map +1 -1
- package/indicators/price-channel.src.d.ts +17 -1
- package/indicators/price-channel.src.js +288 -168
- package/indicators/price-envelopes.js +1 -1
- package/indicators/price-envelopes.src.js +1 -1
- package/indicators/psar.js +1 -1
- package/indicators/psar.src.js +1 -1
- package/indicators/regressions.js +1 -1
- package/indicators/regressions.js.map +1 -1
- package/indicators/regressions.src.js +39 -21
- package/indicators/roc.js +1 -1
- package/indicators/roc.src.js +1 -1
- package/indicators/rsi.js +1 -1
- package/indicators/rsi.js.map +1 -1
- package/indicators/rsi.src.js +3 -2
- package/indicators/slow-stochastic.js +5 -6
- package/indicators/slow-stochastic.js.map +1 -1
- package/indicators/slow-stochastic.src.js +2 -72
- package/indicators/stochastic.d.ts +17 -1
- package/indicators/stochastic.js +12 -10
- package/indicators/stochastic.js.map +1 -1
- package/indicators/stochastic.src.d.ts +17 -1
- package/indicators/stochastic.src.js +282 -165
- package/indicators/supertrend.js +10 -10
- package/indicators/supertrend.js.map +1 -1
- package/indicators/supertrend.src.js +6 -7
- package/indicators/tema.js +6 -7
- package/indicators/tema.js.map +1 -1
- package/indicators/tema.src.js +28 -75
- package/indicators/trendline.js +1 -1
- package/indicators/trendline.src.js +1 -1
- package/indicators/trix.js +4 -5
- package/indicators/trix.js.map +1 -1
- package/indicators/trix.src.js +8 -76
- package/indicators/volume-by-price.js +16 -16
- package/indicators/volume-by-price.js.map +1 -1
- package/indicators/volume-by-price.src.js +27 -10
- package/indicators/vwap.js +1 -1
- package/indicators/vwap.js.map +1 -1
- package/indicators/vwap.src.js +20 -8
- package/indicators/williams-r.js +5 -6
- package/indicators/williams-r.js.map +1 -1
- package/indicators/williams-r.src.js +41 -51
- package/indicators/wma.js +1 -1
- package/indicators/wma.src.js +1 -1
- package/indicators/zigzag.js +1 -1
- package/indicators/zigzag.src.js +1 -1
- package/modules/accessibility.d.ts +0 -30
- package/modules/accessibility.js +240 -216
- package/modules/accessibility.js.map +1 -1
- package/modules/accessibility.src.d.ts +0 -30
- package/modules/accessibility.src.js +7807 -6400
- package/modules/annotations-advanced.d.ts +30 -0
- package/modules/annotations-advanced.js +192 -165
- package/modules/annotations-advanced.js.map +1 -1
- package/modules/annotations-advanced.src.d.ts +30 -0
- package/modules/annotations-advanced.src.js +1716 -416
- package/modules/annotations.js +125 -110
- package/modules/annotations.js.map +1 -1
- package/modules/annotations.src.js +1059 -304
- package/modules/arrow-symbols.js +1 -1
- package/modules/arrow-symbols.src.js +1 -1
- package/modules/boost-canvas.js +15 -15
- package/modules/boost-canvas.js.map +1 -1
- package/modules/boost-canvas.src.js +3 -3
- package/modules/boost.js +79 -79
- package/modules/boost.js.map +1 -1
- package/modules/boost.src.js +42 -51
- package/modules/broken-axis.js +1 -1
- package/modules/broken-axis.js.map +1 -1
- package/modules/broken-axis.src.js +18 -12
- package/modules/bullet.js +1 -1
- package/modules/bullet.src.js +1 -1
- package/modules/coloraxis.js +24 -24
- package/modules/coloraxis.js.map +1 -1
- package/modules/coloraxis.src.js +77 -103
- package/modules/current-date-indicator.js +4 -4
- package/modules/current-date-indicator.js.map +1 -1
- package/modules/current-date-indicator.src.js +4 -4
- package/modules/cylinder.js +1 -1
- package/modules/cylinder.js.map +1 -1
- package/modules/cylinder.src.js +37 -5
- package/modules/data.d.ts +6 -6
- package/modules/data.js +32 -32
- package/modules/data.js.map +1 -1
- package/modules/data.src.d.ts +6 -6
- package/modules/data.src.js +94 -140
- package/modules/datagrouping.js +20 -20
- package/modules/datagrouping.js.map +1 -1
- package/modules/datagrouping.src.js +56 -33
- package/modules/debugger.js +3 -3
- package/modules/debugger.js.map +1 -1
- package/modules/debugger.src.js +3 -3
- package/modules/dependency-wheel.js +11 -11
- package/modules/dependency-wheel.js.map +1 -1
- package/modules/dependency-wheel.src.js +5 -8
- package/modules/dotplot.js +1 -1
- package/modules/dotplot.src.js +1 -1
- package/modules/drag-panes.js +8 -8
- package/modules/drag-panes.js.map +1 -1
- package/modules/drag-panes.src.js +3 -3
- package/modules/draggable-points.js +1 -1
- package/modules/draggable-points.js.map +1 -1
- package/modules/draggable-points.src.js +8 -9
- package/modules/drilldown.js +24 -24
- package/modules/drilldown.js.map +1 -1
- package/modules/drilldown.src.js +13 -8
- package/modules/dumbbell.js +17 -17
- package/modules/dumbbell.js.map +1 -1
- package/modules/dumbbell.src.js +4 -8
- package/modules/export-data.js +19 -19
- package/modules/export-data.js.map +1 -1
- package/modules/export-data.src.js +9 -8
- package/modules/exporting.js +39 -38
- package/modules/exporting.js.map +1 -1
- package/modules/exporting.src.js +134 -116
- package/modules/full-screen.js +1 -1
- package/modules/full-screen.js.map +1 -1
- package/modules/full-screen.src.js +5 -4
- package/modules/funnel.js +12 -12
- package/modules/funnel.js.map +1 -1
- package/modules/funnel.src.js +9 -6
- package/modules/funnel3d.js +1 -1
- package/modules/funnel3d.js.map +1 -1
- package/modules/funnel3d.src.js +17 -10
- package/modules/gantt.js +217 -218
- package/modules/gantt.js.map +1 -1
- package/modules/gantt.src.js +364 -363
- package/modules/grid-axis.js +1 -1
- package/modules/grid-axis.js.map +1 -1
- package/modules/grid-axis.src.js +27 -19
- package/modules/heatmap.js +39 -39
- package/modules/heatmap.js.map +1 -1
- package/modules/heatmap.src.js +132 -141
- package/modules/heikinashi.js +1 -1
- package/modules/heikinashi.js.map +1 -1
- package/modules/heikinashi.src.js +12 -10
- package/modules/histogram-bellcurve.js +13 -13
- package/modules/histogram-bellcurve.js.map +1 -1
- package/modules/histogram-bellcurve.src.js +97 -91
- package/modules/hollowcandlestick.js +9 -9
- package/modules/hollowcandlestick.js.map +1 -1
- package/modules/hollowcandlestick.src.js +31 -35
- package/modules/item-series.js +6 -6
- package/modules/item-series.js.map +1 -1
- package/modules/item-series.src.js +6 -6
- package/modules/lollipop.js +1 -1
- package/modules/lollipop.src.js +1 -1
- package/modules/map.d.ts +138 -14
- package/modules/map.js +144 -122
- package/modules/map.js.map +1 -1
- package/modules/map.src.d.ts +138 -14
- package/modules/map.src.js +2253 -1074
- package/modules/marker-clusters.js +36 -36
- package/modules/marker-clusters.js.map +1 -1
- package/modules/marker-clusters.src.js +176 -143
- package/modules/networkgraph.d.ts +12 -1
- package/modules/networkgraph.js +49 -49
- package/modules/networkgraph.js.map +1 -1
- package/modules/networkgraph.src.d.ts +12 -1
- package/modules/networkgraph.src.js +103 -78
- package/modules/no-data-to-display.js +5 -5
- package/modules/no-data-to-display.js.map +1 -1
- package/modules/no-data-to-display.src.js +3 -3
- package/modules/offline-exporting.js +18 -17
- package/modules/offline-exporting.js.map +1 -1
- package/modules/offline-exporting.src.js +39 -44
- package/modules/oldie-polyfills.js +1 -1
- package/modules/oldie-polyfills.src.js +1 -1
- package/modules/oldie.js +26 -26
- package/modules/oldie.js.map +1 -1
- package/modules/oldie.src.js +21 -81
- package/modules/organization.js +13 -13
- package/modules/organization.js.map +1 -1
- package/modules/organization.src.js +8 -6
- package/modules/overlapping-datalabels.js +1 -1
- package/modules/overlapping-datalabels.src.js +1 -1
- package/modules/parallel-coordinates.js +1 -1
- package/modules/parallel-coordinates.js.map +1 -1
- package/modules/parallel-coordinates.src.js +6 -4
- package/modules/pareto.js +7 -7
- package/modules/pareto.js.map +1 -1
- package/modules/pareto.src.js +89 -78
- package/modules/pathfinder.js +1 -1
- package/modules/pathfinder.js.map +1 -1
- package/modules/pathfinder.src.js +21 -20
- package/modules/pattern-fill.js +1 -1
- package/modules/pattern-fill.js.map +1 -1
- package/modules/pattern-fill.src.js +18 -12
- package/modules/price-indicator.js +1 -1
- package/modules/price-indicator.js.map +1 -1
- package/modules/price-indicator.src.js +3 -2
- package/modules/pyramid3d.js +1 -1
- package/modules/pyramid3d.js.map +1 -1
- package/modules/pyramid3d.src.js +3 -2
- package/modules/sankey.d.ts +12 -1
- package/modules/sankey.js +29 -29
- package/modules/sankey.js.map +1 -1
- package/modules/sankey.src.d.ts +12 -1
- package/modules/sankey.src.js +307 -181
- package/modules/series-label.js +1 -1
- package/modules/series-label.js.map +1 -1
- package/modules/series-label.src.js +2 -2
- package/modules/solid-gauge.js +1 -1
- package/modules/solid-gauge.js.map +1 -1
- package/modules/solid-gauge.src.js +17 -2
- package/modules/sonification.js +59 -55
- package/modules/sonification.js.map +1 -1
- package/modules/sonification.src.js +3093 -2594
- package/modules/static-scale.js +1 -1
- package/modules/static-scale.src.js +1 -1
- package/modules/stock-tools.js +178 -163
- package/modules/stock-tools.js.map +1 -1
- package/modules/stock-tools.src.js +1136 -229
- package/modules/stock.d.ts +39 -6
- package/modules/stock.js +204 -196
- package/modules/stock.js.map +1 -1
- package/modules/stock.src.d.ts +39 -6
- package/modules/stock.src.js +1822 -1240
- package/modules/streamgraph.js +1 -1
- package/modules/streamgraph.src.js +1 -1
- package/modules/sunburst.js +60 -60
- package/modules/sunburst.js.map +1 -1
- package/modules/sunburst.src.js +281 -248
- package/modules/tilemap.js +17 -17
- package/modules/tilemap.js.map +1 -1
- package/modules/tilemap.src.js +3 -13
- package/modules/timeline.js +18 -18
- package/modules/timeline.js.map +1 -1
- package/modules/timeline.src.js +5 -5
- package/modules/treegrid.js +56 -57
- package/modules/treegrid.js.map +1 -1
- package/modules/treegrid.src.js +201 -169
- package/modules/treemap.js +41 -41
- package/modules/treemap.js.map +1 -1
- package/modules/treemap.src.js +266 -232
- package/modules/variable-pie.js +1 -1
- package/modules/variable-pie.src.js +1 -1
- package/modules/variwide.js +1 -1
- package/modules/variwide.js.map +1 -1
- package/modules/variwide.src.js +7 -3
- package/modules/vector.js +1 -1
- package/modules/vector.src.js +1 -1
- package/modules/venn.js +31 -31
- package/modules/venn.js.map +1 -1
- package/modules/venn.src.js +740 -731
- package/modules/windbarb.js +15 -15
- package/modules/windbarb.js.map +1 -1
- package/modules/windbarb.src.js +90 -62
- package/modules/wordcloud.js +23 -24
- package/modules/wordcloud.js.map +1 -1
- package/modules/wordcloud.src.js +898 -954
- package/modules/xrange.js +2 -2
- package/modules/xrange.js.map +1 -1
- package/modules/xrange.src.js +12 -33
- package/package.json +1 -1
- package/themes/avocado.js +1 -1
- package/themes/avocado.src.js +1 -1
- package/themes/brand-dark.js +15 -0
- package/themes/brand-dark.js.map +1 -0
- package/themes/brand-dark.src.js +328 -0
- package/themes/brand-light.js +15 -0
- package/themes/brand-light.js.map +1 -0
- package/themes/brand-light.src.js +294 -0
- package/themes/dark-blue.js +1 -1
- package/themes/dark-blue.src.js +1 -1
- package/themes/dark-green.js +1 -1
- package/themes/dark-green.src.js +1 -1
- package/themes/dark-unica.js +1 -1
- package/themes/dark-unica.js.map +1 -1
- package/themes/dark-unica.src.js +5 -3
- package/themes/gray.js +1 -1
- package/themes/gray.src.js +1 -1
- package/themes/grid-light.js +1 -1
- package/themes/grid-light.js.map +1 -1
- package/themes/grid-light.src.js +5 -3
- package/themes/grid.js +1 -1
- package/themes/grid.js.map +1 -1
- package/themes/grid.src.js +5 -3
- package/themes/high-contrast-dark.js +1 -1
- package/themes/high-contrast-dark.src.js +1 -1
- package/themes/high-contrast-light.js +1 -1
- package/themes/high-contrast-light.src.js +1 -1
- package/themes/sand-signika.js +1 -1
- package/themes/sand-signika.src.js +1 -1
- package/themes/skies.js +1 -1
- package/themes/skies.src.js +1 -1
- package/themes/sunset.js +1 -1
- package/themes/sunset.src.js +1 -1
- package/es-modules/Core/Axis/MapAxis.js +0 -157
- package/es-modules/Core/Color/Palette.js +0 -82
- package/es-modules/Extensions/Sonification/InstrumentDefinitions.js +0 -32
- package/es-modules/Mixins/ColorSeries.js +0 -77
- package/es-modules/Mixins/DerivedSeries.js +0 -118
- package/es-modules/Mixins/DrawPoint.js +0 -81
- package/es-modules/Mixins/IndicatorRequired.js +0 -56
- package/es-modules/Mixins/MultipleLines.js +0 -181
- package/es-modules/Mixins/Navigation.js +0 -54
- package/es-modules/Mixins/NelderMead.js +0 -132
- package/es-modules/Mixins/Polygon.js +0 -259
- package/es-modules/Mixins/ReduceArray.js +0 -54
|
@@ -10,9 +10,501 @@
|
|
|
10
10
|
*
|
|
11
11
|
* */
|
|
12
12
|
'use strict';
|
|
13
|
+
/* *
|
|
14
|
+
*
|
|
15
|
+
* Imports
|
|
16
|
+
*
|
|
17
|
+
* */
|
|
13
18
|
import H from '../../Core/Globals.js';
|
|
19
|
+
var win = H.win;
|
|
20
|
+
import Sonification from './Sonification.js';
|
|
21
|
+
import SU from './SonificationUtilities.js';
|
|
14
22
|
import U from '../../Core/Utilities.js';
|
|
15
23
|
var error = U.error, merge = U.merge, pick = U.pick, uniqueKey = U.uniqueKey;
|
|
24
|
+
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
25
|
+
/* *
|
|
26
|
+
*
|
|
27
|
+
* Class
|
|
28
|
+
*
|
|
29
|
+
* */
|
|
30
|
+
/**
|
|
31
|
+
* The Instrument class. Instrument objects represent an instrument capable of
|
|
32
|
+
* playing a certain pitch for a specified duration.
|
|
33
|
+
*
|
|
34
|
+
* @sample highcharts/sonification/instrument/
|
|
35
|
+
* Using Instruments directly
|
|
36
|
+
* @sample highcharts/sonification/instrument-advanced/
|
|
37
|
+
* Using callbacks for instrument parameters
|
|
38
|
+
*
|
|
39
|
+
* @requires module:modules/sonification
|
|
40
|
+
*
|
|
41
|
+
* @class
|
|
42
|
+
* @name Highcharts.Instrument
|
|
43
|
+
*
|
|
44
|
+
* @param {Highcharts.InstrumentOptionsObject} options
|
|
45
|
+
* Options for the instrument instance.
|
|
46
|
+
*/
|
|
47
|
+
var Instrument = /** @class */ (function () {
|
|
48
|
+
/* *
|
|
49
|
+
*
|
|
50
|
+
* Constructor
|
|
51
|
+
*
|
|
52
|
+
* */
|
|
53
|
+
function Instrument(options) {
|
|
54
|
+
this.id = void 0;
|
|
55
|
+
this.masterVolume = void 0;
|
|
56
|
+
this.options = void 0;
|
|
57
|
+
this.playCallbackTimers = void 0;
|
|
58
|
+
this.init(options);
|
|
59
|
+
}
|
|
60
|
+
/* *
|
|
61
|
+
*
|
|
62
|
+
* Functions
|
|
63
|
+
*
|
|
64
|
+
* */
|
|
65
|
+
Instrument.prototype.init = function (options) {
|
|
66
|
+
if (!this.initAudioContext()) {
|
|
67
|
+
error(29);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
this.options = merge(Instrument.defaultOptions, options);
|
|
71
|
+
this.id = this.options.id = options && options.id || uniqueKey();
|
|
72
|
+
this.masterVolume = this.options.masterVolume || 0;
|
|
73
|
+
// Init the audio nodes
|
|
74
|
+
var ctx = Instrument.audioContext,
|
|
75
|
+
// Note: Destination node can be overridden by setting
|
|
76
|
+
// Highcharts.sonification.Instrument.prototype.destinationNode.
|
|
77
|
+
// This allows for inserting an additional chain of nodes after
|
|
78
|
+
// the default processing.
|
|
79
|
+
destination = this.destinationNode || ctx.destination;
|
|
80
|
+
this.gainNode = ctx.createGain();
|
|
81
|
+
this.setGain(0);
|
|
82
|
+
this.panNode = ctx.createStereoPanner && ctx.createStereoPanner();
|
|
83
|
+
if (this.panNode) {
|
|
84
|
+
this.setPan(0);
|
|
85
|
+
this.gainNode.connect(this.panNode);
|
|
86
|
+
this.panNode.connect(destination);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.gainNode.connect(destination);
|
|
90
|
+
}
|
|
91
|
+
// Oscillator initialization
|
|
92
|
+
if (this.options.type === 'oscillator') {
|
|
93
|
+
this.initOscillator(this.options.oscillator);
|
|
94
|
+
}
|
|
95
|
+
// Init timer list
|
|
96
|
+
this.playCallbackTimers = [];
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Return a copy of an instrument. Only one instrument instance can play at
|
|
100
|
+
* a time, so use this to get a new copy of the instrument that can play
|
|
101
|
+
* alongside it. The new instrument copy will receive a new ID unless one is
|
|
102
|
+
* supplied in options.
|
|
103
|
+
*
|
|
104
|
+
* @function Highcharts.Instrument#copy
|
|
105
|
+
*
|
|
106
|
+
* @param {Highcharts.InstrumentOptionsObject} [options]
|
|
107
|
+
* Options to merge in for the copy.
|
|
108
|
+
*
|
|
109
|
+
* @return {Highcharts.Instrument}
|
|
110
|
+
* A new Instrument instance with the same options.
|
|
111
|
+
*/
|
|
112
|
+
Instrument.prototype.copy = function (options) {
|
|
113
|
+
return new Instrument(merge(this.options, { id: null }, options));
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Init the audio context, if we do not have one.
|
|
117
|
+
* @private
|
|
118
|
+
* @return {boolean} True if successful, false if not.
|
|
119
|
+
*/
|
|
120
|
+
Instrument.prototype.initAudioContext = function () {
|
|
121
|
+
var Context = win.AudioContext || win.webkitAudioContext, hasOldContext = !!Instrument.audioContext;
|
|
122
|
+
if (Context) {
|
|
123
|
+
Instrument.audioContext = Instrument.audioContext || new Context();
|
|
124
|
+
if (!hasOldContext &&
|
|
125
|
+
Instrument.audioContext &&
|
|
126
|
+
Instrument.audioContext.state === 'running') {
|
|
127
|
+
Instrument.audioContext.suspend(); // Pause until we need it
|
|
128
|
+
}
|
|
129
|
+
return !!(Instrument.audioContext &&
|
|
130
|
+
(Instrument.audioContext.createOscillator) &&
|
|
131
|
+
(Instrument.audioContext.createGain));
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Init an oscillator instrument.
|
|
137
|
+
* @private
|
|
138
|
+
* @param {Highcharts.OscillatorOptionsObject} oscillatorOptions
|
|
139
|
+
* The oscillator options passed to Highcharts.Instrument#init.
|
|
140
|
+
*/
|
|
141
|
+
Instrument.prototype.initOscillator = function (options) {
|
|
142
|
+
var ctx = Instrument.audioContext;
|
|
143
|
+
this.oscillator = ctx.createOscillator();
|
|
144
|
+
this.oscillator.type = options.waveformShape;
|
|
145
|
+
this.oscillator.connect(this.gainNode);
|
|
146
|
+
this.oscillatorStarted = false;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Set pan position.
|
|
150
|
+
* @private
|
|
151
|
+
* @param {number} panValue
|
|
152
|
+
* The pan position to set for the instrument.
|
|
153
|
+
*/
|
|
154
|
+
Instrument.prototype.setPan = function (panValue) {
|
|
155
|
+
if (this.panNode) {
|
|
156
|
+
this.panNode.pan.setValueAtTime(panValue, Instrument.audioContext.currentTime);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Set gain level. A maximum of 1.2 is allowed before we emit a warning. The
|
|
161
|
+
* actual volume is not set above this level regardless of input. This
|
|
162
|
+
* function also handles the Instrument's master volume.
|
|
163
|
+
* @private
|
|
164
|
+
* @param {number} gainValue
|
|
165
|
+
* The gain level to set for the instrument.
|
|
166
|
+
* @param {number} [rampTime=0]
|
|
167
|
+
* Gradually change the gain level, time given in milliseconds.
|
|
168
|
+
*/
|
|
169
|
+
Instrument.prototype.setGain = function (gainValue, rampTime) {
|
|
170
|
+
var gainNode = this.gainNode;
|
|
171
|
+
var newVal = gainValue * this.masterVolume;
|
|
172
|
+
if (gainNode) {
|
|
173
|
+
if (newVal > 1.2) {
|
|
174
|
+
console.warn(// eslint-disable-line
|
|
175
|
+
'Highcharts sonification warning: ' +
|
|
176
|
+
'Volume of instrument set too high.');
|
|
177
|
+
newVal = 1.2;
|
|
178
|
+
}
|
|
179
|
+
if (rampTime) {
|
|
180
|
+
gainNode.gain.setValueAtTime(gainNode.gain.value, Instrument.audioContext.currentTime);
|
|
181
|
+
gainNode.gain.linearRampToValueAtTime(newVal, Instrument.audioContext.currentTime + rampTime / 1000);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
gainNode.gain.setValueAtTime(newVal, Instrument.audioContext.currentTime);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* Cancel ongoing gain ramps.
|
|
190
|
+
* @private
|
|
191
|
+
*/
|
|
192
|
+
Instrument.prototype.cancelGainRamp = function () {
|
|
193
|
+
if (this.gainNode) {
|
|
194
|
+
this.gainNode.gain.cancelScheduledValues(0);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* Set the master volume multiplier of the instrument after creation.
|
|
199
|
+
* @param {number} volumeMultiplier
|
|
200
|
+
* The gain level to set for the instrument.
|
|
201
|
+
*/
|
|
202
|
+
Instrument.prototype.setMasterVolume = function (volumeMultiplier) {
|
|
203
|
+
this.masterVolume = volumeMultiplier || 0;
|
|
204
|
+
};
|
|
205
|
+
/**
|
|
206
|
+
* Get the closest valid frequency for this instrument.
|
|
207
|
+
* @private
|
|
208
|
+
* @param {number} frequency
|
|
209
|
+
* The target frequency.
|
|
210
|
+
* @param {number} [min]
|
|
211
|
+
* Minimum frequency to return.
|
|
212
|
+
* @param {number} [max]
|
|
213
|
+
* Maximum frequency to return.
|
|
214
|
+
* @return {number}
|
|
215
|
+
* The closest valid frequency to the input frequency.
|
|
216
|
+
*/
|
|
217
|
+
Instrument.prototype.getValidFrequency = function (frequency, min, max) {
|
|
218
|
+
var validFrequencies = this.options.allowedFrequencies, maximum = pick(max, Infinity), minimum = pick(min, -Infinity);
|
|
219
|
+
return !validFrequencies || !validFrequencies.length ?
|
|
220
|
+
// No valid frequencies for this instrument, return the target
|
|
221
|
+
frequency :
|
|
222
|
+
// Use the valid frequencies and return the closest match
|
|
223
|
+
validFrequencies.reduce(function (acc, cur) {
|
|
224
|
+
// Find the closest allowed value
|
|
225
|
+
return Math.abs(cur - frequency) < Math.abs(acc - frequency) &&
|
|
226
|
+
cur < maximum && cur > minimum ?
|
|
227
|
+
cur : acc;
|
|
228
|
+
}, Infinity);
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Clear existing play callback timers.
|
|
232
|
+
* @private
|
|
233
|
+
*/
|
|
234
|
+
Instrument.prototype.clearPlayCallbackTimers = function () {
|
|
235
|
+
this.playCallbackTimers.forEach(function (timer) {
|
|
236
|
+
clearInterval(timer);
|
|
237
|
+
});
|
|
238
|
+
this.playCallbackTimers = [];
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* Set the current frequency being played by the instrument. The closest
|
|
242
|
+
* valid frequency between the frequency limits is used.
|
|
243
|
+
* @param {number} frequency
|
|
244
|
+
* The frequency to set.
|
|
245
|
+
* @param {Highcharts.Dictionary<number>} [frequencyLimits]
|
|
246
|
+
* Object with maxFrequency and minFrequency
|
|
247
|
+
*/
|
|
248
|
+
Instrument.prototype.setFrequency = function (frequency, frequencyLimits) {
|
|
249
|
+
var limits = frequencyLimits || {}, validFrequency = this.getValidFrequency(frequency, limits.min, limits.max);
|
|
250
|
+
if (this.options.type === 'oscillator') {
|
|
251
|
+
this.oscillatorPlay(validFrequency);
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Play oscillator instrument.
|
|
256
|
+
* @private
|
|
257
|
+
* @param {number} frequency
|
|
258
|
+
* The frequency to play.
|
|
259
|
+
*/
|
|
260
|
+
Instrument.prototype.oscillatorPlay = function (frequency) {
|
|
261
|
+
if (!this.oscillatorStarted) {
|
|
262
|
+
this.oscillator.start();
|
|
263
|
+
this.oscillatorStarted = true;
|
|
264
|
+
}
|
|
265
|
+
this.oscillator.frequency.setValueAtTime(frequency, Instrument.audioContext.currentTime);
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* Prepare instrument before playing. Resumes the audio context and starts
|
|
269
|
+
* the oscillator.
|
|
270
|
+
* @private
|
|
271
|
+
*/
|
|
272
|
+
Instrument.prototype.preparePlay = function () {
|
|
273
|
+
this.setGain(0.001);
|
|
274
|
+
if (Instrument.audioContext.state === 'suspended') {
|
|
275
|
+
Instrument.audioContext.resume();
|
|
276
|
+
}
|
|
277
|
+
if (this.oscillator && !this.oscillatorStarted) {
|
|
278
|
+
this.oscillator.start();
|
|
279
|
+
this.oscillatorStarted = true;
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
/**
|
|
283
|
+
* Play the instrument according to options.
|
|
284
|
+
*
|
|
285
|
+
* @sample highcharts/sonification/instrument/
|
|
286
|
+
* Using Instruments directly
|
|
287
|
+
* @sample highcharts/sonification/instrument-advanced/
|
|
288
|
+
* Using callbacks for instrument parameters
|
|
289
|
+
*
|
|
290
|
+
* @function Highcharts.Instrument#play
|
|
291
|
+
*
|
|
292
|
+
* @param {Highcharts.InstrumentPlayOptionsObject} options
|
|
293
|
+
* Options for the playback of the instrument.
|
|
294
|
+
*
|
|
295
|
+
*/
|
|
296
|
+
Instrument.prototype.play = function (options) {
|
|
297
|
+
var instrument = this, duration = options.duration || 0,
|
|
298
|
+
// Set a value, or if it is a function, set it continously as a
|
|
299
|
+
// timer. Pass in the value/function to set, the setter function,
|
|
300
|
+
// and any additional data to pass through to the setter function.
|
|
301
|
+
setOrStartTimer = function (value, setter, setterData) {
|
|
302
|
+
var target = options.duration, callbackInterval = instrument.options.playCallbackInterval;
|
|
303
|
+
var currentDurationIx = 0;
|
|
304
|
+
if (typeof value === 'function') {
|
|
305
|
+
var timer_1 = setInterval(function () {
|
|
306
|
+
currentDurationIx++;
|
|
307
|
+
var curTime = (currentDurationIx *
|
|
308
|
+
callbackInterval / target);
|
|
309
|
+
if (curTime >= 1) {
|
|
310
|
+
instrument[setter](value(1), setterData);
|
|
311
|
+
clearInterval(timer_1);
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
instrument[setter](value(curTime), setterData);
|
|
315
|
+
}
|
|
316
|
+
}, callbackInterval);
|
|
317
|
+
instrument.playCallbackTimers.push(timer_1);
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
instrument[setter](value, setterData);
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
if (!instrument.id) {
|
|
324
|
+
// No audio support - do nothing
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
// If the AudioContext is suspended we have to resume it before playing
|
|
328
|
+
if (Instrument.audioContext.state === 'suspended' ||
|
|
329
|
+
this.oscillator && !this.oscillatorStarted) {
|
|
330
|
+
instrument.preparePlay();
|
|
331
|
+
// Try again in 10ms
|
|
332
|
+
setTimeout(function () {
|
|
333
|
+
instrument.play(options);
|
|
334
|
+
}, 10);
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
// Clear any existing play timers
|
|
338
|
+
if (instrument.playCallbackTimers.length) {
|
|
339
|
+
instrument.clearPlayCallbackTimers();
|
|
340
|
+
}
|
|
341
|
+
// Clear any gain ramps
|
|
342
|
+
instrument.cancelGainRamp();
|
|
343
|
+
// Clear stop oscillator timer
|
|
344
|
+
if (instrument.stopOscillatorTimeout) {
|
|
345
|
+
clearTimeout(instrument.stopOscillatorTimeout);
|
|
346
|
+
delete instrument.stopOscillatorTimeout;
|
|
347
|
+
}
|
|
348
|
+
// If a note is playing right now, clear the stop timeout, and call the
|
|
349
|
+
// callback.
|
|
350
|
+
if (instrument.stopTimeout) {
|
|
351
|
+
clearTimeout(instrument.stopTimeout);
|
|
352
|
+
delete instrument.stopTimeout;
|
|
353
|
+
if (instrument.stopCallback) {
|
|
354
|
+
// We have a callback for the play we are interrupting. We do
|
|
355
|
+
// not allow this callback to start a new play, because that
|
|
356
|
+
// leads to chaos. We pass in 'cancelled' to indicate that this
|
|
357
|
+
// note did not finish, but still stopped.
|
|
358
|
+
instrument._play = instrument.play;
|
|
359
|
+
instrument.play = function () { };
|
|
360
|
+
instrument.stopCallback('cancelled');
|
|
361
|
+
instrument.play = instrument._play;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// Stop the note without fadeOut if the duration is too short to hear
|
|
365
|
+
// the note otherwise.
|
|
366
|
+
var immediate = duration < Sonification.fadeOutDuration + 20;
|
|
367
|
+
// Stop the instrument after the duration of the note
|
|
368
|
+
instrument.stopCallback = options.onEnd;
|
|
369
|
+
var onStop = function () {
|
|
370
|
+
delete instrument.stopTimeout;
|
|
371
|
+
instrument.stop(immediate);
|
|
372
|
+
};
|
|
373
|
+
if (duration) {
|
|
374
|
+
instrument.stopTimeout = setTimeout(onStop, immediate ? duration :
|
|
375
|
+
duration - Sonification.fadeOutDuration);
|
|
376
|
+
// Play the note
|
|
377
|
+
setOrStartTimer(options.frequency, 'setFrequency', {
|
|
378
|
+
minFrequency: options.minFrequency,
|
|
379
|
+
maxFrequency: options.maxFrequency
|
|
380
|
+
});
|
|
381
|
+
// Set the volume and panning
|
|
382
|
+
setOrStartTimer(pick(options.volume, 1), 'setGain', 4); // Slight ramp
|
|
383
|
+
setOrStartTimer(pick(options.pan, 0), 'setPan');
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
// No note duration, so just stop immediately
|
|
387
|
+
onStop();
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
/**
|
|
391
|
+
* Mute an instrument that is playing. If the instrument is not currently
|
|
392
|
+
* playing, this function does nothing.
|
|
393
|
+
*
|
|
394
|
+
* @function Highcharts.Instrument#mute
|
|
395
|
+
*/
|
|
396
|
+
Instrument.prototype.mute = function () {
|
|
397
|
+
this.setGain(0.0001, Sonification.fadeOutDuration * 0.8);
|
|
398
|
+
};
|
|
399
|
+
/**
|
|
400
|
+
* Stop the instrument playing.
|
|
401
|
+
*
|
|
402
|
+
* @function Highcharts.Instrument#stop
|
|
403
|
+
*
|
|
404
|
+
* @param {boolean} immediately
|
|
405
|
+
* Whether to do the stop immediately or fade out.
|
|
406
|
+
*
|
|
407
|
+
* @param {Function} [onStopped]
|
|
408
|
+
* Callback function to be called when the stop is completed.
|
|
409
|
+
*
|
|
410
|
+
* @param {*} [callbackData]
|
|
411
|
+
* Data to send to the onEnd callback functions.
|
|
412
|
+
*
|
|
413
|
+
*/
|
|
414
|
+
Instrument.prototype.stop = function (immediately, onStopped, callbackData) {
|
|
415
|
+
var instr = this, reset = function () {
|
|
416
|
+
// Remove timeout reference
|
|
417
|
+
if (instr.stopOscillatorTimeout) {
|
|
418
|
+
delete instr.stopOscillatorTimeout;
|
|
419
|
+
}
|
|
420
|
+
if (instr.oscillator &&
|
|
421
|
+
instr.options.oscillator) {
|
|
422
|
+
// The oscillator may have stopped in the meantime here, so
|
|
423
|
+
// allow this function to fail if so.
|
|
424
|
+
try {
|
|
425
|
+
instr.oscillator.stop();
|
|
426
|
+
}
|
|
427
|
+
catch (e) {
|
|
428
|
+
// silent error
|
|
429
|
+
}
|
|
430
|
+
if (instr.gainNode) {
|
|
431
|
+
instr.oscillator.disconnect(instr.gainNode);
|
|
432
|
+
}
|
|
433
|
+
// We need a new oscillator in order to restart it
|
|
434
|
+
instr.initOscillator(instr.options.oscillator);
|
|
435
|
+
}
|
|
436
|
+
// Done stopping, call the callback from the stop
|
|
437
|
+
if (onStopped) {
|
|
438
|
+
onStopped(callbackData);
|
|
439
|
+
}
|
|
440
|
+
// Call the callback for the play we finished
|
|
441
|
+
if (instr.stopCallback) {
|
|
442
|
+
instr.stopCallback(callbackData);
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
// Clear any existing timers
|
|
446
|
+
if (instr.playCallbackTimers.length) {
|
|
447
|
+
instr.clearPlayCallbackTimers();
|
|
448
|
+
}
|
|
449
|
+
if (instr.stopTimeout) {
|
|
450
|
+
clearTimeout(instr.stopTimeout);
|
|
451
|
+
}
|
|
452
|
+
if (immediately) {
|
|
453
|
+
instr.setGain(0);
|
|
454
|
+
reset();
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
instr.mute();
|
|
458
|
+
// Stop the oscillator after the mute fade-out has finished
|
|
459
|
+
instr.stopOscillatorTimeout =
|
|
460
|
+
setTimeout(reset, Sonification.fadeOutDuration + 100);
|
|
461
|
+
}
|
|
462
|
+
};
|
|
463
|
+
// Default options for Instrument constructor
|
|
464
|
+
Instrument.defaultOptions = {
|
|
465
|
+
type: 'oscillator',
|
|
466
|
+
playCallbackInterval: 20,
|
|
467
|
+
masterVolume: 1,
|
|
468
|
+
oscillator: {
|
|
469
|
+
waveformShape: 'sine'
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
Instrument.definitions = {};
|
|
473
|
+
return Instrument;
|
|
474
|
+
}());
|
|
475
|
+
/* *
|
|
476
|
+
*
|
|
477
|
+
* Class Prototype
|
|
478
|
+
*
|
|
479
|
+
* */
|
|
480
|
+
// ['sine', 'square', 'triangle', 'sawtooth'].forEach(function (
|
|
481
|
+
['sine', 'square', 'triangle', 'sawtooth'].forEach(function (waveform) {
|
|
482
|
+
// Add basic instruments
|
|
483
|
+
Instrument.definitions[waveform] = new Instrument({
|
|
484
|
+
oscillator: { waveformShape: waveform }
|
|
485
|
+
});
|
|
486
|
+
// Add musical instruments
|
|
487
|
+
Instrument.definitions[waveform + 'Musical'] = new Instrument({
|
|
488
|
+
allowedFrequencies: SU.musicalFrequencies,
|
|
489
|
+
oscillator: { waveformShape: waveform }
|
|
490
|
+
});
|
|
491
|
+
// Add scaled instruments
|
|
492
|
+
Instrument.definitions[waveform + 'Major'] = new Instrument({
|
|
493
|
+
allowedFrequencies: SU.getMusicalScale([1, 3, 5, 6, 8, 10, 12]),
|
|
494
|
+
oscillator: { waveformShape: waveform }
|
|
495
|
+
});
|
|
496
|
+
});
|
|
497
|
+
/* *
|
|
498
|
+
*
|
|
499
|
+
* Default Export
|
|
500
|
+
*
|
|
501
|
+
* */
|
|
502
|
+
export default Instrument;
|
|
503
|
+
/* *
|
|
504
|
+
*
|
|
505
|
+
* API Declarations
|
|
506
|
+
*
|
|
507
|
+
* */
|
|
16
508
|
/**
|
|
17
509
|
* A set of options for the Instrument class.
|
|
18
510
|
*
|
|
@@ -111,429 +603,4 @@ var error = U.error, merge = U.merge, pick = U.pick, uniqueKey = U.uniqueKey;
|
|
|
111
603
|
* @name Highcharts.OscillatorOptionsObject#waveformShape
|
|
112
604
|
* @type {string|undefined}
|
|
113
605
|
*/
|
|
114
|
-
//
|
|
115
|
-
var defaultOptions = {
|
|
116
|
-
type: 'oscillator',
|
|
117
|
-
playCallbackInterval: 20,
|
|
118
|
-
masterVolume: 1,
|
|
119
|
-
oscillator: {
|
|
120
|
-
waveformShape: 'sine'
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
124
|
-
/**
|
|
125
|
-
* The Instrument class. Instrument objects represent an instrument capable of
|
|
126
|
-
* playing a certain pitch for a specified duration.
|
|
127
|
-
*
|
|
128
|
-
* @sample highcharts/sonification/instrument/
|
|
129
|
-
* Using Instruments directly
|
|
130
|
-
* @sample highcharts/sonification/instrument-advanced/
|
|
131
|
-
* Using callbacks for instrument parameters
|
|
132
|
-
*
|
|
133
|
-
* @requires module:modules/sonification
|
|
134
|
-
*
|
|
135
|
-
* @class
|
|
136
|
-
* @name Highcharts.Instrument
|
|
137
|
-
*
|
|
138
|
-
* @param {Highcharts.InstrumentOptionsObject} options
|
|
139
|
-
* Options for the instrument instance.
|
|
140
|
-
*/
|
|
141
|
-
function Instrument(options) {
|
|
142
|
-
this.init(options);
|
|
143
|
-
}
|
|
144
|
-
Instrument.prototype.init = function (options) {
|
|
145
|
-
if (!this.initAudioContext()) {
|
|
146
|
-
error(29);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
this.options = merge(defaultOptions, options);
|
|
150
|
-
this.id = this.options.id = options && options.id || uniqueKey();
|
|
151
|
-
this.masterVolume = this.options.masterVolume || 0;
|
|
152
|
-
// Init the audio nodes
|
|
153
|
-
var ctx = H.audioContext;
|
|
154
|
-
// Note: Destination node can be overridden by setting
|
|
155
|
-
// Highcharts.sonification.Instrument.prototype.destinationNode.
|
|
156
|
-
// This allows for inserting an additional chain of nodes after
|
|
157
|
-
// the default processing.
|
|
158
|
-
var destination = this.destinationNode || ctx.destination;
|
|
159
|
-
this.gainNode = ctx.createGain();
|
|
160
|
-
this.setGain(0);
|
|
161
|
-
this.panNode = ctx.createStereoPanner && ctx.createStereoPanner();
|
|
162
|
-
if (this.panNode) {
|
|
163
|
-
this.setPan(0);
|
|
164
|
-
this.gainNode.connect(this.panNode);
|
|
165
|
-
this.panNode.connect(destination);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
this.gainNode.connect(destination);
|
|
169
|
-
}
|
|
170
|
-
// Oscillator initialization
|
|
171
|
-
if (this.options.type === 'oscillator') {
|
|
172
|
-
this.initOscillator(this.options.oscillator);
|
|
173
|
-
}
|
|
174
|
-
// Init timer list
|
|
175
|
-
this.playCallbackTimers = [];
|
|
176
|
-
};
|
|
177
|
-
/**
|
|
178
|
-
* Return a copy of an instrument. Only one instrument instance can play at a
|
|
179
|
-
* time, so use this to get a new copy of the instrument that can play alongside
|
|
180
|
-
* it. The new instrument copy will receive a new ID unless one is supplied in
|
|
181
|
-
* options.
|
|
182
|
-
*
|
|
183
|
-
* @function Highcharts.Instrument#copy
|
|
184
|
-
*
|
|
185
|
-
* @param {Highcharts.InstrumentOptionsObject} [options]
|
|
186
|
-
* Options to merge in for the copy.
|
|
187
|
-
*
|
|
188
|
-
* @return {Highcharts.Instrument}
|
|
189
|
-
* A new Instrument instance with the same options.
|
|
190
|
-
*/
|
|
191
|
-
Instrument.prototype.copy = function (options) {
|
|
192
|
-
return new Instrument(merge(this.options, { id: null }, options));
|
|
193
|
-
};
|
|
194
|
-
/**
|
|
195
|
-
* Init the audio context, if we do not have one.
|
|
196
|
-
* @private
|
|
197
|
-
* @return {boolean} True if successful, false if not.
|
|
198
|
-
*/
|
|
199
|
-
Instrument.prototype.initAudioContext = function () {
|
|
200
|
-
var Context = H.win.AudioContext || H.win.webkitAudioContext, hasOldContext = !!H.audioContext;
|
|
201
|
-
if (Context) {
|
|
202
|
-
H.audioContext = H.audioContext || new Context();
|
|
203
|
-
if (!hasOldContext &&
|
|
204
|
-
H.audioContext &&
|
|
205
|
-
H.audioContext.state === 'running') {
|
|
206
|
-
H.audioContext.suspend(); // Pause until we need it
|
|
207
|
-
}
|
|
208
|
-
return !!(H.audioContext &&
|
|
209
|
-
H.audioContext.createOscillator &&
|
|
210
|
-
H.audioContext.createGain);
|
|
211
|
-
}
|
|
212
|
-
return false;
|
|
213
|
-
};
|
|
214
|
-
/**
|
|
215
|
-
* Init an oscillator instrument.
|
|
216
|
-
* @private
|
|
217
|
-
* @param {Highcharts.OscillatorOptionsObject} oscillatorOptions
|
|
218
|
-
* The oscillator options passed to Highcharts.Instrument#init.
|
|
219
|
-
* @return {void}
|
|
220
|
-
*/
|
|
221
|
-
Instrument.prototype.initOscillator = function (options) {
|
|
222
|
-
var ctx = H.audioContext;
|
|
223
|
-
this.oscillator = ctx.createOscillator();
|
|
224
|
-
this.oscillator.type = options.waveformShape;
|
|
225
|
-
this.oscillator.connect(this.gainNode);
|
|
226
|
-
this.oscillatorStarted = false;
|
|
227
|
-
};
|
|
228
|
-
/**
|
|
229
|
-
* Set pan position.
|
|
230
|
-
* @private
|
|
231
|
-
* @param {number} panValue
|
|
232
|
-
* The pan position to set for the instrument.
|
|
233
|
-
* @return {void}
|
|
234
|
-
*/
|
|
235
|
-
Instrument.prototype.setPan = function (panValue) {
|
|
236
|
-
if (this.panNode) {
|
|
237
|
-
this.panNode.pan.setValueAtTime(panValue, H.audioContext.currentTime);
|
|
238
|
-
}
|
|
239
|
-
};
|
|
240
|
-
/**
|
|
241
|
-
* Set gain level. A maximum of 1.2 is allowed before we emit a warning. The
|
|
242
|
-
* actual volume is not set above this level regardless of input. This function
|
|
243
|
-
* also handles the Instrument's master volume.
|
|
244
|
-
* @private
|
|
245
|
-
* @param {number} gainValue
|
|
246
|
-
* The gain level to set for the instrument.
|
|
247
|
-
* @param {number} [rampTime=0]
|
|
248
|
-
* Gradually change the gain level, time given in milliseconds.
|
|
249
|
-
* @return {void}
|
|
250
|
-
*/
|
|
251
|
-
Instrument.prototype.setGain = function (gainValue, rampTime) {
|
|
252
|
-
var gainNode = this.gainNode;
|
|
253
|
-
var newVal = gainValue * this.masterVolume;
|
|
254
|
-
if (gainNode) {
|
|
255
|
-
if (newVal > 1.2) {
|
|
256
|
-
console.warn(// eslint-disable-line
|
|
257
|
-
'Highcharts sonification warning: ' +
|
|
258
|
-
'Volume of instrument set too high.');
|
|
259
|
-
newVal = 1.2;
|
|
260
|
-
}
|
|
261
|
-
if (rampTime) {
|
|
262
|
-
gainNode.gain.setValueAtTime(gainNode.gain.value, H.audioContext.currentTime);
|
|
263
|
-
gainNode.gain.linearRampToValueAtTime(newVal, H.audioContext.currentTime + rampTime / 1000);
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
gainNode.gain.setValueAtTime(newVal, H.audioContext.currentTime);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
/**
|
|
271
|
-
* Cancel ongoing gain ramps.
|
|
272
|
-
* @private
|
|
273
|
-
* @return {void}
|
|
274
|
-
*/
|
|
275
|
-
Instrument.prototype.cancelGainRamp = function () {
|
|
276
|
-
if (this.gainNode) {
|
|
277
|
-
this.gainNode.gain.cancelScheduledValues(0);
|
|
278
|
-
}
|
|
279
|
-
};
|
|
280
|
-
/**
|
|
281
|
-
* Set the master volume multiplier of the instrument after creation.
|
|
282
|
-
* @param {number} volumeMultiplier
|
|
283
|
-
* The gain level to set for the instrument.
|
|
284
|
-
* @return {void}
|
|
285
|
-
*/
|
|
286
|
-
Instrument.prototype.setMasterVolume = function (volumeMultiplier) {
|
|
287
|
-
this.masterVolume = volumeMultiplier || 0;
|
|
288
|
-
};
|
|
289
|
-
/**
|
|
290
|
-
* Get the closest valid frequency for this instrument.
|
|
291
|
-
* @private
|
|
292
|
-
* @param {number} frequency - The target frequency.
|
|
293
|
-
* @param {number} [min] - Minimum frequency to return.
|
|
294
|
-
* @param {number} [max] - Maximum frequency to return.
|
|
295
|
-
* @return {number} The closest valid frequency to the input frequency.
|
|
296
|
-
*/
|
|
297
|
-
Instrument.prototype.getValidFrequency = function (frequency, min, max) {
|
|
298
|
-
var validFrequencies = this.options.allowedFrequencies, maximum = pick(max, Infinity), minimum = pick(min, -Infinity);
|
|
299
|
-
return !validFrequencies || !validFrequencies.length ?
|
|
300
|
-
// No valid frequencies for this instrument, return the target
|
|
301
|
-
frequency :
|
|
302
|
-
// Use the valid frequencies and return the closest match
|
|
303
|
-
validFrequencies.reduce(function (acc, cur) {
|
|
304
|
-
// Find the closest allowed value
|
|
305
|
-
return Math.abs(cur - frequency) < Math.abs(acc - frequency) &&
|
|
306
|
-
cur < maximum && cur > minimum ?
|
|
307
|
-
cur : acc;
|
|
308
|
-
}, Infinity);
|
|
309
|
-
};
|
|
310
|
-
/**
|
|
311
|
-
* Clear existing play callback timers.
|
|
312
|
-
* @private
|
|
313
|
-
* @return {void}
|
|
314
|
-
*/
|
|
315
|
-
Instrument.prototype.clearPlayCallbackTimers = function () {
|
|
316
|
-
this.playCallbackTimers.forEach(function (timer) {
|
|
317
|
-
clearInterval(timer);
|
|
318
|
-
});
|
|
319
|
-
this.playCallbackTimers = [];
|
|
320
|
-
};
|
|
321
|
-
/**
|
|
322
|
-
* Set the current frequency being played by the instrument. The closest valid
|
|
323
|
-
* frequency between the frequency limits is used.
|
|
324
|
-
* @param {number} frequency
|
|
325
|
-
* The frequency to set.
|
|
326
|
-
* @param {Highcharts.Dictionary<number>} [frequencyLimits]
|
|
327
|
-
* Object with maxFrequency and minFrequency
|
|
328
|
-
* @return {void}
|
|
329
|
-
*/
|
|
330
|
-
Instrument.prototype.setFrequency = function (frequency, frequencyLimits) {
|
|
331
|
-
var limits = frequencyLimits || {}, validFrequency = this.getValidFrequency(frequency, limits.min, limits.max);
|
|
332
|
-
if (this.options.type === 'oscillator') {
|
|
333
|
-
this.oscillatorPlay(validFrequency);
|
|
334
|
-
}
|
|
335
|
-
};
|
|
336
|
-
/**
|
|
337
|
-
* Play oscillator instrument.
|
|
338
|
-
* @private
|
|
339
|
-
* @param {number} frequency - The frequency to play.
|
|
340
|
-
*/
|
|
341
|
-
Instrument.prototype.oscillatorPlay = function (frequency) {
|
|
342
|
-
if (!this.oscillatorStarted) {
|
|
343
|
-
this.oscillator.start();
|
|
344
|
-
this.oscillatorStarted = true;
|
|
345
|
-
}
|
|
346
|
-
this.oscillator.frequency.setValueAtTime(frequency, H.audioContext.currentTime);
|
|
347
|
-
};
|
|
348
|
-
/**
|
|
349
|
-
* Prepare instrument before playing. Resumes the audio context and starts the
|
|
350
|
-
* oscillator.
|
|
351
|
-
* @private
|
|
352
|
-
*/
|
|
353
|
-
Instrument.prototype.preparePlay = function () {
|
|
354
|
-
this.setGain(0.001);
|
|
355
|
-
if (H.audioContext.state === 'suspended') {
|
|
356
|
-
H.audioContext.resume();
|
|
357
|
-
}
|
|
358
|
-
if (this.oscillator && !this.oscillatorStarted) {
|
|
359
|
-
this.oscillator.start();
|
|
360
|
-
this.oscillatorStarted = true;
|
|
361
|
-
}
|
|
362
|
-
};
|
|
363
|
-
/**
|
|
364
|
-
* Play the instrument according to options.
|
|
365
|
-
*
|
|
366
|
-
* @sample highcharts/sonification/instrument/
|
|
367
|
-
* Using Instruments directly
|
|
368
|
-
* @sample highcharts/sonification/instrument-advanced/
|
|
369
|
-
* Using callbacks for instrument parameters
|
|
370
|
-
*
|
|
371
|
-
* @function Highcharts.Instrument#play
|
|
372
|
-
*
|
|
373
|
-
* @param {Highcharts.InstrumentPlayOptionsObject} options
|
|
374
|
-
* Options for the playback of the instrument.
|
|
375
|
-
*
|
|
376
|
-
* @return {void}
|
|
377
|
-
*/
|
|
378
|
-
Instrument.prototype.play = function (options) {
|
|
379
|
-
var instrument = this, duration = options.duration || 0,
|
|
380
|
-
// Set a value, or if it is a function, set it continously as a timer.
|
|
381
|
-
// Pass in the value/function to set, the setter function, and any
|
|
382
|
-
// additional data to pass through to the setter function.
|
|
383
|
-
setOrStartTimer = function (value, setter, setterData) {
|
|
384
|
-
var target = options.duration, currentDurationIx = 0, callbackInterval = instrument.options.playCallbackInterval;
|
|
385
|
-
if (typeof value === 'function') {
|
|
386
|
-
var timer_1 = setInterval(function () {
|
|
387
|
-
currentDurationIx++;
|
|
388
|
-
var curTime = (currentDurationIx * callbackInterval / target);
|
|
389
|
-
if (curTime >= 1) {
|
|
390
|
-
instrument[setter](value(1), setterData);
|
|
391
|
-
clearInterval(timer_1);
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
instrument[setter](value(curTime), setterData);
|
|
395
|
-
}
|
|
396
|
-
}, callbackInterval);
|
|
397
|
-
instrument.playCallbackTimers.push(timer_1);
|
|
398
|
-
}
|
|
399
|
-
else {
|
|
400
|
-
instrument[setter](value, setterData);
|
|
401
|
-
}
|
|
402
|
-
};
|
|
403
|
-
if (!instrument.id) {
|
|
404
|
-
// No audio support - do nothing
|
|
405
|
-
return;
|
|
406
|
-
}
|
|
407
|
-
// If the AudioContext is suspended we have to resume it before playing
|
|
408
|
-
if (H.audioContext.state === 'suspended' ||
|
|
409
|
-
this.oscillator && !this.oscillatorStarted) {
|
|
410
|
-
instrument.preparePlay();
|
|
411
|
-
// Try again in 10ms
|
|
412
|
-
setTimeout(function () {
|
|
413
|
-
instrument.play(options);
|
|
414
|
-
}, 10);
|
|
415
|
-
return;
|
|
416
|
-
}
|
|
417
|
-
// Clear any existing play timers
|
|
418
|
-
if (instrument.playCallbackTimers.length) {
|
|
419
|
-
instrument.clearPlayCallbackTimers();
|
|
420
|
-
}
|
|
421
|
-
// Clear any gain ramps
|
|
422
|
-
instrument.cancelGainRamp();
|
|
423
|
-
// Clear stop oscillator timer
|
|
424
|
-
if (instrument.stopOscillatorTimeout) {
|
|
425
|
-
clearTimeout(instrument.stopOscillatorTimeout);
|
|
426
|
-
delete instrument.stopOscillatorTimeout;
|
|
427
|
-
}
|
|
428
|
-
// If a note is playing right now, clear the stop timeout, and call the
|
|
429
|
-
// callback.
|
|
430
|
-
if (instrument.stopTimeout) {
|
|
431
|
-
clearTimeout(instrument.stopTimeout);
|
|
432
|
-
delete instrument.stopTimeout;
|
|
433
|
-
if (instrument.stopCallback) {
|
|
434
|
-
// We have a callback for the play we are interrupting. We do not
|
|
435
|
-
// allow this callback to start a new play, because that leads to
|
|
436
|
-
// chaos. We pass in 'cancelled' to indicate that this note did not
|
|
437
|
-
// finish, but still stopped.
|
|
438
|
-
instrument._play = instrument.play;
|
|
439
|
-
instrument.play = function () { };
|
|
440
|
-
instrument.stopCallback('cancelled');
|
|
441
|
-
instrument.play = instrument._play;
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
// Stop the note without fadeOut if the duration is too short to hear the
|
|
445
|
-
// note otherwise.
|
|
446
|
-
var immediate = duration < H.sonification.fadeOutDuration + 20;
|
|
447
|
-
// Stop the instrument after the duration of the note
|
|
448
|
-
instrument.stopCallback = options.onEnd;
|
|
449
|
-
var onStop = function () {
|
|
450
|
-
delete instrument.stopTimeout;
|
|
451
|
-
instrument.stop(immediate);
|
|
452
|
-
};
|
|
453
|
-
if (duration) {
|
|
454
|
-
instrument.stopTimeout = setTimeout(onStop, immediate ? duration :
|
|
455
|
-
duration - H.sonification.fadeOutDuration);
|
|
456
|
-
// Play the note
|
|
457
|
-
setOrStartTimer(options.frequency, 'setFrequency', {
|
|
458
|
-
minFrequency: options.minFrequency,
|
|
459
|
-
maxFrequency: options.maxFrequency
|
|
460
|
-
});
|
|
461
|
-
// Set the volume and panning
|
|
462
|
-
setOrStartTimer(pick(options.volume, 1), 'setGain', 4); // Slight ramp
|
|
463
|
-
setOrStartTimer(pick(options.pan, 0), 'setPan');
|
|
464
|
-
}
|
|
465
|
-
else {
|
|
466
|
-
// No note duration, so just stop immediately
|
|
467
|
-
onStop();
|
|
468
|
-
}
|
|
469
|
-
};
|
|
470
|
-
/**
|
|
471
|
-
* Mute an instrument that is playing. If the instrument is not currently
|
|
472
|
-
* playing, this function does nothing.
|
|
473
|
-
*
|
|
474
|
-
* @function Highcharts.Instrument#mute
|
|
475
|
-
*/
|
|
476
|
-
Instrument.prototype.mute = function () {
|
|
477
|
-
this.setGain(0.0001, H.sonification.fadeOutDuration * 0.8);
|
|
478
|
-
};
|
|
479
|
-
/**
|
|
480
|
-
* Stop the instrument playing.
|
|
481
|
-
*
|
|
482
|
-
* @function Highcharts.Instrument#stop
|
|
483
|
-
*
|
|
484
|
-
* @param {boolean} immediately
|
|
485
|
-
* Whether to do the stop immediately or fade out.
|
|
486
|
-
*
|
|
487
|
-
* @param {Function} [onStopped]
|
|
488
|
-
* Callback function to be called when the stop is completed.
|
|
489
|
-
*
|
|
490
|
-
* @param {*} [callbackData]
|
|
491
|
-
* Data to send to the onEnd callback functions.
|
|
492
|
-
*
|
|
493
|
-
* @return {void}
|
|
494
|
-
*/
|
|
495
|
-
Instrument.prototype.stop = function (immediately, onStopped, callbackData) {
|
|
496
|
-
var instr = this, reset = function () {
|
|
497
|
-
// Remove timeout reference
|
|
498
|
-
if (instr.stopOscillatorTimeout) {
|
|
499
|
-
delete instr.stopOscillatorTimeout;
|
|
500
|
-
}
|
|
501
|
-
// The oscillator may have stopped in the meantime here, so allow
|
|
502
|
-
// this function to fail if so.
|
|
503
|
-
try {
|
|
504
|
-
instr.oscillator.stop();
|
|
505
|
-
}
|
|
506
|
-
catch (e) {
|
|
507
|
-
// silent error
|
|
508
|
-
}
|
|
509
|
-
instr.oscillator.disconnect(instr.gainNode);
|
|
510
|
-
// We need a new oscillator in order to restart it
|
|
511
|
-
instr.initOscillator(instr.options.oscillator);
|
|
512
|
-
// Done stopping, call the callback from the stop
|
|
513
|
-
if (onStopped) {
|
|
514
|
-
onStopped(callbackData);
|
|
515
|
-
}
|
|
516
|
-
// Call the callback for the play we finished
|
|
517
|
-
if (instr.stopCallback) {
|
|
518
|
-
instr.stopCallback(callbackData);
|
|
519
|
-
}
|
|
520
|
-
};
|
|
521
|
-
// Clear any existing timers
|
|
522
|
-
if (instr.playCallbackTimers.length) {
|
|
523
|
-
instr.clearPlayCallbackTimers();
|
|
524
|
-
}
|
|
525
|
-
if (instr.stopTimeout) {
|
|
526
|
-
clearTimeout(instr.stopTimeout);
|
|
527
|
-
}
|
|
528
|
-
if (immediately) {
|
|
529
|
-
instr.setGain(0);
|
|
530
|
-
reset();
|
|
531
|
-
}
|
|
532
|
-
else {
|
|
533
|
-
instr.mute();
|
|
534
|
-
// Stop the oscillator after the mute fade-out has finished
|
|
535
|
-
instr.stopOscillatorTimeout =
|
|
536
|
-
setTimeout(reset, H.sonification.fadeOutDuration + 100);
|
|
537
|
-
}
|
|
538
|
-
};
|
|
539
|
-
export default Instrument;
|
|
606
|
+
(''); // keeps doclets above in JS file
|