@ntlab/ntjs-assets 2.41.0 → 2.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/js/cdn.json +1 -1
- package/assets/js/highcharts/README.md +8 -17
- package/assets/js/highcharts/css/highcharts.css +12 -5
- package/assets/js/highcharts/es-modules/Accessibility/A11yI18n.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Accessibility.js +2 -2
- package/assets/js/highcharts/es-modules/Accessibility/AccessibilityComponent.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/AnnotationsA11y.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/ContainerComponent.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/InfoRegionsComponent.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/LegendComponent.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/MenuComponent.js +6 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/NavigatorComponent.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/RangeSelectorComponent.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +3 -2
- package/assets/js/highcharts/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +9 -8
- package/assets/js/highcharts/es-modules/Accessibility/Components/ZoomComponent.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/FocusBorder.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/HighContrastMode.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/HighContrastTheme.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/KeyboardNavigation.js +4 -2
- package/assets/js/highcharts/es-modules/Accessibility/KeyboardNavigationHandler.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Options/A11yDefaults.js +4 -3
- package/assets/js/highcharts/es-modules/Accessibility/Options/DeprecatedOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Options/LangDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/ProxyElement.js +7 -4
- package/assets/js/highcharts/es-modules/Accessibility/ProxyProvider.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Utils/Announcer.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Utils/ChartUtilities.js +2 -2
- package/assets/js/highcharts/es-modules/Accessibility/Utils/DOMElementProvider.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Utils/EventProvider.js +1 -1
- package/assets/js/highcharts/es-modules/Accessibility/Utils/HTMLUtilities.js +3 -3
- package/assets/js/highcharts/es-modules/Core/Animation/AnimationUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Animation/Fx.js +3 -3
- package/assets/js/highcharts/es-modules/Core/Axis/Axis.js +31 -19
- package/assets/js/highcharts/es-modules/Core/Axis/Axis3DComposition.js +3 -3
- package/assets/js/highcharts/es-modules/Core/Axis/Axis3DDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/AxisDefaults.js +29 -29
- package/assets/js/highcharts/es-modules/Core/Axis/BrokenAxis.js +3 -3
- package/assets/js/highcharts/es-modules/Core/Axis/Color/ColorAxis.js +3 -3
- package/assets/js/highcharts/es-modules/Core/Axis/Color/ColorAxisComposition.js +3 -4
- package/assets/js/highcharts/es-modules/Core/Axis/Color/ColorAxisDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/Color/ColorAxisLike.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/DateTimeAxis.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/GridAxis.js +11 -15
- package/assets/js/highcharts/es-modules/Core/Axis/LogarithmicAxis.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/NavigatorAxisComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/OrdinalAxis.js +18 -9
- package/assets/js/highcharts/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +2 -1
- package/assets/js/highcharts/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +2 -2
- package/assets/js/highcharts/es-modules/Core/Axis/RadialAxis.js +4 -5
- package/assets/js/highcharts/es-modules/Core/Axis/RadialAxisDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/ScrollbarAxis.js +4 -6
- package/assets/js/highcharts/es-modules/Core/Axis/SolidGaugeAxis.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/Stacking/StackItem.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/Stacking/StackingAxis.js +3 -3
- package/assets/js/highcharts/es-modules/Core/Axis/Tick.js +11 -13
- package/assets/js/highcharts/es-modules/Core/Axis/Tick3DComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Axis/TreeGrid/TreeGridAxis.js +5 -6
- package/assets/js/highcharts/es-modules/Core/Axis/TreeGrid/TreeGridTick.js +4 -4
- package/assets/js/highcharts/es-modules/Core/Axis/WaterfallAxis.js +3 -3
- package/assets/js/highcharts/es-modules/Core/Axis/ZAxis.js +2 -3
- package/assets/js/highcharts/es-modules/Core/Chart/Chart.js +58 -33
- package/assets/js/highcharts/es-modules/Core/Chart/Chart3D.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Chart/ChartDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Chart/ChartNavigationComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Chart/GanttChart.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Chart/MapChart.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Chart/StockChart.js +8 -12
- package/assets/js/highcharts/es-modules/Core/Color/Color.js +37 -9
- package/assets/js/highcharts/es-modules/Core/Color/Palettes.js +2 -1
- package/assets/js/highcharts/es-modules/Core/Defaults.js +171 -29
- package/assets/js/highcharts/es-modules/Core/Foundation.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Geometry/CircleUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Geometry/GeometryUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Geometry/PolygonClip.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Globals.js +3 -5
- package/assets/js/highcharts/es-modules/Core/HttpUtilities.js +3 -3
- package/assets/js/highcharts/es-modules/Core/Legend/Legend.js +12 -11
- package/assets/js/highcharts/es-modules/Core/Legend/LegendSymbol.js +1 -1
- package/assets/js/highcharts/es-modules/Core/MSPointer.js +2 -2
- package/assets/js/highcharts/es-modules/Core/Math3D.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Pointer.js +33 -30
- package/assets/js/highcharts/es-modules/Core/Renderer/HTML/AST.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Renderer/HTML/HTMLElement.js +125 -66
- package/assets/js/highcharts/es-modules/Core/Renderer/RendererRegistry.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Renderer/RendererUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Renderer/SVG/SVGElement.js +27 -25
- package/assets/js/highcharts/es-modules/Core/Renderer/SVG/SVGElement3D.js +3 -3
- package/assets/js/highcharts/es-modules/Core/Renderer/SVG/SVGLabel.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Renderer/SVG/SVGRenderer.js +38 -17
- package/assets/js/highcharts/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +2 -2
- package/assets/js/highcharts/es-modules/Core/Renderer/SVG/Symbols.js +13 -7
- package/assets/js/highcharts/es-modules/Core/Renderer/SVG/TextBuilder.js +7 -7
- package/assets/js/highcharts/es-modules/Core/Responsive.js +4 -4
- package/assets/js/highcharts/es-modules/Core/Series/DataLabel.js +11 -6
- package/assets/js/highcharts/es-modules/Core/Series/DataSeriesComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Series/DataSeriesConverter.js +2 -2
- package/assets/js/highcharts/es-modules/{Extensions → Core/Series}/OverlappingDataLabels.js +11 -13
- package/assets/js/highcharts/es-modules/Core/Series/Point.js +19 -13
- package/assets/js/highcharts/es-modules/Core/Series/Series.js +128 -132
- package/assets/js/highcharts/es-modules/Core/Series/Series3D.js +2 -2
- package/assets/js/highcharts/es-modules/Core/Series/SeriesDefaults.js +37 -13
- package/assets/js/highcharts/es-modules/Core/Series/SeriesRegistry.js +1 -1
- package/assets/js/highcharts/es-modules/Core/Templating.js +35 -9
- package/assets/js/highcharts/es-modules/Core/Time.js +8 -796
- package/assets/js/highcharts/es-modules/Core/Tooltip.js +83 -62
- package/assets/js/highcharts/es-modules/Core/Utilities.js +6 -9
- package/assets/js/highcharts/es-modules/Data/ColumnUtils.js +113 -0
- package/assets/js/highcharts/es-modules/Data/Connectors/CSVConnector.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Connectors/DataConnector.js +2 -2
- package/assets/js/highcharts/es-modules/Data/Connectors/GoogleSheetsConnector.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Connectors/HTMLTableConnector.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Connectors/JSONConnector.js +10 -2
- package/assets/js/highcharts/es-modules/Data/Converters/CSVConverter.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Converters/DataConverter.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Converters/GoogleSheetsConverter.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Converters/HTMLTableConverter.js +9 -2
- package/assets/js/highcharts/es-modules/Data/Converters/JSONConverter.js +1 -1
- package/assets/js/highcharts/es-modules/Data/DataCursor.js +1 -1
- package/assets/js/highcharts/es-modules/Data/DataEvent.js +1 -1
- package/assets/js/highcharts/es-modules/Data/DataPool.js +3 -3
- package/assets/js/highcharts/es-modules/Data/DataPoolDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Data/DataPoolOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Data/DataTable.js +70 -19
- package/assets/js/highcharts/es-modules/Data/DataTableCore.js +48 -15
- package/assets/js/highcharts/es-modules/Data/DataTableOptions.js +2 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Formula.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/FormulaParser.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/FormulaProcessor.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/FormulaTypes.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/ABS.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/AND.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/AVERAGE.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/AVERAGEA.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/COUNT.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/COUNTA.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/IF.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/ISNA.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/MAX.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/MEDIAN.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/MIN.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/MOD.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/MODE.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/NOT.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/OR.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/PRODUCT.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/SUM.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Formula/Functions/XOR.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/ChainModifier.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/ChainModifierOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/DataModifier.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/DataModifierEvent.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/DataModifierOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/InvertModifier.js +6 -3
- package/assets/js/highcharts/es-modules/Data/Modifiers/InvertModifierOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/MathModifier.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/MathModifierOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/RangeModifier.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/RangeModifierOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/SortModifier.js +1 -1
- package/assets/js/highcharts/es-modules/Data/Modifiers/SortModifierOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Annotations/Annotation.js +2 -2
- package/assets/js/highcharts/es-modules/Extensions/Annotations/AnnotationChart.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Annotations/ControlPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Annotations/EventEmitter.js +7 -3
- package/assets/js/highcharts/es-modules/Extensions/Annotations/NavigationBindings.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Annotations/NavigationBindingsDefaults.js +3 -3
- package/assets/js/highcharts/es-modules/Extensions/Annotations/NavigationBindingsUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Annotations/Popup/Popup.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Annotations/Popup/PopupAnnotations.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Annotations/Popup/PopupComposition.js +2 -2
- package/assets/js/highcharts/es-modules/Extensions/Annotations/Popup/PopupIndicators.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Annotations/Popup/PopupTabs.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/Measure.js +51 -49
- package/assets/js/highcharts/es-modules/Extensions/Boost/Boost.js +3 -3
- package/assets/js/highcharts/es-modules/Extensions/Boost/BoostChart.js +3 -3
- package/assets/js/highcharts/es-modules/Extensions/Boost/BoostSeries.js +22 -7
- package/assets/js/highcharts/es-modules/Extensions/Boost/BoostableMap.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Boost/Boostables.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Boost/NamedColors.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Boost/WGLDrawMode.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Boost/WGLRenderer.js +5 -2
- package/assets/js/highcharts/es-modules/Extensions/Boost/WGLShader.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Boost/WGLVertexBuffer.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Breadcrumbs/Breadcrumbs.js +0 -3
- package/assets/js/highcharts/es-modules/Extensions/CurrentDateIndication.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Data.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DataGrouping/ApproximationDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DataGrouping/ApproximationRegistry.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DataGrouping/DataGrouping.js +3 -3
- package/assets/js/highcharts/es-modules/Extensions/DataGrouping/DataGroupingAxisComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DataGrouping/DataGroupingDefaults.js +2 -2
- package/assets/js/highcharts/es-modules/Extensions/DataGrouping/DataGroupingSeriesComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Debugger/Debugger.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DownloadURL.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DragPanes/AxisResizer.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DragPanes/AxisResizerDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DragPanes/DragPanes.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DraggablePoints/DragDropDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DraggablePoints/DragDropProps.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DraggablePoints/DragDropUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DraggablePoints/DraggableChart.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/DraggablePoints/DraggablePoints.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Drilldown/Drilldown.js +2 -5
- package/assets/js/highcharts/es-modules/Extensions/Drilldown/DrilldownDefaults.js +7 -5
- package/assets/js/highcharts/es-modules/Extensions/Drilldown/DrilldownSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/ExportData/ExportData.js +6 -5
- package/assets/js/highcharts/es-modules/Extensions/ExportData/ExportDataDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Exporting/Exporting.js +33 -18
- package/assets/js/highcharts/es-modules/Extensions/Exporting/ExportingDefaults.js +5 -7
- package/assets/js/highcharts/es-modules/Extensions/Exporting/ExportingSymbols.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Exporting/Fullscreen.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/MarkerClusters/MarkerClusterDebugging.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/MarkerClusters/MarkerClusterDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/MarkerClusters/MarkerClusterScatter.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/MarkerClusters/MarkerClusterSymbols.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/MarkerClusters/MarkerClusters.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/NoDataToDisplay/NoDataDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/NoDataToDisplay/NoDataToDisplay.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +2 -2
- package/assets/js/highcharts/es-modules/Extensions/Pane/Pane.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Pane/PaneDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/ParallelCoordinates/ParallelAxis.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/ParallelCoordinates/ParallelCoordinates.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/ParallelCoordinates/ParallelCoordinatesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/ParallelCoordinates/ParallelSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/PatternFill.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/PriceIndication.js +52 -1
- package/assets/js/highcharts/es-modules/Extensions/ScrollablePlotArea.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/SeriesLabel/SeriesLabel.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/SeriesLabel/SeriesLabelDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/SeriesLabel/SeriesLabelUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/InstrumentPresets.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/MIDI.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/Options.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/Scales.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/Sonification.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/SonificationInstrument.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/SonificationSpeaker.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/SonificationTimeline.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/SynthPatch.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/TimelineChannel.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Sonification/TimelineFromChart.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/StaticScale.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/TextPath.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/Avocado.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/BrandDark.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/BrandLight.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/DarkBlue.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/DarkGreen.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/DarkUnica.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/Gray.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/Grid.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/GridLight.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/HighContrastDark.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/HighContrastLight.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/SandSignika.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/Skies.js +1 -1
- package/assets/js/highcharts/es-modules/Extensions/Themes/Sunset.js +1 -1
- package/assets/js/highcharts/es-modules/Gantt/Tree.js +1 -1
- package/assets/js/highcharts/es-modules/Maps/GeoJSONComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Maps/MapNavigation.js +1 -1
- package/assets/js/highcharts/es-modules/Maps/MapNavigationDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Maps/MapPointer.js +1 -1
- package/assets/js/highcharts/es-modules/Maps/MapSymbols.js +1 -1
- package/assets/js/highcharts/es-modules/Maps/MapUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Maps/MapView.js +1 -1
- package/assets/js/highcharts/es-modules/Maps/MapViewDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/ArcDiagram/ArcDiagramPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Area/AreaSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Area/AreaSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Area3D/Area3DSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/AreaRange/AreaRangePoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/AreaRange/AreaRangeSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/AreaRange/AreaRangeSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/AreaSpline/AreaSplineSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/AreaSplineRange/AreaSplineRangeSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Bar/BarSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Bellcurve/BellcurveSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Bellcurve/BellcurveSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/BoxPlot/BoxPlotSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/BoxPlot/BoxPlotSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Bubble/BubbleLegendComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Bubble/BubbleLegendItem.js +6 -7
- package/assets/js/highcharts/es-modules/Series/Bubble/BubblePoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Bubble/BubbleSeries.js +7 -10
- package/assets/js/highcharts/es-modules/Series/Bullet/BulletPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Bullet/BulletSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Candlestick/CandlestickSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Candlestick/CandlestickSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/CenteredUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Series/ColorMapComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Column/ColumnDataLabel.js +17 -14
- package/assets/js/highcharts/es-modules/Series/Column/ColumnSeries.js +21 -13
- package/assets/js/highcharts/es-modules/Series/Column/ColumnSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Column3D/Column3DComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/ColumnRange/ColumnRangePoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/ColumnRange/ColumnRangeSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Cylinder/CylinderComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Cylinder/CylinderPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Cylinder/CylinderSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Cylinder/CylinderSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Cylinder/SVGElement3DCylinder.js +1 -1
- package/assets/js/highcharts/es-modules/Series/DataModifyComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/DependencyWheel/DependencyWheelSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/DotPlot/DotPlotSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/DotPlot/DotPlotSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/DragNodesComposition.js +9 -3
- package/assets/js/highcharts/es-modules/Series/Dumbbell/DumbbellPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Dumbbell/DumbbellSeries.js +4 -2
- package/assets/js/highcharts/es-modules/Series/Dumbbell/DumbbellSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/ErrorBar/ErrorBarSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/ErrorBar/ErrorBarSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Flags/FlagsPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Flags/FlagsSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Flags/FlagsSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/FlowMap/FlowMapPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/FlowMap/FlowMapSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Funnel/FunnelSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Funnel/FunnelSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Funnel3D/Funnel3DComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Funnel3D/Funnel3DPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Funnel3D/Funnel3DSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Funnel3D/SVGElement3DFunnel.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Gantt/GanttPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Gantt/GanttSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Gantt/GanttSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Gauge/GaugePoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Gauge/GaugeSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/GeoHeatmap/GeoHeatmapPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/GeoHeatmap/GeoHeatmapPointOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Series/GeoHeatmap/GeoHeatmapSeries.js +36 -21
- package/assets/js/highcharts/es-modules/Series/GeoHeatmap/GeoHeatmapSeriesOptions.js +1 -1
- package/assets/js/highcharts/es-modules/Series/GraphLayoutComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/HLC/HLCPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/HLC/HLCSeries.js +11 -1
- package/assets/js/highcharts/es-modules/Series/HLC/HLCSeriesDefaults.js +4 -4
- package/assets/js/highcharts/es-modules/Series/Heatmap/HeatmapPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Heatmap/HeatmapSeries.js +9 -16
- package/assets/js/highcharts/es-modules/Series/Heatmap/HeatmapSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/HeikinAshi/HeikinAshiPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/HeikinAshi/HeikinAshiSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Histogram/HistogramSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Histogram/HistogramSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/InterpolationUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Item/ItemPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Item/ItemSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Item/ItemSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Line/LineSeries.js +5 -3
- package/assets/js/highcharts/es-modules/Series/Lollipop/LollipopPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Lollipop/LollipopSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Map/MapPoint.js +3 -3
- package/assets/js/highcharts/es-modules/Series/Map/MapSeries.js +7 -10
- package/assets/js/highcharts/es-modules/Series/Map/MapSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/MapBubble/MapBubblePoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/MapBubble/MapBubbleSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/MapLine/MapLineSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/MapLine/MapLineSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/MapPoint/MapPointPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/MapPoint/MapPointSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/MapPoint/MapPointSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Networkgraph/EulerIntegration.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Networkgraph/NetworkgraphPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Networkgraph/NetworkgraphSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Networkgraph/NetworkgraphSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Networkgraph/QuadTree.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Networkgraph/QuadTreeNode.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Networkgraph/ReingoldFruchtermanLayout.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Networkgraph/VerletIntegration.js +1 -1
- package/assets/js/highcharts/es-modules/Series/OHLC/OHLCPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/OHLC/OHLCSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/OHLC/OHLCSeriesDefaults.js +5 -5
- package/assets/js/highcharts/es-modules/Series/OnSeriesComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Organization/OrganizationPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Organization/OrganizationSeries.js +22 -18
- package/assets/js/highcharts/es-modules/Series/Organization/OrganizationSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/PackedBubble/PackedBubbleIntegration.js +25 -18
- package/assets/js/highcharts/es-modules/Series/PackedBubble/PackedBubbleLayout.js +49 -24
- package/assets/js/highcharts/es-modules/Series/PackedBubble/PackedBubblePoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/PackedBubble/PackedBubbleSeries.js +5 -2
- package/assets/js/highcharts/es-modules/Series/PackedBubble/PackedBubbleSeriesDefaults.js +4 -3
- package/assets/js/highcharts/es-modules/Series/ParetoSeries/ParetoSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/ParetoSeries/ParetoSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/PathUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pictorial/PictorialPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pictorial/PictorialSeries.js +3 -3
- package/assets/js/highcharts/es-modules/Series/Pictorial/PictorialUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pie/PieDataLabel.js +2 -3
- package/assets/js/highcharts/es-modules/Series/Pie/PiePoint.js +2 -2
- package/assets/js/highcharts/es-modules/Series/Pie/PieSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pie/PieSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pie3D/Pie3DPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pie3D/Pie3DSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/PointAndFigure/PointAndFigurePoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/PointAndFigure/PointAndFigureSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/PointAndFigure/PointAndFigureSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/PolarComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Polygon/PolygonSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Polygon/PolygonSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pyramid/PyramidSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pyramid/PyramidSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Pyramid3D/Pyramid3DSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Renko/RenkoPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Renko/RenkoSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Renko/RenkoSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Sankey/SankeyColumnComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Sankey/SankeyPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Sankey/SankeySeries.js +3 -2
- package/assets/js/highcharts/es-modules/Series/Sankey/SankeySeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Scatter/ScatterSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Scatter/ScatterSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Scatter3D/Scatter3DPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Scatter3D/Scatter3DSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Scatter3D/Scatter3DSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/SeriesOnPointComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Series/SolidGauge/SolidGaugeSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/SolidGauge/SolidGaugeSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Spline/SplineSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Streamgraph/StreamgraphSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Streamgraph/StreamgraphSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Sunburst/SunburstNode.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Sunburst/SunburstPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Sunburst/SunburstSeries.js +41 -32
- package/assets/js/highcharts/es-modules/Series/Sunburst/SunburstSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Sunburst/SunburstUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Series/TiledWebMap/TiledWebMapSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/TiledWebMap/TiledWebMapSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Tilemap/TilemapPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Tilemap/TilemapSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Tilemap/TilemapSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Tilemap/TilemapShapes.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Timeline/TimelinePoint.js +28 -6
- package/assets/js/highcharts/es-modules/Series/Timeline/TimelineSeries.js +10 -8
- package/assets/js/highcharts/es-modules/Series/Timeline/TimelineSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/TreeUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Treegraph/TreegraphLayout.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Treegraph/TreegraphLink.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Treegraph/TreegraphNode.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Treegraph/TreegraphPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Treegraph/TreegraphSeries.js +5 -5
- package/assets/js/highcharts/es-modules/Series/Treegraph/TreegraphSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Treemap/TreemapAlgorithmGroup.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Treemap/TreemapNode.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Treemap/TreemapPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Treemap/TreemapSeries.js +198 -59
- package/assets/js/highcharts/es-modules/Series/Treemap/TreemapSeriesDefaults.js +41 -3
- package/assets/js/highcharts/es-modules/Series/Treemap/TreemapUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Series/VariablePie/VariablePieSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/VariablePie/VariablePieSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Variwide/VariwideComposition.js +2 -2
- package/assets/js/highcharts/es-modules/Series/Variwide/VariwidePoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Variwide/VariwideSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Variwide/VariwideSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Vector/VectorSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Vector/VectorSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Venn/VennPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Venn/VennSeries.js +7 -9
- package/assets/js/highcharts/es-modules/Series/Venn/VennSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Venn/VennUtils.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Waterfall/WaterfallPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Waterfall/WaterfallSeries.js +3 -3
- package/assets/js/highcharts/es-modules/Series/Waterfall/WaterfallSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Windbarb/WindbarbPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Windbarb/WindbarbSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Windbarb/WindbarbSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Wordcloud/WordcloudPoint.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Wordcloud/WordcloudSeries.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Wordcloud/WordcloudSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Series/Wordcloud/WordcloudUtils.js +1 -1
- package/assets/js/highcharts/es-modules/Series/XRange/XRangePoint.js +2 -2
- package/assets/js/highcharts/es-modules/Series/XRange/XRangeSeries.js +3 -3
- package/assets/js/highcharts/es-modules/Series/XRange/XRangeSeriesDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Shared/BaseForm.js +1 -1
- package/assets/js/highcharts/es-modules/Shared/TimeBase.js +826 -0
- package/assets/js/highcharts/es-modules/Shared/Types.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/ArrayUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/CMF/CMFIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/DMI/DMIIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/LinearRegression/LinearRegressionIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngleIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionInterceptIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopesIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/MFI/MFIIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/MultipleLinesComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/ROC/ROCIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/VBP/VBPIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/WMA/WMAIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Indicators/Zigzag/ZigzagIndicator.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Navigator/ChartNavigatorComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Navigator/Navigator.js +11 -7
- package/assets/js/highcharts/es-modules/Stock/Navigator/NavigatorComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Navigator/NavigatorDefaults.js +3 -3
- package/assets/js/highcharts/es-modules/Stock/Navigator/NavigatorSymbols.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Navigator/StandaloneNavigator.js +5 -5
- package/assets/js/highcharts/es-modules/Stock/Navigator/StandaloneNavigatorDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/RangeSelector/RangeSelector.js +20 -5
- package/assets/js/highcharts/es-modules/Stock/RangeSelector/RangeSelectorComposition.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/RangeSelector/RangeSelectorDefaults.js +23 -20
- package/assets/js/highcharts/es-modules/Stock/Scrollbar/Scrollbar.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Scrollbar/ScrollbarDefaults.js +2 -2
- package/assets/js/highcharts/es-modules/Stock/StockTools/StockToolbar.js +2 -2
- package/assets/js/highcharts/es-modules/Stock/StockTools/StockTools.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/StockTools/StockToolsBindings.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/StockTools/StockToolsDefaults.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/StockTools/StockToolsGui.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/StockTools/StockToolsUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/Stock/Utilities/StockUtilities.js +1 -1
- package/assets/js/highcharts/es-modules/masters/highcharts-3d.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/highcharts-gantt.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/highcharts-more.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/highcharts.src.js +3 -3
- package/assets/js/highcharts/es-modules/masters/highmaps.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/highstock.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/i18n/fr-FR.src.js +524 -0
- package/assets/js/highcharts/es-modules/masters/i18n/nb-NO.src.js +524 -0
- package/assets/js/highcharts/es-modules/masters/i18n/zh-CN.src.js +524 -0
- package/assets/js/highcharts/es-modules/masters/indicators/acceleration-bands.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/accumulation-distribution.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/ao.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/apo.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/aroon-oscillator.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/aroon.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/atr.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/bollinger-bands.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/cci.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/chaikin.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/cmf.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/cmo.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/dema.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/disparity-index.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/dmi.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/dpo.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/indicators-all.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/indicators.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/keltner-channels.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/klinger.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/macd.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/mfi.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/momentum.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/natr.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/obv.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/pivot-points.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/ppo.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/price-channel.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/price-envelopes.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/psar.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/regressions.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/roc.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/rsi.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/slow-stochastic.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/stochastic.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/supertrend.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/tema.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/trendline.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/trix.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/volume-by-price.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/vwap.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/williams-r.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/wma.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/indicators/zigzag.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/accessibility.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/annotations-advanced.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/annotations.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/arc-diagram.src.js +1 -1
- package/assets/js/highcharts/es-modules/masters/modules/arrow-symbols.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/boost-canvas.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/boost.src.js +3 -3
- package/assets/js/highcharts/es-modules/masters/modules/broken-axis.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/bullet.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/coloraxis.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/current-date-indicator.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/cylinder.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/data-tools.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/data.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/datagrouping.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/debugger.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/dependency-wheel.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/dotplot.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/drag-panes.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/draggable-points.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/drilldown.src.js +1 -1
- package/assets/js/highcharts/es-modules/masters/modules/dumbbell.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/export-data.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/exporting.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/flowmap.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/full-screen.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/funnel.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/funnel3d.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/gantt.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/geoheatmap.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/grid-axis.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/heatmap.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/heikinashi.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/histogram-bellcurve.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/hollowcandlestick.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/item-series.src.js +1 -1
- package/assets/js/highcharts/es-modules/masters/modules/lollipop.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/map.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/marker-clusters.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/mouse-wheel-zoom.src.js +1 -1
- package/assets/js/highcharts/es-modules/masters/modules/navigator.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/networkgraph.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/no-data-to-display.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/offline-exporting.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/organization.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/parallel-coordinates.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/pareto.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/pathfinder.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/pattern-fill.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/pictorial.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/pointandfigure.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/price-indicator.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/pyramid3d.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/renko.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/sankey.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/series-label.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/series-on-point.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/solid-gauge.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/sonification.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/static-scale.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/stock-tools.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/stock.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/streamgraph.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/sunburst.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/textpath.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/tiledwebmap.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/tilemap.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/timeline.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/treegraph.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/treegrid.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/treemap.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/variable-pie.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/variwide.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/vector.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/venn.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/windbarb.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/wordcloud.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/modules/xrange.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/standalone-navigator.src.js +1 -1
- package/assets/js/highcharts/es-modules/masters/themes/avocado.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/brand-dark.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/brand-light.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/dark-blue.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/dark-green.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/dark-unica.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/gray.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/grid-light.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/grid.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/high-contrast-dark.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/high-contrast-light.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/sand-signika.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/skies.src.js +2 -2
- package/assets/js/highcharts/es-modules/masters/themes/sunset.src.js +2 -2
- package/assets/js/highcharts/esm/highcharts-3d.js +1 -0
- package/assets/js/highcharts/esm/highcharts-3d.src.js +5053 -0
- package/assets/js/highcharts/esm/highcharts-gantt.js +1 -0
- package/assets/js/highcharts/esm/highcharts-gantt.src.js +56 -0
- package/assets/js/highcharts/esm/highcharts-more.js +1 -0
- package/assets/js/highcharts/esm/highcharts-more.src.js +12257 -0
- package/assets/js/highcharts/esm/highcharts.js +2 -0
- package/assets/js/highcharts/esm/highcharts.src.js +47243 -0
- package/assets/js/highcharts/esm/highmaps.js +1 -0
- package/assets/js/highcharts/esm/highmaps.src.js +56 -0
- package/assets/js/highcharts/esm/highstock.js +1 -0
- package/assets/js/highcharts/esm/highstock.src.js +56 -0
- package/assets/js/highcharts/esm/i18n/fr-FR.js +1 -0
- package/assets/js/highcharts/esm/i18n/fr-FR.src.js +567 -0
- package/assets/js/highcharts/esm/i18n/nb-NO.js +1 -0
- package/assets/js/highcharts/esm/i18n/nb-NO.src.js +567 -0
- package/assets/js/highcharts/esm/i18n/zh-CN.js +1 -0
- package/assets/js/highcharts/esm/i18n/zh-CN.src.js +567 -0
- package/assets/js/highcharts/esm/indicators/acceleration-bands.js +1 -0
- package/assets/js/highcharts/esm/indicators/acceleration-bands.src.js +578 -0
- package/assets/js/highcharts/esm/indicators/accumulation-distribution.js +1 -0
- package/assets/js/highcharts/esm/indicators/accumulation-distribution.src.js +214 -0
- package/assets/js/highcharts/esm/indicators/ao.js +1 -0
- package/assets/js/highcharts/esm/indicators/ao.src.js +270 -0
- package/assets/js/highcharts/esm/indicators/apo.js +1 -0
- package/assets/js/highcharts/esm/indicators/apo.src.js +217 -0
- package/assets/js/highcharts/esm/indicators/aroon-oscillator.js +1 -0
- package/assets/js/highcharts/esm/indicators/aroon-oscillator.src.js +473 -0
- package/assets/js/highcharts/esm/indicators/aroon.js +1 -0
- package/assets/js/highcharts/esm/indicators/aroon.src.js +538 -0
- package/assets/js/highcharts/esm/indicators/atr.js +1 -0
- package/assets/js/highcharts/esm/indicators/atr.src.js +220 -0
- package/assets/js/highcharts/esm/indicators/bollinger-bands.js +1 -0
- package/assets/js/highcharts/esm/indicators/bollinger-bands.src.js +584 -0
- package/assets/js/highcharts/esm/indicators/cci.js +1 -0
- package/assets/js/highcharts/esm/indicators/cci.src.js +215 -0
- package/assets/js/highcharts/esm/indicators/chaikin.js +1 -0
- package/assets/js/highcharts/esm/indicators/chaikin.src.js +379 -0
- package/assets/js/highcharts/esm/indicators/cmf.js +1 -0
- package/assets/js/highcharts/esm/indicators/cmf.src.js +307 -0
- package/assets/js/highcharts/esm/indicators/cmo.js +1 -0
- package/assets/js/highcharts/esm/indicators/cmo.src.js +226 -0
- package/assets/js/highcharts/esm/indicators/dema.js +1 -0
- package/assets/js/highcharts/esm/indicators/dema.src.js +220 -0
- package/assets/js/highcharts/esm/indicators/disparity-index.js +1 -0
- package/assets/js/highcharts/esm/indicators/disparity-index.src.js +223 -0
- package/assets/js/highcharts/esm/indicators/dmi.js +1 -0
- package/assets/js/highcharts/esm/indicators/dmi.src.js +610 -0
- package/assets/js/highcharts/esm/indicators/dpo.js +1 -0
- package/assets/js/highcharts/esm/indicators/dpo.src.js +221 -0
- package/assets/js/highcharts/esm/indicators/ema.js +1 -0
- package/assets/js/highcharts/esm/indicators/ema.src.js +52 -0
- package/assets/js/highcharts/esm/indicators/ichimoku-kinko-hyo.js +1 -0
- package/assets/js/highcharts/esm/indicators/ichimoku-kinko-hyo.src.js +772 -0
- package/assets/js/highcharts/esm/indicators/indicators-all.js +1 -0
- package/assets/js/highcharts/esm/indicators/indicators-all.src.js +10578 -0
- package/assets/js/highcharts/esm/indicators/indicators.js +1 -0
- package/assets/js/highcharts/esm/indicators/indicators.src.js +900 -0
- package/assets/js/highcharts/esm/indicators/keltner-channels.js +1 -0
- package/assets/js/highcharts/esm/indicators/keltner-channels.src.js +569 -0
- package/assets/js/highcharts/esm/indicators/klinger.js +1 -0
- package/assets/js/highcharts/esm/indicators/klinger.src.js +602 -0
- package/assets/js/highcharts/esm/indicators/macd.js +1 -0
- package/assets/js/highcharts/esm/indicators/macd.src.js +445 -0
- package/assets/js/highcharts/esm/indicators/mfi.js +1 -0
- package/assets/js/highcharts/esm/indicators/mfi.src.js +270 -0
- package/assets/js/highcharts/esm/indicators/momentum.js +1 -0
- package/assets/js/highcharts/esm/indicators/momentum.src.js +196 -0
- package/assets/js/highcharts/esm/indicators/natr.js +1 -0
- package/assets/js/highcharts/esm/indicators/natr.src.js +170 -0
- package/assets/js/highcharts/esm/indicators/obv.js +1 -0
- package/assets/js/highcharts/esm/indicators/obv.src.js +226 -0
- package/assets/js/highcharts/esm/indicators/pivot-points.js +1 -0
- package/assets/js/highcharts/esm/indicators/pivot-points.src.js +426 -0
- package/assets/js/highcharts/esm/indicators/ppo.js +1 -0
- package/assets/js/highcharts/esm/indicators/ppo.src.js +219 -0
- package/assets/js/highcharts/esm/indicators/price-channel.js +1 -0
- package/assets/js/highcharts/esm/indicators/price-channel.src.js +604 -0
- package/assets/js/highcharts/esm/indicators/price-envelopes.js +1 -0
- package/assets/js/highcharts/esm/indicators/price-envelopes.src.js +557 -0
- package/assets/js/highcharts/esm/indicators/psar.js +1 -0
- package/assets/js/highcharts/esm/indicators/psar.src.js +362 -0
- package/assets/js/highcharts/esm/indicators/regressions.js +1 -0
- package/assets/js/highcharts/esm/indicators/regressions.src.js +626 -0
- package/assets/js/highcharts/esm/indicators/roc.js +1 -0
- package/assets/js/highcharts/esm/indicators/roc.src.js +239 -0
- package/assets/js/highcharts/esm/indicators/rsi.js +1 -0
- package/assets/js/highcharts/esm/indicators/rsi.src.js +239 -0
- package/assets/js/highcharts/esm/indicators/slow-stochastic.js +1 -0
- package/assets/js/highcharts/esm/indicators/slow-stochastic.src.js +202 -0
- package/assets/js/highcharts/esm/indicators/stochastic.js +1 -0
- package/assets/js/highcharts/esm/indicators/stochastic.src.js +622 -0
- package/assets/js/highcharts/esm/indicators/supertrend.js +1 -0
- package/assets/js/highcharts/esm/indicators/supertrend.src.js +548 -0
- package/assets/js/highcharts/esm/indicators/tema.js +1 -0
- package/assets/js/highcharts/esm/indicators/tema.src.js +253 -0
- package/assets/js/highcharts/esm/indicators/trendline.js +1 -0
- package/assets/js/highcharts/esm/indicators/trendline.src.js +212 -0
- package/assets/js/highcharts/esm/indicators/trix.js +1 -0
- package/assets/js/highcharts/esm/indicators/trix.src.js +169 -0
- package/assets/js/highcharts/esm/indicators/volume-by-price.js +1 -0
- package/assets/js/highcharts/esm/indicators/volume-by-price.src.js +698 -0
- package/assets/js/highcharts/esm/indicators/vwap.js +1 -0
- package/assets/js/highcharts/esm/indicators/vwap.src.js +251 -0
- package/assets/js/highcharts/esm/indicators/williams-r.js +1 -0
- package/assets/js/highcharts/esm/indicators/williams-r.src.js +256 -0
- package/assets/js/highcharts/esm/indicators/wma.js +1 -0
- package/assets/js/highcharts/esm/indicators/wma.src.js +228 -0
- package/assets/js/highcharts/esm/indicators/zigzag.js +1 -0
- package/assets/js/highcharts/esm/indicators/zigzag.src.js +284 -0
- package/assets/js/highcharts/esm/modules/accessibility.js +1 -0
- package/assets/js/highcharts/esm/modules/accessibility.src.js +13670 -0
- package/assets/js/highcharts/esm/modules/annotations-advanced.js +1 -0
- package/assets/js/highcharts/esm/modules/annotations-advanced.src.js +8224 -0
- package/assets/js/highcharts/esm/modules/annotations.js +1 -0
- package/assets/js/highcharts/esm/modules/annotations.src.js +7094 -0
- package/assets/js/highcharts/esm/modules/arc-diagram.js +1 -0
- package/assets/js/highcharts/esm/modules/arc-diagram.src.js +1427 -0
- package/assets/js/highcharts/esm/modules/arrow-symbols.js +1 -0
- package/assets/js/highcharts/esm/modules/arrow-symbols.src.js +235 -0
- package/assets/js/highcharts/esm/modules/boost-canvas.js +1 -0
- package/assets/js/highcharts/esm/modules/boost-canvas.src.js +4419 -0
- package/assets/js/highcharts/esm/modules/boost.js +1 -0
- package/assets/js/highcharts/esm/modules/boost.src.js +4362 -0
- package/assets/js/highcharts/esm/modules/broken-axis.js +1 -0
- package/assets/js/highcharts/esm/modules/broken-axis.src.js +673 -0
- package/assets/js/highcharts/esm/modules/bullet.js +1 -0
- package/assets/js/highcharts/esm/modules/bullet.src.js +452 -0
- package/assets/js/highcharts/esm/modules/coloraxis.js +1 -0
- package/assets/js/highcharts/esm/modules/coloraxis.src.js +1527 -0
- package/assets/js/highcharts/esm/modules/current-date-indicator.js +1 -0
- package/assets/js/highcharts/esm/modules/current-date-indicator.src.js +198 -0
- package/assets/js/highcharts/esm/modules/cylinder.js +1 -0
- package/assets/js/highcharts/esm/modules/cylinder.src.js +901 -0
- package/assets/js/highcharts/esm/modules/data-tools.js +1 -0
- package/assets/js/highcharts/esm/modules/data-tools.src.js +8828 -0
- package/assets/js/highcharts/esm/modules/data.js +1 -0
- package/assets/js/highcharts/esm/modules/data.src.js +2424 -0
- package/assets/js/highcharts/esm/modules/datagrouping.js +1 -0
- package/assets/js/highcharts/esm/modules/datagrouping.src.js +2161 -0
- package/assets/js/highcharts/esm/modules/debugger.js +1 -0
- package/assets/js/highcharts/esm/modules/debugger.src.js +307 -0
- package/assets/js/highcharts/esm/modules/dependency-wheel.js +1 -0
- package/assets/js/highcharts/esm/modules/dependency-wheel.src.js +1045 -0
- package/assets/js/highcharts/esm/modules/dotplot.js +1 -0
- package/assets/js/highcharts/esm/modules/dotplot.src.js +237 -0
- package/assets/js/highcharts/esm/modules/drag-panes.js +1 -0
- package/assets/js/highcharts/esm/modules/drag-panes.src.js +672 -0
- package/assets/js/highcharts/esm/modules/draggable-points.js +1 -0
- package/assets/js/highcharts/esm/modules/draggable-points.src.js +2596 -0
- package/assets/js/highcharts/esm/modules/drilldown.js +1 -0
- package/assets/js/highcharts/esm/modules/drilldown.src.js +2743 -0
- package/assets/js/highcharts/esm/modules/dumbbell.js +1 -0
- package/assets/js/highcharts/esm/modules/dumbbell.src.js +736 -0
- package/assets/js/highcharts/esm/modules/export-data.js +1 -0
- package/assets/js/highcharts/esm/modules/export-data.src.js +1399 -0
- package/assets/js/highcharts/esm/modules/exporting.js +1 -0
- package/assets/js/highcharts/esm/modules/exporting.src.js +2985 -0
- package/assets/js/highcharts/esm/modules/flowmap.js +1 -0
- package/assets/js/highcharts/esm/modules/flowmap.src.js +863 -0
- package/assets/js/highcharts/esm/modules/full-screen.js +1 -0
- package/assets/js/highcharts/esm/modules/full-screen.src.js +407 -0
- package/assets/js/highcharts/esm/modules/funnel.js +1 -0
- package/assets/js/highcharts/esm/modules/funnel.src.js +1282 -0
- package/assets/js/highcharts/esm/modules/funnel3d.js +1 -0
- package/assets/js/highcharts/esm/modules/funnel3d.src.js +1227 -0
- package/assets/js/highcharts/esm/modules/gantt.js +1 -0
- package/assets/js/highcharts/esm/modules/gantt.src.js +14167 -0
- package/assets/js/highcharts/esm/modules/geoheatmap.js +1 -0
- package/assets/js/highcharts/esm/modules/geoheatmap.src.js +747 -0
- package/assets/js/highcharts/esm/modules/grid-axis.js +1 -0
- package/assets/js/highcharts/esm/modules/grid-axis.src.js +1129 -0
- package/assets/js/highcharts/esm/modules/heatmap.js +1 -0
- package/assets/js/highcharts/esm/modules/heatmap.src.js +1360 -0
- package/assets/js/highcharts/esm/modules/heikinashi.js +1 -0
- package/assets/js/highcharts/esm/modules/heikinashi.src.js +380 -0
- package/assets/js/highcharts/esm/modules/histogram-bellcurve.js +1 -0
- package/assets/js/highcharts/esm/modules/histogram-bellcurve.src.js +681 -0
- package/assets/js/highcharts/esm/modules/hollowcandlestick.js +1 -0
- package/assets/js/highcharts/esm/modules/hollowcandlestick.src.js +473 -0
- package/assets/js/highcharts/esm/modules/item-series.js +1 -0
- package/assets/js/highcharts/esm/modules/item-series.src.js +3060 -0
- package/assets/js/highcharts/esm/modules/lollipop.js +1 -0
- package/assets/js/highcharts/esm/modules/lollipop.src.js +335 -0
- package/assets/js/highcharts/esm/modules/map.js +1 -0
- package/assets/js/highcharts/esm/modules/map.src.js +9897 -0
- package/assets/js/highcharts/esm/modules/marker-clusters.js +1 -0
- package/assets/js/highcharts/esm/modules/marker-clusters.src.js +2160 -0
- package/assets/js/highcharts/esm/modules/mouse-wheel-zoom.js +1 -0
- package/assets/js/highcharts/esm/modules/mouse-wheel-zoom.src.js +357 -0
- package/assets/js/highcharts/esm/modules/navigator.js +1 -0
- package/assets/js/highcharts/esm/modules/navigator.src.js +4344 -0
- package/assets/js/highcharts/esm/modules/networkgraph.js +1 -0
- package/assets/js/highcharts/esm/modules/networkgraph.src.js +3460 -0
- package/assets/js/highcharts/esm/modules/no-data-to-display.js +1 -0
- package/assets/js/highcharts/esm/modules/no-data-to-display.src.js +310 -0
- package/assets/js/highcharts/esm/modules/offline-exporting.js +1 -0
- package/assets/js/highcharts/esm/modules/offline-exporting.src.js +3701 -0
- package/assets/js/highcharts/esm/modules/organization.js +1 -0
- package/assets/js/highcharts/esm/modules/organization.src.js +1320 -0
- package/assets/js/highcharts/esm/modules/parallel-coordinates.js +1 -0
- package/assets/js/highcharts/esm/modules/parallel-coordinates.src.js +713 -0
- package/assets/js/highcharts/esm/modules/pareto.js +1 -0
- package/assets/js/highcharts/esm/modules/pareto.src.js +389 -0
- package/assets/js/highcharts/esm/modules/pathfinder.js +1 -0
- package/assets/js/highcharts/esm/modules/pathfinder.src.js +2394 -0
- package/assets/js/highcharts/esm/modules/pattern-fill.js +1 -0
- package/assets/js/highcharts/esm/modules/pattern-fill.src.js +780 -0
- package/assets/js/highcharts/esm/modules/pictorial.js +1 -0
- package/assets/js/highcharts/esm/modules/pictorial.src.js +1436 -0
- package/assets/js/highcharts/esm/modules/pointandfigure.js +1 -0
- package/assets/js/highcharts/esm/modules/pointandfigure.src.js +562 -0
- package/assets/js/highcharts/esm/modules/price-indicator.js +1 -0
- package/assets/js/highcharts/esm/modules/price-indicator.src.js +450 -0
- package/assets/js/highcharts/esm/modules/pyramid3d.js +1 -0
- package/assets/js/highcharts/esm/modules/pyramid3d.src.js +265 -0
- package/assets/js/highcharts/esm/modules/renko.js +1 -0
- package/assets/js/highcharts/esm/modules/renko.src.js +383 -0
- package/assets/js/highcharts/esm/modules/sankey.js +1 -0
- package/assets/js/highcharts/esm/modules/sankey.src.js +2286 -0
- package/assets/js/highcharts/esm/modules/series-label.js +1 -0
- package/assets/js/highcharts/esm/modules/series-label.src.js +945 -0
- package/assets/js/highcharts/esm/modules/series-on-point.js +1 -0
- package/assets/js/highcharts/esm/modules/series-on-point.src.js +898 -0
- package/assets/js/highcharts/esm/modules/solid-gauge.js +1 -0
- package/assets/js/highcharts/esm/modules/solid-gauge.src.js +1004 -0
- package/assets/js/highcharts/esm/modules/sonification.js +1 -0
- package/assets/js/highcharts/esm/modules/sonification.src.js +5561 -0
- package/assets/js/highcharts/esm/modules/static-scale.js +1 -0
- package/assets/js/highcharts/esm/modules/static-scale.src.js +166 -0
- package/assets/js/highcharts/esm/modules/stock-tools.js +1 -0
- package/assets/js/highcharts/esm/modules/stock-tools.src.js +5725 -0
- package/assets/js/highcharts/esm/modules/stock.js +1 -0
- package/assets/js/highcharts/esm/modules/stock.src.js +11189 -0
- package/assets/js/highcharts/esm/modules/streamgraph.js +1 -0
- package/assets/js/highcharts/esm/modules/streamgraph.src.js +284 -0
- package/assets/js/highcharts/esm/modules/sunburst.js +1 -0
- package/assets/js/highcharts/esm/modules/sunburst.src.js +5294 -0
- package/assets/js/highcharts/esm/modules/textpath.js +1 -0
- package/assets/js/highcharts/esm/modules/textpath.src.js +288 -0
- package/assets/js/highcharts/esm/modules/tiledwebmap.js +4 -0
- package/assets/js/highcharts/esm/modules/tiledwebmap.src.js +1122 -0
- package/assets/js/highcharts/esm/modules/tilemap.js +1 -0
- package/assets/js/highcharts/esm/modules/tilemap.src.js +1095 -0
- package/assets/js/highcharts/esm/modules/timeline.js +1 -0
- package/assets/js/highcharts/esm/modules/timeline.src.js +755 -0
- package/assets/js/highcharts/esm/modules/treegraph.js +1 -0
- package/assets/js/highcharts/esm/modules/treegraph.src.js +2282 -0
- package/assets/js/highcharts/esm/modules/treegrid.js +1 -0
- package/assets/js/highcharts/esm/modules/treegrid.src.js +3145 -0
- package/assets/js/highcharts/esm/modules/treemap.js +1 -0
- package/assets/js/highcharts/esm/modules/treemap.src.js +3681 -0
- package/assets/js/highcharts/esm/modules/variable-pie.js +1 -0
- package/assets/js/highcharts/esm/modules/variable-pie.src.js +498 -0
- package/assets/js/highcharts/esm/modules/variwide.js +1 -0
- package/assets/js/highcharts/esm/modules/variwide.src.js +539 -0
- package/assets/js/highcharts/esm/modules/vector.js +1 -0
- package/assets/js/highcharts/esm/modules/vector.src.js +415 -0
- package/assets/js/highcharts/esm/modules/venn.js +1 -0
- package/assets/js/highcharts/esm/modules/venn.src.js +1978 -0
- package/assets/js/highcharts/esm/modules/windbarb.js +1 -0
- package/assets/js/highcharts/esm/modules/windbarb.src.js +782 -0
- package/assets/js/highcharts/esm/modules/wordcloud.js +1 -0
- package/assets/js/highcharts/esm/modules/wordcloud.src.js +1392 -0
- package/assets/js/highcharts/esm/modules/xrange.js +1 -0
- package/assets/js/highcharts/esm/modules/xrange.src.js +858 -0
- package/assets/js/highcharts/esm/standalone-navigator.js +2 -0
- package/assets/js/highcharts/esm/standalone-navigator.src.js +51291 -0
- package/assets/js/highcharts/esm/themes/avocado.js +1 -0
- package/assets/js/highcharts/esm/themes/avocado.src.js +127 -0
- package/assets/js/highcharts/esm/themes/brand-dark.js +1 -0
- package/assets/js/highcharts/esm/themes/brand-dark.src.js +361 -0
- package/assets/js/highcharts/esm/themes/brand-light.js +1 -0
- package/assets/js/highcharts/esm/themes/brand-light.src.js +316 -0
- package/assets/js/highcharts/esm/themes/dark-blue.js +1 -0
- package/assets/js/highcharts/esm/themes/dark-blue.src.js +335 -0
- package/assets/js/highcharts/esm/themes/dark-green.js +1 -0
- package/assets/js/highcharts/esm/themes/dark-green.src.js +335 -0
- package/assets/js/highcharts/esm/themes/dark-unica.js +1 -0
- package/assets/js/highcharts/esm/themes/dark-unica.src.js +304 -0
- package/assets/js/highcharts/esm/themes/gray.js +1 -0
- package/assets/js/highcharts/esm/themes/gray.src.js +344 -0
- package/assets/js/highcharts/esm/themes/grid-light.js +1 -0
- package/assets/js/highcharts/esm/themes/grid-light.src.js +171 -0
- package/assets/js/highcharts/esm/themes/grid.js +1 -0
- package/assets/js/highcharts/esm/themes/grid.src.js +195 -0
- package/assets/js/highcharts/esm/themes/high-contrast-dark.js +1 -0
- package/assets/js/highcharts/esm/themes/high-contrast-dark.src.js +294 -0
- package/assets/js/highcharts/esm/themes/high-contrast-light.js +1 -0
- package/assets/js/highcharts/esm/themes/high-contrast-light.src.js +134 -0
- package/assets/js/highcharts/esm/themes/sand-signika.js +1 -0
- package/assets/js/highcharts/esm/themes/sand-signika.src.js +201 -0
- package/assets/js/highcharts/esm/themes/skies.js +1 -0
- package/assets/js/highcharts/esm/themes/skies.src.js +188 -0
- package/assets/js/highcharts/esm/themes/sunset.js +1 -0
- package/assets/js/highcharts/esm/themes/sunset.src.js +126 -0
- package/assets/js/highcharts/highcharts-3d.js +1 -9
- package/assets/js/highcharts/highcharts-3d.src.js +39 -40
- package/assets/js/highcharts/highcharts-gantt.js +2 -16
- package/assets/js/highcharts/highcharts-gantt.src.js +1556 -962
- package/assets/js/highcharts/highcharts-more.js +1 -9
- package/assets/js/highcharts/highcharts-more.src.js +179 -142
- package/assets/js/highcharts/highcharts.js +2 -9
- package/assets/js/highcharts/highcharts.src.js +1420 -850
- package/assets/js/highcharts/highmaps.js +2 -16
- package/assets/js/highcharts/highmaps.src.js +1491 -936
- package/assets/js/highcharts/highstock.js +2 -16
- package/assets/js/highcharts/highstock.src.js +1568 -963
- package/assets/js/highcharts/i18n/fr-FR.js +1 -0
- package/assets/js/highcharts/i18n/fr-FR.src.js +615 -0
- package/assets/js/highcharts/i18n/nb-NO.js +1 -0
- package/assets/js/highcharts/i18n/nb-NO.src.js +615 -0
- package/assets/js/highcharts/i18n/zh-CN.js +1 -0
- package/assets/js/highcharts/i18n/zh-CN.src.js +615 -0
- package/assets/js/highcharts/indicators/acceleration-bands.js +1 -12
- package/assets/js/highcharts/indicators/acceleration-bands.src.js +3 -3
- package/assets/js/highcharts/indicators/accumulation-distribution.js +1 -12
- package/assets/js/highcharts/indicators/accumulation-distribution.src.js +2 -2
- package/assets/js/highcharts/indicators/ao.js +1 -12
- package/assets/js/highcharts/indicators/ao.src.js +2 -2
- package/assets/js/highcharts/indicators/apo.js +1 -12
- package/assets/js/highcharts/indicators/apo.src.js +2 -2
- package/assets/js/highcharts/indicators/aroon-oscillator.js +1 -12
- package/assets/js/highcharts/indicators/aroon-oscillator.src.js +3 -3
- package/assets/js/highcharts/indicators/aroon.js +1 -12
- package/assets/js/highcharts/indicators/aroon.src.js +3 -3
- package/assets/js/highcharts/indicators/atr.js +1 -12
- package/assets/js/highcharts/indicators/atr.src.js +2 -2
- package/assets/js/highcharts/indicators/bollinger-bands.js +1 -12
- package/assets/js/highcharts/indicators/bollinger-bands.src.js +3 -3
- package/assets/js/highcharts/indicators/cci.js +1 -12
- package/assets/js/highcharts/indicators/cci.src.js +2 -2
- package/assets/js/highcharts/indicators/chaikin.js +1 -12
- package/assets/js/highcharts/indicators/chaikin.src.js +2 -2
- package/assets/js/highcharts/indicators/cmf.js +1 -11
- package/assets/js/highcharts/indicators/cmf.src.js +3 -3
- package/assets/js/highcharts/indicators/cmo.js +1 -12
- package/assets/js/highcharts/indicators/cmo.src.js +2 -2
- package/assets/js/highcharts/indicators/dema.js +1 -12
- package/assets/js/highcharts/indicators/dema.src.js +2 -2
- package/assets/js/highcharts/indicators/disparity-index.js +1 -12
- package/assets/js/highcharts/indicators/disparity-index.src.js +3 -3
- package/assets/js/highcharts/indicators/dmi.js +1 -12
- package/assets/js/highcharts/indicators/dmi.src.js +4 -4
- package/assets/js/highcharts/indicators/dpo.js +1 -12
- package/assets/js/highcharts/indicators/dpo.src.js +2 -2
- package/assets/js/highcharts/indicators/ichimoku-kinko-hyo.js +1 -12
- package/assets/js/highcharts/indicators/ichimoku-kinko-hyo.src.js +10 -10
- package/assets/js/highcharts/indicators/indicators-all.js +1 -12
- package/assets/js/highcharts/indicators/indicators-all.src.js +26 -25
- package/assets/js/highcharts/indicators/indicators.js +1 -12
- package/assets/js/highcharts/indicators/indicators.src.js +9 -9
- package/assets/js/highcharts/indicators/keltner-channels.js +1 -12
- package/assets/js/highcharts/indicators/keltner-channels.src.js +3 -3
- package/assets/js/highcharts/indicators/klinger.js +1 -12
- package/assets/js/highcharts/indicators/klinger.src.js +3 -3
- package/assets/js/highcharts/indicators/macd.js +1 -12
- package/assets/js/highcharts/indicators/macd.src.js +2 -2
- package/assets/js/highcharts/indicators/mfi.js +1 -12
- package/assets/js/highcharts/indicators/mfi.src.js +3 -3
- package/assets/js/highcharts/indicators/momentum.js +1 -12
- package/assets/js/highcharts/indicators/momentum.src.js +2 -2
- package/assets/js/highcharts/indicators/natr.js +1 -12
- package/assets/js/highcharts/indicators/natr.src.js +2 -2
- package/assets/js/highcharts/indicators/obv.js +1 -12
- package/assets/js/highcharts/indicators/obv.src.js +2 -2
- package/assets/js/highcharts/indicators/pivot-points.js +1 -12
- package/assets/js/highcharts/indicators/pivot-points.src.js +2 -2
- package/assets/js/highcharts/indicators/ppo.js +1 -12
- package/assets/js/highcharts/indicators/ppo.src.js +2 -2
- package/assets/js/highcharts/indicators/price-channel.js +1 -12
- package/assets/js/highcharts/indicators/price-channel.src.js +6 -5
- package/assets/js/highcharts/indicators/price-envelopes.js +1 -12
- package/assets/js/highcharts/indicators/price-envelopes.src.js +3 -3
- package/assets/js/highcharts/indicators/psar.js +1 -12
- package/assets/js/highcharts/indicators/psar.src.js +3 -3
- package/assets/js/highcharts/indicators/regressions.js +1 -12
- package/assets/js/highcharts/indicators/regressions.src.js +6 -6
- package/assets/js/highcharts/indicators/roc.js +1 -12
- package/assets/js/highcharts/indicators/roc.src.js +3 -3
- package/assets/js/highcharts/indicators/rsi.js +1 -12
- package/assets/js/highcharts/indicators/rsi.src.js +2 -2
- package/assets/js/highcharts/indicators/slow-stochastic.js +1 -12
- package/assets/js/highcharts/indicators/slow-stochastic.src.js +2 -2
- package/assets/js/highcharts/indicators/stochastic.js +1 -12
- package/assets/js/highcharts/indicators/stochastic.src.js +4 -4
- package/assets/js/highcharts/indicators/supertrend.js +1 -12
- package/assets/js/highcharts/indicators/supertrend.src.js +2 -2
- package/assets/js/highcharts/indicators/tema.js +1 -12
- package/assets/js/highcharts/indicators/tema.src.js +2 -2
- package/assets/js/highcharts/indicators/trendline.js +1 -12
- package/assets/js/highcharts/indicators/trendline.src.js +2 -2
- package/assets/js/highcharts/indicators/trix.js +1 -12
- package/assets/js/highcharts/indicators/trix.src.js +2 -2
- package/assets/js/highcharts/indicators/volume-by-price.js +1 -12
- package/assets/js/highcharts/indicators/volume-by-price.src.js +3 -3
- package/assets/js/highcharts/indicators/vwap.js +1 -12
- package/assets/js/highcharts/indicators/vwap.src.js +3 -3
- package/assets/js/highcharts/indicators/williams-r.js +1 -12
- package/assets/js/highcharts/indicators/williams-r.src.js +3 -3
- package/assets/js/highcharts/indicators/wma.js +1 -12
- package/assets/js/highcharts/indicators/wma.src.js +3 -3
- package/assets/js/highcharts/indicators/zigzag.js +1 -12
- package/assets/js/highcharts/indicators/zigzag.src.js +3 -3
- package/assets/js/highcharts/lib/jspdf.js +14 -14
- package/assets/js/highcharts/lib/jspdf.src.js +450 -347
- package/assets/js/highcharts/lib/svg2pdf.js +2 -41
- package/assets/js/highcharts/lib/svg2pdf.src.js +5482 -5241
- package/assets/js/highcharts/modules/accessibility.js +1 -12
- package/assets/js/highcharts/modules/accessibility.src.js +124 -103
- package/assets/js/highcharts/modules/annotations-advanced.js +1 -21
- package/assets/js/highcharts/modules/annotations-advanced.src.js +87 -81
- package/assets/js/highcharts/modules/annotations.js +1 -11
- package/assets/js/highcharts/modules/annotations.src.js +34 -30
- package/assets/js/highcharts/modules/arc-diagram.js +1 -11
- package/assets/js/highcharts/modules/arc-diagram.src.js +10 -10
- package/assets/js/highcharts/modules/arrow-symbols.js +1 -11
- package/assets/js/highcharts/modules/arrow-symbols.src.js +2 -2
- package/assets/js/highcharts/modules/boost-canvas.js +1 -12
- package/assets/js/highcharts/modules/boost-canvas.src.js +464 -22
- package/assets/js/highcharts/modules/boost.js +1 -13
- package/assets/js/highcharts/modules/boost.src.js +469 -27
- package/assets/js/highcharts/modules/broken-axis.js +1 -9
- package/assets/js/highcharts/modules/broken-axis.src.js +5 -5
- package/assets/js/highcharts/modules/bullet.js +1 -11
- package/assets/js/highcharts/modules/bullet.src.js +4 -4
- package/assets/js/highcharts/modules/coloraxis.js +1 -11
- package/assets/js/highcharts/modules/coloraxis.src.js +18 -19
- package/assets/js/highcharts/modules/current-date-indicator.js +1 -11
- package/assets/js/highcharts/modules/current-date-indicator.src.js +3 -3
- package/assets/js/highcharts/modules/cylinder.js +1 -12
- package/assets/js/highcharts/modules/cylinder.src.js +12 -12
- package/assets/js/highcharts/modules/data-tools.js +1 -11
- package/assets/js/highcharts/modules/data-tools.src.js +306 -89
- package/assets/js/highcharts/modules/data.js +1 -11
- package/assets/js/highcharts/modules/data.src.js +16 -16
- package/assets/js/highcharts/modules/datagrouping.js +1 -11
- package/assets/js/highcharts/modules/datagrouping.src.js +179 -31
- package/assets/js/highcharts/modules/debugger.js +1 -11
- package/assets/js/highcharts/modules/debugger.src.js +3 -3
- package/assets/js/highcharts/modules/dependency-wheel.js +1 -12
- package/assets/js/highcharts/modules/dependency-wheel.src.js +7 -7
- package/assets/js/highcharts/modules/dotplot.js +1 -11
- package/assets/js/highcharts/modules/dotplot.src.js +4 -4
- package/assets/js/highcharts/modules/drag-panes.js +1 -13
- package/assets/js/highcharts/modules/drag-panes.src.js +5 -5
- package/assets/js/highcharts/modules/draggable-points.js +1 -9
- package/assets/js/highcharts/modules/draggable-points.src.js +7 -7
- package/assets/js/highcharts/modules/drilldown.js +1 -11
- package/assets/js/highcharts/modules/drilldown.src.js +18 -32
- package/assets/js/highcharts/modules/dumbbell.js +1 -9
- package/assets/js/highcharts/modules/dumbbell.src.js +13 -11
- package/assets/js/highcharts/modules/export-data.js +1 -12
- package/assets/js/highcharts/modules/export-data.src.js +10 -9
- package/assets/js/highcharts/modules/exporting.js +1 -11
- package/assets/js/highcharts/modules/exporting.src.js +50 -37
- package/assets/js/highcharts/modules/flowmap.js +1 -9
- package/assets/js/highcharts/modules/flowmap.src.js +4 -4
- package/assets/js/highcharts/modules/full-screen.js +1 -12
- package/assets/js/highcharts/modules/full-screen.src.js +3 -3
- package/assets/js/highcharts/modules/funnel.js +1 -11
- package/assets/js/highcharts/modules/funnel.src.js +6 -6
- package/assets/js/highcharts/modules/funnel3d.js +1 -13
- package/assets/js/highcharts/modules/funnel3d.src.js +11 -11
- package/assets/js/highcharts/modules/gantt.js +1 -31
- package/assets/js/highcharts/modules/gantt.src.js +344 -156
- package/assets/js/highcharts/modules/geoheatmap.js +1 -9
- package/assets/js/highcharts/modules/geoheatmap.src.js +40 -25
- package/assets/js/highcharts/modules/grid-axis.js +1 -11
- package/assets/js/highcharts/modules/grid-axis.src.js +13 -17
- package/assets/js/highcharts/modules/heatmap.js +1 -19
- package/assets/js/highcharts/modules/heatmap.src.js +35 -43
- package/assets/js/highcharts/modules/heikinashi.js +1 -12
- package/assets/js/highcharts/modules/heikinashi.src.js +5 -5
- package/assets/js/highcharts/modules/histogram-bellcurve.js +1 -10
- package/assets/js/highcharts/modules/histogram-bellcurve.src.js +10 -10
- package/assets/js/highcharts/modules/hollowcandlestick.js +1 -12
- package/assets/js/highcharts/modules/hollowcandlestick.src.js +8 -8
- package/assets/js/highcharts/modules/item-series.js +1 -11
- package/assets/js/highcharts/modules/item-series.src.js +41 -17
- package/assets/js/highcharts/modules/lollipop.js +1 -9
- package/assets/js/highcharts/modules/lollipop.src.js +8 -8
- package/assets/js/highcharts/modules/map.js +1 -21
- package/assets/js/highcharts/modules/map.src.js +91 -106
- package/assets/js/highcharts/modules/marker-clusters.js +1 -11
- package/assets/js/highcharts/modules/marker-clusters.src.js +172 -24
- package/assets/js/highcharts/modules/mouse-wheel-zoom.js +1 -11
- package/assets/js/highcharts/modules/mouse-wheel-zoom.src.js +2 -2
- package/assets/js/highcharts/modules/navigator.js +1 -11
- package/assets/js/highcharts/modules/navigator.src.js +59 -51
- package/assets/js/highcharts/modules/networkgraph.js +1 -11
- package/assets/js/highcharts/modules/networkgraph.src.js +21 -15
- package/assets/js/highcharts/modules/no-data-to-display.js +1 -12
- package/assets/js/highcharts/modules/no-data-to-display.src.js +4 -4
- package/assets/js/highcharts/modules/offline-exporting.js +1 -12
- package/assets/js/highcharts/modules/offline-exporting.src.js +54 -41
- package/assets/js/highcharts/modules/organization.js +1 -11
- package/assets/js/highcharts/modules/organization.src.js +28 -24
- package/assets/js/highcharts/modules/parallel-coordinates.js +1 -11
- package/assets/js/highcharts/modules/parallel-coordinates.src.js +10 -10
- package/assets/js/highcharts/modules/pareto.js +1 -11
- package/assets/js/highcharts/modules/pareto.src.js +8 -8
- package/assets/js/highcharts/modules/pathfinder.js +1 -11
- package/assets/js/highcharts/modules/pathfinder.src.js +3 -3
- package/assets/js/highcharts/modules/pattern-fill.js +1 -12
- package/assets/js/highcharts/modules/pattern-fill.src.js +3 -3
- package/assets/js/highcharts/modules/pictorial.js +1 -11
- package/assets/js/highcharts/modules/pictorial.src.js +22 -22
- package/assets/js/highcharts/modules/pointandfigure.js +1 -12
- package/assets/js/highcharts/modules/pointandfigure.src.js +9 -9
- package/assets/js/highcharts/modules/price-indicator.js +1 -13
- package/assets/js/highcharts/modules/price-indicator.src.js +54 -3
- package/assets/js/highcharts/modules/pyramid3d.js +1 -14
- package/assets/js/highcharts/modules/pyramid3d.src.js +4 -4
- package/assets/js/highcharts/modules/renko.js +1 -12
- package/assets/js/highcharts/modules/renko.src.js +5 -5
- package/assets/js/highcharts/modules/sankey.js +1 -11
- package/assets/js/highcharts/modules/sankey.src.js +16 -15
- package/assets/js/highcharts/modules/series-label.js +1 -9
- package/assets/js/highcharts/modules/series-label.src.js +9 -9
- package/assets/js/highcharts/modules/series-on-point.js +1 -12
- package/assets/js/highcharts/modules/series-on-point.src.js +172 -24
- package/assets/js/highcharts/modules/solid-gauge.js +1 -12
- package/assets/js/highcharts/modules/solid-gauge.src.js +10 -10
- package/assets/js/highcharts/modules/sonification.js +1 -12
- package/assets/js/highcharts/modules/sonification.src.js +18 -18
- package/assets/js/highcharts/modules/static-scale.js +1 -11
- package/assets/js/highcharts/modules/static-scale.src.js +3 -3
- package/assets/js/highcharts/modules/stock-tools.js +1 -13
- package/assets/js/highcharts/modules/stock-tools.src.js +19 -19
- package/assets/js/highcharts/modules/stock.js +1 -29
- package/assets/js/highcharts/modules/stock.src.js +357 -168
- package/assets/js/highcharts/modules/streamgraph.js +1 -11
- package/assets/js/highcharts/modules/streamgraph.src.js +4 -4
- package/assets/js/highcharts/modules/sunburst.js +1 -10
- package/assets/js/highcharts/modules/sunburst.src.js +309 -126
- package/assets/js/highcharts/modules/textpath.js +1 -9
- package/assets/js/highcharts/modules/textpath.src.js +3 -3
- package/assets/js/highcharts/modules/tiledwebmap.js +2 -10
- package/assets/js/highcharts/modules/tiledwebmap.src.js +4 -4
- package/assets/js/highcharts/modules/tilemap.js +1 -12
- package/assets/js/highcharts/modules/tilemap.src.js +13 -14
- package/assets/js/highcharts/modules/timeline.js +1 -12
- package/assets/js/highcharts/modules/timeline.src.js +41 -17
- package/assets/js/highcharts/modules/treegraph.js +1 -11
- package/assets/js/highcharts/modules/treegraph.src.js +21 -21
- package/assets/js/highcharts/modules/treegrid.js +1 -11
- package/assets/js/highcharts/modules/treegrid.src.js +33 -38
- package/assets/js/highcharts/modules/treemap.js +1 -10
- package/assets/js/highcharts/modules/treemap.src.js +270 -86
- package/assets/js/highcharts/modules/variable-pie.js +1 -11
- package/assets/js/highcharts/modules/variable-pie.src.js +4 -4
- package/assets/js/highcharts/modules/variwide.js +1 -11
- package/assets/js/highcharts/modules/variwide.src.js +7 -7
- package/assets/js/highcharts/modules/vector.js +1 -11
- package/assets/js/highcharts/modules/vector.src.js +4 -4
- package/assets/js/highcharts/modules/venn.js +1 -10
- package/assets/js/highcharts/modules/venn.src.js +18 -20
- package/assets/js/highcharts/modules/windbarb.js +1 -11
- package/assets/js/highcharts/modules/windbarb.src.js +14 -14
- package/assets/js/highcharts/modules/wordcloud.js +1 -10
- package/assets/js/highcharts/modules/wordcloud.src.js +6 -6
- package/assets/js/highcharts/modules/xrange.js +1 -11
- package/assets/js/highcharts/modules/xrange.src.js +12 -12
- package/assets/js/highcharts/standalone-navigator.js +2 -9
- package/assets/js/highcharts/standalone-navigator.src.js +1455 -883
- package/assets/js/highcharts/themes/avocado.js +1 -9
- package/assets/js/highcharts/themes/avocado.src.js +3 -3
- package/assets/js/highcharts/themes/brand-dark.js +1 -9
- package/assets/js/highcharts/themes/brand-dark.src.js +3 -3
- package/assets/js/highcharts/themes/brand-light.js +1 -9
- package/assets/js/highcharts/themes/brand-light.src.js +3 -3
- package/assets/js/highcharts/themes/dark-blue.js +1 -9
- package/assets/js/highcharts/themes/dark-blue.src.js +3 -3
- package/assets/js/highcharts/themes/dark-green.js +1 -9
- package/assets/js/highcharts/themes/dark-green.src.js +3 -3
- package/assets/js/highcharts/themes/dark-unica.js +1 -9
- package/assets/js/highcharts/themes/dark-unica.src.js +3 -3
- package/assets/js/highcharts/themes/gray.js +1 -9
- package/assets/js/highcharts/themes/gray.src.js +3 -3
- package/assets/js/highcharts/themes/grid-light.js +1 -9
- package/assets/js/highcharts/themes/grid-light.src.js +3 -3
- package/assets/js/highcharts/themes/grid.js +1 -9
- package/assets/js/highcharts/themes/grid.src.js +3 -3
- package/assets/js/highcharts/themes/high-contrast-dark.js +1 -9
- package/assets/js/highcharts/themes/high-contrast-dark.src.js +3 -3
- package/assets/js/highcharts/themes/high-contrast-light.js +1 -9
- package/assets/js/highcharts/themes/high-contrast-light.src.js +3 -3
- package/assets/js/highcharts/themes/sand-signika.js +1 -9
- package/assets/js/highcharts/themes/sand-signika.src.js +3 -3
- package/assets/js/highcharts/themes/skies.js +1 -9
- package/assets/js/highcharts/themes/skies.src.js +3 -3
- package/assets/js/highcharts/themes/sunset.js +1 -9
- package/assets/js/highcharts/themes/sunset.src.js +3 -3
- package/package.json +1 -1
- package/assets/js/highcharts/es-modules/masters/modules/overlapping-datalabels.src.js +0 -16
- package/assets/js/highcharts/gfx/datagrid-icons/dropdown-pointer.svg +0 -3
- package/assets/js/highcharts/modules/overlapping-datalabels.js +0 -9
- package/assets/js/highcharts/modules/overlapping-datalabels.src.js +0 -474
|
@@ -0,0 +1,4362 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Highcharts JS v12.2.0 (2025-04-07)
|
|
3
|
+
* @module highcharts/modules/boost
|
|
4
|
+
* @requires highcharts
|
|
5
|
+
*
|
|
6
|
+
* Boost module
|
|
7
|
+
*
|
|
8
|
+
* (c) 2010-2025 Highsoft AS
|
|
9
|
+
* Author: Torstein Honsi
|
|
10
|
+
*
|
|
11
|
+
* License: www.highcharts.com/license
|
|
12
|
+
*
|
|
13
|
+
* */
|
|
14
|
+
import * as __WEBPACK_EXTERNAL_MODULE__highcharts_src_js_8202131d__ from "../highcharts.src.js";
|
|
15
|
+
/******/ // The require scope
|
|
16
|
+
/******/ var __webpack_require__ = {};
|
|
17
|
+
/******/
|
|
18
|
+
/************************************************************************/
|
|
19
|
+
/******/ /* webpack/runtime/compat get default export */
|
|
20
|
+
/******/ (() => {
|
|
21
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
22
|
+
/******/ __webpack_require__.n = (module) => {
|
|
23
|
+
/******/ var getter = module && module.__esModule ?
|
|
24
|
+
/******/ () => (module['default']) :
|
|
25
|
+
/******/ () => (module);
|
|
26
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
|
27
|
+
/******/ return getter;
|
|
28
|
+
/******/ };
|
|
29
|
+
/******/ })();
|
|
30
|
+
/******/
|
|
31
|
+
/******/ /* webpack/runtime/define property getters */
|
|
32
|
+
/******/ (() => {
|
|
33
|
+
/******/ // define getter functions for harmony exports
|
|
34
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
35
|
+
/******/ for(var key in definition) {
|
|
36
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
37
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
38
|
+
/******/ }
|
|
39
|
+
/******/ }
|
|
40
|
+
/******/ };
|
|
41
|
+
/******/ })();
|
|
42
|
+
/******/
|
|
43
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
44
|
+
/******/ (() => {
|
|
45
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
46
|
+
/******/ })();
|
|
47
|
+
/******/
|
|
48
|
+
/************************************************************************/
|
|
49
|
+
|
|
50
|
+
;// external ["../highcharts.src.js","default"]
|
|
51
|
+
const external_highcharts_src_js_default_namespaceObject = __WEBPACK_EXTERNAL_MODULE__highcharts_src_js_8202131d__["default"];
|
|
52
|
+
var external_highcharts_src_js_default_default = /*#__PURE__*/__webpack_require__.n(external_highcharts_src_js_default_namespaceObject);
|
|
53
|
+
;// ./code/es-modules/Extensions/Boost/Boostables.js
|
|
54
|
+
/* *
|
|
55
|
+
*
|
|
56
|
+
* (c) 2019-2025 Highsoft AS
|
|
57
|
+
*
|
|
58
|
+
* Boost module: stripped-down renderer for higher performance
|
|
59
|
+
*
|
|
60
|
+
* License: highcharts.com/license
|
|
61
|
+
*
|
|
62
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
63
|
+
*
|
|
64
|
+
* */
|
|
65
|
+
|
|
66
|
+
/* *
|
|
67
|
+
*
|
|
68
|
+
* Constants
|
|
69
|
+
*
|
|
70
|
+
* */
|
|
71
|
+
// These are the series we allow boosting for.
|
|
72
|
+
const Boostables = [
|
|
73
|
+
'area',
|
|
74
|
+
'areaspline',
|
|
75
|
+
'arearange',
|
|
76
|
+
'column',
|
|
77
|
+
'columnrange',
|
|
78
|
+
'bar',
|
|
79
|
+
'line',
|
|
80
|
+
'scatter',
|
|
81
|
+
'heatmap',
|
|
82
|
+
'bubble',
|
|
83
|
+
'treemap'
|
|
84
|
+
];
|
|
85
|
+
/* *
|
|
86
|
+
*
|
|
87
|
+
* Default Export
|
|
88
|
+
*
|
|
89
|
+
* */
|
|
90
|
+
/* harmony default export */ const Boost_Boostables = (Boostables);
|
|
91
|
+
|
|
92
|
+
;// ./code/es-modules/Extensions/Boost/BoostableMap.js
|
|
93
|
+
/* *
|
|
94
|
+
*
|
|
95
|
+
* (c) 2019-2025 Highsoft AS
|
|
96
|
+
*
|
|
97
|
+
* Boost module: stripped-down renderer for higher performance
|
|
98
|
+
*
|
|
99
|
+
* License: highcharts.com/license
|
|
100
|
+
*
|
|
101
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
102
|
+
*
|
|
103
|
+
* */
|
|
104
|
+
|
|
105
|
+
/* *
|
|
106
|
+
*
|
|
107
|
+
* Imports
|
|
108
|
+
*
|
|
109
|
+
* */
|
|
110
|
+
|
|
111
|
+
/* *
|
|
112
|
+
*
|
|
113
|
+
* Constants
|
|
114
|
+
*
|
|
115
|
+
* */
|
|
116
|
+
// These are the series we allow boosting for.
|
|
117
|
+
const BoostableMap = {};
|
|
118
|
+
Boost_Boostables.forEach((item) => {
|
|
119
|
+
BoostableMap[item] = true;
|
|
120
|
+
});
|
|
121
|
+
/* *
|
|
122
|
+
*
|
|
123
|
+
* Default Export
|
|
124
|
+
*
|
|
125
|
+
* */
|
|
126
|
+
/* harmony default export */ const Boost_BoostableMap = (BoostableMap);
|
|
127
|
+
|
|
128
|
+
;// ./code/es-modules/Extensions/Boost/BoostChart.js
|
|
129
|
+
/* *
|
|
130
|
+
*
|
|
131
|
+
* (c) 2019-2025 Highsoft AS
|
|
132
|
+
*
|
|
133
|
+
* Boost module: stripped-down renderer for higher performance
|
|
134
|
+
*
|
|
135
|
+
* License: highcharts.com/license
|
|
136
|
+
*
|
|
137
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
138
|
+
*
|
|
139
|
+
* */
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
const { composed } = (external_highcharts_src_js_default_default());
|
|
144
|
+
|
|
145
|
+
const { addEvent, pick, pushUnique } = (external_highcharts_src_js_default_default());
|
|
146
|
+
/* *
|
|
147
|
+
*
|
|
148
|
+
* Functions
|
|
149
|
+
*
|
|
150
|
+
* */
|
|
151
|
+
/**
|
|
152
|
+
* @private
|
|
153
|
+
*/
|
|
154
|
+
function compose(ChartClass, wglMode) {
|
|
155
|
+
if (wglMode && pushUnique(composed, 'Boost.Chart')) {
|
|
156
|
+
ChartClass.prototype.callbacks.push(onChartCallback);
|
|
157
|
+
}
|
|
158
|
+
return ChartClass;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get the clip rectangle for a target, either a series or the chart.
|
|
162
|
+
* For the chart, we need to consider the maximum extent of its Y axes,
|
|
163
|
+
* in case of Highcharts Stock panes and navigator.
|
|
164
|
+
*
|
|
165
|
+
* @private
|
|
166
|
+
* @function Highcharts.Chart#getBoostClipRect
|
|
167
|
+
*/
|
|
168
|
+
function getBoostClipRect(chart, target) {
|
|
169
|
+
const navigator = chart.navigator;
|
|
170
|
+
let clipBox = {
|
|
171
|
+
x: chart.plotLeft,
|
|
172
|
+
y: chart.plotTop,
|
|
173
|
+
width: chart.plotWidth,
|
|
174
|
+
height: chart.plotHeight
|
|
175
|
+
};
|
|
176
|
+
if (navigator && chart.inverted) { // #17820, #20936
|
|
177
|
+
clipBox.width += navigator.top + navigator.height;
|
|
178
|
+
if (!navigator.opposite) {
|
|
179
|
+
clipBox.x = navigator.left;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (navigator && !chart.inverted) {
|
|
183
|
+
clipBox.height = navigator.top + navigator.height - chart.plotTop;
|
|
184
|
+
}
|
|
185
|
+
// Clipping of individual series (#11906, #19039).
|
|
186
|
+
if (target.is) {
|
|
187
|
+
const { xAxis, yAxis } = target;
|
|
188
|
+
clipBox = chart.getClipBox(target);
|
|
189
|
+
if (chart.inverted) {
|
|
190
|
+
const lateral = clipBox.width;
|
|
191
|
+
clipBox.width = clipBox.height;
|
|
192
|
+
clipBox.height = lateral;
|
|
193
|
+
clipBox.x = yAxis.pos;
|
|
194
|
+
clipBox.y = xAxis.pos;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
clipBox.x = xAxis.pos;
|
|
198
|
+
clipBox.y = yAxis.pos;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (target === chart) {
|
|
202
|
+
const verticalAxes = chart.inverted ? chart.xAxis : chart.yAxis; // #14444
|
|
203
|
+
if (verticalAxes.length <= 1) {
|
|
204
|
+
clipBox.y = Math.min(verticalAxes[0].pos, clipBox.y);
|
|
205
|
+
clipBox.height = (verticalAxes[0].pos -
|
|
206
|
+
chart.plotTop +
|
|
207
|
+
verticalAxes[0].len);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return clipBox;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Returns true if the chart is in series boost mode.
|
|
214
|
+
* @private
|
|
215
|
+
* @param {Highcharts.Chart} chart
|
|
216
|
+
* Chart to check.
|
|
217
|
+
* @return {boolean}
|
|
218
|
+
* `true` if the chart is in series boost mode.
|
|
219
|
+
*/
|
|
220
|
+
function isChartSeriesBoosting(chart) {
|
|
221
|
+
const allSeries = chart.series, boost = chart.boost = chart.boost || {}, boostOptions = chart.options.boost || {}, threshold = pick(boostOptions.seriesThreshold, 50);
|
|
222
|
+
if (allSeries.length >= threshold) {
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
if (allSeries.length === 1) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
let allowBoostForce = boostOptions.allowForce;
|
|
229
|
+
if (typeof allowBoostForce === 'undefined') {
|
|
230
|
+
allowBoostForce = true;
|
|
231
|
+
for (const axis of chart.xAxis) {
|
|
232
|
+
if (pick(axis.min, -Infinity) > pick(axis.dataMin, -Infinity) ||
|
|
233
|
+
pick(axis.max, Infinity) < pick(axis.dataMax, Infinity)) {
|
|
234
|
+
allowBoostForce = false;
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (typeof boost.forceChartBoost !== 'undefined') {
|
|
240
|
+
if (allowBoostForce) {
|
|
241
|
+
return boost.forceChartBoost;
|
|
242
|
+
}
|
|
243
|
+
boost.forceChartBoost = void 0;
|
|
244
|
+
}
|
|
245
|
+
// If there are more than five series currently boosting,
|
|
246
|
+
// we should boost the whole chart to avoid running out of webgl contexts.
|
|
247
|
+
let canBoostCount = 0, needBoostCount = 0, seriesOptions;
|
|
248
|
+
for (const series of allSeries) {
|
|
249
|
+
seriesOptions = series.options;
|
|
250
|
+
// Don't count series with boostThreshold set to 0
|
|
251
|
+
// See #8950
|
|
252
|
+
// Also don't count if the series is hidden.
|
|
253
|
+
// See #9046
|
|
254
|
+
if (seriesOptions.boostThreshold === 0 ||
|
|
255
|
+
series.visible === false) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
// Don't count heatmap series as they are handled differently.
|
|
259
|
+
// In the future we should make the heatmap/treemap path compatible
|
|
260
|
+
// with forcing. See #9636.
|
|
261
|
+
if (series.type === 'heatmap') {
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
if (Boost_BoostableMap[series.type]) {
|
|
265
|
+
++canBoostCount;
|
|
266
|
+
}
|
|
267
|
+
if (patientMax(series.getColumn('x', true), seriesOptions.data,
|
|
268
|
+
/// series.xData,
|
|
269
|
+
series.points) >= (seriesOptions.boostThreshold || Number.MAX_VALUE)) {
|
|
270
|
+
++needBoostCount;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
boost.forceChartBoost = allowBoostForce && ((
|
|
274
|
+
// Even when the series that need a boost are less than or equal
|
|
275
|
+
// to 5, force a chart boost when all series are to be boosted.
|
|
276
|
+
// See #18815
|
|
277
|
+
canBoostCount === allSeries.length &&
|
|
278
|
+
needBoostCount === canBoostCount) ||
|
|
279
|
+
needBoostCount > 5);
|
|
280
|
+
return boost.forceChartBoost;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Take care of the canvas blitting
|
|
284
|
+
* @private
|
|
285
|
+
*/
|
|
286
|
+
function onChartCallback(chart) {
|
|
287
|
+
/**
|
|
288
|
+
* Convert chart-level canvas to image.
|
|
289
|
+
* @private
|
|
290
|
+
*/
|
|
291
|
+
function canvasToSVG() {
|
|
292
|
+
if (chart.boost &&
|
|
293
|
+
chart.boost.wgl &&
|
|
294
|
+
isChartSeriesBoosting(chart)) {
|
|
295
|
+
chart.boost.wgl.render(chart);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Clear chart-level canvas.
|
|
300
|
+
* @private
|
|
301
|
+
*/
|
|
302
|
+
function preRender() {
|
|
303
|
+
// Reset force state
|
|
304
|
+
chart.boost = chart.boost || {};
|
|
305
|
+
chart.boost.forceChartBoost = void 0;
|
|
306
|
+
chart.boosted = false;
|
|
307
|
+
// Clear the canvas
|
|
308
|
+
if (!chart.axes.some((axis) => axis.isPanning)) {
|
|
309
|
+
chart.boost.clear?.();
|
|
310
|
+
}
|
|
311
|
+
if (chart.boost.canvas &&
|
|
312
|
+
chart.boost.wgl &&
|
|
313
|
+
isChartSeriesBoosting(chart)) {
|
|
314
|
+
// Allocate
|
|
315
|
+
chart.boost.wgl.allocateBuffer(chart);
|
|
316
|
+
}
|
|
317
|
+
// See #6518 + #6739
|
|
318
|
+
if (chart.boost.markerGroup &&
|
|
319
|
+
chart.xAxis &&
|
|
320
|
+
chart.xAxis.length > 0 &&
|
|
321
|
+
chart.yAxis &&
|
|
322
|
+
chart.yAxis.length > 0) {
|
|
323
|
+
chart.boost.markerGroup.translate(chart.xAxis[0].pos, chart.yAxis[0].pos);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
addEvent(chart, 'predraw', preRender);
|
|
327
|
+
// Use the load event rather than redraw, otherwise user load events will
|
|
328
|
+
// fire too early (#18755)
|
|
329
|
+
addEvent(chart, 'load', canvasToSVG, { order: -1 });
|
|
330
|
+
addEvent(chart, 'redraw', canvasToSVG);
|
|
331
|
+
let prevX = -1;
|
|
332
|
+
let prevY = -1;
|
|
333
|
+
addEvent(chart.pointer, 'afterGetHoverData', (e) => {
|
|
334
|
+
const series = e.hoverPoint?.series;
|
|
335
|
+
chart.boost = chart.boost || {};
|
|
336
|
+
if (chart.boost.markerGroup && series) {
|
|
337
|
+
const xAxis = chart.inverted ? series.yAxis : series.xAxis;
|
|
338
|
+
const yAxis = chart.inverted ? series.xAxis : series.yAxis;
|
|
339
|
+
if ((xAxis && xAxis.pos !== prevX) ||
|
|
340
|
+
(yAxis && yAxis.pos !== prevY)) {
|
|
341
|
+
// #21176: If the axis is changed, hide teh halo without
|
|
342
|
+
// animation to prevent flickering of halos sharing the
|
|
343
|
+
// same marker group
|
|
344
|
+
chart.series.forEach((s) => {
|
|
345
|
+
s.halo?.hide();
|
|
346
|
+
});
|
|
347
|
+
// #10464: Keep the marker group position in sync with the
|
|
348
|
+
// position of the hovered series axes since there is only
|
|
349
|
+
// one shared marker group when boosting.
|
|
350
|
+
chart.boost.markerGroup.translate(xAxis.pos, yAxis.pos);
|
|
351
|
+
prevX = xAxis.pos;
|
|
352
|
+
prevY = yAxis.pos;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Tolerant max() function.
|
|
359
|
+
*
|
|
360
|
+
* @private
|
|
361
|
+
* @param {...Array<Array<unknown>>} args
|
|
362
|
+
* Max arguments
|
|
363
|
+
* @return {number}
|
|
364
|
+
* Max value
|
|
365
|
+
*/
|
|
366
|
+
function patientMax(...args) {
|
|
367
|
+
let r = -Number.MAX_VALUE;
|
|
368
|
+
args.forEach((t) => {
|
|
369
|
+
if (typeof t !== 'undefined' &&
|
|
370
|
+
t !== null &&
|
|
371
|
+
typeof t.length !== 'undefined') {
|
|
372
|
+
if (t.length > 0) {
|
|
373
|
+
r = t.length;
|
|
374
|
+
return true;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
return r;
|
|
379
|
+
}
|
|
380
|
+
/* *
|
|
381
|
+
*
|
|
382
|
+
* Default Export
|
|
383
|
+
*
|
|
384
|
+
* */
|
|
385
|
+
const BoostChart = {
|
|
386
|
+
compose,
|
|
387
|
+
getBoostClipRect,
|
|
388
|
+
isChartSeriesBoosting
|
|
389
|
+
};
|
|
390
|
+
/* harmony default export */ const Boost_BoostChart = (BoostChart);
|
|
391
|
+
|
|
392
|
+
;// external ["../highcharts.src.js","default","Color"]
|
|
393
|
+
const external_highcharts_src_js_default_Color_namespaceObject = __WEBPACK_EXTERNAL_MODULE__highcharts_src_js_8202131d__["default"].Color;
|
|
394
|
+
var external_highcharts_src_js_default_Color_default = /*#__PURE__*/__webpack_require__.n(external_highcharts_src_js_default_Color_namespaceObject);
|
|
395
|
+
;// ./code/es-modules/Extensions/Boost/WGLDrawMode.js
|
|
396
|
+
/* *
|
|
397
|
+
*
|
|
398
|
+
* (c) 2019-2025 Highsoft AS
|
|
399
|
+
*
|
|
400
|
+
* Boost module: stripped-down renderer for higher performance
|
|
401
|
+
*
|
|
402
|
+
* License: highcharts.com/license
|
|
403
|
+
*
|
|
404
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
405
|
+
*
|
|
406
|
+
* */
|
|
407
|
+
|
|
408
|
+
/* *
|
|
409
|
+
*
|
|
410
|
+
* Constants
|
|
411
|
+
*
|
|
412
|
+
* */
|
|
413
|
+
const WGLDrawMode = {
|
|
414
|
+
'area': 'LINES',
|
|
415
|
+
'arearange': 'LINES',
|
|
416
|
+
'areaspline': 'LINES',
|
|
417
|
+
'column': 'LINES',
|
|
418
|
+
'columnrange': 'LINES',
|
|
419
|
+
'bar': 'LINES',
|
|
420
|
+
'line': 'LINE_STRIP',
|
|
421
|
+
'scatter': 'POINTS',
|
|
422
|
+
'heatmap': 'TRIANGLES',
|
|
423
|
+
'treemap': 'TRIANGLES',
|
|
424
|
+
'bubble': 'POINTS'
|
|
425
|
+
};
|
|
426
|
+
/* *
|
|
427
|
+
*
|
|
428
|
+
* Default Export
|
|
429
|
+
*
|
|
430
|
+
* */
|
|
431
|
+
/* harmony default export */ const Boost_WGLDrawMode = (WGLDrawMode);
|
|
432
|
+
|
|
433
|
+
;// ./code/es-modules/Extensions/Boost/WGLShader.js
|
|
434
|
+
/* *
|
|
435
|
+
*
|
|
436
|
+
* (c) 2019-2025 Highsoft AS
|
|
437
|
+
*
|
|
438
|
+
* Boost module: stripped-down renderer for higher performance
|
|
439
|
+
*
|
|
440
|
+
* License: highcharts.com/license
|
|
441
|
+
*
|
|
442
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
443
|
+
*
|
|
444
|
+
* */
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
const { clamp, error, pick: WGLShader_pick } = (external_highcharts_src_js_default_default());
|
|
448
|
+
/* *
|
|
449
|
+
*
|
|
450
|
+
* Constants
|
|
451
|
+
*
|
|
452
|
+
* */
|
|
453
|
+
const fragmentShader = [
|
|
454
|
+
/* eslint-disable max-len, @typescript-eslint/indent */
|
|
455
|
+
'precision highp float;',
|
|
456
|
+
'uniform vec4 fillColor;',
|
|
457
|
+
'varying highp vec2 position;',
|
|
458
|
+
'varying highp vec4 vColor;',
|
|
459
|
+
'uniform sampler2D uSampler;',
|
|
460
|
+
'uniform bool isCircle;',
|
|
461
|
+
'uniform bool hasColor;',
|
|
462
|
+
// 'vec4 toColor(float value, vec2 point) {',
|
|
463
|
+
// 'return vec4(0.0, 0.0, 0.0, 0.0);',
|
|
464
|
+
// '}',
|
|
465
|
+
'void main(void) {',
|
|
466
|
+
'vec4 col = fillColor;',
|
|
467
|
+
'vec4 tcol = texture2D(uSampler, gl_PointCoord.st);',
|
|
468
|
+
'if (hasColor) {',
|
|
469
|
+
'col = vColor;',
|
|
470
|
+
'}',
|
|
471
|
+
'if (isCircle) {',
|
|
472
|
+
'col *= tcol;',
|
|
473
|
+
'if (tcol.r < 0.0) {',
|
|
474
|
+
'discard;',
|
|
475
|
+
'} else {',
|
|
476
|
+
'gl_FragColor = col;',
|
|
477
|
+
'}',
|
|
478
|
+
'} else {',
|
|
479
|
+
'gl_FragColor = col;',
|
|
480
|
+
'}',
|
|
481
|
+
'}'
|
|
482
|
+
/* eslint-enable max-len, @typescript-eslint/indent */
|
|
483
|
+
].join('\n');
|
|
484
|
+
const vertexShader = [
|
|
485
|
+
/* eslint-disable max-len, @typescript-eslint/indent */
|
|
486
|
+
'#version 100',
|
|
487
|
+
'#define LN10 2.302585092994046',
|
|
488
|
+
'precision highp float;',
|
|
489
|
+
'attribute vec4 aVertexPosition;',
|
|
490
|
+
'attribute vec4 aColor;',
|
|
491
|
+
'varying highp vec2 position;',
|
|
492
|
+
'varying highp vec4 vColor;',
|
|
493
|
+
'uniform mat4 uPMatrix;',
|
|
494
|
+
'uniform float pSize;',
|
|
495
|
+
'uniform float translatedThreshold;',
|
|
496
|
+
'uniform bool hasThreshold;',
|
|
497
|
+
'uniform bool skipTranslation;',
|
|
498
|
+
'uniform float xAxisTrans;',
|
|
499
|
+
'uniform float xAxisMin;',
|
|
500
|
+
'uniform float xAxisMinPad;',
|
|
501
|
+
'uniform float xAxisPointRange;',
|
|
502
|
+
'uniform float xAxisLen;',
|
|
503
|
+
'uniform bool xAxisPostTranslate;',
|
|
504
|
+
'uniform float xAxisOrdinalSlope;',
|
|
505
|
+
'uniform float xAxisOrdinalOffset;',
|
|
506
|
+
'uniform float xAxisPos;',
|
|
507
|
+
'uniform bool xAxisCVSCoord;',
|
|
508
|
+
'uniform bool xAxisIsLog;',
|
|
509
|
+
'uniform bool xAxisReversed;',
|
|
510
|
+
'uniform float yAxisTrans;',
|
|
511
|
+
'uniform float yAxisMin;',
|
|
512
|
+
'uniform float yAxisMinPad;',
|
|
513
|
+
'uniform float yAxisPointRange;',
|
|
514
|
+
'uniform float yAxisLen;',
|
|
515
|
+
'uniform bool yAxisPostTranslate;',
|
|
516
|
+
'uniform float yAxisOrdinalSlope;',
|
|
517
|
+
'uniform float yAxisOrdinalOffset;',
|
|
518
|
+
'uniform float yAxisPos;',
|
|
519
|
+
'uniform bool yAxisCVSCoord;',
|
|
520
|
+
'uniform bool yAxisIsLog;',
|
|
521
|
+
'uniform bool yAxisReversed;',
|
|
522
|
+
'uniform bool isBubble;',
|
|
523
|
+
'uniform bool bubbleSizeByArea;',
|
|
524
|
+
'uniform float bubbleZMin;',
|
|
525
|
+
'uniform float bubbleZMax;',
|
|
526
|
+
'uniform float bubbleZThreshold;',
|
|
527
|
+
'uniform float bubbleMinSize;',
|
|
528
|
+
'uniform float bubbleMaxSize;',
|
|
529
|
+
'uniform bool bubbleSizeAbs;',
|
|
530
|
+
'uniform bool isInverted;',
|
|
531
|
+
'float bubbleRadius(){',
|
|
532
|
+
'float value = aVertexPosition.w;',
|
|
533
|
+
'float zMax = bubbleZMax;',
|
|
534
|
+
'float zMin = bubbleZMin;',
|
|
535
|
+
'float radius = 0.0;',
|
|
536
|
+
'float pos = 0.0;',
|
|
537
|
+
'float zRange = zMax - zMin;',
|
|
538
|
+
'if (bubbleSizeAbs){',
|
|
539
|
+
'value = value - bubbleZThreshold;',
|
|
540
|
+
'zMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);',
|
|
541
|
+
'zMin = 0.0;',
|
|
542
|
+
'}',
|
|
543
|
+
'if (value < zMin){',
|
|
544
|
+
'radius = bubbleZMin / 2.0 - 1.0;',
|
|
545
|
+
'} else {',
|
|
546
|
+
'pos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;',
|
|
547
|
+
'if (bubbleSizeByArea && pos > 0.0){',
|
|
548
|
+
'pos = sqrt(pos);',
|
|
549
|
+
'}',
|
|
550
|
+
'radius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;',
|
|
551
|
+
'}',
|
|
552
|
+
'return radius * 2.0;',
|
|
553
|
+
'}',
|
|
554
|
+
'float translate(float val,',
|
|
555
|
+
'float pointPlacement,',
|
|
556
|
+
'float localA,',
|
|
557
|
+
'float localMin,',
|
|
558
|
+
'float minPixelPadding,',
|
|
559
|
+
'float pointRange,',
|
|
560
|
+
'float len,',
|
|
561
|
+
'bool cvsCoord,',
|
|
562
|
+
'bool isLog,',
|
|
563
|
+
'bool reversed',
|
|
564
|
+
'){',
|
|
565
|
+
'float sign = 1.0;',
|
|
566
|
+
'float cvsOffset = 0.0;',
|
|
567
|
+
'if (cvsCoord) {',
|
|
568
|
+
'sign *= -1.0;',
|
|
569
|
+
'cvsOffset = len;',
|
|
570
|
+
'}',
|
|
571
|
+
'if (isLog) {',
|
|
572
|
+
'val = log(val) / LN10;',
|
|
573
|
+
'}',
|
|
574
|
+
'if (reversed) {',
|
|
575
|
+
'sign *= -1.0;',
|
|
576
|
+
'cvsOffset -= sign * len;',
|
|
577
|
+
'}',
|
|
578
|
+
'return sign * (val - localMin) * localA + cvsOffset + ',
|
|
579
|
+
'(sign * minPixelPadding);', // ' + localA * pointPlacement * pointRange;',
|
|
580
|
+
'}',
|
|
581
|
+
'float xToPixels(float value) {',
|
|
582
|
+
'if (skipTranslation){',
|
|
583
|
+
'return value;// + xAxisPos;',
|
|
584
|
+
'}',
|
|
585
|
+
'return translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;',
|
|
586
|
+
'}',
|
|
587
|
+
'float yToPixels(float value, float checkTreshold) {',
|
|
588
|
+
'float v;',
|
|
589
|
+
'if (skipTranslation){',
|
|
590
|
+
'v = value;// + yAxisPos;',
|
|
591
|
+
'} else {',
|
|
592
|
+
'v = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;',
|
|
593
|
+
'if (v > yAxisLen) {',
|
|
594
|
+
'v = yAxisLen;',
|
|
595
|
+
'}',
|
|
596
|
+
'}',
|
|
597
|
+
'if (checkTreshold > 0.0 && hasThreshold) {',
|
|
598
|
+
'v = min(v, translatedThreshold);',
|
|
599
|
+
'}',
|
|
600
|
+
'return v;',
|
|
601
|
+
'}',
|
|
602
|
+
'void main(void) {',
|
|
603
|
+
'if (isBubble){',
|
|
604
|
+
'gl_PointSize = bubbleRadius();',
|
|
605
|
+
'} else {',
|
|
606
|
+
'gl_PointSize = pSize;',
|
|
607
|
+
'}',
|
|
608
|
+
// 'gl_PointSize = 10.0;',
|
|
609
|
+
'vColor = aColor;',
|
|
610
|
+
'if (skipTranslation && isInverted) {',
|
|
611
|
+
// If we get translated values from JS, just swap them (x, y)
|
|
612
|
+
'gl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);',
|
|
613
|
+
'} else if (isInverted) {',
|
|
614
|
+
// But when calculating pixel positions directly,
|
|
615
|
+
// swap axes and values (x, y)
|
|
616
|
+
'gl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);',
|
|
617
|
+
'} else {',
|
|
618
|
+
'gl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);',
|
|
619
|
+
'}',
|
|
620
|
+
// 'gl_Position = uPMatrix * vec4(aVertexPosition.x, aVertexPosition.y, 0.0, 1.0);',
|
|
621
|
+
'}'
|
|
622
|
+
/* eslint-enable max-len, @typescript-eslint/indent */
|
|
623
|
+
].join('\n');
|
|
624
|
+
/* *
|
|
625
|
+
*
|
|
626
|
+
* Class
|
|
627
|
+
*
|
|
628
|
+
* */
|
|
629
|
+
/* eslint-disable valid-jsdoc */
|
|
630
|
+
/**
|
|
631
|
+
* A static shader mimicing axis translation functions found in Core/Axis
|
|
632
|
+
*
|
|
633
|
+
* @private
|
|
634
|
+
*
|
|
635
|
+
* @param {WebGLContext} gl
|
|
636
|
+
* the context in which the shader is active
|
|
637
|
+
*/
|
|
638
|
+
class WGLShader {
|
|
639
|
+
/* *
|
|
640
|
+
*
|
|
641
|
+
* Constructor
|
|
642
|
+
*
|
|
643
|
+
* */
|
|
644
|
+
constructor(gl) {
|
|
645
|
+
// Error stack
|
|
646
|
+
this.errors = [];
|
|
647
|
+
this.uLocations = {};
|
|
648
|
+
this.gl = gl;
|
|
649
|
+
if (gl && !this.createShader()) {
|
|
650
|
+
return void 0;
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
/* *
|
|
654
|
+
*
|
|
655
|
+
* Functions
|
|
656
|
+
*
|
|
657
|
+
* */
|
|
658
|
+
/**
|
|
659
|
+
* Bind the shader.
|
|
660
|
+
* This makes the shader the active one until another one is bound,
|
|
661
|
+
* or until 0 is bound.
|
|
662
|
+
* @private
|
|
663
|
+
*/
|
|
664
|
+
bind() {
|
|
665
|
+
if (this.gl && this.shaderProgram) {
|
|
666
|
+
this.gl.useProgram(this.shaderProgram);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
/**
|
|
670
|
+
* Create the shader.
|
|
671
|
+
* Loads the shader program statically defined above
|
|
672
|
+
* @private
|
|
673
|
+
*/
|
|
674
|
+
createShader() {
|
|
675
|
+
const v = this.stringToProgram(vertexShader, 'vertex'), f = this.stringToProgram(fragmentShader, 'fragment'), uloc = (n) => (this.gl.getUniformLocation(this.shaderProgram, n));
|
|
676
|
+
if (!v || !f) {
|
|
677
|
+
this.shaderProgram = false;
|
|
678
|
+
this.handleErrors();
|
|
679
|
+
return false;
|
|
680
|
+
}
|
|
681
|
+
this.shaderProgram = this.gl.createProgram();
|
|
682
|
+
this.gl.attachShader(this.shaderProgram, v);
|
|
683
|
+
this.gl.attachShader(this.shaderProgram, f);
|
|
684
|
+
this.gl.linkProgram(this.shaderProgram);
|
|
685
|
+
if (!this.gl.getProgramParameter(this.shaderProgram, this.gl.LINK_STATUS)) {
|
|
686
|
+
this.errors.push(this.gl.getProgramInfoLog(this.shaderProgram));
|
|
687
|
+
this.handleErrors();
|
|
688
|
+
this.shaderProgram = false;
|
|
689
|
+
return false;
|
|
690
|
+
}
|
|
691
|
+
this.gl.useProgram(this.shaderProgram);
|
|
692
|
+
this.gl.bindAttribLocation(this.shaderProgram, 0, 'aVertexPosition');
|
|
693
|
+
this.pUniform = uloc('uPMatrix');
|
|
694
|
+
this.psUniform = uloc('pSize');
|
|
695
|
+
this.fcUniform = uloc('fillColor');
|
|
696
|
+
this.isBubbleUniform = uloc('isBubble');
|
|
697
|
+
this.bubbleSizeAbsUniform = uloc('bubbleSizeAbs');
|
|
698
|
+
this.bubbleSizeAreaUniform = uloc('bubbleSizeByArea');
|
|
699
|
+
this.uSamplerUniform = uloc('uSampler');
|
|
700
|
+
this.skipTranslationUniform = uloc('skipTranslation');
|
|
701
|
+
this.isCircleUniform = uloc('isCircle');
|
|
702
|
+
this.isInverted = uloc('isInverted');
|
|
703
|
+
return true;
|
|
704
|
+
}
|
|
705
|
+
/**
|
|
706
|
+
* Handle errors accumulated in errors stack
|
|
707
|
+
* @private
|
|
708
|
+
*/
|
|
709
|
+
handleErrors() {
|
|
710
|
+
if (this.errors.length) {
|
|
711
|
+
error('[highcharts boost] shader error - ' +
|
|
712
|
+
this.errors.join('\n'));
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* String to shader program
|
|
717
|
+
* @private
|
|
718
|
+
* @param {string} str
|
|
719
|
+
* Program source
|
|
720
|
+
* @param {string} type
|
|
721
|
+
* Program type: either `vertex` or `fragment`
|
|
722
|
+
*/
|
|
723
|
+
stringToProgram(str, type) {
|
|
724
|
+
const shader = this.gl.createShader(type === 'vertex' ? this.gl.VERTEX_SHADER : this.gl.FRAGMENT_SHADER);
|
|
725
|
+
this.gl.shaderSource(shader, str);
|
|
726
|
+
this.gl.compileShader(shader);
|
|
727
|
+
if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {
|
|
728
|
+
this.errors.push('when compiling ' +
|
|
729
|
+
type +
|
|
730
|
+
' shader:\n' +
|
|
731
|
+
this.gl.getShaderInfoLog(shader));
|
|
732
|
+
return false;
|
|
733
|
+
}
|
|
734
|
+
return shader;
|
|
735
|
+
}
|
|
736
|
+
/**
|
|
737
|
+
* Destroy the shader
|
|
738
|
+
* @private
|
|
739
|
+
*/
|
|
740
|
+
destroy() {
|
|
741
|
+
if (this.gl && this.shaderProgram) {
|
|
742
|
+
this.gl.deleteProgram(this.shaderProgram);
|
|
743
|
+
this.shaderProgram = false;
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
fillColorUniform() {
|
|
747
|
+
return this.fcUniform;
|
|
748
|
+
}
|
|
749
|
+
/**
|
|
750
|
+
* Get the shader program handle
|
|
751
|
+
* @private
|
|
752
|
+
* @return {WebGLProgram}
|
|
753
|
+
* The handle for the program
|
|
754
|
+
*/
|
|
755
|
+
getProgram() {
|
|
756
|
+
return this.shaderProgram;
|
|
757
|
+
}
|
|
758
|
+
pointSizeUniform() {
|
|
759
|
+
return this.psUniform;
|
|
760
|
+
}
|
|
761
|
+
perspectiveUniform() {
|
|
762
|
+
return this.pUniform;
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Flush
|
|
766
|
+
* @private
|
|
767
|
+
*/
|
|
768
|
+
reset() {
|
|
769
|
+
if (this.gl && this.shaderProgram) {
|
|
770
|
+
this.gl.uniform1i(this.isBubbleUniform, 0);
|
|
771
|
+
this.gl.uniform1i(this.isCircleUniform, 0);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
/**
|
|
775
|
+
* Set bubble uniforms
|
|
776
|
+
* @private
|
|
777
|
+
* @param {Highcharts.Series} series
|
|
778
|
+
* Series to use
|
|
779
|
+
*/
|
|
780
|
+
setBubbleUniforms(series, zCalcMin, zCalcMax, pixelRatio = 1) {
|
|
781
|
+
const seriesOptions = series.options;
|
|
782
|
+
let zMin = Number.MAX_VALUE, zMax = -Number.MAX_VALUE;
|
|
783
|
+
if (this.gl && this.shaderProgram && series.is('bubble')) {
|
|
784
|
+
const pxSizes = series.getPxExtremes();
|
|
785
|
+
zMin = WGLShader_pick(seriesOptions.zMin, clamp(zCalcMin, seriesOptions.displayNegative === false ?
|
|
786
|
+
seriesOptions.zThreshold : -Number.MAX_VALUE, zMin));
|
|
787
|
+
zMax = WGLShader_pick(seriesOptions.zMax, Math.max(zMax, zCalcMax));
|
|
788
|
+
this.gl.uniform1i(this.isBubbleUniform, 1);
|
|
789
|
+
this.gl.uniform1i(this.isCircleUniform, 1);
|
|
790
|
+
this.gl.uniform1i(this.bubbleSizeAreaUniform, (series.options.sizeBy !== 'width'));
|
|
791
|
+
this.gl.uniform1i(this.bubbleSizeAbsUniform, series.options
|
|
792
|
+
.sizeByAbsoluteValue);
|
|
793
|
+
this.setUniform('bubbleMinSize', pxSizes.minPxSize * pixelRatio);
|
|
794
|
+
this.setUniform('bubbleMaxSize', pxSizes.maxPxSize * pixelRatio);
|
|
795
|
+
this.setUniform('bubbleZMin', zMin);
|
|
796
|
+
this.setUniform('bubbleZMax', zMax);
|
|
797
|
+
this.setUniform('bubbleZThreshold', series.options.zThreshold);
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* Set the Color uniform.
|
|
802
|
+
* @private
|
|
803
|
+
* @param {Array<number>} color
|
|
804
|
+
* Array with RGBA values.
|
|
805
|
+
*/
|
|
806
|
+
setColor(color) {
|
|
807
|
+
if (this.gl && this.shaderProgram) {
|
|
808
|
+
this.gl.uniform4f(this.fcUniform, color[0] / 255.0, color[1] / 255.0, color[2] / 255.0, color[3]);
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
/**
|
|
812
|
+
* Enable/disable circle drawing
|
|
813
|
+
* @private
|
|
814
|
+
*/
|
|
815
|
+
setDrawAsCircle(flag) {
|
|
816
|
+
if (this.gl && this.shaderProgram) {
|
|
817
|
+
this.gl.uniform1i(this.isCircleUniform, flag ? 1 : 0);
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
/**
|
|
821
|
+
* Set if inversion state
|
|
822
|
+
* @private
|
|
823
|
+
* @param {number} flag
|
|
824
|
+
* Inversion flag
|
|
825
|
+
*/
|
|
826
|
+
setInverted(flag) {
|
|
827
|
+
if (this.gl && this.shaderProgram) {
|
|
828
|
+
this.gl.uniform1i(this.isInverted, flag);
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
/**
|
|
832
|
+
* Set the perspective matrix
|
|
833
|
+
* @private
|
|
834
|
+
* @param {Float32List} m
|
|
835
|
+
* Matrix 4 x 4
|
|
836
|
+
*/
|
|
837
|
+
setPMatrix(m) {
|
|
838
|
+
if (this.gl && this.shaderProgram) {
|
|
839
|
+
this.gl.uniformMatrix4fv(this.pUniform, false, m);
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
/**
|
|
843
|
+
* Set the point size.
|
|
844
|
+
* @private
|
|
845
|
+
* @param {number} p
|
|
846
|
+
* Point size
|
|
847
|
+
*/
|
|
848
|
+
setPointSize(p) {
|
|
849
|
+
if (this.gl && this.shaderProgram) {
|
|
850
|
+
this.gl.uniform1f(this.psUniform, p);
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
/**
|
|
854
|
+
* Set skip translation
|
|
855
|
+
* @private
|
|
856
|
+
*/
|
|
857
|
+
setSkipTranslation(flag) {
|
|
858
|
+
if (this.gl && this.shaderProgram) {
|
|
859
|
+
this.gl.uniform1i(this.skipTranslationUniform, flag === true ? 1 : 0);
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
/**
|
|
863
|
+
* Set the active texture
|
|
864
|
+
* @private
|
|
865
|
+
* @param {number} texture
|
|
866
|
+
* Texture to activate
|
|
867
|
+
*/
|
|
868
|
+
setTexture(texture) {
|
|
869
|
+
if (this.gl && this.shaderProgram) {
|
|
870
|
+
this.gl.uniform1i(this.uSamplerUniform, texture);
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
/**
|
|
874
|
+
* Set a uniform value.
|
|
875
|
+
* This uses a hash map to cache uniform locations.
|
|
876
|
+
* @private
|
|
877
|
+
* @param {string} name
|
|
878
|
+
* Name of the uniform to set.
|
|
879
|
+
* @param {number} val
|
|
880
|
+
* Value to set
|
|
881
|
+
*/
|
|
882
|
+
setUniform(name, val) {
|
|
883
|
+
if (this.gl && this.shaderProgram) {
|
|
884
|
+
const u = this.uLocations[name] = (this.uLocations[name] ||
|
|
885
|
+
this.gl.getUniformLocation(this.shaderProgram, name));
|
|
886
|
+
this.gl.uniform1f(u, val);
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
/* *
|
|
891
|
+
*
|
|
892
|
+
* Default Export
|
|
893
|
+
*
|
|
894
|
+
* */
|
|
895
|
+
/* harmony default export */ const Boost_WGLShader = (WGLShader);
|
|
896
|
+
|
|
897
|
+
;// ./code/es-modules/Extensions/Boost/WGLVertexBuffer.js
|
|
898
|
+
/* *
|
|
899
|
+
*
|
|
900
|
+
* (c) 2019-2025 Highsoft AS
|
|
901
|
+
*
|
|
902
|
+
* Boost module: stripped-down renderer for higher performance
|
|
903
|
+
*
|
|
904
|
+
* License: highcharts.com/license
|
|
905
|
+
*
|
|
906
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
907
|
+
*
|
|
908
|
+
* */
|
|
909
|
+
|
|
910
|
+
/* *
|
|
911
|
+
*
|
|
912
|
+
* Class
|
|
913
|
+
*
|
|
914
|
+
* */
|
|
915
|
+
/**
|
|
916
|
+
* Vertex Buffer abstraction.
|
|
917
|
+
* A vertex buffer is a set of vertices which are passed to the GPU
|
|
918
|
+
* in a single call.
|
|
919
|
+
*
|
|
920
|
+
* @private
|
|
921
|
+
* @class
|
|
922
|
+
* @name WGLVertexBuffer
|
|
923
|
+
*
|
|
924
|
+
* @param {WebGLContext} gl
|
|
925
|
+
* Context in which to create the buffer.
|
|
926
|
+
* @param {WGLShader} shader
|
|
927
|
+
* Shader to use.
|
|
928
|
+
*/
|
|
929
|
+
class WGLVertexBuffer {
|
|
930
|
+
/* *
|
|
931
|
+
*
|
|
932
|
+
* Constructor
|
|
933
|
+
*
|
|
934
|
+
* */
|
|
935
|
+
constructor(gl, shader, dataComponents
|
|
936
|
+
/* , type */
|
|
937
|
+
) {
|
|
938
|
+
/* *
|
|
939
|
+
*
|
|
940
|
+
* Properties
|
|
941
|
+
*
|
|
942
|
+
* */
|
|
943
|
+
this.buffer = false;
|
|
944
|
+
this.iterator = 0;
|
|
945
|
+
this.preAllocated = false;
|
|
946
|
+
this.vertAttribute = false;
|
|
947
|
+
this.components = dataComponents || 2;
|
|
948
|
+
this.dataComponents = dataComponents;
|
|
949
|
+
this.gl = gl;
|
|
950
|
+
this.shader = shader;
|
|
951
|
+
}
|
|
952
|
+
/* *
|
|
953
|
+
*
|
|
954
|
+
* Functions
|
|
955
|
+
*
|
|
956
|
+
* */
|
|
957
|
+
/**
|
|
958
|
+
* Note about pre-allocated buffers:
|
|
959
|
+
* - This is slower for charts with many series
|
|
960
|
+
* @private
|
|
961
|
+
*/
|
|
962
|
+
allocate(size) {
|
|
963
|
+
this.iterator = -1;
|
|
964
|
+
this.preAllocated = new Float32Array(size * 4);
|
|
965
|
+
}
|
|
966
|
+
/**
|
|
967
|
+
* Bind the buffer
|
|
968
|
+
* @private
|
|
969
|
+
*/
|
|
970
|
+
bind() {
|
|
971
|
+
if (!this.buffer) {
|
|
972
|
+
return false;
|
|
973
|
+
}
|
|
974
|
+
/// gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');
|
|
975
|
+
// gl.enableVertexAttribArray(vertAttribute);
|
|
976
|
+
// gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
977
|
+
this.gl.vertexAttribPointer(this.vertAttribute, this.components, this.gl.FLOAT, false, 0, 0);
|
|
978
|
+
/// gl.enableVertexAttribArray(vertAttribute);
|
|
979
|
+
}
|
|
980
|
+
/**
|
|
981
|
+
* Build the buffer
|
|
982
|
+
* @private
|
|
983
|
+
* @param {Array<number>} dataIn
|
|
984
|
+
* Zero padded array of indices
|
|
985
|
+
* @param {string} attrib
|
|
986
|
+
* Name of the Attribute to bind the buffer to
|
|
987
|
+
* @param {number} dataComponents
|
|
988
|
+
* Number of components per. indice
|
|
989
|
+
*/
|
|
990
|
+
build(dataIn, attrib, dataComponents) {
|
|
991
|
+
let farray;
|
|
992
|
+
this.data = dataIn || [];
|
|
993
|
+
if ((!this.data || this.data.length === 0) && !this.preAllocated) {
|
|
994
|
+
/// console.error('trying to render empty vbuffer');
|
|
995
|
+
this.destroy();
|
|
996
|
+
return false;
|
|
997
|
+
}
|
|
998
|
+
this.components = dataComponents || this.components;
|
|
999
|
+
if (this.buffer) {
|
|
1000
|
+
this.gl.deleteBuffer(this.buffer);
|
|
1001
|
+
}
|
|
1002
|
+
if (!this.preAllocated) {
|
|
1003
|
+
farray = new Float32Array(this.data);
|
|
1004
|
+
}
|
|
1005
|
+
this.buffer = this.gl.createBuffer();
|
|
1006
|
+
this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.buffer);
|
|
1007
|
+
this.gl.bufferData(this.gl.ARRAY_BUFFER, this.preAllocated || farray, this.gl.STATIC_DRAW);
|
|
1008
|
+
/// gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');
|
|
1009
|
+
this.vertAttribute = this.gl
|
|
1010
|
+
.getAttribLocation(this.shader.getProgram(), attrib);
|
|
1011
|
+
this.gl.enableVertexAttribArray(this.vertAttribute);
|
|
1012
|
+
// Trigger cleanup
|
|
1013
|
+
farray = false;
|
|
1014
|
+
return true;
|
|
1015
|
+
}
|
|
1016
|
+
/**
|
|
1017
|
+
* @private
|
|
1018
|
+
*/
|
|
1019
|
+
destroy() {
|
|
1020
|
+
if (this.buffer) {
|
|
1021
|
+
this.gl.deleteBuffer(this.buffer);
|
|
1022
|
+
this.buffer = false;
|
|
1023
|
+
this.vertAttribute = false;
|
|
1024
|
+
}
|
|
1025
|
+
this.iterator = 0;
|
|
1026
|
+
this.components = this.dataComponents || 2;
|
|
1027
|
+
this.data = [];
|
|
1028
|
+
}
|
|
1029
|
+
/**
|
|
1030
|
+
* Adds data to the pre-allocated buffer.
|
|
1031
|
+
* @private
|
|
1032
|
+
* @param {number} x
|
|
1033
|
+
* X data
|
|
1034
|
+
* @param {number} y
|
|
1035
|
+
* Y data
|
|
1036
|
+
* @param {number} a
|
|
1037
|
+
* A data
|
|
1038
|
+
* @param {number} b
|
|
1039
|
+
* B data
|
|
1040
|
+
*/
|
|
1041
|
+
push(x, y, a, b) {
|
|
1042
|
+
if (this.preAllocated) { // && iterator <= preAllocated.length - 4) {
|
|
1043
|
+
this.preAllocated[++this.iterator] = x;
|
|
1044
|
+
this.preAllocated[++this.iterator] = y;
|
|
1045
|
+
this.preAllocated[++this.iterator] = a;
|
|
1046
|
+
this.preAllocated[++this.iterator] = b;
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
/**
|
|
1050
|
+
* Render the buffer
|
|
1051
|
+
*
|
|
1052
|
+
* @private
|
|
1053
|
+
* @param {number} from
|
|
1054
|
+
* Start indice.
|
|
1055
|
+
* @param {number} to
|
|
1056
|
+
* End indice.
|
|
1057
|
+
* @param {WGLDrawModeValue} drawMode
|
|
1058
|
+
* Draw mode.
|
|
1059
|
+
*/
|
|
1060
|
+
render(from, to, drawMode) {
|
|
1061
|
+
const length = this.preAllocated ?
|
|
1062
|
+
this.preAllocated.length : this.data.length;
|
|
1063
|
+
if (!this.buffer) {
|
|
1064
|
+
return false;
|
|
1065
|
+
}
|
|
1066
|
+
if (!length) {
|
|
1067
|
+
return false;
|
|
1068
|
+
}
|
|
1069
|
+
if (!from || from > length || from < 0) {
|
|
1070
|
+
from = 0;
|
|
1071
|
+
}
|
|
1072
|
+
if (!to || to > length) {
|
|
1073
|
+
to = length;
|
|
1074
|
+
}
|
|
1075
|
+
if (from >= to) {
|
|
1076
|
+
return false;
|
|
1077
|
+
}
|
|
1078
|
+
drawMode = drawMode || 'POINTS';
|
|
1079
|
+
this.gl.drawArrays(this.gl[drawMode], from / this.components, (to - from) / this.components);
|
|
1080
|
+
return true;
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
/* *
|
|
1084
|
+
*
|
|
1085
|
+
* Default Export
|
|
1086
|
+
*
|
|
1087
|
+
* */
|
|
1088
|
+
/* harmony default export */ const Boost_WGLVertexBuffer = (WGLVertexBuffer);
|
|
1089
|
+
|
|
1090
|
+
;// ./code/es-modules/Extensions/Boost/WGLRenderer.js
|
|
1091
|
+
/* *
|
|
1092
|
+
*
|
|
1093
|
+
* (c) 2019-2025 Highsoft AS
|
|
1094
|
+
*
|
|
1095
|
+
* Boost module: stripped-down renderer for higher performance
|
|
1096
|
+
*
|
|
1097
|
+
* License: highcharts.com/license
|
|
1098
|
+
*
|
|
1099
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
1100
|
+
*
|
|
1101
|
+
* */
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
const { parse: color } = (external_highcharts_src_js_default_Color_default());
|
|
1105
|
+
|
|
1106
|
+
const { doc, win } = (external_highcharts_src_js_default_default());
|
|
1107
|
+
|
|
1108
|
+
const { isNumber, isObject, merge, objectEach, pick: WGLRenderer_pick } = (external_highcharts_src_js_default_default());
|
|
1109
|
+
|
|
1110
|
+
|
|
1111
|
+
|
|
1112
|
+
/* *
|
|
1113
|
+
*
|
|
1114
|
+
* Constants
|
|
1115
|
+
*
|
|
1116
|
+
* */
|
|
1117
|
+
// Things to draw as "rectangles" (i.e lines)
|
|
1118
|
+
const asBar = {
|
|
1119
|
+
'column': true,
|
|
1120
|
+
'columnrange': true,
|
|
1121
|
+
'bar': true,
|
|
1122
|
+
'area': true,
|
|
1123
|
+
'areaspline': true,
|
|
1124
|
+
'arearange': true
|
|
1125
|
+
};
|
|
1126
|
+
const asCircle = {
|
|
1127
|
+
'scatter': true,
|
|
1128
|
+
'bubble': true
|
|
1129
|
+
};
|
|
1130
|
+
const contexts = [
|
|
1131
|
+
'webgl',
|
|
1132
|
+
'experimental-webgl',
|
|
1133
|
+
'moz-webgl',
|
|
1134
|
+
'webkit-3d'
|
|
1135
|
+
];
|
|
1136
|
+
/* *
|
|
1137
|
+
*
|
|
1138
|
+
* Class
|
|
1139
|
+
*
|
|
1140
|
+
* */
|
|
1141
|
+
/* eslint-disable valid-jsdoc */
|
|
1142
|
+
/**
|
|
1143
|
+
* Main renderer. Used to render series.
|
|
1144
|
+
*
|
|
1145
|
+
* Notes to self:
|
|
1146
|
+
* - May be able to build a point map by rendering to a separate canvas and
|
|
1147
|
+
* encoding values in the color data.
|
|
1148
|
+
* - Need to figure out a way to transform the data quicker
|
|
1149
|
+
*
|
|
1150
|
+
* @private
|
|
1151
|
+
*
|
|
1152
|
+
* @param {Function} postRenderCallback
|
|
1153
|
+
*/
|
|
1154
|
+
class WGLRenderer {
|
|
1155
|
+
/* *
|
|
1156
|
+
*
|
|
1157
|
+
* Static Functions
|
|
1158
|
+
*
|
|
1159
|
+
* */
|
|
1160
|
+
/**
|
|
1161
|
+
* Returns an orthographic perspective matrix
|
|
1162
|
+
* @private
|
|
1163
|
+
* @param {number} width
|
|
1164
|
+
* the width of the viewport in pixels
|
|
1165
|
+
* @param {number} height
|
|
1166
|
+
* the height of the viewport in pixels
|
|
1167
|
+
*/
|
|
1168
|
+
static orthoMatrix(width, height) {
|
|
1169
|
+
const near = 0, far = 1;
|
|
1170
|
+
return [
|
|
1171
|
+
2 / width, 0, 0, 0,
|
|
1172
|
+
0, -(2 / height), 0, 0,
|
|
1173
|
+
0, 0, -2 / (far - near), 0,
|
|
1174
|
+
-1, 1, -(far + near) / (far - near), 1
|
|
1175
|
+
];
|
|
1176
|
+
}
|
|
1177
|
+
/**
|
|
1178
|
+
* @private
|
|
1179
|
+
*/
|
|
1180
|
+
static seriesPointCount(series) {
|
|
1181
|
+
let isStacked, xData, s;
|
|
1182
|
+
if (series.boosted) {
|
|
1183
|
+
isStacked = !!series.options.stacking;
|
|
1184
|
+
xData = ((series.getColumn('x').length ?
|
|
1185
|
+
series.getColumn('x') :
|
|
1186
|
+
void 0) ||
|
|
1187
|
+
series.options.xData ||
|
|
1188
|
+
series.getColumn('x', true));
|
|
1189
|
+
s = (isStacked ? series.data : (xData || series.options.data))
|
|
1190
|
+
.length;
|
|
1191
|
+
if (series.type === 'treemap') {
|
|
1192
|
+
s *= 12;
|
|
1193
|
+
}
|
|
1194
|
+
else if (series.type === 'heatmap') {
|
|
1195
|
+
s *= 6;
|
|
1196
|
+
}
|
|
1197
|
+
else if (asBar[series.type]) {
|
|
1198
|
+
s *= 2;
|
|
1199
|
+
}
|
|
1200
|
+
return s;
|
|
1201
|
+
}
|
|
1202
|
+
return 0;
|
|
1203
|
+
}
|
|
1204
|
+
/* *
|
|
1205
|
+
*
|
|
1206
|
+
* Constructor
|
|
1207
|
+
*
|
|
1208
|
+
* */
|
|
1209
|
+
constructor(postRenderCallback) {
|
|
1210
|
+
/**
|
|
1211
|
+
* The data to render - array of coordinates.
|
|
1212
|
+
* Repeating sequence of [x, y, checkThreshold, pointSize].
|
|
1213
|
+
*/
|
|
1214
|
+
this.data = [];
|
|
1215
|
+
// Height of our viewport in pixels
|
|
1216
|
+
this.height = 0;
|
|
1217
|
+
// Is it inited?
|
|
1218
|
+
this.isInited = false;
|
|
1219
|
+
// The marker data
|
|
1220
|
+
this.markerData = [];
|
|
1221
|
+
// The series stack
|
|
1222
|
+
this.series = [];
|
|
1223
|
+
// Texture handles
|
|
1224
|
+
this.textureHandles = {};
|
|
1225
|
+
// Width of our viewport in pixels
|
|
1226
|
+
this.width = 0;
|
|
1227
|
+
this.postRenderCallback = postRenderCallback;
|
|
1228
|
+
this.settings = {
|
|
1229
|
+
pointSize: 1,
|
|
1230
|
+
lineWidth: 1,
|
|
1231
|
+
fillColor: '#AA00AA',
|
|
1232
|
+
useAlpha: true,
|
|
1233
|
+
usePreallocated: false,
|
|
1234
|
+
useGPUTranslations: false,
|
|
1235
|
+
debug: {
|
|
1236
|
+
timeRendering: false,
|
|
1237
|
+
timeSeriesProcessing: false,
|
|
1238
|
+
timeSetup: false,
|
|
1239
|
+
timeBufferCopy: false,
|
|
1240
|
+
timeKDTree: false,
|
|
1241
|
+
showSkipSummary: false
|
|
1242
|
+
}
|
|
1243
|
+
};
|
|
1244
|
+
}
|
|
1245
|
+
/* *
|
|
1246
|
+
*
|
|
1247
|
+
* Functions
|
|
1248
|
+
*
|
|
1249
|
+
* */
|
|
1250
|
+
/**
|
|
1251
|
+
* @private
|
|
1252
|
+
*/
|
|
1253
|
+
getPixelRatio() {
|
|
1254
|
+
return this.settings.pixelRatio || win.devicePixelRatio || 1;
|
|
1255
|
+
}
|
|
1256
|
+
/**
|
|
1257
|
+
* @private
|
|
1258
|
+
*/
|
|
1259
|
+
setOptions(options) {
|
|
1260
|
+
// The pixelRatio defaults to 1. This is an antipattern, we should
|
|
1261
|
+
// refactor the Boost options to include an object of default options as
|
|
1262
|
+
// base for the merge, like other components.
|
|
1263
|
+
if (!('pixelRatio' in options)) {
|
|
1264
|
+
options.pixelRatio = 1;
|
|
1265
|
+
}
|
|
1266
|
+
merge(true, this.settings, options);
|
|
1267
|
+
}
|
|
1268
|
+
/**
|
|
1269
|
+
* Allocate a float buffer to fit all series
|
|
1270
|
+
* @private
|
|
1271
|
+
*/
|
|
1272
|
+
allocateBuffer(chart) {
|
|
1273
|
+
const vbuffer = this.vbuffer;
|
|
1274
|
+
let s = 0;
|
|
1275
|
+
if (!this.settings.usePreallocated) {
|
|
1276
|
+
return;
|
|
1277
|
+
}
|
|
1278
|
+
chart.series.forEach((series) => {
|
|
1279
|
+
if (series.boosted) {
|
|
1280
|
+
s += WGLRenderer.seriesPointCount(series);
|
|
1281
|
+
}
|
|
1282
|
+
});
|
|
1283
|
+
vbuffer && vbuffer.allocate(s);
|
|
1284
|
+
}
|
|
1285
|
+
/**
|
|
1286
|
+
* @private
|
|
1287
|
+
*/
|
|
1288
|
+
allocateBufferForSingleSeries(series) {
|
|
1289
|
+
const vbuffer = this.vbuffer;
|
|
1290
|
+
let s = 0;
|
|
1291
|
+
if (!this.settings.usePreallocated) {
|
|
1292
|
+
return;
|
|
1293
|
+
}
|
|
1294
|
+
if (series.boosted) {
|
|
1295
|
+
s = WGLRenderer.seriesPointCount(series);
|
|
1296
|
+
}
|
|
1297
|
+
vbuffer && vbuffer.allocate(s);
|
|
1298
|
+
}
|
|
1299
|
+
/**
|
|
1300
|
+
* Clear the depth and color buffer
|
|
1301
|
+
* @private
|
|
1302
|
+
*/
|
|
1303
|
+
clear() {
|
|
1304
|
+
const gl = this.gl;
|
|
1305
|
+
gl && gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
1306
|
+
}
|
|
1307
|
+
/**
|
|
1308
|
+
* Push data for a single series
|
|
1309
|
+
* This calculates additional vertices and transforms the data to be
|
|
1310
|
+
* aligned correctly in memory
|
|
1311
|
+
* @private
|
|
1312
|
+
*/
|
|
1313
|
+
pushSeriesData(series, inst) {
|
|
1314
|
+
const data = this.data, settings = this.settings, vbuffer = this.vbuffer, isRange = (series.pointArrayMap &&
|
|
1315
|
+
series.pointArrayMap.join(',') === 'low,high'), { chart, options, sorted, xAxis, yAxis } = series, isStacked = !!options.stacking, rawData = options.data, xExtremes = series.xAxis.getExtremes(),
|
|
1316
|
+
// Taking into account the offset of the min point #19497
|
|
1317
|
+
xMin = xExtremes.min - (series.xAxis.minPointOffset || 0), xMax = xExtremes.max + (series.xAxis.minPointOffset || 0), yExtremes = series.yAxis.getExtremes(), yMin = yExtremes.min - (series.yAxis.minPointOffset || 0), yMax = yExtremes.max + (series.yAxis.minPointOffset || 0), xData = (series.getColumn('x').length ? series.getColumn('x') : void 0) || options.xData || series.getColumn('x', true), yData = (series.getColumn('y').length ? series.getColumn('y') : void 0) || options.yData || series.getColumn('y', true), zData = (series.getColumn('z').length ? series.getColumn('z') : void 0) || options.zData || series.getColumn('z', true), useRaw = !xData || xData.length === 0,
|
|
1318
|
+
/// threshold = options.threshold,
|
|
1319
|
+
// yBottom = chart.yAxis[0].getThreshold(threshold),
|
|
1320
|
+
// hasThreshold = isNumber(threshold),
|
|
1321
|
+
// colorByPoint = series.options.colorByPoint,
|
|
1322
|
+
// This is required for color by point, so make sure this is
|
|
1323
|
+
// uncommented if enabling that
|
|
1324
|
+
// colorIndex = 0,
|
|
1325
|
+
// Required for color axis support
|
|
1326
|
+
// caxis,
|
|
1327
|
+
connectNulls = options.connectNulls,
|
|
1328
|
+
// For some reason eslint/TypeScript don't pick up that this is
|
|
1329
|
+
// actually used: --- bre1470: it is never read, just set
|
|
1330
|
+
// maxVal: (number|undefined), // eslint-disable-line no-unused-vars
|
|
1331
|
+
points = series.points || false, sdata = isStacked ? series.data : (xData || rawData), closestLeft = { x: Number.MAX_VALUE, y: 0 }, closestRight = { x: -Number.MAX_VALUE, y: 0 }, cullXThreshold = 1, cullYThreshold = 1, chartDestroyed = typeof chart.index === 'undefined', drawAsBar = asBar[series.type], zoneAxis = options.zoneAxis || 'y', zones = options.zones || false, threshold = options.threshold, pixelRatio = this.getPixelRatio();
|
|
1332
|
+
let plotWidth = series.chart.plotWidth, lastX = false, lastY = false, minVal, scolor,
|
|
1333
|
+
//
|
|
1334
|
+
skipped = 0, hadPoints = false,
|
|
1335
|
+
// The following are used in the builder while loop
|
|
1336
|
+
x, y, d, z, i = -1, px = false, nx = false, low, nextInside = false, prevInside = false, pcolor = false, isXInside = false, isYInside = true, firstPoint = true, zoneColors, zoneDefColor = false, gapSize = false, vlen = 0;
|
|
1337
|
+
if (options.boostData && options.boostData.length > 0) {
|
|
1338
|
+
return;
|
|
1339
|
+
}
|
|
1340
|
+
if (options.gapSize) {
|
|
1341
|
+
gapSize = options.gapUnit !== 'value' ?
|
|
1342
|
+
options.gapSize * series.closestPointRange :
|
|
1343
|
+
options.gapSize;
|
|
1344
|
+
}
|
|
1345
|
+
if (zones) {
|
|
1346
|
+
zoneColors = [];
|
|
1347
|
+
zones.forEach((zone, i) => {
|
|
1348
|
+
if (zone.color) {
|
|
1349
|
+
const zoneColor = color(zone.color).rgba;
|
|
1350
|
+
zoneColor[0] /= 255.0;
|
|
1351
|
+
zoneColor[1] /= 255.0;
|
|
1352
|
+
zoneColor[2] /= 255.0;
|
|
1353
|
+
zoneColors[i] = zoneColor;
|
|
1354
|
+
if (!zoneDefColor && typeof zone.value === 'undefined') {
|
|
1355
|
+
zoneDefColor = zoneColor;
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
});
|
|
1359
|
+
if (!zoneDefColor) {
|
|
1360
|
+
const seriesColor = ((series.pointAttribs && series.pointAttribs().fill) ||
|
|
1361
|
+
series.color);
|
|
1362
|
+
zoneDefColor = color(seriesColor).rgba;
|
|
1363
|
+
zoneDefColor[0] /= 255.0;
|
|
1364
|
+
zoneDefColor[1] /= 255.0;
|
|
1365
|
+
zoneDefColor[2] /= 255.0;
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
if (chart.inverted) {
|
|
1369
|
+
plotWidth = series.chart.plotHeight;
|
|
1370
|
+
}
|
|
1371
|
+
series.closestPointRangePx = Number.MAX_VALUE;
|
|
1372
|
+
/**
|
|
1373
|
+
* Push color to color buffer - need to do this per vertex.
|
|
1374
|
+
* @private
|
|
1375
|
+
*/
|
|
1376
|
+
const pushColor = (color) => {
|
|
1377
|
+
if (color) {
|
|
1378
|
+
inst.colorData.push(color[0]);
|
|
1379
|
+
inst.colorData.push(color[1]);
|
|
1380
|
+
inst.colorData.push(color[2]);
|
|
1381
|
+
inst.colorData.push(color[3]);
|
|
1382
|
+
}
|
|
1383
|
+
};
|
|
1384
|
+
/**
|
|
1385
|
+
* Push a vertice to the data buffer.
|
|
1386
|
+
* @private
|
|
1387
|
+
*/
|
|
1388
|
+
const vertice = (x, y, checkTreshold, pointSize = 1, color) => {
|
|
1389
|
+
pushColor(color);
|
|
1390
|
+
// Correct for pixel ratio
|
|
1391
|
+
if (pixelRatio !== 1 && (!settings.useGPUTranslations ||
|
|
1392
|
+
inst.skipTranslation)) {
|
|
1393
|
+
x *= pixelRatio;
|
|
1394
|
+
y *= pixelRatio;
|
|
1395
|
+
pointSize *= pixelRatio;
|
|
1396
|
+
}
|
|
1397
|
+
if (settings.usePreallocated && vbuffer) {
|
|
1398
|
+
vbuffer.push(x, y, checkTreshold ? 1 : 0, pointSize);
|
|
1399
|
+
vlen += 4;
|
|
1400
|
+
}
|
|
1401
|
+
else {
|
|
1402
|
+
data.push(x);
|
|
1403
|
+
data.push(y);
|
|
1404
|
+
data.push(checkTreshold ? pixelRatio : 0);
|
|
1405
|
+
data.push(pointSize);
|
|
1406
|
+
}
|
|
1407
|
+
};
|
|
1408
|
+
/**
|
|
1409
|
+
* @private
|
|
1410
|
+
*/
|
|
1411
|
+
const closeSegment = () => {
|
|
1412
|
+
if (inst.segments.length) {
|
|
1413
|
+
inst.segments[inst.segments.length - 1].to = data.length || vlen;
|
|
1414
|
+
}
|
|
1415
|
+
};
|
|
1416
|
+
/**
|
|
1417
|
+
* Create a new segment for the current set.
|
|
1418
|
+
* @private
|
|
1419
|
+
*/
|
|
1420
|
+
const beginSegment = () => {
|
|
1421
|
+
// Insert a segment on the series.
|
|
1422
|
+
// A segment is just a start indice.
|
|
1423
|
+
// When adding a segment, if one exists from before, it should
|
|
1424
|
+
// set the previous segment's end
|
|
1425
|
+
if (inst.segments.length &&
|
|
1426
|
+
inst.segments[inst.segments.length - 1].from === (data.length || vlen)) {
|
|
1427
|
+
return;
|
|
1428
|
+
}
|
|
1429
|
+
closeSegment();
|
|
1430
|
+
inst.segments.push({
|
|
1431
|
+
from: data.length || vlen
|
|
1432
|
+
});
|
|
1433
|
+
};
|
|
1434
|
+
/**
|
|
1435
|
+
* Push a rectangle to the data buffer.
|
|
1436
|
+
* @private
|
|
1437
|
+
*/
|
|
1438
|
+
const pushRect = (x, y, w, h, color) => {
|
|
1439
|
+
pushColor(color);
|
|
1440
|
+
vertice(x + w, y);
|
|
1441
|
+
pushColor(color);
|
|
1442
|
+
vertice(x, y);
|
|
1443
|
+
pushColor(color);
|
|
1444
|
+
vertice(x, y + h);
|
|
1445
|
+
pushColor(color);
|
|
1446
|
+
vertice(x, y + h);
|
|
1447
|
+
pushColor(color);
|
|
1448
|
+
vertice(x + w, y + h);
|
|
1449
|
+
pushColor(color);
|
|
1450
|
+
vertice(x + w, y);
|
|
1451
|
+
};
|
|
1452
|
+
// Create the first segment
|
|
1453
|
+
beginSegment();
|
|
1454
|
+
// Special case for point shapes
|
|
1455
|
+
if (points && points.length > 0) {
|
|
1456
|
+
// If we're doing points, we assume that the points are already
|
|
1457
|
+
// translated, so we skip the shader translation.
|
|
1458
|
+
inst.skipTranslation = true;
|
|
1459
|
+
// Force triangle draw mode
|
|
1460
|
+
inst.drawMode = 'TRIANGLES';
|
|
1461
|
+
// We don't have a z component in the shader, so we need to sort.
|
|
1462
|
+
if (points[0].node && points[0].node.levelDynamic) {
|
|
1463
|
+
points.sort((a, b) => {
|
|
1464
|
+
if (a.node) {
|
|
1465
|
+
if (a.node.levelDynamic >
|
|
1466
|
+
b.node.levelDynamic) {
|
|
1467
|
+
return 1;
|
|
1468
|
+
}
|
|
1469
|
+
if (a.node.levelDynamic <
|
|
1470
|
+
b.node.levelDynamic) {
|
|
1471
|
+
return -1;
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1474
|
+
return 0;
|
|
1475
|
+
});
|
|
1476
|
+
}
|
|
1477
|
+
points.forEach((point) => {
|
|
1478
|
+
const plotY = point.plotY;
|
|
1479
|
+
let swidth, pointAttr;
|
|
1480
|
+
if (typeof plotY !== 'undefined' &&
|
|
1481
|
+
!isNaN(plotY) &&
|
|
1482
|
+
point.y !== null &&
|
|
1483
|
+
point.shapeArgs) {
|
|
1484
|
+
let { x = 0, y = 0, width = 0, height = 0 } = point.shapeArgs;
|
|
1485
|
+
pointAttr = chart.styledMode ?
|
|
1486
|
+
point.series
|
|
1487
|
+
.colorAttribs(point) :
|
|
1488
|
+
pointAttr = point.series.pointAttribs(point);
|
|
1489
|
+
swidth = pointAttr['stroke-width'] || 0;
|
|
1490
|
+
// Handle point colors
|
|
1491
|
+
pcolor = color(pointAttr.fill).rgba;
|
|
1492
|
+
pcolor[0] /= 255.0;
|
|
1493
|
+
pcolor[1] /= 255.0;
|
|
1494
|
+
pcolor[2] /= 255.0;
|
|
1495
|
+
// So there are two ways of doing this. Either we can
|
|
1496
|
+
// create a rectangle of two triangles, or we can do a
|
|
1497
|
+
// point and use point size. Latter is faster, but
|
|
1498
|
+
// only supports squares. So we're doing triangles.
|
|
1499
|
+
// We could also use one color per. vertice to get
|
|
1500
|
+
// better color interpolation.
|
|
1501
|
+
// If there's stroking, we do an additional rect
|
|
1502
|
+
if (series.is('treemap')) {
|
|
1503
|
+
swidth = swidth || 1;
|
|
1504
|
+
scolor = color(pointAttr.stroke).rgba;
|
|
1505
|
+
scolor[0] /= 255.0;
|
|
1506
|
+
scolor[1] /= 255.0;
|
|
1507
|
+
scolor[2] /= 255.0;
|
|
1508
|
+
pushRect(x, y, width, height, scolor);
|
|
1509
|
+
swidth /= 2;
|
|
1510
|
+
}
|
|
1511
|
+
// } else {
|
|
1512
|
+
// swidth = 0;
|
|
1513
|
+
// }
|
|
1514
|
+
// Fixes issues with inverted heatmaps (see #6981). The root
|
|
1515
|
+
// cause is that the coordinate system is flipped. In other
|
|
1516
|
+
// words, instead of [0,0] being top-left, it's
|
|
1517
|
+
// bottom-right. This causes a vertical and horizontal flip
|
|
1518
|
+
// in the resulting image, making it rotated 180 degrees.
|
|
1519
|
+
if (series.is('heatmap') && chart.inverted) {
|
|
1520
|
+
x = xAxis.len - x;
|
|
1521
|
+
y = yAxis.len - y;
|
|
1522
|
+
width = -width;
|
|
1523
|
+
height = -height;
|
|
1524
|
+
}
|
|
1525
|
+
pushRect(x + swidth, y + swidth, width - (swidth * 2), height - (swidth * 2), pcolor);
|
|
1526
|
+
}
|
|
1527
|
+
});
|
|
1528
|
+
closeSegment();
|
|
1529
|
+
return;
|
|
1530
|
+
}
|
|
1531
|
+
// Extract color axis
|
|
1532
|
+
// (chart.axes || []).forEach((a): void => {
|
|
1533
|
+
// if (H.ColorAxis && a instanceof H.ColorAxis) {
|
|
1534
|
+
// caxis = a;
|
|
1535
|
+
// }
|
|
1536
|
+
// });
|
|
1537
|
+
while (i < sdata.length - 1) {
|
|
1538
|
+
d = sdata[++i];
|
|
1539
|
+
if (typeof d === 'undefined') {
|
|
1540
|
+
continue;
|
|
1541
|
+
}
|
|
1542
|
+
/// px = x = y = z = nx = low = false;
|
|
1543
|
+
// chartDestroyed = typeof chart.index === 'undefined';
|
|
1544
|
+
// nextInside = prevInside = pcolor = isXInside = isYInside = false;
|
|
1545
|
+
// drawAsBar = asBar[series.type];
|
|
1546
|
+
if (chartDestroyed) {
|
|
1547
|
+
break;
|
|
1548
|
+
}
|
|
1549
|
+
// Uncomment this to enable color by point.
|
|
1550
|
+
// This currently left disabled as the charts look really ugly
|
|
1551
|
+
// when enabled and there's a lot of points.
|
|
1552
|
+
// Leaving in for the future (tm).
|
|
1553
|
+
// if (colorByPoint) {
|
|
1554
|
+
// colorIndex = ++colorIndex %
|
|
1555
|
+
// series.chart.options.colors.length;
|
|
1556
|
+
// pcolor = toRGBAFast(series.chart.options.colors[colorIndex]);
|
|
1557
|
+
// pcolor[0] /= 255.0;
|
|
1558
|
+
// pcolor[1] /= 255.0;
|
|
1559
|
+
// pcolor[2] /= 255.0;
|
|
1560
|
+
// }
|
|
1561
|
+
// Handle the point.color option (#5999)
|
|
1562
|
+
const pointOptions = rawData && rawData[i];
|
|
1563
|
+
if (!useRaw && isObject(pointOptions, true)) {
|
|
1564
|
+
if (pointOptions.color) {
|
|
1565
|
+
pcolor = color(pointOptions.color).rgba;
|
|
1566
|
+
pcolor[0] /= 255.0;
|
|
1567
|
+
pcolor[1] /= 255.0;
|
|
1568
|
+
pcolor[2] /= 255.0;
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
if (useRaw) {
|
|
1572
|
+
x = d[0];
|
|
1573
|
+
y = d[1];
|
|
1574
|
+
if (sdata[i + 1]) {
|
|
1575
|
+
nx = sdata[i + 1][0];
|
|
1576
|
+
}
|
|
1577
|
+
if (sdata[i - 1]) {
|
|
1578
|
+
px = sdata[i - 1][0];
|
|
1579
|
+
}
|
|
1580
|
+
if (d.length >= 3) {
|
|
1581
|
+
z = d[2];
|
|
1582
|
+
if (d[2] > inst.zMax) {
|
|
1583
|
+
inst.zMax = d[2];
|
|
1584
|
+
}
|
|
1585
|
+
if (d[2] < inst.zMin) {
|
|
1586
|
+
inst.zMin = d[2];
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
else {
|
|
1591
|
+
x = d;
|
|
1592
|
+
y = yData?.[i];
|
|
1593
|
+
if (sdata[i + 1]) {
|
|
1594
|
+
nx = sdata[i + 1];
|
|
1595
|
+
}
|
|
1596
|
+
if (sdata[i - 1]) {
|
|
1597
|
+
px = sdata[i - 1];
|
|
1598
|
+
}
|
|
1599
|
+
if (zData && zData.length) {
|
|
1600
|
+
z = zData[i];
|
|
1601
|
+
if (zData[i] > inst.zMax) {
|
|
1602
|
+
inst.zMax = zData[i];
|
|
1603
|
+
}
|
|
1604
|
+
if (zData[i] < inst.zMin) {
|
|
1605
|
+
inst.zMin = zData[i];
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
if (!connectNulls && (x === null || y === null)) {
|
|
1610
|
+
beginSegment();
|
|
1611
|
+
continue;
|
|
1612
|
+
}
|
|
1613
|
+
if (nx && nx >= xMin && nx <= xMax) {
|
|
1614
|
+
nextInside = true;
|
|
1615
|
+
}
|
|
1616
|
+
if (px && px >= xMin && px <= xMax) {
|
|
1617
|
+
prevInside = true;
|
|
1618
|
+
}
|
|
1619
|
+
if (isRange) {
|
|
1620
|
+
if (useRaw) {
|
|
1621
|
+
y = d.slice(1, 3);
|
|
1622
|
+
}
|
|
1623
|
+
low = series.getColumn('low', true)?.[i];
|
|
1624
|
+
y = series.getColumn('high', true)?.[i] || 0;
|
|
1625
|
+
}
|
|
1626
|
+
else if (isStacked) {
|
|
1627
|
+
x = d.x;
|
|
1628
|
+
y = d.stackY;
|
|
1629
|
+
low = y - d.y;
|
|
1630
|
+
}
|
|
1631
|
+
if (yMin !== null &&
|
|
1632
|
+
typeof yMin !== 'undefined' &&
|
|
1633
|
+
yMax !== null &&
|
|
1634
|
+
typeof yMax !== 'undefined') {
|
|
1635
|
+
isYInside = y >= yMin && y <= yMax;
|
|
1636
|
+
}
|
|
1637
|
+
// Do not render points outside the zoomed range (#19701)
|
|
1638
|
+
if (!sorted && !isYInside) {
|
|
1639
|
+
continue;
|
|
1640
|
+
}
|
|
1641
|
+
if (x > xMax && closestRight.x < xMax) {
|
|
1642
|
+
closestRight.x = x;
|
|
1643
|
+
closestRight.y = y;
|
|
1644
|
+
}
|
|
1645
|
+
if (x < xMin && closestLeft.x > xMin) {
|
|
1646
|
+
closestLeft.x = x;
|
|
1647
|
+
closestLeft.y = y;
|
|
1648
|
+
}
|
|
1649
|
+
if (y === null && connectNulls) {
|
|
1650
|
+
continue;
|
|
1651
|
+
}
|
|
1652
|
+
// Cull points outside the extremes
|
|
1653
|
+
// Continue if `sdata` has only one point as `nextInside` asserts
|
|
1654
|
+
// whether the next point exists and will thus be false. (#22194)
|
|
1655
|
+
if (y === null || (!isYInside && sdata.length > 1 &&
|
|
1656
|
+
!nextInside && !prevInside)) {
|
|
1657
|
+
beginSegment();
|
|
1658
|
+
continue;
|
|
1659
|
+
}
|
|
1660
|
+
// The first point before and first after extremes should be
|
|
1661
|
+
// rendered (#9962, 19701)
|
|
1662
|
+
// Make sure series with a single point are rendered (#21897)
|
|
1663
|
+
if (sorted && ((nx >= xMin || x >= xMin) &&
|
|
1664
|
+
(px <= xMax || x <= xMax)) ||
|
|
1665
|
+
!sorted && ((x >= xMin) && (x <= xMax))) {
|
|
1666
|
+
isXInside = true;
|
|
1667
|
+
}
|
|
1668
|
+
if (!isXInside && !nextInside && !prevInside) {
|
|
1669
|
+
continue;
|
|
1670
|
+
}
|
|
1671
|
+
if (gapSize && x - px > gapSize) {
|
|
1672
|
+
beginSegment();
|
|
1673
|
+
}
|
|
1674
|
+
// Note: Boost requires that zones are sorted!
|
|
1675
|
+
if (zones) {
|
|
1676
|
+
let zoneColor;
|
|
1677
|
+
zones.some((// eslint-disable-line no-loop-func
|
|
1678
|
+
zone, i) => {
|
|
1679
|
+
const last = zones[i - 1];
|
|
1680
|
+
if (zoneAxis === 'x') {
|
|
1681
|
+
if (typeof zone.value !== 'undefined' &&
|
|
1682
|
+
x <= zone.value) {
|
|
1683
|
+
if (zoneColors[i] &&
|
|
1684
|
+
(!last || x >= last.value)) {
|
|
1685
|
+
zoneColor = zoneColors[i];
|
|
1686
|
+
}
|
|
1687
|
+
return true;
|
|
1688
|
+
}
|
|
1689
|
+
return false;
|
|
1690
|
+
}
|
|
1691
|
+
if (typeof zone.value !== 'undefined' && y <= zone.value) {
|
|
1692
|
+
if (zoneColors[i] &&
|
|
1693
|
+
(!last || y >= last.value)) {
|
|
1694
|
+
zoneColor = zoneColors[i];
|
|
1695
|
+
}
|
|
1696
|
+
return true;
|
|
1697
|
+
}
|
|
1698
|
+
return false;
|
|
1699
|
+
});
|
|
1700
|
+
pcolor = zoneColor || zoneDefColor || pcolor;
|
|
1701
|
+
}
|
|
1702
|
+
// Skip translations - temporary floating point fix
|
|
1703
|
+
if (!settings.useGPUTranslations) {
|
|
1704
|
+
inst.skipTranslation = true;
|
|
1705
|
+
x = xAxis.toPixels(x, true);
|
|
1706
|
+
y = yAxis.toPixels(y, true);
|
|
1707
|
+
// Make sure we're not drawing outside of the chart area.
|
|
1708
|
+
// See #6594. Update: this is no longer required as far as I
|
|
1709
|
+
// can tell. Leaving in for git blame in case there are edge
|
|
1710
|
+
// cases I've not found. Having this in breaks #10246.
|
|
1711
|
+
// if (y > plotHeight) {
|
|
1712
|
+
// y = plotHeight;
|
|
1713
|
+
// }
|
|
1714
|
+
if (x > plotWidth) {
|
|
1715
|
+
// If this is rendered as a point, just skip drawing it
|
|
1716
|
+
// entirely, as we're not dependant on lineTo'ing to it.
|
|
1717
|
+
// See #8197
|
|
1718
|
+
if (inst.drawMode === 'POINTS') {
|
|
1719
|
+
continue;
|
|
1720
|
+
}
|
|
1721
|
+
// Having this here will clamp markers and make the angle
|
|
1722
|
+
// of the last line wrong. See 9166.
|
|
1723
|
+
// x = plotWidth;
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
// No markers on out of bounds things.
|
|
1727
|
+
// Out of bound things are shown if and only if the next
|
|
1728
|
+
// or previous point is inside the rect.
|
|
1729
|
+
if (inst.hasMarkers && isXInside) {
|
|
1730
|
+
/// x = Highcharts.correctFloat(
|
|
1731
|
+
// Math.min(Math.max(-1e5, xAxis.translate(
|
|
1732
|
+
// x,
|
|
1733
|
+
// 0,
|
|
1734
|
+
// 0,
|
|
1735
|
+
// 0,
|
|
1736
|
+
// 1,
|
|
1737
|
+
// 0.5,
|
|
1738
|
+
// false
|
|
1739
|
+
// )), 1e5)
|
|
1740
|
+
// );
|
|
1741
|
+
if (lastX !== false) {
|
|
1742
|
+
series.closestPointRangePx = Math.min(series.closestPointRangePx, Math.abs(x - lastX));
|
|
1743
|
+
}
|
|
1744
|
+
}
|
|
1745
|
+
// If the last _drawn_ point is closer to this point than the
|
|
1746
|
+
// threshold, skip it. Shaves off 20-100ms in processing.
|
|
1747
|
+
if (!settings.useGPUTranslations &&
|
|
1748
|
+
!settings.usePreallocated &&
|
|
1749
|
+
(lastX && Math.abs(x - lastX) < cullXThreshold) &&
|
|
1750
|
+
(lastY && Math.abs(y - lastY) < cullYThreshold)) {
|
|
1751
|
+
if (settings.debug.showSkipSummary) {
|
|
1752
|
+
++skipped;
|
|
1753
|
+
}
|
|
1754
|
+
continue;
|
|
1755
|
+
}
|
|
1756
|
+
if (drawAsBar) {
|
|
1757
|
+
minVal = low || 0;
|
|
1758
|
+
if (low === false || typeof low === 'undefined') {
|
|
1759
|
+
if (y < 0) {
|
|
1760
|
+
minVal = y;
|
|
1761
|
+
}
|
|
1762
|
+
else {
|
|
1763
|
+
minVal = 0;
|
|
1764
|
+
}
|
|
1765
|
+
}
|
|
1766
|
+
if ((!isRange && !isStacked) ||
|
|
1767
|
+
yAxis.logarithmic // #16850
|
|
1768
|
+
) {
|
|
1769
|
+
minVal = Math.max(threshold === null ? yMin : threshold, // #5268
|
|
1770
|
+
yMin); // #8731
|
|
1771
|
+
}
|
|
1772
|
+
if (!settings.useGPUTranslations) {
|
|
1773
|
+
minVal = yAxis.toPixels(minVal, true);
|
|
1774
|
+
}
|
|
1775
|
+
// Need to add an extra point here
|
|
1776
|
+
vertice(x, minVal, 0, 0, pcolor);
|
|
1777
|
+
}
|
|
1778
|
+
// Do step line if enabled.
|
|
1779
|
+
// Draws an additional point at the old Y at the new X.
|
|
1780
|
+
// See #6976.
|
|
1781
|
+
if (options.step && !firstPoint) {
|
|
1782
|
+
vertice(x, lastY, 0, 2, pcolor);
|
|
1783
|
+
}
|
|
1784
|
+
vertice(x, y, 0, series.type === 'bubble' ? (z || 1) : 2, pcolor);
|
|
1785
|
+
// Uncomment this to support color axis.
|
|
1786
|
+
// if (caxis) {
|
|
1787
|
+
// pcolor = color(caxis.toColor(y)).rgba;
|
|
1788
|
+
// inst.colorData.push(color[0] / 255.0);
|
|
1789
|
+
// inst.colorData.push(color[1] / 255.0);
|
|
1790
|
+
// inst.colorData.push(color[2] / 255.0);
|
|
1791
|
+
// inst.colorData.push(color[3]);
|
|
1792
|
+
// }
|
|
1793
|
+
lastX = x;
|
|
1794
|
+
lastY = y;
|
|
1795
|
+
hadPoints = true;
|
|
1796
|
+
firstPoint = false;
|
|
1797
|
+
}
|
|
1798
|
+
if (settings.debug.showSkipSummary) {
|
|
1799
|
+
console.log('skipped points:', skipped); // eslint-disable-line no-console
|
|
1800
|
+
}
|
|
1801
|
+
const pushSupplementPoint = (point, atStart) => {
|
|
1802
|
+
if (!settings.useGPUTranslations) {
|
|
1803
|
+
inst.skipTranslation = true;
|
|
1804
|
+
point.x = xAxis.toPixels(point.x, true);
|
|
1805
|
+
point.y = yAxis.toPixels(point.y, true);
|
|
1806
|
+
}
|
|
1807
|
+
// We should only do this for lines, and we should ignore markers
|
|
1808
|
+
// since there's no point here that would have a marker.
|
|
1809
|
+
if (atStart) {
|
|
1810
|
+
this.data = [point.x, point.y, 0, 2].concat(this.data);
|
|
1811
|
+
return;
|
|
1812
|
+
}
|
|
1813
|
+
vertice(point.x, point.y, 0, 2);
|
|
1814
|
+
};
|
|
1815
|
+
if (!hadPoints &&
|
|
1816
|
+
connectNulls !== false &&
|
|
1817
|
+
series.drawMode === 'line_strip') {
|
|
1818
|
+
if (closestLeft.x < Number.MAX_VALUE) {
|
|
1819
|
+
// We actually need to push this *before* the complete buffer.
|
|
1820
|
+
pushSupplementPoint(closestLeft, true);
|
|
1821
|
+
}
|
|
1822
|
+
if (closestRight.x > -Number.MAX_VALUE) {
|
|
1823
|
+
pushSupplementPoint(closestRight);
|
|
1824
|
+
}
|
|
1825
|
+
}
|
|
1826
|
+
closeSegment();
|
|
1827
|
+
}
|
|
1828
|
+
/**
|
|
1829
|
+
* Push a series to the renderer
|
|
1830
|
+
* If we render the series immediately, we don't have to loop later
|
|
1831
|
+
* @private
|
|
1832
|
+
* @param {Highchart.Series} s
|
|
1833
|
+
* The series to push.
|
|
1834
|
+
*/
|
|
1835
|
+
pushSeries(s) {
|
|
1836
|
+
const markerData = this.markerData, series = this.series, settings = this.settings;
|
|
1837
|
+
if (series.length > 0) {
|
|
1838
|
+
if (series[series.length - 1].hasMarkers) {
|
|
1839
|
+
series[series.length - 1].markerTo = markerData.length;
|
|
1840
|
+
}
|
|
1841
|
+
}
|
|
1842
|
+
if (settings.debug.timeSeriesProcessing) {
|
|
1843
|
+
console.time('building ' + s.type + ' series'); // eslint-disable-line no-console
|
|
1844
|
+
}
|
|
1845
|
+
const obj = {
|
|
1846
|
+
segments: [],
|
|
1847
|
+
markerFrom: markerData.length,
|
|
1848
|
+
// Push RGBA values to this array to use per. point coloring.
|
|
1849
|
+
// It should be 0-padded, so each component should be pushed in
|
|
1850
|
+
// succession.
|
|
1851
|
+
colorData: [],
|
|
1852
|
+
series: s,
|
|
1853
|
+
zMin: Number.MAX_VALUE,
|
|
1854
|
+
zMax: -Number.MAX_VALUE,
|
|
1855
|
+
hasMarkers: s.options.marker ?
|
|
1856
|
+
s.options.marker.enabled !== false :
|
|
1857
|
+
false,
|
|
1858
|
+
showMarkers: true,
|
|
1859
|
+
drawMode: Boost_WGLDrawMode[s.type] || 'LINE_STRIP'
|
|
1860
|
+
};
|
|
1861
|
+
if (s.index >= series.length) {
|
|
1862
|
+
series.push(obj);
|
|
1863
|
+
}
|
|
1864
|
+
else {
|
|
1865
|
+
series[s.index] = obj;
|
|
1866
|
+
}
|
|
1867
|
+
// Add the series data to our buffer(s)
|
|
1868
|
+
this.pushSeriesData(s, obj);
|
|
1869
|
+
if (settings.debug.timeSeriesProcessing) {
|
|
1870
|
+
console.timeEnd('building ' + s.type + ' series'); // eslint-disable-line no-console
|
|
1871
|
+
}
|
|
1872
|
+
}
|
|
1873
|
+
/**
|
|
1874
|
+
* Flush the renderer.
|
|
1875
|
+
* This removes pushed series and vertices.
|
|
1876
|
+
* Should be called after clearing and before rendering
|
|
1877
|
+
* @private
|
|
1878
|
+
*/
|
|
1879
|
+
flush() {
|
|
1880
|
+
const vbuffer = this.vbuffer;
|
|
1881
|
+
this.data = [];
|
|
1882
|
+
this.markerData = [];
|
|
1883
|
+
this.series = [];
|
|
1884
|
+
if (vbuffer) {
|
|
1885
|
+
vbuffer.destroy();
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1888
|
+
/**
|
|
1889
|
+
* Pass x-axis to shader
|
|
1890
|
+
* @private
|
|
1891
|
+
* @param {Highcharts.Axis} axis
|
|
1892
|
+
* The x-axis.
|
|
1893
|
+
*/
|
|
1894
|
+
setXAxis(axis) {
|
|
1895
|
+
const shader = this.shader;
|
|
1896
|
+
if (!shader) {
|
|
1897
|
+
return;
|
|
1898
|
+
}
|
|
1899
|
+
const pixelRatio = this.getPixelRatio();
|
|
1900
|
+
shader.setUniform('xAxisTrans', axis.transA * pixelRatio);
|
|
1901
|
+
shader.setUniform('xAxisMin', axis.min);
|
|
1902
|
+
shader.setUniform('xAxisMinPad', axis.minPixelPadding * pixelRatio);
|
|
1903
|
+
shader.setUniform('xAxisPointRange', axis.pointRange);
|
|
1904
|
+
shader.setUniform('xAxisLen', axis.len * pixelRatio);
|
|
1905
|
+
shader.setUniform('xAxisPos', axis.pos * pixelRatio);
|
|
1906
|
+
shader.setUniform('xAxisCVSCoord', (!axis.horiz));
|
|
1907
|
+
shader.setUniform('xAxisIsLog', (!!axis.logarithmic));
|
|
1908
|
+
shader.setUniform('xAxisReversed', (!!axis.reversed));
|
|
1909
|
+
}
|
|
1910
|
+
/**
|
|
1911
|
+
* Pass y-axis to shader
|
|
1912
|
+
* @private
|
|
1913
|
+
* @param {Highcharts.Axis} axis
|
|
1914
|
+
* The y-axis.
|
|
1915
|
+
*/
|
|
1916
|
+
setYAxis(axis) {
|
|
1917
|
+
const shader = this.shader;
|
|
1918
|
+
if (!shader) {
|
|
1919
|
+
return;
|
|
1920
|
+
}
|
|
1921
|
+
const pixelRatio = this.getPixelRatio();
|
|
1922
|
+
shader.setUniform('yAxisTrans', axis.transA * pixelRatio);
|
|
1923
|
+
shader.setUniform('yAxisMin', axis.min);
|
|
1924
|
+
shader.setUniform('yAxisMinPad', axis.minPixelPadding * pixelRatio);
|
|
1925
|
+
shader.setUniform('yAxisPointRange', axis.pointRange);
|
|
1926
|
+
shader.setUniform('yAxisLen', axis.len * pixelRatio);
|
|
1927
|
+
shader.setUniform('yAxisPos', axis.pos * pixelRatio);
|
|
1928
|
+
shader.setUniform('yAxisCVSCoord', (!axis.horiz));
|
|
1929
|
+
shader.setUniform('yAxisIsLog', (!!axis.logarithmic));
|
|
1930
|
+
shader.setUniform('yAxisReversed', (!!axis.reversed));
|
|
1931
|
+
}
|
|
1932
|
+
/**
|
|
1933
|
+
* Set the translation threshold
|
|
1934
|
+
* @private
|
|
1935
|
+
* @param {boolean} has
|
|
1936
|
+
* Has threshold flag.
|
|
1937
|
+
* @param {numbe} translation
|
|
1938
|
+
* The threshold.
|
|
1939
|
+
*/
|
|
1940
|
+
setThreshold(has, translation) {
|
|
1941
|
+
const shader = this.shader;
|
|
1942
|
+
if (!shader) {
|
|
1943
|
+
return;
|
|
1944
|
+
}
|
|
1945
|
+
shader.setUniform('hasThreshold', has);
|
|
1946
|
+
shader.setUniform('translatedThreshold', translation);
|
|
1947
|
+
}
|
|
1948
|
+
/**
|
|
1949
|
+
* Render the data
|
|
1950
|
+
* This renders all pushed series.
|
|
1951
|
+
* @private
|
|
1952
|
+
*/
|
|
1953
|
+
renderChart(chart) {
|
|
1954
|
+
const gl = this.gl, settings = this.settings, shader = this.shader, vbuffer = this.vbuffer;
|
|
1955
|
+
const pixelRatio = this.getPixelRatio();
|
|
1956
|
+
if (chart) {
|
|
1957
|
+
this.width = chart.chartWidth * pixelRatio;
|
|
1958
|
+
this.height = chart.chartHeight * pixelRatio;
|
|
1959
|
+
}
|
|
1960
|
+
else {
|
|
1961
|
+
return false;
|
|
1962
|
+
}
|
|
1963
|
+
const height = this.height, width = this.width;
|
|
1964
|
+
if (!gl || !shader || !width || !height) {
|
|
1965
|
+
return false;
|
|
1966
|
+
}
|
|
1967
|
+
if (settings.debug.timeRendering) {
|
|
1968
|
+
console.time('gl rendering'); // eslint-disable-line no-console
|
|
1969
|
+
}
|
|
1970
|
+
gl.canvas.width = width;
|
|
1971
|
+
gl.canvas.height = height;
|
|
1972
|
+
shader.bind();
|
|
1973
|
+
gl.viewport(0, 0, width, height);
|
|
1974
|
+
shader.setPMatrix(WGLRenderer.orthoMatrix(width, height));
|
|
1975
|
+
if (settings.lineWidth > 1 && !(external_highcharts_src_js_default_default()).isMS) {
|
|
1976
|
+
gl.lineWidth(settings.lineWidth);
|
|
1977
|
+
}
|
|
1978
|
+
if (vbuffer) {
|
|
1979
|
+
vbuffer.build(this.data, 'aVertexPosition', 4);
|
|
1980
|
+
vbuffer.bind();
|
|
1981
|
+
}
|
|
1982
|
+
shader.setInverted(chart.inverted);
|
|
1983
|
+
// Render the series
|
|
1984
|
+
this.series.forEach((s, si) => {
|
|
1985
|
+
const options = s.series.options, shapeOptions = options.marker, lineWidth = (typeof options.lineWidth !== 'undefined' ?
|
|
1986
|
+
options.lineWidth :
|
|
1987
|
+
1), threshold = options.threshold, hasThreshold = isNumber(threshold), yBottom = s.series.yAxis.getThreshold(threshold), translatedThreshold = yBottom, showMarkers = WGLRenderer_pick(options.marker ? options.marker.enabled : null, s.series.xAxis.isRadial ? true : null, s.series.closestPointRangePx >
|
|
1988
|
+
2 * ((options.marker ?
|
|
1989
|
+
options.marker.radius :
|
|
1990
|
+
10) || 10)), shapeTexture = this.textureHandles[(shapeOptions && shapeOptions.symbol) ||
|
|
1991
|
+
s.series.symbol] || this.textureHandles.circle;
|
|
1992
|
+
let sindex, cbuffer, fillColor, scolor = [];
|
|
1993
|
+
if (s.segments.length === 0 ||
|
|
1994
|
+
s.segments[0].from === s.segments[0].to) {
|
|
1995
|
+
return;
|
|
1996
|
+
}
|
|
1997
|
+
if (shapeTexture.isReady) {
|
|
1998
|
+
gl.bindTexture(gl.TEXTURE_2D, shapeTexture.handle);
|
|
1999
|
+
shader.setTexture(shapeTexture.handle);
|
|
2000
|
+
}
|
|
2001
|
+
if (chart.styledMode) {
|
|
2002
|
+
if (s.series.markerGroup === s.series.chart.boost?.markerGroup) {
|
|
2003
|
+
// Create a temporary markerGroup to get the fill color
|
|
2004
|
+
delete s.series.markerGroup;
|
|
2005
|
+
s.series.markerGroup = s.series.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');
|
|
2006
|
+
fillColor = s.series.markerGroup.getStyle('fill');
|
|
2007
|
+
s.series.markerGroup.destroy();
|
|
2008
|
+
s.series.markerGroup = s.series.chart.boost?.markerGroup;
|
|
2009
|
+
}
|
|
2010
|
+
else {
|
|
2011
|
+
fillColor = s.series.markerGroup?.getStyle('fill');
|
|
2012
|
+
}
|
|
2013
|
+
}
|
|
2014
|
+
else {
|
|
2015
|
+
fillColor =
|
|
2016
|
+
(s.drawMode === 'POINTS' && // #14260
|
|
2017
|
+
s.series.pointAttribs &&
|
|
2018
|
+
s.series.pointAttribs().fill) ||
|
|
2019
|
+
s.series.color;
|
|
2020
|
+
if (options.colorByPoint) {
|
|
2021
|
+
fillColor = s.series.chart.options.colors[si];
|
|
2022
|
+
}
|
|
2023
|
+
}
|
|
2024
|
+
if (s.series.fillOpacity && options.fillOpacity) {
|
|
2025
|
+
fillColor = new (external_highcharts_src_js_default_Color_default())(fillColor).setOpacity(WGLRenderer_pick(options.fillOpacity, 1.0)).get();
|
|
2026
|
+
}
|
|
2027
|
+
scolor = color(fillColor).rgba;
|
|
2028
|
+
if (!settings.useAlpha) {
|
|
2029
|
+
scolor[3] = 1.0;
|
|
2030
|
+
}
|
|
2031
|
+
// Blending
|
|
2032
|
+
if (options.boostBlending === 'add') {
|
|
2033
|
+
gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
|
|
2034
|
+
gl.blendEquation(gl.FUNC_ADD);
|
|
2035
|
+
}
|
|
2036
|
+
else if (options.boostBlending === 'mult' ||
|
|
2037
|
+
options.boostBlending === 'multiply') {
|
|
2038
|
+
gl.blendFunc(gl.DST_COLOR, gl.ZERO);
|
|
2039
|
+
}
|
|
2040
|
+
else if (options.boostBlending === 'darken') {
|
|
2041
|
+
gl.blendFunc(gl.ONE, gl.ONE);
|
|
2042
|
+
gl.blendEquation(gl.FUNC_MIN);
|
|
2043
|
+
}
|
|
2044
|
+
else {
|
|
2045
|
+
/// gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
2046
|
+
// gl.blendEquation(gl.FUNC_ADD);
|
|
2047
|
+
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
2048
|
+
}
|
|
2049
|
+
shader.reset();
|
|
2050
|
+
// If there are entries in the colorData buffer, build and bind it.
|
|
2051
|
+
if (s.colorData.length > 0) {
|
|
2052
|
+
shader.setUniform('hasColor', 1);
|
|
2053
|
+
cbuffer = new Boost_WGLVertexBuffer(gl, shader);
|
|
2054
|
+
cbuffer.build(
|
|
2055
|
+
// The color array attribute for vertex is assigned from 0,
|
|
2056
|
+
// so it needs to be shifted to be applied to further
|
|
2057
|
+
// segments. #18858
|
|
2058
|
+
Array(s.segments[0].from).concat(s.colorData), 'aColor', 4);
|
|
2059
|
+
cbuffer.bind();
|
|
2060
|
+
}
|
|
2061
|
+
else {
|
|
2062
|
+
// Set the hasColor uniform to false (0) when the series
|
|
2063
|
+
// contains no colorData buffer points. #18858
|
|
2064
|
+
shader.setUniform('hasColor', 0);
|
|
2065
|
+
// #15869, a buffer with fewer points might already be bound by
|
|
2066
|
+
// a different series/chart causing out of range errors
|
|
2067
|
+
gl.disableVertexAttribArray(gl.getAttribLocation(shader.getProgram(), 'aColor'));
|
|
2068
|
+
}
|
|
2069
|
+
// Set series specific uniforms
|
|
2070
|
+
shader.setColor(scolor);
|
|
2071
|
+
this.setXAxis(s.series.xAxis);
|
|
2072
|
+
this.setYAxis(s.series.yAxis);
|
|
2073
|
+
this.setThreshold(hasThreshold, translatedThreshold);
|
|
2074
|
+
if (s.drawMode === 'POINTS') {
|
|
2075
|
+
shader.setPointSize(WGLRenderer_pick(options.marker && options.marker.radius, 0.5) * 2 * pixelRatio);
|
|
2076
|
+
}
|
|
2077
|
+
// If set to true, the toPixels translations in the shader
|
|
2078
|
+
// is skipped, i.e it's assumed that the value is a pixel coord.
|
|
2079
|
+
shader.setSkipTranslation(s.skipTranslation);
|
|
2080
|
+
if (s.series.type === 'bubble') {
|
|
2081
|
+
shader.setBubbleUniforms(s.series, s.zMin, s.zMax, pixelRatio);
|
|
2082
|
+
}
|
|
2083
|
+
shader.setDrawAsCircle(asCircle[s.series.type] || false);
|
|
2084
|
+
if (!vbuffer) {
|
|
2085
|
+
return;
|
|
2086
|
+
}
|
|
2087
|
+
// Do the actual rendering
|
|
2088
|
+
// If the line width is < 0, skip rendering of the lines. See #7833.
|
|
2089
|
+
if (lineWidth > 0 || s.drawMode !== 'LINE_STRIP') {
|
|
2090
|
+
for (sindex = 0; sindex < s.segments.length; sindex++) {
|
|
2091
|
+
vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, s.drawMode);
|
|
2092
|
+
}
|
|
2093
|
+
}
|
|
2094
|
+
if (s.hasMarkers && showMarkers) {
|
|
2095
|
+
shader.setPointSize(WGLRenderer_pick(options.marker && options.marker.radius, 5) * 2 * pixelRatio);
|
|
2096
|
+
shader.setDrawAsCircle(true);
|
|
2097
|
+
for (sindex = 0; sindex < s.segments.length; sindex++) {
|
|
2098
|
+
vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, 'POINTS');
|
|
2099
|
+
}
|
|
2100
|
+
}
|
|
2101
|
+
});
|
|
2102
|
+
if (settings.debug.timeRendering) {
|
|
2103
|
+
console.timeEnd('gl rendering'); // eslint-disable-line no-console
|
|
2104
|
+
}
|
|
2105
|
+
if (this.postRenderCallback) {
|
|
2106
|
+
this.postRenderCallback(this);
|
|
2107
|
+
}
|
|
2108
|
+
this.flush();
|
|
2109
|
+
}
|
|
2110
|
+
/**
|
|
2111
|
+
* Render the data when ready
|
|
2112
|
+
* @private
|
|
2113
|
+
*/
|
|
2114
|
+
render(chart) {
|
|
2115
|
+
this.clear();
|
|
2116
|
+
if (chart.renderer.forExport) {
|
|
2117
|
+
return this.renderChart(chart);
|
|
2118
|
+
}
|
|
2119
|
+
if (this.isInited) {
|
|
2120
|
+
this.renderChart(chart);
|
|
2121
|
+
}
|
|
2122
|
+
else {
|
|
2123
|
+
setTimeout(() => {
|
|
2124
|
+
this.render(chart);
|
|
2125
|
+
}, 1);
|
|
2126
|
+
}
|
|
2127
|
+
}
|
|
2128
|
+
/**
|
|
2129
|
+
* Set the viewport size in pixels
|
|
2130
|
+
* Creates an orthographic perspective matrix and applies it.
|
|
2131
|
+
* @private
|
|
2132
|
+
*/
|
|
2133
|
+
setSize(width, height) {
|
|
2134
|
+
const shader = this.shader;
|
|
2135
|
+
// Skip if there's no change, or if we have no valid shader
|
|
2136
|
+
if (!shader || (this.width === width && this.height === height)) {
|
|
2137
|
+
return;
|
|
2138
|
+
}
|
|
2139
|
+
this.width = width;
|
|
2140
|
+
this.height = height;
|
|
2141
|
+
shader.bind();
|
|
2142
|
+
shader.setPMatrix(WGLRenderer.orthoMatrix(width, height));
|
|
2143
|
+
}
|
|
2144
|
+
/**
|
|
2145
|
+
* Init OpenGL
|
|
2146
|
+
* @private
|
|
2147
|
+
*/
|
|
2148
|
+
init(canvas, noFlush) {
|
|
2149
|
+
const settings = this.settings;
|
|
2150
|
+
this.isInited = false;
|
|
2151
|
+
if (!canvas) {
|
|
2152
|
+
return false;
|
|
2153
|
+
}
|
|
2154
|
+
if (settings.debug.timeSetup) {
|
|
2155
|
+
console.time('gl setup'); // eslint-disable-line no-console
|
|
2156
|
+
}
|
|
2157
|
+
for (let i = 0; i < contexts.length; ++i) {
|
|
2158
|
+
this.gl = canvas.getContext(contexts[i], {
|
|
2159
|
+
// /premultipliedAlpha: false
|
|
2160
|
+
});
|
|
2161
|
+
if (this.gl) {
|
|
2162
|
+
break;
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
const gl = this.gl;
|
|
2166
|
+
if (gl) {
|
|
2167
|
+
if (!noFlush) {
|
|
2168
|
+
this.flush();
|
|
2169
|
+
}
|
|
2170
|
+
}
|
|
2171
|
+
else {
|
|
2172
|
+
return false;
|
|
2173
|
+
}
|
|
2174
|
+
gl.enable(gl.BLEND);
|
|
2175
|
+
/// gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
|
|
2176
|
+
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
2177
|
+
gl.disable(gl.DEPTH_TEST);
|
|
2178
|
+
/// gl.depthMask(gl.FALSE);
|
|
2179
|
+
gl.depthFunc(gl.LESS);
|
|
2180
|
+
const shader = this.shader = new Boost_WGLShader(gl);
|
|
2181
|
+
if (!shader) {
|
|
2182
|
+
// We need to abort, there's no shader context
|
|
2183
|
+
return false;
|
|
2184
|
+
}
|
|
2185
|
+
this.vbuffer = new Boost_WGLVertexBuffer(gl, shader);
|
|
2186
|
+
const createTexture = (name, fn) => {
|
|
2187
|
+
const props = {
|
|
2188
|
+
isReady: false,
|
|
2189
|
+
texture: doc.createElement('canvas'),
|
|
2190
|
+
handle: gl.createTexture()
|
|
2191
|
+
}, ctx = props.texture.getContext('2d');
|
|
2192
|
+
this.textureHandles[name] = props;
|
|
2193
|
+
props.texture.width = 512;
|
|
2194
|
+
props.texture.height = 512;
|
|
2195
|
+
ctx.mozImageSmoothingEnabled = false;
|
|
2196
|
+
ctx.webkitImageSmoothingEnabled = false;
|
|
2197
|
+
ctx.msImageSmoothingEnabled = false;
|
|
2198
|
+
ctx.imageSmoothingEnabled = false;
|
|
2199
|
+
ctx.strokeStyle = 'rgba(255, 255, 255, 0)';
|
|
2200
|
+
ctx.fillStyle = '#FFF';
|
|
2201
|
+
fn(ctx);
|
|
2202
|
+
try {
|
|
2203
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
2204
|
+
gl.bindTexture(gl.TEXTURE_2D, props.handle);
|
|
2205
|
+
/// gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
|
|
2206
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, props.texture);
|
|
2207
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
2208
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
2209
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
2210
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
2211
|
+
/// gl.generateMipmap(gl.TEXTURE_2D);
|
|
2212
|
+
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
2213
|
+
props.isReady = true;
|
|
2214
|
+
}
|
|
2215
|
+
catch (e) {
|
|
2216
|
+
// Silent error
|
|
2217
|
+
}
|
|
2218
|
+
};
|
|
2219
|
+
// Circle shape
|
|
2220
|
+
createTexture('circle', (ctx) => {
|
|
2221
|
+
ctx.beginPath();
|
|
2222
|
+
ctx.arc(256, 256, 256, 0, 2 * Math.PI);
|
|
2223
|
+
ctx.stroke();
|
|
2224
|
+
ctx.fill();
|
|
2225
|
+
});
|
|
2226
|
+
// Square shape
|
|
2227
|
+
createTexture('square', (ctx) => {
|
|
2228
|
+
ctx.fillRect(0, 0, 512, 512);
|
|
2229
|
+
});
|
|
2230
|
+
// Diamond shape
|
|
2231
|
+
createTexture('diamond', (ctx) => {
|
|
2232
|
+
ctx.beginPath();
|
|
2233
|
+
ctx.moveTo(256, 0);
|
|
2234
|
+
ctx.lineTo(512, 256);
|
|
2235
|
+
ctx.lineTo(256, 512);
|
|
2236
|
+
ctx.lineTo(0, 256);
|
|
2237
|
+
ctx.lineTo(256, 0);
|
|
2238
|
+
ctx.fill();
|
|
2239
|
+
});
|
|
2240
|
+
// Triangle shape
|
|
2241
|
+
createTexture('triangle', (ctx) => {
|
|
2242
|
+
ctx.beginPath();
|
|
2243
|
+
ctx.moveTo(0, 512);
|
|
2244
|
+
ctx.lineTo(256, 0);
|
|
2245
|
+
ctx.lineTo(512, 512);
|
|
2246
|
+
ctx.lineTo(0, 512);
|
|
2247
|
+
ctx.fill();
|
|
2248
|
+
});
|
|
2249
|
+
// Triangle shape (rotated)
|
|
2250
|
+
createTexture('triangle-down', (ctx) => {
|
|
2251
|
+
ctx.beginPath();
|
|
2252
|
+
ctx.moveTo(0, 0);
|
|
2253
|
+
ctx.lineTo(256, 512);
|
|
2254
|
+
ctx.lineTo(512, 0);
|
|
2255
|
+
ctx.lineTo(0, 0);
|
|
2256
|
+
ctx.fill();
|
|
2257
|
+
});
|
|
2258
|
+
this.isInited = true;
|
|
2259
|
+
if (settings.debug.timeSetup) {
|
|
2260
|
+
console.timeEnd('gl setup'); // eslint-disable-line no-console
|
|
2261
|
+
}
|
|
2262
|
+
return true;
|
|
2263
|
+
}
|
|
2264
|
+
/**
|
|
2265
|
+
* @private
|
|
2266
|
+
* @todo use it
|
|
2267
|
+
*/
|
|
2268
|
+
destroy() {
|
|
2269
|
+
const gl = this.gl, shader = this.shader, vbuffer = this.vbuffer;
|
|
2270
|
+
this.flush();
|
|
2271
|
+
if (vbuffer) {
|
|
2272
|
+
vbuffer.destroy();
|
|
2273
|
+
}
|
|
2274
|
+
if (shader) {
|
|
2275
|
+
shader.destroy();
|
|
2276
|
+
}
|
|
2277
|
+
if (gl) {
|
|
2278
|
+
objectEach(this.textureHandles, (texture) => {
|
|
2279
|
+
if (texture.handle) {
|
|
2280
|
+
gl.deleteTexture(texture.handle);
|
|
2281
|
+
}
|
|
2282
|
+
});
|
|
2283
|
+
gl.canvas.width = 1;
|
|
2284
|
+
gl.canvas.height = 1;
|
|
2285
|
+
}
|
|
2286
|
+
}
|
|
2287
|
+
}
|
|
2288
|
+
/* *
|
|
2289
|
+
*
|
|
2290
|
+
* Default Export
|
|
2291
|
+
*
|
|
2292
|
+
* */
|
|
2293
|
+
/* harmony default export */ const Boost_WGLRenderer = (WGLRenderer);
|
|
2294
|
+
|
|
2295
|
+
;// ./code/es-modules/Data/ColumnUtils.js
|
|
2296
|
+
/* *
|
|
2297
|
+
*
|
|
2298
|
+
* (c) 2020-2025 Highsoft AS
|
|
2299
|
+
*
|
|
2300
|
+
* License: www.highcharts.com/license
|
|
2301
|
+
*
|
|
2302
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
2303
|
+
*
|
|
2304
|
+
* Authors:
|
|
2305
|
+
* - Dawid Dragula
|
|
2306
|
+
*
|
|
2307
|
+
* */
|
|
2308
|
+
/**
|
|
2309
|
+
* Utility functions for columns that can be either arrays or typed arrays.
|
|
2310
|
+
* @private
|
|
2311
|
+
*/
|
|
2312
|
+
var ColumnUtils;
|
|
2313
|
+
(function (ColumnUtils) {
|
|
2314
|
+
/* *
|
|
2315
|
+
*
|
|
2316
|
+
* Declarations
|
|
2317
|
+
*
|
|
2318
|
+
* */
|
|
2319
|
+
/* *
|
|
2320
|
+
*
|
|
2321
|
+
* Functions
|
|
2322
|
+
*
|
|
2323
|
+
* */
|
|
2324
|
+
/**
|
|
2325
|
+
* Sets the length of the column array.
|
|
2326
|
+
*
|
|
2327
|
+
* @param {DataTable.Column} column
|
|
2328
|
+
* Column to be modified.
|
|
2329
|
+
*
|
|
2330
|
+
* @param {number} length
|
|
2331
|
+
* New length of the column.
|
|
2332
|
+
*
|
|
2333
|
+
* @param {boolean} asSubarray
|
|
2334
|
+
* If column is a typed array, return a subarray instead of a new array. It
|
|
2335
|
+
* is faster `O(1)`, but the entire buffer will be kept in memory until all
|
|
2336
|
+
* views to it are destroyed. Default is `false`.
|
|
2337
|
+
*
|
|
2338
|
+
* @return {DataTable.Column}
|
|
2339
|
+
* Modified column.
|
|
2340
|
+
*
|
|
2341
|
+
* @private
|
|
2342
|
+
*/
|
|
2343
|
+
function setLength(column, length, asSubarray) {
|
|
2344
|
+
if (Array.isArray(column)) {
|
|
2345
|
+
column.length = length;
|
|
2346
|
+
return column;
|
|
2347
|
+
}
|
|
2348
|
+
return column[asSubarray ? 'subarray' : 'slice'](0, length);
|
|
2349
|
+
}
|
|
2350
|
+
ColumnUtils.setLength = setLength;
|
|
2351
|
+
/**
|
|
2352
|
+
* Splices a column array.
|
|
2353
|
+
*
|
|
2354
|
+
* @param {DataTable.Column} column
|
|
2355
|
+
* Column to be modified.
|
|
2356
|
+
*
|
|
2357
|
+
* @param {number} start
|
|
2358
|
+
* Index at which to start changing the array.
|
|
2359
|
+
*
|
|
2360
|
+
* @param {number} deleteCount
|
|
2361
|
+
* An integer indicating the number of old array elements to remove.
|
|
2362
|
+
*
|
|
2363
|
+
* @param {boolean} removedAsSubarray
|
|
2364
|
+
* If column is a typed array, return a subarray instead of a new array. It
|
|
2365
|
+
* is faster `O(1)`, but the entire buffer will be kept in memory until all
|
|
2366
|
+
* views to it are destroyed. Default is `true`.
|
|
2367
|
+
*
|
|
2368
|
+
* @param {Array<number>|TypedArray} items
|
|
2369
|
+
* The elements to add to the array, beginning at the start index. If you
|
|
2370
|
+
* don't specify any elements, `splice()` will only remove elements from the
|
|
2371
|
+
* array.
|
|
2372
|
+
*
|
|
2373
|
+
* @return {SpliceResult}
|
|
2374
|
+
* Object containing removed elements and the modified column.
|
|
2375
|
+
*
|
|
2376
|
+
* @private
|
|
2377
|
+
*/
|
|
2378
|
+
function splice(column, start, deleteCount, removedAsSubarray, items = []) {
|
|
2379
|
+
if (Array.isArray(column)) {
|
|
2380
|
+
if (!Array.isArray(items)) {
|
|
2381
|
+
items = Array.from(items);
|
|
2382
|
+
}
|
|
2383
|
+
return {
|
|
2384
|
+
removed: column.splice(start, deleteCount, ...items),
|
|
2385
|
+
array: column
|
|
2386
|
+
};
|
|
2387
|
+
}
|
|
2388
|
+
const Constructor = Object.getPrototypeOf(column)
|
|
2389
|
+
.constructor;
|
|
2390
|
+
const removed = column[removedAsSubarray ? 'subarray' : 'slice'](start, start + deleteCount);
|
|
2391
|
+
const newLength = column.length - deleteCount + items.length;
|
|
2392
|
+
const result = new Constructor(newLength);
|
|
2393
|
+
result.set(column.subarray(0, start), 0);
|
|
2394
|
+
result.set(items, start);
|
|
2395
|
+
result.set(column.subarray(start + deleteCount), start + items.length);
|
|
2396
|
+
return {
|
|
2397
|
+
removed: removed,
|
|
2398
|
+
array: result
|
|
2399
|
+
};
|
|
2400
|
+
}
|
|
2401
|
+
ColumnUtils.splice = splice;
|
|
2402
|
+
})(ColumnUtils || (ColumnUtils = {}));
|
|
2403
|
+
/* *
|
|
2404
|
+
*
|
|
2405
|
+
* Default Export
|
|
2406
|
+
*
|
|
2407
|
+
* */
|
|
2408
|
+
/* harmony default export */ const Data_ColumnUtils = (ColumnUtils);
|
|
2409
|
+
|
|
2410
|
+
;// ./code/es-modules/Data/DataTableCore.js
|
|
2411
|
+
/* *
|
|
2412
|
+
*
|
|
2413
|
+
* (c) 2009-2025 Highsoft AS
|
|
2414
|
+
*
|
|
2415
|
+
* License: www.highcharts.com/license
|
|
2416
|
+
*
|
|
2417
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
2418
|
+
*
|
|
2419
|
+
* Authors:
|
|
2420
|
+
* - Sophie Bremer
|
|
2421
|
+
* - Gøran Slettemark
|
|
2422
|
+
* - Torstein Hønsi
|
|
2423
|
+
*
|
|
2424
|
+
* */
|
|
2425
|
+
|
|
2426
|
+
|
|
2427
|
+
const { setLength, splice } = Data_ColumnUtils;
|
|
2428
|
+
|
|
2429
|
+
const { fireEvent, objectEach: DataTableCore_objectEach, uniqueKey } = (external_highcharts_src_js_default_default());
|
|
2430
|
+
/* *
|
|
2431
|
+
*
|
|
2432
|
+
* Class
|
|
2433
|
+
*
|
|
2434
|
+
* */
|
|
2435
|
+
/**
|
|
2436
|
+
* Class to manage columns and rows in a table structure. It provides methods
|
|
2437
|
+
* to add, remove, and manipulate columns and rows, as well as to retrieve data
|
|
2438
|
+
* from specific cells.
|
|
2439
|
+
*
|
|
2440
|
+
* @class
|
|
2441
|
+
* @name Highcharts.DataTable
|
|
2442
|
+
*
|
|
2443
|
+
* @param {Highcharts.DataTableOptions} [options]
|
|
2444
|
+
* Options to initialize the new DataTable instance.
|
|
2445
|
+
*/
|
|
2446
|
+
class DataTableCore {
|
|
2447
|
+
/**
|
|
2448
|
+
* Constructs an instance of the DataTable class.
|
|
2449
|
+
*
|
|
2450
|
+
* @example
|
|
2451
|
+
* const dataTable = new Highcharts.DataTableCore({
|
|
2452
|
+
* columns: {
|
|
2453
|
+
* year: [2020, 2021, 2022, 2023],
|
|
2454
|
+
* cost: [11, 13, 12, 14],
|
|
2455
|
+
* revenue: [12, 15, 14, 18]
|
|
2456
|
+
* }
|
|
2457
|
+
* });
|
|
2458
|
+
|
|
2459
|
+
*
|
|
2460
|
+
* @param {Highcharts.DataTableOptions} [options]
|
|
2461
|
+
* Options to initialize the new DataTable instance.
|
|
2462
|
+
*/
|
|
2463
|
+
constructor(options = {}) {
|
|
2464
|
+
/**
|
|
2465
|
+
* Whether the ID was automatic generated or given in the constructor.
|
|
2466
|
+
*
|
|
2467
|
+
* @name Highcharts.DataTable#autoId
|
|
2468
|
+
* @type {boolean}
|
|
2469
|
+
*/
|
|
2470
|
+
this.autoId = !options.id;
|
|
2471
|
+
this.columns = {};
|
|
2472
|
+
/**
|
|
2473
|
+
* ID of the table for identification purposes.
|
|
2474
|
+
*
|
|
2475
|
+
* @name Highcharts.DataTable#id
|
|
2476
|
+
* @type {string}
|
|
2477
|
+
*/
|
|
2478
|
+
this.id = (options.id || uniqueKey());
|
|
2479
|
+
this.modified = this;
|
|
2480
|
+
this.rowCount = 0;
|
|
2481
|
+
this.versionTag = uniqueKey();
|
|
2482
|
+
let rowCount = 0;
|
|
2483
|
+
DataTableCore_objectEach(options.columns || {}, (column, columnName) => {
|
|
2484
|
+
this.columns[columnName] = column.slice();
|
|
2485
|
+
rowCount = Math.max(rowCount, column.length);
|
|
2486
|
+
});
|
|
2487
|
+
this.applyRowCount(rowCount);
|
|
2488
|
+
}
|
|
2489
|
+
/* *
|
|
2490
|
+
*
|
|
2491
|
+
* Functions
|
|
2492
|
+
*
|
|
2493
|
+
* */
|
|
2494
|
+
/**
|
|
2495
|
+
* Applies a row count to the table by setting the `rowCount` property and
|
|
2496
|
+
* adjusting the length of all columns.
|
|
2497
|
+
*
|
|
2498
|
+
* @private
|
|
2499
|
+
* @param {number} rowCount The new row count.
|
|
2500
|
+
*/
|
|
2501
|
+
applyRowCount(rowCount) {
|
|
2502
|
+
this.rowCount = rowCount;
|
|
2503
|
+
DataTableCore_objectEach(this.columns, (column, columnName) => {
|
|
2504
|
+
if (column.length !== rowCount) {
|
|
2505
|
+
this.columns[columnName] = setLength(column, rowCount);
|
|
2506
|
+
}
|
|
2507
|
+
});
|
|
2508
|
+
}
|
|
2509
|
+
/**
|
|
2510
|
+
* Delete rows. Simplified version of the full
|
|
2511
|
+
* `DataTable.deleteRows` method.
|
|
2512
|
+
*
|
|
2513
|
+
* @param {number} rowIndex
|
|
2514
|
+
* The start row index
|
|
2515
|
+
*
|
|
2516
|
+
* @param {number} [rowCount=1]
|
|
2517
|
+
* The number of rows to delete
|
|
2518
|
+
*
|
|
2519
|
+
* @return {void}
|
|
2520
|
+
*
|
|
2521
|
+
* @emits #afterDeleteRows
|
|
2522
|
+
*/
|
|
2523
|
+
deleteRows(rowIndex, rowCount = 1) {
|
|
2524
|
+
if (rowCount > 0 && rowIndex < this.rowCount) {
|
|
2525
|
+
let length = 0;
|
|
2526
|
+
DataTableCore_objectEach(this.columns, (column, columnName) => {
|
|
2527
|
+
this.columns[columnName] =
|
|
2528
|
+
splice(column, rowIndex, rowCount).array;
|
|
2529
|
+
length = column.length;
|
|
2530
|
+
});
|
|
2531
|
+
this.rowCount = length;
|
|
2532
|
+
}
|
|
2533
|
+
fireEvent(this, 'afterDeleteRows', { rowIndex, rowCount });
|
|
2534
|
+
this.versionTag = uniqueKey();
|
|
2535
|
+
}
|
|
2536
|
+
/**
|
|
2537
|
+
* Fetches the given column by the canonical column name. Simplified version
|
|
2538
|
+
* of the full `DataTable.getRow` method, always returning by reference.
|
|
2539
|
+
*
|
|
2540
|
+
* @param {string} columnName
|
|
2541
|
+
* Name of the column to get.
|
|
2542
|
+
*
|
|
2543
|
+
* @return {Highcharts.DataTableColumn|undefined}
|
|
2544
|
+
* A copy of the column, or `undefined` if not found.
|
|
2545
|
+
*/
|
|
2546
|
+
getColumn(columnName,
|
|
2547
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
2548
|
+
asReference) {
|
|
2549
|
+
return this.columns[columnName];
|
|
2550
|
+
}
|
|
2551
|
+
/**
|
|
2552
|
+
* Retrieves all or the given columns. Simplified version of the full
|
|
2553
|
+
* `DataTable.getColumns` method, always returning by reference.
|
|
2554
|
+
*
|
|
2555
|
+
* @param {Array<string>} [columnNames]
|
|
2556
|
+
* Column names to retrieve.
|
|
2557
|
+
*
|
|
2558
|
+
* @return {Highcharts.DataTableColumnCollection}
|
|
2559
|
+
* Collection of columns. If a requested column was not found, it is
|
|
2560
|
+
* `undefined`.
|
|
2561
|
+
*/
|
|
2562
|
+
getColumns(columnNames,
|
|
2563
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
2564
|
+
asReference) {
|
|
2565
|
+
return (columnNames || Object.keys(this.columns)).reduce((columns, columnName) => {
|
|
2566
|
+
columns[columnName] = this.columns[columnName];
|
|
2567
|
+
return columns;
|
|
2568
|
+
}, {});
|
|
2569
|
+
}
|
|
2570
|
+
/**
|
|
2571
|
+
* Retrieves the row at a given index.
|
|
2572
|
+
*
|
|
2573
|
+
* @param {number} rowIndex
|
|
2574
|
+
* Row index to retrieve. First row has index 0.
|
|
2575
|
+
*
|
|
2576
|
+
* @param {Array<string>} [columnNames]
|
|
2577
|
+
* Column names to retrieve.
|
|
2578
|
+
*
|
|
2579
|
+
* @return {Record<string, number|string|undefined>|undefined}
|
|
2580
|
+
* Returns the row values, or `undefined` if not found.
|
|
2581
|
+
*/
|
|
2582
|
+
getRow(rowIndex, columnNames) {
|
|
2583
|
+
return (columnNames || Object.keys(this.columns)).map((key) => this.columns[key]?.[rowIndex]);
|
|
2584
|
+
}
|
|
2585
|
+
/**
|
|
2586
|
+
* Sets cell values for a column. Will insert a new column, if not found.
|
|
2587
|
+
*
|
|
2588
|
+
* @param {string} columnName
|
|
2589
|
+
* Column name to set.
|
|
2590
|
+
*
|
|
2591
|
+
* @param {Highcharts.DataTableColumn} [column]
|
|
2592
|
+
* Values to set in the column.
|
|
2593
|
+
*
|
|
2594
|
+
* @param {number} [rowIndex]
|
|
2595
|
+
* Index of the first row to change. (Default: 0)
|
|
2596
|
+
*
|
|
2597
|
+
* @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]
|
|
2598
|
+
* Custom information for pending events.
|
|
2599
|
+
*
|
|
2600
|
+
* @emits #setColumns
|
|
2601
|
+
* @emits #afterSetColumns
|
|
2602
|
+
*/
|
|
2603
|
+
setColumn(columnName, column = [], rowIndex = 0, eventDetail) {
|
|
2604
|
+
this.setColumns({ [columnName]: column }, rowIndex, eventDetail);
|
|
2605
|
+
}
|
|
2606
|
+
/**
|
|
2607
|
+
* Sets cell values for multiple columns. Will insert new columns, if not
|
|
2608
|
+
* found. Simplified version of the full `DataTableCore.setColumns`, limited
|
|
2609
|
+
* to full replacement of the columns (undefined `rowIndex`).
|
|
2610
|
+
*
|
|
2611
|
+
* @param {Highcharts.DataTableColumnCollection} columns
|
|
2612
|
+
* Columns as a collection, where the keys are the column names.
|
|
2613
|
+
*
|
|
2614
|
+
* @param {number} [rowIndex]
|
|
2615
|
+
* Index of the first row to change. Ignored in the `DataTableCore`, as it
|
|
2616
|
+
* always replaces the full column.
|
|
2617
|
+
*
|
|
2618
|
+
* @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]
|
|
2619
|
+
* Custom information for pending events.
|
|
2620
|
+
*
|
|
2621
|
+
* @emits #setColumns
|
|
2622
|
+
* @emits #afterSetColumns
|
|
2623
|
+
*/
|
|
2624
|
+
setColumns(columns, rowIndex, eventDetail) {
|
|
2625
|
+
let rowCount = this.rowCount;
|
|
2626
|
+
DataTableCore_objectEach(columns, (column, columnName) => {
|
|
2627
|
+
this.columns[columnName] = column.slice();
|
|
2628
|
+
rowCount = column.length;
|
|
2629
|
+
});
|
|
2630
|
+
this.applyRowCount(rowCount);
|
|
2631
|
+
if (!eventDetail?.silent) {
|
|
2632
|
+
fireEvent(this, 'afterSetColumns');
|
|
2633
|
+
this.versionTag = uniqueKey();
|
|
2634
|
+
}
|
|
2635
|
+
}
|
|
2636
|
+
/**
|
|
2637
|
+
* Sets cell values of a row. Will insert a new row if no index was
|
|
2638
|
+
* provided, or if the index is higher than the total number of table rows.
|
|
2639
|
+
* A simplified version of the full `DateTable.setRow`, limited to objects.
|
|
2640
|
+
*
|
|
2641
|
+
* @param {Record<string, number|string|undefined>} row
|
|
2642
|
+
* Cell values to set.
|
|
2643
|
+
*
|
|
2644
|
+
* @param {number} [rowIndex]
|
|
2645
|
+
* Index of the row to set. Leave `undefined` to add as a new row.
|
|
2646
|
+
*
|
|
2647
|
+
* @param {boolean} [insert]
|
|
2648
|
+
* Whether to insert the row at the given index, or to overwrite the row.
|
|
2649
|
+
*
|
|
2650
|
+
* @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]
|
|
2651
|
+
* Custom information for pending events.
|
|
2652
|
+
*
|
|
2653
|
+
* @emits #afterSetRows
|
|
2654
|
+
*/
|
|
2655
|
+
setRow(row, rowIndex = this.rowCount, insert, eventDetail) {
|
|
2656
|
+
const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1;
|
|
2657
|
+
DataTableCore_objectEach(row, (cellValue, columnName) => {
|
|
2658
|
+
let column = columns[columnName] ||
|
|
2659
|
+
eventDetail?.addColumns !== false && new Array(indexRowCount);
|
|
2660
|
+
if (column) {
|
|
2661
|
+
if (insert) {
|
|
2662
|
+
column = splice(column, rowIndex, 0, true, [cellValue]).array;
|
|
2663
|
+
}
|
|
2664
|
+
else {
|
|
2665
|
+
column[rowIndex] = cellValue;
|
|
2666
|
+
}
|
|
2667
|
+
columns[columnName] = column;
|
|
2668
|
+
}
|
|
2669
|
+
});
|
|
2670
|
+
if (indexRowCount > this.rowCount) {
|
|
2671
|
+
this.applyRowCount(indexRowCount);
|
|
2672
|
+
}
|
|
2673
|
+
if (!eventDetail?.silent) {
|
|
2674
|
+
fireEvent(this, 'afterSetRows');
|
|
2675
|
+
this.versionTag = uniqueKey();
|
|
2676
|
+
}
|
|
2677
|
+
}
|
|
2678
|
+
}
|
|
2679
|
+
/* *
|
|
2680
|
+
*
|
|
2681
|
+
* Default Export
|
|
2682
|
+
*
|
|
2683
|
+
* */
|
|
2684
|
+
/* harmony default export */ const Data_DataTableCore = (DataTableCore);
|
|
2685
|
+
/* *
|
|
2686
|
+
*
|
|
2687
|
+
* API Declarations
|
|
2688
|
+
*
|
|
2689
|
+
* */
|
|
2690
|
+
/**
|
|
2691
|
+
* A typed array.
|
|
2692
|
+
* @typedef {Int8Array|Uint8Array|Uint8ClampedArray|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} Highcharts.TypedArray
|
|
2693
|
+
* //**
|
|
2694
|
+
* A column of values in a data table.
|
|
2695
|
+
* @typedef {Array<boolean|null|number|string|undefined>|Highcharts.TypedArray} Highcharts.DataTableColumn
|
|
2696
|
+
*/ /**
|
|
2697
|
+
* A collection of data table columns defined by a object where the key is the
|
|
2698
|
+
* column name and the value is an array of the column values.
|
|
2699
|
+
* @typedef {Record<string, Highcharts.DataTableColumn>} Highcharts.DataTableColumnCollection
|
|
2700
|
+
*/
|
|
2701
|
+
/**
|
|
2702
|
+
* Options for the `DataTable` or `DataTableCore` classes.
|
|
2703
|
+
* @interface Highcharts.DataTableOptions
|
|
2704
|
+
*/ /**
|
|
2705
|
+
* The column options for the data table. The columns are defined by an object
|
|
2706
|
+
* where the key is the column ID and the value is an array of the column
|
|
2707
|
+
* values.
|
|
2708
|
+
*
|
|
2709
|
+
* @name Highcharts.DataTableOptions.columns
|
|
2710
|
+
* @type {Highcharts.DataTableColumnCollection|undefined}
|
|
2711
|
+
*/ /**
|
|
2712
|
+
* Custom ID to identify the new DataTable instance.
|
|
2713
|
+
*
|
|
2714
|
+
* @name Highcharts.DataTableOptions.id
|
|
2715
|
+
* @type {string|undefined}
|
|
2716
|
+
*/
|
|
2717
|
+
(''); // Keeps doclets above in JS file
|
|
2718
|
+
|
|
2719
|
+
;// ./code/es-modules/Extensions/Boost/BoostSeries.js
|
|
2720
|
+
/* *
|
|
2721
|
+
*
|
|
2722
|
+
* (c) 2019-2025 Highsoft AS
|
|
2723
|
+
*
|
|
2724
|
+
* Boost module: stripped-down renderer for higher performance
|
|
2725
|
+
*
|
|
2726
|
+
* License: highcharts.com/license
|
|
2727
|
+
*
|
|
2728
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
2729
|
+
*
|
|
2730
|
+
* */
|
|
2731
|
+
|
|
2732
|
+
|
|
2733
|
+
|
|
2734
|
+
|
|
2735
|
+
const { getBoostClipRect: BoostSeries_getBoostClipRect, isChartSeriesBoosting: BoostSeries_isChartSeriesBoosting } = Boost_BoostChart;
|
|
2736
|
+
|
|
2737
|
+
const { getOptions } = (external_highcharts_src_js_default_default());
|
|
2738
|
+
|
|
2739
|
+
const { composed: BoostSeries_composed, doc: BoostSeries_doc, noop, win: BoostSeries_win } = (external_highcharts_src_js_default_default());
|
|
2740
|
+
|
|
2741
|
+
const { addEvent: BoostSeries_addEvent, destroyObjectProperties, error: BoostSeries_error, extend, fireEvent: BoostSeries_fireEvent, isArray, isNumber: BoostSeries_isNumber, pick: BoostSeries_pick, pushUnique: BoostSeries_pushUnique, wrap, defined } = (external_highcharts_src_js_default_default());
|
|
2742
|
+
|
|
2743
|
+
|
|
2744
|
+
/* *
|
|
2745
|
+
*
|
|
2746
|
+
* Constants
|
|
2747
|
+
*
|
|
2748
|
+
* */
|
|
2749
|
+
const CHUNK_SIZE = 3000;
|
|
2750
|
+
/* *
|
|
2751
|
+
*
|
|
2752
|
+
* Variables
|
|
2753
|
+
*
|
|
2754
|
+
* */
|
|
2755
|
+
let index, mainCanvas;
|
|
2756
|
+
/* *
|
|
2757
|
+
*
|
|
2758
|
+
* Functions
|
|
2759
|
+
*
|
|
2760
|
+
* */
|
|
2761
|
+
/**
|
|
2762
|
+
* @private
|
|
2763
|
+
*/
|
|
2764
|
+
function allocateIfNotSeriesBoosting(renderer, series) {
|
|
2765
|
+
const boost = series.boost;
|
|
2766
|
+
if (renderer &&
|
|
2767
|
+
boost &&
|
|
2768
|
+
boost.target &&
|
|
2769
|
+
boost.canvas &&
|
|
2770
|
+
!BoostSeries_isChartSeriesBoosting(series.chart)) {
|
|
2771
|
+
renderer.allocateBufferForSingleSeries(series);
|
|
2772
|
+
}
|
|
2773
|
+
}
|
|
2774
|
+
/**
|
|
2775
|
+
* Return true if ths boost.enabled option is true
|
|
2776
|
+
*
|
|
2777
|
+
* @private
|
|
2778
|
+
* @param {Highcharts.Chart} chart
|
|
2779
|
+
* The chart
|
|
2780
|
+
* @return {boolean}
|
|
2781
|
+
* True, if boost is enabled.
|
|
2782
|
+
*/
|
|
2783
|
+
function boostEnabled(chart) {
|
|
2784
|
+
return BoostSeries_pick((chart &&
|
|
2785
|
+
chart.options &&
|
|
2786
|
+
chart.options.boost &&
|
|
2787
|
+
chart.options.boost.enabled), true);
|
|
2788
|
+
}
|
|
2789
|
+
/**
|
|
2790
|
+
* @private
|
|
2791
|
+
*/
|
|
2792
|
+
function BoostSeries_compose(SeriesClass, seriesTypes, PointClass, wglMode) {
|
|
2793
|
+
if (BoostSeries_pushUnique(BoostSeries_composed, 'Boost.Series')) {
|
|
2794
|
+
const plotOptions = getOptions().plotOptions, seriesProto = SeriesClass.prototype;
|
|
2795
|
+
BoostSeries_addEvent(SeriesClass, 'destroy', onSeriesDestroy);
|
|
2796
|
+
BoostSeries_addEvent(SeriesClass, 'hide', onSeriesHide);
|
|
2797
|
+
if (wglMode) {
|
|
2798
|
+
seriesProto.renderCanvas = seriesRenderCanvas;
|
|
2799
|
+
}
|
|
2800
|
+
wrap(seriesProto, 'getExtremes', wrapSeriesGetExtremes);
|
|
2801
|
+
wrap(seriesProto, 'processData', wrapSeriesProcessData);
|
|
2802
|
+
wrap(seriesProto, 'searchPoint', wrapSeriesSearchPoint);
|
|
2803
|
+
[
|
|
2804
|
+
'translate',
|
|
2805
|
+
'generatePoints',
|
|
2806
|
+
'drawTracker',
|
|
2807
|
+
'drawPoints',
|
|
2808
|
+
'render'
|
|
2809
|
+
].forEach((method) => wrapSeriesFunctions(seriesProto, seriesTypes, method));
|
|
2810
|
+
wrap(PointClass.prototype, 'firePointEvent', function (proceed, type, e) {
|
|
2811
|
+
if (type === 'click' && this.series.boosted) {
|
|
2812
|
+
const point = e.point;
|
|
2813
|
+
if ((point.dist || point.distX) >= (point.series.options.marker?.radius ?? 10)) {
|
|
2814
|
+
return;
|
|
2815
|
+
}
|
|
2816
|
+
}
|
|
2817
|
+
return proceed.apply(this, [].slice.call(arguments, 1));
|
|
2818
|
+
});
|
|
2819
|
+
// Set default options
|
|
2820
|
+
Boost_Boostables.forEach((type) => {
|
|
2821
|
+
const typePlotOptions = plotOptions[type];
|
|
2822
|
+
if (typePlotOptions) {
|
|
2823
|
+
typePlotOptions.boostThreshold = 5000;
|
|
2824
|
+
typePlotOptions.boostData = [];
|
|
2825
|
+
seriesTypes[type].prototype.fillOpacity = true;
|
|
2826
|
+
}
|
|
2827
|
+
});
|
|
2828
|
+
if (wglMode) {
|
|
2829
|
+
const { area: AreaSeries, areaspline: AreaSplineSeries, bubble: BubbleSeries, column: ColumnSeries, heatmap: HeatmapSeries, scatter: ScatterSeries, treemap: TreemapSeries } = seriesTypes;
|
|
2830
|
+
if (AreaSeries) {
|
|
2831
|
+
extend(AreaSeries.prototype, {
|
|
2832
|
+
fill: true,
|
|
2833
|
+
fillOpacity: true,
|
|
2834
|
+
sampling: true
|
|
2835
|
+
});
|
|
2836
|
+
}
|
|
2837
|
+
if (AreaSplineSeries) {
|
|
2838
|
+
extend(AreaSplineSeries.prototype, {
|
|
2839
|
+
fill: true,
|
|
2840
|
+
fillOpacity: true,
|
|
2841
|
+
sampling: true
|
|
2842
|
+
});
|
|
2843
|
+
}
|
|
2844
|
+
if (BubbleSeries) {
|
|
2845
|
+
const bubbleProto = BubbleSeries.prototype;
|
|
2846
|
+
// By default, the bubble series does not use the KD-tree, so
|
|
2847
|
+
// force it to.
|
|
2848
|
+
delete bubbleProto.buildKDTree;
|
|
2849
|
+
// SeriesTypes.bubble.prototype.directTouch = false;
|
|
2850
|
+
// Needed for markers to work correctly
|
|
2851
|
+
wrap(bubbleProto, 'markerAttribs', function (proceed) {
|
|
2852
|
+
if (this.boosted) {
|
|
2853
|
+
return false;
|
|
2854
|
+
}
|
|
2855
|
+
return proceed.apply(this, [].slice.call(arguments, 1));
|
|
2856
|
+
});
|
|
2857
|
+
}
|
|
2858
|
+
if (ColumnSeries) {
|
|
2859
|
+
extend(ColumnSeries.prototype, {
|
|
2860
|
+
fill: true,
|
|
2861
|
+
sampling: true
|
|
2862
|
+
});
|
|
2863
|
+
}
|
|
2864
|
+
if (ScatterSeries) {
|
|
2865
|
+
ScatterSeries.prototype.fill = true;
|
|
2866
|
+
}
|
|
2867
|
+
// We need to handle heatmaps separately, since we can't perform the
|
|
2868
|
+
// size/color calculations in the shader easily.
|
|
2869
|
+
// @todo This likely needs future optimization.
|
|
2870
|
+
[HeatmapSeries, TreemapSeries].forEach((SC) => {
|
|
2871
|
+
if (SC) {
|
|
2872
|
+
wrap(SC.prototype, 'drawPoints', wrapSeriesDrawPoints);
|
|
2873
|
+
}
|
|
2874
|
+
});
|
|
2875
|
+
}
|
|
2876
|
+
}
|
|
2877
|
+
return SeriesClass;
|
|
2878
|
+
}
|
|
2879
|
+
/**
|
|
2880
|
+
* Create a canvas + context and attach it to the target
|
|
2881
|
+
*
|
|
2882
|
+
* @private
|
|
2883
|
+
* @function createAndAttachRenderer
|
|
2884
|
+
*
|
|
2885
|
+
* @param {Highcharts.Chart} chart
|
|
2886
|
+
* the chart
|
|
2887
|
+
*
|
|
2888
|
+
* @param {Highcharts.Series} series
|
|
2889
|
+
* the series
|
|
2890
|
+
*
|
|
2891
|
+
* @return {Highcharts.BoostGLRenderer}
|
|
2892
|
+
* the canvas renderer
|
|
2893
|
+
*/
|
|
2894
|
+
function createAndAttachRenderer(chart, series) {
|
|
2895
|
+
const ChartClass = chart.constructor, targetGroup = chart.seriesGroup || series.group, alpha = 1;
|
|
2896
|
+
let width = chart.chartWidth, height = chart.chartHeight, target = chart, foSupported = typeof SVGForeignObjectElement !== 'undefined', hasClickHandler = false;
|
|
2897
|
+
if (BoostSeries_isChartSeriesBoosting(chart)) {
|
|
2898
|
+
target = chart;
|
|
2899
|
+
}
|
|
2900
|
+
else {
|
|
2901
|
+
target = series;
|
|
2902
|
+
hasClickHandler = Boolean(series.options.events?.click ||
|
|
2903
|
+
series.options.point?.events?.click);
|
|
2904
|
+
}
|
|
2905
|
+
const boost = target.boost =
|
|
2906
|
+
target.boost ||
|
|
2907
|
+
{};
|
|
2908
|
+
// Support for foreignObject is flimsy as best.
|
|
2909
|
+
// IE does not support it, and Chrome has a bug which messes up
|
|
2910
|
+
// the canvas draw order.
|
|
2911
|
+
// As such, we force the Image fallback for now, but leaving the
|
|
2912
|
+
// actual Canvas path in-place in case this changes in the future.
|
|
2913
|
+
foSupported = false;
|
|
2914
|
+
if (!mainCanvas) {
|
|
2915
|
+
mainCanvas = BoostSeries_doc.createElement('canvas');
|
|
2916
|
+
}
|
|
2917
|
+
if (!boost.target) {
|
|
2918
|
+
boost.canvas = mainCanvas;
|
|
2919
|
+
// Fall back to image tag if foreignObject isn't supported,
|
|
2920
|
+
// or if we're exporting.
|
|
2921
|
+
if (chart.renderer.forExport || !foSupported) {
|
|
2922
|
+
target.renderTarget = boost.target = chart.renderer.image('', 0, 0, width, height)
|
|
2923
|
+
.addClass('highcharts-boost-canvas')
|
|
2924
|
+
.add(targetGroup);
|
|
2925
|
+
boost.clear = function () {
|
|
2926
|
+
boost.target.attr({
|
|
2927
|
+
// Insert a blank pixel (#17182)
|
|
2928
|
+
/* eslint-disable-next-line max-len*/
|
|
2929
|
+
href: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='
|
|
2930
|
+
});
|
|
2931
|
+
};
|
|
2932
|
+
boost.copy = function () {
|
|
2933
|
+
boost.resize();
|
|
2934
|
+
boost.target.attr({
|
|
2935
|
+
href: boost.canvas.toDataURL('image/png')
|
|
2936
|
+
});
|
|
2937
|
+
};
|
|
2938
|
+
}
|
|
2939
|
+
else {
|
|
2940
|
+
boost.targetFo = chart.renderer
|
|
2941
|
+
.createElement('foreignObject')
|
|
2942
|
+
.add(targetGroup);
|
|
2943
|
+
target.renderTarget = boost.target =
|
|
2944
|
+
BoostSeries_doc.createElement('canvas');
|
|
2945
|
+
boost.targetCtx = boost.target.getContext('2d');
|
|
2946
|
+
boost.targetFo.element.appendChild(boost.target);
|
|
2947
|
+
boost.clear = function () {
|
|
2948
|
+
boost.target.width = boost.canvas.width;
|
|
2949
|
+
boost.target.height = boost.canvas.height;
|
|
2950
|
+
};
|
|
2951
|
+
boost.copy = function () {
|
|
2952
|
+
boost.target.width = boost.canvas.width;
|
|
2953
|
+
boost.target.height = boost.canvas.height;
|
|
2954
|
+
boost.targetCtx.drawImage(boost.canvas, 0, 0);
|
|
2955
|
+
};
|
|
2956
|
+
}
|
|
2957
|
+
boost.resize = function () {
|
|
2958
|
+
width = chart.chartWidth;
|
|
2959
|
+
height = chart.chartHeight;
|
|
2960
|
+
(boost.targetFo || boost.target)
|
|
2961
|
+
.attr({
|
|
2962
|
+
x: 0,
|
|
2963
|
+
y: 0,
|
|
2964
|
+
width,
|
|
2965
|
+
height
|
|
2966
|
+
})
|
|
2967
|
+
.css({
|
|
2968
|
+
pointerEvents: hasClickHandler ? void 0 : 'none',
|
|
2969
|
+
mixedBlendMode: 'normal',
|
|
2970
|
+
opacity: alpha
|
|
2971
|
+
})
|
|
2972
|
+
.addClass(hasClickHandler ? 'highcharts-tracker' : '');
|
|
2973
|
+
if (target instanceof ChartClass) {
|
|
2974
|
+
target.boost?.markerGroup?.translate(chart.plotLeft, chart.plotTop);
|
|
2975
|
+
}
|
|
2976
|
+
};
|
|
2977
|
+
boost.clipRect = chart.renderer.clipRect();
|
|
2978
|
+
(boost.targetFo || boost.target)
|
|
2979
|
+
.attr({
|
|
2980
|
+
// Set the z index of the boost target to that of the last
|
|
2981
|
+
// series using it. This logic is not perfect, as it will not
|
|
2982
|
+
// handle interleaved series with boost enabled or disabled. But
|
|
2983
|
+
// it will cover the most common use case of one or more
|
|
2984
|
+
// successive boosted or non-boosted series (#9819).
|
|
2985
|
+
zIndex: series.options.zIndex
|
|
2986
|
+
});
|
|
2987
|
+
if (target instanceof ChartClass) {
|
|
2988
|
+
target.boost.markerGroup = target.renderer
|
|
2989
|
+
.g()
|
|
2990
|
+
.add(targetGroup)
|
|
2991
|
+
.translate(series.xAxis.pos, series.yAxis.pos);
|
|
2992
|
+
}
|
|
2993
|
+
}
|
|
2994
|
+
boost.canvas.width = width;
|
|
2995
|
+
boost.canvas.height = height;
|
|
2996
|
+
if (boost.clipRect) {
|
|
2997
|
+
const box = BoostSeries_getBoostClipRect(chart, target),
|
|
2998
|
+
// When using panes, the image itself must be clipped. When not
|
|
2999
|
+
// using panes, it is better to clip the target group, because then
|
|
3000
|
+
// we preserve clipping on touch- and mousewheel zoom preview.
|
|
3001
|
+
clippedElement = (box.width === chart.clipBox.width &&
|
|
3002
|
+
box.height === chart.clipBox.height) ? targetGroup :
|
|
3003
|
+
(boost.targetFo || boost.target);
|
|
3004
|
+
boost.clipRect.attr(box);
|
|
3005
|
+
clippedElement?.clip(boost.clipRect);
|
|
3006
|
+
}
|
|
3007
|
+
boost.resize();
|
|
3008
|
+
boost.clear();
|
|
3009
|
+
if (!boost.wgl) {
|
|
3010
|
+
boost.wgl = new Boost_WGLRenderer((wgl) => {
|
|
3011
|
+
if (wgl.settings.debug.timeBufferCopy) {
|
|
3012
|
+
console.time('buffer copy'); // eslint-disable-line no-console
|
|
3013
|
+
}
|
|
3014
|
+
boost.copy();
|
|
3015
|
+
if (wgl.settings.debug.timeBufferCopy) {
|
|
3016
|
+
console.timeEnd('buffer copy'); // eslint-disable-line no-console
|
|
3017
|
+
}
|
|
3018
|
+
});
|
|
3019
|
+
if (!boost.wgl.init(boost.canvas)) {
|
|
3020
|
+
// The OGL renderer couldn't be inited. This likely means a shader
|
|
3021
|
+
// error as we wouldn't get to this point if there was no WebGL
|
|
3022
|
+
// support.
|
|
3023
|
+
BoostSeries_error('[highcharts boost] - unable to init WebGL renderer');
|
|
3024
|
+
}
|
|
3025
|
+
boost.wgl.setOptions(chart.options.boost || {});
|
|
3026
|
+
if (target instanceof ChartClass) {
|
|
3027
|
+
boost.wgl.allocateBuffer(chart);
|
|
3028
|
+
}
|
|
3029
|
+
}
|
|
3030
|
+
boost.wgl.setSize(width, height);
|
|
3031
|
+
return boost.wgl;
|
|
3032
|
+
}
|
|
3033
|
+
/**
|
|
3034
|
+
* If implemented in the core, parts of this can probably be
|
|
3035
|
+
* shared with other similar methods in Highcharts.
|
|
3036
|
+
* @private
|
|
3037
|
+
* @function Highcharts.Series#destroyGraphics
|
|
3038
|
+
*/
|
|
3039
|
+
function destroyGraphics(series) {
|
|
3040
|
+
const points = series.points;
|
|
3041
|
+
if (points) {
|
|
3042
|
+
let point, i;
|
|
3043
|
+
for (i = 0; i < points.length; i = i + 1) {
|
|
3044
|
+
point = points[i];
|
|
3045
|
+
if (point && point.destroyElements) {
|
|
3046
|
+
point.destroyElements(); // #7557
|
|
3047
|
+
}
|
|
3048
|
+
}
|
|
3049
|
+
}
|
|
3050
|
+
['graph', 'area', 'tracker'].forEach((prop) => {
|
|
3051
|
+
const seriesProp = series[prop];
|
|
3052
|
+
if (seriesProp) {
|
|
3053
|
+
series[prop] = seriesProp.destroy();
|
|
3054
|
+
}
|
|
3055
|
+
});
|
|
3056
|
+
for (const zone of series.zones) {
|
|
3057
|
+
destroyObjectProperties(zone, void 0, true);
|
|
3058
|
+
}
|
|
3059
|
+
}
|
|
3060
|
+
/**
|
|
3061
|
+
* An "async" foreach loop. Uses a setTimeout to keep the loop from blocking the
|
|
3062
|
+
* UI thread.
|
|
3063
|
+
*
|
|
3064
|
+
* @private
|
|
3065
|
+
* @param {Array<unknown>} arr
|
|
3066
|
+
* The array to loop through.
|
|
3067
|
+
* @param {Function} fn
|
|
3068
|
+
* The callback to call for each item.
|
|
3069
|
+
* @param {Function} finalFunc
|
|
3070
|
+
* The callback to call when done.
|
|
3071
|
+
* @param {number} [chunkSize]
|
|
3072
|
+
* The number of iterations per timeout.
|
|
3073
|
+
* @param {number} [i]
|
|
3074
|
+
* The current index.
|
|
3075
|
+
* @param {boolean} [noTimeout]
|
|
3076
|
+
* Set to true to skip timeouts.
|
|
3077
|
+
*/
|
|
3078
|
+
function eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout) {
|
|
3079
|
+
i = i || 0;
|
|
3080
|
+
chunkSize = chunkSize || CHUNK_SIZE;
|
|
3081
|
+
const threshold = i + chunkSize;
|
|
3082
|
+
let proceed = true;
|
|
3083
|
+
while (proceed && i < threshold && i < arr.length) {
|
|
3084
|
+
proceed = fn(arr[i], i);
|
|
3085
|
+
++i;
|
|
3086
|
+
}
|
|
3087
|
+
if (proceed) {
|
|
3088
|
+
if (i < arr.length) {
|
|
3089
|
+
if (noTimeout) {
|
|
3090
|
+
eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout);
|
|
3091
|
+
}
|
|
3092
|
+
else if (BoostSeries_win.requestAnimationFrame) {
|
|
3093
|
+
// If available, do requestAnimationFrame - shaves off a few ms
|
|
3094
|
+
BoostSeries_win.requestAnimationFrame(function () {
|
|
3095
|
+
eachAsync(arr, fn, finalFunc, chunkSize, i);
|
|
3096
|
+
});
|
|
3097
|
+
}
|
|
3098
|
+
else {
|
|
3099
|
+
setTimeout(eachAsync, 0, arr, fn, finalFunc, chunkSize, i);
|
|
3100
|
+
}
|
|
3101
|
+
}
|
|
3102
|
+
else if (finalFunc) {
|
|
3103
|
+
finalFunc();
|
|
3104
|
+
}
|
|
3105
|
+
}
|
|
3106
|
+
}
|
|
3107
|
+
/**
|
|
3108
|
+
* Enter boost mode and apply boost-specific properties.
|
|
3109
|
+
* @private
|
|
3110
|
+
* @function Highcharts.Series#enterBoost
|
|
3111
|
+
*/
|
|
3112
|
+
function enterBoost(series) {
|
|
3113
|
+
series.boost = series.boost || {
|
|
3114
|
+
// Faster than a series bind:
|
|
3115
|
+
getPoint: ((bp) => getPoint(series, bp))
|
|
3116
|
+
};
|
|
3117
|
+
const alteredByBoost = series.boost.altered = [];
|
|
3118
|
+
// Save the original values, including whether it was an own
|
|
3119
|
+
// property or inherited from the prototype.
|
|
3120
|
+
['allowDG', 'directTouch', 'stickyTracking'].forEach((prop) => {
|
|
3121
|
+
alteredByBoost.push({
|
|
3122
|
+
prop: prop,
|
|
3123
|
+
val: series[prop],
|
|
3124
|
+
own: Object.hasOwnProperty.call(series, prop)
|
|
3125
|
+
});
|
|
3126
|
+
});
|
|
3127
|
+
series.allowDG = false;
|
|
3128
|
+
series.directTouch = false;
|
|
3129
|
+
series.stickyTracking = true;
|
|
3130
|
+
// Prevent animation when zooming in on boosted series(#13421).
|
|
3131
|
+
series.finishedAnimating = true;
|
|
3132
|
+
// Hide series label if any
|
|
3133
|
+
if (series.labelBySeries) {
|
|
3134
|
+
series.labelBySeries = series.labelBySeries.destroy();
|
|
3135
|
+
}
|
|
3136
|
+
// Destroy existing points after zoom out
|
|
3137
|
+
if (series.is('scatter') &&
|
|
3138
|
+
!series.is('treemap') &&
|
|
3139
|
+
series.data.length) {
|
|
3140
|
+
for (const point of series.data) {
|
|
3141
|
+
point?.destroy?.();
|
|
3142
|
+
}
|
|
3143
|
+
series.data.length = 0;
|
|
3144
|
+
series.points.length = 0;
|
|
3145
|
+
delete series.processedData;
|
|
3146
|
+
}
|
|
3147
|
+
}
|
|
3148
|
+
/**
|
|
3149
|
+
* Exit from boost mode and restore non-boost properties.
|
|
3150
|
+
* @private
|
|
3151
|
+
* @function Highcharts.Series#exitBoost
|
|
3152
|
+
*/
|
|
3153
|
+
function exitBoost(series) {
|
|
3154
|
+
const boost = series.boost, chart = series.chart, chartBoost = chart.boost;
|
|
3155
|
+
if (chartBoost?.markerGroup) {
|
|
3156
|
+
chartBoost.markerGroup.destroy();
|
|
3157
|
+
chartBoost.markerGroup = void 0;
|
|
3158
|
+
for (const s of chart.series) {
|
|
3159
|
+
s.markerGroup = void 0;
|
|
3160
|
+
s.markerGroup = s.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');
|
|
3161
|
+
}
|
|
3162
|
+
}
|
|
3163
|
+
// Reset instance properties and/or delete instance properties and go back
|
|
3164
|
+
// to prototype
|
|
3165
|
+
if (boost) {
|
|
3166
|
+
(boost.altered || []).forEach((setting) => {
|
|
3167
|
+
if (setting.own) {
|
|
3168
|
+
series[setting.prop] = setting.val;
|
|
3169
|
+
}
|
|
3170
|
+
else {
|
|
3171
|
+
// Revert to prototype
|
|
3172
|
+
delete series[setting.prop];
|
|
3173
|
+
}
|
|
3174
|
+
});
|
|
3175
|
+
// Clear previous run
|
|
3176
|
+
if (boost.clear) {
|
|
3177
|
+
boost.clear();
|
|
3178
|
+
}
|
|
3179
|
+
}
|
|
3180
|
+
// #21106, clean up boost clipping on the series groups.
|
|
3181
|
+
(chart.seriesGroup || series.group)?.clip();
|
|
3182
|
+
}
|
|
3183
|
+
/**
|
|
3184
|
+
* @private
|
|
3185
|
+
* @function Highcharts.Series#hasExtremes
|
|
3186
|
+
*/
|
|
3187
|
+
function hasExtremes(series, checkX) {
|
|
3188
|
+
const options = series.options, dataLength = series.dataTable.modified.rowCount, xAxis = series.xAxis && series.xAxis.options, yAxis = series.yAxis && series.yAxis.options, colorAxis = series.colorAxis && series.colorAxis.options;
|
|
3189
|
+
return dataLength > (options.boostThreshold || Number.MAX_VALUE) &&
|
|
3190
|
+
// Defined yAxis extremes
|
|
3191
|
+
BoostSeries_isNumber(yAxis.min) &&
|
|
3192
|
+
BoostSeries_isNumber(yAxis.max) &&
|
|
3193
|
+
// Defined (and required) xAxis extremes
|
|
3194
|
+
(!checkX ||
|
|
3195
|
+
(BoostSeries_isNumber(xAxis.min) && BoostSeries_isNumber(xAxis.max))) &&
|
|
3196
|
+
// Defined (e.g. heatmap) colorAxis extremes
|
|
3197
|
+
(!colorAxis ||
|
|
3198
|
+
(BoostSeries_isNumber(colorAxis.min) && BoostSeries_isNumber(colorAxis.max)));
|
|
3199
|
+
}
|
|
3200
|
+
/**
|
|
3201
|
+
* Used multiple times. In processData first on this.options.data, the second
|
|
3202
|
+
* time it runs the check again after processedXData is built.
|
|
3203
|
+
* If the data is going to be grouped, the series shouldn't be boosted.
|
|
3204
|
+
* @private
|
|
3205
|
+
*/
|
|
3206
|
+
const getSeriesBoosting = (series, data) => {
|
|
3207
|
+
// Check if will be grouped.
|
|
3208
|
+
if (series.forceCrop) {
|
|
3209
|
+
return false;
|
|
3210
|
+
}
|
|
3211
|
+
return (BoostSeries_isChartSeriesBoosting(series.chart) ||
|
|
3212
|
+
((data ? data.length : 0) >=
|
|
3213
|
+
(series.options.boostThreshold || Number.MAX_VALUE)));
|
|
3214
|
+
};
|
|
3215
|
+
/**
|
|
3216
|
+
* Extend series.destroy to also remove the fake k-d-tree points (#5137).
|
|
3217
|
+
* Normally this is handled by Series.destroy that calls Point.destroy,
|
|
3218
|
+
* but the fake search points are not registered like that.
|
|
3219
|
+
* @private
|
|
3220
|
+
*/
|
|
3221
|
+
function onSeriesDestroy() {
|
|
3222
|
+
const series = this, chart = series.chart;
|
|
3223
|
+
if (chart.boost &&
|
|
3224
|
+
chart.boost.markerGroup === series.markerGroup) {
|
|
3225
|
+
series.markerGroup = null;
|
|
3226
|
+
}
|
|
3227
|
+
if (chart.hoverPoints) {
|
|
3228
|
+
chart.hoverPoints = chart.hoverPoints.filter(function (point) {
|
|
3229
|
+
return point.series === series;
|
|
3230
|
+
});
|
|
3231
|
+
}
|
|
3232
|
+
if (chart.hoverPoint && chart.hoverPoint.series === series) {
|
|
3233
|
+
chart.hoverPoint = null;
|
|
3234
|
+
}
|
|
3235
|
+
}
|
|
3236
|
+
/**
|
|
3237
|
+
* @private
|
|
3238
|
+
*/
|
|
3239
|
+
function onSeriesHide() {
|
|
3240
|
+
const boost = this.boost;
|
|
3241
|
+
if (boost && boost.canvas && boost.target) {
|
|
3242
|
+
if (boost.wgl) {
|
|
3243
|
+
boost.wgl.clear();
|
|
3244
|
+
}
|
|
3245
|
+
if (boost.clear) {
|
|
3246
|
+
boost.clear();
|
|
3247
|
+
}
|
|
3248
|
+
}
|
|
3249
|
+
}
|
|
3250
|
+
/**
|
|
3251
|
+
* Performs the actual render if the renderer is
|
|
3252
|
+
* attached to the series.
|
|
3253
|
+
* @private
|
|
3254
|
+
*/
|
|
3255
|
+
function renderIfNotSeriesBoosting(series) {
|
|
3256
|
+
const boost = series.boost;
|
|
3257
|
+
if (boost &&
|
|
3258
|
+
boost.canvas &&
|
|
3259
|
+
boost.target &&
|
|
3260
|
+
boost.wgl &&
|
|
3261
|
+
!BoostSeries_isChartSeriesBoosting(series.chart)) {
|
|
3262
|
+
boost.wgl.render(series.chart);
|
|
3263
|
+
}
|
|
3264
|
+
}
|
|
3265
|
+
/**
|
|
3266
|
+
* Return a full Point object based on the index.
|
|
3267
|
+
* The boost module uses stripped point objects for performance reasons.
|
|
3268
|
+
* @private
|
|
3269
|
+
* @param {object|Highcharts.Point} boostPoint
|
|
3270
|
+
* A stripped-down point object
|
|
3271
|
+
* @return {Highcharts.Point}
|
|
3272
|
+
* A Point object as per https://api.highcharts.com/highcharts#Point
|
|
3273
|
+
*/
|
|
3274
|
+
function getPoint(series, boostPoint) {
|
|
3275
|
+
const seriesOptions = series.options, xAxis = series.xAxis, PointClass = series.pointClass;
|
|
3276
|
+
if (boostPoint instanceof PointClass) {
|
|
3277
|
+
return boostPoint;
|
|
3278
|
+
}
|
|
3279
|
+
const isScatter = series.is('scatter'), xData = ((isScatter && series.getColumn('x', true).length ?
|
|
3280
|
+
series.getColumn('x', true) :
|
|
3281
|
+
void 0) ||
|
|
3282
|
+
(series.getColumn('x').length ? series.getColumn('x') : void 0) ||
|
|
3283
|
+
seriesOptions.xData ||
|
|
3284
|
+
series.getColumn('x', true) ||
|
|
3285
|
+
false), yData = (series.getColumn('y', true) ||
|
|
3286
|
+
seriesOptions.yData ||
|
|
3287
|
+
false), point = new PointClass(series, (isScatter && xData && yData) ?
|
|
3288
|
+
[xData[boostPoint.i], yData[boostPoint.i]] :
|
|
3289
|
+
(isArray(series.options.data) ? series.options.data : [])[boostPoint.i], xData ? xData[boostPoint.i] : void 0);
|
|
3290
|
+
point.category = BoostSeries_pick(xAxis.categories ?
|
|
3291
|
+
xAxis.categories[point.x] :
|
|
3292
|
+
point.x, // @todo simplify
|
|
3293
|
+
point.x);
|
|
3294
|
+
point.key = point.name ?? point.category;
|
|
3295
|
+
point.dist = boostPoint.dist;
|
|
3296
|
+
point.distX = boostPoint.distX;
|
|
3297
|
+
point.plotX = boostPoint.plotX;
|
|
3298
|
+
point.plotY = boostPoint.plotY;
|
|
3299
|
+
point.index = boostPoint.i;
|
|
3300
|
+
point.percentage = boostPoint.percentage;
|
|
3301
|
+
point.isInside = series.isPointInside(point);
|
|
3302
|
+
return point;
|
|
3303
|
+
}
|
|
3304
|
+
/**
|
|
3305
|
+
* @private
|
|
3306
|
+
*/
|
|
3307
|
+
function scatterProcessData(force) {
|
|
3308
|
+
const series = this, { options, xAxis, yAxis } = series;
|
|
3309
|
+
// Process only on changes
|
|
3310
|
+
if (!series.isDirty &&
|
|
3311
|
+
!xAxis.isDirty &&
|
|
3312
|
+
!yAxis.isDirty &&
|
|
3313
|
+
!force) {
|
|
3314
|
+
return false;
|
|
3315
|
+
}
|
|
3316
|
+
// Required to get tick-based zoom ranges that take options into account
|
|
3317
|
+
// like `minPadding`, `maxPadding`, `startOnTick`, `endOnTick`.
|
|
3318
|
+
series.yAxis.setTickInterval();
|
|
3319
|
+
const boostThreshold = options.boostThreshold || 0, cropThreshold = options.cropThreshold, xData = series.getColumn('x'), xExtremes = xAxis.getExtremes(), xMax = xExtremes.max ?? Number.MAX_VALUE, xMin = xExtremes.min ?? -Number.MAX_VALUE, yData = series.getColumn('y'), yExtremes = yAxis.getExtremes(), yMax = yExtremes.max ?? Number.MAX_VALUE, yMin = yExtremes.min ?? -Number.MAX_VALUE;
|
|
3320
|
+
// Skip processing in non-boost zoom
|
|
3321
|
+
if (!series.boosted &&
|
|
3322
|
+
xAxis.old &&
|
|
3323
|
+
yAxis.old &&
|
|
3324
|
+
xMin >= (xAxis.old.min ?? -Number.MAX_VALUE) &&
|
|
3325
|
+
xMax <= (xAxis.old.max ?? Number.MAX_VALUE) &&
|
|
3326
|
+
yMin >= (yAxis.old.min ?? -Number.MAX_VALUE) &&
|
|
3327
|
+
yMax <= (yAxis.old.max ?? Number.MAX_VALUE)) {
|
|
3328
|
+
series.dataTable.modified.setColumns({
|
|
3329
|
+
x: xData,
|
|
3330
|
+
y: yData
|
|
3331
|
+
});
|
|
3332
|
+
return true;
|
|
3333
|
+
}
|
|
3334
|
+
// Without thresholds just assign data
|
|
3335
|
+
const dataLength = series.dataTable.rowCount;
|
|
3336
|
+
if (!boostThreshold ||
|
|
3337
|
+
dataLength < boostThreshold ||
|
|
3338
|
+
(cropThreshold &&
|
|
3339
|
+
!series.forceCrop &&
|
|
3340
|
+
!series.getExtremesFromAll &&
|
|
3341
|
+
!options.getExtremesFromAll &&
|
|
3342
|
+
dataLength < cropThreshold)) {
|
|
3343
|
+
series.dataTable.modified.setColumns({
|
|
3344
|
+
x: xData,
|
|
3345
|
+
y: yData
|
|
3346
|
+
});
|
|
3347
|
+
return true;
|
|
3348
|
+
}
|
|
3349
|
+
// Filter unsorted scatter data for ranges
|
|
3350
|
+
const processedData = [], processedXData = [], processedYData = [], xRangeNeeded = !(BoostSeries_isNumber(xExtremes.max) || BoostSeries_isNumber(xExtremes.min)), yRangeNeeded = !(BoostSeries_isNumber(yExtremes.max) || BoostSeries_isNumber(yExtremes.min));
|
|
3351
|
+
let cropped = false, x, xDataMax = xData[0], xDataMin = xData[0], y, yDataMax = yData?.[0], yDataMin = yData?.[0];
|
|
3352
|
+
for (let i = 0, iEnd = xData.length; i < iEnd; ++i) {
|
|
3353
|
+
x = xData[i];
|
|
3354
|
+
y = yData?.[i];
|
|
3355
|
+
if (x >= xMin && x <= xMax &&
|
|
3356
|
+
y >= yMin && y <= yMax) {
|
|
3357
|
+
processedData.push({ x, y });
|
|
3358
|
+
processedXData.push(x);
|
|
3359
|
+
processedYData.push(y);
|
|
3360
|
+
if (xRangeNeeded) {
|
|
3361
|
+
xDataMax = Math.max(xDataMax, x);
|
|
3362
|
+
xDataMin = Math.min(xDataMin, x);
|
|
3363
|
+
}
|
|
3364
|
+
if (yRangeNeeded) {
|
|
3365
|
+
yDataMax = Math.max(yDataMax, y);
|
|
3366
|
+
yDataMin = Math.min(yDataMin, y);
|
|
3367
|
+
}
|
|
3368
|
+
}
|
|
3369
|
+
else {
|
|
3370
|
+
cropped = true;
|
|
3371
|
+
}
|
|
3372
|
+
}
|
|
3373
|
+
if (xRangeNeeded) {
|
|
3374
|
+
xAxis.dataMax = Math.max(xDataMax, xAxis.dataMax || 0);
|
|
3375
|
+
xAxis.dataMin = Math.min(xDataMin, xAxis.dataMin || 0);
|
|
3376
|
+
}
|
|
3377
|
+
if (yRangeNeeded) {
|
|
3378
|
+
yAxis.dataMax = Math.max(yDataMax, yAxis.dataMax || 0);
|
|
3379
|
+
yAxis.dataMin = Math.min(yDataMin, yAxis.dataMin || 0);
|
|
3380
|
+
}
|
|
3381
|
+
// Set properties as base processData
|
|
3382
|
+
series.cropped = cropped;
|
|
3383
|
+
series.cropStart = 0;
|
|
3384
|
+
// For boosted points rendering
|
|
3385
|
+
if (cropped && series.dataTable.modified === series.dataTable) {
|
|
3386
|
+
// Calling setColumns with cropped data must be done on a new instance
|
|
3387
|
+
// to avoid modification of the original (complete) data
|
|
3388
|
+
series.dataTable.modified = new Data_DataTableCore();
|
|
3389
|
+
}
|
|
3390
|
+
series.dataTable.modified.setColumns({
|
|
3391
|
+
x: processedXData,
|
|
3392
|
+
y: processedYData
|
|
3393
|
+
});
|
|
3394
|
+
if (!getSeriesBoosting(series, processedXData)) {
|
|
3395
|
+
series.processedData = processedData; // For un-boosted points rendering
|
|
3396
|
+
}
|
|
3397
|
+
return true;
|
|
3398
|
+
}
|
|
3399
|
+
/**
|
|
3400
|
+
* @private
|
|
3401
|
+
* @function Highcharts.Series#renderCanvas
|
|
3402
|
+
*/
|
|
3403
|
+
function seriesRenderCanvas() {
|
|
3404
|
+
const options = this.options || {}, chart = this.chart, chartBoost = chart.boost, seriesBoost = this.boost, xAxis = this.xAxis, yAxis = this.yAxis, xData = options.xData || this.getColumn('x', true), yData = options.yData || this.getColumn('y', true), lowData = this.getColumn('low', true), highData = this.getColumn('high', true), rawData = this.processedData || options.data, xExtremes = xAxis.getExtremes(),
|
|
3405
|
+
// Taking into account the offset of the min point #19497
|
|
3406
|
+
xMin = xExtremes.min - (xAxis.minPointOffset || 0), xMax = xExtremes.max + (xAxis.minPointOffset || 0), yExtremes = yAxis.getExtremes(), yMin = yExtremes.min - (yAxis.minPointOffset || 0), yMax = yExtremes.max + (yAxis.minPointOffset || 0), pointTaken = {}, sampling = !!this.sampling, enableMouseTracking = options.enableMouseTracking, threshold = options.threshold, isRange = this.pointArrayMap &&
|
|
3407
|
+
this.pointArrayMap.join(',') === 'low,high', isStacked = !!options.stacking, cropStart = this.cropStart || 0, requireSorting = this.requireSorting, useRaw = !xData, compareX = options.findNearestPointBy === 'x', xDataFull = ((this.getColumn('x').length ?
|
|
3408
|
+
this.getColumn('x') :
|
|
3409
|
+
void 0) ||
|
|
3410
|
+
this.options.xData ||
|
|
3411
|
+
this.getColumn('x', true)), lineWidth = BoostSeries_pick(options.lineWidth, 1), nullYSubstitute = options.nullInteraction && yMin;
|
|
3412
|
+
let renderer = false, lastClientX, yBottom = yAxis.getThreshold(threshold), minVal, maxVal, minI, maxI;
|
|
3413
|
+
// When touch-zooming or mouse-panning, re-rendering the canvas would not
|
|
3414
|
+
// perform fast enough. Instead, let the axes redraw, but not the series.
|
|
3415
|
+
// The series is scale-translated in an event handler for an approximate
|
|
3416
|
+
// preview.
|
|
3417
|
+
if (xAxis.isPanning || yAxis.isPanning) {
|
|
3418
|
+
return;
|
|
3419
|
+
}
|
|
3420
|
+
// Get or create the renderer
|
|
3421
|
+
renderer = createAndAttachRenderer(chart, this);
|
|
3422
|
+
chart.boosted = true;
|
|
3423
|
+
if (!this.visible) {
|
|
3424
|
+
return;
|
|
3425
|
+
}
|
|
3426
|
+
// If we are zooming out from SVG mode, destroy the graphics
|
|
3427
|
+
if (this.points || this.graph) {
|
|
3428
|
+
destroyGraphics(this);
|
|
3429
|
+
}
|
|
3430
|
+
// If we're rendering per. series we should create the marker groups
|
|
3431
|
+
// as usual.
|
|
3432
|
+
if (!BoostSeries_isChartSeriesBoosting(chart)) {
|
|
3433
|
+
// If all series were boosting, but are not anymore
|
|
3434
|
+
// restore private markerGroup
|
|
3435
|
+
if (this.markerGroup === chartBoost?.markerGroup) {
|
|
3436
|
+
this.markerGroup = void 0;
|
|
3437
|
+
}
|
|
3438
|
+
this.markerGroup = this.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');
|
|
3439
|
+
}
|
|
3440
|
+
else {
|
|
3441
|
+
// If series has a private markerGroup, remove that
|
|
3442
|
+
// and use common markerGroup
|
|
3443
|
+
if (this.markerGroup &&
|
|
3444
|
+
this.markerGroup !== chartBoost?.markerGroup) {
|
|
3445
|
+
this.markerGroup.destroy();
|
|
3446
|
+
}
|
|
3447
|
+
// Use a single group for the markers
|
|
3448
|
+
this.markerGroup = chartBoost?.markerGroup;
|
|
3449
|
+
// When switching from chart boosting mode, destroy redundant
|
|
3450
|
+
// series boosting targets
|
|
3451
|
+
if (seriesBoost && seriesBoost.target) {
|
|
3452
|
+
this.renderTarget =
|
|
3453
|
+
seriesBoost.target =
|
|
3454
|
+
seriesBoost.target.destroy();
|
|
3455
|
+
}
|
|
3456
|
+
}
|
|
3457
|
+
const points = this.points = [], addKDPoint = (clientX, plotY, i, percentage) => {
|
|
3458
|
+
const x = xDataFull ? xDataFull[cropStart + i] : false, pushPoint = (plotX) => {
|
|
3459
|
+
if (chart.inverted) {
|
|
3460
|
+
plotX = xAxis.len - plotX;
|
|
3461
|
+
plotY = yAxis.len - plotY;
|
|
3462
|
+
}
|
|
3463
|
+
points.push({
|
|
3464
|
+
destroy: noop,
|
|
3465
|
+
x: x,
|
|
3466
|
+
clientX: plotX,
|
|
3467
|
+
plotX: plotX,
|
|
3468
|
+
plotY: plotY,
|
|
3469
|
+
i: cropStart + i,
|
|
3470
|
+
percentage: percentage
|
|
3471
|
+
});
|
|
3472
|
+
};
|
|
3473
|
+
// We need to do ceil on the clientX to make things
|
|
3474
|
+
// snap to pixel values. The renderer will frequently
|
|
3475
|
+
// draw stuff on "sub-pixels".
|
|
3476
|
+
clientX = Math.ceil(clientX);
|
|
3477
|
+
// Shaves off about 60ms compared to repeated concatenation
|
|
3478
|
+
index = compareX ? clientX : clientX + ',' + plotY;
|
|
3479
|
+
// The k-d tree requires series points.
|
|
3480
|
+
// Reduce the amount of points, since the time to build the
|
|
3481
|
+
// tree increases exponentially.
|
|
3482
|
+
if (enableMouseTracking) {
|
|
3483
|
+
if (!pointTaken[index]) {
|
|
3484
|
+
pointTaken[index] = true;
|
|
3485
|
+
pushPoint(clientX);
|
|
3486
|
+
}
|
|
3487
|
+
else if (x === xDataFull[xDataFull.length - 1]) {
|
|
3488
|
+
// If the last point is on the same pixel as the last
|
|
3489
|
+
// tracked point, swap them. (#18856)
|
|
3490
|
+
points.length--;
|
|
3491
|
+
pushPoint(clientX);
|
|
3492
|
+
}
|
|
3493
|
+
}
|
|
3494
|
+
};
|
|
3495
|
+
// Do not start building while drawing
|
|
3496
|
+
this.buildKDTree = noop;
|
|
3497
|
+
BoostSeries_fireEvent(this, 'renderCanvas');
|
|
3498
|
+
if (this.is('line') &&
|
|
3499
|
+
lineWidth > 1 &&
|
|
3500
|
+
seriesBoost?.target &&
|
|
3501
|
+
chartBoost &&
|
|
3502
|
+
!chartBoost.lineWidthFilter) {
|
|
3503
|
+
chartBoost.lineWidthFilter = chart.renderer.definition({
|
|
3504
|
+
tagName: 'filter',
|
|
3505
|
+
children: [
|
|
3506
|
+
{
|
|
3507
|
+
tagName: 'feMorphology',
|
|
3508
|
+
attributes: {
|
|
3509
|
+
operator: 'dilate',
|
|
3510
|
+
radius: 0.25 * lineWidth
|
|
3511
|
+
}
|
|
3512
|
+
}
|
|
3513
|
+
],
|
|
3514
|
+
attributes: { id: 'linewidth' }
|
|
3515
|
+
});
|
|
3516
|
+
seriesBoost.target.attr({
|
|
3517
|
+
filter: 'url(#linewidth)'
|
|
3518
|
+
});
|
|
3519
|
+
}
|
|
3520
|
+
if (renderer) {
|
|
3521
|
+
allocateIfNotSeriesBoosting(renderer, this);
|
|
3522
|
+
renderer.pushSeries(this);
|
|
3523
|
+
// Perform the actual renderer if we're on series level
|
|
3524
|
+
renderIfNotSeriesBoosting(this);
|
|
3525
|
+
}
|
|
3526
|
+
/**
|
|
3527
|
+
* This builds the KD-tree
|
|
3528
|
+
* @private
|
|
3529
|
+
*/
|
|
3530
|
+
function processPoint(d, i) {
|
|
3531
|
+
const chartDestroyed = typeof chart.index === 'undefined';
|
|
3532
|
+
let x, y, clientX, plotY, percentage, low = false, isYInside = true;
|
|
3533
|
+
if (!defined(d)) {
|
|
3534
|
+
return true;
|
|
3535
|
+
}
|
|
3536
|
+
if (!chartDestroyed) {
|
|
3537
|
+
if (useRaw) {
|
|
3538
|
+
x = d[0];
|
|
3539
|
+
y = d[1];
|
|
3540
|
+
}
|
|
3541
|
+
else {
|
|
3542
|
+
x = d;
|
|
3543
|
+
y = yData[i] ?? nullYSubstitute ?? null;
|
|
3544
|
+
}
|
|
3545
|
+
// Resolve low and high for range series
|
|
3546
|
+
if (isRange) {
|
|
3547
|
+
if (useRaw) {
|
|
3548
|
+
y = d.slice(1, 3);
|
|
3549
|
+
}
|
|
3550
|
+
low = lowData[i];
|
|
3551
|
+
y = highData[i];
|
|
3552
|
+
}
|
|
3553
|
+
else if (isStacked) {
|
|
3554
|
+
x = d.x;
|
|
3555
|
+
y = d.stackY;
|
|
3556
|
+
low = y - d.y;
|
|
3557
|
+
percentage = d.percentage;
|
|
3558
|
+
}
|
|
3559
|
+
// Optimize for scatter zooming
|
|
3560
|
+
if (!requireSorting) {
|
|
3561
|
+
isYInside = (y || 0) >= yMin && y <= yMax;
|
|
3562
|
+
}
|
|
3563
|
+
if (y !== null && x >= xMin && x <= xMax && isYInside) {
|
|
3564
|
+
clientX = xAxis.toPixels(x, true);
|
|
3565
|
+
if (sampling) {
|
|
3566
|
+
if (typeof minI === 'undefined' ||
|
|
3567
|
+
clientX === lastClientX) {
|
|
3568
|
+
if (!isRange) {
|
|
3569
|
+
low = y;
|
|
3570
|
+
}
|
|
3571
|
+
if (typeof maxI === 'undefined' ||
|
|
3572
|
+
y > maxVal) {
|
|
3573
|
+
maxVal = y;
|
|
3574
|
+
maxI = i;
|
|
3575
|
+
}
|
|
3576
|
+
if (typeof minI === 'undefined' ||
|
|
3577
|
+
low < minVal) {
|
|
3578
|
+
minVal = low;
|
|
3579
|
+
minI = i;
|
|
3580
|
+
}
|
|
3581
|
+
}
|
|
3582
|
+
// Add points and reset
|
|
3583
|
+
if (!compareX || clientX !== lastClientX) {
|
|
3584
|
+
// `maxI` is number too:
|
|
3585
|
+
if (typeof minI !== 'undefined') {
|
|
3586
|
+
plotY =
|
|
3587
|
+
yAxis.toPixels(maxVal, true);
|
|
3588
|
+
yBottom =
|
|
3589
|
+
yAxis.toPixels(minVal, true);
|
|
3590
|
+
addKDPoint(clientX, plotY, maxI, percentage);
|
|
3591
|
+
if (yBottom !== plotY) {
|
|
3592
|
+
addKDPoint(clientX, yBottom, minI, percentage);
|
|
3593
|
+
}
|
|
3594
|
+
}
|
|
3595
|
+
minI = maxI = void 0;
|
|
3596
|
+
lastClientX = clientX;
|
|
3597
|
+
}
|
|
3598
|
+
}
|
|
3599
|
+
else {
|
|
3600
|
+
plotY = Math.ceil(yAxis.toPixels(y, true));
|
|
3601
|
+
addKDPoint(clientX, plotY, i, percentage);
|
|
3602
|
+
}
|
|
3603
|
+
}
|
|
3604
|
+
}
|
|
3605
|
+
return !chartDestroyed;
|
|
3606
|
+
}
|
|
3607
|
+
/**
|
|
3608
|
+
* @private
|
|
3609
|
+
*/
|
|
3610
|
+
const boostOptions = renderer.settings, doneProcessing = () => {
|
|
3611
|
+
BoostSeries_fireEvent(this, 'renderedCanvas');
|
|
3612
|
+
// Go back to prototype, ready to build
|
|
3613
|
+
delete this.buildKDTree;
|
|
3614
|
+
// Check that options exist, as async processing
|
|
3615
|
+
// could mean the series is removed at this point (#19895)
|
|
3616
|
+
if (this.options) {
|
|
3617
|
+
this.buildKDTree();
|
|
3618
|
+
}
|
|
3619
|
+
if (boostOptions.debug.timeKDTree) {
|
|
3620
|
+
console.timeEnd('kd tree building'); // eslint-disable-line no-console
|
|
3621
|
+
}
|
|
3622
|
+
};
|
|
3623
|
+
// Loop over the points to build the k-d tree - skip this if
|
|
3624
|
+
// exporting
|
|
3625
|
+
if (!chart.renderer.forExport) {
|
|
3626
|
+
if (boostOptions.debug.timeKDTree) {
|
|
3627
|
+
console.time('kd tree building'); // eslint-disable-line no-console
|
|
3628
|
+
}
|
|
3629
|
+
eachAsync(isStacked ?
|
|
3630
|
+
this.data.slice(cropStart) :
|
|
3631
|
+
(xData || rawData), processPoint, doneProcessing);
|
|
3632
|
+
}
|
|
3633
|
+
}
|
|
3634
|
+
/**
|
|
3635
|
+
* Used for treemap|heatmap.drawPoints
|
|
3636
|
+
* @private
|
|
3637
|
+
*/
|
|
3638
|
+
function wrapSeriesDrawPoints(proceed) {
|
|
3639
|
+
let enabled = true;
|
|
3640
|
+
if (this.chart.options && this.chart.options.boost) {
|
|
3641
|
+
enabled = typeof this.chart.options.boost.enabled === 'undefined' ?
|
|
3642
|
+
true :
|
|
3643
|
+
this.chart.options.boost.enabled;
|
|
3644
|
+
}
|
|
3645
|
+
if (!enabled || !this.boosted) {
|
|
3646
|
+
return proceed.call(this);
|
|
3647
|
+
}
|
|
3648
|
+
this.chart.boosted = true;
|
|
3649
|
+
// Make sure we have a valid OGL context
|
|
3650
|
+
const renderer = createAndAttachRenderer(this.chart, this);
|
|
3651
|
+
if (renderer) {
|
|
3652
|
+
allocateIfNotSeriesBoosting(renderer, this);
|
|
3653
|
+
renderer.pushSeries(this);
|
|
3654
|
+
}
|
|
3655
|
+
renderIfNotSeriesBoosting(this);
|
|
3656
|
+
}
|
|
3657
|
+
/**
|
|
3658
|
+
* Override a bunch of methods the same way. If the number of points is
|
|
3659
|
+
* below the threshold, run the original method. If not, check for a
|
|
3660
|
+
* canvas version or do nothing.
|
|
3661
|
+
*
|
|
3662
|
+
* Note that we're not overriding any of these for heatmaps.
|
|
3663
|
+
*/
|
|
3664
|
+
function wrapSeriesFunctions(seriesProto, seriesTypes, method) {
|
|
3665
|
+
/**
|
|
3666
|
+
* @private
|
|
3667
|
+
*/
|
|
3668
|
+
function branch(proceed) {
|
|
3669
|
+
const letItPass = this.options.stacking &&
|
|
3670
|
+
(method === 'translate' || method === 'generatePoints');
|
|
3671
|
+
if (!this.boosted ||
|
|
3672
|
+
letItPass ||
|
|
3673
|
+
!boostEnabled(this.chart) ||
|
|
3674
|
+
this.type === 'heatmap' ||
|
|
3675
|
+
this.type === 'treemap' ||
|
|
3676
|
+
!Boost_BoostableMap[this.type] ||
|
|
3677
|
+
this.options.boostThreshold === 0) {
|
|
3678
|
+
proceed.call(this);
|
|
3679
|
+
// Run canvas version of method, like renderCanvas(), if it exists
|
|
3680
|
+
}
|
|
3681
|
+
else if (method === 'render' && this.renderCanvas) {
|
|
3682
|
+
this.renderCanvas();
|
|
3683
|
+
}
|
|
3684
|
+
}
|
|
3685
|
+
wrap(seriesProto, method, branch);
|
|
3686
|
+
// Special case for some types, when translate method is already wrapped
|
|
3687
|
+
if (method === 'translate') {
|
|
3688
|
+
for (const type of [
|
|
3689
|
+
'column',
|
|
3690
|
+
'arearange',
|
|
3691
|
+
'columnrange',
|
|
3692
|
+
'heatmap',
|
|
3693
|
+
'treemap'
|
|
3694
|
+
]) {
|
|
3695
|
+
if (seriesTypes[type]) {
|
|
3696
|
+
wrap(seriesTypes[type].prototype, method, branch);
|
|
3697
|
+
}
|
|
3698
|
+
}
|
|
3699
|
+
}
|
|
3700
|
+
}
|
|
3701
|
+
/**
|
|
3702
|
+
* Do not compute extremes when min and max are set. If we use this in the
|
|
3703
|
+
* core, we can add the hook to hasExtremes to the methods directly.
|
|
3704
|
+
* @private
|
|
3705
|
+
*/
|
|
3706
|
+
function wrapSeriesGetExtremes(proceed) {
|
|
3707
|
+
if (this.boosted) {
|
|
3708
|
+
if (hasExtremes(this)) {
|
|
3709
|
+
return {};
|
|
3710
|
+
}
|
|
3711
|
+
if (this.xAxis.isPanning || this.yAxis.isPanning) {
|
|
3712
|
+
// Do not re-compute the extremes during panning, because looping
|
|
3713
|
+
// the data is expensive. The `this` contains the `dataMin` and
|
|
3714
|
+
// `dataMax` to use.
|
|
3715
|
+
return this;
|
|
3716
|
+
}
|
|
3717
|
+
}
|
|
3718
|
+
return proceed.apply(this, [].slice.call(arguments, 1));
|
|
3719
|
+
}
|
|
3720
|
+
/**
|
|
3721
|
+
* If the series is a heatmap or treemap, or if the series is not boosting
|
|
3722
|
+
* do the default behaviour. Otherwise, process if the series has no
|
|
3723
|
+
* extremes.
|
|
3724
|
+
* @private
|
|
3725
|
+
*/
|
|
3726
|
+
function wrapSeriesProcessData(proceed) {
|
|
3727
|
+
let dataToMeasure = this.options.data;
|
|
3728
|
+
if (boostEnabled(this.chart) && Boost_BoostableMap[this.type]) {
|
|
3729
|
+
const series = this,
|
|
3730
|
+
// Flag for code that should run for ScatterSeries and its
|
|
3731
|
+
// subclasses, apart from the enlisted exceptions.
|
|
3732
|
+
isScatter = series.is('scatter') &&
|
|
3733
|
+
!series.is('bubble') &&
|
|
3734
|
+
!series.is('treemap') &&
|
|
3735
|
+
!series.is('heatmap');
|
|
3736
|
+
// If there are no extremes given in the options, we also need to
|
|
3737
|
+
// process the data to read the data extremes. If this is a heatmap,
|
|
3738
|
+
// do default behaviour.
|
|
3739
|
+
if (
|
|
3740
|
+
// First pass with options.data:
|
|
3741
|
+
!getSeriesBoosting(series, dataToMeasure) ||
|
|
3742
|
+
isScatter ||
|
|
3743
|
+
series.is('treemap') ||
|
|
3744
|
+
// Use processedYData for the stack (#7481):
|
|
3745
|
+
series.options.stacking ||
|
|
3746
|
+
!hasExtremes(series, true)) {
|
|
3747
|
+
// Do nothing until the panning stops
|
|
3748
|
+
if (series.boosted && (series.xAxis?.isPanning || series.yAxis?.isPanning)) {
|
|
3749
|
+
return;
|
|
3750
|
+
}
|
|
3751
|
+
// Extra check for zoomed scatter data
|
|
3752
|
+
if (isScatter && series.yAxis.type !== 'treegrid') {
|
|
3753
|
+
scatterProcessData.call(series, arguments[1]);
|
|
3754
|
+
}
|
|
3755
|
+
else {
|
|
3756
|
+
proceed.apply(series, [].slice.call(arguments, 1));
|
|
3757
|
+
}
|
|
3758
|
+
dataToMeasure = series.getColumn('x', true);
|
|
3759
|
+
}
|
|
3760
|
+
// Set the isBoosting flag, second pass with processedXData to
|
|
3761
|
+
// see if we have zoomed.
|
|
3762
|
+
series.boosted = getSeriesBoosting(series, dataToMeasure);
|
|
3763
|
+
// Enter or exit boost mode
|
|
3764
|
+
if (series.boosted) {
|
|
3765
|
+
// Force turbo-mode:
|
|
3766
|
+
let firstPoint;
|
|
3767
|
+
if (series.options.data?.length) {
|
|
3768
|
+
firstPoint = series.getFirstValidPoint(series.options.data);
|
|
3769
|
+
if (!BoostSeries_isNumber(firstPoint) &&
|
|
3770
|
+
!isArray(firstPoint) &&
|
|
3771
|
+
!series.is('treemap')) {
|
|
3772
|
+
BoostSeries_error(12, false, series.chart);
|
|
3773
|
+
}
|
|
3774
|
+
}
|
|
3775
|
+
enterBoost(series);
|
|
3776
|
+
}
|
|
3777
|
+
else {
|
|
3778
|
+
exitBoost(series);
|
|
3779
|
+
}
|
|
3780
|
+
// The series type is not boostable
|
|
3781
|
+
}
|
|
3782
|
+
else {
|
|
3783
|
+
proceed.apply(this, [].slice.call(arguments, 1));
|
|
3784
|
+
}
|
|
3785
|
+
}
|
|
3786
|
+
/**
|
|
3787
|
+
* Return a point instance from the k-d-tree
|
|
3788
|
+
* @private
|
|
3789
|
+
*/
|
|
3790
|
+
function wrapSeriesSearchPoint(proceed) {
|
|
3791
|
+
const result = proceed.apply(this, [].slice.call(arguments, 1));
|
|
3792
|
+
if (this.boost && result) {
|
|
3793
|
+
return this.boost.getPoint(result);
|
|
3794
|
+
}
|
|
3795
|
+
return result;
|
|
3796
|
+
}
|
|
3797
|
+
/* *
|
|
3798
|
+
*
|
|
3799
|
+
* Default Export
|
|
3800
|
+
*
|
|
3801
|
+
* */
|
|
3802
|
+
const BoostSeries = {
|
|
3803
|
+
compose: BoostSeries_compose,
|
|
3804
|
+
destroyGraphics,
|
|
3805
|
+
eachAsync,
|
|
3806
|
+
getPoint
|
|
3807
|
+
};
|
|
3808
|
+
/* harmony default export */ const Boost_BoostSeries = (BoostSeries);
|
|
3809
|
+
|
|
3810
|
+
;// ./code/es-modules/Extensions/Boost/NamedColors.js
|
|
3811
|
+
/* *
|
|
3812
|
+
*
|
|
3813
|
+
* (c) 2019-2025 Highsoft AS
|
|
3814
|
+
*
|
|
3815
|
+
* Boost module: stripped-down renderer for higher performance
|
|
3816
|
+
*
|
|
3817
|
+
* License: highcharts.com/license
|
|
3818
|
+
*
|
|
3819
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
3820
|
+
*
|
|
3821
|
+
* */
|
|
3822
|
+
|
|
3823
|
+
/* *
|
|
3824
|
+
*
|
|
3825
|
+
* Constants
|
|
3826
|
+
*
|
|
3827
|
+
* */
|
|
3828
|
+
// Register color names since GL can't render those directly.
|
|
3829
|
+
// TODO: When supporting modern syntax, make this a named export
|
|
3830
|
+
const defaultHTMLColorMap = {
|
|
3831
|
+
aliceblue: '#f0f8ff',
|
|
3832
|
+
antiquewhite: '#faebd7',
|
|
3833
|
+
aqua: '#00ffff',
|
|
3834
|
+
aquamarine: '#7fffd4',
|
|
3835
|
+
azure: '#f0ffff',
|
|
3836
|
+
beige: '#f5f5dc',
|
|
3837
|
+
bisque: '#ffe4c4',
|
|
3838
|
+
blanchedalmond: '#ffebcd',
|
|
3839
|
+
blue: '#0000ff',
|
|
3840
|
+
blueviolet: '#8a2be2',
|
|
3841
|
+
brown: '#a52a2a',
|
|
3842
|
+
burlywood: '#deb887',
|
|
3843
|
+
cadetblue: '#5f9ea0',
|
|
3844
|
+
chartreuse: '#7fff00',
|
|
3845
|
+
chocolate: '#d2691e',
|
|
3846
|
+
coral: '#ff7f50',
|
|
3847
|
+
cornflowerblue: '#6495ed',
|
|
3848
|
+
cornsilk: '#fff8dc',
|
|
3849
|
+
crimson: '#dc143c',
|
|
3850
|
+
cyan: '#00ffff',
|
|
3851
|
+
darkblue: '#00008b',
|
|
3852
|
+
darkcyan: '#008b8b',
|
|
3853
|
+
darkgoldenrod: '#b8860b',
|
|
3854
|
+
darkgray: '#a9a9a9',
|
|
3855
|
+
darkgreen: '#006400',
|
|
3856
|
+
darkkhaki: '#bdb76b',
|
|
3857
|
+
darkmagenta: '#8b008b',
|
|
3858
|
+
darkolivegreen: '#556b2f',
|
|
3859
|
+
darkorange: '#ff8c00',
|
|
3860
|
+
darkorchid: '#9932cc',
|
|
3861
|
+
darkred: '#8b0000',
|
|
3862
|
+
darksalmon: '#e9967a',
|
|
3863
|
+
darkseagreen: '#8fbc8f',
|
|
3864
|
+
darkslateblue: '#483d8b',
|
|
3865
|
+
darkslategray: '#2f4f4f',
|
|
3866
|
+
darkturquoise: '#00ced1',
|
|
3867
|
+
darkviolet: '#9400d3',
|
|
3868
|
+
deeppink: '#ff1493',
|
|
3869
|
+
deepskyblue: '#00bfff',
|
|
3870
|
+
dimgray: '#696969',
|
|
3871
|
+
dodgerblue: '#1e90ff',
|
|
3872
|
+
feldspar: '#d19275',
|
|
3873
|
+
firebrick: '#b22222',
|
|
3874
|
+
floralwhite: '#fffaf0',
|
|
3875
|
+
forestgreen: '#228b22',
|
|
3876
|
+
fuchsia: '#ff00ff',
|
|
3877
|
+
gainsboro: '#dcdcdc',
|
|
3878
|
+
ghostwhite: '#f8f8ff',
|
|
3879
|
+
gold: '#ffd700',
|
|
3880
|
+
goldenrod: '#daa520',
|
|
3881
|
+
gray: '#808080',
|
|
3882
|
+
grey: '#808080',
|
|
3883
|
+
green: '#008000',
|
|
3884
|
+
greenyellow: '#adff2f',
|
|
3885
|
+
honeydew: '#f0fff0',
|
|
3886
|
+
hotpink: '#ff69b4',
|
|
3887
|
+
indianred: '#cd5c5c',
|
|
3888
|
+
indigo: '#4b0082',
|
|
3889
|
+
ivory: '#fffff0',
|
|
3890
|
+
khaki: '#f0e68c',
|
|
3891
|
+
lavender: '#e6e6fa',
|
|
3892
|
+
lavenderblush: '#fff0f5',
|
|
3893
|
+
lawngreen: '#7cfc00',
|
|
3894
|
+
lemonchiffon: '#fffacd',
|
|
3895
|
+
lightblue: '#add8e6',
|
|
3896
|
+
lightcoral: '#f08080',
|
|
3897
|
+
lightcyan: '#e0ffff',
|
|
3898
|
+
lightgoldenrodyellow: '#fafad2',
|
|
3899
|
+
lightgrey: '#d3d3d3',
|
|
3900
|
+
lightgreen: '#90ee90',
|
|
3901
|
+
lightpink: '#ffb6c1',
|
|
3902
|
+
lightsalmon: '#ffa07a',
|
|
3903
|
+
lightseagreen: '#20b2aa',
|
|
3904
|
+
lightskyblue: '#87cefa',
|
|
3905
|
+
lightslateblue: '#8470ff',
|
|
3906
|
+
lightslategray: '#778899',
|
|
3907
|
+
lightsteelblue: '#b0c4de',
|
|
3908
|
+
lightyellow: '#ffffe0',
|
|
3909
|
+
lime: '#00ff00',
|
|
3910
|
+
limegreen: '#32cd32',
|
|
3911
|
+
linen: '#faf0e6',
|
|
3912
|
+
magenta: '#ff00ff',
|
|
3913
|
+
maroon: '#800000',
|
|
3914
|
+
mediumaquamarine: '#66cdaa',
|
|
3915
|
+
mediumblue: '#0000cd',
|
|
3916
|
+
mediumorchid: '#ba55d3',
|
|
3917
|
+
mediumpurple: '#9370d8',
|
|
3918
|
+
mediumseagreen: '#3cb371',
|
|
3919
|
+
mediumslateblue: '#7b68ee',
|
|
3920
|
+
mediumspringgreen: '#00fa9a',
|
|
3921
|
+
mediumturquoise: '#48d1cc',
|
|
3922
|
+
mediumvioletred: '#c71585',
|
|
3923
|
+
midnightblue: '#191970',
|
|
3924
|
+
mintcream: '#f5fffa',
|
|
3925
|
+
mistyrose: '#ffe4e1',
|
|
3926
|
+
moccasin: '#ffe4b5',
|
|
3927
|
+
navajowhite: '#ffdead',
|
|
3928
|
+
navy: '#000080',
|
|
3929
|
+
oldlace: '#fdf5e6',
|
|
3930
|
+
olive: '#808000',
|
|
3931
|
+
olivedrab: '#6b8e23',
|
|
3932
|
+
orange: '#ffa500',
|
|
3933
|
+
orangered: '#ff4500',
|
|
3934
|
+
orchid: '#da70d6',
|
|
3935
|
+
palegoldenrod: '#eee8aa',
|
|
3936
|
+
palegreen: '#98fb98',
|
|
3937
|
+
paleturquoise: '#afeeee',
|
|
3938
|
+
palevioletred: '#d87093',
|
|
3939
|
+
papayawhip: '#ffefd5',
|
|
3940
|
+
peachpuff: '#ffdab9',
|
|
3941
|
+
peru: '#cd853f',
|
|
3942
|
+
pink: '#ffc0cb',
|
|
3943
|
+
plum: '#dda0dd',
|
|
3944
|
+
powderblue: '#b0e0e6',
|
|
3945
|
+
purple: '#800080',
|
|
3946
|
+
red: '#ff0000',
|
|
3947
|
+
rosybrown: '#bc8f8f',
|
|
3948
|
+
royalblue: '#4169e1',
|
|
3949
|
+
saddlebrown: '#8b4513',
|
|
3950
|
+
salmon: '#fa8072',
|
|
3951
|
+
sandybrown: '#f4a460',
|
|
3952
|
+
seagreen: '#2e8b57',
|
|
3953
|
+
seashell: '#fff5ee',
|
|
3954
|
+
sienna: '#a0522d',
|
|
3955
|
+
silver: '#c0c0c0',
|
|
3956
|
+
skyblue: '#87ceeb',
|
|
3957
|
+
slateblue: '#6a5acd',
|
|
3958
|
+
slategray: '#708090',
|
|
3959
|
+
snow: '#fffafa',
|
|
3960
|
+
springgreen: '#00ff7f',
|
|
3961
|
+
steelblue: '#4682b4',
|
|
3962
|
+
tan: '#d2b48c',
|
|
3963
|
+
teal: '#008080',
|
|
3964
|
+
thistle: '#d8bfd8',
|
|
3965
|
+
tomato: '#ff6347',
|
|
3966
|
+
turquoise: '#40e0d0',
|
|
3967
|
+
violet: '#ee82ee',
|
|
3968
|
+
violetred: '#d02090',
|
|
3969
|
+
wheat: '#f5deb3',
|
|
3970
|
+
whitesmoke: '#f5f5f5',
|
|
3971
|
+
yellow: '#ffff00',
|
|
3972
|
+
yellowgreen: '#9acd32'
|
|
3973
|
+
};
|
|
3974
|
+
/* *
|
|
3975
|
+
*
|
|
3976
|
+
* Default Export
|
|
3977
|
+
*
|
|
3978
|
+
* */
|
|
3979
|
+
const namedColors = {
|
|
3980
|
+
defaultHTMLColorMap
|
|
3981
|
+
};
|
|
3982
|
+
/* harmony default export */ const NamedColors = (namedColors);
|
|
3983
|
+
|
|
3984
|
+
;// ./code/es-modules/Extensions/Boost/Boost.js
|
|
3985
|
+
/* *
|
|
3986
|
+
*
|
|
3987
|
+
* (c) 2019-2025 Highsoft AS
|
|
3988
|
+
*
|
|
3989
|
+
* Boost module: stripped-down renderer for higher performance
|
|
3990
|
+
*
|
|
3991
|
+
* License: highcharts.com/license
|
|
3992
|
+
*
|
|
3993
|
+
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
3994
|
+
*
|
|
3995
|
+
* */
|
|
3996
|
+
|
|
3997
|
+
|
|
3998
|
+
|
|
3999
|
+
|
|
4000
|
+
const { doc: Boost_doc, win: Boost_win } = (external_highcharts_src_js_default_default());
|
|
4001
|
+
|
|
4002
|
+
|
|
4003
|
+
const { addEvent: Boost_addEvent, error: Boost_error } = (external_highcharts_src_js_default_default());
|
|
4004
|
+
/* *
|
|
4005
|
+
*
|
|
4006
|
+
* Constants
|
|
4007
|
+
*
|
|
4008
|
+
* */
|
|
4009
|
+
const Boost_contexts = [
|
|
4010
|
+
'webgl',
|
|
4011
|
+
'experimental-webgl',
|
|
4012
|
+
'moz-webgl',
|
|
4013
|
+
'webkit-3d'
|
|
4014
|
+
];
|
|
4015
|
+
/* *
|
|
4016
|
+
*
|
|
4017
|
+
* Functions
|
|
4018
|
+
*
|
|
4019
|
+
* */
|
|
4020
|
+
/**
|
|
4021
|
+
* @private
|
|
4022
|
+
*/
|
|
4023
|
+
function Boost_compose(ChartClass, AxisClass, SeriesClass, seriesTypes, PointClass, ColorClass) {
|
|
4024
|
+
const wglMode = hasWebGLSupport();
|
|
4025
|
+
if (!wglMode) {
|
|
4026
|
+
if (typeof (external_highcharts_src_js_default_default()).initCanvasBoost !== 'undefined') {
|
|
4027
|
+
// Fallback to canvas boost
|
|
4028
|
+
external_highcharts_src_js_default_default().initCanvasBoost();
|
|
4029
|
+
}
|
|
4030
|
+
else {
|
|
4031
|
+
Boost_error(26);
|
|
4032
|
+
}
|
|
4033
|
+
}
|
|
4034
|
+
if (ColorClass && !ColorClass.names.lightgoldenrodyellow) {
|
|
4035
|
+
ColorClass.names = {
|
|
4036
|
+
...ColorClass.names,
|
|
4037
|
+
...NamedColors.defaultHTMLColorMap
|
|
4038
|
+
};
|
|
4039
|
+
}
|
|
4040
|
+
// WebGL support is alright, and we're good to go.
|
|
4041
|
+
Boost_BoostChart.compose(ChartClass, wglMode);
|
|
4042
|
+
Boost_BoostSeries.compose(SeriesClass, seriesTypes, PointClass, wglMode);
|
|
4043
|
+
// Handle zooming by touch/pinch or mouse wheel. Assume that boosted charts
|
|
4044
|
+
// are too slow for a live preview while dragging. Instead, just scale the
|
|
4045
|
+
// div while `isPanning`.
|
|
4046
|
+
Boost_addEvent(AxisClass, 'setExtremes', function (e) {
|
|
4047
|
+
// Render targets can be either chart-wide or series-specific
|
|
4048
|
+
const renderTargets = [this.chart, ...this.series]
|
|
4049
|
+
.map((item) => item.renderTarget)
|
|
4050
|
+
.filter(Boolean);
|
|
4051
|
+
for (const renderTarget of renderTargets) {
|
|
4052
|
+
const { horiz, pos } = this, scaleKey = horiz ? 'scaleX' : 'scaleY', translateKey = horiz ? 'translateX' : 'translateY', lastScale = renderTarget?.[scaleKey] ?? 1;
|
|
4053
|
+
let scale = 1, translate = 0, opacity = 1, filter = 'none';
|
|
4054
|
+
if (this.isPanning) {
|
|
4055
|
+
scale = (e.scale ?? 1) * lastScale;
|
|
4056
|
+
translate = (renderTarget?.[translateKey] || 0) -
|
|
4057
|
+
scale * (e.move || 0) +
|
|
4058
|
+
lastScale * pos -
|
|
4059
|
+
scale * pos;
|
|
4060
|
+
opacity = 0.7;
|
|
4061
|
+
filter = 'blur(3px)';
|
|
4062
|
+
}
|
|
4063
|
+
renderTarget
|
|
4064
|
+
?.attr({
|
|
4065
|
+
[scaleKey]: scale,
|
|
4066
|
+
[translateKey]: translate
|
|
4067
|
+
})
|
|
4068
|
+
.css({
|
|
4069
|
+
transition: '250ms filter, 250ms opacity',
|
|
4070
|
+
filter,
|
|
4071
|
+
opacity
|
|
4072
|
+
});
|
|
4073
|
+
}
|
|
4074
|
+
});
|
|
4075
|
+
}
|
|
4076
|
+
/**
|
|
4077
|
+
* Returns true if the current browser supports WebGL.
|
|
4078
|
+
*
|
|
4079
|
+
* @requires modules/boost
|
|
4080
|
+
*
|
|
4081
|
+
* @function Highcharts.hasWebGLSupport
|
|
4082
|
+
*
|
|
4083
|
+
* @return {boolean}
|
|
4084
|
+
* `true` if the browser supports WebGL.
|
|
4085
|
+
*/
|
|
4086
|
+
function hasWebGLSupport() {
|
|
4087
|
+
let canvas, gl = false;
|
|
4088
|
+
if (typeof Boost_win.WebGLRenderingContext !== 'undefined') {
|
|
4089
|
+
canvas = Boost_doc.createElement('canvas');
|
|
4090
|
+
for (let i = 0; i < Boost_contexts.length; ++i) {
|
|
4091
|
+
try {
|
|
4092
|
+
gl = canvas.getContext(Boost_contexts[i]);
|
|
4093
|
+
if (typeof gl !== 'undefined' && gl !== null) {
|
|
4094
|
+
return true;
|
|
4095
|
+
}
|
|
4096
|
+
}
|
|
4097
|
+
catch (e) {
|
|
4098
|
+
// Silent error
|
|
4099
|
+
}
|
|
4100
|
+
}
|
|
4101
|
+
}
|
|
4102
|
+
return false;
|
|
4103
|
+
}
|
|
4104
|
+
/* *
|
|
4105
|
+
*
|
|
4106
|
+
* Default Export
|
|
4107
|
+
*
|
|
4108
|
+
* */
|
|
4109
|
+
const Boost = {
|
|
4110
|
+
compose: Boost_compose,
|
|
4111
|
+
hasWebGLSupport
|
|
4112
|
+
};
|
|
4113
|
+
/* harmony default export */ const Boost_Boost = (Boost);
|
|
4114
|
+
/* *
|
|
4115
|
+
*
|
|
4116
|
+
* API Options
|
|
4117
|
+
*
|
|
4118
|
+
* */
|
|
4119
|
+
/**
|
|
4120
|
+
* Options for the Boost module. The Boost module allows certain series types
|
|
4121
|
+
* to be rendered by WebGL instead of the default SVG. This allows hundreds of
|
|
4122
|
+
* thousands of data points to be rendered in milliseconds. In addition to the
|
|
4123
|
+
* WebGL rendering it saves time by skipping processing and inspection of the
|
|
4124
|
+
* data wherever possible. This introduces some limitations to what features are
|
|
4125
|
+
* available in boost mode. See [the docs](
|
|
4126
|
+
* https://www.highcharts.com/docs/advanced-chart-features/boost-module) for
|
|
4127
|
+
* details.
|
|
4128
|
+
*
|
|
4129
|
+
* In addition to the global `boost` option, each series has a
|
|
4130
|
+
* [boostThreshold](#plotOptions.series.boostThreshold) that defines when the
|
|
4131
|
+
* boost should kick in.
|
|
4132
|
+
*
|
|
4133
|
+
* Requires the `modules/boost.js` module.
|
|
4134
|
+
*
|
|
4135
|
+
* @sample {highstock} highcharts/boost/line-series-heavy-stock
|
|
4136
|
+
* Stock chart
|
|
4137
|
+
* @sample {highstock} highcharts/boost/line-series-heavy-dynamic
|
|
4138
|
+
* Dynamic stock chart
|
|
4139
|
+
* @sample highcharts/boost/line
|
|
4140
|
+
* Line chart
|
|
4141
|
+
* @sample highcharts/boost/line-series-heavy
|
|
4142
|
+
* Line chart with hundreds of series
|
|
4143
|
+
* @sample highcharts/boost/scatter
|
|
4144
|
+
* Scatter chart
|
|
4145
|
+
* @sample highcharts/boost/area
|
|
4146
|
+
* Area chart
|
|
4147
|
+
* @sample highcharts/boost/arearange
|
|
4148
|
+
* Area range chart
|
|
4149
|
+
* @sample highcharts/boost/column
|
|
4150
|
+
* Column chart
|
|
4151
|
+
* @sample highcharts/boost/columnrange
|
|
4152
|
+
* Column range chart
|
|
4153
|
+
* @sample highcharts/boost/bubble
|
|
4154
|
+
* Bubble chart
|
|
4155
|
+
* @sample highcharts/boost/heatmap
|
|
4156
|
+
* Heat map
|
|
4157
|
+
* @sample highcharts/boost/treemap
|
|
4158
|
+
* Tree map
|
|
4159
|
+
*
|
|
4160
|
+
* @product highcharts highstock
|
|
4161
|
+
* @requires modules/boost
|
|
4162
|
+
* @apioption boost
|
|
4163
|
+
*/
|
|
4164
|
+
/**
|
|
4165
|
+
* The chart will be boosted, if one of the series crosses its threshold and all
|
|
4166
|
+
* the series in the chart can be boosted.
|
|
4167
|
+
*
|
|
4168
|
+
* @type {boolean}
|
|
4169
|
+
* @default true
|
|
4170
|
+
* @apioption boost.allowForce
|
|
4171
|
+
*/
|
|
4172
|
+
/**
|
|
4173
|
+
* Enable or disable boost on a chart.
|
|
4174
|
+
*
|
|
4175
|
+
* @type {boolean}
|
|
4176
|
+
* @default true
|
|
4177
|
+
* @apioption boost.enabled
|
|
4178
|
+
*/
|
|
4179
|
+
/**
|
|
4180
|
+
* Debugging options for boost.
|
|
4181
|
+
* Useful for benchmarking, and general timing.
|
|
4182
|
+
*
|
|
4183
|
+
* @apioption boost.debug
|
|
4184
|
+
*/
|
|
4185
|
+
/**
|
|
4186
|
+
* Time the series rendering.
|
|
4187
|
+
*
|
|
4188
|
+
* This outputs the time spent on actual rendering in the console when
|
|
4189
|
+
* set to true.
|
|
4190
|
+
*
|
|
4191
|
+
* @type {boolean}
|
|
4192
|
+
* @default false
|
|
4193
|
+
* @apioption boost.debug.timeRendering
|
|
4194
|
+
*/
|
|
4195
|
+
/**
|
|
4196
|
+
* Time the series processing.
|
|
4197
|
+
*
|
|
4198
|
+
* This outputs the time spent on transforming the series data to
|
|
4199
|
+
* vertex buffers when set to true.
|
|
4200
|
+
*
|
|
4201
|
+
* @type {boolean}
|
|
4202
|
+
* @default false
|
|
4203
|
+
* @apioption boost.debug.timeSeriesProcessing
|
|
4204
|
+
*/
|
|
4205
|
+
/**
|
|
4206
|
+
* Time the WebGL setup.
|
|
4207
|
+
*
|
|
4208
|
+
* This outputs the time spent on setting up the WebGL context,
|
|
4209
|
+
* creating shaders, and textures.
|
|
4210
|
+
*
|
|
4211
|
+
* @type {boolean}
|
|
4212
|
+
* @default false
|
|
4213
|
+
* @apioption boost.debug.timeSetup
|
|
4214
|
+
*/
|
|
4215
|
+
/**
|
|
4216
|
+
* Time the building of the k-d tree.
|
|
4217
|
+
*
|
|
4218
|
+
* This outputs the time spent building the k-d tree used for
|
|
4219
|
+
* markers etc.
|
|
4220
|
+
*
|
|
4221
|
+
* Note that the k-d tree is built async, and runs post-rendering.
|
|
4222
|
+
* Following, it does not affect the performance of the rendering itself.
|
|
4223
|
+
*
|
|
4224
|
+
* @type {boolean}
|
|
4225
|
+
* @default false
|
|
4226
|
+
* @apioption boost.debug.timeKDTree
|
|
4227
|
+
*/
|
|
4228
|
+
/**
|
|
4229
|
+
* Show the number of points skipped through culling.
|
|
4230
|
+
*
|
|
4231
|
+
* When set to true, the number of points skipped in series processing
|
|
4232
|
+
* is outputted. Points are skipped if they are closer than 1 pixel from
|
|
4233
|
+
* each other.
|
|
4234
|
+
*
|
|
4235
|
+
* @type {boolean}
|
|
4236
|
+
* @default false
|
|
4237
|
+
* @apioption boost.debug.showSkipSummary
|
|
4238
|
+
*/
|
|
4239
|
+
/**
|
|
4240
|
+
* Time the WebGL to SVG buffer copy
|
|
4241
|
+
*
|
|
4242
|
+
* After rendering, the result is copied to an image which is injected
|
|
4243
|
+
* into the SVG.
|
|
4244
|
+
*
|
|
4245
|
+
* If this property is set to true, the time it takes for the buffer copy
|
|
4246
|
+
* to complete is outputted.
|
|
4247
|
+
*
|
|
4248
|
+
* @type {boolean}
|
|
4249
|
+
* @default false
|
|
4250
|
+
* @apioption boost.debug.timeBufferCopy
|
|
4251
|
+
*/
|
|
4252
|
+
/**
|
|
4253
|
+
* The pixel ratio for the WebGL content. If 0, the `window.devicePixelRatio` is
|
|
4254
|
+
* used. This ensures sharp graphics on high DPI displays like Apple's Retina,
|
|
4255
|
+
* as well as when a page is zoomed.
|
|
4256
|
+
*
|
|
4257
|
+
* The default is left at 1 for now, as this is a new feature that has the
|
|
4258
|
+
* potential to break existing setups. Over time, when it has been battle
|
|
4259
|
+
* tested, the intention is to set it to 0 by default.
|
|
4260
|
+
*
|
|
4261
|
+
* Another use case for this option is to set it to 2 in order to make exported
|
|
4262
|
+
* and upscaled charts render sharp.
|
|
4263
|
+
*
|
|
4264
|
+
* One limitation when using the `pixelRatio` is that the line width of graphs
|
|
4265
|
+
* is scaled down. Since the Boost module currently can only render 1px line
|
|
4266
|
+
* widths, it is scaled down to a thin 0.5 pixels on a Retina display.
|
|
4267
|
+
*
|
|
4268
|
+
* @sample highcharts/boost/line-devicepixelratio
|
|
4269
|
+
* Enable the `devicePixelRatio`
|
|
4270
|
+
* @sample highcharts/boost/line-export-pixelratio
|
|
4271
|
+
* Sharper graphics in export
|
|
4272
|
+
*
|
|
4273
|
+
* @type {number}
|
|
4274
|
+
* @since 10.0.0
|
|
4275
|
+
* @default 1
|
|
4276
|
+
* @apioption boost.pixelRatio
|
|
4277
|
+
*/
|
|
4278
|
+
/**
|
|
4279
|
+
* Set the series threshold for when the boost should kick in globally.
|
|
4280
|
+
*
|
|
4281
|
+
* Setting to e.g. 20 will cause the whole chart to enter boost mode
|
|
4282
|
+
* if there are 20 or more series active. When the chart is in boost mode,
|
|
4283
|
+
* every series in it will be rendered to a common canvas. This offers
|
|
4284
|
+
* a significant speed improvement in charts with a very high
|
|
4285
|
+
* amount of series.
|
|
4286
|
+
*
|
|
4287
|
+
* @type {number}
|
|
4288
|
+
* @default 50
|
|
4289
|
+
* @apioption boost.seriesThreshold
|
|
4290
|
+
*/
|
|
4291
|
+
/**
|
|
4292
|
+
* Enable or disable GPU translations. GPU translations are faster than doing
|
|
4293
|
+
* the translation in JavaScript.
|
|
4294
|
+
*
|
|
4295
|
+
* This option may cause rendering issues with certain datasets.
|
|
4296
|
+
* Namely, if your dataset has large numbers with small increments (such as
|
|
4297
|
+
* timestamps), it won't work correctly. This is due to floating point
|
|
4298
|
+
* precision.
|
|
4299
|
+
*
|
|
4300
|
+
* @type {boolean}
|
|
4301
|
+
* @default false
|
|
4302
|
+
* @apioption boost.useGPUTranslations
|
|
4303
|
+
*/
|
|
4304
|
+
/**
|
|
4305
|
+
* Enable or disable pre-allocation of vertex buffers.
|
|
4306
|
+
*
|
|
4307
|
+
* Enabling this will make it so that the binary data arrays required for
|
|
4308
|
+
* storing the series data will be allocated prior to transforming the data
|
|
4309
|
+
* to a WebGL-compatible format.
|
|
4310
|
+
*
|
|
4311
|
+
* This saves a copy operation on the order of O(n) and so is significantly more
|
|
4312
|
+
* performant. However, this is currently an experimental option, and may cause
|
|
4313
|
+
* visual artifacts with some datasets.
|
|
4314
|
+
*
|
|
4315
|
+
* As such, care should be taken when using this setting to make sure that
|
|
4316
|
+
* it doesn't cause any rendering glitches with the given use-case.
|
|
4317
|
+
*
|
|
4318
|
+
* @type {boolean}
|
|
4319
|
+
* @default false
|
|
4320
|
+
* @apioption boost.usePreallocated
|
|
4321
|
+
*/
|
|
4322
|
+
/**
|
|
4323
|
+
* Set the point threshold for when a series should enter boost mode.
|
|
4324
|
+
*
|
|
4325
|
+
* Setting it to e.g. 2000 will cause the series to enter boost mode when there
|
|
4326
|
+
* are 2000 or more points in the series.
|
|
4327
|
+
*
|
|
4328
|
+
* To disable boosting on the series, set the `boostThreshold` to 0. Setting it
|
|
4329
|
+
* to 1 will force boosting.
|
|
4330
|
+
*
|
|
4331
|
+
* Note that the [cropThreshold](plotOptions.series.cropThreshold) also affects
|
|
4332
|
+
* this setting. When zooming in on a series that has fewer points than the
|
|
4333
|
+
* `cropThreshold`, all points are rendered although outside the visible plot
|
|
4334
|
+
* area, and the `boostThreshold` won't take effect.
|
|
4335
|
+
*
|
|
4336
|
+
* @type {number}
|
|
4337
|
+
* @default 5000
|
|
4338
|
+
* @requires modules/boost
|
|
4339
|
+
* @apioption plotOptions.series.boostThreshold
|
|
4340
|
+
*/
|
|
4341
|
+
/**
|
|
4342
|
+
* Sets the color blending in the boost module.
|
|
4343
|
+
*
|
|
4344
|
+
* @type {string}
|
|
4345
|
+
* @default undefined
|
|
4346
|
+
* @validvalue ["add", "multiply", "darken"]
|
|
4347
|
+
* @requires modules/boost
|
|
4348
|
+
* @apioption plotOptions.series.boostBlending
|
|
4349
|
+
*/
|
|
4350
|
+
''; // Adds doclets above to transpiled file
|
|
4351
|
+
|
|
4352
|
+
;// ./code/es-modules/masters/modules/boost.src.js
|
|
4353
|
+
|
|
4354
|
+
|
|
4355
|
+
|
|
4356
|
+
|
|
4357
|
+
const G = (external_highcharts_src_js_default_default());
|
|
4358
|
+
G.hasWebGLSupport = Boost_Boost.hasWebGLSupport;
|
|
4359
|
+
Boost_Boost.compose(G.Chart, G.Axis, G.Series, G.seriesTypes, G.Point, G.Color);
|
|
4360
|
+
/* harmony default export */ const boost_src = ((external_highcharts_src_js_default_default()));
|
|
4361
|
+
|
|
4362
|
+
export { boost_src as default };
|