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
@@ -0,0 +1,117 @@
1
+ import {type JSX, useCallback, useEffect, useMemo, useRef, useState} from "react";
2
+ import {usePlotDimensions} from "./usePlotDimensions";
3
+ import {createCanvasContext, resizeCanvasTo} from "../plots/plot";
4
+ import type {CanvasContext} from "../d3types";
5
+ import {CanvasSurfaceContext} from "./useCanvasSurface";
6
+ import {initialSvgStyle, type SvgStyle} from "../styling/svgStyle";
7
+
8
+ const defaultBackground = '#202020';
9
+
10
+ export type Props = {
11
+ chartId: number
12
+ color: string
13
+ backgroundColor: string
14
+ svgStyle?: Partial<SvgStyle>
15
+ children: JSX.Element | Array<JSX.Element>
16
+ }
17
+
18
+ /**
19
+ * Creates and sizes the chart's `<canvas>` element, and provides the resulting canvas element and
20
+ * drawing context (via {@link useCanvasSurface}) to descendants -- most notably {@link ChartProvider}.
21
+ *
22
+ * Must be rendered as a descendant of {@link PlotDimensionsProvider}. The canvas's size is derived
23
+ * entirely from {@link usePlotDimensions}'s `plotDimensions`/`margin` -- the single source of truth
24
+ * for the chart's dimensions -- rather than from static width/height props. This matters because
25
+ * `usePlotDimensions` also exposes `updateDimensions(...)`, an escape hatch for updating
26
+ * dimensions independent of any prop (e.g. from a `ResizeObserver`-driven descendant); sourcing
27
+ * the canvas's size from the same place those updates land keeps the canvas from ever drifting out
28
+ * of sync with what the axes/plots believe the plot dimensions to be.
29
+ * @param props The properties
30
+ * @return The children, wrapped in the canvas-surface context provider
31
+ */
32
+ export default function CanvasSurfaceProvider(props: Props): JSX.Element {
33
+ const {
34
+ chartId,
35
+ color,
36
+ backgroundColor,
37
+ children
38
+ } = props
39
+
40
+ // the container (canvas) size is the plot area plus its margins -- i.e. the inverse of what
41
+ // plotDimensionsFrom(width, height, margin) computes -- reconstructed from usePlotDimensions'
42
+ // state rather than from props, so this stays correct even when dimensions are updated via
43
+ // updateDimensions(...) rather than a containerDimensions prop change.
44
+ const {plotDimensions, margin} = usePlotDimensions()
45
+ const width = plotDimensions.width + margin.left + margin.right
46
+ const height = plotDimensions.height + margin.top + margin.bottom
47
+
48
+ const svgStyle = useMemo<SvgStyle>(
49
+ () => ({...initialSvgStyle, ...props.svgStyle}),
50
+ [props.svgStyle]
51
+ )
52
+
53
+ const [canvas, setCanvas] = useState<HTMLCanvasElement | null>(null)
54
+ const [canvasContext, setCanvasContext] = useState<CanvasContext | null>(null)
55
+
56
+ // captures the dimensions active at the exact moment this component first renders
57
+ const initialDimensionsRef = useRef({width, height})
58
+
59
+ // a plain ref latch, not `canvasContext` state, guards the one-time canvas-context creation
60
+ // below
61
+ const hasCreatedCanvasContext = useRef(false)
62
+
63
+ // keep the canvas's backing store in sync with the plot dimensions, however they change
64
+ // (prop-driven container resize, or a direct updateDimensions(...) call)
65
+ useEffect(
66
+ () => {
67
+ if (canvasContext) {
68
+ resizeCanvasTo(canvasContext, {width, height})
69
+ canvasContext.requestRedraw()
70
+ }
71
+ },
72
+ [canvasContext, width, height]
73
+ )
74
+
75
+ const setCanvasCallback = useCallback(
76
+ /**
77
+ * Callback for setting the canvas element and updating its CSS style.
78
+ * @param canvasElement - The canvas element, or null if not available (e.g. unmounting).
79
+ */
80
+ (canvasElement: HTMLCanvasElement | null) => {
81
+ if (canvasElement) {
82
+ setCanvas(canvasElement)
83
+
84
+ // create the canvas context (and do its initial sizing) exactly once, the moment
85
+ // the canvas element first attaches.
86
+ if (!hasCreatedCanvasContext.current) {
87
+ hasCreatedCanvasContext.current = true
88
+ const cc = createCanvasContext(chartId, canvasElement, color)
89
+ resizeCanvasTo(cc, initialDimensionsRef.current)
90
+ setCanvasContext(cc)
91
+ }
92
+
93
+ // apply the style/background/color from the defaults and any style object passed
94
+ // in as properties, one property at a time, rather than overwriting the whole
95
+ // `style` attribute
96
+ Object.getOwnPropertyNames(svgStyle)
97
+ .filter(name => name !== 'width' && name !== 'height')
98
+ .forEach(name => canvasElement.style.setProperty(name, String(svgStyle[name])))
99
+
100
+ canvasElement.style.backgroundColor = backgroundColor !== defaultBackground ? backgroundColor : ''
101
+ canvasElement.style.color = color
102
+ }
103
+ },
104
+ [backgroundColor, chartId, color, svgStyle]
105
+ )
106
+
107
+ const value = useMemo(() => ({canvas, canvasContext}), [canvas, canvasContext])
108
+
109
+ return (
110
+ <CanvasSurfaceContext.Provider value={value}>
111
+ <div style={{position: 'relative', width, height}}>
112
+ <canvas ref={setCanvasCallback}/>
113
+ </div>
114
+ {children}
115
+ </CanvasSurfaceContext.Provider>
116
+ )
117
+ }
@@ -0,0 +1,79 @@
1
+ import type {BaseAxis, SeriesStyle} from "../axes/axes";
2
+ import {BaseAxisRange} from "../axes/BaseAxisRange";
3
+ import {type JSX, useMemo} from "react";
4
+ import {defaultUseChartValues} from "./defaultUseChartValues";
5
+ import {useAxes} from "./useAxes";
6
+ import {useMouse} from "./useMouse";
7
+ import {useTooltip} from "./useTooltip";
8
+ import {useCanvasSurface} from "./useCanvasSurface";
9
+ import {ChartContext} from "./useChart";
10
+
11
+ // the defaults (constants, so that their identity doesn't change from one render to the next)
12
+ const DEFAULT_SERIES_FILTER = defaultUseChartValues().seriesFilter
13
+ const NO_SERIES_STYLES = new Map<string, SeriesStyle>()
14
+
15
+ /**
16
+ * The properties for the {@link ChartProvider}
17
+ * @template S The type of the series style
18
+ */
19
+ export interface Props<S extends SeriesStyle> {
20
+ /**
21
+ * The unique ID for the chart
22
+ */
23
+ chartId: number
24
+ /**
25
+ * Base color
26
+ */
27
+ color: string
28
+ /**
29
+ * The base/default background color
30
+ */
31
+ backgroundColor: string
32
+ /**
33
+ * A `map(series_name -> series_line_style)` holding the style for each series
34
+ */
35
+ seriesStyles?: Map<string, S>
36
+ /**
37
+ * An optional regular expression used against the series names to determine which series to show in the chart
38
+ */
39
+ seriesFilter?: RegExp
40
+
41
+ children: JSX.Element | Array<JSX.Element>
42
+ }
43
+
44
+ /**
45
+ * The React context provider for the {@link UseChartValues}
46
+ * @param props The properties
47
+ * @return The children wrapped in this provider
48
+ * @template S The type of the series style
49
+ * @template AR The type of the axis range
50
+ * @template A The type of the axis
51
+ */
52
+ export default function ChartProvider<S extends SeriesStyle, AR extends BaseAxisRange, A extends BaseAxis>(props: Props<S>): JSX.Element {
53
+ const {
54
+ chartId,
55
+ color,
56
+ backgroundColor,
57
+ seriesFilter = DEFAULT_SERIES_FILTER,
58
+ seriesStyles = NO_SERIES_STYLES as Map<string, S>,
59
+ } = props
60
+
61
+ // canvas/canvasContext come from CanvasSurfaceProvider (a shared ancestor -- see Chart.tsx),
62
+ // which sizes the canvas from usePlotDimensions() rather than from props, so this always
63
+ // reflects the same dimensions the axes/plots are using.
64
+ const {canvas, canvasContext} = useCanvasSurface()
65
+
66
+ const axes = useAxes<AR, A>()
67
+ const mouse = useMouse()
68
+ const tooltip = useTooltip()
69
+
70
+ // (memoized, so that the chart's components only re-render when something in it changes)
71
+ const value = useMemo(
72
+ () => ({chartId, color, backgroundColor, seriesStyles, seriesFilter, canvasContext, canvas, axes, mouse, tooltip}),
73
+ [chartId, color, backgroundColor, seriesStyles, seriesFilter, canvasContext, canvas, axes, mouse, tooltip]
74
+ )
75
+
76
+ return <ChartContext.Provider value={value}>
77
+ {props.children}
78
+ </ChartContext.Provider>
79
+ }
@@ -0,0 +1,88 @@
1
+ import {type JSX, useMemo, useRef, useState} from "react";
2
+ import {MouseContext, type TooltipMouseLeaveHandlerFn, type TooltipMouseOverHandlerFn, type UseMouseValues} from "./useMouse";
3
+ import {type TooltipContentProvider, TooltipContext, type UseTooltipValues} from "./useTooltip";
4
+ import {HoveredSeriesContext, type HoveredSeriesValues} from "./useHoveredSeries";
5
+
6
+ type Props = {
7
+ children: JSX.Element | Array<JSX.Element>
8
+ }
9
+
10
+ /**
11
+ * Provides the chart's interactions: the mouse-over and mouse-leave handlers (see {@link useMouse}),
12
+ * the tooltip's content provider and visibility (see {@link useTooltip}), and the hovered series
13
+ * (see {@link useHoveredSeries}).
14
+ *
15
+ * The plots hit-test the mouse, and call the mouse handlers: a mouse-over sets the hovered series,
16
+ * and then calls every registered mouse-over handler (e.g. the tooltip's); a mouse-leave clears the
17
+ * hovered series, and calls every registered mouse-leave handler.
18
+ *
19
+ * The handler registries live in refs, so the mouse and tooltip values never change identity (the
20
+ * tooltip's changes only with its visibility), and registering a handler never re-renders anything.
21
+ * @param props The children
22
+ * @return The children, wrapped in the interaction contexts
23
+ * @template D The type of the data object for the series
24
+ * @template TM The type of the metadata object for the series
25
+ */
26
+ export default function InteractionProvider<D, TM>(props: Props): JSX.Element {
27
+ const {children} = props
28
+
29
+ const mouseOverHandlersRef = useRef<Map<string, TooltipMouseOverHandlerFn<D, TM>>>(new Map())
30
+ const mouseLeaveHandlersRef = useRef<Map<string, (seriesName: string, providerId?: string) => void>>(new Map())
31
+ const tooltipContentProviderRef = useRef<TooltipContentProvider<D, TM>>(undefined)
32
+
33
+ const [hoveredSeriesName, setHoveredSeriesName] = useState<string | null>(null)
34
+ const [tooltipVisible, setTooltipVisible] = useState<boolean>(false)
35
+
36
+ const mouse = useMemo<UseMouseValues<D, TM>>(
37
+ () => ({
38
+ registerMouseOverHandler: (handlerId, handler) => {
39
+ mouseOverHandlersRef.current.set(handlerId, handler)
40
+ return handlerId
41
+ },
42
+ unregisterMouseOverHandler: handlerId => mouseOverHandlersRef.current.delete(handlerId),
43
+ mouseOverHandlerFor: (_handlerId, providerId) =>
44
+ (seriesName, time, tooltipData, mouseCoords) => {
45
+ setHoveredSeriesName(seriesName)
46
+ mouseOverHandlersRef.current.forEach(handler => handler(seriesName, time, tooltipData, mouseCoords, providerId))
47
+ },
48
+ registerMouseLeaveHandler: (handlerId, handler: TooltipMouseLeaveHandlerFn) => {
49
+ mouseLeaveHandlersRef.current.set(handlerId, handler)
50
+ return handlerId
51
+ },
52
+ unregisterMouseLeaveHandler: handlerId => mouseLeaveHandlersRef.current.delete(handlerId),
53
+ mouseLeaveHandlerFor: (_handlerId, providerId) =>
54
+ seriesName => {
55
+ setHoveredSeriesName(null)
56
+ mouseLeaveHandlersRef.current.forEach(handler => handler(seriesName, providerId))
57
+ },
58
+ }),
59
+ []
60
+ )
61
+
62
+ const tooltip = useMemo<UseTooltipValues<D, TM>>(
63
+ () => ({
64
+ registerTooltipContentProvider: provider => {
65
+ tooltipContentProviderRef.current = provider
66
+ },
67
+ tooltipContentProvider: () => tooltipContentProviderRef.current,
68
+ setVisibilityState: setTooltipVisible,
69
+ visibilityState: tooltipVisible,
70
+ }),
71
+ [tooltipVisible]
72
+ )
73
+
74
+ const hovered = useMemo<HoveredSeriesValues>(
75
+ () => ({hoveredSeriesName, setHoveredSeriesName}),
76
+ [hoveredSeriesName]
77
+ )
78
+
79
+ return (
80
+ <MouseContext.Provider value={mouse}>
81
+ <TooltipContext.Provider value={tooltip}>
82
+ <HoveredSeriesContext.Provider value={hovered}>
83
+ {children}
84
+ </HoveredSeriesContext.Provider>
85
+ </TooltipContext.Provider>
86
+ </MouseContext.Provider>
87
+ )
88
+ }
@@ -0,0 +1,109 @@
1
+ import {type JSX, useCallback, useEffect, useMemo, useRef, useState} from "react";
2
+ import {type Dimensions, dimensionsNotEqual, type Margin, plotDimensionsFrom} from "../styling/margins";
3
+ import {defaultPlotDimensions} from "./defaultPlotDimensions";
4
+ import {type PlotDimensionChangeHandler, PlotDimensionsContext} from "./usePlotDimensions";
5
+
6
+ export type Props = {
7
+ containerDimensions: Dimensions
8
+ margin: Margin
9
+ children: JSX.Element | Array<JSX.Element>
10
+ }
11
+
12
+ /**
13
+ * Provides the plot's dimensions and margins (see {@link usePlotDimensions}): the plot dimensions
14
+ * are the container's dimensions less the margins, and are updated (and the registered change
15
+ * handlers called) when the container's dimensions or the margins change.
16
+ * @param props The properties
17
+ * @return The children wrapped in this provider
18
+ */
19
+ export default function PlotDimensionsProvider(props: Props): JSX.Element {
20
+ const {
21
+ containerDimensions,
22
+ margin,
23
+ children
24
+ } = props
25
+
26
+ const [dimensions, setDimensions] = useState<Dimensions>(defaultPlotDimensions().plotDimensions)
27
+ // holds the latest committed dimensions so the change handlers can be fired from the effect body
28
+ const dimensionsRef = useRef<Dimensions>(dimensions)
29
+ const plotDimensionChangeHandlersRef = useRef<Map<string, PlotDimensionChangeHandler>>(new Map())
30
+
31
+ // update the plot dimensions when the container size or margin change
32
+ useEffect(
33
+ () => {
34
+ const newDimensions = plotDimensionsFrom(containerDimensions.width, containerDimensions.height, margin)
35
+ if (dimensionsNotEqual(dimensionsRef.current, newDimensions)) {
36
+ for (const handler of plotDimensionChangeHandlersRef.current.values()) {
37
+ handler(dimensionsRef.current, newDimensions)
38
+ }
39
+ dimensionsRef.current = newDimensions
40
+ setDimensions(newDimensions)
41
+ }
42
+ },
43
+ [containerDimensions, margin]
44
+ )
45
+
46
+ /**
47
+ * Updates the plot dimensions and fires any registered change handlers. Wrapped in
48
+ * `useCallback` (empty deps -- closes only over refs and the stable `setDimensions` setter) so
49
+ * its identity is stable across renders, which in turn lets the context `value` below be
50
+ * memoized instead of being a fresh object on every render.
51
+ * @param newDimensions The new plot dimensions.
52
+ */
53
+ const updateDimensions = useCallback(
54
+ (newDimensions: Dimensions) => {
55
+ if (dimensionsNotEqual(dimensionsRef.current, newDimensions)) {
56
+ for (const handler of plotDimensionChangeHandlersRef.current.values()) {
57
+ handler(dimensionsRef.current, newDimensions)
58
+ }
59
+ dimensionsRef.current = newDimensions
60
+ setDimensions(newDimensions)
61
+ }
62
+ },
63
+ []
64
+ )
65
+
66
+ /**
67
+ * Registers a plot dimension change handler.
68
+ * @param handler The handler to register.
69
+ * @returns The handler ID.
70
+ */
71
+ const registerPlotDimensionChangeHandler = useCallback(
72
+ (handler: PlotDimensionChangeHandler) => {
73
+ const handlerId = crypto.randomUUID()
74
+ plotDimensionChangeHandlersRef.current.set(handlerId, handler)
75
+ return handlerId
76
+ },
77
+ []
78
+ )
79
+
80
+ /**
81
+ * Unregisters a plot dimension change handler.
82
+ * @param handlerId The handler ID.
83
+ * @returns True if the handler was unregistered, false if it was not found.
84
+ */
85
+ const unregisterPlotDimensionChangeHandler = useCallback(
86
+ (handlerId: string): boolean => plotDimensionChangeHandlersRef.current.delete(handlerId),
87
+ []
88
+ )
89
+
90
+ // memoized so consumers relying on context value identity (e.g. a useMemo/effect keyed on this
91
+ // context's value) don't re-run on every render of anything above this provider -- previously
92
+ // a fresh object literal every render, which is exactly the same class of bug already
93
+ // documented/worked-around for AxesProvider's context value (see e.g. ScatterPlot.tsx's note
94
+ // on `axesRanges` never being memoized there).
95
+ const value = useMemo(
96
+ () => ({
97
+ plotDimensions: dimensions,
98
+ margin,
99
+ updateDimensions,
100
+ registerPlotDimensionChangeHandler,
101
+ unregisterPlotDimensionChangeHandler
102
+ }),
103
+ [dimensions, margin, updateDimensions, registerPlotDimensionChangeHandler, unregisterPlotDimensionChangeHandler]
104
+ )
105
+
106
+ return <PlotDimensionsContext.Provider value={value}>
107
+ {children}
108
+ </PlotDimensionsContext.Provider>
109
+ }
@@ -0,0 +1,40 @@
1
+ import {BaseAxisRange} from "../axes/BaseAxisRange";
2
+ import type {BaseAxis} from "../axes/axes";
3
+ import {AxesState} from "../axes/AxesState";
4
+ import {Optional} from "result-fn";
5
+ import type {UseAxesValues} from "./useAxes";
6
+
7
+ /**
8
+ * No operation function for use when a default function is needed
9
+ */
10
+ const noop = () => {
11
+ /* empty on purpose */
12
+ }
13
+
14
+ /**
15
+ * Default axes value
16
+ * @return The default values for the {@link UseAxesValues}
17
+ * @template AR The type of the axis range (e.g. {@link ContinuousAxisRange} or {@link OrdinalAxisRange})
18
+ * @template A The axis type
19
+ */
20
+ export function defaultAxesValues<AR extends BaseAxisRange, A extends BaseAxis>(): UseAxesValues<AR, A> {
21
+ return ({
22
+ xAxesState: AxesState.empty(),
23
+ yAxesState: AxesState.empty(),
24
+ addXAxis: noop,
25
+ addYAxis: noop,
26
+ setAxisAssignments: noop,
27
+ axisAssignmentsFor: () => ({xAxis: "", yAxis: ""}),
28
+ updateAxisRanges: noop,
29
+ axesRanges: () => new Map<string, AR>(),
30
+ axisRangeFor: () => Optional.empty(),
31
+ setAxesRanges: noop,
32
+ setAxisRangeFor: noop,
33
+ setAxisIntervalFor: noop,
34
+ setOriginalAxisIntervalFor: noop,
35
+ resetAxisIntervalFor: noop,
36
+ resetAxesRanges: noop,
37
+ addAxesRangesUpdateHandler: () => noop,
38
+ removeAxesRangesUpdateHandler: () => noop,
39
+ })
40
+ }
@@ -0,0 +1,24 @@
1
+ import type {UseMouseValues} from "./useMouse";
2
+
3
+ /**
4
+ * No operation function for use when a default function is needed
5
+ */
6
+ const noop = () => {
7
+ /* empty on purpose */
8
+ }
9
+ /**
10
+ * The default values for the {@link UseMouseValues}
11
+ * @return The default values for the {@link UseMouseValues}
12
+ * @template D The type of the data object for the series
13
+ * @template TM The type of the metadata object for the series
14
+ */
15
+ export function defaultMouseValues<D, TM>(): UseMouseValues<D, TM> {
16
+ return {
17
+ registerMouseOverHandler: () => '',
18
+ unregisterMouseOverHandler: noop,
19
+ mouseOverHandlerFor: () => noop,
20
+ registerMouseLeaveHandler: () => '',
21
+ unregisterMouseLeaveHandler: noop,
22
+ mouseLeaveHandlerFor: () => noop,
23
+ }
24
+ }
@@ -0,0 +1,27 @@
1
+ import type {Margin} from "../styling/margins";
2
+ import type {UsePlotDimensionsValues} from "./usePlotDimensions";
3
+
4
+ /**
5
+ * No operation function for use when a default function is needed
6
+ */
7
+ const noop = () => {
8
+ /* empty on purpose */
9
+ }
10
+
11
+ /**
12
+ * The default values for the {@link UsePlotDimensionsValues}: zero-sized plot dimensions, the
13
+ * {@link defaultMargin}, and no-op functions
14
+ * @return The default plot-dimension values
15
+ */
16
+ export const defaultPlotDimensions = (): UsePlotDimensionsValues => ({
17
+ plotDimensions: {width: 0, height: 0},
18
+ margin: defaultMargin,
19
+ updateDimensions: noop,
20
+ registerPlotDimensionChangeHandler: () => "",
21
+ unregisterPlotDimensionChangeHandler: noop
22
+ })
23
+
24
+ /**
25
+ * The default margins between the edges of the chart and the plot area
26
+ */
27
+ export const defaultMargin: Margin = {top: 30, right: 20, bottom: 30, left: 50}
@@ -0,0 +1,23 @@
1
+ import type {UseTooltipValues} from "./useTooltip";
2
+
3
+ /**
4
+ * No operation function for use when a default function is needed
5
+ */
6
+ const noop = () => {
7
+ /* empty on purpose */
8
+ }
9
+
10
+ /**
11
+ * The default values for the {@link UseTooltipValues}
12
+ * @return The default values for the {@link UseTooltipValues}
13
+ * @template D The type of the data object for the series
14
+ * @template M The type of the metadata object for the series
15
+ */
16
+ export function defaultTooltipValues<D, M>(): UseTooltipValues<D, M> {
17
+ return {
18
+ registerTooltipContentProvider: noop,
19
+ tooltipContentProvider: () => undefined,
20
+ setVisibilityState: noop,
21
+ visibilityState: false,
22
+ }
23
+ }
@@ -0,0 +1,36 @@
1
+ import type {BaseAxis, SeriesStyle} from "../axes/axes";
2
+ import {BaseAxisRange} from "../axes/BaseAxisRange";
3
+ import {defaultAxesValues} from "./defaultAxesValues";
4
+ import {defaultMouseValues} from "./defaultMouseValues";
5
+ import {defaultTooltipValues} from "./defaultTooltipValues";
6
+ import type {UseChartValues} from "./useChart";
7
+
8
+ /**
9
+ * The default values for the {@link UseChartValues}
10
+ * @return The default values for the {@link UseChartValues}
11
+ * @template D The type of the series' datum
12
+ * @template S The type of the series style
13
+ * @template TM The type of the tooltip's metadata (data about the series data)
14
+ * @template AR The type of the axis range
15
+ * @template A The type of the axis
16
+ */
17
+ export function defaultUseChartValues<D, S extends SeriesStyle, TM, AR extends BaseAxisRange, A extends BaseAxis>(): UseChartValues<D, S, TM, AR, A> {
18
+ return {
19
+ chartId: NaN,
20
+ canvas: null,
21
+ canvasContext: null,
22
+ color: '#d2933f',
23
+ backgroundColor: '#EEE',
24
+ seriesStyles: new Map<string, S>(),
25
+
26
+ // axes
27
+ axes: defaultAxesValues(),
28
+
29
+ // data
30
+ seriesFilter: /./,
31
+
32
+ // internal chart-interaction event handlers
33
+ mouse: defaultMouseValues(),
34
+ tooltip: defaultTooltipValues(),
35
+ }
36
+ }