@oanda/labs-crowd-view-widget 1.0.53 → 1.0.55

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 (289) hide show
  1. package/CHANGELOG.md +444 -0
  2. package/dist/main/CrowdViewWidget/Main.js +4 -2
  3. package/dist/main/CrowdViewWidget/Main.js.map +1 -1
  4. package/dist/main/CrowdViewWidget/components/Chart/Chart.js +41 -83
  5. package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  6. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js +23 -17
  7. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  8. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.js +24 -0
  9. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.js.map +1 -0
  10. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js +30 -0
  11. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js.map +1 -0
  12. package/dist/main/CrowdViewWidget/components/Chart/{utils → chartOptions}/getGridLines.js +30 -49
  13. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js.map +1 -0
  14. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js +159 -0
  15. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js.map +1 -0
  16. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.js +47 -0
  17. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.js.map +1 -0
  18. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.js +83 -0
  19. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.js.map +1 -0
  20. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.js +68 -0
  21. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.js.map +1 -0
  22. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js +60 -0
  23. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js.map +1 -0
  24. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getVisualMapConfig.js +31 -0
  25. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getVisualMapConfig.js.map +1 -0
  26. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js +57 -0
  27. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js.map +1 -0
  28. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js +66 -0
  29. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js.map +1 -0
  30. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/index.js +127 -0
  31. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/index.js.map +1 -0
  32. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.js +18 -0
  33. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.js.map +1 -0
  34. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatXAxisLabel.js +18 -0
  35. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatXAxisLabel.js.map +1 -0
  36. package/dist/main/CrowdViewWidget/components/Chart/{utils → chartUtils}/getChartStyles.js +4 -4
  37. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getChartStyles.js.map +1 -0
  38. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getGradientColor.js +14 -0
  39. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getGradientColor.js.map +1 -0
  40. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getLabelData.js +23 -0
  41. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getLabelData.js.map +1 -0
  42. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getRectColor.js +14 -0
  43. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getRectColor.js.map +1 -0
  44. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js +120 -0
  45. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js.map +1 -0
  46. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.js +59 -0
  47. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.js.map +1 -0
  48. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.js +34 -0
  49. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.js.map +1 -0
  50. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/index.js +116 -0
  51. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/index.js.map +1 -0
  52. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/isDifferenceGreaterThanTwoWeeks.js +15 -0
  53. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/isDifferenceGreaterThanTwoWeeks.js.map +1 -0
  54. package/dist/main/CrowdViewWidget/{utils/instrumentUtils.js → components/Chart/dataUtils/getInstrumentConfigForDivision.js} +3 -3
  55. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getInstrumentConfigForDivision.js.map +1 -0
  56. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js +19 -0
  57. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js.map +1 -0
  58. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getTimeSpanForGranularity.js +18 -0
  59. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getTimeSpanForGranularity.js.map +1 -0
  60. package/dist/main/CrowdViewWidget/components/Chart/{utils → dataUtils}/index.js +19 -8
  61. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/index.js.map +1 -0
  62. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/processOrderPositionBooks.js.map +1 -0
  63. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/processPriceCandles.js.map +1 -0
  64. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/processSentiments.js.map +1 -0
  65. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/validateData.js.map +1 -0
  66. package/dist/main/CrowdViewWidget/components/Chart/getOption.js +115 -0
  67. package/dist/main/CrowdViewWidget/components/Chart/getOption.js.map +1 -0
  68. package/dist/main/CrowdViewWidget/components/Chart/index.js +11 -11
  69. package/dist/main/CrowdViewWidget/components/Chart/index.js.map +1 -1
  70. package/dist/main/CrowdViewWidget/components/Chart/types.js.map +1 -1
  71. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js +15 -12
  72. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
  73. package/dist/main/CrowdViewWidget/components/Legend/Legend.js +15 -12
  74. package/dist/main/CrowdViewWidget/components/Legend/Legend.js.map +1 -1
  75. package/dist/main/CrowdViewWidget/components/Legend/LegendBar.js +15 -16
  76. package/dist/main/CrowdViewWidget/components/Legend/LegendBar.js.map +1 -1
  77. package/dist/main/CrowdViewWidget/constants.js +20 -14
  78. package/dist/main/CrowdViewWidget/constants.js.map +1 -1
  79. package/dist/main/CrowdViewWidget/selectConfig.js +0 -6
  80. package/dist/main/CrowdViewWidget/selectConfig.js.map +1 -1
  81. package/dist/main/translations/sources/en.json +3 -1
  82. package/dist/module/CrowdViewWidget/Main.js +4 -2
  83. package/dist/module/CrowdViewWidget/Main.js.map +1 -1
  84. package/dist/module/CrowdViewWidget/components/Chart/Chart.js +43 -84
  85. package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  86. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js +22 -16
  87. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  88. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.js +17 -0
  89. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.js.map +1 -0
  90. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js +23 -0
  91. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js.map +1 -0
  92. package/dist/module/CrowdViewWidget/components/Chart/{utils → chartOptions}/getGridLines.js +30 -49
  93. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js.map +1 -0
  94. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js +151 -0
  95. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js.map +1 -0
  96. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.js +39 -0
  97. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.js.map +1 -0
  98. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.js +76 -0
  99. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.js.map +1 -0
  100. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.js +61 -0
  101. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.js.map +1 -0
  102. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js +53 -0
  103. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js.map +1 -0
  104. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getVisualMapConfig.js +24 -0
  105. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getVisualMapConfig.js.map +1 -0
  106. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js +50 -0
  107. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js.map +1 -0
  108. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js +59 -0
  109. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js.map +1 -0
  110. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/index.js +12 -0
  111. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/index.js.map +1 -0
  112. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.js +11 -0
  113. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.js.map +1 -0
  114. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatXAxisLabel.js +11 -0
  115. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatXAxisLabel.js.map +1 -0
  116. package/dist/module/CrowdViewWidget/components/Chart/{utils → chartUtils}/getChartStyles.js +4 -4
  117. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getChartStyles.js.map +1 -0
  118. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getGradientColor.js +6 -0
  119. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getGradientColor.js.map +1 -0
  120. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getLabelData.js +16 -0
  121. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getLabelData.js.map +1 -0
  122. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getRectColor.js +7 -0
  123. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getRectColor.js.map +1 -0
  124. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js +113 -0
  125. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js.map +1 -0
  126. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.js +52 -0
  127. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.js.map +1 -0
  128. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.js +27 -0
  129. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.js.map +1 -0
  130. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/index.js +11 -0
  131. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/index.js.map +1 -0
  132. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/isDifferenceGreaterThanTwoWeeks.js +8 -0
  133. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/isDifferenceGreaterThanTwoWeeks.js.map +1 -0
  134. package/dist/module/CrowdViewWidget/{utils/instrumentUtils.js → components/Chart/dataUtils/getInstrumentConfigForDivision.js} +3 -3
  135. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getInstrumentConfigForDivision.js.map +1 -0
  136. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js +12 -0
  137. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js.map +1 -0
  138. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getTimeSpanForGranularity.js +11 -0
  139. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getTimeSpanForGranularity.js.map +1 -0
  140. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/index.js +8 -0
  141. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/index.js.map +1 -0
  142. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/processOrderPositionBooks.js.map +1 -0
  143. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/processPriceCandles.js.map +1 -0
  144. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/processSentiments.js.map +1 -0
  145. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/validateData.js.map +1 -0
  146. package/dist/module/CrowdViewWidget/components/Chart/getOption.js +108 -0
  147. package/dist/module/CrowdViewWidget/components/Chart/getOption.js.map +1 -0
  148. package/dist/module/CrowdViewWidget/components/Chart/index.js +1 -1
  149. package/dist/module/CrowdViewWidget/components/Chart/index.js.map +1 -1
  150. package/dist/module/CrowdViewWidget/components/Chart/types.js.map +1 -1
  151. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js +8 -5
  152. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
  153. package/dist/module/CrowdViewWidget/components/Legend/Legend.js +15 -12
  154. package/dist/module/CrowdViewWidget/components/Legend/Legend.js.map +1 -1
  155. package/dist/module/CrowdViewWidget/components/Legend/LegendBar.js +15 -16
  156. package/dist/module/CrowdViewWidget/components/Legend/LegendBar.js.map +1 -1
  157. package/dist/module/CrowdViewWidget/constants.js +18 -13
  158. package/dist/module/CrowdViewWidget/constants.js.map +1 -1
  159. package/dist/module/CrowdViewWidget/selectConfig.js +0 -6
  160. package/dist/module/CrowdViewWidget/selectConfig.js.map +1 -1
  161. package/dist/module/translations/sources/en.json +3 -1
  162. package/dist/types/CrowdViewWidget/components/Chart/Chart.d.ts +1 -1
  163. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.d.ts +6 -0
  164. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.d.ts +6 -0
  165. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getGridLines.d.ts +7 -0
  166. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.d.ts +8 -0
  167. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.d.ts +8 -0
  168. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.d.ts +12 -0
  169. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.d.ts +8 -0
  170. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.d.ts +18 -0
  171. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getVisualMapConfig.d.ts +7 -0
  172. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.d.ts +7 -0
  173. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.d.ts +7 -0
  174. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/index.d.ts +11 -0
  175. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.d.ts +1 -0
  176. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/formatXAxisLabel.d.ts +1 -0
  177. package/dist/types/CrowdViewWidget/components/Chart/{utils → chartUtils}/getChartStyles.d.ts +2 -2
  178. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/getGradientColor.d.ts +1 -0
  179. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/getLabelData.d.ts +2 -0
  180. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/getRectColor.d.ts +1 -0
  181. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.d.ts +12 -0
  182. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.d.ts +4 -0
  183. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.d.ts +3 -0
  184. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/index.d.ts +10 -0
  185. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/isDifferenceGreaterThanTwoWeeks.d.ts +1 -0
  186. package/dist/types/CrowdViewWidget/{utils/instrumentUtils.d.ts → components/Chart/dataUtils/getInstrumentConfigForDivision.d.ts} +2 -2
  187. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.d.ts +2 -0
  188. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/getTimeSpanForGranularity.d.ts +2 -0
  189. package/dist/types/CrowdViewWidget/components/Chart/{utils → dataUtils}/index.d.ts +3 -2
  190. package/dist/types/CrowdViewWidget/components/Chart/index.d.ts +1 -1
  191. package/dist/types/CrowdViewWidget/components/Chart/types.d.ts +5 -0
  192. package/dist/types/CrowdViewWidget/components/Legend/Legend.d.ts +1 -4
  193. package/dist/types/CrowdViewWidget/components/Legend/LegendBar.d.ts +1 -3
  194. package/dist/types/CrowdViewWidget/constants.d.ts +13 -9
  195. package/package.json +3 -3
  196. package/src/CrowdViewWidget/Main.tsx +3 -2
  197. package/src/CrowdViewWidget/components/Chart/Chart.tsx +76 -109
  198. package/src/CrowdViewWidget/components/Chart/ChartWithData.tsx +33 -28
  199. package/src/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.ts +22 -0
  200. package/src/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.ts +29 -0
  201. package/src/CrowdViewWidget/components/Chart/chartOptions/getGridLines.ts +126 -0
  202. package/src/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.ts +191 -0
  203. package/src/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.ts +44 -0
  204. package/src/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.ts +103 -0
  205. package/src/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.ts +72 -0
  206. package/src/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.ts +74 -0
  207. package/src/CrowdViewWidget/components/Chart/chartOptions/getVisualMapConfig.ts +32 -0
  208. package/src/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.ts +68 -0
  209. package/src/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.ts +60 -0
  210. package/src/CrowdViewWidget/components/Chart/chartOptions/index.ts +11 -0
  211. package/src/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.ts +13 -0
  212. package/src/CrowdViewWidget/components/Chart/chartUtils/formatXAxisLabel.ts +16 -0
  213. package/src/CrowdViewWidget/components/Chart/{utils → chartUtils}/getChartStyles.ts +9 -6
  214. package/src/CrowdViewWidget/components/Chart/chartUtils/getGradientColor.ts +16 -0
  215. package/src/CrowdViewWidget/components/Chart/chartUtils/getLabelData.ts +18 -0
  216. package/src/CrowdViewWidget/components/Chart/chartUtils/getRectColor.ts +27 -0
  217. package/src/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.ts +212 -0
  218. package/src/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.ts +75 -0
  219. package/src/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.ts +37 -0
  220. package/src/CrowdViewWidget/components/Chart/chartUtils/index.ts +10 -0
  221. package/src/CrowdViewWidget/components/Chart/chartUtils/isDifferenceGreaterThanTwoWeeks.ts +13 -0
  222. package/src/CrowdViewWidget/{utils/instrumentUtils.ts → components/Chart/dataUtils/getInstrumentConfigForDivision.ts} +2 -2
  223. package/src/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.ts +13 -0
  224. package/src/CrowdViewWidget/components/Chart/dataUtils/getTimeSpanForGranularity.ts +14 -0
  225. package/src/CrowdViewWidget/components/Chart/{utils → dataUtils}/index.ts +3 -2
  226. package/src/CrowdViewWidget/components/Chart/getOption.ts +138 -0
  227. package/src/CrowdViewWidget/components/Chart/index.ts +1 -1
  228. package/src/CrowdViewWidget/components/Chart/types.ts +5 -0
  229. package/src/CrowdViewWidget/components/Chart/useCrowdViewData.ts +14 -7
  230. package/src/CrowdViewWidget/components/Legend/Legend.tsx +24 -22
  231. package/src/CrowdViewWidget/components/Legend/LegendBar.tsx +29 -26
  232. package/src/CrowdViewWidget/constants.ts +30 -19
  233. package/src/CrowdViewWidget/selectConfig.ts +0 -8
  234. package/src/translations/sources/en.json +3 -1
  235. package/test/components/Chart/utils/chartUtils.test.ts +20 -9
  236. package/test/components/Chart/utils/getChartStyles.test.ts +10 -10
  237. package/test/components/Chart/utils/handleLabelUpdate.test.ts +419 -0
  238. package/test/components/Chart/utils/handleTooltipUpdate.test.ts +140 -0
  239. package/test/components/Chart/utils/processSentiments.test.ts +1 -1
  240. package/test/components/Legend.test.tsx +15 -23
  241. package/test/components/LegendBar.test.tsx +45 -63
  242. package/test/utils/instrumentUtils.test.ts +1 -1
  243. package/dist/main/CrowdViewWidget/components/Chart/chartOptions.js +0 -399
  244. package/dist/main/CrowdViewWidget/components/Chart/chartOptions.js.map +0 -1
  245. package/dist/main/CrowdViewWidget/components/Chart/utils/chartUtils.js +0 -126
  246. package/dist/main/CrowdViewWidget/components/Chart/utils/chartUtils.js.map +0 -1
  247. package/dist/main/CrowdViewWidget/components/Chart/utils/getChartStyles.js.map +0 -1
  248. package/dist/main/CrowdViewWidget/components/Chart/utils/getGridLines.js.map +0 -1
  249. package/dist/main/CrowdViewWidget/components/Chart/utils/index.js.map +0 -1
  250. package/dist/main/CrowdViewWidget/components/Chart/utils/processOrderPositionBooks.js.map +0 -1
  251. package/dist/main/CrowdViewWidget/components/Chart/utils/processPriceCandles.js.map +0 -1
  252. package/dist/main/CrowdViewWidget/components/Chart/utils/processSentiments.js.map +0 -1
  253. package/dist/main/CrowdViewWidget/components/Chart/utils/validateData.js.map +0 -1
  254. package/dist/main/CrowdViewWidget/utils/instrumentUtils.js.map +0 -1
  255. package/dist/module/CrowdViewWidget/components/Chart/chartOptions.js +0 -391
  256. package/dist/module/CrowdViewWidget/components/Chart/chartOptions.js.map +0 -1
  257. package/dist/module/CrowdViewWidget/components/Chart/utils/chartUtils.js +0 -113
  258. package/dist/module/CrowdViewWidget/components/Chart/utils/chartUtils.js.map +0 -1
  259. package/dist/module/CrowdViewWidget/components/Chart/utils/getChartStyles.js.map +0 -1
  260. package/dist/module/CrowdViewWidget/components/Chart/utils/getGridLines.js.map +0 -1
  261. package/dist/module/CrowdViewWidget/components/Chart/utils/index.js +0 -7
  262. package/dist/module/CrowdViewWidget/components/Chart/utils/index.js.map +0 -1
  263. package/dist/module/CrowdViewWidget/components/Chart/utils/processOrderPositionBooks.js.map +0 -1
  264. package/dist/module/CrowdViewWidget/components/Chart/utils/processPriceCandles.js.map +0 -1
  265. package/dist/module/CrowdViewWidget/components/Chart/utils/processSentiments.js.map +0 -1
  266. package/dist/module/CrowdViewWidget/components/Chart/utils/validateData.js.map +0 -1
  267. package/dist/module/CrowdViewWidget/utils/instrumentUtils.js.map +0 -1
  268. package/dist/types/CrowdViewWidget/components/Chart/utils/chartUtils.d.ts +0 -30
  269. package/dist/types/CrowdViewWidget/components/Chart/utils/getGridLines.d.ts +0 -97
  270. package/src/CrowdViewWidget/components/Chart/chartOptions.ts +0 -449
  271. package/src/CrowdViewWidget/components/Chart/utils/chartUtils.ts +0 -228
  272. package/src/CrowdViewWidget/components/Chart/utils/getGridLines.ts +0 -148
  273. /package/dist/main/CrowdViewWidget/components/Chart/{utils → dataUtils}/processOrderPositionBooks.js +0 -0
  274. /package/dist/main/CrowdViewWidget/components/Chart/{utils → dataUtils}/processPriceCandles.js +0 -0
  275. /package/dist/main/CrowdViewWidget/components/Chart/{utils → dataUtils}/processSentiments.js +0 -0
  276. /package/dist/main/CrowdViewWidget/components/Chart/{utils → dataUtils}/validateData.js +0 -0
  277. /package/dist/module/CrowdViewWidget/components/Chart/{utils → dataUtils}/processOrderPositionBooks.js +0 -0
  278. /package/dist/module/CrowdViewWidget/components/Chart/{utils → dataUtils}/processPriceCandles.js +0 -0
  279. /package/dist/module/CrowdViewWidget/components/Chart/{utils → dataUtils}/processSentiments.js +0 -0
  280. /package/dist/module/CrowdViewWidget/components/Chart/{utils → dataUtils}/validateData.js +0 -0
  281. /package/dist/types/CrowdViewWidget/components/Chart/{utils → dataUtils}/processOrderPositionBooks.d.ts +0 -0
  282. /package/dist/types/CrowdViewWidget/components/Chart/{utils → dataUtils}/processPriceCandles.d.ts +0 -0
  283. /package/dist/types/CrowdViewWidget/components/Chart/{utils → dataUtils}/processSentiments.d.ts +0 -0
  284. /package/dist/types/CrowdViewWidget/components/Chart/{utils → dataUtils}/validateData.d.ts +0 -0
  285. /package/dist/types/CrowdViewWidget/components/Chart/{chartOptions.d.ts → getOption.d.ts} +0 -0
  286. /package/src/CrowdViewWidget/components/Chart/{utils → dataUtils}/processOrderPositionBooks.ts +0 -0
  287. /package/src/CrowdViewWidget/components/Chart/{utils → dataUtils}/processPriceCandles.ts +0 -0
  288. /package/src/CrowdViewWidget/components/Chart/{utils → dataUtils}/processSentiments.ts +0 -0
  289. /package/src/CrowdViewWidget/components/Chart/{utils → dataUtils}/validateData.ts +0 -0
@@ -0,0 +1,140 @@
1
+ import type { EChartsType } from 'echarts';
2
+
3
+ import { handleTooltipUpdate } from '../../../../src/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate';
4
+
5
+ describe('handleTooltipUpdate', () => {
6
+ let mockInstance: jest.Mocked<EChartsType>;
7
+ let zoomTimerRef: { current: NodeJS.Timeout | null };
8
+ let tooltipVisibleRef: { current: boolean };
9
+
10
+ beforeEach(() => {
11
+ jest.useFakeTimers();
12
+ jest.clearAllMocks();
13
+
14
+ mockInstance = {
15
+ setOption: jest.fn(),
16
+ } as unknown as jest.Mocked<EChartsType>;
17
+
18
+ zoomTimerRef = { current: null };
19
+ tooltipVisibleRef = { current: true };
20
+ });
21
+
22
+ afterEach(() => {
23
+ jest.runOnlyPendingTimers();
24
+ jest.useRealTimers();
25
+ });
26
+
27
+ describe('when canHover is false', () => {
28
+ it('should not hide tooltip on touch devices', () => {
29
+ handleTooltipUpdate(mockInstance, zoomTimerRef, tooltipVisibleRef, false);
30
+
31
+ expect(mockInstance.setOption).not.toHaveBeenCalled();
32
+ expect(tooltipVisibleRef.current).toBe(true);
33
+ });
34
+ });
35
+
36
+ describe('when canHover is true', () => {
37
+ it('should hide tooltip immediately when visible', () => {
38
+ tooltipVisibleRef.current = true;
39
+
40
+ handleTooltipUpdate(mockInstance, zoomTimerRef, tooltipVisibleRef, true);
41
+
42
+ expect(mockInstance.setOption).toHaveBeenCalledWith({
43
+ tooltip: {
44
+ show: false,
45
+ },
46
+ });
47
+ expect(tooltipVisibleRef.current).toBe(false);
48
+ });
49
+
50
+ it('should not call setOption when tooltip is already hidden', () => {
51
+ tooltipVisibleRef.current = false;
52
+
53
+ handleTooltipUpdate(mockInstance, zoomTimerRef, tooltipVisibleRef, true);
54
+
55
+ expect(mockInstance.setOption).not.toHaveBeenCalled();
56
+ });
57
+
58
+ it('should clear existing timeout before setting new one', () => {
59
+ const existingTimeout = setTimeout(() => {}, 1000);
60
+ zoomTimerRef.current = existingTimeout;
61
+ const clearTimeoutSpy = jest.spyOn(global, 'clearTimeout');
62
+
63
+ handleTooltipUpdate(mockInstance, zoomTimerRef, tooltipVisibleRef, true);
64
+
65
+ expect(clearTimeoutSpy).toHaveBeenCalledWith(existingTimeout);
66
+ clearTimeoutSpy.mockRestore();
67
+ });
68
+
69
+ it('should show tooltip after 100ms delay', () => {
70
+ tooltipVisibleRef.current = true;
71
+
72
+ handleTooltipUpdate(mockInstance, zoomTimerRef, tooltipVisibleRef, true);
73
+
74
+ // Tooltip should be hidden immediately
75
+ expect(tooltipVisibleRef.current).toBe(false);
76
+ expect(mockInstance.setOption).toHaveBeenCalledWith({
77
+ tooltip: {
78
+ show: false,
79
+ },
80
+ });
81
+
82
+ // Fast-forward time
83
+ jest.advanceTimersByTime(100);
84
+
85
+ // Tooltip should be shown again
86
+ expect(mockInstance.setOption).toHaveBeenCalledWith({
87
+ tooltip: {
88
+ show: true,
89
+ },
90
+ });
91
+ expect(tooltipVisibleRef.current).toBe(true);
92
+ });
93
+
94
+ it('should not show tooltip if it was already shown during timeout', () => {
95
+ tooltipVisibleRef.current = true;
96
+
97
+ handleTooltipUpdate(mockInstance, zoomTimerRef, tooltipVisibleRef, true);
98
+
99
+ // Manually set tooltip to visible before timeout
100
+ tooltipVisibleRef.current = true;
101
+
102
+ jest.advanceTimersByTime(100);
103
+
104
+ // Should not call setOption to show tooltip since it's already visible
105
+ const { calls } = mockInstance.setOption.mock;
106
+ expect(calls.length).toBe(1); // Only the hide call
107
+ expect(calls[0][0]).toEqual({
108
+ tooltip: {
109
+ show: false,
110
+ },
111
+ });
112
+ });
113
+
114
+ it('should reset timeout on subsequent calls', () => {
115
+ tooltipVisibleRef.current = true;
116
+
117
+ // First call
118
+ handleTooltipUpdate(mockInstance, zoomTimerRef, tooltipVisibleRef, true);
119
+ const firstTimeout = zoomTimerRef.current;
120
+
121
+ // Second call before timeout
122
+ jest.advanceTimersByTime(50);
123
+ handleTooltipUpdate(mockInstance, zoomTimerRef, tooltipVisibleRef, true);
124
+ const secondTimeout = zoomTimerRef.current;
125
+
126
+ // Timeouts should be different
127
+ expect(firstTimeout).not.toBe(secondTimeout);
128
+
129
+ // Fast-forward 100ms from second call (150ms total)
130
+ jest.advanceTimersByTime(100);
131
+
132
+ // Should only show tooltip once (from second call)
133
+ const showCalls = mockInstance.setOption.mock.calls.filter(
134
+ (call) =>
135
+ (call[0] as { tooltip?: { show: boolean } }).tooltip?.show === true
136
+ );
137
+ expect(showCalls.length).toBe(1);
138
+ });
139
+ });
140
+ });
@@ -1,4 +1,4 @@
1
- import { processSentiments } from '../../../../src/CrowdViewWidget/components/Chart/utils/processSentiments';
1
+ import { processSentiments } from '../../../../src/CrowdViewWidget/components/Chart/dataUtils/processSentiments';
2
2
  import type { GetSentimentsQuery } from '../../../../src/gql/types/graphql';
3
3
 
4
4
  describe('processSentiments', () => {
@@ -2,6 +2,7 @@
2
2
  * @jest-environment jsdom
3
3
  */
4
4
 
5
+ import { MockLayoutProvider } from '@oanda/labs-widget-common';
5
6
  import { render } from '@testing-library/react';
6
7
  import React from 'react';
7
8
 
@@ -13,30 +14,24 @@ describe('Crowd View Widget', () => {
13
14
  describe('components', () => {
14
15
  describe('<Legend />', () => {
15
16
  it('renders two LegendBar components', () => {
16
- const { getAllByText } = render(
17
- <Legend
18
- bookType={BookType.Position}
19
- isDark={false}
20
- longValues={[0.15, 0.55]}
21
- shortValues={[0.15, 0.55]}
22
- />
17
+ const { getAllByTestId } = render(
18
+ <MockLayoutProvider isDark={false}>
19
+ <Legend bookType={BookType.Position} />
20
+ </MockLayoutProvider>
23
21
  );
24
22
 
25
- expect(getAllByText(/long/)).toHaveLength(1);
26
- expect(getAllByText(/short/)).toHaveLength(1);
23
+ const segments = getAllByTestId('legend-bar-segment');
24
+ expect(segments.length).toBe(4);
27
25
  });
28
26
 
29
27
  it('passes isDark prop to LegendBar components in light mode', () => {
30
28
  const { getAllByTestId } = render(
31
- <Legend
32
- bookType={BookType.Position}
33
- isDark={false}
34
- longValues={[0.15, 0.55]}
35
- shortValues={[0.15, 0.55]}
36
- />
29
+ <MockLayoutProvider isDark={false}>
30
+ <Legend bookType={BookType.Position} />
31
+ </MockLayoutProvider>
37
32
  );
38
33
  const segments = getAllByTestId('legend-bar-segment');
39
- expect(segments.length).toBe(2);
34
+ expect(segments.length).toBe(4);
40
35
  // Check that segments use light mode colors (either long or short)
41
36
  const styles = segments.map((segment) => segment.getAttribute('style'));
42
37
  const hasLightColors = styles.some(
@@ -49,15 +44,12 @@ describe('Crowd View Widget', () => {
49
44
 
50
45
  it('passes isDark prop to LegendBar components in dark mode', () => {
51
46
  const { getAllByTestId } = render(
52
- <Legend
53
- bookType={BookType.Position}
54
- isDark={true}
55
- longValues={[0.15, 0.55]}
56
- shortValues={[0.15, 0.55]}
57
- />
47
+ <MockLayoutProvider isDark={true}>
48
+ <Legend bookType={BookType.Position} />
49
+ </MockLayoutProvider>
58
50
  );
59
51
  const segments = getAllByTestId('legend-bar-segment');
60
- expect(segments.length).toBe(2);
52
+ expect(segments.length).toBe(4);
61
53
  // Check that segments use dark mode colors (either long or short)
62
54
  const styles = segments.map((segment) => segment.getAttribute('style'));
63
55
  const hasDarkColors = styles.some(
@@ -11,95 +11,77 @@ import { COLOR_MAP } from '../../src/CrowdViewWidget/constants';
11
11
  describe('Crowd View Widget', () => {
12
12
  describe('components', () => {
13
13
  describe('<LegendBar />', () => {
14
- const mockValues = [0.15, 0.55];
15
-
16
- it('renders LegendBar with min and max values', () => {
17
- const { getByText } = render(
18
- <LegendBar
19
- isDark={false}
20
- label="long"
21
- type="long"
22
- values={mockValues}
23
- />
24
- );
25
-
26
- expect(getByText('long')).toBeInTheDocument();
27
- expect(getByText('0.15%')).toBeInTheDocument();
28
- expect(getByText('≤ 0.55%')).toBeInTheDocument();
29
- });
30
-
31
- it('renders exactly 1 segment', () => {
14
+ it('renders exactly 2 segments', () => {
32
15
  const { getAllByTestId } = render(
33
- <LegendBar
34
- isDark={false}
35
- label="short"
36
- type="short"
37
- values={mockValues}
38
- />
16
+ <LegendBar isDark={false} type="short" />
39
17
  );
40
18
  const segments = getAllByTestId('legend-bar-segment');
41
- expect(segments.length).toBe(1);
19
+ expect(segments.length).toBe(2);
42
20
  });
43
21
 
44
- it('uses light mode colors when isDark is false', () => {
45
- const { getByTestId } = render(
46
- <LegendBar
47
- isDark={false}
48
- label="long"
49
- type="long"
50
- values={mockValues}
51
- />
22
+ it('uses light mode colors when isDark is false for long type', () => {
23
+ const { getAllByTestId } = render(
24
+ <LegendBar isDark={false} type="long" />
52
25
  );
53
- const segment = getByTestId('legend-bar-segment');
54
- const style = segment.getAttribute('style');
26
+ const segments = getAllByTestId('legend-bar-segment');
27
+ const style = segments[0].getAttribute('style');
55
28
  expect(style).toContain(COLOR_MAP.light.long[0]);
56
29
  expect(style).toContain(COLOR_MAP.light.long[1]);
57
30
  });
58
31
 
59
- it('uses dark mode colors when isDark is true', () => {
60
- const { getByTestId } = render(
61
- <LegendBar
62
- isDark={true}
63
- label="long"
64
- type="long"
65
- values={mockValues}
66
- />
32
+ it('uses dark mode colors when isDark is true for long type', () => {
33
+ const { getAllByTestId } = render(
34
+ <LegendBar isDark={true} type="long" />
67
35
  );
68
- const segment = getByTestId('legend-bar-segment');
69
- const style = segment.getAttribute('style');
36
+ const segments = getAllByTestId('legend-bar-segment');
37
+ const style = segments[0].getAttribute('style');
70
38
  expect(style).toContain(COLOR_MAP.dark.long[0]);
71
39
  expect(style).toContain(COLOR_MAP.dark.long[1]);
72
40
  });
73
41
 
74
42
  it('uses light mode short colors when isDark is false', () => {
75
- const { getByTestId } = render(
76
- <LegendBar
77
- isDark={false}
78
- label="short"
79
- type="short"
80
- values={mockValues}
81
- />
43
+ const { getAllByTestId } = render(
44
+ <LegendBar isDark={false} type="short" />
82
45
  );
83
- const segment = getByTestId('legend-bar-segment');
84
- const style = segment.getAttribute('style');
46
+ const segments = getAllByTestId('legend-bar-segment');
47
+ const style = segments[0].getAttribute('style');
85
48
  expect(style).toContain(COLOR_MAP.light.short[0]);
86
49
  expect(style).toContain(COLOR_MAP.light.short[1]);
87
50
  });
88
51
 
89
52
  it('uses dark mode short colors when isDark is true', () => {
90
- const { getByTestId } = render(
91
- <LegendBar
92
- isDark={true}
93
- label="short"
94
- type="short"
95
- values={mockValues}
96
- />
53
+ const { getAllByTestId } = render(
54
+ <LegendBar isDark={true} type="short" />
97
55
  );
98
- const segment = getByTestId('legend-bar-segment');
99
- const style = segment.getAttribute('style');
56
+ const segments = getAllByTestId('legend-bar-segment');
57
+ const style = segments[0].getAttribute('style');
100
58
  expect(style).toContain(COLOR_MAP.dark.short[0]);
101
59
  expect(style).toContain(COLOR_MAP.dark.short[1]);
102
60
  });
61
+
62
+ it('renders gradient with correct direction for long type', () => {
63
+ const { getAllByTestId } = render(
64
+ <LegendBar isDark={false} type="long" />
65
+ );
66
+ const segments = getAllByTestId('legend-bar-segment');
67
+ const style = segments[0].getAttribute('style');
68
+ // Long type should use long[1] as start and long[0] as end
69
+ expect(style).toMatch(/linear-gradient\(90deg/);
70
+ expect(style).toContain(COLOR_MAP.light.long[1]);
71
+ expect(style).toContain(COLOR_MAP.light.long[0]);
72
+ });
73
+
74
+ it('renders gradient with correct direction for short type', () => {
75
+ const { getAllByTestId } = render(
76
+ <LegendBar isDark={false} type="short" />
77
+ );
78
+ const segments = getAllByTestId('legend-bar-segment');
79
+ const style = segments[0].getAttribute('style');
80
+ // Short type should use short[0] as start and short[1] as end
81
+ expect(style).toMatch(/linear-gradient\(90deg/);
82
+ expect(style).toContain(COLOR_MAP.light.short[0]);
83
+ expect(style).toContain(COLOR_MAP.light.short[1]);
84
+ });
103
85
  });
104
86
  });
105
87
  });
@@ -2,7 +2,7 @@
2
2
  * @jest-environment jsdom
3
3
  */
4
4
 
5
- import { getInstrumentConfigForDivision } from '../../src/CrowdViewWidget/utils/instrumentUtils';
5
+ import { getInstrumentConfigForDivision } from '../../src/CrowdViewWidget/components/Chart/dataUtils/getInstrumentConfigForDivision';
6
6
  import { Division } from '../../src/gql/types/graphql';
7
7
 
8
8
  describe('instrumentUtils', () => {