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.
Files changed (463) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +809 -1022
  3. package/changes.md +40 -0
  4. package/dist/app/charts/Chart.d.ts +35 -139
  5. package/dist/app/charts/Chart.d.ts.map +1 -0
  6. package/dist/app/charts/Chart.js +74 -65
  7. package/dist/app/charts/Chart.js.map +1 -1
  8. package/dist/app/charts/axes/AxesState.d.ts +26 -18
  9. package/dist/app/charts/axes/AxesState.d.ts.map +1 -0
  10. package/dist/app/charts/axes/AxesState.js +26 -24
  11. package/dist/app/charts/axes/AxesState.js.map +1 -1
  12. package/dist/app/charts/axes/AxisInterval.d.ts +44 -26
  13. package/dist/app/charts/axes/AxisInterval.d.ts.map +1 -0
  14. package/dist/app/charts/axes/AxisInterval.js +48 -29
  15. package/dist/app/charts/axes/AxisInterval.js.map +1 -1
  16. package/dist/app/charts/axes/BaseAxisRange.d.ts +46 -22
  17. package/dist/app/charts/axes/BaseAxisRange.d.ts.map +1 -0
  18. package/dist/app/charts/axes/BaseAxisRange.js +17 -12
  19. package/dist/app/charts/axes/BaseAxisRange.js.map +1 -1
  20. package/dist/app/charts/axes/ContinuousAxis.d.ts +47 -6
  21. package/dist/app/charts/axes/ContinuousAxis.d.ts.map +1 -0
  22. package/dist/app/charts/axes/ContinuousAxis.js +160 -27
  23. package/dist/app/charts/axes/ContinuousAxis.js.map +1 -1
  24. package/dist/app/charts/axes/ContinuousAxisRange.d.ts +29 -10
  25. package/dist/app/charts/axes/ContinuousAxisRange.d.ts.map +1 -0
  26. package/dist/app/charts/axes/ContinuousAxisRange.js +29 -11
  27. package/dist/app/charts/axes/ContinuousAxisRange.js.map +1 -1
  28. package/dist/app/charts/axes/EmptyAxis.d.ts +5 -2
  29. package/dist/app/charts/axes/EmptyAxis.d.ts.map +1 -0
  30. package/dist/app/charts/axes/EmptyAxis.js +30 -9
  31. package/dist/app/charts/axes/EmptyAxis.js.map +1 -1
  32. package/dist/app/charts/axes/OrdinalAxis.d.ts +5 -3
  33. package/dist/app/charts/axes/OrdinalAxis.d.ts.map +1 -0
  34. package/dist/app/charts/axes/OrdinalAxis.js +39 -16
  35. package/dist/app/charts/axes/OrdinalAxis.js.map +1 -1
  36. package/dist/app/charts/axes/OrdinalAxisRange.d.ts +76 -13
  37. package/dist/app/charts/axes/OrdinalAxisRange.d.ts.map +1 -0
  38. package/dist/app/charts/axes/OrdinalAxisRange.js +95 -16
  39. package/dist/app/charts/axes/OrdinalAxisRange.js.map +1 -1
  40. package/dist/app/charts/axes/autoScale.d.ts +111 -0
  41. package/dist/app/charts/axes/autoScale.d.ts.map +1 -0
  42. package/dist/app/charts/axes/autoScale.js +188 -0
  43. package/dist/app/charts/axes/autoScale.js.map +1 -0
  44. package/dist/app/charts/axes/axes.d.ts +273 -150
  45. package/dist/app/charts/axes/axes.d.ts.map +1 -0
  46. package/dist/app/charts/axes/axes.js +808 -583
  47. package/dist/app/charts/axes/axes.js.map +1 -1
  48. package/dist/app/charts/d3types.d.ts +40 -11
  49. package/dist/app/charts/d3types.d.ts.map +1 -0
  50. package/dist/app/charts/d3types.js +3 -0
  51. package/dist/app/charts/d3types.js.map +1 -1
  52. package/dist/app/charts/datasources/StreamingDataSource.d.ts +149 -0
  53. package/dist/app/charts/datasources/StreamingDataSource.d.ts.map +1 -0
  54. package/dist/app/charts/datasources/StreamingDataSource.js +110 -0
  55. package/dist/app/charts/datasources/StreamingDataSource.js.map +1 -0
  56. package/dist/app/charts/datasources/iteratesDataSource.d.ts +73 -0
  57. package/dist/app/charts/datasources/iteratesDataSource.d.ts.map +1 -0
  58. package/dist/app/charts/datasources/iteratesDataSource.js +87 -0
  59. package/dist/app/charts/datasources/iteratesDataSource.js.map +1 -0
  60. package/dist/app/charts/datasources/ordinalDataSource.d.ts +75 -0
  61. package/dist/app/charts/datasources/ordinalDataSource.d.ts.map +1 -0
  62. package/dist/app/charts/datasources/ordinalDataSource.js +135 -0
  63. package/dist/app/charts/datasources/ordinalDataSource.js.map +1 -0
  64. package/dist/app/charts/datasources/outlierDataSource.d.ts +53 -0
  65. package/dist/app/charts/datasources/outlierDataSource.d.ts.map +1 -0
  66. package/dist/app/charts/datasources/outlierDataSource.js +57 -0
  67. package/dist/app/charts/datasources/outlierDataSource.js.map +1 -0
  68. package/dist/app/charts/datasources/timeSeriesDataSource.d.ts +77 -0
  69. package/dist/app/charts/datasources/timeSeriesDataSource.d.ts.map +1 -0
  70. package/dist/app/charts/datasources/timeSeriesDataSource.js +85 -0
  71. package/dist/app/charts/datasources/timeSeriesDataSource.js.map +1 -0
  72. package/dist/app/charts/filters/regexFilter.d.ts +31 -4
  73. package/dist/app/charts/filters/regexFilter.d.ts.map +1 -0
  74. package/dist/app/charts/filters/regexFilter.js +38 -4
  75. package/dist/app/charts/filters/regexFilter.js.map +1 -1
  76. package/dist/app/charts/hooks/AxesProvider.d.ts +21 -0
  77. package/dist/app/charts/hooks/AxesProvider.d.ts.map +1 -0
  78. package/dist/app/charts/hooks/AxesProvider.js +213 -0
  79. package/dist/app/charts/hooks/AxesProvider.js.map +1 -0
  80. package/dist/app/charts/hooks/CanvasSurfaceProvider.d.ts +25 -0
  81. package/dist/app/charts/hooks/CanvasSurfaceProvider.d.ts.map +1 -0
  82. package/dist/app/charts/hooks/CanvasSurfaceProvider.js +76 -0
  83. package/dist/app/charts/hooks/CanvasSurfaceProvider.js.map +1 -0
  84. package/dist/app/charts/hooks/ChartProvider.d.ts +40 -0
  85. package/dist/app/charts/hooks/ChartProvider.d.ts.map +1 -0
  86. package/dist/app/charts/hooks/ChartProvider.js +33 -0
  87. package/dist/app/charts/hooks/ChartProvider.js.map +1 -0
  88. package/dist/app/charts/hooks/InteractionProvider.d.ts +23 -0
  89. package/dist/app/charts/hooks/InteractionProvider.d.ts.map +1 -0
  90. package/dist/app/charts/hooks/InteractionProvider.js +60 -0
  91. package/dist/app/charts/hooks/InteractionProvider.js.map +1 -0
  92. package/dist/app/charts/hooks/PlotDimensionsProvider.d.ts +16 -0
  93. package/dist/app/charts/hooks/PlotDimensionsProvider.d.ts.map +1 -0
  94. package/dist/app/charts/hooks/PlotDimensionsProvider.js +76 -0
  95. package/dist/app/charts/hooks/PlotDimensionsProvider.js.map +1 -0
  96. package/dist/app/charts/hooks/defaultAxesValues.d.ts +11 -0
  97. package/dist/app/charts/hooks/defaultAxesValues.d.ts.map +1 -0
  98. package/dist/app/charts/hooks/defaultAxesValues.js +36 -0
  99. package/dist/app/charts/hooks/defaultAxesValues.js.map +1 -0
  100. package/dist/app/charts/hooks/defaultMouseValues.d.ts +9 -0
  101. package/dist/app/charts/hooks/defaultMouseValues.d.ts.map +1 -0
  102. package/dist/app/charts/hooks/defaultMouseValues.js +23 -0
  103. package/dist/app/charts/hooks/defaultMouseValues.js.map +1 -0
  104. package/dist/app/charts/hooks/defaultPlotDimensions.d.ts +13 -0
  105. package/dist/app/charts/hooks/defaultPlotDimensions.d.ts.map +1 -0
  106. package/dist/app/charts/hooks/defaultPlotDimensions.js +23 -0
  107. package/dist/app/charts/hooks/defaultPlotDimensions.js.map +1 -0
  108. package/dist/app/charts/hooks/defaultTooltipValues.d.ts +9 -0
  109. package/dist/app/charts/hooks/defaultTooltipValues.d.ts.map +1 -0
  110. package/dist/app/charts/hooks/defaultTooltipValues.js +21 -0
  111. package/dist/app/charts/hooks/defaultTooltipValues.js.map +1 -0
  112. package/dist/app/charts/hooks/defaultUseChartValues.d.ts +14 -0
  113. package/dist/app/charts/hooks/defaultUseChartValues.d.ts.map +1 -0
  114. package/dist/app/charts/hooks/defaultUseChartValues.js +30 -0
  115. package/dist/app/charts/hooks/defaultUseChartValues.js.map +1 -0
  116. package/dist/app/charts/hooks/useAxes.d.ts +49 -36
  117. package/dist/app/charts/hooks/useAxes.d.ts.map +1 -0
  118. package/dist/app/charts/hooks/useAxes.js +16 -176
  119. package/dist/app/charts/hooks/useAxes.js.map +1 -1
  120. package/dist/app/charts/hooks/useCanvasSurface.d.ts +25 -0
  121. package/dist/app/charts/hooks/useCanvasSurface.d.ts.map +1 -0
  122. package/dist/app/charts/hooks/useCanvasSurface.js +18 -0
  123. package/dist/app/charts/hooks/useCanvasSurface.js.map +1 -0
  124. package/dist/app/charts/hooks/useChart.d.ts +30 -44
  125. package/dist/app/charts/hooks/useChart.d.ts.map +1 -0
  126. package/dist/app/charts/hooks/useChart.js +26 -48
  127. package/dist/app/charts/hooks/useChart.js.map +1 -1
  128. package/dist/app/charts/hooks/useDataSource.d.ts +68 -0
  129. package/dist/app/charts/hooks/useDataSource.d.ts.map +1 -0
  130. package/dist/app/charts/hooks/useDataSource.js +63 -0
  131. package/dist/app/charts/hooks/useDataSource.js.map +1 -0
  132. package/dist/app/charts/hooks/useHoveredSeries.d.ts +25 -0
  133. package/dist/app/charts/hooks/useHoveredSeries.d.ts.map +1 -0
  134. package/dist/app/charts/hooks/useHoveredSeries.js +15 -0
  135. package/dist/app/charts/hooks/useHoveredSeries.js.map +1 -0
  136. package/dist/app/charts/hooks/useMouse.d.ts +46 -22
  137. package/dist/app/charts/hooks/useMouse.d.ts.map +1 -0
  138. package/dist/app/charts/hooks/useMouse.js +12 -56
  139. package/dist/app/charts/hooks/useMouse.js.map +1 -1
  140. package/dist/app/charts/hooks/usePlotDimensions.d.ts +25 -13
  141. package/dist/app/charts/hooks/usePlotDimensions.d.ts.map +1 -0
  142. package/dist/app/charts/hooks/usePlotDimensions.js +6 -62
  143. package/dist/app/charts/hooks/usePlotDimensions.js.map +1 -1
  144. package/dist/app/charts/hooks/useTooltip.d.ts +24 -26
  145. package/dist/app/charts/hooks/useTooltip.d.ts.map +1 -0
  146. package/dist/app/charts/hooks/useTooltip.js +12 -42
  147. package/dist/app/charts/hooks/useTooltip.js.map +1 -1
  148. package/dist/app/charts/index.d.ts +66 -0
  149. package/dist/app/charts/index.d.ts.map +1 -0
  150. package/dist/app/charts/index.js +87 -0
  151. package/dist/app/charts/index.js.map +1 -0
  152. package/dist/app/charts/legends/Legend.d.ts +33 -12
  153. package/dist/app/charts/legends/Legend.d.ts.map +1 -0
  154. package/dist/app/charts/legends/Legend.js +138 -379
  155. package/dist/app/charts/legends/Legend.js.map +1 -1
  156. package/dist/app/charts/legends/constants.d.ts +19 -0
  157. package/dist/app/charts/legends/constants.d.ts.map +1 -0
  158. package/dist/app/charts/legends/constants.js +34 -0
  159. package/dist/app/charts/legends/constants.js.map +1 -0
  160. package/dist/app/charts/observables/ChartData.d.ts +1 -0
  161. package/dist/app/charts/observables/ChartData.d.ts.map +1 -0
  162. package/dist/app/charts/observables/iterates.d.ts +13 -7
  163. package/dist/app/charts/observables/iterates.d.ts.map +1 -0
  164. package/dist/app/charts/observables/iterates.js +42 -9
  165. package/dist/app/charts/observables/iterates.js.map +1 -1
  166. package/dist/app/charts/observables/ordinals.d.ts +70 -12
  167. package/dist/app/charts/observables/ordinals.d.ts.map +1 -0
  168. package/dist/app/charts/observables/ordinals.js +127 -48
  169. package/dist/app/charts/observables/ordinals.js.map +1 -1
  170. package/dist/app/charts/observables/outliers.d.ts +18 -0
  171. package/dist/app/charts/observables/outliers.d.ts.map +1 -0
  172. package/dist/app/charts/observables/outliers.js +2 -0
  173. package/dist/app/charts/observables/outliers.js.map +1 -0
  174. package/dist/app/charts/plots/BarPlot.d.ts +87 -13
  175. package/dist/app/charts/plots/BarPlot.d.ts.map +1 -0
  176. package/dist/app/charts/plots/BarPlot.js +603 -356
  177. package/dist/app/charts/plots/BarPlot.js.map +1 -1
  178. package/dist/app/charts/plots/OutlierPlot.d.ts +123 -0
  179. package/dist/app/charts/plots/OutlierPlot.d.ts.map +1 -0
  180. package/dist/app/charts/plots/OutlierPlot.js +430 -0
  181. package/dist/app/charts/plots/OutlierPlot.js.map +1 -0
  182. package/dist/app/charts/plots/PoincarePlot.d.ts +92 -14
  183. package/dist/app/charts/plots/PoincarePlot.d.ts.map +1 -0
  184. package/dist/app/charts/plots/PoincarePlot.js +523 -364
  185. package/dist/app/charts/plots/PoincarePlot.js.map +1 -1
  186. package/dist/app/charts/plots/RasterPlot.d.ts +31 -10
  187. package/dist/app/charts/plots/RasterPlot.d.ts.map +1 -0
  188. package/dist/app/charts/plots/RasterPlot.js +198 -306
  189. package/dist/app/charts/plots/RasterPlot.js.map +1 -1
  190. package/dist/app/charts/plots/ScatterPlot.d.ts +77 -21
  191. package/dist/app/charts/plots/ScatterPlot.d.ts.map +1 -0
  192. package/dist/app/charts/plots/ScatterPlot.js +359 -302
  193. package/dist/app/charts/plots/ScatterPlot.js.map +1 -1
  194. package/dist/app/charts/plots/autoScaleYAxes.d.ts +43 -0
  195. package/dist/app/charts/plots/autoScaleYAxes.d.ts.map +1 -0
  196. package/dist/app/charts/plots/autoScaleYAxes.js +71 -0
  197. package/dist/app/charts/plots/autoScaleYAxes.js.map +1 -0
  198. package/dist/app/charts/plots/colorizedLine.d.ts +61 -0
  199. package/dist/app/charts/plots/colorizedLine.d.ts.map +1 -0
  200. package/dist/app/charts/plots/colorizedLine.js +157 -0
  201. package/dist/app/charts/plots/colorizedLine.js.map +1 -0
  202. package/dist/app/charts/plots/constants.d.ts +7 -0
  203. package/dist/app/charts/plots/constants.d.ts.map +1 -0
  204. package/dist/app/charts/plots/constants.js +11 -0
  205. package/dist/app/charts/plots/constants.js.map +1 -0
  206. package/dist/app/charts/plots/hitTesting.d.ts +88 -0
  207. package/dist/app/charts/plots/hitTesting.d.ts.map +1 -0
  208. package/dist/app/charts/plots/hitTesting.js +136 -0
  209. package/dist/app/charts/plots/hitTesting.js.map +1 -0
  210. package/dist/app/charts/plots/plot.d.ts +52 -16
  211. package/dist/app/charts/plots/plot.d.ts.map +1 -0
  212. package/dist/app/charts/plots/plot.js +108 -35
  213. package/dist/app/charts/plots/plot.js.map +1 -1
  214. package/dist/app/charts/plots/useCanvasZoomPan.d.ts +119 -0
  215. package/dist/app/charts/plots/useCanvasZoomPan.d.ts.map +1 -0
  216. package/dist/app/charts/plots/useCanvasZoomPan.js +113 -0
  217. package/dist/app/charts/plots/useCanvasZoomPan.js.map +1 -0
  218. package/dist/app/charts/plots/useStreamingTimeAxes.d.ts +103 -0
  219. package/dist/app/charts/plots/useStreamingTimeAxes.d.ts.map +1 -0
  220. package/dist/app/charts/plots/useStreamingTimeAxes.js +257 -0
  221. package/dist/app/charts/plots/useStreamingTimeAxes.js.map +1 -0
  222. package/dist/app/charts/series/baseSeries.d.ts +60 -8
  223. package/dist/app/charts/series/baseSeries.d.ts.map +1 -0
  224. package/dist/app/charts/series/baseSeries.js +53 -8
  225. package/dist/app/charts/series/baseSeries.js.map +1 -1
  226. package/dist/app/charts/series/iterateSeries.d.ts +9 -8
  227. package/dist/app/charts/series/iterateSeries.d.ts.map +1 -0
  228. package/dist/app/charts/series/iterateSeries.js +7 -7
  229. package/dist/app/charts/series/iterateSeries.js.map +1 -1
  230. package/dist/app/charts/series/ordinalSeries.d.ts +27 -13
  231. package/dist/app/charts/series/ordinalSeries.d.ts.map +1 -0
  232. package/dist/app/charts/series/ordinalSeries.js +29 -15
  233. package/dist/app/charts/series/ordinalSeries.js.map +1 -1
  234. package/dist/app/charts/series/outlierSeries.d.ts +142 -0
  235. package/dist/app/charts/series/outlierSeries.d.ts.map +1 -0
  236. package/dist/app/charts/series/outlierSeries.js +82 -0
  237. package/dist/app/charts/series/outlierSeries.js.map +1 -0
  238. package/dist/app/charts/series/timeSeries.d.ts +13 -9
  239. package/dist/app/charts/series/timeSeries.d.ts.map +1 -0
  240. package/dist/app/charts/series/timeSeries.js +6 -3
  241. package/dist/app/charts/series/timeSeries.js.map +1 -1
  242. package/dist/app/charts/series/timeSeriesChartData.d.ts +18 -10
  243. package/dist/app/charts/series/timeSeriesChartData.d.ts.map +1 -0
  244. package/dist/app/charts/series/timeSeriesChartData.js +28 -14
  245. package/dist/app/charts/series/timeSeriesChartData.js.map +1 -1
  246. package/dist/app/charts/styling/barPlotStyle.d.ts +46 -2
  247. package/dist/app/charts/styling/barPlotStyle.d.ts.map +1 -0
  248. package/dist/app/charts/styling/barPlotStyle.js +37 -3
  249. package/dist/app/charts/styling/barPlotStyle.js.map +1 -1
  250. package/dist/app/charts/styling/canvasStyle.d.ts +53 -0
  251. package/dist/app/charts/styling/canvasStyle.d.ts.map +1 -0
  252. package/dist/app/charts/styling/canvasStyle.js +71 -0
  253. package/dist/app/charts/styling/canvasStyle.js.map +1 -0
  254. package/dist/app/charts/styling/margins.d.ts +21 -2
  255. package/dist/app/charts/styling/margins.d.ts.map +1 -0
  256. package/dist/app/charts/styling/margins.js +25 -4
  257. package/dist/app/charts/styling/margins.js.map +1 -1
  258. package/dist/app/charts/styling/svgStyle.d.ts +10 -56
  259. package/dist/app/charts/styling/svgStyle.d.ts.map +1 -0
  260. package/dist/app/charts/styling/svgStyle.js +3 -78
  261. package/dist/app/charts/styling/svgStyle.js.map +1 -1
  262. package/dist/app/charts/subscriptions/viewDrivers.d.ts +124 -0
  263. package/dist/app/charts/subscriptions/viewDrivers.d.ts.map +1 -0
  264. package/dist/app/charts/subscriptions/viewDrivers.js +338 -0
  265. package/dist/app/charts/subscriptions/viewDrivers.js.map +1 -0
  266. package/dist/app/charts/tooltips/BarPlotTooltipContent.d.ts +12 -78
  267. package/dist/app/charts/tooltips/BarPlotTooltipContent.d.ts.map +1 -0
  268. package/dist/app/charts/tooltips/BarPlotTooltipContent.js +65 -257
  269. package/dist/app/charts/tooltips/BarPlotTooltipContent.js.map +1 -1
  270. package/dist/app/charts/tooltips/DefaultOutlierTooltipContent.d.ts +9 -0
  271. package/dist/app/charts/tooltips/DefaultOutlierTooltipContent.d.ts.map +1 -0
  272. package/dist/app/charts/tooltips/DefaultOutlierTooltipContent.js +16 -0
  273. package/dist/app/charts/tooltips/DefaultOutlierTooltipContent.js.map +1 -0
  274. package/dist/app/charts/tooltips/OutlierPlotTooltipContent.d.ts +30 -0
  275. package/dist/app/charts/tooltips/OutlierPlotTooltipContent.d.ts.map +1 -0
  276. package/dist/app/charts/tooltips/OutlierPlotTooltipContent.js +26 -0
  277. package/dist/app/charts/tooltips/OutlierPlotTooltipContent.js.map +1 -0
  278. package/dist/app/charts/tooltips/PoincarePlotTooltipContent.d.ts +22 -72
  279. package/dist/app/charts/tooltips/PoincarePlotTooltipContent.d.ts.map +1 -0
  280. package/dist/app/charts/tooltips/PoincarePlotTooltipContent.js +104 -171
  281. package/dist/app/charts/tooltips/PoincarePlotTooltipContent.js.map +1 -1
  282. package/dist/app/charts/tooltips/RasterPlotTooltipContent.d.ts +32 -8
  283. package/dist/app/charts/tooltips/RasterPlotTooltipContent.d.ts.map +1 -0
  284. package/dist/app/charts/tooltips/RasterPlotTooltipContent.js +62 -115
  285. package/dist/app/charts/tooltips/RasterPlotTooltipContent.js.map +1 -1
  286. package/dist/app/charts/tooltips/ScatterPlotTooltipContent.d.ts +39 -12
  287. package/dist/app/charts/tooltips/ScatterPlotTooltipContent.d.ts.map +1 -0
  288. package/dist/app/charts/tooltips/ScatterPlotTooltipContent.js +162 -134
  289. package/dist/app/charts/tooltips/ScatterPlotTooltipContent.js.map +1 -1
  290. package/dist/app/charts/tooltips/Tooltip.d.ts +27 -32
  291. package/dist/app/charts/tooltips/Tooltip.d.ts.map +1 -0
  292. package/dist/app/charts/tooltips/Tooltip.js +37 -81
  293. package/dist/app/charts/tooltips/Tooltip.js.map +1 -1
  294. package/dist/app/charts/tooltips/TooltipContent.d.ts +81 -0
  295. package/dist/app/charts/tooltips/TooltipContent.d.ts.map +1 -0
  296. package/dist/app/charts/tooltips/TooltipContent.js +99 -0
  297. package/dist/app/charts/tooltips/TooltipContent.js.map +1 -0
  298. package/dist/app/charts/tooltips/tooltipUtils.d.ts +186 -36
  299. package/dist/app/charts/tooltips/tooltipUtils.d.ts.map +1 -0
  300. package/dist/app/charts/tooltips/tooltipUtils.js +277 -48
  301. package/dist/app/charts/tooltips/tooltipUtils.js.map +1 -1
  302. package/dist/app/charts/tooltips/useOutlierTooltip.d.ts +59 -0
  303. package/dist/app/charts/tooltips/useOutlierTooltip.d.ts.map +1 -0
  304. package/dist/app/charts/tooltips/useOutlierTooltip.js +16 -0
  305. package/dist/app/charts/tooltips/useOutlierTooltip.js.map +1 -0
  306. package/dist/app/charts/tooltips/useTooltipPlacement.d.ts +51 -0
  307. package/dist/app/charts/tooltips/useTooltipPlacement.d.ts.map +1 -0
  308. package/dist/app/charts/tooltips/useTooltipPlacement.js +52 -0
  309. package/dist/app/charts/tooltips/useTooltipPlacement.js.map +1 -0
  310. package/dist/app/charts/tooltips/useTooltipStyle.d.ts +11 -0
  311. package/dist/app/charts/tooltips/useTooltipStyle.d.ts.map +1 -0
  312. package/dist/app/charts/tooltips/useTooltipStyle.js +14 -0
  313. package/dist/app/charts/tooltips/useTooltipStyle.js.map +1 -0
  314. package/dist/app/charts/trackers/Tracker.d.ts +22 -6
  315. package/dist/app/charts/trackers/Tracker.d.ts.map +1 -0
  316. package/dist/app/charts/trackers/Tracker.js +36 -22
  317. package/dist/app/charts/trackers/Tracker.js.map +1 -1
  318. package/dist/app/charts/trackers/trackerUtils.d.ts +40 -18
  319. package/dist/app/charts/trackers/trackerUtils.d.ts.map +1 -0
  320. package/dist/app/charts/trackers/trackerUtils.js +213 -300
  321. package/dist/app/charts/trackers/trackerUtils.js.map +1 -1
  322. package/dist/app/charts/utils.d.ts +72 -33
  323. package/dist/app/charts/utils.d.ts.map +1 -0
  324. package/dist/app/charts/utils.js +87 -42
  325. package/dist/app/charts/utils.js.map +1 -1
  326. package/dist/index.d.ts +2 -45
  327. package/dist/index.d.ts.map +1 -0
  328. package/dist/index.js +2 -72
  329. package/dist/index.js.map +1 -1
  330. package/package.json +87 -46
  331. package/src/app/charts/Chart.tsx +132 -168
  332. package/src/app/charts/axes/AxesState.ts +27 -29
  333. package/src/app/charts/axes/AxisInterval.ts +57 -32
  334. package/src/app/charts/axes/BaseAxisRange.ts +47 -27
  335. package/src/app/charts/axes/ContinuousAxis.tsx +235 -39
  336. package/src/app/charts/axes/ContinuousAxisRange.ts +29 -11
  337. package/src/app/charts/axes/EmptyAxis.tsx +52 -17
  338. package/src/app/charts/axes/OrdinalAxis.tsx +54 -28
  339. package/src/app/charts/axes/OrdinalAxisRange.ts +96 -16
  340. package/src/app/charts/axes/autoScale.ts +244 -0
  341. package/src/app/charts/axes/axes.ts +954 -735
  342. package/src/app/charts/d3types.ts +42 -13
  343. package/src/app/charts/datasources/StreamingDataSource.ts +214 -0
  344. package/src/app/charts/datasources/iteratesDataSource.ts +122 -0
  345. package/src/app/charts/datasources/ordinalDataSource.ts +205 -0
  346. package/src/app/charts/datasources/outlierDataSource.ts +90 -0
  347. package/src/app/charts/datasources/timeSeriesDataSource.ts +133 -0
  348. package/src/app/charts/filters/regexFilter.ts +45 -5
  349. package/src/app/charts/hooks/AxesProvider.tsx +301 -0
  350. package/src/app/charts/hooks/CanvasSurfaceProvider.tsx +117 -0
  351. package/src/app/charts/hooks/ChartProvider.tsx +79 -0
  352. package/src/app/charts/hooks/InteractionProvider.tsx +88 -0
  353. package/src/app/charts/hooks/PlotDimensionsProvider.tsx +109 -0
  354. package/src/app/charts/hooks/defaultAxesValues.ts +40 -0
  355. package/src/app/charts/hooks/defaultMouseValues.ts +24 -0
  356. package/src/app/charts/hooks/defaultPlotDimensions.ts +27 -0
  357. package/src/app/charts/hooks/defaultTooltipValues.tsx +23 -0
  358. package/src/app/charts/hooks/defaultUseChartValues.tsx +36 -0
  359. package/src/app/charts/hooks/useAxes.tsx +60 -228
  360. package/src/app/charts/hooks/useCanvasSurface.tsx +35 -0
  361. package/src/app/charts/hooks/useChart.tsx +47 -106
  362. package/src/app/charts/hooks/useDataSource.tsx +106 -0
  363. package/src/app/charts/hooks/useHoveredSeries.tsx +33 -0
  364. package/src/app/charts/hooks/useMouse.tsx +58 -82
  365. package/src/app/charts/hooks/usePlotDimensions.tsx +25 -89
  366. package/src/app/charts/hooks/useTooltip.tsx +32 -63
  367. package/src/app/charts/index.ts +213 -0
  368. package/src/app/charts/legends/Legend.tsx +198 -479
  369. package/src/app/charts/legends/constants.ts +37 -0
  370. package/src/app/charts/observables/iterates.ts +32 -12
  371. package/src/app/charts/observables/ordinals.ts +141 -67
  372. package/src/app/charts/observables/outliers.ts +20 -0
  373. package/src/app/charts/plots/BarPlot.tsx +784 -666
  374. package/src/app/charts/plots/OutlierPlot.tsx +685 -0
  375. package/src/app/charts/plots/PoincarePlot.tsx +707 -489
  376. package/src/app/charts/plots/RasterPlot.tsx +253 -445
  377. package/src/app/charts/plots/ScatterPlot.tsx +480 -463
  378. package/src/app/charts/plots/autoScaleYAxes.ts +102 -0
  379. package/src/app/charts/plots/colorizedLine.ts +185 -0
  380. package/src/app/charts/plots/constants.ts +16 -0
  381. package/src/app/charts/plots/hitTesting.ts +198 -0
  382. package/src/app/charts/plots/plot.ts +138 -44
  383. package/src/app/charts/plots/useCanvasZoomPan.ts +240 -0
  384. package/src/app/charts/plots/useStreamingTimeAxes.ts +384 -0
  385. package/src/app/charts/series/baseSeries.ts +81 -14
  386. package/src/app/charts/series/iterateSeries.ts +8 -8
  387. package/src/app/charts/series/ordinalSeries.ts +35 -20
  388. package/src/app/charts/series/outlierSeries.ts +188 -0
  389. package/src/app/charts/series/timeSeries.ts +14 -12
  390. package/src/app/charts/series/timeSeriesChartData.ts +31 -17
  391. package/src/app/charts/styling/barPlotStyle.ts +48 -5
  392. package/src/app/charts/styling/canvasStyle.ts +86 -0
  393. package/src/app/charts/styling/margins.ts +28 -4
  394. package/src/app/charts/styling/svgStyle.ts +10 -91
  395. package/src/app/charts/subscriptions/viewDrivers.ts +447 -0
  396. package/src/app/charts/tooltips/BarPlotTooltipContent.tsx +156 -380
  397. package/src/app/charts/tooltips/DefaultOutlierTooltipContent.tsx +40 -0
  398. package/src/app/charts/tooltips/OutlierPlotTooltipContent.tsx +67 -0
  399. package/src/app/charts/tooltips/PoincarePlotTooltipContent.tsx +229 -292
  400. package/src/app/charts/tooltips/RasterPlotTooltipContent.tsx +164 -217
  401. package/src/app/charts/tooltips/ScatterPlotTooltipContent.tsx +373 -236
  402. package/src/app/charts/tooltips/Tooltip.tsx +58 -124
  403. package/src/app/charts/tooltips/TooltipContent.tsx +177 -0
  404. package/src/app/charts/tooltips/tooltipUtils.ts +359 -61
  405. package/src/app/charts/tooltips/useOutlierTooltip.tsx +68 -0
  406. package/src/app/charts/tooltips/useTooltipPlacement.ts +86 -0
  407. package/src/app/charts/tooltips/useTooltipStyle.ts +15 -0
  408. package/src/app/charts/trackers/Tracker.tsx +68 -33
  409. package/src/app/charts/trackers/trackerUtils.ts +263 -376
  410. package/src/app/charts/utils.ts +90 -48
  411. package/src/index.ts +2 -322
  412. package/dist/app/charts/axes/AxesState.test.d.ts +0 -1
  413. package/dist/app/charts/axes/AxesState.test.js +0 -30
  414. package/dist/app/charts/axes/AxesState.test.js.map +0 -1
  415. package/dist/app/charts/axes/AxisInterval.test.d.ts +0 -1
  416. package/dist/app/charts/axes/AxisInterval.test.js +0 -120
  417. package/dist/app/charts/axes/AxisInterval.test.js.map +0 -1
  418. package/dist/app/charts/axes/ContinuousAxisRange.test.d.ts +0 -1
  419. package/dist/app/charts/axes/ContinuousAxisRange.test.js +0 -47
  420. package/dist/app/charts/axes/ContinuousAxisRange.test.js.map +0 -1
  421. package/dist/app/charts/axes/OrdinalAxisRange.test.d.ts +0 -1
  422. package/dist/app/charts/axes/OrdinalAxisRange.test.js +0 -48
  423. package/dist/app/charts/axes/OrdinalAxisRange.test.js.map +0 -1
  424. package/dist/app/charts/filters/regexFilter.test.d.ts +0 -1
  425. package/dist/app/charts/filters/regexFilter.test.js +0 -11
  426. package/dist/app/charts/filters/regexFilter.test.js.map +0 -1
  427. package/dist/app/charts/hooks/useDataObservable.d.ts +0 -72
  428. package/dist/app/charts/hooks/useDataObservable.js +0 -74
  429. package/dist/app/charts/hooks/useDataObservable.js.map +0 -1
  430. package/dist/app/charts/hooks/useInitialData.d.ts +0 -36
  431. package/dist/app/charts/hooks/useInitialData.js +0 -28
  432. package/dist/app/charts/hooks/useInitialData.js.map +0 -1
  433. package/dist/app/charts/observables/iterates.test.d.ts +0 -1
  434. package/dist/app/charts/observables/iterates.test.js +0 -180
  435. package/dist/app/charts/observables/iterates.test.js.map +0 -1
  436. package/dist/app/charts/observables/ordinals.test.d.ts +0 -1
  437. package/dist/app/charts/observables/ordinals.test.js +0 -102
  438. package/dist/app/charts/observables/ordinals.test.js.map +0 -1
  439. package/dist/app/charts/series/datumSeries.test.d.ts +0 -1
  440. package/dist/app/charts/series/datumSeries.test.js +0 -50
  441. package/dist/app/charts/series/datumSeries.test.js.map +0 -1
  442. package/dist/app/charts/styling/margins.test.d.ts +0 -1
  443. package/dist/app/charts/styling/margins.test.js +0 -19
  444. package/dist/app/charts/styling/margins.test.js.map +0 -1
  445. package/dist/app/charts/subscriptions/subscription.test.d.ts +0 -1
  446. package/dist/app/charts/subscriptions/subscription.test.js +0 -395
  447. package/dist/app/charts/subscriptions/subscription.test.js.map +0 -1
  448. package/dist/app/charts/subscriptions/subscriptions.d.ts +0 -100
  449. package/dist/app/charts/subscriptions/subscriptions.js +0 -449
  450. package/dist/app/charts/subscriptions/subscriptions.js.map +0 -1
  451. package/src/app/charts/axes/AxesState.test.ts +0 -34
  452. package/src/app/charts/axes/AxisInterval.test.ts +0 -143
  453. package/src/app/charts/axes/ContinuousAxisRange.test.ts +0 -55
  454. package/src/app/charts/axes/OrdinalAxisRange.test.ts +0 -55
  455. package/src/app/charts/filters/regexFilter.test.ts +0 -13
  456. package/src/app/charts/hooks/useDataObservable.tsx +0 -170
  457. package/src/app/charts/hooks/useInitialData.tsx +0 -64
  458. package/src/app/charts/observables/iterates.test.ts +0 -201
  459. package/src/app/charts/observables/ordinals.test.ts +0 -135
  460. package/src/app/charts/series/datumSeries.test.ts +0 -60
  461. package/src/app/charts/styling/margins.test.ts +0 -22
  462. package/src/app/charts/subscriptions/subscription.test.ts +0 -499
  463. package/src/app/charts/subscriptions/subscriptions.ts +0 -635
@@ -1,223 +1,131 @@
1
- import {Dimensions, Margin} from "../styling/margins";
2
- import {defaultTooltipStyle, TooltipDimensions, TooltipStyle, tooltipX, tooltipY} from "./tooltipUtils";
3
- import * as d3 from "d3";
1
+ import type {CSSProperties, ReactElement} from "react";
2
+ import {type Sparkline, sparklineFor, type TooltipStyle} from "./tooltipUtils";
3
+ import {TooltipContent} from "./TooltipContent";
4
4
  import {formatNumber, formatTime, formatValue} from "../utils";
5
- import {useEffect, useMemo} from "react";
6
- import {useChart} from "../hooks/useChart";
7
- import {ContinuousNumericAxis, SeriesLineStyle} from "../axes/axes";
8
- import {usePlotDimensions} from "../hooks/usePlotDimensions";
9
- import {emptyOrdinalDatum, OrdinalDatum} from "../series/ordinalSeries";
10
- import {TooltipData} from "../hooks/useTooltip";
11
- import {WindowedOrdinalStats} from "../subscriptions/subscriptions";
12
- import {DataFrame} from "data-frame-ts";
13
- import {createTable, Padding, TableData, TableFont, TableFormatter, TableStyler} from "svg-table";
5
+ import {emptyOrdinalDatum, type OrdinalDatum} from "../series/ordinalSeries";
6
+ import type {TooltipData} from "../hooks/useTooltip";
7
+ import type {WindowedOrdinalStats} from "../datasources/ordinalDataSource";
14
8
  import {defaultOrdinalValueStats} from "../observables/ordinals";
15
- import {Dimension} from "svg-table/stylings";
16
- import {BAR_CHART_TOOLTIP_PROVIDER_IDS} from "../plots/BarPlot";
17
- import {ContinuousAxisRange} from "../axes/ContinuousAxisRange";
9
+ import {BAR_CHART_TOOLTIP_PROVIDER_IDS} from "../plots/constants";
18
10
 
19
11
  /**
20
- # Want to write your own tooltip-content component?
21
-
22
- Here's how to write your own tooltip-content component.
23
-
24
- To create your own tooltip content `<MyTooltipContent/>` you must do the following:
25
- 1. Create a react component for your tooltip content (see for example, {@link ScatterPlotTooltipContent}
26
- as a reference.
27
- 2. Use the {@link useChart} hook to get the {@link registerTooltipContentProvider} registration function.
28
- 3. When your tooltip content component (`<MyTooltipContent/>`) mounts, use the {@link registerTooltipContentProvider}
29
- function to register your tooltip content provider.
30
- 4. When the chart dimensions, margin, container, etc, change, register your tooltip content provider
31
- again (you can register as many times as you like because it only uses the last content provider
32
- registered).
33
-
34
- That's it! A bit more details below.
35
-
36
- The {@link registerTooltipContentProvider} function from the {@link useChart} hook allows you to register
37
- one tooltip content provider. A second call to this function will cause the {@link useChart} hook to drop
38
- the first one in favor of the second one.
39
-
40
- The {@link registerTooltipContentProvider} function from the {@link useChart} hook accepts a higher-order
41
- function that allowing a closure on content/chart-specific data. Specifically, you must hand the
42
- {@link registerTooltipContentProvider} a function of the form:
43
-
44
- `(seriesName: string, time: number, series: TimeSeries, mouseCoords: [x: number, y: number]) => TooltipDimensions`
45
-
46
- Your function to add that actual content will be what this function calls whenever d3 fires a mouse-over
47
- event on one you the time-series in the chart.
48
-
49
- The code snippet below is from the `useEffect` call in the {@link ScatterPlotTooltipContent}.
50
- Note that the first four arguments to the {@link addTooltipContent} function are those provided by the {@link useChart} hook
51
- when a d3 mouse-over event occurs on one of your series. The additional six arguments are from the closure formed
52
- on the variables in your component. The `chartId`, `container`, `margin`, and `plotDimensions` are from the
53
- {@link useChart} hook called by the {@link ScatterPlotTooltipContent} component. The last two
54
- arguments, `defaultTooltipStyle` and `options` are specific to the {@link ScatterPlotTooltipContent}.
55
- For example, the `options` property is set by the caller of the {@link ScatterPlotTooltipContent}
56
- component.
57
-
58
- ```typescript
59
- // register the tooltip content provider function with the chart hook (useChart) so that
60
- // it is visible to all children of the Chart (i.e. the <Tooltip>).
61
- registerTooltipContentProvider(
62
- (seriesName: string,
63
- time: number,
64
- tooltipData: TooltipData<OrdinalDatum, WindowedOrdinalStats>,
65
- mouseCoords: [x: number, y: number]
66
- ) => {
67
- return addTooltipContent(
68
- seriesName, tooltipData, mouseCoords,
69
- chartId, container, margin, plotDimensions, tooltipStyle,
70
- ordinalUnits
71
- )
72
- }
73
- )
74
- ```
75
-
76
- This pattern allows you to supplement that `useChart` mouse-over callback with information specific to your component.
12
+ * Properties for rendering the tooltip content
13
+ */
14
+ export interface Props {
15
+ /** the units of the values (e.g. "mV"), shown after the values (none by default) */
16
+ ordinalUnits?: string
17
+ /** the style of the tooltip */
18
+ style?: Partial<TooltipStyle>
19
+ }
77
20
 
21
+ /**
22
+ * A single stats row's windowed/all values, already formatted for display.
78
23
  */
24
+ interface StatsRow {
25
+ label: string
26
+ windowed: string
27
+ all: string
28
+ /** whether the windowed or all-time cell (or neither) should be highlighted, based on which specific bar-chart element is hovered */
29
+ highlight: 'windowed' | 'all' | 'none'
30
+ }
31
+
32
+ // the size of the tooltip's sparkline (of the value over time)
33
+ const SPARKLINE_WIDTH = 180
34
+ const SPARKLINE_HEIGHT = 36
79
35
 
80
36
  /**
81
- * Properties for rendering the tooltip content. The properties are applied as
82
- * shown below.
83
- * ```
84
- * series name
85
- * xFormatter, yFormatter
86
- * ```
37
+ * The data needed to render the tooltip's content, captured when the mouse moves over an element
87
38
  */
88
- export interface Props {
89
- ordinalUnits?: string
90
- style?: Partial<TooltipStyle>
39
+ interface BarTooltipContent {
40
+ seriesName: string
41
+ headerLabel: string
42
+ valueLine: string
43
+ // the value over time (the data the chart holds), when there's enough of it to draw
44
+ sparkline: Sparkline | undefined
45
+ rows: Array<StatsRow>
91
46
  }
92
47
 
93
48
  /**
94
- * Adds tooltip content that shows the series name and the (time, value) of the selected point.
95
- * ```
96
- * series name
97
- * time, value
98
- * ```
49
+ * Adds tooltip content that shows the series name, the current value, a small stats table
50
+ * (count/min/max/mean, windowed vs. all-time) for the bar-chart element being hovered, and a
51
+ * sparkline of the value over the data the chart holds.
99
52
  *
100
- * Registers the tooltip-content provider with the `ChartContext` so that when d3 fires a mouse-over
101
- * event on a series. The content provider is returns the {@link addTooltipContent} function
102
- * when called. And when called the {@link addTooltipContent} function adds the actual tooltip
103
- * content to the SVG element.
53
+ * Built on {@link TooltipContent}; put it inside a {@link Tooltip}.
104
54
  * @param props The properties describing the tooltip content
105
- * @return null
55
+ * @return The tooltip's portal, or `null` when nothing is being hovered
106
56
  */
107
- export function BarPlotTooltipContent(props: Props): null {
108
- const {
109
- chartId,
110
- container,
111
- tooltip,
112
- axes
113
- } = useChart<OrdinalDatum, SeriesLineStyle, WindowedOrdinalStats, ContinuousAxisRange, ContinuousNumericAxis>()
114
-
115
- const {registerTooltipContentProvider} = tooltip
116
- const {yAxesState, axisAssignmentsFor} = axes
117
- const {margin, plotDimensions} = usePlotDimensions()
57
+ export function BarPlotTooltipContent(props: Props): ReactElement | null {
118
58
  const {style, ordinalUnits = ""} = props
119
- const tooltipStyle = useMemo(() => ({...defaultTooltipStyle, ...style}), [style])
120
59
 
121
- // register the tooltip content provider, which when called on mouse-enter-series events
122
- // will render the tooltip container and then the tooltip content. recall that that the
123
- // tooltip content is generated in this plot (because this is the plot that holds all the
124
- // information needed to render it), and the container for the content is rendered by
125
- // the <Tooltip>, which this know nothing about.
126
- //
127
- // the 'registration function accepts a function of the form (seriesName, time, series) => TooltipDimensions.
128
- // and that function has a closure on the content-specific information needed to add the
129
- // actual content
130
- useEffect(
131
- () => {
132
- if (container) {
133
- // register the tooltip content provider function with the chart hook (useChart) so that
134
- // it is visible to all children of the Chart (i.e. the <Tooltip>).
135
- registerTooltipContentProvider(
136
- /**
137
- *
138
- * @param seriesName The name of the series
139
- * @param time The mouse time
140
- * @param tooltipData The series data and metadata
141
- * @param mouseCoords The coordinates of the mouse
142
- * @param providerId The ID of the tooltip content provider
143
- * @return The tooltip contents
144
- */
145
- (seriesName: string,
146
- time: number,
147
- tooltipData: TooltipData<OrdinalDatum, WindowedOrdinalStats>,
148
- mouseCoords: [x: number, y: number],
149
- providerId?: string
150
- ) => {
151
- if (providerId !== undefined) {
152
- return addTooltipContent(
153
- seriesName, providerId, tooltipData, mouseCoords,
154
- chartId, container, margin, plotDimensions, tooltipStyle,
155
- ordinalUnits
156
- )
157
- }
158
- return {x: 0, y: 0, contentWidth: 0, contentHeight: 0}
159
- //
160
- // switch (providerId) {
161
- // case BAR_CHART_TOOLTIP_PROVIDER_IDS.currentValue:
162
- // return addTooltipContent(
163
- // seriesName, 'current value', tooltipData, mouseCoords,
164
- // chartId, container, margin, plotDimensions, tooltipStyle,
165
- // ordinalUnits
166
- // )
167
- // case BAR_CHART_TOOLTIP_PROVIDER_IDS.meanValue:
168
- // return addTooltipContent(
169
- // seriesName, 'mean value', tooltipData, mouseCoords,
170
- // chartId, container, margin, plotDimensions, tooltipStyle,
171
- // ordinalUnits
172
- // )
173
- // case BAR_CHART_TOOLTIP_PROVIDER_IDS.minMax:
174
- // return addTooltipContent(
175
- // seriesName, 'min/max', tooltipData, mouseCoords,
176
- // chartId, container, margin, plotDimensions, tooltipStyle,
177
- // ordinalUnits
178
- // )
179
- // case BAR_CHART_TOOLTIP_PROVIDER_IDS.windowedMeanValue:
180
- // return addTooltipContent(
181
- // seriesName, 'windowed mean', tooltipData, mouseCoords,
182
- // chartId, container, margin, plotDimensions, tooltipStyle,
183
- // ordinalUnits
184
- // )
185
- // case BAR_CHART_TOOLTIP_PROVIDER_IDS.windowedMinMax:
186
- // return addTooltipContent(
187
- // seriesName, 'windowed min/max', tooltipData, mouseCoords,
188
- // chartId, container, margin, plotDimensions, tooltipStyle,
189
- // ordinalUnits
190
- // )
191
- //
192
- //
193
- // default:
194
- // return {x: 0, y: 0, contentWidth: 0, contentHeight: 0}
195
- // }
196
- }
197
- )
60
+ return (
61
+ <TooltipContent<OrdinalDatum, WindowedOrdinalStats, BarTooltipContent>
62
+ style={style}
63
+ capture={(seriesName, _value, tooltipData, providerId) =>
64
+ // (the provider ID says which of the bar's elements is hovered)
65
+ providerId === undefined ?
66
+ undefined :
67
+ captureTooltipContent(seriesName, providerId, tooltipData, ordinalUnits)
198
68
  }
199
- },
200
- [
201
- chartId, container, margin, plotDimensions, registerTooltipContentProvider,
202
- tooltipStyle,
203
- yAxesState, axisAssignmentsFor,
204
- ordinalUnits
205
- ]
69
+ >
70
+ {(tooltipContent, tooltipStyle) => {
71
+ const cellStyle: CSSProperties = {padding: '1px 10px', textAlign: 'right', border: 'none'}
72
+ const rowLabelStyle: CSSProperties = {...cellStyle, textAlign: 'left', paddingLeft: 0}
73
+ const headerCellStyle: CSSProperties = {...cellStyle, fontWeight: tooltipStyle.fontWeight + 550}
74
+ const highlightStyle: CSSProperties = {fontWeight: tooltipStyle.fontWeight + 300}
75
+
76
+ return <>
77
+ <div style={{fontSize: tooltipStyle.fontSize, fontWeight: tooltipStyle.fontWeight}}>
78
+ {tooltipContent.seriesName} ({tooltipContent.headerLabel})
79
+ </div>
80
+ <div style={{fontSize: tooltipStyle.fontSize + 2, fontWeight: tooltipStyle.fontWeight + 150, marginBottom: 6}}>
81
+ {tooltipContent.valueLine}
82
+ </div>
83
+ <table style={{fontSize: tooltipStyle.fontSize, borderCollapse: 'collapse', border: 'none'}}>
84
+ <thead>
85
+ <tr>
86
+ <td style={rowLabelStyle}/>
87
+ <td style={headerCellStyle}>Windowed</td>
88
+ <td style={headerCellStyle}>All</td>
89
+ </tr>
90
+ </thead>
91
+ <tbody>
92
+ {tooltipContent.rows.map(row => (
93
+ <tr key={row.label}>
94
+ <td style={rowLabelStyle}>{row.label}</td>
95
+ <td style={row.highlight === 'windowed' ? {...cellStyle, ...highlightStyle} : cellStyle}>{row.windowed}</td>
96
+ <td style={row.highlight === 'all' ? {...cellStyle, ...highlightStyle} : cellStyle}>{row.all}</td>
97
+ </tr>
98
+ ))}
99
+ </tbody>
100
+ </table>
101
+ {/* the value over time, ending in the current value (the dot) */}
102
+ {tooltipContent.sparkline !== undefined &&
103
+ <svg
104
+ width={SPARKLINE_WIDTH}
105
+ height={SPARKLINE_HEIGHT}
106
+ style={{display: 'block', marginTop: 8}}
107
+ aria-hidden="true"
108
+ >
109
+ <path
110
+ d={tooltipContent.sparkline.path}
111
+ fill="none"
112
+ stroke={tooltipStyle.fontColor}
113
+ strokeWidth={1.25}
114
+ strokeLinejoin="round"
115
+ strokeLinecap="round"
116
+ />
117
+ <circle
118
+ cx={tooltipContent.sparkline.end[0]}
119
+ cy={tooltipContent.sparkline.end[1]}
120
+ r={2.5}
121
+ fill={tooltipStyle.fontColor}
122
+ />
123
+ </svg>
124
+ }
125
+ </>
126
+ }}
127
+ </TooltipContent>
206
128
  )
207
-
208
- return null
209
- }
210
-
211
- const dimension: Dimension = {
212
- width: 60,
213
- defaultWidth: 70,
214
- minWidth: 50,
215
- maxWidth: 100,
216
-
217
- height: 15,
218
- defaultHeight: 15,
219
- minHeight: 10,
220
- maxHeight: 50
221
129
  }
222
130
 
223
131
  /**
@@ -244,196 +152,64 @@ function labelForProviderId(providerId: string): string {
244
152
  }
245
153
 
246
154
  /**
247
- * Callback function that adds tooltip content and returns the tooltip width and text height
155
+ * Determines which stats-table cell (if any) should be highlighted for the given provider ID,
156
+ * matching the original's `coordinatesForProviderId` (row 2/3/4 = Min/Max/Mean; column
157
+ * 1/2 = Windowed/All).
158
+ * @param providerId The tooltip provider ID for which the highlighted element (bar chart series
159
+ * element) that is hovered
160
+ * @return A function that, given a stats-row label, returns which column (if any) to highlight
161
+ */
162
+ function highlightFor(providerId: string): (rowLabel: 'Count' | 'Min' | 'Max' | 'Mean') => 'windowed' | 'all' | 'none' {
163
+ switch (providerId) {
164
+ case BAR_CHART_TOOLTIP_PROVIDER_IDS.meanValue:
165
+ return label => label === 'Mean' ? 'all' : 'none'
166
+ case BAR_CHART_TOOLTIP_PROVIDER_IDS.minMax:
167
+ return label => (label === 'Min' || label === 'Max') ? 'all' : 'none'
168
+ case BAR_CHART_TOOLTIP_PROVIDER_IDS.windowedMeanValue:
169
+ return label => label === 'Mean' ? 'windowed' : 'none'
170
+ case BAR_CHART_TOOLTIP_PROVIDER_IDS.windowedMinMax:
171
+ return label => (label === 'Min' || label === 'Max') ? 'windowed' : 'none'
172
+ default:
173
+ return () => 'none'
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Captures the data needed to render the tooltip's content (its header, value, stats table, and
179
+ * sparkline)
248
180
  * @param seriesName The name of the series (i.e. the neuron ID)
249
- * @param providerId The tooltip content provider ID (i.e. the name of the tooltip)
181
+ * @param providerId The tooltip content provider ID (i.e. which bar-chart element is hovered)
250
182
  * @param tooltipData The series data and metadata
251
- * @param mouseCoords The coordinates of the mouse when the event was fired (relative to the plot container)
252
- * @param chartId The ID of this chart
253
- * @param container The plot container (SVGSVGElement)
254
- * @param margin The plot margins
255
- * @param tooltipStyle The style properties for the tooltip
256
- * @param plotDimensions The dimensions of the plot
257
183
  * @param ordinalUnits The units of the ordinal data (i.e. "mV")
258
- * @return The width and text height of the tooltip content
184
+ * @return The tooltip's content
259
185
  */
260
- function addTooltipContent(
186
+ function captureTooltipContent(
261
187
  seriesName: string,
262
188
  providerId: string,
263
189
  tooltipData: TooltipData<OrdinalDatum, WindowedOrdinalStats>,
264
- mouseCoords: [x: number, y: number],
265
- chartId: number,
266
- container: SVGSVGElement,
267
- margin: Margin,
268
- plotDimensions: Dimensions,
269
- tooltipStyle: TooltipStyle,
270
- ordinalUnits: string
271
- ): TooltipDimensions {
272
- const [x, y] = mouseCoords
190
+ ordinalUnits: string,
191
+ ): BarTooltipContent {
273
192
  const {series, metadata: statistics} = tooltipData
193
+
274
194
  const currentDatum = series.length > 0 ? series[series.length - 1] : emptyOrdinalDatum
275
195
  const valueStats = statistics.valueStatsForSeries.get(seriesName) || defaultOrdinalValueStats()
276
196
  const windowedValueStats = statistics.windowedValueStatsForSeries.get(seriesName) || defaultOrdinalValueStats()
277
197
  const displayOrdinalUnits = ordinalUnits.length > 0 ? ` ${ordinalUnits}` : ""
278
-
279
- // display the neuron ID in the tooltip
280
- const header = d3.select<SVGSVGElement | null, any>(container)
281
- .append<SVGTextElement>("text")
282
- .attr('id', `tn${currentDatum.time}-${seriesName}-${chartId}`)
283
- .attr('class', 'tooltip')
284
- .attr('fill', tooltipStyle.fontColor)
285
- .attr('font-family', 'sans-serif')
286
- .attr('font-size', tooltipStyle.fontSize)
287
- .attr('font-weight', tooltipStyle.fontWeight)
288
- .text(() => `${seriesName} (${labelForProviderId(providerId)})`)
289
-
290
-
291
- // display the series name and the current value
292
- const text = d3.select<SVGSVGElement | null, any>(container)
293
- .append<SVGTextElement>("text")
294
- .attr('id', `t${currentDatum.time}-${seriesName}-${chartId}`)
295
- .attr('class', 'tooltip')
296
- .attr('fill', tooltipStyle.fontColor)
297
- .attr('font-family', 'sans-serif')
298
- .attr('font-size', tooltipStyle.fontSize + 2)
299
- .attr('font-weight', tooltipStyle.fontWeight + 150)
300
- .text(() => `${formatValue(currentDatum.value)}${displayOrdinalUnits} (${formatTime(currentDatum.time)} ms)`)
301
-
302
- // calculate the max width and height of the text (we'll adjust the coordinates of the header
303
- // text once we have the table dimensions)
304
- const headerTextHeight = header.node()?.getBBox()?.height || 0;
305
- const idHeight = text.node()?.getBBox()?.height || 0;
306
- const textHeight = headerTextHeight + idHeight;
307
-
308
- const font: TableFont = {
309
- size: tooltipStyle.fontSize,
310
- family: tooltipStyle.fontFamily,
311
- color: tooltipStyle.fontColor,
312
- weight: tooltipStyle.fontWeight
313
- }
314
-
315
- const padding: Padding = {
316
- top: tooltipStyle.paddingTop,
317
- bottom: tooltipStyle.paddingBottom,
318
- right: tooltipStyle.paddingRight,
319
- left: tooltipStyle.paddingLeft
320
- }
321
-
322
- const units = ordinalUnits.length > 0 ? ` (${ordinalUnits})` : ""
323
- return DataFrame
324
- .from<number | string>([
325
- [windowedValueStats.count, valueStats.count],
326
- [windowedValueStats.min.value, valueStats.min.value],
327
- [windowedValueStats.max.value, valueStats.max.value],
328
- [windowedValueStats.mean, valueStats.mean],
329
- ])
330
- // create the table data that has the column headers
331
- .flatMap(df => TableData
332
- .fromDataFrame(df)
333
- .withColumnHeader(["Windowed", "All"])
334
- .flatMap(td => td.withRowHeader(["Count", `Min${units}`, `Max${units}`, `Mean${units}`]))
335
- )
336
- // add the data formatters for statistics
337
- .flatMap(tableData => TableFormatter.fromTableData(tableData)
338
- .addRowFormatters([2, 3, 4], value => formatValue(value as number))
339
- .flatMap(tf => tf.addRowFormatter(1, value => formatNumber(value as number, " ,.0f")))
340
- .flatMap(tf => tf.formatTable())
341
- )
342
- .map(tableData => TableStyler.fromTableData(tableData)
343
- .withTableFont(font)
344
- .withPadding(padding)
345
- .withColumnHeaderStyle({
346
- font: {...font, weight: 650},
347
- padding: {top: 15, bottom: 0},
348
- dimension: {...dimension, maxHeight: 70},
349
- alignText: 'right',
350
- })
351
- .withRowHeaderStyle({
352
- font: {...font, weight: 650},
353
- padding: {left: 0, right: 10},
354
- dimension: dimension,
355
- alignText: 'left',
356
- })
357
- .withColumnStyles([], {
358
- padding: {left: 10, right: 10},
359
- alignText: 'right',
360
- })
361
- .withRowStyles([], {
362
- font,
363
- dimension: {...dimension, maxHeight: 20},
364
- padding: {top: 0, bottom: 0}
365
- }
366
- )
367
- .withCellStyleWhen((_, row, column) => {
368
- // apply the style to the cell corresponding to the chart element that the user
369
- // moused-over.
370
- const coordinates = coordinatesForProviderId(providerId)
371
- if (coordinates.length > 0) {
372
- return coordinates.findIndex(c => c.row === row && c.column === column) > -1
373
- }
374
- return false
375
- },
376
- {font: {...font, weight: font.weight + 300}, alignText: 'right', padding: {left: 10, right: 10, top: 0, bottom: 0}},
377
- 100
378
- )
379
- .styleTable()
380
- )
381
- .flatMap(styledTable =>
382
- createTable(styledTable, container, `t${currentDatum.time}-${seriesName}-header-${chartId}`, tooltipCoordinates)
383
- )
384
- .map(renderingInfo => {
385
- // the calculated table coordinates and dimensions. we'll move the header text into place,
386
- // and then move the table down so that it fits
387
- const {tableX: x, tableY: y, tableWidth: contentWidth, tableHeight: contentHeight} = renderingInfo
388
-
389
- // set the location of the header (series name) and text (value and time)
390
- header
391
- .attr('x', () => x + tooltipStyle.paddingLeft)
392
- .attr('y', () => y - idHeight)
393
- text
394
- .attr('x', () => x + tooltipStyle.paddingLeft)
395
- .attr('y', () => y)
396
-
397
- return {x, y: y - textHeight, contentWidth, contentHeight: contentHeight + textHeight + padding.top}
398
- })
399
- .getOrThrow()
400
-
401
- /**
402
- * Calculates the coordinates that are affected by the provider ID
403
- * @param providerId The ID of the provider for the element type being moused-over
404
- * @return An array of coordinates that are affected by the provider ID
405
- */
406
- function coordinatesForProviderId(providerId: string): Array<{ row: number, column: number }> {
407
- switch (providerId) {
408
- case BAR_CHART_TOOLTIP_PROVIDER_IDS.currentValue:
409
- return []
410
- case BAR_CHART_TOOLTIP_PROVIDER_IDS.meanValue:
411
- return [{row: 4, column: 2}]
412
- case BAR_CHART_TOOLTIP_PROVIDER_IDS.minMax:
413
- return [{row: 2, column: 2}, {row: 3, column: 2}]
414
- case BAR_CHART_TOOLTIP_PROVIDER_IDS.windowedMeanValue:
415
- return [{row: 4, column: 1}]
416
- case BAR_CHART_TOOLTIP_PROVIDER_IDS.windowedMinMax:
417
- return [{row: 2, column: 1}, {row: 3, column: 1}]
418
-
419
- default:
420
- return []
421
- }
198
+ const unitsSuffix = ordinalUnits.length > 0 ? ` (${ordinalUnits})` : ""
199
+
200
+ const highlight = highlightFor(providerId)
201
+ const rows: Array<StatsRow> = [
202
+ {label: 'Count', windowed: formatNumber(windowedValueStats.count, " ,.0f"), all: formatNumber(valueStats.count, " ,.0f"), highlight: highlight('Count')},
203
+ {label: `Min${unitsSuffix}`, windowed: formatValue(windowedValueStats.min.value), all: formatValue(valueStats.min.value), highlight: highlight('Min')},
204
+ {label: `Max${unitsSuffix}`, windowed: formatValue(windowedValueStats.max.value), all: formatValue(valueStats.max.value), highlight: highlight('Max')},
205
+ {label: `Mean${unitsSuffix}`, windowed: formatValue(windowedValueStats.mean), all: formatValue(valueStats.mean), highlight: highlight('Mean')},
206
+ ]
207
+
208
+ return {
209
+ seriesName,
210
+ headerLabel: labelForProviderId(providerId),
211
+ valueLine: `${formatValue(currentDatum.value)}${displayOrdinalUnits} (${formatTime(currentDatum.time)} ms)`,
212
+ sparkline: sparklineFor(series, SPARKLINE_WIDTH, SPARKLINE_HEIGHT),
213
+ rows,
422
214
  }
423
-
424
- /**
425
- * Calculates the coordinates of the tooltip based on the width and height of the SVG
426
- * table. This is needed because the tooltip needs to be adjusted relative mouse location
427
- * when the mouse coordinates are too close to an edge.
428
- * @param width The SVG table width
429
- * @param height The SVG table height
430
- * @return The updated tooltip coordinates
431
- */
432
- function tooltipCoordinates(width: number, height: number): [x: number, y: number] {
433
- return [
434
- tooltipX(x, width, plotDimensions, tooltipStyle, margin),
435
- tooltipY(y + textHeight + padding.top, height, plotDimensions, tooltipStyle, margin)
436
- ]
437
- }
438
-
439
215
  }
@@ -0,0 +1,40 @@
1
+ import {type JSX} from "react"
2
+ import {useOutlierTooltip} from "./useOutlierTooltip"
3
+
4
+ /**
5
+ * The default content of the {@link OutlierPlotTooltipContent} (used when it has no children of
6
+ * its own): reads what the tooltip shows, and the formatters, from {@link useOutlierTooltip}
7
+ * @return The series' name, the outlier (if any), the band, its measure, and the number of points
8
+ * in the band
9
+ */
10
+ export function DefaultOutlierTooltipContent(): JSX.Element {
11
+ const {
12
+ tooltipContent,
13
+ tooltipStyle,
14
+ datumFormatter,
15
+ bandFormatter,
16
+ measureFormatter,
17
+ } = useOutlierTooltip()
18
+
19
+ const {
20
+ seriesName,
21
+ datum,
22
+ upperMeasure = 1,
23
+ lowerMeasure = 0,
24
+ pointsInBand,
25
+ } = tooltipContent
26
+
27
+ const outerProb = 1 - upperMeasure
28
+ const innerProb = upperMeasure - lowerMeasure
29
+
30
+ return (
31
+ <>
32
+ <div style={{fontWeight: tooltipStyle.fontWeight + 500, fontSize: tooltipStyle.fontSize + 2}}>Series: {seriesName}</div>
33
+ <hr/>
34
+ {datum && <div>{datumFormatter(datum.datum.x, datum.datum.y)}</div>}
35
+ <div>{bandFormatter(lowerMeasure, upperMeasure)}</div>
36
+ <div>{measureFormatter(innerProb, outerProb)}</div>
37
+ <div>Points in band: {pointsInBand}</div>
38
+ </>
39
+ )
40
+ }