@oanda/labs-order-book-widget 1.0.20 → 1.0.21
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.
- package/CHANGELOG.md +72 -0
- package/dist/main/OrderBookWidget/Main.js +2 -2
- package/dist/main/OrderBookWidget/Main.js.map +1 -1
- package/dist/main/OrderBookWidget/components/Chart/config.js +3 -3
- package/dist/main/OrderBookWidget/components/Chart/config.js.map +1 -1
- package/dist/main/OrderBookWidget/utils.js +1 -1
- package/dist/main/OrderBookWidget/utils.js.map +1 -1
- package/dist/module/OrderBookWidget/Main.js +2 -2
- package/dist/module/OrderBookWidget/Main.js.map +1 -1
- package/dist/module/OrderBookWidget/components/Chart/config.js +3 -3
- package/dist/module/OrderBookWidget/components/Chart/config.js.map +1 -1
- package/dist/module/OrderBookWidget/utils.js +1 -1
- package/dist/module/OrderBookWidget/utils.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,78 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## 1.0.21 (2023-10-10)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## 1.0.20 (2023-10-06)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## 1.0.19 (2023-10-06)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## 1.0.18 (2023-10-05)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## 1.0.17 (2023-10-04)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## 1.0.16 (2023-10-04)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## 1.0.15 (2023-10-04)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## 1.0.14 (2023-10-03)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## 1.0.13 (2023-10-03)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
## 1.0.12 (2023-10-03)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## 1.0.11 (2023-10-02)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## 1.0.10 (2023-09-29)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## 1.0.9 (2023-09-28)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## 1.0.8 (2023-09-27)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
## 1.0.7 (2023-09-26)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## 1.0.6 (2023-09-21)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
## 1.0.5 (2023-09-13)
|
|
71
|
+
|
|
72
|
+
**Note:** Version bump only for package @oanda/labs-order-book-widget
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
6
78
|
## 1.0.20 (2023-10-06)
|
|
7
79
|
|
|
8
80
|
|
|
@@ -27,9 +27,9 @@ const Main = _ref => {
|
|
|
27
27
|
setError(undefined);
|
|
28
28
|
(0, _utils.getData)(apiUrl, instrument, division, dataType).then(result => {
|
|
29
29
|
setIsLoading(false);
|
|
30
|
-
if (dataType === _types.DataType.Order &&
|
|
30
|
+
if (dataType === _types.DataType.Order && result?.orderBooks.length > 0) {
|
|
31
31
|
setData(result.orderBooks);
|
|
32
|
-
} else if (dataType === _types.DataType.Position &&
|
|
32
|
+
} else if (dataType === _types.DataType.Position && result?.positionBooks.length > 0) {
|
|
33
33
|
setData(result.positionBooks);
|
|
34
34
|
} else {
|
|
35
35
|
setData(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","names":["_react","_interopRequireWildcard","require","_labsWidgetCommon","_Chart","_types","_utils","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Main","_ref","apiUrl","instrument","division","isLoading","setIsLoading","useState","error","setError","undefined","dataType","setDataType","DataType","Order","data","setData","useEffect","getData","then","result","orderBooks","length","Position","positionBooks","catch","err","JSON","stringify","isTypeOrder","createElement","className","Button","variant","ButtonVariant","primary","secondary","onClick","ChartError","Spinner","size","SpinnerSize","lg","Chart","exports"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Button, ButtonVariant, ChartError, Spinner, SpinnerSize,\n} from '@oanda/labs-widget-common';\nimport { Chart } from './components/Chart/Chart';\nimport { DataType, MainProps, OrderBookData } from './types';\nimport { getData } from './utils';\n\nconst Main = ({\n apiUrl,\n instrument,\n division,\n}: MainProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [dataType, setDataType] = useState(DataType.Order);\n const [data, setData] = useState<OrderBookData[] | undefined>(undefined);\n\n useEffect(() => {\n setIsLoading(true);\n setData(undefined);\n setError(undefined);\n\n getData(apiUrl, instrument, division, dataType)\n .then((result) => {\n setIsLoading(false);\n if (dataType === DataType.Order && result?.orderBooks.length > 0) {\n setData(result.orderBooks);\n } else if (dataType === DataType.Position && result?.positionBooks.length > 0) {\n setData(result.positionBooks);\n } else {\n setData(undefined);\n }\n }).catch((err) => {\n setIsLoading(false);\n setError(JSON.stringify(err));\n });\n }, [dataType, apiUrl, instrument, division]);\n\n const isTypeOrder = dataType === DataType.Order;\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-border lw-border-solid lw-border-grey lw-p-4 lw-text-sm lw-text-black\">\n <div className=\"lw-flex lw-gap-2\">\n <Button\n variant={isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary}\n onClick={() => setDataType(DataType.Order)}\n >\n Order Book\n </Button>\n <Button\n variant={isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary}\n onClick={() => setDataType(DataType.Position)}\n >\n Position Book\n </Button>\n </div>\n {/* @todo: chart height */}\n <div className=\"lw-relative lw-h-[600px] lw-w-full\">\n {error && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {data && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full\">\n <Chart data={data[data.length - 1]} isTypeOrder={isTypeOrder} />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAGA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAAkC,SAAAK,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAP,wBAAAW,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAElC,MAAMW,IAAI,GAAGC,IAAA,IAII;EAAA,IAJH;IACZC,MAAM;IACNC,UAAU;IACVC;EACS,CAAC,GAAAH,IAAA;EACV,MAAM,CAACI,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACjD,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAF,eAAQ,EAAqBG,SAAS,CAAC;EACjE,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAG,IAAAL,eAAQ,EAACM,eAAQ,CAACC,KAAK,CAAC;EACxD,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAG,IAAAT,eAAQ,EAA8BG,SAAS,CAAC;EAExE,IAAAO,gBAAS,EAAC,MAAM;IACdX,YAAY,CAAC,IAAI,CAAC;IAClBU,OAAO,CAACN,SAAS,CAAC;IAClBD,QAAQ,CAACC,SAAS,CAAC;IAEnB,IAAAQ,cAAO,EAAChB,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEO,QAAQ,CAAC,CAC5CQ,IAAI,CAAEC,MAAM,IAAK;MAChBd,YAAY,CAAC,KAAK,CAAC;MACnB,IAAIK,QAAQ,KAAKE,eAAQ,CAACC,KAAK,
|
|
1
|
+
{"version":3,"file":"Main.js","names":["_react","_interopRequireWildcard","require","_labsWidgetCommon","_Chart","_types","_utils","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Main","_ref","apiUrl","instrument","division","isLoading","setIsLoading","useState","error","setError","undefined","dataType","setDataType","DataType","Order","data","setData","useEffect","getData","then","result","orderBooks","length","Position","positionBooks","catch","err","JSON","stringify","isTypeOrder","createElement","className","Button","variant","ButtonVariant","primary","secondary","onClick","ChartError","Spinner","size","SpinnerSize","lg","Chart","exports"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Button, ButtonVariant, ChartError, Spinner, SpinnerSize,\n} from '@oanda/labs-widget-common';\nimport { Chart } from './components/Chart/Chart';\nimport { DataType, MainProps, OrderBookData } from './types';\nimport { getData } from './utils';\n\nconst Main = ({\n apiUrl,\n instrument,\n division,\n}: MainProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [dataType, setDataType] = useState(DataType.Order);\n const [data, setData] = useState<OrderBookData[] | undefined>(undefined);\n\n useEffect(() => {\n setIsLoading(true);\n setData(undefined);\n setError(undefined);\n\n getData(apiUrl, instrument, division, dataType)\n .then((result) => {\n setIsLoading(false);\n if (dataType === DataType.Order && result?.orderBooks.length > 0) {\n setData(result.orderBooks);\n } else if (dataType === DataType.Position && result?.positionBooks.length > 0) {\n setData(result.positionBooks);\n } else {\n setData(undefined);\n }\n }).catch((err) => {\n setIsLoading(false);\n setError(JSON.stringify(err));\n });\n }, [dataType, apiUrl, instrument, division]);\n\n const isTypeOrder = dataType === DataType.Order;\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-border lw-border-solid lw-border-grey lw-p-4 lw-text-sm lw-text-black\">\n <div className=\"lw-flex lw-gap-2\">\n <Button\n variant={isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary}\n onClick={() => setDataType(DataType.Order)}\n >\n Order Book\n </Button>\n <Button\n variant={isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary}\n onClick={() => setDataType(DataType.Position)}\n >\n Position Book\n </Button>\n </div>\n {/* @todo: chart height */}\n <div className=\"lw-relative lw-h-[600px] lw-w-full\">\n {error && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {data && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full\">\n <Chart data={data[data.length - 1]} isTypeOrder={isTypeOrder} />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ const getChartOptions = (rangeX, minRangeY, maxRangeY) => ({
|
|
|
24
24
|
max: rangeX,
|
|
25
25
|
ticks: {
|
|
26
26
|
color: '#607890',
|
|
27
|
-
callback: tickValue => tickValue === 0 ? '%' :
|
|
27
|
+
callback: tickValue => tickValue === 0 ? '%' : `${Math.abs(Number(tickValue))} %`
|
|
28
28
|
},
|
|
29
29
|
grid: {
|
|
30
30
|
color: '#d1d7e0'
|
|
@@ -94,8 +94,8 @@ const getChartOptions = (rangeX, minRangeY, maxRangeY) => ({
|
|
|
94
94
|
},
|
|
95
95
|
padding: 8,
|
|
96
96
|
callbacks: {
|
|
97
|
-
title: context =>
|
|
98
|
-
label: context =>
|
|
97
|
+
title: context => `Price: ${context[0].label}`,
|
|
98
|
+
label: context => `${context.dataset.label}: ${Math.abs(Number(context.raw))}%`
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":["colorPos","exports","colorNeg","getChartOptions","rangeX","minRangeY","maxRangeY","animation","duration","transitions","zoom","skipNull","scales","x","min","max","ticks","color","callback","tickValue","
|
|
1
|
+
{"version":3,"file":"config.js","names":["colorPos","exports","colorNeg","getChartOptions","rangeX","minRangeY","maxRangeY","animation","duration","transitions","zoom","skipNull","scales","x","min","max","ticks","color","callback","tickValue","Math","abs","Number","grid","y","bounds","type","stacked","afterFit","scaleInstance","width","indexAxis","responsive","plugins","limits","pan","enabled","modifierKey","mode","wheel","pinch","drag","tooltip","position","yAlign","backgroundColor","borderWidth","borderColor","titleColor","bodyColor","displayColors","titleFont","size","weight","bodyFont","padding","callbacks","title","context","label","dataset","raw"],"sources":["../../../../../src/OrderBookWidget/components/Chart/config.tsx"],"sourcesContent":["import type { ChartOptions } from 'chart.js';\n\nexport const colorPos = '#4A87F1';\nexport const colorNeg = '#00d37e';\n\nexport const getChartOptions = (rangeX: number, minRangeY: number, maxRangeY: number): ChartOptions<'bar'> => ({\n animation: {\n duration: 0,\n },\n transitions: {\n zoom: {\n animation: {\n duration: 500,\n },\n },\n },\n skipNull: true,\n scales: {\n x: {\n min: rangeX * -1,\n max: rangeX,\n ticks: {\n color: '#607890',\n callback: (tickValue) => (tickValue === 0 ? '%' : `${Math.abs(Number(tickValue))} %`),\n },\n grid: {\n color: '#d1d7e0',\n },\n },\n y: {\n bounds: 'ticks',\n type: 'linear',\n min: minRangeY,\n max: maxRangeY,\n stacked: true,\n afterFit(scaleInstance) {\n // eslint-disable-next-line no-param-reassign\n scaleInstance.width = 80;\n },\n ticks: {\n color: '#607890',\n },\n grid: {\n color: '#d1d7e0',\n },\n },\n },\n indexAxis: 'y' as const,\n responsive: true,\n plugins: {\n zoom: {\n limits: {\n y: {\n min: minRangeY,\n max: maxRangeY,\n },\n },\n pan: {\n enabled: true,\n modifierKey: 'shift',\n mode: 'y',\n },\n zoom: {\n wheel: {\n enabled: true,\n },\n pinch: {\n enabled: true,\n },\n drag: {\n enabled: true,\n },\n mode: 'y',\n },\n },\n tooltip: {\n position: 'nearest',\n yAlign: 'bottom',\n backgroundColor: 'rgba(255, 255, 255, 0.90)',\n borderWidth: 1,\n borderColor: '#607890',\n titleColor: '#607890',\n bodyColor: '#607890',\n displayColors: false,\n titleFont: {\n size: 14,\n weight: 'normal',\n },\n bodyFont: {\n size: 14,\n weight: 'normal',\n },\n padding: 8,\n callbacks: {\n title: (context) => `Price: ${context[0].label}`,\n label: (context) => `${context.dataset.label}: ${Math.abs(Number(context.raw))}%`,\n },\n },\n },\n});\n"],"mappings":";;;;;;AAEO,MAAMA,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAG,SAAS;AAC1B,MAAME,QAAQ,GAAAD,OAAA,CAAAC,QAAA,GAAG,SAAS;AAE1B,MAAMC,eAAe,GAAGA,CAACC,MAAc,EAAEC,SAAiB,EAAEC,SAAiB,MAA2B;EAC7GC,SAAS,EAAE;IACTC,QAAQ,EAAE;EACZ,CAAC;EACDC,WAAW,EAAE;IACXC,IAAI,EAAE;MACJH,SAAS,EAAE;QACTC,QAAQ,EAAE;MACZ;IACF;EACF,CAAC;EACDG,QAAQ,EAAE,IAAI;EACdC,MAAM,EAAE;IACNC,CAAC,EAAE;MACDC,GAAG,EAAEV,MAAM,GAAG,CAAC,CAAC;MAChBW,GAAG,EAAEX,MAAM;MACXY,KAAK,EAAE;QACLC,KAAK,EAAE,SAAS;QAChBC,QAAQ,EAAGC,SAAS,IAAMA,SAAS,KAAK,CAAC,GAAG,GAAG,GAAI,GAAEC,IAAI,CAACC,GAAG,CAACC,MAAM,CAACH,SAAS,CAAC,CAAE;MACnF,CAAC;MACDI,IAAI,EAAE;QACJN,KAAK,EAAE;MACT;IACF,CAAC;IACDO,CAAC,EAAE;MACDC,MAAM,EAAE,OAAO;MACfC,IAAI,EAAE,QAAQ;MACdZ,GAAG,EAAET,SAAS;MACdU,GAAG,EAAET,SAAS;MACdqB,OAAO,EAAE,IAAI;MACbC,QAAQA,CAACC,aAAa,EAAE;QAEtBA,aAAa,CAACC,KAAK,GAAG,EAAE;MAC1B,CAAC;MACDd,KAAK,EAAE;QACLC,KAAK,EAAE;MACT,CAAC;MACDM,IAAI,EAAE;QACJN,KAAK,EAAE;MACT;IACF;EACF,CAAC;EACDc,SAAS,EAAE,GAAY;EACvBC,UAAU,EAAE,IAAI;EAChBC,OAAO,EAAE;IACPvB,IAAI,EAAE;MACJwB,MAAM,EAAE;QACNV,CAAC,EAAE;UACDV,GAAG,EAAET,SAAS;UACdU,GAAG,EAAET;QACP;MACF,CAAC;MACD6B,GAAG,EAAE;QACHC,OAAO,EAAE,IAAI;QACbC,WAAW,EAAE,OAAO;QACpBC,IAAI,EAAE;MACR,CAAC;MACD5B,IAAI,EAAE;QACJ6B,KAAK,EAAE;UACLH,OAAO,EAAE;QACX,CAAC;QACDI,KAAK,EAAE;UACLJ,OAAO,EAAE;QACX,CAAC;QACDK,IAAI,EAAE;UACJL,OAAO,EAAE;QACX,CAAC;QACDE,IAAI,EAAE;MACR;IACF,CAAC;IACDI,OAAO,EAAE;MACPC,QAAQ,EAAE,SAAS;MACnBC,MAAM,EAAE,QAAQ;MAChBC,eAAe,EAAE,2BAA2B;MAC5CC,WAAW,EAAE,CAAC;MACdC,WAAW,EAAE,SAAS;MACtBC,UAAU,EAAE,SAAS;MACrBC,SAAS,EAAE,SAAS;MACpBC,aAAa,EAAE,KAAK;MACpBC,SAAS,EAAE;QACTC,IAAI,EAAE,EAAE;QACRC,MAAM,EAAE;MACV,CAAC;MACDC,QAAQ,EAAE;QACRF,IAAI,EAAE,EAAE;QACRC,MAAM,EAAE;MACV,CAAC;MACDE,OAAO,EAAE,CAAC;MACVC,SAAS,EAAE;QACTC,KAAK,EAAGC,OAAO,IAAM,UAASA,OAAO,CAAC,CAAC,CAAC,CAACC,KAAM,EAAC;QAChDA,KAAK,EAAGD,OAAO,IAAM,GAAEA,OAAO,CAACE,OAAO,CAACD,KAAM,KAAIvC,IAAI,CAACC,GAAG,CAACC,MAAM,CAACoC,OAAO,CAACG,GAAG,CAAC,CAAE;MACjF;IACF;EACF;AACF,CAAC,CAAC;AAAC5D,OAAA,CAAAE,eAAA,GAAAA,eAAA"}
|
|
@@ -7,7 +7,7 @@ exports.getData = void 0;
|
|
|
7
7
|
var _types = require("./types");
|
|
8
8
|
const getFetchUrl = (apiUrl, instrument, division, dataType) => {
|
|
9
9
|
const recentHourlyDataType = dataType === _types.DataType.Order ? 'recentHourlyOrderBooks' : 'recentHourlyPositionBooks';
|
|
10
|
-
return
|
|
10
|
+
return `${apiUrl}/instruments/${instrument}/${recentHourlyDataType}?division=${division}`;
|
|
11
11
|
};
|
|
12
12
|
const getData = (apiUrl, instrument, division, dataType) => {
|
|
13
13
|
const fetchUrl = getFetchUrl(apiUrl, instrument, division, dataType);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_types","require","getFetchUrl","apiUrl","instrument","division","dataType","recentHourlyDataType","DataType","Order","
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_types","require","getFetchUrl","apiUrl","instrument","division","dataType","recentHourlyDataType","DataType","Order","getData","fetchUrl","fetch","then","res","json","exports"],"sources":["../../../src/OrderBookWidget/utils.ts"],"sourcesContent":["import { DataType } from './types';\n\nconst getFetchUrl = (\n apiUrl: string,\n instrument: string,\n division: string,\n dataType: string,\n) => {\n const recentHourlyDataType = dataType === DataType.Order ? 'recentHourlyOrderBooks' : 'recentHourlyPositionBooks';\n\n return `${apiUrl}/instruments/${instrument}/${recentHourlyDataType}?division=${division}`;\n};\n\nconst getData = (\n apiUrl: string,\n instrument: string,\n division: string,\n dataType: string,\n) => {\n const fetchUrl = getFetchUrl(apiUrl, instrument, division, dataType);\n\n return fetch(fetchUrl).then((res) => res.json());\n};\n\nexport { getData };\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,WAAW,GAAGA,CAClBC,MAAc,EACdC,UAAkB,EAClBC,QAAgB,EAChBC,QAAgB,KACb;EACH,MAAMC,oBAAoB,GAAGD,QAAQ,KAAKE,eAAQ,CAACC,KAAK,GAAG,wBAAwB,GAAG,2BAA2B;EAEjH,OAAQ,GAAEN,MAAO,gBAAeC,UAAW,IAAGG,oBAAqB,aAAYF,QAAS,EAAC;AAC3F,CAAC;AAED,MAAMK,OAAO,GAAGA,CACdP,MAAc,EACdC,UAAkB,EAClBC,QAAgB,EAChBC,QAAgB,KACb;EACH,MAAMK,QAAQ,GAAGT,WAAW,CAACC,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,QAAQ,CAAC;EAEpE,OAAOM,KAAK,CAACD,QAAQ,CAAC,CAACE,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AAACC,OAAA,CAAAN,OAAA,GAAAA,OAAA"}
|
|
@@ -19,9 +19,9 @@ const Main = _ref => {
|
|
|
19
19
|
setError(undefined);
|
|
20
20
|
getData(apiUrl, instrument, division, dataType).then(result => {
|
|
21
21
|
setIsLoading(false);
|
|
22
|
-
if (dataType === DataType.Order &&
|
|
22
|
+
if (dataType === DataType.Order && result?.orderBooks.length > 0) {
|
|
23
23
|
setData(result.orderBooks);
|
|
24
|
-
} else if (dataType === DataType.Position &&
|
|
24
|
+
} else if (dataType === DataType.Position && result?.positionBooks.length > 0) {
|
|
25
25
|
setData(result.positionBooks);
|
|
26
26
|
} else {
|
|
27
27
|
setData(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","names":["React","useState","useEffect","Button","ButtonVariant","ChartError","Spinner","SpinnerSize","Chart","DataType","getData","Main","_ref","apiUrl","instrument","division","isLoading","setIsLoading","error","setError","undefined","dataType","setDataType","Order","data","setData","then","result","orderBooks","length","Position","positionBooks","catch","err","JSON","stringify","isTypeOrder","createElement","className","variant","primary","secondary","onClick","size","lg"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Button, ButtonVariant, ChartError, Spinner, SpinnerSize,\n} from '@oanda/labs-widget-common';\nimport { Chart } from './components/Chart/Chart';\nimport { DataType, MainProps, OrderBookData } from './types';\nimport { getData } from './utils';\n\nconst Main = ({\n apiUrl,\n instrument,\n division,\n}: MainProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [dataType, setDataType] = useState(DataType.Order);\n const [data, setData] = useState<OrderBookData[] | undefined>(undefined);\n\n useEffect(() => {\n setIsLoading(true);\n setData(undefined);\n setError(undefined);\n\n getData(apiUrl, instrument, division, dataType)\n .then((result) => {\n setIsLoading(false);\n if (dataType === DataType.Order && result?.orderBooks.length > 0) {\n setData(result.orderBooks);\n } else if (dataType === DataType.Position && result?.positionBooks.length > 0) {\n setData(result.positionBooks);\n } else {\n setData(undefined);\n }\n }).catch((err) => {\n setIsLoading(false);\n setError(JSON.stringify(err));\n });\n }, [dataType, apiUrl, instrument, division]);\n\n const isTypeOrder = dataType === DataType.Order;\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-border lw-border-solid lw-border-grey lw-p-4 lw-text-sm lw-text-black\">\n <div className=\"lw-flex lw-gap-2\">\n <Button\n variant={isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary}\n onClick={() => setDataType(DataType.Order)}\n >\n Order Book\n </Button>\n <Button\n variant={isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary}\n onClick={() => setDataType(DataType.Position)}\n >\n Position Book\n </Button>\n </div>\n {/* @todo: chart height */}\n <div className=\"lw-relative lw-h-[600px] lw-w-full\">\n {error && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {data && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full\">\n <Chart data={data[data.length - 1]} isTypeOrder={isTypeOrder} />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,QAAQ,OAAO;AAClD,SACEC,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAEC,OAAO,EAAEC,WAAW,QAClD,2BAA2B;AAClC,SAASC,KAAK,QAAQ,0BAA0B;AAChD,SAASC,QAAQ,QAAkC,SAAS;AAC5D,SAASC,OAAO,QAAQ,SAAS;AAEjC,MAAMC,IAAI,GAAGC,IAAA,IAII;EAAA,IAJH;IACZC,MAAM;IACNC,UAAU;IACVC;EACS,CAAC,GAAAH,IAAA;EACV,MAAM,CAACI,SAAS,EAAEC,YAAY,CAAC,GAAGhB,QAAQ,CAAC,KAAK,CAAC;EACjD,MAAM,CAACiB,KAAK,EAAEC,QAAQ,CAAC,GAAGlB,QAAQ,CAAqBmB,SAAS,CAAC;EACjE,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGrB,QAAQ,CAACQ,QAAQ,CAACc,KAAK,CAAC;EACxD,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGxB,QAAQ,CAA8BmB,SAAS,CAAC;EAExElB,SAAS,CAAC,MAAM;IACde,YAAY,CAAC,IAAI,CAAC;IAClBQ,OAAO,CAACL,SAAS,CAAC;IAClBD,QAAQ,CAACC,SAAS,CAAC;IAEnBV,OAAO,CAACG,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEM,QAAQ,CAAC,CAC5CK,IAAI,CAAEC,MAAM,IAAK;MAChBV,YAAY,CAAC,KAAK,CAAC;MACnB,IAAII,QAAQ,KAAKZ,QAAQ,CAACc,KAAK,
|
|
1
|
+
{"version":3,"file":"Main.js","names":["React","useState","useEffect","Button","ButtonVariant","ChartError","Spinner","SpinnerSize","Chart","DataType","getData","Main","_ref","apiUrl","instrument","division","isLoading","setIsLoading","error","setError","undefined","dataType","setDataType","Order","data","setData","then","result","orderBooks","length","Position","positionBooks","catch","err","JSON","stringify","isTypeOrder","createElement","className","variant","primary","secondary","onClick","size","lg"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Button, ButtonVariant, ChartError, Spinner, SpinnerSize,\n} from '@oanda/labs-widget-common';\nimport { Chart } from './components/Chart/Chart';\nimport { DataType, MainProps, OrderBookData } from './types';\nimport { getData } from './utils';\n\nconst Main = ({\n apiUrl,\n instrument,\n division,\n}: MainProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [dataType, setDataType] = useState(DataType.Order);\n const [data, setData] = useState<OrderBookData[] | undefined>(undefined);\n\n useEffect(() => {\n setIsLoading(true);\n setData(undefined);\n setError(undefined);\n\n getData(apiUrl, instrument, division, dataType)\n .then((result) => {\n setIsLoading(false);\n if (dataType === DataType.Order && result?.orderBooks.length > 0) {\n setData(result.orderBooks);\n } else if (dataType === DataType.Position && result?.positionBooks.length > 0) {\n setData(result.positionBooks);\n } else {\n setData(undefined);\n }\n }).catch((err) => {\n setIsLoading(false);\n setError(JSON.stringify(err));\n });\n }, [dataType, apiUrl, instrument, division]);\n\n const isTypeOrder = dataType === DataType.Order;\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-border lw-border-solid lw-border-grey lw-p-4 lw-text-sm lw-text-black\">\n <div className=\"lw-flex lw-gap-2\">\n <Button\n variant={isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary}\n onClick={() => setDataType(DataType.Order)}\n >\n Order Book\n </Button>\n <Button\n variant={isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary}\n onClick={() => setDataType(DataType.Position)}\n >\n Position Book\n </Button>\n </div>\n {/* @todo: chart height */}\n <div className=\"lw-relative lw-h-[600px] lw-w-full\">\n {error && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {data && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full\">\n <Chart data={data[data.length - 1]} isTypeOrder={isTypeOrder} />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ export const getChartOptions = (rangeX, minRangeY, maxRangeY) => ({
|
|
|
18
18
|
max: rangeX,
|
|
19
19
|
ticks: {
|
|
20
20
|
color: '#607890',
|
|
21
|
-
callback: tickValue => tickValue === 0 ? '%' :
|
|
21
|
+
callback: tickValue => tickValue === 0 ? '%' : `${Math.abs(Number(tickValue))} %`
|
|
22
22
|
},
|
|
23
23
|
grid: {
|
|
24
24
|
color: '#d1d7e0'
|
|
@@ -88,8 +88,8 @@ export const getChartOptions = (rangeX, minRangeY, maxRangeY) => ({
|
|
|
88
88
|
},
|
|
89
89
|
padding: 8,
|
|
90
90
|
callbacks: {
|
|
91
|
-
title: context =>
|
|
92
|
-
label: context =>
|
|
91
|
+
title: context => `Price: ${context[0].label}`,
|
|
92
|
+
label: context => `${context.dataset.label}: ${Math.abs(Number(context.raw))}%`
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":["colorPos","colorNeg","getChartOptions","rangeX","minRangeY","maxRangeY","animation","duration","transitions","zoom","skipNull","scales","x","min","max","ticks","color","callback","tickValue","
|
|
1
|
+
{"version":3,"file":"config.js","names":["colorPos","colorNeg","getChartOptions","rangeX","minRangeY","maxRangeY","animation","duration","transitions","zoom","skipNull","scales","x","min","max","ticks","color","callback","tickValue","Math","abs","Number","grid","y","bounds","type","stacked","afterFit","scaleInstance","width","indexAxis","responsive","plugins","limits","pan","enabled","modifierKey","mode","wheel","pinch","drag","tooltip","position","yAlign","backgroundColor","borderWidth","borderColor","titleColor","bodyColor","displayColors","titleFont","size","weight","bodyFont","padding","callbacks","title","context","label","dataset","raw"],"sources":["../../../../../src/OrderBookWidget/components/Chart/config.tsx"],"sourcesContent":["import type { ChartOptions } from 'chart.js';\n\nexport const colorPos = '#4A87F1';\nexport const colorNeg = '#00d37e';\n\nexport const getChartOptions = (rangeX: number, minRangeY: number, maxRangeY: number): ChartOptions<'bar'> => ({\n animation: {\n duration: 0,\n },\n transitions: {\n zoom: {\n animation: {\n duration: 500,\n },\n },\n },\n skipNull: true,\n scales: {\n x: {\n min: rangeX * -1,\n max: rangeX,\n ticks: {\n color: '#607890',\n callback: (tickValue) => (tickValue === 0 ? '%' : `${Math.abs(Number(tickValue))} %`),\n },\n grid: {\n color: '#d1d7e0',\n },\n },\n y: {\n bounds: 'ticks',\n type: 'linear',\n min: minRangeY,\n max: maxRangeY,\n stacked: true,\n afterFit(scaleInstance) {\n // eslint-disable-next-line no-param-reassign\n scaleInstance.width = 80;\n },\n ticks: {\n color: '#607890',\n },\n grid: {\n color: '#d1d7e0',\n },\n },\n },\n indexAxis: 'y' as const,\n responsive: true,\n plugins: {\n zoom: {\n limits: {\n y: {\n min: minRangeY,\n max: maxRangeY,\n },\n },\n pan: {\n enabled: true,\n modifierKey: 'shift',\n mode: 'y',\n },\n zoom: {\n wheel: {\n enabled: true,\n },\n pinch: {\n enabled: true,\n },\n drag: {\n enabled: true,\n },\n mode: 'y',\n },\n },\n tooltip: {\n position: 'nearest',\n yAlign: 'bottom',\n backgroundColor: 'rgba(255, 255, 255, 0.90)',\n borderWidth: 1,\n borderColor: '#607890',\n titleColor: '#607890',\n bodyColor: '#607890',\n displayColors: false,\n titleFont: {\n size: 14,\n weight: 'normal',\n },\n bodyFont: {\n size: 14,\n weight: 'normal',\n },\n padding: 8,\n callbacks: {\n title: (context) => `Price: ${context[0].label}`,\n label: (context) => `${context.dataset.label}: ${Math.abs(Number(context.raw))}%`,\n },\n },\n },\n});\n"],"mappings":"AAEA,OAAO,MAAMA,QAAQ,GAAG,SAAS;AACjC,OAAO,MAAMC,QAAQ,GAAG,SAAS;AAEjC,OAAO,MAAMC,eAAe,GAAGA,CAACC,MAAc,EAAEC,SAAiB,EAAEC,SAAiB,MAA2B;EAC7GC,SAAS,EAAE;IACTC,QAAQ,EAAE;EACZ,CAAC;EACDC,WAAW,EAAE;IACXC,IAAI,EAAE;MACJH,SAAS,EAAE;QACTC,QAAQ,EAAE;MACZ;IACF;EACF,CAAC;EACDG,QAAQ,EAAE,IAAI;EACdC,MAAM,EAAE;IACNC,CAAC,EAAE;MACDC,GAAG,EAAEV,MAAM,GAAG,CAAC,CAAC;MAChBW,GAAG,EAAEX,MAAM;MACXY,KAAK,EAAE;QACLC,KAAK,EAAE,SAAS;QAChBC,QAAQ,EAAGC,SAAS,IAAMA,SAAS,KAAK,CAAC,GAAG,GAAG,GAAI,GAAEC,IAAI,CAACC,GAAG,CAACC,MAAM,CAACH,SAAS,CAAC,CAAE;MACnF,CAAC;MACDI,IAAI,EAAE;QACJN,KAAK,EAAE;MACT;IACF,CAAC;IACDO,CAAC,EAAE;MACDC,MAAM,EAAE,OAAO;MACfC,IAAI,EAAE,QAAQ;MACdZ,GAAG,EAAET,SAAS;MACdU,GAAG,EAAET,SAAS;MACdqB,OAAO,EAAE,IAAI;MACbC,QAAQA,CAACC,aAAa,EAAE;QAEtBA,aAAa,CAACC,KAAK,GAAG,EAAE;MAC1B,CAAC;MACDd,KAAK,EAAE;QACLC,KAAK,EAAE;MACT,CAAC;MACDM,IAAI,EAAE;QACJN,KAAK,EAAE;MACT;IACF;EACF,CAAC;EACDc,SAAS,EAAE,GAAY;EACvBC,UAAU,EAAE,IAAI;EAChBC,OAAO,EAAE;IACPvB,IAAI,EAAE;MACJwB,MAAM,EAAE;QACNV,CAAC,EAAE;UACDV,GAAG,EAAET,SAAS;UACdU,GAAG,EAAET;QACP;MACF,CAAC;MACD6B,GAAG,EAAE;QACHC,OAAO,EAAE,IAAI;QACbC,WAAW,EAAE,OAAO;QACpBC,IAAI,EAAE;MACR,CAAC;MACD5B,IAAI,EAAE;QACJ6B,KAAK,EAAE;UACLH,OAAO,EAAE;QACX,CAAC;QACDI,KAAK,EAAE;UACLJ,OAAO,EAAE;QACX,CAAC;QACDK,IAAI,EAAE;UACJL,OAAO,EAAE;QACX,CAAC;QACDE,IAAI,EAAE;MACR;IACF,CAAC;IACDI,OAAO,EAAE;MACPC,QAAQ,EAAE,SAAS;MACnBC,MAAM,EAAE,QAAQ;MAChBC,eAAe,EAAE,2BAA2B;MAC5CC,WAAW,EAAE,CAAC;MACdC,WAAW,EAAE,SAAS;MACtBC,UAAU,EAAE,SAAS;MACrBC,SAAS,EAAE,SAAS;MACpBC,aAAa,EAAE,KAAK;MACpBC,SAAS,EAAE;QACTC,IAAI,EAAE,EAAE;QACRC,MAAM,EAAE;MACV,CAAC;MACDC,QAAQ,EAAE;QACRF,IAAI,EAAE,EAAE;QACRC,MAAM,EAAE;MACV,CAAC;MACDE,OAAO,EAAE,CAAC;MACVC,SAAS,EAAE;QACTC,KAAK,EAAGC,OAAO,IAAM,UAASA,OAAO,CAAC,CAAC,CAAC,CAACC,KAAM,EAAC;QAChDA,KAAK,EAAGD,OAAO,IAAM,GAAEA,OAAO,CAACE,OAAO,CAACD,KAAM,KAAIvC,IAAI,CAACC,GAAG,CAACC,MAAM,CAACoC,OAAO,CAACG,GAAG,CAAC,CAAE;MACjF;IACF;EACF;AACF,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DataType } from './types';
|
|
2
2
|
const getFetchUrl = (apiUrl, instrument, division, dataType) => {
|
|
3
3
|
const recentHourlyDataType = dataType === DataType.Order ? 'recentHourlyOrderBooks' : 'recentHourlyPositionBooks';
|
|
4
|
-
return
|
|
4
|
+
return `${apiUrl}/instruments/${instrument}/${recentHourlyDataType}?division=${division}`;
|
|
5
5
|
};
|
|
6
6
|
const getData = (apiUrl, instrument, division, dataType) => {
|
|
7
7
|
const fetchUrl = getFetchUrl(apiUrl, instrument, division, dataType);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["DataType","getFetchUrl","apiUrl","instrument","division","dataType","recentHourlyDataType","Order","
|
|
1
|
+
{"version":3,"file":"utils.js","names":["DataType","getFetchUrl","apiUrl","instrument","division","dataType","recentHourlyDataType","Order","getData","fetchUrl","fetch","then","res","json"],"sources":["../../../src/OrderBookWidget/utils.ts"],"sourcesContent":["import { DataType } from './types';\n\nconst getFetchUrl = (\n apiUrl: string,\n instrument: string,\n division: string,\n dataType: string,\n) => {\n const recentHourlyDataType = dataType === DataType.Order ? 'recentHourlyOrderBooks' : 'recentHourlyPositionBooks';\n\n return `${apiUrl}/instruments/${instrument}/${recentHourlyDataType}?division=${division}`;\n};\n\nconst getData = (\n apiUrl: string,\n instrument: string,\n division: string,\n dataType: string,\n) => {\n const fetchUrl = getFetchUrl(apiUrl, instrument, division, dataType);\n\n return fetch(fetchUrl).then((res) => res.json());\n};\n\nexport { getData };\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,SAAS;AAElC,MAAMC,WAAW,GAAGA,CAClBC,MAAc,EACdC,UAAkB,EAClBC,QAAgB,EAChBC,QAAgB,KACb;EACH,MAAMC,oBAAoB,GAAGD,QAAQ,KAAKL,QAAQ,CAACO,KAAK,GAAG,wBAAwB,GAAG,2BAA2B;EAEjH,OAAQ,GAAEL,MAAO,gBAAeC,UAAW,IAAGG,oBAAqB,aAAYF,QAAS,EAAC;AAC3F,CAAC;AAED,MAAMI,OAAO,GAAGA,CACdN,MAAc,EACdC,UAAkB,EAClBC,QAAgB,EAChBC,QAAgB,KACb;EACH,MAAMI,QAAQ,GAAGR,WAAW,CAACC,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,QAAQ,CAAC;EAEpE,OAAOK,KAAK,CAACD,QAAQ,CAAC,CAACE,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAASL,OAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oanda/labs-order-book-widget",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.21",
|
|
4
4
|
"description": "Labs Order Book Widget",
|
|
5
5
|
"main": "dist/main/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
"author": "OANDA",
|
|
11
11
|
"license": "UNLICENSED",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@oanda/labs-widget-common": "^1.0.
|
|
13
|
+
"@oanda/labs-widget-common": "^1.0.21",
|
|
14
14
|
"chart.js": "4.3.3",
|
|
15
15
|
"chartjs-plugin-zoom": "2.0.1",
|
|
16
16
|
"react-chartjs-2": "5.2.0"
|
|
17
17
|
},
|
|
18
|
-
"gitHead": "
|
|
18
|
+
"gitHead": "8b9fdfc0fb1e1cee0334134b9a1ce400fd9cae59"
|
|
19
19
|
}
|