ps-toolkit-ui 0.0.209 → 0.0.210
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/bundles/ps-toolkit-ui.umd.js +20 -2
- package/bundles/ps-toolkit-ui.umd.js.map +1 -1
- package/bundles/ps-toolkit-ui.umd.min.js +1 -1
- package/bundles/ps-toolkit-ui.umd.min.js.map +1 -1
- package/esm2015/lib/classes/chart.class.js +140 -0
- package/esm2015/lib/components/chart/chart.component.js +17 -0
- package/esm2015/lib/ps-toolkit-ui.module.js +4 -3
- package/esm2015/ps-toolkit-ui.js +2 -1
- package/fesm2015/ps-toolkit-ui.js +19 -3
- package/fesm2015/ps-toolkit-ui.js.map +1 -1
- package/lib/classes/chart.class.d.ts +11 -0
- package/lib/components/chart/chart.component.d.ts +5 -0
- package/package.json +1 -1
- package/ps-toolkit-ui.d.ts +1 -0
- package/ps-toolkit-ui.metadata.json +1 -1
- package/src/assets/plugins/highcharts/code/css/annotations/popup.css +276 -0
- package/src/assets/plugins/highcharts/code/css/annotations/popup.scss +289 -0
- package/src/assets/plugins/highcharts/code/css/highcharts.css +1013 -0
- package/src/assets/plugins/highcharts/code/css/highcharts.scss +896 -0
- package/src/assets/plugins/highcharts/code/css/stocktools/gui.css +271 -0
- package/src/assets/plugins/highcharts/code/css/stocktools/gui.scss +271 -0
- package/src/assets/plugins/highcharts/code/css/themes/dark-unica.css +1074 -0
- package/src/assets/plugins/highcharts/code/css/themes/dark-unica.scss +122 -0
- package/src/assets/plugins/highcharts/code/css/themes/grid-light.css +1027 -0
- package/src/assets/plugins/highcharts/code/css/themes/grid-light.scss +33 -0
- package/src/assets/plugins/highcharts/code/css/themes/sand-signika.css +1043 -0
- package/src/assets/plugins/highcharts/code/css/themes/sand-signika.scss +74 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/A11yI18n.js +299 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Accessibility.js +401 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/AccessibilityComponent.js +153 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/AnnotationsA11y.js +160 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/ContainerComponent.js +159 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/InfoRegionsComponent.js +543 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/LegendComponent.js +478 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/MenuComponent.js +451 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/RangeSelectorComponent.js +506 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +217 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +324 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +148 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +390 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +650 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Components/ZoomComponent.js +375 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/FocusBorder.js +302 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/HighContrastMode.js +96 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/HighContrastTheme.js +221 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/KeyboardNavigation.js +449 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/KeyboardNavigationHandler.js +128 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Options/DeprecatedOptions.js +250 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Options/LangOptions.js +339 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Options/Options.js +831 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/ProxyElement.js +218 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/ProxyProvider.js +302 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Utils/Announcer.js +91 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Utils/ChartUtilities.js +294 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Utils/DOMElementProvider.js +62 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Utils/EventProvider.js +58 -0
- package/src/assets/plugins/highcharts/code/es-modules/Accessibility/Utils/HTMLUtilities.js +305 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Animation/AnimationUtilities.js +200 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Animation/Fx.js +387 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/Axis.js +3225 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/Axis3D.js +612 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/AxisDefaults.js +2935 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/BrokenAxis.js +601 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/Color/ColorAxis.js +668 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/Color/ColorAxisComposition.js +287 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/Color/ColorAxisDefaults.js +434 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/DateTimeAxis.js +196 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/GridAxis.js +1046 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/LogarithmicAxis.js +202 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/NavigatorAxis.js +159 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/OrdinalAxis.js +992 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +873 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +287 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/RadialAxis.js +954 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/ScrollbarAxis.js +182 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/SolidGaugeAxis.js +127 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/StackingAxis.js +216 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/Tick.js +723 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/Tick3D.js +68 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/TreeGridAxis.js +720 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/TreeGridTick.js +306 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/WaterfallAxis.js +149 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Axis/ZAxis.js +156 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Chart/Chart.js +2909 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Chart/Chart3D.js +1695 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Chart/ChartDefaults.js +1053 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Chart/ChartNavigationComposition.js +92 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Chart/GanttChart.js +177 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Chart/MapChart.js +179 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Chart/StockChart.js +644 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Color/Color.js +419 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Color/Palettes.js +22 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/DefaultOptions.js +2743 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/FormatUtilities.js +246 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Foundation.js +61 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Geometry/CircleUtilities.js +386 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Geometry/GeometryUtilities.js +83 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Globals.js +131 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/HttpUtilities.js +195 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Legend/Legend.js +1284 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Legend/LegendSymbol.js +109 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/MSPointer.js +170 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Navigator.js +1958 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Pointer.js +1518 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/HTML/AST.js +475 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/HTML/HTMLElement.js +261 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/HTML/HTMLRenderer.js +272 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/RendererRegistry.js +77 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/RendererUtilities.js +159 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/SVG/SVGElement.js +2176 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/SVG/SVGElement3D.js +160 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/SVG/SVGLabel.js +408 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/SVG/SVGRenderer.js +1900 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +842 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/SVG/Symbols.js +197 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Renderer/SVG/TextBuilder.js +452 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Responsive.js +334 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Scrollbar.js +658 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/ScrollbarDefaults.js +218 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Series/DataLabel.js +568 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Series/Point.js +1307 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Series/Series.js +3718 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Series/Series3D.js +126 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Series/SeriesDefaults.js +2293 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Series/SeriesRegistry.js +127 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Time.js +741 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Tooltip.js +1378 -0
- package/src/assets/plugins/highcharts/code/es-modules/Core/Utilities.js +1967 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/DataConverter.js +483 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/DataPromise.js +252 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/DataSeriesConverter.js +207 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/DataTable.js +1205 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Modifiers/ChainModifier.js +299 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Modifiers/DataModifier.js +303 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Modifiers/GroupModifier.js +144 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Modifiers/InvertModifier.js +254 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Modifiers/RangeModifier.js +143 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Modifiers/SeriesPointsModifier.js +110 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Modifiers/SortModifier.js +249 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Parsers/CSVParser.js +400 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Parsers/DataParser.js +101 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Parsers/GoogleSheetsParser.js +223 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Parsers/HTMLTableParser.js +213 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Stores/CSVStore.js +317 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Stores/DataStore.js +276 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Stores/GoogleSheetsStore.js +169 -0
- package/src/assets/plugins/highcharts/code/es-modules/Data/Stores/HTMLTableStore.js +353 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Annotations.js +1442 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/ControlPoint.js +141 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Controllables/ControllableCircle.js +117 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +199 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Controllables/ControllableImage.js +111 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +387 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +181 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Controllables/ControllableRect.js +121 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Mixins/ControllableMixin.js +378 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js +221 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js +179 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/MockPoint.js +428 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/NavigationBindings.js +1212 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Popup.js +1123 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +237 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/CrookedLine.js +185 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/ElliottWave.js +95 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/Fibonacci.js +205 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +219 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/InfinityLine.js +161 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/Measure.js +791 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/Pitchfork.js +194 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/TimeCycles.js +211 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/Tunnel.js +211 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Annotations/Types/VerticalLine.js +156 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/ArrowSymbols.js +166 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/Boost.js +34 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/BoostAttach.js +150 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/BoostInit.js +318 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/BoostOptions.js +219 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/BoostOverrides.js +386 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/BoostUtils.js +255 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/BoostableMap.js +18 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/Boostables.js +25 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/NamedColors.js +162 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/WGLRenderer.js +1188 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/WGLShader.js +470 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Boost/WGLVBuffer.js +153 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/BoostCanvas.js +509 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/CurrentDateIndication.js +100 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Data.js +2037 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/DataGrouping.js +1134 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Debugger/Debugger.js +101 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Debugger/ErrorMessages.js +106 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/DownloadURL.js +106 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/DragPanes.js +512 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/DraggablePoints.js +2259 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Drilldown.js +1170 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/ExportData.js +997 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Exporting/Exporting.js +1260 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Exporting/ExportingDefaults.js +796 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Exporting/ExportingSymbols.js +73 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/FullScreen.js +240 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/GeoJSON.js +436 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/MarkerClusters.js +1436 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Math3D.js +245 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/NoDataToDisplay.js +189 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/OfflineExporting/OfflineExporting.js +617 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +58 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Oldie/Oldie.js +1182 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Oldie/VMLAxis3D.js +101 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Oldie/VMLRenderer3D.js +47 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/OldiePolyfills.js +167 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/OverlappingDataLabels.js +226 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Pane.js +404 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/ParallelCoordinates.js +464 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/PatternFill.js +580 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Polar.js +740 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/PriceIndication.js +292 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/RangeSelector.js +2175 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/ScrollablePlotArea.js +387 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/SeriesLabel.js +765 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/ChartSonify.js +724 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/Earcon.js +197 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/Instrument.js +606 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/MusicalFrequencies.js +122 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/Options.js +44 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/PointSonify.js +391 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/SeriesSonify.js +474 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/SignalHandler.js +122 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/Sonification.js +97 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/SonificationUtilities.js +150 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/Timeline.js +308 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/TimelineEvent.js +157 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Sonification/TimelinePath.js +311 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Stacking.js +516 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/StaticScale.js +76 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/Avocado.js +67 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/BrandDark.js +293 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/BrandLight.js +259 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/DarkBlue.js +279 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/DarkGreen.js +279 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/DarkUnica.js +249 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/Gray.js +287 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/Grid.js +140 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/GridLight.js +111 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/HighContrastDark.js +239 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/HighContrastLight.js +69 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/SandSignika.js +144 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/Skies.js +131 -0
- package/src/assets/plugins/highcharts/code/es-modules/Extensions/Themes/Sunset.js +66 -0
- package/src/assets/plugins/highcharts/code/es-modules/Gantt/Connection.js +838 -0
- package/src/assets/plugins/highcharts/code/es-modules/Gantt/Pathfinder.js +818 -0
- package/src/assets/plugins/highcharts/code/es-modules/Gantt/PathfinderAlgorithms.js +657 -0
- package/src/assets/plugins/highcharts/code/es-modules/Gantt/Tree.js +110 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/MapNavigation.js +278 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/MapNavigationOptionsDefault.js +264 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/MapPointer.js +83 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/MapSymbols.js +80 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/MapView.js +450 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/MapViewOptionsDefault.js +97 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/Projection.js +436 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/ProjectionDefinition.js +9 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/Projections/EqualEarth.js +42 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/Projections/LambertConformalConic.js +52 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/Projections/Miller.js +16 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/Projections/Orthographic.js +26 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/Projections/ProjectionRegistry.js +19 -0
- package/src/assets/plugins/highcharts/code/es-modules/Maps/Projections/WebMercator.js +24 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Area/AreaSeries.js +563 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Area3DSeries.js +70 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/AreaRange/AreaRangePoint.js +129 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/AreaRange/AreaRangeSeries.js +650 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/AreaSpline/AreaSplineSeries.js +203 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/AreaSplineRange/AreaSplineRangeSeries.js +199 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Bar/BarSeries.js +171 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Bellcurve/BellcurveSeries.js +241 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/BoxPlot/BoxPlotSeries.js +681 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Bubble/BubbleLegendComposition.js +279 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Bubble/BubbleLegendDefaults.js +266 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Bubble/BubbleLegendItem.js +462 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Bubble/BubblePoint.js +77 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Bubble/BubbleSeries.js +676 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Bullet/BulletPoint.js +62 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Bullet/BulletSeries.js +365 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Candlestick/CandlestickSeries.js +333 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/CenteredUtilities.js +128 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/ColorMapMixin.js +84 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Column/ColumnDataLabel.js +109 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Column/ColumnSeries.js +1171 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Column3D/Column3DComposition.js +508 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +308 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/ColumnRange/ColumnRangePoint.js +62 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/ColumnRange/ColumnRangeSeries.js +308 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Cylinder/CylinderComposition.js +274 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Cylinder/CylinderPoint.js +60 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Cylinder/CylinderSeries.js +175 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/DataModifyComposition.js +539 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +100 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +368 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/DerivedComposition.js +137 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/DotPlot/DotPlotSeries.js +158 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/DrawPointComposition.js +111 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Dumbbell/DumbbellPoint.js +104 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Dumbbell/DumbbellSeries.js +464 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/ErrorBar/ErrorBarSeries.js +228 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Flags/FlagsPoint.js +74 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Flags/FlagsSeries.js +614 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Flags/FlagsSymbols.js +90 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Funnel/FunnelSeries.js +517 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Funnel3D/Funnel3DComposition.js +383 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Funnel3D/Funnel3DPoint.js +62 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Funnel3D/Funnel3DSeries.js +447 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Gantt/GanttPoint.js +109 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Gantt/GanttSeries.js +352 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Gauge/GaugePoint.js +66 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Gauge/GaugeSeries.js +568 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/HLC/HLCPoint.js +55 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/HLC/HLCSeries.js +378 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Heatmap/HeatmapPoint.js +144 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Heatmap/HeatmapSeries.js +946 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/HeikinAshi/HeikinAshiPoint.js +60 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +278 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Histogram/HistogramSeries.js +253 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +80 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +368 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Item/ItemPoint.js +59 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Item/ItemSeries.js +505 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Line/LineSeries.js +541 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Lollipop/LollipopPoint.js +60 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Lollipop/LollipopSeries.js +209 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Map/MapPoint.js +136 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Map/MapSeries.js +1100 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/MapBubble/MapBubblePoint.js +73 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/MapBubble/MapBubbleSeries.js +283 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/MapLine/MapLineSeries.js +181 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/MapPoint/MapPointPoint.js +71 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/MapPoint/MapPointSeries.js +309 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Networkgraph/DraggableNodes.js +132 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Networkgraph/Integrations.js +348 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Networkgraph/Layouts.js +555 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Networkgraph/Networkgraph.js +1178 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Networkgraph/QuadTree.js +352 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/NodesComposition.js +229 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/OHLC/OHLCPoint.js +116 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/OHLC/OHLCSeries.js +254 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/OnSeriesComposition.js +168 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Organization/OrganizationPoint.js +71 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Organization/OrganizationSeries.js +594 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/PackedBubble/PackedBubbleComposition.js +172 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/PackedBubble/PackedBubblePoint.js +98 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/PackedBubble/PackedBubbleSeries.js +1284 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/ParetoSeries/ParetoSeries.js +195 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Pie/PieDataLabel.js +447 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Pie/PiePoint.js +270 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Pie/PieSeries.js +1074 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Pie3D/Pie3DComposition.js +27 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Pie3D/Pie3DPoint.js +72 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Pie3D/Pie3DSeries.js +200 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Polygon/PolygonSeries.js +195 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Pyramid/PyramidSeries.js +161 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +172 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Sankey/SankeyPoint.js +97 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Sankey/SankeySeries.js +1195 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Scatter/ScatterSeries.js +306 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Scatter3D/Scatter3DPoint.js +66 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Scatter3D/Scatter3DSeries.js +194 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/SolidGauge/SolidGaugeComposition.js +62 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/SolidGauge/SolidGaugeSeries.js +358 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Spline/SplineSeries.js +279 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Streamgraph/StreamgraphSeries.js +213 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Sunburst/SunburstPoint.js +115 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Sunburst/SunburstSeries.js +907 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Sunburst/SunburstUtilities.js +138 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Tilemap/TilemapComposition.js +61 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Tilemap/TilemapPoint.js +77 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Tilemap/TilemapSeries.js +368 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Tilemap/TilemapShapes.js +275 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Timeline/TimelinePoint.js +168 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Timeline/TimelineSeries.js +552 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/TreeUtilities.js +192 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Treemap/TreemapAlgorithmGroup.js +93 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Treemap/TreemapComposition.js +58 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Treemap/TreemapPoint.js +107 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Treemap/TreemapSeries.js +1473 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Treemap/TreemapUtilities.js +65 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/VariablePie/VariablePieSeries.js +446 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Variwide/VariwideComposition.js +78 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Variwide/VariwidePoint.js +63 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Variwide/VariwideSeries.js +317 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Vector/VectorSeries.js +362 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Venn/VennPoint.js +76 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Venn/VennSeries.js +633 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Venn/VennUtils.js +607 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Waterfall/WaterfallPoint.js +68 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Waterfall/WaterfallSeries.js +743 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Windbarb/WindbarbPoint.js +64 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Windbarb/WindbarbSeries.js +462 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Wordcloud/WordcloudPoint.js +66 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Wordcloud/WordcloudSeries.js +503 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/Wordcloud/WordcloudUtils.js +718 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/XRange/XRangeComposition.js +49 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/XRange/XRangePoint.js +168 -0
- package/src/assets/plugins/highcharts/code/es-modules/Series/XRange/XRangeSeries.js +608 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +243 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/AD/ADIndicator.js +160 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/AO/AOIndicator.js +212 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/APO/APOIndicator.js +167 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/ATR/ATRIndicator.js +162 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +197 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +141 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/ArrayUtilities.js +47 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/BB/BBIndicator.js +241 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/CCI/CCIIndicator.js +154 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/CMF/CMFIndicator.js +243 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/CMO/CMOIndicator.js +166 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +187 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +149 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/DMI/DMIIndicator.js +276 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/DPO/DPOIndicator.js +163 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +179 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/EMA/EMAIndicator.js +154 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/IKH/IKHIndicator.js +682 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +217 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +270 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +282 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +119 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +104 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +104 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/MACD/MACDIndicator.js +402 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/MFI/MFIIndicator.js +198 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/Momentum/MomentumIndicator.js +121 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/MultipleLinesComposition.js +294 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/NATR/NATRIndicator.js +111 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/OBV/OBVIndicator.js +170 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/PC/PCIndicator.js +197 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/PPO/PPOIndicator.js +164 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +280 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +310 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/PivotPoints/PivotPointsPoint.js +78 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/PriceEnvelopes/PriceEnvelopesIndicator.js +240 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/ROC/ROCIndicator.js +176 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/RSI/RSIIndicator.js +171 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/SMA/SMAComposition.js +12 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/SMA/SMAIndicator.js +367 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +134 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +208 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +485 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +208 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +98 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/TrendLine/TrendLineIndicator.js +148 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/VBP/VBPIndicator.js +556 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/VBP/VBPPoint.js +49 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +193 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/WMA/WMAIndicator.js +153 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +135 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/Indicators/Zigzag/ZigzagIndicator.js +228 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/StockToolsBindings.js +2009 -0
- package/src/assets/plugins/highcharts/code/es-modules/Stock/StockToolsGui.js +1816 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/highcharts-3d.src.js +28 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/highcharts-more.src.js +28 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/highcharts.src.js +147 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/accessibility.src.js +28 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/annotations-advanced.src.js +26 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/annotations.src.js +15 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/arrow-symbols.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/boost-canvas.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/boost.src.js +15 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/broken-axis.src.js +15 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/bullet.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/coloraxis.src.js +17 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/current-date-indicator.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/cylinder.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/data.src.js +23 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/datagrouping.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/debugger.src.js +16 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/dependency-wheel.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/dotplot.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/drag-panes.src.js +15 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/draggable-points.src.js +11 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/drilldown.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/dumbbell.src.js +11 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/export-data.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/exporting.src.js +22 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/full-screen.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/funnel.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/funnel3d.src.js +18 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/gantt.src.js +26 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/grid-axis.src.js +17 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/heatmap.src.js +16 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/heikinashi.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/histogram-bellcurve.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/hollowcandlestick.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/item-series.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/lollipop.src.js +11 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/marker-clusters.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/networkgraph.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/no-data-to-display.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/offline-exporting.src.js +20 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/oldie-polyfills.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/oldie.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/organization.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/overlapping-datalabels.src.js +11 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/parallel-coordinates.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/pareto.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/pathfinder.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/pattern-fill.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/price-indicator.src.js +15 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/pyramid3d.src.js +16 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/sankey.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/series-label.src.js +11 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/solid-gauge.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/sonification.src.js +44 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/static-scale.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/stock-tools.src.js +16 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/stock.src.js +33 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/streamgraph.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/sunburst.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/tilemap.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/timeline.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/treegrid.src.js +17 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/treemap.src.js +12 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/variable-pie.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/variwide.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/vector.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/venn.src.js +12 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/windbarb.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/wordcloud.src.js +12 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/modules/xrange.src.js +13 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/avocado.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/brand-dark.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/brand-light.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/dark-blue.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/dark-green.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/dark-unica.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/gray.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/grid-light.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/grid.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/high-contrast-dark.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/high-contrast-light.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/sand-signika.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/skies.src.js +14 -0
- package/src/assets/plugins/highcharts/code/es-modules/masters/themes/sunset.src.js +14 -0
- package/src/assets/plugins/highcharts/code/highcharts-3d.js +105 -0
- package/src/assets/plugins/highcharts/code/highcharts-3d.js.map +1 -0
- package/src/assets/plugins/highcharts/code/highcharts-3d.src.js +5439 -0
- package/src/assets/plugins/highcharts/code/highcharts-more.js +201 -0
- package/src/assets/plugins/highcharts/code/highcharts-more.js.map +1 -0
- package/src/assets/plugins/highcharts/code/highcharts-more.src.js +12004 -0
- package/src/assets/plugins/highcharts/code/highcharts.js +593 -0
- package/src/assets/plugins/highcharts/code/highcharts.js.map +1 -0
- package/src/assets/plugins/highcharts/code/highcharts.src.js +47519 -0
- package/src/assets/plugins/highcharts/code/lib/canvg.js +8 -0
- package/src/assets/plugins/highcharts/code/lib/jspdf.js +283 -0
- package/src/assets/plugins/highcharts/code/lib/jspdf.src.js +21627 -0
- package/src/assets/plugins/highcharts/code/lib/svg2pdf.js +38 -0
- package/src/assets/plugins/highcharts/code/lib/svg2pdf.src.js +4390 -0
- package/src/assets/plugins/highcharts/code/modules/accessibility.js +256 -0
- package/src/assets/plugins/highcharts/code/modules/accessibility.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/accessibility.src.js +11868 -0
- package/src/assets/plugins/highcharts/code/modules/annotations-advanced.js +201 -0
- package/src/assets/plugins/highcharts/code/modules/annotations-advanced.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/annotations-advanced.src.js +9616 -0
- package/src/assets/plugins/highcharts/code/modules/annotations.js +135 -0
- package/src/assets/plugins/highcharts/code/modules/annotations.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/annotations.src.js +6712 -0
- package/src/assets/plugins/highcharts/code/modules/arrow-symbols.js +12 -0
- package/src/assets/plugins/highcharts/code/modules/arrow-symbols.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/arrow-symbols.src.js +202 -0
- package/src/assets/plugins/highcharts/code/modules/boost-canvas.js +25 -0
- package/src/assets/plugins/highcharts/code/modules/boost-canvas.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/boost-canvas.src.js +593 -0
- package/src/assets/plugins/highcharts/code/modules/boost.js +90 -0
- package/src/assets/plugins/highcharts/code/modules/boost.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/boost.src.js +3834 -0
- package/src/assets/plugins/highcharts/code/modules/broken-axis.js +20 -0
- package/src/assets/plugins/highcharts/code/modules/broken-axis.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/broken-axis.src.js +682 -0
- package/src/assets/plugins/highcharts/code/modules/bullet.js +18 -0
- package/src/assets/plugins/highcharts/code/modules/bullet.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/bullet.src.js +489 -0
- package/src/assets/plugins/highcharts/code/modules/coloraxis.js +33 -0
- package/src/assets/plugins/highcharts/code/modules/coloraxis.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/coloraxis.src.js +1484 -0
- package/src/assets/plugins/highcharts/code/modules/current-date-indicator.js +13 -0
- package/src/assets/plugins/highcharts/code/modules/current-date-indicator.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/current-date-indicator.src.js +138 -0
- package/src/assets/plugins/highcharts/code/modules/cylinder.js +20 -0
- package/src/assets/plugins/highcharts/code/modules/cylinder.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/cylinder.src.js +585 -0
- package/src/assets/plugins/highcharts/code/modules/data.js +42 -0
- package/src/assets/plugins/highcharts/code/modules/data.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/data.src.js +2383 -0
- package/src/assets/plugins/highcharts/code/modules/datagrouping.js +29 -0
- package/src/assets/plugins/highcharts/code/modules/datagrouping.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/datagrouping.src.js +1275 -0
- package/src/assets/plugins/highcharts/code/modules/debugger.js +30 -0
- package/src/assets/plugins/highcharts/code/modules/debugger.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/debugger.src.js +250 -0
- package/src/assets/plugins/highcharts/code/modules/dependency-wheel.js +20 -0
- package/src/assets/plugins/highcharts/code/modules/dependency-wheel.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/dependency-wheel.src.js +533 -0
- package/src/assets/plugins/highcharts/code/modules/dotplot.js +15 -0
- package/src/assets/plugins/highcharts/code/modules/dotplot.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/dotplot.src.js +216 -0
- package/src/assets/plugins/highcharts/code/modules/drag-panes.js +20 -0
- package/src/assets/plugins/highcharts/code/modules/drag-panes.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/drag-panes.src.js +586 -0
- package/src/assets/plugins/highcharts/code/modules/draggable-points.js +41 -0
- package/src/assets/plugins/highcharts/code/modules/draggable-points.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/draggable-points.src.js +2405 -0
- package/src/assets/plugins/highcharts/code/modules/drilldown.js +34 -0
- package/src/assets/plugins/highcharts/code/modules/drilldown.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/drilldown.src.js +1266 -0
- package/src/assets/plugins/highcharts/code/modules/dumbbell.js +24 -0
- package/src/assets/plugins/highcharts/code/modules/dumbbell.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/dumbbell.src.js +798 -0
- package/src/assets/plugins/highcharts/code/modules/export-data.js +30 -0
- package/src/assets/plugins/highcharts/code/modules/export-data.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/export-data.src.js +1203 -0
- package/src/assets/plugins/highcharts/code/modules/exporting.js +48 -0
- package/src/assets/plugins/highcharts/code/modules/exporting.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/exporting.src.js +2789 -0
- package/src/assets/plugins/highcharts/code/modules/full-screen.js +17 -0
- package/src/assets/plugins/highcharts/code/modules/full-screen.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/full-screen.src.js +284 -0
- package/src/assets/plugins/highcharts/code/modules/funnel.js +21 -0
- package/src/assets/plugins/highcharts/code/modules/funnel.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/funnel.src.js +777 -0
- package/src/assets/plugins/highcharts/code/modules/funnel3d.js +30 -0
- package/src/assets/plugins/highcharts/code/modules/funnel3d.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/funnel3d.src.js +1004 -0
- package/src/assets/plugins/highcharts/code/modules/gantt.js +226 -0
- package/src/assets/plugins/highcharts/code/modules/gantt.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/gantt.src.js +13485 -0
- package/src/assets/plugins/highcharts/code/modules/grid-axis.js +32 -0
- package/src/assets/plugins/highcharts/code/modules/grid-axis.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/grid-axis.src.js +1160 -0
- package/src/assets/plugins/highcharts/code/modules/heatmap.js +46 -0
- package/src/assets/plugins/highcharts/code/modules/heatmap.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/heatmap.src.js +2726 -0
- package/src/assets/plugins/highcharts/code/modules/heikinashi.js +17 -0
- package/src/assets/plugins/highcharts/code/modules/heikinashi.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/heikinashi.src.js +396 -0
- package/src/assets/plugins/highcharts/code/modules/histogram-bellcurve.js +21 -0
- package/src/assets/plugins/highcharts/code/modules/histogram-bellcurve.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/histogram-bellcurve.src.js +699 -0
- package/src/assets/plugins/highcharts/code/modules/hollowcandlestick.js +18 -0
- package/src/assets/plugins/highcharts/code/modules/hollowcandlestick.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/hollowcandlestick.src.js +500 -0
- package/src/assets/plugins/highcharts/code/modules/item-series.js +21 -0
- package/src/assets/plugins/highcharts/code/modules/item-series.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/item-series.src.js +660 -0
- package/src/assets/plugins/highcharts/code/modules/lollipop.js +14 -0
- package/src/assets/plugins/highcharts/code/modules/lollipop.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/lollipop.src.js +318 -0
- package/src/assets/plugins/highcharts/code/modules/marker-clusters.js +45 -0
- package/src/assets/plugins/highcharts/code/modules/marker-clusters.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/marker-clusters.src.js +1713 -0
- package/src/assets/plugins/highcharts/code/modules/networkgraph.js +58 -0
- package/src/assets/plugins/highcharts/code/modules/networkgraph.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/networkgraph.src.js +2926 -0
- package/src/assets/plugins/highcharts/code/modules/no-data-to-display.js +15 -0
- package/src/assets/plugins/highcharts/code/modules/no-data-to-display.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/no-data-to-display.src.js +231 -0
- package/src/assets/plugins/highcharts/code/modules/offline-exporting.js +27 -0
- package/src/assets/plugins/highcharts/code/modules/offline-exporting.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/offline-exporting.src.js +847 -0
- package/src/assets/plugins/highcharts/code/modules/oldie-polyfills.js +17 -0
- package/src/assets/plugins/highcharts/code/modules/oldie-polyfills.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/oldie-polyfills.src.js +220 -0
- package/src/assets/plugins/highcharts/code/modules/oldie.js +40 -0
- package/src/assets/plugins/highcharts/code/modules/oldie.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/oldie.src.js +1443 -0
- package/src/assets/plugins/highcharts/code/modules/organization.js +22 -0
- package/src/assets/plugins/highcharts/code/modules/organization.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/organization.src.js +736 -0
- package/src/assets/plugins/highcharts/code/modules/overlapping-datalabels.js +9 -0
- package/src/assets/plugins/highcharts/code/modules/overlapping-datalabels.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/overlapping-datalabels.src.js +33 -0
- package/src/assets/plugins/highcharts/code/modules/parallel-coordinates.js +20 -0
- package/src/assets/plugins/highcharts/code/modules/parallel-coordinates.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/parallel-coordinates.src.js +555 -0
- package/src/assets/plugins/highcharts/code/modules/pareto.js +16 -0
- package/src/assets/plugins/highcharts/code/modules/pareto.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/pareto.src.js +382 -0
- package/src/assets/plugins/highcharts/code/modules/pathfinder.js +40 -0
- package/src/assets/plugins/highcharts/code/modules/pathfinder.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/pathfinder.src.js +2693 -0
- package/src/assets/plugins/highcharts/code/modules/pattern-fill.js +24 -0
- package/src/assets/plugins/highcharts/code/modules/pattern-fill.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/pattern-fill.src.js +640 -0
- package/src/assets/plugins/highcharts/code/modules/price-indicator.js +15 -0
- package/src/assets/plugins/highcharts/code/modules/price-indicator.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/price-indicator.src.js +346 -0
- package/src/assets/plugins/highcharts/code/modules/pyramid3d.js +13 -0
- package/src/assets/plugins/highcharts/code/modules/pyramid3d.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/pyramid3d.src.js +211 -0
- package/src/assets/plugins/highcharts/code/modules/sankey.js +38 -0
- package/src/assets/plugins/highcharts/code/modules/sankey.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/sankey.src.js +1868 -0
- package/src/assets/plugins/highcharts/code/modules/series-label.js +24 -0
- package/src/assets/plugins/highcharts/code/modules/series-label.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/series-label.src.js +852 -0
- package/src/assets/plugins/highcharts/code/modules/solid-gauge.js +19 -0
- package/src/assets/plugins/highcharts/code/modules/solid-gauge.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/solid-gauge.src.js +650 -0
- package/src/assets/plugins/highcharts/code/modules/sonification.js +68 -0
- package/src/assets/plugins/highcharts/code/modules/sonification.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/sonification.src.js +3869 -0
- package/src/assets/plugins/highcharts/code/modules/static-scale.js +13 -0
- package/src/assets/plugins/highcharts/code/modules/static-scale.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/static-scale.src.js +117 -0
- package/src/assets/plugins/highcharts/code/modules/stock-tools.js +189 -0
- package/src/assets/plugins/highcharts/code/modules/stock-tools.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/stock-tools.src.js +9592 -0
- package/src/assets/plugins/highcharts/code/modules/stock.js +213 -0
- package/src/assets/plugins/highcharts/code/modules/stock.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/stock.src.js +12237 -0
- package/src/assets/plugins/highcharts/code/modules/streamgraph.js +13 -0
- package/src/assets/plugins/highcharts/code/modules/streamgraph.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/streamgraph.src.js +253 -0
- package/src/assets/plugins/highcharts/code/modules/sunburst.js +68 -0
- package/src/assets/plugins/highcharts/code/modules/sunburst.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/sunburst.src.js +3721 -0
- package/src/assets/plugins/highcharts/code/modules/tilemap.js +26 -0
- package/src/assets/plugins/highcharts/code/modules/tilemap.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/tilemap.src.js +878 -0
- package/src/assets/plugins/highcharts/code/modules/timeline.js +28 -0
- package/src/assets/plugins/highcharts/code/modules/timeline.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/timeline.src.js +815 -0
- package/src/assets/plugins/highcharts/code/modules/treegrid.js +65 -0
- package/src/assets/plugins/highcharts/code/modules/treegrid.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/treegrid.src.js +3294 -0
- package/src/assets/plugins/highcharts/code/modules/treemap.js +49 -0
- package/src/assets/plugins/highcharts/code/modules/treemap.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/treemap.src.js +2416 -0
- package/src/assets/plugins/highcharts/code/modules/variable-pie.js +18 -0
- package/src/assets/plugins/highcharts/code/modules/variable-pie.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/variable-pie.src.js +533 -0
- package/src/assets/plugins/highcharts/code/modules/variwide.js +21 -0
- package/src/assets/plugins/highcharts/code/modules/variwide.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/variwide.src.js +529 -0
- package/src/assets/plugins/highcharts/code/modules/vector.js +16 -0
- package/src/assets/plugins/highcharts/code/modules/vector.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/vector.src.js +409 -0
- package/src/assets/plugins/highcharts/code/modules/venn.js +39 -0
- package/src/assets/plugins/highcharts/code/modules/venn.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/venn.src.js +2095 -0
- package/src/assets/plugins/highcharts/code/modules/windbarb.js +24 -0
- package/src/assets/plugins/highcharts/code/modules/windbarb.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/windbarb.src.js +772 -0
- package/src/assets/plugins/highcharts/code/modules/wordcloud.js +31 -0
- package/src/assets/plugins/highcharts/code/modules/wordcloud.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/wordcloud.src.js +1584 -0
- package/src/assets/plugins/highcharts/code/modules/xrange.js +26 -0
- package/src/assets/plugins/highcharts/code/modules/xrange.js.map +1 -0
- package/src/assets/plugins/highcharts/code/modules/xrange.src.js +940 -0
- package/src/assets/plugins/highcharts/code/themes/avocado.js +10 -0
- package/src/assets/plugins/highcharts/code/themes/avocado.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/avocado.src.js +103 -0
- package/src/assets/plugins/highcharts/code/themes/brand-dark.js +15 -0
- package/src/assets/plugins/highcharts/code/themes/brand-dark.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/brand-dark.src.js +328 -0
- package/src/assets/plugins/highcharts/code/themes/brand-light.js +15 -0
- package/src/assets/plugins/highcharts/code/themes/brand-light.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/brand-light.src.js +294 -0
- package/src/assets/plugins/highcharts/code/themes/dark-blue.js +15 -0
- package/src/assets/plugins/highcharts/code/themes/dark-blue.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/dark-blue.src.js +315 -0
- package/src/assets/plugins/highcharts/code/themes/dark-green.js +15 -0
- package/src/assets/plugins/highcharts/code/themes/dark-green.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/dark-green.src.js +315 -0
- package/src/assets/plugins/highcharts/code/themes/dark-unica.js +14 -0
- package/src/assets/plugins/highcharts/code/themes/dark-unica.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/dark-unica.src.js +284 -0
- package/src/assets/plugins/highcharts/code/themes/gray.js +15 -0
- package/src/assets/plugins/highcharts/code/themes/gray.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/gray.src.js +323 -0
- package/src/assets/plugins/highcharts/code/themes/grid-light.js +11 -0
- package/src/assets/plugins/highcharts/code/themes/grid-light.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/grid-light.src.js +146 -0
- package/src/assets/plugins/highcharts/code/themes/grid.js +12 -0
- package/src/assets/plugins/highcharts/code/themes/grid.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/grid.src.js +176 -0
- package/src/assets/plugins/highcharts/code/themes/high-contrast-dark.js +14 -0
- package/src/assets/plugins/highcharts/code/themes/high-contrast-dark.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/high-contrast-dark.src.js +275 -0
- package/src/assets/plugins/highcharts/code/themes/high-contrast-light.js +10 -0
- package/src/assets/plugins/highcharts/code/themes/high-contrast-light.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/high-contrast-light.src.js +105 -0
- package/src/assets/plugins/highcharts/code/themes/sand-signika.js +12 -0
- package/src/assets/plugins/highcharts/code/themes/sand-signika.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/sand-signika.src.js +179 -0
- package/src/assets/plugins/highcharts/code/themes/skies.js +12 -0
- package/src/assets/plugins/highcharts/code/themes/skies.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/skies.src.js +167 -0
- package/src/assets/plugins/highcharts/code/themes/sunset.js +10 -0
- package/src/assets/plugins/highcharts/code/themes/sunset.js.map +1 -0
- package/src/assets/plugins/highcharts/code/themes/sunset.src.js +102 -0
- package/src/assets/plugins/highcharts/examples/3d-area-multiple/index.html +192 -0
- package/src/assets/plugins/highcharts/examples/3d-column-interactive/index.html +111 -0
- package/src/assets/plugins/highcharts/examples/3d-column-null-values/index.html +118 -0
- package/src/assets/plugins/highcharts/examples/3d-column-stacking-grouping/index.html +144 -0
- package/src/assets/plugins/highcharts/examples/3d-pie/index.html +130 -0
- package/src/assets/plugins/highcharts/examples/3d-pie-donut/index.html +112 -0
- package/src/assets/plugins/highcharts/examples/3d-scatter-draggable/index.html +221 -0
- package/src/assets/plugins/highcharts/examples/accessible-line/index.html +198 -0
- package/src/assets/plugins/highcharts/examples/accessible-pie/index.html +213 -0
- package/src/assets/plugins/highcharts/examples/advanced-accessible/index.html +271 -0
- package/src/assets/plugins/highcharts/examples/annotations/index.html +2170 -0
- package/src/assets/plugins/highcharts/examples/area-basic/index.html +157 -0
- package/src/assets/plugins/highcharts/examples/area-inverted/index.html +135 -0
- package/src/assets/plugins/highcharts/examples/area-missing/index.html +125 -0
- package/src/assets/plugins/highcharts/examples/area-negative/index.html +101 -0
- package/src/assets/plugins/highcharts/examples/area-stacked/index.html +136 -0
- package/src/assets/plugins/highcharts/examples/area-stacked-percent/index.html +141 -0
- package/src/assets/plugins/highcharts/examples/arearange/index.html +132 -0
- package/src/assets/plugins/highcharts/examples/arearange-line/index.html +195 -0
- package/src/assets/plugins/highcharts/examples/areaspline/index.html +137 -0
- package/src/assets/plugins/highcharts/examples/bar-basic/index.html +143 -0
- package/src/assets/plugins/highcharts/examples/bar-negative-stack/index.html +173 -0
- package/src/assets/plugins/highcharts/examples/bar-stacked/index.html +112 -0
- package/src/assets/plugins/highcharts/examples/bellcurve/index.html +133 -0
- package/src/assets/plugins/highcharts/examples/box-plot/index.html +149 -0
- package/src/assets/plugins/highcharts/examples/bubble/index.html +209 -0
- package/src/assets/plugins/highcharts/examples/bubble-3d/index.html +159 -0
- package/src/assets/plugins/highcharts/examples/bullet-graph/index.html +233 -0
- package/src/assets/plugins/highcharts/examples/chart-update/index.html +137 -0
- package/src/assets/plugins/highcharts/examples/column-basic/index.html +144 -0
- package/src/assets/plugins/highcharts/examples/column-comparison/index.html +350 -0
- package/src/assets/plugins/highcharts/examples/column-drilldown/index.html +387 -0
- package/src/assets/plugins/highcharts/examples/column-negative/index.html +101 -0
- package/src/assets/plugins/highcharts/examples/column-parsed/index.html +138 -0
- package/src/assets/plugins/highcharts/examples/column-placement/index.html +160 -0
- package/src/assets/plugins/highcharts/examples/column-pyramid/index.html +117 -0
- package/src/assets/plugins/highcharts/examples/column-rotated-labels/index.html +147 -0
- package/src/assets/plugins/highcharts/examples/column-stacked/index.html +138 -0
- package/src/assets/plugins/highcharts/examples/column-stacked-and-grouped/index.html +133 -0
- package/src/assets/plugins/highcharts/examples/column-stacked-percent/index.html +113 -0
- package/src/assets/plugins/highcharts/examples/columnrange/index.html +145 -0
- package/src/assets/plugins/highcharts/examples/combo/index.html +146 -0
- package/src/assets/plugins/highcharts/examples/combo-dual-axes/index.html +153 -0
- package/src/assets/plugins/highcharts/examples/combo-meteogram/index.html +768 -0
- package/src/assets/plugins/highcharts/examples/combo-multi-axes/index.html +222 -0
- package/src/assets/plugins/highcharts/examples/combo-regression/index.html +110 -0
- package/src/assets/plugins/highcharts/examples/combo-timeline/index.html +592 -0
- package/src/assets/plugins/highcharts/examples/cylinder/index.html +104 -0
- package/src/assets/plugins/highcharts/examples/dependency-wheel/index.html +165 -0
- package/src/assets/plugins/highcharts/examples/dumbbell/index.html +230 -0
- package/src/assets/plugins/highcharts/examples/dynamic-click-to-add/index.html +147 -0
- package/src/assets/plugins/highcharts/examples/dynamic-master-detail/index.html +316 -0
- package/src/assets/plugins/highcharts/examples/dynamic-update/index.html +163 -0
- package/src/assets/plugins/highcharts/examples/error-bar/index.html +154 -0
- package/src/assets/plugins/highcharts/examples/euler-diagram/index.html +119 -0
- package/src/assets/plugins/highcharts/examples/flame/index.html +1324 -0
- package/src/assets/plugins/highcharts/examples/funnel/index.html +131 -0
- package/src/assets/plugins/highcharts/examples/funnel3d/index.html +117 -0
- package/src/assets/plugins/highcharts/examples/gauge-activity/index.html +272 -0
- package/src/assets/plugins/highcharts/examples/gauge-clock/index.html +261 -0
- package/src/assets/plugins/highcharts/examples/gauge-dual/index.html +181 -0
- package/src/assets/plugins/highcharts/examples/gauge-solid/index.html +248 -0
- package/src/assets/plugins/highcharts/examples/gauge-speedometer/index.html +189 -0
- package/src/assets/plugins/highcharts/examples/gauge-vu-meter/index.html +210 -0
- package/src/assets/plugins/highcharts/examples/heatmap/index.html +168 -0
- package/src/assets/plugins/highcharts/examples/heatmap-canvas/index.html +8928 -0
- package/src/assets/plugins/highcharts/examples/histogram/index.html +133 -0
- package/src/assets/plugins/highcharts/examples/honeycomb-usa/index.html +518 -0
- package/src/assets/plugins/highcharts/examples/line-ajax/index.html +206 -0
- package/src/assets/plugins/highcharts/examples/line-basic/index.html +147 -0
- package/src/assets/plugins/highcharts/examples/line-boost/index.html +144 -0
- package/src/assets/plugins/highcharts/examples/line-labels/index.html +108 -0
- package/src/assets/plugins/highcharts/examples/line-log-axis/index.html +106 -0
- package/src/assets/plugins/highcharts/examples/line-time-series/index.html +136 -0
- package/src/assets/plugins/highcharts/examples/live-data/index.html +155 -0
- package/src/assets/plugins/highcharts/examples/lollipop/index.html +161 -0
- package/src/assets/plugins/highcharts/examples/network-graph/index.html +277 -0
- package/src/assets/plugins/highcharts/examples/organization-chart/index.html +224 -0
- package/src/assets/plugins/highcharts/examples/packed-bubble/index.html +588 -0
- package/src/assets/plugins/highcharts/examples/packed-bubble-split/index.html +589 -0
- package/src/assets/plugins/highcharts/examples/parallel-coordinates/index.html +176 -0
- package/src/assets/plugins/highcharts/examples/pareto/index.html +133 -0
- package/src/assets/plugins/highcharts/examples/parliament-chart/index.html +138 -0
- package/src/assets/plugins/highcharts/examples/pie-basic/index.html +141 -0
- package/src/assets/plugins/highcharts/examples/pie-donut/index.html +347 -0
- package/src/assets/plugins/highcharts/examples/pie-drilldown/index.html +418 -0
- package/src/assets/plugins/highcharts/examples/pie-gradient/index.html +133 -0
- package/src/assets/plugins/highcharts/examples/pie-legend/index.html +128 -0
- package/src/assets/plugins/highcharts/examples/pie-monochrome/index.html +139 -0
- package/src/assets/plugins/highcharts/examples/pie-semi-circle/index.html +133 -0
- package/src/assets/plugins/highcharts/examples/polar/index.html +136 -0
- package/src/assets/plugins/highcharts/examples/polar-radial-bar/index.html +169 -0
- package/src/assets/plugins/highcharts/examples/polar-spider/index.html +148 -0
- package/src/assets/plugins/highcharts/examples/polar-wind-rose/index.html +351 -0
- package/src/assets/plugins/highcharts/examples/polygon/index.html +190 -0
- package/src/assets/plugins/highcharts/examples/pyramid/index.html +126 -0
- package/src/assets/plugins/highcharts/examples/pyramid3d/index.html +117 -0
- package/src/assets/plugins/highcharts/examples/renderer/index.html +334 -0
- package/src/assets/plugins/highcharts/examples/responsive/index.html +176 -0
- package/src/assets/plugins/highcharts/examples/sankey-diagram/index.html +145 -0
- package/src/assets/plugins/highcharts/examples/scatter/index.html +246 -0
- package/src/assets/plugins/highcharts/examples/scatter-boost/index.html +142 -0
- package/src/assets/plugins/highcharts/examples/sonification/index.html +331 -0
- package/src/assets/plugins/highcharts/examples/sparkline/index.html +676 -0
- package/src/assets/plugins/highcharts/examples/spline-inverted/index.html +135 -0
- package/src/assets/plugins/highcharts/examples/spline-irregular-time/index.html +255 -0
- package/src/assets/plugins/highcharts/examples/spline-plot-bands/index.html +223 -0
- package/src/assets/plugins/highcharts/examples/spline-symbols/index.html +139 -0
- package/src/assets/plugins/highcharts/examples/streamgraph/index.html +447 -0
- package/src/assets/plugins/highcharts/examples/styled-mode-column/index.html +146 -0
- package/src/assets/plugins/highcharts/examples/styled-mode-pie/index.html +119 -0
- package/src/assets/plugins/highcharts/examples/sunburst/index.html +1520 -0
- package/src/assets/plugins/highcharts/examples/synchronized-charts/index.html +238 -0
- package/src/assets/plugins/highcharts/examples/timeline/index.html +142 -0
- package/src/assets/plugins/highcharts/examples/treemap-coloraxis/index.html +119 -0
- package/src/assets/plugins/highcharts/examples/treemap-large-dataset/index.html +172 -0
- package/src/assets/plugins/highcharts/examples/treemap-with-levels/index.html +151 -0
- package/src/assets/plugins/highcharts/examples/variable-radius-pie/index.html +131 -0
- package/src/assets/plugins/highcharts/examples/variwide/index.html +146 -0
- package/src/assets/plugins/highcharts/examples/vector-plot/index.html +494 -0
- package/src/assets/plugins/highcharts/examples/venn-diagram/index.html +124 -0
- package/src/assets/plugins/highcharts/examples/waterfall/index.html +143 -0
- package/src/assets/plugins/highcharts/examples/windbarb-series/index.html +189 -0
- package/src/assets/plugins/highcharts/examples/wordcloud/index.html +110 -0
- package/src/assets/plugins/highcharts/examples/x-range/index.html +142 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/annotations-hidden.svg +19 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/annotations-visible.svg +20 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/arrow-bottom.svg +9 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/arrow-left.svg +9 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/arrow-line.svg +11 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/arrow-ray.svg +10 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/arrow-right.svg +9 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/arrow-segment.svg +11 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/arrow.svg +13 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/circle.svg +13 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/close.svg +8 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/crooked-3.svg +13 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/crooked-5.svg +11 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/current-price-hide.svg +40 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/current-price-show.svg +41 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/destroy.svg +14 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/drawing.svg +18 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/edit.svg +10 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/elliott-3.svg +59 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/elliott-5.svg +41 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/ellipse.svg +11 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/fibonacci-timezone.svg +16 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/fibonacci.svg +25 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/flag-basic.svg +10 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/flag-diamond.svg +12 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/flag-elipse.svg +13 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/flag-trapeze.svg +14 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/fullscreen.svg +15 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/horizontal-line.svg +8 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/indicators.svg +27 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/label.svg +16 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/line.svg +11 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/linear.svg +11 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/logarithmic.svg +1 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/measure-x.svg +23 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/measure-xy.svg +28 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/measure-y.svg +24 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/panning.svg +17 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/parallel-channel.svg +15 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/pitchfork.svg +13 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/ray.svg +10 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/rectangle.svg +8 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/remove-annotations.svg +15 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/save-chart.svg +12 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/segment.svg +10 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/separator.svg +10 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/series-candlestick.svg +12 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/series-heikin-ashi.svg +1 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/series-hlc.svg +1 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/series-hollow-candlestick.svg +1 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/series-line.svg +11 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/series-ohlc.svg +14 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/text.svg +13 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/time-cycles.svg +35 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/vertical-arrow.svg +7 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/vertical-counter.svg +23 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/vertical-double-arrow.svg +10 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/vertical-label.svg +14 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/vertical-line.svg +8 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/zoom-x.svg +17 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/zoom-xy.svg +13 -0
- package/src/assets/plugins/highcharts/gfx/stock-icons/zoom-y.svg +17 -0
- package/src/assets/plugins/highcharts/gfx/vml-radial-gradient.png +0 -0
- package/src/assets/plugins/highcharts/graphics/color-picker.svg +12 -0
- package/src/assets/plugins/highcharts/graphics/cursor.svg +11 -0
- package/src/assets/plugins/highcharts/graphics/earth.svg +432 -0
- package/src/assets/plugins/highcharts/graphics/feature.svg +13 -0
- package/src/assets/plugins/highcharts/graphics/flag-circle.svg +17 -0
- package/src/assets/plugins/highcharts/graphics/flag-circlepin.svg +15 -0
- package/src/assets/plugins/highcharts/graphics/flag-diamondpin.svg +15 -0
- package/src/assets/plugins/highcharts/graphics/flag-flag.svg +14 -0
- package/src/assets/plugins/highcharts/graphics/flag-rectangle.svg +18 -0
- package/src/assets/plugins/highcharts/graphics/flag-squarepin.svg +16 -0
- package/src/assets/plugins/highcharts/graphics/flag.svg +15 -0
- package/src/assets/plugins/highcharts/graphics/homepage/apple.svg +55 -0
- package/src/assets/plugins/highcharts/graphics/homepage/award.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/cloud.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/earth.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/jupiter.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/mars.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/mercury.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/moon.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/neptune.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p1.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p1.svg +9 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p2.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p2.svg +9 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p3.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p3.svg +9 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p4.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p4.svg +9 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p5.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p5.svg +9 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p6.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/p6.svg +9 -0
- package/src/assets/plugins/highcharts/graphics/homepage/product.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/saturn.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/sun.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/uranus.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/venus.png +0 -0
- package/src/assets/plugins/highcharts/graphics/homepage/version.png +0 -0
- package/src/assets/plugins/highcharts/graphics/rect.svg +12 -0
- package/src/assets/plugins/highcharts/graphics/reset.svg +16 -0
- package/src/assets/plugins/highcharts/graphics/sand.png +0 -0
- package/src/assets/plugins/highcharts/graphics/save-chart-cloud.svg +14 -0
- package/src/assets/plugins/highcharts/graphics/save.svg +14 -0
- package/src/assets/plugins/highcharts/graphics/search.png +0 -0
- package/src/assets/plugins/highcharts/graphics/skies.jpg +0 -0
- package/src/assets/plugins/highcharts/graphics/snow.png +0 -0
- package/src/assets/plugins/highcharts/graphics/sun.png +0 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/blue-flake-big.svg +32 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/blue-star-big.svg +16 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/car-tree.svg +429 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/green-flake-big.svg +119 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/green-star.svg +20 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/hill.svg +193 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/hill2.svg +164 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/horse.svg +1 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/people.svg +2336 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/pines.svg +777 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/pond-skate.svg +1 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/red-flake.svg +30 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/red-house.svg +85 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/red-star-big.svg +36 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/red-star.svg +20 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/santa-b.svg +91 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/santa.svg +91 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/snow-mound.svg +146 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/snow.svg +20788 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/sun-disk.svg +597 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/tree-cluster.svg +2735 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/white-flake-big.svg +99 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/white-flake.big.svg +96 -0
- package/src/assets/plugins/highcharts/graphics/xmas-card-2020/white-star-big.svg +36 -0
- package/src/assets/plugins/highcharts/index.html +133 -0
|
@@ -0,0 +1,3869 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Highcharts JS v9.3.3 (2022-02-01)
|
|
3
|
+
*
|
|
4
|
+
* Sonification module
|
|
5
|
+
*
|
|
6
|
+
* (c) 2012-2021 Øystein Moseng
|
|
7
|
+
*
|
|
8
|
+
* License: www.highcharts.com/license
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
(function (factory) {
|
|
12
|
+
if (typeof module === 'object' && module.exports) {
|
|
13
|
+
factory['default'] = factory;
|
|
14
|
+
module.exports = factory;
|
|
15
|
+
} else if (typeof define === 'function' && define.amd) {
|
|
16
|
+
define('highcharts/modules/sonification', ['highcharts'], function (Highcharts) {
|
|
17
|
+
factory(Highcharts);
|
|
18
|
+
factory.Highcharts = Highcharts;
|
|
19
|
+
return factory;
|
|
20
|
+
});
|
|
21
|
+
} else {
|
|
22
|
+
factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
|
|
23
|
+
}
|
|
24
|
+
}(function (Highcharts) {
|
|
25
|
+
var _modules = Highcharts ? Highcharts._modules : {};
|
|
26
|
+
function _registerModule(obj, path, args, fn) {
|
|
27
|
+
if (!obj.hasOwnProperty(path)) {
|
|
28
|
+
obj[path] = fn.apply(null, args);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
_registerModule(_modules, 'Extensions/Sonification/MusicalFrequencies.js', [], function () {
|
|
32
|
+
/* *
|
|
33
|
+
*
|
|
34
|
+
* (c) 2009-2021 Øystein Moseng
|
|
35
|
+
*
|
|
36
|
+
* List of musical frequencies from C0 to C8.
|
|
37
|
+
*
|
|
38
|
+
* License: www.highcharts.com/license
|
|
39
|
+
*
|
|
40
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
41
|
+
*
|
|
42
|
+
* */
|
|
43
|
+
/* *
|
|
44
|
+
*
|
|
45
|
+
* Constants
|
|
46
|
+
*
|
|
47
|
+
* */
|
|
48
|
+
var frequencies = [
|
|
49
|
+
16.351597831287414,
|
|
50
|
+
17.323914436054505,
|
|
51
|
+
18.354047994837977,
|
|
52
|
+
19.445436482630058,
|
|
53
|
+
20.601722307054366,
|
|
54
|
+
21.826764464562746,
|
|
55
|
+
23.12465141947715,
|
|
56
|
+
24.499714748859326,
|
|
57
|
+
25.956543598746574,
|
|
58
|
+
27.5,
|
|
59
|
+
29.13523509488062,
|
|
60
|
+
30.86770632850775,
|
|
61
|
+
32.70319566257483,
|
|
62
|
+
34.64782887210901,
|
|
63
|
+
36.70809598967594,
|
|
64
|
+
38.890872965260115,
|
|
65
|
+
41.20344461410875,
|
|
66
|
+
43.653528929125486,
|
|
67
|
+
46.2493028389543,
|
|
68
|
+
48.999429497718666,
|
|
69
|
+
51.91308719749314,
|
|
70
|
+
55,
|
|
71
|
+
58.27047018976124,
|
|
72
|
+
61.7354126570155,
|
|
73
|
+
65.40639132514966,
|
|
74
|
+
69.29565774421802,
|
|
75
|
+
73.41619197935188,
|
|
76
|
+
77.78174593052023,
|
|
77
|
+
82.4068892282175,
|
|
78
|
+
87.30705785825097,
|
|
79
|
+
92.4986056779086,
|
|
80
|
+
97.99885899543733,
|
|
81
|
+
103.82617439498628,
|
|
82
|
+
110,
|
|
83
|
+
116.54094037952248,
|
|
84
|
+
123.47082531403103,
|
|
85
|
+
130.8127826502993,
|
|
86
|
+
138.59131548843604,
|
|
87
|
+
146.8323839587038,
|
|
88
|
+
155.56349186104046,
|
|
89
|
+
164.81377845643496,
|
|
90
|
+
174.61411571650194,
|
|
91
|
+
184.9972113558172,
|
|
92
|
+
195.99771799087463,
|
|
93
|
+
207.65234878997256,
|
|
94
|
+
220,
|
|
95
|
+
233.08188075904496,
|
|
96
|
+
246.94165062806206,
|
|
97
|
+
261.6255653005986,
|
|
98
|
+
277.1826309768721,
|
|
99
|
+
293.6647679174076,
|
|
100
|
+
311.1269837220809,
|
|
101
|
+
329.6275569128699,
|
|
102
|
+
349.2282314330039,
|
|
103
|
+
369.9944227116344,
|
|
104
|
+
391.99543598174927,
|
|
105
|
+
415.3046975799451,
|
|
106
|
+
440,
|
|
107
|
+
466.1637615180899,
|
|
108
|
+
493.8833012561241,
|
|
109
|
+
523.2511306011972,
|
|
110
|
+
554.3652619537442,
|
|
111
|
+
587.3295358348151,
|
|
112
|
+
622.2539674441618,
|
|
113
|
+
659.2551138257398,
|
|
114
|
+
698.4564628660078,
|
|
115
|
+
739.9888454232688,
|
|
116
|
+
783.9908719634985,
|
|
117
|
+
830.6093951598903,
|
|
118
|
+
880,
|
|
119
|
+
932.3275230361799,
|
|
120
|
+
987.7666025122483,
|
|
121
|
+
1046.5022612023945,
|
|
122
|
+
1108.7305239074883,
|
|
123
|
+
1174.6590716696303,
|
|
124
|
+
1244.5079348883237,
|
|
125
|
+
1318.5102276514797,
|
|
126
|
+
1396.9129257320155,
|
|
127
|
+
1479.9776908465376,
|
|
128
|
+
1567.981743926997,
|
|
129
|
+
1661.2187903197805,
|
|
130
|
+
1760,
|
|
131
|
+
1864.6550460723597,
|
|
132
|
+
1975.533205024496,
|
|
133
|
+
2093.004522404789,
|
|
134
|
+
2217.4610478149766,
|
|
135
|
+
2349.31814333926,
|
|
136
|
+
2489.0158697766474,
|
|
137
|
+
2637.02045530296,
|
|
138
|
+
2793.825851464031,
|
|
139
|
+
2959.955381693075,
|
|
140
|
+
3135.9634878539946,
|
|
141
|
+
3322.437580639561,
|
|
142
|
+
3520,
|
|
143
|
+
3729.3100921447194,
|
|
144
|
+
3951.066410048992,
|
|
145
|
+
4186.009044809578 // C8
|
|
146
|
+
];
|
|
147
|
+
/* *
|
|
148
|
+
*
|
|
149
|
+
* Default export
|
|
150
|
+
*
|
|
151
|
+
* */
|
|
152
|
+
|
|
153
|
+
return frequencies;
|
|
154
|
+
});
|
|
155
|
+
_registerModule(_modules, 'Extensions/Sonification/SignalHandler.js', [], function () {
|
|
156
|
+
/* *
|
|
157
|
+
*
|
|
158
|
+
* (c) 2009-2021 Øystein Moseng
|
|
159
|
+
*
|
|
160
|
+
* Utility functions for sonification.
|
|
161
|
+
*
|
|
162
|
+
* License: www.highcharts.com/license
|
|
163
|
+
*
|
|
164
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
165
|
+
*
|
|
166
|
+
* */
|
|
167
|
+
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
168
|
+
/* *
|
|
169
|
+
*
|
|
170
|
+
* Class
|
|
171
|
+
*
|
|
172
|
+
* */
|
|
173
|
+
/**
|
|
174
|
+
* The SignalHandler class. Stores signal callbacks (event handlers), and
|
|
175
|
+
* provides an interface to register them, and emit signals. The word "event" is
|
|
176
|
+
* not used to avoid confusion with TimelineEvents.
|
|
177
|
+
*
|
|
178
|
+
* @requires module:modules/sonification
|
|
179
|
+
*
|
|
180
|
+
* @private
|
|
181
|
+
* @class
|
|
182
|
+
* @name Highcharts.SignalHandler
|
|
183
|
+
*
|
|
184
|
+
* @param {Array<string>} supportedSignals
|
|
185
|
+
* List of supported signal names.
|
|
186
|
+
*/
|
|
187
|
+
var SignalHandler = /** @class */ (function () {
|
|
188
|
+
/* *
|
|
189
|
+
*
|
|
190
|
+
* Constructors
|
|
191
|
+
*
|
|
192
|
+
* */
|
|
193
|
+
function SignalHandler(supportedSignals) {
|
|
194
|
+
/* *
|
|
195
|
+
*
|
|
196
|
+
* Properties
|
|
197
|
+
*
|
|
198
|
+
* */
|
|
199
|
+
this.signals = void 0;
|
|
200
|
+
this.supportedSignals = void 0;
|
|
201
|
+
this.init(supportedSignals || []);
|
|
202
|
+
}
|
|
203
|
+
/* *
|
|
204
|
+
*
|
|
205
|
+
* Functions
|
|
206
|
+
*
|
|
207
|
+
* */
|
|
208
|
+
SignalHandler.prototype.init = function (supportedSignals) {
|
|
209
|
+
this.supportedSignals = supportedSignals;
|
|
210
|
+
this.signals = {};
|
|
211
|
+
};
|
|
212
|
+
/**
|
|
213
|
+
* Register a set of signal callbacks with this SignalHandler.
|
|
214
|
+
* Multiple signal callbacks can be registered for the same signal.
|
|
215
|
+
* @private
|
|
216
|
+
* @param {Highcharts.Dictionary<(Function|undefined)>} signals
|
|
217
|
+
* An object that contains a mapping from the signal name to the callbacks.
|
|
218
|
+
* Only supported events are considered.
|
|
219
|
+
*/
|
|
220
|
+
SignalHandler.prototype.registerSignalCallbacks = function (signals) {
|
|
221
|
+
var signalHandler = this;
|
|
222
|
+
signalHandler.supportedSignals.forEach(function (supportedSignal) {
|
|
223
|
+
var signal = signals[supportedSignal];
|
|
224
|
+
if (signal) {
|
|
225
|
+
(signalHandler.signals[supportedSignal] =
|
|
226
|
+
signalHandler.signals[supportedSignal] || []).push(signal);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Clear signal callbacks, optionally by name.
|
|
232
|
+
* @private
|
|
233
|
+
* @param {Array<string>} [signalNames]
|
|
234
|
+
* A list of signal names to clear. If not supplied, all signal callbacks
|
|
235
|
+
* are removed.
|
|
236
|
+
*/
|
|
237
|
+
SignalHandler.prototype.clearSignalCallbacks = function (signalNames) {
|
|
238
|
+
var signalHandler = this;
|
|
239
|
+
if (signalNames) {
|
|
240
|
+
signalNames.forEach(function (signalName) {
|
|
241
|
+
if (signalHandler.signals[signalName]) {
|
|
242
|
+
delete signalHandler.signals[signalName];
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
signalHandler.signals = {};
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
/**
|
|
251
|
+
* Emit a signal. Does nothing if the signal does not exist, or has no
|
|
252
|
+
* registered callbacks.
|
|
253
|
+
* @private
|
|
254
|
+
* @param {string} signalName
|
|
255
|
+
* Name of signal to emit.
|
|
256
|
+
* @param {*} [data]
|
|
257
|
+
* Data to pass to the callback.
|
|
258
|
+
*/
|
|
259
|
+
SignalHandler.prototype.emitSignal = function (signalName, data) {
|
|
260
|
+
var retval;
|
|
261
|
+
if (this.signals[signalName]) {
|
|
262
|
+
this.signals[signalName].forEach(function (handler) {
|
|
263
|
+
var result = handler(data);
|
|
264
|
+
retval = typeof result !== 'undefined' ? result : retval;
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
return retval;
|
|
268
|
+
};
|
|
269
|
+
return SignalHandler;
|
|
270
|
+
}());
|
|
271
|
+
/* *
|
|
272
|
+
*
|
|
273
|
+
* Default Export
|
|
274
|
+
*
|
|
275
|
+
* */
|
|
276
|
+
|
|
277
|
+
return SignalHandler;
|
|
278
|
+
});
|
|
279
|
+
_registerModule(_modules, 'Extensions/Sonification/SonificationUtilities.js', [_modules['Extensions/Sonification/MusicalFrequencies.js'], _modules['Extensions/Sonification/SignalHandler.js'], _modules['Core/Utilities.js']], function (MusicalFrequencies, SignalHandler, U) {
|
|
280
|
+
/* *
|
|
281
|
+
*
|
|
282
|
+
* (c) 2009-2021 Øystein Moseng
|
|
283
|
+
*
|
|
284
|
+
* Utility functions for sonification.
|
|
285
|
+
*
|
|
286
|
+
* License: www.highcharts.com/license
|
|
287
|
+
*
|
|
288
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
289
|
+
*
|
|
290
|
+
* */
|
|
291
|
+
var clamp = U.clamp,
|
|
292
|
+
merge = U.merge;
|
|
293
|
+
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
294
|
+
/* *
|
|
295
|
+
*
|
|
296
|
+
* Constants
|
|
297
|
+
*
|
|
298
|
+
* */
|
|
299
|
+
var SonificationUtilities = {
|
|
300
|
+
// List of musical frequencies from C0 to C8
|
|
301
|
+
musicalFrequencies: MusicalFrequencies,
|
|
302
|
+
// SignalHandler class
|
|
303
|
+
SignalHandler: SignalHandler,
|
|
304
|
+
getExtremesForInstrumentProps: getExtremesForInstrumentProps,
|
|
305
|
+
/**
|
|
306
|
+
* Get a musical scale by specifying the semitones from 1-12 to include.
|
|
307
|
+
* 1: C, 2: C#, 3: D, 4: D#, 5: E, 6: F,
|
|
308
|
+
* 7: F#, 8: G, 9: G#, 10: A, 11: Bb, 12: B
|
|
309
|
+
* @private
|
|
310
|
+
* @param {Array<number>} semitones
|
|
311
|
+
* Array of semitones from 1-12 to include in the scale. Duplicate entries
|
|
312
|
+
* are ignored.
|
|
313
|
+
* @return {Array<number>}
|
|
314
|
+
* Array of frequencies from C0 to C8 that are included in this scale.
|
|
315
|
+
*/
|
|
316
|
+
getMusicalScale: function (semitones) {
|
|
317
|
+
return MusicalFrequencies.filter(function (freq,
|
|
318
|
+
i) {
|
|
319
|
+
var interval = i % 12 + 1;
|
|
320
|
+
return semitones.some(function (allowedInterval) {
|
|
321
|
+
return allowedInterval === interval;
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
},
|
|
325
|
+
/**
|
|
326
|
+
* Calculate the extreme values in a chart for a data prop.
|
|
327
|
+
* @private
|
|
328
|
+
* @param {Highcharts.Chart} chart
|
|
329
|
+
* The chart
|
|
330
|
+
* @param {string} prop
|
|
331
|
+
* The data prop to find extremes for
|
|
332
|
+
* @return {Highcharts.RangeObject}
|
|
333
|
+
* Object with min and max properties
|
|
334
|
+
*/
|
|
335
|
+
calculateDataExtremes: function (chart, prop) {
|
|
336
|
+
return chart.series.reduce(function (extremes, series) {
|
|
337
|
+
// We use cropped points rather than series.data here, to allow
|
|
338
|
+
// users to zoom in for better fidelity.
|
|
339
|
+
series.points.forEach(function (point) {
|
|
340
|
+
var val = typeof point[prop] !== 'undefined' ?
|
|
341
|
+
point[prop] : point.options[prop];
|
|
342
|
+
extremes.min = Math.min(extremes.min, val);
|
|
343
|
+
extremes.max = Math.max(extremes.max, val);
|
|
344
|
+
});
|
|
345
|
+
return extremes;
|
|
346
|
+
}, {
|
|
347
|
+
min: Infinity,
|
|
348
|
+
max: -Infinity
|
|
349
|
+
});
|
|
350
|
+
},
|
|
351
|
+
/**
|
|
352
|
+
* Translate a value on a virtual axis. Creates a new, virtual, axis with a
|
|
353
|
+
* min and max, and maps the relative value onto this axis.
|
|
354
|
+
* @private
|
|
355
|
+
* @param {number} value
|
|
356
|
+
* The relative data value to translate.
|
|
357
|
+
* @param {Highcharts.RangeObject} DataExtremesObject
|
|
358
|
+
* The possible extremes for this value.
|
|
359
|
+
* @param {Object} limits
|
|
360
|
+
* Limits for the virtual axis.
|
|
361
|
+
* @param {boolean} [invert]
|
|
362
|
+
* Invert the virtual axis.
|
|
363
|
+
* @return {number}
|
|
364
|
+
* The value mapped to the virtual axis.
|
|
365
|
+
*/
|
|
366
|
+
virtualAxisTranslate: function (value, dataExtremes, limits, invert) {
|
|
367
|
+
var lenValueAxis = dataExtremes.max - dataExtremes.min,
|
|
368
|
+
lenVirtualAxis = Math.abs(limits.max - limits.min),
|
|
369
|
+
valueDelta = invert ?
|
|
370
|
+
dataExtremes.max - value :
|
|
371
|
+
value - dataExtremes.min,
|
|
372
|
+
virtualValueDelta = lenVirtualAxis * valueDelta / lenValueAxis,
|
|
373
|
+
virtualAxisValue = limits.min + virtualValueDelta;
|
|
374
|
+
return lenValueAxis > 0 ?
|
|
375
|
+
clamp(virtualAxisValue, limits.min, limits.max) :
|
|
376
|
+
limits.min;
|
|
377
|
+
}
|
|
378
|
+
};
|
|
379
|
+
/* *
|
|
380
|
+
*
|
|
381
|
+
* Functions
|
|
382
|
+
*
|
|
383
|
+
* */
|
|
384
|
+
/**
|
|
385
|
+
* Calculate value extremes for used instrument data properties on a chart.
|
|
386
|
+
* @private
|
|
387
|
+
* @param {Highcharts.Chart} chart
|
|
388
|
+
* The chart to calculate extremes from.
|
|
389
|
+
* @param {Array<Highcharts.PointInstrumentObject>} [instruments]
|
|
390
|
+
* Additional instrument definitions to inspect for data props used, in
|
|
391
|
+
* addition to the instruments defined in the chart options.
|
|
392
|
+
* @param {Highcharts.Dictionary<Highcharts.RangeObject>} [dataExtremes]
|
|
393
|
+
* Predefined extremes for each data prop.
|
|
394
|
+
* @return {Highcharts.Dictionary<Highcharts.RangeObject>}
|
|
395
|
+
* New extremes with data properties mapped to min/max objects.
|
|
396
|
+
*/
|
|
397
|
+
function getExtremesForInstrumentProps(chart, instruments, dataExtremes) {
|
|
398
|
+
var defaultInstrumentDef = (chart.options.sonification &&
|
|
399
|
+
chart.options.sonification.defaultInstrumentOptions),
|
|
400
|
+
optionDefToInstrDef = function (optionDef) { return ({
|
|
401
|
+
instrumentMapping: optionDef.mapping
|
|
402
|
+
}); };
|
|
403
|
+
var allInstrumentDefinitions = (instruments || []).slice(0);
|
|
404
|
+
if (defaultInstrumentDef) {
|
|
405
|
+
allInstrumentDefinitions.push(optionDefToInstrDef(defaultInstrumentDef));
|
|
406
|
+
}
|
|
407
|
+
chart.series.forEach(function (series) {
|
|
408
|
+
var instrOptions = (series.options.sonification &&
|
|
409
|
+
series.options.sonification.instruments);
|
|
410
|
+
if (instrOptions) {
|
|
411
|
+
allInstrumentDefinitions = allInstrumentDefinitions.concat(instrOptions.map(optionDefToInstrDef));
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
return (allInstrumentDefinitions).reduce(function (newExtremes, instrumentDefinition) {
|
|
415
|
+
Object.keys(instrumentDefinition.instrumentMapping || {}).forEach(function (instrumentParameter) {
|
|
416
|
+
var value = instrumentDefinition.instrumentMapping[instrumentParameter];
|
|
417
|
+
if (typeof value === 'string' && !newExtremes[value]) {
|
|
418
|
+
// This instrument parameter is mapped to a data prop. If we
|
|
419
|
+
// don't have predefined data extremes, find them.
|
|
420
|
+
newExtremes[value] = SonificationUtilities
|
|
421
|
+
.calculateDataExtremes(chart, value);
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
return newExtremes;
|
|
425
|
+
}, merge(dataExtremes));
|
|
426
|
+
}
|
|
427
|
+
/* *
|
|
428
|
+
*
|
|
429
|
+
* Default export
|
|
430
|
+
*
|
|
431
|
+
* */
|
|
432
|
+
|
|
433
|
+
return SonificationUtilities;
|
|
434
|
+
});
|
|
435
|
+
_registerModule(_modules, 'Extensions/Sonification/Options.js', [], function () {
|
|
436
|
+
/* *
|
|
437
|
+
*
|
|
438
|
+
* (c) 2009-2021 Øystein Moseng
|
|
439
|
+
*
|
|
440
|
+
* Default options for sonification.
|
|
441
|
+
*
|
|
442
|
+
* License: www.highcharts.com/license
|
|
443
|
+
*
|
|
444
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
445
|
+
*
|
|
446
|
+
* */
|
|
447
|
+
/* *
|
|
448
|
+
*
|
|
449
|
+
* Constants
|
|
450
|
+
*
|
|
451
|
+
* */
|
|
452
|
+
// Experimental, disabled by default, not exposed in API
|
|
453
|
+
var options = {
|
|
454
|
+
sonification: {
|
|
455
|
+
enabled: false,
|
|
456
|
+
duration: 2500,
|
|
457
|
+
afterSeriesWait: 700,
|
|
458
|
+
masterVolume: 1,
|
|
459
|
+
order: 'sequential',
|
|
460
|
+
defaultInstrumentOptions: {
|
|
461
|
+
instrument: 'sineMusical',
|
|
462
|
+
// Start at G4 note, end at C6
|
|
463
|
+
minFrequency: 392,
|
|
464
|
+
maxFrequency: 1046,
|
|
465
|
+
mapping: {
|
|
466
|
+
pointPlayTime: 'x',
|
|
467
|
+
duration: 200,
|
|
468
|
+
frequency: 'y'
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
/* *
|
|
474
|
+
*
|
|
475
|
+
* Default Export
|
|
476
|
+
*
|
|
477
|
+
* */
|
|
478
|
+
|
|
479
|
+
return options;
|
|
480
|
+
});
|
|
481
|
+
_registerModule(_modules, 'Extensions/Sonification/Sonification.js', [_modules['Core/DefaultOptions.js'], _modules['Core/Utilities.js'], _modules['Extensions/Sonification/SonificationUtilities.js'], _modules['Extensions/Sonification/Options.js']], function (D, U, SU, sonificationOptions) {
|
|
482
|
+
/* *
|
|
483
|
+
*
|
|
484
|
+
* (c) 2009-2021 Øystein Moseng
|
|
485
|
+
*
|
|
486
|
+
* Sonification module for Highcharts
|
|
487
|
+
*
|
|
488
|
+
* License: www.highcharts.com/license
|
|
489
|
+
*
|
|
490
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
491
|
+
*
|
|
492
|
+
* */
|
|
493
|
+
/* *
|
|
494
|
+
*
|
|
495
|
+
* Imports
|
|
496
|
+
*
|
|
497
|
+
* */
|
|
498
|
+
var defaultOptions = D.defaultOptions;
|
|
499
|
+
var merge = U.merge;
|
|
500
|
+
/* *
|
|
501
|
+
*
|
|
502
|
+
* Functions
|
|
503
|
+
*
|
|
504
|
+
* */
|
|
505
|
+
// Expose on the Highcharts object
|
|
506
|
+
// Add default options
|
|
507
|
+
merge(true, defaultOptions, sonificationOptions);
|
|
508
|
+
var Sonification = {
|
|
509
|
+
fadeOutDuration: 20,
|
|
510
|
+
// Classes and functions
|
|
511
|
+
utilities: SU
|
|
512
|
+
};
|
|
513
|
+
/* *
|
|
514
|
+
*
|
|
515
|
+
* Default Export
|
|
516
|
+
*
|
|
517
|
+
* */
|
|
518
|
+
/**
|
|
519
|
+
* Global classes and objects related to sonification.
|
|
520
|
+
*
|
|
521
|
+
* @requires module:modules/sonification
|
|
522
|
+
*
|
|
523
|
+
* @name Highcharts.sonification
|
|
524
|
+
* @type {Highcharts.SonificationObject}
|
|
525
|
+
*/
|
|
526
|
+
/**
|
|
527
|
+
* Global classes and objects related to sonification.
|
|
528
|
+
*
|
|
529
|
+
* @requires module:modules/sonification
|
|
530
|
+
*
|
|
531
|
+
* @interface Highcharts.SonificationObject
|
|
532
|
+
*/ /**
|
|
533
|
+
* Note fade-out-time in milliseconds. Most notes are faded out quickly by
|
|
534
|
+
* default if there is time. This is to avoid abrupt stops which will cause
|
|
535
|
+
* perceived clicks.
|
|
536
|
+
* @name Highcharts.SonificationObject#fadeOutDuration
|
|
537
|
+
* @type {number}
|
|
538
|
+
*/ /**
|
|
539
|
+
* Utility functions.
|
|
540
|
+
* @name Highcharts.SonificationObject#utilities
|
|
541
|
+
* @private
|
|
542
|
+
* @type {Object}
|
|
543
|
+
*/ /**
|
|
544
|
+
* The Instrument class.
|
|
545
|
+
* @name Highcharts.SonificationObject#Instrument
|
|
546
|
+
* @type {Function}
|
|
547
|
+
*/ /**
|
|
548
|
+
* Predefined instruments, given as an object with a map between the instrument
|
|
549
|
+
* name and the Highcharts.Instrument object.
|
|
550
|
+
* @name Highcharts.SonificationObject#instruments
|
|
551
|
+
* @type {Object}
|
|
552
|
+
*/ /**
|
|
553
|
+
* The Earcon class.
|
|
554
|
+
* @name Highcharts.SonificationObject#Earcon
|
|
555
|
+
* @type {Function}
|
|
556
|
+
*/ /**
|
|
557
|
+
* The TimelineEvent class.
|
|
558
|
+
* @private
|
|
559
|
+
* @name Highcharts.SonificationObject#TimelineEvent
|
|
560
|
+
* @type {Function}
|
|
561
|
+
*/ /**
|
|
562
|
+
* The TimelinePath class.
|
|
563
|
+
* @private
|
|
564
|
+
* @name Highcharts.SonificationObject#TimelinePath
|
|
565
|
+
* @type {Function}
|
|
566
|
+
*/ /**
|
|
567
|
+
* The Timeline class.
|
|
568
|
+
* @private
|
|
569
|
+
* @name Highcharts.SonificationObject#Timeline
|
|
570
|
+
* @type {Function}
|
|
571
|
+
*/
|
|
572
|
+
(''); // detach doclets above
|
|
573
|
+
|
|
574
|
+
return Sonification;
|
|
575
|
+
});
|
|
576
|
+
_registerModule(_modules, 'Extensions/Sonification/Instrument.js', [_modules['Core/Globals.js'], _modules['Extensions/Sonification/Sonification.js'], _modules['Extensions/Sonification/SonificationUtilities.js'], _modules['Core/Utilities.js']], function (H, Sonification, SU, U) {
|
|
577
|
+
/* *
|
|
578
|
+
*
|
|
579
|
+
* (c) 2009-2021 Øystein Moseng
|
|
580
|
+
*
|
|
581
|
+
* Instrument class for sonification module.
|
|
582
|
+
*
|
|
583
|
+
* License: www.highcharts.com/license
|
|
584
|
+
*
|
|
585
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
586
|
+
*
|
|
587
|
+
* */
|
|
588
|
+
/* *
|
|
589
|
+
*
|
|
590
|
+
* Imports
|
|
591
|
+
*
|
|
592
|
+
* */
|
|
593
|
+
var win = H.win;
|
|
594
|
+
var error = U.error,
|
|
595
|
+
merge = U.merge,
|
|
596
|
+
pick = U.pick,
|
|
597
|
+
uniqueKey = U.uniqueKey;
|
|
598
|
+
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
599
|
+
/* *
|
|
600
|
+
*
|
|
601
|
+
* Class
|
|
602
|
+
*
|
|
603
|
+
* */
|
|
604
|
+
/**
|
|
605
|
+
* The Instrument class. Instrument objects represent an instrument capable of
|
|
606
|
+
* playing a certain pitch for a specified duration.
|
|
607
|
+
*
|
|
608
|
+
* @sample highcharts/sonification/instrument/
|
|
609
|
+
* Using Instruments directly
|
|
610
|
+
* @sample highcharts/sonification/instrument-advanced/
|
|
611
|
+
* Using callbacks for instrument parameters
|
|
612
|
+
*
|
|
613
|
+
* @requires module:modules/sonification
|
|
614
|
+
*
|
|
615
|
+
* @class
|
|
616
|
+
* @name Highcharts.Instrument
|
|
617
|
+
*
|
|
618
|
+
* @param {Highcharts.InstrumentOptionsObject} options
|
|
619
|
+
* Options for the instrument instance.
|
|
620
|
+
*/
|
|
621
|
+
var Instrument = /** @class */ (function () {
|
|
622
|
+
/* *
|
|
623
|
+
*
|
|
624
|
+
* Constructor
|
|
625
|
+
*
|
|
626
|
+
* */
|
|
627
|
+
function Instrument(options) {
|
|
628
|
+
this.id = void 0;
|
|
629
|
+
this.masterVolume = void 0;
|
|
630
|
+
this.options = void 0;
|
|
631
|
+
this.playCallbackTimers = void 0;
|
|
632
|
+
this.init(options);
|
|
633
|
+
}
|
|
634
|
+
/* *
|
|
635
|
+
*
|
|
636
|
+
* Functions
|
|
637
|
+
*
|
|
638
|
+
* */
|
|
639
|
+
Instrument.prototype.init = function (options) {
|
|
640
|
+
if (!this.initAudioContext()) {
|
|
641
|
+
error(29);
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
644
|
+
this.options = merge(Instrument.defaultOptions, options);
|
|
645
|
+
this.id = this.options.id = options && options.id || uniqueKey();
|
|
646
|
+
this.masterVolume = this.options.masterVolume || 0;
|
|
647
|
+
// Init the audio nodes
|
|
648
|
+
var ctx = Instrument.audioContext,
|
|
649
|
+
// Note: Destination node can be overridden by setting
|
|
650
|
+
// Highcharts.sonification.Instrument.prototype.destinationNode.
|
|
651
|
+
// This allows for inserting an additional chain of nodes after
|
|
652
|
+
// the default processing.
|
|
653
|
+
destination = this.destinationNode || ctx.destination;
|
|
654
|
+
this.gainNode = ctx.createGain();
|
|
655
|
+
this.setGain(0);
|
|
656
|
+
this.panNode = ctx.createStereoPanner && ctx.createStereoPanner();
|
|
657
|
+
if (this.panNode) {
|
|
658
|
+
this.setPan(0);
|
|
659
|
+
this.gainNode.connect(this.panNode);
|
|
660
|
+
this.panNode.connect(destination);
|
|
661
|
+
}
|
|
662
|
+
else {
|
|
663
|
+
this.gainNode.connect(destination);
|
|
664
|
+
}
|
|
665
|
+
// Oscillator initialization
|
|
666
|
+
if (this.options.type === 'oscillator') {
|
|
667
|
+
this.initOscillator(this.options.oscillator);
|
|
668
|
+
}
|
|
669
|
+
// Init timer list
|
|
670
|
+
this.playCallbackTimers = [];
|
|
671
|
+
};
|
|
672
|
+
/**
|
|
673
|
+
* Return a copy of an instrument. Only one instrument instance can play at
|
|
674
|
+
* a time, so use this to get a new copy of the instrument that can play
|
|
675
|
+
* alongside it. The new instrument copy will receive a new ID unless one is
|
|
676
|
+
* supplied in options.
|
|
677
|
+
*
|
|
678
|
+
* @function Highcharts.Instrument#copy
|
|
679
|
+
*
|
|
680
|
+
* @param {Highcharts.InstrumentOptionsObject} [options]
|
|
681
|
+
* Options to merge in for the copy.
|
|
682
|
+
*
|
|
683
|
+
* @return {Highcharts.Instrument}
|
|
684
|
+
* A new Instrument instance with the same options.
|
|
685
|
+
*/
|
|
686
|
+
Instrument.prototype.copy = function (options) {
|
|
687
|
+
return new Instrument(merge(this.options, { id: null }, options));
|
|
688
|
+
};
|
|
689
|
+
/**
|
|
690
|
+
* Init the audio context, if we do not have one.
|
|
691
|
+
* @private
|
|
692
|
+
* @return {boolean} True if successful, false if not.
|
|
693
|
+
*/
|
|
694
|
+
Instrument.prototype.initAudioContext = function () {
|
|
695
|
+
var Context = win.AudioContext || win.webkitAudioContext,
|
|
696
|
+
hasOldContext = !!Instrument.audioContext;
|
|
697
|
+
if (Context) {
|
|
698
|
+
Instrument.audioContext = Instrument.audioContext || new Context();
|
|
699
|
+
if (!hasOldContext &&
|
|
700
|
+
Instrument.audioContext &&
|
|
701
|
+
Instrument.audioContext.state === 'running') {
|
|
702
|
+
Instrument.audioContext.suspend(); // Pause until we need it
|
|
703
|
+
}
|
|
704
|
+
return !!(Instrument.audioContext &&
|
|
705
|
+
(Instrument.audioContext.createOscillator) &&
|
|
706
|
+
(Instrument.audioContext.createGain));
|
|
707
|
+
}
|
|
708
|
+
return false;
|
|
709
|
+
};
|
|
710
|
+
/**
|
|
711
|
+
* Init an oscillator instrument.
|
|
712
|
+
* @private
|
|
713
|
+
* @param {Highcharts.OscillatorOptionsObject} oscillatorOptions
|
|
714
|
+
* The oscillator options passed to Highcharts.Instrument#init.
|
|
715
|
+
*/
|
|
716
|
+
Instrument.prototype.initOscillator = function (options) {
|
|
717
|
+
var ctx = Instrument.audioContext;
|
|
718
|
+
this.oscillator = ctx.createOscillator();
|
|
719
|
+
this.oscillator.type = options.waveformShape;
|
|
720
|
+
this.oscillator.connect(this.gainNode);
|
|
721
|
+
this.oscillatorStarted = false;
|
|
722
|
+
};
|
|
723
|
+
/**
|
|
724
|
+
* Set pan position.
|
|
725
|
+
* @private
|
|
726
|
+
* @param {number} panValue
|
|
727
|
+
* The pan position to set for the instrument.
|
|
728
|
+
*/
|
|
729
|
+
Instrument.prototype.setPan = function (panValue) {
|
|
730
|
+
if (this.panNode) {
|
|
731
|
+
this.panNode.pan.setValueAtTime(panValue, Instrument.audioContext.currentTime);
|
|
732
|
+
}
|
|
733
|
+
};
|
|
734
|
+
/**
|
|
735
|
+
* Set gain level. A maximum of 1.2 is allowed before we emit a warning. The
|
|
736
|
+
* actual volume is not set above this level regardless of input. This
|
|
737
|
+
* function also handles the Instrument's master volume.
|
|
738
|
+
* @private
|
|
739
|
+
* @param {number} gainValue
|
|
740
|
+
* The gain level to set for the instrument.
|
|
741
|
+
* @param {number} [rampTime=0]
|
|
742
|
+
* Gradually change the gain level, time given in milliseconds.
|
|
743
|
+
*/
|
|
744
|
+
Instrument.prototype.setGain = function (gainValue, rampTime) {
|
|
745
|
+
var gainNode = this.gainNode;
|
|
746
|
+
var newVal = gainValue * this.masterVolume;
|
|
747
|
+
if (gainNode) {
|
|
748
|
+
if (newVal > 1.2) {
|
|
749
|
+
console.warn(// eslint-disable-line
|
|
750
|
+
'Highcharts sonification warning: ' +
|
|
751
|
+
'Volume of instrument set too high.');
|
|
752
|
+
newVal = 1.2;
|
|
753
|
+
}
|
|
754
|
+
if (rampTime) {
|
|
755
|
+
gainNode.gain.setValueAtTime(gainNode.gain.value, Instrument.audioContext.currentTime);
|
|
756
|
+
gainNode.gain.linearRampToValueAtTime(newVal, Instrument.audioContext.currentTime + rampTime / 1000);
|
|
757
|
+
}
|
|
758
|
+
else {
|
|
759
|
+
gainNode.gain.setValueAtTime(newVal, Instrument.audioContext.currentTime);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
};
|
|
763
|
+
/**
|
|
764
|
+
* Cancel ongoing gain ramps.
|
|
765
|
+
* @private
|
|
766
|
+
*/
|
|
767
|
+
Instrument.prototype.cancelGainRamp = function () {
|
|
768
|
+
if (this.gainNode) {
|
|
769
|
+
this.gainNode.gain.cancelScheduledValues(0);
|
|
770
|
+
}
|
|
771
|
+
};
|
|
772
|
+
/**
|
|
773
|
+
* Set the master volume multiplier of the instrument after creation.
|
|
774
|
+
* @param {number} volumeMultiplier
|
|
775
|
+
* The gain level to set for the instrument.
|
|
776
|
+
*/
|
|
777
|
+
Instrument.prototype.setMasterVolume = function (volumeMultiplier) {
|
|
778
|
+
this.masterVolume = volumeMultiplier || 0;
|
|
779
|
+
};
|
|
780
|
+
/**
|
|
781
|
+
* Get the closest valid frequency for this instrument.
|
|
782
|
+
* @private
|
|
783
|
+
* @param {number} frequency
|
|
784
|
+
* The target frequency.
|
|
785
|
+
* @param {number} [min]
|
|
786
|
+
* Minimum frequency to return.
|
|
787
|
+
* @param {number} [max]
|
|
788
|
+
* Maximum frequency to return.
|
|
789
|
+
* @return {number}
|
|
790
|
+
* The closest valid frequency to the input frequency.
|
|
791
|
+
*/
|
|
792
|
+
Instrument.prototype.getValidFrequency = function (frequency, min, max) {
|
|
793
|
+
var validFrequencies = this.options.allowedFrequencies,
|
|
794
|
+
maximum = pick(max,
|
|
795
|
+
Infinity),
|
|
796
|
+
minimum = pick(min, -Infinity);
|
|
797
|
+
return !validFrequencies || !validFrequencies.length ?
|
|
798
|
+
// No valid frequencies for this instrument, return the target
|
|
799
|
+
frequency :
|
|
800
|
+
// Use the valid frequencies and return the closest match
|
|
801
|
+
validFrequencies.reduce(function (acc, cur) {
|
|
802
|
+
// Find the closest allowed value
|
|
803
|
+
return Math.abs(cur - frequency) < Math.abs(acc - frequency) &&
|
|
804
|
+
cur < maximum && cur > minimum ?
|
|
805
|
+
cur : acc;
|
|
806
|
+
}, Infinity);
|
|
807
|
+
};
|
|
808
|
+
/**
|
|
809
|
+
* Clear existing play callback timers.
|
|
810
|
+
* @private
|
|
811
|
+
*/
|
|
812
|
+
Instrument.prototype.clearPlayCallbackTimers = function () {
|
|
813
|
+
this.playCallbackTimers.forEach(function (timer) {
|
|
814
|
+
clearInterval(timer);
|
|
815
|
+
});
|
|
816
|
+
this.playCallbackTimers = [];
|
|
817
|
+
};
|
|
818
|
+
/**
|
|
819
|
+
* Set the current frequency being played by the instrument. The closest
|
|
820
|
+
* valid frequency between the frequency limits is used.
|
|
821
|
+
* @param {number} frequency
|
|
822
|
+
* The frequency to set.
|
|
823
|
+
* @param {Highcharts.Dictionary<number>} [frequencyLimits]
|
|
824
|
+
* Object with maxFrequency and minFrequency
|
|
825
|
+
*/
|
|
826
|
+
Instrument.prototype.setFrequency = function (frequency, frequencyLimits) {
|
|
827
|
+
var limits = frequencyLimits || {},
|
|
828
|
+
validFrequency = this.getValidFrequency(frequency,
|
|
829
|
+
limits.min,
|
|
830
|
+
limits.max);
|
|
831
|
+
if (this.options.type === 'oscillator') {
|
|
832
|
+
this.oscillatorPlay(validFrequency);
|
|
833
|
+
}
|
|
834
|
+
};
|
|
835
|
+
/**
|
|
836
|
+
* Play oscillator instrument.
|
|
837
|
+
* @private
|
|
838
|
+
* @param {number} frequency
|
|
839
|
+
* The frequency to play.
|
|
840
|
+
*/
|
|
841
|
+
Instrument.prototype.oscillatorPlay = function (frequency) {
|
|
842
|
+
if (!this.oscillatorStarted) {
|
|
843
|
+
this.oscillator.start();
|
|
844
|
+
this.oscillatorStarted = true;
|
|
845
|
+
}
|
|
846
|
+
this.oscillator.frequency.setValueAtTime(frequency, Instrument.audioContext.currentTime);
|
|
847
|
+
};
|
|
848
|
+
/**
|
|
849
|
+
* Prepare instrument before playing. Resumes the audio context and starts
|
|
850
|
+
* the oscillator.
|
|
851
|
+
* @private
|
|
852
|
+
*/
|
|
853
|
+
Instrument.prototype.preparePlay = function () {
|
|
854
|
+
this.setGain(0.001);
|
|
855
|
+
if (Instrument.audioContext.state === 'suspended') {
|
|
856
|
+
Instrument.audioContext.resume();
|
|
857
|
+
}
|
|
858
|
+
if (this.oscillator && !this.oscillatorStarted) {
|
|
859
|
+
this.oscillator.start();
|
|
860
|
+
this.oscillatorStarted = true;
|
|
861
|
+
}
|
|
862
|
+
};
|
|
863
|
+
/**
|
|
864
|
+
* Play the instrument according to options.
|
|
865
|
+
*
|
|
866
|
+
* @sample highcharts/sonification/instrument/
|
|
867
|
+
* Using Instruments directly
|
|
868
|
+
* @sample highcharts/sonification/instrument-advanced/
|
|
869
|
+
* Using callbacks for instrument parameters
|
|
870
|
+
*
|
|
871
|
+
* @function Highcharts.Instrument#play
|
|
872
|
+
*
|
|
873
|
+
* @param {Highcharts.InstrumentPlayOptionsObject} options
|
|
874
|
+
* Options for the playback of the instrument.
|
|
875
|
+
*
|
|
876
|
+
*/
|
|
877
|
+
Instrument.prototype.play = function (options) {
|
|
878
|
+
var instrument = this,
|
|
879
|
+
duration = options.duration || 0,
|
|
880
|
+
// Set a value, or if it is a function, set it continously as a
|
|
881
|
+
// timer. Pass in the value/function to set, the setter function,
|
|
882
|
+
// and any additional data to pass through to the setter function.
|
|
883
|
+
setOrStartTimer = function (value,
|
|
884
|
+
setter,
|
|
885
|
+
setterData) {
|
|
886
|
+
var target = options.duration,
|
|
887
|
+
callbackInterval = instrument.options.playCallbackInterval;
|
|
888
|
+
var currentDurationIx = 0;
|
|
889
|
+
if (typeof value === 'function') {
|
|
890
|
+
var timer_1 = setInterval(function () {
|
|
891
|
+
currentDurationIx++;
|
|
892
|
+
var curTime = (currentDurationIx *
|
|
893
|
+
callbackInterval / target);
|
|
894
|
+
if (curTime >= 1) {
|
|
895
|
+
instrument[setter](value(1), setterData);
|
|
896
|
+
clearInterval(timer_1);
|
|
897
|
+
}
|
|
898
|
+
else {
|
|
899
|
+
instrument[setter](value(curTime), setterData);
|
|
900
|
+
}
|
|
901
|
+
}, callbackInterval);
|
|
902
|
+
instrument.playCallbackTimers.push(timer_1);
|
|
903
|
+
}
|
|
904
|
+
else {
|
|
905
|
+
instrument[setter](value, setterData);
|
|
906
|
+
}
|
|
907
|
+
};
|
|
908
|
+
if (!instrument.id) {
|
|
909
|
+
// No audio support - do nothing
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
912
|
+
// If the AudioContext is suspended we have to resume it before playing
|
|
913
|
+
if (Instrument.audioContext.state === 'suspended' ||
|
|
914
|
+
this.oscillator && !this.oscillatorStarted) {
|
|
915
|
+
instrument.preparePlay();
|
|
916
|
+
// Try again in 10ms
|
|
917
|
+
setTimeout(function () {
|
|
918
|
+
instrument.play(options);
|
|
919
|
+
}, 10);
|
|
920
|
+
return;
|
|
921
|
+
}
|
|
922
|
+
// Clear any existing play timers
|
|
923
|
+
if (instrument.playCallbackTimers.length) {
|
|
924
|
+
instrument.clearPlayCallbackTimers();
|
|
925
|
+
}
|
|
926
|
+
// Clear any gain ramps
|
|
927
|
+
instrument.cancelGainRamp();
|
|
928
|
+
// Clear stop oscillator timer
|
|
929
|
+
if (instrument.stopOscillatorTimeout) {
|
|
930
|
+
clearTimeout(instrument.stopOscillatorTimeout);
|
|
931
|
+
delete instrument.stopOscillatorTimeout;
|
|
932
|
+
}
|
|
933
|
+
// If a note is playing right now, clear the stop timeout, and call the
|
|
934
|
+
// callback.
|
|
935
|
+
if (instrument.stopTimeout) {
|
|
936
|
+
clearTimeout(instrument.stopTimeout);
|
|
937
|
+
delete instrument.stopTimeout;
|
|
938
|
+
if (instrument.stopCallback) {
|
|
939
|
+
// We have a callback for the play we are interrupting. We do
|
|
940
|
+
// not allow this callback to start a new play, because that
|
|
941
|
+
// leads to chaos. We pass in 'cancelled' to indicate that this
|
|
942
|
+
// note did not finish, but still stopped.
|
|
943
|
+
instrument._play = instrument.play;
|
|
944
|
+
instrument.play = function () { };
|
|
945
|
+
instrument.stopCallback('cancelled');
|
|
946
|
+
instrument.play = instrument._play;
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
// Stop the note without fadeOut if the duration is too short to hear
|
|
950
|
+
// the note otherwise.
|
|
951
|
+
var immediate = duration < Sonification.fadeOutDuration + 20;
|
|
952
|
+
// Stop the instrument after the duration of the note
|
|
953
|
+
instrument.stopCallback = options.onEnd;
|
|
954
|
+
var onStop = function () {
|
|
955
|
+
delete instrument.stopTimeout;
|
|
956
|
+
instrument.stop(immediate);
|
|
957
|
+
};
|
|
958
|
+
if (duration) {
|
|
959
|
+
instrument.stopTimeout = setTimeout(onStop, immediate ? duration :
|
|
960
|
+
duration - Sonification.fadeOutDuration);
|
|
961
|
+
// Play the note
|
|
962
|
+
setOrStartTimer(options.frequency, 'setFrequency', {
|
|
963
|
+
minFrequency: options.minFrequency,
|
|
964
|
+
maxFrequency: options.maxFrequency
|
|
965
|
+
});
|
|
966
|
+
// Set the volume and panning
|
|
967
|
+
setOrStartTimer(pick(options.volume, 1), 'setGain', 4); // Slight ramp
|
|
968
|
+
setOrStartTimer(pick(options.pan, 0), 'setPan');
|
|
969
|
+
}
|
|
970
|
+
else {
|
|
971
|
+
// No note duration, so just stop immediately
|
|
972
|
+
onStop();
|
|
973
|
+
}
|
|
974
|
+
};
|
|
975
|
+
/**
|
|
976
|
+
* Mute an instrument that is playing. If the instrument is not currently
|
|
977
|
+
* playing, this function does nothing.
|
|
978
|
+
*
|
|
979
|
+
* @function Highcharts.Instrument#mute
|
|
980
|
+
*/
|
|
981
|
+
Instrument.prototype.mute = function () {
|
|
982
|
+
this.setGain(0.0001, Sonification.fadeOutDuration * 0.8);
|
|
983
|
+
};
|
|
984
|
+
/**
|
|
985
|
+
* Stop the instrument playing.
|
|
986
|
+
*
|
|
987
|
+
* @function Highcharts.Instrument#stop
|
|
988
|
+
*
|
|
989
|
+
* @param {boolean} immediately
|
|
990
|
+
* Whether to do the stop immediately or fade out.
|
|
991
|
+
*
|
|
992
|
+
* @param {Function} [onStopped]
|
|
993
|
+
* Callback function to be called when the stop is completed.
|
|
994
|
+
*
|
|
995
|
+
* @param {*} [callbackData]
|
|
996
|
+
* Data to send to the onEnd callback functions.
|
|
997
|
+
*
|
|
998
|
+
*/
|
|
999
|
+
Instrument.prototype.stop = function (immediately, onStopped, callbackData) {
|
|
1000
|
+
var instr = this,
|
|
1001
|
+
reset = function () {
|
|
1002
|
+
// Remove timeout reference
|
|
1003
|
+
if (instr.stopOscillatorTimeout) {
|
|
1004
|
+
delete instr.stopOscillatorTimeout;
|
|
1005
|
+
}
|
|
1006
|
+
if (instr.oscillator &&
|
|
1007
|
+
instr.options.oscillator) {
|
|
1008
|
+
// The oscillator may have stopped in the meantime here, so
|
|
1009
|
+
// allow this function to fail if so.
|
|
1010
|
+
try {
|
|
1011
|
+
instr.oscillator.stop();
|
|
1012
|
+
}
|
|
1013
|
+
catch (e) {
|
|
1014
|
+
// silent error
|
|
1015
|
+
}
|
|
1016
|
+
if (instr.gainNode) {
|
|
1017
|
+
instr.oscillator.disconnect(instr.gainNode);
|
|
1018
|
+
}
|
|
1019
|
+
// We need a new oscillator in order to restart it
|
|
1020
|
+
instr.initOscillator(instr.options.oscillator);
|
|
1021
|
+
}
|
|
1022
|
+
// Done stopping, call the callback from the stop
|
|
1023
|
+
if (onStopped) {
|
|
1024
|
+
onStopped(callbackData);
|
|
1025
|
+
}
|
|
1026
|
+
// Call the callback for the play we finished
|
|
1027
|
+
if (instr.stopCallback) {
|
|
1028
|
+
instr.stopCallback(callbackData);
|
|
1029
|
+
}
|
|
1030
|
+
};
|
|
1031
|
+
// Clear any existing timers
|
|
1032
|
+
if (instr.playCallbackTimers.length) {
|
|
1033
|
+
instr.clearPlayCallbackTimers();
|
|
1034
|
+
}
|
|
1035
|
+
if (instr.stopTimeout) {
|
|
1036
|
+
clearTimeout(instr.stopTimeout);
|
|
1037
|
+
}
|
|
1038
|
+
if (immediately) {
|
|
1039
|
+
instr.setGain(0);
|
|
1040
|
+
reset();
|
|
1041
|
+
}
|
|
1042
|
+
else {
|
|
1043
|
+
instr.mute();
|
|
1044
|
+
// Stop the oscillator after the mute fade-out has finished
|
|
1045
|
+
instr.stopOscillatorTimeout =
|
|
1046
|
+
setTimeout(reset, Sonification.fadeOutDuration + 100);
|
|
1047
|
+
}
|
|
1048
|
+
};
|
|
1049
|
+
// Default options for Instrument constructor
|
|
1050
|
+
Instrument.defaultOptions = {
|
|
1051
|
+
type: 'oscillator',
|
|
1052
|
+
playCallbackInterval: 20,
|
|
1053
|
+
masterVolume: 1,
|
|
1054
|
+
oscillator: {
|
|
1055
|
+
waveformShape: 'sine'
|
|
1056
|
+
}
|
|
1057
|
+
};
|
|
1058
|
+
Instrument.definitions = {};
|
|
1059
|
+
return Instrument;
|
|
1060
|
+
}());
|
|
1061
|
+
/* *
|
|
1062
|
+
*
|
|
1063
|
+
* Class Prototype
|
|
1064
|
+
*
|
|
1065
|
+
* */
|
|
1066
|
+
// ['sine', 'square', 'triangle', 'sawtooth'].forEach(function (
|
|
1067
|
+
['sine', 'square', 'triangle', 'sawtooth'].forEach(function (waveform) {
|
|
1068
|
+
// Add basic instruments
|
|
1069
|
+
Instrument.definitions[waveform] = new Instrument({
|
|
1070
|
+
oscillator: { waveformShape: waveform }
|
|
1071
|
+
});
|
|
1072
|
+
// Add musical instruments
|
|
1073
|
+
Instrument.definitions[waveform + 'Musical'] = new Instrument({
|
|
1074
|
+
allowedFrequencies: SU.musicalFrequencies,
|
|
1075
|
+
oscillator: { waveformShape: waveform }
|
|
1076
|
+
});
|
|
1077
|
+
// Add scaled instruments
|
|
1078
|
+
Instrument.definitions[waveform + 'Major'] = new Instrument({
|
|
1079
|
+
allowedFrequencies: SU.getMusicalScale([1, 3, 5, 6, 8, 10, 12]),
|
|
1080
|
+
oscillator: { waveformShape: waveform }
|
|
1081
|
+
});
|
|
1082
|
+
});
|
|
1083
|
+
/* *
|
|
1084
|
+
*
|
|
1085
|
+
* Default Export
|
|
1086
|
+
*
|
|
1087
|
+
* */
|
|
1088
|
+
/* *
|
|
1089
|
+
*
|
|
1090
|
+
* API Declarations
|
|
1091
|
+
*
|
|
1092
|
+
* */
|
|
1093
|
+
/**
|
|
1094
|
+
* A set of options for the Instrument class.
|
|
1095
|
+
*
|
|
1096
|
+
* @requires module:modules/sonification
|
|
1097
|
+
*
|
|
1098
|
+
* @interface Highcharts.InstrumentOptionsObject
|
|
1099
|
+
*/ /**
|
|
1100
|
+
* The type of instrument. Currently only `oscillator` is supported. Defaults
|
|
1101
|
+
* to `oscillator`.
|
|
1102
|
+
* @name Highcharts.InstrumentOptionsObject#type
|
|
1103
|
+
* @type {string|undefined}
|
|
1104
|
+
*/ /**
|
|
1105
|
+
* The unique ID of the instrument. Generated if not supplied.
|
|
1106
|
+
* @name Highcharts.InstrumentOptionsObject#id
|
|
1107
|
+
* @type {string|undefined}
|
|
1108
|
+
*/ /**
|
|
1109
|
+
* The master volume multiplier to apply to the instrument, regardless of other
|
|
1110
|
+
* volume changes. Defaults to 1.
|
|
1111
|
+
* @name Highcharts.InstrumentPlayOptionsObject#masterVolume
|
|
1112
|
+
* @type {number|undefined}
|
|
1113
|
+
*/ /**
|
|
1114
|
+
* When using functions to determine frequency or other parameters during
|
|
1115
|
+
* playback, this options specifies how often to call the callback functions.
|
|
1116
|
+
* Number given in milliseconds. Defaults to 20.
|
|
1117
|
+
* @name Highcharts.InstrumentOptionsObject#playCallbackInterval
|
|
1118
|
+
* @type {number|undefined}
|
|
1119
|
+
*/ /**
|
|
1120
|
+
* A list of allowed frequencies for this instrument. If trying to play a
|
|
1121
|
+
* frequency not on this list, the closest frequency will be used. Set to `null`
|
|
1122
|
+
* to allow all frequencies to be used. Defaults to `null`.
|
|
1123
|
+
* @name Highcharts.InstrumentOptionsObject#allowedFrequencies
|
|
1124
|
+
* @type {Array<number>|undefined}
|
|
1125
|
+
*/ /**
|
|
1126
|
+
* Options specific to oscillator instruments.
|
|
1127
|
+
* @name Highcharts.InstrumentOptionsObject#oscillator
|
|
1128
|
+
* @type {Highcharts.OscillatorOptionsObject|undefined}
|
|
1129
|
+
*/
|
|
1130
|
+
/**
|
|
1131
|
+
* Options for playing an instrument.
|
|
1132
|
+
*
|
|
1133
|
+
* @requires module:modules/sonification
|
|
1134
|
+
*
|
|
1135
|
+
* @interface Highcharts.InstrumentPlayOptionsObject
|
|
1136
|
+
*/ /**
|
|
1137
|
+
* The frequency of the note to play. Can be a fixed number, or a function. The
|
|
1138
|
+
* function receives one argument: the relative time of the note playing (0
|
|
1139
|
+
* being the start, and 1 being the end of the note). It should return the
|
|
1140
|
+
* frequency number for each point in time. The poll interval of this function
|
|
1141
|
+
* is specified by the Instrument.playCallbackInterval option.
|
|
1142
|
+
* @name Highcharts.InstrumentPlayOptionsObject#frequency
|
|
1143
|
+
* @type {number|Function}
|
|
1144
|
+
*/ /**
|
|
1145
|
+
* The duration of the note in milliseconds.
|
|
1146
|
+
* @name Highcharts.InstrumentPlayOptionsObject#duration
|
|
1147
|
+
* @type {number}
|
|
1148
|
+
*/ /**
|
|
1149
|
+
* The minimum frequency to allow. If the instrument has a set of allowed
|
|
1150
|
+
* frequencies, the closest frequency is used by default. Use this option to
|
|
1151
|
+
* stop too low frequencies from being used.
|
|
1152
|
+
* @name Highcharts.InstrumentPlayOptionsObject#minFrequency
|
|
1153
|
+
* @type {number|undefined}
|
|
1154
|
+
*/ /**
|
|
1155
|
+
* The maximum frequency to allow. If the instrument has a set of allowed
|
|
1156
|
+
* frequencies, the closest frequency is used by default. Use this option to
|
|
1157
|
+
* stop too high frequencies from being used.
|
|
1158
|
+
* @name Highcharts.InstrumentPlayOptionsObject#maxFrequency
|
|
1159
|
+
* @type {number|undefined}
|
|
1160
|
+
*/ /**
|
|
1161
|
+
* The volume of the instrument. Can be a fixed number between 0 and 1, or a
|
|
1162
|
+
* function. The function receives one argument: the relative time of the note
|
|
1163
|
+
* playing (0 being the start, and 1 being the end of the note). It should
|
|
1164
|
+
* return the volume for each point in time. The poll interval of this function
|
|
1165
|
+
* is specified by the Instrument.playCallbackInterval option. Defaults to 1.
|
|
1166
|
+
* @name Highcharts.InstrumentPlayOptionsObject#volume
|
|
1167
|
+
* @type {number|Function|undefined}
|
|
1168
|
+
*/ /**
|
|
1169
|
+
* The panning of the instrument. Can be a fixed number between -1 and 1, or a
|
|
1170
|
+
* function. The function receives one argument: the relative time of the note
|
|
1171
|
+
* playing (0 being the start, and 1 being the end of the note). It should
|
|
1172
|
+
* return the panning value for each point in time. The poll interval of this
|
|
1173
|
+
* function is specified by the Instrument.playCallbackInterval option.
|
|
1174
|
+
* Defaults to 0.
|
|
1175
|
+
* @name Highcharts.InstrumentPlayOptionsObject#pan
|
|
1176
|
+
* @type {number|Function|undefined}
|
|
1177
|
+
*/ /**
|
|
1178
|
+
* Callback function to be called when the play is completed.
|
|
1179
|
+
* @name Highcharts.InstrumentPlayOptionsObject#onEnd
|
|
1180
|
+
* @type {Function|undefined}
|
|
1181
|
+
*/
|
|
1182
|
+
/**
|
|
1183
|
+
* @requires module:modules/sonification
|
|
1184
|
+
*
|
|
1185
|
+
* @interface Highcharts.OscillatorOptionsObject
|
|
1186
|
+
*/ /**
|
|
1187
|
+
* The waveform shape to use for oscillator instruments. Defaults to `sine`.
|
|
1188
|
+
* @name Highcharts.OscillatorOptionsObject#waveformShape
|
|
1189
|
+
* @type {string|undefined}
|
|
1190
|
+
*/
|
|
1191
|
+
(''); // keeps doclets above in JS file
|
|
1192
|
+
|
|
1193
|
+
return Instrument;
|
|
1194
|
+
});
|
|
1195
|
+
_registerModule(_modules, 'Extensions/Sonification/Earcon.js', [_modules['Extensions/Sonification/Instrument.js'], _modules['Core/Utilities.js']], function (Instrument, U) {
|
|
1196
|
+
/* *
|
|
1197
|
+
*
|
|
1198
|
+
* (c) 2009-2021 Øystein Moseng
|
|
1199
|
+
*
|
|
1200
|
+
* Earcons for the sonification module in Highcharts.
|
|
1201
|
+
*
|
|
1202
|
+
* License: www.highcharts.com/license
|
|
1203
|
+
*
|
|
1204
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
1205
|
+
*
|
|
1206
|
+
* */
|
|
1207
|
+
var error = U.error,
|
|
1208
|
+
merge = U.merge,
|
|
1209
|
+
pick = U.pick,
|
|
1210
|
+
uniqueKey = U.uniqueKey;
|
|
1211
|
+
/* *
|
|
1212
|
+
*
|
|
1213
|
+
* Class
|
|
1214
|
+
*
|
|
1215
|
+
* */
|
|
1216
|
+
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
1217
|
+
/**
|
|
1218
|
+
* The Earcon class. Earcon objects represent a certain sound consisting of
|
|
1219
|
+
* one or more instruments playing a predefined sound.
|
|
1220
|
+
*
|
|
1221
|
+
* @sample highcharts/sonification/earcon/
|
|
1222
|
+
* Using earcons directly
|
|
1223
|
+
*
|
|
1224
|
+
* @requires module:modules/sonification
|
|
1225
|
+
*
|
|
1226
|
+
* @class
|
|
1227
|
+
* @name Highcharts.Earcon
|
|
1228
|
+
*
|
|
1229
|
+
* @param {Highcharts.EarconOptionsObject} options
|
|
1230
|
+
* Options for the Earcon instance.
|
|
1231
|
+
*/
|
|
1232
|
+
var Earcon = /** @class */ (function () {
|
|
1233
|
+
/* *
|
|
1234
|
+
*
|
|
1235
|
+
* Constructor
|
|
1236
|
+
*
|
|
1237
|
+
* */
|
|
1238
|
+
function Earcon(options) {
|
|
1239
|
+
/* *
|
|
1240
|
+
*
|
|
1241
|
+
* Properties
|
|
1242
|
+
*
|
|
1243
|
+
* */
|
|
1244
|
+
this.id = void 0;
|
|
1245
|
+
this.instrumentsPlaying = void 0;
|
|
1246
|
+
this.options = void 0;
|
|
1247
|
+
this.init(options || {});
|
|
1248
|
+
}
|
|
1249
|
+
/* *
|
|
1250
|
+
*
|
|
1251
|
+
* Functions
|
|
1252
|
+
*
|
|
1253
|
+
* */
|
|
1254
|
+
Earcon.prototype.init = function (options) {
|
|
1255
|
+
this.options = options;
|
|
1256
|
+
if (!this.options.id) {
|
|
1257
|
+
this.options.id = this.id = uniqueKey();
|
|
1258
|
+
}
|
|
1259
|
+
this.instrumentsPlaying = {};
|
|
1260
|
+
};
|
|
1261
|
+
/**
|
|
1262
|
+
* Play the earcon, optionally overriding init options.
|
|
1263
|
+
*
|
|
1264
|
+
* @sample highcharts/sonification/earcon/
|
|
1265
|
+
* Using earcons directly
|
|
1266
|
+
*
|
|
1267
|
+
* @function Highcharts.Earcon#sonify
|
|
1268
|
+
*
|
|
1269
|
+
* @param {Highcharts.EarconOptionsObject} options
|
|
1270
|
+
* Override existing options.
|
|
1271
|
+
*/
|
|
1272
|
+
Earcon.prototype.sonify = function (options) {
|
|
1273
|
+
var playOptions = merge(this.options,
|
|
1274
|
+
options),
|
|
1275
|
+
// Find master volume/pan settings
|
|
1276
|
+
masterVolume = pick(playOptions.volume, 1),
|
|
1277
|
+
masterPan = playOptions.pan,
|
|
1278
|
+
earcon = this,
|
|
1279
|
+
playOnEnd = options && options.onEnd,
|
|
1280
|
+
masterOnEnd = earcon.options.onEnd;
|
|
1281
|
+
// Go through the instruments and play them
|
|
1282
|
+
playOptions.instruments.forEach(function (opts) {
|
|
1283
|
+
var instrument = typeof opts.instrument === 'string' ?
|
|
1284
|
+
Instrument.definitions[opts.instrument] : opts.instrument,
|
|
1285
|
+
instrumentOpts = merge(opts.playOptions);
|
|
1286
|
+
var instrOnEnd,
|
|
1287
|
+
instrumentCopy,
|
|
1288
|
+
copyId = '';
|
|
1289
|
+
if (instrument && instrument.play) {
|
|
1290
|
+
if (opts.playOptions) {
|
|
1291
|
+
instrumentOpts.pan = pick(masterPan, instrumentOpts.pan);
|
|
1292
|
+
// Handle onEnd
|
|
1293
|
+
instrOnEnd = instrumentOpts.onEnd;
|
|
1294
|
+
instrumentOpts.onEnd = function () {
|
|
1295
|
+
delete earcon.instrumentsPlaying[copyId];
|
|
1296
|
+
if (instrOnEnd) {
|
|
1297
|
+
instrOnEnd.apply(this, arguments);
|
|
1298
|
+
}
|
|
1299
|
+
if (!Object.keys(earcon.instrumentsPlaying).length) {
|
|
1300
|
+
if (playOnEnd) {
|
|
1301
|
+
playOnEnd.apply(this, arguments);
|
|
1302
|
+
}
|
|
1303
|
+
if (masterOnEnd) {
|
|
1304
|
+
masterOnEnd.apply(this, arguments);
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
};
|
|
1308
|
+
// Play the instrument. Use a copy so we can play multiple
|
|
1309
|
+
// at the same time.
|
|
1310
|
+
instrumentCopy = instrument.copy();
|
|
1311
|
+
instrumentCopy.setMasterVolume(masterVolume);
|
|
1312
|
+
copyId = instrumentCopy.id;
|
|
1313
|
+
earcon.instrumentsPlaying[copyId] = instrumentCopy;
|
|
1314
|
+
instrumentCopy.play(instrumentOpts);
|
|
1315
|
+
}
|
|
1316
|
+
}
|
|
1317
|
+
else {
|
|
1318
|
+
error(30);
|
|
1319
|
+
}
|
|
1320
|
+
});
|
|
1321
|
+
};
|
|
1322
|
+
/**
|
|
1323
|
+
* Cancel any current sonification of the Earcon. Calls onEnd functions.
|
|
1324
|
+
*
|
|
1325
|
+
* @function Highcharts.Earcon#cancelSonify
|
|
1326
|
+
*
|
|
1327
|
+
* @param {boolean} [fadeOut=false]
|
|
1328
|
+
* Whether or not to fade out as we stop. If false, the earcon is
|
|
1329
|
+
* cancelled synchronously.
|
|
1330
|
+
*/
|
|
1331
|
+
Earcon.prototype.cancelSonify = function (fadeOut) {
|
|
1332
|
+
var playing = this.instrumentsPlaying,
|
|
1333
|
+
instrIds = playing && Object.keys(playing);
|
|
1334
|
+
if (instrIds && instrIds.length) {
|
|
1335
|
+
instrIds.forEach(function (instr) {
|
|
1336
|
+
playing[instr].stop(!fadeOut, null, 'cancelled');
|
|
1337
|
+
});
|
|
1338
|
+
this.instrumentsPlaying = {};
|
|
1339
|
+
}
|
|
1340
|
+
};
|
|
1341
|
+
return Earcon;
|
|
1342
|
+
}());
|
|
1343
|
+
/* *
|
|
1344
|
+
*
|
|
1345
|
+
* Default Export
|
|
1346
|
+
*
|
|
1347
|
+
* */
|
|
1348
|
+
/* *
|
|
1349
|
+
*
|
|
1350
|
+
* API Declarations
|
|
1351
|
+
*
|
|
1352
|
+
* */
|
|
1353
|
+
/**
|
|
1354
|
+
* Define an Instrument and the options for playing it.
|
|
1355
|
+
*
|
|
1356
|
+
* @requires module:modules/sonification
|
|
1357
|
+
*
|
|
1358
|
+
* @interface Highcharts.EarconInstrument
|
|
1359
|
+
*/ /**
|
|
1360
|
+
* An instrument instance or the name of the instrument in the
|
|
1361
|
+
* Highcharts.sonification.instruments map.
|
|
1362
|
+
* @name Highcharts.EarconInstrument#instrument
|
|
1363
|
+
* @type {string|Highcharts.Instrument}
|
|
1364
|
+
*/ /**
|
|
1365
|
+
* The options to pass to Instrument.play.
|
|
1366
|
+
* @name Highcharts.EarconInstrument#playOptions
|
|
1367
|
+
* @type {Highcharts.InstrumentPlayOptionsObject}
|
|
1368
|
+
*/
|
|
1369
|
+
/**
|
|
1370
|
+
* Options for an Earcon.
|
|
1371
|
+
*
|
|
1372
|
+
* @requires module:modules/sonification
|
|
1373
|
+
*
|
|
1374
|
+
* @interface Highcharts.EarconOptionsObject
|
|
1375
|
+
*/ /**
|
|
1376
|
+
* The instruments and their options defining this earcon.
|
|
1377
|
+
* @name Highcharts.EarconOptionsObject#instruments
|
|
1378
|
+
* @type {Array<Highcharts.EarconInstrument>}
|
|
1379
|
+
*/ /**
|
|
1380
|
+
* The unique ID of the Earcon. Generated if not supplied.
|
|
1381
|
+
* @name Highcharts.EarconOptionsObject#id
|
|
1382
|
+
* @type {string|undefined}
|
|
1383
|
+
*/ /**
|
|
1384
|
+
* Global panning of all instruments. Overrides all panning on individual
|
|
1385
|
+
* instruments. Can be a number between -1 and 1.
|
|
1386
|
+
* @name Highcharts.EarconOptionsObject#pan
|
|
1387
|
+
* @type {number|undefined}
|
|
1388
|
+
*/ /**
|
|
1389
|
+
* Master volume for all instruments. Volume settings on individual instruments
|
|
1390
|
+
* can still be used for relative volume between the instruments. This setting
|
|
1391
|
+
* does not affect volumes set by functions in individual instruments. Can be a
|
|
1392
|
+
* number between 0 and 1. Defaults to 1.
|
|
1393
|
+
* @name Highcharts.EarconOptionsObject#volume
|
|
1394
|
+
* @type {number|undefined}
|
|
1395
|
+
*/ /**
|
|
1396
|
+
* Callback function to call when earcon has finished playing.
|
|
1397
|
+
* @name Highcharts.EarconOptionsObject#onEnd
|
|
1398
|
+
* @type {Function|undefined}
|
|
1399
|
+
*/
|
|
1400
|
+
(''); // detach doclets above
|
|
1401
|
+
|
|
1402
|
+
return Earcon;
|
|
1403
|
+
});
|
|
1404
|
+
_registerModule(_modules, 'Extensions/Sonification/Timeline.js', [_modules['Extensions/Sonification/Sonification.js'], _modules['Core/Utilities.js'], _modules['Extensions/Sonification/SonificationUtilities.js']], function (Sonification, U, SU) {
|
|
1405
|
+
/* *
|
|
1406
|
+
*
|
|
1407
|
+
* (c) 2009-2021 Øystein Moseng
|
|
1408
|
+
*
|
|
1409
|
+
* TimelineEvent class definition.
|
|
1410
|
+
*
|
|
1411
|
+
* License: www.highcharts.com/license
|
|
1412
|
+
*
|
|
1413
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
1414
|
+
*
|
|
1415
|
+
* */
|
|
1416
|
+
var merge = U.merge,
|
|
1417
|
+
splat = U.splat;
|
|
1418
|
+
/**
|
|
1419
|
+
* Internal types.
|
|
1420
|
+
* @private
|
|
1421
|
+
*/
|
|
1422
|
+
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
1423
|
+
/* *
|
|
1424
|
+
*
|
|
1425
|
+
* Class
|
|
1426
|
+
*
|
|
1427
|
+
* */
|
|
1428
|
+
/**
|
|
1429
|
+
* The Timeline class. Represents a sonification timeline with a list of
|
|
1430
|
+
* timeline paths with events to play at certain times relative to each other.
|
|
1431
|
+
*
|
|
1432
|
+
* @requires module:modules/sonification
|
|
1433
|
+
*
|
|
1434
|
+
* @private
|
|
1435
|
+
* @class
|
|
1436
|
+
* @name Highcharts.Timeline
|
|
1437
|
+
*
|
|
1438
|
+
* @param {Highcharts.TimelineOptionsObject} options
|
|
1439
|
+
* Options for the Timeline.
|
|
1440
|
+
*/
|
|
1441
|
+
var Timeline = /** @class */ (function () {
|
|
1442
|
+
/* *
|
|
1443
|
+
*
|
|
1444
|
+
* Constructor
|
|
1445
|
+
*
|
|
1446
|
+
* */
|
|
1447
|
+
function Timeline(options) {
|
|
1448
|
+
/* *
|
|
1449
|
+
*
|
|
1450
|
+
* Properties
|
|
1451
|
+
*
|
|
1452
|
+
* */
|
|
1453
|
+
this.cursor = void 0;
|
|
1454
|
+
this.options = void 0;
|
|
1455
|
+
this.paths = void 0;
|
|
1456
|
+
this.pathsPlaying = void 0;
|
|
1457
|
+
this.signalHandler = void 0;
|
|
1458
|
+
this.init(options || {});
|
|
1459
|
+
}
|
|
1460
|
+
/* *
|
|
1461
|
+
*
|
|
1462
|
+
* Functions
|
|
1463
|
+
*
|
|
1464
|
+
* */
|
|
1465
|
+
Timeline.prototype.init = function (options) {
|
|
1466
|
+
this.options = options;
|
|
1467
|
+
this.cursor = 0;
|
|
1468
|
+
this.paths = options.paths || [];
|
|
1469
|
+
this.pathsPlaying = {};
|
|
1470
|
+
this.signalHandler = new SU.SignalHandler(['playOnEnd', 'masterOnEnd', 'onPathStart', 'onPathEnd']);
|
|
1471
|
+
this.signalHandler.registerSignalCallbacks(merge(options, { masterOnEnd: options.onEnd }));
|
|
1472
|
+
};
|
|
1473
|
+
/**
|
|
1474
|
+
* Play the timeline forwards from cursor.
|
|
1475
|
+
* @private
|
|
1476
|
+
* @param {Function} [onEnd]
|
|
1477
|
+
* Callback to call when play finished. Does not override other onEnd
|
|
1478
|
+
* callbacks.
|
|
1479
|
+
*/
|
|
1480
|
+
Timeline.prototype.play = function (onEnd) {
|
|
1481
|
+
this.pause();
|
|
1482
|
+
this.signalHandler.clearSignalCallbacks(['playOnEnd']);
|
|
1483
|
+
this.signalHandler.registerSignalCallbacks({ playOnEnd: onEnd });
|
|
1484
|
+
this.playPaths(1);
|
|
1485
|
+
};
|
|
1486
|
+
/**
|
|
1487
|
+
* Play the timeline backwards from cursor.
|
|
1488
|
+
* @private
|
|
1489
|
+
* @param {Function} onEnd
|
|
1490
|
+
* Callback to call when play finished. Does not override other onEnd
|
|
1491
|
+
* callbacks.
|
|
1492
|
+
*/
|
|
1493
|
+
Timeline.prototype.rewind = function (onEnd) {
|
|
1494
|
+
this.pause();
|
|
1495
|
+
this.signalHandler.clearSignalCallbacks(['playOnEnd']);
|
|
1496
|
+
this.signalHandler.registerSignalCallbacks({ playOnEnd: onEnd });
|
|
1497
|
+
this.playPaths(-1);
|
|
1498
|
+
};
|
|
1499
|
+
/**
|
|
1500
|
+
* Play the timeline in the specified direction.
|
|
1501
|
+
* @private
|
|
1502
|
+
* @param {number} direction
|
|
1503
|
+
* Direction to play in. 1 for forwards, -1 for backwards.
|
|
1504
|
+
*/
|
|
1505
|
+
Timeline.prototype.playPaths = function (direction) {
|
|
1506
|
+
var timeline = this,
|
|
1507
|
+
signalHandler = timeline.signalHandler;
|
|
1508
|
+
if (!timeline.paths.length) {
|
|
1509
|
+
var emptySignal = {
|
|
1510
|
+
cancelled: false
|
|
1511
|
+
};
|
|
1512
|
+
signalHandler.emitSignal('playOnEnd', emptySignal);
|
|
1513
|
+
signalHandler.emitSignal('masterOnEnd', emptySignal);
|
|
1514
|
+
return;
|
|
1515
|
+
}
|
|
1516
|
+
var curPaths = splat(this.paths[this.cursor]),
|
|
1517
|
+
nextPaths = this.paths[this.cursor + direction],
|
|
1518
|
+
// Play a path
|
|
1519
|
+
playPath = function (path) {
|
|
1520
|
+
// Emit signal and set playing state
|
|
1521
|
+
signalHandler.emitSignal('onPathStart',
|
|
1522
|
+
path);
|
|
1523
|
+
timeline.pathsPlaying[path.id] = path;
|
|
1524
|
+
// Do the play
|
|
1525
|
+
path[direction > 0 ? 'play' : 'rewind'](function (callbackData) {
|
|
1526
|
+
// Play ended callback
|
|
1527
|
+
// Data to pass to signal callbacks
|
|
1528
|
+
var cancelled = callbackData && callbackData.cancelled,
|
|
1529
|
+
signalData = {
|
|
1530
|
+
path: path,
|
|
1531
|
+
cancelled: cancelled
|
|
1532
|
+
};
|
|
1533
|
+
// Clear state and send signal
|
|
1534
|
+
delete timeline.pathsPlaying[path.id];
|
|
1535
|
+
signalHandler.emitSignal('onPathEnd', signalData);
|
|
1536
|
+
// Handle next paths
|
|
1537
|
+
var pathsEnded = 0;
|
|
1538
|
+
pathsEnded++;
|
|
1539
|
+
if (pathsEnded >= curPaths.length) {
|
|
1540
|
+
// We finished all of the current paths for cursor.
|
|
1541
|
+
if (nextPaths && !cancelled) {
|
|
1542
|
+
// We have more paths, move cursor along
|
|
1543
|
+
timeline.cursor += direction;
|
|
1544
|
+
// Reset upcoming path cursors before playing
|
|
1545
|
+
splat(nextPaths).forEach(function (nextPath) {
|
|
1546
|
+
nextPath[direction > 0 ?
|
|
1547
|
+
'resetCursor' : 'resetCursorEnd']();
|
|
1548
|
+
});
|
|
1549
|
+
// Play next
|
|
1550
|
+
timeline.playPaths(direction);
|
|
1551
|
+
}
|
|
1552
|
+
else {
|
|
1553
|
+
// If it is the last path in this direction,
|
|
1554
|
+
// call onEnd
|
|
1555
|
+
signalHandler.emitSignal('playOnEnd', signalData);
|
|
1556
|
+
signalHandler.emitSignal('masterOnEnd', signalData);
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
});
|
|
1560
|
+
};
|
|
1561
|
+
// Go through the paths under cursor and play them
|
|
1562
|
+
curPaths.forEach(function (path) {
|
|
1563
|
+
if (path) {
|
|
1564
|
+
// Store reference to timeline
|
|
1565
|
+
path.timeline = timeline;
|
|
1566
|
+
// Leave a timeout to let notes fade out before next play
|
|
1567
|
+
setTimeout(function () {
|
|
1568
|
+
playPath(path);
|
|
1569
|
+
}, Sonification.fadeOutDuration);
|
|
1570
|
+
}
|
|
1571
|
+
});
|
|
1572
|
+
};
|
|
1573
|
+
/**
|
|
1574
|
+
* Stop the playing of the timeline. Cancels all current sounds, but does
|
|
1575
|
+
* not affect the cursor.
|
|
1576
|
+
* @private
|
|
1577
|
+
* @param {boolean} [fadeOut=false]
|
|
1578
|
+
* Whether or not to fade out as we stop. If false, the timeline is
|
|
1579
|
+
* cancelled synchronously.
|
|
1580
|
+
*/
|
|
1581
|
+
Timeline.prototype.pause = function (fadeOut) {
|
|
1582
|
+
var timeline = this;
|
|
1583
|
+
// Cancel currently playing events
|
|
1584
|
+
Object.keys(timeline.pathsPlaying).forEach(function (id) {
|
|
1585
|
+
if (timeline.pathsPlaying[id]) {
|
|
1586
|
+
timeline.pathsPlaying[id].pause(fadeOut);
|
|
1587
|
+
}
|
|
1588
|
+
});
|
|
1589
|
+
timeline.pathsPlaying = {};
|
|
1590
|
+
};
|
|
1591
|
+
/**
|
|
1592
|
+
* Reset the cursor to the beginning of the timeline.
|
|
1593
|
+
* @private
|
|
1594
|
+
*/
|
|
1595
|
+
Timeline.prototype.resetCursor = function () {
|
|
1596
|
+
this.paths.forEach(function (paths) {
|
|
1597
|
+
splat(paths).forEach(function (path) {
|
|
1598
|
+
path.resetCursor();
|
|
1599
|
+
});
|
|
1600
|
+
});
|
|
1601
|
+
this.cursor = 0;
|
|
1602
|
+
};
|
|
1603
|
+
/**
|
|
1604
|
+
* Reset the cursor to the end of the timeline.
|
|
1605
|
+
* @private
|
|
1606
|
+
*/
|
|
1607
|
+
Timeline.prototype.resetCursorEnd = function () {
|
|
1608
|
+
this.paths.forEach(function (paths) {
|
|
1609
|
+
splat(paths).forEach(function (path) {
|
|
1610
|
+
path.resetCursorEnd();
|
|
1611
|
+
});
|
|
1612
|
+
});
|
|
1613
|
+
this.cursor = this.paths.length - 1;
|
|
1614
|
+
};
|
|
1615
|
+
/**
|
|
1616
|
+
* Set the current TimelineEvent under the cursor. If multiple paths are
|
|
1617
|
+
* being played at the same time, this function only affects a single path
|
|
1618
|
+
* (the one that contains the eventId that is passed in).
|
|
1619
|
+
* @private
|
|
1620
|
+
* @param {string} eventId
|
|
1621
|
+
* The ID of the timeline event to set as current.
|
|
1622
|
+
* @return {boolean}
|
|
1623
|
+
* True if the cursor was set, false if no TimelineEvent was found for
|
|
1624
|
+
* this ID.
|
|
1625
|
+
*/
|
|
1626
|
+
Timeline.prototype.setCursor = function (eventId) {
|
|
1627
|
+
return this.paths.some(function (paths) {
|
|
1628
|
+
return splat(paths).some(function (path) {
|
|
1629
|
+
return path.setCursor(eventId);
|
|
1630
|
+
});
|
|
1631
|
+
});
|
|
1632
|
+
};
|
|
1633
|
+
/**
|
|
1634
|
+
* Get the current TimelineEvents under the cursors. This function will
|
|
1635
|
+
* return the event under the cursor for each currently playing path, as an
|
|
1636
|
+
* object where the path ID is mapped to the TimelineEvent under that
|
|
1637
|
+
* path's cursor.
|
|
1638
|
+
* @private
|
|
1639
|
+
* @return {Highcharts.Dictionary<Highcharts.TimelineEvent>}
|
|
1640
|
+
* The TimelineEvents under each path's cursors.
|
|
1641
|
+
*/
|
|
1642
|
+
Timeline.prototype.getCursor = function () {
|
|
1643
|
+
return this.getCurrentPlayingPaths().reduce(function (acc, cur) {
|
|
1644
|
+
acc[cur.id] = cur.getCursor();
|
|
1645
|
+
return acc;
|
|
1646
|
+
}, {});
|
|
1647
|
+
};
|
|
1648
|
+
/**
|
|
1649
|
+
* Check if timeline is reset or at start.
|
|
1650
|
+
* @private
|
|
1651
|
+
* @return {boolean}
|
|
1652
|
+
* True if timeline is at the beginning.
|
|
1653
|
+
*/
|
|
1654
|
+
Timeline.prototype.atStart = function () {
|
|
1655
|
+
if (this.cursor) {
|
|
1656
|
+
return false;
|
|
1657
|
+
}
|
|
1658
|
+
return !splat(this.paths[0]).some(function (path) {
|
|
1659
|
+
return path.cursor;
|
|
1660
|
+
});
|
|
1661
|
+
};
|
|
1662
|
+
/**
|
|
1663
|
+
* Get the current TimelinePaths being played.
|
|
1664
|
+
* @private
|
|
1665
|
+
* @return {Array<Highcharts.TimelinePath>}
|
|
1666
|
+
* The TimelinePaths currently being played.
|
|
1667
|
+
*/
|
|
1668
|
+
Timeline.prototype.getCurrentPlayingPaths = function () {
|
|
1669
|
+
if (!this.paths.length) {
|
|
1670
|
+
return [];
|
|
1671
|
+
}
|
|
1672
|
+
return splat(this.paths[this.cursor]);
|
|
1673
|
+
};
|
|
1674
|
+
return Timeline;
|
|
1675
|
+
}());
|
|
1676
|
+
/* *
|
|
1677
|
+
*
|
|
1678
|
+
* Default Export
|
|
1679
|
+
*
|
|
1680
|
+
* */
|
|
1681
|
+
/* *
|
|
1682
|
+
*
|
|
1683
|
+
* API Declarations
|
|
1684
|
+
*
|
|
1685
|
+
* */
|
|
1686
|
+
/**
|
|
1687
|
+
* A set of options for the Timeline class.
|
|
1688
|
+
*
|
|
1689
|
+
* @requires module:modules/sonification
|
|
1690
|
+
*
|
|
1691
|
+
* @private
|
|
1692
|
+
* @interface Highcharts.TimelineOptionsObject
|
|
1693
|
+
*/ /**
|
|
1694
|
+
* List of TimelinePaths to play. Multiple paths can be grouped together and
|
|
1695
|
+
* played simultaneously by supplying an array of paths in place of a single
|
|
1696
|
+
* path.
|
|
1697
|
+
* @name Highcharts.TimelineOptionsObject#paths
|
|
1698
|
+
* @type {Array<(Highcharts.TimelinePath|Array<Highcharts.TimelinePath>)>}
|
|
1699
|
+
*/ /**
|
|
1700
|
+
* Callback function to call before a path plays.
|
|
1701
|
+
* @name Highcharts.TimelineOptionsObject#onPathStart
|
|
1702
|
+
* @type {Function|undefined}
|
|
1703
|
+
*/ /**
|
|
1704
|
+
* Callback function to call after a path has stopped playing.
|
|
1705
|
+
* @name Highcharts.TimelineOptionsObject#onPathEnd
|
|
1706
|
+
* @type {Function|undefined}
|
|
1707
|
+
*/ /**
|
|
1708
|
+
* Callback called when the whole path is finished.
|
|
1709
|
+
* @name Highcharts.TimelineOptionsObject#onEnd
|
|
1710
|
+
* @type {Function|undefined}
|
|
1711
|
+
*/
|
|
1712
|
+
(''); // detach doclets above
|
|
1713
|
+
|
|
1714
|
+
return Timeline;
|
|
1715
|
+
});
|
|
1716
|
+
_registerModule(_modules, 'Extensions/Sonification/TimelineEvent.js', [_modules['Core/Utilities.js']], function (U) {
|
|
1717
|
+
/* *
|
|
1718
|
+
*
|
|
1719
|
+
* (c) 2009-2021 Øystein Moseng
|
|
1720
|
+
*
|
|
1721
|
+
* TimelineEvent class definition.
|
|
1722
|
+
*
|
|
1723
|
+
* License: www.highcharts.com/license
|
|
1724
|
+
*
|
|
1725
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
1726
|
+
*
|
|
1727
|
+
* */
|
|
1728
|
+
var merge = U.merge,
|
|
1729
|
+
uniqueKey = U.uniqueKey;
|
|
1730
|
+
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
1731
|
+
/* *
|
|
1732
|
+
*
|
|
1733
|
+
* Class
|
|
1734
|
+
*
|
|
1735
|
+
* */
|
|
1736
|
+
/**
|
|
1737
|
+
* The TimelineEvent class. Represents a sound event on a timeline.
|
|
1738
|
+
*
|
|
1739
|
+
* @requires module:modules/sonification
|
|
1740
|
+
*
|
|
1741
|
+
* @private
|
|
1742
|
+
* @class
|
|
1743
|
+
* @name Highcharts.TimelineEvent
|
|
1744
|
+
*
|
|
1745
|
+
* @param {Highcharts.TimelineEventOptionsObject} options
|
|
1746
|
+
* Options for the TimelineEvent.
|
|
1747
|
+
*/
|
|
1748
|
+
var TimelineEvent = /** @class */ (function () {
|
|
1749
|
+
/* *
|
|
1750
|
+
*
|
|
1751
|
+
* Constructor
|
|
1752
|
+
*
|
|
1753
|
+
* */
|
|
1754
|
+
function TimelineEvent(options) {
|
|
1755
|
+
/* *
|
|
1756
|
+
*
|
|
1757
|
+
* Properties
|
|
1758
|
+
*
|
|
1759
|
+
* */
|
|
1760
|
+
this.id = void 0;
|
|
1761
|
+
this.options = void 0;
|
|
1762
|
+
this.time = void 0;
|
|
1763
|
+
this.init(options);
|
|
1764
|
+
}
|
|
1765
|
+
/* *
|
|
1766
|
+
*
|
|
1767
|
+
* Functions
|
|
1768
|
+
*
|
|
1769
|
+
* */
|
|
1770
|
+
TimelineEvent.prototype.init = function (options) {
|
|
1771
|
+
this.options = options;
|
|
1772
|
+
this.time = options.time || 0;
|
|
1773
|
+
this.id = this.options.id = options.id || uniqueKey();
|
|
1774
|
+
};
|
|
1775
|
+
/**
|
|
1776
|
+
* Play the event. Does not take the TimelineEvent.time option into account,
|
|
1777
|
+
* and plays the event immediately.
|
|
1778
|
+
*
|
|
1779
|
+
* @function Highcharts.TimelineEvent#play
|
|
1780
|
+
*
|
|
1781
|
+
* @param {Highcharts.TimelineEventOptionsObject} [options]
|
|
1782
|
+
* Options to pass in to the eventObject when playing it.
|
|
1783
|
+
*
|
|
1784
|
+
*/
|
|
1785
|
+
TimelineEvent.prototype.play = function (options) {
|
|
1786
|
+
var eventObject = this.options.eventObject,
|
|
1787
|
+
masterOnEnd = this.options.onEnd,
|
|
1788
|
+
playOnEnd = options && options.onEnd,
|
|
1789
|
+
playOptionsOnEnd = this.options.playOptions &&
|
|
1790
|
+
this.options.playOptions.onEnd,
|
|
1791
|
+
playOptions = merge(this.options.playOptions,
|
|
1792
|
+
options);
|
|
1793
|
+
if (eventObject && eventObject.sonify) {
|
|
1794
|
+
// If we have multiple onEnds defined, use all
|
|
1795
|
+
playOptions.onEnd = masterOnEnd || playOnEnd || playOptionsOnEnd ?
|
|
1796
|
+
function () {
|
|
1797
|
+
var args = arguments;
|
|
1798
|
+
[masterOnEnd, playOnEnd, playOptionsOnEnd].forEach(function (onEnd) {
|
|
1799
|
+
if (onEnd) {
|
|
1800
|
+
onEnd.apply(this, args);
|
|
1801
|
+
}
|
|
1802
|
+
});
|
|
1803
|
+
} : void 0;
|
|
1804
|
+
eventObject.sonify(playOptions);
|
|
1805
|
+
}
|
|
1806
|
+
else {
|
|
1807
|
+
if (playOnEnd) {
|
|
1808
|
+
playOnEnd();
|
|
1809
|
+
}
|
|
1810
|
+
if (masterOnEnd) {
|
|
1811
|
+
masterOnEnd();
|
|
1812
|
+
}
|
|
1813
|
+
}
|
|
1814
|
+
};
|
|
1815
|
+
/**
|
|
1816
|
+
* Cancel the sonification of this event. Does nothing if the event is not
|
|
1817
|
+
* currently sonifying.
|
|
1818
|
+
*
|
|
1819
|
+
* @function Highcharts.TimelineEvent#cancel
|
|
1820
|
+
*
|
|
1821
|
+
* @param {boolean} [fadeOut=false]
|
|
1822
|
+
* Whether or not to fade out as we stop. If false, the event is
|
|
1823
|
+
* cancelled synchronously.
|
|
1824
|
+
*/
|
|
1825
|
+
TimelineEvent.prototype.cancel = function (fadeOut) {
|
|
1826
|
+
var eventObject = this.options.eventObject;
|
|
1827
|
+
if (eventObject) {
|
|
1828
|
+
eventObject.cancelSonify(fadeOut);
|
|
1829
|
+
}
|
|
1830
|
+
};
|
|
1831
|
+
return TimelineEvent;
|
|
1832
|
+
}());
|
|
1833
|
+
/* *
|
|
1834
|
+
*
|
|
1835
|
+
* Default export
|
|
1836
|
+
*
|
|
1837
|
+
* */
|
|
1838
|
+
/* *
|
|
1839
|
+
*
|
|
1840
|
+
* API Declarations
|
|
1841
|
+
*
|
|
1842
|
+
* */
|
|
1843
|
+
/**
|
|
1844
|
+
* A set of options for the TimelineEvent class.
|
|
1845
|
+
*
|
|
1846
|
+
* @requires module:modules/sonification
|
|
1847
|
+
*
|
|
1848
|
+
* @private
|
|
1849
|
+
* @interface Highcharts.TimelineEventOptionsObject
|
|
1850
|
+
*/ /**
|
|
1851
|
+
* The object we want to sonify when playing the TimelineEvent. Can be any
|
|
1852
|
+
* object that implements the `sonify` and `cancelSonify` functions. If this is
|
|
1853
|
+
* not supplied, the TimelineEvent is considered a silent event, and the onEnd
|
|
1854
|
+
* event is immediately called.
|
|
1855
|
+
* @name Highcharts.TimelineEventOptionsObject#eventObject
|
|
1856
|
+
* @type {*}
|
|
1857
|
+
*/ /**
|
|
1858
|
+
* Options to pass on to the eventObject when playing it.
|
|
1859
|
+
* @name Highcharts.TimelineEventOptionsObject#playOptions
|
|
1860
|
+
* @type {object|undefined}
|
|
1861
|
+
*/ /**
|
|
1862
|
+
* The time at which we want this event to play (in milliseconds offset). This
|
|
1863
|
+
* is not used for the TimelineEvent.play function, but rather intended as a
|
|
1864
|
+
* property to decide when to call TimelineEvent.play. Defaults to 0.
|
|
1865
|
+
* @name Highcharts.TimelineEventOptionsObject#time
|
|
1866
|
+
* @type {number|undefined}
|
|
1867
|
+
*/ /**
|
|
1868
|
+
* Unique ID for the event. Generated automatically if not supplied.
|
|
1869
|
+
* @name Highcharts.TimelineEventOptionsObject#id
|
|
1870
|
+
* @type {string|undefined}
|
|
1871
|
+
*/ /**
|
|
1872
|
+
* Callback called when the play has finished.
|
|
1873
|
+
* @name Highcharts.TimelineEventOptionsObject#onEnd
|
|
1874
|
+
* @type {Function|undefined}
|
|
1875
|
+
*/
|
|
1876
|
+
(''); // detach doclets above
|
|
1877
|
+
|
|
1878
|
+
return TimelineEvent;
|
|
1879
|
+
});
|
|
1880
|
+
_registerModule(_modules, 'Extensions/Sonification/TimelinePath.js', [_modules['Extensions/Sonification/TimelineEvent.js'], _modules['Extensions/Sonification/SonificationUtilities.js'], _modules['Core/Utilities.js']], function (TimelineEvent, SU, U) {
|
|
1881
|
+
/* *
|
|
1882
|
+
*
|
|
1883
|
+
* (c) 2009-2021 Øystein Moseng
|
|
1884
|
+
*
|
|
1885
|
+
* TimelineEvent class definition.
|
|
1886
|
+
*
|
|
1887
|
+
* License: www.highcharts.com/license
|
|
1888
|
+
*
|
|
1889
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
1890
|
+
*
|
|
1891
|
+
* */
|
|
1892
|
+
var merge = U.merge,
|
|
1893
|
+
uniqueKey = U.uniqueKey;
|
|
1894
|
+
/* *
|
|
1895
|
+
*
|
|
1896
|
+
* Class
|
|
1897
|
+
*
|
|
1898
|
+
* */
|
|
1899
|
+
/* eslint-disable no-invalid-this, valid-jsdoc */
|
|
1900
|
+
/**
|
|
1901
|
+
* The TimelinePath class. Represents a track on a timeline with a list of
|
|
1902
|
+
* sound events to play at certain times relative to each other.
|
|
1903
|
+
*
|
|
1904
|
+
* @requires module:modules/sonification
|
|
1905
|
+
*
|
|
1906
|
+
* @private
|
|
1907
|
+
* @class
|
|
1908
|
+
* @name Highcharts.TimelinePath
|
|
1909
|
+
*
|
|
1910
|
+
* @param {Highcharts.TimelinePathOptionsObject} options
|
|
1911
|
+
* Options for the TimelinePath.
|
|
1912
|
+
*/
|
|
1913
|
+
var TimelinePath = /** @class */ (function () {
|
|
1914
|
+
/* *
|
|
1915
|
+
*
|
|
1916
|
+
* Constructors
|
|
1917
|
+
*
|
|
1918
|
+
* */
|
|
1919
|
+
function TimelinePath(options) {
|
|
1920
|
+
/* *
|
|
1921
|
+
*
|
|
1922
|
+
* Properties
|
|
1923
|
+
*
|
|
1924
|
+
* */
|
|
1925
|
+
this.cursor = void 0;
|
|
1926
|
+
this.events = void 0;
|
|
1927
|
+
this.eventIdMap = void 0;
|
|
1928
|
+
this.eventsPlaying = void 0;
|
|
1929
|
+
this.id = void 0;
|
|
1930
|
+
this.options = void 0;
|
|
1931
|
+
this.signalHandler = void 0;
|
|
1932
|
+
this.init(options);
|
|
1933
|
+
}
|
|
1934
|
+
/* *
|
|
1935
|
+
*
|
|
1936
|
+
* Functions
|
|
1937
|
+
*
|
|
1938
|
+
* */
|
|
1939
|
+
TimelinePath.prototype.init = function (options) {
|
|
1940
|
+
this.options = options;
|
|
1941
|
+
this.id = this.options.id = options.id || uniqueKey();
|
|
1942
|
+
this.cursor = 0;
|
|
1943
|
+
this.eventsPlaying = {};
|
|
1944
|
+
// Handle silent wait, otherwise use events from options
|
|
1945
|
+
this.events = options.silentWait ?
|
|
1946
|
+
[
|
|
1947
|
+
new TimelineEvent({ time: 0 }),
|
|
1948
|
+
new TimelineEvent({ time: options.silentWait })
|
|
1949
|
+
] :
|
|
1950
|
+
this.options.events;
|
|
1951
|
+
// Reference optionally provided by the user that indicates the intended
|
|
1952
|
+
// duration of the path. Unused by TimelinePath itself.
|
|
1953
|
+
this.targetDuration = options.targetDuration || options.silentWait;
|
|
1954
|
+
// We need to sort our events by time
|
|
1955
|
+
this.sortEvents();
|
|
1956
|
+
// Get map from event ID to index
|
|
1957
|
+
this.updateEventIdMap();
|
|
1958
|
+
// Signal events to fire
|
|
1959
|
+
this.signalHandler = new SU.SignalHandler([
|
|
1960
|
+
'playOnEnd', 'masterOnEnd', 'onStart', 'onEventStart', 'onEventEnd'
|
|
1961
|
+
]);
|
|
1962
|
+
this.signalHandler.registerSignalCallbacks(merge(options, { masterOnEnd: options.onEnd }));
|
|
1963
|
+
};
|
|
1964
|
+
/**
|
|
1965
|
+
* Sort the internal event list by time.
|
|
1966
|
+
* @private
|
|
1967
|
+
*/
|
|
1968
|
+
TimelinePath.prototype.sortEvents = function () {
|
|
1969
|
+
this.events = this.events.sort(function (a, b) {
|
|
1970
|
+
return a.time - b.time;
|
|
1971
|
+
});
|
|
1972
|
+
};
|
|
1973
|
+
/**
|
|
1974
|
+
* Update the internal eventId to index map.
|
|
1975
|
+
* @private
|
|
1976
|
+
*/
|
|
1977
|
+
TimelinePath.prototype.updateEventIdMap = function () {
|
|
1978
|
+
this.eventIdMap = this.events.reduce(function (acc, cur, i) {
|
|
1979
|
+
acc[cur.id] = i;
|
|
1980
|
+
return acc;
|
|
1981
|
+
}, {});
|
|
1982
|
+
};
|
|
1983
|
+
/**
|
|
1984
|
+
* Add events to the path. Should not be done while the path is playing.
|
|
1985
|
+
* The new events are inserted according to their time property.
|
|
1986
|
+
* @private
|
|
1987
|
+
* @param {Array<Highcharts.TimelineEvent>} newEvents
|
|
1988
|
+
* The new timeline events to add.
|
|
1989
|
+
*/
|
|
1990
|
+
TimelinePath.prototype.addTimelineEvents = function (newEvents) {
|
|
1991
|
+
this.events = this.events.concat(newEvents);
|
|
1992
|
+
this.sortEvents(); // Sort events by time
|
|
1993
|
+
this.updateEventIdMap(); // Update the event ID to index map
|
|
1994
|
+
};
|
|
1995
|
+
/**
|
|
1996
|
+
* Get the current TimelineEvent under the cursor.
|
|
1997
|
+
* @private
|
|
1998
|
+
* @return {Highcharts.TimelineEvent} The current timeline event.
|
|
1999
|
+
*/
|
|
2000
|
+
TimelinePath.prototype.getCursor = function () {
|
|
2001
|
+
return this.events[this.cursor];
|
|
2002
|
+
};
|
|
2003
|
+
/**
|
|
2004
|
+
* Set the current TimelineEvent under the cursor.
|
|
2005
|
+
* @private
|
|
2006
|
+
* @param {string} eventId
|
|
2007
|
+
* The ID of the timeline event to set as current.
|
|
2008
|
+
* @return {boolean}
|
|
2009
|
+
* True if there is an event with this ID in the path. False otherwise.
|
|
2010
|
+
*/
|
|
2011
|
+
TimelinePath.prototype.setCursor = function (eventId) {
|
|
2012
|
+
var ix = this.eventIdMap[eventId];
|
|
2013
|
+
if (typeof ix !== 'undefined') {
|
|
2014
|
+
this.cursor = ix;
|
|
2015
|
+
return true;
|
|
2016
|
+
}
|
|
2017
|
+
return false;
|
|
2018
|
+
};
|
|
2019
|
+
/**
|
|
2020
|
+
* Play the timeline from the current cursor.
|
|
2021
|
+
* @private
|
|
2022
|
+
* @param {Function} onEnd
|
|
2023
|
+
* Callback to call when play finished. Does not override other onEnd
|
|
2024
|
+
* callbacks.
|
|
2025
|
+
*/
|
|
2026
|
+
TimelinePath.prototype.play = function (onEnd) {
|
|
2027
|
+
this.pause();
|
|
2028
|
+
this.signalHandler.emitSignal('onStart');
|
|
2029
|
+
this.signalHandler.clearSignalCallbacks(['playOnEnd']);
|
|
2030
|
+
this.signalHandler.registerSignalCallbacks({ playOnEnd: onEnd });
|
|
2031
|
+
this.playEvents(1);
|
|
2032
|
+
};
|
|
2033
|
+
/**
|
|
2034
|
+
* Play the timeline backwards from the current cursor.
|
|
2035
|
+
* @private
|
|
2036
|
+
* @param {Function} onEnd
|
|
2037
|
+
* Callback to call when play finished. Does not override other onEnd
|
|
2038
|
+
* callbacks.
|
|
2039
|
+
*/
|
|
2040
|
+
TimelinePath.prototype.rewind = function (onEnd) {
|
|
2041
|
+
this.pause();
|
|
2042
|
+
this.signalHandler.emitSignal('onStart');
|
|
2043
|
+
this.signalHandler.clearSignalCallbacks(['playOnEnd']);
|
|
2044
|
+
this.signalHandler.registerSignalCallbacks({ playOnEnd: onEnd });
|
|
2045
|
+
this.playEvents(-1);
|
|
2046
|
+
};
|
|
2047
|
+
/**
|
|
2048
|
+
* Reset the cursor to the beginning.
|
|
2049
|
+
* @private
|
|
2050
|
+
*/
|
|
2051
|
+
TimelinePath.prototype.resetCursor = function () {
|
|
2052
|
+
this.cursor = 0;
|
|
2053
|
+
};
|
|
2054
|
+
/**
|
|
2055
|
+
* Reset the cursor to the end.
|
|
2056
|
+
* @private
|
|
2057
|
+
*/
|
|
2058
|
+
TimelinePath.prototype.resetCursorEnd = function () {
|
|
2059
|
+
this.cursor = this.events.length - 1;
|
|
2060
|
+
};
|
|
2061
|
+
/**
|
|
2062
|
+
* Cancel current playing. Leaves the cursor intact.
|
|
2063
|
+
* @private
|
|
2064
|
+
* @param {boolean} [fadeOut=false]
|
|
2065
|
+
* Whether or not to fade out as we stop. If false, the path is cancelled
|
|
2066
|
+
* synchronously.
|
|
2067
|
+
*/
|
|
2068
|
+
TimelinePath.prototype.pause = function (fadeOut) {
|
|
2069
|
+
var timelinePath = this;
|
|
2070
|
+
// Cancel next scheduled play
|
|
2071
|
+
clearTimeout(timelinePath.nextScheduledPlay);
|
|
2072
|
+
// Cancel currently playing events
|
|
2073
|
+
Object.keys(timelinePath.eventsPlaying).forEach(function (id) {
|
|
2074
|
+
if (timelinePath.eventsPlaying[id]) {
|
|
2075
|
+
timelinePath.eventsPlaying[id].cancel(fadeOut);
|
|
2076
|
+
}
|
|
2077
|
+
});
|
|
2078
|
+
timelinePath.eventsPlaying = {};
|
|
2079
|
+
};
|
|
2080
|
+
/**
|
|
2081
|
+
* Play the events, starting from current cursor, and going in specified
|
|
2082
|
+
* direction.
|
|
2083
|
+
* @private
|
|
2084
|
+
* @param {number} direction
|
|
2085
|
+
* The direction to play, 1 for forwards and -1 for backwards.
|
|
2086
|
+
*/
|
|
2087
|
+
TimelinePath.prototype.playEvents = function (direction) {
|
|
2088
|
+
var timelinePath = this,
|
|
2089
|
+
curEvent = timelinePath.events[this.cursor],
|
|
2090
|
+
nextEvent = timelinePath.events[this.cursor + direction],
|
|
2091
|
+
onEnd = function (signalData) {
|
|
2092
|
+
timelinePath.signalHandler.emitSignal('masterOnEnd',
|
|
2093
|
+
signalData);
|
|
2094
|
+
timelinePath.signalHandler.emitSignal('playOnEnd', signalData);
|
|
2095
|
+
};
|
|
2096
|
+
var timeDiff;
|
|
2097
|
+
// Store reference to path on event
|
|
2098
|
+
curEvent.timelinePath = timelinePath;
|
|
2099
|
+
// Emit event, cancel if returns false
|
|
2100
|
+
if (timelinePath.signalHandler.emitSignal('onEventStart', curEvent) === false) {
|
|
2101
|
+
onEnd({
|
|
2102
|
+
event: curEvent,
|
|
2103
|
+
cancelled: true
|
|
2104
|
+
});
|
|
2105
|
+
return;
|
|
2106
|
+
}
|
|
2107
|
+
// Play the current event
|
|
2108
|
+
timelinePath.eventsPlaying[curEvent.id] = curEvent;
|
|
2109
|
+
curEvent.play({
|
|
2110
|
+
onEnd: function (cancelled) {
|
|
2111
|
+
var signalData = {
|
|
2112
|
+
event: curEvent,
|
|
2113
|
+
cancelled: !!cancelled
|
|
2114
|
+
};
|
|
2115
|
+
// Keep track of currently playing events for cancelling
|
|
2116
|
+
delete timelinePath.eventsPlaying[curEvent.id];
|
|
2117
|
+
// Handle onEventEnd
|
|
2118
|
+
timelinePath.signalHandler.emitSignal('onEventEnd', signalData);
|
|
2119
|
+
// Reached end of path?
|
|
2120
|
+
if (!nextEvent) {
|
|
2121
|
+
onEnd(signalData);
|
|
2122
|
+
}
|
|
2123
|
+
}
|
|
2124
|
+
});
|
|
2125
|
+
// Schedule next
|
|
2126
|
+
if (nextEvent) {
|
|
2127
|
+
timeDiff = Math.abs(nextEvent.time - curEvent.time);
|
|
2128
|
+
if (timeDiff < 1) {
|
|
2129
|
+
// Play immediately
|
|
2130
|
+
timelinePath.cursor += direction;
|
|
2131
|
+
timelinePath.playEvents(direction);
|
|
2132
|
+
}
|
|
2133
|
+
else {
|
|
2134
|
+
// Schedule after the difference in ms
|
|
2135
|
+
this.nextScheduledPlay = setTimeout(function () {
|
|
2136
|
+
timelinePath.cursor += direction;
|
|
2137
|
+
timelinePath.playEvents(direction);
|
|
2138
|
+
}, timeDiff);
|
|
2139
|
+
}
|
|
2140
|
+
}
|
|
2141
|
+
};
|
|
2142
|
+
return TimelinePath;
|
|
2143
|
+
}());
|
|
2144
|
+
/* *
|
|
2145
|
+
*
|
|
2146
|
+
* Default export
|
|
2147
|
+
*
|
|
2148
|
+
* */
|
|
2149
|
+
/* *
|
|
2150
|
+
*
|
|
2151
|
+
* API Declarations
|
|
2152
|
+
*
|
|
2153
|
+
* */
|
|
2154
|
+
/**
|
|
2155
|
+
* A set of options for the TimelinePath class.
|
|
2156
|
+
*
|
|
2157
|
+
* @requires module:modules/
|
|
2158
|
+
*
|
|
2159
|
+
* @private
|
|
2160
|
+
* @interface Highcharts.TimelinePathOptionsObject
|
|
2161
|
+
*/ /**
|
|
2162
|
+
* List of TimelineEvents to play on this track.
|
|
2163
|
+
* @name Highcharts.TimelinePathOptionsObject#events
|
|
2164
|
+
* @type {Array<Highcharts.TimelineEvent>}
|
|
2165
|
+
*/ /**
|
|
2166
|
+
* If this option is supplied, this path ignores all events and just waits for
|
|
2167
|
+
* the specified number of milliseconds before calling onEnd.
|
|
2168
|
+
* @name Highcharts.TimelinePathOptionsObject#silentWait
|
|
2169
|
+
* @type {number|undefined}
|
|
2170
|
+
*/ /**
|
|
2171
|
+
* Unique ID for this timeline path. Automatically generated if not supplied.
|
|
2172
|
+
* @name Highcharts.TimelinePathOptionsObject#id
|
|
2173
|
+
* @type {string|undefined}
|
|
2174
|
+
*/ /**
|
|
2175
|
+
* Callback called before the path starts playing.
|
|
2176
|
+
* @name Highcharts.TimelinePathOptionsObject#onStart
|
|
2177
|
+
* @type {Function|undefined}
|
|
2178
|
+
*/ /**
|
|
2179
|
+
* Callback function to call before an event plays.
|
|
2180
|
+
* @name Highcharts.TimelinePathOptionsObject#onEventStart
|
|
2181
|
+
* @type {Function|undefined}
|
|
2182
|
+
*/ /**
|
|
2183
|
+
* Callback function to call after an event has stopped playing.
|
|
2184
|
+
* @name Highcharts.TimelinePathOptionsObject#onEventEnd
|
|
2185
|
+
* @type {Function|undefined}
|
|
2186
|
+
*/ /**
|
|
2187
|
+
* Callback called when the whole path is finished.
|
|
2188
|
+
* @name Highcharts.TimelinePathOptionsObject#onEnd
|
|
2189
|
+
* @type {Function|undefined}
|
|
2190
|
+
*/
|
|
2191
|
+
(''); // detach doclets above
|
|
2192
|
+
|
|
2193
|
+
return TimelinePath;
|
|
2194
|
+
});
|
|
2195
|
+
_registerModule(_modules, 'Extensions/Sonification/SeriesSonify.js', [_modules['Extensions/Sonification/Earcon.js'], _modules['Extensions/Sonification/Instrument.js'], _modules['Core/Series/Point.js'], _modules['Extensions/Sonification/SonificationUtilities.js'], _modules['Extensions/Sonification/Timeline.js'], _modules['Extensions/Sonification/TimelineEvent.js'], _modules['Extensions/Sonification/TimelinePath.js'], _modules['Core/Utilities.js']], function (Earcon, Instrument, Point, SU, Timeline, TimelineEvent, TimelinePath, U) {
|
|
2196
|
+
/* *
|
|
2197
|
+
*
|
|
2198
|
+
* (c) 2009-2021 Øystein Moseng
|
|
2199
|
+
*
|
|
2200
|
+
* Sonification functions for chart/series.
|
|
2201
|
+
*
|
|
2202
|
+
* License: www.highcharts.com/license
|
|
2203
|
+
*
|
|
2204
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
2205
|
+
*
|
|
2206
|
+
* */
|
|
2207
|
+
var getExtremesForInstrumentProps = SU.getExtremesForInstrumentProps,
|
|
2208
|
+
virtualAxisTranslate = SU.virtualAxisTranslate;
|
|
2209
|
+
var extend = U.extend,
|
|
2210
|
+
find = U.find,
|
|
2211
|
+
isArray = U.isArray,
|
|
2212
|
+
merge = U.merge,
|
|
2213
|
+
objectEach = U.objectEach,
|
|
2214
|
+
pick = U.pick;
|
|
2215
|
+
/* *
|
|
2216
|
+
*
|
|
2217
|
+
* Compositions
|
|
2218
|
+
*
|
|
2219
|
+
* */
|
|
2220
|
+
var SeriesSonify;
|
|
2221
|
+
(function (SeriesSonify) {
|
|
2222
|
+
/* *
|
|
2223
|
+
*
|
|
2224
|
+
* Declarations
|
|
2225
|
+
*
|
|
2226
|
+
* */
|
|
2227
|
+
/* *
|
|
2228
|
+
*
|
|
2229
|
+
* Constants
|
|
2230
|
+
*
|
|
2231
|
+
* */
|
|
2232
|
+
var composedClasses = [];
|
|
2233
|
+
/* *
|
|
2234
|
+
*
|
|
2235
|
+
* Functions
|
|
2236
|
+
*
|
|
2237
|
+
* */
|
|
2238
|
+
/* eslint-disable valid-jsdoc */
|
|
2239
|
+
/**
|
|
2240
|
+
* @private
|
|
2241
|
+
*/
|
|
2242
|
+
function compose(SeriesClass) {
|
|
2243
|
+
if (composedClasses.indexOf(SeriesClass) === -1) {
|
|
2244
|
+
composedClasses.push(SeriesClass);
|
|
2245
|
+
var seriesProto = SeriesClass.prototype;
|
|
2246
|
+
extend(seriesProto, {
|
|
2247
|
+
sonify: sonify
|
|
2248
|
+
});
|
|
2249
|
+
}
|
|
2250
|
+
return SeriesClass;
|
|
2251
|
+
}
|
|
2252
|
+
SeriesSonify.compose = compose;
|
|
2253
|
+
/**
|
|
2254
|
+
* Utility function to apply a master volume to a list of instrument
|
|
2255
|
+
* options.
|
|
2256
|
+
* @private
|
|
2257
|
+
* @param {Array<Highcharts.PointInstrumentObject>} instruments
|
|
2258
|
+
* The instrument options. Only options with Instrument object instances
|
|
2259
|
+
* will be affected.
|
|
2260
|
+
* @param {number} masterVolume
|
|
2261
|
+
* The master volume multiplier to apply to the instruments.
|
|
2262
|
+
* @return {Array<Highcharts.PointInstrumentObject>}
|
|
2263
|
+
* Array of instrument options.
|
|
2264
|
+
*/
|
|
2265
|
+
function applyMasterVolumeToInstruments(instruments, masterVolume) {
|
|
2266
|
+
instruments.forEach(function (instrOpts) {
|
|
2267
|
+
var instr = instrOpts.instrument;
|
|
2268
|
+
if (typeof instr !== 'string') {
|
|
2269
|
+
instr.setMasterVolume(masterVolume);
|
|
2270
|
+
}
|
|
2271
|
+
});
|
|
2272
|
+
return instruments;
|
|
2273
|
+
}
|
|
2274
|
+
/**
|
|
2275
|
+
* Utility function to assemble options for creating a TimelinePath from a
|
|
2276
|
+
* series when sonifying an entire chart.
|
|
2277
|
+
* @private
|
|
2278
|
+
* @param {Highcharts.Series} series
|
|
2279
|
+
* The series to return options for.
|
|
2280
|
+
* @param {Highcharts.RangeObject} dataExtremes
|
|
2281
|
+
* Pre-calculated data extremes for the chart.
|
|
2282
|
+
* @param {Highcharts.SonificationOptions} chartSonifyOptions
|
|
2283
|
+
* Options passed in to chart.sonify.
|
|
2284
|
+
* @return {Partial<Highcharts.SonifySeriesOptionsObject>}
|
|
2285
|
+
* Options for buildTimelinePathFromSeries.
|
|
2286
|
+
*/
|
|
2287
|
+
function buildChartSonifySeriesOptions(series, dataExtremes, chartSonifyOptions) {
|
|
2288
|
+
var additionalSeriesOptions = chartSonifyOptions.seriesOptions || {},
|
|
2289
|
+
sonification = series.chart.options.sonification,
|
|
2290
|
+
pointPlayTime = (sonification &&
|
|
2291
|
+
sonification.defaultInstrumentOptions &&
|
|
2292
|
+
sonification.defaultInstrumentOptions.mapping &&
|
|
2293
|
+
sonification.defaultInstrumentOptions.mapping.pointPlayTime ||
|
|
2294
|
+
'x'),
|
|
2295
|
+
configOptions = chartOptionsToSonifySeriesOptions(series);
|
|
2296
|
+
return merge(
|
|
2297
|
+
// Options from chart configuration
|
|
2298
|
+
configOptions,
|
|
2299
|
+
// Options passed in
|
|
2300
|
+
{
|
|
2301
|
+
// Calculated dataExtremes for chart
|
|
2302
|
+
dataExtremes: dataExtremes,
|
|
2303
|
+
// We need to get timeExtremes for each series. We pass this
|
|
2304
|
+
// in when building the TimelinePath objects to avoid
|
|
2305
|
+
// calculating twice.
|
|
2306
|
+
timeExtremes: getTimeExtremes(series, pointPlayTime),
|
|
2307
|
+
// Some options we just pass on
|
|
2308
|
+
instruments: (chartSonifyOptions.instruments || configOptions.instruments),
|
|
2309
|
+
onStart: (chartSonifyOptions.onSeriesStart || configOptions.onStart),
|
|
2310
|
+
onEnd: chartSonifyOptions.onSeriesEnd || configOptions.onEnd,
|
|
2311
|
+
earcons: chartSonifyOptions.earcons || configOptions.earcons,
|
|
2312
|
+
masterVolume: pick(chartSonifyOptions.masterVolume, configOptions.masterVolume)
|
|
2313
|
+
},
|
|
2314
|
+
// Merge in the specific series options by ID if any are passed in
|
|
2315
|
+
isArray(additionalSeriesOptions) ? (find(additionalSeriesOptions, function (optEntry) {
|
|
2316
|
+
return optEntry.id === pick(series.id, series.options.id);
|
|
2317
|
+
}) || {}) : additionalSeriesOptions, {
|
|
2318
|
+
// Forced options
|
|
2319
|
+
pointPlayTime: pointPlayTime
|
|
2320
|
+
});
|
|
2321
|
+
}
|
|
2322
|
+
SeriesSonify.buildChartSonifySeriesOptions = buildChartSonifySeriesOptions;
|
|
2323
|
+
/**
|
|
2324
|
+
* Create a TimelinePath from a series. Takes the same options as
|
|
2325
|
+
* seriesSonify. To intuitively allow multiple series to play simultaneously
|
|
2326
|
+
* we make copies of the instruments for each series.
|
|
2327
|
+
* @private
|
|
2328
|
+
* @param {Highcharts.Series} series
|
|
2329
|
+
* The series to build from.
|
|
2330
|
+
* @param {Highcharts.SonifySeriesOptionsObject} options
|
|
2331
|
+
* The options for building the TimelinePath.
|
|
2332
|
+
* @return {Highcharts.TimelinePath}
|
|
2333
|
+
* A timeline path with events.
|
|
2334
|
+
*/
|
|
2335
|
+
function buildTimelinePathFromSeries(series, options) {
|
|
2336
|
+
// options.timeExtremes is internal and used so that the calculations
|
|
2337
|
+
// from chart.sonify can be reused.
|
|
2338
|
+
var timeExtremes = options.timeExtremes || getTimeExtremes(series,
|
|
2339
|
+
options.pointPlayTime),
|
|
2340
|
+
// Compute any data extremes that aren't defined yet
|
|
2341
|
+
dataExtremes = getExtremesForInstrumentProps(series.chart,
|
|
2342
|
+
options.instruments,
|
|
2343
|
+
options.dataExtremes),
|
|
2344
|
+
minimumSeriesDurationMs = 10,
|
|
2345
|
+
// Get the duration of the final note
|
|
2346
|
+
finalNoteDuration = getFinalNoteDuration(series,
|
|
2347
|
+
options.instruments,
|
|
2348
|
+
dataExtremes),
|
|
2349
|
+
// Get time offset for a point, relative to duration
|
|
2350
|
+
pointToTime = function (point) {
|
|
2351
|
+
return virtualAxisTranslate(getPointTimeValue(point,
|
|
2352
|
+
options.pointPlayTime),
|
|
2353
|
+
timeExtremes, {
|
|
2354
|
+
min: 0,
|
|
2355
|
+
max: Math.max(options.duration - finalNoteDuration,
|
|
2356
|
+
minimumSeriesDurationMs)
|
|
2357
|
+
});
|
|
2358
|
+
}, masterVolume = pick(options.masterVolume, 1),
|
|
2359
|
+
// Make copies of the instruments used for this series, to allow
|
|
2360
|
+
// multiple series with the same instrument to play together
|
|
2361
|
+
instrumentCopies = makeInstrumentCopies(options.instruments), instruments = applyMasterVolumeToInstruments(instrumentCopies, masterVolume),
|
|
2362
|
+
// Go through the points, convert to events, optionally add Earcons
|
|
2363
|
+
timelineEvents = series.points.reduce(function (events, point) {
|
|
2364
|
+
var earcons = getPointEarcons(point,
|
|
2365
|
+
options.earcons || []),
|
|
2366
|
+
time = pointToTime(point);
|
|
2367
|
+
return events.concat(
|
|
2368
|
+
// Event object for point
|
|
2369
|
+
new TimelineEvent({
|
|
2370
|
+
eventObject: point,
|
|
2371
|
+
time: time,
|
|
2372
|
+
id: point.id,
|
|
2373
|
+
playOptions: {
|
|
2374
|
+
instruments: instruments,
|
|
2375
|
+
dataExtremes: dataExtremes,
|
|
2376
|
+
masterVolume: masterVolume
|
|
2377
|
+
}
|
|
2378
|
+
}),
|
|
2379
|
+
// Earcons
|
|
2380
|
+
earcons.map(function (earcon) {
|
|
2381
|
+
return new TimelineEvent({
|
|
2382
|
+
eventObject: earcon,
|
|
2383
|
+
time: time,
|
|
2384
|
+
playOptions: {
|
|
2385
|
+
volume: masterVolume
|
|
2386
|
+
}
|
|
2387
|
+
});
|
|
2388
|
+
}));
|
|
2389
|
+
}, []);
|
|
2390
|
+
// Build the timeline path
|
|
2391
|
+
return new TimelinePath({
|
|
2392
|
+
events: timelineEvents,
|
|
2393
|
+
onStart: function () {
|
|
2394
|
+
if (options.onStart) {
|
|
2395
|
+
options.onStart(series);
|
|
2396
|
+
}
|
|
2397
|
+
},
|
|
2398
|
+
onEventStart: function (event) {
|
|
2399
|
+
var eventObject = event.options && event.options.eventObject;
|
|
2400
|
+
if (eventObject instanceof Point) {
|
|
2401
|
+
// Check for hidden series
|
|
2402
|
+
if (!eventObject.series.visible &&
|
|
2403
|
+
!eventObject.series.chart.series.some(function (series) {
|
|
2404
|
+
return series.visible;
|
|
2405
|
+
})) {
|
|
2406
|
+
// We have no visible series, stop the path.
|
|
2407
|
+
event.timelinePath.timeline.pause();
|
|
2408
|
+
event.timelinePath.timeline.resetCursor();
|
|
2409
|
+
return false;
|
|
2410
|
+
}
|
|
2411
|
+
// Emit onPointStart
|
|
2412
|
+
if (options.onPointStart) {
|
|
2413
|
+
options.onPointStart(event, eventObject);
|
|
2414
|
+
}
|
|
2415
|
+
}
|
|
2416
|
+
},
|
|
2417
|
+
onEventEnd: function (eventData) {
|
|
2418
|
+
var eventObject = (eventData.event &&
|
|
2419
|
+
eventData.event.options &&
|
|
2420
|
+
eventData.event.options.eventObject);
|
|
2421
|
+
if (eventObject instanceof Point && options.onPointEnd) {
|
|
2422
|
+
options.onPointEnd(eventData.event, eventObject);
|
|
2423
|
+
}
|
|
2424
|
+
},
|
|
2425
|
+
onEnd: function () {
|
|
2426
|
+
if (options.onEnd) {
|
|
2427
|
+
options.onEnd(series);
|
|
2428
|
+
}
|
|
2429
|
+
},
|
|
2430
|
+
targetDuration: options.duration
|
|
2431
|
+
});
|
|
2432
|
+
}
|
|
2433
|
+
SeriesSonify.buildTimelinePathFromSeries = buildTimelinePathFromSeries;
|
|
2434
|
+
/**
|
|
2435
|
+
* Utility function to translate between options set in chart configuration
|
|
2436
|
+
* and a SonifySeriesOptionsObject.
|
|
2437
|
+
* @private
|
|
2438
|
+
* @param {Highcharts.Series} series
|
|
2439
|
+
* The series to get options for.
|
|
2440
|
+
* @return {Highcharts.SonifySeriesOptionsObject}
|
|
2441
|
+
* Options for chart/series.sonify()
|
|
2442
|
+
*/
|
|
2443
|
+
function chartOptionsToSonifySeriesOptions(series) {
|
|
2444
|
+
var seriesOpts = series.options.sonification ||
|
|
2445
|
+
{},
|
|
2446
|
+
chartOpts = series.chart.options.sonification ||
|
|
2447
|
+
{},
|
|
2448
|
+
chartEvents = chartOpts.events ||
|
|
2449
|
+
{},
|
|
2450
|
+
seriesEvents = seriesOpts.events ||
|
|
2451
|
+
{};
|
|
2452
|
+
return {
|
|
2453
|
+
onEnd: seriesEvents.onSeriesEnd || chartEvents.onSeriesEnd,
|
|
2454
|
+
onStart: seriesEvents.onSeriesStart || chartEvents.onSeriesStart,
|
|
2455
|
+
onPointEnd: seriesEvents.onPointEnd || chartEvents.onPointEnd,
|
|
2456
|
+
onPointStart: seriesEvents.onPointStart || chartEvents.onPointStart,
|
|
2457
|
+
pointPlayTime: (chartOpts.defaultInstrumentOptions &&
|
|
2458
|
+
chartOpts.defaultInstrumentOptions.mapping &&
|
|
2459
|
+
chartOpts.defaultInstrumentOptions.mapping.pointPlayTime),
|
|
2460
|
+
masterVolume: chartOpts.masterVolume,
|
|
2461
|
+
// Deals with chart-level defaults
|
|
2462
|
+
instruments: getSeriesInstrumentOptions(series),
|
|
2463
|
+
earcons: seriesOpts.earcons || chartOpts.earcons
|
|
2464
|
+
};
|
|
2465
|
+
}
|
|
2466
|
+
/**
|
|
2467
|
+
* Utility function to find the duration of the final note in a series.
|
|
2468
|
+
* @private
|
|
2469
|
+
* @param {Highcharts.Series} series The data series to calculate on.
|
|
2470
|
+
* @param {Array<Highcharts.PointInstrumentObject>} instruments The instrument options for this series.
|
|
2471
|
+
* @param {Highcharts.Dictionary<Highcharts.RangeObject>} dataExtremes Value extremes for the data series props.
|
|
2472
|
+
* @return {number} The duration of the final note in milliseconds.
|
|
2473
|
+
*/
|
|
2474
|
+
function getFinalNoteDuration(series, instruments, dataExtremes) {
|
|
2475
|
+
var finalPoint = series.points[series.points.length - 1];
|
|
2476
|
+
return instruments.reduce(function (duration, instrument) {
|
|
2477
|
+
var mapping = instrument.instrumentMapping.duration;
|
|
2478
|
+
var instrumentDuration;
|
|
2479
|
+
if (typeof mapping === 'string') {
|
|
2480
|
+
instrumentDuration = 0; // Ignore, no easy way to map this
|
|
2481
|
+
}
|
|
2482
|
+
else if (typeof mapping === 'function') {
|
|
2483
|
+
instrumentDuration = mapping(finalPoint, dataExtremes);
|
|
2484
|
+
}
|
|
2485
|
+
else {
|
|
2486
|
+
instrumentDuration = mapping;
|
|
2487
|
+
}
|
|
2488
|
+
return Math.max(duration, instrumentDuration);
|
|
2489
|
+
}, 0);
|
|
2490
|
+
}
|
|
2491
|
+
/**
|
|
2492
|
+
* Get earcons for the point if there are any.
|
|
2493
|
+
* @private
|
|
2494
|
+
* @param {Highcharts.Point} point
|
|
2495
|
+
* The point to find earcons for.
|
|
2496
|
+
* @param {Array<Highcharts.EarconConfiguration>} earconDefinitions
|
|
2497
|
+
* Earcons to check.
|
|
2498
|
+
* @return {Array<Highcharts.Earcon>}
|
|
2499
|
+
* Array of earcons to be played with this point.
|
|
2500
|
+
*/
|
|
2501
|
+
function getPointEarcons(point, earconDefinitions) {
|
|
2502
|
+
return earconDefinitions.reduce(function (earcons, earconDefinition) {
|
|
2503
|
+
var earcon = earconDefinition.earcon;
|
|
2504
|
+
var cond;
|
|
2505
|
+
if (earconDefinition.condition) {
|
|
2506
|
+
// We have a condition. This overrides onPoint
|
|
2507
|
+
cond = earconDefinition.condition(point);
|
|
2508
|
+
if (cond instanceof Earcon) {
|
|
2509
|
+
// Condition returned an earcon
|
|
2510
|
+
earcons.push(cond);
|
|
2511
|
+
}
|
|
2512
|
+
else if (cond) {
|
|
2513
|
+
// Condition returned true
|
|
2514
|
+
earcons.push(earcon);
|
|
2515
|
+
}
|
|
2516
|
+
}
|
|
2517
|
+
else if (earconDefinition.onPoint &&
|
|
2518
|
+
point.id === earconDefinition.onPoint) {
|
|
2519
|
+
// We have earcon onPoint
|
|
2520
|
+
earcons.push(earcon);
|
|
2521
|
+
}
|
|
2522
|
+
return earcons;
|
|
2523
|
+
}, []);
|
|
2524
|
+
}
|
|
2525
|
+
/**
|
|
2526
|
+
* Get the relative time value of a point.
|
|
2527
|
+
* @private
|
|
2528
|
+
* @param {Highcharts.Point} point
|
|
2529
|
+
* The point.
|
|
2530
|
+
* @param {Function|string} timeProp
|
|
2531
|
+
* The time axis data prop or the time function.
|
|
2532
|
+
* @return {number}
|
|
2533
|
+
* The time value.
|
|
2534
|
+
*/
|
|
2535
|
+
function getPointTimeValue(point, timeProp) {
|
|
2536
|
+
return typeof timeProp === 'function' ?
|
|
2537
|
+
timeProp(point) :
|
|
2538
|
+
pick(point[timeProp], point.options[timeProp]);
|
|
2539
|
+
}
|
|
2540
|
+
/**
|
|
2541
|
+
* @private
|
|
2542
|
+
* @param {Highcharts.Series} series
|
|
2543
|
+
* The series to get options for.
|
|
2544
|
+
* @param {Highcharts.SonifySeriesOptionsObject} options
|
|
2545
|
+
* Options to merge with user options on series/chart and default options.
|
|
2546
|
+
* @return {Array<Highcharts.PointInstrumentObject>}
|
|
2547
|
+
* The merged options.
|
|
2548
|
+
*/
|
|
2549
|
+
function getSeriesInstrumentOptions(series, options) {
|
|
2550
|
+
if (options && options.instruments) {
|
|
2551
|
+
return options.instruments;
|
|
2552
|
+
}
|
|
2553
|
+
var defaultInstrOpts = (series.chart.options.sonification &&
|
|
2554
|
+
series.chart.options.sonification.defaultInstrumentOptions ||
|
|
2555
|
+
{}),
|
|
2556
|
+
seriesInstrOpts = (series.options.sonification &&
|
|
2557
|
+
series.options.sonification.instruments ||
|
|
2558
|
+
[{}]),
|
|
2559
|
+
removeNullsFromObject = function (obj) {
|
|
2560
|
+
objectEach(obj,
|
|
2561
|
+
function (val,
|
|
2562
|
+
key) {
|
|
2563
|
+
if (val === null) {
|
|
2564
|
+
delete obj[key];
|
|
2565
|
+
}
|
|
2566
|
+
});
|
|
2567
|
+
};
|
|
2568
|
+
// Convert series options to PointInstrumentObjects and merge with
|
|
2569
|
+
// default options
|
|
2570
|
+
return (seriesInstrOpts).map(function (optionSet) {
|
|
2571
|
+
// Allow setting option to null to use default
|
|
2572
|
+
removeNullsFromObject(optionSet.mapping || {});
|
|
2573
|
+
removeNullsFromObject(optionSet);
|
|
2574
|
+
return {
|
|
2575
|
+
instrument: optionSet.instrument || defaultInstrOpts.instrument,
|
|
2576
|
+
instrumentOptions: merge(defaultInstrOpts, optionSet, {
|
|
2577
|
+
// Instrument options are lifted to root in the API options
|
|
2578
|
+
// object, so merge all in order to avoid missing any. But
|
|
2579
|
+
// remove the following which are not instrumentOptions:
|
|
2580
|
+
mapping: void 0,
|
|
2581
|
+
instrument: void 0
|
|
2582
|
+
}),
|
|
2583
|
+
instrumentMapping: merge(defaultInstrOpts.mapping, optionSet.mapping)
|
|
2584
|
+
};
|
|
2585
|
+
});
|
|
2586
|
+
}
|
|
2587
|
+
/**
|
|
2588
|
+
* @private
|
|
2589
|
+
* @param {Highcharts.Series} series
|
|
2590
|
+
* The series to get options for.
|
|
2591
|
+
* @param {Highcharts.SonifySeriesOptionsObject} options
|
|
2592
|
+
* Options to merge with user options on series/chart and default options.
|
|
2593
|
+
* @return {Highcharts.SonifySeriesOptionsObject}
|
|
2594
|
+
* The merged options.
|
|
2595
|
+
*/
|
|
2596
|
+
function getSeriesSonifyOptions(series, options) {
|
|
2597
|
+
var chartOpts = series.chart.options.sonification,
|
|
2598
|
+
seriesOpts = series.options.sonification;
|
|
2599
|
+
return merge({
|
|
2600
|
+
duration: ((seriesOpts && seriesOpts.duration) ||
|
|
2601
|
+
(chartOpts && chartOpts.duration))
|
|
2602
|
+
}, chartOptionsToSonifySeriesOptions(series), options);
|
|
2603
|
+
}
|
|
2604
|
+
/**
|
|
2605
|
+
* Get the time extremes of this series. This is handled outside of the
|
|
2606
|
+
* dataExtremes, as we always want to just sonify the visible points, and we
|
|
2607
|
+
* always want the extremes to be the extremes of the visible points.
|
|
2608
|
+
* @private
|
|
2609
|
+
* @param {Highcharts.Series} series
|
|
2610
|
+
* The series to compute on.
|
|
2611
|
+
* @param {Function|string} timeProp
|
|
2612
|
+
* The time axis data prop or the time function.
|
|
2613
|
+
* @return {Highcharts.RangeObject}
|
|
2614
|
+
* Object with min/max extremes for the time values.
|
|
2615
|
+
*/
|
|
2616
|
+
function getTimeExtremes(series, timeProp) {
|
|
2617
|
+
// Compute the extremes from the visible points.
|
|
2618
|
+
return series.points.reduce(function (acc, point) {
|
|
2619
|
+
var value = getPointTimeValue(point,
|
|
2620
|
+
timeProp);
|
|
2621
|
+
acc.min = Math.min(acc.min, value);
|
|
2622
|
+
acc.max = Math.max(acc.max, value);
|
|
2623
|
+
return acc;
|
|
2624
|
+
}, {
|
|
2625
|
+
min: Infinity,
|
|
2626
|
+
max: -Infinity
|
|
2627
|
+
});
|
|
2628
|
+
}
|
|
2629
|
+
/**
|
|
2630
|
+
* Utility function to get a new list of instrument options where all the
|
|
2631
|
+
* instrument references are copies.
|
|
2632
|
+
* @private
|
|
2633
|
+
* @param {Array<Highcharts.PointInstrumentObject>} instruments
|
|
2634
|
+
* The instrument options.
|
|
2635
|
+
* @return {Array<Highcharts.PointInstrumentObject>}
|
|
2636
|
+
* Array of copied instrument options.
|
|
2637
|
+
*/
|
|
2638
|
+
function makeInstrumentCopies(instruments) {
|
|
2639
|
+
return instruments.map(function (instrumentDef) {
|
|
2640
|
+
var instrument = instrumentDef.instrument,
|
|
2641
|
+
copy = (typeof instrument === 'string' ?
|
|
2642
|
+
Instrument.definitions[instrument] :
|
|
2643
|
+
instrument).copy();
|
|
2644
|
+
return merge(instrumentDef, { instrument: copy });
|
|
2645
|
+
});
|
|
2646
|
+
}
|
|
2647
|
+
/**
|
|
2648
|
+
* Sonify a series.
|
|
2649
|
+
*
|
|
2650
|
+
* @sample highcharts/sonification/series-basic/
|
|
2651
|
+
* Click on series to sonify
|
|
2652
|
+
* @sample highcharts/sonification/series-earcon/
|
|
2653
|
+
* Series with earcon
|
|
2654
|
+
* @sample highcharts/sonification/point-play-time/
|
|
2655
|
+
* Play y-axis by time
|
|
2656
|
+
* @sample highcharts/sonification/earcon-on-point/
|
|
2657
|
+
* Earcon set on point
|
|
2658
|
+
*
|
|
2659
|
+
* @requires module:modules/sonification
|
|
2660
|
+
*
|
|
2661
|
+
* @function Highcharts.Series#sonify
|
|
2662
|
+
*
|
|
2663
|
+
* @param {Highcharts.SonifySeriesOptionsObject} [options]
|
|
2664
|
+
* The options for sonifying this series. If not provided, uses options set
|
|
2665
|
+
* on chart and series.
|
|
2666
|
+
*/
|
|
2667
|
+
function sonify(options) {
|
|
2668
|
+
var mergedOptions = getSeriesSonifyOptions(this,
|
|
2669
|
+
options),
|
|
2670
|
+
timelinePath = buildTimelinePathFromSeries(this,
|
|
2671
|
+
mergedOptions),
|
|
2672
|
+
chartSonification = this.chart.sonification;
|
|
2673
|
+
if (chartSonification) {
|
|
2674
|
+
// Only one timeline can play at a time. If we want multiple series
|
|
2675
|
+
// playing at the same time, use chart.sonify.
|
|
2676
|
+
if (chartSonification.timeline) {
|
|
2677
|
+
chartSonification.timeline.pause();
|
|
2678
|
+
}
|
|
2679
|
+
// Store reference to duration
|
|
2680
|
+
chartSonification.duration = mergedOptions.duration;
|
|
2681
|
+
// Create new timeline for this series, and play it.
|
|
2682
|
+
chartSonification.timeline = new Timeline({
|
|
2683
|
+
paths: [timelinePath]
|
|
2684
|
+
});
|
|
2685
|
+
chartSonification.timeline.play();
|
|
2686
|
+
}
|
|
2687
|
+
}
|
|
2688
|
+
})(SeriesSonify || (SeriesSonify = {}));
|
|
2689
|
+
/* *
|
|
2690
|
+
*
|
|
2691
|
+
* Default Export
|
|
2692
|
+
*
|
|
2693
|
+
* */
|
|
2694
|
+
|
|
2695
|
+
return SeriesSonify;
|
|
2696
|
+
});
|
|
2697
|
+
_registerModule(_modules, 'Extensions/Sonification/ChartSonify.js', [_modules['Extensions/Sonification/Earcon.js'], _modules['Core/Series/Point.js'], _modules['Extensions/Sonification/SeriesSonify.js'], _modules['Extensions/Sonification/SonificationUtilities.js'], _modules['Extensions/Sonification/Timeline.js'], _modules['Extensions/Sonification/TimelineEvent.js'], _modules['Extensions/Sonification/TimelinePath.js'], _modules['Core/Utilities.js']], function (Earcon, Point, SeriesSonify, SU, Timeline, TimelineEvent, TimelinePath, U) {
|
|
2698
|
+
/* *
|
|
2699
|
+
*
|
|
2700
|
+
* (c) 2009-2021 Øystein Moseng
|
|
2701
|
+
*
|
|
2702
|
+
* Sonification functions for chart/series.
|
|
2703
|
+
*
|
|
2704
|
+
* License: www.highcharts.com/license
|
|
2705
|
+
*
|
|
2706
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
2707
|
+
*
|
|
2708
|
+
* */
|
|
2709
|
+
var getExtremesForInstrumentProps = SU.getExtremesForInstrumentProps,
|
|
2710
|
+
virtualAxisTranslate = SU.virtualAxisTranslate;
|
|
2711
|
+
var addEvent = U.addEvent,
|
|
2712
|
+
extend = U.extend,
|
|
2713
|
+
merge = U.merge,
|
|
2714
|
+
pick = U.pick,
|
|
2715
|
+
splat = U.splat;
|
|
2716
|
+
/* *
|
|
2717
|
+
*
|
|
2718
|
+
* Functions
|
|
2719
|
+
*
|
|
2720
|
+
* */
|
|
2721
|
+
/* eslint-disable valid-jsdoc */
|
|
2722
|
+
/**
|
|
2723
|
+
* Utility function to normalize the ordering of timeline paths when sonifying
|
|
2724
|
+
* a chart.
|
|
2725
|
+
* @private
|
|
2726
|
+
* @param {string|Array<string|Highcharts.Earcon|Array<string|Highcharts.Earcon>>} orderOptions
|
|
2727
|
+
* Order options for the sonification.
|
|
2728
|
+
* @param {Highcharts.Chart} chart
|
|
2729
|
+
* The chart we are sonifying.
|
|
2730
|
+
* @param {Function} seriesOptionsCallback
|
|
2731
|
+
* A function that takes a series as argument, and returns the series options
|
|
2732
|
+
* for that series to be used with buildTimelinePathFromSeries.
|
|
2733
|
+
* @return {Array<object|Array<object|Highcharts.TimelinePath>>}
|
|
2734
|
+
* If order is sequential, we return an array of objects to create series paths
|
|
2735
|
+
* from. If order is simultaneous we return an array of an array with the same.
|
|
2736
|
+
* If there is a custom order, we return an array of arrays of either objects
|
|
2737
|
+
* (for series) or TimelinePaths (for earcons and delays).
|
|
2738
|
+
*/
|
|
2739
|
+
function buildPathOrder(orderOptions, chart, seriesOptionsCallback) {
|
|
2740
|
+
var order;
|
|
2741
|
+
if (orderOptions === 'sequential' || orderOptions === 'simultaneous') {
|
|
2742
|
+
// Just add the series from the chart
|
|
2743
|
+
order = chart.series.reduce(function (seriesList, series) {
|
|
2744
|
+
if (series.visible &&
|
|
2745
|
+
(series.options.sonification &&
|
|
2746
|
+
series.options.sonification.enabled) !== false) {
|
|
2747
|
+
seriesList.push({
|
|
2748
|
+
series: series,
|
|
2749
|
+
seriesOptions: seriesOptionsCallback(series)
|
|
2750
|
+
});
|
|
2751
|
+
}
|
|
2752
|
+
return seriesList;
|
|
2753
|
+
}, []);
|
|
2754
|
+
// If order is simultaneous, group all series together
|
|
2755
|
+
if (orderOptions === 'simultaneous') {
|
|
2756
|
+
order = [order];
|
|
2757
|
+
}
|
|
2758
|
+
}
|
|
2759
|
+
else {
|
|
2760
|
+
// We have a specific order, and potentially custom items - like
|
|
2761
|
+
// earcons or silent waits.
|
|
2762
|
+
order = orderOptions.reduce(function (orderList, orderDef) {
|
|
2763
|
+
// Return set of items to play simultaneously. Could be only one.
|
|
2764
|
+
var simulItems = splat(orderDef).reduce(function (items,
|
|
2765
|
+
item) {
|
|
2766
|
+
var itemObject;
|
|
2767
|
+
// Is this item a series ID?
|
|
2768
|
+
if (typeof item === 'string') {
|
|
2769
|
+
var series = chart.get(item);
|
|
2770
|
+
if (series.visible) {
|
|
2771
|
+
itemObject = {
|
|
2772
|
+
series: series,
|
|
2773
|
+
seriesOptions: seriesOptionsCallback(series)
|
|
2774
|
+
};
|
|
2775
|
+
}
|
|
2776
|
+
// Is it an earcon? If so, just create the path.
|
|
2777
|
+
}
|
|
2778
|
+
else if (item instanceof Earcon) {
|
|
2779
|
+
// Path with a single event
|
|
2780
|
+
itemObject = new TimelinePath({
|
|
2781
|
+
events: [new TimelineEvent({
|
|
2782
|
+
eventObject: item
|
|
2783
|
+
})]
|
|
2784
|
+
});
|
|
2785
|
+
}
|
|
2786
|
+
// Is this item a silent wait? If so, just create the path.
|
|
2787
|
+
if (item.silentWait) {
|
|
2788
|
+
itemObject = new TimelinePath({
|
|
2789
|
+
silentWait: item.silentWait
|
|
2790
|
+
});
|
|
2791
|
+
}
|
|
2792
|
+
// Add to items to play simultaneously
|
|
2793
|
+
if (itemObject) {
|
|
2794
|
+
items.push(itemObject);
|
|
2795
|
+
}
|
|
2796
|
+
return items;
|
|
2797
|
+
}, []);
|
|
2798
|
+
// Add to order list
|
|
2799
|
+
if (simulItems.length) {
|
|
2800
|
+
orderList.push(simulItems);
|
|
2801
|
+
}
|
|
2802
|
+
return orderList;
|
|
2803
|
+
}, []);
|
|
2804
|
+
}
|
|
2805
|
+
return order;
|
|
2806
|
+
}
|
|
2807
|
+
/**
|
|
2808
|
+
* Utility function to add a silent wait after all series.
|
|
2809
|
+
* @private
|
|
2810
|
+
* @param {Array<object|Array<object|TimelinePath>>} order
|
|
2811
|
+
* The order of items.
|
|
2812
|
+
* @param {number} wait
|
|
2813
|
+
* The wait in milliseconds to add.
|
|
2814
|
+
* @return {Array<object|Array<object|TimelinePath>>}
|
|
2815
|
+
* The order with waits inserted.
|
|
2816
|
+
*/
|
|
2817
|
+
function addAfterSeriesWaits(order, wait) {
|
|
2818
|
+
if (!wait) {
|
|
2819
|
+
return order;
|
|
2820
|
+
}
|
|
2821
|
+
return order.reduce(function (newOrder, orderDef, i) {
|
|
2822
|
+
var simultaneousPaths = splat(orderDef);
|
|
2823
|
+
newOrder.push(simultaneousPaths);
|
|
2824
|
+
// Go through the simultaneous paths and see if there is a series there
|
|
2825
|
+
if (i < order.length - 1 && // Do not add wait after last series
|
|
2826
|
+
simultaneousPaths.some(function (item) {
|
|
2827
|
+
return item.series;
|
|
2828
|
+
})) {
|
|
2829
|
+
// We have a series, meaning we should add a wait after these
|
|
2830
|
+
// paths have finished.
|
|
2831
|
+
newOrder.push(new TimelinePath({
|
|
2832
|
+
silentWait: wait
|
|
2833
|
+
}));
|
|
2834
|
+
}
|
|
2835
|
+
return newOrder;
|
|
2836
|
+
}, []);
|
|
2837
|
+
}
|
|
2838
|
+
/**
|
|
2839
|
+
* Utility function to find the total amout of wait time in the TimelinePaths.
|
|
2840
|
+
* @private
|
|
2841
|
+
* @param {Array<object|Array<object|TimelinePath>>} order
|
|
2842
|
+
* The order of TimelinePaths/items.
|
|
2843
|
+
* @return {number}
|
|
2844
|
+
* The total time in ms spent on wait paths between playing.
|
|
2845
|
+
*/
|
|
2846
|
+
function getWaitTime(order) {
|
|
2847
|
+
return order.reduce(function (waitTime, orderDef) {
|
|
2848
|
+
var def = splat(orderDef);
|
|
2849
|
+
return waitTime + (def.length === 1 &&
|
|
2850
|
+
def[0].options &&
|
|
2851
|
+
def[0].options.silentWait || 0);
|
|
2852
|
+
}, 0);
|
|
2853
|
+
}
|
|
2854
|
+
/**
|
|
2855
|
+
* Utility function to ensure simultaneous paths have start/end events at the
|
|
2856
|
+
* same time, to sync them.
|
|
2857
|
+
* @private
|
|
2858
|
+
* @param {Array<Highcharts.TimelinePath>} paths
|
|
2859
|
+
* The paths to sync.
|
|
2860
|
+
*/
|
|
2861
|
+
function syncSimultaneousPaths(paths) {
|
|
2862
|
+
// Find the extremes for these paths
|
|
2863
|
+
var extremes = paths.reduce(function (extremes,
|
|
2864
|
+
path) {
|
|
2865
|
+
var events = path.events;
|
|
2866
|
+
if (events && events.length) {
|
|
2867
|
+
extremes.min = Math.min(events[0].time, extremes.min);
|
|
2868
|
+
extremes.max = Math.max(events[events.length - 1].time, extremes.max);
|
|
2869
|
+
}
|
|
2870
|
+
return extremes;
|
|
2871
|
+
}, {
|
|
2872
|
+
min: Infinity,
|
|
2873
|
+
max: -Infinity
|
|
2874
|
+
});
|
|
2875
|
+
// Go through the paths and add events to make them fit the same timespan
|
|
2876
|
+
paths.forEach(function (path) {
|
|
2877
|
+
var events = path.events,
|
|
2878
|
+
hasEvents = events && events.length,
|
|
2879
|
+
eventsToAdd = [];
|
|
2880
|
+
if (!(hasEvents && events[0].time <= extremes.min)) {
|
|
2881
|
+
eventsToAdd.push(new TimelineEvent({
|
|
2882
|
+
time: extremes.min
|
|
2883
|
+
}));
|
|
2884
|
+
}
|
|
2885
|
+
if (!(hasEvents && events[events.length - 1].time >= extremes.max)) {
|
|
2886
|
+
eventsToAdd.push(new TimelineEvent({
|
|
2887
|
+
time: extremes.max
|
|
2888
|
+
}));
|
|
2889
|
+
}
|
|
2890
|
+
if (eventsToAdd.length) {
|
|
2891
|
+
path.addTimelineEvents(eventsToAdd);
|
|
2892
|
+
}
|
|
2893
|
+
});
|
|
2894
|
+
}
|
|
2895
|
+
/**
|
|
2896
|
+
* Utility function to find the total duration span for all simul path sets
|
|
2897
|
+
* that include series.
|
|
2898
|
+
* @private
|
|
2899
|
+
* @param {Array<object|Array<object|Highcharts.TimelinePath>>} order
|
|
2900
|
+
* The order of TimelinePaths/items.
|
|
2901
|
+
* @return {number}
|
|
2902
|
+
* The total time value span difference for all series.
|
|
2903
|
+
*/
|
|
2904
|
+
function getSimulPathDurationTotal(order) {
|
|
2905
|
+
return order.reduce(function (durationTotal, orderDef) {
|
|
2906
|
+
return durationTotal + splat(orderDef).reduce(function (maxPathDuration, item) {
|
|
2907
|
+
var timeExtremes = (item.series &&
|
|
2908
|
+
item.seriesOptions &&
|
|
2909
|
+
item.seriesOptions.timeExtremes);
|
|
2910
|
+
return timeExtremes ?
|
|
2911
|
+
Math.max(maxPathDuration, timeExtremes.max - timeExtremes.min) : maxPathDuration;
|
|
2912
|
+
}, 0);
|
|
2913
|
+
}, 0);
|
|
2914
|
+
}
|
|
2915
|
+
/**
|
|
2916
|
+
* Function to calculate the duration in ms for a series.
|
|
2917
|
+
* @private
|
|
2918
|
+
* @param {number} seriesValueDuration
|
|
2919
|
+
* The duration of the series in value difference.
|
|
2920
|
+
* @param {number} totalValueDuration
|
|
2921
|
+
* The total duration of all (non simultaneous) series in value difference.
|
|
2922
|
+
* @param {number} totalDurationMs
|
|
2923
|
+
* The desired total duration for all series in milliseconds.
|
|
2924
|
+
* @return {number}
|
|
2925
|
+
* The duration for the series in milliseconds.
|
|
2926
|
+
*/
|
|
2927
|
+
function getSeriesDurationMs(seriesValueDuration, totalValueDuration, totalDurationMs) {
|
|
2928
|
+
// A series spanning the whole chart would get the full duration.
|
|
2929
|
+
return virtualAxisTranslate(seriesValueDuration, { min: 0, max: totalValueDuration }, { min: 0, max: totalDurationMs });
|
|
2930
|
+
}
|
|
2931
|
+
/**
|
|
2932
|
+
* Convert series building objects into paths and return a new list of
|
|
2933
|
+
* TimelinePaths.
|
|
2934
|
+
* @private
|
|
2935
|
+
* @param {Array<object|Array<object|Highcharts.TimelinePath>>} order
|
|
2936
|
+
* The order list.
|
|
2937
|
+
* @param {number} duration
|
|
2938
|
+
* Total duration to aim for in milliseconds.
|
|
2939
|
+
* @return {Array<Array<Highcharts.TimelinePath>>}
|
|
2940
|
+
* Array of TimelinePath objects to play.
|
|
2941
|
+
*/
|
|
2942
|
+
function buildPathsFromOrder(order, duration) {
|
|
2943
|
+
// Find time used for waits (custom or after series), and subtract it from
|
|
2944
|
+
// available duration.
|
|
2945
|
+
var totalAvailableDurationMs = Math.max(duration - getWaitTime(order), 0),
|
|
2946
|
+
// Add up simultaneous path durations to find total value span duration
|
|
2947
|
+
// of everything
|
|
2948
|
+
totalUsedDuration = getSimulPathDurationTotal(order);
|
|
2949
|
+
// Go through the order list and convert the items
|
|
2950
|
+
return order.reduce(function (allPaths, orderDef) {
|
|
2951
|
+
var simultaneousPaths = splat(orderDef).reduce(function (simulPaths,
|
|
2952
|
+
item) {
|
|
2953
|
+
if (item instanceof TimelinePath) {
|
|
2954
|
+
// This item is already a path object
|
|
2955
|
+
simulPaths.push(item);
|
|
2956
|
+
}
|
|
2957
|
+
else if (item.series) {
|
|
2958
|
+
// We have a series.
|
|
2959
|
+
// We need to set the duration of the series
|
|
2960
|
+
item.seriesOptions.duration =
|
|
2961
|
+
item.seriesOptions.duration || getSeriesDurationMs(item.seriesOptions.timeExtremes.max -
|
|
2962
|
+
item.seriesOptions.timeExtremes.min, totalUsedDuration, totalAvailableDurationMs);
|
|
2963
|
+
// Add the path
|
|
2964
|
+
simulPaths.push(SeriesSonify.buildTimelinePathFromSeries(item.series, item.seriesOptions));
|
|
2965
|
+
}
|
|
2966
|
+
return simulPaths;
|
|
2967
|
+
}, []);
|
|
2968
|
+
// Add in the simultaneous paths
|
|
2969
|
+
allPaths.push(simultaneousPaths);
|
|
2970
|
+
return allPaths;
|
|
2971
|
+
}, []);
|
|
2972
|
+
}
|
|
2973
|
+
/**
|
|
2974
|
+
* @private
|
|
2975
|
+
* @param {Highcharts.Chart} chart The chart to get options for.
|
|
2976
|
+
* @param {Highcharts.SonificationOptions} options
|
|
2977
|
+
* Options to merge with user options on chart and default options.
|
|
2978
|
+
* @return {Highcharts.SonificationOptions} The merged options.
|
|
2979
|
+
*/
|
|
2980
|
+
function getChartSonifyOptions(chart, options) {
|
|
2981
|
+
var chartOpts = chart.options.sonification || {};
|
|
2982
|
+
return merge({
|
|
2983
|
+
duration: chartOpts.duration,
|
|
2984
|
+
afterSeriesWait: chartOpts.afterSeriesWait,
|
|
2985
|
+
pointPlayTime: (chartOpts.defaultInstrumentOptions &&
|
|
2986
|
+
chartOpts.defaultInstrumentOptions.mapping &&
|
|
2987
|
+
chartOpts.defaultInstrumentOptions.mapping.pointPlayTime),
|
|
2988
|
+
order: chartOpts.order,
|
|
2989
|
+
onSeriesStart: (chartOpts.events && chartOpts.events.onSeriesStart),
|
|
2990
|
+
onSeriesEnd: (chartOpts.events && chartOpts.events.onSeriesEnd),
|
|
2991
|
+
onEnd: (chartOpts.events && chartOpts.events.onEnd)
|
|
2992
|
+
}, options);
|
|
2993
|
+
}
|
|
2994
|
+
/**
|
|
2995
|
+
* Sonify a chart.
|
|
2996
|
+
*
|
|
2997
|
+
* @sample highcharts/sonification/chart-sequential/
|
|
2998
|
+
* Sonify a basic chart
|
|
2999
|
+
* @sample highcharts/sonification/chart-simultaneous/
|
|
3000
|
+
* Sonify series simultaneously
|
|
3001
|
+
* @sample highcharts/sonification/chart-custom-order/
|
|
3002
|
+
* Custom defined order of series
|
|
3003
|
+
* @sample highcharts/sonification/chart-earcon/
|
|
3004
|
+
* Earcons on chart
|
|
3005
|
+
* @sample highcharts/sonification/chart-events/
|
|
3006
|
+
* Sonification events on chart
|
|
3007
|
+
*
|
|
3008
|
+
* @requires module:modules/sonification
|
|
3009
|
+
*
|
|
3010
|
+
* @function Highcharts.Chart#sonify
|
|
3011
|
+
*
|
|
3012
|
+
* @param {Highcharts.SonificationOptions} [options]
|
|
3013
|
+
* The options for sonifying this chart. If not provided,
|
|
3014
|
+
* uses options set on chart and series.
|
|
3015
|
+
*/
|
|
3016
|
+
function chartSonify(options) {
|
|
3017
|
+
var opts = getChartSonifyOptions(this,
|
|
3018
|
+
options);
|
|
3019
|
+
// Only one timeline can play at a time.
|
|
3020
|
+
if (this.sonification.timeline) {
|
|
3021
|
+
this.sonification.timeline.pause();
|
|
3022
|
+
}
|
|
3023
|
+
// Store reference to duration
|
|
3024
|
+
this.sonification.duration = opts.duration;
|
|
3025
|
+
// Calculate data extremes for the props used
|
|
3026
|
+
var dataExtremes = getExtremesForInstrumentProps(this,
|
|
3027
|
+
opts.instruments,
|
|
3028
|
+
opts.dataExtremes);
|
|
3029
|
+
// Figure out ordering of series and custom paths
|
|
3030
|
+
var order = buildPathOrder(opts.order,
|
|
3031
|
+
this,
|
|
3032
|
+
function (series) {
|
|
3033
|
+
return SeriesSonify.buildChartSonifySeriesOptions(series,
|
|
3034
|
+
dataExtremes,
|
|
3035
|
+
opts);
|
|
3036
|
+
});
|
|
3037
|
+
// Add waits after simultaneous paths with series in them.
|
|
3038
|
+
order = addAfterSeriesWaits(order, opts.afterSeriesWait || 0);
|
|
3039
|
+
// We now have a list of either TimelinePath objects or series that need to
|
|
3040
|
+
// be converted to TimelinePath objects. Convert everything to paths.
|
|
3041
|
+
var paths = buildPathsFromOrder(order,
|
|
3042
|
+
opts.duration);
|
|
3043
|
+
// Sync simultaneous paths
|
|
3044
|
+
paths.forEach(function (simultaneousPaths) {
|
|
3045
|
+
syncSimultaneousPaths(simultaneousPaths);
|
|
3046
|
+
});
|
|
3047
|
+
// We have a set of paths. Create the timeline, and play it.
|
|
3048
|
+
this.sonification.timeline = new Timeline({
|
|
3049
|
+
paths: paths,
|
|
3050
|
+
onEnd: opts.onEnd
|
|
3051
|
+
});
|
|
3052
|
+
this.sonification.timeline.play();
|
|
3053
|
+
}
|
|
3054
|
+
/**
|
|
3055
|
+
* Get a list of the points currently under cursor.
|
|
3056
|
+
*
|
|
3057
|
+
* @requires module:modules/sonification
|
|
3058
|
+
*
|
|
3059
|
+
* @function Highcharts.Chart#getCurrentSonifyPoints
|
|
3060
|
+
*
|
|
3061
|
+
* @return {Array<Highcharts.Point>}
|
|
3062
|
+
* The points currently under the cursor.
|
|
3063
|
+
*/
|
|
3064
|
+
function getCurrentPoints() {
|
|
3065
|
+
var cursorObj;
|
|
3066
|
+
if (this.sonification.timeline) {
|
|
3067
|
+
cursorObj = this.sonification.timeline.getCursor(); // Cursor per pathID
|
|
3068
|
+
return Object.keys(cursorObj).map(function (path) {
|
|
3069
|
+
// Get the event objects under cursor for each path
|
|
3070
|
+
return cursorObj[path].options.eventObject;
|
|
3071
|
+
}).filter(function (eventObj) {
|
|
3072
|
+
// Return the events that are points
|
|
3073
|
+
return eventObj instanceof Point;
|
|
3074
|
+
});
|
|
3075
|
+
}
|
|
3076
|
+
return [];
|
|
3077
|
+
}
|
|
3078
|
+
/**
|
|
3079
|
+
* Set the cursor to a point or set of points in different series.
|
|
3080
|
+
*
|
|
3081
|
+
* @requires module:modules/sonification
|
|
3082
|
+
*
|
|
3083
|
+
* @function Highcharts.Chart#setSonifyCursor
|
|
3084
|
+
*
|
|
3085
|
+
* @param {Highcharts.Point|Array<Highcharts.Point>} points
|
|
3086
|
+
* The point or points to set the cursor to. If setting multiple points
|
|
3087
|
+
* under the cursor, the points have to be in different series that are
|
|
3088
|
+
* being played simultaneously.
|
|
3089
|
+
*/
|
|
3090
|
+
function setCursor(points) {
|
|
3091
|
+
var timeline = this.sonification.timeline;
|
|
3092
|
+
if (timeline) {
|
|
3093
|
+
splat(points).forEach(function (point) {
|
|
3094
|
+
// We created the events with the ID of the points, which makes
|
|
3095
|
+
// this easy. Just call setCursor for each ID.
|
|
3096
|
+
timeline.setCursor(point.id);
|
|
3097
|
+
});
|
|
3098
|
+
}
|
|
3099
|
+
}
|
|
3100
|
+
/**
|
|
3101
|
+
* Pause the running sonification.
|
|
3102
|
+
*
|
|
3103
|
+
* @requires module:modules/sonification
|
|
3104
|
+
*
|
|
3105
|
+
* @function Highcharts.Chart#pauseSonify
|
|
3106
|
+
*
|
|
3107
|
+
* @param {boolean} [fadeOut=true]
|
|
3108
|
+
* Fade out as we pause to avoid clicks.
|
|
3109
|
+
*
|
|
3110
|
+
* @return {void}
|
|
3111
|
+
*/
|
|
3112
|
+
function pause(fadeOut) {
|
|
3113
|
+
if (this.sonification.timeline) {
|
|
3114
|
+
this.sonification.timeline.pause(pick(fadeOut, true));
|
|
3115
|
+
}
|
|
3116
|
+
else if (this.sonification.currentlyPlayingPoint) {
|
|
3117
|
+
this.sonification.currentlyPlayingPoint.cancelSonify(fadeOut);
|
|
3118
|
+
}
|
|
3119
|
+
}
|
|
3120
|
+
/**
|
|
3121
|
+
* Resume the currently running sonification. Requires series.sonify or
|
|
3122
|
+
* chart.sonify to have been played at some point earlier.
|
|
3123
|
+
*
|
|
3124
|
+
* @requires module:modules/sonification
|
|
3125
|
+
*
|
|
3126
|
+
* @function Highcharts.Chart#resumeSonify
|
|
3127
|
+
*
|
|
3128
|
+
* @param {Function} onEnd
|
|
3129
|
+
* Callback to call when play finished.
|
|
3130
|
+
*
|
|
3131
|
+
* @return {void}
|
|
3132
|
+
*/
|
|
3133
|
+
function resume(onEnd) {
|
|
3134
|
+
if (this.sonification.timeline) {
|
|
3135
|
+
this.sonification.timeline.play(onEnd);
|
|
3136
|
+
}
|
|
3137
|
+
}
|
|
3138
|
+
/**
|
|
3139
|
+
* Play backwards from cursor. Requires series.sonify or chart.sonify to have
|
|
3140
|
+
* been played at some point earlier.
|
|
3141
|
+
*
|
|
3142
|
+
* @requires module:modules/sonification
|
|
3143
|
+
*
|
|
3144
|
+
* @function Highcharts.Chart#rewindSonify
|
|
3145
|
+
*
|
|
3146
|
+
* @param {Function} onEnd
|
|
3147
|
+
* Callback to call when play finished.
|
|
3148
|
+
*
|
|
3149
|
+
* @return {void}
|
|
3150
|
+
*/
|
|
3151
|
+
function rewind(onEnd) {
|
|
3152
|
+
if (this.sonification.timeline) {
|
|
3153
|
+
this.sonification.timeline.rewind(onEnd);
|
|
3154
|
+
}
|
|
3155
|
+
}
|
|
3156
|
+
/**
|
|
3157
|
+
* Cancel current sonification and reset cursor.
|
|
3158
|
+
*
|
|
3159
|
+
* @requires module:modules/sonification
|
|
3160
|
+
*
|
|
3161
|
+
* @function Highcharts.Chart#cancelSonify
|
|
3162
|
+
*
|
|
3163
|
+
* @param {boolean} [fadeOut=true]
|
|
3164
|
+
* Fade out as we pause to avoid clicks.
|
|
3165
|
+
*
|
|
3166
|
+
* @return {void}
|
|
3167
|
+
*/
|
|
3168
|
+
function cancel(fadeOut) {
|
|
3169
|
+
this.pauseSonify(fadeOut);
|
|
3170
|
+
this.resetSonifyCursor();
|
|
3171
|
+
}
|
|
3172
|
+
/**
|
|
3173
|
+
* Reset cursor to start. Requires series.sonify or chart.sonify to have been
|
|
3174
|
+
* played at some point earlier.
|
|
3175
|
+
*
|
|
3176
|
+
* @requires module:modules/sonification
|
|
3177
|
+
*
|
|
3178
|
+
* @function Highcharts.Chart#resetSonifyCursor
|
|
3179
|
+
*
|
|
3180
|
+
* @return {void}
|
|
3181
|
+
*/
|
|
3182
|
+
function resetCursor() {
|
|
3183
|
+
if (this.sonification.timeline) {
|
|
3184
|
+
this.sonification.timeline.resetCursor();
|
|
3185
|
+
}
|
|
3186
|
+
}
|
|
3187
|
+
/**
|
|
3188
|
+
* Reset cursor to end. Requires series.sonify or chart.sonify to have been
|
|
3189
|
+
* played at some point earlier.
|
|
3190
|
+
*
|
|
3191
|
+
* @requires module:modules/sonification
|
|
3192
|
+
*
|
|
3193
|
+
* @function Highcharts.Chart#resetSonifyCursorEnd
|
|
3194
|
+
*
|
|
3195
|
+
* @return {void}
|
|
3196
|
+
*/
|
|
3197
|
+
function resetCursorEnd() {
|
|
3198
|
+
if (this.sonification.timeline) {
|
|
3199
|
+
this.sonification.timeline.resetCursorEnd();
|
|
3200
|
+
}
|
|
3201
|
+
}
|
|
3202
|
+
var composedClasses = [];
|
|
3203
|
+
/**
|
|
3204
|
+
* @private
|
|
3205
|
+
* @todo move to composition namespace with all functions
|
|
3206
|
+
*/
|
|
3207
|
+
function compose(ChartClass) {
|
|
3208
|
+
if (composedClasses.indexOf(ChartClass) === -1) {
|
|
3209
|
+
composedClasses.push(ChartClass);
|
|
3210
|
+
var chartProto = ChartClass.prototype;
|
|
3211
|
+
extend(chartProto, {
|
|
3212
|
+
sonify: chartSonify,
|
|
3213
|
+
pauseSonify: pause,
|
|
3214
|
+
resumeSonify: resume,
|
|
3215
|
+
rewindSonify: rewind,
|
|
3216
|
+
cancelSonify: cancel,
|
|
3217
|
+
getCurrentSonifyPoints: getCurrentPoints,
|
|
3218
|
+
setSonifyCursor: setCursor,
|
|
3219
|
+
resetSonifyCursor: resetCursor,
|
|
3220
|
+
resetSonifyCursorEnd: resetCursorEnd
|
|
3221
|
+
});
|
|
3222
|
+
// Prepare charts for sonification on init
|
|
3223
|
+
addEvent(ChartClass, 'init', function () {
|
|
3224
|
+
this.sonification = {};
|
|
3225
|
+
});
|
|
3226
|
+
// Update with chart/series/point updates
|
|
3227
|
+
addEvent(ChartClass, 'update', function (e) {
|
|
3228
|
+
var newOptions = e.options.sonification;
|
|
3229
|
+
if (newOptions) {
|
|
3230
|
+
merge(true, this.options.sonification, newOptions);
|
|
3231
|
+
}
|
|
3232
|
+
});
|
|
3233
|
+
}
|
|
3234
|
+
return ChartClass;
|
|
3235
|
+
}
|
|
3236
|
+
/* *
|
|
3237
|
+
*
|
|
3238
|
+
* Default Export
|
|
3239
|
+
*
|
|
3240
|
+
* */
|
|
3241
|
+
var ChartSonify = {
|
|
3242
|
+
chartSonify: chartSonify,
|
|
3243
|
+
compose: compose,
|
|
3244
|
+
pause: pause,
|
|
3245
|
+
resume: resume,
|
|
3246
|
+
rewind: rewind,
|
|
3247
|
+
cancel: cancel,
|
|
3248
|
+
getCurrentPoints: getCurrentPoints,
|
|
3249
|
+
setCursor: setCursor,
|
|
3250
|
+
resetCursor: resetCursor,
|
|
3251
|
+
resetCursorEnd: resetCursorEnd
|
|
3252
|
+
};
|
|
3253
|
+
/* *
|
|
3254
|
+
*
|
|
3255
|
+
* API Declarations
|
|
3256
|
+
*
|
|
3257
|
+
* */
|
|
3258
|
+
/**
|
|
3259
|
+
* An Earcon configuration, specifying an Earcon and when to play it.
|
|
3260
|
+
*
|
|
3261
|
+
* @requires module:modules/sonification
|
|
3262
|
+
*
|
|
3263
|
+
* @interface Highcharts.EarconConfiguration
|
|
3264
|
+
*/ /**
|
|
3265
|
+
* An Earcon instance.
|
|
3266
|
+
* @name Highcharts.EarconConfiguration#earcon
|
|
3267
|
+
* @type {Highcharts.Earcon}
|
|
3268
|
+
*/ /**
|
|
3269
|
+
* The ID of the point to play the Earcon on.
|
|
3270
|
+
* @name Highcharts.EarconConfiguration#onPoint
|
|
3271
|
+
* @type {string|undefined}
|
|
3272
|
+
*/ /**
|
|
3273
|
+
* A function to determine whether or not to play this earcon on a point. The
|
|
3274
|
+
* function is called for every point, receiving that point as parameter. It
|
|
3275
|
+
* should return either a boolean indicating whether or not to play the earcon,
|
|
3276
|
+
* or a new Earcon instance - in which case the new Earcon will be played.
|
|
3277
|
+
* @name Highcharts.EarconConfiguration#condition
|
|
3278
|
+
* @type {Function|undefined}
|
|
3279
|
+
*/
|
|
3280
|
+
/**
|
|
3281
|
+
* Options for sonifying a chart.
|
|
3282
|
+
*
|
|
3283
|
+
* @requires module:modules/sonification
|
|
3284
|
+
*
|
|
3285
|
+
* @interface Highcharts.SonificationOptions
|
|
3286
|
+
*/ /**
|
|
3287
|
+
* Duration for sonifying the entire chart. The duration is distributed across
|
|
3288
|
+
* the different series intelligently, but does not take earcons into account.
|
|
3289
|
+
* It is also possible to set the duration explicitly per series, using
|
|
3290
|
+
* `seriesOptions`. Note that points may continue to play after the duration has
|
|
3291
|
+
* passed, but no new points will start playing.
|
|
3292
|
+
* @name Highcharts.SonificationOptions#duration
|
|
3293
|
+
* @type {number}
|
|
3294
|
+
*/ /**
|
|
3295
|
+
* Define the order to play the series in. This can be given as a string, or an
|
|
3296
|
+
* array specifying a custom ordering. If given as a string, valid values are
|
|
3297
|
+
* `sequential` - where each series is played in order - or `simultaneous`,
|
|
3298
|
+
* where all series are played at once. For custom ordering, supply an array as
|
|
3299
|
+
* the order. Each element in the array can be either a string with a series ID,
|
|
3300
|
+
* an Earcon object, or an object with a numeric `silentWait` property
|
|
3301
|
+
* designating a number of milliseconds to wait before continuing. Each element
|
|
3302
|
+
* of the array will be played in order. To play elements simultaneously, group
|
|
3303
|
+
* the elements in an array.
|
|
3304
|
+
* @name Highcharts.SonificationOptions#order
|
|
3305
|
+
* @type {string|Array<string|Highcharts.Earcon|Array<string|Highcharts.Earcon>>}
|
|
3306
|
+
*/ /**
|
|
3307
|
+
* The axis to use for when to play the points. Can be a string with a data
|
|
3308
|
+
* property (e.g. `x`), or a function. If it is a function, this function
|
|
3309
|
+
* receives the point as argument, and should return a numeric value. The points
|
|
3310
|
+
* with the lowest numeric values are then played first, and the time between
|
|
3311
|
+
* points will be proportional to the distance between the numeric values. This
|
|
3312
|
+
* option can not be overridden per series.
|
|
3313
|
+
* @name Highcharts.SonificationOptions#pointPlayTime
|
|
3314
|
+
* @type {string|Function}
|
|
3315
|
+
*/ /**
|
|
3316
|
+
* Milliseconds of silent waiting to add between series. Note that waiting time
|
|
3317
|
+
* is considered part of the sonify duration.
|
|
3318
|
+
* @name Highcharts.SonificationOptions#afterSeriesWait
|
|
3319
|
+
* @type {number|undefined}
|
|
3320
|
+
*/ /**
|
|
3321
|
+
* Options as given to `series.sonify` to override options per series. If the
|
|
3322
|
+
* option is supplied as an array of options objects, the `id` property of the
|
|
3323
|
+
* object should correspond to the series' id. If the option is supplied as a
|
|
3324
|
+
* single object, the options apply to all series.
|
|
3325
|
+
* @name Highcharts.SonificationOptions#seriesOptions
|
|
3326
|
+
* @type {Object|Array<object>|undefined}
|
|
3327
|
+
*/ /**
|
|
3328
|
+
* The instrument definitions for the points in this chart.
|
|
3329
|
+
* @name Highcharts.SonificationOptions#instruments
|
|
3330
|
+
* @type {Array<Highcharts.PointInstrumentObject>|undefined}
|
|
3331
|
+
*/ /**
|
|
3332
|
+
* Earcons to add to the chart. Note that earcons can also be added per series
|
|
3333
|
+
* using `seriesOptions`.
|
|
3334
|
+
* @name Highcharts.SonificationOptions#earcons
|
|
3335
|
+
* @type {Array<Highcharts.EarconConfiguration>|undefined}
|
|
3336
|
+
*/ /**
|
|
3337
|
+
* Optionally provide the minimum/maximum data values for the points. If this is
|
|
3338
|
+
* not supplied, it is calculated from all points in the chart on demand. This
|
|
3339
|
+
* option is supplied in the following format, as a map of point data properties
|
|
3340
|
+
* to objects with min/max values:
|
|
3341
|
+
* ```js
|
|
3342
|
+
* dataExtremes: {
|
|
3343
|
+
* y: {
|
|
3344
|
+
* min: 0,
|
|
3345
|
+
* max: 100
|
|
3346
|
+
* },
|
|
3347
|
+
* z: {
|
|
3348
|
+
* min: -10,
|
|
3349
|
+
* max: 10
|
|
3350
|
+
* }
|
|
3351
|
+
* // Properties used and not provided are calculated on demand
|
|
3352
|
+
* }
|
|
3353
|
+
* ```
|
|
3354
|
+
* @name Highcharts.SonificationOptions#dataExtremes
|
|
3355
|
+
* @type {Highcharts.Dictionary<Highcharts.RangeObject>|undefined}
|
|
3356
|
+
*/ /**
|
|
3357
|
+
* Callback before a series is played.
|
|
3358
|
+
* @name Highcharts.SonificationOptions#onSeriesStart
|
|
3359
|
+
* @type {Function|undefined}
|
|
3360
|
+
*/ /**
|
|
3361
|
+
* Callback after a series has finished playing.
|
|
3362
|
+
* @name Highcharts.SonificationOptions#onSeriesEnd
|
|
3363
|
+
* @type {Function|undefined}
|
|
3364
|
+
*/ /**
|
|
3365
|
+
* Callback after the chart has played.
|
|
3366
|
+
* @name Highcharts.SonificationOptions#onEnd
|
|
3367
|
+
* @type {Function|undefined}
|
|
3368
|
+
*/
|
|
3369
|
+
/**
|
|
3370
|
+
* Options for sonifying a series.
|
|
3371
|
+
*
|
|
3372
|
+
* @requires module:modules/sonification
|
|
3373
|
+
*
|
|
3374
|
+
* @interface Highcharts.SonifySeriesOptionsObject
|
|
3375
|
+
*/ /**
|
|
3376
|
+
* The duration for playing the points. Note that points might continue to play
|
|
3377
|
+
* after the duration has passed, but no new points will start playing.
|
|
3378
|
+
* @name Highcharts.SonifySeriesOptionsObject#duration
|
|
3379
|
+
* @type {number}
|
|
3380
|
+
*/ /**
|
|
3381
|
+
* The axis to use for when to play the points. Can be a string with a data
|
|
3382
|
+
* property (e.g. `x`), or a function. If it is a function, this function
|
|
3383
|
+
* receives the point as argument, and should return a numeric value. The points
|
|
3384
|
+
* with the lowest numeric values are then played first, and the time between
|
|
3385
|
+
* points will be proportional to the distance between the numeric values.
|
|
3386
|
+
* @name Highcharts.SonifySeriesOptionsObject#pointPlayTime
|
|
3387
|
+
* @type {string|Function}
|
|
3388
|
+
*/ /**
|
|
3389
|
+
* The instrument definitions for the points in this series.
|
|
3390
|
+
* @name Highcharts.SonifySeriesOptionsObject#instruments
|
|
3391
|
+
* @type {Array<Highcharts.PointInstrumentObject>}
|
|
3392
|
+
*/ /**
|
|
3393
|
+
* Earcons to add to the series.
|
|
3394
|
+
* @name Highcharts.SonifySeriesOptionsObject#earcons
|
|
3395
|
+
* @type {Array<Highcharts.EarconConfiguration>|undefined}
|
|
3396
|
+
*/ /**
|
|
3397
|
+
* Optionally provide the minimum/maximum data values for the points. If this is
|
|
3398
|
+
* not supplied, it is calculated from all points in the chart on demand. This
|
|
3399
|
+
* option is supplied in the following format, as a map of point data properties
|
|
3400
|
+
* to objects with min/max values:
|
|
3401
|
+
* ```js
|
|
3402
|
+
* dataExtremes: {
|
|
3403
|
+
* y: {
|
|
3404
|
+
* min: 0,
|
|
3405
|
+
* max: 100
|
|
3406
|
+
* },
|
|
3407
|
+
* z: {
|
|
3408
|
+
* min: -10,
|
|
3409
|
+
* max: 10
|
|
3410
|
+
* }
|
|
3411
|
+
* // Properties used and not provided are calculated on demand
|
|
3412
|
+
* }
|
|
3413
|
+
* ```
|
|
3414
|
+
* @name Highcharts.SonifySeriesOptionsObject#dataExtremes
|
|
3415
|
+
* @type {Highcharts.Dictionary<Highcharts.RangeObject>|undefined}
|
|
3416
|
+
*/ /**
|
|
3417
|
+
* Callback before a point is played.
|
|
3418
|
+
* @name Highcharts.SonifySeriesOptionsObject#onPointStart
|
|
3419
|
+
* @type {Function|undefined}
|
|
3420
|
+
*/ /**
|
|
3421
|
+
* Callback after a point has finished playing.
|
|
3422
|
+
* @name Highcharts.SonifySeriesOptionsObject#onPointEnd
|
|
3423
|
+
* @type {Function|undefined}
|
|
3424
|
+
*/ /**
|
|
3425
|
+
* Callback after the series has played.
|
|
3426
|
+
* @name Highcharts.SonifySeriesOptionsObject#onEnd
|
|
3427
|
+
* @type {Function|undefined}
|
|
3428
|
+
*/
|
|
3429
|
+
''; // detach doclets above
|
|
3430
|
+
|
|
3431
|
+
return ChartSonify;
|
|
3432
|
+
});
|
|
3433
|
+
_registerModule(_modules, 'Extensions/Sonification/PointSonify.js', [_modules['Extensions/Sonification/Instrument.js'], _modules['Core/Utilities.js'], _modules['Extensions/Sonification/SonificationUtilities.js']], function (Instrument, U, SU) {
|
|
3434
|
+
/* *
|
|
3435
|
+
*
|
|
3436
|
+
* (c) 2009-2021 Øystein Moseng
|
|
3437
|
+
*
|
|
3438
|
+
* Code for sonifying single points.
|
|
3439
|
+
*
|
|
3440
|
+
* License: www.highcharts.com/license
|
|
3441
|
+
*
|
|
3442
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
3443
|
+
*
|
|
3444
|
+
* */
|
|
3445
|
+
var error = U.error,
|
|
3446
|
+
merge = U.merge,
|
|
3447
|
+
pick = U.pick;
|
|
3448
|
+
/* *
|
|
3449
|
+
*
|
|
3450
|
+
* Constants
|
|
3451
|
+
*
|
|
3452
|
+
* */
|
|
3453
|
+
var composedClasses = [];
|
|
3454
|
+
// Defaults for the instrument options
|
|
3455
|
+
// NOTE: Also change defaults in Highcharts.PointInstrumentOptionsObject if
|
|
3456
|
+
// making changes here.
|
|
3457
|
+
var defaultInstrumentOptions = {
|
|
3458
|
+
minDuration: 20,
|
|
3459
|
+
maxDuration: 2000,
|
|
3460
|
+
minVolume: 0.1,
|
|
3461
|
+
maxVolume: 1,
|
|
3462
|
+
minPan: -1,
|
|
3463
|
+
maxPan: 1,
|
|
3464
|
+
minFrequency: 220,
|
|
3465
|
+
maxFrequency: 2200
|
|
3466
|
+
};
|
|
3467
|
+
/* eslint-disable valid-jsdoc */
|
|
3468
|
+
/* *
|
|
3469
|
+
*
|
|
3470
|
+
* Composition
|
|
3471
|
+
*
|
|
3472
|
+
* */
|
|
3473
|
+
/**
|
|
3474
|
+
* @private
|
|
3475
|
+
*/
|
|
3476
|
+
var PointSonify;
|
|
3477
|
+
(function (PointSonify) {
|
|
3478
|
+
/* *
|
|
3479
|
+
*
|
|
3480
|
+
* Declarations
|
|
3481
|
+
*
|
|
3482
|
+
* */
|
|
3483
|
+
/* *
|
|
3484
|
+
*
|
|
3485
|
+
* Functions
|
|
3486
|
+
*
|
|
3487
|
+
* */
|
|
3488
|
+
/**
|
|
3489
|
+
* Extends the axis with ordinal support.
|
|
3490
|
+
*
|
|
3491
|
+
* @private
|
|
3492
|
+
*
|
|
3493
|
+
* @param PointClass
|
|
3494
|
+
* Point class to extend.
|
|
3495
|
+
*/
|
|
3496
|
+
function compose(PointClass) {
|
|
3497
|
+
if (composedClasses.indexOf(PointClass) === -1) {
|
|
3498
|
+
composedClasses.push(PointClass);
|
|
3499
|
+
var pointProto = PointClass.prototype;
|
|
3500
|
+
pointProto.sonify = pointSonify;
|
|
3501
|
+
pointProto.cancelSonify = pointCancelSonify;
|
|
3502
|
+
}
|
|
3503
|
+
return PointClass;
|
|
3504
|
+
}
|
|
3505
|
+
PointSonify.compose = compose;
|
|
3506
|
+
/**
|
|
3507
|
+
* Sonify a single point.
|
|
3508
|
+
*
|
|
3509
|
+
* @sample highcharts/sonification/point-basic/
|
|
3510
|
+
* Click on points to sonify
|
|
3511
|
+
* @sample highcharts/sonification/point-advanced/
|
|
3512
|
+
* Sonify bubbles
|
|
3513
|
+
*
|
|
3514
|
+
* @requires module:modules/sonification
|
|
3515
|
+
*
|
|
3516
|
+
* @function Highcharts.Point#sonify
|
|
3517
|
+
*
|
|
3518
|
+
* @param {Highcharts.PointSonifyOptionsObject} options
|
|
3519
|
+
* Options for the sonification of the point.
|
|
3520
|
+
*/
|
|
3521
|
+
function pointSonify(options) {
|
|
3522
|
+
var point = this,
|
|
3523
|
+
chart = point.series.chart,
|
|
3524
|
+
masterVolume = pick(options.masterVolume,
|
|
3525
|
+
chart.options.sonification &&
|
|
3526
|
+
chart.options.sonification.masterVolume),
|
|
3527
|
+
dataExtremes = options.dataExtremes || {},
|
|
3528
|
+
// Get the value to pass to instrument.play from the mapping value
|
|
3529
|
+
// passed in.
|
|
3530
|
+
getMappingValue = function (value,
|
|
3531
|
+
makeFunction,
|
|
3532
|
+
allowedExtremes) {
|
|
3533
|
+
// Function. Return new function if we try to use callback,
|
|
3534
|
+
// otherwise call it now and return result.
|
|
3535
|
+
if (typeof value === 'function') {
|
|
3536
|
+
return makeFunction ?
|
|
3537
|
+
function (time) {
|
|
3538
|
+
return value(point,
|
|
3539
|
+
dataExtremes,
|
|
3540
|
+
time);
|
|
3541
|
+
} :
|
|
3542
|
+
value(point, dataExtremes);
|
|
3543
|
+
}
|
|
3544
|
+
// String, this is a data prop. Potentially with negative
|
|
3545
|
+
// polarity.
|
|
3546
|
+
if (typeof value === 'string') {
|
|
3547
|
+
var hasInvertedPolarity = value.charAt(0) === '-';
|
|
3548
|
+
var dataProp = hasInvertedPolarity ?
|
|
3549
|
+
value.slice(1) : value;
|
|
3550
|
+
var pointValue = pick(point[dataProp],
|
|
3551
|
+
point.options[dataProp]);
|
|
3552
|
+
// Find data extremes if we don't have them
|
|
3553
|
+
dataExtremes[dataProp] = dataExtremes[dataProp] ||
|
|
3554
|
+
SU.calculateDataExtremes(point.series.chart, dataProp);
|
|
3555
|
+
// Find the value
|
|
3556
|
+
return SU.virtualAxisTranslate(pointValue, dataExtremes[dataProp], allowedExtremes, hasInvertedPolarity);
|
|
3557
|
+
}
|
|
3558
|
+
// Fixed number or something else weird, just use that
|
|
3559
|
+
return value;
|
|
3560
|
+
};
|
|
3561
|
+
// Register playing point on chart
|
|
3562
|
+
chart.sonification.currentlyPlayingPoint = point;
|
|
3563
|
+
// Keep track of instruments playing
|
|
3564
|
+
point.sonification = point.sonification || {};
|
|
3565
|
+
point.sonification.instrumentsPlaying =
|
|
3566
|
+
point.sonification.instrumentsPlaying || {};
|
|
3567
|
+
// Register signal handler for the point
|
|
3568
|
+
var signalHandler = point.sonification.signalHandler =
|
|
3569
|
+
point.sonification.signalHandler ||
|
|
3570
|
+
new SU.SignalHandler(['onEnd']);
|
|
3571
|
+
signalHandler.clearSignalCallbacks();
|
|
3572
|
+
signalHandler.registerSignalCallbacks({ onEnd: options.onEnd });
|
|
3573
|
+
// If we have a null point or invisible point, just return
|
|
3574
|
+
if (point.isNull || !point.visible || !point.series.visible) {
|
|
3575
|
+
signalHandler.emitSignal('onEnd');
|
|
3576
|
+
return;
|
|
3577
|
+
}
|
|
3578
|
+
// Go through instruments and play them
|
|
3579
|
+
options.instruments.forEach(function (instrumentDefinition) {
|
|
3580
|
+
var instrument = (typeof instrumentDefinition.instrument === 'string') ?
|
|
3581
|
+
Instrument.definitions[instrumentDefinition.instrument] :
|
|
3582
|
+
instrumentDefinition.instrument,
|
|
3583
|
+
mapping = instrumentDefinition.instrumentMapping || {},
|
|
3584
|
+
extremes = merge(defaultInstrumentOptions,
|
|
3585
|
+
instrumentDefinition.instrumentOptions),
|
|
3586
|
+
id = instrument.id,
|
|
3587
|
+
onEnd = function (cancelled) {
|
|
3588
|
+
// Instrument on end
|
|
3589
|
+
if (instrumentDefinition.onEnd) {
|
|
3590
|
+
instrumentDefinition.onEnd.apply(this,
|
|
3591
|
+
arguments);
|
|
3592
|
+
}
|
|
3593
|
+
// Remove currently playing point reference on chart
|
|
3594
|
+
if (chart.sonification &&
|
|
3595
|
+
chart.sonification.currentlyPlayingPoint) {
|
|
3596
|
+
delete chart.sonification.currentlyPlayingPoint;
|
|
3597
|
+
}
|
|
3598
|
+
// Remove reference from instruments playing
|
|
3599
|
+
if (point.sonification &&
|
|
3600
|
+
point.sonification.instrumentsPlaying) {
|
|
3601
|
+
delete point.sonification.instrumentsPlaying[id];
|
|
3602
|
+
// This was the last instrument?
|
|
3603
|
+
if (!Object.keys(point.sonification.instrumentsPlaying).length) {
|
|
3604
|
+
signalHandler.emitSignal('onEnd', cancelled);
|
|
3605
|
+
}
|
|
3606
|
+
}
|
|
3607
|
+
};
|
|
3608
|
+
// Play the note on the instrument
|
|
3609
|
+
if (instrument && instrument.play) {
|
|
3610
|
+
if (typeof masterVolume !== 'undefined') {
|
|
3611
|
+
instrument.setMasterVolume(masterVolume);
|
|
3612
|
+
}
|
|
3613
|
+
point.sonification.instrumentsPlaying[instrument.id] =
|
|
3614
|
+
instrument;
|
|
3615
|
+
instrument.play({
|
|
3616
|
+
frequency: getMappingValue(mapping.frequency, true, {
|
|
3617
|
+
min: extremes.minFrequency,
|
|
3618
|
+
max: extremes.maxFrequency
|
|
3619
|
+
}),
|
|
3620
|
+
duration: getMappingValue(mapping.duration, false, { min: extremes.minDuration, max: extremes.maxDuration }),
|
|
3621
|
+
pan: getMappingValue(mapping.pan, true, { min: extremes.minPan, max: extremes.maxPan }),
|
|
3622
|
+
volume: getMappingValue(mapping.volume, true, { min: extremes.minVolume, max: extremes.maxVolume }),
|
|
3623
|
+
onEnd: onEnd,
|
|
3624
|
+
minFrequency: extremes.minFrequency,
|
|
3625
|
+
maxFrequency: extremes.maxFrequency
|
|
3626
|
+
});
|
|
3627
|
+
}
|
|
3628
|
+
else {
|
|
3629
|
+
error(30);
|
|
3630
|
+
}
|
|
3631
|
+
});
|
|
3632
|
+
}
|
|
3633
|
+
/**
|
|
3634
|
+
* Cancel sonification of a point. Calls onEnd functions.
|
|
3635
|
+
*
|
|
3636
|
+
* @requires module:modules/sonification
|
|
3637
|
+
*
|
|
3638
|
+
* @function Highcharts.Point#cancelSonify
|
|
3639
|
+
*
|
|
3640
|
+
* @param {boolean} [fadeOut=false]
|
|
3641
|
+
* Whether or not to fade out as we stop. If false, the points are
|
|
3642
|
+
* cancelled synchronously.
|
|
3643
|
+
*
|
|
3644
|
+
*/
|
|
3645
|
+
function pointCancelSonify(fadeOut) {
|
|
3646
|
+
var playing = (this.sonification && this.sonification.instrumentsPlaying),
|
|
3647
|
+
instrIds = playing && Object.keys(playing);
|
|
3648
|
+
if (instrIds && instrIds.length) {
|
|
3649
|
+
instrIds.forEach(function (instr) {
|
|
3650
|
+
playing[instr].stop(!fadeOut, null, 'cancelled');
|
|
3651
|
+
});
|
|
3652
|
+
this.sonification.instrumentsPlaying = {};
|
|
3653
|
+
this.sonification.signalHandler.emitSignal('onEnd', 'cancelled');
|
|
3654
|
+
}
|
|
3655
|
+
}
|
|
3656
|
+
})(PointSonify || (PointSonify = {}));
|
|
3657
|
+
/* *
|
|
3658
|
+
*
|
|
3659
|
+
* Default Export
|
|
3660
|
+
*
|
|
3661
|
+
* */
|
|
3662
|
+
/* *
|
|
3663
|
+
*
|
|
3664
|
+
* API Declarations
|
|
3665
|
+
*
|
|
3666
|
+
* */
|
|
3667
|
+
/**
|
|
3668
|
+
* Define the parameter mapping for an instrument.
|
|
3669
|
+
*
|
|
3670
|
+
* @requires module:modules/sonification
|
|
3671
|
+
*
|
|
3672
|
+
* @interface Highcharts.PointInstrumentMappingObject
|
|
3673
|
+
*/ /**
|
|
3674
|
+
* Define the volume of the instrument. This can be a string with a data
|
|
3675
|
+
* property name, e.g. `'y'`, in which case this data property is used to define
|
|
3676
|
+
* the volume relative to the `y`-values of the other points. A higher `y` value
|
|
3677
|
+
* would then result in a higher volume. Alternatively, `'-y'` can be used,
|
|
3678
|
+
* which inverts the polarity, so that a higher `y` value results in a lower
|
|
3679
|
+
* volume. This option can also be a fixed number or a function. If it is a
|
|
3680
|
+
* function, this function is called in regular intervals while the note is
|
|
3681
|
+
* playing. It receives three arguments: The point, the dataExtremes, and the
|
|
3682
|
+
* current relative time - where 0 is the beginning of the note and 1 is the
|
|
3683
|
+
* end. The function should return the volume of the note as a number between
|
|
3684
|
+
* 0 and 1.
|
|
3685
|
+
* @name Highcharts.PointInstrumentMappingObject#volume
|
|
3686
|
+
* @type {string|number|Function}
|
|
3687
|
+
*/ /**
|
|
3688
|
+
* Define the duration of the notes for this instrument. This can be a string
|
|
3689
|
+
* with a data property name, e.g. `'y'`, in which case this data property is
|
|
3690
|
+
* used to define the duration relative to the `y`-values of the other points. A
|
|
3691
|
+
* higher `y` value would then result in a longer duration. Alternatively,
|
|
3692
|
+
* `'-y'` can be used, in which case the polarity is inverted, and a higher
|
|
3693
|
+
* `y` value would result in a shorter duration. This option can also be a
|
|
3694
|
+
* fixed number or a function. If it is a function, this function is called
|
|
3695
|
+
* once before the note starts playing, and should return the duration in
|
|
3696
|
+
* milliseconds. It receives two arguments: The point, and the dataExtremes.
|
|
3697
|
+
* @name Highcharts.PointInstrumentMappingObject#duration
|
|
3698
|
+
* @type {string|number|Function}
|
|
3699
|
+
*/ /**
|
|
3700
|
+
* Define the panning of the instrument. This can be a string with a data
|
|
3701
|
+
* property name, e.g. `'x'`, in which case this data property is used to define
|
|
3702
|
+
* the panning relative to the `x`-values of the other points. A higher `x`
|
|
3703
|
+
* value would then result in a higher panning value (panned further to the
|
|
3704
|
+
* right). Alternatively, `'-x'` can be used, in which case the polarity is
|
|
3705
|
+
* inverted, and a higher `x` value would result in a lower panning value
|
|
3706
|
+
* (panned further to the left). This option can also be a fixed number or a
|
|
3707
|
+
* function. If it is a function, this function is called in regular intervals
|
|
3708
|
+
* while the note is playing. It receives three arguments: The point, the
|
|
3709
|
+
* dataExtremes, and the current relative time - where 0 is the beginning of
|
|
3710
|
+
* the note and 1 is the end. The function should return the panning of the
|
|
3711
|
+
* note as a number between -1 and 1.
|
|
3712
|
+
* @name Highcharts.PointInstrumentMappingObject#pan
|
|
3713
|
+
* @type {string|number|Function|undefined}
|
|
3714
|
+
*/ /**
|
|
3715
|
+
* Define the frequency of the instrument. This can be a string with a data
|
|
3716
|
+
* property name, e.g. `'y'`, in which case this data property is used to define
|
|
3717
|
+
* the frequency relative to the `y`-values of the other points. A higher `y`
|
|
3718
|
+
* value would then result in a higher frequency. Alternatively, `'-y'` can be
|
|
3719
|
+
* used, in which case the polarity is inverted, and a higher `y` value would
|
|
3720
|
+
* result in a lower frequency. This option can also be a fixed number or a
|
|
3721
|
+
* function. If it is a function, this function is called in regular intervals
|
|
3722
|
+
* while the note is playing. It receives three arguments: The point, the
|
|
3723
|
+
* dataExtremes, and the current relative time - where 0 is the beginning of
|
|
3724
|
+
* the note and 1 is the end. The function should return the frequency of the
|
|
3725
|
+
* note as a number (in Hz).
|
|
3726
|
+
* @name Highcharts.PointInstrumentMappingObject#frequency
|
|
3727
|
+
* @type {string|number|Function}
|
|
3728
|
+
*/
|
|
3729
|
+
/**
|
|
3730
|
+
* @requires module:modules/sonification
|
|
3731
|
+
*
|
|
3732
|
+
* @interface Highcharts.PointInstrumentOptionsObject
|
|
3733
|
+
*/ /**
|
|
3734
|
+
* The minimum duration for a note when using a data property for duration. Can
|
|
3735
|
+
* be overridden by using either a fixed number or a function for
|
|
3736
|
+
* instrumentMapping.duration. Defaults to 20.
|
|
3737
|
+
* @name Highcharts.PointInstrumentOptionsObject#minDuration
|
|
3738
|
+
* @type {number|undefined}
|
|
3739
|
+
*/ /**
|
|
3740
|
+
* The maximum duration for a note when using a data property for duration. Can
|
|
3741
|
+
* be overridden by using either a fixed number or a function for
|
|
3742
|
+
* instrumentMapping.duration. Defaults to 2000.
|
|
3743
|
+
* @name Highcharts.PointInstrumentOptionsObject#maxDuration
|
|
3744
|
+
* @type {number|undefined}
|
|
3745
|
+
*/ /**
|
|
3746
|
+
* The minimum pan value for a note when using a data property for panning. Can
|
|
3747
|
+
* be overridden by using either a fixed number or a function for
|
|
3748
|
+
* instrumentMapping.pan. Defaults to -1 (fully left).
|
|
3749
|
+
* @name Highcharts.PointInstrumentOptionsObject#minPan
|
|
3750
|
+
* @type {number|undefined}
|
|
3751
|
+
*/ /**
|
|
3752
|
+
* The maximum pan value for a note when using a data property for panning. Can
|
|
3753
|
+
* be overridden by using either a fixed number or a function for
|
|
3754
|
+
* instrumentMapping.pan. Defaults to 1 (fully right).
|
|
3755
|
+
* @name Highcharts.PointInstrumentOptionsObject#maxPan
|
|
3756
|
+
* @type {number|undefined}
|
|
3757
|
+
*/ /**
|
|
3758
|
+
* The minimum volume for a note when using a data property for volume. Can be
|
|
3759
|
+
* overridden by using either a fixed number or a function for
|
|
3760
|
+
* instrumentMapping.volume. Defaults to 0.1.
|
|
3761
|
+
* @name Highcharts.PointInstrumentOptionsObject#minVolume
|
|
3762
|
+
* @type {number|undefined}
|
|
3763
|
+
*/ /**
|
|
3764
|
+
* The maximum volume for a note when using a data property for volume. Can be
|
|
3765
|
+
* overridden by using either a fixed number or a function for
|
|
3766
|
+
* instrumentMapping.volume. Defaults to 1.
|
|
3767
|
+
* @name Highcharts.PointInstrumentOptionsObject#maxVolume
|
|
3768
|
+
* @type {number|undefined}
|
|
3769
|
+
*/ /**
|
|
3770
|
+
* The minimum frequency for a note when using a data property for frequency.
|
|
3771
|
+
* Can be overridden by using either a fixed number or a function for
|
|
3772
|
+
* instrumentMapping.frequency. Defaults to 220.
|
|
3773
|
+
* @name Highcharts.PointInstrumentOptionsObject#minFrequency
|
|
3774
|
+
* @type {number|undefined}
|
|
3775
|
+
*/ /**
|
|
3776
|
+
* The maximum frequency for a note when using a data property for frequency.
|
|
3777
|
+
* Can be overridden by using either a fixed number or a function for
|
|
3778
|
+
* instrumentMapping.frequency. Defaults to 2200.
|
|
3779
|
+
* @name Highcharts.PointInstrumentOptionsObject#maxFrequency
|
|
3780
|
+
* @type {number|undefined}
|
|
3781
|
+
*/
|
|
3782
|
+
/**
|
|
3783
|
+
* An instrument definition for a point, specifying the instrument to play and
|
|
3784
|
+
* how to play it.
|
|
3785
|
+
*
|
|
3786
|
+
* @interface Highcharts.PointInstrumentObject
|
|
3787
|
+
*/ /**
|
|
3788
|
+
* An Instrument instance or the name of the instrument in the
|
|
3789
|
+
* Highcharts.sonification.instruments map.
|
|
3790
|
+
* @name Highcharts.PointInstrumentObject#instrument
|
|
3791
|
+
* @type {Highcharts.Instrument|string}
|
|
3792
|
+
*/ /**
|
|
3793
|
+
* Mapping of instrument parameters for this instrument.
|
|
3794
|
+
* @name Highcharts.PointInstrumentObject#instrumentMapping
|
|
3795
|
+
* @type {Highcharts.PointInstrumentMappingObject}
|
|
3796
|
+
*/ /**
|
|
3797
|
+
* Options for this instrument.
|
|
3798
|
+
* @name Highcharts.PointInstrumentObject#instrumentOptions
|
|
3799
|
+
* @type {Highcharts.PointInstrumentOptionsObject|undefined}
|
|
3800
|
+
*/ /**
|
|
3801
|
+
* Callback to call when the instrument has stopped playing.
|
|
3802
|
+
* @name Highcharts.PointInstrumentObject#onEnd
|
|
3803
|
+
* @type {Function|undefined}
|
|
3804
|
+
*/
|
|
3805
|
+
/**
|
|
3806
|
+
* Options for sonifying a point.
|
|
3807
|
+
* @interface Highcharts.PointSonifyOptionsObject
|
|
3808
|
+
*/ /**
|
|
3809
|
+
* The instrument definitions for this point.
|
|
3810
|
+
* @name Highcharts.PointSonifyOptionsObject#instruments
|
|
3811
|
+
* @type {Array<Highcharts.PointInstrumentObject>}
|
|
3812
|
+
*/ /**
|
|
3813
|
+
* Optionally provide the minimum/maximum values for the points. If this is not
|
|
3814
|
+
* supplied, it is calculated from the points in the chart on demand. This
|
|
3815
|
+
* option is supplied in the following format, as a map of point data properties
|
|
3816
|
+
* to objects with min/max values:
|
|
3817
|
+
* ```js
|
|
3818
|
+
* dataExtremes: {
|
|
3819
|
+
* y: {
|
|
3820
|
+
* min: 0,
|
|
3821
|
+
* max: 100
|
|
3822
|
+
* },
|
|
3823
|
+
* z: {
|
|
3824
|
+
* min: -10,
|
|
3825
|
+
* max: 10
|
|
3826
|
+
* }
|
|
3827
|
+
* // Properties used and not provided are calculated on demand
|
|
3828
|
+
* }
|
|
3829
|
+
* ```
|
|
3830
|
+
* @name Highcharts.PointSonifyOptionsObject#dataExtremes
|
|
3831
|
+
* @type {object|undefined}
|
|
3832
|
+
*/ /**
|
|
3833
|
+
* Callback called when the sonification has finished.
|
|
3834
|
+
* @name Highcharts.PointSonifyOptionsObject#onEnd
|
|
3835
|
+
* @type {Function|undefined}
|
|
3836
|
+
*/
|
|
3837
|
+
(''); // detach doclets above
|
|
3838
|
+
|
|
3839
|
+
return PointSonify;
|
|
3840
|
+
});
|
|
3841
|
+
_registerModule(_modules, 'masters/modules/sonification.src.js', [_modules['Core/Globals.js'], _modules['Extensions/Sonification/ChartSonify.js'], _modules['Extensions/Sonification/Earcon.js'], _modules['Extensions/Sonification/Instrument.js'], _modules['Extensions/Sonification/PointSonify.js'], _modules['Extensions/Sonification/SeriesSonify.js'], _modules['Extensions/Sonification/Sonification.js'], _modules['Extensions/Sonification/Timeline.js'], _modules['Extensions/Sonification/TimelineEvent.js'], _modules['Extensions/Sonification/TimelinePath.js']], function (Highcharts, ChartSonify, Earcon, Instrument, PointSonify, SeriesSonify, Sonification, Timeline, TimelineEvent, TimelinePath) {
|
|
3842
|
+
|
|
3843
|
+
var __assign = (this && this.__assign) || function () {
|
|
3844
|
+
__assign = Object.assign || function(t) {
|
|
3845
|
+
for (var s,
|
|
3846
|
+
i = 1,
|
|
3847
|
+
n = arguments.length; i < n; i++) {
|
|
3848
|
+
s = arguments[i];
|
|
3849
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
3850
|
+
t[p] = s[p];
|
|
3851
|
+
}
|
|
3852
|
+
return t;
|
|
3853
|
+
};
|
|
3854
|
+
return __assign.apply(this, arguments);
|
|
3855
|
+
};
|
|
3856
|
+
var G = Highcharts;
|
|
3857
|
+
G.sonification = __assign(__assign({}, Sonification), { instruments: Instrument.definitions, Earcon: Earcon,
|
|
3858
|
+
Instrument: Instrument,
|
|
3859
|
+
Timeline: Timeline,
|
|
3860
|
+
TimelineEvent: TimelineEvent,
|
|
3861
|
+
TimelinePath: TimelinePath });
|
|
3862
|
+
G.Earcon = Earcon;
|
|
3863
|
+
G.Instrument = Instrument;
|
|
3864
|
+
ChartSonify.compose(G.Chart);
|
|
3865
|
+
SeriesSonify.compose(G.Series);
|
|
3866
|
+
PointSonify.compose(G.Point);
|
|
3867
|
+
|
|
3868
|
+
});
|
|
3869
|
+
}));
|