stream-charts 1.2.1 → 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 +36 -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,117 @@
|
|
|
1
|
+
import {type JSX, useCallback, useEffect, useMemo, useRef, useState} from "react";
|
|
2
|
+
import {usePlotDimensions} from "./usePlotDimensions";
|
|
3
|
+
import {createCanvasContext, resizeCanvasTo} from "../plots/plot";
|
|
4
|
+
import type {CanvasContext} from "../d3types";
|
|
5
|
+
import {CanvasSurfaceContext} from "./useCanvasSurface";
|
|
6
|
+
import {initialSvgStyle, type SvgStyle} from "../styling/svgStyle";
|
|
7
|
+
|
|
8
|
+
const defaultBackground = '#202020';
|
|
9
|
+
|
|
10
|
+
export type Props = {
|
|
11
|
+
chartId: number
|
|
12
|
+
color: string
|
|
13
|
+
backgroundColor: string
|
|
14
|
+
svgStyle?: Partial<SvgStyle>
|
|
15
|
+
children: JSX.Element | Array<JSX.Element>
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Creates and sizes the chart's `<canvas>` element, and provides the resulting canvas element and
|
|
20
|
+
* drawing context (via {@link useCanvasSurface}) to descendants -- most notably {@link ChartProvider}.
|
|
21
|
+
*
|
|
22
|
+
* Must be rendered as a descendant of {@link PlotDimensionsProvider}. The canvas's size is derived
|
|
23
|
+
* entirely from {@link usePlotDimensions}'s `plotDimensions`/`margin` -- the single source of truth
|
|
24
|
+
* for the chart's dimensions -- rather than from static width/height props. This matters because
|
|
25
|
+
* `usePlotDimensions` also exposes `updateDimensions(...)`, an escape hatch for updating
|
|
26
|
+
* dimensions independent of any prop (e.g. from a `ResizeObserver`-driven descendant); sourcing
|
|
27
|
+
* the canvas's size from the same place those updates land keeps the canvas from ever drifting out
|
|
28
|
+
* of sync with what the axes/plots believe the plot dimensions to be.
|
|
29
|
+
* @param props The properties
|
|
30
|
+
* @return The children, wrapped in the canvas-surface context provider
|
|
31
|
+
*/
|
|
32
|
+
export default function CanvasSurfaceProvider(props: Props): JSX.Element {
|
|
33
|
+
const {
|
|
34
|
+
chartId,
|
|
35
|
+
color,
|
|
36
|
+
backgroundColor,
|
|
37
|
+
children
|
|
38
|
+
} = props
|
|
39
|
+
|
|
40
|
+
// the container (canvas) size is the plot area plus its margins -- i.e. the inverse of what
|
|
41
|
+
// plotDimensionsFrom(width, height, margin) computes -- reconstructed from usePlotDimensions'
|
|
42
|
+
// state rather than from props, so this stays correct even when dimensions are updated via
|
|
43
|
+
// updateDimensions(...) rather than a containerDimensions prop change.
|
|
44
|
+
const {plotDimensions, margin} = usePlotDimensions()
|
|
45
|
+
const width = plotDimensions.width + margin.left + margin.right
|
|
46
|
+
const height = plotDimensions.height + margin.top + margin.bottom
|
|
47
|
+
|
|
48
|
+
const svgStyle = useMemo<SvgStyle>(
|
|
49
|
+
() => ({...initialSvgStyle, ...props.svgStyle}),
|
|
50
|
+
[props.svgStyle]
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
const [canvas, setCanvas] = useState<HTMLCanvasElement | null>(null)
|
|
54
|
+
const [canvasContext, setCanvasContext] = useState<CanvasContext | null>(null)
|
|
55
|
+
|
|
56
|
+
// captures the dimensions active at the exact moment this component first renders
|
|
57
|
+
const initialDimensionsRef = useRef({width, height})
|
|
58
|
+
|
|
59
|
+
// a plain ref latch, not `canvasContext` state, guards the one-time canvas-context creation
|
|
60
|
+
// below
|
|
61
|
+
const hasCreatedCanvasContext = useRef(false)
|
|
62
|
+
|
|
63
|
+
// keep the canvas's backing store in sync with the plot dimensions, however they change
|
|
64
|
+
// (prop-driven container resize, or a direct updateDimensions(...) call)
|
|
65
|
+
useEffect(
|
|
66
|
+
() => {
|
|
67
|
+
if (canvasContext) {
|
|
68
|
+
resizeCanvasTo(canvasContext, {width, height})
|
|
69
|
+
canvasContext.requestRedraw()
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
[canvasContext, width, height]
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
const setCanvasCallback = useCallback(
|
|
76
|
+
/**
|
|
77
|
+
* Callback for setting the canvas element and updating its CSS style.
|
|
78
|
+
* @param canvasElement - The canvas element, or null if not available (e.g. unmounting).
|
|
79
|
+
*/
|
|
80
|
+
(canvasElement: HTMLCanvasElement | null) => {
|
|
81
|
+
if (canvasElement) {
|
|
82
|
+
setCanvas(canvasElement)
|
|
83
|
+
|
|
84
|
+
// create the canvas context (and do its initial sizing) exactly once, the moment
|
|
85
|
+
// the canvas element first attaches.
|
|
86
|
+
if (!hasCreatedCanvasContext.current) {
|
|
87
|
+
hasCreatedCanvasContext.current = true
|
|
88
|
+
const cc = createCanvasContext(chartId, canvasElement, color)
|
|
89
|
+
resizeCanvasTo(cc, initialDimensionsRef.current)
|
|
90
|
+
setCanvasContext(cc)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// apply the style/background/color from the defaults and any style object passed
|
|
94
|
+
// in as properties, one property at a time, rather than overwriting the whole
|
|
95
|
+
// `style` attribute
|
|
96
|
+
Object.getOwnPropertyNames(svgStyle)
|
|
97
|
+
.filter(name => name !== 'width' && name !== 'height')
|
|
98
|
+
.forEach(name => canvasElement.style.setProperty(name, String(svgStyle[name])))
|
|
99
|
+
|
|
100
|
+
canvasElement.style.backgroundColor = backgroundColor !== defaultBackground ? backgroundColor : ''
|
|
101
|
+
canvasElement.style.color = color
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
[backgroundColor, chartId, color, svgStyle]
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
const value = useMemo(() => ({canvas, canvasContext}), [canvas, canvasContext])
|
|
108
|
+
|
|
109
|
+
return (
|
|
110
|
+
<CanvasSurfaceContext.Provider value={value}>
|
|
111
|
+
<div style={{position: 'relative', width, height}}>
|
|
112
|
+
<canvas ref={setCanvasCallback}/>
|
|
113
|
+
</div>
|
|
114
|
+
{children}
|
|
115
|
+
</CanvasSurfaceContext.Provider>
|
|
116
|
+
)
|
|
117
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type {BaseAxis, SeriesStyle} from "../axes/axes";
|
|
2
|
+
import {BaseAxisRange} from "../axes/BaseAxisRange";
|
|
3
|
+
import {type JSX, useMemo} from "react";
|
|
4
|
+
import {defaultUseChartValues} from "./defaultUseChartValues";
|
|
5
|
+
import {useAxes} from "./useAxes";
|
|
6
|
+
import {useMouse} from "./useMouse";
|
|
7
|
+
import {useTooltip} from "./useTooltip";
|
|
8
|
+
import {useCanvasSurface} from "./useCanvasSurface";
|
|
9
|
+
import {ChartContext} from "./useChart";
|
|
10
|
+
|
|
11
|
+
// the defaults (constants, so that their identity doesn't change from one render to the next)
|
|
12
|
+
const DEFAULT_SERIES_FILTER = defaultUseChartValues().seriesFilter
|
|
13
|
+
const NO_SERIES_STYLES = new Map<string, SeriesStyle>()
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The properties for the {@link ChartProvider}
|
|
17
|
+
* @template S The type of the series style
|
|
18
|
+
*/
|
|
19
|
+
export interface Props<S extends SeriesStyle> {
|
|
20
|
+
/**
|
|
21
|
+
* The unique ID for the chart
|
|
22
|
+
*/
|
|
23
|
+
chartId: number
|
|
24
|
+
/**
|
|
25
|
+
* Base color
|
|
26
|
+
*/
|
|
27
|
+
color: string
|
|
28
|
+
/**
|
|
29
|
+
* The base/default background color
|
|
30
|
+
*/
|
|
31
|
+
backgroundColor: string
|
|
32
|
+
/**
|
|
33
|
+
* A `map(series_name -> series_line_style)` holding the style for each series
|
|
34
|
+
*/
|
|
35
|
+
seriesStyles?: Map<string, S>
|
|
36
|
+
/**
|
|
37
|
+
* An optional regular expression used against the series names to determine which series to show in the chart
|
|
38
|
+
*/
|
|
39
|
+
seriesFilter?: RegExp
|
|
40
|
+
|
|
41
|
+
children: JSX.Element | Array<JSX.Element>
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The React context provider for the {@link UseChartValues}
|
|
46
|
+
* @param props The properties
|
|
47
|
+
* @return The children wrapped in this provider
|
|
48
|
+
* @template S The type of the series style
|
|
49
|
+
* @template AR The type of the axis range
|
|
50
|
+
* @template A The type of the axis
|
|
51
|
+
*/
|
|
52
|
+
export default function ChartProvider<S extends SeriesStyle, AR extends BaseAxisRange, A extends BaseAxis>(props: Props<S>): JSX.Element {
|
|
53
|
+
const {
|
|
54
|
+
chartId,
|
|
55
|
+
color,
|
|
56
|
+
backgroundColor,
|
|
57
|
+
seriesFilter = DEFAULT_SERIES_FILTER,
|
|
58
|
+
seriesStyles = NO_SERIES_STYLES as Map<string, S>,
|
|
59
|
+
} = props
|
|
60
|
+
|
|
61
|
+
// canvas/canvasContext come from CanvasSurfaceProvider (a shared ancestor -- see Chart.tsx),
|
|
62
|
+
// which sizes the canvas from usePlotDimensions() rather than from props, so this always
|
|
63
|
+
// reflects the same dimensions the axes/plots are using.
|
|
64
|
+
const {canvas, canvasContext} = useCanvasSurface()
|
|
65
|
+
|
|
66
|
+
const axes = useAxes<AR, A>()
|
|
67
|
+
const mouse = useMouse()
|
|
68
|
+
const tooltip = useTooltip()
|
|
69
|
+
|
|
70
|
+
// (memoized, so that the chart's components only re-render when something in it changes)
|
|
71
|
+
const value = useMemo(
|
|
72
|
+
() => ({chartId, color, backgroundColor, seriesStyles, seriesFilter, canvasContext, canvas, axes, mouse, tooltip}),
|
|
73
|
+
[chartId, color, backgroundColor, seriesStyles, seriesFilter, canvasContext, canvas, axes, mouse, tooltip]
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
return <ChartContext.Provider value={value}>
|
|
77
|
+
{props.children}
|
|
78
|
+
</ChartContext.Provider>
|
|
79
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import {type JSX, useMemo, useRef, useState} from "react";
|
|
2
|
+
import {MouseContext, type TooltipMouseLeaveHandlerFn, type TooltipMouseOverHandlerFn, type UseMouseValues} from "./useMouse";
|
|
3
|
+
import {type TooltipContentProvider, TooltipContext, type UseTooltipValues} from "./useTooltip";
|
|
4
|
+
import {HoveredSeriesContext, type HoveredSeriesValues} from "./useHoveredSeries";
|
|
5
|
+
|
|
6
|
+
type Props = {
|
|
7
|
+
children: JSX.Element | Array<JSX.Element>
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Provides the chart's interactions: the mouse-over and mouse-leave handlers (see {@link useMouse}),
|
|
12
|
+
* the tooltip's content provider and visibility (see {@link useTooltip}), and the hovered series
|
|
13
|
+
* (see {@link useHoveredSeries}).
|
|
14
|
+
*
|
|
15
|
+
* The plots hit-test the mouse, and call the mouse handlers: a mouse-over sets the hovered series,
|
|
16
|
+
* and then calls every registered mouse-over handler (e.g. the tooltip's); a mouse-leave clears the
|
|
17
|
+
* hovered series, and calls every registered mouse-leave handler.
|
|
18
|
+
*
|
|
19
|
+
* The handler registries live in refs, so the mouse and tooltip values never change identity (the
|
|
20
|
+
* tooltip's changes only with its visibility), and registering a handler never re-renders anything.
|
|
21
|
+
* @param props The children
|
|
22
|
+
* @return The children, wrapped in the interaction contexts
|
|
23
|
+
* @template D The type of the data object for the series
|
|
24
|
+
* @template TM The type of the metadata object for the series
|
|
25
|
+
*/
|
|
26
|
+
export default function InteractionProvider<D, TM>(props: Props): JSX.Element {
|
|
27
|
+
const {children} = props
|
|
28
|
+
|
|
29
|
+
const mouseOverHandlersRef = useRef<Map<string, TooltipMouseOverHandlerFn<D, TM>>>(new Map())
|
|
30
|
+
const mouseLeaveHandlersRef = useRef<Map<string, (seriesName: string, providerId?: string) => void>>(new Map())
|
|
31
|
+
const tooltipContentProviderRef = useRef<TooltipContentProvider<D, TM>>(undefined)
|
|
32
|
+
|
|
33
|
+
const [hoveredSeriesName, setHoveredSeriesName] = useState<string | null>(null)
|
|
34
|
+
const [tooltipVisible, setTooltipVisible] = useState<boolean>(false)
|
|
35
|
+
|
|
36
|
+
const mouse = useMemo<UseMouseValues<D, TM>>(
|
|
37
|
+
() => ({
|
|
38
|
+
registerMouseOverHandler: (handlerId, handler) => {
|
|
39
|
+
mouseOverHandlersRef.current.set(handlerId, handler)
|
|
40
|
+
return handlerId
|
|
41
|
+
},
|
|
42
|
+
unregisterMouseOverHandler: handlerId => mouseOverHandlersRef.current.delete(handlerId),
|
|
43
|
+
mouseOverHandlerFor: (_handlerId, providerId) =>
|
|
44
|
+
(seriesName, time, tooltipData, mouseCoords) => {
|
|
45
|
+
setHoveredSeriesName(seriesName)
|
|
46
|
+
mouseOverHandlersRef.current.forEach(handler => handler(seriesName, time, tooltipData, mouseCoords, providerId))
|
|
47
|
+
},
|
|
48
|
+
registerMouseLeaveHandler: (handlerId, handler: TooltipMouseLeaveHandlerFn) => {
|
|
49
|
+
mouseLeaveHandlersRef.current.set(handlerId, handler)
|
|
50
|
+
return handlerId
|
|
51
|
+
},
|
|
52
|
+
unregisterMouseLeaveHandler: handlerId => mouseLeaveHandlersRef.current.delete(handlerId),
|
|
53
|
+
mouseLeaveHandlerFor: (_handlerId, providerId) =>
|
|
54
|
+
seriesName => {
|
|
55
|
+
setHoveredSeriesName(null)
|
|
56
|
+
mouseLeaveHandlersRef.current.forEach(handler => handler(seriesName, providerId))
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
[]
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
const tooltip = useMemo<UseTooltipValues<D, TM>>(
|
|
63
|
+
() => ({
|
|
64
|
+
registerTooltipContentProvider: provider => {
|
|
65
|
+
tooltipContentProviderRef.current = provider
|
|
66
|
+
},
|
|
67
|
+
tooltipContentProvider: () => tooltipContentProviderRef.current,
|
|
68
|
+
setVisibilityState: setTooltipVisible,
|
|
69
|
+
visibilityState: tooltipVisible,
|
|
70
|
+
}),
|
|
71
|
+
[tooltipVisible]
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
const hovered = useMemo<HoveredSeriesValues>(
|
|
75
|
+
() => ({hoveredSeriesName, setHoveredSeriesName}),
|
|
76
|
+
[hoveredSeriesName]
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<MouseContext.Provider value={mouse}>
|
|
81
|
+
<TooltipContext.Provider value={tooltip}>
|
|
82
|
+
<HoveredSeriesContext.Provider value={hovered}>
|
|
83
|
+
{children}
|
|
84
|
+
</HoveredSeriesContext.Provider>
|
|
85
|
+
</TooltipContext.Provider>
|
|
86
|
+
</MouseContext.Provider>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import {type JSX, useCallback, useEffect, useMemo, useRef, useState} from "react";
|
|
2
|
+
import {type Dimensions, dimensionsNotEqual, type Margin, plotDimensionsFrom} from "../styling/margins";
|
|
3
|
+
import {defaultPlotDimensions} from "./defaultPlotDimensions";
|
|
4
|
+
import {type PlotDimensionChangeHandler, PlotDimensionsContext} from "./usePlotDimensions";
|
|
5
|
+
|
|
6
|
+
export type Props = {
|
|
7
|
+
containerDimensions: Dimensions
|
|
8
|
+
margin: Margin
|
|
9
|
+
children: JSX.Element | Array<JSX.Element>
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Provides the plot's dimensions and margins (see {@link usePlotDimensions}): the plot dimensions
|
|
14
|
+
* are the container's dimensions less the margins, and are updated (and the registered change
|
|
15
|
+
* handlers called) when the container's dimensions or the margins change.
|
|
16
|
+
* @param props The properties
|
|
17
|
+
* @return The children wrapped in this provider
|
|
18
|
+
*/
|
|
19
|
+
export default function PlotDimensionsProvider(props: Props): JSX.Element {
|
|
20
|
+
const {
|
|
21
|
+
containerDimensions,
|
|
22
|
+
margin,
|
|
23
|
+
children
|
|
24
|
+
} = props
|
|
25
|
+
|
|
26
|
+
const [dimensions, setDimensions] = useState<Dimensions>(defaultPlotDimensions().plotDimensions)
|
|
27
|
+
// holds the latest committed dimensions so the change handlers can be fired from the effect body
|
|
28
|
+
const dimensionsRef = useRef<Dimensions>(dimensions)
|
|
29
|
+
const plotDimensionChangeHandlersRef = useRef<Map<string, PlotDimensionChangeHandler>>(new Map())
|
|
30
|
+
|
|
31
|
+
// update the plot dimensions when the container size or margin change
|
|
32
|
+
useEffect(
|
|
33
|
+
() => {
|
|
34
|
+
const newDimensions = plotDimensionsFrom(containerDimensions.width, containerDimensions.height, margin)
|
|
35
|
+
if (dimensionsNotEqual(dimensionsRef.current, newDimensions)) {
|
|
36
|
+
for (const handler of plotDimensionChangeHandlersRef.current.values()) {
|
|
37
|
+
handler(dimensionsRef.current, newDimensions)
|
|
38
|
+
}
|
|
39
|
+
dimensionsRef.current = newDimensions
|
|
40
|
+
setDimensions(newDimensions)
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
[containerDimensions, margin]
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Updates the plot dimensions and fires any registered change handlers. Wrapped in
|
|
48
|
+
* `useCallback` (empty deps -- closes only over refs and the stable `setDimensions` setter) so
|
|
49
|
+
* its identity is stable across renders, which in turn lets the context `value` below be
|
|
50
|
+
* memoized instead of being a fresh object on every render.
|
|
51
|
+
* @param newDimensions The new plot dimensions.
|
|
52
|
+
*/
|
|
53
|
+
const updateDimensions = useCallback(
|
|
54
|
+
(newDimensions: Dimensions) => {
|
|
55
|
+
if (dimensionsNotEqual(dimensionsRef.current, newDimensions)) {
|
|
56
|
+
for (const handler of plotDimensionChangeHandlersRef.current.values()) {
|
|
57
|
+
handler(dimensionsRef.current, newDimensions)
|
|
58
|
+
}
|
|
59
|
+
dimensionsRef.current = newDimensions
|
|
60
|
+
setDimensions(newDimensions)
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
[]
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Registers a plot dimension change handler.
|
|
68
|
+
* @param handler The handler to register.
|
|
69
|
+
* @returns The handler ID.
|
|
70
|
+
*/
|
|
71
|
+
const registerPlotDimensionChangeHandler = useCallback(
|
|
72
|
+
(handler: PlotDimensionChangeHandler) => {
|
|
73
|
+
const handlerId = crypto.randomUUID()
|
|
74
|
+
plotDimensionChangeHandlersRef.current.set(handlerId, handler)
|
|
75
|
+
return handlerId
|
|
76
|
+
},
|
|
77
|
+
[]
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Unregisters a plot dimension change handler.
|
|
82
|
+
* @param handlerId The handler ID.
|
|
83
|
+
* @returns True if the handler was unregistered, false if it was not found.
|
|
84
|
+
*/
|
|
85
|
+
const unregisterPlotDimensionChangeHandler = useCallback(
|
|
86
|
+
(handlerId: string): boolean => plotDimensionChangeHandlersRef.current.delete(handlerId),
|
|
87
|
+
[]
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
// memoized so consumers relying on context value identity (e.g. a useMemo/effect keyed on this
|
|
91
|
+
// context's value) don't re-run on every render of anything above this provider -- previously
|
|
92
|
+
// a fresh object literal every render, which is exactly the same class of bug already
|
|
93
|
+
// documented/worked-around for AxesProvider's context value (see e.g. ScatterPlot.tsx's note
|
|
94
|
+
// on `axesRanges` never being memoized there).
|
|
95
|
+
const value = useMemo(
|
|
96
|
+
() => ({
|
|
97
|
+
plotDimensions: dimensions,
|
|
98
|
+
margin,
|
|
99
|
+
updateDimensions,
|
|
100
|
+
registerPlotDimensionChangeHandler,
|
|
101
|
+
unregisterPlotDimensionChangeHandler
|
|
102
|
+
}),
|
|
103
|
+
[dimensions, margin, updateDimensions, registerPlotDimensionChangeHandler, unregisterPlotDimensionChangeHandler]
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
return <PlotDimensionsContext.Provider value={value}>
|
|
107
|
+
{children}
|
|
108
|
+
</PlotDimensionsContext.Provider>
|
|
109
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {BaseAxisRange} from "../axes/BaseAxisRange";
|
|
2
|
+
import type {BaseAxis} from "../axes/axes";
|
|
3
|
+
import {AxesState} from "../axes/AxesState";
|
|
4
|
+
import {Optional} from "result-fn";
|
|
5
|
+
import type {UseAxesValues} from "./useAxes";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* No operation function for use when a default function is needed
|
|
9
|
+
*/
|
|
10
|
+
const noop = () => {
|
|
11
|
+
/* empty on purpose */
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Default axes value
|
|
16
|
+
* @return The default values for the {@link UseAxesValues}
|
|
17
|
+
* @template AR The type of the axis range (e.g. {@link ContinuousAxisRange} or {@link OrdinalAxisRange})
|
|
18
|
+
* @template A The axis type
|
|
19
|
+
*/
|
|
20
|
+
export function defaultAxesValues<AR extends BaseAxisRange, A extends BaseAxis>(): UseAxesValues<AR, A> {
|
|
21
|
+
return ({
|
|
22
|
+
xAxesState: AxesState.empty(),
|
|
23
|
+
yAxesState: AxesState.empty(),
|
|
24
|
+
addXAxis: noop,
|
|
25
|
+
addYAxis: noop,
|
|
26
|
+
setAxisAssignments: noop,
|
|
27
|
+
axisAssignmentsFor: () => ({xAxis: "", yAxis: ""}),
|
|
28
|
+
updateAxisRanges: noop,
|
|
29
|
+
axesRanges: () => new Map<string, AR>(),
|
|
30
|
+
axisRangeFor: () => Optional.empty(),
|
|
31
|
+
setAxesRanges: noop,
|
|
32
|
+
setAxisRangeFor: noop,
|
|
33
|
+
setAxisIntervalFor: noop,
|
|
34
|
+
setOriginalAxisIntervalFor: noop,
|
|
35
|
+
resetAxisIntervalFor: noop,
|
|
36
|
+
resetAxesRanges: noop,
|
|
37
|
+
addAxesRangesUpdateHandler: () => noop,
|
|
38
|
+
removeAxesRangesUpdateHandler: () => noop,
|
|
39
|
+
})
|
|
40
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type {UseMouseValues} from "./useMouse";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* No operation function for use when a default function is needed
|
|
5
|
+
*/
|
|
6
|
+
const noop = () => {
|
|
7
|
+
/* empty on purpose */
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The default values for the {@link UseMouseValues}
|
|
11
|
+
* @return The default values for the {@link UseMouseValues}
|
|
12
|
+
* @template D The type of the data object for the series
|
|
13
|
+
* @template TM The type of the metadata object for the series
|
|
14
|
+
*/
|
|
15
|
+
export function defaultMouseValues<D, TM>(): UseMouseValues<D, TM> {
|
|
16
|
+
return {
|
|
17
|
+
registerMouseOverHandler: () => '',
|
|
18
|
+
unregisterMouseOverHandler: noop,
|
|
19
|
+
mouseOverHandlerFor: () => noop,
|
|
20
|
+
registerMouseLeaveHandler: () => '',
|
|
21
|
+
unregisterMouseLeaveHandler: noop,
|
|
22
|
+
mouseLeaveHandlerFor: () => noop,
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type {Margin} from "../styling/margins";
|
|
2
|
+
import type {UsePlotDimensionsValues} from "./usePlotDimensions";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* No operation function for use when a default function is needed
|
|
6
|
+
*/
|
|
7
|
+
const noop = () => {
|
|
8
|
+
/* empty on purpose */
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The default values for the {@link UsePlotDimensionsValues}: zero-sized plot dimensions, the
|
|
13
|
+
* {@link defaultMargin}, and no-op functions
|
|
14
|
+
* @return The default plot-dimension values
|
|
15
|
+
*/
|
|
16
|
+
export const defaultPlotDimensions = (): UsePlotDimensionsValues => ({
|
|
17
|
+
plotDimensions: {width: 0, height: 0},
|
|
18
|
+
margin: defaultMargin,
|
|
19
|
+
updateDimensions: noop,
|
|
20
|
+
registerPlotDimensionChangeHandler: () => "",
|
|
21
|
+
unregisterPlotDimensionChangeHandler: noop
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The default margins between the edges of the chart and the plot area
|
|
26
|
+
*/
|
|
27
|
+
export const defaultMargin: Margin = {top: 30, right: 20, bottom: 30, left: 50}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type {UseTooltipValues} from "./useTooltip";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* No operation function for use when a default function is needed
|
|
5
|
+
*/
|
|
6
|
+
const noop = () => {
|
|
7
|
+
/* empty on purpose */
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The default values for the {@link UseTooltipValues}
|
|
12
|
+
* @return The default values for the {@link UseTooltipValues}
|
|
13
|
+
* @template D The type of the data object for the series
|
|
14
|
+
* @template M The type of the metadata object for the series
|
|
15
|
+
*/
|
|
16
|
+
export function defaultTooltipValues<D, M>(): UseTooltipValues<D, M> {
|
|
17
|
+
return {
|
|
18
|
+
registerTooltipContentProvider: noop,
|
|
19
|
+
tooltipContentProvider: () => undefined,
|
|
20
|
+
setVisibilityState: noop,
|
|
21
|
+
visibilityState: false,
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type {BaseAxis, SeriesStyle} from "../axes/axes";
|
|
2
|
+
import {BaseAxisRange} from "../axes/BaseAxisRange";
|
|
3
|
+
import {defaultAxesValues} from "./defaultAxesValues";
|
|
4
|
+
import {defaultMouseValues} from "./defaultMouseValues";
|
|
5
|
+
import {defaultTooltipValues} from "./defaultTooltipValues";
|
|
6
|
+
import type {UseChartValues} from "./useChart";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The default values for the {@link UseChartValues}
|
|
10
|
+
* @return The default values for the {@link UseChartValues}
|
|
11
|
+
* @template D The type of the series' datum
|
|
12
|
+
* @template S The type of the series style
|
|
13
|
+
* @template TM The type of the tooltip's metadata (data about the series data)
|
|
14
|
+
* @template AR The type of the axis range
|
|
15
|
+
* @template A The type of the axis
|
|
16
|
+
*/
|
|
17
|
+
export function defaultUseChartValues<D, S extends SeriesStyle, TM, AR extends BaseAxisRange, A extends BaseAxis>(): UseChartValues<D, S, TM, AR, A> {
|
|
18
|
+
return {
|
|
19
|
+
chartId: NaN,
|
|
20
|
+
canvas: null,
|
|
21
|
+
canvasContext: null,
|
|
22
|
+
color: '#d2933f',
|
|
23
|
+
backgroundColor: '#EEE',
|
|
24
|
+
seriesStyles: new Map<string, S>(),
|
|
25
|
+
|
|
26
|
+
// axes
|
|
27
|
+
axes: defaultAxesValues(),
|
|
28
|
+
|
|
29
|
+
// data
|
|
30
|
+
seriesFilter: /./,
|
|
31
|
+
|
|
32
|
+
// internal chart-interaction event handlers
|
|
33
|
+
mouse: defaultMouseValues(),
|
|
34
|
+
tooltip: defaultTooltipValues(),
|
|
35
|
+
}
|
|
36
|
+
}
|