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
@@ -0,0 +1,106 @@
1
+ import {createContext, useCallback, useContext, useSyncExternalStore} from "react";
2
+ import type {ChartData} from "../observables/ChartData";
3
+ import type {BaseSeries} from "../series/baseSeries";
4
+ import type {StreamingDataSource} from "../datasources/StreamingDataSource";
5
+
6
+ /**
7
+ * The chart's data: its data source, the series the source held when it was handed to the chart,
8
+ * and the chart's streaming settings and callbacks
9
+ * @template CD The type of the chart data
10
+ * @template D The type of datum held in each series
11
+ * @template S The type of series
12
+ */
13
+ export interface ChartDataValues<CD extends ChartData, D, S extends BaseSeries<D> = BaseSeries<D>> {
14
+ /**
15
+ * The data source handed to the chart (its `dataSource` prop)
16
+ */
17
+ dataSource: StreamingDataSource<CD, D, S>
18
+ /**
19
+ * The series the data source held when it was handed to the chart (a new data source means
20
+ * new initial data, so plots keyed on it reset)
21
+ */
22
+ initialData: Array<S>
23
+ /**
24
+ * The time (ms) over which incoming data is batched before the plot redraws
25
+ */
26
+ windowingTime: number
27
+ /**
28
+ * The period (ms) at which the data source's generator emits new data, when known. When
29
+ * provided, batching switches from wall-clock-based to a fixed tick count derived from
30
+ * `windowingTime / dataUpdatePeriod` (see the view drivers in `subscriptions/viewDrivers.ts`).
31
+ */
32
+ dataUpdatePeriod?: number
33
+ /**
34
+ * Called when the chart time is updated (e.g. by plots whose axes aren't time)
35
+ * @param time The new chart time
36
+ */
37
+ onUpdateChartTime: (time: number) => void
38
+ }
39
+
40
+ // the context is generic over the same type parameters as `ChartDataValues`, but a context object
41
+ // can't itself carry unbound generics -- the hooks below cast it back to the caller's concrete
42
+ // types, which is safe because `<Chart/>` is what actually supplies the value
43
+ export const ChartDataContext = createContext<unknown>(undefined)
44
+
45
+ /**
46
+ * @return The chart's data, and its streaming settings
47
+ * @throws Error when used outside a `<Chart>`
48
+ */
49
+ function useChartData<CD extends ChartData, D, S extends BaseSeries<D>>(): ChartDataValues<CD, D, S> {
50
+ const context = useContext(ChartDataContext)
51
+ if (context === undefined) {
52
+ throw new Error("The chart's data can only be used within a <Chart/>")
53
+ }
54
+ return context as ChartDataValues<CD, D, S>
55
+ }
56
+
57
+ /**
58
+ * @return The {@link StreamingDataSource} handed to the enclosing {@link Chart} through its
59
+ * `dataSource` prop (`undefined` only outside of a chart)
60
+ * @template CD The type of the chart data
61
+ * @template D The type of datum held in each series
62
+ * @template S The type of series
63
+ */
64
+ export function useDataSource<CD extends ChartData, D, S extends BaseSeries<D> = BaseSeries<D>>(): StreamingDataSource<CD, D, S> | undefined {
65
+ return (useContext(ChartDataContext) as ChartDataValues<CD, D, S> | undefined)?.dataSource
66
+ }
67
+
68
+ /**
69
+ * @return The series the chart's data source held when it was handed to the chart (for
70
+ * components that need the set of series up front, e.g. the legend, or a plot resetting itself
71
+ * for new data)
72
+ * @throws Error when used outside a `<Chart>`
73
+ * @template D The type of the datum held in each series
74
+ */
75
+ export function useInitialData<D>(): {initialData: Array<BaseSeries<D>>} {
76
+ const {initialData} = useChartData<ChartData, D, BaseSeries<D>>()
77
+ return {initialData}
78
+ }
79
+
80
+ /**
81
+ * @return The chart's streaming settings (how updates are batched for rendering) and callbacks
82
+ * @throws Error when used outside a `<Chart>`
83
+ */
84
+ export function useStreamingSettings(): Pick<ChartDataValues<ChartData, unknown>, 'windowingTime' | 'dataUpdatePeriod' | 'onUpdateChartTime'> {
85
+ const {windowingTime, dataUpdatePeriod, onUpdateChartTime} = useChartData<ChartData, unknown, BaseSeries<unknown>>()
86
+ return {windowingTime, dataUpdatePeriod, onUpdateChartTime}
87
+ }
88
+
89
+ /**
90
+ * Subscribes the calling component to the data source's running state, so it re-renders when the
91
+ * source starts or stops (e.g. to switch the zoom pivot, or hide markers while running).
92
+ * @param dataSource The data source, or `undefined` (in which case this is always `false`)
93
+ * @return Whether the data source is currently running
94
+ */
95
+ export function useDataSourceRunning<CD extends ChartData, D>(dataSource: StreamingDataSource<CD, D> | undefined): boolean {
96
+ const subscribe = useCallback(
97
+ (onChange: () => void): (() => void) => {
98
+ if (dataSource === undefined) return () => {
99
+ }
100
+ const subscription = dataSource.isRunningObservable.subscribe(() => onChange())
101
+ return () => subscription.unsubscribe()
102
+ },
103
+ [dataSource]
104
+ )
105
+ return useSyncExternalStore(subscribe, () => dataSource?.running ?? false)
106
+ }
@@ -0,0 +1,33 @@
1
+ import {createContext, type Dispatch, type SetStateAction, useContext} from "react";
2
+
3
+ /**
4
+ * The series the mouse is over (in a plot, or in the legend), which the plots and the legend
5
+ * highlight
6
+ */
7
+ export interface HoveredSeriesValues {
8
+ /**
9
+ * The name of the hovered series, or `null` when no series is hovered
10
+ */
11
+ hoveredSeriesName: string | null
12
+ /**
13
+ * Sets (or, with `null`, clears) the hovered series -- e.g. when the mouse is over the series'
14
+ * entry in the legend. (A plot's own mouse-over and mouse-leave set it, through the chart's
15
+ * mouse handlers -- see `useMouse`.)
16
+ */
17
+ setHoveredSeriesName: Dispatch<SetStateAction<string | null>>
18
+ }
19
+
20
+ export const HoveredSeriesContext = createContext<HoveredSeriesValues>({
21
+ hoveredSeriesName: null,
22
+ setHoveredSeriesName: () => {
23
+ },
24
+ })
25
+
26
+ /**
27
+ * React hook for the series the mouse is over. Kept apart from {@link useChart}, so that only the
28
+ * components that show the hover (the plots and the legend) re-render when it changes.
29
+ * @return The hovered series' name, and its setter
30
+ */
31
+ export function useHoveredSeries(): HoveredSeriesValues {
32
+ return useContext(HoveredSeriesContext)
33
+ }
@@ -1,25 +1,42 @@
1
- import {createContext, JSX, useContext, useRef} from "react";
2
- import {TooltipData} from "./useTooltip";
1
+ import {createContext, useContext} from "react";
2
+ import type {TooltipData} from "./useTooltip";
3
3
 
4
4
  /**
5
- * No operation function for use when a default function is needed
5
+ * Called when the mouse moves over a series (e.g. to show the tooltip)
6
+ * @param seriesName The name of the series under the mouse
7
+ * @param time The time (x-value) under the mouse
8
+ * @param tooltipData The data for the tooltip (the series, and the plot's metadata about it)
9
+ * @param mouseCoords The mouse coordinates
10
+ * @param [providerId] The ID of the tooltip content provider to use (e.g. for a plot whose
11
+ * elements have different tooltips)
6
12
  */
7
- const noop = () => {
8
- /* empty on purpose */
9
- }
13
+ export type TooltipMouseOverHandlerFn<D, TM> = (
14
+ seriesName: string,
15
+ time: number,
16
+ tooltipData: TooltipData<D, TM>,
17
+ mouseCoords: [x: number, y: number],
18
+ providerId?: string
19
+ ) => void
20
+
21
+ /**
22
+ * Called when the mouse leaves a series (e.g. to hide the tooltip)
23
+ * @param seriesName The name of the series the mouse left
24
+ */
25
+ export type TooltipMouseLeaveHandlerFn = (seriesName: string) => void
10
26
 
11
27
  /**
12
- * Type representing the values exposed through the {@link useMouse} react hook.
28
+ * Type representing the values exposed through the `useMouse` react hook.
13
29
  * @template D The type of the data object for the series
14
30
  * @template TM The type of the metadata object for the series
15
31
  */
16
32
  export type UseMouseValues<D, TM> = {
17
33
  /**
18
- * Adds a mouse-over-series handler with the specified ID and handler function
34
+ * Adds a mouse-over-series handler with the specified ID and handler function (replacing any
35
+ * handler already registered with that ID)
19
36
  * @param handlerId The handler ID
20
37
  * @param handler The handler function called when a mouse-over-series event occurs.
21
- * The handler function is handed the series name, the time (x-value), the actual
22
- * series, and the mouse coordinates over which the mouse has moved over.
38
+ * The handler function is handed the series name, the time (x-value), the tooltip data (the
39
+ * series and its metadata), and the mouse coordinates.
23
40
  * @return The handler ID.
24
41
  */
25
42
  registerMouseOverHandler: (
@@ -32,97 +49,56 @@ export type UseMouseValues<D, TM> = {
32
49
  */
33
50
  unregisterMouseOverHandler: (handlerId: string) => void
34
51
  /**
35
- * Attempts to retrieve the mouse-over-series handler for the specified ID
36
- * @param handlerId The ID of the handler
37
- * @return The mouse-over-series handler for the ID, or `undefined` if not found
52
+ * Retrieves the mouse-over-series handler a plot calls when the mouse is over one of its
53
+ * series: it sets the hovered series (see {@link useHoveredSeries}), and calls *every*
54
+ * registered mouse-over-series handler, handing each the specified provider ID. (The
55
+ * `handlerId` is accepted, but unused.)
56
+ * @param handlerId The ID of the handler (unused)
57
+ * @param [providerId] The ID of the tooltip content provider handed to the handlers
58
+ * @return The mouse-over-series handler
38
59
  */
39
- mouseOverHandlerFor: (handlerId: string, providerId?: string) =>
40
- ((seriesName: string, time: number, tooltipData: TooltipData<D, TM>, mouseCoords: [x: number, y: number], providerId?: string) => void) | undefined
60
+ mouseOverHandlerFor: (handlerId: string, providerId?: string) => TooltipMouseOverHandlerFn<D, TM>
41
61
  /**
42
- * Adds a mouse-leave-series handler with the specified ID and handler function
62
+ * Adds a mouse-leave-series handler with the specified ID and handler function (replacing any
63
+ * handler already registered with that ID)
43
64
  * @param handlerId The handler ID
44
65
  * @param handler The handler function called when a mouse-leave-series event occurs
45
66
  * @return The handler ID
46
67
  */
47
- registerMouseLeaveHandler: (handlerId: string, handler: (seriesName: string) => void) => string
68
+ registerMouseLeaveHandler: (handlerId: string, handler: TooltipMouseLeaveHandlerFn) => string
48
69
  /**
49
70
  * Removes the mouse-leave-series handler with the specified ID
50
71
  * @param handlerId The ID of the handler to remove
51
72
  */
52
73
  unregisterMouseLeaveHandler: (handlerId: string) => void
53
74
  /**
54
- * Attempts to retrieve the mouse-leave-series handler for the specified ID
55
- * @param handlerId The ID of the handler
56
- * @return The mouse-leave-series handler for the ID, or `undefined` if not found
75
+ * Retrieves the mouse-leave-series handler a plot calls when the mouse leaves one of its
76
+ * series: it clears the hovered series, and calls *every* registered mouse-leave-series
77
+ * handler, handing each the specified provider ID. (The `handlerId` is accepted, but unused.)
78
+ * @param handlerId The ID of the handler (unused)
79
+ * @param [providerId] The ID of the tooltip content provider handed to the handlers
80
+ * @return The mouse-leave-series handler
57
81
  */
58
- mouseLeaveHandlerFor: (handlerId: string, providerId?: string) => ((seriesName: string, providerId?: string) => void) | undefined
59
- }
60
-
61
- export const defaultMouseValues = (): UseMouseValues<any, any> => ({
62
- registerMouseOverHandler: () => '',
63
- unregisterMouseOverHandler: noop,
64
- mouseOverHandlerFor: () => undefined,
65
- registerMouseLeaveHandler: () => '',
66
- unregisterMouseLeaveHandler: noop,
67
- mouseLeaveHandlerFor: () => undefined,
68
- })
69
-
70
- const MouseContext = createContext<UseMouseValues<any, any>>(defaultMouseValues())
71
-
72
- export type Props = {
73
- children: JSX.Element | Array<JSX.Element>
82
+ mouseLeaveHandlerFor: (handlerId: string, providerId?: string) => ((seriesName: string, providerId?: string) => void)
74
83
  }
75
84
 
76
- export default function MouseProvider<D, TM>(props: Props): JSX.Element {
77
- const {children} = props
78
-
79
- const mouseOverHandlersRef = useRef<Map<string, (seriesName: string, time: number, tooltipData: TooltipData<D, TM>, mouseCoords: [x: number, y: number], providerId?: string) => void>>(new Map())
80
- const mouseLeaveHandlersRef = useRef<Map<string, (seriesName: string, providerId?: string) => void>>(new Map())
81
-
82
- return <MouseContext.Provider
83
- value={{
84
- registerMouseOverHandler: (handlerId, handler) => {
85
- mouseOverHandlersRef.current.set(handlerId, handler)
86
- return handlerId
87
- },
88
- unregisterMouseOverHandler: handlerId => mouseOverHandlersRef.current.delete(handlerId),
89
- mouseOverHandlerFor: (handlerId, providerId) => {
90
- if (mouseOverHandlersRef.current.size === 0) return undefined
91
- return (seriesName: string, time: number, tooltipData: TooltipData<D, TM>, mouseCoords: [x: number, y: number]) => {
92
- mouseOverHandlersRef.current.forEach(handler => {
93
- handler(seriesName, time, tooltipData, mouseCoords, providerId)
94
- })
95
- }
96
- },
97
-
98
- registerMouseLeaveHandler: (handlerId, handler) => {
99
- mouseLeaveHandlersRef.current.set(handlerId, handler)
100
- return handlerId
101
- },
102
- unregisterMouseLeaveHandler: handlerId => mouseLeaveHandlersRef.current.delete(handlerId),
103
- mouseLeaveHandlerFor: (handlerId, providerId) => {
104
- if (mouseLeaveHandlersRef.current.size === 0) return undefined
105
- return (seriesName: string) => {
106
- mouseLeaveHandlersRef.current.forEach(handler => {
107
- handler(seriesName, providerId)
108
- })
109
- }
110
- },
111
- }}
112
- >
113
- {children}
114
- </MouseContext.Provider>
115
- }
85
+ // the context is generic over the same type parameters as `UseMouseValues`, but a context
86
+ // object can't itself carry unbound generics -- `useMouse` below casts it back to the caller's
87
+ // concrete types, which is safe because `<InteractionProvider/>` is what actually supplies the value
88
+ export const MouseContext = createContext<unknown>(undefined)
116
89
 
117
90
  /**
118
- * React hook that sets up the React context for the mouse values.
91
+ * React hook for registering, and retrieving, the chart's mouse-over-series and
92
+ * mouse-leave-series handlers. Must be used within a `<Chart>`.
119
93
  * @return The {@link UseMouseValues} held in the React context.
94
+ * @throws Error when used outside a `<Chart>`
95
+ * @template D The type of the data object for the series
96
+ * @template TM The type of the metadata object for the series
120
97
  */
121
98
  export function useMouse<D, TM>(): UseMouseValues<D, TM> {
122
- const context = useContext<UseMouseValues<D, TM>>(MouseContext)
123
- const {mouseOverHandlerFor} = context
124
- if (mouseOverHandlerFor === undefined || mouseOverHandlerFor === null) {
125
- throw new Error("useMouse can only be used when the parent is a <MouseProvider/>")
99
+ const context = useContext(MouseContext)
100
+ if (context === undefined) {
101
+ throw new Error("useMouse can only be used within a <Chart/>")
126
102
  }
127
- return context
103
+ return context as UseMouseValues<D, TM>
128
104
  }
@@ -1,24 +1,23 @@
1
- import {Dimensions, dimensionsNotEqual, Margin, plotDimensionsFrom} from "../styling/margins";
2
- import {createContext, JSX, useContext, useEffect, useRef, useState} from "react";
1
+ import {type Dimensions, type Margin} from "../styling/margins";
2
+ import {createContext, useContext} from "react";
3
3
 
4
4
  /**
5
- * No operation function for use when a default function is needed
5
+ * Called when the plot's dimensions change
6
+ * @param previousDimensions The plot's dimensions before the change
7
+ * @param newDimensions The plot's new dimensions
6
8
  */
7
- const noop = () => {
8
- /* empty on purpose */
9
- }
10
-
11
- export const defaultMargin: Margin = {top: 30, right: 20, bottom: 30, left: 50}
12
-
13
9
  export type PlotDimensionChangeHandler = (previousDimensions: Dimensions, newDimensions: Dimensions) => void
14
10
 
11
+ /**
12
+ * The values exposed through the {@link usePlotDimensions} react hook
13
+ */
15
14
  export type UsePlotDimensionsValues = {
16
15
  /**
17
- * The width and height (in pixels) of this chart
16
+ * The width and height (in pixels) of the plot area (the chart without its margins)
18
17
  */
19
18
  plotDimensions: Dimensions
20
19
  /**
21
- * The plot margins for the border of main G
20
+ * The margins between the edges of the chart and the plot area (where the axes are drawn)
22
21
  */
23
22
  margin: Margin
24
23
  /**
@@ -26,93 +25,30 @@ export type UsePlotDimensionsValues = {
26
25
  * @param dimensions the new dimensions of the plot
27
26
  */
28
27
  updateDimensions: (dimensions: Dimensions) => void
28
+ /**
29
+ * Registers a handler that's called whenever the plot dimensions change
30
+ * @param handler The handler
31
+ * @return The handler's ID (for unregistering it)
32
+ */
29
33
  registerPlotDimensionChangeHandler: (handler: PlotDimensionChangeHandler) => string
34
+ /**
35
+ * Unregisters the plot-dimension change handler with the specified ID
36
+ * @param handlerId The handler's ID (from {@link registerPlotDimensionChangeHandler})
37
+ */
30
38
  unregisterPlotDimensionChangeHandler: (handlerId: string) => void
31
39
  }
32
40
 
33
- export const defaultPlotDimensions = (): UsePlotDimensionsValues => ({
34
- plotDimensions: {width: 0, height: 0},
35
- margin: defaultMargin,
36
- updateDimensions: noop,
37
- registerPlotDimensionChangeHandler: () => "",
38
- unregisterPlotDimensionChangeHandler: noop
39
- })
40
-
41
- const PlotDimensionsContext = createContext<UsePlotDimensionsValues>(defaultPlotDimensions())
42
-
43
- export type Props = {
44
- containerDimensions: Dimensions
45
- margin: Margin
46
- children: JSX.Element | Array<JSX.Element>
47
- }
48
-
49
- export default function PlotDimensionsProvider(props: Props): JSX.Element {
50
- const {
51
- containerDimensions,
52
- margin,
53
- children
54
- } = props
55
-
56
- const [dimensions, setDimensions] = useState<Dimensions>(defaultPlotDimensions().plotDimensions)
57
- const plotDimensionChangeHandersRef = useRef<Map<string, PlotDimensionChangeHandler>>(new Map())
58
-
59
- // update the plot dimensions when the container size or margin change
60
- useEffect(
61
- () => {
62
- const newDimensions = plotDimensionsFrom(containerDimensions.width, containerDimensions.height, margin)
63
- setDimensions(prevDimensions => {
64
- if (dimensionsNotEqual(prevDimensions, newDimensions)) {
65
- for(const handler of plotDimensionChangeHandersRef.current.values()) {
66
- handler(prevDimensions, newDimensions)
67
- }
68
- return newDimensions
69
- }
70
- return prevDimensions
71
- })
72
- },
73
- [containerDimensions, margin]
74
- )
75
-
76
- function updateDimensions(newDimensions: Dimensions) {
77
- setDimensions(prevState => {
78
- for(const handler of plotDimensionChangeHandersRef.current.values()) {
79
- handler(prevState, newDimensions)
80
- }
81
- return newDimensions
82
- })
83
- }
84
-
85
- function registerPlotDimensionChangeHandler(handler: PlotDimensionChangeHandler) {
86
- const handlerId = crypto.randomUUID()
87
- plotDimensionChangeHandersRef.current.set(handlerId, handler)
88
- return handlerId
89
- }
90
-
91
- function unregisterPlotDimensionChangeHandler(handlerId: string): boolean {
92
- return plotDimensionChangeHandersRef.current.delete(handlerId)
93
- }
94
-
95
- return <PlotDimensionsContext.Provider
96
- value={{
97
- plotDimensions: dimensions,
98
- margin,
99
- updateDimensions,
100
- registerPlotDimensionChangeHandler,
101
- unregisterPlotDimensionChangeHandler
102
- }}
103
- >
104
- {children}
105
- </PlotDimensionsContext.Provider>
106
- }
41
+ export const PlotDimensionsContext = createContext<UsePlotDimensionsValues | undefined>(undefined)
107
42
 
108
43
  /**
109
- * React hook that sets up the React context for the plot-dimension values.
44
+ * React hook for the plot's dimensions and margins. Must be used within a
45
+ * `PlotDimensionsProvider` (i.e. within a `<Chart>`).
110
46
  * @return The {@link UsePlotDimensionsValues} held in the React context.
47
+ * @throws Error when used outside a `<PlotDimensionsProvider>`
111
48
  */
112
49
  export function usePlotDimensions(): UsePlotDimensionsValues {
113
- const context = useContext<UsePlotDimensionsValues>(PlotDimensionsContext)
114
- const {plotDimensions} = context
115
- if (plotDimensions === undefined || plotDimensions === null) {
50
+ const context = useContext(PlotDimensionsContext)
51
+ if (context === undefined) {
116
52
  throw new Error("usePlotDimensions can only be used when the parent is a <PlotDimensionsProvider/>")
117
53
  }
118
54
  return context
@@ -1,13 +1,5 @@
1
- import {Series} from "../plots/plot";
2
- import {TooltipDimensions} from "../tooltips/tooltipUtils";
3
- import {createContext, JSX, useContext, useRef} from "react";
4
-
5
- /**
6
- * No operation function for use when a default function is needed
7
- */
8
- const noop = () => {
9
- /* empty on purpose */
10
- }
1
+ import type {Series} from "../plots/plot";
2
+ import {createContext, useContext} from "react";
11
3
 
12
4
  /**
13
5
  * Base interface for tooltip data that is passed through to the tooltip content provider
@@ -20,20 +12,23 @@ export interface TooltipData<D, M> {
20
12
  }
21
13
 
22
14
  /**
23
- * A higher-order function that returns a function that provides the tooltip content or
24
- * `undefined` if no tooltip content is available.
25
- * @return The tooltip content, or `undefined` if no tooltip content is available.
15
+ * A function that provides (shows) the tooltip content for the element under the mouse (see
16
+ * {@link TooltipContent}, which registers one)
26
17
  * @param seriesName The name of the series for which the tooltip content is being provided
27
18
  * @param time The time (x-value) for which the tooltip content is being provided
28
19
  * @param tooltipData The tooltip data
29
20
  * @param mouseCoords The mouse coordinates over which the mouse is hovering
30
21
  * @param providerId An optional ID of the tooltip content provider.
22
+ * @template D The type of the data object for the series
23
+ * @template M The type of the metadata object for the series
31
24
  */
32
25
  export type TooltipContentProvider<D, M> =
33
- (seriesName: string, time: number, tooltipData: TooltipData<D, M>, mouseCoords: [x: number, y: number], providerId?: string) => TooltipDimensions
26
+ (seriesName: string, time: number, tooltipData: TooltipData<D, M>, mouseCoords: [x: number, y: number], providerId?: string) => void
34
27
 
35
28
  /**
36
- * The functions and values exposed through the {@link useTooltip} react hook
29
+ * The functions and values exposed through the `useTooltip` react hook
30
+ * @template D The type of the data object for the series
31
+ * @template M The type of the metadata object for the series
37
32
  */
38
33
  export type UseTooltipValues<D, M> = {
39
34
  /**
@@ -50,62 +45,36 @@ export type UseTooltipValues<D, M> = {
50
45
  */
51
46
  tooltipContentProvider: () => (TooltipContentProvider<D, M> | undefined)
52
47
 
48
+ /**
49
+ * Callback that sets the visibility state of the tooltip. This is used to control whether the tooltip is
50
+ * visible or not.
51
+ * @param visible Whether the tooltip should be visible or not.
52
+ */
53
53
  setVisibilityState: (visible: boolean) => void
54
- visibilityState: boolean
55
- }
56
-
57
- /**
58
- * The default values for the {@link UseTooltipValues}
59
- */
60
- export const defaultTooltipValues = (): UseTooltipValues<any, any> => ({
61
- registerTooltipContentProvider: noop,
62
- tooltipContentProvider: () => undefined,
63
- setVisibilityState: noop,
64
- visibilityState: false,
65
- })
66
54
 
67
- const TooltipContext = createContext<UseTooltipValues<any, any>>(defaultTooltipValues())
68
-
69
- export type Props = {
70
- children: JSX.Element | Array<JSX.Element>
55
+ /**
56
+ * @return Whether the tooltip is currently visible or not.
57
+ */
58
+ visibilityState: boolean
71
59
  }
72
60
 
73
- /**
74
- * The tooltip context provider allows registering and retrieving tooltip content providers. When
75
- * a tooltip content provider is registered with a provider ID, then it must be retrieved with that
76
- * same provider ID. This allows a chart to have multiple tooltip content providers, depending on
77
- * the context or types of objects being moused over. When a tooltip content provider is registered
78
- * without a provider ID, then the default provider ID is used.
79
- * @param props The properties holding the children
80
- * @return A JSX element containing the children
81
- */
82
- export default function TooltipProvider<D, M>(props: Props): JSX.Element {
83
- const {children} = props
84
-
85
- const tooltipContentProviderRef = useRef<TooltipContentProvider<D, M>>(undefined)
86
- const visibilityStateRef = useRef<boolean>(false)
87
-
88
- return <TooltipContext.Provider
89
- value={{
90
- registerTooltipContentProvider: provider => tooltipContentProviderRef.current = provider,
91
- tooltipContentProvider: () => tooltipContentProviderRef.current,
92
- setVisibilityState: (visible: boolean) => visibilityStateRef.current = visible,
93
- visibilityState: visibilityStateRef.current
94
- }}
95
- >
96
- {children}
97
- </TooltipContext.Provider>
98
- }
61
+ // the context is generic over the same type parameters as `UseTooltipValues`, but a context
62
+ // object can't itself carry unbound generics -- `useTooltip` below casts it back to the caller's
63
+ // concrete types, which is safe because `<InteractionProvider/>` is what actually supplies the value
64
+ export const TooltipContext = createContext<unknown>(undefined)
99
65
 
100
66
  /**
101
- * React hook that sets up the React context for the mouse values.
67
+ * React hook for registering, and retrieving, the chart's tooltip content provider, and for the
68
+ * tooltip's visibility. Must be used within a `<Chart>`.
102
69
  * @return The {@link UseTooltipValues} held in the React context.
70
+ * @throws Error when used outside a `<Chart>`
71
+ * @template D The type of the data object for the series
72
+ * @template M The type of the metadata object for the series
103
73
  */
104
74
  export function useTooltip<D, M>(): UseTooltipValues<D, M> {
105
- const context = useContext<UseTooltipValues<D, M>>(TooltipContext)
106
- const {registerTooltipContentProvider} = context
107
- if (registerTooltipContentProvider === undefined || registerTooltipContentProvider === null) {
108
- throw new Error("useTooltip can only be used when the parent is a <TooltipProvider/>")
75
+ const context = useContext(TooltipContext)
76
+ if (context === undefined) {
77
+ throw new Error("useTooltip can only be used within a <Chart/>")
109
78
  }
110
- return context
79
+ return context as UseTooltipValues<D, M>
111
80
  }