@oanda/labs-crowd-view-widget 1.0.56 → 1.0.58

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 (95) hide show
  1. package/CHANGELOG.md +468 -0
  2. package/dist/main/CrowdViewWidget/components/Chart/Chart.js +1 -6
  3. package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  4. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js +5 -4
  5. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js.map +1 -1
  6. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js +13 -6
  7. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js.map +1 -1
  8. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js +4 -4
  9. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js.map +1 -1
  10. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js +9 -43
  11. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js.map +1 -1
  12. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js +19 -4
  13. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js.map +1 -1
  14. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js +15 -2
  15. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js.map +1 -1
  16. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatFullDate.js +27 -0
  17. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatFullDate.js.map +1 -0
  18. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js +14 -23
  19. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js.map +1 -1
  20. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/index.js +11 -0
  21. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/index.js.map +1 -1
  22. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.js +22 -0
  23. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.js.map +1 -0
  24. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/index.js +8 -8
  25. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/index.js.map +1 -1
  26. package/dist/main/CrowdViewWidget/components/Chart/getOption.js +4 -4
  27. package/dist/main/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
  28. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js +11 -7
  29. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
  30. package/dist/main/CrowdViewWidget/constants.js +8 -6
  31. package/dist/main/CrowdViewWidget/constants.js.map +1 -1
  32. package/dist/main/translations/sources/en.json +2 -1
  33. package/dist/module/CrowdViewWidget/components/Chart/Chart.js +2 -7
  34. package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  35. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js +5 -4
  36. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js.map +1 -1
  37. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js +13 -6
  38. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js.map +1 -1
  39. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js +4 -4
  40. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js.map +1 -1
  41. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js +9 -42
  42. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js.map +1 -1
  43. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js +20 -5
  44. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js.map +1 -1
  45. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js +15 -2
  46. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js.map +1 -1
  47. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatFullDate.js +20 -0
  48. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatFullDate.js.map +1 -0
  49. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js +14 -23
  50. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js.map +1 -1
  51. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/index.js +1 -0
  52. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/index.js.map +1 -1
  53. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.js +15 -0
  54. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.js.map +1 -0
  55. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/index.js +1 -1
  56. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/index.js.map +1 -1
  57. package/dist/module/CrowdViewWidget/components/Chart/getOption.js +4 -4
  58. package/dist/module/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
  59. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js +13 -9
  60. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
  61. package/dist/module/CrowdViewWidget/constants.js +7 -5
  62. package/dist/module/CrowdViewWidget/constants.js.map +1 -1
  63. package/dist/module/translations/sources/en.json +2 -1
  64. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.d.ts +1 -2
  65. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.d.ts +2 -1
  66. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.d.ts +4 -2
  67. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/formatFullDate.d.ts +1 -0
  68. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/index.d.ts +1 -0
  69. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.d.ts +8 -0
  70. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/index.d.ts +1 -1
  71. package/dist/types/CrowdViewWidget/constants.d.ts +5 -3
  72. package/package.json +3 -3
  73. package/src/CrowdViewWidget/components/Chart/Chart.tsx +1 -7
  74. package/src/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.ts +5 -4
  75. package/src/CrowdViewWidget/components/Chart/chartOptions/getGridLines.ts +19 -10
  76. package/src/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.ts +9 -5
  77. package/src/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.ts +38 -79
  78. package/src/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.ts +26 -2
  79. package/src/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.ts +20 -3
  80. package/src/CrowdViewWidget/components/Chart/chartUtils/formatFullDate.ts +26 -0
  81. package/src/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.ts +50 -35
  82. package/src/CrowdViewWidget/components/Chart/chartUtils/index.ts +1 -0
  83. package/src/CrowdViewWidget/components/Chart/dataUtils/getBucketWidthMultiplayer.ts +25 -0
  84. package/src/CrowdViewWidget/components/Chart/dataUtils/index.ts +1 -1
  85. package/src/CrowdViewWidget/components/Chart/getOption.ts +2 -2
  86. package/src/CrowdViewWidget/components/Chart/useCrowdViewData.ts +17 -16
  87. package/src/CrowdViewWidget/constants.ts +11 -7
  88. package/src/translations/sources/en.json +2 -1
  89. package/test/components/Chart/dataUtils/getBucketWidthMultiplayer.test.ts +33 -0
  90. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js +0 -19
  91. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js.map +0 -1
  92. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js +0 -12
  93. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js.map +0 -1
  94. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.d.ts +0 -2
  95. package/src/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.ts +0 -13
@@ -1 +1 @@
1
- {"version":3,"file":"getGridLines.js","names":["getLineCommons","CHART_CONFIG","getGridLines","_ref","isDark","isDesktop","WIDTH","MAIN_HEIGHT_DESKTOP","MAIN_HEIGHT_MOBILE","X_LABEL_SIZE","MOBILE_TOOLTIP_HEIGHT","mainHeight","ySentimentLabelSize","Y_SENTIMENT_LABEL_DESKTOP_SIZE","Y_SENTIMENT_LABEL_MOBILE_SIZE","yLabelSize","Y_LABEL_SIZE_DESKTOP","Y_LABEL_SIZE_MOBILE","topMargin","TOP_MARGIN_DESKTOP","TOP_MARGIN_MOBILE","_objectSpread","top","shape","x1","y1","x2","y2","z","right","bottom","left"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getGridLines.ts"],"sourcesContent":["import { getLineCommons } from '@oanda/labs-widget-common';\nimport type { GraphicComponentOption } from 'echarts';\n\nimport { CHART_CONFIG } from '../../../constants';\n\ninterface GetGridLinesParams {\n isDark: boolean;\n isDesktop: boolean;\n}\n\nexport const getGridLines = ({\n isDark,\n isDesktop,\n}: GetGridLinesParams): GraphicComponentOption[] => {\n const {\n WIDTH,\n MAIN_HEIGHT_DESKTOP,\n MAIN_HEIGHT_MOBILE,\n X_LABEL_SIZE,\n MOBILE_TOOLTIP_HEIGHT,\n } = CHART_CONFIG;\n const mainHeight = isDesktop ? MAIN_HEIGHT_DESKTOP : MAIN_HEIGHT_MOBILE;\n const ySentimentLabelSize = isDesktop\n ? CHART_CONFIG.Y_SENTIMENT_LABEL_DESKTOP_SIZE\n : CHART_CONFIG.Y_SENTIMENT_LABEL_MOBILE_SIZE;\n\n const yLabelSize = isDesktop\n ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP\n : CHART_CONFIG.Y_LABEL_SIZE_MOBILE;\n\n const topMargin = isDesktop\n ? CHART_CONFIG.TOP_MARGIN_DESKTOP\n : CHART_CONFIG.TOP_MARGIN_MOBILE + CHART_CONFIG.MOBILE_TOOLTIP_HEIGHT;\n\n return [\n // Top\n {\n ...getLineCommons(isDark),\n top: -2,\n shape: {\n x1: 0,\n y1: 0,\n x2: WIDTH,\n y2: 0,\n },\n z: 30,\n },\n // Right\n {\n ...getLineCommons(isDark),\n right: -2,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: mainHeight + topMargin + X_LABEL_SIZE + 2,\n },\n z: 30,\n },\n // Bottom\n {\n ...getLineCommons(isDark),\n bottom: -2,\n shape: {\n x1: 0,\n y1: 0,\n x2: WIDTH,\n y2: 0,\n },\n z: 30,\n },\n // Left\n {\n ...getLineCommons(isDark),\n left: -2,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: mainHeight + X_LABEL_SIZE + topMargin + 2,\n },\n z: 30,\n },\n // Y Label\n {\n ...getLineCommons(isDark),\n right: yLabelSize - 3,\n top: topMargin - 2,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: mainHeight,\n },\n z: 30,\n },\n // Y Sentiment Label\n {\n ...getLineCommons(isDark),\n left: ySentimentLabelSize - 2,\n top: topMargin - 2,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: mainHeight,\n },\n z: 30,\n },\n // X Label\n {\n ...getLineCommons(isDark),\n bottom: X_LABEL_SIZE - 3,\n shape: {\n x1: 0,\n y1: 0,\n x2: WIDTH,\n y2: 0,\n },\n z: 30,\n },\n // X Mobile Label\n {\n ...getLineCommons(isDark),\n top: topMargin - 3,\n shape: {\n x1: 0,\n y1: 0,\n x2: WIDTH,\n y2: 0,\n },\n z: 30,\n },\n // Mobile tooltip,\n {\n ...getLineCommons(isDark),\n top: MOBILE_TOOLTIP_HEIGHT - 2,\n shape: {\n x1: 0,\n y1: 0,\n x2: isDesktop ? 0 : WIDTH,\n y2: 0,\n },\n z: 30,\n },\n ];\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"getGridLines.js","names":["getLineCommons","CHART_CONFIG","getGridLines","_ref","isDark","isDesktop","WIDTH","MAIN_HEIGHT_DESKTOP","MAIN_HEIGHT_MOBILE","X_LABEL_SIZE","TOOLTIP_HEIGHT_MOBILE","TOOLTIP_HEIGHT_DESKTOP","Y_SENTIMENT_LABEL_DESKTOP_SIZE","Y_SENTIMENT_LABEL_MOBILE_SIZE","Y_LABEL_SIZE_DESKTOP","Y_LABEL_SIZE_MOBILE","TOP_LABEL_SPACE_MOBILE","mainHeight","ySentimentLabelSize","yLabelSize","topMargin","TOP_LABEL_SPACE_DESKTOP","tooltipHeight","_objectSpread","top","shape","x1","y1","x2","y2","z","right","bottom","left"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getGridLines.ts"],"sourcesContent":["import { getLineCommons } from '@oanda/labs-widget-common';\nimport type { GraphicComponentOption } from 'echarts';\n\nimport { CHART_CONFIG } from '../../../constants';\n\ninterface GetGridLinesParams {\n isDark: boolean;\n isDesktop: boolean;\n}\n\nexport const getGridLines = ({\n isDark,\n isDesktop,\n}: GetGridLinesParams): GraphicComponentOption[] => {\n const {\n WIDTH,\n MAIN_HEIGHT_DESKTOP,\n MAIN_HEIGHT_MOBILE,\n X_LABEL_SIZE,\n TOOLTIP_HEIGHT_MOBILE,\n TOOLTIP_HEIGHT_DESKTOP,\n Y_SENTIMENT_LABEL_DESKTOP_SIZE,\n Y_SENTIMENT_LABEL_MOBILE_SIZE,\n Y_LABEL_SIZE_DESKTOP,\n Y_LABEL_SIZE_MOBILE,\n TOP_LABEL_SPACE_MOBILE,\n } = CHART_CONFIG;\n\n const mainHeight = isDesktop ? MAIN_HEIGHT_DESKTOP : MAIN_HEIGHT_MOBILE;\n const ySentimentLabelSize = isDesktop\n ? Y_SENTIMENT_LABEL_DESKTOP_SIZE\n : Y_SENTIMENT_LABEL_MOBILE_SIZE;\n\n const yLabelSize = isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE;\n\n const topMargin = isDesktop\n ? CHART_CONFIG.TOP_LABEL_SPACE_DESKTOP + TOOLTIP_HEIGHT_DESKTOP\n : TOP_LABEL_SPACE_MOBILE + TOOLTIP_HEIGHT_MOBILE;\n\n const tooltipHeight = isDesktop\n ? TOOLTIP_HEIGHT_DESKTOP\n : TOOLTIP_HEIGHT_MOBILE;\n\n return [\n // Top\n {\n ...getLineCommons(isDark),\n top: -2,\n shape: {\n x1: 0,\n y1: 0,\n x2: WIDTH,\n y2: 0,\n },\n z: 30,\n },\n // Right\n {\n ...getLineCommons(isDark),\n right: -2,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: mainHeight + topMargin + X_LABEL_SIZE + 2,\n },\n z: 30,\n },\n // Bottom\n {\n ...getLineCommons(isDark),\n bottom: -2,\n shape: {\n x1: 0,\n y1: 0,\n x2: WIDTH,\n y2: 0,\n },\n z: 30,\n },\n // Left\n {\n ...getLineCommons(isDark),\n left: -2,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: mainHeight + X_LABEL_SIZE + topMargin + 2,\n },\n z: 30,\n },\n // Y Label\n {\n ...getLineCommons(isDark),\n right: yLabelSize - 3,\n top: topMargin - 2,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: mainHeight,\n },\n z: 30,\n },\n // Y Sentiment Label\n {\n ...getLineCommons(isDark),\n left: ySentimentLabelSize - 2,\n top: topMargin - 2,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: mainHeight,\n },\n z: 30,\n },\n // X Label\n {\n ...getLineCommons(isDark),\n bottom: X_LABEL_SIZE - 3,\n shape: {\n x1: 0,\n y1: 0,\n x2: WIDTH,\n y2: 0,\n },\n z: 30,\n },\n // X Mobile Label\n {\n ...getLineCommons(isDark),\n top: topMargin - 3,\n shape: {\n x1: 0,\n y1: 0,\n x2: WIDTH,\n y2: 0,\n },\n z: 30,\n },\n // Mobile tooltip,\n {\n ...getLineCommons(isDark),\n top: tooltipHeight - 3,\n shape: {\n x1: 0,\n y1: 0,\n x2: WIDTH,\n y2: 0,\n },\n z: 30,\n },\n ];\n};\n"],"mappings":"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","ignoreList":[]}
@@ -19,7 +19,7 @@ export const getLabelsConfig = _ref => {
19
19
  const priceEstimatedWidth = 10 * priceText.length * 0.65;
20
20
  const sentimentVerticalOffset = sentimentEstimatedWidth / 2;
21
21
  const priceVerticalOffset = priceEstimatedWidth / 2;
22
- const topMargin = isDesktop ? CHART_CONFIG.TOP_MARGIN_DESKTOP : CHART_CONFIG.TOP_MARGIN_MOBILE + CHART_CONFIG.MOBILE_TOOLTIP_HEIGHT;
22
+ const topMargin = isDesktop ? CHART_CONFIG.TOP_LABEL_SPACE_DESKTOP + CHART_CONFIG.TOOLTIP_HEIGHT_DESKTOP : CHART_CONFIG.TOP_LABEL_SPACE_MOBILE + CHART_CONFIG.TOOLTIP_HEIGHT_MOBILE;
23
23
  const mainHeight = isDesktop ? CHART_CONFIG.MAIN_HEIGHT_DESKTOP : CHART_CONFIG.MAIN_HEIGHT_MOBILE;
24
24
  return [{
25
25
  type: 'group',
@@ -151,12 +151,12 @@ export const getLabelsConfig = _ref => {
151
151
  type: 'text',
152
152
  z: 20,
153
153
  left: 'center',
154
- top: CHART_CONFIG.MOBILE_TOOLTIP_HEIGHT / 2 - 5,
154
+ top: isDesktop ? CHART_CONFIG.TOOLTIP_HEIGHT_DESKTOP / 2 - 5 : CHART_CONFIG.TOOLTIP_HEIGHT_MOBILE / 2 - 5,
155
155
  silent: true,
156
156
  style: {
157
- fontSize: isDesktop ? 0 : 11,
157
+ fontSize: isDesktop ? 12 : 11,
158
158
  fill: textColor,
159
- text: isDesktop ? '' : labelCallback('tap_chart_to_see_more_details')
159
+ text: isDesktop ? labelCallback('hover_chart_to_see_more_details') : labelCallback('tap_chart_to_see_more_details')
160
160
  }
161
161
  }];
162
162
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getLabelsConfig.js","names":["colorPalette","chroma","CHART_CONFIG","getLabelsConfig","_ref","isDark","isDesktop","labelCallback","ySentimentLabelSize","Y_SENTIMENT_LABEL_DESKTOP_SIZE","Y_SENTIMENT_LABEL_MOBILE_SIZE","yMainLabelSize","Y_LABEL_SIZE_DESKTOP","Y_LABEL_SIZE_MOBILE","textColor","white","black","labelBackgroundColor","darkGray","backgroundColor","shadowColor","alpha","hex","sentimentText","toUpperCase","priceText","sentimentEstimatedWidth","length","priceEstimatedWidth","sentimentVerticalOffset","priceVerticalOffset","topMargin","TOP_MARGIN_DESKTOP","TOP_MARGIN_MOBILE","MOBILE_TOOLTIP_HEIGHT","mainHeight","MAIN_HEIGHT_DESKTOP","MAIN_HEIGHT_MOBILE","type","left","concat","top","silent","children","z","right","shape","width","height","style","fill","shadowBlur","shadowOffsetX","shadowOffsetY","fontSize","fontFamily","fontWeight","text","rotation","Math","PI"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.ts"],"sourcesContent":["import { colorPalette } from '@oanda/labs-widget-common';\nimport chroma from 'chroma-js';\nimport type { GraphicComponentOption } from 'echarts';\n\nimport { CHART_CONFIG } from '../../../constants';\n\ninterface getLabelsConfigParams {\n isDark: boolean;\n isDesktop: boolean;\n labelCallback: (key: string, params?: Record<string, unknown>) => string;\n}\n\nexport const getLabelsConfig = ({\n isDark,\n isDesktop,\n labelCallback,\n}: getLabelsConfigParams): GraphicComponentOption[] => {\n const ySentimentLabelSize = isDesktop\n ? CHART_CONFIG.Y_SENTIMENT_LABEL_DESKTOP_SIZE\n : CHART_CONFIG.Y_SENTIMENT_LABEL_MOBILE_SIZE;\n\n const yMainLabelSize = isDesktop\n ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP\n : CHART_CONFIG.Y_LABEL_SIZE_MOBILE;\n\n const textColor = isDark ? colorPalette.white : colorPalette.black;\n const labelBackgroundColor = isDark\n ? colorPalette.darkGray\n : colorPalette.white;\n const backgroundColor = isDark ? colorPalette.black : colorPalette.white;\n const shadowColor = chroma(colorPalette.black).alpha(0.1).hex();\n\n // Estimate text width for centering rotated text\n // Approximate: fontSize * characterCount * 0.65 (typical character width ratio)\n const sentimentText = labelCallback('sentiment').toUpperCase();\n const priceText = labelCallback('price').toUpperCase();\n const sentimentEstimatedWidth = 10 * sentimentText.length * 0.65;\n const priceEstimatedWidth = 10 * priceText.length * 0.65;\n const sentimentVerticalOffset = sentimentEstimatedWidth / 2;\n const priceVerticalOffset = priceEstimatedWidth / 2;\n\n const topMargin = isDesktop\n ? CHART_CONFIG.TOP_MARGIN_DESKTOP\n : CHART_CONFIG.TOP_MARGIN_MOBILE + CHART_CONFIG.MOBILE_TOOLTIP_HEIGHT;\n\n const mainHeight = isDesktop\n ? CHART_CONFIG.MAIN_HEIGHT_DESKTOP\n : CHART_CONFIG.MAIN_HEIGHT_MOBILE;\n\n return [\n {\n type: 'group',\n left: `${ySentimentLabelSize + 5}px'`,\n top: `${topMargin + 5}px`,\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n right: 'center',\n top: 'middle',\n shape: {\n width: 50,\n height: 24,\n },\n style: {\n fill: labelBackgroundColor,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: shadowColor,\n },\n },\n {\n type: 'text',\n z: 100,\n right: 'center',\n top: 'middle',\n style: {\n fontSize: 11,\n fontFamily: 'Sofia W03',\n fontWeight: 500,\n fill: textColor,\n width: 70,\n height: 30,\n text: labelCallback('short'),\n },\n },\n ],\n },\n {\n type: 'group',\n left: `${ySentimentLabelSize + 5}px'`,\n top: `${topMargin + mainHeight - 24 - 5}px`,\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n right: 'center',\n top: 'middle',\n shape: {\n width: 50,\n height: 24,\n },\n style: {\n fill: labelBackgroundColor,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: shadowColor,\n },\n },\n {\n type: 'text',\n z: 100,\n right: 'center',\n top: 'middle',\n style: {\n fontSize: 11,\n fontFamily: 'Sofia W03',\n fontWeight: 500,\n fill: textColor,\n width: 70,\n height: 30,\n text: labelCallback('long'),\n },\n },\n ],\n },\n\n {\n type: 'text',\n z: 30,\n rotation: isDesktop ? Math.PI / 2 : 0,\n left: `5px`,\n top: isDesktop\n ? `${topMargin + mainHeight / 2 - sentimentVerticalOffset}px`\n : `${topMargin - 16}px`,\n silent: true,\n style: {\n fontSize: 10,\n fontFamily: 'Sofia W03',\n fontWeight: 300,\n fill: textColor,\n text: sentimentText,\n },\n },\n {\n type: 'text',\n z: 30,\n rotation: isDesktop ? -Math.PI / 2 : 0,\n right: `5px`,\n top: isDesktop\n ? `${topMargin + mainHeight / 2 - priceVerticalOffset}px`\n : `${topMargin - 16}px`,\n silent: true,\n style: {\n fontSize: 10,\n fontFamily: 'Sofia W03',\n fontWeight: 300,\n fill: textColor,\n text: priceText,\n },\n },\n {\n type: 'rect',\n z: 20,\n right: '0px',\n top: `${topMargin}px`,\n shape: {\n width: yMainLabelSize,\n height: mainHeight,\n },\n silent: true,\n style: {\n fill: backgroundColor,\n },\n },\n {\n type: 'rect',\n z: 20,\n left: '0px',\n top: `${topMargin}px`,\n shape: {\n width: ySentimentLabelSize,\n height: mainHeight,\n },\n silent: true,\n style: {\n fill: backgroundColor,\n },\n },\n {\n type: 'text',\n z: 20,\n left: 'center',\n top: CHART_CONFIG.MOBILE_TOOLTIP_HEIGHT / 2 - 5,\n silent: true,\n style: {\n fontSize: isDesktop ? 0 : 11,\n fill: textColor,\n text: isDesktop ? '' : labelCallback('tap_chart_to_see_more_details'),\n },\n },\n ];\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"getLabelsConfig.js","names":["colorPalette","chroma","CHART_CONFIG","getLabelsConfig","_ref","isDark","isDesktop","labelCallback","ySentimentLabelSize","Y_SENTIMENT_LABEL_DESKTOP_SIZE","Y_SENTIMENT_LABEL_MOBILE_SIZE","yMainLabelSize","Y_LABEL_SIZE_DESKTOP","Y_LABEL_SIZE_MOBILE","textColor","white","black","labelBackgroundColor","darkGray","backgroundColor","shadowColor","alpha","hex","sentimentText","toUpperCase","priceText","sentimentEstimatedWidth","length","priceEstimatedWidth","sentimentVerticalOffset","priceVerticalOffset","topMargin","TOP_LABEL_SPACE_DESKTOP","TOOLTIP_HEIGHT_DESKTOP","TOP_LABEL_SPACE_MOBILE","TOOLTIP_HEIGHT_MOBILE","mainHeight","MAIN_HEIGHT_DESKTOP","MAIN_HEIGHT_MOBILE","type","left","concat","top","silent","children","z","right","shape","width","height","style","fill","shadowBlur","shadowOffsetX","shadowOffsetY","fontSize","fontFamily","fontWeight","text","rotation","Math","PI"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.ts"],"sourcesContent":["import { colorPalette } from '@oanda/labs-widget-common';\nimport chroma from 'chroma-js';\nimport type { GraphicComponentOption } from 'echarts';\n\nimport { CHART_CONFIG } from '../../../constants';\n\ninterface getLabelsConfigParams {\n isDark: boolean;\n isDesktop: boolean;\n labelCallback: (key: string, params?: Record<string, unknown>) => string;\n}\n\nexport const getLabelsConfig = ({\n isDark,\n isDesktop,\n labelCallback,\n}: getLabelsConfigParams): GraphicComponentOption[] => {\n const ySentimentLabelSize = isDesktop\n ? CHART_CONFIG.Y_SENTIMENT_LABEL_DESKTOP_SIZE\n : CHART_CONFIG.Y_SENTIMENT_LABEL_MOBILE_SIZE;\n\n const yMainLabelSize = isDesktop\n ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP\n : CHART_CONFIG.Y_LABEL_SIZE_MOBILE;\n\n const textColor = isDark ? colorPalette.white : colorPalette.black;\n const labelBackgroundColor = isDark\n ? colorPalette.darkGray\n : colorPalette.white;\n const backgroundColor = isDark ? colorPalette.black : colorPalette.white;\n const shadowColor = chroma(colorPalette.black).alpha(0.1).hex();\n\n // Estimate text width for centering rotated text\n // Approximate: fontSize * characterCount * 0.65 (typical character width ratio)\n const sentimentText = labelCallback('sentiment').toUpperCase();\n const priceText = labelCallback('price').toUpperCase();\n const sentimentEstimatedWidth = 10 * sentimentText.length * 0.65;\n const priceEstimatedWidth = 10 * priceText.length * 0.65;\n const sentimentVerticalOffset = sentimentEstimatedWidth / 2;\n const priceVerticalOffset = priceEstimatedWidth / 2;\n\n const topMargin = isDesktop\n ? CHART_CONFIG.TOP_LABEL_SPACE_DESKTOP + CHART_CONFIG.TOOLTIP_HEIGHT_DESKTOP\n : CHART_CONFIG.TOP_LABEL_SPACE_MOBILE + CHART_CONFIG.TOOLTIP_HEIGHT_MOBILE;\n\n const mainHeight = isDesktop\n ? CHART_CONFIG.MAIN_HEIGHT_DESKTOP\n : CHART_CONFIG.MAIN_HEIGHT_MOBILE;\n\n return [\n {\n type: 'group',\n left: `${ySentimentLabelSize + 5}px'`,\n top: `${topMargin + 5}px`,\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n right: 'center',\n top: 'middle',\n shape: {\n width: 50,\n height: 24,\n },\n style: {\n fill: labelBackgroundColor,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: shadowColor,\n },\n },\n {\n type: 'text',\n z: 100,\n right: 'center',\n top: 'middle',\n style: {\n fontSize: 11,\n fontFamily: 'Sofia W03',\n fontWeight: 500,\n fill: textColor,\n width: 70,\n height: 30,\n text: labelCallback('short'),\n },\n },\n ],\n },\n {\n type: 'group',\n left: `${ySentimentLabelSize + 5}px'`,\n top: `${topMargin + mainHeight - 24 - 5}px`,\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n right: 'center',\n top: 'middle',\n shape: {\n width: 50,\n height: 24,\n },\n style: {\n fill: labelBackgroundColor,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: shadowColor,\n },\n },\n {\n type: 'text',\n z: 100,\n right: 'center',\n top: 'middle',\n style: {\n fontSize: 11,\n fontFamily: 'Sofia W03',\n fontWeight: 500,\n fill: textColor,\n width: 70,\n height: 30,\n text: labelCallback('long'),\n },\n },\n ],\n },\n\n {\n type: 'text',\n z: 30,\n rotation: isDesktop ? Math.PI / 2 : 0,\n left: `5px`,\n top: isDesktop\n ? `${topMargin + mainHeight / 2 - sentimentVerticalOffset}px`\n : `${topMargin - 16}px`,\n silent: true,\n style: {\n fontSize: 10,\n fontFamily: 'Sofia W03',\n fontWeight: 300,\n fill: textColor,\n text: sentimentText,\n },\n },\n {\n type: 'text',\n z: 30,\n rotation: isDesktop ? -Math.PI / 2 : 0,\n right: `5px`,\n top: isDesktop\n ? `${topMargin + mainHeight / 2 - priceVerticalOffset}px`\n : `${topMargin - 16}px`,\n silent: true,\n style: {\n fontSize: 10,\n fontFamily: 'Sofia W03',\n fontWeight: 300,\n fill: textColor,\n text: priceText,\n },\n },\n {\n type: 'rect',\n z: 20,\n right: '0px',\n top: `${topMargin}px`,\n shape: {\n width: yMainLabelSize,\n height: mainHeight,\n },\n silent: true,\n style: {\n fill: backgroundColor,\n },\n },\n {\n type: 'rect',\n z: 20,\n left: '0px',\n top: `${topMargin}px`,\n shape: {\n width: ySentimentLabelSize,\n height: mainHeight,\n },\n silent: true,\n style: {\n fill: backgroundColor,\n },\n },\n {\n type: 'text',\n z: 20,\n left: 'center',\n top: isDesktop\n ? CHART_CONFIG.TOOLTIP_HEIGHT_DESKTOP / 2 - 5\n : CHART_CONFIG.TOOLTIP_HEIGHT_MOBILE / 2 - 5,\n silent: true,\n style: {\n fontSize: isDesktop ? 12 : 11,\n fill: textColor,\n text: isDesktop\n ? labelCallback('hover_chart_to_see_more_details')\n : labelCallback('tap_chart_to_see_more_details'),\n },\n },\n ];\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,18 +1,9 @@
1
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
4
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
- import { colorPalette } from '@oanda/labs-widget-common';
7
- import chroma from 'chroma-js';
8
- import { CHART_CONFIG } from '../../../constants';
9
1
  import { getTooltipFormatter } from '../chartUtils';
10
2
  export const getTooltipConfig = _ref => {
11
3
  let {
12
4
  bookType,
13
5
  bucketWidth,
14
6
  buckets,
15
- displayPrecision,
16
7
  labelCallback,
17
8
  selectedPriceRef,
18
9
  tooltipLinesColor,
@@ -22,27 +13,18 @@ export const getTooltipConfig = _ref => {
22
13
  isDark,
23
14
  locale
24
15
  } = _ref;
25
- const styles = isDesktop ? {
26
- backgroundColor: isDark ? chroma(colorPalette.darkGray).alpha(0.95).hex() : chroma(colorPalette.darkWhite).alpha(0.95).hex(),
27
- shadowColor: colorPalette.black10,
28
- extraCssText: 'z-index: 5;',
29
- padding: 8,
30
- alwaysShowContent: false,
31
- textStyle: {
32
- fontSize: 11
33
- }
34
- } : {
16
+ return {
35
17
  backgroundColor: 'transparent',
36
18
  shadowColor: 'transparent',
37
19
  extraCssText: 'width: 100%; z-index: 5;',
38
20
  padding: 4,
39
- alwaysShowContent: true,
40
- textStyle: {
21
+ textStyle: isDesktop ? {
22
+ fontSize: 12
23
+ } : {
41
24
  fontSize: 10,
42
25
  lineHeight: 12
43
- }
44
- };
45
- return _objectSpread(_objectSpread({}, styles), {}, {
26
+ },
27
+ alwaysShowContent: true,
46
28
  trigger: 'axis',
47
29
  formatter: params => getTooltipFormatter({
48
30
  bookType,
@@ -67,25 +49,10 @@ export const getTooltipConfig = _ref => {
67
49
  crossStyle: {
68
50
  color: tooltipLinesColor
69
51
  },
70
- label: {
71
- padding: 0,
72
- lineHeight: 24,
73
- formatter: params => {
74
- if (params.axisDimension === 'y' && params.axisIndex === 0) {
75
- selectedPriceRef.current = Number(params.value);
76
- return " ".concat(Number(params.value).toFixed(displayPrecision), " ");
77
- }
78
- return '';
79
- }
80
- }
52
+ z: 30
81
53
  },
82
54
  confine: true,
83
- position: point => {
84
- if (isDesktop) {
85
- return [point[0] + CHART_CONFIG.TOOLTIP_OFFSET, point[1] + CHART_CONFIG.TOOLTIP_OFFSET];
86
- }
87
- return [0, 0];
88
- }
89
- });
55
+ position: [0, 0]
56
+ };
90
57
  };
91
58
  //# sourceMappingURL=getTooltipConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getTooltipConfig.js","names":["colorPalette","chroma","CHART_CONFIG","getTooltipFormatter","getTooltipConfig","_ref","bookType","bucketWidth","buckets","displayPrecision","labelCallback","selectedPriceRef","tooltipLinesColor","sentimentLongs","sentimentShorts","isDesktop","isDark","locale","styles","backgroundColor","darkGray","alpha","hex","darkWhite","shadowColor","black10","extraCssText","padding","alwaysShowContent","textStyle","fontSize","lineHeight","_objectSpread","trigger","formatter","params","selectedPrice","current","hideDelay","axisPointer","type","axis","lineStyle","color","crossStyle","label","axisDimension","axisIndex","Number","value","concat","toFixed","confine","position","point","TOOLTIP_OFFSET"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.ts"],"sourcesContent":["import { colorPalette } from '@oanda/labs-widget-common';\nimport chroma from 'chroma-js';\nimport type { TooltipComponentOption } from 'echarts';\n\nimport type { BookType } from '../../../../gql/types/graphql';\nimport { CHART_CONFIG } from '../../../constants';\nimport { getTooltipFormatter } from '../chartUtils';\nimport type { Bucket, TooltipParam } from '../types';\n\ninterface GetTooltipConfigParams {\n bookType: BookType;\n bucketWidth: number;\n buckets: Bucket[][];\n displayPrecision: number;\n labelCallback: (key: string, params?: Record<string, unknown>) => string;\n selectedPriceRef: { current: number };\n tooltipLinesColor: string;\n sentimentLongs: (number | null)[];\n sentimentShorts: (number | null)[];\n isDesktop: boolean;\n isDark: boolean;\n locale: string;\n}\n\nexport const getTooltipConfig = ({\n bookType,\n bucketWidth,\n buckets,\n displayPrecision,\n labelCallback,\n selectedPriceRef,\n tooltipLinesColor,\n sentimentLongs,\n sentimentShorts,\n isDesktop,\n isDark,\n locale,\n}: GetTooltipConfigParams): TooltipComponentOption => {\n const styles = isDesktop\n ? {\n backgroundColor: isDark\n ? chroma(colorPalette.darkGray).alpha(0.95).hex()\n : chroma(colorPalette.darkWhite).alpha(0.95).hex(),\n shadowColor: colorPalette.black10,\n extraCssText: 'z-index: 5;',\n padding: 8,\n alwaysShowContent: false,\n textStyle: {\n fontSize: 11,\n },\n }\n : {\n backgroundColor: 'transparent',\n shadowColor: 'transparent',\n extraCssText: 'width: 100%; z-index: 5;',\n padding: 4,\n alwaysShowContent: true,\n textStyle: {\n fontSize: 10,\n lineHeight: 12,\n },\n };\n return {\n ...styles,\n trigger: 'axis' as const,\n formatter: (params) =>\n getTooltipFormatter({\n bookType,\n bucketWidth,\n buckets,\n labelCallback,\n params: params as unknown as TooltipParam[],\n selectedPrice: selectedPriceRef.current,\n sentimentLongs,\n sentimentShorts,\n isDesktop,\n locale,\n isDark,\n }),\n hideDelay: 0,\n axisPointer: {\n type: 'cross' as const,\n axis: 'x' as const,\n lineStyle: {\n color: tooltipLinesColor,\n },\n crossStyle: {\n color: tooltipLinesColor,\n },\n label: {\n padding: 0,\n lineHeight: 24,\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 confine: true,\n position: (point) => {\n if (isDesktop) {\n return [\n point[0] + CHART_CONFIG.TOOLTIP_OFFSET,\n point[1] + CHART_CONFIG.TOOLTIP_OFFSET,\n ];\n }\n return [0, 0];\n },\n };\n};\n"],"mappings":";;;;;AAAA,SAASA,YAAY,QAAQ,2BAA2B;AACxD,OAAOC,MAAM,MAAM,WAAW;AAI9B,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,mBAAmB,QAAQ,eAAe;AAkBnD,OAAO,MAAMC,gBAAgB,GAAGC,IAAA,IAasB;EAAA,IAbrB;IAC/BC,QAAQ;IACRC,WAAW;IACXC,OAAO;IACPC,gBAAgB;IAChBC,aAAa;IACbC,gBAAgB;IAChBC,iBAAiB;IACjBC,cAAc;IACdC,eAAe;IACfC,SAAS;IACTC,MAAM;IACNC;EACsB,CAAC,GAAAZ,IAAA;EACvB,MAAMa,MAAM,GAAGH,SAAS,GACpB;IACEI,eAAe,EAAEH,MAAM,GACnBf,MAAM,CAACD,YAAY,CAACoB,QAAQ,CAAC,CAACC,KAAK,CAAC,IAAI,CAAC,CAACC,GAAG,CAAC,CAAC,GAC/CrB,MAAM,CAACD,YAAY,CAACuB,SAAS,CAAC,CAACF,KAAK,CAAC,IAAI,CAAC,CAACC,GAAG,CAAC,CAAC;IACpDE,WAAW,EAAExB,YAAY,CAACyB,OAAO;IACjCC,YAAY,EAAE,aAAa;IAC3BC,OAAO,EAAE,CAAC;IACVC,iBAAiB,EAAE,KAAK;IACxBC,SAAS,EAAE;MACTC,QAAQ,EAAE;IACZ;EACF,CAAC,GACD;IACEX,eAAe,EAAE,aAAa;IAC9BK,WAAW,EAAE,aAAa;IAC1BE,YAAY,EAAE,0BAA0B;IACxCC,OAAO,EAAE,CAAC;IACVC,iBAAiB,EAAE,IAAI;IACvBC,SAAS,EAAE;MACTC,QAAQ,EAAE,EAAE;MACZC,UAAU,EAAE;IACd;EACF,CAAC;EACL,OAAAC,aAAA,CAAAA,aAAA,KACKd,MAAM;IACTe,OAAO,EAAE,MAAe;IACxBC,SAAS,EAAGC,MAAM,IAChBhC,mBAAmB,CAAC;MAClBG,QAAQ;MACRC,WAAW;MACXC,OAAO;MACPE,aAAa;MACbyB,MAAM,EAAEA,MAAmC;MAC3CC,aAAa,EAAEzB,gBAAgB,CAAC0B,OAAO;MACvCxB,cAAc;MACdC,eAAe;MACfC,SAAS;MACTE,MAAM;MACND;IACF,CAAC,CAAC;IACJsB,SAAS,EAAE,CAAC;IACZC,WAAW,EAAE;MACXC,IAAI,EAAE,OAAgB;MACtBC,IAAI,EAAE,GAAY;MAClBC,SAAS,EAAE;QACTC,KAAK,EAAE/B;MACT,CAAC;MACDgC,UAAU,EAAE;QACVD,KAAK,EAAE/B;MACT,CAAC;MACDiC,KAAK,EAAE;QACLlB,OAAO,EAAE,CAAC;QACVI,UAAU,EAAE,EAAE;QACdG,SAAS,EAAGC,MAIX,IAAK;UACJ,IAAIA,MAAM,CAACW,aAAa,KAAK,GAAG,IAAIX,MAAM,CAACY,SAAS,KAAK,CAAC,EAAE;YAC1DpC,gBAAgB,CAAC0B,OAAO,GAAGW,MAAM,CAACb,MAAM,CAACc,KAAK,CAAC;YAC/C,WAAAC,MAAA,CAAWF,MAAM,CAACb,MAAM,CAACc,KAAK,CAAC,CAACE,OAAO,CAAC1C,gBAAgB,CAAC;UAC3D;UACA,OAAO,EAAE;QACX;MACF;IACF,CAAC;IACD2C,OAAO,EAAE,IAAI;IACbC,QAAQ,EAAGC,KAAK,IAAK;MACnB,IAAIvC,SAAS,EAAE;QACb,OAAO,CACLuC,KAAK,CAAC,CAAC,CAAC,GAAGpD,YAAY,CAACqD,cAAc,EACtCD,KAAK,CAAC,CAAC,CAAC,GAAGpD,YAAY,CAACqD,cAAc,CACvC;MACH;MACA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACf;EAAC;AAEL,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"getTooltipConfig.js","names":["getTooltipFormatter","getTooltipConfig","_ref","bookType","bucketWidth","buckets","labelCallback","selectedPriceRef","tooltipLinesColor","sentimentLongs","sentimentShorts","isDesktop","isDark","locale","backgroundColor","shadowColor","extraCssText","padding","textStyle","fontSize","lineHeight","alwaysShowContent","trigger","formatter","params","selectedPrice","current","hideDelay","axisPointer","type","axis","lineStyle","color","crossStyle","z","confine","position"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.ts"],"sourcesContent":["import type { TooltipComponentOption } from 'echarts';\n\nimport type { BookType } from '../../../../gql/types/graphql';\nimport { getTooltipFormatter } from '../chartUtils';\nimport type { Bucket, TooltipParam } from '../types';\n\ninterface GetTooltipConfigParams {\n bookType: BookType;\n bucketWidth: number;\n buckets: Bucket[][];\n labelCallback: (key: string, params?: Record<string, unknown>) => string;\n selectedPriceRef: { current: number };\n tooltipLinesColor: string;\n sentimentLongs: (number | null)[];\n sentimentShorts: (number | null)[];\n isDesktop: boolean;\n isDark: boolean;\n locale: string;\n}\n\nexport const getTooltipConfig = ({\n bookType,\n bucketWidth,\n buckets,\n labelCallback,\n selectedPriceRef,\n tooltipLinesColor,\n sentimentLongs,\n sentimentShorts,\n isDesktop,\n isDark,\n locale,\n}: GetTooltipConfigParams): TooltipComponentOption => ({\n backgroundColor: 'transparent',\n shadowColor: 'transparent',\n extraCssText: 'width: 100%; z-index: 5;',\n padding: 4,\n textStyle: isDesktop\n ? {\n fontSize: 12,\n }\n : {\n fontSize: 10,\n lineHeight: 12,\n },\n alwaysShowContent: true,\n trigger: 'axis' as const,\n formatter: (params) =>\n getTooltipFormatter({\n bookType,\n bucketWidth,\n buckets,\n labelCallback,\n params: params as unknown as TooltipParam[],\n selectedPrice: selectedPriceRef.current,\n sentimentLongs,\n sentimentShorts,\n isDesktop,\n locale,\n isDark,\n }),\n hideDelay: 0,\n axisPointer: {\n type: 'cross' as const,\n axis: 'x' as const,\n lineStyle: {\n color: tooltipLinesColor,\n },\n crossStyle: {\n color: tooltipLinesColor,\n },\n z: 30,\n },\n confine: true,\n position: [0, 0],\n});\n"],"mappings":"AAGA,SAASA,mBAAmB,QAAQ,eAAe;AAiBnD,OAAO,MAAMC,gBAAgB,GAAGC,IAAA;EAAA,IAAC;IAC/BC,QAAQ;IACRC,WAAW;IACXC,OAAO;IACPC,aAAa;IACbC,gBAAgB;IAChBC,iBAAiB;IACjBC,cAAc;IACdC,eAAe;IACfC,SAAS;IACTC,MAAM;IACNC;EACsB,CAAC,GAAAX,IAAA;EAAA,OAA8B;IACrDY,eAAe,EAAE,aAAa;IAC9BC,WAAW,EAAE,aAAa;IAC1BC,YAAY,EAAE,0BAA0B;IACxCC,OAAO,EAAE,CAAC;IACVC,SAAS,EAAEP,SAAS,GAChB;MACEQ,QAAQ,EAAE;IACZ,CAAC,GACD;MACEA,QAAQ,EAAE,EAAE;MACZC,UAAU,EAAE;IACd,CAAC;IACLC,iBAAiB,EAAE,IAAI;IACvBC,OAAO,EAAE,MAAe;IACxBC,SAAS,EAAGC,MAAM,IAChBxB,mBAAmB,CAAC;MAClBG,QAAQ;MACRC,WAAW;MACXC,OAAO;MACPC,aAAa;MACbkB,MAAM,EAAEA,MAAmC;MAC3CC,aAAa,EAAElB,gBAAgB,CAACmB,OAAO;MACvCjB,cAAc;MACdC,eAAe;MACfC,SAAS;MACTE,MAAM;MACND;IACF,CAAC,CAAC;IACJe,SAAS,EAAE,CAAC;IACZC,WAAW,EAAE;MACXC,IAAI,EAAE,OAAgB;MACtBC,IAAI,EAAE,GAAY;MAClBC,SAAS,EAAE;QACTC,KAAK,EAAExB;MACT,CAAC;MACDyB,UAAU,EAAE;QACVD,KAAK,EAAExB;MACT,CAAC;MACD0B,CAAC,EAAE;IACL,CAAC;IACDC,OAAO,EAAE,IAAI;IACbC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;EACjB,CAAC;AAAA,CAAC","ignoreList":[]}
@@ -1,9 +1,10 @@
1
- import { formatXAxisAdditionalLabel, formatXAxisLabel, getLabelData } from '../chartUtils';
1
+ import { formatFullDate, formatXAxisAdditionalLabel, formatXAxisLabel, getLabelData } from '../chartUtils';
2
2
  export const getXAxisConfig = _ref => {
3
3
  let {
4
4
  dates,
5
5
  isGreaterThanTwoWeeks,
6
- locale
6
+ locale,
7
+ isDesktop
7
8
  } = _ref;
8
9
  const labelsData = getLabelData({
9
10
  dates,
@@ -24,13 +25,24 @@ export const getXAxisConfig = _ref => {
24
25
  }
25
26
  },
26
27
  axisLabel: {
27
- showMaxLabel: false,
28
28
  padding: [8, 16, 8, 16],
29
29
  margin: 0,
30
- formatter: value => formatXAxisLabel(value, isGreaterThanTwoWeeks, locale)
30
+ formatter: value => value === dates[dates.length - 1] ? '' : formatXAxisLabel(value, isGreaterThanTwoWeeks, locale)
31
31
  },
32
32
  boundaryGap: false,
33
- z: 2
33
+ z: 2,
34
+ axisPointer: {
35
+ label: {
36
+ lineHeight: 22,
37
+ margin: -22,
38
+ padding: [0, 8, 0, 8],
39
+ formatter: params => {
40
+ const date = new Date(params.value);
41
+ return isDesktop ? formatFullDate(date, locale) : '';
42
+ }
43
+ },
44
+ z: 100
45
+ }
34
46
  }, {
35
47
  type: 'category',
36
48
  id: 'additional-xAxis',
@@ -50,6 +62,9 @@ export const getXAxisConfig = _ref => {
50
62
  customValues: labelsData,
51
63
  formatter: value => formatXAxisAdditionalLabel(value, isGreaterThanTwoWeeks, locale)
52
64
  },
65
+ axisPointer: {
66
+ show: false
67
+ },
53
68
  data: dates,
54
69
  boundaryGap: false,
55
70
  z: 2
@@ -1 +1 @@
1
- {"version":3,"file":"getXAxisConfig.js","names":["formatXAxisAdditionalLabel","formatXAxisLabel","getLabelData","getXAxisConfig","_ref","dates","isGreaterThanTwoWeeks","locale","labelsData","type","id","nameTextStyle","fontSize","axisTick","show","splitLine","lineStyle","opacity","axisLabel","showMaxLabel","padding","margin","formatter","value","boundaryGap","z","gridIndex","axisLine","hideOverlap","customValues","data"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.ts"],"sourcesContent":["import type { XAXisComponentOption } from 'echarts';\n\nimport {\n formatXAxisAdditionalLabel,\n formatXAxisLabel,\n getLabelData,\n} from '../chartUtils';\n\ninterface GetXAxisConfigParams {\n dates: string[];\n isGreaterThanTwoWeeks: boolean;\n locale: string;\n}\n\nexport const getXAxisConfig = ({\n dates,\n isGreaterThanTwoWeeks,\n locale,\n}: GetXAxisConfigParams): XAXisComponentOption[] => {\n const labelsData = getLabelData({\n dates,\n isGreaterThanTwoWeeks,\n });\n\n return [\n {\n type: 'category',\n id: 'main-xAxis',\n nameTextStyle: {\n fontSize: 0,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n lineStyle: {\n opacity: 0.5,\n },\n },\n axisLabel: {\n showMaxLabel: false,\n padding: [8, 16, 8, 16],\n margin: 0,\n formatter: (value: unknown) =>\n formatXAxisLabel(value, isGreaterThanTwoWeeks, locale),\n },\n boundaryGap: false,\n z: 2,\n },\n {\n type: 'category',\n id: 'additional-xAxis',\n gridIndex: 1,\n axisTick: {\n show: false,\n },\n axisLine: {\n show: false,\n },\n splitLine: {\n show: false,\n },\n axisLabel: {\n margin: 24,\n hideOverlap: true,\n customValues: labelsData,\n formatter: (value: unknown) =>\n formatXAxisAdditionalLabel(value, isGreaterThanTwoWeeks, locale),\n },\n data: dates,\n boundaryGap: false,\n z: 2,\n },\n ];\n};\n"],"mappings":"AAEA,SACEA,0BAA0B,EAC1BC,gBAAgB,EAChBC,YAAY,QACP,eAAe;AAQtB,OAAO,MAAMC,cAAc,GAAGC,IAAA,IAIsB;EAAA,IAJrB;IAC7BC,KAAK;IACLC,qBAAqB;IACrBC;EACoB,CAAC,GAAAH,IAAA;EACrB,MAAMI,UAAU,GAAGN,YAAY,CAAC;IAC9BG,KAAK;IACLC;EACF,CAAC,CAAC;EAEF,OAAO,CACL;IACEG,IAAI,EAAE,UAAU;IAChBC,EAAE,EAAE,YAAY;IAChBC,aAAa,EAAE;MACbC,QAAQ,EAAE;IACZ,CAAC;IACDC,QAAQ,EAAE;MACRC,IAAI,EAAE;IACR,CAAC;IACDC,SAAS,EAAE;MACTC,SAAS,EAAE;QACTC,OAAO,EAAE;MACX;IACF,CAAC;IACDC,SAAS,EAAE;MACTC,YAAY,EAAE,KAAK;MACnBC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;MACvBC,MAAM,EAAE,CAAC;MACTC,SAAS,EAAGC,KAAc,IACxBtB,gBAAgB,CAACsB,KAAK,EAAEjB,qBAAqB,EAAEC,MAAM;IACzD,CAAC;IACDiB,WAAW,EAAE,KAAK;IAClBC,CAAC,EAAE;EACL,CAAC,EACD;IACEhB,IAAI,EAAE,UAAU;IAChBC,EAAE,EAAE,kBAAkB;IACtBgB,SAAS,EAAE,CAAC;IACZb,QAAQ,EAAE;MACRC,IAAI,EAAE;IACR,CAAC;IACDa,QAAQ,EAAE;MACRb,IAAI,EAAE;IACR,CAAC;IACDC,SAAS,EAAE;MACTD,IAAI,EAAE;IACR,CAAC;IACDI,SAAS,EAAE;MACTG,MAAM,EAAE,EAAE;MACVO,WAAW,EAAE,IAAI;MACjBC,YAAY,EAAErB,UAAU;MACxBc,SAAS,EAAGC,KAAc,IACxBvB,0BAA0B,CAACuB,KAAK,EAAEjB,qBAAqB,EAAEC,MAAM;IACnE,CAAC;IACDuB,IAAI,EAAEzB,KAAK;IACXmB,WAAW,EAAE,KAAK;IAClBC,CAAC,EAAE;EACL,CAAC,CACF;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"getXAxisConfig.js","names":["formatFullDate","formatXAxisAdditionalLabel","formatXAxisLabel","getLabelData","getXAxisConfig","_ref","dates","isGreaterThanTwoWeeks","locale","isDesktop","labelsData","type","id","nameTextStyle","fontSize","axisTick","show","splitLine","lineStyle","opacity","axisLabel","padding","margin","formatter","value","length","boundaryGap","z","axisPointer","label","lineHeight","params","date","Date","gridIndex","axisLine","hideOverlap","customValues","data"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.ts"],"sourcesContent":["import type { XAXisComponentOption } from 'echarts';\n\nimport {\n formatFullDate,\n formatXAxisAdditionalLabel,\n formatXAxisLabel,\n getLabelData,\n} from '../chartUtils';\n\ninterface GetXAxisConfigParams {\n dates: string[];\n isGreaterThanTwoWeeks: boolean;\n locale: string;\n isDesktop: boolean;\n}\n\nexport const getXAxisConfig = ({\n dates,\n isGreaterThanTwoWeeks,\n locale,\n isDesktop,\n}: GetXAxisConfigParams): XAXisComponentOption[] => {\n const labelsData = getLabelData({\n dates,\n isGreaterThanTwoWeeks,\n });\n\n return [\n {\n type: 'category',\n id: 'main-xAxis',\n nameTextStyle: {\n fontSize: 0,\n },\n axisTick: {\n show: false,\n },\n splitLine: {\n lineStyle: {\n opacity: 0.5,\n },\n },\n axisLabel: {\n padding: [8, 16, 8, 16],\n margin: 0,\n formatter: (value: unknown) =>\n value === dates[dates.length - 1]\n ? ''\n : formatXAxisLabel(value, isGreaterThanTwoWeeks, locale),\n },\n boundaryGap: false,\n z: 2,\n axisPointer: {\n label: {\n lineHeight: 22,\n margin: -22,\n padding: [0, 8, 0, 8],\n formatter: (params: {\n axisDimension?: string;\n axisIndex?: number;\n value: unknown;\n }) => {\n const date = new Date(params.value as string);\n\n return isDesktop ? formatFullDate(date, locale) : '';\n },\n },\n z: 100,\n },\n },\n {\n type: 'category',\n id: 'additional-xAxis',\n gridIndex: 1,\n axisTick: {\n show: false,\n },\n axisLine: {\n show: false,\n },\n splitLine: {\n show: false,\n },\n axisLabel: {\n margin: 24,\n hideOverlap: true,\n customValues: labelsData,\n formatter: (value: unknown) =>\n formatXAxisAdditionalLabel(value, isGreaterThanTwoWeeks, locale),\n },\n axisPointer: {\n show: false,\n },\n data: dates,\n boundaryGap: false,\n z: 2,\n },\n ];\n};\n"],"mappings":"AAEA,SACEA,cAAc,EACdC,0BAA0B,EAC1BC,gBAAgB,EAChBC,YAAY,QACP,eAAe;AAStB,OAAO,MAAMC,cAAc,GAAGC,IAAA,IAKsB;EAAA,IALrB;IAC7BC,KAAK;IACLC,qBAAqB;IACrBC,MAAM;IACNC;EACoB,CAAC,GAAAJ,IAAA;EACrB,MAAMK,UAAU,GAAGP,YAAY,CAAC;IAC9BG,KAAK;IACLC;EACF,CAAC,CAAC;EAEF,OAAO,CACL;IACEI,IAAI,EAAE,UAAU;IAChBC,EAAE,EAAE,YAAY;IAChBC,aAAa,EAAE;MACbC,QAAQ,EAAE;IACZ,CAAC;IACDC,QAAQ,EAAE;MACRC,IAAI,EAAE;IACR,CAAC;IACDC,SAAS,EAAE;MACTC,SAAS,EAAE;QACTC,OAAO,EAAE;MACX;IACF,CAAC;IACDC,SAAS,EAAE;MACTC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;MACvBC,MAAM,EAAE,CAAC;MACTC,SAAS,EAAGC,KAAc,IACxBA,KAAK,KAAKlB,KAAK,CAACA,KAAK,CAACmB,MAAM,GAAG,CAAC,CAAC,GAC7B,EAAE,GACFvB,gBAAgB,CAACsB,KAAK,EAAEjB,qBAAqB,EAAEC,MAAM;IAC7D,CAAC;IACDkB,WAAW,EAAE,KAAK;IAClBC,CAAC,EAAE,CAAC;IACJC,WAAW,EAAE;MACXC,KAAK,EAAE;QACLC,UAAU,EAAE,EAAE;QACdR,MAAM,EAAE,CAAC,EAAE;QACXD,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrBE,SAAS,EAAGQ,MAIX,IAAK;UACJ,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAACF,MAAM,CAACP,KAAe,CAAC;UAE7C,OAAOf,SAAS,GAAGT,cAAc,CAACgC,IAAI,EAAExB,MAAM,CAAC,GAAG,EAAE;QACtD;MACF,CAAC;MACDmB,CAAC,EAAE;IACL;EACF,CAAC,EACD;IACEhB,IAAI,EAAE,UAAU;IAChBC,EAAE,EAAE,kBAAkB;IACtBsB,SAAS,EAAE,CAAC;IACZnB,QAAQ,EAAE;MACRC,IAAI,EAAE;IACR,CAAC;IACDmB,QAAQ,EAAE;MACRnB,IAAI,EAAE;IACR,CAAC;IACDC,SAAS,EAAE;MACTD,IAAI,EAAE;IACR,CAAC;IACDI,SAAS,EAAE;MACTE,MAAM,EAAE,EAAE;MACVc,WAAW,EAAE,IAAI;MACjBC,YAAY,EAAE3B,UAAU;MACxBa,SAAS,EAAGC,KAAc,IACxBvB,0BAA0B,CAACuB,KAAK,EAAEjB,qBAAqB,EAAEC,MAAM;IACnE,CAAC;IACDoB,WAAW,EAAE;MACXZ,IAAI,EAAE;IACR,CAAC;IACDsB,IAAI,EAAEhC,KAAK;IACXoB,WAAW,EAAE,KAAK;IAClBC,CAAC,EAAE;EACL,CAAC,CACF;AACH,CAAC","ignoreList":[]}
@@ -3,7 +3,7 @@ export const getYAxisConfig = _ref => {
3
3
  let {
4
4
  bucketWidth,
5
5
  displayPrecision,
6
- isDesktop
6
+ selectedPriceRef
7
7
  } = _ref;
8
8
  return [{
9
9
  type: 'value',
@@ -33,6 +33,19 @@ export const getYAxisConfig = _ref => {
33
33
  verticalAlignMaxLabel: 'top',
34
34
  formatter: value => value.toFixed(displayPrecision)
35
35
  },
36
+ axisPointer: {
37
+ label: {
38
+ padding: [4, 4, 4, 4],
39
+ margin: -1,
40
+ formatter: params => {
41
+ if (params.axisDimension === 'y' && params.axisIndex === 0) {
42
+ selectedPriceRef.current = Number(params.value);
43
+ return Number(params.value).toFixed(displayPrecision);
44
+ }
45
+ return '';
46
+ }
47
+ }
48
+ },
36
49
  z: 30
37
50
  }, {
38
51
  type: 'value',
@@ -56,7 +69,7 @@ export const getYAxisConfig = _ref => {
56
69
  margin: 4,
57
70
  lineHeight: 20,
58
71
  verticalAlignMinLabel: 'bottom',
59
- verticalAlignMaxLabel: isDesktop ? 'middle' : 'top',
72
+ verticalAlignMaxLabel: 'top',
60
73
  customValues: [CHART_CONFIG.SENTIMENT_MIN, CHART_CONFIG.SENTIMENT_MAX / 5, CHART_CONFIG.SENTIMENT_MAX / 2, CHART_CONFIG.SENTIMENT_MAX * 4 / 5, CHART_CONFIG.SENTIMENT_MAX],
61
74
  formatter: value => "".concat(value, "%")
62
75
  },
@@ -1 +1 @@
1
- {"version":3,"file":"getYAxisConfig.js","names":["CHART_CONFIG","getYAxisConfig","_ref","bucketWidth","displayPrecision","isDesktop","type","gridIndex","position","min","val","adjustedMin","Math","floor","max","adjustedMax","ceil","axisLine","show","axisTick","splitLine","axisLabel","lineHeight","margin","verticalAlignMinLabel","verticalAlignMaxLabel","formatter","value","toFixed","z","SENTIMENT_MIN","SENTIMENT_MAX","axisPointer","customValues","concat"],"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 isDesktop: boolean;\n}\n\nexport const getYAxisConfig = ({\n bucketWidth,\n displayPrecision,\n isDesktop,\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 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: isDesktop ? 'middle' : '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,SAASA,YAAY,QAAQ,oBAAoB;AAQjD,OAAO,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,CAAC,EAAE;EACL,CAAC,EACD;IACEvB,IAAI,EAAE,OAAO;IACbC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAE,MAAM;IAChBC,GAAG,EAAET,YAAY,CAAC8B,aAAa;IAC/BhB,GAAG,EAAEd,YAAY,CAAC+B,aAAa;IAC/Bd,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAM,CAAC;IACzBC,QAAQ,EAAE;MAAED,IAAI,EAAE;IAAM,CAAC;IACzBc,WAAW,EAAE;MAAEd,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,EAAEpB,SAAS,GAAG,QAAQ,GAAG,KAAK;MACnD4B,YAAY,EAAE,CACZjC,YAAY,CAAC8B,aAAa,EAC1B9B,YAAY,CAAC+B,aAAa,GAAG,CAAC,EAC9B/B,YAAY,CAAC+B,aAAa,GAAG,CAAC,EAC7B/B,YAAY,CAAC+B,aAAa,GAAG,CAAC,GAAI,CAAC,EACpC/B,YAAY,CAAC+B,aAAa,CAC3B;MACDL,SAAS,EAAGC,KAAa,OAAAO,MAAA,CAAQP,KAAK;IACxC,CAAC;IACDE,CAAC,EAAE;EACL,CAAC,CACF;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"getYAxisConfig.js","names":["CHART_CONFIG","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","SENTIMENT_MIN","SENTIMENT_MAX","customValues","concat"],"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,SAASA,YAAY,QAAQ,oBAAoB;AAQjD,OAAO,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,EAAET,YAAY,CAACsC,aAAa;IAC/BxB,GAAG,EAAEd,YAAY,CAACuC,aAAa;IAC/BtB,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;MAC5Be,YAAY,EAAE,CACZxC,YAAY,CAACsC,aAAa,EAC1BtC,YAAY,CAACuC,aAAa,GAAG,CAAC,EAC9BvC,YAAY,CAACuC,aAAa,GAAG,CAAC,EAC7BvC,YAAY,CAACuC,aAAa,GAAG,CAAC,GAAI,CAAC,EACpCvC,YAAY,CAACuC,aAAa,CAC3B;MACDb,SAAS,EAAGC,KAAa,OAAAc,MAAA,CAAQd,KAAK;IACxC,CAAC;IACDU,CAAC,EAAE;EACL,CAAC,CACF;AAAA","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ export const formatFullDate = (date, locale) => {
2
+ var _parts$find;
3
+ const formattedDate = date.toLocaleDateString(locale, {
4
+ day: 'numeric',
5
+ month: '2-digit',
6
+ year: '2-digit'
7
+ }).replace(/\//g, '.');
8
+ const formattedTime = date.toLocaleTimeString(locale, {
9
+ hour: 'numeric',
10
+ minute: '2-digit',
11
+ hour12: false
12
+ });
13
+ const formatter = new Intl.DateTimeFormat('en-US', {
14
+ timeZoneName: 'shortOffset'
15
+ });
16
+ const parts = formatter.formatToParts(date);
17
+ const timeZoneOffset = (_parts$find = parts.find(part => part.type === 'timeZoneName')) === null || _parts$find === void 0 ? void 0 : _parts$find.value;
18
+ return "".concat(formattedDate, " ").concat(formattedTime, " ").concat(timeZoneOffset);
19
+ };
20
+ //# sourceMappingURL=formatFullDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatFullDate.js","names":["formatFullDate","date","locale","_parts$find","formattedDate","toLocaleDateString","day","month","year","replace","formattedTime","toLocaleTimeString","hour","minute","hour12","formatter","Intl","DateTimeFormat","timeZoneName","parts","formatToParts","timeZoneOffset","find","part","type","value","concat"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/formatFullDate.ts"],"sourcesContent":["export const formatFullDate = (date: Date, locale: string): string => {\n const formattedDate = date\n .toLocaleDateString(locale, {\n day: 'numeric',\n month: '2-digit',\n year: '2-digit',\n })\n .replace(/\\//g, '.');\n\n const formattedTime = date.toLocaleTimeString(locale, {\n hour: 'numeric',\n minute: '2-digit',\n hour12: false,\n });\n\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZoneName: 'shortOffset',\n });\n\n const parts = formatter.formatToParts(date);\n const timeZoneOffset = parts.find(\n (part) => part.type === 'timeZoneName'\n )?.value;\n\n return `${formattedDate} ${formattedTime} ${timeZoneOffset}`;\n};\n"],"mappings":"AAAA,OAAO,MAAMA,cAAc,GAAGA,CAACC,IAAU,EAAEC,MAAc,KAAa;EAAA,IAAAC,WAAA;EACpE,MAAMC,aAAa,GAAGH,IAAI,CACvBI,kBAAkB,CAACH,MAAM,EAAE;IAC1BI,GAAG,EAAE,SAAS;IACdC,KAAK,EAAE,SAAS;IAChBC,IAAI,EAAE;EACR,CAAC,CAAC,CACDC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;EAEtB,MAAMC,aAAa,GAAGT,IAAI,CAACU,kBAAkB,CAACT,MAAM,EAAE;IACpDU,IAAI,EAAE,SAAS;IACfC,MAAM,EAAE,SAAS;IACjBC,MAAM,EAAE;EACV,CAAC,CAAC;EAEF,MAAMC,SAAS,GAAG,IAAIC,IAAI,CAACC,cAAc,CAAC,OAAO,EAAE;IACjDC,YAAY,EAAE;EAChB,CAAC,CAAC;EAEF,MAAMC,KAAK,GAAGJ,SAAS,CAACK,aAAa,CAACnB,IAAI,CAAC;EAC3C,MAAMoB,cAAc,IAAAlB,WAAA,GAAGgB,KAAK,CAACG,IAAI,CAC9BC,IAAI,IAAKA,IAAI,CAACC,IAAI,KAAK,cAC1B,CAAC,cAAArB,WAAA,uBAFsBA,WAAA,CAEpBsB,KAAK;EAER,UAAAC,MAAA,CAAUtB,aAAa,OAAAsB,MAAA,CAAIhB,aAAa,OAAAgB,MAAA,CAAIL,cAAc;AAC5D,CAAC","ignoreList":[]}
@@ -1,14 +1,6 @@
1
1
  import { colorPalette } from '@oanda/labs-widget-common';
2
2
  import { BookType } from '../../../../gql/types/graphql';
3
- const DATE_FORMAT_OPTIONS = {
4
- day: 'numeric',
5
- month: 'numeric',
6
- year: 'numeric',
7
- hour: 'numeric',
8
- minute: '2-digit',
9
- hour12: false,
10
- timeZoneName: 'shortOffset'
11
- };
3
+ import { formatFullDate } from './formatFullDate';
12
4
  const SENTIMENT_DISPLAY_PRECISION = 2;
13
5
  const TOOLTIP_STYLES = {
14
6
  MOBILE_COLUMN_WIDTH: '33.3%',
@@ -36,14 +28,14 @@ const getSentimentOverbalanceLabel = (sentiment, bookType) => {
36
28
  }
37
29
  return bookType === BookType.Order ? 'buy_overbalance' : 'long_overbalance';
38
30
  };
39
- const formatCandleData = (candleData, labelCallback) => {
31
+ const formatCandleData = (candleData, labelCallback, isDesktop) => {
40
32
  const [, open, close, low, high] = candleData;
41
33
  const candleLabel = labelCallback('candle');
42
34
  const openLabel = labelCallback('open');
43
35
  const closeLabel = labelCallback('close');
44
36
  const lowLabel = labelCallback('low');
45
37
  const highLabel = labelCallback('high');
46
- return "<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>\n");
38
+ 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");
47
39
  };
48
40
  const formatBookData = _ref => {
49
41
  let {
@@ -59,10 +51,10 @@ const formatBookData = _ref => {
59
51
  const priceRangeEnd = (matchedBucket.price + bucketWidth).toFixed(bucketDisplayPrecision);
60
52
  const sentimentLabel = getSentimentOverbalanceLabel(matchedBucket.sentiment, bookType);
61
53
  const sentimentValue = Math.abs(matchedBucket.sentiment);
62
- return isDesktop ? "<div><b>".concat(labelCallback(bookLabelKey), ":</b></div>\n<div>").concat(labelCallback('price_range'), ": ").concat(priceRangeStart, " - ").concat(priceRangeEnd, " </div>\n<div>").concat(labelCallback(sentimentLabel), ": ").concat(sentimentValue, "% </div>") : "<div><b>".concat(labelCallback(bookLabelKey), ":</b></div>\n<div>").concat(labelCallback('price_range'), ":</div>\n<div>").concat(priceRangeStart, " - ").concat(priceRangeEnd, " </div>\n<div>").concat(labelCallback(sentimentLabel), ":</div>\n<div>").concat(sentimentValue, "% </div>");
54
+ return isDesktop ? "<div><b>".concat(labelCallback(bookLabelKey), ":</b></div>\n<span style=\"margin-right: 4px;\">").concat(labelCallback('price_range'), ": ").concat(priceRangeStart, " - ").concat(priceRangeEnd, " </span>\n<span style=\"margin-right: 4px;\">").concat(labelCallback(sentimentLabel), ": ").concat(sentimentValue, "% </span>") : "<div><b>".concat(labelCallback(bookLabelKey), ":</b></div>\n<div>").concat(labelCallback('price_range'), ":</div>\n<div>").concat(priceRangeStart, " - ").concat(priceRangeEnd, " </div>\n<div>").concat(labelCallback(sentimentLabel), ":</div>\n<div>").concat(sentimentValue, "% </div>");
63
55
  };
64
- const formatSentimentData = (sentimentLong, sentimentShort, labelCallback) => {
65
- return "<div><b>".concat(labelCallback('sentiment'), ":</b></div>\n<div>").concat(labelCallback('long'), ": ").concat(sentimentLong.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </div>\n<div>").concat(labelCallback('short'), ": ").concat(sentimentShort.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </div>");
56
+ const formatSentimentData = (sentimentLong, sentimentShort, labelCallback, isDesktop) => {
57
+ return isDesktop ? "<div><b>".concat(labelCallback('sentiment'), ":</b></div>\n <span style=\"margin-right: 4px;\">").concat(labelCallback('long'), ": ").concat(sentimentLong.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </span>\n <span style=\"margin-right: 4px;\">").concat(labelCallback('short'), ": ").concat(sentimentShort.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </span>") : "<div><b>".concat(labelCallback('sentiment'), ":</b></div>\n<div>").concat(labelCallback('long'), ": ").concat(sentimentLong.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </div>\n<div>").concat(labelCallback('short'), ": ").concat(sentimentShort.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </div>");
66
58
  };
67
59
  const hasValidCandleData = candleData => !!candleData[1] && !!candleData[2] && !!candleData[3] && !!candleData[4];
68
60
  const hasValidSentimentData = (sentimentLong, sentimentShort) => sentimentLong !== null && sentimentShort !== null;
@@ -114,8 +106,8 @@ export const getTooltipFormatter = _ref3 => {
114
106
  if (!showCandles && !matchedBucket) {
115
107
  return '';
116
108
  }
117
- const timeFormatted = time.toLocaleString(locale, DATE_FORMAT_OPTIONS).replace(/\//g, '.');
118
- const candleSection = showCandles ? formatCandleData(candleData, labelCallback) : '';
109
+ const timeFormatted = formatFullDate(time, locale);
110
+ const candleSection = showCandles ? formatCandleData(candleData, labelCallback, isDesktop) : '';
119
111
  const bookSection = matchedBucket ? formatBookData({
120
112
  matchedBucket,
121
113
  bucketWidth,
@@ -124,14 +116,14 @@ export const getTooltipFormatter = _ref3 => {
124
116
  labelCallback,
125
117
  isDesktop
126
118
  }) : '';
127
- const sentimentSection = showSentiment && sentimentLong && sentimentShort ? formatSentimentData(sentimentLong, sentimentShort, labelCallback) : '';
119
+ const sentimentSection = showSentiment && sentimentLong && sentimentShort ? formatSentimentData(sentimentLong, sentimentShort, labelCallback, isDesktop) : '';
128
120
  if (isDesktop) {
129
121
  return buildDesktopTooltip({
130
122
  timeFormatted,
131
123
  candleSection,
132
124
  sentimentSection,
133
125
  bookSection,
134
- hasMatchedBucket: !!matchedBucket
126
+ isDark
135
127
  });
136
128
  }
137
129
  return buildMobileTooltip({
@@ -144,15 +136,14 @@ export const getTooltipFormatter = _ref3 => {
144
136
  };
145
137
  const buildDesktopTooltip = _ref4 => {
146
138
  let {
147
- timeFormatted,
148
139
  candleSection,
149
140
  sentimentSection,
150
141
  bookSection,
151
- hasMatchedBucket
142
+ isDark
152
143
  } = _ref4;
153
- const padding = TOOLTIP_STYLES.PADDING_BOTTOM;
154
- const sentimentPadding = hasMatchedBucket ? padding : '0px';
155
- return "<div style=\"padding-bottom: ".concat(padding, ";\">").concat(timeFormatted, "</div>\n<div style=\"padding-bottom: ").concat(padding, ";\">").concat(candleSection, "</div>\n<div style=\"padding-bottom: ").concat(sentimentPadding, ";\">").concat(sentimentSection, "</div>\n<div>").concat(bookSection, "</div>\n");
144
+ const backgroundColor = isDark ? colorPalette.black : colorPalette.white;
145
+ const fullWidth = TOOLTIP_STYLES.FULL_WIDTH;
146
+ return "<div style=\"width: ".concat(fullWidth, "; background-color: ").concat(backgroundColor, ";\">\n <div style=\"width: ").concat(fullWidth, "; display: flex; justify-content: space-between;\">\n <div style=\"width: 40%;\">\n").concat(candleSection, "\n</div>\n<div style=\"width: 22%;\">\n").concat(sentimentSection, "\n</div>\n<div style=\"width: 38%;\">\n").concat(bookSection, "\n</div>\n</div>\n</div>");
156
147
  };
157
148
  const buildMobileTooltip = _ref5 => {
158
149
  let {
@@ -1 +1 @@
1
- {"version":3,"file":"getTooltipFormatter.js","names":["colorPalette","BookType","DATE_FORMAT_OPTIONS","day","month","year","hour","minute","hour12","timeZoneName","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","Order","formatCandleData","candleData","labelCallback","open","close","low","high","candleLabel","openLabel","closeLabel","lowLabel","highLabel","concat","formatBookData","_ref","matchedBucket","bucketDisplayPrecision","isDesktop","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","toLocaleString","replace","candleSection","bookSection","sentimentSection","buildDesktopTooltip","hasMatchedBucket","buildMobileTooltip","_ref4","padding","sentimentPadding","_ref5","backgroundColor","black","white","columnWidth","fullWidth"],"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';\n\nconst DATE_FORMAT_OPTIONS: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n\n hour: 'numeric',\n minute: '2-digit',\n hour12: false,\n\n timeZoneName: 'shortOffset',\n};\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): 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 `<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};\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<div>${labelCallback('price_range')}: ${priceRangeStart} - ${priceRangeEnd} </div>\n<div>${labelCallback(sentimentLabel)}: ${sentimentValue}% </div>`\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): string => {\n return `<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 = time\n .toLocaleString(locale, DATE_FORMAT_OPTIONS)\n .replace(/\\//g, '.');\n const candleSection = showCandles\n ? formatCandleData(candleData, labelCallback)\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(sentimentLong, sentimentShort, labelCallback)\n : '';\n\n if (isDesktop) {\n return buildDesktopTooltip({\n timeFormatted,\n candleSection,\n sentimentSection,\n bookSection,\n hasMatchedBucket: !!matchedBucket,\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 timeFormatted,\n candleSection,\n sentimentSection,\n bookSection,\n hasMatchedBucket,\n}: TooltipSections & { hasMatchedBucket: boolean }): string => {\n const padding = TOOLTIP_STYLES.PADDING_BOTTOM;\n const sentimentPadding = hasMatchedBucket ? padding : '0px';\n\n return `<div style=\"padding-bottom: ${padding};\">${timeFormatted}</div>\n<div style=\"padding-bottom: ${padding};\">${candleSection}</div>\n<div style=\"padding-bottom: ${sentimentPadding};\">${sentimentSection}</div>\n<div>${bookSection}</div>\n`;\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":["colorPalette","BookType","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","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","candleSection","bookSection","sentimentSection","buildDesktopTooltip","buildMobileTooltip","_ref4","backgroundColor","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":"AAAA,SAASA,YAAY,QAAQ,2BAA2B;AAExD,SAASC,QAAQ,QAAQ,+BAA+B;AAExD,SAASC,cAAc,QAAQ,kBAAkB;AAEjD,MAAMC,2BAA2B,GAAG,CAAC;AAErC,MAAMC,cAAc,GAAG;EACrBC,mBAAmB,EAAE,OAAO;EAC5BC,cAAc,EAAE,KAAK;EACrBC,UAAU,EAAE;AACd,CAAU;AAEV,MAAMC,+BAA+B,GAAIC,WAAmB,IAAa;EAAA,IAAAC,qBAAA;EACvE,OAAO,EAAAA,qBAAA,GAAAD,WAAW,CAACE,QAAQ,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAAF,qBAAA,uBAApCA,qBAAA,CAAsCG,MAAM,KAAI,CAAC;AAC1D,CAAC;AAED,MAAMC,eAAe,GAAGA,CACtBC,MAAsB,EACtBC,QAAW,KAC4C;EACvD,OAAOD,MAAM,CAACE,IAAI,CACfC,MAAM,IACLA,MAAM,CAACF,QAAQ,KAAKA,QACxB,CAAC;AACH,CAAC;AAED,MAAMG,wBAAwB,GAAGA,CAC/BJ,MAAsB,EACtBK,cAAiC,EACjCC,eAAkC,KAI/B;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACH,MAAMC,KAAK,GAAGT,MAAM,CAAC,CAAC,CAAC,CAACU,SAAmB;EAE3C,OAAO;IACLC,aAAa,GAAAJ,qBAAA,GAAEF,cAAc,CAACI,KAAK,CAAC,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,IAAI;IAC5CK,cAAc,GAAAJ,qBAAA,GAAEF,eAAe,CAACG,KAAK,CAAC,cAAAD,qBAAA,cAAAA,qBAAA,GAAI;EAC5C,CAAC;AACH,CAAC;AAED,MAAMK,4BAA4B,GAAGA,CACnCC,SAAiB,EACjBC,QAAkB,KACP;EACX,IAAID,SAAS,GAAG,CAAC,EAAE;IACjB,OAAOC,QAAQ,KAAK7B,QAAQ,CAAC8B,KAAK,GAC9B,kBAAkB,GAClB,mBAAmB;EACzB;EACA,OAAOD,QAAQ,KAAK7B,QAAQ,CAAC8B,KAAK,GAAG,iBAAiB,GAAG,kBAAkB;AAC7E,CAAC;AAED,MAAMC,gBAAgB,GAAGA,CACvBC,UAAoD,EACpDC,aAAsC,EACtCC,SAAkB,KACP;EACX,MAAM,GAAGC,IAAI,EAAEC,KAAK,EAAEC,GAAG,EAAEC,IAAI,CAAC,GAAGN,UAAU;EAC7C,MAAMO,WAAW,GAAGN,aAAa,CAAC,QAAQ,CAAC;EAC3C,MAAMO,SAAS,GAAGP,aAAa,CAAC,MAAM,CAAC;EACvC,MAAMQ,UAAU,GAAGR,aAAa,CAAC,OAAO,CAAC;EACzC,MAAMS,QAAQ,GAAGT,aAAa,CAAC,KAAK,CAAC;EACrC,MAAMU,SAAS,GAAGV,aAAa,CAAC,MAAM,CAAC;EAEvC,OAAOC,SAAS,cAAAU,MAAA,CACDL,WAAW,qFAAAK,MAAA,CAErBJ,SAAS,QAAAI,MAAA,CAAKT,IAAI,oBAAAS,MAAA,CAClBD,SAAS,QAAAC,MAAA,CAAKN,IAAI,oBAAAM,MAAA,CAClBF,QAAQ,QAAAE,MAAA,CAAKP,GAAG,oBAAAO,MAAA,CAChBH,UAAU,QAAAG,MAAA,CAAKR,KAAK,kCAAAQ,MAAA,CAEVL,WAAW,wBAAAK,MAAA,CACrBJ,SAAS,QAAAI,MAAA,CAAKT,IAAI,oBAAAS,MAAA,CAClBD,SAAS,QAAAC,MAAA,CAAKN,IAAI,oBAAAM,MAAA,CAClBF,QAAQ,QAAAE,MAAA,CAAKP,GAAG,oBAAAO,MAAA,CAChBH,UAAU,QAAAG,MAAA,CAAKR,KAAK,cAC1B;AACD,CAAC;AAED,MAAMS,cAAc,GAAGC,IAAA,IAcT;EAAA,IAdU;IACtBC,aAAa;IACbvC,WAAW;IACXwC,sBAAsB;IACtBnB,QAAQ;IACRI,aAAa;IACbC;EAQF,CAAC,GAAAY,IAAA;EACC,MAAMG,YAAY,GAAGpB,QAAQ,KAAK7B,QAAQ,CAAC8B,KAAK,GAAG,QAAQ,GAAG,QAAQ;EACtE,MAAMoB,eAAe,GAAGH,aAAa,CAACI,KAAK,CAACC,OAAO,CAACJ,sBAAsB,CAAC;EAC3E,MAAMK,aAAa,GAAG,CAACN,aAAa,CAACI,KAAK,GAAG3C,WAAW,EAAE4C,OAAO,CAC/DJ,sBACF,CAAC;EACD,MAAMM,cAAc,GAAG3B,4BAA4B,CACjDoB,aAAa,CAACnB,SAAS,EACvBC,QACF,CAAC;EACD,MAAM0B,cAAc,GAAGC,IAAI,CAACC,GAAG,CAACV,aAAa,CAACnB,SAAS,CAAC;EAExD,OAAOM,SAAS,cAAAU,MAAA,CACDX,aAAa,CAACgB,YAAY,CAAC,sDAAAL,MAAA,CACTX,aAAa,CAAC,aAAa,CAAC,QAAAW,MAAA,CAAKM,eAAe,SAAAN,MAAA,CAAMS,aAAa,mDAAAT,MAAA,CACnEX,aAAa,CAACqB,cAAc,CAAC,QAAAV,MAAA,CAAKW,cAAc,4BAAAX,MAAA,CAClEX,aAAa,CAACgB,YAAY,CAAC,wBAAAL,MAAA,CACrCX,aAAa,CAAC,aAAa,CAAC,oBAAAW,MAAA,CAC5BM,eAAe,SAAAN,MAAA,CAAMS,aAAa,oBAAAT,MAAA,CAClCX,aAAa,CAACqB,cAAc,CAAC,oBAAAV,MAAA,CAC7BW,cAAc,aAAU;AAC/B,CAAC;AAED,MAAMG,mBAAmB,GAAGA,CAC1BjC,aAAqB,EACrBC,cAAsB,EACtBO,aAAsC,EACtCC,SAAkB,KACP;EACX,OAAOA,SAAS,cAAAU,MAAA,CACDX,aAAa,CAAC,WAAW,CAAC,wDAAAW,MAAA,CACNX,aAAa,CAAC,MAAM,CAAC,QAAAW,MAAA,CAAKnB,aAAa,CAAC2B,OAAO,CAAClD,2BAA2B,CAAC,sDAAA0C,MAAA,CAC5EX,aAAa,CAAC,OAAO,CAAC,QAAAW,MAAA,CAAKlB,cAAc,CAAC0B,OAAO,CAAClD,2BAA2B,CAAC,4BAAA0C,MAAA,CAClGX,aAAa,CAAC,WAAW,CAAC,wBAAAW,MAAA,CACpCX,aAAa,CAAC,MAAM,CAAC,QAAAW,MAAA,CAAKnB,aAAa,CAAC2B,OAAO,CAAClD,2BAA2B,CAAC,qBAAA0C,MAAA,CAC5EX,aAAa,CAAC,OAAO,CAAC,QAAAW,MAAA,CAAKlB,cAAc,CAAC0B,OAAO,CAAClD,2BAA2B,CAAC,aAAU;AAC/F,CAAC;AAED,MAAMyD,kBAAkB,GACtB3B,UAAoD,IAEpD,CAAC,CAACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAACA,UAAU,CAAC,CAAC,CAAC;AAE1E,MAAM4B,qBAAqB,GAAGA,CAC5BnC,aAA4B,EAC5BC,cAA6B,KACjBD,aAAa,KAAK,IAAI,IAAIC,cAAc,KAAK,IAAI;AAE/D,MAAMmC,kBAAkB,GAAGA,CACzBC,OAAmB,EACnBC,YAAgC,EAChCC,aAAqB,EACrBxD,WAAmB,KACI;EACvB,IAAIuD,YAAY,KAAKE,SAAS,EAAE;IAC9B,OAAOA,SAAS;EAClB;EACA,MAAMC,eAAe,GAAGJ,OAAO,CAACC,YAAY,CAAC;EAC7C,OAAOG,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAElD,IAAI,CAC1BmD,KAAA;IAAA,IAAC;MAAEhB;IAAM,CAAC,GAAAgB,KAAA;IAAA,OAAKH,aAAa,IAAIb,KAAK,IAAIa,aAAa,GAAGb,KAAK,GAAG3C,WAAW;EAAA,CAC9E,CAAC;AACH,CAAC;AAED,OAAO,MAAM4D,mBAAmB,GAAGC,KAAA,IAwB7B;EAAA,IAxB8B;IAClCvD,MAAM;IACNgD,OAAO;IACPtD,WAAW;IACXwD,aAAa;IACbnC,QAAQ;IACRI,aAAa;IACbd,cAAc;IACdC,eAAe;IACfc,SAAS;IACToC,MAAM;IACNC;EAaF,CAAC,GAAAF,KAAA;EACC,IAAI,CAACvD,MAAM,IAAI,CAAC0D,KAAK,CAACC,OAAO,CAAC3D,MAAM,CAAC,IAAIA,MAAM,CAACF,MAAM,KAAK,CAAC,EAAE;IAC5D,OAAO,EAAE;EACX;EAEA,MAAM8D,WAAW,GAAG7D,eAAe,CAACC,MAAM,EAAE,aAAa,CAAC;EAC1D,MAAM6D,UAAU,GAAG9D,eAAe,CAACC,MAAM,EAAE,SAAS,CAAC;EACrD,MAAM;IAAEW,aAAa;IAAEC;EAAe,CAAC,GAAGR,wBAAwB,CAChEJ,MAAM,EACNK,cAAc,EACdC,eACF,CAAC;EAED,IAAI,CAACsD,WAAW,EAAE;IAChB,OAAO,EAAE;EACX;EAEA,MAAM1B,sBAAsB,GAAGzC,+BAA+B,CAACC,WAAW,CAAC;EAC3E,MAAMoE,IAAI,GAAG,IAAIC,IAAI,CAACH,WAAW,CAACI,SAAmB,CAAC;EACtD,MAAM9C,UAAU,GAAG0C,WAAW,CAACK,KAAK;EACpC,MAAMhB,YAAY,GAAGY,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEI,KAAK,CAAC,CAAC,CAAC;EACzC,MAAMhC,aAAa,GAAGc,kBAAkB,CACtCC,OAAO,EACPC,YAAY,EACZC,aAAa,EACbxD,WACF,CAAC;EACD,MAAMwE,WAAW,GAAGrB,kBAAkB,CAAC3B,UAAU,CAAC;EAClD,MAAMiD,aAAa,GAAGrB,qBAAqB,CAACnC,aAAa,EAAEC,cAAc,CAAC;EAE1E,IAAI,CAACsD,WAAW,IAAI,CAACjC,aAAa,EAAE;IAClC,OAAO,EAAE;EACX;EAEA,MAAMmC,aAAa,GAAGjF,cAAc,CAAC2E,IAAI,EAAEN,MAAM,CAAC;EAClD,MAAMa,aAAa,GAAGH,WAAW,GAC7BjD,gBAAgB,CAACC,UAAU,EAAEC,aAAa,EAAEC,SAAS,CAAC,GACtD,EAAE;EAEN,MAAMkD,WAAW,GAAGrC,aAAa,GAC7BF,cAAc,CAAC;IACbE,aAAa;IACbvC,WAAW;IACXwC,sBAAsB;IACtBnB,QAAQ;IACRI,aAAa;IACbC;EACF,CAAC,CAAC,GACF,EAAE;EAEN,MAAMmD,gBAAgB,GACpBJ,aAAa,IAAIxD,aAAa,IAAIC,cAAc,GAC5CgC,mBAAmB,CACjBjC,aAAa,EACbC,cAAc,EACdO,aAAa,EACbC,SACF,CAAC,GACD,EAAE;EAER,IAAIA,SAAS,EAAE;IACb,OAAOoD,mBAAmB,CAAC;MACzBJ,aAAa;MACbC,aAAa;MACbE,gBAAgB;MAChBD,WAAW;MACXb;IACF,CAAC,CAAC;EACJ;EAEA,OAAOgB,kBAAkB,CAAC;IACxBL,aAAa;IACbC,aAAa;IACbE,gBAAgB;IAChBD,WAAW;IACXb;EACF,CAAC,CAAC;AACJ,CAAC;AASD,MAAMe,mBAAmB,GAAGE,KAAA,IAOd;EAAA,IAPe;IAC3BL,aAAa;IACbE,gBAAgB;IAChBD,WAAW;IACXb;EAGF,CAAC,GAAAiB,KAAA;EACC,MAAMC,eAAe,GAAGlB,MAAM,GAAGxE,YAAY,CAAC2F,KAAK,GAAG3F,YAAY,CAAC4F,KAAK;EACxE,MAAMC,SAAS,GAAGzF,cAAc,CAACG,UAAU;EAE3C,8BAAAsC,MAAA,CAA6BgD,SAAS,0BAAAhD,MAAA,CAAuB6C,eAAe,kCAAA7C,MAAA,CACvDgD,SAAS,yFAAAhD,MAAA,CAE9BuC,aAAa,6CAAAvC,MAAA,CAGbyC,gBAAgB,6CAAAzC,MAAA,CAGhBwC,WAAW;AAIb,CAAC;AAED,MAAMG,kBAAkB,GAAGM,KAAA,IAM0B;EAAA,IANzB;IAC1BX,aAAa;IACbC,aAAa;IACbE,gBAAgB;IAChBD,WAAW;IACXb;EACqC,CAAC,GAAAsB,KAAA;EACtC,MAAMJ,eAAe,GAAGlB,MAAM,GAAGxE,YAAY,CAAC2F,KAAK,GAAG3F,YAAY,CAAC4F,KAAK;EACxE,MAAMG,WAAW,GAAG3F,cAAc,CAACC,mBAAmB;EACtD,MAAMwF,SAAS,GAAGzF,cAAc,CAACG,UAAU;EAC3C,MAAMyF,OAAO,GAAG5F,cAAc,CAACE,cAAc;EAE7C,8BAAAuC,MAAA,CAA6BgD,SAAS,0BAAAhD,MAAA,CAAuB6C,eAAe,2CAAA7C,MAAA,CAC9CmD,OAAO,UAAAnD,MAAA,CAAMsC,aAAa,oCAAAtC,MAAA,CACnCgD,SAAS,iFAAAhD,MAAA,CACTkD,WAAW,YAAAlD,MAAA,CAChCuC,aAAa,oCAAAvC,MAAA,CAEMkD,WAAW,YAAAlD,MAAA,CAC9ByC,gBAAgB,oCAAAzC,MAAA,CAEGkD,WAAW,YAAAlD,MAAA,CAC9BwC,WAAW;AAIb,CAAC","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ export * from './formatFullDate';
1
2
  export * from './formatXAxisAdditionalLabel';
2
3
  export * from './formatXAxisLabel';
3
4
  export * from './getChartStyles';