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
|
@@ -1,148 +1,82 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {defaultTooltipStyle,
|
|
3
|
-
import * as d3 from "d3";
|
|
1
|
+
import {type JSX, useEffect, useMemo} from "react";
|
|
2
|
+
import {defaultTooltipStyle, type TooltipStyle} from "./tooltipUtils";
|
|
4
3
|
import {useChart} from "../hooks/useChart";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {TooltipData} from "../hooks/useTooltip";
|
|
4
|
+
import type {BaseAxis, SeriesStyle} from "../axes/axes";
|
|
5
|
+
import type {TooltipData} from "../hooks/useTooltip";
|
|
8
6
|
import {BaseAxisRange} from "../axes/BaseAxisRange";
|
|
7
|
+
import {TooltipStyleContext} from "./useTooltipStyle";
|
|
9
8
|
|
|
9
|
+
/**
|
|
10
|
+
* The properties of the {@link Tooltip}
|
|
11
|
+
*/
|
|
10
12
|
export interface Props {
|
|
13
|
+
/** whether the tooltip is shown when the mouse is over one of the plot's elements */
|
|
11
14
|
visible: boolean
|
|
15
|
+
/** the style of the tooltip (its box and text); its content can override parts of it */
|
|
12
16
|
style?: Partial<TooltipStyle>
|
|
17
|
+
/** the tooltip's content (e.g. a `<ScatterPlotTooltipContent>`, or your own, built on `<TooltipContent>`) */
|
|
13
18
|
children: JSX.Element
|
|
14
19
|
}
|
|
15
20
|
|
|
16
21
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* uses the {@link useTooltip}'s {@link UseTooltipValues.tooltipContentProvider} to render the actual
|
|
22
|
-
* content of the tooltip. The content provider is given the series' name on which the mouse-over
|
|
23
|
-
* event occurred, the plot time associated with mouse-over event, and the {@link TimeSeries}
|
|
24
|
-
* associated with the mouse-over event. The plot (for example {@link ScatterPlot}) is responsible
|
|
25
|
-
* for rendering the tooltip, and it registers this tooltip-content provider with the {@link useTooltip}
|
|
26
|
-
* hook.
|
|
27
|
-
*
|
|
28
|
-
* The {@link useChart} hook allows the plots and this tooltip to register methods needed its siblings.
|
|
29
|
-
*
|
|
30
|
-
* ## on mount
|
|
31
|
-
* 1. The plot (for example {@link ScatterPlot}) adds a d3 mouse-enter and mouse-leave event handlers
|
|
32
|
-
* to each series. The mouse-enter event handler performs a few tasks and then calls the
|
|
33
|
-
* mouse-over event handler registered by the {@link Tooltip} via the {@link useMouse} hook.
|
|
34
|
-
* 2. The plot (for example {@link ScatterPlot}) registers the tooltip-content provider with the {@link useTooltip}
|
|
35
|
-
* hook using the {@link UseTooltipValues.registerTooltipContentProvider} function.
|
|
36
|
-
* 3. {@link Tooltip} registers the handler for mouse-over events. The handler accepts the series
|
|
37
|
-
* name, plot time, and time-series associated with the mouse-over event, and returns the tooltip
|
|
38
|
-
* dimensions. In order to create/render the tooltip, it uses the {@link UseTooltipValues.tooltipContentProvider}
|
|
39
|
-
* function that was registered via the {@link useTooltip} hook.
|
|
22
|
+
* Shows a tooltip when the mouse is over one of the plot's elements (a series, a point, a spike, a
|
|
23
|
+
* bar, a band, and so on), while `visible` is `true`. What the tooltip shows is up to its content
|
|
24
|
+
* (its child -- for example, a `<ScatterPlotTooltipContent>`), which is built on
|
|
25
|
+
* {@link TooltipContent}.
|
|
40
26
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
27
|
+
* The plot hit-tests the mouse against what it drew, and calls the mouse-over handler this
|
|
28
|
+
* component registers (see `useMouse`), which hands what the plot knows about the element
|
|
29
|
+
* under the mouse to the content's tooltip-content provider (see `useTooltip`). The content
|
|
30
|
+
* shows itself, and hides itself again when the mouse leaves the element.
|
|
45
31
|
*
|
|
46
|
-
*
|
|
47
|
-
* @
|
|
32
|
+
* The content gets this tooltip's style (its `style` over the default tooltip style) through
|
|
33
|
+
* {@link useTooltipStyle}, and can override parts of it.
|
|
34
|
+
* @param props Whether the tooltip is shown, its style, and its content
|
|
35
|
+
* @return The content, while the tooltip is shown
|
|
36
|
+
* @template D The type of the series' datum
|
|
37
|
+
* @template S The type of the series style
|
|
38
|
+
* @template TM The type of the tooltip metadata
|
|
39
|
+
* @template AR The type of the axis range
|
|
40
|
+
* @template A The type of the axis
|
|
48
41
|
*/
|
|
49
42
|
export function Tooltip<D, S extends SeriesStyle, TM, AR extends BaseAxisRange, A extends BaseAxis>(props: Props): JSX.Element {
|
|
50
|
-
const {
|
|
51
|
-
chartId,
|
|
52
|
-
container,
|
|
53
|
-
tooltip,
|
|
54
|
-
mouse
|
|
55
|
-
} = useChart<D, S, TM, AR, A>()
|
|
56
|
-
|
|
57
|
-
const {
|
|
58
|
-
tooltipContentProvider,
|
|
59
|
-
setVisibilityState,
|
|
60
|
-
} = tooltip
|
|
61
|
-
|
|
62
|
-
const {margin, plotDimensions} = usePlotDimensions()
|
|
63
|
-
|
|
64
|
-
const {
|
|
65
|
-
visible,
|
|
66
|
-
style,
|
|
67
|
-
children
|
|
68
|
-
} = props
|
|
43
|
+
const {visible, style, children} = props
|
|
69
44
|
|
|
70
|
-
const {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
registerMouseLeaveHandler,
|
|
74
|
-
unregisterMouseLeaveHandler
|
|
75
|
-
} = mouse
|
|
45
|
+
const {chartId, tooltip, mouse} = useChart<D, S, TM, AR, A>()
|
|
46
|
+
const {tooltipContentProvider, setVisibilityState} = tooltip
|
|
47
|
+
const {registerMouseOverHandler, unregisterMouseOverHandler} = mouse
|
|
76
48
|
|
|
77
|
-
const tooltipStyle = useMemo(() => ({...defaultTooltipStyle, ...style}), [style])
|
|
78
|
-
|
|
79
|
-
// let the tooltip context know whether the tooltip is visible
|
|
80
|
-
setVisibilityState(visible)
|
|
49
|
+
const tooltipStyle = useMemo<TooltipStyle>(() => ({...defaultTooltipStyle, ...style}), [style])
|
|
81
50
|
|
|
82
51
|
useEffect(
|
|
83
52
|
() => {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (contentProvider) {
|
|
88
|
-
// register this tooltip's mouse-over event handler with the useCharts hook
|
|
89
|
-
// so that the plots can call it when mouse-enter events are triggered (for
|
|
90
|
-
// example, a mouse-over a time-series in the plot).
|
|
91
|
-
registerMouseOverHandler(
|
|
92
|
-
handlerId,
|
|
93
|
-
(
|
|
94
|
-
(
|
|
95
|
-
seriesName: string,
|
|
96
|
-
time: number,
|
|
97
|
-
tooltipData: TooltipData<D, TM>,
|
|
98
|
-
mouseCoords: [x: number, y: number],
|
|
99
|
-
providerId?: string
|
|
100
|
-
) => {
|
|
101
|
-
// create the rounded rectangle for the tooltip's background
|
|
102
|
-
const rect = d3.select<SVGSVGElement | null, any>(container)
|
|
103
|
-
.append<SVGRectElement>('rect')
|
|
104
|
-
.attr('id', `r${time}-${seriesName}-${chartId}`)
|
|
105
|
-
.attr('class', 'tooltip')
|
|
106
|
-
.attr('rx', tooltipStyle.borderRadius)
|
|
107
|
-
.attr('fill', tooltipStyle.backgroundColor)
|
|
108
|
-
.attr('fill-opacity', tooltipStyle.backgroundOpacity)
|
|
109
|
-
.attr('stroke', tooltipStyle.borderColor)
|
|
110
|
-
.attr('stroke-width', tooltipStyle.borderWidth)
|
|
111
|
-
.attr('stroke-opacity', tooltipStyle.borderOpacity)
|
|
112
|
-
|
|
113
|
-
// call the callback to add the content
|
|
114
|
-
const {
|
|
115
|
-
x,
|
|
116
|
-
y,
|
|
117
|
-
contentWidth,
|
|
118
|
-
contentHeight
|
|
119
|
-
} = contentProvider(seriesName, time, tooltipData, mouseCoords, providerId)
|
|
120
|
-
|
|
121
|
-
// set the position, width, and height of the tooltip rect based on the text height and width and the padding
|
|
122
|
-
rect.attr('x', () => x)
|
|
123
|
-
.attr('y', () => y)
|
|
124
|
-
.attr('width', contentWidth + tooltipStyle.paddingLeft + tooltipStyle.paddingRight)
|
|
125
|
-
.attr('height', contentHeight + tooltipStyle.paddingTop + tooltipStyle.paddingBottom)
|
|
53
|
+
// let the tooltip context know whether the tooltip is visible
|
|
54
|
+
setVisibilityState(visible)
|
|
55
|
+
if (!visible) return
|
|
126
56
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
57
|
+
// hands the element under the mouse to the content's provider (looked up on each call,
|
|
58
|
+
// so it's always the one the content registered most recently)
|
|
59
|
+
const handlerId = `tooltip-${chartId}`
|
|
60
|
+
registerMouseOverHandler(
|
|
61
|
+
handlerId,
|
|
62
|
+
(
|
|
63
|
+
seriesName: string,
|
|
64
|
+
time: number,
|
|
65
|
+
tooltipData: TooltipData<D, TM>,
|
|
66
|
+
mouseCoords: [x: number, y: number],
|
|
67
|
+
providerId?: string
|
|
68
|
+
) => tooltipContentProvider()?.(seriesName, time, tooltipData, mouseCoords, providerId)
|
|
69
|
+
)
|
|
70
|
+
return () => unregisterMouseOverHandler(handlerId)
|
|
138
71
|
},
|
|
139
|
-
[
|
|
140
|
-
chartId, container, margin, plotDimensions,
|
|
141
|
-
registerMouseOverHandler, tooltipContentProvider, tooltipStyle,
|
|
142
|
-
unregisterMouseOverHandler, visible, registerMouseLeaveHandler,
|
|
143
|
-
unregisterMouseLeaveHandler
|
|
144
|
-
]
|
|
72
|
+
[chartId, visible, tooltipContentProvider, setVisibilityState, registerMouseOverHandler, unregisterMouseOverHandler]
|
|
145
73
|
)
|
|
146
74
|
|
|
147
|
-
|
|
75
|
+
// (the content is only mounted while the tooltip is visible, so hiding the tooltip also hides
|
|
76
|
+
// any content that's showing)
|
|
77
|
+
return (
|
|
78
|
+
<TooltipStyleContext.Provider value={tooltipStyle}>
|
|
79
|
+
{visible ? children : null}
|
|
80
|
+
</TooltipStyleContext.Provider>
|
|
81
|
+
)
|
|
148
82
|
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import {type CSSProperties, type ReactElement, type ReactNode, useEffect, useMemo, useRef, useState} from "react";
|
|
2
|
+
import {createPortal} from "react-dom";
|
|
3
|
+
import {useChart} from "../hooks/useChart";
|
|
4
|
+
import {usePlotDimensions} from "../hooks/usePlotDimensions";
|
|
5
|
+
import type {TooltipData} from "../hooks/useTooltip";
|
|
6
|
+
import type {BaseAxis, SeriesStyle} from "../axes/axes";
|
|
7
|
+
import type {BaseAxisRange} from "../axes/BaseAxisRange";
|
|
8
|
+
import {withAlpha} from "../styling/canvasStyle";
|
|
9
|
+
import type {TooltipStyle} from "./tooltipUtils";
|
|
10
|
+
import {tooltipAnchorFor, type TooltipAnchor, useTooltipPlacement} from "./useTooltipPlacement";
|
|
11
|
+
import {useTooltipStyle} from "./useTooltipStyle";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Turns what the plot hands the tooltip about the element under the mouse into the content to show
|
|
15
|
+
* (any value you like), or `undefined` to show nothing.
|
|
16
|
+
* @param seriesName The name of the series under the mouse
|
|
17
|
+
* @param time A value that depends on the plot: usually the time under the mouse (see the plot's
|
|
18
|
+
* documentation)
|
|
19
|
+
* @param tooltipData The series' data, and the plot's metadata about the element under the mouse
|
|
20
|
+
* @param providerId Which kind of element is under the mouse, for a plot that has several (e.g. the
|
|
21
|
+
* bar plot)
|
|
22
|
+
* @return The tooltip's content, or `undefined` to show no tooltip
|
|
23
|
+
* @template D The type of the series' datum
|
|
24
|
+
* @template M The type of the plot's tooltip metadata
|
|
25
|
+
* @template C The type of the tooltip's content
|
|
26
|
+
*/
|
|
27
|
+
export type TooltipCapture<D, M, C> = (
|
|
28
|
+
seriesName: string,
|
|
29
|
+
time: number,
|
|
30
|
+
tooltipData: TooltipData<D, M>,
|
|
31
|
+
providerId?: string
|
|
32
|
+
) => C | undefined
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The properties of the {@link TooltipContent}
|
|
36
|
+
* @template D The type of the series' datum
|
|
37
|
+
* @template M The type of the plot's tooltip metadata
|
|
38
|
+
* @template C The type of the tooltip's content
|
|
39
|
+
*/
|
|
40
|
+
export interface TooltipContentProps<D, M, C> {
|
|
41
|
+
/**
|
|
42
|
+
* Turns what the plot hands the tooltip into the tooltip's content. Called on every mouse move
|
|
43
|
+
* over an element, so keep it quick -- and copy what you need out of the series, which the data
|
|
44
|
+
* source keeps changing.
|
|
45
|
+
*/
|
|
46
|
+
capture: TooltipCapture<D, M, C>
|
|
47
|
+
/**
|
|
48
|
+
* Renders the content (inside the tooltip's box)
|
|
49
|
+
* @param content The content returned by `capture`
|
|
50
|
+
* @param style The tooltip's style
|
|
51
|
+
* @return What to show in the tooltip's box
|
|
52
|
+
*/
|
|
53
|
+
children: (content: C, style: TooltipStyle) => ReactNode
|
|
54
|
+
/**
|
|
55
|
+
* Overrides of the style of the enclosing {@link Tooltip}
|
|
56
|
+
*/
|
|
57
|
+
style?: Partial<TooltipStyle>
|
|
58
|
+
/**
|
|
59
|
+
* Additional CSS for the tooltip's box (e.g. its line height)
|
|
60
|
+
*/
|
|
61
|
+
boxStyle?: CSSProperties
|
|
62
|
+
/**
|
|
63
|
+
* Where the tooltip's top goes (relative to the chart), given its content and its rendered
|
|
64
|
+
* height -- for a tooltip that isn't placed below the mouse (e.g. one centered on a raster
|
|
65
|
+
* plot's row). By default, the tooltip goes just below the mouse.
|
|
66
|
+
*/
|
|
67
|
+
topFor?: (content: C, height: number) => number
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The building block of every tooltip's content. Put a component built on it inside a
|
|
72
|
+
* {@link Tooltip}, and when the mouse moves over one of the plot's elements, it calls `capture` with
|
|
73
|
+
* what the plot knows about that element, and shows what `children` renders, in a box next to the
|
|
74
|
+
* mouse (styled like the enclosing `<Tooltip>`). It hides again when the mouse leaves the element.
|
|
75
|
+
*
|
|
76
|
+
* Under the hood, it registers the chart's tooltip-content provider (one per chart: registering
|
|
77
|
+
* replaces the previous one), and a mouse-leave handler, and renders its box as a React portal on
|
|
78
|
+
* the page's `body`, which `useTooltipPlacement` places next to the mouse once it's rendered
|
|
79
|
+
* (and so its size is known).
|
|
80
|
+
* @example
|
|
81
|
+
* function MyScatterTooltip(): JSX.Element {
|
|
82
|
+
* return (
|
|
83
|
+
* <TooltipContent<Datum, ScatterTooltipMetadata, {seriesName: string, count: number}>
|
|
84
|
+
* capture={(seriesName, _time, {series}) => ({seriesName, count: series.length})}
|
|
85
|
+
* >
|
|
86
|
+
* {({seriesName, count}) => <div>{seriesName}: {count} points</div>}
|
|
87
|
+
* </TooltipContent>
|
|
88
|
+
* )
|
|
89
|
+
* }
|
|
90
|
+
* @param props The capture and render functions, and the style
|
|
91
|
+
* @return The tooltip's box (a portal), or `null` when nothing is hovered
|
|
92
|
+
* @template D The type of the series' datum
|
|
93
|
+
* @template M The type of the plot's tooltip metadata
|
|
94
|
+
* @template C The type of the tooltip's content
|
|
95
|
+
*/
|
|
96
|
+
export function TooltipContent<D, M, C>(props: TooltipContentProps<D, M, C>): ReactElement | null {
|
|
97
|
+
const {capture, children, style, boxStyle, topFor} = props
|
|
98
|
+
|
|
99
|
+
const {chartId, canvas, tooltip, mouse} = useChart<D, SeriesStyle, M, BaseAxisRange, BaseAxis>()
|
|
100
|
+
const {registerTooltipContentProvider} = tooltip
|
|
101
|
+
const {registerMouseLeaveHandler, unregisterMouseLeaveHandler} = mouse
|
|
102
|
+
const {margin, plotDimensions} = usePlotDimensions()
|
|
103
|
+
|
|
104
|
+
const enclosingStyle = useTooltipStyle()
|
|
105
|
+
const tooltipStyle = useMemo<TooltipStyle>(() => ({...enclosingStyle, ...style}), [enclosingStyle, style])
|
|
106
|
+
|
|
107
|
+
// what's shown, and where (null when nothing is hovered)
|
|
108
|
+
const [shown, setShown] = useState<{ content: C, anchor: TooltipAnchor } | null>(null)
|
|
109
|
+
const tooltipRef = useRef<HTMLDivElement>(null)
|
|
110
|
+
|
|
111
|
+
// the latest capture and placement functions, so that the registered provider always uses the
|
|
112
|
+
// current ones without having to be registered again whenever they change
|
|
113
|
+
const captureRef = useRef(capture)
|
|
114
|
+
const topForRef = useRef(topFor)
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
captureRef.current = capture
|
|
117
|
+
topForRef.current = topFor
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
// the plot calls the provider whenever the mouse is over one of its elements
|
|
121
|
+
useEffect(
|
|
122
|
+
() => {
|
|
123
|
+
if (canvas === null) return
|
|
124
|
+
registerTooltipContentProvider((seriesName, time, tooltipData, mouseCoords, providerId) => {
|
|
125
|
+
const content = captureRef.current(seriesName, time, tooltipData, providerId)
|
|
126
|
+
if (content === undefined) {
|
|
127
|
+
setShown(null)
|
|
128
|
+
return
|
|
129
|
+
}
|
|
130
|
+
const placeTop = topForRef.current
|
|
131
|
+
const anchor = tooltipAnchorFor(
|
|
132
|
+
mouseCoords, canvas,
|
|
133
|
+
placeTop !== undefined ? height => placeTop(content, height) : undefined
|
|
134
|
+
)
|
|
135
|
+
setShown({content, anchor})
|
|
136
|
+
})
|
|
137
|
+
},
|
|
138
|
+
[canvas, registerTooltipContentProvider]
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
// hides the tooltip when the mouse leaves the element
|
|
142
|
+
useEffect(
|
|
143
|
+
() => {
|
|
144
|
+
const handlerId = `tooltip-content-leave-${chartId}`
|
|
145
|
+
registerMouseLeaveHandler(handlerId, () => setShown(null))
|
|
146
|
+
return () => unregisterMouseLeaveHandler(handlerId)
|
|
147
|
+
},
|
|
148
|
+
[chartId, registerMouseLeaveHandler, unregisterMouseLeaveHandler]
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
// places the tooltip next to the mouse, once it's rendered (and so its size is known)
|
|
152
|
+
useTooltipPlacement(tooltipRef, shown?.anchor ?? null, plotDimensions, margin, tooltipStyle)
|
|
153
|
+
|
|
154
|
+
if (shown === null) return null
|
|
155
|
+
|
|
156
|
+
const tooltipBoxStyle: CSSProperties = {
|
|
157
|
+
position: 'fixed',
|
|
158
|
+
// (placed next to the mouse, from its rendered size, by `useTooltipPlacement`, before it's
|
|
159
|
+
// painted)
|
|
160
|
+
left: 0,
|
|
161
|
+
top: 0,
|
|
162
|
+
backgroundColor: withAlpha(tooltipStyle.backgroundColor, tooltipStyle.backgroundOpacity),
|
|
163
|
+
border: `${tooltipStyle.borderWidth}px solid ${withAlpha(tooltipStyle.borderColor, tooltipStyle.borderOpacity)}`,
|
|
164
|
+
borderRadius: tooltipStyle.borderRadius,
|
|
165
|
+
padding: `${tooltipStyle.paddingTop}px ${tooltipStyle.paddingRight}px ${tooltipStyle.paddingBottom}px ${tooltipStyle.paddingLeft}px`,
|
|
166
|
+
fontFamily: tooltipStyle.fontFamily,
|
|
167
|
+
fontSize: tooltipStyle.fontSize,
|
|
168
|
+
color: tooltipStyle.fontColor,
|
|
169
|
+
pointerEvents: 'none',
|
|
170
|
+
zIndex: 9999,
|
|
171
|
+
...boxStyle,
|
|
172
|
+
}
|
|
173
|
+
return createPortal(
|
|
174
|
+
<div ref={tooltipRef} style={tooltipBoxStyle}>{children(shown.content, tooltipStyle)}</div>,
|
|
175
|
+
document.body
|
|
176
|
+
)
|
|
177
|
+
}
|