stream-charts 1.2.1 → 2.0.0

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