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,113 @@
1
+ import { useCallback, useEffect, useRef } from "react";
2
+ import * as d3 from "d3";
3
+ /**
4
+ * How far a wheel event scrolls (positive when scrolling down, toward you), scaled as d3-zoom's
5
+ * default `wheelDelta` scales it (which negates it, so that scrolling up raises the scale)
6
+ * @param event The wheel event
7
+ * @return The scroll amount, in d3-zoom's units
8
+ */
9
+ function wheelDeltaOf(event) {
10
+ return event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);
11
+ }
12
+ /**
13
+ * Sets up panning (dragging) and zooming (the mouse wheel) on a plot's canvas, with d3's drag and
14
+ * zoom behaviors, and detaches them when the plot unmounts (or the canvas, or the settings they
15
+ * depend on, change).
16
+ *
17
+ * - Zooming only responds to wheel events (and, when required, only with the shift or ctrl key
18
+ * down): d3-zoom also handles mouse drags on its own, which would otherwise fire zoom events for
19
+ * the same gesture the dedicated drag behavior pans with.
20
+ * - d3-zoom's scale is cumulative; each zoom step is also handed to the plot as an incremental
21
+ * factor (relative to the previous step), which is reset whenever d3-zoom's transform is.
22
+ * - The handlers are always the plot's latest ones, so the behaviors needn't be re-attached when
23
+ * the handlers change.
24
+ * @param canvasContext The plot's canvas context (`null` until the canvas exists)
25
+ * @param options Whether panning and zooming are enabled, their extents, and the handlers
26
+ * @return The controls for d3-zoom's own transform (reset it, or set its scale)
27
+ */
28
+ export function useCanvasZoomPan(canvasContext, options) {
29
+ const { panEnabled, zoomEnabled, keyModifiersRequired, scaleExtent: [minScale, maxScale], invertWheel = false, translateExtent: [[left, top], [right, bottom]], onZoomReset, } = options;
30
+ // the latest handlers (the behaviors call these, so they needn't be re-attached when they change)
31
+ const handlersRef = useRef(options);
32
+ useEffect(() => {
33
+ handlersRef.current = options;
34
+ });
35
+ // d3-zoom's cumulative scale as of the previous zoom step, to turn its next one into an
36
+ // incremental factor
37
+ const lastKRef = useRef(1);
38
+ // the attached zoom behavior (undefined while zooming isn't set up)
39
+ const zoomRef = useRef(undefined);
40
+ const resetZoomTransform = useCallback(() => {
41
+ if (canvasContext !== null && zoomRef.current !== undefined) {
42
+ d3.select(canvasContext.canvas).call(zoomRef.current.transform, d3.zoomIdentity);
43
+ }
44
+ lastKRef.current = 1;
45
+ }, [canvasContext]);
46
+ const setZoomScale = useCallback((k) => {
47
+ if (canvasContext !== null) {
48
+ // (d3-zoom keeps an element's transform in its `__zoom` property)
49
+ d3.select(canvasContext.canvas).property("__zoom", d3.zoomIdentity.scale(k));
50
+ }
51
+ lastKRef.current = k;
52
+ }, [canvasContext]);
53
+ useEffect(() => {
54
+ if (canvasContext === null)
55
+ return;
56
+ const canvasSelection = d3.select(canvasContext.canvas);
57
+ if (panEnabled) {
58
+ const drag = d3.drag()
59
+ .on("start", () => {
60
+ var _a, _b;
61
+ canvasSelection.style("cursor", "move");
62
+ (_b = (_a = handlersRef.current).onPanStart) === null || _b === void 0 ? void 0 : _b.call(_a);
63
+ })
64
+ .on("drag", event => handlersRef.current.onPan(event.dx, event.dy))
65
+ .on("end", () => {
66
+ var _a, _b;
67
+ canvasSelection.style("cursor", "auto");
68
+ (_b = (_a = handlersRef.current).onPanEnd) === null || _b === void 0 ? void 0 : _b.call(_a);
69
+ });
70
+ canvasSelection.call(drag);
71
+ }
72
+ if (zoomEnabled) {
73
+ const zoom = d3.zoom()
74
+ // wheel events only -- see the doc comment above
75
+ .filter(event => event.type === 'wheel' && (!keyModifiersRequired || event.shiftKey || event.ctrlKey))
76
+ // (the same gesture zooms every plot the same way -- see `invertWheel`)
77
+ .wheelDelta(event => (invertWheel ? 1 : -1) * wheelDeltaOf(event))
78
+ .scaleExtent([minScale, maxScale])
79
+ .translateExtent([[left, top], [right, bottom]])
80
+ .on("zoom", (event) => {
81
+ // a `null` source event means a programmatic change to the transform (e.g. a
82
+ // reset), not a user's gesture: there's nothing for the plot to do
83
+ if (event.sourceEvent === null)
84
+ return;
85
+ const k = event.transform.k;
86
+ const factor = k / lastKRef.current;
87
+ lastKRef.current = k;
88
+ const { offsetX, offsetY } = event.sourceEvent;
89
+ handlersRef.current.onZoom({ factor, k, x: offsetX, y: offsetY });
90
+ });
91
+ canvasSelection.call(zoom);
92
+ zoomRef.current = zoom;
93
+ onZoomReset === null || onZoomReset === void 0 ? void 0 : onZoomReset(() => {
94
+ var _a, _b;
95
+ resetZoomTransform();
96
+ (_b = (_a = handlersRef.current).resetView) === null || _b === void 0 ? void 0 : _b.call(_a);
97
+ });
98
+ }
99
+ return () => {
100
+ if (panEnabled)
101
+ canvasSelection.on(".drag", null);
102
+ if (zoomEnabled) {
103
+ canvasSelection.on(".zoom", null);
104
+ zoomRef.current = undefined;
105
+ }
106
+ };
107
+ }, [
108
+ canvasContext, panEnabled, zoomEnabled, keyModifiersRequired, invertWheel,
109
+ minScale, maxScale, left, top, right, bottom, onZoomReset, resetZoomTransform
110
+ ]);
111
+ return { resetZoomTransform, setZoomScale };
112
+ }
113
+ //# sourceMappingURL=useCanvasZoomPan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCanvasZoomPan.js","sourceRoot":"","sources":["../../../../src/app/charts/plots/useCanvasZoomPan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { type RefObject } from "react";
2
+ import type { CanvasContext } from "../d3types";
3
+ import type { StreamingDataSource } from "../datasources/StreamingDataSource";
4
+ import type { ChartData } from "../observables/ChartData";
5
+ import type { BaseSeries } from "../series/baseSeries";
6
+ import { type AxisTimesFor, TimeWindowBehavior } from "../subscriptions/viewDrivers";
7
+ import { type AxesAssignment } from "./plot";
8
+ /**
9
+ * The options for {@link useStreamingTimeAxes}
10
+ * @template CD The type of the chart data
11
+ * @template D The type of the series' datum
12
+ */
13
+ export interface StreamingTimeAxesOptions<CD extends ChartData, D> {
14
+ /**
15
+ * The plot's canvas context (`null` until the canvas exists)
16
+ */
17
+ canvasContext: CanvasContext | null;
18
+ /**
19
+ * The data source (and whether it's running)
20
+ */
21
+ dataSource: StreamingDataSource<CD, D> | undefined;
22
+ running: boolean;
23
+ /**
24
+ * The series the data source held when it was handed to the chart (see `useInitialData`)
25
+ */
26
+ initialData: Array<BaseSeries<D>>;
27
+ /**
28
+ * The time of a datum (its x-value)
29
+ */
30
+ timeOf: (datum: D) => number;
31
+ /**
32
+ * Gives the current time of each x-axis that a chunk of data has new points for (see
33
+ * `timeSeriesAxisTimes` and `outlierAxisTimes`)
34
+ */
35
+ axisTimesFor: AxisTimesFor<CD>;
36
+ /**
37
+ * The assignment of the series to their x- and y-axes
38
+ */
39
+ axisAssignments: Map<string, AxesAssignment>;
40
+ /**
41
+ * Draws the plot (registers its draw function with the canvas context, and requests a redraw)
42
+ */
43
+ updatePlot: (canvasContext: CanvasContext) => void;
44
+ /**
45
+ * Resets the plot's own references to the data, when the data source is replaced -- called just
46
+ * before the axes are reset and the plot is redrawn
47
+ */
48
+ onDataReset: () => void;
49
+ /**
50
+ * Whether the plot may show tooltips: when given, it's cleared while panning and while the data
51
+ * source is running, and restored afterward
52
+ */
53
+ allowTooltipRef?: RefObject<boolean>;
54
+ /**
55
+ * Panning and zooming (see {@link useCanvasZoomPan})
56
+ */
57
+ panEnabled: boolean;
58
+ zoomEnabled: boolean;
59
+ zoomKeyModifiersRequired: boolean;
60
+ /**
61
+ * The plot's `onZoomReset` property (see {@link useCanvasZoomPan})
62
+ */
63
+ onZoomReset?: (resetZoom: () => void) => void;
64
+ /**
65
+ * The time (ms) between cadence ticks (none, when undefined -- see `timeAxisViewDriverFor`)
66
+ */
67
+ withCadenceOf?: number;
68
+ /**
69
+ * Whether the time axes scroll or squeeze as data passes their ends (defaults to SCROLL)
70
+ */
71
+ timeWindowBehavior?: TimeWindowBehavior;
72
+ /**
73
+ * When true, the x- and y-axes of the hovered series are highlighted (in the series' own
74
+ * highlight color and width)
75
+ */
76
+ highlightAxesOnMouseOver: boolean;
77
+ }
78
+ /**
79
+ * The time (x-) axes of a streaming time plot (the scatter, raster, and outlier plots): keeps each
80
+ * x-axis's range in step with the data, and with the user's panning and zooming, and reports the
81
+ * ranges.
82
+ *
83
+ * - **The ranges.** One map of the x-axes' ranges, built once and mutated in place: the zoom and
84
+ * pan handlers, and the view driver, all work on the same map, so that neither undoes the
85
+ * other (the view driver hands its map back through `updateTimingAndPlot`, which re-points the
86
+ * map at it).
87
+ * - **The view driver.** While the data source runs, a view driver (see `timeAxisViewDriverFor`)
88
+ * advances the ranges as the data arrives (or with cadence), records each axis's current time,
89
+ * and redraws the plot. It belongs to this plot alone, and is torn down with it.
90
+ * - **Panning and zooming.** While running, the zoom pivots on each axis's current time ("now");
91
+ * while paused, on the mouse. A zoom reset restores the axes' original ranges (as captured when
92
+ * the data source was handed to the plot).
93
+ * - **Reporting.** The axes' intervals are reported to the chart's `onUpdateAxesBounds` (at most
94
+ * once per animation frame, since zooming and panning fire many events).
95
+ * - **A new data source** (new initial data) resets the plot's data, the axes' ranges (starting at
96
+ * the data's first time), and the original ranges a zoom reset restores.
97
+ * - **Highlighting.** Optionally, highlights the hovered series' axes.
98
+ * @param options The plot's canvas, data, handlers, and settings
99
+ * @template CD The type of the chart data
100
+ * @template D The type of the series' datum
101
+ */
102
+ export declare function useStreamingTimeAxes<CD extends ChartData, D>(options: StreamingTimeAxesOptions<CD, D>): void;
103
+ //# sourceMappingURL=useStreamingTimeAxes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStreamingTimeAxes.d.ts","sourceRoot":"","sources":["../../../../src/app/charts/plots/useStreamingTimeAxes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,SAAS,EAA0D,MAAM,OAAO,CAAC;AAc9F,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,oCAAoC,CAAC;AAK5E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAC,KAAK,YAAY,EAAyB,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAE1G,OAAO,EAAC,KAAK,cAAc,EAAuB,MAAM,QAAQ,CAAC;AAGjE;;;;GAIG;AACH,MAAM,WAAW,wBAAwB,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7D;;OAEG;IACH,aAAa,EAAE,aAAa,GAAG,IAAI,CAAA;IACnC;;OAEG;IACH,UAAU,EAAE,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IAClD,OAAO,EAAE,OAAO,CAAA;IAChB;;OAEG;IACH,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC;;OAEG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAA;IAC5B;;;OAGG;IACH,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC,CAAA;IAC9B;;OAEG;IACH,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC5C;;OAEG;IACH,UAAU,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAA;IAClD;;;OAGG;IACH,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IACpC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,wBAAwB,EAAE,OAAO,CAAA;IACjC;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;IAC7C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;;OAGG;IACH,wBAAwB,EAAE,OAAO,CAAA;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,wBAAwB,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAqQ5G"}
@@ -0,0 +1,257 @@
1
+ import { useCallback, useEffect, useEffectEvent, useMemo, useRef } from "react";
2
+ import { Optional } from "result-fn";
3
+ import { axesForSeriesGen, continuousAxisIntervals, continuousAxisRanges, continuousAxisZoomHandler, defaultLineStyle, panHandler, } from "../axes/axes";
4
+ import { AxisInterval } from "../axes/AxisInterval";
5
+ import { ContinuousAxisRange } from "../axes/ContinuousAxisRange";
6
+ import { useChart } from "../hooks/useChart";
7
+ import { useHoveredSeries } from "../hooks/useHoveredSeries";
8
+ import { usePlotDimensions } from "../hooks/usePlotDimensions";
9
+ import { useStreamingSettings } from "../hooks/useDataSource";
10
+ import { timeAxisViewDriverFor, TimeWindowBehavior } from "../subscriptions/viewDrivers";
11
+ import { noop } from "../utils";
12
+ import { currentIntervalsFrom } from "./plot";
13
+ import { useCanvasZoomPan } from "./useCanvasZoomPan";
14
+ /**
15
+ * The time (x-) axes of a streaming time plot (the scatter, raster, and outlier plots): keeps each
16
+ * x-axis's range in step with the data, and with the user's panning and zooming, and reports the
17
+ * ranges.
18
+ *
19
+ * - **The ranges.** One map of the x-axes' ranges, built once and mutated in place: the zoom and
20
+ * pan handlers, and the view driver, all work on the same map, so that neither undoes the
21
+ * other (the view driver hands its map back through `updateTimingAndPlot`, which re-points the
22
+ * map at it).
23
+ * - **The view driver.** While the data source runs, a view driver (see `timeAxisViewDriverFor`)
24
+ * advances the ranges as the data arrives (or with cadence), records each axis's current time,
25
+ * and redraws the plot. It belongs to this plot alone, and is torn down with it.
26
+ * - **Panning and zooming.** While running, the zoom pivots on each axis's current time ("now");
27
+ * while paused, on the mouse. A zoom reset restores the axes' original ranges (as captured when
28
+ * the data source was handed to the plot).
29
+ * - **Reporting.** The axes' intervals are reported to the chart's `onUpdateAxesBounds` (at most
30
+ * once per animation frame, since zooming and panning fire many events).
31
+ * - **A new data source** (new initial data) resets the plot's data, the axes' ranges (starting at
32
+ * the data's first time), and the original ranges a zoom reset restores.
33
+ * - **Highlighting.** Optionally, highlights the hovered series' axes.
34
+ * @param options The plot's canvas, data, handlers, and settings
35
+ * @template CD The type of the chart data
36
+ * @template D The type of the series' datum
37
+ */
38
+ export function useStreamingTimeAxes(options) {
39
+ const { canvasContext, dataSource, running, initialData, timeOf, axisTimesFor, axisAssignments, updatePlot, onDataReset, allowTooltipRef, panEnabled, zoomEnabled, zoomKeyModifiersRequired, onZoomReset, withCadenceOf, timeWindowBehavior = TimeWindowBehavior.SCROLL, highlightAxesOnMouseOver, } = options;
40
+ const { chartId, color, axes, seriesStyles } = useChart();
41
+ const { xAxesState, yAxesState, setAxisIntervalFor, updateAxisRanges = noop, onUpdateAxesInterval } = axes;
42
+ const { plotDimensions, margin } = usePlotDimensions();
43
+ const { windowingTime, dataUpdatePeriod } = useStreamingSettings();
44
+ const { hoveredSeriesName } = useHoveredSeries();
45
+ // the x-axes' ranges: built once, and mutated in place by the zoom and pan handlers (and
46
+ // re-pointed at the view driver's map by `updateTimingAndPlot`)
47
+ const timeRangesRef = useRef(new Map());
48
+ // map(axis_id -> current_time), recorded by the view driver; the zoom pivots on it while
49
+ // running. Empty (rather than 0 per axis) until the driver records a time, so that the zoom
50
+ // pivot falls back to the axis' own domain
51
+ const currentTimeRef = useRef(new Map());
52
+ // the axes' true original (un-zoomed) bounds, which a zoom reset restores, and each axis' pinned
53
+ // start time for SQUEEZE -- captured when the data source is handed to the plot (see
54
+ // `resetForNewData`), rather than via a `useMemo` on the axes context, which re-samples the
55
+ // ranges' `.original` as auto-scroll moves it
56
+ const initialAxisIntervalsRef = useRef(new Map());
57
+ const initialTimesRef = useRef(new Map());
58
+ // the latest draw and axis-range-update functions (called from the view driver, and the zoom
59
+ // and pan handlers)
60
+ const updatePlotRef = useRef(updatePlot);
61
+ useEffect(() => {
62
+ updatePlotRef.current = updatePlot;
63
+ }, [updatePlot]);
64
+ const updateAxisRangesRef = useRef(updateAxisRanges);
65
+ useEffect(() => {
66
+ updateAxisRangesRef.current = updateAxisRanges;
67
+ }, [updateAxisRanges]);
68
+ // reports the axes' intervals to the chart's `onUpdateAxesBounds`, at most once per animation
69
+ // frame (zooming and panning fire many events per gesture, and the callback generally updates
70
+ // the application's state). Coalescing loses nothing: the deferred notification reports the
71
+ // *latest* ranges (`pendingRangesRef`), not those of the call that scheduled it -- the ranges
72
+ // map is sometimes replaced (e.g. on a reset), and reporting a stale map would write stale
73
+ // intervals into the application's state.
74
+ const notifyIntervalsRef = useRef(noop);
75
+ const notifyFrameRef = useRef(0);
76
+ const pendingRangesRef = useRef(new Map());
77
+ useEffect(() => {
78
+ notifyIntervalsRef.current = onUpdateAxesInterval === undefined ?
79
+ noop :
80
+ ranges => {
81
+ pendingRangesRef.current = ranges;
82
+ if (notifyFrameRef.current !== 0)
83
+ return;
84
+ notifyFrameRef.current = requestAnimationFrame(() => {
85
+ notifyFrameRef.current = 0;
86
+ onUpdateAxesInterval(currentIntervalsFrom(pendingRangesRef.current));
87
+ });
88
+ };
89
+ }, [onUpdateAxesInterval]);
90
+ // don't leave a scheduled notification pointing at an unmounted plot
91
+ useEffect(() => () => {
92
+ if (notifyFrameRef.current !== 0) {
93
+ cancelAnimationFrame(notifyFrameRef.current);
94
+ notifyFrameRef.current = 0;
95
+ }
96
+ }, []);
97
+ // new x-axes: forget the current times (see `currentTimeRef`)
98
+ useEffect(() => {
99
+ currentTimeRef.current = new Map();
100
+ }, [xAxesState]);
101
+ // highlights the hovered series' x- and y-axes, and un-highlights them (in the effect's
102
+ // cleanup) when the hover moves to a different series, or ends
103
+ useEffect(() => {
104
+ if (!highlightAxesOnMouseOver || hoveredSeriesName === null)
105
+ return;
106
+ const assignment = axisAssignments.get(hoveredSeriesName);
107
+ const xAxis = xAxesState.axisFor((assignment === null || assignment === void 0 ? void 0 : assignment.xAxis) || "").getOrUndefined();
108
+ const yAxis = yAxesState.axisFor((assignment === null || assignment === void 0 ? void 0 : assignment.yAxis) || "").getOrUndefined();
109
+ const { highlightColor, highlightWidth } = seriesStyles.get(hoveredSeriesName) || defaultLineStyle();
110
+ xAxis === null || xAxis === void 0 ? void 0 : xAxis.setHighlighted(true, highlightColor, highlightWidth);
111
+ yAxis === null || yAxis === void 0 ? void 0 : yAxis.setHighlighted(true, highlightColor, highlightWidth);
112
+ return () => {
113
+ xAxis === null || xAxis === void 0 ? void 0 : xAxis.setHighlighted(false);
114
+ yAxis === null || yAxis === void 0 ? void 0 : yAxis.setHighlighted(false);
115
+ };
116
+ }, [highlightAxesOnMouseOver, hoveredSeriesName, axisAssignments, xAxesState, yAxesState, seriesStyles]);
117
+ // the distinct x-axes that the series use
118
+ const axesForSeries = useMemo(() => axesForSeriesGen(initialData, axisAssignments, xAxesState), [initialData, axisAssignments, xAxesState]);
119
+ // hands new ranges to the axes, makes them the plot's ranges (see `timeRangesRef`), redraws the
120
+ // plot, and reports the axes' intervals
121
+ const updateTimingAndPlot = useCallback((ranges) => {
122
+ if (canvasContext === null)
123
+ return;
124
+ updateAxisRangesRef.current(ranges);
125
+ timeRangesRef.current = ranges;
126
+ updatePlotRef.current(canvasContext);
127
+ notifyIntervalsRef.current(ranges);
128
+ }, [canvasContext]);
129
+ // a new data source (new initial data): resets the plot's data, the current times, and the
130
+ // original bounds (for a zoom reset), and starts each axis at the data's first time. (An effect
131
+ // event, so that it runs only when the initial data changes, with the latest everything else.)
132
+ const resetForNewData = useEffectEvent(() => {
133
+ onDataReset();
134
+ currentTimeRef.current = new Map();
135
+ const freshRanges = continuousAxisRanges(xAxesState.axes);
136
+ initialAxisIntervalsRef.current = new Map(Array.from(freshRanges.entries()).map(([id, range]) => [id, range.original.asTuple()]));
137
+ initialTimesRef.current = new Map(Array.from(freshRanges.entries()).map(([id, range]) => [id, range.original.start]));
138
+ updateTimingAndPlot(new Map(Array.from(freshRanges.entries()).map(([id, range]) => {
139
+ const [start, end] = range.original.asTuple();
140
+ const firstTime = initialData
141
+ .filter(series => { var _a; return ((_a = axisAssignments.get(series.name)) === null || _a === void 0 ? void 0 : _a.xAxis) === id; })
142
+ .reduce((tMin, series) => Math.min(tMin, !series.isEmpty() ? timeOf(series.data[0]) : tMin), Infinity);
143
+ const startTime = firstTime === Infinity ? 0 : firstTime;
144
+ return [id, ContinuousAxisRange.from(startTime, startTime + end - start)];
145
+ })));
146
+ });
147
+ useEffect(() => {
148
+ resetForNewData();
149
+ }, [initialData]);
150
+ // pans the axes (in place) by the dragged amount
151
+ const onPan = useCallback((x, ranges) => panHandler(axesForSeries, margin, setAxisIntervalFor, xAxesState)(x, plotDimensions, ranges), [axesForSeries, margin, setAxisIntervalFor, xAxesState, plotDimensions]);
152
+ // zooms the axes (in place) by the incremental zoom factor, around each axis's pivot
153
+ const onZoom = useCallback((zoomFactor, pivotFor, ranges) => continuousAxisZoomHandler(axesForSeries, margin, setAxisIntervalFor, xAxesState)(zoomFactor, pivotFor, plotDimensions, ranges), [axesForSeries, margin, setAxisIntervalFor, xAxesState, plotDimensions]);
154
+ // what the zoom pivots on: while running, each axis's "now" (so the newest data stays put,
155
+ // whether or not the axis has started scrolling yet -- falling back to the axis' right edge
156
+ // until the view driver records a time); while paused, the mouse
157
+ const zoomPivotFor = useCallback((offsetX) => running ?
158
+ (axisId, axis) => { var _a; return (_a = currentTimeRef.current.get(axisId)) !== null && _a !== void 0 ? _a : axis.scale.domain()[1]; } :
159
+ (_axisId, axis) => axis.scale.invert(offsetX - margin.left), [running, margin]);
160
+ useCanvasZoomPan(canvasContext, {
161
+ panEnabled,
162
+ zoomEnabled,
163
+ keyModifiersRequired: zoomKeyModifiersRequired,
164
+ scaleExtent: [0, 10],
165
+ translateExtent: [[margin.left, margin.top], [plotDimensions.width, plotDimensions.height]],
166
+ // (tooltips are suppressed while panning, so that one isn't left behind)
167
+ onPanStart: () => {
168
+ if (allowTooltipRef !== undefined)
169
+ allowTooltipRef.current = false;
170
+ },
171
+ onPan: dx => {
172
+ if (canvasContext === null)
173
+ return;
174
+ onPan(dx, timeRangesRef.current);
175
+ updatePlotRef.current(canvasContext);
176
+ // the pan updated the axes' ranges in place, so report the new intervals
177
+ notifyIntervalsRef.current(timeRangesRef.current);
178
+ },
179
+ onPanEnd: () => {
180
+ var _a;
181
+ if (allowTooltipRef !== undefined)
182
+ allowTooltipRef.current = !((_a = dataSource === null || dataSource === void 0 ? void 0 : dataSource.running) !== null && _a !== void 0 ? _a : false);
183
+ },
184
+ onZoom: ({ factor, x }) => {
185
+ if (canvasContext === null)
186
+ return;
187
+ onZoom(factor, zoomPivotFor(x), timeRangesRef.current);
188
+ updatePlotRef.current(canvasContext);
189
+ // the zoom updated the axes' ranges in place, so report the new intervals
190
+ notifyIntervalsRef.current(timeRangesRef.current);
191
+ },
192
+ onZoomReset,
193
+ // restores each axis to its true original bounds (see `initialAxisIntervalsRef`), and does
194
+ // a full sync (through `updateTimingAndPlot`), so that the AxesProvider's own ranges pick up
195
+ // the reset `.original` too -- otherwise a reset while paused (with no ticks left to resync
196
+ // them) would leave them at the zoomed bounds, which a store-backed domain then reads back
197
+ resetView: () => {
198
+ initialAxisIntervalsRef.current.forEach(([start, end], axisId) => {
199
+ timeRangesRef.current.set(axisId, ContinuousAxisRange.from(start, end));
200
+ xAxesState.axisFor(axisId).ifPresent(axis => axis.update(AxisInterval.from(start, end), plotDimensions, margin));
201
+ });
202
+ updateTimingAndPlot(timeRangesRef.current);
203
+ },
204
+ });
205
+ // keeps the ranges in step with the axes when the canvas, the axes, or the plot's dimensions
206
+ // change (creating them the first time, and afterward updating them in place, so that their
207
+ // `.original` -- and the map's identity -- survive), and redraws
208
+ useEffect(() => {
209
+ if (canvasContext === null)
210
+ return;
211
+ if (timeRangesRef.current.size === 0) {
212
+ continuousAxisRanges(xAxesState.axes).forEach((range, id) => timeRangesRef.current.set(id, range));
213
+ }
214
+ else {
215
+ const intervals = continuousAxisIntervals(xAxesState.axes);
216
+ timeRangesRef.current.forEach((range, id, rangesMap) => {
217
+ const [start, end] = Optional.ofNullable(intervals.get(id))
218
+ .map(interval => interval.asTuple())
219
+ .getOrThrow(() => new Error(`Unable to retrieve interval for axis; axis_id: ${id}`));
220
+ if (!isNaN(start) && !isNaN(end)) {
221
+ rangesMap.set(id, range.update(start, end));
222
+ }
223
+ });
224
+ }
225
+ updatePlot(canvasContext);
226
+ }, [chartId, color, canvasContext, plotDimensions, updatePlot, xAxesState]);
227
+ // the latest `updateTimingAndPlot`, for the view driver (created once per run) to call
228
+ const updateTimingAndPlotRef = useRef(updateTimingAndPlot);
229
+ useEffect(() => {
230
+ updateTimingAndPlotRef.current = updateTimingAndPlot;
231
+ }, [updateTimingAndPlot]);
232
+ // creates the view driver, with the current settings (an effect event, so that the driver is
233
+ // created only when the run starts, with the settings as they are then)
234
+ const createViewDriver = useEffectEvent((source) => timeAxisViewDriverFor(source, xAxesState, axisTimesFor, ranges => updateTimingAndPlotRef.current(ranges), (axisId, end) => currentTimeRef.current.set(axisId, end), {
235
+ windowingTime,
236
+ dataUpdatePeriod,
237
+ cadencePeriod: withCadenceOf,
238
+ timeWindowBehavior,
239
+ initialTimes: initialTimesRef.current,
240
+ }));
241
+ // while the data source runs (and the plot has a canvas and x-axes), drives the view from the
242
+ // data source's updates. The driver belongs to this plot alone, and is always torn down with it.
243
+ const hasXAxes = xAxesState.axes.size > 0;
244
+ useEffect(() => {
245
+ if (dataSource === undefined || !running || canvasContext === null || !hasXAxes)
246
+ return;
247
+ if (allowTooltipRef !== undefined)
248
+ allowTooltipRef.current = false;
249
+ const driver = createViewDriver(dataSource);
250
+ return () => {
251
+ driver.unsubscribe();
252
+ if (allowTooltipRef !== undefined)
253
+ allowTooltipRef.current = true;
254
+ };
255
+ }, [dataSource, running, canvasContext, hasXAxes, allowTooltipRef]);
256
+ }
257
+ //# sourceMappingURL=useStreamingTimeAxes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStreamingTimeAxes.js","sourceRoot":"","sources":["../../../../src/app/charts/plots/useStreamingTimeAxes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AAC9F,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAC;AACnC,OAAO,EACH,gBAAgB,EAEhB,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EACzB,gBAAgB,EAChB,UAAU,GAEb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAC,mBAAmB,EAAC,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAoB,qBAAqB,EAAE,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAC1G,OAAO,EAAC,IAAI,EAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAsB,oBAAoB,EAAC,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAyEpD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,oBAAoB,CAA0B,OAAwC;IAClG,MAAM,EACF,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EACtF,UAAU,EAAE,WAAW,EAAE,eAAe,EACxC,UAAU,EAAE,WAAW,EAAE,wBAAwB,EAAE,WAAW,EAC9D,aAAa,EAAE,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,EAC7D,wBAAwB,GAC3B,GAAG,OAAO,CAAA;IAEX,MAAM,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAC,GAAG,QAAQ,EAA2E,CAAA;IAChI,MAAM,EAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,GAAG,IAAI,EAAE,oBAAoB,EAAC,GAAG,IAAI,CAAA;IACxG,MAAM,EAAC,cAAc,EAAE,MAAM,EAAC,GAAG,iBAAiB,EAAE,CAAA;IACpD,MAAM,EAAC,aAAa,EAAE,gBAAgB,EAAC,GAAG,oBAAoB,EAAE,CAAA;IAChE,MAAM,EAAC,iBAAiB,EAAC,GAAG,gBAAgB,EAAE,CAAA;IAE9C,yFAAyF;IACzF,gEAAgE;IAChE,MAAM,aAAa,GAAG,MAAM,CAAmC,IAAI,GAAG,EAAE,CAAC,CAAA;IACzE,yFAAyF;IACzF,4FAA4F;IAC5F,2CAA2C;IAC3C,MAAM,cAAc,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE,CAAC,CAAA;IAC7D,iGAAiG;IACjG,qFAAqF;IACrF,4FAA4F;IAC5F,8CAA8C;IAC9C,MAAM,uBAAuB,GAAG,MAAM,CAA4C,IAAI,GAAG,EAAE,CAAC,CAAA;IAC5F,MAAM,eAAe,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE,CAAC,CAAA;IAE9D,6FAA6F;IAC7F,oBAAoB;IACpB,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;IACxC,SAAS,CAAC,GAAG,EAAE;QACX,aAAa,CAAC,OAAO,GAAG,UAAU,CAAA;IACtC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAChB,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACpD,SAAS,CAAC,GAAG,EAAE;QACX,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAA;IAClD,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAEtB,8FAA8F;IAC9F,8FAA8F;IAC9F,4FAA4F;IAC5F,8FAA8F;IAC9F,2FAA2F;IAC3F,0CAA0C;IAC1C,MAAM,kBAAkB,GAAG,MAAM,CAAqD,IAAI,CAAC,CAAA;IAC3F,MAAM,cAAc,GAAG,MAAM,CAAS,CAAC,CAAC,CAAA;IACxC,MAAM,gBAAgB,GAAG,MAAM,CAAmC,IAAI,GAAG,EAAE,CAAC,CAAA;IAC5E,SAAS,CAAC,GAAG,EAAE;QACX,kBAAkB,CAAC,OAAO,GAAG,oBAAoB,KAAK,SAAS,CAAC,CAAC;YAC7D,IAAI,CAAC,CAAC;YACN,MAAM,CAAC,EAAE;gBACL,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAA;gBACjC,IAAI,cAAc,CAAC,OAAO,KAAK,CAAC;oBAAE,OAAM;gBACxC,cAAc,CAAC,OAAO,GAAG,qBAAqB,CAAC,GAAG,EAAE;oBAChD,cAAc,CAAC,OAAO,GAAG,CAAC,CAAA;oBAC1B,oBAAoB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;gBACxE,CAAC,CAAC,CAAA;YACN,CAAC,CAAA;IACT,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAC1B,qEAAqE;IACrE,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;QACjB,IAAI,cAAc,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAC/B,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YAC5C,cAAc,CAAC,OAAO,GAAG,CAAC,CAAA;QAC9B,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,8DAA8D;IAC9D,SAAS,CAAC,GAAG,EAAE;QACX,cAAc,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;IACtC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEhB,wFAAwF;IACxF,+DAA+D;IAC/D,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,wBAAwB,IAAI,iBAAiB,KAAK,IAAI;YAAE,OAAM;QACnE,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QACzD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,KAAI,EAAE,CAAC,CAAC,cAAc,EAAE,CAAA;QAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,KAAI,EAAE,CAAC,CAAC,cAAc,EAAE,CAAA;QAC1E,MAAM,EAAC,cAAc,EAAE,cAAc,EAAC,GAAG,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,gBAAgB,EAAE,CAAA;QAClG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;QAC3D,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;QAC3D,OAAO,GAAG,EAAE;YACR,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAC,KAAK,CAAC,CAAA;YAC5B,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC,CAAA;IACL,CAAC,EAAE,CAAC,wBAAwB,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;IAExG,0CAA0C;IAC1C,MAAM,aAAa,GAAG,OAAO,CACzB,GAAkB,EAAE,CAAC,gBAAgB,CAA2B,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,EACzG,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAC7C,CAAA;IAED,gGAAgG;IAChG,wCAAwC;IACxC,MAAM,mBAAmB,GAAG,WAAW,CACnC,CAAC,MAAwC,EAAQ,EAAE;QAC/C,IAAI,aAAa,KAAK,IAAI;YAAE,OAAM;QAClC,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACnC,aAAa,CAAC,OAAO,GAAG,MAAM,CAAA;QAC9B,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACpC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC,EACD,CAAC,aAAa,CAAC,CAClB,CAAA;IAED,2FAA2F;IAC3F,gGAAgG;IAChG,+FAA+F;IAC/F,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,EAAE;QACxC,WAAW,EAAE,CAAA;QACb,cAAc,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;QAElC,MAAM,WAAW,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACzD,uBAAuB,CAAC,OAAO,GAAG,IAAI,GAAG,CACrC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CACzF,CAAA;QACD,eAAe,CAAC,OAAO,GAAG,IAAI,GAAG,CAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACrF,CAAA;QAED,mBAAmB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9E,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;YAC7C,MAAM,SAAS,GAAG,WAAW;iBACxB,MAAM,CAAC,MAAM,CAAC,EAAE,WAAC,OAAA,CAAA,MAAA,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,0CAAE,KAAK,MAAK,EAAE,CAAA,EAAA,CAAC;iBAChE,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC1G,MAAM,SAAS,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACxD,OAAO,CAAC,EAAE,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAC,CAAC,CAAA;IACR,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACX,eAAe,EAAE,CAAA;IACrB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAEjB,iDAAiD;IACjD,MAAM,KAAK,GAAG,WAAW,CACrB,CAAC,CAAS,EAAE,MAAwC,EAAE,EAAE,CACpD,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAChG,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,CAAC,CAC1E,CAAA;IAED,qFAAqF;IACrF,MAAM,MAAM,GAAG,WAAW,CACtB,CAAC,UAAkB,EAAE,QAAiE,EAAE,MAAwC,EAAE,EAAE,CAChI,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,EAClI,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,CAAC,CAC1E,CAAA;IAED,2FAA2F;IAC3F,4FAA4F;IAC5F,iEAAiE;IACjE,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,OAAe,EAA2D,EAAE,CACzE,OAAO,CAAC,CAAC;QACL,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,WAAC,OAAA,MAAA,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,mCAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;QAChF,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,EACnE,CAAC,OAAO,EAAE,MAAM,CAAC,CACpB,CAAA;IAED,gBAAgB,CAAC,aAAa,EAAE;QAC5B,UAAU;QACV,WAAW;QACX,oBAAoB,EAAE,wBAAwB;QAC9C,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACpB,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3F,yEAAyE;QACzE,UAAU,EAAE,GAAG,EAAE;YACb,IAAI,eAAe,KAAK,SAAS;gBAAE,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;QACtE,CAAC;QACD,KAAK,EAAE,EAAE,CAAC,EAAE;YACR,IAAI,aAAa,KAAK,IAAI;gBAAE,OAAM;YAClC,KAAK,CAAC,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;YAChC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;YACpC,yEAAyE;YACzE,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACrD,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;;YACX,IAAI,eAAe,KAAK,SAAS;gBAAE,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,mCAAI,KAAK,CAAC,CAAA;QAChG,CAAC;QACD,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,CAAC,EAAC,EAAE,EAAE;YACpB,IAAI,aAAa,KAAK,IAAI;gBAAE,OAAM;YAClC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;YACtD,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;YACpC,0EAA0E;YAC1E,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACrD,CAAC;QACD,WAAW;QACX,2FAA2F;QAC3F,6FAA6F;QAC7F,4FAA4F;QAC5F,2FAA2F;QAC3F,SAAS,EAAE,GAAG,EAAE;YACZ,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC7D,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;gBACvE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAChC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,CAC7E,CAAA;YACL,CAAC,CAAC,CAAA;YACF,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC9C,CAAC;KACJ,CAAC,CAAA;IAEF,6FAA6F;IAC7F,4FAA4F;IAC5F,iEAAiE;IACjE,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,aAAa,KAAK,IAAI;YAAE,OAAM;QAClC,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAA;QACtG,CAAC;aAAM,CAAC;YACJ,MAAM,SAAS,GAAG,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAC1D,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;gBACnD,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBACtD,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;qBACnC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,kDAAkD,EAAE,EAAE,CAAC,CAAC,CAAA;gBACxF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;gBAC/C,CAAC;YACL,CAAC,CAAC,CAAA;QACN,CAAC;QACD,UAAU,CAAC,aAAa,CAAC,CAAA;IAC7B,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAA;IAE3E,uFAAuF;IACvF,MAAM,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAC1D,SAAS,CAAC,GAAG,EAAE;QACX,sBAAsB,CAAC,OAAO,GAAG,mBAAmB,CAAA;IACxD,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAEzB,6FAA6F;IAC7F,wEAAwE;IACxE,MAAM,gBAAgB,GAAG,cAAc,CACnC,CAAC,MAAkC,EAAE,EAAE,CAAC,qBAAqB,CACzD,MAAM,EAAE,UAAU,EAAE,YAAY,EAChC,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,EAChD,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EACxD;QACI,aAAa;QACb,gBAAgB;QAChB,aAAa,EAAE,aAAa;QAC5B,kBAAkB;QAClB,YAAY,EAAE,eAAe,CAAC,OAAO;KACxC,CACJ,CACJ,CAAA;IAED,8FAA8F;IAC9F,iGAAiG;IACjG,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;IACzC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,IAAI,aAAa,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAM;QACvF,IAAI,eAAe,KAAK,SAAS;YAAE,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;QAClE,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;QAC3C,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,WAAW,EAAE,CAAA;YACpB,IAAI,eAAe,KAAK,SAAS;gBAAE,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;QACrE,CAAC,CAAA;IACL,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAA;AACvE,CAAC"}
@@ -1,38 +1,90 @@
1
- import { Result } from "result-fn";
1
+ import { type Result } from "result-fn";
2
+ import { FastShiftArray } from "fast-shift-array";
2
3
  /**
3
- * A spike series holding an array of spike (time, value) datum, the name and supplemental information
4
- * needed by the `RasterChart`
4
+ * A named series of data, the basis of every chart's series. Its data is held in a
5
+ * `FastShiftArray`, so that the oldest data can be dropped from its head cheaply as new data
6
+ * streams in.
7
+ * @template D The type of the series' datum
5
8
  */
6
9
  export interface BaseSeries<D> {
10
+ /**
11
+ * The name of the series (unique within a chart)
12
+ */
7
13
  readonly name: string;
8
- data: Array<D>;
14
+ /**
15
+ * The series' data, ordered by time
16
+ */
17
+ data: FastShiftArray<D>;
18
+ /**
19
+ * @return The last datum, or a failure when the series is empty
20
+ */
9
21
  readonly last: () => Result<D, string>;
22
+ /**
23
+ * @return The number of data in the series
24
+ */
10
25
  readonly length: () => number;
26
+ /**
27
+ * @return `true` when the series has no data; `false` otherwise
28
+ */
11
29
  readonly isEmpty: () => boolean;
12
30
  }
31
+ /**
32
+ * Default number of shifts a series' backing `FastShiftArray` accumulates before it's compacted,
33
+ * used whenever a caller doesn't specify one explicitly. This is deliberately much lower than
34
+ * `FastShiftArray`'s own default of 100,000: compaction is a single, blocking O(n) operation (it
35
+ * splices out all the accumulated dead slots in one call), so with the default threshold, a
36
+ * long-running streaming chart hits one large, very perceptible stutter once cumulative shifts
37
+ * cross 100,000 -- visible as a sudden jump/lag rather than a gradual slowdown. Compacting more
38
+ * often, on a much smaller batch each time, trades that one large pause for many much smaller
39
+ * (and much less noticeable) ones spread across the session.
40
+ *
41
+ * If a particular use case genuinely prefers fewer, larger pauses (e.g. a non-interactive/batch
42
+ * context where per-call overhead matters more than pause smoothness), pass a larger
43
+ * `compactingSize` explicitly to `seriesFrom`/`emptySeries`/`emptySeriesFor`.
44
+ */
45
+ export declare const DEFAULT_COMPACTING_SIZE = 10000;
13
46
  /**
14
47
  * Creates a series from the name and the optional array of `Datum`.
48
+ *
49
+ * **Ownership warning:** when `data` is a plain array (or already a {@link FastShiftArray}), it is
50
+ * wrapped **by reference**, not copied -- the returned series' backing storage *is* that same
51
+ * array/`FastShiftArray`. As the chart streams in new data and ages old data out, the library calls
52
+ * `shift()` on it (clearing the head slot, and periodically `splice`-ing it during compaction),
53
+ * mutating it in place. If you keep your own reference to the array you pass in (to reuse,
54
+ * snapshot, or compare later), you will see it change out from under you. If you need an
55
+ * independent copy, pass `data.slice()` instead -- see e.g. `StreamingBarChart.tsx`,
56
+ * `StreamingRasterChart.tsx`, and `StreamingPoincareChart.tsx`, which all do this when re-deriving
57
+ * initial series from data they still hold a reference to elsewhere.
15
58
  * @param name The name of the series (i.e. neuron)
16
59
  * @param data The array of datum, which could be `(t, f(t))`, or `(f[n](x), f[n+1](x))`
17
- * @return A {@link BaseSeries} for object that can be used by in {@link Chart}s
60
+ * @param compactingSize The number of shifts the series' backing array accumulates before it's
61
+ * compacted (see {@link DEFAULT_COMPACTING_SIZE}). Only applies when `data` is a plain array (and
62
+ * so a new `FastShiftArray` is created for it) -- ignored when `data` is already a `FastShiftArray`,
63
+ * since compaction size is fixed at that instance's own construction time.
64
+ * @return A {@link BaseSeries} that can be used in {@link Chart}s
18
65
  * @see seriesFromTuples
19
66
  * @see emptySeries
20
67
  */
21
- export declare function seriesFrom<D>(name: string, data?: Array<D>): BaseSeries<D>;
68
+ export declare function seriesFrom<D>(name: string, data?: Array<D> | FastShiftArray<D>, compactingSize?: number): BaseSeries<D>;
22
69
  /**
23
70
  * Returns an empty series with the specified name
24
71
  * @param name The name of the series
72
+ * @param compactingSize The number of shifts the series' backing array accumulates before it's
73
+ * compacted (see {@link DEFAULT_COMPACTING_SIZE})
25
74
  * @return The empty series
26
75
  * @see seriesFrom
27
76
  * @see seriesFromTuples
28
77
  */
29
- export declare const emptySeries: <D>(name: string) => BaseSeries<D>;
78
+ export declare const emptySeries: <D>(name: string, compactingSize?: number) => BaseSeries<D>;
30
79
  /**
31
80
  * Creates an array of empty series, one for each specified name
32
81
  * @param names The names for each of the empty series
82
+ * @param compactingSize The number of shifts each series' backing array accumulates before it's
83
+ * compacted (see {@link DEFAULT_COMPACTING_SIZE})
33
84
  * @return An array of empty series with the specified names
34
85
  * @see emptySeries
35
86
  * @see seriesFrom
36
87
  * @see seriesFromTuples
37
88
  */
38
- export declare const emptySeriesFor: <D>(names: Array<string>) => Array<BaseSeries<D>>;
89
+ export declare const emptySeriesFor: <D>(names: Array<string>, compactingSize?: number) => Array<BaseSeries<D>>;
90
+ //# sourceMappingURL=baseSeries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseSeries.d.ts","sourceRoot":"","sources":["../../../../src/app/charts/series/baseSeries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAgB,MAAM,WAAW,CAAC;AACpE,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;CACnC;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,QAAS,CAAA;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAM,EACvC,cAAc,GAAE,MAAgC,GACjD,UAAU,CAAC,CAAC,CAAC,CAmBf;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,MAAM,MAAM,EAAE,iBAAgB,MAAgC,KAAG,UAAU,CAAC,CAAC,CACpE,CAAC;AAEzC;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,iBAAgB,MAAgC,KAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CACnE,CAAA"}