stream-charts 1.0.1 → 1.1.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 (271) hide show
  1. package/README.md +756 -343
  2. package/changes.md +7 -0
  3. package/dist/src/app/charts/Chart.d.ts +116 -87
  4. package/dist/src/app/charts/Chart.js +96 -101
  5. package/dist/src/app/charts/Chart.js.map +1 -1
  6. package/dist/src/app/charts/axes/AxesState.d.ts +64 -0
  7. package/dist/src/app/charts/axes/AxesState.js +97 -0
  8. package/dist/src/app/charts/axes/AxesState.js.map +1 -0
  9. package/dist/src/app/charts/axes/AxesState.test.js +30 -0
  10. package/dist/src/app/charts/axes/AxesState.test.js.map +1 -0
  11. package/dist/src/app/charts/axes/AxisInterval.d.ts +92 -0
  12. package/dist/src/app/charts/axes/AxisInterval.js +126 -0
  13. package/dist/src/app/charts/axes/AxisInterval.js.map +1 -0
  14. package/dist/src/app/charts/axes/AxisInterval.test.js +120 -0
  15. package/dist/src/app/charts/axes/AxisInterval.test.js.map +1 -0
  16. package/dist/src/app/charts/axes/BaseAxisRange.d.ts +83 -0
  17. package/dist/src/app/charts/axes/BaseAxisRange.js +58 -0
  18. package/dist/src/app/charts/axes/BaseAxisRange.js.map +1 -0
  19. package/dist/src/app/charts/axes/ContinuousAxis.d.ts +22 -0
  20. package/dist/src/app/charts/axes/ContinuousAxis.js +96 -0
  21. package/dist/src/app/charts/axes/ContinuousAxis.js.map +1 -0
  22. package/dist/src/app/charts/axes/ContinuousAxisRange.d.ts +59 -0
  23. package/dist/src/app/charts/axes/ContinuousAxisRange.js +84 -0
  24. package/dist/src/app/charts/axes/ContinuousAxisRange.js.map +1 -0
  25. package/dist/src/app/charts/axes/ContinuousAxisRange.test.js +47 -0
  26. package/dist/src/app/charts/axes/ContinuousAxisRange.test.js.map +1 -0
  27. package/dist/src/app/charts/axes/OrdinalAxis.d.ts +23 -0
  28. package/dist/src/app/charts/axes/OrdinalAxis.js +124 -0
  29. package/dist/src/app/charts/axes/OrdinalAxis.js.map +1 -0
  30. package/dist/src/app/charts/axes/OrdinalAxisRange.d.ts +69 -0
  31. package/dist/src/app/charts/axes/OrdinalAxisRange.js +100 -0
  32. package/dist/src/app/charts/axes/OrdinalAxisRange.js.map +1 -0
  33. package/dist/src/app/charts/axes/OrdinalAxisRange.test.js +48 -0
  34. package/dist/src/app/charts/axes/OrdinalAxisRange.test.js.map +1 -0
  35. package/dist/src/app/charts/axes/axes.d.ts +391 -0
  36. package/dist/src/app/charts/axes/axes.js +1046 -0
  37. package/dist/src/app/charts/axes/axes.js.map +1 -0
  38. package/dist/src/app/charts/d3types.d.ts +10 -10
  39. package/dist/src/app/charts/filters/regexFilter.d.ts +9 -0
  40. package/dist/src/app/charts/filters/regexFilter.js +18 -0
  41. package/dist/src/app/charts/filters/regexFilter.js.map +1 -0
  42. package/dist/src/app/charts/filters/regexFilter.test.d.ts +1 -0
  43. package/dist/src/app/charts/filters/regexFilter.test.js +11 -0
  44. package/dist/src/app/charts/filters/regexFilter.test.js.map +1 -0
  45. package/dist/src/app/charts/hooks/useAxes.d.ts +144 -0
  46. package/dist/src/app/charts/hooks/useAxes.js +187 -0
  47. package/dist/src/app/charts/hooks/useAxes.js.map +1 -0
  48. package/dist/src/app/charts/hooks/useChart.d.ts +30 -201
  49. package/dist/src/app/charts/hooks/useChart.js +33 -134
  50. package/dist/src/app/charts/hooks/useChart.js.map +1 -1
  51. package/dist/src/app/charts/hooks/useDataObservable.d.ts +74 -0
  52. package/dist/src/app/charts/hooks/useDataObservable.js +76 -0
  53. package/dist/src/app/charts/hooks/useDataObservable.js.map +1 -0
  54. package/dist/src/app/charts/hooks/useInitialData.d.ts +38 -0
  55. package/dist/src/app/charts/hooks/useInitialData.js +29 -0
  56. package/dist/src/app/charts/hooks/useInitialData.js.map +1 -0
  57. package/dist/src/app/charts/hooks/useMouse.d.ts +53 -0
  58. package/dist/src/app/charts/hooks/useMouse.js +65 -0
  59. package/dist/src/app/charts/hooks/useMouse.js.map +1 -0
  60. package/dist/src/app/charts/hooks/usePlotDimensions.d.ts +34 -0
  61. package/dist/src/app/charts/hooks/usePlotDimensions.js +73 -0
  62. package/dist/src/app/charts/hooks/usePlotDimensions.js.map +1 -0
  63. package/dist/src/app/charts/hooks/useTooltip.d.ts +64 -0
  64. package/dist/src/app/charts/hooks/useTooltip.js +52 -0
  65. package/dist/src/app/charts/hooks/useTooltip.js.map +1 -0
  66. package/dist/src/app/charts/observables/ChartData.d.ts +23 -0
  67. package/dist/src/app/charts/observables/ChartData.js +20 -0
  68. package/dist/src/app/charts/observables/ChartData.js.map +1 -0
  69. package/dist/src/app/charts/observables/iterates.d.ts +52 -0
  70. package/dist/src/app/charts/observables/iterates.js +121 -0
  71. package/dist/src/app/charts/observables/iterates.js.map +1 -0
  72. package/dist/src/app/charts/observables/iterates.test.d.ts +1 -0
  73. package/dist/src/app/charts/observables/iterates.test.js +180 -0
  74. package/dist/src/app/charts/observables/iterates.test.js.map +1 -0
  75. package/dist/src/app/charts/observables/ordinals.d.ts +75 -0
  76. package/dist/src/app/charts/observables/ordinals.js +141 -0
  77. package/dist/src/app/charts/observables/ordinals.js.map +1 -0
  78. package/dist/src/app/charts/observables/ordinals.test.d.ts +1 -0
  79. package/dist/src/app/charts/observables/ordinals.test.js +102 -0
  80. package/dist/src/app/charts/observables/ordinals.test.js.map +1 -0
  81. package/dist/src/app/charts/plots/BarPlot.d.ts +81 -0
  82. package/dist/src/app/charts/plots/BarPlot.js +557 -0
  83. package/dist/src/app/charts/plots/BarPlot.js.map +1 -0
  84. package/dist/src/app/charts/plots/PoincarePlot.d.ts +78 -0
  85. package/dist/src/app/charts/plots/PoincarePlot.js +504 -0
  86. package/dist/src/app/charts/plots/PoincarePlot.js.map +1 -0
  87. package/dist/src/app/charts/{RasterPlot.d.ts → plots/RasterPlot.d.ts} +1 -1
  88. package/dist/src/app/charts/{RasterPlot.js → plots/RasterPlot.js} +152 -133
  89. package/dist/src/app/charts/plots/RasterPlot.js.map +1 -0
  90. package/dist/src/app/charts/{ScatterPlot.d.ts → plots/ScatterPlot.d.ts} +10 -8
  91. package/dist/src/app/charts/plots/ScatterPlot.js +379 -0
  92. package/dist/src/app/charts/plots/ScatterPlot.js.map +1 -0
  93. package/dist/src/app/charts/{plot.d.ts → plots/plot.d.ts} +12 -14
  94. package/dist/src/app/charts/{plot.js → plots/plot.js} +19 -17
  95. package/dist/src/app/charts/plots/plot.js.map +1 -0
  96. package/dist/src/app/charts/series/baseSeries.d.ts +38 -0
  97. package/dist/src/app/charts/series/baseSeries.js +36 -0
  98. package/dist/src/app/charts/series/baseSeries.js.map +1 -0
  99. package/dist/src/app/charts/series/datumSeries.test.d.ts +1 -0
  100. package/dist/src/app/charts/series/datumSeries.test.js +50 -0
  101. package/dist/src/app/charts/series/datumSeries.test.js.map +1 -0
  102. package/dist/src/app/charts/series/iterateSeries.d.ts +42 -0
  103. package/dist/src/app/charts/series/iterateSeries.js +34 -0
  104. package/dist/src/app/charts/series/iterateSeries.js.map +1 -0
  105. package/dist/src/app/charts/series/ordinalSeries.d.ts +54 -0
  106. package/dist/src/app/charts/series/ordinalSeries.js +98 -0
  107. package/dist/src/app/charts/series/ordinalSeries.js.map +1 -0
  108. package/dist/src/app/charts/series/timeSeries.d.ts +30 -0
  109. package/dist/src/app/charts/series/timeSeries.js +19 -0
  110. package/dist/src/app/charts/series/timeSeries.js.map +1 -0
  111. package/dist/src/app/charts/{chartData.d.ts → series/timeSeriesChartData.d.ts} +11 -6
  112. package/dist/src/app/charts/series/timeSeriesChartData.js +32 -0
  113. package/dist/src/app/charts/series/timeSeriesChartData.js.map +1 -0
  114. package/dist/src/app/charts/styling/barPlotStyle.d.ts +41 -0
  115. package/dist/src/app/charts/styling/barPlotStyle.js +84 -0
  116. package/dist/src/app/charts/styling/barPlotStyle.js.map +1 -0
  117. package/dist/src/app/charts/{margins.d.ts → styling/margins.d.ts} +7 -5
  118. package/dist/src/app/charts/{margins.js → styling/margins.js} +19 -9
  119. package/dist/src/app/charts/styling/margins.js.map +1 -0
  120. package/dist/src/app/charts/styling/margins.test.d.ts +1 -0
  121. package/dist/src/app/charts/styling/margins.test.js +19 -0
  122. package/dist/src/app/charts/styling/margins.test.js.map +1 -0
  123. package/dist/src/app/charts/styling/svgStyle.d.ts +76 -0
  124. package/dist/src/app/charts/styling/svgStyle.js +84 -0
  125. package/dist/src/app/charts/styling/svgStyle.js.map +1 -0
  126. package/dist/src/app/charts/subscriptions/subscription.test.d.ts +1 -0
  127. package/dist/src/app/charts/subscriptions/subscription.test.js +395 -0
  128. package/dist/src/app/charts/subscriptions/subscription.test.js.map +1 -0
  129. package/dist/src/app/charts/subscriptions/subscriptions.d.ts +100 -0
  130. package/dist/src/app/charts/subscriptions/subscriptions.js +449 -0
  131. package/dist/src/app/charts/subscriptions/subscriptions.js.map +1 -0
  132. package/dist/src/app/charts/tooltips/BarPlotTooltipContent.d.ts +90 -0
  133. package/dist/src/app/charts/tooltips/BarPlotTooltipContent.js +302 -0
  134. package/dist/src/app/charts/tooltips/BarPlotTooltipContent.js.map +1 -0
  135. package/dist/src/app/charts/tooltips/PoincarePlotTooltipContent.d.ts +100 -0
  136. package/dist/src/app/charts/tooltips/PoincarePlotTooltipContent.js +190 -0
  137. package/dist/src/app/charts/tooltips/PoincarePlotTooltipContent.js.map +1 -0
  138. package/dist/src/app/charts/{RasterPlotTooltipContent.js → tooltips/RasterPlotTooltipContent.js} +40 -44
  139. package/dist/src/app/charts/tooltips/RasterPlotTooltipContent.js.map +1 -0
  140. package/dist/src/app/charts/tooltips/ScatterPlotTooltipContent.js +154 -0
  141. package/dist/src/app/charts/tooltips/ScatterPlotTooltipContent.js.map +1 -0
  142. package/dist/src/app/charts/{Tooltip.d.ts → tooltips/Tooltip.d.ts} +4 -2
  143. package/dist/src/app/charts/{Tooltip.js → tooltips/Tooltip.js} +23 -28
  144. package/dist/src/app/charts/tooltips/Tooltip.js.map +1 -0
  145. package/dist/src/app/charts/{tooltipUtils.d.ts → tooltips/tooltipUtils.d.ts} +11 -6
  146. package/dist/src/app/charts/{tooltipUtils.js → tooltips/tooltipUtils.js} +33 -17
  147. package/dist/src/app/charts/tooltips/tooltipUtils.js.map +1 -0
  148. package/dist/src/app/charts/{Tracker.d.ts → trackers/Tracker.d.ts} +6 -5
  149. package/dist/src/app/charts/trackers/Tracker.js +60 -0
  150. package/dist/src/app/charts/trackers/Tracker.js.map +1 -0
  151. package/dist/src/app/charts/{trackerUtils.d.ts → trackers/trackerUtils.d.ts} +13 -8
  152. package/dist/src/app/charts/trackers/trackerUtils.js +359 -0
  153. package/dist/src/app/charts/trackers/trackerUtils.js.map +1 -0
  154. package/dist/src/app/charts/utils.d.ts +22 -32
  155. package/dist/src/app/charts/utils.js +36 -37
  156. package/dist/src/app/charts/utils.js.map +1 -1
  157. package/dist/src/index.d.ts +48 -15
  158. package/dist/src/index.js +71 -15
  159. package/dist/src/index.js.map +1 -1
  160. package/package.json +30 -20
  161. package/src/app/charts/Chart.tsx +334 -0
  162. package/src/app/charts/axes/AxesState.test.ts +34 -0
  163. package/src/app/charts/axes/AxesState.ts +112 -0
  164. package/src/app/charts/axes/AxisInterval.test.ts +143 -0
  165. package/src/app/charts/axes/AxisInterval.ts +139 -0
  166. package/src/app/charts/axes/BaseAxisRange.ts +113 -0
  167. package/src/app/charts/axes/ContinuousAxis.tsx +192 -0
  168. package/src/app/charts/axes/ContinuousAxisRange.test.ts +55 -0
  169. package/src/app/charts/axes/ContinuousAxisRange.ts +96 -0
  170. package/src/app/charts/axes/OrdinalAxis.tsx +223 -0
  171. package/src/app/charts/axes/OrdinalAxisRange.test.ts +55 -0
  172. package/src/app/charts/axes/OrdinalAxisRange.ts +112 -0
  173. package/src/app/charts/axes/axes.ts +1569 -0
  174. package/src/app/charts/d3types.ts +16 -0
  175. package/src/app/charts/filters/regexFilter.test.ts +13 -0
  176. package/src/app/charts/filters/regexFilter.ts +17 -0
  177. package/src/app/charts/hooks/useAxes.tsx +341 -0
  178. package/src/app/charts/hooks/useChart.tsx +159 -0
  179. package/src/app/charts/hooks/useDataObservable.tsx +175 -0
  180. package/src/app/charts/hooks/useInitialData.tsx +65 -0
  181. package/src/app/charts/hooks/useMouse.tsx +125 -0
  182. package/src/app/charts/hooks/usePlotDimensions.tsx +120 -0
  183. package/src/app/charts/hooks/useTooltip.tsx +112 -0
  184. package/src/app/charts/observables/ChartData.ts +31 -0
  185. package/src/app/charts/observables/iterates.test.ts +201 -0
  186. package/src/app/charts/observables/iterates.ts +203 -0
  187. package/src/app/charts/observables/ordinals.test.ts +135 -0
  188. package/src/app/charts/observables/ordinals.ts +248 -0
  189. package/src/app/charts/plots/BarPlot.tsx +1088 -0
  190. package/src/app/charts/plots/PoincarePlot.tsx +832 -0
  191. package/src/app/charts/plots/RasterPlot.tsx +676 -0
  192. package/src/app/charts/plots/ScatterPlot.tsx +653 -0
  193. package/src/app/charts/plots/plot.ts +75 -0
  194. package/src/app/charts/series/baseSeries.ts +52 -0
  195. package/src/app/charts/series/datumSeries.test.ts +60 -0
  196. package/src/app/charts/series/iterateSeries.ts +56 -0
  197. package/src/app/charts/series/ordinalSeries.ts +164 -0
  198. package/src/app/charts/series/timeSeries.ts +40 -0
  199. package/src/app/charts/series/timeSeriesChartData.ts +68 -0
  200. package/src/app/charts/styling/barPlotStyle.ts +126 -0
  201. package/src/app/charts/styling/margins.test.ts +22 -0
  202. package/src/app/charts/styling/margins.ts +58 -0
  203. package/src/app/charts/styling/svgStyle.ts +118 -0
  204. package/src/app/charts/subscriptions/subscription.test.ts +499 -0
  205. package/src/app/charts/subscriptions/subscriptions.ts +635 -0
  206. package/src/app/charts/tooltips/BarPlotTooltipContent.tsx +440 -0
  207. package/src/app/charts/tooltips/PoincarePlotTooltipContent.tsx +352 -0
  208. package/src/app/charts/tooltips/RasterPlotTooltipContent.tsx +274 -0
  209. package/src/app/charts/tooltips/ScatterPlotTooltipContent.tsx +319 -0
  210. package/src/app/charts/tooltips/Tooltip.tsx +148 -0
  211. package/src/app/charts/tooltips/tooltipUtils.ts +216 -0
  212. package/src/app/charts/trackers/Tracker.tsx +129 -0
  213. package/src/app/charts/trackers/trackerUtils.ts +494 -0
  214. package/src/app/charts/utils.ts +109 -0
  215. package/dist/src/app/charts/CategoryAxis.d.ts +0 -20
  216. package/dist/src/app/charts/CategoryAxis.js +0 -112
  217. package/dist/src/app/charts/CategoryAxis.js.map +0 -1
  218. package/dist/src/app/charts/ContinuousAxis.d.ts +0 -16
  219. package/dist/src/app/charts/ContinuousAxis.js +0 -186
  220. package/dist/src/app/charts/ContinuousAxis.js.map +0 -1
  221. package/dist/src/app/charts/RasterPlot.js.map +0 -1
  222. package/dist/src/app/charts/RasterPlotTooltipContent.js.map +0 -1
  223. package/dist/src/app/charts/ScatterPlot.js +0 -351
  224. package/dist/src/app/charts/ScatterPlot.js.map +0 -1
  225. package/dist/src/app/charts/ScatterPlotTooltipContent.js +0 -163
  226. package/dist/src/app/charts/ScatterPlotTooltipContent.js.map +0 -1
  227. package/dist/src/app/charts/Tooltip.js.map +0 -1
  228. package/dist/src/app/charts/Tracker.js +0 -65
  229. package/dist/src/app/charts/Tracker.js.map +0 -1
  230. package/dist/src/app/charts/axes.d.ts +0 -132
  231. package/dist/src/app/charts/axes.js +0 -265
  232. package/dist/src/app/charts/axes.js.map +0 -1
  233. package/dist/src/app/charts/chartData.js +0 -32
  234. package/dist/src/app/charts/chartData.js.map +0 -1
  235. package/dist/src/app/charts/continuousAxisRangeFor.d.ts +0 -20
  236. package/dist/src/app/charts/continuousAxisRangeFor.js +0 -68
  237. package/dist/src/app/charts/continuousAxisRangeFor.js.map +0 -1
  238. package/dist/src/app/charts/datumSeries.d.ts +0 -59
  239. package/dist/src/app/charts/datumSeries.js +0 -55
  240. package/dist/src/app/charts/datumSeries.js.map +0 -1
  241. package/dist/src/app/charts/datumSeries.test.js +0 -50
  242. package/dist/src/app/charts/datumSeries.test.js.map +0 -1
  243. package/dist/src/app/charts/hooks/AxesState.d.ts +0 -37
  244. package/dist/src/app/charts/hooks/AxesState.js +0 -44
  245. package/dist/src/app/charts/hooks/AxesState.js.map +0 -1
  246. package/dist/src/app/charts/margins.js.map +0 -1
  247. package/dist/src/app/charts/margins.test.js +0 -14
  248. package/dist/src/app/charts/margins.test.js.map +0 -1
  249. package/dist/src/app/charts/plot.js.map +0 -1
  250. package/dist/src/app/charts/regexFilter.d.ts +0 -9
  251. package/dist/src/app/charts/regexFilter.js +0 -17
  252. package/dist/src/app/charts/regexFilter.js.map +0 -1
  253. package/dist/src/app/charts/regexFilter.test.js +0 -11
  254. package/dist/src/app/charts/regexFilter.test.js.map +0 -1
  255. package/dist/src/app/charts/subscriptions.d.ts +0 -43
  256. package/dist/src/app/charts/subscriptions.js +0 -213
  257. package/dist/src/app/charts/subscriptions.js.map +0 -1
  258. package/dist/src/app/charts/svgStyle.d.ts +0 -27
  259. package/dist/src/app/charts/svgStyle.js +0 -32
  260. package/dist/src/app/charts/svgStyle.js.map +0 -1
  261. package/dist/src/app/charts/timeRange.test.js +0 -54
  262. package/dist/src/app/charts/timeRange.test.js.map +0 -1
  263. package/dist/src/app/charts/tooltipUtils.js.map +0 -1
  264. package/dist/src/app/charts/trackerUtils.js +0 -130
  265. package/dist/src/app/charts/trackerUtils.js.map +0 -1
  266. /package/dist/src/app/charts/{datumSeries.test.d.ts → axes/AxesState.test.d.ts} +0 -0
  267. /package/dist/src/app/charts/{margins.test.d.ts → axes/AxisInterval.test.d.ts} +0 -0
  268. /package/dist/src/app/charts/{regexFilter.test.d.ts → axes/ContinuousAxisRange.test.d.ts} +0 -0
  269. /package/dist/src/app/charts/{timeRange.test.d.ts → axes/OrdinalAxisRange.test.d.ts} +0 -0
  270. /package/dist/src/app/charts/{RasterPlotTooltipContent.d.ts → tooltips/RasterPlotTooltipContent.d.ts} +0 -0
  271. /package/dist/src/app/charts/{ScatterPlotTooltipContent.d.ts → tooltips/ScatterPlotTooltipContent.d.ts} +0 -0
@@ -0,0 +1,97 @@
1
+ import { Optional } from "result-fn";
2
+ /**
3
+ * Holds the information to allow mapping axes names to the underlying axes objects.
4
+ * These objects hold the axis ID, its location on the chart (i.e. left, right, bottom, upper)
5
+ * and the underlying d3 selection objects for managing the axes. Axis objects that extend
6
+ * the `BaseAxis` class may have additional properties.
7
+ * @typeParam A The type of the axes (must extend `BaseAxis`)
8
+ */
9
+ export class AxesState {
10
+ constructor(axes) {
11
+ this.axes = axes;
12
+ }
13
+ /**
14
+ * Creates a new axes state from the specified map of axes.
15
+ * @param axes Mapping of the axes ID's to the axes.
16
+ * @return A new axes-state object.
17
+ */
18
+ static from(axes) {
19
+ return new AxesState(axes);
20
+ }
21
+ /**
22
+ * Creates an empty axes-state object.
23
+ * @return A new axes-state object.
24
+ */
25
+ static empty() {
26
+ return new AxesState(new Map());
27
+ }
28
+ /**
29
+ * @return `true` if the axes state is empty, `false` otherwise.
30
+ */
31
+ isEmpty() {
32
+ return this.axes.size === 0;
33
+ }
34
+ /**
35
+ * Creates a deep copy of the current axes state.
36
+ * @return A deep copy of the current axes state.
37
+ */
38
+ copy() {
39
+ return new AxesState(new Map(Array.from(this.axes.entries())
40
+ .map(([id, axis]) => [id, Object.assign({}, axis)])));
41
+ }
42
+ /**
43
+ * Adds an axis to the current axis state and returns a new axis state. This is an internal state
44
+ * management function. This should generally not be used. Instead, use the {@link UseChartValues.addXAxis}
45
+ * and {@link UseChartValues.addYAxis} functions to add axes.
46
+ * @param axis The axis to add
47
+ * @param id The ID of the axis to add
48
+ * @return An updated axes state that has the new axis
49
+ * @see UseChartValues.addXAxis
50
+ * @see UseChartValues.addYAxis
51
+ */
52
+ addAxis(axis, id) {
53
+ const updatedAxes = this.axes.set(id, axis);
54
+ return new AxesState(updatedAxes);
55
+ }
56
+ /**
57
+ * Attempts to retrieve the x-axis for the specified ID
58
+ * @param axisId The unique ID of the axis
59
+ * @return The axis, or undefined if no axis with the specified ID is found
60
+ */
61
+ axisFor(axisId) {
62
+ const axis = this.axes.get(axisId);
63
+ // when there is no axis for the specified ID and there is at least
64
+ // one axis, then just use that...it is the default axis
65
+ if (axis === undefined && this.axes.size >= 1) {
66
+ return Optional.of(Array.from(this.axes.values())[0]);
67
+ }
68
+ return Optional.ofNullable(axis);
69
+ }
70
+ /**
71
+ * Returns the default axis
72
+ * @return The default axis
73
+ * @see axisDefaultId
74
+ */
75
+ defaultAxis() {
76
+ const axes = Array.from(this.axes.values());
77
+ return axes.length > 0 ?
78
+ Optional.of(axes[0]) :
79
+ Optional.empty();
80
+ }
81
+ /**
82
+ * @return An array holding all existing the x-axis IDs
83
+ */
84
+ axisIds() {
85
+ return Array.from(this.axes.keys());
86
+ }
87
+ /**
88
+ * @return The default name of the x-axis (in case only on default axis was added)
89
+ */
90
+ axisDefaultId() {
91
+ const ids = Array.from(this.axes.keys());
92
+ return ids.length > 0 ?
93
+ Optional.of(ids[0]) :
94
+ Optional.empty();
95
+ }
96
+ }
97
+ //# sourceMappingURL=AxesState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxesState.js","sourceRoot":"","sources":["../../../../../src/app/charts/axes/AxesState.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAC;AAEnC;;;;;;GAMG;AACH,MAAM,OAAO,SAAS;IAGlB,YAAoB,IAAoB;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACpB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAqB,IAAoB;QAChD,OAAO,IAAI,SAAS,CAAI,IAAI,CAAC,CAAA;IACjC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK;QACR,OAAO,IAAI,SAAS,CAAI,IAAI,GAAG,EAAa,CAAC,CAAA;IACjD,CAAC;IAED;;OAEG;IACH,OAAO;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED;;;OAGG;IACH,IAAI;QACA,OAAO,IAAI,SAAS,CAChB,IAAI,GAAG,CAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAM,IAAI,EAAE,CAAC,CACxC,CACJ,CAAA;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,OAAO,CAAC,IAAO,EAAE,EAAU;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAC3C,OAAO,IAAI,SAAS,CAAI,WAAW,CAAC,CAAA;IACxC,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,MAAc;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAClC,mEAAmE;QACnE,wDAAwD;QACxD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;YAC5C,OAAO,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACzD,CAAC;QACD,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IAED;;;;OAIG;IACH,WAAW;QACP,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,QAAQ,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IAED;;OAEG;IACH,OAAO;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC;IAED;;OAEG;IACH,aAAa;QACT,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACxC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,QAAQ,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;CACJ"}
@@ -0,0 +1,30 @@
1
+ import { AxesState } from "./AxesState";
2
+ import { AxisLocation } from "./axes";
3
+ describe('AxesState', () => {
4
+ describe('creating axes-state', () => {
5
+ it('should create an empty axes state', () => {
6
+ expect(AxesState.empty().isEmpty()).toBe(true);
7
+ });
8
+ it('should create an axes state with one axis', () => {
9
+ const axis = {
10
+ axisId: 'new-axis',
11
+ location: AxisLocation.Bottom,
12
+ selection: undefined
13
+ };
14
+ const axesState = AxesState.from(new Map([['new-added-axis', axis]]));
15
+ expect(axesState.isEmpty()).toBe(false);
16
+ });
17
+ it('should be able to start with an empty axes state and add to it', () => {
18
+ const axesState = AxesState.empty();
19
+ expect(axesState.isEmpty()).toBe(true);
20
+ const axis = {
21
+ axisId: 'new-axis',
22
+ location: AxisLocation.Bottom,
23
+ selection: undefined
24
+ };
25
+ const updatedAxesState = axesState.addAxis(axis, 'new-added-axis');
26
+ expect(updatedAxesState.isEmpty()).toBe(false);
27
+ });
28
+ });
29
+ });
30
+ //# sourceMappingURL=AxesState.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxesState.test.js","sourceRoot":"","sources":["../../../../../src/app/charts/axes/AxesState.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,YAAY,EAAW,MAAM,QAAQ,CAAC;AAG9C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAY,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACjD,MAAM,IAAI,GAAa;gBACnB,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,YAAY,CAAC,MAAM;gBAC7B,SAAS,EAAE,SAA4C;aAC1D,CAAA;YACD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAW,IAAI,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACtE,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,EAAY,CAAC;YAC9C,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEvC,MAAM,IAAI,GAAa;gBACnB,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,YAAY,CAAC,MAAM;gBAC7B,SAAS,EAAE,SAA4C;aAC1D,CAAA;YACD,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YACnE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * The range of an axis is the physical (start, end) pixels on the screen for the axis.
3
+ * This is the pixel-space of the axis (where as the domain is the data-space of the axis,
4
+ * for example, the tick values).
5
+ */
6
+ export declare class AxisInterval {
7
+ readonly start: number;
8
+ readonly end: number;
9
+ private constructor();
10
+ /**
11
+ * Creates an axis interval from the specified start and end values
12
+ * @param start The axis-range start value
13
+ * @param end The axis-range end value
14
+ * @return The axis-interval
15
+ */
16
+ static from(start: number, end: number): AxisInterval;
17
+ /**
18
+ * Creates an axis interval from the specified tuple
19
+ * @param tuple The tuple to convert
20
+ * @return The axis-interval
21
+ */
22
+ static as(tuple: [start: number, end: number]): AxisInterval;
23
+ /**
24
+ * Creates an empty axis interval
25
+ * @return An empty axis interval
26
+ */
27
+ static empty(): AxisInterval;
28
+ /**
29
+ * @return `true` if the axis interval is empty, `false` otherwise
30
+ */
31
+ isEmpty(): boolean;
32
+ /**
33
+ * @return `true` if the axis interval is not empty, `false` otherwise
34
+ */
35
+ isNotEmpty(): boolean;
36
+ /**
37
+ * @return `true` if the specified axis interval is equal to this one, `false` otherwise
38
+ */
39
+ equalsInterval(start: number, end: number): boolean;
40
+ /**
41
+ * Determines whether the specified axis interval is equal to this one.
42
+ * @param other The other axis interval to compare to
43
+ * @return `true` if the specified axis interval is equal to this one, `false` otherwise.
44
+ */
45
+ equals(other: AxisInterval): boolean;
46
+ /**
47
+ * Creates a copy of the specified axis interval
48
+ * @return A copy of the specified axis interval
49
+ */
50
+ copy(): AxisInterval;
51
+ /**
52
+ * Converts the axis interval to a tuple
53
+ * @return The axis interval as a tuple
54
+ */
55
+ asTuple(): [start: number, end: number];
56
+ /**
57
+ * Applies the specified function to the axis interval and returns the result
58
+ * @param fn The function to apply to the axis interval
59
+ * @return The result of the function application
60
+ */
61
+ map(fn: (start: number, end: number) => [start: number, end: number]): AxisInterval;
62
+ /**
63
+ * Calculates the measure (end - start) of the specified axis interval.
64
+ * The measure of an empty axis interval is 0.
65
+ * @return The measure (end - start) of the specified axis interval
66
+ */
67
+ measure(): number;
68
+ /**
69
+ * Updates the start value of the specified axis interval
70
+ * @param delta The amount by which to update the start value
71
+ * @return A new axis interval
72
+ */
73
+ translateStart(delta: number): AxisInterval;
74
+ /**
75
+ * Updates the end value of the specified axis interval
76
+ * @param delta The amount by which to update the end value
77
+ * @return The new axis interval
78
+ */
79
+ translateEnd(delta: number): AxisInterval;
80
+ /**
81
+ * Translates the specified axis interval by the specified delta.
82
+ * @param delta The amount by which to translate the axis interval
83
+ * @return The new axis interval
84
+ */
85
+ translate(delta: number): AxisInterval;
86
+ }
87
+ /**
88
+ * Creates a copy of the specified map(axis_id, (start, end))
89
+ * @param ranges The ranges map to copy
90
+ * @return A copy of the specified map(axis_id, (start, end))
91
+ */
92
+ export declare function copyRangeMap(ranges: Map<string, AxisInterval>): Map<string, AxisInterval>;
@@ -0,0 +1,126 @@
1
+ /**
2
+ * The range of an axis is the physical (start, end) pixels on the screen for the axis.
3
+ * This is the pixel-space of the axis (where as the domain is the data-space of the axis,
4
+ * for example, the tick values).
5
+ */
6
+ export class AxisInterval {
7
+ constructor(start, end) {
8
+ this.start = start;
9
+ this.end = end;
10
+ }
11
+ /**
12
+ * Creates an axis interval from the specified start and end values
13
+ * @param start The axis-range start value
14
+ * @param end The axis-range end value
15
+ * @return The axis-interval
16
+ */
17
+ static from(start, end) {
18
+ return new AxisInterval(Math.min(start, end), Math.max(start, end));
19
+ }
20
+ /**
21
+ * Creates an axis interval from the specified tuple
22
+ * @param tuple The tuple to convert
23
+ * @return The axis-interval
24
+ */
25
+ static as(tuple) {
26
+ return AxisInterval.from(tuple[0], tuple[1]);
27
+ }
28
+ /**
29
+ * Creates an empty axis interval
30
+ * @return An empty axis interval
31
+ */
32
+ static empty() {
33
+ return new AxisInterval(NaN, NaN);
34
+ }
35
+ /**
36
+ * @return `true` if the axis interval is empty, `false` otherwise
37
+ */
38
+ isEmpty() {
39
+ return isNaN(this.start) || isNaN(this.end);
40
+ }
41
+ /**
42
+ * @return `true` if the axis interval is not empty, `false` otherwise
43
+ */
44
+ isNotEmpty() {
45
+ return !this.isEmpty();
46
+ }
47
+ /**
48
+ * @return `true` if the specified axis interval is equal to this one, `false` otherwise
49
+ */
50
+ equalsInterval(start, end) {
51
+ return (this.start === start && this.end === end) || (this.isEmpty() && isNaN(start) && isNaN(end));
52
+ }
53
+ /**
54
+ * Determines whether the specified axis interval is equal to this one.
55
+ * @param other The other axis interval to compare to
56
+ * @return `true` if the specified axis interval is equal to this one, `false` otherwise.
57
+ */
58
+ equals(other) {
59
+ return this.equalsInterval(other.start, other.end);
60
+ }
61
+ /**
62
+ * Creates a copy of the specified axis interval
63
+ * @return A copy of the specified axis interval
64
+ */
65
+ copy() {
66
+ return AxisInterval.from(this.start, this.end);
67
+ }
68
+ /**
69
+ * Converts the axis interval to a tuple
70
+ * @return The axis interval as a tuple
71
+ */
72
+ asTuple() {
73
+ return [this.start, this.end];
74
+ }
75
+ /**
76
+ * Applies the specified function to the axis interval and returns the result
77
+ * @param fn The function to apply to the axis interval
78
+ * @return The result of the function application
79
+ */
80
+ map(fn) {
81
+ const [start, end] = fn(this.start, this.end);
82
+ return AxisInterval.from(start, end);
83
+ }
84
+ /**
85
+ * Calculates the measure (end - start) of the specified axis interval.
86
+ * The measure of an empty axis interval is 0.
87
+ * @return The measure (end - start) of the specified axis interval
88
+ */
89
+ measure() {
90
+ return this.isNotEmpty() ? this.end - this.start : 0;
91
+ }
92
+ /**
93
+ * Updates the start value of the specified axis interval
94
+ * @param delta The amount by which to update the start value
95
+ * @return A new axis interval
96
+ */
97
+ translateStart(delta) {
98
+ return this.isNotEmpty() ? AxisInterval.from(this.start + delta, this.end) : AxisInterval.empty();
99
+ }
100
+ /**
101
+ * Updates the end value of the specified axis interval
102
+ * @param delta The amount by which to update the end value
103
+ * @return The new axis interval
104
+ */
105
+ translateEnd(delta) {
106
+ return this.isNotEmpty() ? AxisInterval.from(this.start, this.end + delta) : AxisInterval.empty();
107
+ }
108
+ /**
109
+ * Translates the specified axis interval by the specified delta.
110
+ * @param delta The amount by which to translate the axis interval
111
+ * @return The new axis interval
112
+ */
113
+ translate(delta) {
114
+ return this.isNotEmpty() ? AxisInterval.from(this.start + delta, this.end + delta) : AxisInterval.empty();
115
+ }
116
+ }
117
+ /**
118
+ * Creates a copy of the specified map(axis_id, (start, end))
119
+ * @param ranges The ranges map to copy
120
+ * @return A copy of the specified map(axis_id, (start, end))
121
+ */
122
+ export function copyRangeMap(ranges) {
123
+ return new Map(Array.from(ranges.entries())
124
+ .map(([id, range]) => [id, range.copy()]));
125
+ }
126
+ //# sourceMappingURL=AxisInterval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxisInterval.js","sourceRoot":"","sources":["../../../../../src/app/charts/axes/AxisInterval.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACrB,YAA6B,KAAa,EAAW,GAAW;QAAnC,UAAK,GAAL,KAAK,CAAQ;QAAW,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAEpE;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,KAAa,EAAE,GAAW;QAClC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IACvE,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,KAAmC;QACzC,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK;QACR,OAAO,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,OAAO;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/C,CAAC;IAED;;OAEG;IACH,UAAU;QACN,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAa,EAAE,GAAW;QACrC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IACvG,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAmB;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IACtD,CAAC;IAED;;;OAGG;IACH,IAAI;QACA,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAClD,CAAC;IAED;;;OAGG;IACH,OAAO;QACH,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,EAAgE;QAChE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7C,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;IAED;;;;OAIG;IACH,OAAO;QACH,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;IACrG,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;IACrG,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,KAAa;QACnB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;IAC7G,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiC;IAC1D,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAC5C,CAAA;AACL,CAAC"}
@@ -0,0 +1,120 @@
1
+ import { AxisInterval, copyRangeMap } from "./AxisInterval";
2
+ describe('AxisInterval', () => {
3
+ describe('AxisInterval creation', () => {
4
+ it('should create an AxisInterval with valid start and end values', () => {
5
+ const interval = AxisInterval.from(1, 5);
6
+ expect(interval.start).toBe(1);
7
+ expect(interval.end).toBe(5);
8
+ });
9
+ it('should create an AxisInterval with correct start and end when the start is greater than the end', () => {
10
+ const interval = AxisInterval.from(5, 1);
11
+ expect(interval.start).toBe(1);
12
+ expect(interval.end).toBe(5);
13
+ });
14
+ it('should create an AxisInterval from a tuple holding start and end values', () => {
15
+ const interval = AxisInterval.as([1, 5]);
16
+ expect(interval.start).toBe(1);
17
+ expect(interval.end).toBe(5);
18
+ });
19
+ it('should create an empty AxisInterval', () => {
20
+ const interval = AxisInterval.empty();
21
+ expect(interval.start).toBeNaN();
22
+ expect(interval.end).toBeNaN();
23
+ });
24
+ it('should create an empty AxisInterval with start and end NaN', () => {
25
+ const interval = AxisInterval.from(NaN, NaN);
26
+ expect(interval.start).toBeNaN();
27
+ expect(interval.end).toBeNaN();
28
+ });
29
+ it('should create a new copy of an existing AxisInterval', () => {
30
+ const interval = AxisInterval.from(1, 5);
31
+ const copy = interval.copy();
32
+ expect(copy.start).toBe(1);
33
+ expect(copy.end).toBe(5);
34
+ expect(copy).not.toBe(interval);
35
+ });
36
+ });
37
+ describe('AxisInterval comparison', () => {
38
+ const interval1 = AxisInterval.from(1, 5);
39
+ const interval2 = AxisInterval.from(1, 5);
40
+ const interval3 = AxisInterval.from(2, 5);
41
+ const emptyInterval = AxisInterval.empty();
42
+ it('should return true when comparing two AxisIntervals with the same start and end values', () => {
43
+ expect(interval1.equals(interval2)).toBe(true);
44
+ expect(interval1.equalsInterval(1, 5)).toBe(true);
45
+ });
46
+ it('should return not-equal when comparing two AxisIntervals with different start and end values', () => {
47
+ expect(interval1.equals(interval3)).toBe(false);
48
+ expect(interval1.equalsInterval(1, 3)).toBe(false);
49
+ });
50
+ it('should return true when comparing two empty intervals', () => {
51
+ expect(AxisInterval.empty().equals(emptyInterval)).toBe(true);
52
+ });
53
+ });
54
+ describe('AxisInterval conversion', () => {
55
+ it('should convert an AxisInterval to a tuple', () => {
56
+ const interval = AxisInterval.from(1, 5);
57
+ const tuple = interval.asTuple();
58
+ expect(tuple).toEqual([1, 5]);
59
+ });
60
+ it('should map an AxisInterval to a new AxisInterval', () => {
61
+ const interval = AxisInterval.from(1, 5);
62
+ const mappedInterval = interval.map((start, end) => ([start * 2, end * 3]));
63
+ expect(mappedInterval.start).toBe(2);
64
+ expect(mappedInterval.end).toBe(15);
65
+ expect(mappedInterval).not.toBe(interval);
66
+ });
67
+ it('should calculate the measure of an AxisInterval', () => {
68
+ const interval = AxisInterval.from(1, 5);
69
+ expect(interval.measure()).toBe(4);
70
+ });
71
+ it('should calculate the measure of an empty AxisInterval', () => {
72
+ const interval = AxisInterval.empty();
73
+ expect(interval.measure()).toBe(0);
74
+ });
75
+ it('should translate the start of the AxisInterval', () => {
76
+ const interval = AxisInterval.from(1, 5);
77
+ const translatedInterval = interval.translateStart(12);
78
+ expect(translatedInterval.start).toBe(5);
79
+ expect(translatedInterval.end).toBe(13);
80
+ expect(translatedInterval).not.toBe(interval);
81
+ });
82
+ it('should translate the start of an empty interval into an empty interval', () => {
83
+ expect(AxisInterval.empty().translateStart(12)).toEqual(AxisInterval.empty());
84
+ });
85
+ it('should translate the end of the AxisInterval', () => {
86
+ const interval = AxisInterval.from(1, 5);
87
+ const translatedInterval = interval.translateEnd(-12);
88
+ expect(translatedInterval.start).toBe(-7);
89
+ expect(translatedInterval.end).toBe(1);
90
+ expect(translatedInterval).not.toBe(interval);
91
+ });
92
+ it('should translate the end of an empty interval into an empty interval', () => {
93
+ expect(AxisInterval.empty().translateEnd(12)).toEqual(AxisInterval.empty());
94
+ });
95
+ it('should translate an AxisInterval', () => {
96
+ const interval = AxisInterval.from(1, 5);
97
+ const translatedInterval = interval.translate(-12);
98
+ expect(translatedInterval.start).toBe(-11);
99
+ expect(translatedInterval.end).toBe(-7);
100
+ expect(translatedInterval).not.toBe(interval);
101
+ });
102
+ it('should translate an empty interval into an empty interval', () => {
103
+ expect(AxisInterval.empty().translate(12)).toEqual(AxisInterval.empty());
104
+ });
105
+ });
106
+ describe('Copy a range map', () => {
107
+ it('should create a copy of a range map', () => {
108
+ const ranges = new Map([
109
+ ['a', AxisInterval.from(1, 5)],
110
+ ['b', AxisInterval.from(10, 20)]
111
+ ]);
112
+ const copy = copyRangeMap(ranges);
113
+ expect(copy).not.toBe(ranges);
114
+ expect(copy.size).toBe(ranges.size);
115
+ expect(copy.get('a')).toEqual(ranges.get('a'));
116
+ expect(copy.get('b')).toEqual(ranges.get('b'));
117
+ });
118
+ });
119
+ });
120
+ //# sourceMappingURL=AxisInterval.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxisInterval.test.js","sourceRoot":"","sources":["../../../../../src/app/charts/axes/AxisInterval.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { AxisInterval } from "./AxisInterval";
2
+ /**
3
+ * An immutable axis range that holds the current range and the original (no zoom) range.
4
+ */
5
+ export declare abstract class BaseAxisRange {
6
+ readonly current: AxisInterval;
7
+ readonly original: AxisInterval;
8
+ /**
9
+ * @param start The axis-range start value.
10
+ * @param end The axis-range end value.
11
+ * @param [originalStart = start] The optional original axis-range start value. Defaults to the start value if not specified.
12
+ * @param [originalEnd = end] The optional original axis-range end value. Defaults to the end value if not specified.
13
+ * @protected
14
+ */
15
+ protected constructor(start: number, end: number, originalStart?: number, originalEnd?: number);
16
+ /**
17
+ * Determines whether the specified (start, end) interval matches the original interval
18
+ * @param start The start of the interval
19
+ * @param end The end of the interval
20
+ * @return `true` if the specified interval matches the original interval; `false` otherwise
21
+ */
22
+ matchesOriginal(start: number, end: number): boolean;
23
+ /**
24
+ * Returns the current distance between the start and end of the range.
25
+ */
26
+ get currentDistance(): number;
27
+ /**
28
+ * Returns the original (e.g. before any zooming or panning) distance between the start and end of the range.
29
+ */
30
+ get originalDistance(): number;
31
+ /**
32
+ * The ratio between the current and original distance.
33
+ */
34
+ get scaleFactor(): number;
35
+ /**
36
+ * Scales the range using the current scale-factor (closure on `scaleFactor`)
37
+ * @param factor The factor used to update the range
38
+ * @param value The current value being scaled
39
+ * @return The new range, represented by an array holding the start and end value
40
+ */
41
+ protected scaledRange(factor: number, value: number): AxisInterval;
42
+ /**
43
+ *
44
+ * Scales the axis-range by the specified scale factor from the specified {@link value}. The equations
45
+ * are written so that the zooming (scaling) occurs at the specified {@link value}, and expands/contracts equally
46
+ * from that {@link value}.
47
+ * @param factor The scale factor
48
+ * @param value The time from which to scale the interval
49
+ * @return A new continuous-axis range with updated values
50
+ */
51
+ abstract scale(factor: number, value: number): BaseAxisRange;
52
+ /**
53
+ * Scales the axis-range by the specified scale factor, but constrains the range to the specified
54
+ * {@link constraint} min and max. The equations are written so that the zooming (scaling) occurs
55
+ * at the specified {@link value}, and expands/contracts equally from that {@link value}.
56
+ * @param factor The scale factor
57
+ * @param value The value at which the zoom is initiated
58
+ * @param constraint The min and max range
59
+ * @return A new continuous-axis range with updated values
60
+ */
61
+ abstract constrainedScale(factor: number, value: number, constraint: [min: number, max: number]): BaseAxisRange;
62
+ /**
63
+ * Translates the axis-range by the specified amount
64
+ * @param amount The amount by which to translate the axis-range
65
+ * @param [constraints] Optional constraint interval in which the axis range must be within
66
+ * @return An updated {@link ContinuousAxisRange} that has been translated by the specified amount
67
+ */
68
+ abstract translate(amount: number, constraints?: [start: number, end: number]): BaseAxisRange;
69
+ /**
70
+ * Updates the axis-range based on the new start and end values
71
+ * @param start The new start of the axis-range
72
+ * @param end The new end of the axis range
73
+ * @return The updated axis-range type, with all other values unchanged
74
+ */
75
+ abstract update(start: number, end: number): BaseAxisRange;
76
+ /**
77
+ * Updates the original range with the new start and end values.
78
+ * @param start The new value for the start of the original range
79
+ * @param end The new value for the end of the original range
80
+ * @return The updated original range.
81
+ */
82
+ abstract updateOriginal(start: number, end: number): BaseAxisRange;
83
+ }
@@ -0,0 +1,58 @@
1
+ import { AxisInterval } from "./AxisInterval";
2
+ /**
3
+ * An immutable axis range that holds the current range and the original (no zoom) range.
4
+ */
5
+ export class BaseAxisRange {
6
+ /**
7
+ * @param start The axis-range start value.
8
+ * @param end The axis-range end value.
9
+ * @param [originalStart = start] The optional original axis-range start value. Defaults to the start value if not specified.
10
+ * @param [originalEnd = end] The optional original axis-range end value. Defaults to the end value if not specified.
11
+ * @protected
12
+ */
13
+ constructor(start, end, originalStart = start, originalEnd = end) {
14
+ this.current = AxisInterval.from(start, end);
15
+ this.original = AxisInterval.from(originalStart, originalEnd);
16
+ }
17
+ /**
18
+ * Determines whether the specified (start, end) interval matches the original interval
19
+ * @param start The start of the interval
20
+ * @param end The end of the interval
21
+ * @return `true` if the specified interval matches the original interval; `false` otherwise
22
+ */
23
+ matchesOriginal(start, end) {
24
+ return this.original.equalsInterval(start, end);
25
+ }
26
+ /**
27
+ * Returns the current distance between the start and end of the range.
28
+ */
29
+ get currentDistance() {
30
+ return this.current.measure();
31
+ }
32
+ /**
33
+ * Returns the original (e.g. before any zooming or panning) distance between the start and end of the range.
34
+ */
35
+ get originalDistance() {
36
+ return this.original.measure();
37
+ }
38
+ /**
39
+ * The ratio between the current and original distance.
40
+ */
41
+ get scaleFactor() {
42
+ return this.currentDistance / this.originalDistance;
43
+ }
44
+ /**
45
+ * Scales the range using the current scale-factor (closure on `scaleFactor`)
46
+ * @param factor The factor used to update the range
47
+ * @param value The current value being scaled
48
+ * @return The new range, represented by an array holding the start and end value
49
+ */
50
+ scaledRange(factor, value) {
51
+ const dtStart = value - this.current.start;
52
+ const dtEnd = this.current.end - value;
53
+ const start = value - dtStart * factor / this.scaleFactor;
54
+ const end = value + dtEnd * factor / this.scaleFactor;
55
+ return AxisInterval.from(start, end);
56
+ }
57
+ }
58
+ //# sourceMappingURL=BaseAxisRange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAxisRange.js","sourceRoot":"","sources":["../../../../../src/app/charts/axes/BaseAxisRange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAgB,aAAa;IAK/B;;;;;;OAMG;IACH,YAAsB,KAAa,EAAE,GAAW,EAAE,gBAAwB,KAAK,EAAE,cAAsB,GAAG;QACtG,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC5C,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;IACjE,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,KAAa,EAAE,GAAW;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACnD,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAA;IACvD,CAAC;IAED;;;;;OAKG;IACO,WAAW,CAAC,MAAc,EAAE,KAAa;QAC/C,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,KAAK,CAAA;QACtC,MAAM,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;QACzD,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;QACrD,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;CA+CJ"}