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,37 @@
1
+ import type {LegendStyle} from "./Legend";
2
+
3
+ /**
4
+ * The location of the legend, either in the plot or in an external container
5
+ * Note: replaces enums to support `erasableSyntaxOnly`
6
+ * TS1294: This syntax is not allowed when 'erasableSyntaxOnly' is enabled.
7
+ */
8
+ export const LegendLocation = {
9
+ // noinspection JSUnusedGlobalSymbols
10
+ TOP_LEFT: "top-left",
11
+ TOP_RIGHT: "top-right",
12
+ BOTTOM_LEFT: "bottom-left",
13
+ BOTTOM_RIGHT: "bottom-right",
14
+ EXTERNAL_CONTAINER: "external-container"
15
+ } as const
16
+ export type LegendLocation = (typeof LegendLocation)[keyof typeof LegendLocation];
17
+
18
+ /**
19
+ * The legend's default style
20
+ */
21
+ export const defaultLegendStyle: LegendStyle = {
22
+ fontSize: 12,
23
+ fontFamily: "sans-serif",
24
+ fontColor: "#d2933f",
25
+ backgroundColor: "#202020",
26
+ backgroundOpacity: 0.85,
27
+ borderColor: "#d2933f",
28
+ borderWidth: 1,
29
+ borderOpacity: 0.7,
30
+ borderRadius: 4,
31
+ padding: 8,
32
+ rowGap: 6,
33
+ swatchWidth: 16,
34
+ swatchHeight: 3,
35
+ swatchLabelGap: 6,
36
+ transitionDuration: 350,
37
+ }
@@ -8,11 +8,11 @@
8
8
  * 2. Accepts that chart-data observable and converts that observable to an iterate-chart-data observable
9
9
  */
10
10
  import {Observable} from "rxjs";
11
- import {TimeSeriesChartData} from "../series/timeSeriesChartData";
11
+ import type {TimeSeriesChartData} from "../series/timeSeriesChartData";
12
12
  import {filter, map, scan} from "rxjs/operators";
13
- import {Datum, emptyDatum} from "../series/timeSeries";
14
- import {emptyIterateDatum, IterateDatum, iterateDatumOf, nonEmptyIterateDatum} from "../series/iterateSeries";
15
- import {ChartData, copyChartData, defaultChartData} from "./ChartData";
13
+ import {type Datum, emptyDatum} from "../series/timeSeries";
14
+ import {emptyIterateDatum, type IterateDatum, iterateDatumOf, nonEmptyIterateDatum} from "../series/iterateSeries";
15
+ import {type ChartData, copyChartData, defaultChartData} from "./ChartData";
16
16
 
17
17
 
18
18
  export interface IterateChartData extends ChartData {
@@ -27,12 +27,14 @@ export interface IterateChartData extends ChartData {
27
27
  maxIterate: IterateDatum
28
28
 
29
29
  /**
30
- * Holds the association of the series name to the current min time for that series
30
+ * Holds the association of the series name to the min values for (time, iterate n, and
31
+ * iterate n+1) for that series
31
32
  */
32
33
  minIterates: Map<string, IterateDatum>
33
34
 
34
35
  /**
35
- * Holds the association of the series name to the current max time for that series
36
+ * Holds the association of the series name to the max values for (time, iterate n, and
37
+ * iterate n+1) for that series
36
38
  */
37
39
  maxIterates: Map<string, IterateDatum>
38
40
 
@@ -43,6 +45,9 @@ export interface IterateChartData extends ChartData {
43
45
  newPoints: Map<string, Array<IterateDatum>>
44
46
  }
45
47
 
48
+ /**
49
+ * @return Iterate chart data without any series or points, and with empty min and max iterates
50
+ */
46
51
  const emptyIterateData = (): IterateChartData => ({
47
52
  ...defaultChartData(),
48
53
  minIterate: emptyIterateDatum,
@@ -53,8 +58,10 @@ const emptyIterateData = (): IterateChartData => ({
53
58
  })
54
59
 
55
60
  /**
56
- * Makes a deep copy of the iterate chart data
61
+ * Makes a copy of the iterate chart data: new sets, maps, and arrays of points (the points
62
+ * themselves are shared)
57
63
  * @param data The iterate chart data to copy
64
+ * @return The copy
58
65
  */
59
66
  export const copyIterateDataFrom = (data: IterateChartData): IterateChartData => ({
60
67
  ...copyChartData(data),
@@ -65,12 +72,19 @@ export const copyIterateDataFrom = (data: IterateChartData): IterateChartData =>
65
72
  newPoints: new Map<string, Array<IterateDatum>>(Array.from(data.newPoints.entries()).map(([name, points]) => [name, points.slice()])),
66
73
  })
67
74
 
75
+ // the state accumulated, from one chunk of time-series chart data to the next, while calculating
76
+ // the iterates: the iterate distance, the points not yet paired up (by series), and the iterates
68
77
  type Accumulator = {
69
78
  n: number
70
79
  previous: Map<string, Array<Datum>>
71
80
  accumulated: IterateChartData
72
81
  }
73
82
 
83
+ /**
84
+ * The accumulator to start calculating the n-iterates from
85
+ * @param n The iterate distance
86
+ * @return An accumulator with no points and no iterates
87
+ */
74
88
  const initialAccumulate = (n: number): Accumulator => ({n, previous: new Map(), accumulated: emptyIterateData()})
75
89
 
76
90
  /**
@@ -81,7 +95,8 @@ const initialAccumulate = (n: number): Accumulator => ({n, previous: new Map(),
81
95
  * points `(f[m](x), f[m+n](x))` are n-iterates.
82
96
  * @param dataObservable The observable over {@link TimeSeriesChartData}
83
97
  * @param [n=1] The iterate distance
84
- * @return An over {@link IterateChartData} holding the n-iterate for the incoming chart data
98
+ * @return An observable over {@link IterateChartData} holding the n-iterate for the incoming chart
99
+ * data (nothing is emitted until the first iterate has been calculated)
85
100
  */
86
101
  export function iteratesObservable(dataObservable: Observable<TimeSeriesChartData>, n: number = 1): Observable<IterateChartData> {
87
102
  return dataObservable
@@ -117,7 +132,7 @@ export function iteratesObservable(dataObservable: Observable<TimeSeriesChartDat
117
132
  previous.set(name, updated)
118
133
 
119
134
  // create the new iterate
120
- const iterate: IterateDatum = iterateDatumOf(first.time, first.value, last.value);
135
+ const iterate: IterateDatum = iterateDatumOf(first.x, first.y, last.y);
121
136
 
122
137
  // update the min, max values for all the series
123
138
  accum.minIterate = minIterateFor(iterate, accum.minIterate)
@@ -128,8 +143,7 @@ export function iteratesObservable(dataObservable: Observable<TimeSeriesChartDat
128
143
  accum.maxIterates.set(name, maxIterateFor(iterate, accum.maxIterates.get(name)))
129
144
 
130
145
  // add the newly calculated iterate, and then trim from the
131
- // head of the array to a size n. For the iterates, we only need
132
- // to keep enough to create points (x(j), x(j+n))
146
+ // head of the array to the number of points in this chunk
133
147
  const updatedPoints = accum.newPoints.get(name) || []
134
148
  if (updatedPoints.length === 0) {
135
149
  accum.newPoints.set(name, updatedPoints)
@@ -143,7 +157,8 @@ export function iteratesObservable(dataObservable: Observable<TimeSeriesChartDat
143
157
  return {n, previous, accumulated: accum}
144
158
  }, initialAccumulate(n)),
145
159
 
146
- // remove new points from the map that are empty
160
+ // skip the chunks until the first iterate has been calculated, and remove the empty
161
+ // new points
147
162
  filter(accum => !isNaN(accum.accumulated.minIterate.iterateN) && !isNaN(accum.accumulated.minIterate.iterateN_1)),
148
163
  map(accum => removeEmptyNewPoints(accum)),
149
164
  map(accum => accum.accumulated === undefined ? emptyIterateData() : accum.accumulated)
@@ -186,6 +201,11 @@ function maxIterateFor(iterate: IterateDatum, maxIterate: IterateDatum = emptyIt
186
201
  }
187
202
  }
188
203
 
204
+ /**
205
+ * Removes the empty iterates from the accumulated new points
206
+ * @param accum The accumulator
207
+ * @return A new accumulator, whose accumulated new points are the non-empty ones
208
+ */
189
209
  function removeEmptyNewPoints(accum: Accumulator): Accumulator {
190
210
  const newPoints = new Map(
191
211
  Array
@@ -5,16 +5,18 @@
5
5
  * 2. Accepts that chart-data observable and converts that observable to an ordinal-chart-data observable
6
6
  */
7
7
  import {Observable} from "rxjs";
8
- import {TimeSeriesChartData} from "../series/timeSeriesChartData";
8
+ import type {TimeSeriesChartData} from "../series/timeSeriesChartData";
9
9
  import {map, scan} from "rxjs/operators";
10
- import {Datum} from "../series/timeSeries";
11
- import {copyOrdinalDatum, nonEmptyOrdinalDatum, OrdinalDatum, ordinalDatumOf} from "../series/ordinalSeries";
12
- import {ChartData, copyChartData, defaultChartData} from "./ChartData";
10
+ import type {Datum} from "../series/timeSeries";
11
+ import {copyOrdinalDatum, nonEmptyOrdinalDatum, type OrdinalDatum, ordinalDatumOf} from "../series/ordinalSeries";
12
+ import {type ChartData, copyChartData, defaultChartData} from "./ChartData";
13
+ import {FastShiftArray} from "fast-shift-array";
14
+ import {DEFAULT_COMPACTING_SIZE} from "../series/baseSeries";
13
15
 
14
16
  export interface OrdinalChartData extends ChartData {
15
17
  /**
16
18
  * Statistics for the chart. Holds the overall minimum and maximum (across all
17
- * the series), and statistics for each individual series.
19
+ * the series), and statistics for each series.
18
20
  */
19
21
  stats: OrdinalStats
20
22
 
@@ -22,7 +24,8 @@ export interface OrdinalChartData extends ChartData {
22
24
  * Map holding the name of the series (the time-series identifier) and the associated
23
25
  * data points for that time-series (`map(series_name -> array(datum))`)
24
26
  */
25
- newPoints: Map<string, Array<OrdinalDatum>>
27
+ // newPoints: Map<string, Array<OrdinalDatum>>
28
+ newPoints: Map<string, FastShiftArray<OrdinalDatum>>
26
29
  }
27
30
 
28
31
  /**
@@ -31,12 +34,12 @@ export interface OrdinalChartData extends ChartData {
31
34
  */
32
35
  export interface OrdinalStats {
33
36
  /**
34
- * The min values for (time, value) for the data in the newPoints map
37
+ * The data with the min time, and with the min value, over all the data so far
35
38
  */
36
39
  minDatum: OrdinalDatumExtremum
37
40
 
38
41
  /**
39
- * The max values for (time, iterate n, and iterate n+1) for the data in the newPoints map
42
+ * The data with the max time, and with the max value, over all the data so far
40
43
  */
41
44
  maxDatum: OrdinalDatumExtremum
42
45
 
@@ -46,6 +49,10 @@ export interface OrdinalStats {
46
49
  valueStatsForSeries: Map<string, OrdinalValueStats>
47
50
  }
48
51
 
52
+ /**
53
+ * Statistics about the values of a series: the data with the min and max values, the number of
54
+ * values, their sum, the sum of their squares, and their mean
55
+ */
49
56
  export type OrdinalValueStats = {
50
57
  min: OrdinalDatum
51
58
  max: OrdinalDatum
@@ -55,6 +62,9 @@ export type OrdinalValueStats = {
55
62
  mean: number
56
63
  }
57
64
 
65
+ /**
66
+ * The data with the extreme (min or max) time, and with the extreme value
67
+ */
58
68
  export type OrdinalDatumExtremum = {
59
69
  // holds the ordinal datum with the minimum or maximum time
60
70
  time: OrdinalDatum
@@ -62,30 +72,49 @@ export type OrdinalDatumExtremum = {
62
72
  value: OrdinalDatum
63
73
  }
64
74
 
75
+ /**
76
+ * @return The datum to start a search for the min value from: its value (`Infinity`) is larger
77
+ * than any other
78
+ */
65
79
  export const initialMinValueDatum = (): OrdinalDatum => ordinalDatumOf(NaN, "", Infinity)
80
+ /**
81
+ * @return The datum to start a search for the max value from: its value (`-Infinity`) is smaller
82
+ * than any other
83
+ */
66
84
  export const initialMaxValueDatum = (): OrdinalDatum => ordinalDatumOf(NaN, "", -Infinity)
67
85
 
86
+ /**
87
+ * @return The datum to start a search for the min time from: its time (`Infinity`) is later than
88
+ * any other
89
+ */
68
90
  export const initialMinTimeDatum = (): OrdinalDatum => ordinalDatumOf(Infinity, "", NaN)
91
+ /**
92
+ * @return The datum to start a search for the max time from: its time (`-Infinity`) is earlier
93
+ * than any other
94
+ */
69
95
  export const initialMaxTimeDatum = (): OrdinalDatum => ordinalDatumOf(-Infinity, "", NaN)
70
96
 
71
- export function valueStatusDatumOfDefault(datum: OrdinalDatum | undefined): OrdinalDatum {
72
- return (datum === undefined) ? ordinalDatumOf(NaN, "", NaN) : datum
73
- }
74
-
75
- export function isDefaultValueStatsDatum(datum: OrdinalDatum): boolean {
76
- return isNaN(datum.time) && datum.ordinal === "" && isNaN(datum.value)
77
- }
78
-
97
+ /**
98
+ * @return The extremum to start a search for the min time and value from
99
+ */
79
100
  const initialMinOrdinalDatum = (): OrdinalDatumExtremum => ({
80
101
  time: ordinalDatumOf(Infinity, "", NaN),
81
102
  value: initialMinValueDatum()
82
103
  })
83
104
 
105
+ /**
106
+ * @return The extremum to start a search for the max time and value from
107
+ */
84
108
  const initialMaxOrdinalDatum = (): OrdinalDatumExtremum => ({
85
109
  time: ordinalDatumOf(-Infinity, "", NaN),
86
110
  value: initialMaxValueDatum()
87
111
  })
88
112
 
113
+ /**
114
+ * Copies an extremum (and its data)
115
+ * @param datum The extremum to copy
116
+ * @return The copy
117
+ */
89
118
  export function copyOrdinalDatumExtremum(datum: OrdinalDatumExtremum): OrdinalDatumExtremum {
90
119
  return {
91
120
  time: copyOrdinalDatum(datum.time),
@@ -93,12 +122,19 @@ export function copyOrdinalDatumExtremum(datum: OrdinalDatumExtremum): OrdinalDa
93
122
  }
94
123
  }
95
124
 
125
+ /**
126
+ * @return Stats for no data: extremes to start the searches from, and no series' stats
127
+ */
96
128
  export const defaultOrdinalStats = (): OrdinalStats => ({
97
129
  minDatum: initialMinOrdinalDatum(),
98
130
  maxDatum: initialMaxOrdinalDatum(),
99
131
  valueStatsForSeries: new Map<string, OrdinalValueStats>()
100
132
  })
101
133
 
134
+ /**
135
+ * @return Value stats for no data: a count, sum, and sum of squares of 0, a `NaN` mean, and min
136
+ * and max data to start the searches from
137
+ */
102
138
  export const defaultOrdinalValueStats = (): OrdinalValueStats => ({
103
139
  min: initialMinValueDatum(),
104
140
  max: initialMaxValueDatum(),
@@ -108,6 +144,11 @@ export const defaultOrdinalValueStats = (): OrdinalValueStats => ({
108
144
  sumSquared: 0,
109
145
  })
110
146
 
147
+ /**
148
+ * Copies a series' value stats (and their min and max data)
149
+ * @param data The value stats to copy
150
+ * @return The copy
151
+ */
111
152
  export function copyOrdinalValueStats(data: OrdinalValueStats): OrdinalValueStats {
112
153
  return {
113
154
  ...data,
@@ -116,51 +157,89 @@ export function copyOrdinalValueStats(data: OrdinalValueStats): OrdinalValueStat
116
157
  }
117
158
  }
118
159
 
160
+ /**
161
+ * Copies the map of each series' value stats (and the stats)
162
+ * @param valueStats The value stats, by series name
163
+ * @return The copy
164
+ */
119
165
  export function copyValueStatsForSeries(valueStats: Map<string, OrdinalValueStats>): Map<string, OrdinalValueStats> {
120
166
  return new Map<string, OrdinalValueStats>(Array.from(valueStats.entries())
121
167
  .map(([seriesName, valueStats]) => [seriesName, copyOrdinalValueStats(valueStats)])
122
168
  )
123
169
  }
124
170
 
171
+ /**
172
+ * Copies the stats (the extremes, and each series' value stats)
173
+ * @param data The stats to copy
174
+ * @return The copy
175
+ */
125
176
  export const copyOrdinalStats = (data: OrdinalStats): OrdinalStats => ({
126
177
  minDatum: copyOrdinalDatumExtremum(data.minDatum),
127
178
  maxDatum: copyOrdinalDatumExtremum(data.maxDatum),
128
179
  valueStatsForSeries: copyValueStatsForSeries(data.valueStatsForSeries),
129
180
  })
130
181
 
182
+ /**
183
+ * @return Ordinal chart data without any series or points, and with the default stats
184
+ */
131
185
  const emptyOrdinalData = (): OrdinalChartData => ({
132
186
  ...defaultChartData(),
133
187
  stats: defaultOrdinalStats(),
134
- newPoints: new Map<string, Array<OrdinalDatum>>()
188
+ newPoints: new Map<string, FastShiftArray<OrdinalDatum>>()
189
+ // newPoints: new Map<string, Array<OrdinalDatum>>()
135
190
  })
136
191
 
137
192
  /**
138
- * Makes a deep copy of the ordinal chart data
193
+ * Makes a copy of the ordinal chart data: a new set of series names, copies of the stats, and new
194
+ * arrays of points (the points themselves are shared)
139
195
  * @param data The ordinal chart data to copy
196
+ * @return The copy
140
197
  */
141
198
  export const copyOrdinalDataFrom = (data: OrdinalChartData): OrdinalChartData => ({
142
199
  ...copyChartData(data),
143
200
  stats: copyOrdinalStats(data.stats),
144
- newPoints: new Map<string, Array<OrdinalDatum>>(Array.from(data.newPoints.entries()).map(([name, points]) => [name, points.slice()])),
201
+ newPoints: new Map<string, FastShiftArray<OrdinalDatum>>(Array.from(data.newPoints.entries()).map(([name, points]) => [name, points.slice()])),
202
+ // newPoints: new Map<string, Array<OrdinalDatum>>(Array.from(data.newPoints.entries()).map(([name, points]) => [name, points.slice()])),
145
203
  })
146
204
 
147
- type Accumulator = {
148
- previous: Map<string, Array<Datum>>
149
- accumulated: OrdinalChartData
150
- }
151
-
152
- const initialAccumulate = (): Accumulator => ({previous: new Map(), accumulated: emptyOrdinalData()})
205
+ /**
206
+ * @param initialStats Optional stats to start the accumulation from (see {@link ordinalsObservable})
207
+ * @return The initial accumulated chart data
208
+ */
209
+ const initialAccumulate = (initialStats?: OrdinalStats): OrdinalChartData =>
210
+ initialStats === undefined ?
211
+ emptyOrdinalData() :
212
+ {
213
+ ...emptyOrdinalData(),
214
+ seriesNames: new Set(initialStats.valueStatsForSeries.keys()),
215
+ stats: copyOrdinalStats(initialStats)
216
+ }
153
217
 
154
218
  /**
155
- * Accepts a {@link TimeSeriesChartData} observable and converts it to an observable of {@link OrdinalChartData}.
219
+ * Accepts a {@link TimeSeriesChartData} observable and converts it to an observable of {@link OrdinalChartData}:
220
+ * each emission holds the incoming chunk's points (as ordinal data), and the stats accumulated over
221
+ * all the data so far.
156
222
  * @param dataObservable The observable over {@link TimeSeriesChartData}
223
+ * @param [compactingSize=DEFAULT_COMPACTING_SIZE] The number of shifts a series' backing array accumulates before it's compacted
224
+ * @param initialStats Optional stats of the data that already exists (e.g. a chart's accumulated
225
+ * series, see `calculateOrdinalStats`), from which the stats accumulate -- so that the stats cover
226
+ * that data without the data having to be re-emitted through `dataObservable`
157
227
  * @return An observable of {@link OrdinalChartData} holding the series for the incoming chart data
158
228
  */
159
- export function ordinalsObservable(dataObservable: Observable<TimeSeriesChartData>): Observable<OrdinalChartData> {
229
+ export function ordinalsObservable(
230
+ dataObservable: Observable<TimeSeriesChartData>,
231
+ compactingSize: number = DEFAULT_COMPACTING_SIZE,
232
+ initialStats?: OrdinalStats,
233
+ ): Observable<OrdinalChartData> {
160
234
  return dataObservable
161
235
  .pipe(
162
- // calculate the iterates for each series in the chart data
163
- scan(({previous, accumulated}: Accumulator, current: TimeSeriesChartData) => {
236
+ // calculate the stats for each series in the chart data
237
+ //
238
+ // note: only the stats and the latest new points are accumulated -- the incoming points
239
+ // themselves aren't kept (the data source holds the series). A previous version also
240
+ // appended every incoming point to a map that nothing ever read, which grew without bound
241
+ // for as long as the stream ran (one point per series per tick).
242
+ scan((accumulated: OrdinalChartData, current: TimeSeriesChartData) => {
164
243
  // make a deep copy of the accumulated data (because the accumulated data object
165
244
  // holds references to maps)
166
245
  const accum = copyOrdinalDataFrom(accumulated)
@@ -169,51 +248,44 @@ export function ordinalsObservable(dataObservable: Observable<TimeSeriesChartDat
169
248
  Array
170
249
  .from(current.newPoints.entries())
171
250
  .forEach(([name, series]) => {
172
- // grab the points from the previous incoming data and add the new
173
- // data to the end of the previous data (when the updated data
174
- // didn't yet exist, add it to the map holding the previous series)
175
- const updated = (previous.get(name) || [])
176
- if (updated.length === 0) {
177
- previous.set(name, updated)
178
- }
179
- updated.push(...series)
180
-
181
251
  // add the series name to the list of all
182
252
  accum.seriesNames.add(name)
183
253
 
184
254
  // calculate the max-time, min-time, max-value, and min-value for
185
255
  // all the data series
186
- series.forEach(({time, value}: Datum, ) => {
256
+ series.forEach(({x, y}: Datum, ) => {
187
257
  // calculate the min and max times over all series
188
- if (time < accum.stats.minDatum.time.time) {
189
- accum.stats.minDatum.time = ordinalDatumOf(time, name, value)
190
- } else if (time > accum.stats.maxDatum.time.time) {
191
- accum.stats.maxDatum.time = ordinalDatumOf(time, name, value)
258
+ if (x < accum.stats.minDatum.time.time) {
259
+ accum.stats.minDatum.time = ordinalDatumOf(x, name, y)
260
+ }
261
+ if (x > accum.stats.maxDatum.time.time) {
262
+ accum.stats.maxDatum.time = ordinalDatumOf(x, name, y)
192
263
  }
193
264
  // calculate the min and max values over all series
194
- if (value < accum.stats.minDatum.value.value) {
195
- accum.stats.minDatum.value = ordinalDatumOf(time, name, value)
196
- } else if (value > accum.stats.maxDatum.value.value) {
197
- accum.stats.maxDatum.value = ordinalDatumOf(time, name, value)
265
+ if (y < accum.stats.minDatum.value.value) {
266
+ accum.stats.minDatum.value = ordinalDatumOf(x, name, y)
267
+ }
268
+ if (y > accum.stats.maxDatum.value.value) {
269
+ accum.stats.maxDatum.value = ordinalDatumOf(x, name, y)
198
270
  }
199
271
 
200
272
  // calculate the min, max of the time and value for each series
201
273
  let valueStats: OrdinalValueStats = accum.stats.valueStatsForSeries.get(name) || defaultOrdinalValueStats()
202
274
 
203
- const minValue = (value < valueStats.min.value) ?
204
- ordinalDatumOf(time, name, value) :
275
+ const minValue = (y < valueStats.min.value) ?
276
+ ordinalDatumOf(x, name, y) :
205
277
  copyOrdinalDatum(valueStats.min)
206
- const maxValue = (value > valueStats.max.value) ?
207
- ordinalDatumOf(time, name, value) :
278
+ const maxValue = (y > valueStats.max.value) ?
279
+ ordinalDatumOf(x, name, y) :
208
280
  copyOrdinalDatum(valueStats.max)
209
281
  const count = valueStats.count + 1
210
- const sum = valueStats.sum + value
282
+ const sum = valueStats.sum + y
211
283
  valueStats = {
212
284
  min: minValue,
213
285
  max: maxValue,
214
286
  count,
215
287
  sum,
216
- sumSquared: isNaN(valueStats.sumSquared) ? value * value : valueStats.sumSquared + value * value,
288
+ sumSquared: isNaN(valueStats.sumSquared) ? y * y : valueStats.sumSquared + y * y,
217
289
  mean: sum / count
218
290
  }
219
291
 
@@ -221,28 +293,30 @@ export function ordinalsObservable(dataObservable: Observable<TimeSeriesChartDat
221
293
  })
222
294
 
223
295
  // convert the new points to ordinal datum
224
- accum.newPoints.set(name, series.map(({time, value}: Datum) => ordinalDatumOf(time, name, value)))
296
+ accum.newPoints.set(name, FastShiftArray.fromArray(
297
+ series.map(({x, y}: Datum) => ordinalDatumOf(x, name, y)),
298
+ true,
299
+ compactingSize
300
+ ))
301
+ // accum.newPoints.set(name, series.map(({x, y}: Datum) => ordinalDatumOf(x, name, y)))
225
302
  })
226
- return {previous, accumulated: accum}
227
- }, initialAccumulate()),
303
+ return accum
304
+ }, initialAccumulate(initialStats)),
228
305
 
229
306
  // remove new points from the map that are empty
230
- map(accum => removeEmptyNewPoints(accum)),
231
- map(accum => accum.accumulated === undefined ? emptyOrdinalData() : accum.accumulated)
307
+ map(accumulated => removeEmptyNewPoints(accumulated))
232
308
  )
233
309
  }
234
310
 
235
- function removeEmptyNewPoints(accum: Accumulator): Accumulator {
311
+ /**
312
+ * @param data The ordinal chart data
313
+ * @return A copy of the chart data, without any empty new points
314
+ */
315
+ function removeEmptyNewPoints(data: OrdinalChartData): OrdinalChartData {
236
316
  const newPoints = new Map(
237
317
  Array
238
- .from(accum.accumulated.newPoints.entries())
318
+ .from(data.newPoints.entries())
239
319
  .map(([name, points]) => [name, points.filter(point => nonEmptyOrdinalDatum(point))])
240
320
  )
241
- return {
242
- previous: accum.previous,
243
- accumulated: {
244
- ...accum.accumulated,
245
- newPoints
246
- }
247
- }
321
+ return {...data, newPoints}
248
322
  }
@@ -0,0 +1,20 @@
1
+ import type {ChartData} from "./ChartData";
2
+ import type {OutlierDatum} from "../series/outlierSeries";
3
+
4
+ /**
5
+ * The chart data for outlier charts: each series' new {@link OutlierDatum}s (each a value, with
6
+ * the bands it may fall outside of)
7
+ */
8
+ export interface OutlierChartData<M extends readonly number[]> extends ChartData {
9
+
10
+ /**
11
+ * Maps the series name to the new outlier datum for that series
12
+ */
13
+ newPoints: Map<string, Array<OutlierDatum<M>>>
14
+
15
+ /**
16
+ * The current time (used with cadence, when the axes should continue to scroll even when no
17
+ * new data has arrived)
18
+ */
19
+ currentTime?: number
20
+ }