stream-charts 1.2.0 → 2.0.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/LICENSE +21 -0
- package/README.md +809 -1022
- package/changes.md +40 -0
- package/dist/app/charts/Chart.d.ts +35 -139
- package/dist/app/charts/Chart.d.ts.map +1 -0
- package/dist/app/charts/Chart.js +74 -65
- package/dist/app/charts/Chart.js.map +1 -1
- package/dist/app/charts/axes/AxesState.d.ts +26 -18
- package/dist/app/charts/axes/AxesState.d.ts.map +1 -0
- package/dist/app/charts/axes/AxesState.js +26 -24
- package/dist/app/charts/axes/AxesState.js.map +1 -1
- package/dist/app/charts/axes/AxisInterval.d.ts +44 -26
- package/dist/app/charts/axes/AxisInterval.d.ts.map +1 -0
- package/dist/app/charts/axes/AxisInterval.js +48 -29
- package/dist/app/charts/axes/AxisInterval.js.map +1 -1
- package/dist/app/charts/axes/BaseAxisRange.d.ts +46 -22
- package/dist/app/charts/axes/BaseAxisRange.d.ts.map +1 -0
- package/dist/app/charts/axes/BaseAxisRange.js +17 -12
- package/dist/app/charts/axes/BaseAxisRange.js.map +1 -1
- package/dist/app/charts/axes/ContinuousAxis.d.ts +47 -6
- package/dist/app/charts/axes/ContinuousAxis.d.ts.map +1 -0
- package/dist/app/charts/axes/ContinuousAxis.js +160 -27
- package/dist/app/charts/axes/ContinuousAxis.js.map +1 -1
- package/dist/app/charts/axes/ContinuousAxisRange.d.ts +29 -10
- package/dist/app/charts/axes/ContinuousAxisRange.d.ts.map +1 -0
- package/dist/app/charts/axes/ContinuousAxisRange.js +29 -11
- package/dist/app/charts/axes/ContinuousAxisRange.js.map +1 -1
- package/dist/app/charts/axes/EmptyAxis.d.ts +5 -2
- package/dist/app/charts/axes/EmptyAxis.d.ts.map +1 -0
- package/dist/app/charts/axes/EmptyAxis.js +30 -9
- package/dist/app/charts/axes/EmptyAxis.js.map +1 -1
- package/dist/app/charts/axes/OrdinalAxis.d.ts +5 -3
- package/dist/app/charts/axes/OrdinalAxis.d.ts.map +1 -0
- package/dist/app/charts/axes/OrdinalAxis.js +39 -16
- package/dist/app/charts/axes/OrdinalAxis.js.map +1 -1
- package/dist/app/charts/axes/OrdinalAxisRange.d.ts +76 -13
- package/dist/app/charts/axes/OrdinalAxisRange.d.ts.map +1 -0
- package/dist/app/charts/axes/OrdinalAxisRange.js +95 -16
- package/dist/app/charts/axes/OrdinalAxisRange.js.map +1 -1
- package/dist/app/charts/axes/autoScale.d.ts +111 -0
- package/dist/app/charts/axes/autoScale.d.ts.map +1 -0
- package/dist/app/charts/axes/autoScale.js +188 -0
- package/dist/app/charts/axes/autoScale.js.map +1 -0
- package/dist/app/charts/axes/axes.d.ts +273 -150
- package/dist/app/charts/axes/axes.d.ts.map +1 -0
- package/dist/app/charts/axes/axes.js +808 -583
- package/dist/app/charts/axes/axes.js.map +1 -1
- package/dist/app/charts/d3types.d.ts +40 -11
- package/dist/app/charts/d3types.d.ts.map +1 -0
- package/dist/app/charts/d3types.js +3 -0
- package/dist/app/charts/d3types.js.map +1 -1
- package/dist/app/charts/datasources/StreamingDataSource.d.ts +149 -0
- package/dist/app/charts/datasources/StreamingDataSource.d.ts.map +1 -0
- package/dist/app/charts/datasources/StreamingDataSource.js +110 -0
- package/dist/app/charts/datasources/StreamingDataSource.js.map +1 -0
- package/dist/app/charts/datasources/iteratesDataSource.d.ts +73 -0
- package/dist/app/charts/datasources/iteratesDataSource.d.ts.map +1 -0
- package/dist/app/charts/datasources/iteratesDataSource.js +87 -0
- package/dist/app/charts/datasources/iteratesDataSource.js.map +1 -0
- package/dist/app/charts/datasources/ordinalDataSource.d.ts +75 -0
- package/dist/app/charts/datasources/ordinalDataSource.d.ts.map +1 -0
- package/dist/app/charts/datasources/ordinalDataSource.js +135 -0
- package/dist/app/charts/datasources/ordinalDataSource.js.map +1 -0
- package/dist/app/charts/datasources/outlierDataSource.d.ts +53 -0
- package/dist/app/charts/datasources/outlierDataSource.d.ts.map +1 -0
- package/dist/app/charts/datasources/outlierDataSource.js +57 -0
- package/dist/app/charts/datasources/outlierDataSource.js.map +1 -0
- package/dist/app/charts/datasources/timeSeriesDataSource.d.ts +77 -0
- package/dist/app/charts/datasources/timeSeriesDataSource.d.ts.map +1 -0
- package/dist/app/charts/datasources/timeSeriesDataSource.js +85 -0
- package/dist/app/charts/datasources/timeSeriesDataSource.js.map +1 -0
- package/dist/app/charts/filters/regexFilter.d.ts +31 -4
- package/dist/app/charts/filters/regexFilter.d.ts.map +1 -0
- package/dist/app/charts/filters/regexFilter.js +38 -4
- package/dist/app/charts/filters/regexFilter.js.map +1 -1
- package/dist/app/charts/hooks/AxesProvider.d.ts +21 -0
- package/dist/app/charts/hooks/AxesProvider.d.ts.map +1 -0
- package/dist/app/charts/hooks/AxesProvider.js +213 -0
- package/dist/app/charts/hooks/AxesProvider.js.map +1 -0
- package/dist/app/charts/hooks/CanvasSurfaceProvider.d.ts +25 -0
- package/dist/app/charts/hooks/CanvasSurfaceProvider.d.ts.map +1 -0
- package/dist/app/charts/hooks/CanvasSurfaceProvider.js +76 -0
- package/dist/app/charts/hooks/CanvasSurfaceProvider.js.map +1 -0
- package/dist/app/charts/hooks/ChartProvider.d.ts +40 -0
- package/dist/app/charts/hooks/ChartProvider.d.ts.map +1 -0
- package/dist/app/charts/hooks/ChartProvider.js +33 -0
- package/dist/app/charts/hooks/ChartProvider.js.map +1 -0
- package/dist/app/charts/hooks/InteractionProvider.d.ts +23 -0
- package/dist/app/charts/hooks/InteractionProvider.d.ts.map +1 -0
- package/dist/app/charts/hooks/InteractionProvider.js +60 -0
- package/dist/app/charts/hooks/InteractionProvider.js.map +1 -0
- package/dist/app/charts/hooks/PlotDimensionsProvider.d.ts +16 -0
- package/dist/app/charts/hooks/PlotDimensionsProvider.d.ts.map +1 -0
- package/dist/app/charts/hooks/PlotDimensionsProvider.js +76 -0
- package/dist/app/charts/hooks/PlotDimensionsProvider.js.map +1 -0
- package/dist/app/charts/hooks/defaultAxesValues.d.ts +11 -0
- package/dist/app/charts/hooks/defaultAxesValues.d.ts.map +1 -0
- package/dist/app/charts/hooks/defaultAxesValues.js +36 -0
- package/dist/app/charts/hooks/defaultAxesValues.js.map +1 -0
- package/dist/app/charts/hooks/defaultMouseValues.d.ts +9 -0
- package/dist/app/charts/hooks/defaultMouseValues.d.ts.map +1 -0
- package/dist/app/charts/hooks/defaultMouseValues.js +23 -0
- package/dist/app/charts/hooks/defaultMouseValues.js.map +1 -0
- package/dist/app/charts/hooks/defaultPlotDimensions.d.ts +13 -0
- package/dist/app/charts/hooks/defaultPlotDimensions.d.ts.map +1 -0
- package/dist/app/charts/hooks/defaultPlotDimensions.js +23 -0
- package/dist/app/charts/hooks/defaultPlotDimensions.js.map +1 -0
- package/dist/app/charts/hooks/defaultTooltipValues.d.ts +9 -0
- package/dist/app/charts/hooks/defaultTooltipValues.d.ts.map +1 -0
- package/dist/app/charts/hooks/defaultTooltipValues.js +21 -0
- package/dist/app/charts/hooks/defaultTooltipValues.js.map +1 -0
- package/dist/app/charts/hooks/defaultUseChartValues.d.ts +14 -0
- package/dist/app/charts/hooks/defaultUseChartValues.d.ts.map +1 -0
- package/dist/app/charts/hooks/defaultUseChartValues.js +30 -0
- package/dist/app/charts/hooks/defaultUseChartValues.js.map +1 -0
- package/dist/app/charts/hooks/useAxes.d.ts +49 -36
- package/dist/app/charts/hooks/useAxes.d.ts.map +1 -0
- package/dist/app/charts/hooks/useAxes.js +16 -176
- package/dist/app/charts/hooks/useAxes.js.map +1 -1
- package/dist/app/charts/hooks/useCanvasSurface.d.ts +25 -0
- package/dist/app/charts/hooks/useCanvasSurface.d.ts.map +1 -0
- package/dist/app/charts/hooks/useCanvasSurface.js +18 -0
- package/dist/app/charts/hooks/useCanvasSurface.js.map +1 -0
- package/dist/app/charts/hooks/useChart.d.ts +30 -44
- package/dist/app/charts/hooks/useChart.d.ts.map +1 -0
- package/dist/app/charts/hooks/useChart.js +26 -48
- package/dist/app/charts/hooks/useChart.js.map +1 -1
- package/dist/app/charts/hooks/useDataSource.d.ts +68 -0
- package/dist/app/charts/hooks/useDataSource.d.ts.map +1 -0
- package/dist/app/charts/hooks/useDataSource.js +63 -0
- package/dist/app/charts/hooks/useDataSource.js.map +1 -0
- package/dist/app/charts/hooks/useHoveredSeries.d.ts +25 -0
- package/dist/app/charts/hooks/useHoveredSeries.d.ts.map +1 -0
- package/dist/app/charts/hooks/useHoveredSeries.js +15 -0
- package/dist/app/charts/hooks/useHoveredSeries.js.map +1 -0
- package/dist/app/charts/hooks/useMouse.d.ts +46 -22
- package/dist/app/charts/hooks/useMouse.d.ts.map +1 -0
- package/dist/app/charts/hooks/useMouse.js +12 -56
- package/dist/app/charts/hooks/useMouse.js.map +1 -1
- package/dist/app/charts/hooks/usePlotDimensions.d.ts +25 -13
- package/dist/app/charts/hooks/usePlotDimensions.d.ts.map +1 -0
- package/dist/app/charts/hooks/usePlotDimensions.js +6 -62
- package/dist/app/charts/hooks/usePlotDimensions.js.map +1 -1
- package/dist/app/charts/hooks/useTooltip.d.ts +24 -26
- package/dist/app/charts/hooks/useTooltip.d.ts.map +1 -0
- package/dist/app/charts/hooks/useTooltip.js +12 -42
- package/dist/app/charts/hooks/useTooltip.js.map +1 -1
- package/dist/app/charts/index.d.ts +66 -0
- package/dist/app/charts/index.d.ts.map +1 -0
- package/dist/app/charts/index.js +87 -0
- package/dist/app/charts/index.js.map +1 -0
- package/dist/app/charts/legends/Legend.d.ts +33 -12
- package/dist/app/charts/legends/Legend.d.ts.map +1 -0
- package/dist/app/charts/legends/Legend.js +138 -379
- package/dist/app/charts/legends/Legend.js.map +1 -1
- package/dist/app/charts/legends/constants.d.ts +19 -0
- package/dist/app/charts/legends/constants.d.ts.map +1 -0
- package/dist/app/charts/legends/constants.js +34 -0
- package/dist/app/charts/legends/constants.js.map +1 -0
- package/dist/app/charts/observables/ChartData.d.ts +1 -0
- package/dist/app/charts/observables/ChartData.d.ts.map +1 -0
- package/dist/app/charts/observables/iterates.d.ts +13 -7
- package/dist/app/charts/observables/iterates.d.ts.map +1 -0
- package/dist/app/charts/observables/iterates.js +42 -9
- package/dist/app/charts/observables/iterates.js.map +1 -1
- package/dist/app/charts/observables/ordinals.d.ts +70 -12
- package/dist/app/charts/observables/ordinals.d.ts.map +1 -0
- package/dist/app/charts/observables/ordinals.js +127 -48
- package/dist/app/charts/observables/ordinals.js.map +1 -1
- package/dist/app/charts/observables/outliers.d.ts +18 -0
- package/dist/app/charts/observables/outliers.d.ts.map +1 -0
- package/dist/app/charts/observables/outliers.js +2 -0
- package/dist/app/charts/observables/outliers.js.map +1 -0
- package/dist/app/charts/plots/BarPlot.d.ts +87 -13
- package/dist/app/charts/plots/BarPlot.d.ts.map +1 -0
- package/dist/app/charts/plots/BarPlot.js +603 -356
- package/dist/app/charts/plots/BarPlot.js.map +1 -1
- package/dist/app/charts/plots/OutlierPlot.d.ts +123 -0
- package/dist/app/charts/plots/OutlierPlot.d.ts.map +1 -0
- package/dist/app/charts/plots/OutlierPlot.js +430 -0
- package/dist/app/charts/plots/OutlierPlot.js.map +1 -0
- package/dist/app/charts/plots/PoincarePlot.d.ts +92 -14
- package/dist/app/charts/plots/PoincarePlot.d.ts.map +1 -0
- package/dist/app/charts/plots/PoincarePlot.js +523 -364
- package/dist/app/charts/plots/PoincarePlot.js.map +1 -1
- package/dist/app/charts/plots/RasterPlot.d.ts +31 -10
- package/dist/app/charts/plots/RasterPlot.d.ts.map +1 -0
- package/dist/app/charts/plots/RasterPlot.js +198 -306
- package/dist/app/charts/plots/RasterPlot.js.map +1 -1
- package/dist/app/charts/plots/ScatterPlot.d.ts +77 -21
- package/dist/app/charts/plots/ScatterPlot.d.ts.map +1 -0
- package/dist/app/charts/plots/ScatterPlot.js +359 -302
- package/dist/app/charts/plots/ScatterPlot.js.map +1 -1
- package/dist/app/charts/plots/autoScaleYAxes.d.ts +43 -0
- package/dist/app/charts/plots/autoScaleYAxes.d.ts.map +1 -0
- package/dist/app/charts/plots/autoScaleYAxes.js +71 -0
- package/dist/app/charts/plots/autoScaleYAxes.js.map +1 -0
- package/dist/app/charts/plots/colorizedLine.d.ts +61 -0
- package/dist/app/charts/plots/colorizedLine.d.ts.map +1 -0
- package/dist/app/charts/plots/colorizedLine.js +157 -0
- package/dist/app/charts/plots/colorizedLine.js.map +1 -0
- package/dist/app/charts/plots/constants.d.ts +7 -0
- package/dist/app/charts/plots/constants.d.ts.map +1 -0
- package/dist/app/charts/plots/constants.js +11 -0
- package/dist/app/charts/plots/constants.js.map +1 -0
- package/dist/app/charts/plots/hitTesting.d.ts +88 -0
- package/dist/app/charts/plots/hitTesting.d.ts.map +1 -0
- package/dist/app/charts/plots/hitTesting.js +136 -0
- package/dist/app/charts/plots/hitTesting.js.map +1 -0
- package/dist/app/charts/plots/plot.d.ts +52 -16
- package/dist/app/charts/plots/plot.d.ts.map +1 -0
- package/dist/app/charts/plots/plot.js +108 -35
- package/dist/app/charts/plots/plot.js.map +1 -1
- package/dist/app/charts/plots/useCanvasZoomPan.d.ts +119 -0
- package/dist/app/charts/plots/useCanvasZoomPan.d.ts.map +1 -0
- package/dist/app/charts/plots/useCanvasZoomPan.js +113 -0
- package/dist/app/charts/plots/useCanvasZoomPan.js.map +1 -0
- package/dist/app/charts/plots/useStreamingTimeAxes.d.ts +103 -0
- package/dist/app/charts/plots/useStreamingTimeAxes.d.ts.map +1 -0
- package/dist/app/charts/plots/useStreamingTimeAxes.js +257 -0
- package/dist/app/charts/plots/useStreamingTimeAxes.js.map +1 -0
- package/dist/app/charts/series/baseSeries.d.ts +60 -8
- package/dist/app/charts/series/baseSeries.d.ts.map +1 -0
- package/dist/app/charts/series/baseSeries.js +53 -8
- package/dist/app/charts/series/baseSeries.js.map +1 -1
- package/dist/app/charts/series/iterateSeries.d.ts +9 -8
- package/dist/app/charts/series/iterateSeries.d.ts.map +1 -0
- package/dist/app/charts/series/iterateSeries.js +7 -7
- package/dist/app/charts/series/iterateSeries.js.map +1 -1
- package/dist/app/charts/series/ordinalSeries.d.ts +27 -13
- package/dist/app/charts/series/ordinalSeries.d.ts.map +1 -0
- package/dist/app/charts/series/ordinalSeries.js +29 -15
- package/dist/app/charts/series/ordinalSeries.js.map +1 -1
- package/dist/app/charts/series/outlierSeries.d.ts +142 -0
- package/dist/app/charts/series/outlierSeries.d.ts.map +1 -0
- package/dist/app/charts/series/outlierSeries.js +82 -0
- package/dist/app/charts/series/outlierSeries.js.map +1 -0
- package/dist/app/charts/series/timeSeries.d.ts +13 -9
- package/dist/app/charts/series/timeSeries.d.ts.map +1 -0
- package/dist/app/charts/series/timeSeries.js +6 -3
- package/dist/app/charts/series/timeSeries.js.map +1 -1
- package/dist/app/charts/series/timeSeriesChartData.d.ts +18 -10
- package/dist/app/charts/series/timeSeriesChartData.d.ts.map +1 -0
- package/dist/app/charts/series/timeSeriesChartData.js +28 -14
- package/dist/app/charts/series/timeSeriesChartData.js.map +1 -1
- package/dist/app/charts/styling/barPlotStyle.d.ts +46 -2
- package/dist/app/charts/styling/barPlotStyle.d.ts.map +1 -0
- package/dist/app/charts/styling/barPlotStyle.js +37 -3
- package/dist/app/charts/styling/barPlotStyle.js.map +1 -1
- package/dist/app/charts/styling/canvasStyle.d.ts +53 -0
- package/dist/app/charts/styling/canvasStyle.d.ts.map +1 -0
- package/dist/app/charts/styling/canvasStyle.js +71 -0
- package/dist/app/charts/styling/canvasStyle.js.map +1 -0
- package/dist/app/charts/styling/margins.d.ts +21 -2
- package/dist/app/charts/styling/margins.d.ts.map +1 -0
- package/dist/app/charts/styling/margins.js +25 -4
- package/dist/app/charts/styling/margins.js.map +1 -1
- package/dist/app/charts/styling/svgStyle.d.ts +10 -56
- package/dist/app/charts/styling/svgStyle.d.ts.map +1 -0
- package/dist/app/charts/styling/svgStyle.js +3 -78
- package/dist/app/charts/styling/svgStyle.js.map +1 -1
- package/dist/app/charts/subscriptions/viewDrivers.d.ts +124 -0
- package/dist/app/charts/subscriptions/viewDrivers.d.ts.map +1 -0
- package/dist/app/charts/subscriptions/viewDrivers.js +338 -0
- package/dist/app/charts/subscriptions/viewDrivers.js.map +1 -0
- package/dist/app/charts/tooltips/BarPlotTooltipContent.d.ts +12 -78
- package/dist/app/charts/tooltips/BarPlotTooltipContent.d.ts.map +1 -0
- package/dist/app/charts/tooltips/BarPlotTooltipContent.js +65 -257
- package/dist/app/charts/tooltips/BarPlotTooltipContent.js.map +1 -1
- package/dist/app/charts/tooltips/DefaultOutlierTooltipContent.d.ts +9 -0
- package/dist/app/charts/tooltips/DefaultOutlierTooltipContent.d.ts.map +1 -0
- package/dist/app/charts/tooltips/DefaultOutlierTooltipContent.js +16 -0
- package/dist/app/charts/tooltips/DefaultOutlierTooltipContent.js.map +1 -0
- package/dist/app/charts/tooltips/OutlierPlotTooltipContent.d.ts +30 -0
- package/dist/app/charts/tooltips/OutlierPlotTooltipContent.d.ts.map +1 -0
- package/dist/app/charts/tooltips/OutlierPlotTooltipContent.js +26 -0
- package/dist/app/charts/tooltips/OutlierPlotTooltipContent.js.map +1 -0
- package/dist/app/charts/tooltips/PoincarePlotTooltipContent.d.ts +22 -72
- package/dist/app/charts/tooltips/PoincarePlotTooltipContent.d.ts.map +1 -0
- package/dist/app/charts/tooltips/PoincarePlotTooltipContent.js +104 -171
- package/dist/app/charts/tooltips/PoincarePlotTooltipContent.js.map +1 -1
- package/dist/app/charts/tooltips/RasterPlotTooltipContent.d.ts +32 -8
- package/dist/app/charts/tooltips/RasterPlotTooltipContent.d.ts.map +1 -0
- package/dist/app/charts/tooltips/RasterPlotTooltipContent.js +62 -115
- package/dist/app/charts/tooltips/RasterPlotTooltipContent.js.map +1 -1
- package/dist/app/charts/tooltips/ScatterPlotTooltipContent.d.ts +39 -12
- package/dist/app/charts/tooltips/ScatterPlotTooltipContent.d.ts.map +1 -0
- package/dist/app/charts/tooltips/ScatterPlotTooltipContent.js +162 -134
- package/dist/app/charts/tooltips/ScatterPlotTooltipContent.js.map +1 -1
- package/dist/app/charts/tooltips/Tooltip.d.ts +27 -32
- package/dist/app/charts/tooltips/Tooltip.d.ts.map +1 -0
- package/dist/app/charts/tooltips/Tooltip.js +37 -81
- package/dist/app/charts/tooltips/Tooltip.js.map +1 -1
- package/dist/app/charts/tooltips/TooltipContent.d.ts +81 -0
- package/dist/app/charts/tooltips/TooltipContent.d.ts.map +1 -0
- package/dist/app/charts/tooltips/TooltipContent.js +99 -0
- package/dist/app/charts/tooltips/TooltipContent.js.map +1 -0
- package/dist/app/charts/tooltips/tooltipUtils.d.ts +186 -36
- package/dist/app/charts/tooltips/tooltipUtils.d.ts.map +1 -0
- package/dist/app/charts/tooltips/tooltipUtils.js +277 -48
- package/dist/app/charts/tooltips/tooltipUtils.js.map +1 -1
- package/dist/app/charts/tooltips/useOutlierTooltip.d.ts +59 -0
- package/dist/app/charts/tooltips/useOutlierTooltip.d.ts.map +1 -0
- package/dist/app/charts/tooltips/useOutlierTooltip.js +16 -0
- package/dist/app/charts/tooltips/useOutlierTooltip.js.map +1 -0
- package/dist/app/charts/tooltips/useTooltipPlacement.d.ts +51 -0
- package/dist/app/charts/tooltips/useTooltipPlacement.d.ts.map +1 -0
- package/dist/app/charts/tooltips/useTooltipPlacement.js +52 -0
- package/dist/app/charts/tooltips/useTooltipPlacement.js.map +1 -0
- package/dist/app/charts/tooltips/useTooltipStyle.d.ts +11 -0
- package/dist/app/charts/tooltips/useTooltipStyle.d.ts.map +1 -0
- package/dist/app/charts/tooltips/useTooltipStyle.js +14 -0
- package/dist/app/charts/tooltips/useTooltipStyle.js.map +1 -0
- package/dist/app/charts/trackers/Tracker.d.ts +22 -6
- package/dist/app/charts/trackers/Tracker.d.ts.map +1 -0
- package/dist/app/charts/trackers/Tracker.js +36 -22
- package/dist/app/charts/trackers/Tracker.js.map +1 -1
- package/dist/app/charts/trackers/trackerUtils.d.ts +40 -18
- package/dist/app/charts/trackers/trackerUtils.d.ts.map +1 -0
- package/dist/app/charts/trackers/trackerUtils.js +213 -300
- package/dist/app/charts/trackers/trackerUtils.js.map +1 -1
- package/dist/app/charts/utils.d.ts +72 -33
- package/dist/app/charts/utils.d.ts.map +1 -0
- package/dist/app/charts/utils.js +87 -42
- package/dist/app/charts/utils.js.map +1 -1
- package/dist/index.d.ts +2 -45
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -72
- package/dist/index.js.map +1 -1
- package/package.json +87 -46
- package/src/app/charts/Chart.tsx +132 -168
- package/src/app/charts/axes/AxesState.ts +27 -29
- package/src/app/charts/axes/AxisInterval.ts +57 -32
- package/src/app/charts/axes/BaseAxisRange.ts +47 -27
- package/src/app/charts/axes/ContinuousAxis.tsx +235 -39
- package/src/app/charts/axes/ContinuousAxisRange.ts +29 -11
- package/src/app/charts/axes/EmptyAxis.tsx +52 -17
- package/src/app/charts/axes/OrdinalAxis.tsx +54 -28
- package/src/app/charts/axes/OrdinalAxisRange.ts +96 -16
- package/src/app/charts/axes/autoScale.ts +244 -0
- package/src/app/charts/axes/axes.ts +954 -735
- package/src/app/charts/d3types.ts +42 -13
- package/src/app/charts/datasources/StreamingDataSource.ts +214 -0
- package/src/app/charts/datasources/iteratesDataSource.ts +122 -0
- package/src/app/charts/datasources/ordinalDataSource.ts +205 -0
- package/src/app/charts/datasources/outlierDataSource.ts +90 -0
- package/src/app/charts/datasources/timeSeriesDataSource.ts +133 -0
- package/src/app/charts/filters/regexFilter.ts +45 -5
- package/src/app/charts/hooks/AxesProvider.tsx +301 -0
- package/src/app/charts/hooks/CanvasSurfaceProvider.tsx +117 -0
- package/src/app/charts/hooks/ChartProvider.tsx +79 -0
- package/src/app/charts/hooks/InteractionProvider.tsx +88 -0
- package/src/app/charts/hooks/PlotDimensionsProvider.tsx +109 -0
- package/src/app/charts/hooks/defaultAxesValues.ts +40 -0
- package/src/app/charts/hooks/defaultMouseValues.ts +24 -0
- package/src/app/charts/hooks/defaultPlotDimensions.ts +27 -0
- package/src/app/charts/hooks/defaultTooltipValues.tsx +23 -0
- package/src/app/charts/hooks/defaultUseChartValues.tsx +36 -0
- package/src/app/charts/hooks/useAxes.tsx +60 -228
- package/src/app/charts/hooks/useCanvasSurface.tsx +35 -0
- package/src/app/charts/hooks/useChart.tsx +47 -106
- package/src/app/charts/hooks/useDataSource.tsx +106 -0
- package/src/app/charts/hooks/useHoveredSeries.tsx +33 -0
- package/src/app/charts/hooks/useMouse.tsx +58 -82
- package/src/app/charts/hooks/usePlotDimensions.tsx +25 -89
- package/src/app/charts/hooks/useTooltip.tsx +32 -63
- package/src/app/charts/index.ts +213 -0
- package/src/app/charts/legends/Legend.tsx +198 -479
- package/src/app/charts/legends/constants.ts +37 -0
- package/src/app/charts/observables/iterates.ts +32 -12
- package/src/app/charts/observables/ordinals.ts +141 -67
- package/src/app/charts/observables/outliers.ts +20 -0
- package/src/app/charts/plots/BarPlot.tsx +784 -666
- package/src/app/charts/plots/OutlierPlot.tsx +685 -0
- package/src/app/charts/plots/PoincarePlot.tsx +707 -489
- package/src/app/charts/plots/RasterPlot.tsx +253 -445
- package/src/app/charts/plots/ScatterPlot.tsx +480 -463
- package/src/app/charts/plots/autoScaleYAxes.ts +102 -0
- package/src/app/charts/plots/colorizedLine.ts +185 -0
- package/src/app/charts/plots/constants.ts +16 -0
- package/src/app/charts/plots/hitTesting.ts +198 -0
- package/src/app/charts/plots/plot.ts +138 -44
- package/src/app/charts/plots/useCanvasZoomPan.ts +240 -0
- package/src/app/charts/plots/useStreamingTimeAxes.ts +384 -0
- package/src/app/charts/series/baseSeries.ts +81 -14
- package/src/app/charts/series/iterateSeries.ts +8 -8
- package/src/app/charts/series/ordinalSeries.ts +35 -20
- package/src/app/charts/series/outlierSeries.ts +188 -0
- package/src/app/charts/series/timeSeries.ts +14 -12
- package/src/app/charts/series/timeSeriesChartData.ts +31 -17
- package/src/app/charts/styling/barPlotStyle.ts +48 -5
- package/src/app/charts/styling/canvasStyle.ts +86 -0
- package/src/app/charts/styling/margins.ts +28 -4
- package/src/app/charts/styling/svgStyle.ts +10 -91
- package/src/app/charts/subscriptions/viewDrivers.ts +447 -0
- package/src/app/charts/tooltips/BarPlotTooltipContent.tsx +156 -380
- package/src/app/charts/tooltips/DefaultOutlierTooltipContent.tsx +40 -0
- package/src/app/charts/tooltips/OutlierPlotTooltipContent.tsx +67 -0
- package/src/app/charts/tooltips/PoincarePlotTooltipContent.tsx +229 -292
- package/src/app/charts/tooltips/RasterPlotTooltipContent.tsx +164 -217
- package/src/app/charts/tooltips/ScatterPlotTooltipContent.tsx +373 -236
- package/src/app/charts/tooltips/Tooltip.tsx +58 -124
- package/src/app/charts/tooltips/TooltipContent.tsx +177 -0
- package/src/app/charts/tooltips/tooltipUtils.ts +359 -61
- package/src/app/charts/tooltips/useOutlierTooltip.tsx +68 -0
- package/src/app/charts/tooltips/useTooltipPlacement.ts +86 -0
- package/src/app/charts/tooltips/useTooltipStyle.ts +15 -0
- package/src/app/charts/trackers/Tracker.tsx +68 -33
- package/src/app/charts/trackers/trackerUtils.ts +263 -376
- package/src/app/charts/utils.ts +90 -48
- package/src/index.ts +2 -322
- package/dist/app/charts/axes/AxesState.test.d.ts +0 -1
- package/dist/app/charts/axes/AxesState.test.js +0 -30
- package/dist/app/charts/axes/AxesState.test.js.map +0 -1
- package/dist/app/charts/axes/AxisInterval.test.d.ts +0 -1
- package/dist/app/charts/axes/AxisInterval.test.js +0 -120
- package/dist/app/charts/axes/AxisInterval.test.js.map +0 -1
- package/dist/app/charts/axes/ContinuousAxisRange.test.d.ts +0 -1
- package/dist/app/charts/axes/ContinuousAxisRange.test.js +0 -47
- package/dist/app/charts/axes/ContinuousAxisRange.test.js.map +0 -1
- package/dist/app/charts/axes/OrdinalAxisRange.test.d.ts +0 -1
- package/dist/app/charts/axes/OrdinalAxisRange.test.js +0 -48
- package/dist/app/charts/axes/OrdinalAxisRange.test.js.map +0 -1
- package/dist/app/charts/filters/regexFilter.test.d.ts +0 -1
- package/dist/app/charts/filters/regexFilter.test.js +0 -11
- package/dist/app/charts/filters/regexFilter.test.js.map +0 -1
- package/dist/app/charts/hooks/useDataObservable.d.ts +0 -72
- package/dist/app/charts/hooks/useDataObservable.js +0 -74
- package/dist/app/charts/hooks/useDataObservable.js.map +0 -1
- package/dist/app/charts/hooks/useInitialData.d.ts +0 -36
- package/dist/app/charts/hooks/useInitialData.js +0 -28
- package/dist/app/charts/hooks/useInitialData.js.map +0 -1
- package/dist/app/charts/observables/iterates.test.d.ts +0 -1
- package/dist/app/charts/observables/iterates.test.js +0 -180
- package/dist/app/charts/observables/iterates.test.js.map +0 -1
- package/dist/app/charts/observables/ordinals.test.d.ts +0 -1
- package/dist/app/charts/observables/ordinals.test.js +0 -102
- package/dist/app/charts/observables/ordinals.test.js.map +0 -1
- package/dist/app/charts/series/datumSeries.test.d.ts +0 -1
- package/dist/app/charts/series/datumSeries.test.js +0 -50
- package/dist/app/charts/series/datumSeries.test.js.map +0 -1
- package/dist/app/charts/styling/margins.test.d.ts +0 -1
- package/dist/app/charts/styling/margins.test.js +0 -19
- package/dist/app/charts/styling/margins.test.js.map +0 -1
- package/dist/app/charts/subscriptions/subscription.test.d.ts +0 -1
- package/dist/app/charts/subscriptions/subscription.test.js +0 -395
- package/dist/app/charts/subscriptions/subscription.test.js.map +0 -1
- package/dist/app/charts/subscriptions/subscriptions.d.ts +0 -100
- package/dist/app/charts/subscriptions/subscriptions.js +0 -449
- package/dist/app/charts/subscriptions/subscriptions.js.map +0 -1
- package/src/app/charts/axes/AxesState.test.ts +0 -34
- package/src/app/charts/axes/AxisInterval.test.ts +0 -143
- package/src/app/charts/axes/ContinuousAxisRange.test.ts +0 -55
- package/src/app/charts/axes/OrdinalAxisRange.test.ts +0 -55
- package/src/app/charts/filters/regexFilter.test.ts +0 -13
- package/src/app/charts/hooks/useDataObservable.tsx +0 -170
- package/src/app/charts/hooks/useInitialData.tsx +0 -64
- package/src/app/charts/observables/iterates.test.ts +0 -201
- package/src/app/charts/observables/ordinals.test.ts +0 -135
- package/src/app/charts/series/datumSeries.test.ts +0 -60
- package/src/app/charts/styling/margins.test.ts +0 -22
- package/src/app/charts/subscriptions/subscription.test.ts +0 -499
- package/src/app/charts/subscriptions/subscriptions.ts +0 -635
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type {LegendStyle} from "./Legend";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The location of the legend, either in the plot or in an external container
|
|
5
|
+
* Note: replaces enums to support `erasableSyntaxOnly`
|
|
6
|
+
* TS1294: This syntax is not allowed when 'erasableSyntaxOnly' is enabled.
|
|
7
|
+
*/
|
|
8
|
+
export const LegendLocation = {
|
|
9
|
+
// noinspection JSUnusedGlobalSymbols
|
|
10
|
+
TOP_LEFT: "top-left",
|
|
11
|
+
TOP_RIGHT: "top-right",
|
|
12
|
+
BOTTOM_LEFT: "bottom-left",
|
|
13
|
+
BOTTOM_RIGHT: "bottom-right",
|
|
14
|
+
EXTERNAL_CONTAINER: "external-container"
|
|
15
|
+
} as const
|
|
16
|
+
export type LegendLocation = (typeof LegendLocation)[keyof typeof LegendLocation];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The legend's default style
|
|
20
|
+
*/
|
|
21
|
+
export const defaultLegendStyle: LegendStyle = {
|
|
22
|
+
fontSize: 12,
|
|
23
|
+
fontFamily: "sans-serif",
|
|
24
|
+
fontColor: "#d2933f",
|
|
25
|
+
backgroundColor: "#202020",
|
|
26
|
+
backgroundOpacity: 0.85,
|
|
27
|
+
borderColor: "#d2933f",
|
|
28
|
+
borderWidth: 1,
|
|
29
|
+
borderOpacity: 0.7,
|
|
30
|
+
borderRadius: 4,
|
|
31
|
+
padding: 8,
|
|
32
|
+
rowGap: 6,
|
|
33
|
+
swatchWidth: 16,
|
|
34
|
+
swatchHeight: 3,
|
|
35
|
+
swatchLabelGap: 6,
|
|
36
|
+
transitionDuration: 350,
|
|
37
|
+
}
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
* 2. Accepts that chart-data observable and converts that observable to an iterate-chart-data observable
|
|
9
9
|
*/
|
|
10
10
|
import {Observable} from "rxjs";
|
|
11
|
-
import {TimeSeriesChartData} from "../series/timeSeriesChartData";
|
|
11
|
+
import type {TimeSeriesChartData} from "../series/timeSeriesChartData";
|
|
12
12
|
import {filter, map, scan} from "rxjs/operators";
|
|
13
|
-
import {Datum, emptyDatum} from "../series/timeSeries";
|
|
14
|
-
import {emptyIterateDatum, IterateDatum, iterateDatumOf, nonEmptyIterateDatum} from "../series/iterateSeries";
|
|
15
|
-
import {ChartData, copyChartData, defaultChartData} from "./ChartData";
|
|
13
|
+
import {type Datum, emptyDatum} from "../series/timeSeries";
|
|
14
|
+
import {emptyIterateDatum, type IterateDatum, iterateDatumOf, nonEmptyIterateDatum} from "../series/iterateSeries";
|
|
15
|
+
import {type ChartData, copyChartData, defaultChartData} from "./ChartData";
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
export interface IterateChartData extends ChartData {
|
|
@@ -27,12 +27,14 @@ export interface IterateChartData extends ChartData {
|
|
|
27
27
|
maxIterate: IterateDatum
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
* Holds the association of the series name to the
|
|
30
|
+
* Holds the association of the series name to the min values for (time, iterate n, and
|
|
31
|
+
* iterate n+1) for that series
|
|
31
32
|
*/
|
|
32
33
|
minIterates: Map<string, IterateDatum>
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
|
-
* Holds the association of the series name to the
|
|
36
|
+
* Holds the association of the series name to the max values for (time, iterate n, and
|
|
37
|
+
* iterate n+1) for that series
|
|
36
38
|
*/
|
|
37
39
|
maxIterates: Map<string, IterateDatum>
|
|
38
40
|
|
|
@@ -43,6 +45,9 @@ export interface IterateChartData extends ChartData {
|
|
|
43
45
|
newPoints: Map<string, Array<IterateDatum>>
|
|
44
46
|
}
|
|
45
47
|
|
|
48
|
+
/**
|
|
49
|
+
* @return Iterate chart data without any series or points, and with empty min and max iterates
|
|
50
|
+
*/
|
|
46
51
|
const emptyIterateData = (): IterateChartData => ({
|
|
47
52
|
...defaultChartData(),
|
|
48
53
|
minIterate: emptyIterateDatum,
|
|
@@ -53,8 +58,10 @@ const emptyIterateData = (): IterateChartData => ({
|
|
|
53
58
|
})
|
|
54
59
|
|
|
55
60
|
/**
|
|
56
|
-
* Makes a
|
|
61
|
+
* Makes a copy of the iterate chart data: new sets, maps, and arrays of points (the points
|
|
62
|
+
* themselves are shared)
|
|
57
63
|
* @param data The iterate chart data to copy
|
|
64
|
+
* @return The copy
|
|
58
65
|
*/
|
|
59
66
|
export const copyIterateDataFrom = (data: IterateChartData): IterateChartData => ({
|
|
60
67
|
...copyChartData(data),
|
|
@@ -65,12 +72,19 @@ export const copyIterateDataFrom = (data: IterateChartData): IterateChartData =>
|
|
|
65
72
|
newPoints: new Map<string, Array<IterateDatum>>(Array.from(data.newPoints.entries()).map(([name, points]) => [name, points.slice()])),
|
|
66
73
|
})
|
|
67
74
|
|
|
75
|
+
// the state accumulated, from one chunk of time-series chart data to the next, while calculating
|
|
76
|
+
// the iterates: the iterate distance, the points not yet paired up (by series), and the iterates
|
|
68
77
|
type Accumulator = {
|
|
69
78
|
n: number
|
|
70
79
|
previous: Map<string, Array<Datum>>
|
|
71
80
|
accumulated: IterateChartData
|
|
72
81
|
}
|
|
73
82
|
|
|
83
|
+
/**
|
|
84
|
+
* The accumulator to start calculating the n-iterates from
|
|
85
|
+
* @param n The iterate distance
|
|
86
|
+
* @return An accumulator with no points and no iterates
|
|
87
|
+
*/
|
|
74
88
|
const initialAccumulate = (n: number): Accumulator => ({n, previous: new Map(), accumulated: emptyIterateData()})
|
|
75
89
|
|
|
76
90
|
/**
|
|
@@ -81,7 +95,8 @@ const initialAccumulate = (n: number): Accumulator => ({n, previous: new Map(),
|
|
|
81
95
|
* points `(f[m](x), f[m+n](x))` are n-iterates.
|
|
82
96
|
* @param dataObservable The observable over {@link TimeSeriesChartData}
|
|
83
97
|
* @param [n=1] The iterate distance
|
|
84
|
-
* @return An over {@link IterateChartData} holding the n-iterate for the incoming chart
|
|
98
|
+
* @return An observable over {@link IterateChartData} holding the n-iterate for the incoming chart
|
|
99
|
+
* data (nothing is emitted until the first iterate has been calculated)
|
|
85
100
|
*/
|
|
86
101
|
export function iteratesObservable(dataObservable: Observable<TimeSeriesChartData>, n: number = 1): Observable<IterateChartData> {
|
|
87
102
|
return dataObservable
|
|
@@ -117,7 +132,7 @@ export function iteratesObservable(dataObservable: Observable<TimeSeriesChartDat
|
|
|
117
132
|
previous.set(name, updated)
|
|
118
133
|
|
|
119
134
|
// create the new iterate
|
|
120
|
-
const iterate: IterateDatum = iterateDatumOf(first.
|
|
135
|
+
const iterate: IterateDatum = iterateDatumOf(first.x, first.y, last.y);
|
|
121
136
|
|
|
122
137
|
// update the min, max values for all the series
|
|
123
138
|
accum.minIterate = minIterateFor(iterate, accum.minIterate)
|
|
@@ -128,8 +143,7 @@ export function iteratesObservable(dataObservable: Observable<TimeSeriesChartDat
|
|
|
128
143
|
accum.maxIterates.set(name, maxIterateFor(iterate, accum.maxIterates.get(name)))
|
|
129
144
|
|
|
130
145
|
// add the newly calculated iterate, and then trim from the
|
|
131
|
-
// head of the array to
|
|
132
|
-
// to keep enough to create points (x(j), x(j+n))
|
|
146
|
+
// head of the array to the number of points in this chunk
|
|
133
147
|
const updatedPoints = accum.newPoints.get(name) || []
|
|
134
148
|
if (updatedPoints.length === 0) {
|
|
135
149
|
accum.newPoints.set(name, updatedPoints)
|
|
@@ -143,7 +157,8 @@ export function iteratesObservable(dataObservable: Observable<TimeSeriesChartDat
|
|
|
143
157
|
return {n, previous, accumulated: accum}
|
|
144
158
|
}, initialAccumulate(n)),
|
|
145
159
|
|
|
146
|
-
//
|
|
160
|
+
// skip the chunks until the first iterate has been calculated, and remove the empty
|
|
161
|
+
// new points
|
|
147
162
|
filter(accum => !isNaN(accum.accumulated.minIterate.iterateN) && !isNaN(accum.accumulated.minIterate.iterateN_1)),
|
|
148
163
|
map(accum => removeEmptyNewPoints(accum)),
|
|
149
164
|
map(accum => accum.accumulated === undefined ? emptyIterateData() : accum.accumulated)
|
|
@@ -186,6 +201,11 @@ function maxIterateFor(iterate: IterateDatum, maxIterate: IterateDatum = emptyIt
|
|
|
186
201
|
}
|
|
187
202
|
}
|
|
188
203
|
|
|
204
|
+
/**
|
|
205
|
+
* Removes the empty iterates from the accumulated new points
|
|
206
|
+
* @param accum The accumulator
|
|
207
|
+
* @return A new accumulator, whose accumulated new points are the non-empty ones
|
|
208
|
+
*/
|
|
189
209
|
function removeEmptyNewPoints(accum: Accumulator): Accumulator {
|
|
190
210
|
const newPoints = new Map(
|
|
191
211
|
Array
|
|
@@ -5,16 +5,18 @@
|
|
|
5
5
|
* 2. Accepts that chart-data observable and converts that observable to an ordinal-chart-data observable
|
|
6
6
|
*/
|
|
7
7
|
import {Observable} from "rxjs";
|
|
8
|
-
import {TimeSeriesChartData} from "../series/timeSeriesChartData";
|
|
8
|
+
import type {TimeSeriesChartData} from "../series/timeSeriesChartData";
|
|
9
9
|
import {map, scan} from "rxjs/operators";
|
|
10
|
-
import {Datum} from "../series/timeSeries";
|
|
11
|
-
import {copyOrdinalDatum, nonEmptyOrdinalDatum, OrdinalDatum, ordinalDatumOf} from "../series/ordinalSeries";
|
|
12
|
-
import {ChartData, copyChartData, defaultChartData} from "./ChartData";
|
|
10
|
+
import type {Datum} from "../series/timeSeries";
|
|
11
|
+
import {copyOrdinalDatum, nonEmptyOrdinalDatum, type OrdinalDatum, ordinalDatumOf} from "../series/ordinalSeries";
|
|
12
|
+
import {type ChartData, copyChartData, defaultChartData} from "./ChartData";
|
|
13
|
+
import {FastShiftArray} from "fast-shift-array";
|
|
14
|
+
import {DEFAULT_COMPACTING_SIZE} from "../series/baseSeries";
|
|
13
15
|
|
|
14
16
|
export interface OrdinalChartData extends ChartData {
|
|
15
17
|
/**
|
|
16
18
|
* Statistics for the chart. Holds the overall minimum and maximum (across all
|
|
17
|
-
* the series), and statistics for each
|
|
19
|
+
* the series), and statistics for each series.
|
|
18
20
|
*/
|
|
19
21
|
stats: OrdinalStats
|
|
20
22
|
|
|
@@ -22,7 +24,8 @@ export interface OrdinalChartData extends ChartData {
|
|
|
22
24
|
* Map holding the name of the series (the time-series identifier) and the associated
|
|
23
25
|
* data points for that time-series (`map(series_name -> array(datum))`)
|
|
24
26
|
*/
|
|
25
|
-
newPoints: Map<string, Array<OrdinalDatum>>
|
|
27
|
+
// newPoints: Map<string, Array<OrdinalDatum>>
|
|
28
|
+
newPoints: Map<string, FastShiftArray<OrdinalDatum>>
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
/**
|
|
@@ -31,12 +34,12 @@ export interface OrdinalChartData extends ChartData {
|
|
|
31
34
|
*/
|
|
32
35
|
export interface OrdinalStats {
|
|
33
36
|
/**
|
|
34
|
-
* The
|
|
37
|
+
* The data with the min time, and with the min value, over all the data so far
|
|
35
38
|
*/
|
|
36
39
|
minDatum: OrdinalDatumExtremum
|
|
37
40
|
|
|
38
41
|
/**
|
|
39
|
-
* The
|
|
42
|
+
* The data with the max time, and with the max value, over all the data so far
|
|
40
43
|
*/
|
|
41
44
|
maxDatum: OrdinalDatumExtremum
|
|
42
45
|
|
|
@@ -46,6 +49,10 @@ export interface OrdinalStats {
|
|
|
46
49
|
valueStatsForSeries: Map<string, OrdinalValueStats>
|
|
47
50
|
}
|
|
48
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Statistics about the values of a series: the data with the min and max values, the number of
|
|
54
|
+
* values, their sum, the sum of their squares, and their mean
|
|
55
|
+
*/
|
|
49
56
|
export type OrdinalValueStats = {
|
|
50
57
|
min: OrdinalDatum
|
|
51
58
|
max: OrdinalDatum
|
|
@@ -55,6 +62,9 @@ export type OrdinalValueStats = {
|
|
|
55
62
|
mean: number
|
|
56
63
|
}
|
|
57
64
|
|
|
65
|
+
/**
|
|
66
|
+
* The data with the extreme (min or max) time, and with the extreme value
|
|
67
|
+
*/
|
|
58
68
|
export type OrdinalDatumExtremum = {
|
|
59
69
|
// holds the ordinal datum with the minimum or maximum time
|
|
60
70
|
time: OrdinalDatum
|
|
@@ -62,30 +72,49 @@ export type OrdinalDatumExtremum = {
|
|
|
62
72
|
value: OrdinalDatum
|
|
63
73
|
}
|
|
64
74
|
|
|
75
|
+
/**
|
|
76
|
+
* @return The datum to start a search for the min value from: its value (`Infinity`) is larger
|
|
77
|
+
* than any other
|
|
78
|
+
*/
|
|
65
79
|
export const initialMinValueDatum = (): OrdinalDatum => ordinalDatumOf(NaN, "", Infinity)
|
|
80
|
+
/**
|
|
81
|
+
* @return The datum to start a search for the max value from: its value (`-Infinity`) is smaller
|
|
82
|
+
* than any other
|
|
83
|
+
*/
|
|
66
84
|
export const initialMaxValueDatum = (): OrdinalDatum => ordinalDatumOf(NaN, "", -Infinity)
|
|
67
85
|
|
|
86
|
+
/**
|
|
87
|
+
* @return The datum to start a search for the min time from: its time (`Infinity`) is later than
|
|
88
|
+
* any other
|
|
89
|
+
*/
|
|
68
90
|
export const initialMinTimeDatum = (): OrdinalDatum => ordinalDatumOf(Infinity, "", NaN)
|
|
91
|
+
/**
|
|
92
|
+
* @return The datum to start a search for the max time from: its time (`-Infinity`) is earlier
|
|
93
|
+
* than any other
|
|
94
|
+
*/
|
|
69
95
|
export const initialMaxTimeDatum = (): OrdinalDatum => ordinalDatumOf(-Infinity, "", NaN)
|
|
70
96
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
export function isDefaultValueStatsDatum(datum: OrdinalDatum): boolean {
|
|
76
|
-
return isNaN(datum.time) && datum.ordinal === "" && isNaN(datum.value)
|
|
77
|
-
}
|
|
78
|
-
|
|
97
|
+
/**
|
|
98
|
+
* @return The extremum to start a search for the min time and value from
|
|
99
|
+
*/
|
|
79
100
|
const initialMinOrdinalDatum = (): OrdinalDatumExtremum => ({
|
|
80
101
|
time: ordinalDatumOf(Infinity, "", NaN),
|
|
81
102
|
value: initialMinValueDatum()
|
|
82
103
|
})
|
|
83
104
|
|
|
105
|
+
/**
|
|
106
|
+
* @return The extremum to start a search for the max time and value from
|
|
107
|
+
*/
|
|
84
108
|
const initialMaxOrdinalDatum = (): OrdinalDatumExtremum => ({
|
|
85
109
|
time: ordinalDatumOf(-Infinity, "", NaN),
|
|
86
110
|
value: initialMaxValueDatum()
|
|
87
111
|
})
|
|
88
112
|
|
|
113
|
+
/**
|
|
114
|
+
* Copies an extremum (and its data)
|
|
115
|
+
* @param datum The extremum to copy
|
|
116
|
+
* @return The copy
|
|
117
|
+
*/
|
|
89
118
|
export function copyOrdinalDatumExtremum(datum: OrdinalDatumExtremum): OrdinalDatumExtremum {
|
|
90
119
|
return {
|
|
91
120
|
time: copyOrdinalDatum(datum.time),
|
|
@@ -93,12 +122,19 @@ export function copyOrdinalDatumExtremum(datum: OrdinalDatumExtremum): OrdinalDa
|
|
|
93
122
|
}
|
|
94
123
|
}
|
|
95
124
|
|
|
125
|
+
/**
|
|
126
|
+
* @return Stats for no data: extremes to start the searches from, and no series' stats
|
|
127
|
+
*/
|
|
96
128
|
export const defaultOrdinalStats = (): OrdinalStats => ({
|
|
97
129
|
minDatum: initialMinOrdinalDatum(),
|
|
98
130
|
maxDatum: initialMaxOrdinalDatum(),
|
|
99
131
|
valueStatsForSeries: new Map<string, OrdinalValueStats>()
|
|
100
132
|
})
|
|
101
133
|
|
|
134
|
+
/**
|
|
135
|
+
* @return Value stats for no data: a count, sum, and sum of squares of 0, a `NaN` mean, and min
|
|
136
|
+
* and max data to start the searches from
|
|
137
|
+
*/
|
|
102
138
|
export const defaultOrdinalValueStats = (): OrdinalValueStats => ({
|
|
103
139
|
min: initialMinValueDatum(),
|
|
104
140
|
max: initialMaxValueDatum(),
|
|
@@ -108,6 +144,11 @@ export const defaultOrdinalValueStats = (): OrdinalValueStats => ({
|
|
|
108
144
|
sumSquared: 0,
|
|
109
145
|
})
|
|
110
146
|
|
|
147
|
+
/**
|
|
148
|
+
* Copies a series' value stats (and their min and max data)
|
|
149
|
+
* @param data The value stats to copy
|
|
150
|
+
* @return The copy
|
|
151
|
+
*/
|
|
111
152
|
export function copyOrdinalValueStats(data: OrdinalValueStats): OrdinalValueStats {
|
|
112
153
|
return {
|
|
113
154
|
...data,
|
|
@@ -116,51 +157,89 @@ export function copyOrdinalValueStats(data: OrdinalValueStats): OrdinalValueStat
|
|
|
116
157
|
}
|
|
117
158
|
}
|
|
118
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Copies the map of each series' value stats (and the stats)
|
|
162
|
+
* @param valueStats The value stats, by series name
|
|
163
|
+
* @return The copy
|
|
164
|
+
*/
|
|
119
165
|
export function copyValueStatsForSeries(valueStats: Map<string, OrdinalValueStats>): Map<string, OrdinalValueStats> {
|
|
120
166
|
return new Map<string, OrdinalValueStats>(Array.from(valueStats.entries())
|
|
121
167
|
.map(([seriesName, valueStats]) => [seriesName, copyOrdinalValueStats(valueStats)])
|
|
122
168
|
)
|
|
123
169
|
}
|
|
124
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Copies the stats (the extremes, and each series' value stats)
|
|
173
|
+
* @param data The stats to copy
|
|
174
|
+
* @return The copy
|
|
175
|
+
*/
|
|
125
176
|
export const copyOrdinalStats = (data: OrdinalStats): OrdinalStats => ({
|
|
126
177
|
minDatum: copyOrdinalDatumExtremum(data.minDatum),
|
|
127
178
|
maxDatum: copyOrdinalDatumExtremum(data.maxDatum),
|
|
128
179
|
valueStatsForSeries: copyValueStatsForSeries(data.valueStatsForSeries),
|
|
129
180
|
})
|
|
130
181
|
|
|
182
|
+
/**
|
|
183
|
+
* @return Ordinal chart data without any series or points, and with the default stats
|
|
184
|
+
*/
|
|
131
185
|
const emptyOrdinalData = (): OrdinalChartData => ({
|
|
132
186
|
...defaultChartData(),
|
|
133
187
|
stats: defaultOrdinalStats(),
|
|
134
|
-
newPoints: new Map<string,
|
|
188
|
+
newPoints: new Map<string, FastShiftArray<OrdinalDatum>>()
|
|
189
|
+
// newPoints: new Map<string, Array<OrdinalDatum>>()
|
|
135
190
|
})
|
|
136
191
|
|
|
137
192
|
/**
|
|
138
|
-
* Makes a
|
|
193
|
+
* Makes a copy of the ordinal chart data: a new set of series names, copies of the stats, and new
|
|
194
|
+
* arrays of points (the points themselves are shared)
|
|
139
195
|
* @param data The ordinal chart data to copy
|
|
196
|
+
* @return The copy
|
|
140
197
|
*/
|
|
141
198
|
export const copyOrdinalDataFrom = (data: OrdinalChartData): OrdinalChartData => ({
|
|
142
199
|
...copyChartData(data),
|
|
143
200
|
stats: copyOrdinalStats(data.stats),
|
|
144
|
-
newPoints: new Map<string,
|
|
201
|
+
newPoints: new Map<string, FastShiftArray<OrdinalDatum>>(Array.from(data.newPoints.entries()).map(([name, points]) => [name, points.slice()])),
|
|
202
|
+
// newPoints: new Map<string, Array<OrdinalDatum>>(Array.from(data.newPoints.entries()).map(([name, points]) => [name, points.slice()])),
|
|
145
203
|
})
|
|
146
204
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
205
|
+
/**
|
|
206
|
+
* @param initialStats Optional stats to start the accumulation from (see {@link ordinalsObservable})
|
|
207
|
+
* @return The initial accumulated chart data
|
|
208
|
+
*/
|
|
209
|
+
const initialAccumulate = (initialStats?: OrdinalStats): OrdinalChartData =>
|
|
210
|
+
initialStats === undefined ?
|
|
211
|
+
emptyOrdinalData() :
|
|
212
|
+
{
|
|
213
|
+
...emptyOrdinalData(),
|
|
214
|
+
seriesNames: new Set(initialStats.valueStatsForSeries.keys()),
|
|
215
|
+
stats: copyOrdinalStats(initialStats)
|
|
216
|
+
}
|
|
153
217
|
|
|
154
218
|
/**
|
|
155
|
-
* Accepts a {@link TimeSeriesChartData} observable and converts it to an observable of {@link OrdinalChartData}
|
|
219
|
+
* Accepts a {@link TimeSeriesChartData} observable and converts it to an observable of {@link OrdinalChartData}:
|
|
220
|
+
* each emission holds the incoming chunk's points (as ordinal data), and the stats accumulated over
|
|
221
|
+
* all the data so far.
|
|
156
222
|
* @param dataObservable The observable over {@link TimeSeriesChartData}
|
|
223
|
+
* @param [compactingSize=DEFAULT_COMPACTING_SIZE] The number of shifts a series' backing array accumulates before it's compacted
|
|
224
|
+
* @param initialStats Optional stats of the data that already exists (e.g. a chart's accumulated
|
|
225
|
+
* series, see `calculateOrdinalStats`), from which the stats accumulate -- so that the stats cover
|
|
226
|
+
* that data without the data having to be re-emitted through `dataObservable`
|
|
157
227
|
* @return An observable of {@link OrdinalChartData} holding the series for the incoming chart data
|
|
158
228
|
*/
|
|
159
|
-
export function ordinalsObservable(
|
|
229
|
+
export function ordinalsObservable(
|
|
230
|
+
dataObservable: Observable<TimeSeriesChartData>,
|
|
231
|
+
compactingSize: number = DEFAULT_COMPACTING_SIZE,
|
|
232
|
+
initialStats?: OrdinalStats,
|
|
233
|
+
): Observable<OrdinalChartData> {
|
|
160
234
|
return dataObservable
|
|
161
235
|
.pipe(
|
|
162
|
-
// calculate the
|
|
163
|
-
|
|
236
|
+
// calculate the stats for each series in the chart data
|
|
237
|
+
//
|
|
238
|
+
// note: only the stats and the latest new points are accumulated -- the incoming points
|
|
239
|
+
// themselves aren't kept (the data source holds the series). A previous version also
|
|
240
|
+
// appended every incoming point to a map that nothing ever read, which grew without bound
|
|
241
|
+
// for as long as the stream ran (one point per series per tick).
|
|
242
|
+
scan((accumulated: OrdinalChartData, current: TimeSeriesChartData) => {
|
|
164
243
|
// make a deep copy of the accumulated data (because the accumulated data object
|
|
165
244
|
// holds references to maps)
|
|
166
245
|
const accum = copyOrdinalDataFrom(accumulated)
|
|
@@ -169,51 +248,44 @@ export function ordinalsObservable(dataObservable: Observable<TimeSeriesChartDat
|
|
|
169
248
|
Array
|
|
170
249
|
.from(current.newPoints.entries())
|
|
171
250
|
.forEach(([name, series]) => {
|
|
172
|
-
// grab the points from the previous incoming data and add the new
|
|
173
|
-
// data to the end of the previous data (when the updated data
|
|
174
|
-
// didn't yet exist, add it to the map holding the previous series)
|
|
175
|
-
const updated = (previous.get(name) || [])
|
|
176
|
-
if (updated.length === 0) {
|
|
177
|
-
previous.set(name, updated)
|
|
178
|
-
}
|
|
179
|
-
updated.push(...series)
|
|
180
|
-
|
|
181
251
|
// add the series name to the list of all
|
|
182
252
|
accum.seriesNames.add(name)
|
|
183
253
|
|
|
184
254
|
// calculate the max-time, min-time, max-value, and min-value for
|
|
185
255
|
// all the data series
|
|
186
|
-
series.forEach(({
|
|
256
|
+
series.forEach(({x, y}: Datum, ) => {
|
|
187
257
|
// calculate the min and max times over all series
|
|
188
|
-
if (
|
|
189
|
-
accum.stats.minDatum.time = ordinalDatumOf(
|
|
190
|
-
}
|
|
191
|
-
|
|
258
|
+
if (x < accum.stats.minDatum.time.time) {
|
|
259
|
+
accum.stats.minDatum.time = ordinalDatumOf(x, name, y)
|
|
260
|
+
}
|
|
261
|
+
if (x > accum.stats.maxDatum.time.time) {
|
|
262
|
+
accum.stats.maxDatum.time = ordinalDatumOf(x, name, y)
|
|
192
263
|
}
|
|
193
264
|
// calculate the min and max values over all series
|
|
194
|
-
if (
|
|
195
|
-
accum.stats.minDatum.value = ordinalDatumOf(
|
|
196
|
-
}
|
|
197
|
-
|
|
265
|
+
if (y < accum.stats.minDatum.value.value) {
|
|
266
|
+
accum.stats.minDatum.value = ordinalDatumOf(x, name, y)
|
|
267
|
+
}
|
|
268
|
+
if (y > accum.stats.maxDatum.value.value) {
|
|
269
|
+
accum.stats.maxDatum.value = ordinalDatumOf(x, name, y)
|
|
198
270
|
}
|
|
199
271
|
|
|
200
272
|
// calculate the min, max of the time and value for each series
|
|
201
273
|
let valueStats: OrdinalValueStats = accum.stats.valueStatsForSeries.get(name) || defaultOrdinalValueStats()
|
|
202
274
|
|
|
203
|
-
const minValue = (
|
|
204
|
-
ordinalDatumOf(
|
|
275
|
+
const minValue = (y < valueStats.min.value) ?
|
|
276
|
+
ordinalDatumOf(x, name, y) :
|
|
205
277
|
copyOrdinalDatum(valueStats.min)
|
|
206
|
-
const maxValue = (
|
|
207
|
-
ordinalDatumOf(
|
|
278
|
+
const maxValue = (y > valueStats.max.value) ?
|
|
279
|
+
ordinalDatumOf(x, name, y) :
|
|
208
280
|
copyOrdinalDatum(valueStats.max)
|
|
209
281
|
const count = valueStats.count + 1
|
|
210
|
-
const sum = valueStats.sum +
|
|
282
|
+
const sum = valueStats.sum + y
|
|
211
283
|
valueStats = {
|
|
212
284
|
min: minValue,
|
|
213
285
|
max: maxValue,
|
|
214
286
|
count,
|
|
215
287
|
sum,
|
|
216
|
-
sumSquared: isNaN(valueStats.sumSquared) ?
|
|
288
|
+
sumSquared: isNaN(valueStats.sumSquared) ? y * y : valueStats.sumSquared + y * y,
|
|
217
289
|
mean: sum / count
|
|
218
290
|
}
|
|
219
291
|
|
|
@@ -221,28 +293,30 @@ export function ordinalsObservable(dataObservable: Observable<TimeSeriesChartDat
|
|
|
221
293
|
})
|
|
222
294
|
|
|
223
295
|
// convert the new points to ordinal datum
|
|
224
|
-
accum.newPoints.set(name,
|
|
296
|
+
accum.newPoints.set(name, FastShiftArray.fromArray(
|
|
297
|
+
series.map(({x, y}: Datum) => ordinalDatumOf(x, name, y)),
|
|
298
|
+
true,
|
|
299
|
+
compactingSize
|
|
300
|
+
))
|
|
301
|
+
// accum.newPoints.set(name, series.map(({x, y}: Datum) => ordinalDatumOf(x, name, y)))
|
|
225
302
|
})
|
|
226
|
-
return
|
|
227
|
-
}, initialAccumulate()),
|
|
303
|
+
return accum
|
|
304
|
+
}, initialAccumulate(initialStats)),
|
|
228
305
|
|
|
229
306
|
// remove new points from the map that are empty
|
|
230
|
-
map(
|
|
231
|
-
map(accum => accum.accumulated === undefined ? emptyOrdinalData() : accum.accumulated)
|
|
307
|
+
map(accumulated => removeEmptyNewPoints(accumulated))
|
|
232
308
|
)
|
|
233
309
|
}
|
|
234
310
|
|
|
235
|
-
|
|
311
|
+
/**
|
|
312
|
+
* @param data The ordinal chart data
|
|
313
|
+
* @return A copy of the chart data, without any empty new points
|
|
314
|
+
*/
|
|
315
|
+
function removeEmptyNewPoints(data: OrdinalChartData): OrdinalChartData {
|
|
236
316
|
const newPoints = new Map(
|
|
237
317
|
Array
|
|
238
|
-
.from(
|
|
318
|
+
.from(data.newPoints.entries())
|
|
239
319
|
.map(([name, points]) => [name, points.filter(point => nonEmptyOrdinalDatum(point))])
|
|
240
320
|
)
|
|
241
|
-
return {
|
|
242
|
-
previous: accum.previous,
|
|
243
|
-
accumulated: {
|
|
244
|
-
...accum.accumulated,
|
|
245
|
-
newPoints
|
|
246
|
-
}
|
|
247
|
-
}
|
|
321
|
+
return {...data, newPoints}
|
|
248
322
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type {ChartData} from "./ChartData";
|
|
2
|
+
import type {OutlierDatum} from "../series/outlierSeries";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The chart data for outlier charts: each series' new {@link OutlierDatum}s (each a value, with
|
|
6
|
+
* the bands it may fall outside of)
|
|
7
|
+
*/
|
|
8
|
+
export interface OutlierChartData<M extends readonly number[]> extends ChartData {
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Maps the series name to the new outlier datum for that series
|
|
12
|
+
*/
|
|
13
|
+
newPoints: Map<string, Array<OutlierDatum<M>>>
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The current time (used with cadence, when the axes should continue to scroll even when no
|
|
17
|
+
* new data has arrived)
|
|
18
|
+
*/
|
|
19
|
+
currentTime?: number
|
|
20
|
+
}
|