diff --git a/frontend-components/tables/package-lock.json b/frontend-components/tables/package-lock.json index 55b0e011800..c09c56728f7 100644 --- a/frontend-components/tables/package-lock.json +++ b/frontend-components/tables/package-lock.json @@ -8,18 +8,25 @@ "name": "tables", "version": "0.0.0", "dependencies": { + "@radix-ui/react-checkbox": "^1.0.3", + "@radix-ui/react-dropdown-menu": "^2.0.4", + "@radix-ui/react-icons": "^1.2.0", + "@radix-ui/react-radio-group": "^1.1.2", + "@radix-ui/react-select": "^1.2.1", + "@radix-ui/react-toast": "^1.1.3", "@tanstack/match-sorter-utils": "^8.7.6", "@tanstack/react-table": "^8.7.9", "dom-to-image": "^2.6.0", "plotly.js": "^2.18.2", - "react": "^18.2.0", + "react": "^17.0.0", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", - "react-dom": "^18.2.0", + "react-dom": "^17.0.0", "react-plotly.js": "^2.6.0", "react-table": "^7.8.0", "react-virtual": "^2.10.4", - "xlsx": "^0.18.5" + "xlsx": "^0.18.5", + "xss": "^1.0.14" }, "devDependencies": { "@types/react": "^18.0.27", @@ -70,21 +77,21 @@ } }, "node_modules/@babel/core": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", + "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", + "@babel/generator": "^7.21.3", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.0", + "@babel/helper-module-transforms": "^7.21.2", "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.0", + "@babel/parser": "^7.21.3", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0", + "@babel/traverse": "^7.21.3", + "@babel/types": "^7.21.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -100,12 +107,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", "dev": true, "dependencies": { - "@babel/types": "^7.21.0", + "@babel/types": "^7.21.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -301,9 +308,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -368,19 +375,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", - "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.1", + "@babel/generator": "^7.21.3", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.2", - "@babel/types": "^7.21.2", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -389,9 +396,9 @@ } }, "node_modules/@babel/types": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", - "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -414,9 +421,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.12.tgz", + "integrity": "sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==", "cpu": [ "arm" ], @@ -430,9 +437,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz", + "integrity": "sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==", "cpu": [ "arm64" ], @@ -446,9 +453,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.12.tgz", + "integrity": "sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==", "cpu": [ "x64" ], @@ -462,9 +469,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz", + "integrity": "sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==", "cpu": [ "arm64" ], @@ -478,9 +485,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz", + "integrity": "sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==", "cpu": [ "x64" ], @@ -494,9 +501,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz", + "integrity": "sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==", "cpu": [ "arm64" ], @@ -510,9 +517,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz", + "integrity": "sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==", "cpu": [ "x64" ], @@ -526,9 +533,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz", + "integrity": "sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==", "cpu": [ "arm" ], @@ -542,9 +549,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz", + "integrity": "sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==", "cpu": [ "arm64" ], @@ -558,9 +565,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz", + "integrity": "sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==", "cpu": [ "ia32" ], @@ -574,9 +581,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz", + "integrity": "sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==", "cpu": [ "loong64" ], @@ -590,9 +597,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz", + "integrity": "sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==", "cpu": [ "mips64el" ], @@ -606,9 +613,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz", + "integrity": "sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==", "cpu": [ "ppc64" ], @@ -622,9 +629,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz", + "integrity": "sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==", "cpu": [ "riscv64" ], @@ -638,9 +645,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz", + "integrity": "sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==", "cpu": [ "s390x" ], @@ -654,9 +661,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz", + "integrity": "sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==", "cpu": [ "x64" ], @@ -670,9 +677,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.12.tgz", + "integrity": "sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==", "cpu": [ "x64" ], @@ -686,9 +693,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.12.tgz", + "integrity": "sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==", "cpu": [ "x64" ], @@ -702,9 +709,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.12.tgz", + "integrity": "sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==", "cpu": [ "x64" ], @@ -718,9 +725,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.12.tgz", + "integrity": "sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==", "cpu": [ "arm64" ], @@ -734,9 +741,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.12.tgz", + "integrity": "sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==", "cpu": [ "ia32" ], @@ -750,9 +757,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.12.tgz", + "integrity": "sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==", "cpu": [ "x64" ], @@ -765,6 +772,32 @@ "node": ">=12" } }, + "node_modules/@floating-ui/core": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", + "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==" + }, + "node_modules/@floating-ui/dom": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", + "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", + "dependencies": { + "@floating-ui/core": "^0.7.3" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz", + "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==", + "dependencies": { + "@floating-ui/dom": "^0.5.3", + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -954,6 +987,492 @@ "pick-by-alias": "^1.2.0" } }, + "node_modules/@radix-ui/number": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.2.tgz", + "integrity": "sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.0.3.tgz", + "integrity": "sha512-55B8/vKzTuzxllH5sGJO4zaBf9gYpJuJRRzaOKm+0oAefRnMvbf+Kgww7IOANVN0w3z7agFJgtnXaZl8Uj95AA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-use-size": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.2.tgz", + "integrity": "sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.3.tgz", + "integrity": "sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.4.tgz", + "integrity": "sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-menu": "2.0.4", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", + "integrity": "sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.2.tgz", + "integrity": "sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", + "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.4.tgz", + "integrity": "sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-roving-focus": "1.0.3", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.1.tgz", + "integrity": "sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.2.tgz", + "integrity": "sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.1.2.tgz", + "integrity": "sha512-S7K8upMjOkx1fTUzEugbfCYPwI9Yw4m2h2ZfJP+ZWP/Mzc/LE2T6QgiAMaSaC3vZSxU5Kk5Eb377zMklWeaaCQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-roving-focus": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-use-size": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.3.tgz", + "integrity": "sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-select": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.1.tgz", + "integrity": "sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.2", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-toast": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.3.tgz", + "integrity": "sha512-yHFgpxi9wjbfPvpSPdYAzivCqw48eA1ofT8m/WqYOVTxKPdmQMuVKRYPlMmj4C1d6tJdFj/LBa1J4iY3fL4OwQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", + "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz", + "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.0.tgz", + "integrity": "sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", + "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz", + "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.2.tgz", + "integrity": "sha512-qirnJxtYn73HEk1rXL12/mXnu2rwsNHDID10th2JGtdK25T9wX+mxRmGt7iPSahw512GbZOc0syZX1nLQGoEOg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz", + "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, "node_modules/@reach/observe-rect": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", @@ -1111,9 +1630,9 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", "devOptional": true }, "node_modules/@vitejs/plugin-react": { @@ -1215,6 +1734,17 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, + "node_modules/aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", @@ -1260,9 +1790,9 @@ "integrity": "sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw==" }, "node_modules/autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "dev": true, "funding": [ { @@ -1275,8 +1805,8 @@ } ], "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -1380,9 +1910,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001458", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz", - "integrity": "sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w==", + "version": "1.0.30001469", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", + "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", "dev": true, "funding": [ { @@ -1690,6 +2220,11 @@ "node": ">=4" } }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" + }, "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", @@ -1857,6 +2392,11 @@ "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz", "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==" }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, "node_modules/detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", @@ -1940,9 +2480,9 @@ "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, "node_modules/electron-to-chromium": { - "version": "1.4.315", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.315.tgz", - "integrity": "sha512-ndBQYz3Eyy3rASjjQ9poMJGoAlsZ/aZnq6GBsGL4w/4sWIAwiUHVSsMuADbxa8WJw7pZ0oxLpGbtoDt4vRTdCg==", + "version": "1.4.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.336.tgz", + "integrity": "sha512-yLaoSY/ngjgRpEGU4ueeW0vlj456idQBn74r6s1yutoOIadvd7rwt05TGenPj0PoetJ5pEHomVkmfTdIgqPfJw==", "dev": true }, "node_modules/element-size": { @@ -2011,9 +2551,9 @@ } }, "node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.12.tgz", + "integrity": "sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==", "dev": true, "hasInstallScript": true, "bin": { @@ -2023,28 +2563,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/android-arm": "0.17.12", + "@esbuild/android-arm64": "0.17.12", + "@esbuild/android-x64": "0.17.12", + "@esbuild/darwin-arm64": "0.17.12", + "@esbuild/darwin-x64": "0.17.12", + "@esbuild/freebsd-arm64": "0.17.12", + "@esbuild/freebsd-x64": "0.17.12", + "@esbuild/linux-arm": "0.17.12", + "@esbuild/linux-arm64": "0.17.12", + "@esbuild/linux-ia32": "0.17.12", + "@esbuild/linux-loong64": "0.17.12", + "@esbuild/linux-mips64el": "0.17.12", + "@esbuild/linux-ppc64": "0.17.12", + "@esbuild/linux-riscv64": "0.17.12", + "@esbuild/linux-s390x": "0.17.12", + "@esbuild/linux-x64": "0.17.12", + "@esbuild/netbsd-x64": "0.17.12", + "@esbuild/openbsd-x64": "0.17.12", + "@esbuild/sunos-x64": "0.17.12", + "@esbuild/win32-arm64": "0.17.12", + "@esbuild/win32-ia32": "0.17.12", + "@esbuild/win32-x64": "0.17.12" } }, "node_modules/escalade": { @@ -2311,6 +2851,14 @@ "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz", "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==" }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -2573,9 +3121,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/grid-index": { "version": "1.1.0", @@ -2676,6 +3224,14 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-base64": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", @@ -2796,9 +3352,9 @@ } }, "node_modules/is-mobile": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-3.1.1.tgz", - "integrity": "sha512-RRoXXR2HNFxNkUnxtaBdGBXtFlUMFa06S0NUKf/LCF+MuGLu13gi9iBCkoEmc6+rpXuwi5Mso5V8Zf7mNynMBQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-4.0.0.tgz", + "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==" }, "node_modules/is-number": { "version": "7.0.0", @@ -2887,9 +3443,9 @@ } }, "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, "engines": { "node": ">=10" @@ -3279,9 +3835,9 @@ } }, "node_modules/plotly.js": { - "version": "2.18.2", - "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.18.2.tgz", - "integrity": "sha512-Z8ZgWNfjeIEYxt/PCfpKZoWMxWylGYiuz28W2frUwEeTEcnnspi+JveC3IWYGmlq6dS3AWlJiZOJWJgdrJjCmA==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.20.0.tgz", + "integrity": "sha512-aitv9IkW9Od55oewdnnABVDxZ7SJTGFp+uISURIfN3Gn0/xi2FwJCstUyoHKHT/an+jzWFsaiqFQL9FDxn2s8A==", "dependencies": { "@plotly/d3": "3.8.1", "@plotly/d3-sankey": "0.7.2", @@ -3309,7 +3865,7 @@ "glslify": "^7.1.1", "has-hover": "^1.0.1", "has-passive-events": "^1.0.0", - "is-mobile": "^3.1.1", + "is-mobile": "^4.0.0", "mapbox-gl": "1.10.1", "mouse-change": "^1.4.0", "mouse-event-offset": "^3.0.2", @@ -3581,11 +4137,12 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dependencies": { - "loose-envify": "^1.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" }, "engines": { "node": ">=0.10.0" @@ -3629,15 +4186,16 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "17.0.2" } }, "node_modules/react-is": { @@ -3666,6 +4224,73 @@ "node": ">=0.10.0" } }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-table": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", @@ -3877,9 +4502,9 @@ "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==" }, "node_modules/rollup": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.18.0.tgz", - "integrity": "sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.0.tgz", + "integrity": "sha512-YsIfrk80NqUDrxrjWPXUa7PWvAfegZEXHuPsEZg58fGCdjL1I9C1i/NaG+L+27kxxwkrG/QEDEQc8s/ynXWWGQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -3950,11 +4575,12 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "dependencies": { - "loose-envify": "^1.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, "node_modules/semver": { @@ -4289,6 +4915,11 @@ "topoquantize": "bin/topoquantize" } }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -4373,6 +5004,60 @@ "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz", "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==" }, + "node_modules/use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4498,15 +5183,15 @@ "integrity": "sha512-TORbkLMdOFkEbPtfdx76FSVQGSAzyUEMxI+pBq5pfFm1ZzIesP+XiGc6eIK75aKu7RA7a8EcqUv5OrY5wfog5w==" }, "node_modules/vite": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.4.tgz", - "integrity": "sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.1.tgz", + "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", "dev": true, "dependencies": { - "esbuild": "^0.16.14", + "esbuild": "^0.17.5", "postcss": "^8.4.21", "resolve": "^1.22.1", - "rollup": "^3.10.0" + "rollup": "^3.18.0" }, "bin": { "vite": "bin/vite.js" @@ -4642,6 +5327,21 @@ "node": ">=0.8" } }, + "node_modules/xss": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", + "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -4693,21 +5393,21 @@ "dev": true }, "@babel/core": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", + "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", + "@babel/generator": "^7.21.3", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.0", + "@babel/helper-module-transforms": "^7.21.2", "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.0", + "@babel/parser": "^7.21.3", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0", + "@babel/traverse": "^7.21.3", + "@babel/types": "^7.21.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -4716,12 +5416,12 @@ } }, "@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", "dev": true, "requires": { - "@babel/types": "^7.21.0", + "@babel/types": "^7.21.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -4868,9 +5568,9 @@ } }, "@babel/parser": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", "dev": true }, "@babel/plugin-transform-react-jsx-self": { @@ -4911,27 +5611,27 @@ } }, "@babel/traverse": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", - "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.1", + "@babel/generator": "^7.21.3", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.2", - "@babel/types": "^7.21.2", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", - "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -4948,159 +5648,181 @@ } }, "@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.12.tgz", + "integrity": "sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz", + "integrity": "sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.12.tgz", + "integrity": "sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz", + "integrity": "sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz", + "integrity": "sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz", + "integrity": "sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz", + "integrity": "sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz", + "integrity": "sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz", + "integrity": "sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz", + "integrity": "sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz", + "integrity": "sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz", + "integrity": "sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz", + "integrity": "sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz", + "integrity": "sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz", + "integrity": "sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz", + "integrity": "sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.12.tgz", + "integrity": "sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.12.tgz", + "integrity": "sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.12.tgz", + "integrity": "sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.12.tgz", + "integrity": "sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.12.tgz", + "integrity": "sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.12.tgz", + "integrity": "sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==", "dev": true, "optional": true }, + "@floating-ui/core": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", + "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==" + }, + "@floating-ui/dom": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", + "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", + "requires": { + "@floating-ui/core": "^0.7.3" + } + }, + "@floating-ui/react-dom": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz", + "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==", + "requires": { + "@floating-ui/dom": "^0.5.3", + "use-isomorphic-layout-effect": "^1.1.1" + } + }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -5261,6 +5983,387 @@ "pick-by-alias": "^1.2.0" } }, + "@radix-ui/number": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-arrow": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.2.tgz", + "integrity": "sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + } + }, + "@radix-ui/react-checkbox": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.0.3.tgz", + "integrity": "sha512-55B8/vKzTuzxllH5sGJO4zaBf9gYpJuJRRzaOKm+0oAefRnMvbf+Kgww7IOANVN0w3z7agFJgtnXaZl8Uj95AA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-use-size": "1.0.0" + } + }, + "@radix-ui/react-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.2.tgz", + "integrity": "sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1" + } + }, + "@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-dismissable-layer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.3.tgz", + "integrity": "sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + } + }, + "@radix-ui/react-dropdown-menu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.4.tgz", + "integrity": "sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-menu": "2.0.4", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.0" + } + }, + "@radix-ui/react-focus-guards": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", + "integrity": "sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-focus-scope": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.2.tgz", + "integrity": "sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "requires": {} + }, + "@radix-ui/react-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", + "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-menu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.4.tgz", + "integrity": "sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-roving-focus": "1.0.3", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + } + }, + "@radix-ui/react-popper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.1.tgz", + "integrity": "sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==", + "requires": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + } + }, + "@radix-ui/react-portal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.2.tgz", + "integrity": "sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + } + }, + "@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + }, + "@radix-ui/react-radio-group": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.1.2.tgz", + "integrity": "sha512-S7K8upMjOkx1fTUzEugbfCYPwI9Yw4m2h2ZfJP+ZWP/Mzc/LE2T6QgiAMaSaC3vZSxU5Kk5Eb377zMklWeaaCQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-roving-focus": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-use-size": "1.0.0" + } + }, + "@radix-ui/react-roving-focus": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.3.tgz", + "integrity": "sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + } + }, + "@radix-ui/react-select": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.1.tgz", + "integrity": "sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.2", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + }, + "@radix-ui/react-toast": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.3.tgz", + "integrity": "sha512-yHFgpxi9wjbfPvpSPdYAzivCqw48eA1ofT8m/WqYOVTxKPdmQMuVKRYPlMmj4C1d6tJdFj/LBa1J4iY3fL4OwQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.2" + } + }, + "@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-controllable-state": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", + "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-use-escape-keydown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz", + "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-previous": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.0.tgz", + "integrity": "sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", + "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.0" + } + }, + "@radix-ui/react-use-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz", + "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-visually-hidden": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.2.tgz", + "integrity": "sha512-qirnJxtYn73HEk1rXL12/mXnu2rwsNHDID10th2JGtdK25T9wX+mxRmGt7iPSahw512GbZOc0syZX1nLQGoEOg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + } + }, + "@radix-ui/rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz", + "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, "@reach/observe-rect": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", @@ -5378,9 +6481,9 @@ } }, "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", "devOptional": true }, "@vitejs/plugin-react": { @@ -5458,6 +6561,14 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, + "aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "requires": { + "tslib": "^2.0.0" + } + }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", @@ -5497,13 +6608,13 @@ "integrity": "sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw==" }, "autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "dev": true, "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -5573,9 +6684,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001458", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz", - "integrity": "sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w==", + "version": "1.0.30001469", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", + "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", "dev": true }, "canvas-fit": { @@ -5834,6 +6945,11 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" + }, "csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", @@ -5977,6 +7093,11 @@ "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz", "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==" }, + "detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, "detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", @@ -6051,9 +7172,9 @@ "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, "electron-to-chromium": { - "version": "1.4.315", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.315.tgz", - "integrity": "sha512-ndBQYz3Eyy3rASjjQ9poMJGoAlsZ/aZnq6GBsGL4w/4sWIAwiUHVSsMuADbxa8WJw7pZ0oxLpGbtoDt4vRTdCg==", + "version": "1.4.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.336.tgz", + "integrity": "sha512-yLaoSY/ngjgRpEGU4ueeW0vlj456idQBn74r6s1yutoOIadvd7rwt05TGenPj0PoetJ5pEHomVkmfTdIgqPfJw==", "dev": true }, "element-size": { @@ -6118,33 +7239,33 @@ } }, "esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.12.tgz", + "integrity": "sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==", "dev": true, "requires": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/android-arm": "0.17.12", + "@esbuild/android-arm64": "0.17.12", + "@esbuild/android-x64": "0.17.12", + "@esbuild/darwin-arm64": "0.17.12", + "@esbuild/darwin-x64": "0.17.12", + "@esbuild/freebsd-arm64": "0.17.12", + "@esbuild/freebsd-x64": "0.17.12", + "@esbuild/linux-arm": "0.17.12", + "@esbuild/linux-arm64": "0.17.12", + "@esbuild/linux-ia32": "0.17.12", + "@esbuild/linux-loong64": "0.17.12", + "@esbuild/linux-mips64el": "0.17.12", + "@esbuild/linux-ppc64": "0.17.12", + "@esbuild/linux-riscv64": "0.17.12", + "@esbuild/linux-s390x": "0.17.12", + "@esbuild/linux-x64": "0.17.12", + "@esbuild/netbsd-x64": "0.17.12", + "@esbuild/openbsd-x64": "0.17.12", + "@esbuild/sunos-x64": "0.17.12", + "@esbuild/win32-arm64": "0.17.12", + "@esbuild/win32-ia32": "0.17.12", + "@esbuild/win32-x64": "0.17.12" } }, "escalade": { @@ -6352,6 +7473,11 @@ "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz", "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==" }, + "get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==" + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -6600,9 +7726,9 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "grid-index": { "version": "1.1.0", @@ -6680,6 +7806,14 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "is-base64": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz", @@ -6753,9 +7887,9 @@ "integrity": "sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==" }, "is-mobile": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-3.1.1.tgz", - "integrity": "sha512-RRoXXR2HNFxNkUnxtaBdGBXtFlUMFa06S0NUKf/LCF+MuGLu13gi9iBCkoEmc6+rpXuwi5Mso5V8Zf7mNynMBQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-4.0.0.tgz", + "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==" }, "is-number": { "version": "7.0.0", @@ -6820,9 +7954,9 @@ } }, "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true }, "lodash.merge": { @@ -7146,9 +8280,9 @@ "dev": true }, "plotly.js": { - "version": "2.18.2", - "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.18.2.tgz", - "integrity": "sha512-Z8ZgWNfjeIEYxt/PCfpKZoWMxWylGYiuz28W2frUwEeTEcnnspi+JveC3IWYGmlq6dS3AWlJiZOJWJgdrJjCmA==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.20.0.tgz", + "integrity": "sha512-aitv9IkW9Od55oewdnnABVDxZ7SJTGFp+uISURIfN3Gn0/xi2FwJCstUyoHKHT/an+jzWFsaiqFQL9FDxn2s8A==", "requires": { "@plotly/d3": "3.8.1", "@plotly/d3-sankey": "0.7.2", @@ -7176,7 +8310,7 @@ "glslify": "^7.1.1", "has-hover": "^1.0.1", "has-passive-events": "^1.0.0", - "is-mobile": "^3.1.1", + "is-mobile": "^4.0.0", "mapbox-gl": "1.10.1", "mouse-change": "^1.4.0", "mouse-event-offset": "^3.0.2", @@ -7361,11 +8495,12 @@ } }, "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "requires": { - "loose-envify": "^1.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, "react-dnd": { @@ -7389,12 +8524,13 @@ } }, "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "requires": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" } }, "react-is": { @@ -7416,6 +8552,37 @@ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true }, + "react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "requires": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + } + }, + "react-remove-scroll-bar": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "requires": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + } + }, + "react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "requires": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + } + }, "react-table": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz", @@ -7603,9 +8770,9 @@ "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==" }, "rollup": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.18.0.tgz", - "integrity": "sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.0.tgz", + "integrity": "sha512-YsIfrk80NqUDrxrjWPXUa7PWvAfegZEXHuPsEZg58fGCdjL1I9C1i/NaG+L+27kxxwkrG/QEDEQc8s/ynXWWGQ==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -7641,11 +8808,12 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "requires": { - "loose-envify": "^1.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, "semver": { @@ -7943,6 +9111,11 @@ "commander": "2" } }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -8001,6 +9174,29 @@ "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz", "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==" }, + "use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "requires": { + "tslib": "^2.0.0" + } + }, + "use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "requires": {} + }, + "use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "requires": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8126,16 +9322,16 @@ "integrity": "sha512-TORbkLMdOFkEbPtfdx76FSVQGSAzyUEMxI+pBq5pfFm1ZzIesP+XiGc6eIK75aKu7RA7a8EcqUv5OrY5wfog5w==" }, "vite": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.4.tgz", - "integrity": "sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.1.tgz", + "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", "dev": true, "requires": { - "esbuild": "^0.16.14", + "esbuild": "^0.17.5", "fsevents": "~2.3.2", "postcss": "^8.4.21", "resolve": "^1.22.1", - "rollup": "^3.10.0" + "rollup": "^3.18.0" } }, "vite-plugin-singlefile": { @@ -8212,6 +9408,15 @@ "word": "~0.3.0" } }, + "xss": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", + "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", + "requires": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/frontend-components/tables/package.json b/frontend-components/tables/package.json index 73b97ebea49..3cdf42d1bf0 100644 --- a/frontend-components/tables/package.json +++ b/frontend-components/tables/package.json @@ -5,23 +5,31 @@ "type": "module", "scripts": { "dev": "vite", - "build": "tsc && vite build", + "build": "vite build", + "build_tsc": "tsc && vite build", "deploy": "npm run build && mv dist/index.html ../../openbb_terminal/core/plots/table.html", "preview": "vite preview" }, "dependencies": { + "@radix-ui/react-checkbox": "^1.0.3", + "@radix-ui/react-dropdown-menu": "^2.0.4", + "@radix-ui/react-icons": "^1.2.0", + "@radix-ui/react-radio-group": "^1.1.2", + "@radix-ui/react-select": "^1.2.1", + "@radix-ui/react-toast": "^1.1.3", "@tanstack/match-sorter-utils": "^8.7.6", "@tanstack/react-table": "^8.7.9", "dom-to-image": "^2.6.0", "plotly.js": "^2.18.2", - "react": "^18.2.0", + "react": "^17.0.0", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", - "react-dom": "^18.2.0", + "react-dom": "^17.0.0", "react-plotly.js": "^2.6.0", "react-table": "^7.8.0", "react-virtual": "^2.10.4", - "xlsx": "^0.18.5" + "xlsx": "^0.18.5", + "xss": "^1.0.14" }, "devDependencies": { "@types/react": "^18.0.27", diff --git a/frontend-components/tables/src/App.tsx b/frontend-components/tables/src/App.tsx index 5c5854092e7..414f9fbdb08 100644 --- a/frontend-components/tables/src/App.tsx +++ b/frontend-components/tables/src/App.tsx @@ -3,6 +3,12 @@ import { useEffect, useState } from "react"; import Table from "./components/Table"; import { DndProvider } from "react-dnd"; import { HTML5Backend } from "react-dnd-html5-backend"; +import { + cryptoData, + incomeData, + longIncomeData, + performanceData, +} from "./data/mockup"; declare global { interface Window { @@ -13,15 +19,24 @@ declare global { function App() { const [data, setData] = useState( - process.env.NODE_ENV === "production" ? null : JSON.parse(rekNewsData) + process.env.NODE_ENV === "production" ? null : JSON.parse(cryptoData) ); + const [title, setTitle] = useState("Interactive Table"); + const [source, setSource] = useState(""); if (process.env.NODE_ENV === "production") { useEffect(() => { const interval = setInterval(() => { if (window.json_data) { - console.log(window.json_data); - setData(JSON.parse(window.json_data)); + const data = JSON.parse(window.json_data); + console.log(data); + setData(data); + if (data.title && typeof data.title === "string") { + setTitle(data.title); + } + if (data.source && typeof data.source === "string") { + setSource(data.source); + } clearInterval(interval); } }, 100); @@ -57,11 +72,12 @@ function App() { const transformedData = transformData(data); return ( -
-
+
{transformedData && ( @@ -72,7 +88,3 @@ function App() { } export default App; - -const rekNewsData = `{"columns":["Platform","Date","Amount [$]","Audit","Slug","URL"],"index":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123],"data":[["Ronin Network - REKT",1647993600000,"624 M","Unaudited","ronin-rekt","https:\/\/rekt.news\/ronin-rekt\/"],["Poly Network - REKT",1628553600000,"611 M","Unaudited","polynetwork-rekt","https:\/\/rekt.news\/polynetwork-rekt\/"],["BNB Bridge - REKT",1665014400000,"586 M","Unaudited","bnb-bridge-rekt","https:\/\/rekt.news\/bnb-bridge-rekt\/"],["SBF - MASK OFF",1668211200000,"477 M","N\/A","sbf-mask-off","https:\/\/rekt.news\/sbf-mask-off\/"],["Wormhole - REKT",1643760000000,"326 M","Neodyme","wormhole-rekt","https:\/\/rekt.news\/wormhole-rekt\/"],["BitMart - REKT",1638576000000,"196 M","N\/A","bitmart-rekt","https:\/\/rekt.news\/bitmart-rekt\/"],["Nomad Bridge - REKT",1659312000000,"190 M","N\/A","nomad-rekt","https:\/\/rekt.news\/nomad-rekt\/"],["Beanstalk - REKT",1650153600000,"181 M","Unaudited","beanstalk-rekt","https:\/\/rekt.news\/beanstalk-rekt\/"],["Wintermute - REKT 2",1663632000000,"162.300 M","N\/A","wintermute-rekt-2","https:\/\/rekt.news\/wintermute-rekt-2\/"],["Compound - REKT",1632873600000,"147 M","Unaudited","compound-rekt","https:\/\/rekt.news\/compound-rekt\/"],["Vulcan Forged - REKT",1639353600000,"140 M","Unaudited","vulcan-forged-rekt","https:\/\/rekt.news\/vulcan-forged-rekt\/"],["Cream Finance - REKT 2",1635292800000,"130 M","Unaudited","cream-rekt-2","https:\/\/rekt.news\/cream-rekt-2\/"],["BonqDAO - REKT",1675209600000,"120 M","Out of scope","bonq-rekt","https:\/\/rekt.news\/bonq-rekt\/"],["Badger - REKT",1638403200000,"120 M","Unaudited","badger-rekt","https:\/\/rekt.news\/badger-rekt\/"],["Mango Markets - REKT",1665446400000,"115 M","Out of Scope","mango-markets-rekt","https:\/\/rekt.news\/mango-markets-rekt\/"],["Harmony Bridge - REKT",1655942400000,"100 M","N\/A","harmony-rekt","https:\/\/rekt.news\/harmony-rekt\/"],["Mirror Protocol - REKT",1633651200000,"92 M","Unaudited","mirror-rekt","https:\/\/rekt.news\/mirror-rekt\/"],["Fei Rari - REKT 2",1651363200000,"80 M","Unaudited","fei-rari-rekt","https:\/\/rekt.news\/fei-rari-rekt\/"],["Qubit Finance - REKT",1643328000000,"80 M","Unaudited","qubit-rekt","https:\/\/rekt.news\/qubit-rekt\/"],["Ascendex - REKT",1639267200000,"77.700 M","Unaudited","ascendex-rekt","https:\/\/rekt.news\/ascendex-rekt\/"],["EasyFi - REKT",1618790400000,"59 M","Unaudited","easyfi-rekt","https:\/\/rekt.news\/easyfi-rekt\/"],["Uranium Finance - REKT",1619568000000,"57.200 M","Unaudited","uranium-rekt","https:\/\/rekt.news\/uranium-rekt\/"],["bZx - REKT",1636070400000,"55 M","Unaudited","bzx-rekt","https:\/\/rekt.news\/bzx-rekt\/"],["Cashio - REKT",1647993600000,"48 M","Unaudited","cashio-rekt","https:\/\/rekt.news\/cashio-rekt\/"],["PancakeBunny - REKT",1621382400000,"45 M","Unaudited","pancakebunny-rekt","https:\/\/rekt.news\/pancakebunny-rekt\/"],["Kucoin - REKT",1601337600000,"45 M","Internal audit","epic-hack-homie","https:\/\/rekt.news\/epic-hack-homie\/"],["Alpha Finance - REKT",1613174400000,"37.500 M","Quantstamp, Peckshield","alpha-finance-rekt","https:\/\/rekt.news\/alpha-finance-rekt\/"],["Vee Finance - REKT",1632182400000,"34 M","Slowmist","veefinance-rekt","https:\/\/rekt.news\/veefinance-rekt\/"],["Crypto.com - REKT",1642464000000,"33.700 M","Deloitte","cryptocom-rekt","https:\/\/rekt.news\/cryptocom-rekt\/"],["Meerkat Finance - BSC - REKT",1614816000000,"32 M","Unaudited","meerkat-finance-bsc-rekt","https:\/\/rekt.news\/meerkat-finance-bsc-rekt\/"],["MonoX - REKT",1638230400000,"31.400 M","Halborn, Peckshield","monox-rekt","https:\/\/rekt.news\/monox-rekt\/"],["Spartan Protocol - REKT",1619913600000,"30.500 M","N\/A","spartan-rekt","https:\/\/rekt.news\/spartan-rekt\/"],["Grim Finance - REKT",1639785600000,"30 M","Solidity Finance","grim-finance-rekt","https:\/\/rekt.news\/grim-finance-rekt\/"],["Deribit - REKT",1667260800000,"28 M","N\/A","deribit-rekt","https:\/\/rekt.news\/deribit-rekt\/"],["Wintermute - REKT",1654387200000,"27.600 M","N\/A","wintermute-rekt","https:\/\/rekt.news\/wintermute-rekt\/"],["StableMagnet - REKT",1624406400000,"27 M","Techrate","stablemagnet-rekt","https:\/\/rekt.news\/stablemagnet-rekt\/"],["Paid Network - REKT",1614902400000,"27 M","Unaudited","paid-rekt","https:\/\/rekt.news\/paid-rekt\/"],["Harvest Finance - REKT",1603670400000,"25 M","Haechi, Peckshield","harvest-finance-rekt","https:\/\/rekt.news\/harvest-finance-rekt\/"],["Ankr & Helio - REKT",1669939200000,"24 M","N\/A","ankr-helio-rekt","https:\/\/rekt.news\/ankr-helio-rekt\/"],["XToken - REKT",1620777600000,"24 M","Peckshield","xtoken-rekt","https:\/\/rekt.news\/xtoken-rekt\/"],["Elephant Money - REKT",1618185600000,"22.200 M","Solidity Finance","elephant-money-rekt","https:\/\/rekt.news\/elephant-money-rekt\/"],["Blizz Finance, Venus Protocol - REKT",1652400000000,"21.800 M","n\/a","venus-blizz-rekt","https:\/\/rekt.news\/venus-blizz-rekt\/"],["Transit Swap - REKT",1664668800000,"21.200 M","Out of scope","transit-swap-rekt","https:\/\/rekt.news\/transit-swap-rekt\/"],["Popsicle Finance - REKT",1627948800000,"20 M","Peckshield","popsicle-rekt","https:\/\/rekt.news\/popsicle-rekt\/"],["Pickle Finance - REKT",1606003200000,"19.700 M","Unaudited","pickle-finance-rekt","https:\/\/rekt.news\/pickle-finance-rekt\/"],["Cream Finance - REKT",1630281600000,"18.800 M","Unaudited","cream-rekt","https:\/\/rekt.news\/cream-rekt\/"],["Snowdog - REKT",1637798400000,"18.100 M","Unaudited","snowdog-rekt","https:\/\/rekt.news\/snowdog-rekt\/"],["bEarn - REKT",1621209600000,"18 M","Unaudited","bearn-rekt","https:\/\/rekt.news\/bearn-rekt\/"],["Indexed Finance - REKT",1634169600000,"16 M","Unaudited","indexed-finance-rekt","https:\/\/rekt.news\/indexed-finance-rekt\/"],["Team Finance - REKT",1666828800000,"15.800 M","Zokyo Security","teamfinance-rekt","https:\/\/rekt.news\/teamfinance-rekt\/"],["Inverse Finance - REKT",1648857600000,"15.600 M","Unaudited","inverse-finance-rekt","https:\/\/rekt.news\/inverse-finance-rekt\/"],["Eminence - Rekt in prod",1601251200000,"15 M","Unaudited","eminence-rekt-in-prod","https:\/\/rekt.news\/eminence-rekt-in-prod\/"],["Furucombo - REKT",1614384000000,"14 M","Unaudited","furucombo-rekt","https:\/\/rekt.news\/furucombo-rekt\/"],["Deus DAO - REKT 2",1651104000000,"13.400 M","Armor Labs","deus-dao-rekt-2","https:\/\/rekt.news\/deus-dao-rekt-2\/"],["Compounder Finance - REKT",1606867200000,"12 M","out of scope","deathbed-confessions-c3pr","https:\/\/rekt.news\/deathbed-confessions-c3pr\/"],["Agave DAO, Hundred Finance - REKT",1647302400000,"11.700 M","Unaudited","agave-hundred-rekt","https:\/\/rekt.news\/agave-hundred-rekt\/"],["Saddle Finance - REKT 2",1638403200000,"11 M","Unaudited","saddle-finance-rekt2","https:\/\/rekt.news\/saddle-finance-rekt2\/"],["Value DeFi - REKT 3",1620345600000,"11 M","Unaudited","value-rekt3","https:\/\/rekt.news\/value-rekt3\/"],["Yearn - REKT",1612483200000,"11 M","Unaudited","yearn-rekt","https:\/\/rekt.news\/yearn-rekt\/"],["Dego Finance - REKT",1644451200000,"10 M","Peckshield","dego-finance-rekt","https:\/\/rekt.news\/dego-finance-rekt\/"],["Arbix Finance - REKT",1641254400000,"10 M","Certik","arbix-rekt","https:\/\/rekt.news\/arbix-rekt\/"],["Rari Capital - REKT",1620432000000,"10 M","Quantstamp","rari-capital-rekt","https:\/\/rekt.news\/rari-capital-rekt\/"],["Value DeFi - REKT 2",1620172800000,"10 M","Unaudited","value-rekt2","https:\/\/rekt.news\/value-rekt2\/"],["Cover - REKT",1609200000000,"9.400 M","Arcadia Group","cover-rekt","https:\/\/rekt.news\/cover-rekt\/"],["Punk Protocol - REKT",1628553600000,"8.950 M","Unaudited","punkprotocol-rekt","https:\/\/rekt.news\/punkprotocol-rekt\/"],["Crema Finance - REKT",1656720000000,"8.800 M","Bramah Systems","crema-finance-rekt","https:\/\/rekt.news\/crema-finance-rekt\/"],["Superfluid - REKT",1644278400000,"8.700 M","Peckshield","superfluid-rekt","https:\/\/rekt.news\/superfluid-rekt\/"],["Platypus Finance - REKT",1676592000000,"8.500 M","Unaudited","platypus-finance-rekt","https:\/\/rekt.news\/platypus-finance-rekt\/"],["Moola Market - REKT",1666137600000,"8.400 M","N\/A","moola-markets-rekt","https:\/\/rekt.news\/moola-markets-rekt\/"],["Visor Finance - REKT",1640044800000,"8.200 M","Unaudited","visor-finance-rekt","https:\/\/rekt.news\/visor-finance-rekt\/"],["THORChain - REKT 2",1626912000000,"8 M","THORChain","thorchain-rekt2","https:\/\/rekt.news\/thorchain-rekt2\/"],["Hack Epidemic (Origin Protocol - REKT)",1605571200000,"8 M","Unaudited","hack-epidemic","https:\/\/rekt.news\/hack-epidemic\/"],["LCX - REKT",1641600000000,"7.940 M","Unaudited","lcx-rekt","https:\/\/rekt.news\/lcx-rekt\/"],["Anyswap - REKT",1625875200000,"7.900 M","Unaudited","anyswap-rekt","https:\/\/rekt.news\/anyswap-rekt\/"],["Warp Finance - REKT",1608249600000,"7.800 M","Hacken","warp-finance-rekt","https:\/\/rekt.news\/warp-finance-rekt\/"],["Meter - REKT",1644105600000,"7.700 M","Unaudited","meter-rekt","https:\/\/rekt.news\/meter-rekt\/"],["BurgerSwap - REKT",1622160000000,"7.200 M","Unaudited","burgerswap-rekt","https:\/\/rekt.news\/burgerswap-rekt\/"],["Value DeFi - REKT",1605312000000,"7 M","Unaudited","value-defi-rekt","https:\/\/rekt.news\/value-defi-rekt\/"],["Lodestar Finance - REKT",1670630400000,"6.500 M","Unaudited","lodestar-rekt","https:\/\/rekt.news\/lodestar-rekt\/"],["Alchemix - REKT",1623801600000,"6.500 M","Unaudited","alchemix-rekt","https:\/\/rekt.news\/alchemix-rekt\/"],["Belt - REKT",1622246400000,"6.300 M","Haechi","belt-rekt","https:\/\/rekt.news\/belt-rekt\/"],["Audius - REKT",1658534400000,"6 M","Kudelski, OpenZeppelin","audius-rekt","https:\/\/rekt.news\/audius-rekt\/"],["Bondly - REKT",1626307200000,"5.900 M","Unaudited","bondly-rekt","https:\/\/rekt.news\/bondly-rekt\/"],["Inverse Finance - REKT 2",1655337600000,"5.800 M","Unaudited","inverse-rekt2","https:\/\/rekt.news\/inverse-rekt2\/"],["Roll - REKT",1615680000000,"5.700 M","Unaudited","roll-rekt","https:\/\/rekt.news\/roll-rekt\/"],["An Un-SOL-ved Mystery",1659398400000,"5.300 M","N\/A","unsolved-mystery","https:\/\/rekt.news\/unsolved-mystery\/"],["THORChain - REKT",1626307200000,"5 M","Unaudited","thorchain-rekt","https:\/\/rekt.news\/thorchain-rekt\/"],["X-Token - REKT X2",1630195200000,"4.500 M","Unaudited","xtoken-rekt-x2","https:\/\/rekt.news\/xtoken-rekt-x2\/"],["Eleven Finance - REKT",1624320000000,"4.500 M","Unaudited","11-rekt","https:\/\/rekt.news\/11-rekt\/"],["Raydium - REKT",1671148800000,"4.400 M","N\/A","raydium-rekt","https:\/\/rekt.news\/raydium-rekt\/"],["ChainSwap - REKT",1625961600000,"4.400 M","Unaudited","chainswap-rekt","https:\/\/rekt.news\/chainswap-rekt\/"],["Voltage Finance - REKT",1648684800000,"4 M","Unaudited","voltage-finance-rekt","https:\/\/rekt.news\/voltage-finance-rekt\/"],["DAO Maker - REKT",1630713600000,"4 M","TBC","daomaker-rekt","https:\/\/rekt.news\/daomaker-rekt\/"],["dForce Network - REKT",1675900800000,"3.650 M","Out of scope","dforce-network-rekt","https:\/\/rekt.news\/dforce-network-rekt\/"],["Nirvana Finance - REKT",1658966400000,"3.500 M","Sec3 Auto Audit Software","nirvana-rekt","https:\/\/rekt.news\/nirvana-rekt\/"],["Skyward Finance - REKT",1667347200000,"3.200 M","Unaudited","skyward-rekt","https:\/\/rekt.news\/skyward-rekt\/"],["JayPegs Automart - REKT",1631836800000,"3.100 M","Unaudited","jaypegs-automart-rekt","https:\/\/rekt.news\/jaypegs-automart-rekt\/"],["Orion Protocol - REKT",1675296000000,"3 M","Unaudited","orion-protocol-rekt","https:\/\/rekt.news\/orion-protocol-rekt\/"],["Fortress Protocol - REKT",1651968000000,"3 M","Hash0x, EtherAuthority","fortress-rekt","https:\/\/rekt.news\/fortress-rekt\/"],["Deus DAO - REKT",1615766400000,"3 M","Unaudited","deus-dao-rekt","https:\/\/rekt.news\/deus-dao-rekt\/"],["PancakeBunny - REKT 2",1626393600000,"2.400 M","Unaudited","pancakebunny2-rekt","https:\/\/rekt.news\/pancakebunny2-rekt\/"],["TempleDAO - REKT",1665446400000,"2.300 M","Unaudited","templedao-rekt","https:\/\/rekt.news\/templedao-rekt\/"],["Gym Network - REKT",1654646400000,"2.100 M","Out of scope","gymnet-rekt","https:\/\/rekt.news\/gymnet-rekt\/"],["Revest Finance - REKT",1648339200000,"2.010 M","Solidity Finance","revest-finance-rekt","https:\/\/rekt.news\/revest-finance-rekt\/"],["Dexible - REKT",1676592000000,"2 M","Unaudited","dexible-rekt","https:\/\/rekt.news\/dexible-rekt\/"],["MM Finance - REKT",1651622400000,"2 M","Unaudited","madmeerkat-finance-rekt","https:\/\/rekt.news\/madmeerkat-finance-rekt\/"],["DODO - REKT",1615248000000,"2 M","Unaudited","au-dodo-rekt","https:\/\/rekt.news\/au-dodo-rekt\/"],["Akropolis - REKT",1605139200000,"2 M","CertiK, SmartDec","akropolis-rekt","https:\/\/rekt.news\/akropolis-rekt\/"],["Hope Finance - REKT",1676851200000,"1.860 M","AuditRateTech, Cognitos","hope-finance-rekt","https:\/\/rekt.news\/hope-finance-rekt\/"],["Bent Finance - REKT",1640044800000,"1.750 M","Unaudited","bent-finance","https:\/\/rekt.news\/bent-finance\/"],["8ight Finance - REKT",1638921600000,"1.750 M","Unaudited","8ight-finance-rekt","https:\/\/rekt.news\/8ight-finance-rekt\/"],["Acala Network - REKT",1628812800000,"1.600 M","Out of scope","acala-network-rekt","https:\/\/rekt.news\/acala-network-rekt\/"],["Levyathan - REKT",1627603200000,"1.500 M","Unaudited","levyathan-rekt","https:\/\/rekt.news\/levyathan-rekt\/"],["Treasure DAO - REKT",1646265600000,"1.400 M","Unaudited","treasure-dao-rekt","https:\/\/rekt.news\/treasure-dao-rekt\/"],["The Big Combo (Growth DeFi - REKT)",1612828800000,"1.300 M","Consensys Diligence","the-big-combo","https:\/\/rekt.news\/the-big-combo\/"],["Sovryn - REKT",1664841600000,"1.111 M","Unaudited","sovryn-rekt","https:\/\/rekt.news\/sovryn-rekt\/"],["Autoshark - REKT",1621814400000,"745 K","Techrate","autoshark-rekt","https:\/\/rekt.news\/autoshark-rekt\/"],["Merlin Labs - REKT",1621987200000,"680 K","Hacken","merlinlabs-rekt","https:\/\/rekt.news\/merlinlabs-rekt\/"],["Midas Capital - REKT",1673740800000,"660 K","Out of scope","midas-capital-rekt","https:\/\/rekt.news\/midas-capital-rekt\/"],["Curve Finance - REKT",1660003200000,"575 K","N\/A","curve-finance-rekt","https:\/\/rekt.news\/curve-finance-rekt\/"],["Merlin Labs - REKT 2",1621987200000,"550 K","Unaudited","merlin2-rekt","https:\/\/rekt.news\/merlin2-rekt\/"],["Merlin Labs - R3KT",1624924800000,"330 K","Unaudited","merlin3-rekt","https:\/\/rekt.news\/merlin3-rekt\/"],["Saddle Finance - REKT",1611100800000,"275.735 K","Openzeppelin, Certik, Quantstamp","saddle-finance-rekt","https:\/\/rekt.news\/saddle-finance-rekt\/"],["SafeDollar - REKT",1624838400000,"248 K","Unaudited","safedollar-rekt","https:\/\/rekt.news\/safedollar-rekt\/"]]}`; - -const initialData = `{"columns":["Symbol","Name","Volume [$]","Market Cap","Market Cap Rank","7D Change [%]","24H Change [%]"],"index":[499,498,497,496,495,494,493,492,491,490,489,479,488,487,486,483,485,481,480,482,484,478,477,476,475,474,473,472,471,469,470,468,467,460,465,466,464,462,461,463,459,457,458,456,453,455,454,451,452,450,449,448,447,446,445,444,443,442,441,440,438,439,437,436,435,434,433,431,432,430,429,428,427,425,426,424,423,422,420,421,419,418,411,417,415,414,413,416,412,410,409,408,407,406,405,402,404,403,401,400,399,398,397,396,395,394,393,392,391,390,389,388,387,386,385,384,383,382,381,380,379,378,377,376,375,374,372,373,371,370,369,368,367,366,365,364,361,363,362,360,358,359,356,355,353,354,352,351,350,357,349,348,347,346,344,343,345,342,341,339,340,338,337,331,333,336,335,334,332,330,329,328,327,326,325,324,323,322,321,320,318,317,319,316,315,314,313,312,311,309,310,308,307,305,306,304,303,302,301,300,299,298,297,296,295,294,293,288,290,291,289,292,286,287,285,284,282,283,281,280,279,278,277,276,275,274,273,272,271,269,268,267,270,266,265,262,264,263,261,260,259,258,256,257,255,253,254,252,251,250,249,248,246,247,245,244,243,242,241,240,239,238,237,236,235,234,233,231,232,230,229,227,228,226,225,224,223,222,221,220,219,218,217,216,215,214,213,212,210,209,211,208,207,206,205,203,204,202,201,200,199,198,196,197,195,194,193,192,190,191,189,187,188,185,186,184,183,181,182,180,179,178,177,176,175,174,173,172,171,170,168,169,167,164,165,166,163,162,161,160,159,157,158,156,155,154,153,152,151,149,150,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,113,114,112,111,110,109,108,107,106,105,104,103,102,100,101,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0],"data":[["cre","Carry","5.2M","43.5M",501,-0.8424177903,-3.3009760144],["idex","IDEX","11M","43.7M",499,-5.4559449493,1.240113672],["quick","Quickswap [OLD]","5M","43.7M",498,-8.018028025,-2.795598108],["sweat","Sweatcoin (Sweat Economy)","839.8K","44.2M",497,-8.9515803275,-3.3416593468],["itamcube","CUBE","0","44.2M",496,23.7121984017,-0.1741412228],["etn","Electroneum","32.6K","44.3M",495,-10.8816668796,-4.1242543652],["ntx","NuNet","816.4K","44.6M",494,11.7859963823,-2.6336202899],["ufo","UFO Gaming","538.5K","44.9M",493,-5.9910130879,-2.7268239207],["xeta","XANA","392.3K","45.1M",492,-5.470390737,-5.7061485822],["mimatic","MAI","3.4M","45.2M",491,0.561481042,-0.1047229837],["lyra","Lyra Finance","984.5K","45.4M",490,-12.098217852,-5.8781732257],["idia","Impossible Finance Launchpad","77.4K","47.1M",489,-5.6403961751,9.2680943991],["bel","Bella Protocol","4.4M","45.6M",488,-14.8272842675,-3.550469001],["gmm","Gamium","17.1M","45.8M",487,281.2045758462,-6.0630196265],["lit","Litentry","6M","46.5M",486,-20.1750587117,-2.8750285947],["qlc","Kepple","1.2M","46.9M",485,-13.2426814764,-3.203515984],["alpaca","Alpaca Finance","1.8M","46.8M",484,-2.6642850668,-3.8981973354],["gas","Gas","10.7M","46.9M",483,-10.7939432682,-4.4469502033],["lina","Linear","10.6M","46.9M",482,-25.2051467069,-4.2609613292],["hifi","Hifi Finance","2.3M","46.9M",481,-3.3213558533,-1.6961048241],["vela","Vela Token","4.6M","46.8M",480,14.6907207382,7.5525624641],["loka","League of Kingdoms","4.4M","47.2M",479,-11.8983136717,-3.3555343776],["zcx","Unizen","633.6K","47.7M",478,3.2866895817,-1.4944833082],["mtrg","Meter Governance","346.5K","47.7M",477,-11.2848954835,-1.2060121189],["hi","hi Dollar","357.7K","47.7M",476,-21.8808896788,-6.5238729873],["caps","Ternoa","8.1M","47.9M",475,114.9571800081,-14.2310073566],["gmt","GMT Token","590.2K","47.9M",474,-3.0395263527,0.250389437],["iris","IRISnet","3.6M","48M",473,-3.3391741155,-7.6035909619],["loomold","Loom Network (OLD)","566.7K","48.4M",472,4.7898911205,-4.806436383],["plex","PLEX","5M","49.1M",471,-4.2367190298,-2.1357240063],["flm","Flamingo Finance","3.3M","48.7M",470,-12.9658236867,-2.0144674043],["sudo","sudoswap","3.6M","49.3M",469,-14.642097903,-6.2324277726],["ixt","IX","187.7K","49.4M",468,-5.952468485,1.2334527228],["velo","Velo","17.8M","50.5M",467,-3.477476871,-4.4343221367],["aurabal","Aura BAL","291.4K","49.9M",466,0.9712931494,-1.0740149829],["rev","Revain","224.3K","49.9M",465,-9.6627376753,-2.0936231012],["susd","sUSD","3.8M","49.9M",464,0.3068911644,0.0517358683],["koda","Koda Cryptocurrency","32","50.2M",463,-8.6012830143,-1.6067844178],["xcad","XCAD Network","2.1M","50.4M",462,5.0351403751,-2.433718922],["col","Clash of Lilliput","68.4K","50.2M",461,0.712888138,-6.0900409194],["lto","LTO Network","3.7M","50.8M",460,-0.2625277363,-3.1523877648],["bwo","Battle World","1.4M","51.1M",459,-7.5110878435,-0.3815669074],["pols","Polkastarter","2.8M","51.1M",458,-4.6707088648,-2.5983303032],["yfii","DFI.money","12.6M","51.5M",457,-6.2411449932,-2.2644301876],["gbex","Globiance Exchange","497.4K","51.9M",456,23.5489218223,-3.8786859983],["premia","Premia","92.3K","51.7M",455,-3.3094611056,-0.3951670703],["tt","ThunderCore","2.7M","51.8M",454,-2.4988319304,-3.6278672634],["qom","Shiba Predator","1.4M","51.9M",453,6.0580233256,-5.5203626939],["wan","Wanchain","1.5M","51.9M",452,-17.9390140694,-5.2160169051],["dfg","Defigram","183.1K","52M",451,4.2849672947,-4.2515441247],["krd","Krypton DAO","9.1K","52.4M",450,-0.5233374441,-0.8246037126],["vlx","Velas","1.2M","52.6M",449,-9.2201268038,-2.4680317184],["dero","Dero","68.5K","53.2M",448,-4.1921014737,-1.1908408884],["btrfly","Redacted","398.8K","53.3M",447,-21.1535383293,-8.1311035212],["utk","Utrust","2.7M","53.5M",446,-5.6640237127,-2.8576094798],["wnxm","Wrapped NXM","1.1M","53.7M",445,-1.5146393466,-3.4230125953],["phb","Phoenix Global","6.7M","53.9M",444,-5.0240324673,-4.8333634578],["mbx","Marblex","1.2M","54M",443,-9.8490115963,-4.4545138389],["bor","BoringDAO [OLD]","633","54.2M",442,-20.6372891922,-3.4626125015],["sx","SX Network","465.4K","54.3M",441,2.3916811879,-0.1802506011],["xvg","Verge","629.2K","54.8M",440,-3.1052190783,-1.3351224955],["kilt","KILT Protocol","57.3K","54.6M",439,-10.5717005268,-5.0847675384],["ctxc","Cortex","8.1M","54.8M",438,-6.9997713923,-4.975057969],["sfund","Seedify.fund","3.2M","55M",437,5.9760325599,0.2660415409],["flexusd","flexUSD","14","55.4M",436,-5.017416515,-1.5072206138],["efi","Efinity","966.6K","55.7M",435,-5.8491258285,-1.8475872653],["maticx","Stader MaticX","171.6K","55.8M",434,-12.6901332046,-1.783012869],["polis","Star Atlas DAO","341.4K","56.2M",433,-9.8476221987,-0.3247639535],["strk","Strike","4.2M","56.2M",432,-0.6103928247,-2.7437400849],["gods","Gods Unchained","1.4M","56.2M",431,-6.3937944891,-2.9193641455],["tlos","Telos","1.7M","56.4M",430,-21.6772616736,-4.6421583264],["temple","TempleDAO","10K","56.6M",429,null,null],["quack","Rich Quack","1M","56.6M",428,-7.7311778603,0.2961857888],["super","SuperVerse","3M","57.2M",427,-11.8907351187,-5.0374214992],["ray","Raydium","29M","56.9M",426,8.1037316483,7.450675177],["ygg","Yield Guild Games","9.9M","57.3M",425,-8.6388903349,-3.52993184],["meta","Metadium","4.8M","57.8M",424,-2.9645855065,-3.8270751689],["ssx","SOMESING Exchange","5.9M","58.7M",423,-4.00359604,-4.5136519849],["sdao","SingularityDAO","8.1M","58.9M",422,14.4469673238,-1.4839340699],["dxp","Vela Exchange","45.6K","58.7M",421,22.6756731164,12.9372107736],["rdpx","Dopex Rebate","1.4M","59M",420,4.8975147923,0.3256111877],["aergo","Aergo","5.8M","59.6M",419,-2.5537799145,-3.1869987871],["oxt","Orchid Protocol","16.4M","60.5M",418,0.1564469851,6.8243386098],["phb","Phoenix Global [OLD]","4","59.8M",417,-15.2172426841,0.1589768051],["xsgd","XSGD","3.9M","59.8M",416,-0.9458620052,-0.4809389517],["kishu","Kishu Inu","1.8M","59.8M",415,-16.0155741862,-4.6835869167],["hxro","Hxro","22.9K","60.1M",414,2.9270278183,5.8904950438],["leash","Doge Killer","2.2M","59.8M",413,-16.4243590024,-4.2781255137],["mxc","MXC","2.1M","60.3M",412,-9.7314124523,-4.5595371304],["ousd","Origin Dollar","393.7K","60.5M",411,-0.081750727,-0.1103856021],["mbl","MovieBloc","11.7M","60.5M",410,1.3629712628,-1.1286551398],["kuji","Kujira","87K","60.7M",409,-3.5858956554,-1.618052907],["storj","Storj","11.9M","61.1M",408,-6.9622887815,-4.3359526622],["bmex","BitMEX","105K","61.2M",407,-10.7120715581,-0.8043483247],["ata","Automata","2.8M","61.3M",406,-14.5319379664,-3.2378784238],["uos","Ultra","2.3M","62.8M",405,-1.2778233401,-1.0866222801],["sun","Sun Token","9.7M","61.9M",404,-2.6903340486,-2.4201318172],["dawn","Dawn Protocol","37.9M","62.7M",403,-1.0866707222,-1.3082229643],["btm","Bytom","2.2M","63M",402,41.5050515552,3.2585390885],["grv","GroveCoin","7.5M","63.1M",401,-4.0910579701,0.5391020662],["movr","Moonriver","2.5M","63.6M",400,-8.8620002387,-3.1174317681],["key","SelfKey","17.6M","64.5M",399,4.2258257741,-9.6663679437],["rdnt","Radiant Capital","9.9M","64.8M",398,7.8287388407,-1.8733011197],["xsushi","xSUSHI","11.2K","65M",397,-5.1155155549,-3.2834653257],["ark","ARK","3.3M","65.3M",396,-2.1841714032,-3.7653230195],["exrd","e-Radix","47.6K","66M",395,-10.3199820301,-3.4214980082],["vega","Vega Protocol","506.7K","66M",394,20.1105566779,-1.8910817204],["xyo","XYO Network","1.4M","66.4M",393,-14.4174577711,-4.4958424274],["mnw","Morpheus Network","531.8K","67.2M",392,-4.3626215619,-5.14048466],["gft","Gifto","14.6M","67.4M",391,-15.7612649079,-4.4930183613],["bitci","Bitcicoin","1.3M","67.7M",390,20.6021652373,-2.4870050185],["ogn","Origin Protocol","6.1M","67.8M",389,-9.0451846982,-2.8442210297],["sure","inSure DeFi","1.7M","68.3M",388,-7.5911375427,-1.2153489313],["badger","Badger DAO","7.7M","68.5M",387,-9.2856669425,-5.4330118753],["pcx","ChainX","435.4K","68.5M",386,4.9816898552,42.9796977411],["beta","Beta Finance","4.3M","68.5M",385,-2.389944073,-2.7827274909],["rep","Augur","6.7M","68.7M",384,-10.7185226256,-4.8534389789],["arrr","Pirate Chain","99.5K","68.9M",383,-14.538523842,-3.425140494],["veri","Veritaseum","6.8K","69M",382,5.2303396817,-5.4152127967],["shr","Share","184.2K","69.5M",381,-4.5031769451,-6.6837395392],["fidu","Fidu","4.3K","70M",380,1.1705003047,-0.5973502357],["dock","Dock","1.6M","70.4M",379,-5.4437323068,-1.8452634774],["reef","Reef","8.1M","70.9M",378,-7.8797963009,-1.2538291288],["dola","Dola","510.1K","71M",377,0.3992741415,-0.2287791556],["raca","Radio Caca","3.7M","71.4M",376,-9.4467154789,-2.9486388742],["aura","Aura Finance","1.8M","71.9M",375,-0.3515459783,-11.5531652852],["uqc","Uquid Coin","2.5M","72.4M",374,-0.9776894063,-0.7955658794],["wmt","World Mobile Token","780.7K","72.4M",373,-0.444726063,3.5554232937],["fun","FUN Token","985.4K","72.7M",372,-2.1373991192,-1.1796695987],["vra","Verasity","17.3M","72.8M",371,-16.1632789946,-0.5862570711],["ctk","Shentu","4.7M","73.1M",370,-4.3621203591,-2.1351665618],["tlm","Alien Worlds","6.1M","74.4M",369,-16.0959573719,-5.2553553901],["bnt","Bancor Network","4M","74.4M",368,-6.9083026615,-0.9890728307],["nkn","NKN","3.9M","75.3M",367,-10.6623400615,-4.1932139831],["stmx","StormX","1.2M","75.5M",366,-3.7745659431,-2.4056487388],["emaid","MaidSafeCoin","19.9K","76.3M",365,15.6622821364,16.880909312],["perp","Perpetual Protocol","120.7M","77.6M",364,41.1499476149,24.1593010316],["kwenta","Kwenta","1.4M","77.3M",363,19.939710147,1.3519077322],["lat","PlatON Network","2.9M","77.4M",362,-12.8555765939,-4.3293544651],["nrv","Nerve Finance","18.3K","77.7M",361,-6.7055767201,-0.1945976159],["qkc","QuarkChain","4.5M","78.8M",360,-3.1357377418,-1.9355966454],["lcx","LCX","697.8K","78.3M",359,-11.0627488996,1.5944994377],["ghst","Aavegotchi","8.7M","79.1M",358,-9.1624606997,-0.9503415719],["bsw","Biswap","6.9M","79.2M",357,-7.3121902715,-4.8110557032],["juno","JUNO","241.1K","79.3M",356,-9.6926721571,-1.6818898382],["ccd","Concordium","392.5K","79.2M",355,-0.2618271589,-2.7614361737],["hunt","Hunt","15.1M","80.3M",354,5.9986026645,-4.5367130537],["xvs","Venus","1.2M","80.9M",353,-9.5179268045,-2.5588841047],["tsuka","Dejitaru Tsuka","963.8K","81.1M",352,-23.5116841378,-12.7866761264],["xido","Xido Finance","357","78.9M",351,4.7245669828,0.9553963452],["mlk","MiL.k Alliance","4.3M","82.7M",350,-3.5206301075,-3.9567276735],["wrx","WazirX","1.3M","83.5M",349,-9.8730794102,-2.4944396019],["ton","Tokamak Network","4.9M","83.9M",348,-6.6786763285,-3.3467177336],["cqt","Covalent","2.4M","84.1M",347,25.4992879361,-15.4881665068],["mdx","Mdex","3.1M","84.6M",346,-8.8548901986,-2.3742306352],["akt","Akash Network","1.8M","85.4M",345,-16.9560007333,-9.9268855625],["mtl","Metal DAO","16.6M","84.4M",344,-4.7525807897,1.7716180764],["req","Request","1.6M","85.8M",343,-1.3505117607,-2.8757770585],["pokt","Pocket Network","1.5M","86.2M",342,-6.0148123724,-0.4153808622],["boba","Boba Network","588.5K","86.4M",341,2.1474189699,-3.3116908807],["hez","Hermez Network","214.9K","86.2M",340,-1.539422849,-1.3186456976],["volt","Volt Inu","8.2M","86.5M",339,-12.5178802521,-2.0694367426],["tru","TrueFi","31.8M","86.7M",338,35.2855205865,-7.2430924357],["solo","Sologenic","1.3M","88.4M",337,43.1721230406,10.3712333845],["ceek","CEEK Smart VR","4M","88M",336,-9.1630623008,0.0717009563],["joe","JOE","3.4M","87.7M",335,-7.0105190859,-3.0010904834],["strax","Stratis","6.4M","87.8M",334,-5.6995393812,-4.0808819294],["dusk","DUSK Network","13.7M","87.8M",333,-3.5073699135,-9.3157336957],["aca","Acala","10.3M","88M",332,-3.0990537045,-2.6001088275],["pyr","Vulcan Forged","6M","88.5M",331,-4.5623480663,-1.9684384075],["xprt","Persistence","762.2K","88.5M",330,0.4024939418,-0.0597783214],["pltc","PlatonCoin","5","88.6M",329,0.0,null],["powr","Power Ledger","32.3M","89.7M",328,1.723742189,-6.120343787],["gal","Galxe","11.7M","90M",327,-13.6420432727,-1.6029581512],["prom","Prom","1.7M","90.2M",326,-7.1915758777,-3.1046006137],["stpt","STP","8.9M","90.2M",325,-1.3157383584,-0.4924496127],["rlb","Rollbit Coin","2.9M","90.7M",324,-45.2652476221,-3.7177042497],["pha","Phala","8M","91.2M",323,-0.9804319032,0.9743388633],["pond","Marlin","3.6M","91.9M",322,-4.5223039612,-1.762708978],["spell","Spell","7.1M","93.1M",321,-7.3503043904,-1.6986234976],["rare","SuperRare","2.8M","93.6M",320,-7.2335492168,-4.7863046596],["stsol","Lido Staked SOL","1.1M","93.8M",319,-8.5746797916,-1.7467864491],["usdx","USDX","814.8K","93.5M",318,0.4458887178,0.1597310316],["mbox","Mobox","3.6M","94.5M",317,-10.6022147914,-1.0168676536],["win","WINkLink","6.8M","95.6M",316,-6.537219997,-1.0659722264],["rad","Radicle","2.3M","95.9M",315,-6.2606011873,-0.6050849025],["dpx","Dopex","1.4M","96.4M",314,6.9853182699,-5.6409264264],["dodo","DODO","28M","96.5M",313,4.830926646,-4.0554281039],["bfc","Bifrost","8.7M","97M",312,-0.2511778859,-12.0105031305],["chr","Chromia","24.6M","97.7M",311,-10.5396006333,-7.6500948286],["vtho","VeThor","1.6M","97.6M",310,-4.7854915153,-2.1732192404],["savax","BENQI Liquid Staked AVAX","1.7M","98.5M",309,-13.7024430523,-0.8775706465],["nym","Nym","2.6M","99M",308,0.4704735271,-2.954885099],["ankreth","Ankr Staked ETH","46.4K","99.2M",307,2.5001116218,0.3454578549],["mrs","Metars Genesis","59.5K","99.1M",306,15.9909759166,-6.481196151],["steem","Steem","5.7M","99.8M",305,-4.2125629015,-2.872627357],["msol","Marinade staked SOL","798K","100.1M",304,-8.3191854755,-1.6665272544],["iq","IQ","3.8M","100.3M",303,-6.7043939431,-3.8842819862],["sfrxeth","Staked Frax Ether","36.5K","100.4M",302,1.8172555766,-0.2680627384],["saitama","Saitama","1M","100.5M",301,-11.3300310206,-3.9498565271],["orbs","Orbs","2.9M","101M",300,-3.4831400331,-3.3830875426],["cvc","Civic","17.5M","101.7M",299,4.604258665,-3.8607066384],["sgb","Songbird","655.2K","101.8M",298,-12.3281131215,-1.4965134019],["ctc","Creditcoin","8.4M","102.1M",297,-11.882897004,-4.7934476992],["ardr","Ardor","3.9M","102.9M",296,-1.6161087173,-3.8343782504],["looks","LooksRare","10.2M","103M",295,-17.4718515989,-5.880718963],["erg","Ergo","876.3K","103.1M",294,-11.4338483076,0.2124097194],["hum","Humanscape","4.4M","104.5M",293,-1.9186338407,-4.24831355],["alpha","Alpha Venture DAO","1.9M","103.9M",292,-11.6501148952,-3.5746467628],["coti","COTI","8.7M","103.8M",291,-6.0089368917,-2.5662086289],["dka","dKargo","7.8M","104.3M",290,-4.094106076,-3.4263929872],["deso","Decentralized Social","1.1M","103.6M",289,7.6575098238,8.3864416553],["mvl","MVL","3.1M","105.5M",288,-2.753420243,-3.5144278578],["cfg","Centrifuge","348.3K","105.3M",287,-12.393791441,-8.5058669459],["wcfg","Wrapped Centrifuge","55.5K","106M",286,-11.8561466748,-8.4084335271],["ant","Aragon","4.1M","106.6M",285,-9.8141967683,-2.328614538],["ctsi","Cartesi","7.5M","107.6M",284,-12.6422703321,-2.0052155627],["dexe","DeXe","2.2M","107.6M",283,-5.9708719179,-2.4087093064],["med","Medibloc","24.6M","110.4M",282,2.8523086712,1.879739819],["dent","Dent","3.9M","110.6M",281,-6.5237618884,-1.9690081135],["ult","Shardus","3.9K","111.2M",280,-2.1612252165,0.3063836092],["c98","Coin98","10.7M","111.3M",279,-18.9481152018,-0.9678985929],["vgx","Voyager VGX","29.7M","112.1M",278,-22.3632495094,-2.390001365],["srm","Serum","8.6M","114M",277,-9.7384903393,-2.5156065983],["10set","Tenset","108.8K","115M",276,-16.11014717,-4.4828810428],["snt","Status","5.3M","116M",275,-1.9189423815,-3.2704461604],["mim","Magic Internet Money","1M","116.4M",274,-0.5950879837,-0.9152233386],["alice","My Neighbor Alice","15.5M","117.4M",273,-8.4733809881,-2.7094989489],["tribe","Tribe","267.6K","117.5M",272,-1.2267306584,-0.4025912392],["hook","Hooked Protocol","29.7M","118.3M",271,-3.5964955147,-2.7102078995],["hft","Hashflow","29.2M","118.3M",270,-6.7176764913,-2.4982132693],["cusdt","cUSDT","4","118.5M",269,null,null],["eul","Euler","1M","118.2M",268,4.886813651,-6.7958968911],["celr","Celer Network","10.2M","118.7M",267,-14.4474654546,-1.7002946993],["fx","Function X","1.5M","118.9M",266,-19.8608338356,-1.1126644123],["rly","Rally","85.3M","120.1M",265,103.6837511367,58.5697973532],["xno","Nano","1.2M","119.6M",264,-6.3700335255,-1.398697037],["keep","Keep Network","304.9K","119.9M",263,13.0496782317,13.4295782095],["seth2","sETH2","283.3K","120.4M",262,-0.0622809102,-0.5523421645],["gtc","Gitcoin","7M","124.6M",261,-1.0148844932,-4.7308943718],["ren","REN","56.3M","125.1M",260,16.9761446837,-5.5741459051],["nmr","Numeraire","18.8M","125.7M",259,0.0676731965,-5.6156261891],["api3","API3","6M","127.8M",258,-13.3947324414,-1.0207083595],["cet","CoinEx","1.1M","127.5M",257,-5.7950208296,0.2503384769],["sys","Syscoin","1.5M","128.7M",256,-11.2596726978,-2.0905938405],["vvs","VVS Finance","498.3K","130.4M",255,-7.6943240527,-2.3979936757],["slp","Smooth Love Potion","8.9M","129.9M",254,-3.2051809805,-1.2436627363],["pundix","Pundi X","14M","130.8M",253,-12.6259862613,-5.2842833058],["nest","Nest Protocol","1.1M","130.9M",252,-7.1385752804,-0.8885889984],["trac","OriginTrail","1.1M","131.4M",251,-12.2208908154,-7.0300557401],["eurs","STASIS EURO","50.8K","131.5M",250,-0.2256599277,-0.7986405069],["dag","Constellation","582.9K","132.9M",249,-3.8448153763,0.8205512496],["knc","Kyber Network Crystal","23.2M","133M",248,-4.69202685,-4.9097644211],["people","ConstitutionDAO","17.3M","133M",247,-5.6887387434,-2.0516773469],["cocos","COCOS BCX","58.7M","133.2M",246,-20.7988737768,-12.1198471792],["axl","Axelar","2.1M","133.3M",245,3.9449758915,-1.7494436324],["mc","Merit Circle","2.8M","134.1M",244,-2.4422550565,-2.8402445722],["elf","aelf","106.1M","134.6M",243,12.2886083094,3.6059359182],["nft","APENFT","5.9M","136.5M",242,-2.9488846587,-0.0344811032],["metis","Metis","4.8M","136.8M",241,-13.6645735671,-2.465167019],["rlc","iExec RLC","7.2M","137.4M",240,-5.1078892875,-4.4231004105],["pla","PlayDapp","13.4M","139M",239,1.6288840838,-3.4399826204],["bld","Agoric","873.5K","140.8M",238,-14.5258917548,-9.8084122822],["ron","Ronin","1M","141.7M",237,-0.0253933079,-1.4339619547],["blid","Bolide","39.3K","142.7M",236,5.6668491136,-0.258349504],["polyx","Polymesh","10M","143.1M",235,-4.4035084596,-4.2488612705],["rbn","Ribbon Finance","530.2K","144.2M",234,-4.2155060059,-3.9600243297],["sfm","SafeMoon","612.7K","149.5M",233,-0.8507828737,-2.1153632839],["lyxe","LUKSO","1.5M","149.4M",232,-6.9794453672,-3.7228863114],["uma","UMA","9.5M","153.5M",231,-8.6374413528,-1.8700892326],["stg","Stargate Finance","53.8M","158M",230,-16.031247193,-7.1521858523],["zen","Horizen","17.1M","160.2M",229,-11.3383117994,-2.8438588299],["evmos","Evmos","1.1M","160.1M",228,-0.3324593597,-6.0018425913],["kub","Bitkub Coin","351.4K","160.7M",227,-1.8506467084,-0.9867217013],["acs","Access Protocol","11.3M","161.4M",226,-53.1465752103,-17.203234412],["bdx","Beldex","1.9M","164.3M",225,-0.4796594857,1.2100203136],["hive","Hive","5.4M","164.9M",224,-5.639622858,-3.8380400384],["lqty","Liquity","45.7M","165.4M",223,72.9600161815,-6.2340901446],["scrt","Secret","4M","166.6M",222,1.9380351828,-2.5687527659],["lsk","Lisk","1.3M","167.2M",221,-4.2762472137,-3.1388054117],["ckb","Nervos Network","31M","168M",220,-11.7679560003,-4.3220480994],["ach","Alchemy Pay","45.1M","168.3M",219,-25.0925735316,-5.0532334194],["ever","Everscale","2.9M","168.6M",218,-10.4019562496,-1.3873161424],["mx","MX","645.2K","170.2M",217,31.3278339897,8.688978892],["alusd","Alchemix USD","486.4K","172.6M",216,-0.0804668872,-0.3291488256],["canto","CANTO","26.8M","172.7M",215,-20.7076023156,-12.0137135943],["ocean","Ocean Protocol","31.2M","174.1M",214,-10.9849263646,-4.5404972768],["rif","RSK Infrastructure Framework","20.8M","175.2M",213,23.5771103942,-1.9013330091],["sxp","SXP","13.5M","177.2M",212,-5.5607618033,-3.6459127176],["frxeth","Frax Ether","1.9M","178.7M",211,0.1109305689,-0.5846687524],["flex","FLEX Coin","71.6K","176.9M",210,28.8170279099,-6.7277500707],["dgb","DigiByte","3M","179.6M",209,-8.7770628128,-1.9638466309],["core","Core","47.8M","184M",208,-2.9971978218,-3.9560027655],["poly","Polymath","1.4M","185.3M",207,0.0525542592,1.5420168086],["tel","Telcoin","1.5M","189.7M",206,8.1651522265,-1.5580121111],["sfp","SafePal","4.1M","190.6M",205,-8.6118610593,-1.3279478667],["lpt","Livepeer","10.7M","190.5M",204,-16.7367877815,-3.3365108728],["ilv","Illuvium","28.5M","194.4M",203,8.2852771978,-0.6379917523],["ewt","Energy Web","3.6M","196.2M",202,-5.5122909562,-7.5070816738],["bora","BORA","12.4M","196.6M",201,-0.4794441083,-4.5079169253],["skl","SKALE","16.3M","197.7M",200,-13.5307156504,-3.6081309621],["cel","Celsius Network","8.7M","198.1M",199,-0.8889850573,-5.4449459404],["waxp","WAX","16.8M","200M",198,-0.2372179925,-5.2820182319],["multi","Multichain","1.5M","199.8M",197,-4.0390539385,-1.9178108328],["btc.b","Bitcoin Avalanche Bridged (BTC.b)","3.7M","200.9M",196,-2.780152915,-0.4837483403],["chsb","SwissBorg","303.9K","204.5M",195,-3.5689392385,-1.5631440262],["brise","Bitgert","2.2M","208.6M",194,10.5059112295,-4.2325970816],["hbtc","Huobi BTC","58.6K","210.3M",193,-3.5064158029,0.2323105966],["flux","Flux","7.8M","217.7M",192,-5.9514218919,-4.2265992349],["ont","Ontology","14.9M","217.6M",191,-10.9022034984,-5.6452382559],["eurt","Euro Tether","1.2M","218.2M",190,0.0411970314,-0.773997133],["ali","Artificial Liquid Intelligence","3.8M","218.5M",189,4.3675043181,-15.3844566953],["xcn","Onyxcoin","8.7M","218.3M",188,-19.6020360615,-0.8509198799],["sc","Siacoin","11.2M","221.1M",187,-3.6238197639,-5.5144279806],["bico","Biconomy","6.5M","220.6M",186,6.6556305693,-5.9173592756],["gns","Gains Network","14.1M","222.5M",185,-14.3350125427,-8.6756704408],["syn","Synapse","20M","225.9M",184,-25.223861428,-8.4938940557],["elon","Dogelon Mars","3.7M","227.6M",183,-5.245280282,-0.8941374684],["icx","ICON","14.4M","226.8M",182,1.5502590295,-3.9053438087],["iost","IOST","92.1M","228.5M",181,0.3382766536,4.3584663033],["elg","Escoin","154.4K","228.8M",180,-4.2153110709,-1.107465184],["rsr","Reserve Rights","12M","231.1M",179,-1.6380405796,-3.7016202681],["lusd","Liquity USD","3.3M","231.2M",178,0.1106644203,-0.0342556818],["omg","OMG Network","18M","234.5M",177,-9.4911110878,-2.6341661027],["zrx","0x","69M","235.2M",176,5.8759808667,-10.5372908715],["dao","DAO Maker","4.9M","236.3M",175,12.5478340043,7.4637351668],["cvxcrv","Convex CRV","848.6K","236.8M",174,-15.3199711914,-5.1108934684],["band","Band Protocol","10.4M","243.8M",173,-6.2780750349,-3.7653582323],["kas","Kaspa","4.5M","244M",172,103.7702462192,11.5778969446],["kda","Kadena","8.2M","245.8M",171,-12.0354426563,-0.5091760814],["glmr","Moonbeam","14.9M","251.8M",170,-13.8227187103,0.1551713313],["sushi","Sushi","47.8M","251.7M",169,-6.3765661373,-3.0803466934],["gmt","STEPN","244.6M","254.9M",168,-2.4465873575,5.635719645],["mask","Mask Network","58.1M","257M",167,-1.7522889457,-8.3713391572],["waves","Waves","75.3M","257M",166,-8.8171452922,0.5371417701],["iotx","IoTeX","14.7M","256.9M",165,-10.9145862649,-2.4616183677],["jst","JUST","17M","258.2M",164,-4.8302763358,-2.8141717988],["xch","Chia","6.2M","260.9M",163,-7.8650627865,1.0254258105],["ustc","TerraClassicUSD","19.3M","264.4M",162,0.0983795845,-0.1035689438],["one","Harmony","16.6M","264.8M",161,-12.4805135839,-2.5544740859],["gfarm2","Gains Farm","8K","267M",160,-11.4896166336,-4.5301093798],["glm","Golem","13.3M","268.6M",159,-2.8680685308,-1.4644673035],["omi","ECOMI","905K","268.4M",158,-14.8709203339,-2.5529243555],["bal","Balancer","9.4M","276.5M",157,-2.3779569601,-3.1730285389],["safemoon","SafeMoon [OLD]","0","277.8M",156,-3.9373790541,-0.8435813084],["gno","Gnosis","2.3M","279.4M",155,0.6636997342,-0.6913523475],["jasmy","JasmyCoin","44.4M","280.4M",154,-12.0293537769,-1.9214666867],["ln","LINK","798.5K","283.8M",153,-19.2495791165,-2.6954842494],["ohm","Olympus","660.9K","284.8M",152,-1.7920359034,-0.2999481889],["ssv","SSV Network","43.7M","293.4M",151,13.5133989341,-3.0754709714],["inj","Injective","23.1M","291.4M",150,-2.1860486625,-0.0115571163],["ecoin","Ecoin","88","295.1M",149,62.6060484568,27.7749639178],["astrafer","Astrafer","52K","296.3M",148,-3.1605878885,0.1975087547],["cdt","Blox","104.4K","296.8M",147,52.1414225522,2.3559701935],["audio","Audius","19.1M","300.3M",146,-3.7332121599,-5.4654779796],["gala","GALA","102.1M","301.9M",145,-11.3809446202,-2.7575408813],["btg","Bitcoin Gold","14.6M","302.2M",144,-7.5371547558,0.3549950056],["amp","Amp","14.2M","306.1M",143,-11.8184627892,0.4802793357],["ankr","Ankr Network","59.6M","307.4M",142,-23.0470712896,-4.7565883449],["nu","NuCypher","450.7M","315.4M",141,59.6063378427,58.3692821424],["astr","Astar","12.2M","316.9M",140,-14.7617260532,-5.2861351512],["azero","Aleph Zero","1.9M","318.4M",139,-10.9001881893,-2.6246984758],["nxm","Nexus Mutual","6.3K","319.8M",138,0.5599532324,-0.8915661385],["blur","Blur","196.5M","320.8M",137,-23.8845459588,-6.9860533963],["ksm","Kusama","18.6M","326M",136,-12.0088253029,-3.4365304424],["rose","Oasis Network","25.7M","327.4M",135,-10.4861334138,-1.2608741126],["magic","Magic","43.6M","330.3M",134,-14.0664929896,-3.2718151254],["qtum","Qtum","27.3M","339.9M",133,-11.4626207077,-3.6625492537],["comp","Compound","21.1M","341M",132,-8.2903316267,-2.923983633],["yfi","yearn.finance","178.7M","345.1M",131,23.7967552956,1.360271028],["dcr","Decred","1M","347.2M",130,-6.2297305733,-1.218962729],["woo","WOO Network","17.2M","348.9M",129,-8.3244191294,-3.3184512853],["rvn","Ravencoin","14.1M","351.9M",128,-12.4325583166,-4.4748070299],["tfuel","Theta Fuel","18.4M","353.1M",127,0.8227132266,-3.5188965462],["hot","Holo","26.5M","360.8M",126,-8.8606644663,-2.7350163861],["reth","Rocket Pool ETH","2.9M","363.5M",125,-0.3632175168,-0.500094323],["dfi","DeFiChain","2.7M","366M",124,-7.984840013,-0.4182501507],["celo","Celo","17.1M","368.8M",123,-9.1103441071,-3.2243758666],["hnt","Helium","1.7M","369.1M",122,-10.5602955076,-2.7056093255],["kava","Kava","16.3M","370.5M",121,-4.6488263294,-2.9646588535],["nexo","NEXO","7.5M","372.7M",120,-10.477846452,-5.5423760234],["babydoge","Baby Doge Coin","7.8M","378.7M",119,-19.3587168261,-6.5908896315],["bone","Bone ShibaSwap","11.8M","383.4M",118,-11.9436296932,-2.5856515061],["luna","Terra","52.5M","390.9M",117,-3.3446501229,-0.2392622682],["ethw","EthereumPoW","14.8M","396.8M",116,-6.7657373039,-1.7250977063],["xdc","XDC Network","3.9M","403.5M",115,7.5174828157,5.2423226855],["ens","Ethereum Name Service","36.9M","400.6M",114,-4.1711514433,-2.4217411794],["flr","Flare","8.6M","418.6M",113,-11.3722168262,-2.6341376467],["btse","BTSE Token","169.2K","422.3M",112,10.5217623246,-1.8683297771],["xem","NEM","28.2M","428.8M",111,10.1831386101,-5.805122748],["bat","Basic Attention","42.1M","435.7M",110,-11.3353847729,-2.6832862782],["floki","FLOKI","40.6M","437.4M",109,-15.4152639923,-4.2912356217],["xrd","Radix","601.1K","442M",108,-7.2882830682,-1.6659353531],["lrc","Loopring","42.7M","443.1M",107,-13.5604604329,-1.6197835718],["rndr","Render","54.2M","451.5M",106,-6.6000230372,-0.0206253681],["xaut","Tether Gold","608.6K","453.7M",105,0.2057186927,0.1715074295],["cvx","Convex Finance","8.3M","457.3M",104,-1.7806637367,-4.2307909908],["dydx","dYdX","216.1M","458.3M",103,13.2595741618,-6.5451300442],["ceth","cETH","5.3K","459.4M",102,1.6089817405,-0.9047237704],["paxg","PAX Gold","7.6M","459.1M",101,0.7312569459,-0.3772773898],["enj","Enjin Coin","22.8M","463.2M",100,-4.6851628043,-3.0851646202],["cspr","Casper Network","20M","466.9M",99,9.1386627353,6.8997775386],["1inch","1inch","24.5M","468.5M",98,-12.2324998515,-3.6776469923],["cfx","Conflux","200.2M","468.8M",97,-20.4007523337,-7.0553733522],["ar","Arweave","45.4M","484.1M",96,-13.6954179518,-3.3568500981],["fet","Fetch.ai","123.3M","484.2M",95,5.6965458715,-4.8805547543],["rune","THORChain","60.6M","491.7M",94,-4.4516081218,-1.8069985219],["osmo","Osmosis","12.8M","492.2M",93,-9.8598463596,-3.8072597329],["zil","Zilliqa","34.6M","498M",92,-13.0123057366,-3.9744531705],["tkx","Tokenize Xchange","6.4M","508.3M",91,-0.4521480556,-1.1005438988],["zec","Zcash","33.8M","524.3M",90,-9.29966044,-1.0185326678],["wemix","WEMIX","7.3M","525.2M",89,-16.2874812088,-5.3343454529],["edgt","Edgecoin","49.9M","525.3M",88,0.2763449575,-0.1668267112],["okt","OKC","10.1M","531M",87,-3.426809894,-4.8656753375],["twt","Trust Wallet","21.4M","538.2M",86,-9.9338328996,-3.3291919632],["cdai","cDAI","254","544.1M",85,-0.1370074086,-0.0564508695],["wbt","WhiteBIT Token","1.1M","558M",84,-0.5297448072,-0.1230729428],["gusd","Gemini Dollar","987K","561.3M",83,-0.049033567,-0.1777205048],["op","Optimism","259.9M","582.9M",82,0.5213764185,-0.8014935808],["cusdc","cUSDC","2","599.8M",81,-0.0959118713,-0.039731295],["bgb","Bitget Token","15.1M","602.1M",80,10.7787724352,0.1932974056],["gmx","GMX","47.2M","615.2M",79,-3.029160538,-4.9885349404],["agix","SingularityNET","175.8M","632.1M",78,31.7303750079,-3.8036511638],["xec","eCash","6.7M","662.5M",77,-8.6215713126,-1.7806497236],["miota","IOTA","15.8M","663M",76,-6.5404130391,-4.7325435787],["btt","BitTorrent","13M","693.1M",75,-0.0065756281,-1.1318488357],["bit","BitDAO","6.9M","708M",74,-4.1047294415,-1.9148227017],["chz","Chiliz","79.8M","717.1M",73,-3.4648391686,-1.9004874555],["usdd","USDD","36.3M","722.3M",72,-0.0750251361,-0.0784111916],["gt","Gate","744K","729.1M",71,1.9289909356,-2.5935389539],["cake","PancakeSwap","21.7M","737.5M",70,-4.8260097473,-0.9363889594],["crv","Curve DAO","63.8M","744.5M",69,-10.7259716471,-3.5718991542],["usdp","Pax Dollar","531.1K","774.9M",68,0.4596523316,-0.2752969024],["klay","Klaytn","106.1M","785.7M",67,-16.5439538852,-7.7490600601],["mkr","Maker","66.3M","795.5M",66,16.3210528117,-5.985258982],["bsv","Bitcoin SV","38.1M","806.7M",65,-4.6817741382,0.1556958186],["dash","Dash","108.5M","807.4M",64,-1.6479257911,-1.7221316177],["fxs","Frax Share","54.9M","829.1M",63,6.3040552286,-7.8386386041],["mina","Mina Protocol","96.1M","831.6M",62,-1.3039405032,0.3767275484],["imx","ImmutableX","31.9M","839.3M",61,-2.9386278786,-6.541131374],["ht","Huobi","11.9M","840.4M",60,-3.9150142129,-1.0396398312],["rpl","Rocket Pool","10.5M","845.3M",59,-11.0031946514,-5.5638969691],["kcs","KuCoin","1.3M","862.6M",58,1.2359602196,0.4403053069],["neo","NEO","61.1M","876M",57,-8.5528705703,-2.3530457387],["snx","Synthetix Network","90.3M","909.5M",56,15.7352387909,-4.4799521775],["lunc","Terra Luna Classic","149.2M","996.8M",55,2.9956746548,2.2559161703],["frax","Frax","13.7M","1B",54,0.1083604397,-0.1589488194],["xtz","Tezos","30.8M","1.1B",53,-18.4815577865,-1.7242562195],["axs","Axie Infinity","46.7M","1.1B",52,-8.162939169,-2.6031743386],["aave","Aave","56.1M","1.1B",51,-6.0794201139,-3.2103576814],["egld","MultiversX","46.1M","1.2B",50,-6.4668590185,-4.3832685028],["tusd","TrueUSD","47.2M","1.2B",49,0.0462047673,-0.1769450643],["mana","Decentraland","71.9M","1.2B",48,-8.6684443646,-2.0066674275],["theta","Theta Network","24.2M","1.2B",47,-1.4133365333,-1.980935975],["flow","Flow","23M","1.2B",46,-8.3803049619,-3.872499026],["ftm","Fantom","212.1M","1.2B",45,-12.4653613699,-4.5373516452],["sand","The Sandbox","127.8M","1.2B",44,-9.8711399666,-1.5519980279],["stx","Stacks","246.3M","1.3B",43,26.5044052349,-5.3819983122],["eos","EOS","193M","1.4B",42,2.6326803264,3.1137261133],["grt","The Graph","71.7M","1.4B",41,-5.7119746801,-3.6316269373],["icp","Internet Computer","46M","1.7B",40,-11.9409433472,-3.3273753139],["algo","Algorand","56.7M","1.7B",39,-10.6849660757,-3.2550140642],["ape","ApeCoin","105.1M","1.8B",38,-9.4447956436,-1.5702201862],["qnt","Quant","19M","1.8B",37,-7.4392504723,-0.6558199668],["hbar","Hedera","42.1M","1.9B",36,-17.2144810363,-2.975174227],["near","NEAR Protocol","89.4M","1.9B",35,-10.4694331963,-2.6571305507],["cro","Cronos","21.3M","1.9B",34,-8.3458211347,-2.9114430229],["vet","VeChain","69.8M","2B",33,-8.6132829352,-4.0529853862],["apt","Aptos","330.2M","2.2B",32,-7.6839261394,-2.8988748444],["xlm","Stellar","50.9M","2.3B",31,-5.2409253358,-0.2119946396],["bch","Bitcoin Cash","457.8M","2.5B",30,-7.3065446317,-1.8064940376],["ldo","Lido DAO","168.6M","2.6B",29,3.6191517731,-0.2769401965],["fil","Filecoin","344.9M","2.7B",28,-14.7825129502,-4.855004928],["xmr","Monero","94.5M","2.8B",27,-3.8204951204,-0.3901958735],["etc","Ethereum Classic","120.1M","2.9B",26,-6.4045575132,-0.8052142074],["leo","LEO Token","276.5K","3.1B",25,-1.3482603128,-0.3620006703],["link","Chainlink","283.4M","3.6B",24,-6.0468220884,-3.2946660036],["ton","Toncoin","30.5M","3.6B",23,-1.659421446,-3.7301247133],["wbtc","Wrapped Bitcoin","161.1M","3.6B",22,-2.9022313213,-0.403233771],["atom","Cosmos Hub","110M","3.6B",21,-8.5445030077,-2.0526394974],["uni","Uniswap","66.8M","5B",20,-4.4619549027,-2.87056613],["dai","Dai","195.7M","5B",19,0.0857478297,0.0837932365],["avax","Avalanche","151.1M","5.6B",18,-14.2256787613,-1.294928427],["trx","TRON","260M","6.4B",17,0.7375527667,0.075379056],["ltc","Litecoin","477.5M","6.9B",16,0.170831318,-2.3645069682],["shib","Shiba Inu","218.7M","7.1B",15,-7.7576763537,-1.0314842763],["dot","Polkadot","237.7M","7.6B",14,-12.2172781032,-2.8497593086],["sol","Solana","329.3M","8.4B",13,-8.7090333176,-1.4022402134],["steth","Lido Staked Ether","20.9M","9.4B",12,0.2428514566,-0.5583503266],["busd","Binance USD","6.4B","9.7B",11,-0.0410055134,0.1065032089],["matic","Polygon","472.8M","11B",10,-12.7810020966,-1.6290017724],["doge","Dogecoin","285.4M","11.1B",9,-5.7004583609,-1.7422482843],["ada","Cardano","244.4M","12.3B",8,-9.8597080601,-2.6763866835],["okb","OKB","52M","12.4B",7,-3.5306618155,-1.1849951354],["xrp","XRP","918.6M","19.3B",6,-4.1737202076,-1.1968855613],["usdc","USD Coin","3.4B","43.1B",5,0.0072426471,-0.0868131801],["bnb","BNB","372.6M","47.3B",4,-4.0847854279,-0.8259215573],["usdt","Tether","34.5B","71.1B",3,0.0733324279,-0.0371107676],["eth","Ethereum","8B","198.2B",2,0.1514006534,-0.5090095311],["btc","Bitcoin","27.7B","452.8B",1,-2.8048043155,-0.143585142]]}`; diff --git a/frontend-components/tables/src/components/Icons/Close.tsx b/frontend-components/tables/src/components/Icons/Close.tsx new file mode 100644 index 00000000000..bd5d2c1750b --- /dev/null +++ b/frontend-components/tables/src/components/Icons/Close.tsx @@ -0,0 +1,28 @@ +import type { SVGProps } from "react"; +interface SVGRProps { + title?: string; + titleId?: string; +} + +const CloseIcon = ({ + title, + titleId, + ...props +}: SVGProps & SVGRProps) => ( + + + +); + +export default CloseIcon; diff --git a/frontend-components/tables/src/components/Icons/CloseCircle.tsx b/frontend-components/tables/src/components/Icons/CloseCircle.tsx new file mode 100644 index 00000000000..a6ab356aee1 --- /dev/null +++ b/frontend-components/tables/src/components/Icons/CloseCircle.tsx @@ -0,0 +1,32 @@ +import type { SVGProps } from "react"; +interface SVGRProps { + title?: string; + titleId?: string; +} + +const CloseCircleIcon = ({ + title, + titleId, + ...props +}: SVGProps & SVGRProps) => ( + + {title ? {title} : null} + + +); + +export default CloseCircleIcon; diff --git a/frontend-components/tables/src/components/Icons/Info.tsx b/frontend-components/tables/src/components/Icons/Info.tsx new file mode 100644 index 00000000000..1250d27f2ca --- /dev/null +++ b/frontend-components/tables/src/components/Icons/Info.tsx @@ -0,0 +1,32 @@ +import type { SVGProps } from "react"; +interface SVGRProps { + title?: string; + titleId?: string; +} + +const InfoIcon = ({ + title, + titleId, + ...props +}: SVGProps & SVGRProps) => ( + + {title ? {title} : null} + + +); + +export default InfoIcon; diff --git a/frontend-components/tables/src/components/Icons/Success.tsx b/frontend-components/tables/src/components/Icons/Success.tsx new file mode 100644 index 00000000000..e9271a10cb3 --- /dev/null +++ b/frontend-components/tables/src/components/Icons/Success.tsx @@ -0,0 +1,39 @@ +import type { SVGProps } from "react"; +interface SVGRProps { + title?: string; + titleId?: string; +} + +const SuccessIcon = ({ + title, + titleId, + ...props +}: SVGProps & SVGRProps) => ( + + {title ? {title} : null} + + + +); + +export default SuccessIcon; diff --git a/frontend-components/tables/src/components/Icons/Warning.tsx b/frontend-components/tables/src/components/Icons/Warning.tsx new file mode 100644 index 00000000000..3a82f08ed91 --- /dev/null +++ b/frontend-components/tables/src/components/Icons/Warning.tsx @@ -0,0 +1,32 @@ +import type { SVGProps } from "react"; +interface SVGRProps { + title?: string; + titleId?: string; +} + +const WarningIcon = ({ + title, + titleId, + ...props +}: SVGProps & SVGRProps) => ( + + {title ? {title} : null} + + +); + +export default WarningIcon; diff --git a/frontend-components/tables/src/components/Select.tsx b/frontend-components/tables/src/components/Select.tsx new file mode 100644 index 00000000000..b500de08b82 --- /dev/null +++ b/frontend-components/tables/src/components/Select.tsx @@ -0,0 +1,116 @@ +import * as SelectPrimitive from "@radix-ui/react-select"; +import { + CheckIcon, + ChevronDownIcon, + ChevronUpIcon, +} from "@radix-ui/react-icons"; +import { forwardRef } from "react"; +import clsx from "clsx"; + +const Select = ({ + value, + onChange, + label = "Select", + placeholder = "Select a fruit…", + groups, + labelType = "col", +}: { + value: string; + onChange: (value: string) => void; + label?: string; + placeholder?: string; + labelType?: "col" | "row"; + groups: { + label: string; + items: { + label: string; + value: string | number; + disabled?: boolean; + }[]; + }[]; +}) => { + const onlyOneGroup = groups.length === 1; + return ( + + + + {label} + + + + + + + + + + + + + + + {onlyOneGroup ? ( + + {groups[0].items.map((item) => ( + + {item.label} + + ))} + + ) : ( + groups.map((group, idx) => ( + + + {group.label} + + {group.items.map((item) => ( + + {item.label} + + ))} + + )) + )} + + + + + + + + ); +}; + +const SelectItem = forwardRef( + ({ children, className, ...props }, forwardedRef) => { + return ( + + {children} + + + + + ); + } +); + +export default Select; diff --git a/frontend-components/tables/src/components/Table.tsx b/frontend-components/tables/src/components/Table.tsx deleted file mode 100644 index f25ded1bedb..00000000000 --- a/frontend-components/tables/src/components/Table.tsx +++ /dev/null @@ -1,837 +0,0 @@ -//@ts-nocheck -import { - ColumnDef, - flexRender, - getCoreRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - Row, - SortingState, - useReactTable, -} from "@tanstack/react-table"; -import { rankItem } from "@tanstack/match-sorter-utils"; -import { utils, writeFile } from "xlsx"; -import { useDrag, useDrop } from "react-dnd"; -import clsx from "clsx"; -import { FC, useEffect, useMemo, useReducer, useRef, useState } from "react"; -import { useVirtual } from "react-virtual"; -import domtoimage from "dom-to-image"; -import Chart from "./Chart"; - -function formatNumberMagnitude(number: number) { - if (number < 10) { - return number.toFixed(4); - } else if (number < 100) { - return number.toFixed(3); - } else if (number < 1000) { - return number.toFixed(2); - } - const abs = Math.abs(number); - if (abs >= 1000000000) { - return `${(number / 1000000000).toFixed(2)}B`; - } else if (abs >= 1000000) { - return `${(number / 1000000).toFixed(2)}M`; - } else if (abs >= 1000) { - return `${(number / 1000).toFixed(2)}K`; - } else { - return number.toFixed(2); - } -} - -const FONT_SIZES_CLASSES = { - small: { - overall: "text-sm", - header: "text-sm", - cell: "text-xs", - }, - medium: { - overall: "text-base", - header: "text-base", - cell: "text-sm", - }, - large: { - overall: "text-base", - header: "text-lg", - cell: "text-base", - }, -}; - -const reorderColumn = ( - draggedColumnId: string, - targetColumnId: string, - columnOrder: string[] -) => { - columnOrder.splice( - columnOrder.indexOf(targetColumnId), - 0, - columnOrder.splice(columnOrder.indexOf(draggedColumnId), 1)[0] as string - ); - return [...columnOrder]; -}; - -const DraggableColumnHeader: FC<{ - header: any; - table: any; - advanced: boolean; -}> = ({ header, table, advanced }) => { - const { getState, setColumnOrder } = table; - const { columnOrder } = getState(); - const { column } = header; - - const [, dropRef] = useDrop({ - accept: "column", - drop: (draggedColumn: any) => { - const newColumnOrder = reorderColumn( - draggedColumn.id, - column.id, - columnOrder - ); - setColumnOrder(newColumnOrder); - }, - }); - - const [{ isDragging }, dragRef, previewRef] = useDrag({ - collect: (monitor) => ({ - isDragging: monitor.isDragging(), - }), - item: () => column, - type: "column", - }); - - return ( - - ); -}; - -export const fuzzyFilter = (row, columnId, value, addMeta) => { - const itemRank = rankItem(row.getValue(columnId), value); - addMeta(itemRank); - return itemRank; -}; - -export default function Table({ data, columns }: any) { - const [fontSize, setFontSize] = useState("medium"); - - const increaseFontSize = () => { - if (fontSize === "small") { - setFontSize("medium"); - } else if (fontSize === "medium") { - setFontSize("large"); - } - }; - - const decreaseFontSize = () => { - if (fontSize === "large") { - setFontSize("medium"); - } else if (fontSize === "medium") { - setFontSize("small"); - } - }; - - const [advanced, setAdvanced] = useState(false); - const rerender = useReducer(() => ({}), {})[1]; - const [sorting, setSorting] = useState([]); - const [globalFilter, setGlobalFilter] = useState(""); - const rtColumns = useMemo( - () => [ - { - id: "select", - size: 0, - header: ({ table }) => ( - - ), - cell: ({ row }) => ( -
- -
- ), - }, - ...columns.map((column: any) => ({ - accessorKey: column, - id: column, - header: column, - footer: column, - cell: ({ row }: any) => { - const value = row.original[column]; - const valueType = typeof value; - const probablyDate = - column.toLowerCase().includes("date") || - column.toLowerCase() === "index"; - const probablyLink = - valueType === "string" && value.startsWith("http"); - - //TODO - Parse as HTML to make links work if string doesn't start with http - //TODO - Max Column Size - if (probablyLink) { - return ( - - {value} - - ); - } - if (probablyDate) { - if (typeof value === "string") { - return

{value}

; - } - - try { - var dateFormatted = new Date(value).toISOString(); - - // TODO - Remove 00:00:00 from date - - dateFormatted = - dateFormatted.split("T")[0] + - " " + - dateFormatted.split("T")[1].split(".")[0]; - return

{dateFormatted}

; - } catch (e) { - return

{value}

; - } - } - const valueFormatted = - valueType === "number" ? formatNumberMagnitude(value) : value; - return ( -

0, - "text-[#F87171]": value < 0, - "text-[#404040]": value === 0, - })} - > - {value !== 0 - ? value > 0 - ? `${valueFormatted}` - : `${valueFormatted}` - : valueFormatted} -

- ); - }, - })), - ], - [] - ); - - const [columnOrder, setColumnOrder] = useState( - rtColumns.map((column) => column.id as string) - ); - - const resetOrder = () => - setColumnOrder(columns.map((column) => column.id as string)); - - const table = useReactTable({ - data, - defaultColumn: { - minSize: 0, - size: 0, - }, - columns: rtColumns, - state: { - sorting, - globalFilter, - columnOrder, - }, - onColumnOrderChange: setColumnOrder, - onSortingChange: setSorting, - getCoreRowModel: getCoreRowModel(), - getSortedRowModel: getSortedRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), - onGlobalFilterChange: setGlobalFilter, - }); - - const tableContainerRef = useRef(null); - const { rows } = table.getRowModel(); - const rowVirtualizer = useVirtual({ - parentRef: tableContainerRef, - size: rows.length, - overscan: 10, - }); - const { virtualItems: virtualRows, totalSize } = rowVirtualizer; - - const paddingTop = virtualRows.length > 0 ? virtualRows?.[0]?.start || 0 : 0; - const paddingBottom = - virtualRows.length > 0 - ? totalSize - (virtualRows?.[virtualRows.length - 1]?.end || 0) - : 0; - - const saveToFile = (blob, fileName) => { - const url = URL.createObjectURL(blob); - const link = document.createElement("a"); - link.setAttribute("href", url); - link.setAttribute("download", fileName); - link.style.visibility = "hidden"; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - }; - - const downloadData = (type: "csv" | "xlsx") => { - const headers = columns; - const rows = data.map((row) => headers.map((column) => row[column])); - const csvData = [headers, ...rows]; - if (type === "csv") { - const csvContent = csvData.map((e) => e.join(",")).join("\n"); - const blob = new Blob([csvContent], { type: "text/csv;charset=utf-8;" }); - saveToFile(blob, `${window.title}.csv`); - } else { - const wb = utils.book_new(); - const ws = utils.aoa_to_sheet(csvData); - utils.book_append_sheet(wb, ws, "Sheet1"); - writeFile(wb, `${window.title}.xlsx`); - } - }; - - const downloadImage = () => { - const table = document.getElementById("table"); - domtoimage.toBlob(table).then(function (blob) { - saveToFile(blob, `${window.title}.png`); - }); - }; - - const [dialog, setDialog] = useState(null); - - return ( - <> - {dialog && ( - <> -
setDialog(null)} - className="fixed inset-0 bg-black bg-opacity-50 z-40 backdrop-filter backdrop-blur-sm" - /> -
- -
- - )} -
-
-
- - OpenBB - - - - -
- - setAdvanced(!advanced)} - /> -
-
- {advanced && ( - <> -
- - setGlobalFilter(String(value))} - className="_input" - placeholder="Search all columns..." - /> -
- -
- - -
-
-
- -
- {table.getAllLeafColumns().map((column) => { - return ( -
- -
- ); - })} -
- - )} -
-
-
- {header.isPlaceholder ? null : ( - <> -
- {flexRender(header.column.columnDef.header, header.getContext())} - - {{ - asc: "🔼", - desc: "🔽", - }[header.column.getIsSorted() as string] ?? null} - - {advanced && } -
- {advanced && header.column.getCanFilter() ? ( -
- -
- ) : null} - - )} -
-
- - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => { - return ( - - ); - })} - - ))} - - - {paddingTop > 0 && ( - - - )} - {virtualRows.map((virtualRow, idx) => { - const row = rows[virtualRow.index]; - return ( - - {row.getVisibleCells().map((cell) => { - return ( - - ); - })} - - ); - })} - {paddingBottom > 0 && ( - - - )} - - - {table.getFooterGroups().map((footerGroup) => ( - - {footerGroup.headers.map((header) => ( - - ))} - - ))} - -
-
- {flexRender( - cell.column.columnDef.cell, - cell.getContext() - )} -
-
- {header.isPlaceholder - ? null - : flexRender( - header.column.columnDef.footer, - header.getContext() - )} -
-
- {advanced && ( -
- - - - - -
Page
- - {table.getState().pagination.pageIndex + 1} of{" "} - {table.getPageCount()} - -
- - | Go to page: - { - const page = e.target.value - ? Number(e.target.value) - 1 - : 0; - table.setPageIndex(page); - }} - className="border p-1 rounded w-16" - /> - - -
- )} - - - - - -
-
- - ); -} - -function Filter({ - column, - table, - numberOfColumns, -}: { - column: any; - table: any; - numberOfColumns: number; -}) { - const firstValue = table - .getPreFilteredRowModel() - .flatRows[0]?.getValue(column.id); - - const columnFilterValue = column.getFilterValue(); - - const isProbablyDate = - column.id.toLowerCase().includes("date") || - column.id.toLowerCase() === "index"; - - if (isProbablyDate) { - function getTime(value) { - if (!value) return null; - const date = new Date(value); - const year = date.getFullYear(); - const month = - date.getMonth() + 1 > 9 - ? date.getMonth() + 1 - : `0${date.getMonth() + 1}`; - const day = date.getDate() > 9 ? date.getDate() : `0${date.getDate()}`; - return `${year}-${month}-${day}`; - } - - return ( -
- { - const value = new Date(e.target.value).getTime(); - column.setFilterValue((old: [string, string]) => [value, old?.[1]]); - }} - placeholder={`Start date`} - className="_input" - /> - { - const value = new Date(e.target.value).getTime(); - column.setFilterValue((old: [string, string]) => [old?.[0], value]); - }} - placeholder={`End date`} - className="_input" - /> -
- ); - } - - return typeof firstValue === "number" ? ( -
4, - "flex-row": numberOfColumns <= 4, - })} - > - - column.setFilterValue((old: [number, number]) => [ - e.target.value, - old?.[1], - ]) - } - placeholder={`Min`} - className="_input" - /> - - column.setFilterValue((old: [number, number]) => [ - old?.[0], - e.target.value, - ]) - } - placeholder={`Max`} - className="_input" - /> -
- ) : ( - column.setFilterValue(e.target.value)} - placeholder={`Search...`} - className="_input" - /> - ); -} - -type Props = { - value: string | number; - onChange: (value: string | number) => void; - debounce?: number; -} & Omit, "onChange">; - -const DebouncedInput: FC = ({ - value: initialValue, - onChange, - debounce = 500, - ...props -}) => { - const [value, setValue] = useState(initialValue); - - const handleInputChange = (event: React.ChangeEvent) => - setValue(event.target.value); - - useEffect(() => { - setValue(initialValue); - }, [initialValue]); - - useEffect(() => { - const timeout = setTimeout(() => { - onChange(value); - }, debounce); - - return () => clearTimeout(timeout); - }, [value]); - - return ; -}; - -function IndeterminateCheckbox({ - indeterminate, - className = "", - ...rest -}: { indeterminate?: boolean } & HTMLProps) { - const ref = useRef(null!); - - useEffect(() => { - if (typeof indeterminate === "boolean") { - ref.current.indeterminate = !rest.checked && indeterminate; - } - }, [ref, indeterminate]); - - return ( - - ); -} diff --git a/frontend-components/tables/src/components/Table/ColumnHeader.tsx b/frontend-components/tables/src/components/Table/ColumnHeader.tsx new file mode 100644 index 00000000000..d4b82ddf9af --- /dev/null +++ b/frontend-components/tables/src/components/Table/ColumnHeader.tsx @@ -0,0 +1,268 @@ +import { flexRender } from "@tanstack/react-table"; +import clsx from "clsx"; +import { FC } from "react"; +import { useDrag, useDrop } from "react-dnd"; + +function Filter({ + column, + table, + numberOfColumns, +}: { + column: any; + table: any; + numberOfColumns: number; +}) { + const values = table + .getPreFilteredRowModel() + .flatRows.map((row) => row.getValue(column.id)); + + const areAllValuesString = values.every( + (value) => typeof value === "string" || value === null + ); + const areAllValuesNumber = values.every( + (value) => typeof value === "number" || value === null + ); + + const valuesContainStringWithSpaces = values.some( + (value) => typeof value === "string" && value.includes(" ") + ); + + const columnFilterValue = column.getFilterValue(); + + const isProbablyDate = + column.id.toLowerCase().includes("date") || + (column.id.toLowerCase() === "index" && !valuesContainStringWithSpaces); + + if (isProbablyDate) { + function getTime(value) { + if (!value) return null; + const date = new Date(value); + const year = date.getFullYear(); + const month = + date.getMonth() + 1 > 9 + ? date.getMonth() + 1 + : `0${date.getMonth() + 1}`; + const day = date.getDate() > 9 ? date.getDate() : `0${date.getDate()}`; + return `${year}-${month}-${day}`; + } + + return ( +
+ { + const value = new Date(e.target.value).getTime(); + column.setFilterValue((old: [string, string]) => [value, old?.[1]]); + }} + placeholder={`Start date`} + className="_input" + /> + { + const value = new Date(e.target.value).getTime(); + column.setFilterValue((old: [string, string]) => [old?.[0], value]); + }} + placeholder={`End date`} + className="_input" + /> +
+ ); + } + + if (areAllValuesNumber) { + return ( +
+ + column.setFilterValue((old: [number, number]) => [ + e.target.value, + old?.[1], + ]) + } + placeholder={`Min`} + className="_input p-0.5" + /> + + column.setFilterValue((old: [number, number]) => [ + old?.[0], + e.target.value, + ]) + } + placeholder={`Max`} + className="_input p-0.5" + /> +
+ ); + } + if (areAllValuesString) { + return ( +
+ column.setFilterValue(e.target.value)} + placeholder={`Search...`} + className="_input" + /> +
+ ); + } + return
; +} + +const reorderColumn = ( + draggedColumnId: string, + targetColumnId: string, + columnOrder: string[] +) => { + columnOrder.splice( + columnOrder.indexOf(targetColumnId), + 0, + columnOrder.splice(columnOrder.indexOf(draggedColumnId), 1)[0] as string + ); + return [...columnOrder]; +}; + +const DraggableColumnHeader: FC<{ + header: any; + table: any; + advanced: boolean; +}> = ({ header, table, advanced }) => { + const { getState, setColumnOrder } = table; + const { columnOrder } = getState(); + const { column } = header; + + const [, dropRef] = useDrop({ + accept: "column", + drop: (draggedColumn: any) => { + const newColumnOrder = reorderColumn( + draggedColumn.id, + column.id, + columnOrder + ); + setColumnOrder(newColumnOrder); + }, + }); + + const [{ isDragging }, dragRef, previewRef] = useDrag({ + collect: (monitor) => ({ + isDragging: monitor.isDragging(), + }), + item: () => column, + type: "column", + }); + + return ( + +
+ {header.isPlaceholder ? null : ( + <> +
+
+ {flexRender( + header.column.columnDef.header, + header.getContext() + )} + {header.column.getCanSort() && ( +
+ + +
+ )} +
+ {advanced && column.id !== "select" && ( + + )} +
+ {advanced && header.column.getCanFilter() ? ( +
+ +
+ ) : null} + + )} +
+ + + ); +}; + +export default DraggableColumnHeader; diff --git a/frontend-components/tables/src/components/Table/DebouncedInput.tsx b/frontend-components/tables/src/components/Table/DebouncedInput.tsx new file mode 100644 index 00000000000..7029bea9cfe --- /dev/null +++ b/frontend-components/tables/src/components/Table/DebouncedInput.tsx @@ -0,0 +1,61 @@ +import { FC, useEffect, useState } from "react"; + +type Props = { + value: string | number; + onChange: (value: string | number) => void; + debounce?: number; +} & Omit, "onChange">; + +const DebouncedInput: FC = ({ + value: initialValue, + onChange, + debounce = 500, + ...props +}) => { + const [value, setValue] = useState(initialValue); + + const handleInputChange = (event: React.ChangeEvent) => + setValue(event.target.value); + + useEffect(() => { + setValue(initialValue); + }, [initialValue]); + + useEffect(() => { + const timeout = setTimeout(() => { + onChange(value); + }, debounce); + + return () => clearTimeout(timeout); + }, [value]); + + return ( +
+
+ +
+ +
+ ); +}; + +export default DebouncedInput; diff --git a/frontend-components/tables/src/components/Table/Export.tsx b/frontend-components/tables/src/components/Table/Export.tsx new file mode 100644 index 00000000000..e78d5491c4b --- /dev/null +++ b/frontend-components/tables/src/components/Table/Export.tsx @@ -0,0 +1,55 @@ +import { useState } from "react"; +import { downloadData, downloadImage } from "../../utils/utils"; +import * as RadioGroup from "@radix-ui/react-radio-group"; +import useLocalStorage from "../../utils/useLocalStorage"; +const types = ["csv", "xlsx", "png"]; + +export default function Export({ columns, data }: { columns: any; data: any }) { + const [type, setType] = useLocalStorage("exportType", types[0]); + + const onExport = () => { + switch (type) { + case "csv": + downloadData("csv", columns, data); + break; + case "xlsx": + downloadData("xlsx", columns, data); + break; + case "png": + downloadImage("table"); + break; + } + }; + return ( +
+

Export:

+ + {types.map((key) => ( +
+ + + + +
+ ))} +
+ +
+ ); +} diff --git a/frontend-components/tables/src/components/Table/FilterColumns.tsx b/frontend-components/tables/src/components/Table/FilterColumns.tsx new file mode 100644 index 00000000000..f87add49804 --- /dev/null +++ b/frontend-components/tables/src/components/Table/FilterColumns.tsx @@ -0,0 +1,117 @@ +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +import { CheckIcon, ChevronDownIcon } from "@radix-ui/react-icons"; +import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; +import { useEffect, useRef, useState } from "react"; +import useOnClickOutside from "../../utils/useClickOutside"; +import clsx from "clsx"; + +export default function FilterColumns({ + label, + table, +}: { + label: string; + table: any; +}) { + const [open, setOpen] = useState(false); + const ref = useRef(null); + + useOnClickOutside(ref, () => setOpen(false)); + + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === "Escape") { + setOpen(false); + } + }; + document.addEventListener("keydown", handleKeyDown); + return () => document.removeEventListener("keydown", handleKeyDown); + }, []); + + return ( + + + + {label} + + setOpen(!open)} + className="bg-grey-900 whitespace-nowrap h-[36px] border-[1.5px] border-grey-700 rounded p-3 inline-flex items-center justify-center leading-none gap-[5px] shadow-[0_2px_10px] shadow-black/10 focus:shadow-[0_0_0_2px] focus:shadow-black data-[placeholder]:text-white outline-none" + aria-label={label} + > + Filter columns + + + + + + + + + {table + .getAllLeafColumns() + .filter((column: any) => column.id !== "select") + .map((column: any) => { + return ( + + + + ); + })} + + + + ); +} + +/* +
+
+ +
+ {table.getAllLeafColumns().map((column) => { + return ( +
+ +
+ ); + })} +
+ */ diff --git a/frontend-components/tables/src/components/Table/InderterminateCheckbox.tsx b/frontend-components/tables/src/components/Table/InderterminateCheckbox.tsx new file mode 100644 index 00000000000..64b95406115 --- /dev/null +++ b/frontend-components/tables/src/components/Table/InderterminateCheckbox.tsx @@ -0,0 +1,26 @@ +import { HTMLProps, useEffect, useRef } from "react"; + +function IndeterminateCheckbox({ + indeterminate, + className = "", + ...rest +}: { indeterminate?: boolean } & HTMLProps) { + const ref = useRef(null!); + + useEffect(() => { + if (typeof indeterminate === "boolean") { + ref.current.indeterminate = !rest.checked && indeterminate; + } + }, [ref, indeterminate]); + + return ( + + ); +} + +export default IndeterminateCheckbox; diff --git a/frontend-components/tables/src/components/Table/Pagination.tsx b/frontend-components/tables/src/components/Table/Pagination.tsx new file mode 100644 index 00000000000..af1e8ec68ab --- /dev/null +++ b/frontend-components/tables/src/components/Table/Pagination.tsx @@ -0,0 +1,99 @@ +import clsx from "clsx"; +import { useState } from "react"; +import { DEFAULT_ROWS_PER_PAGE } from "."; +import useLocalStorage from "../../utils/useLocalStorage"; +import Select from "../Select"; + +export default function Pagination({ table }: { table: any }) { + const [currentPage, setCurrentPage] = useLocalStorage( + "rowsPerPage", + DEFAULT_ROWS_PER_PAGE + ); + const totalRows = table.getFilteredRowModel().rows.length; + + return ( +
+ { + const page = e.target.value ? Number(e.target.value) - 1 : 0; + table.setPageIndex(page); + }} + className="_input" + /> + */} +
+ + + + +
+
+ ); +} diff --git a/frontend-components/tables/src/components/Table/Timestamp.tsx b/frontend-components/tables/src/components/Table/Timestamp.tsx new file mode 100644 index 00000000000..732158af199 --- /dev/null +++ b/frontend-components/tables/src/components/Table/Timestamp.tsx @@ -0,0 +1,45 @@ +import { useEffect, useState } from "react"; + +export default function Timestamp() { + const [counter, setCounter] = useState(0); + useEffect(() => { + const interval = setInterval(() => { + setCounter((counter) => counter + 10); + }, 10000); + return () => clearInterval(interval); + }, []); + + const minutesPassed = Math.floor(counter / 60); + + return ( +
+ + + + + + + + + + + + + {minutesPassed > 0 ? `${minutesPassed} minutes ago` : "Just now"} + +
+ ); +} diff --git a/frontend-components/tables/src/components/Table/index.tsx b/frontend-components/tables/src/components/Table/index.tsx new file mode 100644 index 00000000000..85bbcaeb68d --- /dev/null +++ b/frontend-components/tables/src/components/Table/index.tsx @@ -0,0 +1,611 @@ +import { + flexRender, + getCoreRowModel, + getFilteredRowModel, + getPaginationRowModel, + getSortedRowModel, + SortingState, + useReactTable, +} from "@tanstack/react-table"; +import clsx from "clsx"; +import { useMemo, useRef, useState } from "react"; +import { useVirtual } from "react-virtual"; +import Select from "../Select"; +import { formatNumberMagnitude, fuzzyFilter, isEqual } from "../../utils/utils"; +import DraggableColumnHeader from "./ColumnHeader"; +import Pagination from "./Pagination"; +import Export from "./Export"; +import Timestamp from "./Timestamp"; +import FilterColumns from "./FilterColumns"; +import xss from "xss"; +import useLocalStorage from "../../utils/useLocalStorage"; +import Toast from "../Toast"; + +const date = new Date(); + +const MAX_COLUMNS = 50; +export const DEFAULT_ROWS_PER_PAGE = 30; + +function getCellWidth(row, column) { + try { + const indexLabel = row.hasOwnProperty("index") + ? "index" + : row.hasOwnProperty("Index") + ? "Index" + : null; + const indexValue = indexLabel ? row[indexLabel] : null; + const value = row[column]; + const valueType = typeof value; + const probablyDate = + column.toLowerCase().includes("date") || + column.toLowerCase() === "index" || + (indexValue && + typeof indexValue == "string" && + (indexValue.toLowerCase().includes("date") || + indexValue.toLowerCase().includes("day") || + indexValue.toLowerCase().includes("time") || + indexValue.toLowerCase().includes("timestamp") || + indexValue.toLowerCase().includes("year") || + indexValue.toLowerCase().includes("month") || + indexValue.toLowerCase().includes("week") || + indexValue.toLowerCase().includes("hour") || + indexValue.toLowerCase().includes("minute"))); + + const probablyLink = valueType === "string" && value.startsWith("http"); + if (probablyLink) { + return value?.toString().length ?? 0; + } + if (probablyDate) { + if (typeof value === "string") { + return value?.toString().length ?? 0; + } + try { + const date = new Date(value); + let dateFormatted = ""; + if ( + date.getUTCHours() === 0 && + date.getUTCMinutes() === 0 && + date.getUTCSeconds() === 0 && + date.getMilliseconds() === 0 + ) { + dateFormatted = date.toISOString().split("T")[0]; + } else { + dateFormatted = date.toISOString(); + dateFormatted = + dateFormatted.split("T")[0] + + " " + + dateFormatted.split("T")[1].split(".")[0]; + } + + return dateFormatted?.toString().length ?? 0; + } catch (e) { + return value?.toString().length ?? 0; + } + } + if (valueType === "number") { + return value?.toString().length ?? 0; + } else { + return value?.toString().length ?? 0; + } + } catch (e) { + return 0; + } +} + +export default function Table({ data, columns, title, source = "" }: any) { + const [advanced, setAdvanced] = useLocalStorage("advanced", false); + const [colors, setColors] = useLocalStorage("colors", false); + const [sorting, setSorting] = useState([]); + const [globalFilter, setGlobalFilter] = useState(""); + const [fontSize, setFontSize] = useLocalStorage("fontSize", "1"); + const [open, setOpen] = useState(columns.length > MAX_COLUMNS); + const defaultVisibleColumns = columns.reduce((acc, cur, idx) => { + acc[cur] = idx < MAX_COLUMNS ? true : false; + return acc; + }, {}); + const [columnVisibility, setColumnVisibility] = useState( + defaultVisibleColumns + ); + + const getColumnWidth = (rows, accessor, headerText) => { + const maxWidth = 400; + const magicSpacing = 12; + const cellLength = Math.max( + ...rows.map((row) => getCellWidth(row, accessor)), + headerText.length + 8 + ); + return Math.min(maxWidth, cellLength * magicSpacing); + }; + + const rtColumns = useMemo( + () => [ + ...columns.map((column: any, index: number) => ({ + accessorKey: column, + id: column, + header: column, + size: getColumnWidth(data, column, column), + footer: column, + cell: ({ row }: any) => { + const indexLabel = row.original.hasOwnProperty("index") + ? "index" + : row.original.hasOwnProperty("Index") + ? "Index" + : null; + const indexValue = indexLabel ? row.original[indexLabel] : null; + const value = row.original[column]; + const valueType = typeof value; + const probablyDate = + column.toLowerCase().includes("date") || + column.toLowerCase() === "index" || + (indexValue && + typeof indexValue == "string" && + (indexValue.toLowerCase().includes("date") || + indexValue.toLowerCase().includes("day") || + indexValue.toLowerCase().includes("time") || + indexValue.toLowerCase().includes("timestamp") || + indexValue.toLowerCase().includes("year") || + indexValue.toLowerCase().includes("month") || + indexValue.toLowerCase().includes("week") || + indexValue.toLowerCase().includes("hour") || + indexValue.toLowerCase().includes("minute"))); + + const probablyLink = + valueType === "string" && value.startsWith("http"); + + if (probablyLink) { + return ( + + {value} + + ); + } + if (probablyDate) { + if (typeof value === "string") { + return

{value}

; + } + + try { + const date = new Date(value); + let dateFormatted = ""; + if ( + date.getUTCHours() === 0 && + date.getUTCMinutes() === 0 && + date.getUTCSeconds() === 0 && + date.getMilliseconds() === 0 + ) { + dateFormatted = date.toISOString().split("T")[0]; + } else { + dateFormatted = date.toISOString(); + dateFormatted = + dateFormatted.split("T")[0] + + " " + + dateFormatted.split("T")[1].split(".")[0]; + } + + return

{dateFormatted}

; + } catch (e) { + return

{value}

; + } + } + if (valueType === "number") { + const valueFormatted = formatNumberMagnitude(value); + return ( +

0 && colors, + "text-[#F87171]": value < 0 && colors, + "text-[#404040]": value === 0 && colors, + })} + > + {value !== 0 + ? value > 0 + ? `${valueFormatted}` + : `${valueFormatted}` + : valueFormatted} +

+ ); + } else if (valueType === "string") { + return
; + } + return

{value}

; + }, + })), + ], + [advanced, colors] + ); + + const [columnOrder, setColumnOrder] = useState( + rtColumns.map((column) => column.id as string) + ); + + const resetOrder = () => + setColumnOrder(columns.map((column) => column.id as string)); + + const needsReorder = useMemo(() => { + const currentOrder = columnOrder.map((columnId) => columnId); + const defaultOrder = rtColumns.map((column) => column.id as string); + return !isEqual(currentOrder, defaultOrder); + }, [columnOrder, rtColumns]); + + const table = useReactTable({ + data, + columns: rtColumns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + columnResizeMode: "onChange", + onColumnVisibilityChange: setColumnVisibility, + onColumnOrderChange: setColumnOrder, + onSortingChange: setSorting, + onGlobalFilterChange: setGlobalFilter, + globalFilterFn: fuzzyFilter, + state: { + sorting, + globalFilter, + columnOrder, + columnVisibility, + }, + initialState: { + pagination: { + pageIndex: 0, + pageSize: DEFAULT_ROWS_PER_PAGE, + }, + }, + }); + + const tableContainerRef = useRef(null); + const { rows } = table.getRowModel(); + + // virtualization is making a visual bug where the rows keep switching the colors, disabling it for now + + /*const rowVirtualizer = useVirtual({ + parentRef: tableContainerRef, + size: rows.length, + overscan: 10, + }); + + const { virtualItems: virtualRows, totalSize } = rowVirtualizer; + + const paddingTop = virtualRows.length > 0 ? virtualRows?.[0]?.start || 0 : 0; + const paddingBottom = + virtualRows.length > 0 + ? totalSize - (virtualRows?.[virtualRows.length - 1]?.end || 0) + : 0; +*/ + + // also disabling generating a chart for now, will come back to it later + //const [dialog, setDialog] = useState(null); + + const visibleColumns = table.getVisibleFlatColumns(); + + return ( + <> + + + {/*dialog && ( + <> +
setDialog(null)} + className="fixed inset-0 bg-black bg-opacity-50 z-40 backdrop-filter backdrop-blur-sm" + /> +
+ +
+ + )*/} +
+
+
+
+ setAdvanced(!advanced)} + /> + +
+ {advanced && ( +
+ setColors(!colors)} + /> + +
+ )} + {/*advanced && ( + setGlobalFilter(String(value))} + placeholder="Search..." + /> + )*/} +
+ + {advanced && ( +
+ {needsReorder && ( + + )} +