From addb5edc33d97c5eb8e4916c003c6ba916a2de95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tino=20V=C3=A1zquez?= <cvazquez@opennebula.io>
Date: Wed, 30 Aug 2023 14:30:02 +0200
Subject: [PATCH] Revert "F OpenNebula/one#6121: Added new multichart (#2703)"

This reverts commit 87a009f165c55b953cbee961e84debec8ed41c4f.
---
 src/fireedge/package-lock.json                | 1104 ++---------------
 src/fireedge/package.json                     |    9 +-
 .../MultiChart/helpers/scripts/chartDefs.js   |   83 --
 .../helpers/scripts/dataProcessing.js         |  199 ---
 .../MultiChart/helpers/scripts/exportCSV.js   |   47 -
 .../MultiChart/helpers/scripts/exportPDF.js   |  121 --
 .../MultiChart/helpers/scripts/index.js       |   36 -
 .../helpers/subComponents/ChartRenderer.js    |  194 ---
 .../helpers/subComponents/Exporter.js         |  117 --
 .../subComponents/NavigationController.js     |  170 ---
 .../MultiChart/helpers/subComponents/index.js |   20 -
 .../components/Charts/MultiChart/index.js     |  252 ----
 .../src/client/components/Charts/index.js     |    3 +-
 .../components/LoadingState/LoadingDisplay.js |   53 -
 .../client/components/LoadingState/index.js   |   17 -
 .../components/Tables/DataGrid/index.js       |   66 -
 .../src/client/components/Tables/index.js     |    2 -
 .../Tooltip/MultiChart/AccountingTooltip.js   |  121 --
 .../src/client/components/Tooltip/index.js    |   18 -
 src/fireedge/webpack.config.dev.client.js     |   16 -
 src/fireedge/webpack.config.prod.client.js    |   15 +-
 src/fireedge/webpack.config.prod.server.js    |   15 +-
 22 files changed, 103 insertions(+), 2575 deletions(-)
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/chartDefs.js
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/dataProcessing.js
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportCSV.js
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportPDF.js
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/index.js
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/ChartRenderer.js
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/Exporter.js
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/NavigationController.js
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/index.js
 delete mode 100644 src/fireedge/src/client/components/Charts/MultiChart/index.js
 delete mode 100644 src/fireedge/src/client/components/LoadingState/LoadingDisplay.js
 delete mode 100644 src/fireedge/src/client/components/LoadingState/index.js
 delete mode 100644 src/fireedge/src/client/components/Tables/DataGrid/index.js
 delete mode 100644 src/fireedge/src/client/components/Tooltip/MultiChart/AccountingTooltip.js
 delete mode 100644 src/fireedge/src/client/components/Tooltip/index.js

diff --git a/src/fireedge/package-lock.json b/src/fireedge/package-lock.json
index 50e244b46c..8b0af08afd 100644
--- a/src/fireedge/package-lock.json
+++ b/src/fireedge/package-lock.json
@@ -30,7 +30,7 @@
         "@loadable/server": "5.15.1",
         "@loadable/webpack-plugin": "5.15.1",
         "@mui/lab": "5.0.0-alpha.59",
-        "@mui/material": "5.4.1",
+        "@mui/material": "5.1.0",
         "@mui/styles": "5.1.0",
         "@mui/system": "5.4.1",
         "@mui/x-data-grid": "5.0.1",
@@ -67,7 +67,6 @@
         "jsonwebtoken": "8.5.1",
         "jwt-simple": "0.5.6",
         "lockfile": "1.0.4",
-        "lodash.get": "^4.4.2",
         "luxon": "2.1.1",
         "marked": "4.0.10",
         "morgan": "1.10.0",
@@ -78,6 +77,7 @@
         "opennebula-wmks": "2.1.4",
         "papaparse": "5.4.1",
         "path": "0.12.7",
+        "process": "0.11.10",
         "prop-types": "15.7.2",
         "qrcode": "1.4.4",
         "react": "17.0.2",
@@ -128,7 +128,6 @@
         "eslint-config-opennebula": "2.0.2",
         "eslint-import-resolver-alias": "1.1.2",
         "eslint-import-resolver-webpack": "0.13.0",
-        "file-loader": "^5.0.0",
         "opennebula-generatepotfile": "1.0.0",
         "opennebula-potojson": "1.0.0",
         "react-refresh": "0.10.0",
@@ -2319,162 +2318,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@mapbox/node-pre-gyp": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
-      "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "detect-libc": "^2.0.0",
-        "https-proxy-agent": "^5.0.0",
-        "make-dir": "^3.1.0",
-        "node-fetch": "^2.6.7",
-        "nopt": "^5.0.0",
-        "npmlog": "^5.0.1",
-        "rimraf": "^3.0.2",
-        "semver": "^7.3.5",
-        "tar": "^6.1.11"
-      },
-      "bin": {
-        "node-pre-gyp": "bin/node-pre-gyp"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
-      "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "delegates": "^1.0.0",
-        "readable-stream": "^3.6.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/detect-libc": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
-      "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
-      "optional": true,
-      "peer": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
-      "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "aproba": "^1.0.3 || ^2.0.0",
-        "color-support": "^1.1.2",
-        "console-control-strings": "^1.0.0",
-        "has-unicode": "^2.0.1",
-        "object-assign": "^4.1.1",
-        "signal-exit": "^3.0.0",
-        "string-width": "^4.2.3",
-        "strip-ansi": "^6.0.1",
-        "wide-align": "^1.1.2"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "semver": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "optional": true,
-      "peer": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
-      "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "are-we-there-yet": "^2.0.0",
-        "console-control-strings": "^1.1.0",
-        "gauge": "^3.0.0",
-        "set-blocking": "^2.0.0"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/readable-stream": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "string_decoder": "^1.1.1",
-        "util-deprecate": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
-      "version": "7.5.4",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
-      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "optional": true,
-      "peer": true
-    },
     "node_modules/@mui/base": {
       "version": "5.0.0-alpha.59",
       "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.59.tgz",
@@ -2511,6 +2354,39 @@
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
       "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
     },
+    "node_modules/@mui/core": {
+      "version": "5.0.0-alpha.54",
+      "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.54.tgz",
+      "integrity": "sha512-8TxdHqDdSb6wjhsnpE5n7qtkFKDG3PUSlVY0gR3VcdsHXscUY13l3VbMQW1brI4D/R9zx5VYmxIHWaHFgw4RtA==",
+      "deprecated": "You can now upgrade to @mui/base. See https://github.com/mui/material-ui/releases/tag/v5.1.1",
+      "dependencies": {
+        "@babel/runtime": "^7.16.0",
+        "@emotion/is-prop-valid": "^1.1.0",
+        "@mui/utils": "^5.1.0",
+        "@popperjs/core": "^2.4.4",
+        "clsx": "^1.1.1",
+        "prop-types": "^15.7.2",
+        "react-is": "^17.0.2"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.6 || ^17.0.0",
+        "react": "^17.0.2",
+        "react-dom": "^17.0.2"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@mui/core/node_modules/react-is": {
+      "version": "17.0.2",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+      "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
+    },
     "node_modules/@mui/icons-material": {
       "version": "5.11.0",
       "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.0.tgz",
@@ -2674,18 +2550,18 @@
       }
     },
     "node_modules/@mui/material": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.1.tgz",
-      "integrity": "sha512-SxAT43UAjFTBBpJrN+oGrv40xP1uCa5Z49NfHt3m93xYeFzbxKOk0V9IKU7zlUjbsaVQ0i+o24yF5GULZmynlA==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.1.0.tgz",
+      "integrity": "sha512-K76v7zRhpJToInSI8sRcEmTwpVFBZ223VIusjZRKXN8JzX+PuErG7skfa1yUuhc3f4VEqcYYUw0LvI+DJJ05eg==",
       "dependencies": {
-        "@babel/runtime": "^7.17.0",
-        "@mui/base": "5.0.0-alpha.68",
-        "@mui/system": "^5.4.1",
-        "@mui/types": "^7.1.1",
-        "@mui/utils": "^5.4.1",
+        "@babel/runtime": "^7.16.0",
+        "@mui/core": "5.0.0-alpha.54",
+        "@mui/system": "^5.1.0",
+        "@mui/types": "^7.1.0",
+        "@mui/utils": "^5.1.0",
         "@types/react-transition-group": "^4.4.4",
         "clsx": "^1.1.1",
-        "csstype": "^3.0.10",
+        "csstype": "^3.0.9",
         "hoist-non-react-statics": "^3.3.2",
         "prop-types": "^15.7.2",
         "react-is": "^17.0.2",
@@ -2696,14 +2572,14 @@
       },
       "funding": {
         "type": "opencollective",
-        "url": "https://opencollective.com/mui"
+        "url": "https://opencollective.com/material-ui"
       },
       "peerDependencies": {
         "@emotion/react": "^11.5.0",
         "@emotion/styled": "^11.3.0",
         "@types/react": "^16.8.6 || ^17.0.0",
-        "react": "^17.0.0",
-        "react-dom": "^17.0.0"
+        "react": "^17.0.2",
+        "react-dom": "^17.0.2"
       },
       "peerDependenciesMeta": {
         "@emotion/react": {
@@ -2717,37 +2593,6 @@
         }
       }
     },
-    "node_modules/@mui/material/node_modules/@mui/base": {
-      "version": "5.0.0-alpha.68",
-      "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.68.tgz",
-      "integrity": "sha512-q+3gX6EHuM/AyOn8fkoANQxSzIHBeuNsrGgb7SPP0y7NuM+4ZHG/b9882+OfHcilaSqPDWUQoLbphcBpw/m/RA==",
-      "dependencies": {
-        "@babel/runtime": "^7.17.0",
-        "@emotion/is-prop-valid": "^1.1.1",
-        "@mui/utils": "^5.4.1",
-        "@popperjs/core": "^2.4.4",
-        "clsx": "^1.1.1",
-        "prop-types": "^15.7.2",
-        "react-is": "^17.0.2"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/mui"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8.6 || ^17.0.0",
-        "react": "^17.0.0",
-        "react-dom": "^17.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@mui/material/node_modules/react-is": {
       "version": "17.0.2",
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -2891,17 +2736,17 @@
       "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
     },
     "node_modules/@mui/system": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.1.tgz",
-      "integrity": "sha512-07JBYf9iQdxIHZU8cFOLoxBnkQDUPLb7UBhNxo4998yEqpWFJ00WKgEVYBKvPl0X+MRU/20wqFz6yGIuCx4AeA==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.1.0.tgz",
+      "integrity": "sha512-1h+YDnPGfTWZkf7lgeNV+vw6altxXGLclXLdxs9GPzEMNYXX7xveUjmndYpO1p/yx7GNG2gLWWkFZ1TYCeo4+Q==",
       "dependencies": {
-        "@babel/runtime": "^7.17.0",
-        "@mui/private-theming": "^5.4.1",
-        "@mui/styled-engine": "^5.4.1",
-        "@mui/types": "^7.1.1",
-        "@mui/utils": "^5.4.1",
+        "@babel/runtime": "^7.16.0",
+        "@mui/private-theming": "^5.1.0",
+        "@mui/styled-engine": "^5.1.0",
+        "@mui/types": "^7.1.0",
+        "@mui/utils": "^5.1.0",
         "clsx": "^1.1.1",
-        "csstype": "^3.0.10",
+        "csstype": "^3.0.9",
         "prop-types": "^15.7.2"
       },
       "engines": {
@@ -2909,13 +2754,13 @@
       },
       "funding": {
         "type": "opencollective",
-        "url": "https://opencollective.com/mui"
+        "url": "https://opencollective.com/material-ui"
       },
       "peerDependencies": {
         "@emotion/react": "^11.5.0",
         "@emotion/styled": "^11.3.0",
         "@types/react": "^16.8.6 || ^17.0.0",
-        "react": "^17.0.0"
+        "react": "^17.0.2"
       },
       "peerDependenciesMeta": {
         "@emotion/react": {
@@ -3702,13 +3547,6 @@
       "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
       "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
     },
-    "node_modules/abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-      "optional": true,
-      "peer": true
-    },
     "node_modules/accepts": {
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -4743,22 +4581,6 @@
         }
       ]
     },
-    "node_modules/canvas": {
-      "version": "2.11.2",
-      "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz",
-      "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==",
-      "hasInstallScript": true,
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@mapbox/node-pre-gyp": "^1.0.0",
-        "nan": "^2.17.0",
-        "simple-get": "^3.0.3"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -4840,11 +4662,6 @@
       "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz",
       "integrity": "sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g=="
     },
-    "node_modules/classnames": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
-      "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
-    },
     "node_modules/cliui": {
       "version": "7.0.4",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -4915,16 +4732,6 @@
         "simple-swizzle": "^0.2.2"
       }
     },
-    "node_modules/color-support": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
-      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
-      "optional": true,
-      "peer": true,
-      "bin": {
-        "color-support": "bin.js"
-      }
-    },
     "node_modules/colorette": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
@@ -5379,11 +5186,6 @@
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
     },
-    "node_modules/css-unit-converter": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
-      "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA=="
-    },
     "node_modules/css-vendor": {
       "version": "2.0.8",
       "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
@@ -5633,11 +5435,6 @@
       "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
       "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
     },
-    "node_modules/decimal.js-light": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
-      "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
-    },
     "node_modules/decompress-response": {
       "version": "4.2.1",
       "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
@@ -7256,14 +7053,6 @@
       "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
       "dev": true
     },
-    "node_modules/fast-equals": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
-      "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
     "node_modules/fast-glob": {
       "version": "3.2.12",
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
@@ -7605,39 +7394,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/fs-minipass": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
-      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "minipass": "^3.0.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/fs-minipass/node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/fs-minipass/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "optional": true,
-      "peer": true
-    },
     "node_modules/fs-monkey": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
@@ -9649,50 +9405,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/minipass": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
-      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
-      "optional": true,
-      "peer": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/minizlib": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
-      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "minipass": "^3.0.0",
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/minizlib/node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/minizlib/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "optional": true,
-      "peer": true
-    },
     "node_modules/mkdirp": {
       "version": "0.5.6",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -9861,52 +9573,6 @@
         "semver": "bin/semver"
       }
     },
-    "node_modules/node-fetch": {
-      "version": "2.6.13",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz",
-      "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "whatwg-url": "^5.0.0"
-      },
-      "engines": {
-        "node": "4.x || >=6.0.0"
-      },
-      "peerDependencies": {
-        "encoding": "^0.1.0"
-      },
-      "peerDependenciesMeta": {
-        "encoding": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/node-fetch/node_modules/tr46": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/node-fetch/node_modules/webidl-conversions": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/node-fetch/node_modules/whatwg-url": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "tr46": "~0.0.3",
-        "webidl-conversions": "^3.0.0"
-      }
-    },
     "node_modules/node-libs-browser": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
@@ -9983,22 +9649,6 @@
       "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
       "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ=="
     },
-    "node_modules/nopt": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
-      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "abbrev": "1"
-      },
-      "bin": {
-        "nopt": "bin/nopt.js"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -10375,11 +10025,6 @@
       "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
       "dev": true
     },
-    "node_modules/papaparse": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz",
-      "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw=="
-    },
     "node_modules/parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -11388,11 +11033,6 @@
         "react-dom": ">=15.0"
       }
     },
-    "node_modules/react-lifecycles-compat": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
-      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
-    },
     "node_modules/react-minimal-pie-chart": {
       "version": "8.2.0",
       "resolved": "https://registry.npmjs.org/react-minimal-pie-chart/-/react-minimal-pie-chart-8.2.0.tgz",
@@ -11574,87 +11214,6 @@
         "node": ">=8.10.0"
       }
     },
-    "node_modules/recharts": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.7.3.tgz",
-      "integrity": "sha512-cKoO9jUZRQavn06H6Ih2EcG82zUNdQH3OEGWVCmluSDyp3d7fIpDAsbMTd8hE8+T+MD8P76iicv/J4pJspDP7A==",
-      "dependencies": {
-        "classnames": "^2.2.5",
-        "eventemitter3": "^4.0.1",
-        "lodash": "^4.17.19",
-        "react-is": "^16.10.2",
-        "react-resize-detector": "^8.0.4",
-        "react-smooth": "^2.0.2",
-        "recharts-scale": "^0.4.4",
-        "reduce-css-calc": "^2.1.8",
-        "victory-vendor": "^36.6.8"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "peerDependencies": {
-        "prop-types": "^15.6.0",
-        "react": "^16.0.0 || ^17.0.0 || ^18.0.0",
-        "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
-      }
-    },
-    "node_modules/recharts-scale": {
-      "version": "0.4.5",
-      "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
-      "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
-      "dependencies": {
-        "decimal.js-light": "^2.4.1"
-      }
-    },
-    "node_modules/recharts/node_modules/dom-helpers": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
-      "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
-      "dependencies": {
-        "@babel/runtime": "^7.1.2"
-      }
-    },
-    "node_modules/recharts/node_modules/react-resize-detector": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz",
-      "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==",
-      "dependencies": {
-        "lodash": "^4.17.21"
-      },
-      "peerDependencies": {
-        "react": "^16.0.0 || ^17.0.0 || ^18.0.0",
-        "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
-      }
-    },
-    "node_modules/recharts/node_modules/react-smooth": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.3.tgz",
-      "integrity": "sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==",
-      "dependencies": {
-        "fast-equals": "^5.0.0",
-        "react-transition-group": "2.9.0"
-      },
-      "peerDependencies": {
-        "prop-types": "^15.6.0",
-        "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
-        "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
-      }
-    },
-    "node_modules/recharts/node_modules/react-smooth/node_modules/react-transition-group": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
-      "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
-      "dependencies": {
-        "dom-helpers": "^3.4.0",
-        "loose-envify": "^1.4.0",
-        "prop-types": "^15.6.2",
-        "react-lifecycles-compat": "^3.0.4"
-      },
-      "peerDependencies": {
-        "react": ">=15.0.0",
-        "react-dom": ">=15.0.0"
-      }
-    },
     "node_modules/rechoir": {
       "version": "0.7.1",
       "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
@@ -11666,20 +11225,6 @@
         "node": ">= 0.10"
       }
     },
-    "node_modules/reduce-css-calc": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
-      "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
-      "dependencies": {
-        "css-unit-converter": "^1.1.1",
-        "postcss-value-parser": "^3.3.0"
-      }
-    },
-    "node_modules/reduce-css-calc/node_modules/postcss-value-parser": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
-    },
     "node_modules/redux": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.1.tgz",
@@ -12841,24 +12386,6 @@
         "node": ">=0.6"
       }
     },
-    "node_modules/tar": {
-      "version": "6.1.15",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz",
-      "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "chownr": "^2.0.0",
-        "fs-minipass": "^2.0.0",
-        "minipass": "^5.0.0",
-        "minizlib": "^2.1.1",
-        "mkdirp": "^1.0.3",
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/tar-fs": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
@@ -12898,36 +12425,6 @@
         "node": ">= 6"
       }
     },
-    "node_modules/tar/node_modules/chownr": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
-      "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
-      "optional": true,
-      "peer": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/tar/node_modules/mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-      "optional": true,
-      "peer": true,
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/tar/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "optional": true,
-      "peer": true
-    },
     "node_modules/terser": {
       "version": "5.16.1",
       "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz",
@@ -15782,133 +15279,6 @@
         }
       }
     },
-    "@mapbox/node-pre-gyp": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
-      "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
-      "optional": true,
-      "peer": true,
-      "requires": {
-        "detect-libc": "^2.0.0",
-        "https-proxy-agent": "^5.0.0",
-        "make-dir": "^3.1.0",
-        "node-fetch": "^2.6.7",
-        "nopt": "^5.0.0",
-        "npmlog": "^5.0.1",
-        "rimraf": "^3.0.2",
-        "semver": "^7.3.5",
-        "tar": "^6.1.11"
-      },
-      "dependencies": {
-        "are-we-there-yet": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
-          "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "delegates": "^1.0.0",
-            "readable-stream": "^3.6.0"
-          }
-        },
-        "detect-libc": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
-          "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
-          "optional": true,
-          "peer": true
-        },
-        "gauge": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
-          "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "aproba": "^1.0.3 || ^2.0.0",
-            "color-support": "^1.1.2",
-            "console-control-strings": "^1.0.0",
-            "has-unicode": "^2.0.1",
-            "object-assign": "^4.1.1",
-            "signal-exit": "^3.0.0",
-            "string-width": "^4.2.3",
-            "strip-ansi": "^6.0.1",
-            "wide-align": "^1.1.2"
-          }
-        },
-        "lru-cache": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "yallist": "^4.0.0"
-          }
-        },
-        "make-dir": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-          "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "semver": "^6.0.0"
-          },
-          "dependencies": {
-            "semver": {
-              "version": "6.3.1",
-              "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-              "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-              "optional": true,
-              "peer": true
-            }
-          }
-        },
-        "npmlog": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
-          "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "are-we-there-yet": "^2.0.0",
-            "console-control-strings": "^1.1.0",
-            "gauge": "^3.0.0",
-            "set-blocking": "^2.0.0"
-          }
-        },
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        },
-        "semver": {
-          "version": "7.5.4",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
-          "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "optional": true,
-          "peer": true
-        }
-      }
-    },
     "@mui/base": {
       "version": "5.0.0-alpha.59",
       "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.59.tgz",
@@ -15930,6 +15300,27 @@
         }
       }
     },
+    "@mui/core": {
+      "version": "5.0.0-alpha.54",
+      "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.54.tgz",
+      "integrity": "sha512-8TxdHqDdSb6wjhsnpE5n7qtkFKDG3PUSlVY0gR3VcdsHXscUY13l3VbMQW1brI4D/R9zx5VYmxIHWaHFgw4RtA==",
+      "requires": {
+        "@babel/runtime": "^7.16.0",
+        "@emotion/is-prop-valid": "^1.1.0",
+        "@mui/utils": "^5.1.0",
+        "@popperjs/core": "^2.4.4",
+        "clsx": "^1.1.1",
+        "prop-types": "^15.7.2",
+        "react-is": "^17.0.2"
+      },
+      "dependencies": {
+        "react-is": {
+          "version": "17.0.2",
+          "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+          "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
+        }
+      }
+    },
     "@mui/icons-material": {
       "version": "5.11.0",
       "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.0.tgz",
@@ -16015,38 +15406,24 @@
       }
     },
     "@mui/material": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.1.tgz",
-      "integrity": "sha512-SxAT43UAjFTBBpJrN+oGrv40xP1uCa5Z49NfHt3m93xYeFzbxKOk0V9IKU7zlUjbsaVQ0i+o24yF5GULZmynlA==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.1.0.tgz",
+      "integrity": "sha512-K76v7zRhpJToInSI8sRcEmTwpVFBZ223VIusjZRKXN8JzX+PuErG7skfa1yUuhc3f4VEqcYYUw0LvI+DJJ05eg==",
       "requires": {
-        "@babel/runtime": "^7.17.0",
-        "@mui/base": "5.0.0-alpha.68",
-        "@mui/system": "^5.4.1",
-        "@mui/types": "^7.1.1",
-        "@mui/utils": "^5.4.1",
+        "@babel/runtime": "^7.16.0",
+        "@mui/core": "5.0.0-alpha.54",
+        "@mui/system": "^5.1.0",
+        "@mui/types": "^7.1.0",
+        "@mui/utils": "^5.1.0",
         "@types/react-transition-group": "^4.4.4",
         "clsx": "^1.1.1",
-        "csstype": "^3.0.10",
+        "csstype": "^3.0.9",
         "hoist-non-react-statics": "^3.3.2",
         "prop-types": "^15.7.2",
         "react-is": "^17.0.2",
         "react-transition-group": "^4.4.2"
       },
       "dependencies": {
-        "@mui/base": {
-          "version": "5.0.0-alpha.68",
-          "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.68.tgz",
-          "integrity": "sha512-q+3gX6EHuM/AyOn8fkoANQxSzIHBeuNsrGgb7SPP0y7NuM+4ZHG/b9882+OfHcilaSqPDWUQoLbphcBpw/m/RA==",
-          "requires": {
-            "@babel/runtime": "^7.17.0",
-            "@emotion/is-prop-valid": "^1.1.1",
-            "@mui/utils": "^5.4.1",
-            "@popperjs/core": "^2.4.4",
-            "clsx": "^1.1.1",
-            "prop-types": "^15.7.2",
-            "react-is": "^17.0.2"
-          }
-        },
         "react-is": {
           "version": "17.0.2",
           "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -16142,17 +15519,17 @@
       }
     },
     "@mui/system": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.1.tgz",
-      "integrity": "sha512-07JBYf9iQdxIHZU8cFOLoxBnkQDUPLb7UBhNxo4998yEqpWFJ00WKgEVYBKvPl0X+MRU/20wqFz6yGIuCx4AeA==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.1.0.tgz",
+      "integrity": "sha512-1h+YDnPGfTWZkf7lgeNV+vw6altxXGLclXLdxs9GPzEMNYXX7xveUjmndYpO1p/yx7GNG2gLWWkFZ1TYCeo4+Q==",
       "requires": {
-        "@babel/runtime": "^7.17.0",
-        "@mui/private-theming": "^5.4.1",
-        "@mui/styled-engine": "^5.4.1",
-        "@mui/types": "^7.1.1",
-        "@mui/utils": "^5.4.1",
+        "@babel/runtime": "^7.16.0",
+        "@mui/private-theming": "^5.1.0",
+        "@mui/styled-engine": "^5.1.0",
+        "@mui/types": "^7.1.0",
+        "@mui/utils": "^5.1.0",
         "clsx": "^1.1.1",
-        "csstype": "^3.0.10",
+        "csstype": "^3.0.9",
         "prop-types": "^15.7.2"
       }
     },
@@ -16834,13 +16211,6 @@
       "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
       "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
     },
-    "abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-      "optional": true,
-      "peer": true
-    },
     "accepts": {
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -17641,18 +17011,6 @@
       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz",
       "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow=="
     },
-    "canvas": {
-      "version": "2.11.2",
-      "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz",
-      "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==",
-      "optional": true,
-      "peer": true,
-      "requires": {
-        "@mapbox/node-pre-gyp": "^1.0.0",
-        "nan": "^2.17.0",
-        "simple-get": "^3.0.3"
-      }
-    },
     "caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -17716,11 +17074,6 @@
       "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz",
       "integrity": "sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g=="
     },
-    "classnames": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
-      "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
-    },
     "cliui": {
       "version": "7.0.4",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -17782,13 +17135,6 @@
         "simple-swizzle": "^0.2.2"
       }
     },
-    "color-support": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
-      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
-      "optional": true,
-      "peer": true
-    },
     "colorette": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
@@ -18158,11 +17504,6 @@
         }
       }
     },
-    "css-unit-converter": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
-      "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA=="
-    },
     "css-vendor": {
       "version": "2.0.8",
       "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
@@ -18384,11 +17725,6 @@
       "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
       "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
     },
-    "decimal.js-light": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
-      "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
-    },
     "decompress-response": {
       "version": "4.2.1",
       "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
@@ -19632,11 +18968,6 @@
       "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
       "dev": true
     },
-    "fast-equals": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
-      "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ=="
-    },
     "fast-glob": {
       "version": "3.2.12",
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
@@ -19891,35 +19222,6 @@
         "universalify": "^1.0.0"
       }
     },
-    "fs-minipass": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
-      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
-      "optional": true,
-      "peer": true,
-      "requires": {
-        "minipass": "^3.0.0"
-      },
-      "dependencies": {
-        "minipass": {
-          "version": "3.3.6",
-          "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-          "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "yallist": "^4.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "optional": true,
-          "peer": true
-        }
-      }
-    },
     "fs-monkey": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
@@ -21441,43 +20743,6 @@
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
       "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g=="
     },
-    "minipass": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
-      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
-      "optional": true,
-      "peer": true
-    },
-    "minizlib": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
-      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
-      "optional": true,
-      "peer": true,
-      "requires": {
-        "minipass": "^3.0.0",
-        "yallist": "^4.0.0"
-      },
-      "dependencies": {
-        "minipass": {
-          "version": "3.3.6",
-          "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-          "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "yallist": "^4.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "optional": true,
-          "peer": true
-        }
-      }
-    },
     "mkdirp": {
       "version": "0.5.6",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -21621,43 +20886,6 @@
         }
       }
     },
-    "node-fetch": {
-      "version": "2.6.13",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz",
-      "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==",
-      "optional": true,
-      "peer": true,
-      "requires": {
-        "whatwg-url": "^5.0.0"
-      },
-      "dependencies": {
-        "tr46": {
-          "version": "0.0.3",
-          "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-          "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-          "optional": true,
-          "peer": true
-        },
-        "webidl-conversions": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-          "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-          "optional": true,
-          "peer": true
-        },
-        "whatwg-url": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-          "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-          "optional": true,
-          "peer": true,
-          "requires": {
-            "tr46": "~0.0.3",
-            "webidl-conversions": "^3.0.0"
-          }
-        }
-      }
-    },
     "node-libs-browser": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
@@ -21736,16 +20964,6 @@
       "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
       "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ=="
     },
-    "nopt": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
-      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
-      "optional": true,
-      "peer": true,
-      "requires": {
-        "abbrev": "1"
-      }
-    },
     "normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -22015,11 +21233,6 @@
       "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
       "dev": true
     },
-    "papaparse": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz",
-      "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw=="
-    },
     "parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -22779,11 +21992,6 @@
         "prop-types": "^15.6.2"
       }
     },
-    "react-lifecycles-compat": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
-      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
-    },
     "react-minimal-pie-chart": {
       "version": "8.2.0",
       "resolved": "https://registry.npmjs.org/react-minimal-pie-chart/-/react-minimal-pie-chart-8.2.0.tgz",
@@ -22923,70 +22131,6 @@
         "picomatch": "^2.2.1"
       }
     },
-    "recharts": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.7.3.tgz",
-      "integrity": "sha512-cKoO9jUZRQavn06H6Ih2EcG82zUNdQH3OEGWVCmluSDyp3d7fIpDAsbMTd8hE8+T+MD8P76iicv/J4pJspDP7A==",
-      "requires": {
-        "classnames": "^2.2.5",
-        "eventemitter3": "^4.0.1",
-        "lodash": "^4.17.19",
-        "react-is": "^16.10.2",
-        "react-resize-detector": "^8.0.4",
-        "react-smooth": "^2.0.2",
-        "recharts-scale": "^0.4.4",
-        "reduce-css-calc": "^2.1.8",
-        "victory-vendor": "^36.6.8"
-      },
-      "dependencies": {
-        "dom-helpers": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
-          "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
-          "requires": {
-            "@babel/runtime": "^7.1.2"
-          }
-        },
-        "react-resize-detector": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz",
-          "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==",
-          "requires": {
-            "lodash": "^4.17.21"
-          }
-        },
-        "react-smooth": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.3.tgz",
-          "integrity": "sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==",
-          "requires": {
-            "fast-equals": "^5.0.0",
-            "react-transition-group": "2.9.0"
-          },
-          "dependencies": {
-            "react-transition-group": {
-              "version": "2.9.0",
-              "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
-              "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
-              "requires": {
-                "dom-helpers": "^3.4.0",
-                "loose-envify": "^1.4.0",
-                "prop-types": "^15.6.2",
-                "react-lifecycles-compat": "^3.0.4"
-              }
-            }
-          }
-        }
-      }
-    },
-    "recharts-scale": {
-      "version": "0.4.5",
-      "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
-      "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
-      "requires": {
-        "decimal.js-light": "^2.4.1"
-      }
-    },
     "rechoir": {
       "version": "0.7.1",
       "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
@@ -22995,22 +22139,6 @@
         "resolve": "^1.9.0"
       }
     },
-    "reduce-css-calc": {
-      "version": "2.1.8",
-      "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
-      "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
-      "requires": {
-        "css-unit-converter": "^1.1.1",
-        "postcss-value-parser": "^3.3.0"
-      },
-      "dependencies": {
-        "postcss-value-parser": {
-          "version": "3.3.1",
-          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-          "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
-        }
-      }
-    },
     "redux": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.1.tgz",
@@ -23924,44 +23052,6 @@
       "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==",
       "dev": true
     },
-    "tar": {
-      "version": "6.1.15",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz",
-      "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==",
-      "optional": true,
-      "peer": true,
-      "requires": {
-        "chownr": "^2.0.0",
-        "fs-minipass": "^2.0.0",
-        "minipass": "^5.0.0",
-        "minizlib": "^2.1.1",
-        "mkdirp": "^1.0.3",
-        "yallist": "^4.0.0"
-      },
-      "dependencies": {
-        "chownr": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
-          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
-          "optional": true,
-          "peer": true
-        },
-        "mkdirp": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-          "optional": true,
-          "peer": true
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "optional": true,
-          "peer": true
-        }
-      }
-    },
     "tar-fs": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
diff --git a/src/fireedge/package.json b/src/fireedge/package.json
index 33bd30f682..d874e5e1c8 100644
--- a/src/fireedge/package.json
+++ b/src/fireedge/package.json
@@ -36,7 +36,6 @@
     "eslint-config-opennebula": "2.0.2",
     "eslint-import-resolver-alias": "1.1.2",
     "eslint-import-resolver-webpack": "0.13.0",
-    "file-loader": "5.0.0",
     "opennebula-generatepotfile": "1.0.0",
     "opennebula-potojson": "1.0.0",
     "react-refresh": "0.10.0",
@@ -65,10 +64,9 @@
     "@loadable/server": "5.15.1",
     "@loadable/webpack-plugin": "5.15.1",
     "@mui/lab": "5.0.0-alpha.59",
-    "@mui/material": "5.4.1",
+    "@mui/material": "5.1.0",
     "@mui/styles": "5.1.0",
-    "@mui/system": "5.4.1",
-    "@mui/x-data-grid": "5.0.1",
+    "@mui/system": "5.1.0",
     "@reduxjs/toolkit": "1.7.1",
     "atob": "2.1.2",
     "axios": "0.25.0",
@@ -111,8 +109,8 @@
     "notistack": "2.0.3",
     "opennebula-guacamole": "1.0.0",
     "opennebula-wmks": "2.1.4",
-    "papaparse": "5.4.1",
     "path": "0.12.7",
+    "process": "0.11.10",
     "prop-types": "15.7.2",
     "qrcode": "1.4.4",
     "react": "17.0.2",
@@ -129,7 +127,6 @@
     "react-table": "7.7.0",
     "react-transition-group": "4.4.1",
     "react-virtual": "2.7.1",
-    "recharts": "2.7.3",
     "redux": "4.1.1",
     "redux-thunk": "2.3.0",
     "rimraf": "3.0.2",
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/chartDefs.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/chartDefs.js
deleted file mode 100644
index 9946bf0a86..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/chartDefs.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import PropTypes from 'prop-types'
-import { CartesianGrid } from 'recharts'
-import { Component, Fragment } from 'react'
-
-/**
- * Generates a color based on the metric, datasetId, and theme type.
- *
- * @function
- * @param {string} metric - The metric for which the color is generated.
- * @param {object} metricHues - Object containing hue values for different metrics.
- * @param {number} datasetId - The ID of the dataset.
- * @returns {string} The generated color in HSL format.
- */
-export const generateColorByMetric = (metric, metricHues, datasetId) => {
-  const baseHue = metricHues[metric] || 0
-
-  // Using datasetId as seed to generate a unique hue offset
-  const hueOffset = (datasetId * 1327) % 360 // 1327 is just a random prime number
-
-  const baseSaturation = 90
-  const baseLightness = 60
-
-  const hue = (baseHue + hueOffset) % 360
-  const saturation = `${baseSaturation}%`
-  const lightness = `${baseLightness}%`
-
-  return `hsl(${hue}, ${saturation}, ${lightness})`
-}
-
-/**
- * Returns a React component containing SVG definitions and a CartesianGrid for a chart.
- *
- * @function
- * @param {Array<string>} metrics - List of metrics.
- * @param {number} datasetId - The ID of the dataset.
- * @param {object} metricHues - Object containing hue values for different metrics.
- * @returns {Component} A React component with SVG definitions and a CartesianGrid.
- */
-export const GetChartDefs = (metrics, datasetId, metricHues) => (
-  <Fragment key={`defs-${datasetId}`}>
-    <defs>
-      {metrics.map((metric) => {
-        const color = generateColorByMetric(metric, metricHues, datasetId)
-
-        return (
-          <linearGradient
-            key={metric}
-            id={`color${metric}-${datasetId}`}
-            x1="0"
-            y1="0"
-            x2="0"
-            y2="1"
-          >
-            <stop offset="5%" stopColor={color} stopOpacity={0.9} />
-            <stop offset="95%" stopColor={color} stopOpacity={0.2} />
-          </linearGradient>
-        )
-      })}
-    </defs>
-    <CartesianGrid stroke={'#ccc'} strokeDasharray="4 4" strokeOpacity={0.1} />
-  </Fragment>
-)
-
-GetChartDefs.propTypes = {
-  metrics: PropTypes.arrayOf(PropTypes.string).isRequired,
-  metricHues: PropTypes.objectOf(PropTypes.number).isRequired,
-  datasetId: PropTypes.number.isRequired,
-}
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/dataProcessing.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/dataProcessing.js
deleted file mode 100644
index c88fb28ed1..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/dataProcessing.js
+++ /dev/null
@@ -1,199 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-/**
- * Processes data for rendering on a chart.
- *
- * This function restructures the input data. For each unique grouping attribute,
- * it creates an object that sums metric values across all datasets. If a dataset doesn't have
- * a metric value for a particular group, it defaults to 0.
- *
- * @function
- * @param {Array<string>} uniqueGroups - An array of unique groups representing different data points or entities.
- * @param {Array<object>} datasets - An array of datasets.
- * @param {Array<number>} visibleDatasetIDs - An array of dataset ID's to display.
- * @param {string} groupBy - The attribute by which data should be grouped (e.g., 'NAME', 'OID').
- * @returns {Array<object>} An array of processed data items, each structured with properties for every metric from every dataset.
- */
-export const processDataForChart = (
-  uniqueGroups,
-  datasets,
-  visibleDatasetIDs,
-  groupBy
-) => {
-  const visibleDatasets = datasets.filter((dataset) =>
-    visibleDatasetIDs.includes(dataset.id)
-  )
-
-  return uniqueGroups.map((group) => {
-    const item = { [groupBy]: group }
-    visibleDatasets.forEach((dataset) => {
-      const matchingItem = dataset.data.find((d) => d[groupBy] === group)
-      dataset.metrics.forEach((metric) => {
-        item[`${metric.key}-${dataset.id}`] = matchingItem
-          ? matchingItem[metric.key]
-          : 0
-      })
-    })
-
-    return item
-  })
-}
-
-/**
- * Recursively searches for the first array of objects in the given object.
- * Used with all pool-like API requests to find the data array dynamically.
- *
- * @param {object} obj - The object to search within.
- * @returns {Array|null} - The found array or null if not found.
- */
-const findFirstArray = (obj) => {
-  for (const [, value] of Object.entries(obj)) {
-    if (
-      Array.isArray(value) &&
-      value.length > 0 &&
-      typeof value[0] === 'object'
-    ) {
-      return value
-    }
-    if (typeof value === 'object') {
-      const result = findFirstArray(value)
-      if (result) return result
-    }
-  }
-
-  return null
-}
-
-/**
- * Transforms the API response into the desired dataset format.
- *
- * @param {object} apiResponse - The API response to process.
- * @param {object} keyMap - An object that maps the keys in the API response to the desired output keys.
- * @param {Array} metricKeys - An array of keys to aggregate for the metrics.
- * @param {Function} labelingFunction - A function to generate the label for the dataset.
- * @returns {object} - The transformed dataset.
- */
-export const transformApiResponseToDataset = (
-  apiResponse,
-  keyMap,
-  metricKeys,
-  labelingFunction
-) => {
-  const dataArray = findFirstArray(apiResponse)
-
-  const transformedRecords = dataArray.map((record) => {
-    const transformedRecord = {}
-    Object.keys(keyMap).forEach((key) => {
-      transformedRecord[keyMap[key]] = record[key]
-    })
-
-    return transformedRecord
-  })
-
-  const metrics = metricKeys.map((key) => {
-    const total = transformedRecords.reduce(
-      (acc, record) => acc + parseFloat(record[key] || 0),
-      0
-    )
-
-    return { key: key, value: total }
-  })
-
-  let label = 'N/A'
-  if (labelingFunction) {
-    try {
-      label = labelingFunction(transformedRecords[0])
-    } catch (error) {
-      // Handle this sometime
-    }
-
-    return {
-      id: generateDatasetId({
-        data: transformedRecords,
-        metrics: metrics,
-        label: label,
-      }),
-      data: transformedRecords,
-      metrics: metrics,
-      label: label,
-    }
-  }
-}
-
-/**
- * Filters a processed dataset based on a custom filter function and recalculates the label.
- *
- * @param {object} dataset - The processed dataset.
- * @param {Function} filterFn - A custom function that determines which records to include.
- * @param {Function} labelingFunction - A function to generate the label for the subset.
- * @returns {object} - A subset of the dataset with a recalculated label.
- */
-export const filterDataset = (dataset, filterFn, labelingFunction) => {
-  const { data, metrics } = dataset
-
-  const filteredData = data.filter(filterFn)
-
-  const filteredMetrics = metrics.map((metric) => {
-    const total = filteredData.reduce(
-      (acc, record) => acc + parseFloat(record[metric.key] || 0),
-      0
-    )
-
-    return { key: metric.key, value: total }
-  })
-
-  let label = 'N/A'
-  if (labelingFunction && filteredData.length > 0) {
-    try {
-      label = labelingFunction(filteredData[0])
-    } catch (error) {
-      // Handle this sometime
-    }
-
-    return {
-      id: generateDatasetId({
-        data: filteredData,
-        metrics: metrics,
-        label: label,
-      }),
-      data: filteredData,
-      metrics: filteredMetrics,
-      label: label,
-    }
-  }
-}
-
-const generateDatasetId = (dataset) => {
-  const dataLength = dataset.data.length
-  if (dataLength === 0) return generateChecksum('empty')
-
-  const firstRecord = JSON.stringify(dataset.data[0])
-  const middleRecord = JSON.stringify(dataset.data[Math.floor(dataLength / 2)])
-  const lastRecord = JSON.stringify(dataset.data[dataLength - 1])
-
-  const combinedString = firstRecord + middleRecord + lastRecord + dataLength // This will not collide
-
-  return generateChecksum(combinedString)
-}
-
-const generateChecksum = (input) => {
-  let sum = 0
-  for (let i = 0; i < input.length; i++) {
-    sum += input.charCodeAt(i)
-  }
-
-  return sum * 1327 // Random prime number
-}
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportCSV.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportCSV.js
deleted file mode 100644
index b988ea5f69..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportCSV.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import Papa from 'papaparse'
-
-/**
- * Exports the provided data as a CSV file.
- *
- * @function
- * @param {Array<object>} data - An array of datasets containing data to be exported.
- * @returns {Error} - Returns the error to the Exporter component to enqueue it.
- */
-export const exportDataToCSV = (data) => {
-  try {
-    const csvData = data.flatMap((item) => item.data)
-
-    const csv = Papa.unparse(csvData)
-    const blob = new Blob([csv], { type: 'text/csv' })
-    const url = window.URL.createObjectURL(blob)
-    const a = document.createElement('a')
-    a.setAttribute('hidden', '')
-    a.setAttribute('href', url)
-    a.setAttribute(
-      'download',
-      data[0]?.label
-        ? `${data[0].label.replace(/ /g, '')}_report.csv`
-        : 'one_report.csv'
-    )
-    document.body.appendChild(a)
-    a.click()
-    document.body.removeChild(a)
-  } catch (error) {
-    return error
-  }
-}
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportPDF.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportPDF.js
deleted file mode 100644
index a296cd65f6..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportPDF.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import ReactDOMServer from 'react-dom/server'
-import {
-  Table,
-  TableBody,
-  TableCell,
-  TableContainer,
-  TableHead,
-  TableRow,
-  Paper,
-  Box,
-} from '@mui/material'
-
-import logo from 'client/assets/images/logo.png'
-
-/**
- * Generates a printable PDF report from the provided data.
- *
- * @function
- * @param {Array<object>} data - The data to be exported to PDF.
- * @returns {Error} - Returns the error to the Exporter component to enqueue it.
- */
-export const exportDataToPDF = (data) => {
-  try {
-    const rows = data.flatMap((item) => item.data)
-
-    const tableComponent = (
-      <Box
-        style={{
-          padding: '20px',
-          fontFamily: 'Arial, sans-serif',
-          backgroundColor: '#f9f9f9',
-        }}
-      >
-        <img
-          src={logo}
-          alt="Logo"
-          style={{
-            maxWidth: '150px',
-            maxHeight: '50px',
-            marginBottom: '10px',
-            marginLeft: '0px',
-          }}
-        />
-
-        <h2 style={{ textAlign: 'center', margin: '20px 0', color: '#333' }}>
-          Data Report
-        </h2>
-        <TableContainer component={Paper}>
-          <Table>
-            <TableHead>
-              <TableRow>
-                {Object.keys(rows[0]).map((header) => (
-                  <TableCell
-                    key={header}
-                    style={{
-                      backgroundColor: '#f5f5f5',
-                      fontWeight: 'bold',
-                      color: '#555',
-                      border: '1px solid #333',
-                    }}
-                  >
-                    {header}
-                  </TableCell>
-                ))}
-              </TableRow>
-            </TableHead>
-            <TableBody>
-              {rows.map((row, rowIndex) => (
-                <TableRow key={rowIndex}>
-                  {Object.values(row).map((value, valueIndex) => (
-                    <TableCell
-                      key={valueIndex}
-                      style={{ color: '#666', border: '1px solid #333' }}
-                    >
-                      {String(value)}
-                    </TableCell>
-                  ))}
-                </TableRow>
-              ))}
-            </TableBody>
-          </Table>
-        </TableContainer>
-      </Box>
-    )
-
-    const tableHTML = ReactDOMServer.renderToString(tableComponent)
-
-    const iframe = document.createElement('iframe')
-    iframe.style.display = 'none'
-    document.body.appendChild(iframe)
-    iframe.contentDocument.write(
-      '<html><head><title>Accounting Report</title></head><body>'
-    )
-    iframe.contentDocument.write(tableHTML)
-    iframe.contentDocument.write('</body></html>')
-    iframe.contentDocument.close()
-
-    iframe.contentWindow.print()
-
-    setTimeout(() => {
-      document.body.removeChild(iframe)
-    }, 1000)
-  } catch (error) {
-    return error
-  }
-}
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/index.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/index.js
deleted file mode 100644
index 3e9ff1e621..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/index.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import {
-  processDataForChart,
-  transformApiResponseToDataset,
-  filterDataset,
-} from 'client/components/Charts/MultiChart/helpers/scripts/dataProcessing'
-import {
-  generateColorByMetric,
-  GetChartDefs,
-} from 'client/components/Charts/MultiChart/helpers/scripts/chartDefs'
-import { exportDataToPDF } from 'client/components/Charts/MultiChart/helpers/scripts/exportPDF'
-import { exportDataToCSV } from 'client/components/Charts/MultiChart/helpers/scripts/exportCSV'
-
-export {
-  processDataForChart,
-  transformApiResponseToDataset,
-  filterDataset,
-  generateColorByMetric,
-  GetChartDefs,
-  exportDataToPDF,
-  exportDataToCSV,
-}
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/ChartRenderer.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/ChartRenderer.js
deleted file mode 100644
index 6650f47e6f..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/ChartRenderer.js
+++ /dev/null
@@ -1,194 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import React from 'react'
-import PropTypes from 'prop-types'
-import {
-  BarChart,
-  LineChart,
-  AreaChart,
-  XAxis,
-  YAxis,
-  Tooltip,
-  Bar,
-  Legend,
-  Line,
-  Area,
-  ResponsiveContainer,
-} from 'recharts'
-
-import { DataGridTable } from 'client/components/Tables'
-import { CustomTooltip } from 'client/components/Tooltip'
-
-import { generateColorByMetric } from 'client/components/Charts/MultiChart/helpers/scripts'
-
-const CHART_TYPES = {
-  BAR: 'bar',
-  LINE: 'line',
-  AREA: 'area',
-  TABLE: 'table',
-}
-
-const ChartComponents = {
-  [CHART_TYPES.BAR]: BarChart,
-  [CHART_TYPES.LINE]: LineChart,
-  [CHART_TYPES.AREA]: AreaChart,
-  [CHART_TYPES.TABLE]: DataGridTable,
-}
-
-const ChartElements = {
-  [CHART_TYPES.BAR]: Bar,
-  [CHART_TYPES.LINE]: Line,
-  [CHART_TYPES.AREA]: Area,
-}
-
-/**
- * Renders a chart based on the provided type and data.
- *
- * @param {object} props - The properties for the component.
- * @param {'bar' | 'line' | 'area' | 'table'} props.chartType - The type of chart to render.
- * @param {Array} props.datasets - The datasets to be used for the chart.
- * @param {object} props.selectedMetrics - The metrics selected for display.
- * @param {Function} props.customChartDefs - Custom definitions for the chart.
- * @param {Array} props.paginatedData - The paginated data for the chart.
- * @param {Array} props.tableColumns - The columns for the table chart type.
- * @param {Function} props.humanReadableMetric - Function to convert metric keys to human-readable format.
- * @param {string} props.groupBy - The variable to group data under.
- * @param {object} props.metricHues - Object containing hue values for different metrics.
- * @returns {React.Component} The rendered chart component.
- */
-export const ChartRenderer = ({
-  chartType,
-  datasets,
-  selectedMetrics,
-  customChartDefs,
-  paginatedData,
-  tableColumns,
-  humanReadableMetric,
-  groupBy,
-  metricHues,
-}) => {
-  const ChartComponent = ChartComponents[chartType]
-  const ChartElement = ChartElements[chartType]
-
-  return (
-    <ResponsiveContainer height="100%" width="100%">
-      {chartType === CHART_TYPES.TABLE ? (
-        <DataGridTable
-          columns={tableColumns}
-          data={datasets}
-          selectedItems={selectedMetrics}
-        />
-      ) : (
-        <ChartComponent
-          data={paginatedData}
-          barCategoryGap={20}
-          style={!datasets.length ? { pointerEvents: 'none' } : {}}
-          padding={{ top: 0, right: 60, bottom: 0, left: 60 }}
-        >
-          {datasets.map((dataset) =>
-            customChartDefs(
-              dataset.metrics.map((m) => m.key),
-              dataset.id,
-              metricHues
-            )
-          )}
-          <XAxis interval={0} dataKey={groupBy} />
-          <YAxis />
-          <Tooltip
-            content={
-              <CustomTooltip
-                labels={datasets.map((ds) => ds.label)}
-                generateColor={generateColorByMetric}
-                formatMetric={humanReadableMetric}
-                metricHues={metricHues}
-              />
-            }
-            cursor="pointer"
-          />
-          <Legend
-            formatter={(value) => {
-              const [metric, datasetId] = value.split('-')
-              const currentDataset = datasets.find(
-                (ds) => ds.id === parseInt(datasetId, 10)
-              )
-
-              const datasetLabel = currentDataset.label
-
-              const lastSelectedMetric = [...currentDataset.metrics]
-                .reverse()
-                .find((m) => selectedMetrics[m.key])
-
-              if (lastSelectedMetric && metric === lastSelectedMetric.key) {
-                return `${humanReadableMetric(metric)} (${datasetLabel})`
-              }
-
-              return humanReadableMetric(metric)
-            }}
-            wrapperStyle={{
-              wordWrap: 'break-word',
-              maxWidth: '100%',
-            }}
-          />
-
-          {datasets.map((dataset) =>
-            dataset.metrics.map((metric) =>
-              selectedMetrics[metric.key] ? (
-                <ChartElement
-                  key={`${metric.key}-${dataset.id}`}
-                  type="monotone"
-                  dataKey={`${metric.key}-${dataset.id}`}
-                  fill={`url(#color${metric.key}-${dataset.id})`}
-                  name={metric.name}
-                  animationDuration={500}
-                  {...(chartType === 'area' && {
-                    fillOpacity: 0.5,
-                    stroke: 'transparent',
-                  })}
-                  {...(chartType === 'line' && {
-                    strokeWidth: 3,
-                    activeDot: {
-                      r: 8,
-                      fill: `url(#color${metric.key}-${dataset.id})`,
-                      stroke: 'white',
-                      strokeWidth: 2,
-                    },
-                    stroke: `url(#color${metric.key}-${dataset.id})`,
-                  })}
-                />
-              ) : null
-            )
-          )}
-        </ChartComponent>
-      )}
-    </ResponsiveContainer>
-  )
-}
-
-ChartRenderer.propTypes = {
-  chartType: PropTypes.oneOf(['bar', 'line', 'area', 'table']).isRequired,
-  datasets: PropTypes.arrayOf(PropTypes.object).isRequired,
-  selectedMetrics: PropTypes.object.isRequired,
-  customChartDefs: PropTypes.func.isRequired,
-  paginatedData: PropTypes.arrayOf(PropTypes.object).isRequired,
-  tableColumns: PropTypes.arrayOf(PropTypes.object),
-  humanReadableMetric: PropTypes.func.isRequired,
-  groupBy: PropTypes.string.isRequired,
-  metricHues: PropTypes.objectOf(PropTypes.number).isRequired,
-}
-
-ChartRenderer.defaultProps = {
-  groupBy: 'NAME',
-}
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/Exporter.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/Exporter.js
deleted file mode 100644
index 865413a754..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/Exporter.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import PropTypes from 'prop-types'
-import React, { useState } from 'react'
-import { Button, Menu, MenuItem, Box } from '@mui/material'
-import { Download } from 'iconoir-react'
-import {
-  exportDataToCSV,
-  exportDataToPDF,
-} from 'client/components/Charts/MultiChart/helpers/scripts'
-import { useGeneralApi } from 'client/features/General'
-
-/**
- * Renders a button that provides export options for data.
- *
- * @param {object} props - The properties for the component.
- * @param {Array} props.data - The data to be exported.
- * @param {Array} props.exportOptions - The available export options.
- * @param {object} props.exportHandlers - The handlers for each export type.
- * @returns {React.Component} The rendered export button component.
- */
-export const ExportButton = ({ data, exportOptions, exportHandlers }) => {
-  const [anchorEl, setAnchorEl] = useState(null)
-  const { enqueueError } = useGeneralApi()
-
-  const handleMenuOpen = (event) => {
-    setAnchorEl(event.currentTarget)
-  }
-
-  const handleMenuClose = () => {
-    setAnchorEl(null)
-  }
-
-  const handleExport = (type) => {
-    if (exportHandlers[type]) {
-      const error = exportHandlers[type](data)
-      if (error) {
-        enqueueError(
-          'Error exporting data to ' + type.toUpperCase() + ': ' + error.message
-        )
-      }
-    }
-    handleMenuClose()
-  }
-
-  const noData =
-    !data ||
-    data.length === 0 ||
-    data.every((item) => !item.data || item.data.length === 0)
-
-  return (
-    <Box>
-      <Button
-        endIcon={<Download />}
-        onClick={handleMenuOpen}
-        disabled={noData}
-        variant="outlined"
-        sx={{
-          padding: '3px 17px',
-          transition: 'all 0.1s ease',
-          '&:hover': {
-            borderColor: '#2a2a2a',
-          },
-        }}
-      >
-        Export
-      </Button>
-      <Menu
-        anchorEl={anchorEl}
-        keepMounted
-        open={Boolean(anchorEl)}
-        onClose={handleMenuClose}
-      >
-        {exportOptions.map((option) => (
-          <MenuItem key={option.type} onClick={() => handleExport(option.type)}>
-            {option.label}
-          </MenuItem>
-        ))}
-      </Menu>
-    </Box>
-  )
-}
-
-ExportButton.propTypes = {
-  data: PropTypes.arrayOf(PropTypes.object).isRequired,
-  exportOptions: PropTypes.arrayOf(
-    PropTypes.shape({
-      type: PropTypes.string.isRequired,
-      label: PropTypes.string.isRequired,
-    })
-  ),
-  exportHandlers: PropTypes.objectOf(PropTypes.func),
-}
-
-ExportButton.defaultProps = {
-  exportOptions: [
-    { type: 'csv', label: 'Export as CSV' },
-    { type: 'pdf', label: 'Export as PDF' },
-  ],
-  exportHandlers: {
-    csv: (data) => exportDataToCSV(data),
-    pdf: (data) => exportDataToPDF(data),
-  },
-}
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/NavigationController.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/NavigationController.js
deleted file mode 100644
index e10268a67c..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/NavigationController.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import React from 'react'
-import PropTypes from 'prop-types'
-import { NavArrowRight, NavArrowLeft, Filter } from 'iconoir-react'
-import {
-  Box,
-  IconButton,
-  FormControl,
-  Select,
-  MenuItem,
-  Checkbox,
-  ListItemText,
-} from '@mui/material'
-
-/**
- * NavigationController component for navigating through items and filtering them.
- *
- * @param {object} props - Props
- * @param {Function} props.onPrev - Callback function when the previous button is clicked.
- * @param {Function} props.onNext - Callback function when the next button is clicked.
- * @param {boolean} props.isPrevDisabled - Determines if the previous button is disabled.
- * @param {boolean} props.isNextDisabled - Determines if the next button is disabled.
- * @param {Array} props.selectedItems - List of currently selected items.
- * @param {Array} props.items - List of all available items.
- * @param {Function} props.setSelectedItems - Callback function to set the selected items.
- * @param {boolean} props.isFilterDisabled - Determines if the filter is disabled.
- * @param {boolean} props.isPaginationDisabled - Determines if the pagination is disabled.
- * @param {object} props.styles - Custom styles for the component.
- * @returns {React.Component} NavigationController component.
- */
-export const NavigationController = ({
-  onPrev,
-  onNext,
-  isPrevDisabled,
-  isNextDisabled,
-  selectedItems,
-  items,
-  setSelectedItems,
-  isFilterDisabled,
-  isPaginationDisabled,
-  styles,
-}) => (
-  <Box sx={{ ...styles.container, display: 'inline-flex' }}>
-    <BoxedIcon disabled={isFilterDisabled}>
-      <FormControl size="small" sx={styles.formControl}>
-        <Select
-          multiple
-          value={selectedItems}
-          onChange={(event) => setSelectedItems(event.target.value)}
-          IconComponent={Filter}
-          sx={styles.select}
-          renderValue={(selected) => ''}
-          disabled={isFilterDisabled}
-        >
-          {items.map((item) => (
-            <MenuItem key={item} value={item}>
-              <Checkbox checked={selectedItems.includes(item)} />
-              <ListItemText primary={item} />
-            </MenuItem>
-          ))}
-        </Select>
-      </FormControl>
-    </BoxedIcon>
-
-    <Box sx={styles.divider} />
-
-    <BoxedIcon
-      onClick={onPrev}
-      disabled={isPrevDisabled || isPaginationDisabled}
-    >
-      <NavArrowLeft />
-    </BoxedIcon>
-
-    <Box sx={styles.divider} />
-
-    <BoxedIcon
-      onClick={onNext}
-      disabled={isNextDisabled || isPaginationDisabled}
-    >
-      <NavArrowRight />
-    </BoxedIcon>
-  </Box>
-)
-
-const BoxedIcon = ({ children, ...props }) => (
-  <Box
-    component={IconButton}
-    sx={{
-      width: 40,
-      height: 40,
-      display: 'flex',
-      alignItems: 'center',
-      border: 'none',
-      padding: 0,
-      justifyContent: 'center',
-      '&.Mui-focusVisible': {
-        outline: 'none',
-        boxShadow: 'none',
-      },
-      '&:hover': {
-        backgroundColor: 'transparent',
-      },
-    }}
-    {...props}
-  >
-    {children}
-  </Box>
-)
-
-NavigationController.propTypes = {
-  onPrev: PropTypes.func.isRequired,
-  onNext: PropTypes.func.isRequired,
-  isPrevDisabled: PropTypes.bool.isRequired,
-  isNextDisabled: PropTypes.bool.isRequired,
-  selectedItems: PropTypes.array.isRequired,
-  items: PropTypes.array,
-  setSelectedItems: PropTypes.func.isRequired,
-  isFilterDisabled: PropTypes.bool.isRequired,
-  isPaginationDisabled: PropTypes.bool.isRequired,
-  styles: PropTypes.object,
-}
-
-BoxedIcon.propTypes = {
-  children: PropTypes.node.isRequired,
-}
-
-NavigationController.defaultProps = {
-  styles: {
-    container: {
-      display: 'flex',
-      alignItems: 'center',
-      border: 'none',
-      borderBottom: 'none',
-      borderRadius: '2px 2px 0 0',
-    },
-    formControl: {
-      minWidth: 40,
-      '& .MuiOutlinedInput-notchedOutline': {
-        border: 'none',
-      },
-      '&.Mui-focused .MuiOutlinedInput-notchedOutline': {
-        border: 'none',
-      },
-    },
-    select: {
-      borderRadius: 0,
-      paddingRight: 0,
-      border: 'none',
-    },
-    divider: {
-      width: 1,
-      height: '100%',
-    },
-  },
-  items: [],
-}
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/index.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/index.js
deleted file mode 100644
index c65b4df6b6..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import { ChartRenderer } from 'client/components/Charts/MultiChart/helpers/subComponents/ChartRenderer'
-import { NavigationController } from 'client/components/Charts/MultiChart/helpers/subComponents/NavigationController'
-import { ExportButton } from 'client/components/Charts/MultiChart/helpers/subComponents/Exporter'
-
-export { ChartRenderer, NavigationController, ExportButton }
diff --git a/src/fireedge/src/client/components/Charts/MultiChart/index.js b/src/fireedge/src/client/components/Charts/MultiChart/index.js
deleted file mode 100644
index d273f55748..0000000000
--- a/src/fireedge/src/client/components/Charts/MultiChart/index.js
+++ /dev/null
@@ -1,252 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import PropTypes from 'prop-types'
-import React, { useState, useMemo, useEffect } from 'react'
-import { Box } from '@mui/material'
-
-import {
-  ChartRenderer,
-  NavigationController,
-  ExportButton,
-} from 'client/components/Charts/MultiChart/helpers/subComponents'
-import { LoadingDisplay } from 'client/components/LoadingState'
-import {
-  processDataForChart,
-  GetChartDefs,
-} from 'client/components/Charts/MultiChart/helpers/scripts'
-
-/**
- * @param {object} props - Component properties.
- * @param {Array} props.datasets - Array of datasets to visualize.
- * @param {Array} props.visibleDatasets - Array of visible dataset IDs (subset of datasets).
- * @param {Array} props.xAxisLabels - Array of unique names for the X-axis.
- * @param {string} props.chartType - Type of chart to render ('bar', 'line', etc.).
- * @param {object} props.selectedMetrics - Object containing selected metrics (e.g., "cpuHours").
- * @param {string} [props.error] - Error message, if any.
- * @param {string} props.groupBy - Key to group X values by.
- * @param {number} props.ItemsPerPage - Number of items to display per page.
- * @param {Array} props.tableColumns - Array of table column configurations.
- * @param {Function} props.customChartDefs - Function to generate custom chart definitions.
- * @param {object} [props.metricNames={}] - Object mapping metric keys to human-readable names.
- * @param {object} props.metricHues - Object containing hue values for different metrics.
- * @returns {React.Component} MultiChart component.
- */
-const MultiChart = ({
-  datasets,
-  visibleDatasets,
-  xAxisLabels: passedxAxisLabels,
-  chartType,
-  selectedMetrics: passedSelectedMetrics,
-  error,
-  ItemsPerPage,
-  tableColumns,
-  customChartDefs,
-  metricNames,
-  groupBy,
-  metricHues: passedMetricHues,
-}) => {
-  const [currentPage, setCurrentPage] = useState(0)
-  const [selectedXValues, setSelectedXValues] = useState([])
-  const [isFilterDisabled, setIsFilterDisabled] = useState(true)
-  const [isPaginationDisabled, setIsPaginationDisabled] = useState(true)
-
-  const xAxisLabels = useMemo(() => {
-    if (passedxAxisLabels && passedxAxisLabels.length > 0) {
-      return passedxAxisLabels
-    }
-
-    return [
-      ...new Set(
-        datasets.flatMap((dataset) => dataset.data.map((item) => item[groupBy]))
-      ),
-    ]
-  }, [datasets, groupBy, passedxAxisLabels])
-
-  const selectedMetrics = useMemo(() => {
-    if (
-      passedSelectedMetrics &&
-      Object.keys(passedSelectedMetrics).length > 0
-    ) {
-      return passedSelectedMetrics
-    }
-
-    return datasets.reduce((acc, dataset) => {
-      dataset.metrics.forEach((metric) => {
-        acc[metric.key] = true
-      })
-
-      return acc
-    }, {})
-  }, [datasets, passedSelectedMetrics])
-
-  const metricHues = useMemo(() => {
-    if (passedMetricHues && Object.keys(passedMetricHues).length > 0) {
-      return passedMetricHues
-    }
-
-    const allMetrics = [
-      ...new Set(
-        datasets.flatMap((dataset) =>
-          dataset.metrics.map((metric) => metric.key)
-        )
-      ),
-    ]
-
-    const hueStep = 360 / allMetrics.length
-
-    return allMetrics.reduce((acc, metric, index) => {
-      acc[metric] = index * hueStep
-
-      return acc
-    }, {})
-  }, [datasets, passedMetricHues])
-
-  const visibleDatasetIDs = useMemo(() => {
-    if (visibleDatasets && visibleDatasets.length > 0) {
-      return visibleDatasets
-    }
-
-    return datasets.map((dataset) => dataset.id)
-  }, [datasets, visibleDatasets])
-
-  const noDataAvailable = visibleDatasetIDs.length === 0
-
-  const mergedDataForXAxis = processDataForChart(
-    xAxisLabels,
-    datasets,
-    visibleDatasetIDs,
-    groupBy
-  )
-
-  const humanReadableMetric = (key) => metricNames[key] || key
-
-  useEffect(() => {
-    setSelectedXValues(xAxisLabels)
-  }, [xAxisLabels])
-
-  useEffect(() => {
-    setIsFilterDisabled(visibleDatasetIDs.length === 0)
-  }, [visibleDatasetIDs])
-
-  useEffect(() => {
-    setIsPaginationDisabled(
-      selectedXValues.length <= ItemsPerPage || isFilterDisabled
-    )
-  }, [selectedXValues, isFilterDisabled])
-
-  const paginatedData = useMemo(() => {
-    const filteredData = mergedDataForXAxis.filter((item) =>
-      selectedXValues.includes(item[groupBy])
-    )
-    const start = currentPage * ItemsPerPage
-    const end = start + ItemsPerPage
-
-    return filteredData.slice(start, end)
-  }, [mergedDataForXAxis, currentPage, selectedXValues])
-
-  return (
-    <Box width="100%" height="100%" display="flex" flexDirection="column">
-      <Box display="flex" justifyContent="space-between">
-        {chartType !== 'table' && (
-          <Box flex={1}>
-            <NavigationController
-              onPrev={() => setCurrentPage((prev) => Math.max(prev - 1, 0))}
-              onNext={() =>
-                setCurrentPage((prev) =>
-                  Math.min(
-                    prev + 1,
-                    Math.ceil(selectedXValues.length / ItemsPerPage) - 1
-                  )
-                )
-              }
-              isPrevDisabled={currentPage === 0}
-              isNextDisabled={
-                currentPage ===
-                Math.ceil(selectedXValues.length / ItemsPerPage) - 1
-              }
-              selectedItems={selectedXValues}
-              items={xAxisLabels}
-              setSelectedItems={setSelectedXValues}
-              isFilterDisabled={isFilterDisabled}
-              isPaginationDisabled={isPaginationDisabled}
-            />
-          </Box>
-        )}
-        <Box flex={1} display="flex" justifyContent="flex-end">
-          <ExportButton data={datasets} />
-        </Box>
-      </Box>
-
-      <Box flex={1} mt={-1}>
-        {error || noDataAvailable ? (
-          <LoadingDisplay error={error} />
-        ) : (
-          <ChartRenderer
-            chartType={chartType}
-            datasets={datasets}
-            selectedMetrics={selectedMetrics}
-            customChartDefs={customChartDefs}
-            tableColumns={tableColumns}
-            paginatedData={paginatedData}
-            humanReadableMetric={humanReadableMetric}
-            groupBy={groupBy}
-            metricHues={metricHues}
-          />
-        )}
-      </Box>
-    </Box>
-  )
-}
-
-MultiChart.propTypes = {
-  datasets: PropTypes.arrayOf(
-    PropTypes.shape({
-      id: PropTypes.number.isRequired,
-      data: PropTypes.arrayOf(PropTypes.object.isRequired).isRequired,
-      metrics: PropTypes.arrayOf(
-        PropTypes.shape({
-          key: PropTypes.string.isRequired,
-          value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])
-            .isRequired,
-        })
-      ).isRequired,
-      label: PropTypes.string.isRequired,
-    })
-  ).isRequired,
-  visibleDatasets: PropTypes.arrayOf(PropTypes.number).isRequired,
-  xAxisLabels: PropTypes.arrayOf(PropTypes.string),
-  chartType: PropTypes.oneOf(['bar', 'line', 'area', 'table']).isRequired,
-  selectedMetrics: PropTypes.object,
-  error: PropTypes.string,
-  groupBy: PropTypes.string,
-  ItemsPerPage: PropTypes.number.isRequired,
-  tableColumns: PropTypes.arrayOf(PropTypes.object),
-  customChartDefs: PropTypes.func.isRequired,
-  metricNames: PropTypes.object,
-  metricHues: PropTypes.objectOf(PropTypes.number).isRequired,
-}
-
-MultiChart.defaultProps = {
-  visibleDatasets: [],
-  chartType: 'bar',
-  ItemsPerPage: 10,
-  groupBy: 'ID',
-  customChartDefs: GetChartDefs,
-  metricNames: {},
-  metricHues: {},
-}
-
-export default MultiChart
diff --git a/src/fireedge/src/client/components/Charts/index.js b/src/fireedge/src/client/components/Charts/index.js
index 1cc4673200..1a9a4f56fe 100644
--- a/src/fireedge/src/client/components/Charts/index.js
+++ b/src/fireedge/src/client/components/Charts/index.js
@@ -16,6 +16,5 @@
 import CircleChart from 'client/components/Charts/CircleChart'
 import SingleBar from 'client/components/Charts/SingleBar'
 import Chartist from 'client/components/Charts/Chartist'
-import MultiChart from 'client/components/Charts/MultiChart/index'
 
-export { CircleChart, SingleBar, Chartist, MultiChart }
+export { CircleChart, SingleBar, Chartist }
diff --git a/src/fireedge/src/client/components/LoadingState/LoadingDisplay.js b/src/fireedge/src/client/components/LoadingState/LoadingDisplay.js
deleted file mode 100644
index 9f4a013dd2..0000000000
--- a/src/fireedge/src/client/components/LoadingState/LoadingDisplay.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import PropTypes from 'prop-types'
-import React from 'react'
-import { Box, Typography } from '@mui/material'
-import { InfoEmpty, CloudError } from 'iconoir-react'
-
-/**
- * Renders a display message based on the presence of an error.
- *
- * @param {object} props - The properties for the component.
- * @param {boolean} props.error - Indicates if there was an error fetching data.
- * @returns {React.Component} The rendered loading display component.
- */
-export const LoadingDisplay = ({ error }) => {
-  const displayMessage = error ? 'Error fetching data' : 'No data available'
-  const DisplayIcon = error ? CloudError : InfoEmpty
-
-  return (
-    <Box
-      display="flex"
-      flexDirection="column"
-      justifyContent="center"
-      alignItems="center"
-      height="500px"
-      borderRadius={4}
-      boxShadow={2}
-      padding={3}
-    >
-      <DisplayIcon style={{ fontSize: 40 }} />
-      <Typography variant="h6" color="textSecondary" marginTop={2}>
-        {displayMessage}
-      </Typography>
-    </Box>
-  )
-}
-
-LoadingDisplay.propTypes = {
-  error: PropTypes.bool,
-}
diff --git a/src/fireedge/src/client/components/LoadingState/index.js b/src/fireedge/src/client/components/LoadingState/index.js
deleted file mode 100644
index f05179416b..0000000000
--- a/src/fireedge/src/client/components/LoadingState/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-
-export { LoadingDisplay } from './LoadingDisplay'
diff --git a/src/fireedge/src/client/components/Tables/DataGrid/index.js b/src/fireedge/src/client/components/Tables/DataGrid/index.js
deleted file mode 100644
index ef12d90178..0000000000
--- a/src/fireedge/src/client/components/Tables/DataGrid/index.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import React from 'react'
-import PropTypes from 'prop-types'
-import { DataGrid } from '@mui/x-data-grid'
-import { Box } from '@mui/material'
-
-/**
- * Renders a data grid table using the provided data and columns.
- *
- * @param {object} props - The properties for the component.
- * @param {Array} props.data - The data to be displayed in the table.
- * @param {Array} props.columns - The columns configuration for the table.
- * @returns {React.Component} The rendered data grid table component.
- */
-const DataGridTable = ({ data, columns }) => {
-  const flattenedData = data.flatMap((dataset) => dataset.data)
-
-  return (
-    <Box
-      style={{
-        height: '100%',
-        width: '100%',
-        overflow: 'hidden',
-        paddingBottom: '54px',
-        paddingTop: '18px',
-      }}
-    >
-      <DataGrid
-        rows={flattenedData.map((row, index) => ({ ...row, id: index }))}
-        columns={columns}
-        rowsPerPageOptions={[25, 50, 100]}
-      />
-    </Box>
-  )
-}
-
-DataGridTable.propTypes = {
-  data: PropTypes.arrayOf(
-    PropTypes.shape({
-      data: PropTypes.arrayOf(PropTypes.object).isRequired,
-    })
-  ).isRequired,
-  columns: PropTypes.arrayOf(
-    PropTypes.shape({
-      field: PropTypes.string.isRequired,
-      headerName: PropTypes.string.isRequired,
-      width: PropTypes.number,
-    })
-  ).isRequired,
-}
-
-export default DataGridTable
diff --git a/src/fireedge/src/client/components/Tables/index.js b/src/fireedge/src/client/components/Tables/index.js
index d74572c987..f5be98fbb6 100644
--- a/src/fireedge/src/client/components/Tables/index.js
+++ b/src/fireedge/src/client/components/Tables/index.js
@@ -17,7 +17,6 @@ import AllImagesTable from 'client/components/Tables/AllImages'
 import BackupsTable from 'client/components/Tables/Backups'
 import ClustersTable from 'client/components/Tables/Clusters'
 import DatastoresTable from 'client/components/Tables/Datastores'
-import DataGridTable from 'client/components/Tables/DataGrid'
 import DockerHubTagsTable from 'client/components/Tables/DockerHubTags'
 import EnhancedTable from 'client/components/Tables/Enhanced'
 import GroupsTable from 'client/components/Tables/Groups'
@@ -53,7 +52,6 @@ export {
   ClustersTable,
   DatastoresTable,
   DockerHubTagsTable,
-  DataGridTable,
   GroupsTable,
   HostsTable,
   ImagesTable,
diff --git a/src/fireedge/src/client/components/Tooltip/MultiChart/AccountingTooltip.js b/src/fireedge/src/client/components/Tooltip/MultiChart/AccountingTooltip.js
deleted file mode 100644
index 036fce90cf..0000000000
--- a/src/fireedge/src/client/components/Tooltip/MultiChart/AccountingTooltip.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-
-import PropTypes from 'prop-types'
-import React, { useMemo } from 'react'
-import { Paper, Typography, Box } from '@mui/material'
-
-export const CustomTooltip = React.memo(
-  ({ active, payload, labels, generateColor, formatMetric, metricHues }) => {
-    if (active && payload && payload.length) {
-      const groupedMetrics = useMemo(
-        () =>
-          payload.reduce((acc, entry) => {
-            const [metric, datasetId] = entry.name.split('-')
-            if (!acc[datasetId]) {
-              acc[datasetId] = []
-            }
-            acc[datasetId].push({ metric, value: entry.value })
-
-            return acc
-          }, {}),
-        [payload]
-      )
-
-      const keys = Object.keys(groupedMetrics)
-      const itemWidth = keys.length === 1 ? '100%' : '50%'
-
-      return (
-        <Paper
-          elevation={3}
-          style={{
-            padding: '2px',
-            display: 'flex',
-            flexWrap: 'wrap',
-            maxWidth: '370px',
-          }}
-        >
-          {keys.map((datasetId, index) => (
-            <Box
-              key={`dataset-${datasetId}`}
-              style={{
-                padding: '0 1px',
-                width: itemWidth,
-                boxSizing: 'border-box',
-                maxWidth: '175px',
-                flex: 'none',
-              }}
-            >
-              <Typography
-                variant="body2"
-                style={{ fontWeight: 'bold', margin: '0 0 2px 0' }}
-              >
-                {labels[index]}
-              </Typography>
-              {/* eslint-disable-next-line no-shadow */}
-              {groupedMetrics[datasetId].map((entry, index) => {
-                const metricColor = generateColor(
-                  entry.metric,
-                  metricHues,
-                  parseInt(datasetId, 10)
-                )
-
-                const formattedValue =
-                  typeof entry.value === 'number'
-                    ? entry.value.toFixed(2)
-                    : String(entry.value).slice(0, 12)
-
-                return (
-                  <Typography
-                    key={`metric-${index}`}
-                    variant="body2"
-                    style={{ margin: '0.5px 0' }}
-                  >
-                    <span style={{ color: metricColor }}>
-                      {formatMetric(entry.metric)}:
-                    </span>
-                    {formattedValue}
-                  </Typography>
-                )
-              })}
-            </Box>
-          ))}
-        </Paper>
-      )
-    }
-
-    return null
-  }
-)
-
-CustomTooltip.displayName = 'CustomTooltip'
-
-CustomTooltip.propTypes = {
-  active: PropTypes.bool,
-  payload: PropTypes.arrayOf(PropTypes.object),
-  labels: PropTypes.arrayOf(PropTypes.string),
-  generateColor: PropTypes.func,
-  formatMetric: PropTypes.func,
-  metricHues: PropTypes.objectOf(PropTypes.number).isRequired,
-}
-
-CustomTooltip.defaultProps = {
-  active: false,
-  payload: [],
-  labels: [],
-  generateColor: (metric, hues, id) => hues[metric] || '#000',
-  formatMetric: (input) => `${input}`,
-}
diff --git a/src/fireedge/src/client/components/Tooltip/index.js b/src/fireedge/src/client/components/Tooltip/index.js
deleted file mode 100644
index 3b8e35a243..0000000000
--- a/src/fireedge/src/client/components/Tooltip/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/* ------------------------------------------------------------------------- *
- * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems               *
- *                                                                           *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may   *
- * not use this file except in compliance with the License. You may obtain   *
- * a copy of the License at                                                  *
- *                                                                           *
- * http://www.apache.org/licenses/LICENSE-2.0                                *
- *                                                                           *
- * Unless required by applicable law or agreed to in writing, software       *
- * distributed under the License is distributed on an "AS IS" BASIS,         *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *
- * See the License for the specific language governing permissions and       *
- * limitations under the License.                                            *
- * ------------------------------------------------------------------------- */
-import { CustomTooltip } from './MultiChart/AccountingTooltip'
-
-export { CustomTooltip }
diff --git a/src/fireedge/webpack.config.dev.client.js b/src/fireedge/webpack.config.dev.client.js
index 4d8d122035..8cafe189b7 100644
--- a/src/fireedge/webpack.config.dev.client.js
+++ b/src/fireedge/webpack.config.dev.client.js
@@ -52,10 +52,6 @@ const getDevConfiguration = () => {
         path: path.resolve(__dirname, 'dist'),
         publicPath: `${appName}/client`,
       },
-      watchOptions: {
-        poll: 1000,
-        ignored: /node_modules/,
-      },
       module: {
         rules: [
           {
@@ -75,18 +71,6 @@ const getDevConfiguration = () => {
             test: /\.css$/i,
             use: ['style-loader', 'css-loader'],
           },
-          {
-            test: /\.(png|jpe?g|gif)$/i,
-            use: [
-              {
-                loader: 'file-loader',
-                options: {
-                  name: '[path][name].[ext]',
-                  outputPath: 'assets/images/',
-                },
-              },
-            ],
-          },
         ],
       },
       resolve: {
diff --git a/src/fireedge/webpack.config.prod.client.js b/src/fireedge/webpack.config.prod.client.js
index a14f5e6019..3d8da94c21 100644
--- a/src/fireedge/webpack.config.prod.client.js
+++ b/src/fireedge/webpack.config.prod.client.js
@@ -36,19 +36,6 @@ const css = {
   use: ['style-loader', 'css-loader'],
 }
 
-const images = {
-  test: /\.(png|jpe?g|gif)$/i,
-  use: [
-    {
-      loader: 'file-loader',
-      options: {
-        name: '[path][name].[ext]',
-        outputPath: 'assets/images/',
-      },
-    },
-  ],
-}
-
 /**
  * Bundle app.
  *
@@ -103,7 +90,7 @@ const bundle = ({ assets = false, name = 'sunstone' }) => {
       minimizer: [new TerserPlugin({ extractComments: false })],
     },
     module: {
-      rules: [js, css, images],
+      rules: [js, css],
     },
   }
 }
diff --git a/src/fireedge/webpack.config.prod.server.js b/src/fireedge/webpack.config.prod.server.js
index 3d4ea6b80b..3517dc3554 100644
--- a/src/fireedge/webpack.config.prod.server.js
+++ b/src/fireedge/webpack.config.prod.server.js
@@ -41,19 +41,6 @@ const css = {
   ],
 }
 
-const images = {
-  test: /\.(png|jpe?g|gif)$/i,
-  use: [
-    {
-      loader: 'file-loader',
-      options: {
-        name: '[path][name].[ext]',
-        outputPath: 'assets/images/',
-      },
-    },
-  ],
-}
-
 const worker = {
   test: /\.worker\.js$/,
   loader: 'worker-loader',
@@ -92,6 +79,6 @@ module.exports = {
     minimizer: [new TerserPlugin({ extractComments: false })],
   },
   module: {
-    rules: [js, worker, css, images],
+    rules: [js, worker, css],
   },
 }