@xyo-network/react-price-forecast-plugin 2.48.8

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 (75) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/cjs/Plugin.js +15 -0
  4. package/dist/cjs/Plugin.js.map +1 -0
  5. package/dist/cjs/components/DetailsBox.js +33 -0
  6. package/dist/cjs/components/DetailsBox.js.map +1 -0
  7. package/dist/cjs/components/index.js +5 -0
  8. package/dist/cjs/components/index.js.map +1 -0
  9. package/dist/cjs/index.js +6 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/lib/DataLineStyles.js +10 -0
  12. package/dist/cjs/lib/DataLineStyles.js.map +1 -0
  13. package/dist/cjs/lib/DataPointStyles.js +12 -0
  14. package/dist/cjs/lib/DataPointStyles.js.map +1 -0
  15. package/dist/cjs/lib/ForecastLineChartConfigBuilder.js +133 -0
  16. package/dist/cjs/lib/ForecastLineChartConfigBuilder.js.map +1 -0
  17. package/dist/cjs/lib/MockSourcePayloads.js +24 -0
  18. package/dist/cjs/lib/MockSourcePayloads.js.map +1 -0
  19. package/dist/cjs/lib/SourcePayloads.js +49 -0
  20. package/dist/cjs/lib/SourcePayloads.js.map +1 -0
  21. package/dist/cjs/lib/index.js +7 -0
  22. package/dist/cjs/lib/index.js.map +1 -0
  23. package/dist/docs.json +18568 -0
  24. package/dist/esm/Plugin.js +14 -0
  25. package/dist/esm/Plugin.js.map +1 -0
  26. package/dist/esm/components/DetailsBox.js +27 -0
  27. package/dist/esm/components/DetailsBox.js.map +1 -0
  28. package/dist/esm/components/index.js +2 -0
  29. package/dist/esm/components/index.js.map +1 -0
  30. package/dist/esm/index.js +3 -0
  31. package/dist/esm/index.js.map +1 -0
  32. package/dist/esm/lib/DataLineStyles.js +6 -0
  33. package/dist/esm/lib/DataLineStyles.js.map +1 -0
  34. package/dist/esm/lib/DataPointStyles.js +8 -0
  35. package/dist/esm/lib/DataPointStyles.js.map +1 -0
  36. package/dist/esm/lib/ForecastLineChartConfigBuilder.js +130 -0
  37. package/dist/esm/lib/ForecastLineChartConfigBuilder.js.map +1 -0
  38. package/dist/esm/lib/MockSourcePayloads.js +20 -0
  39. package/dist/esm/lib/MockSourcePayloads.js.map +1 -0
  40. package/dist/esm/lib/SourcePayloads.js +41 -0
  41. package/dist/esm/lib/SourcePayloads.js.map +1 -0
  42. package/dist/esm/lib/index.js +4 -0
  43. package/dist/esm/lib/index.js.map +1 -0
  44. package/dist/types/Plugin.d.ts +3 -0
  45. package/dist/types/Plugin.d.ts.map +1 -0
  46. package/dist/types/components/DetailsBox.d.ts +9 -0
  47. package/dist/types/components/DetailsBox.d.ts.map +1 -0
  48. package/dist/types/components/index.d.ts +2 -0
  49. package/dist/types/components/index.d.ts.map +1 -0
  50. package/dist/types/index.d.ts +3 -0
  51. package/dist/types/index.d.ts.map +1 -0
  52. package/dist/types/lib/DataLineStyles.d.ts +5 -0
  53. package/dist/types/lib/DataLineStyles.d.ts.map +1 -0
  54. package/dist/types/lib/DataPointStyles.d.ts +8 -0
  55. package/dist/types/lib/DataPointStyles.d.ts.map +1 -0
  56. package/dist/types/lib/ForecastLineChartConfigBuilder.d.ts +47 -0
  57. package/dist/types/lib/ForecastLineChartConfigBuilder.d.ts.map +1 -0
  58. package/dist/types/lib/MockSourcePayloads.d.ts +18 -0
  59. package/dist/types/lib/MockSourcePayloads.d.ts.map +1 -0
  60. package/dist/types/lib/SourcePayloads.d.ts +30 -0
  61. package/dist/types/lib/SourcePayloads.d.ts.map +1 -0
  62. package/dist/types/lib/index.d.ts +4 -0
  63. package/dist/types/lib/index.d.ts.map +1 -0
  64. package/package.json +82 -0
  65. package/src/Plugin.ts +15 -0
  66. package/src/components/DetailsBox.stories.tsx +78 -0
  67. package/src/components/DetailsBox.tsx +55 -0
  68. package/src/components/index.ts +1 -0
  69. package/src/index.ts +2 -0
  70. package/src/lib/DataLineStyles.ts +6 -0
  71. package/src/lib/DataPointStyles.ts +7 -0
  72. package/src/lib/ForecastLineChartConfigBuilder.ts +169 -0
  73. package/src/lib/MockSourcePayloads.ts +19 -0
  74. package/src/lib/SourcePayloads.ts +47 -0
  75. package/src/lib/index.ts +3 -0
@@ -0,0 +1,14 @@
1
+ import { createPayloadRenderPlugin } from '@xyo-network/react-payload-plugin';
2
+ import { PriceForecastDetailsBox } from './components';
3
+ export const PriceForecastRenderPlugin = {
4
+ ...createPayloadRenderPlugin({
5
+ canRender: () => true,
6
+ components: {
7
+ box: {
8
+ detailsBox: PriceForecastDetailsBox,
9
+ },
10
+ },
11
+ name: 'PriceForecast',
12
+ }),
13
+ };
14
+ //# sourceMappingURL=Plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAuB,MAAM,mCAAmC,CAAA;AAElG,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAwB;IAC5D,GAAG,yBAAyB,CAAC;QAC3B,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;QACrB,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,UAAU,EAAE,uBAAuB;aACpC;SACF;QACD,IAAI,EAAE,eAAe;KACtB,CAAC;CACH,CAAA"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import 'chartjs-adapter-luxon';
3
+ import { useTheme } from '@mui/material';
4
+ import { useAsyncEffect } from '@xylabs/react-async-effect';
5
+ import { FlexCol } from '@xylabs/react-flexbox';
6
+ import { CategoryScale, Chart as ChartJS, Legend, LinearScale, LineElement, PointElement, TimeScale, Title, Tooltip, } from 'chart.js';
7
+ import { useState } from 'react';
8
+ import { Line } from 'react-chartjs-2';
9
+ import { ForecastLineChartConfigBuilder } from '../lib';
10
+ ChartJS.register(CategoryScale, TimeScale, PointElement, LineElement, LinearScale, Title, Tooltip, Legend);
11
+ export const PriceForecastDetailsBox = ({ payload, ...props }) => {
12
+ const priceForecastPayload = payload;
13
+ const theme = useTheme();
14
+ const [data, setData] = useState({ datasets: [] });
15
+ const [options, setOptions] = useState({});
16
+ useAsyncEffect(
17
+ // eslint-disable-next-line react-hooks/exhaustive-deps
18
+ async (mounted) => {
19
+ const { data, options } = await ForecastLineChartConfigBuilder.create(theme, priceForecastPayload, { fetch: true });
20
+ if (mounted()) {
21
+ setData(data);
22
+ setOptions(options);
23
+ }
24
+ }, [priceForecastPayload, theme]);
25
+ return (_jsx(FlexCol, { ...props, busy: priceForecastPayload === undefined, minHeight: "25vh", children: priceForecastPayload ? _jsx(Line, { options: options, data: data }) : null }));
26
+ };
27
+ //# sourceMappingURL=DetailsBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DetailsBox.js","sourceRoot":"","sources":["../../../src/components/DetailsBox.tsx"],"names":[],"mappings":";AAAA,OAAO,uBAAuB,CAAA;AAE9B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAgB,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAG7D,OAAO,EACL,aAAa,EACb,KAAK,IAAI,OAAO,EAGhB,MAAM,EACN,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,KAAK,EACL,OAAO,GACR,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,QAAQ,CAAA;AAEvD,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAM1G,MAAM,CAAC,MAAM,uBAAuB,GAA2C,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IACvG,MAAM,oBAAoB,GAAG,OAAsC,CAAA;IACnE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAoB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;IACrE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAuB,EAAE,CAAC,CAAA;IAEhE,cAAc;IACZ,uDAAuD;IACvD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,8BAA8B,CAAC,MAAM,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACnH,IAAI,OAAO,EAAE,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,CAAA;YACb,UAAU,CAAC,OAAO,CAAC,CAAA;SACpB;IACH,CAAC,EACD,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAC9B,CAAA;IAED,OAAO,CACL,KAAC,OAAO,OAAK,KAAK,EAAE,IAAI,EAAE,oBAAoB,KAAK,SAAS,EAAE,SAAS,EAAC,MAAM,YAC3E,oBAAoB,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,GAC7D,CACX,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './DetailsBox';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './components';
2
+ export * from './Plugin';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { alpha } from '@mui/material';
2
+ export const DataLineStyles = (color) => ({
3
+ backgroundColor: color ? alpha(color, 0.5) : undefined,
4
+ borderColor: color,
5
+ });
6
+ //# sourceMappingURL=DataLineStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataLineStyles.js","sourceRoot":"","sources":["../../../src/lib/DataLineStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC;IACjD,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;IACtD,WAAW,EAAE,KAAK;CACnB,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ export const DataPointStyles = (pointHoverBackgroundColor) => ({
2
+ pointHitRadius: 20,
3
+ pointHoverBackgroundColor,
4
+ pointHoverRadius: 10,
5
+ pointRadius: 5,
6
+ pointStyle: 'circle',
7
+ });
8
+ //# sourceMappingURL=DataPointStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataPointStyles.js","sourceRoot":"","sources":["../../../src/lib/DataPointStyles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,yBAAkC,EAAE,EAAE,CAAC,CAAC;IACtE,cAAc,EAAE,EAAE;IAClB,yBAAyB;IACzB,gBAAgB,EAAE,EAAE;IACpB,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,QAAQ;CACrB,CAAC,CAAA"}
@@ -0,0 +1,130 @@
1
+ import { DataLineStyles } from './DataLineStyles';
2
+ import { DataPointStyles } from './DataPointStyles';
3
+ import { SourcePayloads } from './SourcePayloads';
4
+ const defaultOptions = () => ({
5
+ plugins: {
6
+ legend: {
7
+ position: 'top',
8
+ },
9
+ },
10
+ responsive: true,
11
+ });
12
+ export class ForecastLineChartConfigBuilder {
13
+ payload;
14
+ data = {
15
+ datasets: [],
16
+ };
17
+ options = defaultOptions();
18
+ themeColors;
19
+ constructor(theme, payload) {
20
+ this.payload = payload;
21
+ this.themeColors = this.parseTheme(theme);
22
+ }
23
+ get forecastPayload() {
24
+ if (this.payload) {
25
+ return this.payload;
26
+ }
27
+ else {
28
+ throw Error('ForecastPayload was not defined');
29
+ }
30
+ }
31
+ static async create(theme, payload, sourcePayloadConfig) {
32
+ const instance = new ForecastLineChartConfigBuilder(theme, payload);
33
+ await instance.build(sourcePayloadConfig?.fetch);
34
+ instance.refreshValues();
35
+ return instance;
36
+ }
37
+ async build(includeSources) {
38
+ this.buildOptions();
39
+ await this.buildData(includeSources);
40
+ return this;
41
+ }
42
+ async buildData(includeSources) {
43
+ const forecastData = this.generateDataSetForecastData();
44
+ const datasets = [forecastData];
45
+ if (includeSources) {
46
+ // build data from sources in forecastPayload
47
+ const sourceData = await this.generateDataSetSourcePayloads();
48
+ datasets.unshift(sourceData);
49
+ // add last source point as first item in prediction to connect the lines
50
+ const lastSourceDataItem = sourceData.data.at(-1);
51
+ forecastData.data.unshift(lastSourceDataItem);
52
+ }
53
+ this.data = {
54
+ datasets,
55
+ };
56
+ return this;
57
+ }
58
+ buildOptions() {
59
+ if (this.options.plugins) {
60
+ this.options.plugins.title = this.generateTitle();
61
+ this.options.plugins.legend = this.generateLegend();
62
+ }
63
+ this.options.scales = this.generateScales();
64
+ return this;
65
+ }
66
+ refreshValues() {
67
+ this.data = { ...this.data };
68
+ this.options = { ...this.options };
69
+ }
70
+ generateLegend() {
71
+ return {
72
+ labels: {
73
+ pointStyle: 'circle',
74
+ usePointStyle: true,
75
+ },
76
+ };
77
+ }
78
+ generateScales() {
79
+ return {
80
+ x: {
81
+ grid: {
82
+ color: this.themeColors?.gridColor,
83
+ },
84
+ time: {
85
+ unit: 'minute',
86
+ },
87
+ type: 'time',
88
+ },
89
+ y: {
90
+ grid: {
91
+ color: this.themeColors?.gridColor,
92
+ },
93
+ },
94
+ };
95
+ }
96
+ generateTitle() {
97
+ return {
98
+ display: true,
99
+ text: `Gas Price Forecaster (GWEI over time from ${this.forecastPayload?.values[0].timestamp ? new Date(this.forecastPayload.values[0].timestamp).toLocaleDateString() : ''})`,
100
+ };
101
+ }
102
+ parseTheme(theme) {
103
+ const dark = theme.palette.mode === 'dark';
104
+ return {
105
+ dataSetColorPrimary: theme.palette.primary.light,
106
+ dataSetColorSecondary: theme.palette.secondary.light,
107
+ gridColor: dark ? theme.palette.grey[800] : theme.palette.grey[300],
108
+ };
109
+ }
110
+ generateDataSetForecastData() {
111
+ return {
112
+ borderDash: [5],
113
+ borderDashOffset: 0.5,
114
+ data: this.forecastPayload.values.map((price) => ({ x: price.timestamp ?? 0, y: price.value })),
115
+ label: 'Forecast Price',
116
+ ...DataPointStyles(this.themeColors?.dataSetColorPrimary),
117
+ ...DataLineStyles(this.themeColors?.dataSetColorPrimary),
118
+ };
119
+ }
120
+ async generateDataSetSourcePayloads() {
121
+ const { sourcePrices } = await SourcePayloads.build('feePerGas.medium');
122
+ return {
123
+ data: sourcePrices,
124
+ label: 'Source Prices',
125
+ ...DataLineStyles(this.themeColors?.dataSetColorSecondary),
126
+ ...DataPointStyles(this.themeColors?.dataSetColorSecondary),
127
+ };
128
+ }
129
+ }
130
+ //# sourceMappingURL=ForecastLineChartConfigBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForecastLineChartConfigBuilder.js","sourceRoot":"","sources":["../../../src/lib/ForecastLineChartConfigBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export const MockSourcePayloads = () => {
2
+ const tenMin = 600000;
3
+ return [
4
+ {
5
+ baseFee: 38.90155387825,
6
+ feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 39.306868093, veryHigh: 44.45384380525 },
7
+ priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },
8
+ schema: 'network.xyo.blockchain.ethereum.gas',
9
+ timestamp: Date.now() - tenMin,
10
+ },
11
+ {
12
+ baseFee: 38.90155387825,
13
+ feePerGas: { high: 47.9945864396, low: 39.006868093, medium: 100, veryHigh: 44.45384380525 },
14
+ priorityFeePerGas: { high: 1.0266666666666666, low: -0.41000000000000003, medium: 0.38, veryHigh: 1.3900000000000001 },
15
+ schema: 'network.xyo.blockchain.ethereum.gas',
16
+ timestamp: Date.now(),
17
+ },
18
+ ];
19
+ };
20
+ //# sourceMappingURL=MockSourcePayloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockSourcePayloads.js","sourceRoot":"","sources":["../../../src/lib/MockSourcePayloads.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,MAAM,GAAG,MAAM,CAAA;IACrB,OAAO;QACL;YACE,OAAO,EAAE,cAAc;YACvB,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE;YACrG,iBAAiB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE;YACtH,MAAM,EAAE,qCAAqC;YAC7C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;SAC/B;QACD;YACE,OAAO,EAAE,cAAc;YACvB,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE;YAC5F,iBAAiB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE;YACtH,MAAM,EAAE,qCAAqC;YAC7C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { MockSourcePayloads } from './MockSourcePayloads';
2
+ export class SourcePayloads {
3
+ sourcePayloads;
4
+ sourcePrices = [];
5
+ constructor(sourcePayloads) {
6
+ this.sourcePayloads = sourcePayloads;
7
+ }
8
+ get payloads() {
9
+ return this.sourcePayloads;
10
+ }
11
+ static async build(jsonPath) {
12
+ const sourcePayloads = await this.fetchSourcePayloads();
13
+ const instance = new this(sourcePayloads);
14
+ const paths = jsonPath.split('.');
15
+ instance.sourcePrices = sourcePayloads.map((payload) => {
16
+ return { x: payload.timestamp, y: instance.jsonPathTraverser(payload, paths) };
17
+ });
18
+ return instance;
19
+ }
20
+ // TODO - fetch from archivist
21
+ static async fetchSourcePayloads() {
22
+ const payloads = await Promise.resolve(MockSourcePayloads());
23
+ return payloads;
24
+ }
25
+ jsonPathTraverser(obj, path) {
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ let result = obj;
28
+ for (const key of path) {
29
+ if (key in result) {
30
+ const foundKey = key;
31
+ result = result[foundKey];
32
+ }
33
+ else {
34
+ result = undefined;
35
+ break;
36
+ }
37
+ }
38
+ return result;
39
+ }
40
+ }
41
+ //# sourceMappingURL=SourcePayloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourcePayloads.js","sourceRoot":"","sources":["../../../src/lib/SourcePayloads.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,MAAM,OAAO,cAAc;IAGN;IAFnB,YAAY,GAAY,EAAE,CAAA;IAE1B,YAAmB,cAAyB;QAAzB,mBAAc,GAAd,cAAc,CAAW;IAAG,CAAC;IAEhD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAgB;QACjC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAA;QACvD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAA;QAEzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,QAAQ,CAAC,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACrD,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAA;QAChF,CAAC,CAAC,CAAA;QACF,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,8BAA8B;IAC9B,MAAM,CAAC,KAAK,CAAC,mBAAmB;QAC9B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;QAC5D,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,iBAAiB,CAAC,GAAY,EAAE,IAAc;QAC5C,8DAA8D;QAC9D,IAAI,MAAM,GAAQ,GAAG,CAAA;QACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,IAAI,GAAG,IAAI,MAAM,EAAE;gBACjB,MAAM,QAAQ,GAAG,GAA0B,CAAA;gBAC3C,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;aAC1B;iBAAM;gBACL,MAAM,GAAG,SAAS,CAAA;gBAClB,MAAK;aACN;SACF;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export * from './ForecastLineChartConfigBuilder';
2
+ export * from './MockSourcePayloads';
3
+ export * from './SourcePayloads';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA;AAChD,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { PayloadRenderPlugin } from '@xyo-network/react-payload-plugin';
2
+ export declare const PriceForecastRenderPlugin: PayloadRenderPlugin;
3
+ //# sourceMappingURL=Plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAIlG,eAAO,MAAM,yBAAyB,EAAE,mBAUvC,CAAA"}
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import 'chartjs-adapter-luxon';
3
+ import { FlexBoxProps } from '@xylabs/react-flexbox';
4
+ import { Payload } from '@xyo-network/payload-model';
5
+ export interface PriceForecastDetailsBoxProps extends FlexBoxProps {
6
+ payload?: Payload;
7
+ }
8
+ export declare const PriceForecastDetailsBox: React.FC<PriceForecastDetailsBoxProps>;
9
+ //# sourceMappingURL=DetailsBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DetailsBox.d.ts","sourceRoot":"","sources":["../../../src/components/DetailsBox.tsx"],"names":[],"mappings":";AAAA,OAAO,uBAAuB,CAAA;AAI9B,OAAO,EAAE,YAAY,EAAW,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAqBpD,MAAM,WAAW,4BAA6B,SAAQ,YAAY;IAChE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAuB1E,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './DetailsBox';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './components';
2
+ export * from './Plugin';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare const DataLineStyles: (color?: string) => {
2
+ backgroundColor: string | undefined;
3
+ borderColor: string | undefined;
4
+ };
5
+ //# sourceMappingURL=DataLineStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataLineStyles.d.ts","sourceRoot":"","sources":["../../../src/lib/DataLineStyles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,WAAY,MAAM;;;CAG3C,CAAA"}
@@ -0,0 +1,8 @@
1
+ export declare const DataPointStyles: (pointHoverBackgroundColor?: string) => {
2
+ pointHitRadius: number;
3
+ pointHoverBackgroundColor: string | undefined;
4
+ pointHoverRadius: number;
5
+ pointRadius: number;
6
+ pointStyle: string;
7
+ };
8
+ //# sourceMappingURL=DataPointStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataPointStyles.d.ts","sourceRoot":"","sources":["../../../src/lib/DataPointStyles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+BAAgC,MAAM;;;;;;CAMhE,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { Theme } from '@mui/material';
2
+ import { ForecastPayload } from '@xyo-network/diviner-forecasting-model';
3
+ import { ChartData, ChartOptions, LegendOptions, ScaleChartOptions } from 'chart.js';
4
+ import { _DeepPartialObject } from 'chart.js/dist/types/utils';
5
+ interface SourcePayloadConfig {
6
+ fetch: boolean;
7
+ sampleSize?: number;
8
+ }
9
+ interface ThemeColors {
10
+ dataSetColorPrimary: string;
11
+ dataSetColorSecondary: string;
12
+ gridColor: string;
13
+ }
14
+ export declare class ForecastLineChartConfigBuilder {
15
+ private payload?;
16
+ data: ChartData<'line'>;
17
+ options: ChartOptions<'line'>;
18
+ themeColors: ThemeColors | undefined;
19
+ constructor(theme: Theme, payload?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
20
+ schema: "network.xyo.diviner.forecasting.forecast";
21
+ values: import("@xyo-network/diviner-forecasting-model").Forecast[];
22
+ }) | undefined);
23
+ get forecastPayload(): import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
24
+ schema: "network.xyo.diviner.forecasting.forecast";
25
+ values: import("@xyo-network/diviner-forecasting-model").Forecast[];
26
+ };
27
+ static create(theme: Theme, payload?: ForecastPayload, sourcePayloadConfig?: SourcePayloadConfig): Promise<ForecastLineChartConfigBuilder>;
28
+ build(includeSources?: boolean): Promise<this>;
29
+ buildData(includeSources?: boolean): Promise<this>;
30
+ buildOptions(): this;
31
+ refreshValues(): void;
32
+ protected generateLegend(): _DeepPartialObject<LegendOptions<'line'>>;
33
+ protected generateScales(): _DeepPartialObject<ScaleChartOptions<'line'>['scales']>;
34
+ protected generateTitle(): {
35
+ display: boolean;
36
+ text: string;
37
+ };
38
+ protected parseTheme(theme: Theme): {
39
+ dataSetColorPrimary: string;
40
+ dataSetColorSecondary: string;
41
+ gridColor: string;
42
+ };
43
+ private generateDataSetForecastData;
44
+ private generateDataSetSourcePayloads;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=ForecastLineChartConfigBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForecastLineChartConfigBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ForecastLineChartConfigBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,SAAS,EAAgB,YAAY,EAAE,aAAa,EAAS,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAM9D,UAAU,mBAAmB;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,WAAW;IACnB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;CAClB;AAWD,qBAAa,8BAA8B;IAOf,OAAO,CAAC,OAAO,CAAC;IAN1C,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAEtB;IACD,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAmB;IAChD,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;gBAExB,KAAK,EAAE,KAAK,EAAU,OAAO,CAAC;;;kBAAiB;IAI3D,IAAI,eAAe;;;MAMlB;WAEY,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAE,mBAAmB;IAUhG,KAAK,CAAC,cAAc,CAAC,EAAE,OAAO;IAM9B,SAAS,CAAC,cAAc,CAAC,EAAE,OAAO;IAsBxC,YAAY;IAUZ,aAAa;IAKb,SAAS,CAAC,cAAc,IAAI,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IASrE,SAAS,CAAC,cAAc,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IAmBnF,SAAS,CAAC,aAAa;;;;IASvB,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK;;;;;IASjC,OAAO,CAAC,2BAA2B;YAWrB,6BAA6B;CAS5C"}
@@ -0,0 +1,18 @@
1
+ export declare const MockSourcePayloads: () => {
2
+ baseFee: number;
3
+ feePerGas: {
4
+ high: number;
5
+ low: number;
6
+ medium: number;
7
+ veryHigh: number;
8
+ };
9
+ priorityFeePerGas: {
10
+ high: number;
11
+ low: number;
12
+ medium: number;
13
+ veryHigh: number;
14
+ };
15
+ schema: string;
16
+ timestamp: number;
17
+ }[];
18
+ //# sourceMappingURL=MockSourcePayloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockSourcePayloads.d.ts","sourceRoot":"","sources":["../../../src/lib/MockSourcePayloads.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;GAkB9B,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { Payload } from '@xyo-network/payload-model';
2
+ import { Point } from 'chart.js';
3
+ export declare class SourcePayloads {
4
+ sourcePayloads: Payload[];
5
+ sourcePrices: Point[];
6
+ constructor(sourcePayloads: Payload[]);
7
+ get payloads(): (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
8
+ schema: string;
9
+ })[];
10
+ static build(jsonPath: string): Promise<SourcePayloads>;
11
+ static fetchSourcePayloads(): Promise<{
12
+ baseFee: number;
13
+ feePerGas: {
14
+ high: number;
15
+ low: number;
16
+ medium: number;
17
+ veryHigh: number;
18
+ };
19
+ priorityFeePerGas: {
20
+ high: number;
21
+ low: number;
22
+ medium: number;
23
+ veryHigh: number;
24
+ };
25
+ schema: string;
26
+ timestamp: number;
27
+ }[]>;
28
+ jsonPathTraverser(obj: Payload, path: string[]): any;
29
+ }
30
+ //# sourceMappingURL=SourcePayloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourcePayloads.d.ts","sourceRoot":"","sources":["../../../src/lib/SourcePayloads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAIhC,qBAAa,cAAc;IAGN,cAAc,EAAE,OAAO,EAAE;IAF5C,YAAY,EAAE,KAAK,EAAE,CAAK;gBAEP,cAAc,EAAE,OAAO,EAAE;IAE5C,IAAI,QAAQ;;SAEX;WAEY,KAAK,CAAC,QAAQ,EAAE,MAAM;WAYtB,mBAAmB;;;;;;;;;;;;;;;;;IAKhC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;CAe/C"}
@@ -0,0 +1,4 @@
1
+ export * from './ForecastLineChartConfigBuilder';
2
+ export * from './MockSourcePayloads';
3
+ export * from './SourcePayloads';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA;AAChD,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA"}
package/package.json ADDED
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "@xyo-network/react-price-forecast-plugin",
3
+ "author": {
4
+ "email": "support@xyo.network",
5
+ "name": "XYO Development Team",
6
+ "url": "https://xyo.network"
7
+ },
8
+ "bugs": {
9
+ "email": "support@xyo.network",
10
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js/issues"
11
+ },
12
+ "dependencies": {
13
+ "@xylabs/react-async-effect": "^2.17.1",
14
+ "@xylabs/react-flexbox": "^2.17.1",
15
+ "@xyo-network/diviner-forecasting-model": "^2.56.0",
16
+ "@xyo-network/payload-model": "^2.56.0",
17
+ "@xyo-network/react-payload-plugin": "^2.49.2",
18
+ "chart.js": "^4.3.0",
19
+ "chartjs-adapter-luxon": "^1.3.1",
20
+ "luxon": "^3.3.0",
21
+ "react-chartjs-2": "^5.2.0"
22
+ },
23
+ "devDependencies": {
24
+ "@storybook/react": "^7.0.7",
25
+ "@xylabs/ts-scripts-yarn3": "^2.17.6",
26
+ "@xylabs/tsconfig-react": "^2.17.5",
27
+ "typescript": "^5.0.4"
28
+ },
29
+ "peerDependencies": {
30
+ "@mui/icons-material": "^5",
31
+ "@mui/material": "^5",
32
+ "@mui/styles": "^5",
33
+ "axios": "^1.3.4",
34
+ "react": "^18",
35
+ "react-dom": "^18",
36
+ "react-router-dom": "^6"
37
+ },
38
+ "description": "Common React library for all XYO projects that use React",
39
+ "browser": "dist/esm/index.js",
40
+ "docs": "dist/docs.json",
41
+ "exports": {
42
+ ".": {
43
+ "node": {
44
+ "import": "./dist/esm/index.js",
45
+ "require": "./dist/cjs/index.js"
46
+ },
47
+ "browser": {
48
+ "import": "./dist/esm/index.js",
49
+ "require": "./dist/cjs/index.js"
50
+ },
51
+ "default": "./dist/esm/index.js"
52
+ },
53
+ "./dist/docs.json": {
54
+ "default": "./dist/docs.json"
55
+ },
56
+ "./package.json": "./package.json"
57
+ },
58
+ "main": "dist/cjs/index.js",
59
+ "module": "dist/esm/index.js",
60
+ "homepage": "https://xyo.network",
61
+ "keywords": [
62
+ "xyo",
63
+ "utility",
64
+ "typescript",
65
+ "react"
66
+ ],
67
+ "license": "LGPL-3.0",
68
+ "publishConfig": {
69
+ "access": "public"
70
+ },
71
+ "repository": {
72
+ "type": "git",
73
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js.git"
74
+ },
75
+ "scripts": {
76
+ "lint-pkg": "npmPkgJsonLint .",
77
+ "license": "yarn license-checker --exclude \"MIT, ISC, Apache-2.0, BSD, BSD-2-Clause, CC-BY-4.0, Unlicense, CC-BY-3.0, CC0-1.0\""
78
+ },
79
+ "sideEffects": false,
80
+ "types": "dist/types/index.d.ts",
81
+ "version": "2.48.8"
82
+ }
package/src/Plugin.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { createPayloadRenderPlugin, PayloadRenderPlugin } from '@xyo-network/react-payload-plugin'
2
+
3
+ import { PriceForecastDetailsBox } from './components'
4
+
5
+ export const PriceForecastRenderPlugin: PayloadRenderPlugin = {
6
+ ...createPayloadRenderPlugin({
7
+ canRender: () => true,
8
+ components: {
9
+ box: {
10
+ detailsBox: PriceForecastDetailsBox,
11
+ },
12
+ },
13
+ name: 'PriceForecast',
14
+ }),
15
+ }