@oanda/labs-crowd-view-widget 1.0.57 → 1.0.59

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 (55) hide show
  1. package/CHANGELOG.md +476 -0
  2. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js +2 -1
  3. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js.map +1 -1
  4. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatYAxisLabel.js +16 -0
  5. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatYAxisLabel.js.map +1 -0
  6. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js +1 -1
  7. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js.map +1 -1
  8. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/index.js +11 -0
  9. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/index.js.map +1 -1
  10. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.js +22 -0
  11. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.js.map +1 -0
  12. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/index.js +8 -8
  13. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/index.js.map +1 -1
  14. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js +11 -7
  15. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
  16. package/dist/main/CrowdViewWidget/constants.js +4 -2
  17. package/dist/main/CrowdViewWidget/constants.js.map +1 -1
  18. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js +2 -1
  19. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js.map +1 -1
  20. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatYAxisLabel.js +9 -0
  21. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatYAxisLabel.js.map +1 -0
  22. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js +1 -1
  23. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js.map +1 -1
  24. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/index.js +1 -0
  25. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/index.js.map +1 -1
  26. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.js +15 -0
  27. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.js.map +1 -0
  28. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/index.js +1 -1
  29. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/index.js.map +1 -1
  30. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js +13 -9
  31. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
  32. package/dist/module/CrowdViewWidget/constants.js +3 -1
  33. package/dist/module/CrowdViewWidget/constants.js.map +1 -1
  34. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/formatYAxisLabel.d.ts +1 -0
  35. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/index.d.ts +1 -0
  36. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.d.ts +8 -0
  37. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/index.d.ts +1 -1
  38. package/dist/types/CrowdViewWidget/constants.d.ts +2 -0
  39. package/package.json +3 -3
  40. package/src/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.ts +2 -1
  41. package/src/CrowdViewWidget/components/Chart/chartUtils/formatYAxisLabel.ts +13 -0
  42. package/src/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.ts +5 -4
  43. package/src/CrowdViewWidget/components/Chart/chartUtils/index.ts +1 -0
  44. package/src/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.ts +25 -0
  45. package/src/CrowdViewWidget/components/Chart/dataUtils/index.ts +1 -1
  46. package/src/CrowdViewWidget/components/Chart/useCrowdViewData.ts +17 -16
  47. package/src/CrowdViewWidget/constants.ts +3 -0
  48. package/test/components/Chart/dataUtils/getBucketWidthMultiplayer.test.ts +33 -0
  49. package/test/components/Chart/utils/chartUtils.test.ts +65 -0
  50. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js +0 -19
  51. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js.map +0 -1
  52. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js +0 -12
  53. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js.map +0 -1
  54. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.d.ts +0 -2
  55. package/src/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.ts +0 -13
package/CHANGELOG.md CHANGED
@@ -3,6 +3,482 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 1.0.59 (2025-12-16)
7
+
8
+
9
+
10
+ ## 1.0.240 (2025-12-15)
11
+
12
+
13
+
14
+ ## 1.0.239 (2025-12-12)
15
+
16
+
17
+
18
+ ## 1.0.238 (2025-12-11)
19
+
20
+
21
+
22
+ ## 1.0.237 (2025-12-09)
23
+
24
+
25
+
26
+ ## 1.0.236 (2025-12-05)
27
+
28
+
29
+
30
+ ## 1.0.235 (2025-12-04)
31
+
32
+
33
+
34
+ ## 1.0.234 (2025-11-27)
35
+
36
+
37
+
38
+ ## 1.0.233 (2025-11-27)
39
+
40
+
41
+
42
+ ## 1.0.232 (2025-11-27)
43
+
44
+
45
+
46
+ ## 1.0.231 (2025-11-07)
47
+
48
+
49
+
50
+ ## 1.0.230 (2025-11-05)
51
+
52
+
53
+
54
+ ## 1.0.229 (2025-11-05)
55
+
56
+
57
+
58
+ ## 1.0.228 (2025-11-05)
59
+
60
+
61
+
62
+ ## 1.0.227 (2025-10-31)
63
+
64
+
65
+
66
+ ## 1.0.226 (2025-10-29)
67
+
68
+
69
+
70
+ ## 1.0.225 (2025-10-09)
71
+
72
+
73
+
74
+ ## 1.0.224 (2025-09-29)
75
+
76
+
77
+
78
+ ## 1.0.223 (2025-09-29)
79
+
80
+
81
+
82
+ ## 1.0.222 (2025-09-17)
83
+
84
+
85
+
86
+ ## 1.0.221 (2025-09-11)
87
+
88
+
89
+
90
+ ## 1.0.220 (2025-09-09)
91
+
92
+
93
+
94
+ ## 1.0.219 (2025-09-02)
95
+
96
+
97
+
98
+ ## 1.0.218 (2025-09-01)
99
+
100
+
101
+
102
+ ## 1.0.217 (2025-08-25)
103
+
104
+
105
+
106
+ ## 1.0.216 (2025-08-18)
107
+
108
+
109
+
110
+ ## 1.0.215 (2025-08-18)
111
+
112
+
113
+
114
+ ## 1.0.214 (2025-08-14)
115
+
116
+
117
+
118
+ ## 1.0.213 (2025-08-12)
119
+
120
+
121
+
122
+ ## 1.0.212 (2025-08-05)
123
+
124
+
125
+
126
+ ## 1.0.211 (2025-08-05)
127
+
128
+
129
+
130
+ ## 1.0.210 (2025-07-31)
131
+
132
+
133
+
134
+ ## 1.0.209 (2025-07-31)
135
+
136
+
137
+
138
+ ## 1.0.208 (2025-07-24)
139
+
140
+
141
+
142
+ ## 1.0.207 (2025-07-18)
143
+
144
+
145
+
146
+ ## 1.0.206 (2025-07-18)
147
+
148
+
149
+
150
+ ## 1.0.205 (2025-07-17)
151
+
152
+
153
+
154
+ ## 1.0.204 (2025-07-09)
155
+
156
+
157
+
158
+ ## 1.0.203 (2025-06-16)
159
+
160
+
161
+
162
+ ## 1.0.202 (2025-06-04)
163
+
164
+
165
+
166
+ ## 1.0.201 (2025-06-02)
167
+
168
+
169
+
170
+ ## 1.0.200 (2025-05-30)
171
+
172
+
173
+
174
+ ## 1.0.199 (2025-05-29)
175
+
176
+
177
+
178
+ ## 1.0.198 (2025-05-26)
179
+
180
+
181
+
182
+ ## 1.0.197 (2025-05-23)
183
+
184
+
185
+
186
+ ## 1.0.196 (2025-05-22)
187
+
188
+
189
+
190
+ ## 1.0.195 (2025-05-21)
191
+
192
+
193
+
194
+ ## 1.0.194 (2025-05-21)
195
+
196
+
197
+
198
+ ## 1.0.193 (2025-05-15)
199
+
200
+
201
+
202
+ ## 1.0.192 (2025-05-14)
203
+
204
+
205
+
206
+ ## 1.0.191 (2025-04-30)
207
+
208
+
209
+
210
+ ## 1.0.190 (2025-04-28)
211
+
212
+
213
+
214
+ ## 1.0.189 (2025-04-23)
215
+
216
+
217
+
218
+ ## 1.0.188 (2025-04-22)
219
+
220
+
221
+
222
+ ## 1.0.187 (2025-04-18)
223
+
224
+
225
+
226
+ ## 1.0.186 (2025-04-10)
227
+
228
+
229
+
230
+ ## 1.0.185 (2025-04-09)
231
+
232
+
233
+
234
+ ## 1.0.184 (2025-04-08)
235
+
236
+
237
+
238
+ ## 1.0.183 (2025-04-04)
239
+
240
+ **Note:** Version bump only for package @oanda/labs-crowd-view-widget
241
+
242
+
243
+
244
+
245
+
246
+ ## 1.0.58 (2025-12-15)
247
+
248
+
249
+
250
+ ## 1.0.239 (2025-12-12)
251
+
252
+
253
+
254
+ ## 1.0.238 (2025-12-11)
255
+
256
+
257
+
258
+ ## 1.0.237 (2025-12-09)
259
+
260
+
261
+
262
+ ## 1.0.236 (2025-12-05)
263
+
264
+
265
+
266
+ ## 1.0.235 (2025-12-04)
267
+
268
+
269
+
270
+ ## 1.0.234 (2025-11-27)
271
+
272
+
273
+
274
+ ## 1.0.233 (2025-11-27)
275
+
276
+
277
+
278
+ ## 1.0.232 (2025-11-27)
279
+
280
+
281
+
282
+ ## 1.0.231 (2025-11-07)
283
+
284
+
285
+
286
+ ## 1.0.230 (2025-11-05)
287
+
288
+
289
+
290
+ ## 1.0.229 (2025-11-05)
291
+
292
+
293
+
294
+ ## 1.0.228 (2025-11-05)
295
+
296
+
297
+
298
+ ## 1.0.227 (2025-10-31)
299
+
300
+
301
+
302
+ ## 1.0.226 (2025-10-29)
303
+
304
+
305
+
306
+ ## 1.0.225 (2025-10-09)
307
+
308
+
309
+
310
+ ## 1.0.224 (2025-09-29)
311
+
312
+
313
+
314
+ ## 1.0.223 (2025-09-29)
315
+
316
+
317
+
318
+ ## 1.0.222 (2025-09-17)
319
+
320
+
321
+
322
+ ## 1.0.221 (2025-09-11)
323
+
324
+
325
+
326
+ ## 1.0.220 (2025-09-09)
327
+
328
+
329
+
330
+ ## 1.0.219 (2025-09-02)
331
+
332
+
333
+
334
+ ## 1.0.218 (2025-09-01)
335
+
336
+
337
+
338
+ ## 1.0.217 (2025-08-25)
339
+
340
+
341
+
342
+ ## 1.0.216 (2025-08-18)
343
+
344
+
345
+
346
+ ## 1.0.215 (2025-08-18)
347
+
348
+
349
+
350
+ ## 1.0.214 (2025-08-14)
351
+
352
+
353
+
354
+ ## 1.0.213 (2025-08-12)
355
+
356
+
357
+
358
+ ## 1.0.212 (2025-08-05)
359
+
360
+
361
+
362
+ ## 1.0.211 (2025-08-05)
363
+
364
+
365
+
366
+ ## 1.0.210 (2025-07-31)
367
+
368
+
369
+
370
+ ## 1.0.209 (2025-07-31)
371
+
372
+
373
+
374
+ ## 1.0.208 (2025-07-24)
375
+
376
+
377
+
378
+ ## 1.0.207 (2025-07-18)
379
+
380
+
381
+
382
+ ## 1.0.206 (2025-07-18)
383
+
384
+
385
+
386
+ ## 1.0.205 (2025-07-17)
387
+
388
+
389
+
390
+ ## 1.0.204 (2025-07-09)
391
+
392
+
393
+
394
+ ## 1.0.203 (2025-06-16)
395
+
396
+
397
+
398
+ ## 1.0.202 (2025-06-04)
399
+
400
+
401
+
402
+ ## 1.0.201 (2025-06-02)
403
+
404
+
405
+
406
+ ## 1.0.200 (2025-05-30)
407
+
408
+
409
+
410
+ ## 1.0.199 (2025-05-29)
411
+
412
+
413
+
414
+ ## 1.0.198 (2025-05-26)
415
+
416
+
417
+
418
+ ## 1.0.197 (2025-05-23)
419
+
420
+
421
+
422
+ ## 1.0.196 (2025-05-22)
423
+
424
+
425
+
426
+ ## 1.0.195 (2025-05-21)
427
+
428
+
429
+
430
+ ## 1.0.194 (2025-05-21)
431
+
432
+
433
+
434
+ ## 1.0.193 (2025-05-15)
435
+
436
+
437
+
438
+ ## 1.0.192 (2025-05-14)
439
+
440
+
441
+
442
+ ## 1.0.191 (2025-04-30)
443
+
444
+
445
+
446
+ ## 1.0.190 (2025-04-28)
447
+
448
+
449
+
450
+ ## 1.0.189 (2025-04-23)
451
+
452
+
453
+
454
+ ## 1.0.188 (2025-04-22)
455
+
456
+
457
+
458
+ ## 1.0.187 (2025-04-18)
459
+
460
+
461
+
462
+ ## 1.0.186 (2025-04-10)
463
+
464
+
465
+
466
+ ## 1.0.185 (2025-04-09)
467
+
468
+
469
+
470
+ ## 1.0.184 (2025-04-08)
471
+
472
+
473
+
474
+ ## 1.0.183 (2025-04-04)
475
+
476
+ **Note:** Version bump only for package @oanda/labs-crowd-view-widget
477
+
478
+
479
+
480
+
481
+
6
482
  ## 1.0.57 (2025-12-12)
7
483
 
8
484
 
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getYAxisConfig = void 0;
7
7
  var _constants = require("../../../constants");
8
+ var _chartUtils = require("../chartUtils");
8
9
  const getYAxisConfig = _ref => {
9
10
  let {
10
11
  bucketWidth,
@@ -37,7 +38,7 @@ const getYAxisConfig = _ref => {
37
38
  margin: 4,
38
39
  verticalAlignMinLabel: 'bottom',
39
40
  verticalAlignMaxLabel: 'top',
40
- formatter: value => value.toFixed(displayPrecision)
41
+ formatter: _chartUtils.formatYAxisLabel
41
42
  },
42
43
  axisPointer: {
43
44
  label: {
@@ -1 +1 @@
1
- {"version":3,"file":"getYAxisConfig.js","names":["_constants","require","getYAxisConfig","_ref","bucketWidth","displayPrecision","selectedPriceRef","type","gridIndex","position","min","val","adjustedMin","Math","floor","max","adjustedMax","ceil","axisLine","show","axisTick","splitLine","axisLabel","lineHeight","margin","verticalAlignMinLabel","verticalAlignMaxLabel","formatter","value","toFixed","axisPointer","label","padding","params","axisDimension","axisIndex","current","Number","z","CHART_CONFIG","SENTIMENT_MIN","SENTIMENT_MAX","customValues","concat","exports"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.ts"],"sourcesContent":["import type { YAXisComponentOption } from 'echarts';\n\nimport { CHART_CONFIG } from '../../../constants';\n\ninterface GetYAxisConfigParams {\n bucketWidth: number;\n displayPrecision: number;\n selectedPriceRef: { current: number };\n}\n\nexport const getYAxisConfig = ({\n bucketWidth,\n displayPrecision,\n selectedPriceRef,\n}: GetYAxisConfigParams): YAXisComponentOption[] => [\n {\n type: 'value',\n gridIndex: 0,\n position: 'right',\n min: (val: { min: number }) => {\n const adjustedMin = val.min - bucketWidth;\n return Math.floor(adjustedMin / bucketWidth) * bucketWidth;\n },\n max: (val: { max: number }) => {\n const adjustedMax = val.max + bucketWidth;\n return Math.ceil(adjustedMax / bucketWidth) * bucketWidth;\n },\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n axisLabel: {\n lineHeight: 20,\n margin: 4,\n verticalAlignMinLabel: 'bottom',\n verticalAlignMaxLabel: 'top',\n formatter: (value: number) => value.toFixed(displayPrecision),\n },\n axisPointer: {\n label: {\n padding: [4, 4, 4, 4],\n margin: -1,\n formatter: (params: {\n axisDimension?: string;\n axisIndex?: number;\n value: unknown;\n }) => {\n if (params.axisDimension === 'y' && params.axisIndex === 0) {\n selectedPriceRef.current = Number(params.value);\n return Number(params.value).toFixed(displayPrecision);\n }\n return '';\n },\n },\n },\n z: 30,\n },\n {\n type: 'value',\n gridIndex: 1,\n position: 'left',\n min: CHART_CONFIG.SENTIMENT_MIN,\n max: CHART_CONFIG.SENTIMENT_MAX,\n axisLine: { show: false },\n axisTick: { show: false },\n axisPointer: { show: false },\n splitLine: { show: false },\n axisLabel: {\n margin: 4,\n lineHeight: 20,\n verticalAlignMinLabel: 'bottom',\n verticalAlignMaxLabel: 'top',\n customValues: [\n CHART_CONFIG.SENTIMENT_MIN,\n CHART_CONFIG.SENTIMENT_MAX / 5,\n CHART_CONFIG.SENTIMENT_MAX / 2,\n (CHART_CONFIG.SENTIMENT_MAX * 4) / 5,\n CHART_CONFIG.SENTIMENT_MAX,\n ],\n formatter: (value: number) => `${value}%`,\n },\n z: 30,\n },\n];\n"],"mappings":";;;;;;AAEA,IAAAA,UAAA,GAAAC,OAAA;AAQO,MAAMC,cAAc,GAAGC,IAAA;EAAA,IAAC;IAC7BC,WAAW;IACXC,gBAAgB;IAChBC;EACoB,CAAC,GAAAH,IAAA;EAAA,OAA6B,CAClD;IACEI,IAAI,EAAE,OAAO;IACbC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAE,OAAO;IACjBC,GAAG,EAAGC,GAAoB,IAAK;MAC7B,MAAMC,WAAW,GAAGD,GAAG,CAACD,GAAG,GAAGN,WAAW;MACzC,OAAOS,IAAI,CAACC,KAAK,CAACF,WAAW,GAAGR,WAAW,CAAC,GAAGA,WAAW;IAC5D,CAAC;IACDW,GAAG,EAAGJ,GAAoB,IAAK;MAC7B,MAAMK,WAAW,GAAGL,GAAG,CAACI,GAAG,GAAGX,WAAW;MACzC,OAAOS,IAAI,CAACI,IAAI,CAACD,WAAW,GAAGZ,WAAW,CAAC,GAAGA,WAAW;IAC3D,CAAC;IACDc,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAM,CAAC;IACzBC,QAAQ,EAAE;MAAED,IAAI,EAAE;IAAM,CAAC;IACzBE,SAAS,EAAE;MAAEF,IAAI,EAAE;IAAM,CAAC;IAC1BG,SAAS,EAAE;MACTC,UAAU,EAAE,EAAE;MACdC,MAAM,EAAE,CAAC;MACTC,qBAAqB,EAAE,QAAQ;MAC/BC,qBAAqB,EAAE,KAAK;MAC5BC,SAAS,EAAGC,KAAa,IAAKA,KAAK,CAACC,OAAO,CAACxB,gBAAgB;IAC9D,CAAC;IACDyB,WAAW,EAAE;MACXC,KAAK,EAAE;QACLC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrBR,MAAM,EAAE,CAAC,CAAC;QACVG,SAAS,EAAGM,MAIX,IAAK;UACJ,IAAIA,MAAM,CAACC,aAAa,KAAK,GAAG,IAAID,MAAM,CAACE,SAAS,KAAK,CAAC,EAAE;YAC1D7B,gBAAgB,CAAC8B,OAAO,GAAGC,MAAM,CAACJ,MAAM,CAACL,KAAK,CAAC;YAC/C,OAAOS,MAAM,CAACJ,MAAM,CAACL,KAAK,CAAC,CAACC,OAAO,CAACxB,gBAAgB,CAAC;UACvD;UACA,OAAO,EAAE;QACX;MACF;IACF,CAAC;IACDiC,CAAC,EAAE;EACL,CAAC,EACD;IACE/B,IAAI,EAAE,OAAO;IACbC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAE,MAAM;IAChBC,GAAG,EAAE6B,uBAAY,CAACC,aAAa;IAC/BzB,GAAG,EAAEwB,uBAAY,CAACE,aAAa;IAC/BvB,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAM,CAAC;IACzBC,QAAQ,EAAE;MAAED,IAAI,EAAE;IAAM,CAAC;IACzBW,WAAW,EAAE;MAAEX,IAAI,EAAE;IAAM,CAAC;IAC5BE,SAAS,EAAE;MAAEF,IAAI,EAAE;IAAM,CAAC;IAC1BG,SAAS,EAAE;MACTE,MAAM,EAAE,CAAC;MACTD,UAAU,EAAE,EAAE;MACdE,qBAAqB,EAAE,QAAQ;MAC/BC,qBAAqB,EAAE,KAAK;MAC5BgB,YAAY,EAAE,CACZH,uBAAY,CAACC,aAAa,EAC1BD,uBAAY,CAACE,aAAa,GAAG,CAAC,EAC9BF,uBAAY,CAACE,aAAa,GAAG,CAAC,EAC7BF,uBAAY,CAACE,aAAa,GAAG,CAAC,GAAI,CAAC,EACpCF,uBAAY,CAACE,aAAa,CAC3B;MACDd,SAAS,EAAGC,KAAa,OAAAe,MAAA,CAAQf,KAAK;IACxC,CAAC;IACDU,CAAC,EAAE;EACL,CAAC,CACF;AAAA;AAACM,OAAA,CAAA1C,cAAA,GAAAA,cAAA","ignoreList":[]}
1
+ {"version":3,"file":"getYAxisConfig.js","names":["_constants","require","_chartUtils","getYAxisConfig","_ref","bucketWidth","displayPrecision","selectedPriceRef","type","gridIndex","position","min","val","adjustedMin","Math","floor","max","adjustedMax","ceil","axisLine","show","axisTick","splitLine","axisLabel","lineHeight","margin","verticalAlignMinLabel","verticalAlignMaxLabel","formatter","formatYAxisLabel","axisPointer","label","padding","params","axisDimension","axisIndex","current","Number","value","toFixed","z","CHART_CONFIG","SENTIMENT_MIN","SENTIMENT_MAX","customValues","concat","exports"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.ts"],"sourcesContent":["import type { YAXisComponentOption } from 'echarts';\n\nimport { CHART_CONFIG } from '../../../constants';\nimport { formatYAxisLabel } from '../chartUtils';\n\ninterface GetYAxisConfigParams {\n bucketWidth: number;\n displayPrecision: number;\n selectedPriceRef: { current: number };\n}\n\nexport const getYAxisConfig = ({\n bucketWidth,\n displayPrecision,\n selectedPriceRef,\n}: GetYAxisConfigParams): YAXisComponentOption[] => [\n {\n type: 'value',\n gridIndex: 0,\n position: 'right',\n min: (val: { min: number }) => {\n const adjustedMin = val.min - bucketWidth;\n return Math.floor(adjustedMin / bucketWidth) * bucketWidth;\n },\n max: (val: { max: number }) => {\n const adjustedMax = val.max + bucketWidth;\n return Math.ceil(adjustedMax / bucketWidth) * bucketWidth;\n },\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: { show: false },\n axisLabel: {\n lineHeight: 20,\n margin: 4,\n verticalAlignMinLabel: 'bottom',\n verticalAlignMaxLabel: 'top',\n formatter: formatYAxisLabel,\n },\n axisPointer: {\n label: {\n padding: [4, 4, 4, 4],\n margin: -1,\n formatter: (params: {\n axisDimension?: string;\n axisIndex?: number;\n value: unknown;\n }) => {\n if (params.axisDimension === 'y' && params.axisIndex === 0) {\n selectedPriceRef.current = Number(params.value);\n return Number(params.value).toFixed(displayPrecision);\n }\n return '';\n },\n },\n },\n z: 30,\n },\n {\n type: 'value',\n gridIndex: 1,\n position: 'left',\n min: CHART_CONFIG.SENTIMENT_MIN,\n max: CHART_CONFIG.SENTIMENT_MAX,\n axisLine: { show: false },\n axisTick: { show: false },\n axisPointer: { show: false },\n splitLine: { show: false },\n axisLabel: {\n margin: 4,\n lineHeight: 20,\n verticalAlignMinLabel: 'bottom',\n verticalAlignMaxLabel: 'top',\n customValues: [\n CHART_CONFIG.SENTIMENT_MIN,\n CHART_CONFIG.SENTIMENT_MAX / 5,\n CHART_CONFIG.SENTIMENT_MAX / 2,\n (CHART_CONFIG.SENTIMENT_MAX * 4) / 5,\n CHART_CONFIG.SENTIMENT_MAX,\n ],\n formatter: (value: number) => `${value}%`,\n },\n z: 30,\n },\n];\n"],"mappings":";;;;;;AAEA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAQO,MAAME,cAAc,GAAGC,IAAA;EAAA,IAAC;IAC7BC,WAAW;IACXC,gBAAgB;IAChBC;EACoB,CAAC,GAAAH,IAAA;EAAA,OAA6B,CAClD;IACEI,IAAI,EAAE,OAAO;IACbC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAE,OAAO;IACjBC,GAAG,EAAGC,GAAoB,IAAK;MAC7B,MAAMC,WAAW,GAAGD,GAAG,CAACD,GAAG,GAAGN,WAAW;MACzC,OAAOS,IAAI,CAACC,KAAK,CAACF,WAAW,GAAGR,WAAW,CAAC,GAAGA,WAAW;IAC5D,CAAC;IACDW,GAAG,EAAGJ,GAAoB,IAAK;MAC7B,MAAMK,WAAW,GAAGL,GAAG,CAACI,GAAG,GAAGX,WAAW;MACzC,OAAOS,IAAI,CAACI,IAAI,CAACD,WAAW,GAAGZ,WAAW,CAAC,GAAGA,WAAW;IAC3D,CAAC;IACDc,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAM,CAAC;IACzBC,QAAQ,EAAE;MAAED,IAAI,EAAE;IAAM,CAAC;IACzBE,SAAS,EAAE;MAAEF,IAAI,EAAE;IAAM,CAAC;IAC1BG,SAAS,EAAE;MACTC,UAAU,EAAE,EAAE;MACdC,MAAM,EAAE,CAAC;MACTC,qBAAqB,EAAE,QAAQ;MAC/BC,qBAAqB,EAAE,KAAK;MAC5BC,SAAS,EAAEC;IACb,CAAC;IACDC,WAAW,EAAE;MACXC,KAAK,EAAE;QACLC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrBP,MAAM,EAAE,CAAC,CAAC;QACVG,SAAS,EAAGK,MAIX,IAAK;UACJ,IAAIA,MAAM,CAACC,aAAa,KAAK,GAAG,IAAID,MAAM,CAACE,SAAS,KAAK,CAAC,EAAE;YAC1D5B,gBAAgB,CAAC6B,OAAO,GAAGC,MAAM,CAACJ,MAAM,CAACK,KAAK,CAAC;YAC/C,OAAOD,MAAM,CAACJ,MAAM,CAACK,KAAK,CAAC,CAACC,OAAO,CAACjC,gBAAgB,CAAC;UACvD;UACA,OAAO,EAAE;QACX;MACF;IACF,CAAC;IACDkC,CAAC,EAAE;EACL,CAAC,EACD;IACEhC,IAAI,EAAE,OAAO;IACbC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAE,MAAM;IAChBC,GAAG,EAAE8B,uBAAY,CAACC,aAAa;IAC/B1B,GAAG,EAAEyB,uBAAY,CAACE,aAAa;IAC/BxB,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAM,CAAC;IACzBC,QAAQ,EAAE;MAAED,IAAI,EAAE;IAAM,CAAC;IACzBU,WAAW,EAAE;MAAEV,IAAI,EAAE;IAAM,CAAC;IAC5BE,SAAS,EAAE;MAAEF,IAAI,EAAE;IAAM,CAAC;IAC1BG,SAAS,EAAE;MACTE,MAAM,EAAE,CAAC;MACTD,UAAU,EAAE,EAAE;MACdE,qBAAqB,EAAE,QAAQ;MAC/BC,qBAAqB,EAAE,KAAK;MAC5BiB,YAAY,EAAE,CACZH,uBAAY,CAACC,aAAa,EAC1BD,uBAAY,CAACE,aAAa,GAAG,CAAC,EAC9BF,uBAAY,CAACE,aAAa,GAAG,CAAC,EAC7BF,uBAAY,CAACE,aAAa,GAAG,CAAC,GAAI,CAAC,EACpCF,uBAAY,CAACE,aAAa,CAC3B;MACDf,SAAS,EAAGU,KAAa,OAAAO,MAAA,CAAQP,KAAK;IACxC,CAAC;IACDE,CAAC,EAAE;EACL,CAAC,CACF;AAAA;AAACM,OAAA,CAAA3C,cAAA,GAAAA,cAAA","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.formatYAxisLabel = void 0;
7
+ var _constants = require("../../../constants");
8
+ const formatYAxisLabel = value => {
9
+ const absValue = Math.abs(value);
10
+ const integerPart = Math.floor(absValue);
11
+ const integerDigits = integerPart === 0 ? 1 : Math.floor(Math.log10(integerPart)) + 1;
12
+ const axisLabelDisplayPrecision = Math.max(0, _constants.CHART_CONFIG.TARGET_DIGIT_COUNT - integerDigits);
13
+ return value.toFixed(axisLabelDisplayPrecision);
14
+ };
15
+ exports.formatYAxisLabel = formatYAxisLabel;
16
+ //# sourceMappingURL=formatYAxisLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatYAxisLabel.js","names":["_constants","require","formatYAxisLabel","value","absValue","Math","abs","integerPart","floor","integerDigits","log10","axisLabelDisplayPrecision","max","CHART_CONFIG","TARGET_DIGIT_COUNT","toFixed","exports"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/formatYAxisLabel.ts"],"sourcesContent":["import { CHART_CONFIG } from '../../../constants';\n\nexport const formatYAxisLabel = (value: number): string => {\n const absValue = Math.abs(value);\n const integerPart = Math.floor(absValue);\n const integerDigits =\n integerPart === 0 ? 1 : Math.floor(Math.log10(integerPart)) + 1;\n const axisLabelDisplayPrecision = Math.max(\n 0,\n CHART_CONFIG.TARGET_DIGIT_COUNT - integerDigits\n );\n return value.toFixed(axisLabelDisplayPrecision);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEO,MAAMC,gBAAgB,GAAIC,KAAa,IAAa;EACzD,MAAMC,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAACH,KAAK,CAAC;EAChC,MAAMI,WAAW,GAAGF,IAAI,CAACG,KAAK,CAACJ,QAAQ,CAAC;EACxC,MAAMK,aAAa,GACjBF,WAAW,KAAK,CAAC,GAAG,CAAC,GAAGF,IAAI,CAACG,KAAK,CAACH,IAAI,CAACK,KAAK,CAACH,WAAW,CAAC,CAAC,GAAG,CAAC;EACjE,MAAMI,yBAAyB,GAAGN,IAAI,CAACO,GAAG,CACxC,CAAC,EACDC,uBAAY,CAACC,kBAAkB,GAAGL,aACpC,CAAC;EACD,OAAON,KAAK,CAACY,OAAO,CAACJ,yBAAyB,CAAC;AACjD,CAAC;AAACK,OAAA,CAAAd,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -41,7 +41,7 @@ const formatCandleData = (candleData, labelCallback, isDesktop) => {
41
41
  const closeLabel = labelCallback('close');
42
42
  const lowLabel = labelCallback('low');
43
43
  const highLabel = labelCallback('high');
44
- return isDesktop ? "<div><b>".concat(candleLabel, ":</b></div>\n<div style=\"display: flex; gap: 4px; margin-right: 4px;\">\n<div>").concat(openLabel, ": ").concat(open, " </div>\n<div>").concat(closeLabel, ": ").concat(close, " </div>\n<div>").concat(lowLabel, ": ").concat(low, " </div>\n<div>").concat(highLabel, ": ").concat(high, " </div>\n</div>") : "<div><b>".concat(candleLabel, ":</b></div>\n<div>").concat(openLabel, ": ").concat(open, " </div>\n<div>").concat(closeLabel, ": ").concat(close, " </div>\n<div>").concat(lowLabel, ": ").concat(low, " </div>\n<div>").concat(highLabel, ": ").concat(high, " </div>");
44
+ return isDesktop ? "<div><b>".concat(candleLabel, ":</b></div>\n<div style=\"display: flex; gap: 4px; margin-right: 4px;\">\n<div>").concat(openLabel, ": ").concat(open, " </div>\n<div>").concat(highLabel, ": ").concat(high, " </div>\n<div>").concat(lowLabel, ": ").concat(low, " </div>\n<div>").concat(closeLabel, ": ").concat(close, " </div>\n</div>") : "<div><b>".concat(candleLabel, ":</b></div>\n<div>").concat(openLabel, ": ").concat(open, " </div>\n<div>").concat(highLabel, ": ").concat(high, " </div>\n<div>").concat(lowLabel, ": ").concat(low, " </div>\n<div>").concat(closeLabel, ": ").concat(close, " </div>\n");
45
45
  };
46
46
  const formatBookData = _ref => {
47
47
  let {
@@ -1 +1 @@
1
- {"version":3,"file":"getTooltipFormatter.js","names":["_labsWidgetCommon","require","_graphql","_formatFullDate","SENTIMENT_DISPLAY_PRECISION","TOOLTIP_STYLES","MOBILE_COLUMN_WIDTH","PADDING_BOTTOM","FULL_WIDTH","calculateBucketDisplayPrecision","bucketWidth","_bucketWidth$toString","toString","split","length","findSeriesParam","params","seriesId","find","series","findSentimentSeriesParam","sentimentLongs","sentimentShorts","_sentimentLongs$index","_sentimentShorts$inde","index","dataIndex","sentimentLong","sentimentShort","getSentimentOverbalanceLabel","sentiment","bookType","BookType","Order","formatCandleData","candleData","labelCallback","isDesktop","open","close","low","high","candleLabel","openLabel","closeLabel","lowLabel","highLabel","concat","formatBookData","_ref","matchedBucket","bucketDisplayPrecision","bookLabelKey","priceRangeStart","price","toFixed","priceRangeEnd","sentimentLabel","sentimentValue","Math","abs","formatSentimentData","hasValidCandleData","hasValidSentimentData","findMatchingBucket","buckets","bucketsIndex","selectedPrice","undefined","selectedBuckets","_ref2","getTooltipFormatter","_ref3","locale","isDark","Array","isArray","candleParam","booksParam","time","Date","axisValue","value","showCandles","showSentiment","timeFormatted","formatFullDate","candleSection","bookSection","sentimentSection","buildDesktopTooltip","buildMobileTooltip","exports","_ref4","backgroundColor","colorPalette","black","white","fullWidth","_ref5","columnWidth","padding"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.ts"],"sourcesContent":["import { colorPalette } from '@oanda/labs-widget-common';\n\nimport { BookType } from '../../../../gql/types/graphql';\nimport type { Bucket, TooltipParam } from '../types';\nimport { formatFullDate } from './formatFullDate';\n\nconst SENTIMENT_DISPLAY_PRECISION = 2;\n\nconst TOOLTIP_STYLES = {\n MOBILE_COLUMN_WIDTH: '33.3%',\n PADDING_BOTTOM: '4px',\n FULL_WIDTH: '100%',\n} as const;\n\nconst calculateBucketDisplayPrecision = (bucketWidth: number): number => {\n return bucketWidth.toString().split('.')[1]?.length || 0;\n};\n\nconst findSeriesParam = <T extends TooltipParam['seriesId']>(\n params: TooltipParam[],\n seriesId: T\n): Extract<TooltipParam, { seriesId: T }> | undefined => {\n return params.find(\n (series): series is Extract<TooltipParam, { seriesId: T }> =>\n series.seriesId === seriesId\n );\n};\n\nconst findSentimentSeriesParam = (\n params: TooltipParam[],\n sentimentLongs: (number | null)[],\n sentimentShorts: (number | null)[]\n): {\n sentimentLong: number | null;\n sentimentShort: number | null;\n} => {\n const index = params[0].dataIndex as number;\n\n return {\n sentimentLong: sentimentLongs[index] ?? null,\n sentimentShort: sentimentShorts[index] ?? null,\n };\n};\n\nconst getSentimentOverbalanceLabel = (\n sentiment: number,\n bookType: BookType\n): string => {\n if (sentiment < 0) {\n return bookType === BookType.Order\n ? 'sell_overbalance'\n : 'short_overbalance';\n }\n return bookType === BookType.Order ? 'buy_overbalance' : 'long_overbalance';\n};\n\nconst formatCandleData = (\n candleData: [number, number, number, number, number],\n labelCallback: (key: string) => string,\n isDesktop: boolean\n): string => {\n const [, open, close, low, high] = candleData;\n const candleLabel = labelCallback('candle');\n const openLabel = labelCallback('open');\n const closeLabel = labelCallback('close');\n const lowLabel = labelCallback('low');\n const highLabel = labelCallback('high');\n\n return isDesktop\n ? `<div><b>${candleLabel}:</b></div>\n<div style=\"display: flex; gap: 4px; margin-right: 4px;\">\n<div>${openLabel}: ${open} </div>\n<div>${closeLabel}: ${close} </div>\n<div>${lowLabel}: ${low} </div>\n<div>${highLabel}: ${high} </div>\n</div>`\n : `<div><b>${candleLabel}:</b></div>\n<div>${openLabel}: ${open} </div>\n<div>${closeLabel}: ${close} </div>\n<div>${lowLabel}: ${low} </div>\n<div>${highLabel}: ${high} </div>`;\n};\n\nconst formatBookData = ({\n matchedBucket,\n bucketWidth,\n bucketDisplayPrecision,\n bookType,\n labelCallback,\n isDesktop,\n}: {\n matchedBucket: Bucket;\n bucketWidth: number;\n bucketDisplayPrecision: number;\n bookType: BookType;\n labelCallback: (key: string) => string;\n isDesktop: boolean;\n}): string => {\n const bookLabelKey = bookType === BookType.Order ? 'orders' : 'trades';\n const priceRangeStart = matchedBucket.price.toFixed(bucketDisplayPrecision);\n const priceRangeEnd = (matchedBucket.price + bucketWidth).toFixed(\n bucketDisplayPrecision\n );\n const sentimentLabel = getSentimentOverbalanceLabel(\n matchedBucket.sentiment,\n bookType\n );\n const sentimentValue = Math.abs(matchedBucket.sentiment);\n\n return isDesktop\n ? `<div><b>${labelCallback(bookLabelKey)}:</b></div>\n<span style=\"margin-right: 4px;\">${labelCallback('price_range')}: ${priceRangeStart} - ${priceRangeEnd} </span>\n<span style=\"margin-right: 4px;\">${labelCallback(sentimentLabel)}: ${sentimentValue}% </span>`\n : `<div><b>${labelCallback(bookLabelKey)}:</b></div>\n<div>${labelCallback('price_range')}:</div>\n<div>${priceRangeStart} - ${priceRangeEnd} </div>\n<div>${labelCallback(sentimentLabel)}:</div>\n<div>${sentimentValue}% </div>`;\n};\n\nconst formatSentimentData = (\n sentimentLong: number,\n sentimentShort: number,\n labelCallback: (key: string) => string,\n isDesktop: boolean\n): string => {\n return isDesktop\n ? `<div><b>${labelCallback('sentiment')}:</b></div>\n <span style=\"margin-right: 4px;\">${labelCallback('long')}: ${sentimentLong.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </span>\n <span style=\"margin-right: 4px;\">${labelCallback('short')}: ${sentimentShort.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </span>`\n : `<div><b>${labelCallback('sentiment')}:</b></div>\n<div>${labelCallback('long')}: ${sentimentLong.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </div>\n<div>${labelCallback('short')}: ${sentimentShort.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </div>`;\n};\n\nconst hasValidCandleData = (\n candleData: [number, number, number, number, number]\n): boolean =>\n !!candleData[1] && !!candleData[2] && !!candleData[3] && !!candleData[4];\n\nconst hasValidSentimentData = (\n sentimentLong: number | null,\n sentimentShort: number | null\n): boolean => sentimentLong !== null && sentimentShort !== null;\n\nconst findMatchingBucket = (\n buckets: Bucket[][],\n bucketsIndex: number | undefined,\n selectedPrice: number,\n bucketWidth: number\n): Bucket | undefined => {\n if (bucketsIndex === undefined) {\n return undefined;\n }\n const selectedBuckets = buckets[bucketsIndex];\n return selectedBuckets?.find(\n ({ price }) => selectedPrice >= price && selectedPrice < price + bucketWidth\n );\n};\n\nexport const getTooltipFormatter = ({\n params,\n buckets,\n bucketWidth,\n selectedPrice,\n bookType,\n labelCallback,\n sentimentLongs,\n sentimentShorts,\n isDesktop,\n locale,\n isDark,\n}: {\n params: TooltipParam[];\n buckets: Bucket[][];\n bucketWidth: number;\n selectedPrice: number;\n bookType: BookType;\n labelCallback: (key: string) => string;\n sentimentLongs: (number | null)[];\n sentimentShorts: (number | null)[];\n isDesktop: boolean;\n locale: string;\n isDark: boolean;\n}) => {\n if (!params || !Array.isArray(params) || params.length === 0) {\n return '';\n }\n\n const candleParam = findSeriesParam(params, 'candlestick');\n const booksParam = findSeriesParam(params, 'heatmap');\n const { sentimentLong, sentimentShort } = findSentimentSeriesParam(\n params,\n sentimentLongs,\n sentimentShorts\n );\n\n if (!candleParam) {\n return '';\n }\n\n const bucketDisplayPrecision = calculateBucketDisplayPrecision(bucketWidth);\n const time = new Date(candleParam.axisValue as string);\n const candleData = candleParam.value;\n const bucketsIndex = booksParam?.value[2];\n const matchedBucket = findMatchingBucket(\n buckets,\n bucketsIndex,\n selectedPrice,\n bucketWidth\n );\n const showCandles = hasValidCandleData(candleData);\n const showSentiment = hasValidSentimentData(sentimentLong, sentimentShort);\n\n if (!showCandles && !matchedBucket) {\n return '';\n }\n\n const timeFormatted = formatFullDate(time, locale);\n const candleSection = showCandles\n ? formatCandleData(candleData, labelCallback, isDesktop)\n : '';\n\n const bookSection = matchedBucket\n ? formatBookData({\n matchedBucket,\n bucketWidth,\n bucketDisplayPrecision,\n bookType,\n labelCallback,\n isDesktop,\n })\n : '';\n\n const sentimentSection =\n showSentiment && sentimentLong && sentimentShort\n ? formatSentimentData(\n sentimentLong,\n sentimentShort,\n labelCallback,\n isDesktop\n )\n : '';\n\n if (isDesktop) {\n return buildDesktopTooltip({\n timeFormatted,\n candleSection,\n sentimentSection,\n bookSection,\n isDark,\n });\n }\n\n return buildMobileTooltip({\n timeFormatted,\n candleSection,\n sentimentSection,\n bookSection,\n isDark,\n });\n};\n\ninterface TooltipSections {\n timeFormatted: string;\n candleSection: string;\n sentimentSection: string;\n bookSection: string;\n}\n\nconst buildDesktopTooltip = ({\n candleSection,\n sentimentSection,\n bookSection,\n isDark,\n}: TooltipSections & {\n isDark: boolean;\n}): string => {\n const backgroundColor = isDark ? colorPalette.black : colorPalette.white;\n const fullWidth = TOOLTIP_STYLES.FULL_WIDTH;\n\n return `<div style=\"width: ${fullWidth}; background-color: ${backgroundColor};\">\n <div style=\"width: ${fullWidth}; display: flex; justify-content: space-between;\">\n <div style=\"width: 40%;\">\n${candleSection}\n</div>\n<div style=\"width: 22%;\">\n${sentimentSection}\n</div>\n<div style=\"width: 38%;\">\n${bookSection}\n</div>\n</div>\n</div>`;\n};\n\nconst buildMobileTooltip = ({\n timeFormatted,\n candleSection,\n sentimentSection,\n bookSection,\n isDark,\n}: TooltipSections & { isDark: boolean }): string => {\n const backgroundColor = isDark ? colorPalette.black : colorPalette.white;\n const columnWidth = TOOLTIP_STYLES.MOBILE_COLUMN_WIDTH;\n const fullWidth = TOOLTIP_STYLES.FULL_WIDTH;\n const padding = TOOLTIP_STYLES.PADDING_BOTTOM;\n\n return `<div style=\"width: ${fullWidth}; background-color: ${backgroundColor};\">\n <div style=\"padding-bottom: ${padding};\">${timeFormatted}</div>\n <div style=\"width: ${fullWidth}; display: flex; justify-content: space-between;\">\n <div style=\"width: ${columnWidth};\">\n${candleSection}\n</div>\n<div style=\"width: ${columnWidth};\">\n${sentimentSection}\n</div>\n<div style=\"width: ${columnWidth};\">\n${bookSection}\n</div>\n</div>\n</div>`;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"getTooltipFormatter.js","names":["_labsWidgetCommon","require","_graphql","_formatFullDate","SENTIMENT_DISPLAY_PRECISION","TOOLTIP_STYLES","MOBILE_COLUMN_WIDTH","PADDING_BOTTOM","FULL_WIDTH","calculateBucketDisplayPrecision","bucketWidth","_bucketWidth$toString","toString","split","length","findSeriesParam","params","seriesId","find","series","findSentimentSeriesParam","sentimentLongs","sentimentShorts","_sentimentLongs$index","_sentimentShorts$inde","index","dataIndex","sentimentLong","sentimentShort","getSentimentOverbalanceLabel","sentiment","bookType","BookType","Order","formatCandleData","candleData","labelCallback","isDesktop","open","close","low","high","candleLabel","openLabel","closeLabel","lowLabel","highLabel","concat","formatBookData","_ref","matchedBucket","bucketDisplayPrecision","bookLabelKey","priceRangeStart","price","toFixed","priceRangeEnd","sentimentLabel","sentimentValue","Math","abs","formatSentimentData","hasValidCandleData","hasValidSentimentData","findMatchingBucket","buckets","bucketsIndex","selectedPrice","undefined","selectedBuckets","_ref2","getTooltipFormatter","_ref3","locale","isDark","Array","isArray","candleParam","booksParam","time","Date","axisValue","value","showCandles","showSentiment","timeFormatted","formatFullDate","candleSection","bookSection","sentimentSection","buildDesktopTooltip","buildMobileTooltip","exports","_ref4","backgroundColor","colorPalette","black","white","fullWidth","_ref5","columnWidth","padding"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.ts"],"sourcesContent":["import { colorPalette } from '@oanda/labs-widget-common';\n\nimport { BookType } from '../../../../gql/types/graphql';\nimport type { Bucket, TooltipParam } from '../types';\nimport { formatFullDate } from './formatFullDate';\n\nconst SENTIMENT_DISPLAY_PRECISION = 2;\n\nconst TOOLTIP_STYLES = {\n MOBILE_COLUMN_WIDTH: '33.3%',\n PADDING_BOTTOM: '4px',\n FULL_WIDTH: '100%',\n} as const;\n\nconst calculateBucketDisplayPrecision = (bucketWidth: number): number => {\n return bucketWidth.toString().split('.')[1]?.length || 0;\n};\n\nconst findSeriesParam = <T extends TooltipParam['seriesId']>(\n params: TooltipParam[],\n seriesId: T\n): Extract<TooltipParam, { seriesId: T }> | undefined => {\n return params.find(\n (series): series is Extract<TooltipParam, { seriesId: T }> =>\n series.seriesId === seriesId\n );\n};\n\nconst findSentimentSeriesParam = (\n params: TooltipParam[],\n sentimentLongs: (number | null)[],\n sentimentShorts: (number | null)[]\n): {\n sentimentLong: number | null;\n sentimentShort: number | null;\n} => {\n const index = params[0].dataIndex as number;\n\n return {\n sentimentLong: sentimentLongs[index] ?? null,\n sentimentShort: sentimentShorts[index] ?? null,\n };\n};\n\nconst getSentimentOverbalanceLabel = (\n sentiment: number,\n bookType: BookType\n): string => {\n if (sentiment < 0) {\n return bookType === BookType.Order\n ? 'sell_overbalance'\n : 'short_overbalance';\n }\n return bookType === BookType.Order ? 'buy_overbalance' : 'long_overbalance';\n};\n\nconst formatCandleData = (\n candleData: [number, number, number, number, number],\n labelCallback: (key: string) => string,\n isDesktop: boolean\n): string => {\n const [, open, close, low, high] = candleData;\n const candleLabel = labelCallback('candle');\n const openLabel = labelCallback('open');\n const closeLabel = labelCallback('close');\n const lowLabel = labelCallback('low');\n const highLabel = labelCallback('high');\n\n return isDesktop\n ? `<div><b>${candleLabel}:</b></div>\n<div style=\"display: flex; gap: 4px; margin-right: 4px;\">\n<div>${openLabel}: ${open} </div>\n<div>${highLabel}: ${high} </div>\n<div>${lowLabel}: ${low} </div>\n<div>${closeLabel}: ${close} </div>\n</div>`\n : `<div><b>${candleLabel}:</b></div>\n<div>${openLabel}: ${open} </div>\n<div>${highLabel}: ${high} </div>\n<div>${lowLabel}: ${low} </div>\n<div>${closeLabel}: ${close} </div>\n`;\n};\n\nconst formatBookData = ({\n matchedBucket,\n bucketWidth,\n bucketDisplayPrecision,\n bookType,\n labelCallback,\n isDesktop,\n}: {\n matchedBucket: Bucket;\n bucketWidth: number;\n bucketDisplayPrecision: number;\n bookType: BookType;\n labelCallback: (key: string) => string;\n isDesktop: boolean;\n}): string => {\n const bookLabelKey = bookType === BookType.Order ? 'orders' : 'trades';\n const priceRangeStart = matchedBucket.price.toFixed(bucketDisplayPrecision);\n const priceRangeEnd = (matchedBucket.price + bucketWidth).toFixed(\n bucketDisplayPrecision\n );\n const sentimentLabel = getSentimentOverbalanceLabel(\n matchedBucket.sentiment,\n bookType\n );\n const sentimentValue = Math.abs(matchedBucket.sentiment);\n\n return isDesktop\n ? `<div><b>${labelCallback(bookLabelKey)}:</b></div>\n<span style=\"margin-right: 4px;\">${labelCallback('price_range')}: ${priceRangeStart} - ${priceRangeEnd} </span>\n<span style=\"margin-right: 4px;\">${labelCallback(sentimentLabel)}: ${sentimentValue}% </span>`\n : `<div><b>${labelCallback(bookLabelKey)}:</b></div>\n<div>${labelCallback('price_range')}:</div>\n<div>${priceRangeStart} - ${priceRangeEnd} </div>\n<div>${labelCallback(sentimentLabel)}:</div>\n<div>${sentimentValue}% </div>`;\n};\n\nconst formatSentimentData = (\n sentimentLong: number,\n sentimentShort: number,\n labelCallback: (key: string) => string,\n isDesktop: boolean\n): string => {\n return isDesktop\n ? `<div><b>${labelCallback('sentiment')}:</b></div>\n <span style=\"margin-right: 4px;\">${labelCallback('long')}: ${sentimentLong.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </span>\n <span style=\"margin-right: 4px;\">${labelCallback('short')}: ${sentimentShort.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </span>`\n : `<div><b>${labelCallback('sentiment')}:</b></div>\n<div>${labelCallback('long')}: ${sentimentLong.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </div>\n<div>${labelCallback('short')}: ${sentimentShort.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </div>`;\n};\n\nconst hasValidCandleData = (\n candleData: [number, number, number, number, number]\n): boolean =>\n !!candleData[1] && !!candleData[2] && !!candleData[3] && !!candleData[4];\n\nconst hasValidSentimentData = (\n sentimentLong: number | null,\n sentimentShort: number | null\n): boolean => sentimentLong !== null && sentimentShort !== null;\n\nconst findMatchingBucket = (\n buckets: Bucket[][],\n bucketsIndex: number | undefined,\n selectedPrice: number,\n bucketWidth: number\n): Bucket | undefined => {\n if (bucketsIndex === undefined) {\n return undefined;\n }\n const selectedBuckets = buckets[bucketsIndex];\n return selectedBuckets?.find(\n ({ price }) => selectedPrice >= price && selectedPrice < price + bucketWidth\n );\n};\n\nexport const getTooltipFormatter = ({\n params,\n buckets,\n bucketWidth,\n selectedPrice,\n bookType,\n labelCallback,\n sentimentLongs,\n sentimentShorts,\n isDesktop,\n locale,\n isDark,\n}: {\n params: TooltipParam[];\n buckets: Bucket[][];\n bucketWidth: number;\n selectedPrice: number;\n bookType: BookType;\n labelCallback: (key: string) => string;\n sentimentLongs: (number | null)[];\n sentimentShorts: (number | null)[];\n isDesktop: boolean;\n locale: string;\n isDark: boolean;\n}) => {\n if (!params || !Array.isArray(params) || params.length === 0) {\n return '';\n }\n\n const candleParam = findSeriesParam(params, 'candlestick');\n const booksParam = findSeriesParam(params, 'heatmap');\n const { sentimentLong, sentimentShort } = findSentimentSeriesParam(\n params,\n sentimentLongs,\n sentimentShorts\n );\n\n if (!candleParam) {\n return '';\n }\n\n const bucketDisplayPrecision = calculateBucketDisplayPrecision(bucketWidth);\n const time = new Date(candleParam.axisValue as string);\n const candleData = candleParam.value;\n const bucketsIndex = booksParam?.value[2];\n const matchedBucket = findMatchingBucket(\n buckets,\n bucketsIndex,\n selectedPrice,\n bucketWidth\n );\n const showCandles = hasValidCandleData(candleData);\n const showSentiment = hasValidSentimentData(sentimentLong, sentimentShort);\n\n if (!showCandles && !matchedBucket) {\n return '';\n }\n\n const timeFormatted = formatFullDate(time, locale);\n const candleSection = showCandles\n ? formatCandleData(candleData, labelCallback, isDesktop)\n : '';\n\n const bookSection = matchedBucket\n ? formatBookData({\n matchedBucket,\n bucketWidth,\n bucketDisplayPrecision,\n bookType,\n labelCallback,\n isDesktop,\n })\n : '';\n\n const sentimentSection =\n showSentiment && sentimentLong && sentimentShort\n ? formatSentimentData(\n sentimentLong,\n sentimentShort,\n labelCallback,\n isDesktop\n )\n : '';\n\n if (isDesktop) {\n return buildDesktopTooltip({\n timeFormatted,\n candleSection,\n sentimentSection,\n bookSection,\n isDark,\n });\n }\n\n return buildMobileTooltip({\n timeFormatted,\n candleSection,\n sentimentSection,\n bookSection,\n isDark,\n });\n};\n\ninterface TooltipSections {\n timeFormatted: string;\n candleSection: string;\n sentimentSection: string;\n bookSection: string;\n}\n\nconst buildDesktopTooltip = ({\n candleSection,\n sentimentSection,\n bookSection,\n isDark,\n}: TooltipSections & {\n isDark: boolean;\n}): string => {\n const backgroundColor = isDark ? colorPalette.black : colorPalette.white;\n const fullWidth = TOOLTIP_STYLES.FULL_WIDTH;\n\n return `<div style=\"width: ${fullWidth}; background-color: ${backgroundColor};\">\n <div style=\"width: ${fullWidth}; display: flex; justify-content: space-between;\">\n <div style=\"width: 40%;\">\n${candleSection}\n</div>\n<div style=\"width: 22%;\">\n${sentimentSection}\n</div>\n<div style=\"width: 38%;\">\n${bookSection}\n</div>\n</div>\n</div>`;\n};\n\nconst buildMobileTooltip = ({\n timeFormatted,\n candleSection,\n sentimentSection,\n bookSection,\n isDark,\n}: TooltipSections & { isDark: boolean }): string => {\n const backgroundColor = isDark ? colorPalette.black : colorPalette.white;\n const columnWidth = TOOLTIP_STYLES.MOBILE_COLUMN_WIDTH;\n const fullWidth = TOOLTIP_STYLES.FULL_WIDTH;\n const padding = TOOLTIP_STYLES.PADDING_BOTTOM;\n\n return `<div style=\"width: ${fullWidth}; background-color: ${backgroundColor};\">\n <div style=\"padding-bottom: ${padding};\">${timeFormatted}</div>\n <div style=\"width: ${fullWidth}; display: flex; justify-content: space-between;\">\n <div style=\"width: ${columnWidth};\">\n${candleSection}\n</div>\n<div style=\"width: ${columnWidth};\">\n${sentimentSection}\n</div>\n<div style=\"width: ${columnWidth};\">\n${bookSection}\n</div>\n</div>\n</div>`;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -36,6 +36,17 @@ Object.keys(_formatXAxisLabel).forEach(function (key) {
36
36
  }
37
37
  });
38
38
  });
39
+ var _formatYAxisLabel = require("./formatYAxisLabel");
40
+ Object.keys(_formatYAxisLabel).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _formatYAxisLabel[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _formatYAxisLabel[key];
47
+ }
48
+ });
49
+ });
39
50
  var _getChartStyles = require("./getChartStyles");
40
51
  Object.keys(_getChartStyles).forEach(function (key) {
41
52
  if (key === "default" || key === "__esModule") return;