stream-charts 1.0.1 → 1.1.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/README.md +756 -343
- package/changes.md +7 -0
- package/dist/src/app/charts/Chart.d.ts +116 -87
- package/dist/src/app/charts/Chart.js +96 -101
- package/dist/src/app/charts/Chart.js.map +1 -1
- package/dist/src/app/charts/axes/AxesState.d.ts +64 -0
- package/dist/src/app/charts/axes/AxesState.js +97 -0
- package/dist/src/app/charts/axes/AxesState.js.map +1 -0
- package/dist/src/app/charts/axes/AxesState.test.js +30 -0
- package/dist/src/app/charts/axes/AxesState.test.js.map +1 -0
- package/dist/src/app/charts/axes/AxisInterval.d.ts +92 -0
- package/dist/src/app/charts/axes/AxisInterval.js +126 -0
- package/dist/src/app/charts/axes/AxisInterval.js.map +1 -0
- package/dist/src/app/charts/axes/AxisInterval.test.js +120 -0
- package/dist/src/app/charts/axes/AxisInterval.test.js.map +1 -0
- package/dist/src/app/charts/axes/BaseAxisRange.d.ts +83 -0
- package/dist/src/app/charts/axes/BaseAxisRange.js +58 -0
- package/dist/src/app/charts/axes/BaseAxisRange.js.map +1 -0
- package/dist/src/app/charts/axes/ContinuousAxis.d.ts +22 -0
- package/dist/src/app/charts/axes/ContinuousAxis.js +96 -0
- package/dist/src/app/charts/axes/ContinuousAxis.js.map +1 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.d.ts +59 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.js +84 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.js.map +1 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.test.js +47 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.test.js.map +1 -0
- package/dist/src/app/charts/axes/OrdinalAxis.d.ts +23 -0
- package/dist/src/app/charts/axes/OrdinalAxis.js +124 -0
- package/dist/src/app/charts/axes/OrdinalAxis.js.map +1 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.d.ts +69 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.js +100 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.js.map +1 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.test.js +48 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.test.js.map +1 -0
- package/dist/src/app/charts/axes/axes.d.ts +391 -0
- package/dist/src/app/charts/axes/axes.js +1046 -0
- package/dist/src/app/charts/axes/axes.js.map +1 -0
- package/dist/src/app/charts/d3types.d.ts +10 -10
- package/dist/src/app/charts/filters/regexFilter.d.ts +9 -0
- package/dist/src/app/charts/filters/regexFilter.js +18 -0
- package/dist/src/app/charts/filters/regexFilter.js.map +1 -0
- package/dist/src/app/charts/filters/regexFilter.test.d.ts +1 -0
- package/dist/src/app/charts/filters/regexFilter.test.js +11 -0
- package/dist/src/app/charts/filters/regexFilter.test.js.map +1 -0
- package/dist/src/app/charts/hooks/useAxes.d.ts +144 -0
- package/dist/src/app/charts/hooks/useAxes.js +187 -0
- package/dist/src/app/charts/hooks/useAxes.js.map +1 -0
- package/dist/src/app/charts/hooks/useChart.d.ts +30 -201
- package/dist/src/app/charts/hooks/useChart.js +33 -134
- package/dist/src/app/charts/hooks/useChart.js.map +1 -1
- package/dist/src/app/charts/hooks/useDataObservable.d.ts +74 -0
- package/dist/src/app/charts/hooks/useDataObservable.js +76 -0
- package/dist/src/app/charts/hooks/useDataObservable.js.map +1 -0
- package/dist/src/app/charts/hooks/useInitialData.d.ts +38 -0
- package/dist/src/app/charts/hooks/useInitialData.js +29 -0
- package/dist/src/app/charts/hooks/useInitialData.js.map +1 -0
- package/dist/src/app/charts/hooks/useMouse.d.ts +53 -0
- package/dist/src/app/charts/hooks/useMouse.js +65 -0
- package/dist/src/app/charts/hooks/useMouse.js.map +1 -0
- package/dist/src/app/charts/hooks/usePlotDimensions.d.ts +34 -0
- package/dist/src/app/charts/hooks/usePlotDimensions.js +73 -0
- package/dist/src/app/charts/hooks/usePlotDimensions.js.map +1 -0
- package/dist/src/app/charts/hooks/useTooltip.d.ts +64 -0
- package/dist/src/app/charts/hooks/useTooltip.js +52 -0
- package/dist/src/app/charts/hooks/useTooltip.js.map +1 -0
- package/dist/src/app/charts/observables/ChartData.d.ts +23 -0
- package/dist/src/app/charts/observables/ChartData.js +20 -0
- package/dist/src/app/charts/observables/ChartData.js.map +1 -0
- package/dist/src/app/charts/observables/iterates.d.ts +52 -0
- package/dist/src/app/charts/observables/iterates.js +121 -0
- package/dist/src/app/charts/observables/iterates.js.map +1 -0
- package/dist/src/app/charts/observables/iterates.test.d.ts +1 -0
- package/dist/src/app/charts/observables/iterates.test.js +180 -0
- package/dist/src/app/charts/observables/iterates.test.js.map +1 -0
- package/dist/src/app/charts/observables/ordinals.d.ts +75 -0
- package/dist/src/app/charts/observables/ordinals.js +141 -0
- package/dist/src/app/charts/observables/ordinals.js.map +1 -0
- package/dist/src/app/charts/observables/ordinals.test.d.ts +1 -0
- package/dist/src/app/charts/observables/ordinals.test.js +102 -0
- package/dist/src/app/charts/observables/ordinals.test.js.map +1 -0
- package/dist/src/app/charts/plots/BarPlot.d.ts +81 -0
- package/dist/src/app/charts/plots/BarPlot.js +557 -0
- package/dist/src/app/charts/plots/BarPlot.js.map +1 -0
- package/dist/src/app/charts/plots/PoincarePlot.d.ts +78 -0
- package/dist/src/app/charts/plots/PoincarePlot.js +504 -0
- package/dist/src/app/charts/plots/PoincarePlot.js.map +1 -0
- package/dist/src/app/charts/{RasterPlot.d.ts → plots/RasterPlot.d.ts} +1 -1
- package/dist/src/app/charts/{RasterPlot.js → plots/RasterPlot.js} +152 -133
- package/dist/src/app/charts/plots/RasterPlot.js.map +1 -0
- package/dist/src/app/charts/{ScatterPlot.d.ts → plots/ScatterPlot.d.ts} +10 -8
- package/dist/src/app/charts/plots/ScatterPlot.js +379 -0
- package/dist/src/app/charts/plots/ScatterPlot.js.map +1 -0
- package/dist/src/app/charts/{plot.d.ts → plots/plot.d.ts} +12 -14
- package/dist/src/app/charts/{plot.js → plots/plot.js} +19 -17
- package/dist/src/app/charts/plots/plot.js.map +1 -0
- package/dist/src/app/charts/series/baseSeries.d.ts +38 -0
- package/dist/src/app/charts/series/baseSeries.js +36 -0
- package/dist/src/app/charts/series/baseSeries.js.map +1 -0
- package/dist/src/app/charts/series/datumSeries.test.d.ts +1 -0
- package/dist/src/app/charts/series/datumSeries.test.js +50 -0
- package/dist/src/app/charts/series/datumSeries.test.js.map +1 -0
- package/dist/src/app/charts/series/iterateSeries.d.ts +42 -0
- package/dist/src/app/charts/series/iterateSeries.js +34 -0
- package/dist/src/app/charts/series/iterateSeries.js.map +1 -0
- package/dist/src/app/charts/series/ordinalSeries.d.ts +54 -0
- package/dist/src/app/charts/series/ordinalSeries.js +98 -0
- package/dist/src/app/charts/series/ordinalSeries.js.map +1 -0
- package/dist/src/app/charts/series/timeSeries.d.ts +30 -0
- package/dist/src/app/charts/series/timeSeries.js +19 -0
- package/dist/src/app/charts/series/timeSeries.js.map +1 -0
- package/dist/src/app/charts/{chartData.d.ts → series/timeSeriesChartData.d.ts} +11 -6
- package/dist/src/app/charts/series/timeSeriesChartData.js +32 -0
- package/dist/src/app/charts/series/timeSeriesChartData.js.map +1 -0
- package/dist/src/app/charts/styling/barPlotStyle.d.ts +41 -0
- package/dist/src/app/charts/styling/barPlotStyle.js +84 -0
- package/dist/src/app/charts/styling/barPlotStyle.js.map +1 -0
- package/dist/src/app/charts/{margins.d.ts → styling/margins.d.ts} +7 -5
- package/dist/src/app/charts/{margins.js → styling/margins.js} +19 -9
- package/dist/src/app/charts/styling/margins.js.map +1 -0
- package/dist/src/app/charts/styling/margins.test.d.ts +1 -0
- package/dist/src/app/charts/styling/margins.test.js +19 -0
- package/dist/src/app/charts/styling/margins.test.js.map +1 -0
- package/dist/src/app/charts/styling/svgStyle.d.ts +76 -0
- package/dist/src/app/charts/styling/svgStyle.js +84 -0
- package/dist/src/app/charts/styling/svgStyle.js.map +1 -0
- package/dist/src/app/charts/subscriptions/subscription.test.d.ts +1 -0
- package/dist/src/app/charts/subscriptions/subscription.test.js +395 -0
- package/dist/src/app/charts/subscriptions/subscription.test.js.map +1 -0
- package/dist/src/app/charts/subscriptions/subscriptions.d.ts +100 -0
- package/dist/src/app/charts/subscriptions/subscriptions.js +449 -0
- package/dist/src/app/charts/subscriptions/subscriptions.js.map +1 -0
- package/dist/src/app/charts/tooltips/BarPlotTooltipContent.d.ts +90 -0
- package/dist/src/app/charts/tooltips/BarPlotTooltipContent.js +302 -0
- package/dist/src/app/charts/tooltips/BarPlotTooltipContent.js.map +1 -0
- package/dist/src/app/charts/tooltips/PoincarePlotTooltipContent.d.ts +100 -0
- package/dist/src/app/charts/tooltips/PoincarePlotTooltipContent.js +190 -0
- package/dist/src/app/charts/tooltips/PoincarePlotTooltipContent.js.map +1 -0
- package/dist/src/app/charts/{RasterPlotTooltipContent.js → tooltips/RasterPlotTooltipContent.js} +40 -44
- package/dist/src/app/charts/tooltips/RasterPlotTooltipContent.js.map +1 -0
- package/dist/src/app/charts/tooltips/ScatterPlotTooltipContent.js +154 -0
- package/dist/src/app/charts/tooltips/ScatterPlotTooltipContent.js.map +1 -0
- package/dist/src/app/charts/{Tooltip.d.ts → tooltips/Tooltip.d.ts} +4 -2
- package/dist/src/app/charts/{Tooltip.js → tooltips/Tooltip.js} +23 -28
- package/dist/src/app/charts/tooltips/Tooltip.js.map +1 -0
- package/dist/src/app/charts/{tooltipUtils.d.ts → tooltips/tooltipUtils.d.ts} +11 -6
- package/dist/src/app/charts/{tooltipUtils.js → tooltips/tooltipUtils.js} +33 -17
- package/dist/src/app/charts/tooltips/tooltipUtils.js.map +1 -0
- package/dist/src/app/charts/{Tracker.d.ts → trackers/Tracker.d.ts} +6 -5
- package/dist/src/app/charts/trackers/Tracker.js +60 -0
- package/dist/src/app/charts/trackers/Tracker.js.map +1 -0
- package/dist/src/app/charts/{trackerUtils.d.ts → trackers/trackerUtils.d.ts} +13 -8
- package/dist/src/app/charts/trackers/trackerUtils.js +359 -0
- package/dist/src/app/charts/trackers/trackerUtils.js.map +1 -0
- package/dist/src/app/charts/utils.d.ts +22 -32
- package/dist/src/app/charts/utils.js +36 -37
- package/dist/src/app/charts/utils.js.map +1 -1
- package/dist/src/index.d.ts +48 -15
- package/dist/src/index.js +71 -15
- package/dist/src/index.js.map +1 -1
- package/package.json +30 -20
- package/src/app/charts/Chart.tsx +334 -0
- package/src/app/charts/axes/AxesState.test.ts +34 -0
- package/src/app/charts/axes/AxesState.ts +112 -0
- package/src/app/charts/axes/AxisInterval.test.ts +143 -0
- package/src/app/charts/axes/AxisInterval.ts +139 -0
- package/src/app/charts/axes/BaseAxisRange.ts +113 -0
- package/src/app/charts/axes/ContinuousAxis.tsx +192 -0
- package/src/app/charts/axes/ContinuousAxisRange.test.ts +55 -0
- package/src/app/charts/axes/ContinuousAxisRange.ts +96 -0
- package/src/app/charts/axes/OrdinalAxis.tsx +223 -0
- package/src/app/charts/axes/OrdinalAxisRange.test.ts +55 -0
- package/src/app/charts/axes/OrdinalAxisRange.ts +112 -0
- package/src/app/charts/axes/axes.ts +1569 -0
- package/src/app/charts/d3types.ts +16 -0
- package/src/app/charts/filters/regexFilter.test.ts +13 -0
- package/src/app/charts/filters/regexFilter.ts +17 -0
- package/src/app/charts/hooks/useAxes.tsx +341 -0
- package/src/app/charts/hooks/useChart.tsx +159 -0
- package/src/app/charts/hooks/useDataObservable.tsx +175 -0
- package/src/app/charts/hooks/useInitialData.tsx +65 -0
- package/src/app/charts/hooks/useMouse.tsx +125 -0
- package/src/app/charts/hooks/usePlotDimensions.tsx +120 -0
- package/src/app/charts/hooks/useTooltip.tsx +112 -0
- package/src/app/charts/observables/ChartData.ts +31 -0
- package/src/app/charts/observables/iterates.test.ts +201 -0
- package/src/app/charts/observables/iterates.ts +203 -0
- package/src/app/charts/observables/ordinals.test.ts +135 -0
- package/src/app/charts/observables/ordinals.ts +248 -0
- package/src/app/charts/plots/BarPlot.tsx +1088 -0
- package/src/app/charts/plots/PoincarePlot.tsx +832 -0
- package/src/app/charts/plots/RasterPlot.tsx +676 -0
- package/src/app/charts/plots/ScatterPlot.tsx +653 -0
- package/src/app/charts/plots/plot.ts +75 -0
- package/src/app/charts/series/baseSeries.ts +52 -0
- package/src/app/charts/series/datumSeries.test.ts +60 -0
- package/src/app/charts/series/iterateSeries.ts +56 -0
- package/src/app/charts/series/ordinalSeries.ts +164 -0
- package/src/app/charts/series/timeSeries.ts +40 -0
- package/src/app/charts/series/timeSeriesChartData.ts +68 -0
- package/src/app/charts/styling/barPlotStyle.ts +126 -0
- package/src/app/charts/styling/margins.test.ts +22 -0
- package/src/app/charts/styling/margins.ts +58 -0
- package/src/app/charts/styling/svgStyle.ts +118 -0
- package/src/app/charts/subscriptions/subscription.test.ts +499 -0
- package/src/app/charts/subscriptions/subscriptions.ts +635 -0
- package/src/app/charts/tooltips/BarPlotTooltipContent.tsx +440 -0
- package/src/app/charts/tooltips/PoincarePlotTooltipContent.tsx +352 -0
- package/src/app/charts/tooltips/RasterPlotTooltipContent.tsx +274 -0
- package/src/app/charts/tooltips/ScatterPlotTooltipContent.tsx +319 -0
- package/src/app/charts/tooltips/Tooltip.tsx +148 -0
- package/src/app/charts/tooltips/tooltipUtils.ts +216 -0
- package/src/app/charts/trackers/Tracker.tsx +129 -0
- package/src/app/charts/trackers/trackerUtils.ts +494 -0
- package/src/app/charts/utils.ts +109 -0
- package/dist/src/app/charts/CategoryAxis.d.ts +0 -20
- package/dist/src/app/charts/CategoryAxis.js +0 -112
- package/dist/src/app/charts/CategoryAxis.js.map +0 -1
- package/dist/src/app/charts/ContinuousAxis.d.ts +0 -16
- package/dist/src/app/charts/ContinuousAxis.js +0 -186
- package/dist/src/app/charts/ContinuousAxis.js.map +0 -1
- package/dist/src/app/charts/RasterPlot.js.map +0 -1
- package/dist/src/app/charts/RasterPlotTooltipContent.js.map +0 -1
- package/dist/src/app/charts/ScatterPlot.js +0 -351
- package/dist/src/app/charts/ScatterPlot.js.map +0 -1
- package/dist/src/app/charts/ScatterPlotTooltipContent.js +0 -163
- package/dist/src/app/charts/ScatterPlotTooltipContent.js.map +0 -1
- package/dist/src/app/charts/Tooltip.js.map +0 -1
- package/dist/src/app/charts/Tracker.js +0 -65
- package/dist/src/app/charts/Tracker.js.map +0 -1
- package/dist/src/app/charts/axes.d.ts +0 -132
- package/dist/src/app/charts/axes.js +0 -265
- package/dist/src/app/charts/axes.js.map +0 -1
- package/dist/src/app/charts/chartData.js +0 -32
- package/dist/src/app/charts/chartData.js.map +0 -1
- package/dist/src/app/charts/continuousAxisRangeFor.d.ts +0 -20
- package/dist/src/app/charts/continuousAxisRangeFor.js +0 -68
- package/dist/src/app/charts/continuousAxisRangeFor.js.map +0 -1
- package/dist/src/app/charts/datumSeries.d.ts +0 -59
- package/dist/src/app/charts/datumSeries.js +0 -55
- package/dist/src/app/charts/datumSeries.js.map +0 -1
- package/dist/src/app/charts/datumSeries.test.js +0 -50
- package/dist/src/app/charts/datumSeries.test.js.map +0 -1
- package/dist/src/app/charts/hooks/AxesState.d.ts +0 -37
- package/dist/src/app/charts/hooks/AxesState.js +0 -44
- package/dist/src/app/charts/hooks/AxesState.js.map +0 -1
- package/dist/src/app/charts/margins.js.map +0 -1
- package/dist/src/app/charts/margins.test.js +0 -14
- package/dist/src/app/charts/margins.test.js.map +0 -1
- package/dist/src/app/charts/plot.js.map +0 -1
- package/dist/src/app/charts/regexFilter.d.ts +0 -9
- package/dist/src/app/charts/regexFilter.js +0 -17
- package/dist/src/app/charts/regexFilter.js.map +0 -1
- package/dist/src/app/charts/regexFilter.test.js +0 -11
- package/dist/src/app/charts/regexFilter.test.js.map +0 -1
- package/dist/src/app/charts/subscriptions.d.ts +0 -43
- package/dist/src/app/charts/subscriptions.js +0 -213
- package/dist/src/app/charts/subscriptions.js.map +0 -1
- package/dist/src/app/charts/svgStyle.d.ts +0 -27
- package/dist/src/app/charts/svgStyle.js +0 -32
- package/dist/src/app/charts/svgStyle.js.map +0 -1
- package/dist/src/app/charts/timeRange.test.js +0 -54
- package/dist/src/app/charts/timeRange.test.js.map +0 -1
- package/dist/src/app/charts/tooltipUtils.js.map +0 -1
- package/dist/src/app/charts/trackerUtils.js +0 -130
- package/dist/src/app/charts/trackerUtils.js.map +0 -1
- /package/dist/src/app/charts/{datumSeries.test.d.ts → axes/AxesState.test.d.ts} +0 -0
- /package/dist/src/app/charts/{margins.test.d.ts → axes/AxisInterval.test.d.ts} +0 -0
- /package/dist/src/app/charts/{regexFilter.test.d.ts → axes/ContinuousAxisRange.test.d.ts} +0 -0
- /package/dist/src/app/charts/{timeRange.test.d.ts → axes/OrdinalAxisRange.test.d.ts} +0 -0
- /package/dist/src/app/charts/{RasterPlotTooltipContent.d.ts → tooltips/RasterPlotTooltipContent.d.ts} +0 -0
- /package/dist/src/app/charts/{ScatterPlotTooltipContent.d.ts → tooltips/ScatterPlotTooltipContent.d.ts} +0 -0
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
13
|
-
import { useChart } from "./hooks/useChart";
|
|
14
|
-
import { continuousAxisRangeFor } from "./continuousAxisRangeFor";
|
|
15
|
-
import * as d3 from "d3";
|
|
16
|
-
import { setClipPath } from "./plot";
|
|
17
|
-
import { axesForSeriesGen, defaultLineStyle, panHandler, timeIntervals, timeRanges, zoomHandler } from "./axes";
|
|
18
|
-
import { noop } from "./utils";
|
|
19
|
-
import { defaultTooltipStyle } from "./tooltipUtils";
|
|
20
|
-
import { subscriptionFor, subscriptionWithCadenceFor } from "./subscriptions";
|
|
21
|
-
/**
|
|
22
|
-
* Renders a streaming scatter plot for the series in the initial data and those sourced by the
|
|
23
|
-
* observable specified as a property in the {@link Chart}. This component uses the {@link useChart}
|
|
24
|
-
* hook, and therefore must be a child of the {@link Chart} in order to be plugged in to the
|
|
25
|
-
* chart ecosystem (axes, tracker, tooltip).
|
|
26
|
-
*
|
|
27
|
-
* @param props The properties associated with the scatter plot
|
|
28
|
-
* @constructor
|
|
29
|
-
* @example
|
|
30
|
-
<ScatterPlot
|
|
31
|
-
interpolation={interpolation}
|
|
32
|
-
axisAssignments={new Map([
|
|
33
|
-
['test2', assignAxes("x-axis-2", "y-axis-2")],
|
|
34
|
-
])}
|
|
35
|
-
dropDataAfter={10000}
|
|
36
|
-
panEnabled={true}
|
|
37
|
-
zoomEnabled={true}
|
|
38
|
-
zoomKeyModifiersRequired={true}
|
|
39
|
-
/>
|
|
40
|
-
*/
|
|
41
|
-
export function ScatterPlot(props) {
|
|
42
|
-
var _a = useChart(), chartId = _a.chartId, container = _a.container, mainG = _a.mainG, xAxesState = _a.xAxesState, yAxesState = _a.yAxesState, setTimeRangeFor = _a.setTimeRangeFor, plotDimensions = _a.plotDimensions, margin = _a.margin, color = _a.color, seriesStyles = _a.seriesStyles, initialData = _a.initialData, seriesFilter = _a.seriesFilter, seriesObservable = _a.seriesObservable, _b = _a.windowingTime, windowingTime = _b === void 0 ? 100 : _b, shouldSubscribe = _a.shouldSubscribe, _c = _a.onSubscribe, onSubscribe = _c === void 0 ? noop : _c, onUpdateTime = _a.onUpdateTime, onUpdateData = _a.onUpdateData, _d = _a.updateTimeRanges, updateTimeRanges = _d === void 0 ? noop : _d, mouseOverHandlerFor = _a.mouseOverHandlerFor, mouseLeaveHandlerFor = _a.mouseLeaveHandlerFor;
|
|
43
|
-
var _e = props.axisAssignments, axisAssignments = _e === void 0 ? new Map() : _e, _f = props.interpolation, interpolation = _f === void 0 ? d3.curveLinear : _f, _g = props.dropDataAfter, dropDataAfter = _g === void 0 ? Infinity : _g, _h = props.panEnabled, panEnabled = _h === void 0 ? false : _h, _j = props.zoomEnabled, zoomEnabled = _j === void 0 ? false : _j, _k = props.zoomKeyModifiersRequired, zoomKeyModifiersRequired = _k === void 0 ? true : _k, withCadenceOf = props.withCadenceOf;
|
|
44
|
-
// some 'splainin: the dataRef holds on to a copy of the initial data, but, the Series in the array
|
|
45
|
-
// are by reference, so the seriesRef, also holds on to the same Series. When the Series in seriesRef
|
|
46
|
-
// get appended with new data, it's updating the underlying series, and so the dataRef sees those
|
|
47
|
-
// changes as well. The dataRef is used for performance, so that in the updatePlot function we don't
|
|
48
|
-
// need to create a temporary array to holds the series data, rather, we can just use the one held in
|
|
49
|
-
// the dataRef.
|
|
50
|
-
var dataRef = useRef(initialData.slice());
|
|
51
|
-
var seriesRef = useRef(new Map(initialData.map(function (series) { return [series.name, series]; })));
|
|
52
|
-
// map(axis_id -> current_time) -- maps the axis ID to the current time for that axis
|
|
53
|
-
var currentTimeRef = useRef(new Map());
|
|
54
|
-
useEffect(function () {
|
|
55
|
-
currentTimeRef.current = new Map(Array.from(xAxesState.axes.keys()).map(function (id) { return [id, 0]; }));
|
|
56
|
-
}, [xAxesState]);
|
|
57
|
-
// calculates the distinct series IDs that cover all the series in the plot
|
|
58
|
-
var axesForSeries = useMemo(function () { return axesForSeriesGen(initialData, axisAssignments, xAxesState); }, [initialData, axisAssignments, xAxesState]);
|
|
59
|
-
// updates the timing using the onUpdateTime and updatePlot references. This and the references
|
|
60
|
-
// defined above allow the axes' times to be update properly by avoid stale reference to these
|
|
61
|
-
// functions.
|
|
62
|
-
var updateTimingAndPlot = useCallback(function (ranges) {
|
|
63
|
-
if (mainG !== null) {
|
|
64
|
-
onUpdateTimeRef.current(ranges);
|
|
65
|
-
updatePlotRef.current(ranges, mainG);
|
|
66
|
-
if (onUpdateTime) {
|
|
67
|
-
setTimeout(function () {
|
|
68
|
-
var times = new Map();
|
|
69
|
-
ranges.forEach(function (range, name) { return times.set(name, [range.start, range.end]); });
|
|
70
|
-
onUpdateTime(times);
|
|
71
|
-
}, 0);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}, [mainG, onUpdateTime]);
|
|
75
|
-
// todo find better way
|
|
76
|
-
// when the initial data changes, then reset the plot. note that the initial data doesn't change
|
|
77
|
-
// during the normal course of updates from the observable, only when the plot is restarted.
|
|
78
|
-
useEffect(function () {
|
|
79
|
-
dataRef.current = initialData.slice();
|
|
80
|
-
seriesRef.current = new Map(initialData.map(function (series) { return [series.name, series]; }));
|
|
81
|
-
currentTimeRef.current = new Map(Array.from(xAxesState.axes.keys()).map(function (id) { return [id, 0]; }));
|
|
82
|
-
updateTimingAndPlot(new Map(Array.from(timeRanges(xAxesState.axes).entries())
|
|
83
|
-
.map(function (_a) {
|
|
84
|
-
var id = _a[0], range = _a[1];
|
|
85
|
-
// grab the current range, then calculate the minimum time from the initial data, and
|
|
86
|
-
// set that as the start, and then add the range to it for the end time
|
|
87
|
-
var _b = range.original, start = _b[0], end = _b[1];
|
|
88
|
-
var minTime = initialData
|
|
89
|
-
.filter(function (srs) { var _a; return ((_a = axisAssignments.get(srs.name)) === null || _a === void 0 ? void 0 : _a.xAxis) === id; })
|
|
90
|
-
.reduce(function (tMin, series) { return Math.min(tMin, !series.isEmpty() ? series.data[0].time : tMin); }, Infinity);
|
|
91
|
-
var startTime = minTime === Infinity ? 0 : minTime;
|
|
92
|
-
return [id, continuousAxisRangeFor(startTime, startTime + end - start)];
|
|
93
|
-
})));
|
|
94
|
-
},
|
|
95
|
-
// ** not happy about this **
|
|
96
|
-
// only want this effect to run when the initial data is changed, which mean all the
|
|
97
|
-
// other dependencies are recalculated anyway.
|
|
98
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
99
|
-
[initialData]);
|
|
100
|
-
/**
|
|
101
|
-
* Adjusts the time-range and updates the plot when the plot is dragged to the left or right
|
|
102
|
-
* @param deltaX The amount that the plot is dragged
|
|
103
|
-
* @param plotDimensions The dimensions of the plot
|
|
104
|
-
* @param series An array of series names
|
|
105
|
-
* @param ranges A map holding the axis ID and its associated time range
|
|
106
|
-
*/
|
|
107
|
-
var onPan = useCallback(function (x, plotDimensions, series, ranges) { return panHandler(axesForSeries, margin, setTimeRangeFor, xAxesState)(x, plotDimensions, series, ranges); }, [axesForSeries, margin, setTimeRangeFor, xAxesState]);
|
|
108
|
-
/**
|
|
109
|
-
* Called when the user uses the scroll wheel (or scroll gesture) to zoom in or out. Zooms in/out
|
|
110
|
-
* at the location of the mouse when the scroll wheel or gesture was applied.
|
|
111
|
-
* @param transform The d3 zoom transformation information
|
|
112
|
-
* @param x The x-position of the mouse when the scroll wheel or gesture is used
|
|
113
|
-
* @param plotDimensions The dimensions of the plot
|
|
114
|
-
* @param series An array of series names
|
|
115
|
-
* @param ranges A map holding the axis ID and its associated time-range
|
|
116
|
-
*/
|
|
117
|
-
var onZoom = useCallback(function (transform, x, plotDimensions, series, ranges) { return zoomHandler(axesForSeries, margin, setTimeRangeFor, xAxesState)(transform, x, plotDimensions, series, ranges); }, [axesForSeries, margin, setTimeRangeFor, xAxesState]);
|
|
118
|
-
var updatePlot = useCallback(
|
|
119
|
-
/**
|
|
120
|
-
* Updates the plot data for the specified time-range, which may have changed due to zoom or pan
|
|
121
|
-
* @param timeRanges The current time range
|
|
122
|
-
* @param mainGElem The main <g> element selection for that holds the plot
|
|
123
|
-
*/
|
|
124
|
-
function (timeRanges, mainGElem) {
|
|
125
|
-
if (container) {
|
|
126
|
-
// select the svg element bind the data to them
|
|
127
|
-
var svg = d3.select(container);
|
|
128
|
-
// create a map associating series-names to their time-series.
|
|
129
|
-
//
|
|
130
|
-
// performance-related confusion: wondering where the dataRef is updated? well it isn't
|
|
131
|
-
// directly. The dataRef holds on to an array of references to the Series. And so does the
|
|
132
|
-
// seriesRef, though is uses a map(series_name -> series). The seriesRef is use to append
|
|
133
|
-
// data to the underlying Series, and the dataRef is used so that we can just use
|
|
134
|
-
// dataRef.current and don't have to do Array.from(seriesRef.current.values()) which
|
|
135
|
-
// creates a temporary array
|
|
136
|
-
var boundedSeries_1 = new Map(dataRef.current.map(function (series) { return [
|
|
137
|
-
series.name,
|
|
138
|
-
series.data.map(function (datum) { return [datum.time, datum.value]; })
|
|
139
|
-
]; }));
|
|
140
|
-
// set up panning
|
|
141
|
-
if (panEnabled) {
|
|
142
|
-
var drag = d3.drag()
|
|
143
|
-
.on("start", function () {
|
|
144
|
-
// todo during a pan, we want to hide the tooltip
|
|
145
|
-
d3.select(container).style("cursor", "move");
|
|
146
|
-
})
|
|
147
|
-
.on("drag", function (event) {
|
|
148
|
-
onPan(event.dx, plotDimensions, Array.from(boundedSeries_1.keys()), timeRanges);
|
|
149
|
-
updatePlotRef.current(timeRanges, mainGElem);
|
|
150
|
-
})
|
|
151
|
-
.on("end", function () {
|
|
152
|
-
// todo if the tooltip was originally visible, then allow it to be seen again
|
|
153
|
-
d3.select(container).style("cursor", "auto");
|
|
154
|
-
});
|
|
155
|
-
svg.call(drag);
|
|
156
|
-
}
|
|
157
|
-
// set up for zooming
|
|
158
|
-
if (zoomEnabled) {
|
|
159
|
-
var zoom = d3.zoom()
|
|
160
|
-
.filter(function (event) { return !zoomKeyModifiersRequired || event.shiftKey || event.ctrlKey; })
|
|
161
|
-
.scaleExtent([0, 10])
|
|
162
|
-
.translateExtent([[margin.left, margin.top], [plotDimensions.width, plotDimensions.height]])
|
|
163
|
-
.on("zoom", function (event) {
|
|
164
|
-
onZoom(event.transform, event.sourceEvent.offsetX - margin.left, plotDimensions, Array.from(boundedSeries_1.keys()), timeRanges);
|
|
165
|
-
updatePlotRef.current(timeRanges, mainGElem);
|
|
166
|
-
});
|
|
167
|
-
svg.call(zoom);
|
|
168
|
-
}
|
|
169
|
-
// define the clip-path so that the series lines don't go beyond the plot area
|
|
170
|
-
var clipPathId_1 = setClipPath(chartId, svg, plotDimensions, margin);
|
|
171
|
-
boundedSeries_1.forEach(function (data, name) {
|
|
172
|
-
// grab the x and y axes assigned to the series, and if either or both
|
|
173
|
-
// axes aren't found, then give up and return
|
|
174
|
-
var _a = axesFor(name, axisAssignments, xAxesState.axisFor, yAxesState.axisFor), xAxisLinear = _a[0], yAxisLinear = _a[1];
|
|
175
|
-
if (xAxisLinear === undefined || yAxisLinear === undefined)
|
|
176
|
-
return;
|
|
177
|
-
// grab the style for the series
|
|
178
|
-
var _b = seriesStyles.get(name) || __assign(__assign({}, defaultLineStyle), { highlightColor: defaultLineStyle.color }), color = _b.color, lineWidth = _b.lineWidth;
|
|
179
|
-
// only show the data for which the filter matches
|
|
180
|
-
var plotData = (name.match(seriesFilter)) ? data : [];
|
|
181
|
-
// create the time-series paths
|
|
182
|
-
mainGElem
|
|
183
|
-
.selectAll("#" + name + "-" + chartId + "-scatter")
|
|
184
|
-
.data([[], plotData], function () { return "" + name; })
|
|
185
|
-
.join(function (enter) { return enter
|
|
186
|
-
.append("path")
|
|
187
|
-
.attr("class", 'time-series-lines')
|
|
188
|
-
.attr("id", name + "-" + chartId + "-scatter")
|
|
189
|
-
.attr("d", d3.line()
|
|
190
|
-
.x(function (d) { return xAxisLinear.scale(d[0]) || 0; })
|
|
191
|
-
.y(function (d) { return yAxisLinear.scale(d[1]) || 0; })
|
|
192
|
-
.curve(interpolation))
|
|
193
|
-
.attr("fill", "none")
|
|
194
|
-
.attr("stroke", color)
|
|
195
|
-
.attr("stroke-width", lineWidth)
|
|
196
|
-
.attr('transform', "translate(" + margin.left + ", " + margin.top + ")")
|
|
197
|
-
.attr("clip-path", "url(#" + clipPathId_1 + ")")
|
|
198
|
-
.on("mouseover", function (event, datumArray) {
|
|
199
|
-
// recall that this handler is passed down via the "useChart" hook
|
|
200
|
-
return handleMouseOverSeries(chartId, container, xAxisLinear, name, datumArray, event, margin, defaultTooltipStyle, seriesStyles, plotDimensions, mouseOverHandlerFor("tooltip-" + chartId));
|
|
201
|
-
})
|
|
202
|
-
.on("mouseleave", function (event) { return handleMouseLeaveSeries(name, event.currentTarget, seriesStyles, mouseLeaveHandlerFor("tooltip-" + chartId)); }); }, function (update) { return update; }, function (exit) { return exit.remove(); });
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
}, [
|
|
206
|
-
container, panEnabled, zoomEnabled, chartId, plotDimensions, margin, onPan,
|
|
207
|
-
zoomKeyModifiersRequired, onZoom, axisAssignments, xAxesState.axisFor,
|
|
208
|
-
yAxesState.axisFor, seriesStyles, seriesFilter, interpolation,
|
|
209
|
-
mouseOverHandlerFor, mouseLeaveHandlerFor
|
|
210
|
-
]);
|
|
211
|
-
// need to keep the function references for use by the subscription, which forms a closure
|
|
212
|
-
// on them. without the references, the closures become stale, and resizing during streaming
|
|
213
|
-
// doesn't work properly
|
|
214
|
-
var updatePlotRef = useRef(updatePlot);
|
|
215
|
-
useEffect(function () {
|
|
216
|
-
updatePlotRef.current = updatePlot;
|
|
217
|
-
}, [updatePlot]);
|
|
218
|
-
var onUpdateTimeRef = useRef(updateTimeRanges);
|
|
219
|
-
useEffect(function () {
|
|
220
|
-
onUpdateTimeRef.current = updateTimeRanges;
|
|
221
|
-
}, [updateTimeRanges]);
|
|
222
|
-
// memoized function for subscribing to the chart-data observable
|
|
223
|
-
var subscribe = useCallback(function () {
|
|
224
|
-
if (seriesObservable === undefined || mainG === null)
|
|
225
|
-
return undefined;
|
|
226
|
-
if (withCadenceOf !== undefined) {
|
|
227
|
-
return subscriptionWithCadenceFor(seriesObservable, onSubscribe, windowingTime, axisAssignments, xAxesState, onUpdateData, dropDataAfter, updateTimingAndPlot, seriesRef.current, function (axisId, end) { return currentTimeRef.current.set(axisId, end); }, withCadenceOf);
|
|
228
|
-
}
|
|
229
|
-
return subscriptionFor(seriesObservable, onSubscribe, windowingTime, axisAssignments, xAxesState, onUpdateData, dropDataAfter, updateTimingAndPlot, seriesRef.current, function (axisId, end) { return currentTimeRef.current.set(axisId, end); });
|
|
230
|
-
}, [
|
|
231
|
-
axisAssignments, dropDataAfter, mainG,
|
|
232
|
-
onSubscribe, onUpdateData,
|
|
233
|
-
seriesObservable, updateTimingAndPlot, windowingTime, xAxesState,
|
|
234
|
-
withCadenceOf
|
|
235
|
-
]);
|
|
236
|
-
var timeRangesRef = useRef(new Map());
|
|
237
|
-
useEffect(function () {
|
|
238
|
-
if (container && mainG) {
|
|
239
|
-
// so this gets a bit complicated. the time-ranges need to be updated whenever the time-ranges
|
|
240
|
-
// change. for example, as data is streamed in, the times change, and then we need to update the
|
|
241
|
-
// time-range. however, we want to keep the time-ranges to reflect their original scale so that
|
|
242
|
-
// we can zoom properly (so the updates can't fuck with the scale). At the same time, when the
|
|
243
|
-
// interpolation changes, then the update plot changes, and the time-ranges must maintain their
|
|
244
|
-
// original scale as well.
|
|
245
|
-
if (timeRangesRef.current.size === 0) {
|
|
246
|
-
// when no time-ranges have yet been created, then create them and hold on to a mutable
|
|
247
|
-
// reference to them
|
|
248
|
-
timeRangesRef.current = timeRanges(xAxesState.axes);
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
// when the time-ranges already exist, then we want to update the time-ranges for each
|
|
252
|
-
// existing time-range in a way that maintains the original scale.
|
|
253
|
-
var intervals_1 = timeIntervals(xAxesState.axes);
|
|
254
|
-
timeRangesRef.current
|
|
255
|
-
.forEach(function (range, id, rangesMap) {
|
|
256
|
-
var _a = intervals_1.get(id) || [NaN, NaN], start = _a[0], end = _a[1];
|
|
257
|
-
if (!isNaN(start) && !isNaN(end)) {
|
|
258
|
-
// update the reference map with the new (start, end) portion of the range,
|
|
259
|
-
// while keeping the original scale intact
|
|
260
|
-
rangesMap.set(id, range.update(start, end));
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
updatePlot(timeRangesRef.current, mainG);
|
|
265
|
-
}
|
|
266
|
-
}, [chartId, color, container, mainG, plotDimensions, updatePlot, xAxesState]);
|
|
267
|
-
// subscribe/unsubscribe to the observable chart data. when the `shouldSubscribe`
|
|
268
|
-
// is changed to `true` and we haven't subscribed yet, then subscribe. when the
|
|
269
|
-
// `shouldSubscribe` is `false` and we had subscribed, then unsubscribe. otherwise,
|
|
270
|
-
// do nothing.
|
|
271
|
-
var subscriptionRef = useRef();
|
|
272
|
-
useEffect(function () {
|
|
273
|
-
var _a;
|
|
274
|
-
if (shouldSubscribe && subscriptionRef.current === undefined) {
|
|
275
|
-
subscriptionRef.current = subscribe();
|
|
276
|
-
}
|
|
277
|
-
else if (!shouldSubscribe && subscriptionRef.current !== undefined) {
|
|
278
|
-
(_a = subscriptionRef.current) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
279
|
-
subscriptionRef.current = undefined;
|
|
280
|
-
}
|
|
281
|
-
}, [shouldSubscribe, subscribe]);
|
|
282
|
-
return null;
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Attempts to locate the x- and y-axes for the specified series. If no axis is found for the
|
|
286
|
-
* series name, then uses the default returned by the useChart() hook
|
|
287
|
-
* @param seriesName Name of the series for which to retrieve the axis
|
|
288
|
-
* @param axisAssignments A map holding the series name and the associated x- and y-axes assigned
|
|
289
|
-
* to that series. Note that the series in the axis-assignment map is merely a subset of the set
|
|
290
|
-
* of series names.
|
|
291
|
-
* @param xAxisFor The function that accepts an axis ID and returns the corresponding x-axis
|
|
292
|
-
* @param yAxisFor The function that accepts an axis ID and returns the corresponding y-axis
|
|
293
|
-
*/
|
|
294
|
-
function axesFor(seriesName, axisAssignments, xAxisFor, yAxisFor) {
|
|
295
|
-
var axes = axisAssignments.get(seriesName);
|
|
296
|
-
var xAxis = xAxisFor((axes === null || axes === void 0 ? void 0 : axes.xAxis) || "");
|
|
297
|
-
var xAxisLinear = xAxis;
|
|
298
|
-
var yAxis = yAxisFor((axes === null || axes === void 0 ? void 0 : axes.yAxis) || "");
|
|
299
|
-
var yAxisLinear = yAxis;
|
|
300
|
-
if (xAxis && !xAxisLinear) {
|
|
301
|
-
throw Error("Scatter plot requires that x-axis be of type LinearAxis");
|
|
302
|
-
}
|
|
303
|
-
if (yAxis && !yAxisLinear) {
|
|
304
|
-
throw Error("Scatter plot requires that y-axis be of type LinearAxis");
|
|
305
|
-
}
|
|
306
|
-
return [xAxisLinear, yAxisLinear];
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Renders a tooltip showing the neuron, spike time, and the spike strength when the mouse hovers over a spike.
|
|
310
|
-
* @param chartId The ID of the chart
|
|
311
|
-
* @param container The chart container
|
|
312
|
-
* @param xAxis The x-axis
|
|
313
|
-
* @param seriesName The name of the series (i.e. the neuron ID)
|
|
314
|
-
* @param series The time series
|
|
315
|
-
* @param event The mouse-over series event
|
|
316
|
-
* @param margin The plot margin
|
|
317
|
-
* @param tooltipStyle The tooltip style information
|
|
318
|
-
* @param seriesStyles The series style information (needed for (un)highlighting)
|
|
319
|
-
* @param plotDimensions The dimensions of the plot
|
|
320
|
-
* @param mouseOverHandlerFor The handler for the mouse over (registered by the <Tooltip/>)
|
|
321
|
-
*/
|
|
322
|
-
function handleMouseOverSeries(chartId, container, xAxis, seriesName, series, event, margin, tooltipStyle, seriesStyles, plotDimensions, mouseOverHandlerFor) {
|
|
323
|
-
// grab the time needed for the tooltip ID
|
|
324
|
-
var _a = d3.pointer(event, container), x = _a[0], y = _a[1];
|
|
325
|
-
var time = Math.round(xAxis.scale.invert(x - margin.left));
|
|
326
|
-
var _b = seriesStyles.get(seriesName) || defaultLineStyle, highlightColor = _b.highlightColor, highlightWidth = _b.highlightWidth;
|
|
327
|
-
// Use d3 to select element, change color and size
|
|
328
|
-
d3.select(event.currentTarget)
|
|
329
|
-
.attr('stroke', highlightColor)
|
|
330
|
-
.attr('stroke-width', highlightWidth);
|
|
331
|
-
if (mouseOverHandlerFor) {
|
|
332
|
-
mouseOverHandlerFor(seriesName, time, series, [x, y]);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Unselects the time series and calls the mouse-leave-series handler registered for this series.
|
|
337
|
-
* @param seriesName The name of the series (i.e. the neuron ID)
|
|
338
|
-
* @param segment The SVG line element representing the spike, over which the mouse is hovering.
|
|
339
|
-
* @param seriesStyles The styles for the series (for (un)highlighting)
|
|
340
|
-
* @param mouseLeaverHandlerFor Registered handler for the series when the mouse leaves
|
|
341
|
-
*/
|
|
342
|
-
function handleMouseLeaveSeries(seriesName, segment, seriesStyles, mouseLeaverHandlerFor) {
|
|
343
|
-
var _a = seriesStyles.get(seriesName) || defaultLineStyle, color = _a.color, lineWidth = _a.lineWidth;
|
|
344
|
-
d3.select(segment)
|
|
345
|
-
.attr('stroke', color)
|
|
346
|
-
.attr('stroke-width', lineWidth);
|
|
347
|
-
if (mouseLeaverHandlerFor) {
|
|
348
|
-
mouseLeaverHandlerFor(seriesName);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
//# sourceMappingURL=ScatterPlot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScatterPlot.js","sourceRoot":"","sources":["../../../../src/app/charts/ScatterPlot.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
import { boundingPoints, defaultTooltipStyle, tooltipX, tooltipY } from "./tooltipUtils";
|
|
13
|
-
import * as d3 from "d3";
|
|
14
|
-
import { formatTime, formatTimeChange, formatValue, formatValueChange } from "./utils";
|
|
15
|
-
import { useEffect, useMemo } from "react";
|
|
16
|
-
import { useChart } from "./hooks/useChart";
|
|
17
|
-
/**
|
|
18
|
-
* Adds tooltip content as a table. The columns of the table are the "label", the value before
|
|
19
|
-
* the mouse cursor, then value after the mouse cursor, and the difference between the two values.
|
|
20
|
-
* The rows of the table are x-values for the first row, and the y-values for the second row.
|
|
21
|
-
* The table has the following form.
|
|
22
|
-
* ```
|
|
23
|
-
* series name
|
|
24
|
-
* before after ∆
|
|
25
|
-
* x-label x_tb x_ta x_ta - x_tb
|
|
26
|
-
* y-label y_tb y_ta y_ta - y_tb
|
|
27
|
-
* ```
|
|
28
|
-
*
|
|
29
|
-
* Registers the tooltip-content provider with the `ChartContext` so that when d3 fires a mouse-over
|
|
30
|
-
* event on a series. The content provider is returns the {@link addTooltipContent} function
|
|
31
|
-
* when called. And when called the {@link addTooltipContent} function adds the actual tooltip
|
|
32
|
-
* content to the SVG element.
|
|
33
|
-
* @param props The properties describing the tooltip content
|
|
34
|
-
* @return null
|
|
35
|
-
* @constructor
|
|
36
|
-
*/
|
|
37
|
-
export function ScatterPlotTooltipContent(props) {
|
|
38
|
-
var _a = useChart(), chartId = _a.chartId, container = _a.container, margin = _a.margin, plotDimensions = _a.plotDimensions, registerTooltipContentProvider = _a.registerTooltipContentProvider;
|
|
39
|
-
var xLabel = props.xLabel, yLabel = props.yLabel, _b = props.beforeHeader, beforeHeader = _b === void 0 ? 'before' : _b, _c = props.afterHeader, afterHeader = _c === void 0 ? 'after' : _c, _d = props.deltaHeader, deltaHeader = _d === void 0 ? '∆' : _d, _e = props.xValueFormatter, xValueFormatter = _e === void 0 ? formatTime : _e, _f = props.yValueFormatter, yValueFormatter = _f === void 0 ? formatValue : _f, _g = props.xChangeFormatter, xChangeFormatter = _g === void 0 ? formatTimeChange : _g, _h = props.yChangeFormatter, yChangeFormatter = _h === void 0 ? formatValueChange : _h, style = props.style;
|
|
40
|
-
var tooltipStyle = useMemo(function () { return (__assign(__assign({}, defaultTooltipStyle), style)); }, [style]);
|
|
41
|
-
// register the tooltip content provider, which when called on mouse-enter-series events
|
|
42
|
-
// will render the tooltip container and then the tooltip content. recall that that the
|
|
43
|
-
// tooltip content is generated in this plot (because this is the plot that holds all the
|
|
44
|
-
// information needed to render it), and the container for the content is rendered by
|
|
45
|
-
// the <Tooltip>, which this know nothing about.
|
|
46
|
-
//
|
|
47
|
-
// the 'registration function accepts a function of the form (seriesName, time, series) => TooltipDimensions.
|
|
48
|
-
// and that function has a closure on the content-specific information needed to add the
|
|
49
|
-
// actual content
|
|
50
|
-
useEffect(function () {
|
|
51
|
-
if (container) {
|
|
52
|
-
// assemble the options for adding the tooltip
|
|
53
|
-
var options_1 = {
|
|
54
|
-
labels: { x: xLabel, y: yLabel },
|
|
55
|
-
headers: { before: beforeHeader, after: afterHeader, delta: deltaHeader },
|
|
56
|
-
formatters: {
|
|
57
|
-
x: { value: xValueFormatter, change: xChangeFormatter },
|
|
58
|
-
y: { value: yValueFormatter, change: yChangeFormatter },
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
// register the tooltip content provider function with the chart hook (useChart) so that
|
|
62
|
-
// it is visible to all children of the Chart (i.e. the <Tooltip>).
|
|
63
|
-
registerTooltipContentProvider(function (seriesName, time, series, mouseCoords) {
|
|
64
|
-
return addTooltipContent(seriesName, time, series, mouseCoords, chartId, container, margin, plotDimensions, tooltipStyle, options_1);
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
}, [
|
|
68
|
-
chartId, container, margin, plotDimensions, registerTooltipContentProvider,
|
|
69
|
-
xLabel, xChangeFormatter, xValueFormatter,
|
|
70
|
-
yLabel, yChangeFormatter, yValueFormatter,
|
|
71
|
-
beforeHeader, afterHeader, deltaHeader,
|
|
72
|
-
tooltipStyle
|
|
73
|
-
]);
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Callback function that adds tooltip content and returns the tooltip width and text height
|
|
78
|
-
* @param seriesName The name of the series (i.e. the neuron ID)
|
|
79
|
-
* @param time The time (x-coordinate value) corresponding to the mouse location
|
|
80
|
-
* @param series The spike datum (t ms, s mV)
|
|
81
|
-
* @param mouseCoords The coordinates of the mouse when the event was fired (relative to the plot container)
|
|
82
|
-
* @param chartId The ID of this chart
|
|
83
|
-
* @param container The plot container (SVGSVGElement)
|
|
84
|
-
* @param margin The plot margins
|
|
85
|
-
* @param tooltipStyle The style properties for the tooltip
|
|
86
|
-
* @param plotDimensions The dimensions of the plot
|
|
87
|
-
* @param options The options passed through the the function that adds the tooltip content
|
|
88
|
-
* @return The width and text height of the tooltip content
|
|
89
|
-
*/
|
|
90
|
-
function addTooltipContent(seriesName, time, series, mouseCoords, chartId, container, margin, plotDimensions, tooltipStyle, options) {
|
|
91
|
-
var labels = options.labels, formatters = options.formatters;
|
|
92
|
-
var x = mouseCoords[0], y = mouseCoords[1];
|
|
93
|
-
var _a = boundingPoints(series, time), lower = _a[0], upper = _a[1];
|
|
94
|
-
// display the neuron ID in the tooltip
|
|
95
|
-
var header = d3.select(container)
|
|
96
|
-
.append("text")
|
|
97
|
-
.attr('id', "tn" + time + "-" + seriesName + "-" + chartId)
|
|
98
|
-
.attr('class', 'tooltip')
|
|
99
|
-
.attr('fill', tooltipStyle.fontColor)
|
|
100
|
-
.attr('font-family', 'sans-serif')
|
|
101
|
-
.attr('font-size', tooltipStyle.fontSize)
|
|
102
|
-
.attr('font-weight', tooltipStyle.fontWeight)
|
|
103
|
-
.text(function () { return seriesName; });
|
|
104
|
-
// create the table that shows the points that come before and after the mouse time, and the
|
|
105
|
-
// changes in the time and value
|
|
106
|
-
var table = d3.select(container)
|
|
107
|
-
.append("g")
|
|
108
|
-
.attr('id', "t" + time + "-" + seriesName + "-header-" + chartId)
|
|
109
|
-
.attr('class', 'tooltip')
|
|
110
|
-
.attr('fill', tooltipStyle.fontColor)
|
|
111
|
-
.attr('font-family', 'sans-serif')
|
|
112
|
-
.attr('font-size', tooltipStyle.fontSize + 2)
|
|
113
|
-
.attr('font-weight', tooltipStyle.fontWeight + 150);
|
|
114
|
-
var headerRow = table.append('g').attr('font-weight', tooltipStyle.fontWeight + 550);
|
|
115
|
-
var hrLower = headerRow.append("text").text(function () { return options.headers.before; });
|
|
116
|
-
var hrUpper = headerRow.append("text").text(function () { return options.headers.after; });
|
|
117
|
-
var hrDelta = headerRow.append("text").text(function () { return options.headers.delta; });
|
|
118
|
-
var trHeader = table.append("text").text(function () { return labels.x; });
|
|
119
|
-
var trLower = table.append("text").text(function () { return formatters.x.value(lower[0]); });
|
|
120
|
-
var trUpper = table.append("text").text(function () { return formatters.x.value(upper[0]); });
|
|
121
|
-
var trDelta = table.append("text").text(function () { return formatters.x.change(lower[0], upper[0]); });
|
|
122
|
-
var vrHeader = table.append("text").text(function () { return labels.y; });
|
|
123
|
-
var vrLower = table.append("text").text(function () { return formatters.y.value(lower[1]); });
|
|
124
|
-
var vrUpper = table.append("text").text(function () { return formatters.y.value(upper[1]); });
|
|
125
|
-
var vrDelta = table.append("text").text(function () { return formatters.y.change(lower[1], upper[1]); });
|
|
126
|
-
var textWidthOf = function (elem) { var _a, _b; return ((_b = (_a = elem.node()) === null || _a === void 0 ? void 0 : _a.getBBox()) === null || _b === void 0 ? void 0 : _b.width) || 0; };
|
|
127
|
-
var textHeightOf = function (elem) { var _a, _b; return ((_b = (_a = elem.node()) === null || _a === void 0 ? void 0 : _a.getBBox()) === null || _b === void 0 ? void 0 : _b.height) || 0; };
|
|
128
|
-
var spacesWidthFor = function (spaces) { return spaces * textWidthOf(hrLower) / 5; };
|
|
129
|
-
// calculate the max width and height of the text
|
|
130
|
-
var tooltipWidth = Math.max(textWidthOf(header), spacesWidthFor(33));
|
|
131
|
-
var headerTextHeight = textHeightOf(header);
|
|
132
|
-
var headerRowHeight = textHeightOf(hrLower);
|
|
133
|
-
var timeRowHeight = textHeightOf(trHeader);
|
|
134
|
-
var valueRowHeight = textHeightOf(vrHeader);
|
|
135
|
-
var textHeight = headerTextHeight + headerRowHeight + timeRowHeight + valueRowHeight;
|
|
136
|
-
// set the header text location
|
|
137
|
-
var xCoord = tooltipX(x, tooltipWidth, plotDimensions, tooltipStyle, margin);
|
|
138
|
-
var yCoord = tooltipY(y, textHeight, plotDimensions, tooltipStyle, margin);
|
|
139
|
-
var xTooltip = xCoord + tooltipStyle.paddingLeft;
|
|
140
|
-
var yTooltip = yCoord + tooltipStyle.paddingTop;
|
|
141
|
-
header
|
|
142
|
-
.attr('x', function () { return xTooltip; })
|
|
143
|
-
.attr('y', function () { return yTooltip - (headerRowHeight + timeRowHeight + valueRowHeight) + textHeight; });
|
|
144
|
-
var hrRowY = yTooltip + headerTextHeight + headerRowHeight;
|
|
145
|
-
var hrLowerX = spacesWidthFor(14);
|
|
146
|
-
var hrUpperX = spacesWidthFor(24);
|
|
147
|
-
var hrDeltaX = spacesWidthFor(32);
|
|
148
|
-
hrLower.attr('x', function () { return xTooltip + hrLowerX - textWidthOf(hrLower); }).attr('y', function () { return hrRowY; });
|
|
149
|
-
hrUpper.attr('x', function () { return xTooltip + hrUpperX - textWidthOf(hrUpper); }).attr('y', function () { return hrRowY; });
|
|
150
|
-
hrDelta.attr('x', function () { return xTooltip + hrDeltaX - textWidthOf(hrDelta); }).attr('y', function () { return hrRowY; });
|
|
151
|
-
var trRowY = hrRowY + timeRowHeight;
|
|
152
|
-
trHeader.attr('x', function () { return xTooltip; }).attr('y', function () { return trRowY; });
|
|
153
|
-
trLower.attr('x', function () { return xTooltip + hrLowerX - textWidthOf(trLower); }).attr('y', function () { return trRowY; });
|
|
154
|
-
trUpper.attr('x', function () { return xTooltip + hrUpperX - textWidthOf(trUpper); }).attr('y', function () { return trRowY; });
|
|
155
|
-
trDelta.attr('x', function () { return xTooltip + hrDeltaX - textWidthOf(trDelta); }).attr('y', function () { return trRowY; });
|
|
156
|
-
var vrRowY = trRowY + valueRowHeight;
|
|
157
|
-
vrHeader.attr('x', function () { return xTooltip; }).attr('y', function () { return vrRowY; });
|
|
158
|
-
vrLower.attr('x', function () { return xTooltip + hrLowerX - textWidthOf(vrLower); }).attr('y', function () { return vrRowY; });
|
|
159
|
-
vrUpper.attr('x', function () { return xTooltip + hrUpperX - textWidthOf(vrUpper); }).attr('y', function () { return vrRowY; });
|
|
160
|
-
vrDelta.attr('x', function () { return xTooltip + hrDeltaX - textWidthOf(vrDelta); }).attr('y', function () { return vrRowY; });
|
|
161
|
-
return { x: xCoord, y: yCoord, contentWidth: tooltipWidth, contentHeight: textHeight };
|
|
162
|
-
}
|
|
163
|
-
//# sourceMappingURL=ScatterPlotTooltipContent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScatterPlotTooltipContent.js","sourceRoot":"","sources":["../../../../src/app/charts/ScatterPlotTooltipContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../../src/app/charts/Tooltip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
import { useChart } from "./hooks/useChart";
|
|
13
|
-
import { defaultTrackerLabelFont, defaultTrackerStyle, removeTrackerControl, trackerControlInstance } from "./trackerUtils";
|
|
14
|
-
import * as d3 from "d3";
|
|
15
|
-
import { useEffect, useMemo, useRef } from "react";
|
|
16
|
-
import { noop } from "./utils";
|
|
17
|
-
export var TrackerLabelLocation;
|
|
18
|
-
(function (TrackerLabelLocation) {
|
|
19
|
-
TrackerLabelLocation[TrackerLabelLocation["Nowhere"] = 0] = "Nowhere";
|
|
20
|
-
TrackerLabelLocation[TrackerLabelLocation["WithMouse"] = 1] = "WithMouse";
|
|
21
|
-
TrackerLabelLocation[TrackerLabelLocation["ByAxes"] = 2] = "ByAxes";
|
|
22
|
-
})(TrackerLabelLocation || (TrackerLabelLocation = {}));
|
|
23
|
-
/**
|
|
24
|
-
* A tracker line that displays or reports the time at the mouse location. The tracker
|
|
25
|
-
* handles single axes and dual axes.
|
|
26
|
-
* @param props The tracker control properties
|
|
27
|
-
* @return null component
|
|
28
|
-
* @constructor
|
|
29
|
-
*/
|
|
30
|
-
export function Tracker(props) {
|
|
31
|
-
var visible = props.visible, _a = props.labelLocation, labelLocation = _a === void 0 ? TrackerLabelLocation.WithMouse : _a, style = props.style, font = props.font, _b = props.onTrackerUpdate, onTrackerUpdate = _b === void 0 ? noop : _b;
|
|
32
|
-
var _c = useChart(), chartId = _c.chartId, container = _c.container, plotDimensions = _c.plotDimensions, margin = _c.margin, xAxesState = _c.xAxesState;
|
|
33
|
-
var trackerStyle = useMemo(function () { return (__assign(__assign({}, defaultTrackerStyle), style)); }, [style]);
|
|
34
|
-
var trackerFont = useMemo(function () { return (__assign(__assign({}, defaultTrackerLabelFont), font)); }, [font]);
|
|
35
|
-
var trackerRef = useRef();
|
|
36
|
-
var xAxisRef = useRef(new Map());
|
|
37
|
-
useEffect(function () {
|
|
38
|
-
var axes = new Map();
|
|
39
|
-
xAxesState.axes.forEach(function (axis, id) { return axes.set(id, axis); });
|
|
40
|
-
xAxisRef.current = axes;
|
|
41
|
-
}, [xAxesState]);
|
|
42
|
-
// when the container, tracker-control function, or visibility change, then we need to update the
|
|
43
|
-
// tracker control
|
|
44
|
-
useEffect(function () {
|
|
45
|
-
if (container) {
|
|
46
|
-
var svg = d3.select(container);
|
|
47
|
-
if (visible && container) {
|
|
48
|
-
var trackerLabels = new Map(Array.from(xAxisRef.current.values()).map(function (axis) { return [
|
|
49
|
-
axis,
|
|
50
|
-
function (x) { return labelLocation === TrackerLabelLocation.Nowhere ?
|
|
51
|
-
'' :
|
|
52
|
-
d3.format(",.0f")(axis.scale.invert(x - margin.left)) + " ms"; }
|
|
53
|
-
]; }));
|
|
54
|
-
trackerRef.current = trackerControlInstance(chartId, container, svg, plotDimensions, margin, trackerStyle, trackerFont, trackerLabels, labelLocation, onTrackerUpdate);
|
|
55
|
-
}
|
|
56
|
-
// if the tracker was defined, and is now no longer defined (i.e. props changed, then remove the tracker)
|
|
57
|
-
else if (!visible && trackerRef.current !== undefined) {
|
|
58
|
-
removeTrackerControl(svg);
|
|
59
|
-
trackerRef.current = undefined;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}, [chartId, container, labelLocation, margin, onTrackerUpdate, plotDimensions, trackerFont, trackerStyle, visible]);
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=Tracker.js.map
|