@oanda/labs-order-book-widget 1.0.71 → 1.0.73

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 (73) hide show
  1. package/CHANGELOG.md +556 -0
  2. package/dist/main/OrderBookWidget/ChartWithData.js +62 -0
  3. package/dist/main/OrderBookWidget/ChartWithData.js.map +1 -0
  4. package/dist/main/OrderBookWidget/Main.js +46 -0
  5. package/dist/main/OrderBookWidget/Main.js.map +1 -0
  6. package/dist/main/OrderBookWidget/OrderBookWidget.js +2 -2
  7. package/dist/main/OrderBookWidget/OrderBookWidget.js.map +1 -1
  8. package/dist/main/OrderBookWidget/components/Chart/Chart.js +16 -7
  9. package/dist/main/OrderBookWidget/components/Chart/Chart.js.map +1 -1
  10. package/dist/main/OrderBookWidget/components/Chart/constants.js +5 -3
  11. package/dist/main/OrderBookWidget/components/Chart/constants.js.map +1 -1
  12. package/dist/main/OrderBookWidget/components/Chart/formatters.js +10 -4
  13. package/dist/main/OrderBookWidget/components/Chart/formatters.js.map +1 -1
  14. package/dist/main/OrderBookWidget/components/Chart/getOption.js +81 -36
  15. package/dist/main/OrderBookWidget/components/Chart/getOption.js.map +1 -1
  16. package/dist/main/OrderBookWidget/components/Chart/types.js.map +1 -1
  17. package/dist/main/OrderBookWidget/config.js +69 -1
  18. package/dist/main/OrderBookWidget/config.js.map +1 -1
  19. package/dist/main/OrderBookWidget/types.js +20 -0
  20. package/dist/main/OrderBookWidget/types.js.map +1 -1
  21. package/dist/main/translations/sources/en.json +3 -0
  22. package/dist/main/translations/sources/zh_TW.json +3 -0
  23. package/dist/module/OrderBookWidget/ChartWithData.js +55 -0
  24. package/dist/module/OrderBookWidget/ChartWithData.js.map +1 -0
  25. package/dist/module/OrderBookWidget/Main.js +38 -0
  26. package/dist/module/OrderBookWidget/Main.js.map +1 -0
  27. package/dist/module/OrderBookWidget/OrderBookWidget.js +2 -2
  28. package/dist/module/OrderBookWidget/OrderBookWidget.js.map +1 -1
  29. package/dist/module/OrderBookWidget/components/Chart/Chart.js +17 -8
  30. package/dist/module/OrderBookWidget/components/Chart/Chart.js.map +1 -1
  31. package/dist/module/OrderBookWidget/components/Chart/constants.js +4 -2
  32. package/dist/module/OrderBookWidget/components/Chart/constants.js.map +1 -1
  33. package/dist/module/OrderBookWidget/components/Chart/formatters.js +10 -4
  34. package/dist/module/OrderBookWidget/components/Chart/formatters.js.map +1 -1
  35. package/dist/module/OrderBookWidget/components/Chart/getOption.js +80 -35
  36. package/dist/module/OrderBookWidget/components/Chart/getOption.js.map +1 -1
  37. package/dist/module/OrderBookWidget/components/Chart/types.js.map +1 -1
  38. package/dist/module/OrderBookWidget/config.js +69 -1
  39. package/dist/module/OrderBookWidget/config.js.map +1 -1
  40. package/dist/module/OrderBookWidget/types.js +19 -1
  41. package/dist/module/OrderBookWidget/types.js.map +1 -1
  42. package/dist/module/translations/sources/en.json +3 -0
  43. package/dist/module/translations/sources/zh_TW.json +3 -0
  44. package/dist/types/OrderBookWidget/ChartWithData.d.ts +4 -0
  45. package/dist/types/OrderBookWidget/Main.d.ts +4 -0
  46. package/dist/types/OrderBookWidget/components/Chart/Chart.d.ts +1 -1
  47. package/dist/types/OrderBookWidget/components/Chart/constants.d.ts +4 -2
  48. package/dist/types/OrderBookWidget/components/Chart/getOption.d.ts +16 -1
  49. package/dist/types/OrderBookWidget/components/Chart/types.d.ts +11 -1
  50. package/dist/types/OrderBookWidget/config.d.ts +7 -1
  51. package/dist/types/OrderBookWidget/types.d.ts +26 -3
  52. package/package.json +3 -3
  53. package/src/OrderBookWidget/ChartWithData.tsx +78 -0
  54. package/src/OrderBookWidget/Main.tsx +40 -0
  55. package/src/OrderBookWidget/OrderBookWidget.tsx +2 -2
  56. package/src/OrderBookWidget/components/Chart/Chart.tsx +12 -6
  57. package/src/OrderBookWidget/components/Chart/constants.ts +4 -2
  58. package/src/OrderBookWidget/components/Chart/formatters.ts +6 -4
  59. package/src/OrderBookWidget/components/Chart/getOption.ts +93 -39
  60. package/src/OrderBookWidget/components/Chart/types.ts +11 -3
  61. package/src/OrderBookWidget/config.ts +70 -1
  62. package/src/OrderBookWidget/types.ts +28 -3
  63. package/src/translations/sources/en.json +3 -0
  64. package/src/translations/sources/zh_TW.json +3 -0
  65. package/test/Main.test.tsx +129 -0
  66. package/test/chartOptions.test.ts +20 -0
  67. package/dist/main/OrderBookWidget/Widget.js +0 -61
  68. package/dist/main/OrderBookWidget/Widget.js.map +0 -1
  69. package/dist/module/OrderBookWidget/Widget.js +0 -53
  70. package/dist/module/OrderBookWidget/Widget.js.map +0 -1
  71. package/dist/types/OrderBookWidget/Widget.d.ts +0 -4
  72. package/src/OrderBookWidget/Widget.tsx +0 -62
  73. package/test/Widget.test.tsx +0 -71
@@ -1 +1 @@
1
- {"version":3,"file":"getOption.js","names":["colorPalette","getGridLines","getZoomControls","INITIAL_BARS","CHART_WIDTH","CHART_HEIGHT","X_LABEL_SIZE","Y_LABEL_SIZE_DESKTOP","tooltipFormatter","getDesktopOption","_ref","isDark","isOrderBook","desktopGridLines","chartWidth","chartHeight","xLabelsSize","yLabelSize","grid","name","top","left","right","concat","bottom","graphic","type","silent","children","z","shape","width","height","style","fill","darkGray","white","shadowBlur","shadowOffsetX","shadowOffsetY","shadowColor","black","text","getOption","_ref2","_data$orderPositionBo","_data$orderPositionBo2","_data$orderPositionBo3","data","precision","buckets","orderPositionBooks","bucketWidth","price","dataset","map","item","Number","longCountPercent","shortCountPercent","zoomInitialStartValue","zoomInitialEndValue","max","Math","min","abs","range","animation","color","bottleGreenLight","orange","raspberryDark","title","padding","textStyle","fontSize","toolbox","feature","resetStartValue","resetEndValue","dataZoom","realtime","startValue","endValue","yAxisIndex","minValueSpan","tooltip","trigger","axisPointer","axis","formatter","val","xAxis","axisTick","show","axisLine","axisLabel","showMinLabel","showMaxLabel","value","yAxis","position","toFixed","source","series","clip","encode","x","y","renderItem","params","api","yValue","xStart","coord","xEnd","bucketWidthHeight","size","rectShape","emphasis","visual","markLine","symbol","symbolRotate","symbolSize","lineStyle","bottleGreenDark","label","backgroundColor"],"sources":["../../../../../src/OrderBookWidget/components/Chart/getOption.ts"],"sourcesContent":["import { colorPalette, getGridLines, getZoomControls } from '@oanda/labs-widget-common';\nimport {\n INITIAL_BARS, CHART_WIDTH, CHART_HEIGHT, X_LABEL_SIZE, Y_LABEL_SIZE_DESKTOP,\n} from './constants';\nimport { GetOptionType, GetResponsiveOptionsProps } from './types';\nimport { tooltipFormatter } from './formatters';\n\nexport const getDesktopOption = ({ isDark, isOrderBook }: GetResponsiveOptionsProps) => {\n const desktopGridLines = getGridLines({\n isDark,\n chartWidth: CHART_WIDTH,\n chartHeight: CHART_HEIGHT,\n xLabelsSize: X_LABEL_SIZE,\n yLabelSize: Y_LABEL_SIZE_DESKTOP,\n });\n\n return {\n grid: [\n {\n name: 'main-grid',\n top: '48px',\n left: '0px',\n right: `${Y_LABEL_SIZE_DESKTOP}px`,\n bottom: `${X_LABEL_SIZE}px`,\n },\n ],\n graphic: [\n ...desktopGridLines,\n {\n type: 'group',\n left: '8px',\n top: '56px',\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n left: 'center',\n top: 'middle',\n shape: {\n width: 70,\n height: 30,\n },\n style: {\n fill: isDark ? colorPalette.darkGray : colorPalette.white,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n z: 100,\n left: 'center',\n top: 'middle',\n style: {\n fill: isDark ? colorPalette.white : colorPalette.black,\n width: 70,\n height: 30,\n text: isOrderBook ? 'Sell' : 'Short',\n },\n },\n ],\n },\n {\n type: 'group',\n right: '128px',\n top: '56px',\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n right: 'center',\n top: 'middle',\n shape: {\n width: 70,\n height: 30,\n },\n style: {\n fill: isDark ? colorPalette.darkGray : colorPalette.white,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n z: 100,\n right: 'center',\n top: 'middle',\n style: {\n fill: isDark ? colorPalette.white : colorPalette.black,\n width: 70,\n height: 30,\n text: isOrderBook ? 'Buy' : 'Long',\n },\n },\n ],\n },\n ],\n };\n};\n\nexport const getOption: GetOptionType = ({\n data, precision, isDark, isOrderBook,\n}) => {\n const buckets = data.orderPositionBooks[0]?.buckets || [];\n const bucketWidth = data.orderPositionBooks[0]?.bucketWidth!;\n const price = data.orderPositionBooks[0]?.price!;\n\n const dataset = buckets.map((item) => ([\n item!.price,\n Number(item!.longCountPercent),\n Number(item!.shortCountPercent) * -1,\n ]));\n\n const zoomInitialStartValue = price - (bucketWidth * INITIAL_BARS * 0.5);\n const zoomInitialEndValue = price + (bucketWidth * INITIAL_BARS * 0.5);\n\n const max = Math.max(...dataset.map((item) => item[1]));\n const min = Math.abs(Math.min(...dataset.map((item) => item[2])));\n\n const range = max > min ? max : min;\n\n return (\n {\n animation: false,\n color: [\n colorPalette.bottleGreenLight,\n isDark ? colorPalette.orange : colorPalette.raspberryDark,\n ],\n title: {\n text: isOrderBook ? 'OPEN ORDERS' : 'OPEN POSITIONS',\n padding: 20,\n textStyle: {\n fontSize: 14,\n },\n },\n toolbox: {\n feature: getZoomControls({\n resetStartValue: zoomInitialStartValue,\n resetEndValue: zoomInitialEndValue,\n }),\n },\n dataZoom: [\n {\n type: 'inside',\n realtime: true,\n startValue: zoomInitialStartValue,\n endValue: zoomInitialEndValue,\n\n yAxisIndex: 0,\n minValueSpan: 10 * bucketWidth,\n },\n ],\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n axis: 'y',\n },\n formatter: (val) => tooltipFormatter(\n (val as { data: number[] }[])[0].data,\n precision,\n isOrderBook,\n ),\n },\n xAxis: {\n type: 'value',\n min: range * -1.05,\n max: range * 1.05,\n axisTick: { show: false },\n axisLine: { show: false },\n axisLabel: {\n padding: [7, 0, 0, 0],\n showMinLabel: false,\n showMaxLabel: false,\n formatter: (value) => (value === 0 ? '%' : `${Math.abs(value)}%`),\n },\n },\n yAxis: {\n type: 'value',\n position: 'right',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n showMaxLabel: false,\n showMinLabel: false,\n padding: [0, 0, 0, 10],\n formatter: (value) => value.toFixed(precision),\n },\n },\n dataset: {\n source: dataset,\n },\n series: [\n {\n type: 'custom',\n clip: true,\n encode: {\n x: 1,\n y: 0,\n tooltip: 1,\n },\n renderItem: (params, api) => {\n const yValue = api.value(0);\n const xStart = api.coord([api.value(1), yValue]);\n const xEnd = api.coord([0, yValue]);\n const bucketWidthHeight = api.size ? (api.size([0, bucketWidth]) as number[])[1] : 0;\n const height = bucketWidthHeight > 4 ? bucketWidthHeight * 0.8 : bucketWidthHeight;\n\n const rectShape = {\n x: xStart[0] + 0.5,\n y: xStart[1] - height / 2,\n width: xEnd[0] - xStart[0],\n height,\n };\n\n return {\n type: 'rect',\n shape: rectShape,\n emphasis: {\n style: {\n fill: colorPalette.bottleGreenLight,\n },\n },\n style: {\n fill: api.visual('color'),\n },\n };\n },\n },\n {\n type: 'custom',\n clip: true,\n encode: {\n x: 1,\n y: 0,\n tooltip: 2,\n },\n markLine: {\n animation: false,\n silent: true,\n precision: 4,\n symbol: ['none', 'triangle'],\n symbolRotate: 90,\n symbolSize: [20, 10],\n lineStyle: {\n color: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,\n width: 1,\n },\n label: {\n padding: [5, 15, 5, 15],\n color: isDark ? colorPalette.black : colorPalette.white,\n backgroundColor: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,\n },\n data: [\n {\n yAxis: price,\n },\n ],\n },\n renderItem: (params, api) => {\n const yValue = api.value(0);\n const xStart = api.coord([api.value(2), yValue]);\n const xEnd = api.coord([0, yValue]);\n const bucketWidthHeight = api.size ? (api.size([0, bucketWidth]) as number[])[1] : 0;\n const height = bucketWidthHeight > 4 ? bucketWidthHeight * 0.8 : bucketWidthHeight;\n\n const rectShape = {\n x: xStart[0] - 0.5,\n y: xStart[1] - height / 2,\n width: xEnd[0] - xStart[0],\n height,\n };\n\n return {\n type: 'rect',\n shape: rectShape,\n emphasis: {\n style: {\n fill: isDark ? colorPalette.orange : colorPalette.raspberryDark,\n },\n },\n style: {\n fill: api.visual('color'),\n },\n };\n },\n },\n ],\n }\n );\n};\n"],"mappings":"AAAA,SAASA,YAAY,EAAEC,YAAY,EAAEC,eAAe,QAAQ,2BAA2B;AACvF,SACEC,YAAY,EAAEC,WAAW,EAAEC,YAAY,EAAEC,YAAY,EAAEC,oBAAoB,QACtE,aAAa;AAEpB,SAASC,gBAAgB,QAAQ,cAAc;AAE/C,OAAO,MAAMC,gBAAgB,GAAGC,IAAA,IAAwD;EAAA,IAAvD;IAAEC,MAAM;IAAEC;EAAuC,CAAC,GAAAF,IAAA;EACjF,MAAMG,gBAAgB,GAAGZ,YAAY,CAAC;IACpCU,MAAM;IACNG,UAAU,EAAEV,WAAW;IACvBW,WAAW,EAAEV,YAAY;IACzBW,WAAW,EAAEV,YAAY;IACzBW,UAAU,EAAEV;EACd,CAAC,CAAC;EAEF,OAAO;IACLW,IAAI,EAAE,CACJ;MACEC,IAAI,EAAE,WAAW;MACjBC,GAAG,EAAE,MAAM;MACXC,IAAI,EAAE,KAAK;MACXC,KAAK,KAAAC,MAAA,CAAKhB,oBAAoB,OAAI;MAClCiB,MAAM,KAAAD,MAAA,CAAKjB,YAAY;IACzB,CAAC,CACF;IACDmB,OAAO,EAAE,CACP,GAAGZ,gBAAgB,EACnB;MACEa,IAAI,EAAE,OAAO;MACbL,IAAI,EAAE,KAAK;MACXD,GAAG,EAAE,MAAM;MACXO,MAAM,EAAE,IAAI;MACZC,QAAQ,EAAE,CACR;QACEF,IAAI,EAAE,MAAM;QACZG,CAAC,EAAE,GAAG;QACNR,IAAI,EAAE,QAAQ;QACdD,GAAG,EAAE,QAAQ;QACbU,KAAK,EAAE;UACLC,KAAK,EAAE,EAAE;UACTC,MAAM,EAAE;QACV,CAAC;QACDC,KAAK,EAAE;UACLC,IAAI,EAAEvB,MAAM,GAAGX,YAAY,CAACmC,QAAQ,GAAGnC,YAAY,CAACoC,KAAK;UACzDC,UAAU,EAAE,CAAC;UACbC,aAAa,EAAE,CAAC;UAChBC,aAAa,EAAE,CAAC;UAChBC,WAAW,EAAE;QACf;MACF,CAAC,EACD;QACEd,IAAI,EAAE,MAAM;QACZG,CAAC,EAAE,GAAG;QACNR,IAAI,EAAE,QAAQ;QACdD,GAAG,EAAE,QAAQ;QACba,KAAK,EAAE;UACLC,IAAI,EAAEvB,MAAM,GAAGX,YAAY,CAACoC,KAAK,GAAGpC,YAAY,CAACyC,KAAK;UACtDV,KAAK,EAAE,EAAE;UACTC,MAAM,EAAE,EAAE;UACVU,IAAI,EAAE9B,WAAW,GAAG,MAAM,GAAG;QAC/B;MACF,CAAC;IAEL,CAAC,EACD;MACEc,IAAI,EAAE,OAAO;MACbJ,KAAK,EAAE,OAAO;MACdF,GAAG,EAAE,MAAM;MACXO,MAAM,EAAE,IAAI;MACZC,QAAQ,EAAE,CACR;QACEF,IAAI,EAAE,MAAM;QACZG,CAAC,EAAE,GAAG;QACNP,KAAK,EAAE,QAAQ;QACfF,GAAG,EAAE,QAAQ;QACbU,KAAK,EAAE;UACLC,KAAK,EAAE,EAAE;UACTC,MAAM,EAAE;QACV,CAAC;QACDC,KAAK,EAAE;UACLC,IAAI,EAAEvB,MAAM,GAAGX,YAAY,CAACmC,QAAQ,GAAGnC,YAAY,CAACoC,KAAK;UACzDC,UAAU,EAAE,CAAC;UACbC,aAAa,EAAE,CAAC;UAChBC,aAAa,EAAE,CAAC;UAChBC,WAAW,EAAE;QACf;MACF,CAAC,EACD;QACEd,IAAI,EAAE,MAAM;QACZG,CAAC,EAAE,GAAG;QACNP,KAAK,EAAE,QAAQ;QACfF,GAAG,EAAE,QAAQ;QACba,KAAK,EAAE;UACLC,IAAI,EAAEvB,MAAM,GAAGX,YAAY,CAACoC,KAAK,GAAGpC,YAAY,CAACyC,KAAK;UACtDV,KAAK,EAAE,EAAE;UACTC,MAAM,EAAE,EAAE;UACVU,IAAI,EAAE9B,WAAW,GAAG,KAAK,GAAG;QAC9B;MACF,CAAC;IAEL,CAAC;EAEL,CAAC;AACH,CAAC;AAED,OAAO,MAAM+B,SAAwB,GAAGC,KAAA,IAElC;EAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EAAA,IAFmC;IACvCC,IAAI;IAAEC,SAAS;IAAEtC,MAAM;IAAEC;EAC3B,CAAC,GAAAgC,KAAA;EACC,MAAMM,OAAO,GAAG,EAAAL,qBAAA,GAAAG,IAAI,CAACG,kBAAkB,CAAC,CAAC,CAAC,cAAAN,qBAAA,uBAA1BA,qBAAA,CAA4BK,OAAO,KAAI,EAAE;EACzD,MAAME,WAAW,IAAAN,sBAAA,GAAGE,IAAI,CAACG,kBAAkB,CAAC,CAAC,CAAC,cAAAL,sBAAA,uBAA1BA,sBAAA,CAA4BM,WAAY;EAC5D,MAAMC,KAAK,IAAAN,sBAAA,GAAGC,IAAI,CAACG,kBAAkB,CAAC,CAAC,CAAC,cAAAJ,sBAAA,uBAA1BA,sBAAA,CAA4BM,KAAM;EAEhD,MAAMC,OAAO,GAAGJ,OAAO,CAACK,GAAG,CAAEC,IAAI,IAAM,CACrCA,IAAI,CAAEH,KAAK,EACXI,MAAM,CAACD,IAAI,CAAEE,gBAAgB,CAAC,EAC9BD,MAAM,CAACD,IAAI,CAAEG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CACpC,CAAC;EAEH,MAAMC,qBAAqB,GAAGP,KAAK,GAAID,WAAW,GAAGjD,YAAY,GAAG,GAAI;EACxE,MAAM0D,mBAAmB,GAAGR,KAAK,GAAID,WAAW,GAAGjD,YAAY,GAAG,GAAI;EAEtE,MAAM2D,GAAG,GAAGC,IAAI,CAACD,GAAG,CAAC,GAAGR,OAAO,CAACC,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACvD,MAAMQ,GAAG,GAAGD,IAAI,CAACE,GAAG,CAACF,IAAI,CAACC,GAAG,CAAC,GAAGV,OAAO,CAACC,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAEjE,MAAMU,KAAK,GAAGJ,GAAG,GAAGE,GAAG,GAAGF,GAAG,GAAGE,GAAG;EAEnC,OACE;IACEG,SAAS,EAAE,KAAK;IAChBC,KAAK,EAAE,CACLpE,YAAY,CAACqE,gBAAgB,EAC7B1D,MAAM,GAAGX,YAAY,CAACsE,MAAM,GAAGtE,YAAY,CAACuE,aAAa,CAC1D;IACDC,KAAK,EAAE;MACL9B,IAAI,EAAE9B,WAAW,GAAG,aAAa,GAAG,gBAAgB;MACpD6D,OAAO,EAAE,EAAE;MACXC,SAAS,EAAE;QACTC,QAAQ,EAAE;MACZ;IACF,CAAC;IACDC,OAAO,EAAE;MACPC,OAAO,EAAE3E,eAAe,CAAC;QACvB4E,eAAe,EAAElB,qBAAqB;QACtCmB,aAAa,EAAElB;MACjB,CAAC;IACH,CAAC;IACDmB,QAAQ,EAAE,CACR;MACEtD,IAAI,EAAE,QAAQ;MACduD,QAAQ,EAAE,IAAI;MACdC,UAAU,EAAEtB,qBAAqB;MACjCuB,QAAQ,EAAEtB,mBAAmB;MAE7BuB,UAAU,EAAE,CAAC;MACbC,YAAY,EAAE,EAAE,GAAGjC;IACrB,CAAC,CACF;IACDkC,OAAO,EAAE;MACPC,OAAO,EAAE,MAAM;MACfC,WAAW,EAAE;QACXC,IAAI,EAAE;MACR,CAAC;MACDC,SAAS,EAAGC,GAAG,IAAKnF,gBAAgB,CACjCmF,GAAG,CAA0B,CAAC,CAAC,CAAC3C,IAAI,EACrCC,SAAS,EACTrC,WACF;IACF,CAAC;IACDgF,KAAK,EAAE;MACLlE,IAAI,EAAE,OAAO;MACbsC,GAAG,EAAEE,KAAK,GAAG,CAAC,IAAI;MAClBJ,GAAG,EAAEI,KAAK,GAAG,IAAI;MACjB2B,QAAQ,EAAE;QAAEC,IAAI,EAAE;MAAM,CAAC;MACzBC,QAAQ,EAAE;QAAED,IAAI,EAAE;MAAM,CAAC;MACzBE,SAAS,EAAE;QACTvB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrBwB,YAAY,EAAE,KAAK;QACnBC,YAAY,EAAE,KAAK;QACnBR,SAAS,EAAGS,KAAK,IAAMA,KAAK,KAAK,CAAC,GAAG,GAAG,MAAA5E,MAAA,CAAMwC,IAAI,CAACE,GAAG,CAACkC,KAAK,CAAC;MAC/D;IACF,CAAC;IACDC,KAAK,EAAE;MACL1E,IAAI,EAAE,OAAO;MACb2E,QAAQ,EAAE,OAAO;MACjBN,QAAQ,EAAE;QAAED,IAAI,EAAE;MAAM,CAAC;MACzBD,QAAQ,EAAE;QAAEC,IAAI,EAAE;MAAM,CAAC;MACzBE,SAAS,EAAE;QACTE,YAAY,EAAE,KAAK;QACnBD,YAAY,EAAE,KAAK;QACnBxB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtBiB,SAAS,EAAGS,KAAK,IAAKA,KAAK,CAACG,OAAO,CAACrD,SAAS;MAC/C;IACF,CAAC;IACDK,OAAO,EAAE;MACPiD,MAAM,EAAEjD;IACV,CAAC;IACDkD,MAAM,EAAE,CACN;MACE9E,IAAI,EAAE,QAAQ;MACd+E,IAAI,EAAE,IAAI;MACVC,MAAM,EAAE;QACNC,CAAC,EAAE,CAAC;QACJC,CAAC,EAAE,CAAC;QACJtB,OAAO,EAAE;MACX,CAAC;MACDuB,UAAU,EAAEA,CAACC,MAAM,EAAEC,GAAG,KAAK;QAC3B,MAAMC,MAAM,GAAGD,GAAG,CAACZ,KAAK,CAAC,CAAC,CAAC;QAC3B,MAAMc,MAAM,GAAGF,GAAG,CAACG,KAAK,CAAC,CAACH,GAAG,CAACZ,KAAK,CAAC,CAAC,CAAC,EAAEa,MAAM,CAAC,CAAC;QAChD,MAAMG,IAAI,GAAGJ,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC,EAAEF,MAAM,CAAC,CAAC;QACnC,MAAMI,iBAAiB,GAAGL,GAAG,CAACM,IAAI,GAAIN,GAAG,CAACM,IAAI,CAAC,CAAC,CAAC,EAAEjE,WAAW,CAAC,CAAC,CAAc,CAAC,CAAC,GAAG,CAAC;QACpF,MAAMpB,MAAM,GAAGoF,iBAAiB,GAAG,CAAC,GAAGA,iBAAiB,GAAG,GAAG,GAAGA,iBAAiB;QAElF,MAAME,SAAS,GAAG;UAChBX,CAAC,EAAEM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;UAClBL,CAAC,EAAEK,MAAM,CAAC,CAAC,CAAC,GAAGjF,MAAM,GAAG,CAAC;UACzBD,KAAK,EAAEoF,IAAI,CAAC,CAAC,CAAC,GAAGF,MAAM,CAAC,CAAC,CAAC;UAC1BjF;QACF,CAAC;QAED,OAAO;UACLN,IAAI,EAAE,MAAM;UACZI,KAAK,EAAEwF,SAAS;UAChBC,QAAQ,EAAE;YACRtF,KAAK,EAAE;cACLC,IAAI,EAAElC,YAAY,CAACqE;YACrB;UACF,CAAC;UACDpC,KAAK,EAAE;YACLC,IAAI,EAAE6E,GAAG,CAACS,MAAM,CAAC,OAAO;UAC1B;QACF,CAAC;MACH;IACF,CAAC,EACD;MACE9F,IAAI,EAAE,QAAQ;MACd+E,IAAI,EAAE,IAAI;MACVC,MAAM,EAAE;QACNC,CAAC,EAAE,CAAC;QACJC,CAAC,EAAE,CAAC;QACJtB,OAAO,EAAE;MACX,CAAC;MACDmC,QAAQ,EAAE;QACRtD,SAAS,EAAE,KAAK;QAChBxC,MAAM,EAAE,IAAI;QACZsB,SAAS,EAAE,CAAC;QACZyE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;QAC5BC,YAAY,EAAE,EAAE;QAChBC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACpBC,SAAS,EAAE;UACTzD,KAAK,EAAEzD,MAAM,GAAGX,YAAY,CAACsE,MAAM,GAAGtE,YAAY,CAAC8H,eAAe;UAClE/F,KAAK,EAAE;QACT,CAAC;QACDgG,KAAK,EAAE;UACLtD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;UACvBL,KAAK,EAAEzD,MAAM,GAAGX,YAAY,CAACyC,KAAK,GAAGzC,YAAY,CAACoC,KAAK;UACvD4F,eAAe,EAAErH,MAAM,GAAGX,YAAY,CAACsE,MAAM,GAAGtE,YAAY,CAAC8H;QAC/D,CAAC;QACD9E,IAAI,EAAE,CACJ;UACEoD,KAAK,EAAE/C;QACT,CAAC;MAEL,CAAC;MACDwD,UAAU,EAAEA,CAACC,MAAM,EAAEC,GAAG,KAAK;QAC3B,MAAMC,MAAM,GAAGD,GAAG,CAACZ,KAAK,CAAC,CAAC,CAAC;QAC3B,MAAMc,MAAM,GAAGF,GAAG,CAACG,KAAK,CAAC,CAACH,GAAG,CAACZ,KAAK,CAAC,CAAC,CAAC,EAAEa,MAAM,CAAC,CAAC;QAChD,MAAMG,IAAI,GAAGJ,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC,EAAEF,MAAM,CAAC,CAAC;QACnC,MAAMI,iBAAiB,GAAGL,GAAG,CAACM,IAAI,GAAIN,GAAG,CAACM,IAAI,CAAC,CAAC,CAAC,EAAEjE,WAAW,CAAC,CAAC,CAAc,CAAC,CAAC,GAAG,CAAC;QACpF,MAAMpB,MAAM,GAAGoF,iBAAiB,GAAG,CAAC,GAAGA,iBAAiB,GAAG,GAAG,GAAGA,iBAAiB;QAElF,MAAME,SAAS,GAAG;UAChBX,CAAC,EAAEM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;UAClBL,CAAC,EAAEK,MAAM,CAAC,CAAC,CAAC,GAAGjF,MAAM,GAAG,CAAC;UACzBD,KAAK,EAAEoF,IAAI,CAAC,CAAC,CAAC,GAAGF,MAAM,CAAC,CAAC,CAAC;UAC1BjF;QACF,CAAC;QAED,OAAO;UACLN,IAAI,EAAE,MAAM;UACZI,KAAK,EAAEwF,SAAS;UAChBC,QAAQ,EAAE;YACRtF,KAAK,EAAE;cACLC,IAAI,EAAEvB,MAAM,GAAGX,YAAY,CAACsE,MAAM,GAAGtE,YAAY,CAACuE;YACpD;UACF,CAAC;UACDtC,KAAK,EAAE;YACLC,IAAI,EAAE6E,GAAG,CAACS,MAAM,CAAC,OAAO;UAC1B;QACF,CAAC;MACH;IACF,CAAC;EAEL,CAAC;AAEL,CAAC"}
1
+ {"version":3,"file":"getOption.js","names":["colorPalette","getGridLines","getZoomControls","INITIAL_BARS","CHART_WIDTH","CHART_HEIGHT_DESKTOP","CHART_HEIGHT_MOBILE","X_LABEL_SIZE","Y_LABEL_SIZE_DESKTOP","Y_LABEL_SIZE_MOBILE","ZOOM_CONTROL_HEIGHT","tooltipFormatter","getResponsiveOption","_ref","isDark","isOrderBook","isDesktop","lang","desktopGridLines","chartWidth","chartHeight","xLabelsSize","yLabelSize","bottomLeftBox","marginBottom","grid","name","top","left","right","concat","bottom","yAxis","axisLabel","margin","series","type","id","markLine","label","padding","graphic","silent","children","z","shape","width","height","style","fill","darkGray","white","shadowBlur","shadowOffsetX","shadowOffsetY","shadowColor","black","text","getOption","_ref2","_data$orderPositionBo","_data$orderPositionBo2","_data$orderPositionBo3","data","precision","buckets","orderPositionBooks","bucketWidth","price","bucketPrecision","toString","split","length","dataset","map","item","Number","longCountPercent","shortCountPercent","zoomInitialStartValue","zoomInitialEndValue","max","Math","min","abs","range","animation","color","bottleGreenLight","orange","raspberryDark","title","toUpperCase","textStyle","fontSize","toolbox","feature","resetStartValue","resetEndValue","dataZoom","realtime","startValue","endValue","yAxisIndex","minValueSpan","tooltip","trigger","axisPointer","axis","formatter","val","extraCssText","xAxis","axisTick","show","axisLine","showMinLabel","showMaxLabel","value","position","toFixed","source","clip","encode","x","y","renderItem","params","api","yValue","xStart","coord","xEnd","bucketWidthHeight","size","rectShape","emphasis","visual","symbol","symbolRotate","symbolSize","lineStyle","bottleGreenDark","backgroundColor"],"sources":["../../../../../src/OrderBookWidget/components/Chart/getOption.ts"],"sourcesContent":["import { colorPalette, getGridLines, getZoomControls } from '@oanda/labs-widget-common';\nimport {\n INITIAL_BARS,\n CHART_WIDTH,\n CHART_HEIGHT_DESKTOP,\n CHART_HEIGHT_MOBILE,\n X_LABEL_SIZE,\n Y_LABEL_SIZE_DESKTOP,\n Y_LABEL_SIZE_MOBILE,\n ZOOM_CONTROL_HEIGHT,\n} from './constants';\nimport { GetOptionType, GetResponsiveOptionsProps } from './types';\nimport { tooltipFormatter } from './formatters';\n\nexport const getResponsiveOption = (\n {\n isDark, isOrderBook, isDesktop, lang,\n }\n : GetResponsiveOptionsProps,\n) => {\n const desktopGridLines = getGridLines({\n isDark,\n chartWidth: CHART_WIDTH,\n chartHeight: isDesktop ? CHART_HEIGHT_DESKTOP : CHART_HEIGHT_MOBILE,\n xLabelsSize: isDesktop ? X_LABEL_SIZE : X_LABEL_SIZE + ZOOM_CONTROL_HEIGHT,\n yLabelSize: isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE,\n bottomLeftBox: isDesktop,\n marginBottom: isDesktop ? 0 : ZOOM_CONTROL_HEIGHT,\n });\n\n return {\n grid: [\n {\n name: 'main-grid',\n top: '48px',\n left: '0px',\n right: `${isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE}px`,\n bottom: `${isDesktop ? X_LABEL_SIZE : X_LABEL_SIZE + ZOOM_CONTROL_HEIGHT}px`,\n },\n ],\n yAxis: {\n axisLabel: {\n margin: isDesktop ? 10 : 0,\n },\n },\n series: [\n {\n type: 'custom',\n name: 'current-price',\n id: 'current-price',\n markLine: {\n label: {\n padding: isDesktop ? [5, 15, 5, 15] : [5, 12, 5, 5],\n },\n },\n },\n ],\n graphic: [\n ...desktopGridLines,\n {\n type: 'group',\n left: '8px',\n top: '56px',\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n left: 'center',\n top: 'middle',\n shape: {\n width: 70,\n height: 30,\n },\n style: {\n fill: isDark ? colorPalette.darkGray : colorPalette.white,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n z: 100,\n left: 'center',\n top: 'middle',\n style: {\n fill: isDark ? colorPalette.white : colorPalette.black,\n width: 70,\n height: 30,\n text: lang(isOrderBook ? 'sell' : 'short'),\n },\n },\n ],\n },\n {\n type: 'group',\n right: `${(isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE) + 8}px'`,\n top: '56px',\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n right: 'center',\n top: 'middle',\n shape: {\n width: 70,\n height: 30,\n },\n style: {\n fill: isDark ? colorPalette.darkGray : colorPalette.white,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n z: 100,\n right: 'center',\n top: 'middle',\n style: {\n fill: isDark ? colorPalette.white : colorPalette.black,\n width: 70,\n height: 30,\n text: lang(isOrderBook ? 'buy' : 'long'),\n },\n },\n ],\n },\n ],\n };\n};\n\nexport const getOption: GetOptionType = ({\n data, precision, isDark, isOrderBook, isDesktop, lang,\n}) => {\n const buckets = data.orderPositionBooks[0]?.buckets || [];\n const bucketWidth = data.orderPositionBooks[0]?.bucketWidth!;\n const price = data.orderPositionBooks[0]?.price!;\n const bucketPrecision = bucketWidth.toString().split('.')[1].length || 0;\n\n const dataset = buckets.map((item) => ([\n item!.price,\n Number(item!.longCountPercent),\n Number(item!.shortCountPercent) * -1,\n ]));\n\n const zoomInitialStartValue = price - (bucketWidth * INITIAL_BARS * 0.5);\n const zoomInitialEndValue = price + (bucketWidth * INITIAL_BARS * 0.5);\n\n const max = Math.max(...dataset.map((item) => item[1]));\n const min = Math.abs(Math.min(...dataset.map((item) => item[2])));\n\n const range = max > min ? max : min;\n\n return (\n {\n animation: false,\n color: [\n colorPalette.bottleGreenLight,\n isDark ? colorPalette.orange : colorPalette.raspberryDark,\n ],\n title: {\n text: lang(isOrderBook ? 'open_orders' : 'open_positions').toUpperCase(),\n padding: 20,\n textStyle: {\n fontSize: 14,\n },\n },\n toolbox: {\n feature: getZoomControls({\n resetStartValue: zoomInitialStartValue,\n resetEndValue: zoomInitialEndValue,\n }),\n },\n dataZoom: [\n {\n type: 'inside',\n realtime: true,\n startValue: zoomInitialStartValue,\n endValue: zoomInitialEndValue,\n\n yAxisIndex: 0,\n minValueSpan: 10 * bucketWidth,\n },\n ],\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n axis: 'y',\n },\n formatter: (val) => tooltipFormatter({\n data: (val as { data: number[] }[])[0].data,\n precision: bucketPrecision,\n isOrderBook,\n lang,\n }),\n extraCssText: 'z-index: 1',\n },\n grid: [\n {\n name: 'main-grid',\n top: '48px',\n left: '0px',\n right: `${isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE}px`,\n bottom: `${isDesktop ? X_LABEL_SIZE : X_LABEL_SIZE + ZOOM_CONTROL_HEIGHT}px`,\n },\n ],\n xAxis: {\n type: 'value',\n min: range * -1.05,\n max: range * 1.05,\n axisTick: { show: false },\n axisLine: { show: false },\n axisLabel: {\n padding: [7, 0, 0, 0],\n showMinLabel: false,\n showMaxLabel: false,\n formatter: (value) => (value === 0 ? '%' : `${Math.abs(value)}%`),\n },\n },\n yAxis: {\n type: 'value',\n position: 'right',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n margin: isDesktop ? 10 : 0,\n showMaxLabel: false,\n showMinLabel: false,\n padding: [0, 0, 0, 10],\n formatter: (value) => value.toFixed(bucketPrecision),\n },\n },\n dataset: {\n source: dataset,\n },\n series: [\n {\n type: 'custom',\n name: 'sell-short',\n id: 'sell-short',\n clip: true,\n encode: {\n x: 1,\n y: 0,\n tooltip: 1,\n },\n renderItem: (params, api) => {\n const yValue = api.value(0);\n const xStart = api.coord([api.value(1), yValue]);\n const xEnd = api.coord([0, yValue]);\n const bucketWidthHeight = api.size ? (api.size([0, bucketWidth]) as number[])[1] : 0;\n const height = bucketWidthHeight > 4 ? bucketWidthHeight * 0.8 : bucketWidthHeight;\n\n const rectShape = {\n x: xStart[0] + 0.5,\n y: xStart[1] - height / 2,\n width: xEnd[0] - xStart[0],\n height,\n };\n\n return {\n type: 'rect',\n shape: rectShape,\n emphasis: {\n style: {\n fill: colorPalette.bottleGreenLight,\n },\n },\n style: {\n fill: api.visual('color'),\n },\n };\n },\n },\n {\n type: 'custom',\n name: 'buy-long',\n id: 'buy-long',\n clip: true,\n encode: {\n x: 1,\n y: 0,\n tooltip: 2,\n },\n renderItem: (params, api) => {\n const yValue = api.value(0);\n const xStart = api.coord([api.value(2), yValue]);\n const xEnd = api.coord([0, yValue]);\n const bucketWidthHeight = api.size ? (api.size([0, bucketWidth]) as number[])[1] : 0;\n const height = bucketWidthHeight > 4 ? bucketWidthHeight * 0.8 : bucketWidthHeight;\n\n const rectShape = {\n x: xStart[0] - 0.5,\n y: xStart[1] - height / 2,\n width: xEnd[0] - xStart[0],\n height,\n };\n\n return {\n type: 'rect',\n shape: rectShape,\n emphasis: {\n style: {\n fill: isDark ? colorPalette.orange : colorPalette.raspberryDark,\n },\n },\n style: {\n fill: api.visual('color'),\n },\n };\n },\n },\n {\n type: 'custom',\n name: 'current-price',\n id: 'current-price',\n markLine: {\n animation: false,\n silent: true,\n precision,\n symbol: ['none', 'triangle'],\n symbolRotate: 90,\n symbolSize: [20, 10],\n lineStyle: {\n color: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,\n width: 1,\n },\n label: {\n padding: isDesktop ? [5, 15, 5, 15] : [5, 12, 5, 5],\n color: isDark ? colorPalette.black : colorPalette.white,\n backgroundColor: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,\n },\n data: [\n {\n yAxis: price,\n },\n ],\n },\n renderItem: () => null,\n },\n ],\n }\n );\n};\n"],"mappings":"AAAA,SAASA,YAAY,EAAEC,YAAY,EAAEC,eAAe,QAAQ,2BAA2B;AACvF,SACEC,YAAY,EACZC,WAAW,EACXC,oBAAoB,EACpBC,mBAAmB,EACnBC,YAAY,EACZC,oBAAoB,EACpBC,mBAAmB,EACnBC,mBAAmB,QACd,aAAa;AAEpB,SAASC,gBAAgB,QAAQ,cAAc;AAE/C,OAAO,MAAMC,mBAAmB,GAAGC,IAAA,IAK9B;EAAA,IAJH;IACEC,MAAM;IAAEC,WAAW;IAAEC,SAAS;IAAEC;EAER,CAAC,GAAAJ,IAAA;EAE3B,MAAMK,gBAAgB,GAAGjB,YAAY,CAAC;IACpCa,MAAM;IACNK,UAAU,EAAEf,WAAW;IACvBgB,WAAW,EAAEJ,SAAS,GAAGX,oBAAoB,GAAGC,mBAAmB;IACnEe,WAAW,EAAEL,SAAS,GAAGT,YAAY,GAAGA,YAAY,GAAGG,mBAAmB;IAC1EY,UAAU,EAAEN,SAAS,GAAGR,oBAAoB,GAAGC,mBAAmB;IAClEc,aAAa,EAAEP,SAAS;IACxBQ,YAAY,EAAER,SAAS,GAAG,CAAC,GAAGN;EAChC,CAAC,CAAC;EAEF,OAAO;IACLe,IAAI,EAAE,CACJ;MACEC,IAAI,EAAE,WAAW;MACjBC,GAAG,EAAE,MAAM;MACXC,IAAI,EAAE,KAAK;MACXC,KAAK,KAAAC,MAAA,CAAKd,SAAS,GAAGR,oBAAoB,GAAGC,mBAAmB,OAAI;MACpEsB,MAAM,KAAAD,MAAA,CAAKd,SAAS,GAAGT,YAAY,GAAGA,YAAY,GAAGG,mBAAmB;IAC1E,CAAC,CACF;IACDsB,KAAK,EAAE;MACLC,SAAS,EAAE;QACTC,MAAM,EAAElB,SAAS,GAAG,EAAE,GAAG;MAC3B;IACF,CAAC;IACDmB,MAAM,EAAE,CACN;MACEC,IAAI,EAAE,QAAQ;MACdV,IAAI,EAAE,eAAe;MACrBW,EAAE,EAAE,eAAe;MACnBC,QAAQ,EAAE;QACRC,KAAK,EAAE;UACLC,OAAO,EAAExB,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACpD;MACF;IACF,CAAC,CACF;IACDyB,OAAO,EAAE,CACP,GAAGvB,gBAAgB,EACnB;MACEkB,IAAI,EAAE,OAAO;MACbR,IAAI,EAAE,KAAK;MACXD,GAAG,EAAE,MAAM;MACXe,MAAM,EAAE,IAAI;MACZC,QAAQ,EAAE,CACR;QACEP,IAAI,EAAE,MAAM;QACZQ,CAAC,EAAE,GAAG;QACNhB,IAAI,EAAE,QAAQ;QACdD,GAAG,EAAE,QAAQ;QACbkB,KAAK,EAAE;UACLC,KAAK,EAAE,EAAE;UACTC,MAAM,EAAE;QACV,CAAC;QACDC,KAAK,EAAE;UACLC,IAAI,EAAEnC,MAAM,GAAGd,YAAY,CAACkD,QAAQ,GAAGlD,YAAY,CAACmD,KAAK;UACzDC,UAAU,EAAE,CAAC;UACbC,aAAa,EAAE,CAAC;UAChBC,aAAa,EAAE,CAAC;UAChBC,WAAW,EAAE;QACf;MACF,CAAC,EACD;QACEnB,IAAI,EAAE,MAAM;QACZQ,CAAC,EAAE,GAAG;QACNhB,IAAI,EAAE,QAAQ;QACdD,GAAG,EAAE,QAAQ;QACbqB,KAAK,EAAE;UACLC,IAAI,EAAEnC,MAAM,GAAGd,YAAY,CAACmD,KAAK,GAAGnD,YAAY,CAACwD,KAAK;UACtDV,KAAK,EAAE,EAAE;UACTC,MAAM,EAAE,EAAE;UACVU,IAAI,EAAExC,IAAI,CAACF,WAAW,GAAG,MAAM,GAAG,OAAO;QAC3C;MACF,CAAC;IAEL,CAAC,EACD;MACEqB,IAAI,EAAE,OAAO;MACbP,KAAK,KAAAC,MAAA,CAAK,CAACd,SAAS,GAAGR,oBAAoB,GAAGC,mBAAmB,IAAI,CAAC,QAAK;MAC3EkB,GAAG,EAAE,MAAM;MACXe,MAAM,EAAE,IAAI;MACZC,QAAQ,EAAE,CACR;QACEP,IAAI,EAAE,MAAM;QACZQ,CAAC,EAAE,GAAG;QACNf,KAAK,EAAE,QAAQ;QACfF,GAAG,EAAE,QAAQ;QACbkB,KAAK,EAAE;UACLC,KAAK,EAAE,EAAE;UACTC,MAAM,EAAE;QACV,CAAC;QACDC,KAAK,EAAE;UACLC,IAAI,EAAEnC,MAAM,GAAGd,YAAY,CAACkD,QAAQ,GAAGlD,YAAY,CAACmD,KAAK;UACzDC,UAAU,EAAE,CAAC;UACbC,aAAa,EAAE,CAAC;UAChBC,aAAa,EAAE,CAAC;UAChBC,WAAW,EAAE;QACf;MACF,CAAC,EACD;QACEnB,IAAI,EAAE,MAAM;QACZQ,CAAC,EAAE,GAAG;QACNf,KAAK,EAAE,QAAQ;QACfF,GAAG,EAAE,QAAQ;QACbqB,KAAK,EAAE;UACLC,IAAI,EAAEnC,MAAM,GAAGd,YAAY,CAACmD,KAAK,GAAGnD,YAAY,CAACwD,KAAK;UACtDV,KAAK,EAAE,EAAE;UACTC,MAAM,EAAE,EAAE;UACVU,IAAI,EAAExC,IAAI,CAACF,WAAW,GAAG,KAAK,GAAG,MAAM;QACzC;MACF,CAAC;IAEL,CAAC;EAEL,CAAC;AACH,CAAC;AAED,OAAO,MAAM2C,SAAwB,GAAGC,KAAA,IAElC;EAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EAAA,IAFmC;IACvCC,IAAI;IAAEC,SAAS;IAAElD,MAAM;IAAEC,WAAW;IAAEC,SAAS;IAAEC;EACnD,CAAC,GAAA0C,KAAA;EACC,MAAMM,OAAO,GAAG,EAAAL,qBAAA,GAAAG,IAAI,CAACG,kBAAkB,CAAC,CAAC,CAAC,cAAAN,qBAAA,uBAA1BA,qBAAA,CAA4BK,OAAO,KAAI,EAAE;EACzD,MAAME,WAAW,IAAAN,sBAAA,GAAGE,IAAI,CAACG,kBAAkB,CAAC,CAAC,CAAC,cAAAL,sBAAA,uBAA1BA,sBAAA,CAA4BM,WAAY;EAC5D,MAAMC,KAAK,IAAAN,sBAAA,GAAGC,IAAI,CAACG,kBAAkB,CAAC,CAAC,CAAC,cAAAJ,sBAAA,uBAA1BA,sBAAA,CAA4BM,KAAM;EAChD,MAAMC,eAAe,GAAGF,WAAW,CAACG,QAAQ,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAACC,MAAM,IAAI,CAAC;EAExE,MAAMC,OAAO,GAAGR,OAAO,CAACS,GAAG,CAAEC,IAAI,IAAM,CACrCA,IAAI,CAAEP,KAAK,EACXQ,MAAM,CAACD,IAAI,CAAEE,gBAAgB,CAAC,EAC9BD,MAAM,CAACD,IAAI,CAAEG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CACpC,CAAC;EAEH,MAAMC,qBAAqB,GAAGX,KAAK,GAAID,WAAW,GAAGhE,YAAY,GAAG,GAAI;EACxE,MAAM6E,mBAAmB,GAAGZ,KAAK,GAAID,WAAW,GAAGhE,YAAY,GAAG,GAAI;EAEtE,MAAM8E,GAAG,GAAGC,IAAI,CAACD,GAAG,CAAC,GAAGR,OAAO,CAACC,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACvD,MAAMQ,GAAG,GAAGD,IAAI,CAACE,GAAG,CAACF,IAAI,CAACC,GAAG,CAAC,GAAGV,OAAO,CAACC,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAEjE,MAAMU,KAAK,GAAGJ,GAAG,GAAGE,GAAG,GAAGF,GAAG,GAAGE,GAAG;EAEnC,OACE;IACEG,SAAS,EAAE,KAAK;IAChBC,KAAK,EAAE,CACLvF,YAAY,CAACwF,gBAAgB,EAC7B1E,MAAM,GAAGd,YAAY,CAACyF,MAAM,GAAGzF,YAAY,CAAC0F,aAAa,CAC1D;IACDC,KAAK,EAAE;MACLlC,IAAI,EAAExC,IAAI,CAACF,WAAW,GAAG,aAAa,GAAG,gBAAgB,CAAC,CAAC6E,WAAW,CAAC,CAAC;MACxEpD,OAAO,EAAE,EAAE;MACXqD,SAAS,EAAE;QACTC,QAAQ,EAAE;MACZ;IACF,CAAC;IACDC,OAAO,EAAE;MACPC,OAAO,EAAE9F,eAAe,CAAC;QACvB+F,eAAe,EAAElB,qBAAqB;QACtCmB,aAAa,EAAElB;MACjB,CAAC;IACH,CAAC;IACDmB,QAAQ,EAAE,CACR;MACE/D,IAAI,EAAE,QAAQ;MACdgE,QAAQ,EAAE,IAAI;MACdC,UAAU,EAAEtB,qBAAqB;MACjCuB,QAAQ,EAAEtB,mBAAmB;MAE7BuB,UAAU,EAAE,CAAC;MACbC,YAAY,EAAE,EAAE,GAAGrC;IACrB,CAAC,CACF;IACDsC,OAAO,EAAE;MACPC,OAAO,EAAE,MAAM;MACfC,WAAW,EAAE;QACXC,IAAI,EAAE;MACR,CAAC;MACDC,SAAS,EAAGC,GAAG,IAAKnG,gBAAgB,CAAC;QACnCoD,IAAI,EAAG+C,GAAG,CAA0B,CAAC,CAAC,CAAC/C,IAAI;QAC3CC,SAAS,EAAEK,eAAe;QAC1BtD,WAAW;QACXE;MACF,CAAC,CAAC;MACF8F,YAAY,EAAE;IAChB,CAAC;IACDtF,IAAI,EAAE,CACJ;MACEC,IAAI,EAAE,WAAW;MACjBC,GAAG,EAAE,MAAM;MACXC,IAAI,EAAE,KAAK;MACXC,KAAK,KAAAC,MAAA,CAAKd,SAAS,GAAGR,oBAAoB,GAAGC,mBAAmB,OAAI;MACpEsB,MAAM,KAAAD,MAAA,CAAKd,SAAS,GAAGT,YAAY,GAAGA,YAAY,GAAGG,mBAAmB;IAC1E,CAAC,CACF;IACDsG,KAAK,EAAE;MACL5E,IAAI,EAAE,OAAO;MACb+C,GAAG,EAAEE,KAAK,GAAG,CAAC,IAAI;MAClBJ,GAAG,EAAEI,KAAK,GAAG,IAAI;MACjB4B,QAAQ,EAAE;QAAEC,IAAI,EAAE;MAAM,CAAC;MACzBC,QAAQ,EAAE;QAAED,IAAI,EAAE;MAAM,CAAC;MACzBjF,SAAS,EAAE;QACTO,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrB4E,YAAY,EAAE,KAAK;QACnBC,YAAY,EAAE,KAAK;QACnBR,SAAS,EAAGS,KAAK,IAAMA,KAAK,KAAK,CAAC,GAAG,GAAG,MAAAxF,MAAA,CAAMoD,IAAI,CAACE,GAAG,CAACkC,KAAK,CAAC;MAC/D;IACF,CAAC;IACDtF,KAAK,EAAE;MACLI,IAAI,EAAE,OAAO;MACbmF,QAAQ,EAAE,OAAO;MACjBJ,QAAQ,EAAE;QAAED,IAAI,EAAE;MAAM,CAAC;MACzBD,QAAQ,EAAE;QAAEC,IAAI,EAAE;MAAM,CAAC;MACzBjF,SAAS,EAAE;QACTC,MAAM,EAAElB,SAAS,GAAG,EAAE,GAAG,CAAC;QAC1BqG,YAAY,EAAE,KAAK;QACnBD,YAAY,EAAE,KAAK;QACnB5E,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtBqE,SAAS,EAAGS,KAAK,IAAKA,KAAK,CAACE,OAAO,CAACnD,eAAe;MACrD;IACF,CAAC;IACDI,OAAO,EAAE;MACPgD,MAAM,EAAEhD;IACV,CAAC;IACDtC,MAAM,EAAE,CACN;MACEC,IAAI,EAAE,QAAQ;MACdV,IAAI,EAAE,YAAY;MAClBW,EAAE,EAAE,YAAY;MAChBqF,IAAI,EAAE,IAAI;MACVC,MAAM,EAAE;QACNC,CAAC,EAAE,CAAC;QACJC,CAAC,EAAE,CAAC;QACJpB,OAAO,EAAE;MACX,CAAC;MACDqB,UAAU,EAAEA,CAACC,MAAM,EAAEC,GAAG,KAAK;QAC3B,MAAMC,MAAM,GAAGD,GAAG,CAACV,KAAK,CAAC,CAAC,CAAC;QAC3B,MAAMY,MAAM,GAAGF,GAAG,CAACG,KAAK,CAAC,CAACH,GAAG,CAACV,KAAK,CAAC,CAAC,CAAC,EAAEW,MAAM,CAAC,CAAC;QAChD,MAAMG,IAAI,GAAGJ,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC,EAAEF,MAAM,CAAC,CAAC;QACnC,MAAMI,iBAAiB,GAAGL,GAAG,CAACM,IAAI,GAAIN,GAAG,CAACM,IAAI,CAAC,CAAC,CAAC,EAAEnE,WAAW,CAAC,CAAC,CAAc,CAAC,CAAC,GAAG,CAAC;QACpF,MAAMpB,MAAM,GAAGsF,iBAAiB,GAAG,CAAC,GAAGA,iBAAiB,GAAG,GAAG,GAAGA,iBAAiB;QAElF,MAAME,SAAS,GAAG;UAChBX,CAAC,EAAEM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;UAClBL,CAAC,EAAEK,MAAM,CAAC,CAAC,CAAC,GAAGnF,MAAM,GAAG,CAAC;UACzBD,KAAK,EAAEsF,IAAI,CAAC,CAAC,CAAC,GAAGF,MAAM,CAAC,CAAC,CAAC;UAC1BnF;QACF,CAAC;QAED,OAAO;UACLX,IAAI,EAAE,MAAM;UACZS,KAAK,EAAE0F,SAAS;UAChBC,QAAQ,EAAE;YACRxF,KAAK,EAAE;cACLC,IAAI,EAAEjD,YAAY,CAACwF;YACrB;UACF,CAAC;UACDxC,KAAK,EAAE;YACLC,IAAI,EAAE+E,GAAG,CAACS,MAAM,CAAC,OAAO;UAC1B;QACF,CAAC;MACH;IACF,CAAC,EACD;MACErG,IAAI,EAAE,QAAQ;MACdV,IAAI,EAAE,UAAU;MAChBW,EAAE,EAAE,UAAU;MACdqF,IAAI,EAAE,IAAI;MACVC,MAAM,EAAE;QACNC,CAAC,EAAE,CAAC;QACJC,CAAC,EAAE,CAAC;QACJpB,OAAO,EAAE;MACX,CAAC;MACDqB,UAAU,EAAEA,CAACC,MAAM,EAAEC,GAAG,KAAK;QAC3B,MAAMC,MAAM,GAAGD,GAAG,CAACV,KAAK,CAAC,CAAC,CAAC;QAC3B,MAAMY,MAAM,GAAGF,GAAG,CAACG,KAAK,CAAC,CAACH,GAAG,CAACV,KAAK,CAAC,CAAC,CAAC,EAAEW,MAAM,CAAC,CAAC;QAChD,MAAMG,IAAI,GAAGJ,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC,EAAEF,MAAM,CAAC,CAAC;QACnC,MAAMI,iBAAiB,GAAGL,GAAG,CAACM,IAAI,GAAIN,GAAG,CAACM,IAAI,CAAC,CAAC,CAAC,EAAEnE,WAAW,CAAC,CAAC,CAAc,CAAC,CAAC,GAAG,CAAC;QACpF,MAAMpB,MAAM,GAAGsF,iBAAiB,GAAG,CAAC,GAAGA,iBAAiB,GAAG,GAAG,GAAGA,iBAAiB;QAElF,MAAME,SAAS,GAAG;UAChBX,CAAC,EAAEM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;UAClBL,CAAC,EAAEK,MAAM,CAAC,CAAC,CAAC,GAAGnF,MAAM,GAAG,CAAC;UACzBD,KAAK,EAAEsF,IAAI,CAAC,CAAC,CAAC,GAAGF,MAAM,CAAC,CAAC,CAAC;UAC1BnF;QACF,CAAC;QAED,OAAO;UACLX,IAAI,EAAE,MAAM;UACZS,KAAK,EAAE0F,SAAS;UAChBC,QAAQ,EAAE;YACRxF,KAAK,EAAE;cACLC,IAAI,EAAEnC,MAAM,GAAGd,YAAY,CAACyF,MAAM,GAAGzF,YAAY,CAAC0F;YACpD;UACF,CAAC;UACD1C,KAAK,EAAE;YACLC,IAAI,EAAE+E,GAAG,CAACS,MAAM,CAAC,OAAO;UAC1B;QACF,CAAC;MACH;IACF,CAAC,EACD;MACErG,IAAI,EAAE,QAAQ;MACdV,IAAI,EAAE,eAAe;MACrBW,EAAE,EAAE,eAAe;MACnBC,QAAQ,EAAE;QACRgD,SAAS,EAAE,KAAK;QAChB5C,MAAM,EAAE,IAAI;QACZsB,SAAS;QACT0E,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;QAC5BC,YAAY,EAAE,EAAE;QAChBC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACpBC,SAAS,EAAE;UACTtD,KAAK,EAAEzE,MAAM,GAAGd,YAAY,CAACyF,MAAM,GAAGzF,YAAY,CAAC8I,eAAe;UAClEhG,KAAK,EAAE;QACT,CAAC;QACDP,KAAK,EAAE;UACLC,OAAO,EAAExB,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;UACnDuE,KAAK,EAAEzE,MAAM,GAAGd,YAAY,CAACwD,KAAK,GAAGxD,YAAY,CAACmD,KAAK;UACvD4F,eAAe,EAAEjI,MAAM,GAAGd,YAAY,CAACyF,MAAM,GAAGzF,YAAY,CAAC8I;QAC/D,CAAC;QACD/E,IAAI,EAAE,CACJ;UACE/B,KAAK,EAAEoC;QACT,CAAC;MAEL,CAAC;MACD0D,UAAU,EAAEA,CAAA,KAAM;IACpB,CAAC;EAEL,CAAC;AAEL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/OrderBookWidget/components/Chart/types.ts"],"sourcesContent":["import { EChartsOption } from 'echarts';\nimport { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';\n\nexport interface ChartProps {\n data: GetOrderPositionBooksQuery;\n isOrderBook: boolean;\n}\n\nexport interface GetResponsiveOptionsProps {\n isDark: boolean;\n isOrderBook: boolean;\n}\n\nexport interface GetOptionProps {\n data: GetOrderPositionBooksQuery;\n precision: number;\n isDark: boolean;\n isOrderBook: boolean;\n}\n\nexport type GetOptionType = (\n props: GetOptionProps,\n) => EChartsOption;\n\nexport type TooltipFormatterType = (\n data: number[],\n precision: number,\n isOrderBook: boolean,\n) => string;\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/OrderBookWidget/components/Chart/types.ts"],"sourcesContent":["import { EChartsOption } from 'echarts';\nimport { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';\n\nexport interface ChartProps {\n data: GetOrderPositionBooksQuery;\n isOrderBook: boolean;\n precision: number;\n}\n\nexport interface GetResponsiveOptionsProps {\n isDesktop: boolean;\n isDark: boolean;\n isOrderBook: boolean;\n lang: (label: string) => string;\n}\n\nexport interface GetOptionProps {\n data: GetOrderPositionBooksQuery;\n precision: number;\n isDark: boolean;\n isOrderBook: boolean;\n isDesktop: boolean;\n lang: (label: string) => string;\n}\n\nexport type GetOptionType = (\n props: GetOptionProps,\n) => EChartsOption;\n\nexport type TooltipFormatterType = (\n props : {\n data: number[],\n precision: number,\n isOrderBook: boolean,\n lang: (label: string) => string;\n }\n) => string;\n"],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  import { BookType } from '../gql/types/graphql';
2
+ import { InstrumentId } from './types';
2
3
  const navigationConfig = [{
3
4
  id: BookType.Order,
4
5
  label: 'order_book'
@@ -6,5 +7,72 @@ const navigationConfig = [{
6
7
  id: BookType.Position,
7
8
  label: 'position_book'
8
9
  }];
9
- export { navigationConfig };
10
+ const instrumentSelectConfig = [{
11
+ id: InstrumentId.EUR_AUD,
12
+ label: 'EUR/AUD'
13
+ }, {
14
+ id: InstrumentId.EUR_GBP,
15
+ label: 'EUR/GBP'
16
+ }, {
17
+ id: InstrumentId.EUR_JPY,
18
+ label: 'EUR/JPY'
19
+ }, {
20
+ id: InstrumentId.EUR_USD,
21
+ label: 'EUR/USD'
22
+ }, {
23
+ id: InstrumentId.EUR_CHF,
24
+ label: 'EUR/CHF'
25
+ }, {
26
+ id: InstrumentId.USD_CHF,
27
+ label: 'USD/CHF'
28
+ }, {
29
+ id: InstrumentId.USD_JPY,
30
+ label: 'USD/JPY'
31
+ }, {
32
+ id: InstrumentId.USD_CAD,
33
+ label: 'USD/CAD'
34
+ }, {
35
+ id: InstrumentId.GBP_USD,
36
+ label: 'GBP/USD'
37
+ }, {
38
+ id: InstrumentId.GBP_JPY,
39
+ label: 'GBP/JPY'
40
+ }, {
41
+ id: InstrumentId.GBP_CHF,
42
+ label: 'GBP/CHF'
43
+ }, {
44
+ id: InstrumentId.AUD_JPY,
45
+ label: 'AUD/JPY'
46
+ }, {
47
+ id: InstrumentId.AUD_USD,
48
+ label: 'AUD/USD'
49
+ }, {
50
+ id: InstrumentId.NZD_USD,
51
+ label: 'NZD/USD'
52
+ }, {
53
+ id: InstrumentId.XAU_USD,
54
+ label: 'XAU/USD'
55
+ }, {
56
+ id: InstrumentId.XAG_USD,
57
+ label: 'XAG/USD'
58
+ }];
59
+ const instrumentPrecisionConfig = {
60
+ [InstrumentId.EUR_AUD]: 5,
61
+ [InstrumentId.EUR_GBP]: 5,
62
+ [InstrumentId.EUR_JPY]: 3,
63
+ [InstrumentId.EUR_USD]: 5,
64
+ [InstrumentId.EUR_CHF]: 5,
65
+ [InstrumentId.USD_CHF]: 5,
66
+ [InstrumentId.USD_JPY]: 3,
67
+ [InstrumentId.USD_CAD]: 5,
68
+ [InstrumentId.GBP_USD]: 5,
69
+ [InstrumentId.GBP_JPY]: 3,
70
+ [InstrumentId.GBP_CHF]: 5,
71
+ [InstrumentId.AUD_JPY]: 3,
72
+ [InstrumentId.AUD_USD]: 5,
73
+ [InstrumentId.NZD_USD]: 5,
74
+ [InstrumentId.XAU_USD]: 3,
75
+ [InstrumentId.XAG_USD]: 5
76
+ };
77
+ export { navigationConfig, instrumentSelectConfig, instrumentPrecisionConfig };
10
78
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","names":["BookType","navigationConfig","id","Order","label","Position"],"sources":["../../../src/OrderBookWidget/config.ts"],"sourcesContent":["import { BookType } from '../gql/types/graphql';\n\nconst navigationConfig = [{\n id: BookType.Order,\n label: 'order_book',\n}, {\n id: BookType.Position,\n label: 'position_book',\n}];\n\nexport { navigationConfig };\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,sBAAsB;AAE/C,MAAMC,gBAAgB,GAAG,CAAC;EACxBC,EAAE,EAAEF,QAAQ,CAACG,KAAK;EAClBC,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,QAAQ,CAACK,QAAQ;EACrBD,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,SAASH,gBAAgB"}
1
+ {"version":3,"file":"config.js","names":["BookType","InstrumentId","navigationConfig","id","Order","label","Position","instrumentSelectConfig","EUR_AUD","EUR_GBP","EUR_JPY","EUR_USD","EUR_CHF","USD_CHF","USD_JPY","USD_CAD","GBP_USD","GBP_JPY","GBP_CHF","AUD_JPY","AUD_USD","NZD_USD","XAU_USD","XAG_USD","instrumentPrecisionConfig"],"sources":["../../../src/OrderBookWidget/config.ts"],"sourcesContent":["import { BookType } from '../gql/types/graphql';\nimport { InstrumentId } from './types';\n\nconst navigationConfig = [{\n id: BookType.Order,\n label: 'order_book',\n}, {\n id: BookType.Position,\n label: 'position_book',\n}];\n\nconst instrumentSelectConfig = [{\n id: InstrumentId.EUR_AUD,\n label: 'EUR/AUD',\n}, {\n id: InstrumentId.EUR_GBP,\n label: 'EUR/GBP',\n}, {\n id: InstrumentId.EUR_JPY,\n label: 'EUR/JPY',\n}, {\n id: InstrumentId.EUR_USD,\n label: 'EUR/USD',\n}, {\n id: InstrumentId.EUR_CHF,\n label: 'EUR/CHF',\n}, {\n id: InstrumentId.USD_CHF,\n label: 'USD/CHF',\n}, {\n id: InstrumentId.USD_JPY,\n label: 'USD/JPY',\n}, {\n id: InstrumentId.USD_CAD,\n label: 'USD/CAD',\n}, {\n id: InstrumentId.GBP_USD,\n label: 'GBP/USD',\n}, {\n id: InstrumentId.GBP_JPY,\n label: 'GBP/JPY',\n}, {\n id: InstrumentId.GBP_CHF,\n label: 'GBP/CHF',\n}, {\n id: InstrumentId.AUD_JPY,\n label: 'AUD/JPY',\n}, {\n id: InstrumentId.AUD_USD,\n label: 'AUD/USD',\n}, {\n id: InstrumentId.NZD_USD,\n label: 'NZD/USD',\n}, {\n id: InstrumentId.XAU_USD,\n label: 'XAU/USD',\n}, {\n id: InstrumentId.XAG_USD,\n label: 'XAG/USD',\n}];\n\nconst instrumentPrecisionConfig: Record<InstrumentId, number> = {\n [InstrumentId.EUR_AUD]: 5,\n [InstrumentId.EUR_GBP]: 5,\n [InstrumentId.EUR_JPY]: 3,\n [InstrumentId.EUR_USD]: 5,\n [InstrumentId.EUR_CHF]: 5,\n [InstrumentId.USD_CHF]: 5,\n [InstrumentId.USD_JPY]: 3,\n [InstrumentId.USD_CAD]: 5,\n [InstrumentId.GBP_USD]: 5,\n [InstrumentId.GBP_JPY]: 3,\n [InstrumentId.GBP_CHF]: 5,\n [InstrumentId.AUD_JPY]: 3,\n [InstrumentId.AUD_USD]: 5,\n [InstrumentId.NZD_USD]: 5,\n [InstrumentId.XAU_USD]: 3,\n [InstrumentId.XAG_USD]: 5,\n};\nexport { navigationConfig, instrumentSelectConfig, instrumentPrecisionConfig };\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,sBAAsB;AAC/C,SAASC,YAAY,QAAQ,SAAS;AAEtC,MAAMC,gBAAgB,GAAG,CAAC;EACxBC,EAAE,EAAEH,QAAQ,CAACI,KAAK;EAClBC,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEH,QAAQ,CAACM,QAAQ;EACrBD,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,MAAME,sBAAsB,GAAG,CAAC;EAC9BJ,EAAE,EAAEF,YAAY,CAACO,OAAO;EACxBH,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACQ,OAAO;EACxBJ,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACS,OAAO;EACxBL,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACU,OAAO;EACxBN,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACW,OAAO;EACxBP,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACY,OAAO;EACxBR,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACa,OAAO;EACxBT,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACc,OAAO;EACxBV,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACe,OAAO;EACxBX,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACgB,OAAO;EACxBZ,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACiB,OAAO;EACxBb,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACkB,OAAO;EACxBd,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACmB,OAAO;EACxBf,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACoB,OAAO;EACxBhB,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACqB,OAAO;EACxBjB,KAAK,EAAE;AACT,CAAC,EAAE;EACDF,EAAE,EAAEF,YAAY,CAACsB,OAAO;EACxBlB,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,MAAMmB,yBAAuD,GAAG;EAC9D,CAACvB,YAAY,CAACO,OAAO,GAAG,CAAC;EACzB,CAACP,YAAY,CAACQ,OAAO,GAAG,CAAC;EACzB,CAACR,YAAY,CAACS,OAAO,GAAG,CAAC;EACzB,CAACT,YAAY,CAACU,OAAO,GAAG,CAAC;EACzB,CAACV,YAAY,CAACW,OAAO,GAAG,CAAC;EACzB,CAACX,YAAY,CAACY,OAAO,GAAG,CAAC;EACzB,CAACZ,YAAY,CAACa,OAAO,GAAG,CAAC;EACzB,CAACb,YAAY,CAACc,OAAO,GAAG,CAAC;EACzB,CAACd,YAAY,CAACe,OAAO,GAAG,CAAC;EACzB,CAACf,YAAY,CAACgB,OAAO,GAAG,CAAC;EACzB,CAAChB,YAAY,CAACiB,OAAO,GAAG,CAAC;EACzB,CAACjB,YAAY,CAACkB,OAAO,GAAG,CAAC;EACzB,CAAClB,YAAY,CAACmB,OAAO,GAAG,CAAC;EACzB,CAACnB,YAAY,CAACoB,OAAO,GAAG,CAAC;EACzB,CAACpB,YAAY,CAACqB,OAAO,GAAG,CAAC;EACzB,CAACrB,YAAY,CAACsB,OAAO,GAAG;AAC1B,CAAC;AACD,SAASrB,gBAAgB,EAAEK,sBAAsB,EAAEiB,yBAAyB"}
@@ -1,2 +1,20 @@
1
- export {};
1
+ export let InstrumentId = function (InstrumentId) {
2
+ InstrumentId["EUR_AUD"] = "EUR_AUD";
3
+ InstrumentId["EUR_GBP"] = "EUR_GBP";
4
+ InstrumentId["EUR_JPY"] = "EUR_JPY";
5
+ InstrumentId["EUR_USD"] = "EUR_USD";
6
+ InstrumentId["EUR_CHF"] = "EUR_CHF";
7
+ InstrumentId["USD_CHF"] = "USD_CHF";
8
+ InstrumentId["USD_JPY"] = "USD_JPY";
9
+ InstrumentId["USD_CAD"] = "USD_CAD";
10
+ InstrumentId["GBP_USD"] = "GBP_USD";
11
+ InstrumentId["GBP_JPY"] = "GBP_JPY";
12
+ InstrumentId["GBP_CHF"] = "GBP_CHF";
13
+ InstrumentId["AUD_JPY"] = "AUD_JPY";
14
+ InstrumentId["AUD_USD"] = "AUD_USD";
15
+ InstrumentId["NZD_USD"] = "NZD_USD";
16
+ InstrumentId["XAU_USD"] = "XAU_USD";
17
+ InstrumentId["XAG_USD"] = "XAG_USD";
18
+ return InstrumentId;
19
+ }({});
2
20
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["import { Theme } from '@oanda/labs-widget-common';\nimport { Locale } from '@oanda/mono-i18n';\n\nexport interface OrderBookWidgetConfig {\n graphqlUrl: string;\n instrument: string;\n locale: Locale;\n theme?: Theme;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface WidgetProps {\n instrument: string;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":["InstrumentId"],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["import { Theme } from '@oanda/labs-widget-common';\nimport { Locale } from '@oanda/mono-i18n';\nimport { BookType } from '../gql/types/graphql';\n\nexport interface OrderBookWidgetConfig {\n graphqlUrl: string;\n instrument: InstrumentId;\n locale: Locale;\n theme?: Theme;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface MainProps {\n instrument?: InstrumentId;\n}\n\nexport interface ChartWithDataProps {\n instrument: InstrumentId;\n bookType: BookType;\n}\n\nexport enum InstrumentId {\n EUR_AUD = 'EUR_AUD',\n EUR_GBP = 'EUR_GBP',\n EUR_JPY = 'EUR_JPY',\n EUR_USD = 'EUR_USD',\n EUR_CHF = 'EUR_CHF',\n USD_CHF = 'USD_CHF',\n USD_JPY = 'USD_JPY',\n USD_CAD = 'USD_CAD',\n GBP_USD = 'GBP_USD',\n GBP_JPY = 'GBP_JPY',\n GBP_CHF = 'GBP_CHF',\n AUD_JPY = 'AUD_JPY',\n AUD_USD = 'AUD_USD',\n NZD_USD = 'NZD_USD',\n XAU_USD = 'XAU_USD',\n XAG_USD = 'XAG_USD',\n}\n"],"mappings":"AAwBA,WAAYA,YAAY,aAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA"}
@@ -1,5 +1,7 @@
1
1
  {
2
+ "buy": "Buy",
2
3
  "data_unavailable": "Data unavailable",
4
+ "instrument": "Instrument",
3
5
  "long": "Long",
4
6
  "long_positions": "Long Positions",
5
7
  "open_orders": "Open Orders",
@@ -9,6 +11,7 @@
9
11
  "position_book": "Position Book",
10
12
  "price": "Price",
11
13
  "reset_zoom": "Reset Zoom",
14
+ "sell": "Sell",
12
15
  "sell_orders": "Sell Orders",
13
16
  "short": "Short",
14
17
  "short_positions": "Short Positions",
@@ -1,5 +1,7 @@
1
1
  {
2
+ "buy": "買進",
2
3
  "data_unavailable": "沒有數據",
4
+ "instrument": "金融工具",
3
5
  "long": "長",
4
6
  "long_positions": "長倉",
5
7
  "open_orders": "開盤市價單",
@@ -9,6 +11,7 @@
9
11
  "position_book": "倉位手冊",
10
12
  "price": "價格",
11
13
  "reset_zoom": "重置比例",
14
+ "sell": "賣出",
12
15
  "sell_orders": "賣單",
13
16
  "short": "短",
14
17
  "short_positions": "短倉",
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { ChartWithDataProps } from './types';
3
+ declare const ChartWithData: ({ instrument, bookType, }: ChartWithDataProps) => JSX.Element;
4
+ export { ChartWithData };
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { MainProps } from './types';
3
+ declare const Main: ({ instrument }: MainProps) => JSX.Element;
4
+ export { Main };
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
2
  import { ChartProps } from './types';
3
- export declare const Chart: ({ data, isOrderBook }: ChartProps) => JSX.Element;
3
+ export declare const Chart: ({ data, isOrderBook, precision }: ChartProps) => JSX.Element;
@@ -1,6 +1,8 @@
1
1
  export declare const INITIAL_BARS = 80;
2
2
  export declare const X_LABEL_SIZE = 40;
3
- export declare const Y_LABEL_SIZE_MOBILE = 35;
3
+ export declare const Y_LABEL_SIZE_MOBILE = 50;
4
4
  export declare const Y_LABEL_SIZE_DESKTOP = 120;
5
5
  export declare const CHART_WIDTH = 9999;
6
- export declare const CHART_HEIGHT = 450;
6
+ export declare const CHART_HEIGHT_DESKTOP = 450;
7
+ export declare const CHART_HEIGHT_MOBILE = 390;
8
+ export declare const ZOOM_CONTROL_HEIGHT = 40;
@@ -1,5 +1,5 @@
1
1
  import { GetOptionType, GetResponsiveOptionsProps } from './types';
2
- export declare const getDesktopOption: ({ isDark, isOrderBook }: GetResponsiveOptionsProps) => {
2
+ export declare const getResponsiveOption: ({ isDark, isOrderBook, isDesktop, lang, }: GetResponsiveOptionsProps) => {
3
3
  grid: {
4
4
  name: string;
5
5
  top: string;
@@ -7,6 +7,21 @@ export declare const getDesktopOption: ({ isDark, isOrderBook }: GetResponsiveOp
7
7
  right: string;
8
8
  bottom: string;
9
9
  }[];
10
+ yAxis: {
11
+ axisLabel: {
12
+ margin: number;
13
+ };
14
+ };
15
+ series: {
16
+ type: string;
17
+ name: string;
18
+ id: string;
19
+ markLine: {
20
+ label: {
21
+ padding: number[];
22
+ };
23
+ };
24
+ }[];
10
25
  graphic: ({
11
26
  top: number | undefined;
12
27
  bottom: number | undefined;
@@ -3,16 +3,26 @@ import { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';
3
3
  export interface ChartProps {
4
4
  data: GetOrderPositionBooksQuery;
5
5
  isOrderBook: boolean;
6
+ precision: number;
6
7
  }
7
8
  export interface GetResponsiveOptionsProps {
9
+ isDesktop: boolean;
8
10
  isDark: boolean;
9
11
  isOrderBook: boolean;
12
+ lang: (label: string) => string;
10
13
  }
11
14
  export interface GetOptionProps {
12
15
  data: GetOrderPositionBooksQuery;
13
16
  precision: number;
14
17
  isDark: boolean;
15
18
  isOrderBook: boolean;
19
+ isDesktop: boolean;
20
+ lang: (label: string) => string;
16
21
  }
17
22
  export type GetOptionType = (props: GetOptionProps) => EChartsOption;
18
- export type TooltipFormatterType = (data: number[], precision: number, isOrderBook: boolean) => string;
23
+ export type TooltipFormatterType = (props: {
24
+ data: number[];
25
+ precision: number;
26
+ isOrderBook: boolean;
27
+ lang: (label: string) => string;
28
+ }) => string;
@@ -1,6 +1,12 @@
1
1
  import { BookType } from '../gql/types/graphql';
2
+ import { InstrumentId } from './types';
2
3
  declare const navigationConfig: {
3
4
  id: BookType;
4
5
  label: string;
5
6
  }[];
6
- export { navigationConfig };
7
+ declare const instrumentSelectConfig: {
8
+ id: InstrumentId;
9
+ label: string;
10
+ }[];
11
+ declare const instrumentPrecisionConfig: Record<InstrumentId, number>;
12
+ export { navigationConfig, instrumentSelectConfig, instrumentPrecisionConfig };
@@ -1,14 +1,37 @@
1
1
  import { Theme } from '@oanda/labs-widget-common';
2
2
  import { Locale } from '@oanda/mono-i18n';
3
+ import { BookType } from '../gql/types/graphql';
3
4
  export interface OrderBookWidgetConfig {
4
5
  graphqlUrl: string;
5
- instrument: string;
6
+ instrument: InstrumentId;
6
7
  locale: Locale;
7
8
  theme?: Theme;
8
9
  }
9
10
  export interface OrderBookWrapperConfig extends OrderBookWidgetConfig {
10
11
  renderElementId: string;
11
12
  }
12
- export interface WidgetProps {
13
- instrument: string;
13
+ export interface MainProps {
14
+ instrument?: InstrumentId;
15
+ }
16
+ export interface ChartWithDataProps {
17
+ instrument: InstrumentId;
18
+ bookType: BookType;
19
+ }
20
+ export declare enum InstrumentId {
21
+ EUR_AUD = "EUR_AUD",
22
+ EUR_GBP = "EUR_GBP",
23
+ EUR_JPY = "EUR_JPY",
24
+ EUR_USD = "EUR_USD",
25
+ EUR_CHF = "EUR_CHF",
26
+ USD_CHF = "USD_CHF",
27
+ USD_JPY = "USD_JPY",
28
+ USD_CAD = "USD_CAD",
29
+ GBP_USD = "GBP_USD",
30
+ GBP_JPY = "GBP_JPY",
31
+ GBP_CHF = "GBP_CHF",
32
+ AUD_JPY = "AUD_JPY",
33
+ AUD_USD = "AUD_USD",
34
+ NZD_USD = "NZD_USD",
35
+ XAU_USD = "XAU_USD",
36
+ XAG_USD = "XAG_USD"
14
37
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oanda/labs-order-book-widget",
3
- "version": "1.0.71",
3
+ "version": "1.0.73",
4
4
  "description": "Labs Order Book Widget",
5
5
  "main": "dist/main/index.js",
6
6
  "module": "dist/module/index.js",
@@ -13,7 +13,7 @@
13
13
  "license": "UNLICENSED",
14
14
  "dependencies": {
15
15
  "@apollo/client": "3.7.17",
16
- "@oanda/labs-widget-common": "^1.0.71",
16
+ "@oanda/labs-widget-common": "^1.0.73",
17
17
  "@oanda/mono-i18n": "9.0.0",
18
18
  "classnames": "2.3.2",
19
19
  "echarts": "5.4.3",
@@ -25,5 +25,5 @@
25
25
  "@graphql-codegen/client-preset": "4.1.0",
26
26
  "@graphql-codegen/typescript": "4.0.1"
27
27
  },
28
- "gitHead": "cec7ba5744ff5ccdd32d0240300b6895c094cb8b"
28
+ "gitHead": "2a5eb3bcd76a6ed8fa128f7aa312f19e82418c63"
29
29
  }
@@ -0,0 +1,78 @@
1
+ import React from 'react';
2
+ import { useQuery } from '@apollo/client';
3
+ import { useMediaQuery } from 'usehooks-ts';
4
+ import classnames from 'classnames';
5
+ import { ChartError, Spinner, SpinnerSize } from '@oanda/labs-widget-common';
6
+ import { ChartWithDataProps } from './types';
7
+ import { getOrderPositionBooks } from '../gql/getOrderPositionBooks';
8
+ import { GetOrderPositionBooksQuery, GetOrderPositionBooksQueryVariables, BookType } from '../gql/types/graphql';
9
+ import { Chart } from './components/Chart/Chart';
10
+ import { instrumentPrecisionConfig } from './config';
11
+
12
+ const ChartWithData = ({
13
+ instrument,
14
+ bookType,
15
+ }: ChartWithDataProps) => {
16
+ const isDesktop = useMediaQuery('(min-width: 768px)');
17
+
18
+ const { loading, data, error } = useQuery<
19
+ GetOrderPositionBooksQuery,
20
+ GetOrderPositionBooksQueryVariables
21
+ >(getOrderPositionBooks, {
22
+ variables: {
23
+ instrument,
24
+ bookType,
25
+ recentHours: 1,
26
+ },
27
+ });
28
+
29
+ const isError = (!loading && !data?.orderPositionBooks[0]?.price) || !!error;
30
+
31
+ return (
32
+ <div className={classnames('lw-relative lw-w-full', {
33
+ 'lw-h-[450px]': isDesktop,
34
+ 'lw-h-[390px]': !isDesktop,
35
+ })}
36
+ >
37
+ {isError && (
38
+ <div className={
39
+ classnames(
40
+ 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',
41
+ {
42
+ 'lw-h-full': isDesktop,
43
+ 'lw-h-[calc(100%-40px)]': !isDesktop,
44
+ },
45
+ )
46
+ }
47
+ >
48
+ <ChartError />
49
+ </div>
50
+ )}
51
+ {loading && (
52
+ <div className={
53
+ classnames(
54
+ 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',
55
+ {
56
+ 'lw-h-full': isDesktop,
57
+ 'lw-h-[calc(100%-40px)]': !isDesktop,
58
+ },
59
+ )
60
+ }
61
+ >
62
+ <Spinner size={SpinnerSize.lg} />
63
+ </div>
64
+ )}
65
+ {data && (
66
+ <div className="lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full">
67
+ <Chart
68
+ data={data}
69
+ isOrderBook={bookType === BookType.Order}
70
+ precision={instrumentPrecisionConfig[instrument]}
71
+ />
72
+ </div>
73
+ )}
74
+ </div>
75
+ );
76
+ };
77
+
78
+ export { ChartWithData };
@@ -0,0 +1,40 @@
1
+ import React, { useState } from 'react';
2
+ import { Select, Tabs } from '@oanda/labs-widget-common';
3
+ import { useLocale } from '@oanda/mono-i18n';
4
+ import { InstrumentId, MainProps } from './types';
5
+ import { BookType } from '../gql/types/graphql';
6
+ import { instrumentSelectConfig, navigationConfig } from './config';
7
+ import { ChartWithData } from './ChartWithData';
8
+
9
+ const Main = ({ instrument }: MainProps) => {
10
+ const [bookType, setBookType] = useState(BookType.Order);
11
+ const [toolInstrument, setToolInstrument] = useState(instrumentSelectConfig[0]);
12
+ const { lang } = useLocale();
13
+
14
+ return (
15
+ <div data-testid="order-book-widget" className="lw-p-4 lw-pt-0 lw-text-sm lw-tracking-normal lw-text-black">
16
+ <Tabs
17
+ activeTab={bookType}
18
+ handleClick={(e) => setBookType(e.currentTarget.value as BookType)}
19
+ labelCallback={lang}
20
+ items={navigationConfig}
21
+ mobileFullWidth
22
+ />
23
+ {!instrument && (
24
+ <div className="lw-mb-6 lw-mt-12">
25
+ <Select
26
+ selectLabel={lang('instrument')}
27
+ options={instrumentSelectConfig}
28
+ selectedOption={toolInstrument}
29
+ setSelectedOption={
30
+ (val) => setToolInstrument(val as { id: InstrumentId; label: string })
31
+ }
32
+ />
33
+ </div>
34
+ )}
35
+ <ChartWithData instrument={instrument || toolInstrument.id} bookType={bookType} />
36
+ </div>
37
+ );
38
+ };
39
+
40
+ export { Main };
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';
3
3
  import { LocaleProvider } from '@oanda/mono-i18n';
4
4
  import { ThemeProvider, getLocale } from '@oanda/labs-widget-common';
5
- import { Widget } from './Widget';
5
+ import { Main } from './Main';
6
6
  import { OrderBookWidgetConfig } from './types';
7
7
  import { translations } from '../translations';
8
8
 
@@ -21,7 +21,7 @@ const OrderBookWidget = ({
21
21
  <ThemeProvider theme={theme}>
22
22
  <LocaleProvider locale={getLocale(locale)} translations={translations}>
23
23
  <ApolloProvider client={client}>
24
- <Widget instrument={instrument} />
24
+ <Main instrument={instrument} />
25
25
  </ApolloProvider>
26
26
  </LocaleProvider>
27
27
  </ThemeProvider>
@@ -5,13 +5,15 @@ import {
5
5
  Theme, ThemeContext, colorPalette, getChartTheme,
6
6
  } from '@oanda/labs-widget-common';
7
7
  import { useMediaQuery } from 'usehooks-ts';
8
- import { getDesktopOption, getOption } from './getOption';
8
+ import { useLocale } from '@oanda/mono-i18n';
9
+ import { getResponsiveOption, getOption } from './getOption';
9
10
  import { ChartProps } from './types';
10
11
 
11
12
  registerTheme('dark_theme', getChartTheme(Theme.Dark));
12
13
  registerTheme('light_theme', getChartTheme(Theme.Light));
13
14
 
14
- export const Chart = ({ data, isOrderBook }: ChartProps) => {
15
+ export const Chart = ({ data, isOrderBook, precision }: ChartProps) => {
16
+ const { lang } = useLocale();
15
17
  const isDark = useContext(ThemeContext) === Theme.Dark;
16
18
  const echartRef = useRef(null);
17
19
  const isDesktop = useMediaQuery('(min-width: 768px)');
@@ -48,9 +50,13 @@ export const Chart = ({ data, isOrderBook }: ChartProps) => {
48
50
  // @ts-ignore
49
51
  const echartInstance = echartRef.current.getEchartsInstance() as EChartsType;
50
52
 
51
- echartInstance.setOption(getDesktopOption({ isDark, isOrderBook }));
53
+ echartInstance.setOption(
54
+ getResponsiveOption({
55
+ isDark, isOrderBook, isDesktop, lang,
56
+ }),
57
+ );
52
58
  }
53
- }, [echartRef, isDesktop, isDark, isOrderBook]);
59
+ }, [echartRef, isDesktop, isDark, isOrderBook, lang]);
54
60
 
55
61
  return (
56
62
  <div className="lw-relative lw-w-full">
@@ -60,11 +66,11 @@ export const Chart = ({ data, isOrderBook }: ChartProps) => {
60
66
  ref={echartRef}
61
67
  theme={isDark ? 'dark_theme' : 'light_theme'}
62
68
  style={{
63
- height: '450px',
69
+ height: isDesktop ? '450px' : '390px',
64
70
  width: '100%',
65
71
  }}
66
72
  option={getOption({
67
- data, precision: 4, isDark, isOrderBook,
73
+ data, precision, isDark, isOrderBook, isDesktop, lang,
68
74
  })}
69
75
  />
70
76
  )}
@@ -1,7 +1,9 @@
1
1
  export const INITIAL_BARS = 80;
2
2
 
3
3
  export const X_LABEL_SIZE = 40;
4
- export const Y_LABEL_SIZE_MOBILE = 35;
4
+ export const Y_LABEL_SIZE_MOBILE = 50;
5
5
  export const Y_LABEL_SIZE_DESKTOP = 120;
6
6
  export const CHART_WIDTH = 9999;
7
- export const CHART_HEIGHT = 450;
7
+ export const CHART_HEIGHT_DESKTOP = 450;
8
+ export const CHART_HEIGHT_MOBILE = 390;
9
+ export const ZOOM_CONTROL_HEIGHT = 40;