diff --git a/package-lock.json b/package-lock.json
index f1c0d55..be48f31 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,27 +8,37 @@
"name": "triggerfrontend",
"version": "0.0.0",
"dependencies": {
- "@iconify/react": "^4.1.1",
- "@mantine/core": "^7.9.1",
- "@mantine/hooks": "^7.9.1",
- "@tanstack/react-query": "^5.36.0",
- "jotai": "^2.8.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "react-icons": "^5.2.1",
- "react-query": "^3.39.3"
+ "@emotion/react": "^11.13.0",
+ "@iconify/react": "^5.0.2",
+ "@mantine/core": "^7.12.1",
+ "@mantine/dates": "^7.12.1",
+ "@mantine/form": "^7.12.1",
+ "@mantine/hooks": "^7.12.1",
+ "@mantine/modals": "^7.12.1",
+ "@tabler/icons-react": "^3.12.0",
+ "@tanstack/react-query": "^5.51.23",
+ "clsx": "^2.1.1",
+ "dayjs": "^1.11.12",
+ "jotai": "^2.9.3",
+ "mantine-react-table": "^2.0.0-beta.6",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-icons": "^5.3.0",
+ "react-query": "^3.39.3",
+ "react-router-dom": "^6.26.0",
+ "react-toastify": "^10.0.5"
},
"devDependencies": {
- "@types/react": "^18.2.66",
- "@types/react-dom": "^18.2.22",
- "@typescript-eslint/eslint-plugin": "^7.2.0",
- "@typescript-eslint/parser": "^7.2.0",
- "@vitejs/plugin-react": "^4.2.1",
- "eslint": "^8.57.0",
- "eslint-plugin-react-hooks": "^4.6.0",
- "eslint-plugin-react-refresh": "^0.4.6",
- "typescript": "^5.2.2",
- "vite": "^5.2.0"
+ "@types/react": "^18.3.3",
+ "@types/react-dom": "^18.3.0",
+ "@typescript-eslint/eslint-plugin": "^8.1.0",
+ "@typescript-eslint/parser": "^8.1.0",
+ "@vitejs/plugin-react": "^4.3.1",
+ "eslint": "^9.9.0",
+ "eslint-plugin-react-hooks": "^4.6.2",
+ "eslint-plugin-react-refresh": "^0.4.9",
+ "typescript": "^5.5.4",
+ "vite": "^5.4.0"
}
},
"node_modules/@ampproject/remapping": {
@@ -48,7 +58,6 @@
"version": "7.24.2",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
- "dev": true,
"dependencies": {
"@babel/highlight": "^7.24.2",
"picocolors": "^1.0.0"
@@ -183,7 +192,6 @@
"version": "7.24.3",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
"integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
- "dev": true,
"dependencies": {
"@babel/types": "^7.24.0"
},
@@ -247,7 +255,6 @@
"version": "7.24.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
"integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -256,7 +263,6 @@
"version": "7.24.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz",
"integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -288,7 +294,6 @@
"version": "7.24.5",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz",
"integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==",
- "dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.24.5",
"chalk": "^2.4.2",
@@ -391,7 +396,6 @@
"version": "7.24.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz",
"integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==",
- "dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.24.1",
"@babel/helper-validator-identifier": "^7.24.5",
@@ -401,10 +405,129 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@emotion/babel-plugin": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz",
+ "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/serialize": "^1.2.0",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+ },
+ "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@emotion/cache": {
+ "version": "11.13.1",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz",
+ "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/sheet": "^1.4.0",
+ "@emotion/utils": "^1.4.0",
+ "@emotion/weak-memoize": "^0.4.0",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="
+ },
+ "node_modules/@emotion/react": {
+ "version": "11.13.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.0.tgz",
+ "integrity": "sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.12.0",
+ "@emotion/cache": "^11.13.0",
+ "@emotion/serialize": "^1.3.0",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0",
+ "@emotion/utils": "^1.4.0",
+ "@emotion/weak-memoize": "^0.4.0",
+ "hoist-non-react-statics": "^3.3.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.0.tgz",
+ "integrity": "sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==",
+ "dependencies": {
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/unitless": "^0.9.0",
+ "@emotion/utils": "^1.4.0",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
+ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg=="
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.9.0.tgz",
+ "integrity": "sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ=="
+ },
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz",
+ "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==",
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@emotion/utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz",
+ "integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ=="
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
+ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg=="
+ },
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
- "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
"cpu": [
"ppc64"
],
@@ -418,9 +541,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
- "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
"cpu": [
"arm"
],
@@ -434,9 +557,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
- "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
"cpu": [
"arm64"
],
@@ -450,9 +573,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
- "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
"cpu": [
"x64"
],
@@ -466,9 +589,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
- "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
"cpu": [
"arm64"
],
@@ -482,9 +605,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
- "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
"cpu": [
"x64"
],
@@ -498,9 +621,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
- "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
"cpu": [
"arm64"
],
@@ -514,9 +637,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
- "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
"cpu": [
"x64"
],
@@ -530,9 +653,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
- "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
"cpu": [
"arm"
],
@@ -546,9 +669,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
- "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
"cpu": [
"arm64"
],
@@ -562,9 +685,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
- "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
"cpu": [
"ia32"
],
@@ -578,9 +701,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
- "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
"cpu": [
"loong64"
],
@@ -594,9 +717,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
- "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
"cpu": [
"mips64el"
],
@@ -610,9 +733,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
- "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
"cpu": [
"ppc64"
],
@@ -626,9 +749,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
- "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
"cpu": [
"riscv64"
],
@@ -642,9 +765,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
- "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
"cpu": [
"s390x"
],
@@ -658,9 +781,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
- "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
"cpu": [
"x64"
],
@@ -674,9 +797,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
- "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
"cpu": [
"x64"
],
@@ -690,9 +813,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
- "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
"cpu": [
"x64"
],
@@ -706,9 +829,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
- "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
"cpu": [
"x64"
],
@@ -722,9 +845,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
- "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
"cpu": [
"arm64"
],
@@ -738,9 +861,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
- "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
"cpu": [
"ia32"
],
@@ -754,9 +877,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
- "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
"cpu": [
"x64"
],
@@ -785,24 +908,60 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+ "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
"dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
+ "node_modules/@eslint/config-array": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz",
+ "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.4",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+ "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -810,7 +969,7 @@
"strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -827,15 +986,12 @@
}
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
"engines": {
- "node": ">=8"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -854,38 +1010,47 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
- "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
+ "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
"dev": true,
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+ "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@floating-ui/core": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz",
- "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==",
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz",
+ "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==",
"dependencies": {
- "@floating-ui/utils": "^0.2.0"
+ "@floating-ui/utils": "^0.2.7"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.6.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz",
- "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==",
+ "version": "1.6.10",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz",
+ "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==",
"dependencies": {
- "@floating-ui/core": "^1.0.0",
- "@floating-ui/utils": "^0.2.0"
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.7"
}
},
"node_modules/@floating-ui/react": {
- "version": "0.26.14",
- "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.14.tgz",
- "integrity": "sha512-I2EhfezC+H0WfkMEkCcF9+++PU1Wq08bDKhHHGIoBZVCciiftEQHgrSI4dTUTsa7446SiIVW0gWATliIlVNgfg==",
+ "version": "0.26.22",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.22.tgz",
+ "integrity": "sha512-LNv4azPt8SpT4WW7Kku5JNVjLk2GcS0bGGjFTAgqOONRFo9r/aaGHHPpdiIuQbB1t8shmWyWqTTUDmZ9fcNshg==",
"dependencies": {
- "@floating-ui/react-dom": "^2.0.0",
- "@floating-ui/utils": "^0.2.0",
+ "@floating-ui/react-dom": "^2.1.1",
+ "@floating-ui/utils": "^0.2.7",
"tabbable": "^6.0.0"
},
"peerDependencies": {
@@ -894,9 +1059,9 @@
}
},
"node_modules/@floating-ui/react-dom": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz",
- "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz",
+ "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==",
"dependencies": {
"@floating-ui/dom": "^1.0.0"
},
@@ -906,45 +1071,9 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz",
- "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw=="
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.14",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
- "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
- "dev": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.2",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz",
+ "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA=="
},
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
@@ -959,16 +1088,23 @@
"url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "dev": true
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz",
+ "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
},
"node_modules/@iconify/react": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@iconify/react/-/react-4.1.1.tgz",
- "integrity": "sha512-jed14EjvKjee8mc0eoscGxlg7mSQRkwQG3iX3cPBCO7UlOjz0DtlvTqxqEcHUJGh+z1VJ31Yhu5B9PxfO0zbdg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@iconify/react/-/react-5.0.2.tgz",
+ "integrity": "sha512-wtmstbYlEbo4NDxFxBJkhkf9gJBDqMGr7FaqLrAUMneRV3Z+fVHLJjOhWbkAF8xDQNFC/wcTYdrWo1lnRhmagQ==",
"dependencies": {
"@iconify/types": "^2.0.0"
},
@@ -1033,42 +1169,69 @@
}
},
"node_modules/@mantine/core": {
- "version": "7.9.1",
- "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.9.1.tgz",
- "integrity": "sha512-UXK11t1fAQ2ROQ9HTIZfyU52XdwS8sFJ2SRUh5uHMWSahJo3wTdKzaCvYN7wg+ONM9p6ENT0hC0dfv5qXoKU4w==",
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.12.1.tgz",
+ "integrity": "sha512-PXKIDaT1fpNB77dPQIcdFGM2NRnfmsJSVx3uuBccngBQWMIWI0wPyiO1Y26DK4LQrbrypeb+TS+Zxpgx6RoiCA==",
"dependencies": {
"@floating-ui/react": "^0.26.9",
- "clsx": "2.1.0",
+ "clsx": "^2.1.1",
"react-number-format": "^5.3.1",
"react-remove-scroll": "^2.5.7",
"react-textarea-autosize": "8.5.3",
"type-fest": "^4.12.0"
},
"peerDependencies": {
- "@mantine/hooks": "7.9.1",
+ "@mantine/hooks": "7.12.1",
"react": "^18.2.0",
"react-dom": "^18.2.0"
}
},
- "node_modules/@mantine/core/node_modules/type-fest": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz",
- "integrity": "sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==",
- "engines": {
- "node": ">=16"
+ "node_modules/@mantine/dates": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-7.12.1.tgz",
+ "integrity": "sha512-+Dg5ZGoYPWYRWPY7HagLeW36ayVjKQIkTpdNvgGDwh5YpaFy5cHd6LK6USKUshTsRPuzM3oUKwXIBK8hsigMyA==",
+ "dependencies": {
+ "clsx": "^2.1.1"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependencies": {
+ "@mantine/core": "7.12.1",
+ "@mantine/hooks": "7.12.1",
+ "dayjs": ">=1.0.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ }
+ },
+ "node_modules/@mantine/form": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.12.1.tgz",
+ "integrity": "sha512-Q+lpgG9N8srlsI0IPnD1V1c2ZaI0xmR3bBEVm+LttSos6Q5zkG49Yy011mc0cXzEKUk2h48j8PLoPHfSEzO03g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "klona": "^2.0.6"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
}
},
"node_modules/@mantine/hooks": {
- "version": "7.9.1",
- "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.9.1.tgz",
- "integrity": "sha512-nb2Ar+2HfGxLjGZgObapeUeqcQsUWJ+rvj4X2KNTUy3+YpvLIMD3CqREowWHF7/5OTGh4BCyBqQNZ9JFpnMeHQ==",
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.12.1.tgz",
+ "integrity": "sha512-YPA3qiMHJkWID5+YzakBaLvjHtX3Fg3PdPY49iIb/CaWM9+lrJ+77TOVS7bsY7ZTBHXUfzft1/6Woqt3xSuweA==",
"peerDependencies": {
"react": "^18.2.0"
}
},
+ "node_modules/@mantine/modals": {
+ "version": "7.12.1",
+ "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-7.12.1.tgz",
+ "integrity": "sha512-olS07yDcCFLGylLGaQgBiTnKcRrUZVLKqBFBw5glcmc/wZmJf4SDMgx5mxSwBnsbJOwJ2d3aIYwO/qNTNnluSg==",
+ "peerDependencies": {
+ "@mantine/core": "7.12.1",
+ "@mantine/hooks": "7.12.1",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -1104,6 +1267,14 @@
"node": ">= 8"
}
},
+ "node_modules/@remix-run/router": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.0.tgz",
+ "integrity": "sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.17.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz",
@@ -1312,21 +1483,60 @@
"win32"
]
},
+ "node_modules/@tabler/icons": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.12.0.tgz",
+ "integrity": "sha512-Im37ar/mQkqLb6XUXsU7nOc4/66VB9/3KLuZ+6tUsJKHHNLaDUkYfCTNG3pnGDI03laByxVf5+umSNK2yPTx8A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/codecalm"
+ }
+ },
+ "node_modules/@tabler/icons-react": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.12.0.tgz",
+ "integrity": "sha512-RnJl3HrCqInuC8JJEUxWuYP4OFNYnY2EUtBqZFSpYatPKY3AnvJBIrShJLHf3fiLPpo6xEYAIoB7Qow93JX0fQ==",
+ "dependencies": {
+ "@tabler/icons": "3.12.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/codecalm"
+ },
+ "peerDependencies": {
+ "react": ">= 16"
+ }
+ },
+ "node_modules/@tanstack/match-sorter-utils": {
+ "version": "8.15.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.15.1.tgz",
+ "integrity": "sha512-PnVV3d2poenUM31ZbZi/yXkBu3J7kd5k2u51CGwwNojag451AjTH9N6n41yjXz2fpLeewleyLBmNS6+HcGDlXw==",
+ "dependencies": {
+ "remove-accents": "0.5.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
"node_modules/@tanstack/query-core": {
- "version": "5.36.0",
- "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.36.0.tgz",
- "integrity": "sha512-B5BD3pg/mztDR36i77hGcyySKKeYrbM5mnogOROTBi1SUml5ByRK7PGUUl16vvubvQC+mSnqziFG/VIy/DE3FQ==",
+ "version": "5.51.21",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.51.21.tgz",
+ "integrity": "sha512-POQxm42IUp6n89kKWF4IZi18v3fxQWFRolvBA6phNVmA8psdfB1MvDnGacCJdS+EOX12w/CyHM62z//rHmYmvw==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/tannerlinsley"
}
},
"node_modules/@tanstack/react-query": {
- "version": "5.36.0",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.36.0.tgz",
- "integrity": "sha512-BATvtM0rohwg7pRHUnxgeDiwLWRGZ8OM/4y8LImHVpecQWoH6Uhytu3Z8YV6V7hQ1sMQBFcUrGE1/e4MxR6YiA==",
+ "version": "5.51.23",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.51.23.tgz",
+ "integrity": "sha512-CfJCfX45nnVIZjQBRYYtvVMIsGgWLKLYC4xcUiYEey671n1alvTZoCBaU9B85O8mF/tx9LPyrI04A6Bs2THv4A==",
"dependencies": {
- "@tanstack/query-core": "5.36.0"
+ "@tanstack/query-core": "5.51.21"
},
"funding": {
"type": "github",
@@ -1336,6 +1546,62 @@
"react": "^18.0.0"
}
},
+ "node_modules/@tanstack/react-table": {
+ "version": "8.19.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.19.3.tgz",
+ "integrity": "sha512-MtgPZc4y+cCRtU16y1vh1myuyZ2OdkWgMEBzyjYsoMWMicKZGZvcDnub3Zwb6XF2pj9iRMvm1SO1n57lS0vXLw==",
+ "dependencies": {
+ "@tanstack/table-core": "8.19.3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
+ "node_modules/@tanstack/react-virtual": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.8.3.tgz",
+ "integrity": "sha512-9ICwbDUUzN99CJIGc373i8NLoj6zFTKI2Hlcmo0+lCSAhPQ5mxq4dGOMKmLYoEFyHcGQ64Bd6ZVbnPpM6lNK5w==",
+ "dependencies": {
+ "@tanstack/virtual-core": "3.8.3"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@tanstack/table-core": {
+ "version": "8.19.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.19.3.tgz",
+ "integrity": "sha512-IqREj9ADoml9zCAouIG/5kCGoyIxPFdqdyoxis9FisXFi5vT+iYfEfLosq4xkU/iDbMcEuAj+X8dWRLvKYDNoQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/virtual-core": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.8.3.tgz",
+ "integrity": "sha512-vd2A2TnM5lbnWZnHi9B+L2gPtkSeOtJOAw358JqokIH1+v2J7vUAzFVPwB/wrye12RFOurffXu33plm4uQ+JBQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -1383,17 +1649,22 @@
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
+ "node_modules/@types/parse-json": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="
+ },
"node_modules/@types/prop-types": {
"version": "15.7.12",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
"integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==",
- "devOptional": true
+ "dev": true
},
"node_modules/@types/react": {
- "version": "18.3.2",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz",
- "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==",
- "devOptional": true,
+ "version": "18.3.3",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
+ "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
+ "dev": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -1409,31 +1680,31 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz",
- "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz",
+ "integrity": "sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==",
"dev": true,
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.9.0",
- "@typescript-eslint/type-utils": "7.9.0",
- "@typescript-eslint/utils": "7.9.0",
- "@typescript-eslint/visitor-keys": "7.9.0",
+ "@typescript-eslint/scope-manager": "8.1.0",
+ "@typescript-eslint/type-utils": "8.1.0",
+ "@typescript-eslint/utils": "8.1.0",
+ "@typescript-eslint/visitor-keys": "8.1.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
"ts-api-utils": "^1.3.0"
},
"engines": {
- "node": "^18.18.0 || >=20.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^7.0.0",
- "eslint": "^8.56.0"
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -1442,26 +1713,26 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz",
- "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.1.0.tgz",
+ "integrity": "sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "7.9.0",
- "@typescript-eslint/types": "7.9.0",
- "@typescript-eslint/typescript-estree": "7.9.0",
- "@typescript-eslint/visitor-keys": "7.9.0",
+ "@typescript-eslint/scope-manager": "8.1.0",
+ "@typescript-eslint/types": "8.1.0",
+ "@typescript-eslint/typescript-estree": "8.1.0",
+ "@typescript-eslint/visitor-keys": "8.1.0",
"debug": "^4.3.4"
},
"engines": {
- "node": "^18.18.0 || >=20.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.56.0"
+ "eslint": "^8.57.0 || ^9.0.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -1470,16 +1741,16 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz",
- "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz",
+ "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.9.0",
- "@typescript-eslint/visitor-keys": "7.9.0"
+ "@typescript-eslint/types": "8.1.0",
+ "@typescript-eslint/visitor-keys": "8.1.0"
},
"engines": {
- "node": "^18.18.0 || >=20.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
@@ -1487,26 +1758,23 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz",
- "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz",
+ "integrity": "sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "7.9.0",
- "@typescript-eslint/utils": "7.9.0",
+ "@typescript-eslint/typescript-estree": "8.1.0",
+ "@typescript-eslint/utils": "8.1.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
"engines": {
- "node": "^18.18.0 || >=20.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
- "peerDependencies": {
- "eslint": "^8.56.0"
- },
"peerDependenciesMeta": {
"typescript": {
"optional": true
@@ -1514,12 +1782,12 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz",
- "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz",
+ "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==",
"dev": true,
"engines": {
- "node": "^18.18.0 || >=20.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
@@ -1527,13 +1795,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz",
- "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz",
+ "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.9.0",
- "@typescript-eslint/visitor-keys": "7.9.0",
+ "@typescript-eslint/types": "8.1.0",
+ "@typescript-eslint/visitor-keys": "8.1.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -1542,7 +1810,7 @@
"ts-api-utils": "^1.3.0"
},
"engines": {
- "node": "^18.18.0 || >=20.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
@@ -1555,61 +1823,55 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz",
- "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.1.0.tgz",
+ "integrity": "sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.9.0",
- "@typescript-eslint/types": "7.9.0",
- "@typescript-eslint/typescript-estree": "7.9.0"
+ "@typescript-eslint/scope-manager": "8.1.0",
+ "@typescript-eslint/types": "8.1.0",
+ "@typescript-eslint/typescript-estree": "8.1.0"
},
"engines": {
- "node": "^18.18.0 || >=20.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.56.0"
+ "eslint": "^8.57.0 || ^9.0.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz",
- "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz",
+ "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/types": "8.1.0",
"eslint-visitor-keys": "^3.4.3"
},
"engines": {
- "node": "^18.18.0 || >=20.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
- },
"node_modules/@vitejs/plugin-react": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz",
- "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz",
+ "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.23.5",
- "@babel/plugin-transform-react-jsx-self": "^7.23.3",
- "@babel/plugin-transform-react-jsx-source": "^7.23.3",
+ "@babel/core": "^7.24.5",
+ "@babel/plugin-transform-react-jsx-self": "^7.24.5",
+ "@babel/plugin-transform-react-jsx-source": "^7.24.1",
"@types/babel__core": "^7.20.5",
- "react-refresh": "^0.14.0"
+ "react-refresh": "^0.14.2"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -1619,9 +1881,9 @@
}
},
"node_modules/acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -1668,7 +1930,6 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -1691,6 +1952,20 @@
"node": ">=8"
}
},
+ "node_modules/babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1714,12 +1989,12 @@
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -1776,7 +2051,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
"engines": {
"node": ">=6"
}
@@ -1805,7 +2079,6 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -1816,9 +2089,9 @@
}
},
"node_modules/clsx": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
- "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"engines": {
"node": ">=6"
}
@@ -1827,7 +2100,6 @@
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
"dependencies": {
"color-name": "1.1.3"
}
@@ -1835,8 +2107,7 @@
"node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
},
"node_modules/concat-map": {
"version": "0.0.1",
@@ -1849,6 +2120,21 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
+ "node_modules/cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1866,8 +2152,12 @@
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "devOptional": true
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.12",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz",
+ "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg=="
},
"node_modules/debug": {
"version": "4.3.4",
@@ -1914,28 +2204,24 @@
"node": ">=8"
}
},
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/electron-to-chromium": {
"version": "1.4.768",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.768.tgz",
"integrity": "sha512-z2U3QcvNuxdkk33YV7R1bVMNq7fL23vq3WfO5BHcqrm4TnDGReouBfYKLEFh5umoK1XACjEwp8mmnhXk2EJigw==",
"dev": true
},
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
"node_modules/esbuild": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
- "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
"dev": true,
"hasInstallScript": true,
"bin": {
@@ -1945,29 +2231,29 @@
"node": ">=12"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.20.2",
- "@esbuild/android-arm": "0.20.2",
- "@esbuild/android-arm64": "0.20.2",
- "@esbuild/android-x64": "0.20.2",
- "@esbuild/darwin-arm64": "0.20.2",
- "@esbuild/darwin-x64": "0.20.2",
- "@esbuild/freebsd-arm64": "0.20.2",
- "@esbuild/freebsd-x64": "0.20.2",
- "@esbuild/linux-arm": "0.20.2",
- "@esbuild/linux-arm64": "0.20.2",
- "@esbuild/linux-ia32": "0.20.2",
- "@esbuild/linux-loong64": "0.20.2",
- "@esbuild/linux-mips64el": "0.20.2",
- "@esbuild/linux-ppc64": "0.20.2",
- "@esbuild/linux-riscv64": "0.20.2",
- "@esbuild/linux-s390x": "0.20.2",
- "@esbuild/linux-x64": "0.20.2",
- "@esbuild/netbsd-x64": "0.20.2",
- "@esbuild/openbsd-x64": "0.20.2",
- "@esbuild/sunos-x64": "0.20.2",
- "@esbuild/win32-arm64": "0.20.2",
- "@esbuild/win32-ia32": "0.20.2",
- "@esbuild/win32-x64": "0.20.2"
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
}
},
"node_modules/escalade": {
@@ -1983,47 +2269,42 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/eslint": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
- "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+ "version": "9.9.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.9.0.tgz",
+ "integrity": "sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.57.0",
- "@humanwhocodes/config-array": "^0.11.14",
+ "@eslint-community/regexpp": "^4.11.0",
+ "@eslint/config-array": "^0.17.1",
+ "@eslint/eslintrc": "^3.1.0",
+ "@eslint/js": "9.9.0",
"@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.3.0",
"@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
- "doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
+ "eslint-scope": "^8.0.2",
+ "eslint-visitor-keys": "^4.0.0",
+ "espree": "^10.1.0",
+ "esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
+ "file-entry-cache": "^8.0.0",
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
"ignore": "^5.2.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
@@ -2037,10 +2318,18 @@
"eslint": "bin/eslint.js"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
- "url": "https://opencollective.com/eslint"
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
}
},
"node_modules/eslint-plugin-react-hooks": {
@@ -2056,25 +2345,25 @@
}
},
"node_modules/eslint-plugin-react-refresh": {
- "version": "0.4.7",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.7.tgz",
- "integrity": "sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==",
+ "version": "0.4.9",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.9.tgz",
+ "integrity": "sha512-QK49YrBAo5CLNLseZ7sZgvgTy21E6NEw22eZqc4teZfH8pxV3yXc9XXOYfUI6JNpw7mfHNkAeWtBxrTyykB6HA==",
"dev": true,
"peerDependencies": {
"eslint": ">=7"
}
},
"node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz",
+ "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==",
"dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -2163,19 +2452,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+ "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
"dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
"engines": {
- "node": ">=8"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/has-flag": {
@@ -2212,17 +2498,29 @@
}
},
"node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+ "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
"dev": true,
"dependencies": {
- "acorn": "^8.9.0",
+ "acorn": "^8.12.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
+ "eslint-visitor-keys": "^4.0.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+ "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -2273,8 +2571,7 @@
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"node_modules/fast-glob": {
"version": "3.3.2",
@@ -2326,21 +2623,21 @@
}
},
"node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
"dev": true,
"dependencies": {
- "flat-cache": "^3.0.4"
+ "flat-cache": "^4.0.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">=16.0.0"
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -2349,6 +2646,11 @@
"node": ">=8"
}
},
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+ },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -2366,17 +2668,16 @@
}
},
"node_modules/flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"dev": true,
"dependencies": {
"flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
+ "keyv": "^4.5.4"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">=16"
}
},
"node_modules/flatted": {
@@ -2404,6 +2705,14 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -2511,11 +2820,29 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
"engines": {
"node": ">=4"
}
},
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
"node_modules/ignore": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
@@ -2529,7 +2856,6 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -2572,6 +2898,25 @@
"loose-envify": "^1.0.0"
}
},
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+ },
+ "node_modules/is-core-module": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
+ "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -2618,9 +2963,9 @@
"dev": true
},
"node_modules/jotai": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.8.0.tgz",
- "integrity": "sha512-yZNMC36FdLOksOr8qga0yLf14miCJlEThlp5DeFJNnqzm2+ZG7wLcJzoOyij5K6U6Xlc5ljQqPDlJRgqW0Y18g==",
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.9.3.tgz",
+ "integrity": "sha512-IqMWKoXuEzWSShjd9UhalNsRGbdju5G2FrqNLQJT+Ih6p41VNYe2sav5hnwQx4HJr25jq9wRqvGSWGviGG6Gjw==",
"engines": {
"node": ">=12.20.0"
},
@@ -2677,6 +3022,11 @@
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true
},
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -2710,6 +3060,14 @@
"json-buffer": "3.0.1"
}
},
+ "node_modules/klona": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
+ "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -2723,6 +3081,11 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -2764,6 +3127,33 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/mantine-react-table": {
+ "version": "2.0.0-beta.6",
+ "resolved": "https://registry.npmjs.org/mantine-react-table/-/mantine-react-table-2.0.0-beta.6.tgz",
+ "integrity": "sha512-eaHdVjJWFLIAGS0PwdMisvs1U9IUanEzL+vm1+YcoDtUNFVGms1jw7neK43YH+CmA2YsFLfwRqHrtFnfI12Rag==",
+ "dependencies": {
+ "@tanstack/match-sorter-utils": "8.15.1",
+ "@tanstack/react-table": "8.19.3",
+ "@tanstack/react-virtual": "3.8.3"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kevinvandy"
+ },
+ "peerDependencies": {
+ "@mantine/core": "^7.9",
+ "@mantine/dates": "^7.9",
+ "@mantine/hooks": "^7.9",
+ "@tabler/icons-react": ">=2.23.0",
+ "clsx": ">=2",
+ "dayjs": ">=1.11",
+ "react": ">=18.0",
+ "react-dom": ">=18.0"
+ }
+ },
"node_modules/match-sorter": {
"version": "6.3.4",
"resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.4.tgz",
@@ -2783,12 +3173,12 @@
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
"dev": true,
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
@@ -2801,9 +3191,9 @@
"integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA=="
},
"node_modules/minimatch": {
- "version": "9.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
- "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
@@ -2931,7 +3321,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
"dependencies": {
"callsites": "^3.0.0"
},
@@ -2939,6 +3328,23 @@
"node": ">=6"
}
},
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -2965,11 +3371,15 @@
"node": ">=8"
}
},
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -2977,8 +3387,7 @@
"node_modules/picocolors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
- "dev": true
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -2993,9 +3402,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.38",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
- "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "version": "8.4.41",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+ "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
"dev": true,
"funding": [
{
@@ -3013,7 +3422,7 @@
],
"dependencies": {
"nanoid": "^3.3.7",
- "picocolors": "^1.0.0",
+ "picocolors": "^1.0.1",
"source-map-js": "^1.2.0"
},
"engines": {
@@ -3092,9 +3501,9 @@
}
},
"node_modules/react-icons": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz",
- "integrity": "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz",
+ "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==",
"peerDependencies": {
"react": "*"
}
@@ -3105,9 +3514,9 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"node_modules/react-number-format": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.3.4.tgz",
- "integrity": "sha512-2hHN5mbLuCDUx19bv0Q8wet67QqYK6xmtLQeY5xx+h7UXiMmRtaCwqko4mMPoKXLc6xAzwRrutg8XbTRlsfjRg==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz",
+ "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==",
"dependencies": {
"prop-types": "^15.7.2"
},
@@ -3195,6 +3604,36 @@
}
}
},
+ "node_modules/react-router": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.0.tgz",
+ "integrity": "sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg==",
+ "dependencies": {
+ "@remix-run/router": "1.19.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.0.tgz",
+ "integrity": "sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ==",
+ "dependencies": {
+ "@remix-run/router": "1.19.0",
+ "react-router": "6.26.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/react-style-singleton": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
@@ -3233,6 +3672,18 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/react-toastify": {
+ "version": "10.0.5",
+ "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.5.tgz",
+ "integrity": "sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==",
+ "dependencies": {
+ "clsx": "^2.1.0"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
"node_modules/regenerator-runtime": {
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
@@ -3243,11 +3694,26 @@
"resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz",
"integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A=="
},
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
"engines": {
"node": ">=4"
}
@@ -3343,9 +3809,9 @@
}
},
"node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -3384,6 +3850,14 @@
"node": ">=8"
}
},
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
@@ -3417,11 +3891,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
+ },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -3429,6 +3907,17 @@
"node": ">=4"
}
},
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/tabbable": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
@@ -3444,7 +3933,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
"engines": {
"node": ">=4"
}
@@ -3474,9 +3962,9 @@
}
},
"node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
},
"node_modules/type-check": {
"version": "0.4.0",
@@ -3491,21 +3979,20 @@
}
},
"node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.24.0.tgz",
+ "integrity": "sha512-spAaHzc6qre0TlZQQ2aA/nGMe+2Z/wyGk5Z+Ru2VUfdNwT6kWO6TjevOlpebsATEG1EIQ2sOiDszud3lO5mt/Q==",
"engines": {
- "node": ">=10"
+ "node": ">=16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/typescript": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
- "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+ "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -3642,13 +4129,13 @@
}
},
"node_modules/vite": {
- "version": "5.2.11",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz",
- "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
+ "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
"dev": true,
"dependencies": {
- "esbuild": "^0.20.1",
- "postcss": "^8.4.38",
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.40",
"rollup": "^4.13.0"
},
"bin": {
@@ -3668,6 +4155,7 @@
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
+ "sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
"terser": "^5.4.0"
@@ -3685,6 +4173,9 @@
"sass": {
"optional": true
},
+ "sass-embedded": {
+ "optional": true
+ },
"stylus": {
"optional": true
},
@@ -3731,6 +4222,14 @@
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
},
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index 8f095f3..5c54a08 100644
--- a/package.json
+++ b/package.json
@@ -10,26 +10,36 @@
"preview": "vite preview"
},
"dependencies": {
- "@iconify/react": "^4.1.1",
- "@mantine/core": "^7.9.1",
- "@mantine/hooks": "^7.9.1",
- "@tanstack/react-query": "^5.36.0",
- "jotai": "^2.8.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "react-icons": "^5.2.1",
- "react-query": "^3.39.3"
+ "@emotion/react": "^11.13.0",
+ "@iconify/react": "^5.0.2",
+ "@mantine/core": "^7.12.1",
+ "@mantine/dates": "^7.12.1",
+ "@mantine/form": "^7.12.1",
+ "@mantine/hooks": "^7.12.1",
+ "@mantine/modals": "^7.12.1",
+ "@tabler/icons-react": "^3.12.0",
+ "@tanstack/react-query": "^5.51.23",
+ "clsx": "^2.1.1",
+ "dayjs": "^1.11.12",
+ "jotai": "^2.9.3",
+ "mantine-react-table": "^2.0.0-beta.6",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-icons": "^5.3.0",
+ "react-query": "^3.39.3",
+ "react-router-dom": "^6.26.0",
+ "react-toastify": "^10.0.5"
},
"devDependencies": {
- "@types/react": "^18.2.66",
- "@types/react-dom": "^18.2.22",
- "@typescript-eslint/eslint-plugin": "^7.2.0",
- "@typescript-eslint/parser": "^7.2.0",
- "@vitejs/plugin-react": "^4.2.1",
- "eslint": "^8.57.0",
- "eslint-plugin-react-hooks": "^4.6.0",
- "eslint-plugin-react-refresh": "^0.4.6",
- "typescript": "^5.2.2",
- "vite": "^5.2.0"
+ "@types/react": "^18.3.3",
+ "@types/react-dom": "^18.3.0",
+ "@typescript-eslint/eslint-plugin": "^8.1.0",
+ "@typescript-eslint/parser": "^8.1.0",
+ "@vitejs/plugin-react": "^4.3.1",
+ "eslint": "^9.9.0",
+ "eslint-plugin-react-hooks": "^4.6.2",
+ "eslint-plugin-react-refresh": "^0.4.9",
+ "typescript": "^5.5.4",
+ "vite": "^5.4.0"
}
}
diff --git a/src/App.css b/src/App.css
index b9d355d..6ea83fe 100644
--- a/src/App.css
+++ b/src/App.css
@@ -1,8 +1,6 @@
#root {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
+ width: 100%;
+ height: 100%;
}
.logo {
diff --git a/src/App.tsx b/src/App.tsx
index 9ed6af2..1503a63 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -2,6 +2,14 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import './App.css'
import Homepage from './pages/homepage/Homepage'
import { MantineProvider } from '@mantine/core'
+import {
+ Route,
+ createBrowserRouter,
+ createRoutesFromElements,
+ RouterProvider,
+ Navigate,
+} from "react-router-dom";
+import Settings from './pages/settings/Settings';
function App() {
const queryClient = new QueryClient({
@@ -13,10 +21,21 @@ function App() {
},
});
+ const router = createBrowserRouter(
+ createRoutesFromElements(
+
+ }>
+ }>
+ ,
+ ),
+ );
+
return (
-
-
+
+
)
diff --git a/src/DataTable/DataTable.tsx b/src/DataTable/DataTable.tsx
new file mode 100644
index 0000000..bb0d90f
--- /dev/null
+++ b/src/DataTable/DataTable.tsx
@@ -0,0 +1,99 @@
+import { ModalsProvider } from "@mantine/modals";
+import { MantineReactTable, useMantineReactTable } from "mantine-react-table"
+import { memo } from "react";
+// import '../dataTableStyles.css';
+import '@mantine/core/styles.css'; //import Mantine V7 styles needed by MRT
+import '@mantine/dates/styles.css'; //if using mantine date picker features
+import 'mantine-react-table/styles.css'; //import MRT styles
+
+export function DataTableComponent({
+ columns,
+ tableData,
+ isFetching,
+ isLoading,
+ onCreatingRowSave,
+ onEditingRowSave,
+}: any) {
+
+ const table = useMantineReactTable({
+ columns: columns,
+ data: tableData,
+ enableFacetedValues: true,
+ enablePagination: false,
+ enableRowVirtualization: true,
+ enableEditing: true,
+ createDisplayMode: "modal",
+ editDisplayMode: "row",
+ enableBottomToolbar: false,
+ enableToolbarInternalActions: false,
+ onCreatingRowSave: onCreatingRowSave,
+ onEditingRowSave: onEditingRowSave,
+ getRowId: (row: any) => row.id,
+ initialState: {
+ showProgressBars: isFetching,
+ showLoadingOverlay: isLoading,
+ isLoading: isLoading,
+ },
+ state: {
+ showProgressBars: isFetching,
+ showLoadingOverlay: isLoading,
+ isLoading: isLoading,
+ },
+ // mantineToolbarAlertBannerBadgeProps: {
+ // style: {
+ // color: "red",
+ // },
+ // },
+ // mantineTopToolbarProps: {
+ // style: {
+ // color: "var(--color-text-pri)",
+ // background: "var(--color-background)",
+ // border: "none",
+ // boxShadow: "none",
+ // },
+ // },
+ // mantineTableHeadProps: {
+ // style: {
+ // boxShadow: "none",
+ // },
+ // },
+ // mantineTableHeadCellProps: {
+ // style: {
+ // color: "var(--color-text-pri)",
+ // background: "var(--color-background)",
+ // borderRight: "none",
+ // borderLeft: "none",
+ // },
+ // },
+ // mantineTableBodyCellProps: {
+ // style: {
+ // background: "var(--color-background)",
+ // borderRight: "none",
+ // borderLeft: "none",
+ // },
+ // },
+ // mantinePaperProps: {
+ // style: {
+ // border: "none",
+ // boxShadow: "none",
+ // background: "var(--color-background)",
+ // },
+ // },
+ // mantineTableContainerProps: {
+ // style: {
+ // border: "none",
+ // boxShadow: "none",
+ // background: "var(--color-background)",
+ // },
+ // },
+ });
+ return (
+
+
+
+ );
+}
+
+export const DataTable = memo(DataTableComponent);
+
+export default DataTable;
\ No newline at end of file
diff --git a/src/DataTable/columns/ApplicationColumns.tsx b/src/DataTable/columns/ApplicationColumns.tsx
new file mode 100644
index 0000000..804c9da
--- /dev/null
+++ b/src/DataTable/columns/ApplicationColumns.tsx
@@ -0,0 +1,117 @@
+import { MRT_ColumnDef } from "mantine-react-table";
+import { useMemo } from "react";
+
+export default function ApplicationColumns() {
+ const columns = useMemo[]>(
+ () => [
+ {
+ accessorFn: (row) => {
+ if (row.id) {
+ return `${row.id}`;
+ } else {
+ return "";
+ }
+ },
+ enableEditing: false,
+ id: "id",
+ header: "ID",
+ size: 50,
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "id",
+ id: `${cell.getValue()}-id`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ if (row.name) {
+ return `${row.name}`;
+ } else {
+ return "";
+ }
+ },
+ id: "name",
+ header: "Name",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "name",
+ id: `${cell.getValue()}-name`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ if (row.url) {
+ return `${row.url}`;
+ } else {
+ return "";
+ }
+ },
+ id: "url",
+ header: "Url",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "url",
+ id: `${cell.getValue()}-url`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ if (row.icon) {
+ return `${row.icon}`;
+ } else {
+ return "";
+ }
+ },
+ id: "icon",
+ header: "Icon",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "icon",
+ id: `${cell.getValue()}-icon`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ if (row.urlbase) {
+ return `${row.urlbase}`;
+ } else {
+ return "";
+ }
+ },
+ id: "urlbase",
+ header: "Base Url",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "urlbase",
+ id: `${cell.getValue()}-urlbase`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ if (row.category) {
+ return `${row.category}`;
+ } else {
+ return "";
+ }
+ },
+ id: "category",
+ header: "Category",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "category",
+ id: `${cell.getValue()}-category`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ ],
+ [],
+ );
+
+ return columns;
+}
+
diff --git a/src/DataTable/columns/BookmarkColumns.tsx b/src/DataTable/columns/BookmarkColumns.tsx
new file mode 100644
index 0000000..17ca569
--- /dev/null
+++ b/src/DataTable/columns/BookmarkColumns.tsx
@@ -0,0 +1,87 @@
+import { MRT_ColumnDef } from "mantine-react-table";
+import { useMemo } from "react";
+
+export default function ApplicationColumns(groups: any, groupData: any) {
+ const columns = useMemo[]>(
+ () => [
+ {
+ accessorFn: (row) => {
+ if (row.id) {
+ return `${row.id}`;
+ } else {
+ return "";
+ }
+ },
+ enableEditing: false,
+ id: "id",
+ header: "ID",
+ size: 50,
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "id",
+ id: `${cell.getValue()}-id`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ if (row.name) {
+ return `${row.name}`;
+ } else {
+ return "";
+ }
+ },
+ id: "name",
+ header: "Name",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "name",
+ id: `${cell.getValue()}-name`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ if (row.url) {
+ return `${row.url}`;
+ } else {
+ return "";
+ }
+ },
+ id: "url",
+ header: "Url",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "url",
+ id: `${cell.getValue()}-url`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ const index: number = row.category;
+ if (index !== null && index !== undefined) {
+ return `${index}`;
+ } else {
+ return "N/A";
+ }
+ },
+ id: "category",
+ header: "Category",
+ editVariant: "select",
+ mantineEditSelectProps: { data: groups },
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "category",
+ id: `${cell.getValue()}-category`,
+ }),
+ Cell: ({ renderedCellValue, row }) =>
+ groupData[row?.original.category].category_name,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ ],
+ [groups],
+ );
+
+ return columns;
+}
+
diff --git a/src/DataTable/columns/MessagesColumns.tsx b/src/DataTable/columns/MessagesColumns.tsx
new file mode 100644
index 0000000..fc05810
--- /dev/null
+++ b/src/DataTable/columns/MessagesColumns.tsx
@@ -0,0 +1,66 @@
+import { MRT_ColumnDef } from "mantine-react-table";
+import { useMemo } from "react";
+
+export default function MessagesColumns() {
+ const columns = useMemo[]>(
+ () => [
+ {
+ accessorFn: (row) => {
+ if (row.id) {
+ return `${row.id}`;
+ } else {
+ return "";
+ }
+ },
+ enableEditing: false,
+ id: "id",
+ header: "ID",
+ size: 50,
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "id",
+ id: `${cell.getValue()}-id`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ if (row.message) {
+ return `${row.message}`;
+ } else {
+ return "";
+ }
+ },
+ id: "message",
+ header: "Message",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "message",
+ id: `${cell.getValue()}-message`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row) => {
+ if (row.easteregg) {
+ return `${row.easteregg}`;
+ } else {
+ return "";
+ }
+ },
+ id: "easteregg",
+ header: "Easter Egg?",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "easteregg",
+ id: `${cell.getValue()}-easteregg`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ ],
+ [],
+ );
+
+ return columns;
+}
+
diff --git a/src/DataTable/columns/PersonalizationColumns.tsx b/src/DataTable/columns/PersonalizationColumns.tsx
new file mode 100644
index 0000000..89deac2
--- /dev/null
+++ b/src/DataTable/columns/PersonalizationColumns.tsx
@@ -0,0 +1,65 @@
+import { MRT_ColumnDef } from "mantine-react-table";
+import { useMemo } from "react";
+
+export default function PersonalizationColumns() {
+ const columns = useMemo[]>(
+ () => [
+ {
+ accessorFn: (row: any) => {
+ if (row.firstname) {
+ return `${row.firstname}`;
+ } else {
+ return "";
+ }
+ },
+ id: "firstname",
+ header: "First Name",
+ size: 50,
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "firstname",
+ id: `${cell.getValue()}-firstname`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row: any) => {
+ if (row.lastname) {
+ return `${row.lastname}`;
+ } else {
+ return "";
+ }
+ },
+ id: "lastname",
+ header: "Last Name",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "lastname",
+ id: `${cell.getValue()}-lastname`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ {
+ accessorFn: (row: any) => {
+ if (row.email) {
+ return `${row.email}`;
+ } else {
+ return "";
+ }
+ },
+ id: "email",
+ header: "Email",
+ mantineCopyButtonProps: ({ cell, row }) => ({
+ className: "email",
+ id: `${cell.getValue()}-email`,
+ }),
+ Cell: ({ renderedCellValue, row }) => renderedCellValue,
+ Header: ({ column }) => column.columnDef.header,
+ },
+ ],
+ [],
+ );
+
+ return columns;
+}
+
diff --git a/src/components/ToastError.tsx b/src/components/ToastError.tsx
new file mode 100644
index 0000000..dfa5273
--- /dev/null
+++ b/src/components/ToastError.tsx
@@ -0,0 +1,16 @@
+import { Stack, Text } from '@mantine/core';
+import { stackClasses } from '../styles';
+
+export function ToastError({ err }: { err: any }) {
+ const errorResponse = JSON.parse(err.message);
+ return (
+
+
+ Status: {errorResponse.status} {errorResponse.statusText}
+
+ Details: {errorResponse.msg}
+ {errorResponse.loc && Location: {errorResponse.loc}}
+ {errorResponse.type && Type: {errorResponse.type}}
+
+ );
+}
diff --git a/src/dataTableStyles.css b/src/dataTableStyles.css
new file mode 100644
index 0000000..73c98d2
--- /dev/null
+++ b/src/dataTableStyles.css
@@ -0,0 +1,198 @@
+.mrt-table-paper {
+ height: 100%;
+ overflow: visible;
+ background-color: transparent;
+ border: none;
+ border-style: none;
+ box-shadow: none;
+ &.mantine-Overlay-root {
+ color: var(--mantine-primary-color-7);
+ background-color: alpha(var(--mantine-color-appGray-9), 0.5);
+ }
+ &.mrt-toolbar-dropzone {
+ height: 4.5vh;
+ width: 35vw;
+ color: var(--mantine-primary-color-6);
+ font-size: 36px;
+ background-color: rgb(255, 255, 255, 1);
+ justify-self: center;
+ &.inner {
+ font-size: 36px;
+ }
+ }
+ & ::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+ border-radius: 5px;
+ background-color: transparent;
+
+ }
+ & ::-webkit-scrollbar-thumb:hover {
+ background-color: var(--mantine-primary-color-4);
+ }
+ & ::-webkit-scrollbar-track {
+ background-color: transparent;
+ border-radius: 5px;
+ }
+ & ::-webkit-scrollbar-thumb {
+ border-radius: 5px;
+ background-color: var(--mantine-primary-color-6);
+ }
+ & ::-webkit-scrollbar-corner {
+ background-color: light-dark(white, var(--mantine-primary-color-8));
+ }
+}
+
+.mrt-table-container {
+ height: 100%;
+ background-color: light-dark(white, var(--mantine-primary-color-8));
+ border-top: solid;
+ border-top-color: light-dark(
+ var(--mantine-color-appGray-1),
+ var(--mantine-primary-color-6)
+ );
+ border-top-width: 1px;
+ border-left: solid;
+ border-left-color: light-dark(
+ var(--mantine-color-appGray-1),
+ var(--mantine-primary-color-6)
+ );
+ border-left-width: 1px;
+ border-right: solid;
+ border-right-color: light-dark(
+ var(--mantine-color-appGray-1),
+ var(--mantine-primary-color-6)
+ );
+ border-right-width: 1px;
+ border-bottom: none;
+ border-radius: 4px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+}
+
+.mantine-Table-th {
+ color: light-dark(var(--mantine-color-appGray-7), var(--mantine-primary-color-3));
+ background-color: light-dark(white, var(--mantine-primary-color-8));
+ border-color: light-dark(
+ var(--mantine-color-appGray-1),
+ var(--mantine-primary-color-7)
+ );
+ /* & .mantine-ActionIcon-root {
+ margin-right: 1px;
+ display: none;
+ } */
+ & .mrt-table-head-cell-content {
+ padding-top: 12px;
+ padding-bottom: 12px;
+ align-items: center;
+ justify-content: center;
+ white-space: nowrap;
+ .mrt-table-head-cell-labels {
+ & > * > .mantine-Text-root {
+ font-size: 14px;
+ font-weight: bold;
+ }
+ }
+ & .mrt-table-head-cell-content-actions {
+ transition: 1s all ease;
+ & .mantine-ActionIcon-root {
+ color: transparent;
+ background-color: transparent;
+ display: hidden;
+ }
+ }
+ }
+ & .mrt-table-head-cell-resize-handle {
+ display: flex;
+ width: 4px;
+ border-radius: 4px;
+ border-left-color: transparent;
+ background-color: light-dark(
+ var(--mantine-primary-color-1),
+ var(--mantine-primary-color-6)
+ );
+ }
+ & .mantine-TableHeadCell-Content-Labels {
+ cursor: pointer;
+ position: absolute;
+ }
+ &:hover {
+ & .mrt-table-head-cell-content-actions {
+ & .mantine-ActionIcon-root {
+ color: light-dark(var(--mantine-primary-color-6), var(--mantine-primary-color-3));
+ background-color: light-dark(
+ var(--mantine-primary-color-1),
+ var(--mantine-primary-color-6)
+ );
+ display: grid;
+ position: absolute;
+ right: 0;
+ }
+ }
+ & .mrt-table-head-cell-resize-handle {
+ border-left-color: var(--mantine-primary-color-2);
+ border-width: 4px;
+ border-left-style: solid;
+ }
+ }
+}
+
+.mantine-Mark-root {
+ background-color: light-dark(
+ var(--mantine-primary-color-7),
+ var(--mantine-primary-color-7)
+ );
+ color: white;
+}
+
+.mantine-Table-tr {
+ height: 56px;
+ box-shadow: none;
+ & .table-icon-device-floppy {
+ color: light-dark(var(--mantine-primary-color-6), var(--mantine-primary-color-3));
+ }
+}
+
+.mantine-Table-td {
+ color: light-dark(var(--mantine-color-appGray-7), var(--mantine-primary-color-3));
+ justify-content: center;
+ border-color: light-dark(
+ var(--mantine-color-appGray-1),
+ var(--mantine-primary-color-7)
+ );
+
+ & > * > .mantine-Text-root {
+ font-size: 14px;
+ }
+}
+
+.mrt-table-head-sort-button {
+ display: none;
+}
+
+.mrt-table-head-sort-button[data-sorted='asc'] {
+ display: flex;
+ min-height: 12px !important;
+ min-width: 12px !important;
+ max-width: 16px;
+ max-height: 16px;
+
+ & > * > .tabler-icon-arrows-sort {
+ height: 12px !important;
+ width: 12px !important;
+ color: light-dark(--mantine-primary-color-6, --mantine-color-appGray-5);
+ }
+}
+.mrt-table-head-sort-button[data-sorted='desc'] {
+ display: flex;
+ min-height: 12px !important;
+ min-width: 12px !important;
+ max-width: 16px;
+ max-height: 16px;
+
+ & > * > .tabler-icon-arrows-sort {
+ height: 12px !important;
+ width: 12px !important;
+ color: light-dark(--mantine-primary-color-6, --mantine-color-appGray-5);
+ }
+}
diff --git a/src/hooks/useAPI.ts b/src/hooks/useAPI.ts
index c3b85b1..5722f33 100644
--- a/src/hooks/useAPI.ts
+++ b/src/hooks/useAPI.ts
@@ -1,7 +1,9 @@
-import { useQuery, useQueryClient } from '@tanstack/react-query';
+import { useQuery, useQueryClient, useMutation, useInfiniteQuery } from '@tanstack/react-query';
+import { useCallback } from 'react';
+import { toast } from 'react-toastify';
export function useQueryAPI({ endpoint }: { endpoint: string }) {
- const queryClient = useQueryClient();
+
const callEndpoint = async (endpoint: string) => {
const url = `http://localhost:5000/trigger/${endpoint}`;
const options: object = {
@@ -16,22 +18,425 @@ export function useQueryAPI({ endpoint }: { endpoint: string }) {
'Sec-Fetch-Site': 'same-site',
},
};
+
const response = await fetch(url, options);
if (!response.ok) {
throw new Error(`${response.status} ${response.statusText}`);
}
- const responseData = await response.json();
- return responseData;
+ return await response.json();
};
return useQuery({
queryKey: ['GET', endpoint],
queryFn: () => callEndpoint(endpoint),
- retry: false,
- refetchOnWindowFocus: false,
- refetchOnMount: false,
- refetchOnReconnect: false,
- staleTime: 30 * (60 * 1000), // 30 minutes
- // cacheTime: 60 * (60 * 1000), // 60 minutes
});
}
+
+export function useMutationAPI() {
+
+ const callEndpoint = async (
+ method: string,
+ endpoint: string,
+ body: object | undefined | null,
+ ) => {
+
+ const url = `http://localhost:5000/trigger/${endpoint}`;
+ const options: any = {
+ method: method,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Headers': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Credentials': true,
+ 'Sec-Fetch-Mode': 'no-cors',
+ 'Sec-Fetch-Site': 'same-site'
+ },
+ body: JSON.stringify(body),
+ };
+
+ const response = await fetch(url, options);
+ if (!response.ok) {
+ const responseData = await response.json();
+ if (typeof responseData.detail !== 'string') {
+ const errorResponse = JSON.stringify({
+ status: response.status,
+ statusText: response.statusText,
+ method: options.method,
+ endpoint: endpoint,
+ msg: responseData.detail[0]?.msg,
+ loc: responseData.detail[0]?.loc,
+ type: responseData.detail[0]?.type,
+ });
+
+ throw new Error(errorResponse);
+ }
+ if (typeof responseData.detail === 'object') {
+ const errorResponse = JSON.stringify({
+ status: response.status,
+ statusText: response.statusText,
+ method: options.method,
+ endpoint: endpoint,
+ msg: responseData.detail.message,
+ });
+
+ throw new Error(errorResponse);
+ }
+ const errorResponse = JSON.stringify({
+ status: response.status,
+ statusText: response.statusText,
+ method: options.method,
+ endpoint: endpoint,
+ msg: responseData.detail,
+ });
+
+ throw new Error(errorResponse);
+ }
+ return await response.json();
+ };
+
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationFn: ({
+ method,
+ endpoint,
+ body = undefined,
+ }: {
+ method: string;
+ endpoint: string;
+ body?: object | undefined | null;
+ }) => callEndpoint(method, endpoint, body),
+ onMutate: () => {},
+ onSuccess: (data, variables) => {
+ queryClient.invalidateQueries({ queryKey: ['GET', variables.endpoint] });
+
+ if (variables.endpoint.includes('/')) {
+ if ((variables.endpoint.match(/\//g) || []).length > 2) {
+ const GetEndpoint = variables.endpoint.split('/');
+ const Endpoint = `${GetEndpoint[1]}/${GetEndpoint[2]}`;
+ queryClient.invalidateQueries({ queryKey: ['GET', `/${Endpoint}`] });
+ } else {
+ const GetEndpoint = variables.endpoint.split('/')[1];
+ queryClient.invalidateQueries({ queryKey: ['GET', `/${GetEndpoint}`] });
+ }
+ }
+ },
+ });
+}
+
+export function useFileUploadAPI() {
+
+ const callEndpoint = async (
+ method: string,
+ endpoint: string,
+ body?: object | FormData | undefined | null,
+ ) => {
+
+ const url = `http://localhost:5000/trigger/${endpoint}`;
+
+ const options = {
+ method: method,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Headers': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Credentials': true,
+ 'Sec-Fetch-Mode': 'no-cors',
+ 'Sec-Fetch-Site': 'same-site',
+ },
+ body: body ?? undefined,
+ };
+ const response = await fetch(url, options as unknown as Body);
+ if (!response.ok) {
+ const responseData = await response.json();
+ if (typeof responseData.detail !== 'string') {
+ const errorResponse = JSON.stringify({
+ status: response.status,
+ statusText: response.statusText,
+ method: options.method,
+ endpoint: endpoint,
+ msg: responseData.detail[0].msg,
+ loc: responseData.detail[0].loc,
+ type: responseData.detail[0].type,
+ });
+
+ throw new Error(errorResponse);
+ }
+ const errorResponse = JSON.stringify({
+ status: response.status,
+ statusText: response.statusText,
+ method: options.method,
+ endpoint: endpoint,
+ msg: responseData.detail,
+ });
+
+ throw new Error(errorResponse);
+ }
+ return await response.json();
+ };
+
+ const queryClient = useQueryClient();
+ return useMutation({
+ mutationFn: async ({
+ method,
+ endpoint,
+ body,
+ }: {
+ method: string;
+ endpoint: string;
+ body: object | FormData | undefined | null;
+ toastID?: string;
+ }) => callEndpoint(method, endpoint, body),
+ onMutate: () => {},
+ onSuccess: (variables) => {
+ queryClient.invalidateQueries({ queryKey: ['GET', variables.endpoint] });
+ if (variables.endpoint?.includes('/')) {
+ const GetEndpoint = variables.endpoint.split('/')[1];
+ queryClient.invalidateQueries({ queryKey: ['GET', `/${GetEndpoint}`] });
+ }
+ },
+ });
+}
+
+export function useFetchAllRecordsAPI({ endpoint }: { endpoint: string }) {
+ const pageSize = 500;
+ const queryClient = useQueryClient();
+
+ const fetchPage = async (page: number, retryCount = 0): Promise => {
+
+ // Start building the URL
+ const url = new URL(`http://localhost:5000/trigger/${endpoint}`);
+
+ // Check and append custom query parameters from the endpoint
+ const customParams = new URLSearchParams(endpoint.split('?')[1]);
+ for (const [key, value] of customParams) {
+ if (!url.searchParams.has(key)) {
+ url.searchParams.append(key, value);
+ }
+ }
+
+ // Add 'page' and 'size' parameters
+ url.searchParams.set('page', page.toString()); // Use 'set' to ensure uniqueness
+ url.searchParams.set('size', pageSize.toString());
+
+ const options: any = {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Headers': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Credentials': true,
+ 'Sec-Fetch-Mode': 'no-cors',
+ 'Sec-Fetch-Site': 'same-site',
+ },
+ };
+
+ try {
+ const response = await fetch(url.toString(), options);
+
+ if (!response.ok) {
+ // If the response is not ok and status is 401 (not authorized), reload the page
+ if (response.status === 401) {
+ window.location.reload();
+ }
+ throw new Error(
+ `Error fetching page ${page}: ${response.status} ${response.statusText}`,
+ );
+ }
+ return response.json();
+ } catch (err) {
+ if (retryCount < 3) {
+ // Retry up to 3 times with a random delay
+ const delay = Math.floor(Math.random() * 3000) + 1000; // Random delay between 1 to 3 seconds
+ console.error(
+ `Retrying page ${page}, attempt ${retryCount + 1} after ${delay} ms`,
+ );
+ await new Promise((resolve) => setTimeout(resolve, delay));
+ return fetchPage(page, retryCount + 1);
+ }
+ console.error(`Error fetching page ${page} after 3 retries:`, err);
+ throw err; // Re-throw the error to handle it in the calling function
+ }
+ };
+
+ const callEndpoint = async () => {
+ try {
+ // Fetch the first page to get the total number of items and pages
+ const firstPageData = await fetchPage(1);
+ // If the first page doesn't have a 'pages' property, return the data as-is
+ if (firstPageData?.pages === undefined) {
+ return firstPageData;
+ }
+ if (firstPageData?.pages === 1) {
+ return firstPageData.items;
+ }
+
+ let totalPages = firstPageData.pages;
+ const allItems = [...firstPageData.items];
+ // Fetch each page sequentially
+ for (let page = 2; page <= totalPages; page++) {
+ try {
+ const pageData = await fetchPage(page);
+ allItems.push(...pageData.items);
+
+ // Check and update the totalPages if it has increased
+ if (pageData.pages > totalPages) {
+ totalPages = pageData.pages;
+ }
+ } catch (err) {
+ console.error(`Final error fetching page ${page}:`, err);
+ // Continue to the next page even if the current page fails
+ }
+ }
+
+ return allItems;
+ } catch (error) {
+ // Handling errors in fetching the first page
+ console.error('Error fetching the first page:', error);
+ return []; // Return empty array on error
+ }
+ };
+
+ const invalidate = useCallback(() => {
+ queryClient.invalidateQueries({ queryKey: ['GET', endpoint] });
+ }, [queryClient, endpoint]);
+
+ return {
+ ...useQuery({
+ queryKey: ['GET', endpoint],
+ queryFn: callEndpoint,
+ }),
+ invalidate,
+ };
+}
+
+interface DownloadFileOptions {
+ endpoint: string;
+ file_name: string;
+}
+
+export function useDownloadFile() {
+ const downloadFile = useCallback(
+ async ({ endpoint, file_name }: DownloadFileOptions) => {
+ const url = `http://localhost:5000/trigger/${endpoint}`;
+ const options: any = {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Headers': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Credentials': true,
+ 'Sec-Fetch-Mode': 'no-cors',
+ 'Sec-Fetch-Site': 'same-site',
+ },
+ };
+ const toastID = toast.loading('Processing...');
+ try {
+ const response = await fetch(url, options);
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+
+ const blob = await response.blob();
+ if (blob.type === 'application/json') {
+ const blob_text = await blob.text();
+ const cleaned_text = blob_text.replace(/"/g, '');
+ toast.update(toastID, {
+ render: cleaned_text,
+ type: 'info',
+ isLoading: false,
+ autoClose: 5000,
+ closeButton: null,
+ });
+ return;
+ }
+
+ if (typeof window !== 'undefined') {
+ const blobURL = window.URL.createObjectURL(blob);
+ const a = document.createElement('a');
+
+ a.style.display = 'none';
+ a.href = blobURL;
+ a.download = file_name;
+
+ document.body.appendChild(a);
+ a.click();
+ window.URL.revokeObjectURL(blobURL);
+ document.body.removeChild(a);
+ toast.update(toastID, {
+ render: `${file_name} Downloaded`,
+ type: 'success',
+ isLoading: false,
+ autoClose: 5000,
+ closeButton: null,
+ });
+ }
+ } catch (error) {
+ console.error('Download failed:', error);
+ toast.update(toastID, {
+ render: `Error Downloading ${file_name}. Please try again.`,
+ type: 'error',
+ isLoading: false,
+ autoClose: 5000,
+ closeButton: null,
+ });
+ }
+ },
+ [],
+ );
+
+ return downloadFile;
+}
+
+
+export const useFetchInfiniteQuery = ({
+ endpoint,
+ pageSize = 10,
+}: {
+ endpoint: string;
+ pageSize?: number;
+}) => {
+ const queryKey = ['GET', endpoint];
+
+ const fetchInfiniteQuery = async (endpoint: string) => {
+ const url = `http://localhost:5000/trigger/${endpoint}`;
+ const requestOptions: any = {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Headers': '*',
+ 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
+ 'Access-Control-Allow-Credentials': true,
+ 'Sec-Fetch-Mode': 'no-cors',
+ 'Sec-Fetch-Site': 'same-site'
+ },
+ };
+ try {
+ const response = await fetch(url, requestOptions);
+ return await response.json();
+ } catch (error) {
+ console.error('Error fetching transactions:', error);
+ throw error;
+ }
+ };
+ const queryFn = ({ pageParam = 1 }) =>
+ fetchInfiniteQuery(`${endpoint}&page=${pageParam}&size=${pageSize}`);
+ const getNextPageParam = (lastPage: any, allPages: any) => {
+ if (lastPage.items.length < pageSize) {
+ return undefined;
+ }
+ return allPages.length + 1;
+ };
+ const { data, isLoading, isFetchingNextPage, fetchNextPage, isError, isFetching } =
+ useInfiniteQuery({
+ queryKey,
+ queryFn,
+ getNextPageParam,
+ initialPageParam: 1,
+ });
+ return { data, isLoading, isFetchingNextPage, fetchNextPage, isError, isFetching };
+};
\ No newline at end of file
diff --git a/src/index.css b/src/index.css
index 6119ad9..79453b2 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,3 +1,5 @@
+@import url('https://fonts.googleapis.com/css2?family=Jost:ital,wght@0,100;0,200;0,400;1,100;1,200&display=swap');
+
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
@@ -54,6 +56,14 @@ button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
+#settings-container {
+ justify-content: left;
+}
+
+#settings-nav {
+ width: 25vw;
+}
+
@media (prefers-color-scheme: light) {
:root {
color: #213547;
diff --git a/src/pages/homepage/Homepage.tsx b/src/pages/homepage/Homepage.tsx
index 77b39e7..15ee344 100644
--- a/src/pages/homepage/Homepage.tsx
+++ b/src/pages/homepage/Homepage.tsx
@@ -1,5 +1,4 @@
import { Stack } from '@mantine/core';
-import { useEffect, useState } from 'react';
import stackClasses from '../../styles/Stack.module.css';
import {useQueryAPI} from '../../hooks/useAPI';
import Search from './components/Search';
@@ -9,6 +8,7 @@ import Bookmarks from './components/Bookmarks';
import SettingsButton from './components/SettingsButton';
import { useAtom } from 'jotai';
import { HomepageFilters } from '../../contexts/HomepageFilters';
+import { useEffect, useState } from 'react';
export default function Homepage() {
diff --git a/src/pages/homepage/components/AppItem.tsx b/src/pages/homepage/components/AppItem.tsx
index 07ee35b..af35381 100644
--- a/src/pages/homepage/components/AppItem.tsx
+++ b/src/pages/homepage/components/AppItem.tsx
@@ -35,9 +35,10 @@ function AppItem({ url, icon, name }: any) {
gap: 0,
}}
>
- {name}
+ {name}
- Applications
+ Applications
{groupsIsFetched && linksIsFetched && categories?.length > 0 && (
- Bookmarks
+ Bookmarks
- {category}
+ {category}
{links?.map((link: any) => (
))}
diff --git a/src/pages/homepage/components/LinkItem.tsx b/src/pages/homepage/components/LinkItem.tsx
index d46f9b2..e1974ee 100644
--- a/src/pages/homepage/components/LinkItem.tsx
+++ b/src/pages/homepage/components/LinkItem.tsx
@@ -3,7 +3,7 @@ import texts from '../../../styles/Text.module.css';
function LinkItem({ link }: any) {
return (
-
+
{link.name}
);
diff --git a/src/pages/homepage/components/SettingsButton.tsx b/src/pages/homepage/components/SettingsButton.tsx
index 7e625cc..263ddd8 100644
--- a/src/pages/homepage/components/SettingsButton.tsx
+++ b/src/pages/homepage/components/SettingsButton.tsx
@@ -24,7 +24,9 @@ function SettingsButton() {
useEffect(() => {
if(data) {
- setCategories(data.map((category: any) => {return {value: category.category, label: category.category}}));
+ let list: [any] = data.map((category: any) => {return {value: category.category, label: category.category}}) || [];
+ list.unshift({value: 'All', label: 'All'});
+ setCategories(list);
}
}, [data, isFetched]);
@@ -41,7 +43,9 @@ function SettingsButton() {
withArrow
shadow='md'
position='top'
- classNames={menu}
+ classNames={{
+ dropdown: menu.dropdown
+ }}
styles={{
dropdown: {
backgroundColor: 'var(--color-background)',
@@ -49,7 +53,7 @@ function SettingsButton() {
}}
>
-
diff --git a/src/pages/settings/Settings.tsx b/src/pages/settings/Settings.tsx
new file mode 100644
index 0000000..cf15296
--- /dev/null
+++ b/src/pages/settings/Settings.tsx
@@ -0,0 +1,38 @@
+import { ActionIcon, Group, Stack, Tabs } from "@mantine/core";
+import tabClasses from '../../styles/Tabs.module.css';
+import Personalization from "./components/Personalization";
+import { FiArrowLeftCircle } from "react-icons/fi";
+import { actionIconClasses } from "../../styles";
+import Messages from "./components/Messages";
+import Applications from "./components/Applications";
+import Bookmarks from "./components/Bookmarks";
+
+function Settings() {
+ return (
+
+
+
+ Settings
+
+
+
+ Personal Info
+ Messages
+ Applications
+ Bookmark Categories
+ Bookmarks
+ Themes
+ Search Providers
+
+
+
+
+ Bookmark Categories
+
+ Themes
+ Search Providers
+
+
+ );
+}
+export default Settings;
diff --git a/src/pages/settings/components/Applications.tsx b/src/pages/settings/components/Applications.tsx
new file mode 100644
index 0000000..5dc86a0
--- /dev/null
+++ b/src/pages/settings/components/Applications.tsx
@@ -0,0 +1,59 @@
+import { useEffect, useState } from "react";
+import {useMutationAPI, useQueryAPI} from "../../../hooks/useAPI";
+import { DataTable } from "../../../DataTable/DataTable";
+import { toast } from "react-toastify";
+import { MRT_TableOptions } from "mantine-react-table";
+import ApplicationColumns from "../../../DataTable/columns/ApplicationColumns";
+import { Stack } from "@mantine/core";
+const ApplicationSettings = () => {
+ const endpoint = "api/apps";
+ const { data, isFetching, isLoading, isFetched } = useQueryAPI({
+ endpoint: endpoint,
+ });
+ const [applicationData, setApplicationData] = useState([]);
+
+ const {mutateAsync: createRow, isPending: isCreatingRow} = useMutationAPI();
+ const {mutateAsync: editRow, isPending: isEditingRow} = useMutationAPI();
+
+ useEffect(() => {
+ if(isFetched) {
+ setApplicationData(data);
+ }
+ })
+
+ const handleCreateRow: MRT_TableOptions['onCreatingRowSave'] = async ({
+ values,
+ exitCreatingMode,
+ }) => {
+
+ createRow({method: "POST", endpoint: endpoint, body: values}).then(() => {
+ toast.success("Application created successfully");
+ })
+ exitCreatingMode();
+ };
+ const handleEditRow: MRT_TableOptions['onCreatingRowSave'] = async ({
+ values,
+ table,
+ }) => {
+ editRow({method: "PATCH", endpoint: endpoint, body: values}).then(() => {
+ toast.success("Application updated successfully");
+ });
+ table.setEditingRow(null);
+ };
+
+ return (
+
+ Applications
+
+
+ )
+};
+export default ApplicationSettings;
diff --git a/src/pages/settings/components/Bookmarks.tsx b/src/pages/settings/components/Bookmarks.tsx
new file mode 100644
index 0000000..4a286c4
--- /dev/null
+++ b/src/pages/settings/components/Bookmarks.tsx
@@ -0,0 +1,76 @@
+import { useEffect, useState } from "react";
+import {useMutationAPI, useQueryAPI} from "../../../hooks/useAPI";
+import { DataTable } from "../../../DataTable/DataTable";
+import { toast } from "react-toastify";
+import { MRT_TableOptions } from "mantine-react-table";
+import { Stack } from "@mantine/core";
+import BookmarkColumns from "../../../DataTable/columns/BookmarkColumns";
+const BookmarkSettings = () => {
+ const endpoint = "api/links";
+ const { data, isFetching, isLoading, isFetched } = useQueryAPI({
+ endpoint: endpoint,
+ });
+ const {
+ data: groupData,
+ isFetching: groupDataisFetching,
+ isLoading: groupDataisLoading,
+ isFetched: groupDataisFetched,
+ } = useQueryAPI({ endpoint: "api/categories" });
+ const [bookmarkData, setBookmarkData] = useState([]);
+ const [groups, setGroups] = useState([]);
+ const [fullyFetched, setFullyFetched] = useState(false);
+ const {mutateAsync: createRow, isPending: isCreatingRow} = useMutationAPI();
+ const {mutateAsync: editRow, isPending: isEditingRow} = useMutationAPI();
+
+ useEffect(() => {
+ if(isFetched) {
+ setBookmarkData(data);
+ }
+ })
+
+ useEffect(() => {
+ if (groupDataisFetched) {
+ let groupList = groupData.map((category: any) => {
+ return category.category_name;
+ });
+ setGroups(groupList);
+ setFullyFetched(true);
+ }
+ }, [groupDataisFetched]);
+
+ const handleCreateRow: MRT_TableOptions['onCreatingRowSave'] = async ({
+ values,
+ exitCreatingMode,
+ }) => {
+
+ createRow({method: "POST", endpoint: endpoint, body: values}).then(() => {
+ toast.success("Application created successfully");
+ })
+ exitCreatingMode();
+ };
+ const handleEditRow: MRT_TableOptions['onCreatingRowSave'] = async ({
+ values,
+ table,
+ }) => {
+ editRow({method: "PATCH", endpoint: endpoint, body: values}).then(() => {
+ toast.success("Application updated successfully");
+ });
+ table.setEditingRow(null);
+ };
+
+ return (
+
+ Bookmarks
+
+
+ )
+};
+export default BookmarkSettings;
diff --git a/src/pages/settings/components/Categories.tsx b/src/pages/settings/components/Categories.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/src/pages/settings/components/Messages.tsx b/src/pages/settings/components/Messages.tsx
new file mode 100644
index 0000000..0297f64
--- /dev/null
+++ b/src/pages/settings/components/Messages.tsx
@@ -0,0 +1,59 @@
+import { useEffect, useState } from "react";
+import {useMutationAPI, useQueryAPI} from "../../../hooks/useAPI";
+import { DataTable } from "../../../DataTable/DataTable";
+import { toast } from "react-toastify";
+import { MRT_TableOptions } from "mantine-react-table";
+import MessagesColumns from "../../../DataTable/columns/MessagesColumns";
+import { Stack } from "@mantine/core";
+const MessageSettings = () => {
+ const endpoint = "api/messages";
+ const { data, isFetching, isLoading, isFetched } = useQueryAPI({
+ endpoint: endpoint,
+ });
+ const [messageData, setMessageData] = useState([]);
+
+ const {mutateAsync: createRow, isPending: isCreatingRow} = useMutationAPI();
+ const {mutateAsync: editRow, isPending: isEditingRow} = useMutationAPI();
+
+ useEffect(() => {
+ if(isFetched) {
+ setMessageData(data);
+ }
+ })
+
+ const handleCreateRow: MRT_TableOptions['onCreatingRowSave'] = async ({
+ values,
+ exitCreatingMode,
+ }) => {
+
+ createRow({method: "POST", endpoint: endpoint, body: values}).then(() => {
+ toast.success("Message created successfully");
+ })
+ exitCreatingMode();
+ };
+ const handleEditRow: MRT_TableOptions['onCreatingRowSave'] = async ({
+ values,
+ table,
+ }) => {
+ editRow({method: "PATCH", endpoint: endpoint, body: values}).then(() => {
+ toast.success("Message updated successfully");
+ });
+ table.setEditingRow(null);
+ };
+
+ return (
+
+ Messages
+
+
+ )
+};
+export default MessageSettings;
diff --git a/src/pages/settings/components/Personalization.tsx b/src/pages/settings/components/Personalization.tsx
new file mode 100644
index 0000000..968d02e
--- /dev/null
+++ b/src/pages/settings/components/Personalization.tsx
@@ -0,0 +1,58 @@
+import { useEffect, useState } from "react";
+import {useMutationAPI, useQueryAPI} from "../../../hooks/useAPI";
+import { DataTable } from "../../../DataTable/DataTable";
+import PersonalizationColumns from "../../../DataTable/columns/PersonalizationColumns";
+import { toast } from "react-toastify";
+import { MRT_TableOptions } from "mantine-react-table";
+const PersonalizationSettings = () => {
+ const endpoint = "api/personaldata";
+ const { data, isFetching, isLoading, isFetched } = useQueryAPI({
+ endpoint: endpoint,
+ });
+ const [personalData, setPersonalData] = useState([]);
+
+ const {mutateAsync: createRow, isPending: isCreatingRow} = useMutationAPI();
+ const {mutateAsync: editRow, isPending: isEditingRow} = useMutationAPI();
+
+ useEffect(() => {
+ if(isFetched) {
+ setPersonalData(data);
+ }
+ })
+
+ const handleCreateRow: MRT_TableOptions['onCreatingRowSave'] = async ({
+ values,
+ exitCreatingMode,
+ }) => {
+
+ createRow({method: "POST", endpoint: endpoint, body: values}).then(() => {
+ toast.success("Personalization created successfully");
+ })
+ exitCreatingMode();
+ };
+ const handleEditRow: MRT_TableOptions['onCreatingRowSave'] = async ({
+ values,
+ table,
+ }) => {
+ editRow({method: "PATCH", endpoint: endpoint, body: values}).then(() => {
+ toast.success("Personalization updated successfully");
+ });
+ table.setEditingRow(null);
+ };
+
+ return (
+ <>
+ Personalization
+
+ >
+ )
+};
+export default PersonalizationSettings;
diff --git a/src/pages/settings/components/Themes.tsx b/src/pages/settings/components/Themes.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/src/styles/ActionIcon.module.css b/src/styles/ActionIcon.module.css
index 6a41146..b3b191b 100644
--- a/src/styles/ActionIcon.module.css
+++ b/src/styles/ActionIcon.module.css
@@ -1,6 +1,12 @@
-.root {
- background-color: transparent;
-}
-.icon {
- color: var(--color-text-acc)
+.backButton {
+ &.root {
+ background-color: transparent;
+ color: black;
+ width: 2rem;
+ height: 2rem;
+ .icon {
+ font-size: 24px;
+ }
+ }
+
}
\ No newline at end of file
diff --git a/src/styles/Button.module.css b/src/styles/Button.module.css
index 7fd91a6..1041b0e 100644
--- a/src/styles/Button.module.css
+++ b/src/styles/Button.module.css
@@ -1,26 +1,30 @@
.settingsButton {
- width: 2rem;
- height: 2rem;
- padding: 0px;
- margin: 0px;
- position: fixed;
- bottom: 10px;
- left: 10px;
- color: var(--color-text-pri);
- background-color: var(--color-background);
- border-radius: 100%;
- border: solid 2px var(--color-text-pri);
- cursor: pointer;
+ &.root {
+ width: 2rem;
+ height: 2rem;
+ padding: 0px;
+ margin: 0px;
+ position: fixed;
+ bottom: 10px;
+ left: 10px;
+ color: var(--color-text-pri);
+ background-color: var(--color-background);
+ border-radius: 100%;
+ border: solid 2px var(--color-text-pri);
+ cursor: pointer;
+ }
}
.themeButton{
- font-size: 1em;
- font-weight:500;
- margin: 10px;
- width:128px;
- line-height: 3rem;
- text-align: center;
- text-transform: uppercase;
- border-radius: 1em;
- height: 3.5rem;
+ &.root {
+ font-size: 1em;
+ font-weight:500;
+ margin: 10px;
+ width:128px;
+ line-height: 3rem;
+ text-align: center;
+ text-transform: uppercase;
+ border-radius: 1em;
+ height: 3.5rem;
+ }
}
\ No newline at end of file
diff --git a/src/styles/Menu.module.css b/src/styles/Menu.module.css
index 39dadc1..81f06a3 100644
--- a/src/styles/Menu.module.css
+++ b/src/styles/Menu.module.css
@@ -1,5 +1,7 @@
-.dropdown {
- background-color: var(--color-background);
- border: solid 2px var(--color-border);
- border-color: var(--color-border);
+.settingsButton {
+ .dropdown {
+ background-color: white;
+ border: solid 2px var(--color-border);
+ border-color: var(--color-border);
+ }
}
\ No newline at end of file
diff --git a/src/styles/Tabs.module.css b/src/styles/Tabs.module.css
new file mode 100644
index 0000000..016c4cf
--- /dev/null
+++ b/src/styles/Tabs.module.css
@@ -0,0 +1,6 @@
+.settingsTabs {
+ .panel {
+ padding-left: 2rem;
+ height: 100%;
+ }
+}
\ No newline at end of file
diff --git a/src/styles/Text.module.css b/src/styles/Text.module.css
index 9a05f21..959f8d2 100644
--- a/src/styles/Text.module.css
+++ b/src/styles/Text.module.css
@@ -1,90 +1,106 @@
.greeting {
- margin: 0;
- margin-left: .5em;
- margin-right: .5em;
- padding: 0;
- text-align: left;
- font-size: 4em;
- font-weight: 400;
- width: max-content;
- color: var(--color-text-acc);
-}
-
-.dateTime {
- display: flex;
- font-size: 2em;
- height: 30px;
- margin: 0;
- padding: 0;
- margin-right: 1em;
- text-transform: uppercase;
- font-weight: 300;
- color: var(--color-text-pri);
-}
-
-.sectionTitle {
- text-decoration: underline;
- font-size: 20px;
- font-weight: 200;
- font-style: italic;
- height: 10px;
- text-transform: uppercase;
- margin-top: 20px;
- margin-bottom: 20px;
- color: var(--color-text-pri);
-}
-
-.appName {
- font-weight: 400;
- font-size: 0.8em;
- font-style: normal;
- color: light-dark(blue, red);
- font-family: 'Jost', sans-serif;
- margin: 0;
-}
-
-.appUrl {
- font-size: 0.8em;
- font-weight: 400;
- font-style: italic;
- text-transform: uppercase;
- color: var(--color-text-acc);
- margin: 0;
-}
-
-.linkCategory {
- font-size: 1.1em;
- font-weight: 400;
- height: 10px;
- color: var(--color-text-acc);
- text-transform: uppercase;
- margin-top: 20px;
- margin-bottom: 20px;
-}
-
-.linkItem {
- display: block;
- font-size: 1em;
- line-height: 2;
- color: var(--color-text-pri)
-}
-
-.settingsLink {
- font-size: 1.25em;
- display: block;
- margin-left: 0;
- margin-right: 0;
- line-height: 2;
- justify-self: center;
- color: var(--color-text-pri);
- border-radius: 1em;
- &:hover {
- background-color: var(--color-text-acc);
+ &.root {
+ margin: 0;
+ margin-left: .5em;
+ margin-right: .5em;
+ padding: 0;
+ text-align: left;
+ font-size: 4em;
+ font-weight: 400;
+ width: max-content;
+ color: var(--color-text-acc);
}
}
-.linkItem:hover {
- text-decoration: underline;
+.dateTime {
+ &.root {
+ display: flex;
+ font-family: -apple-system, Jost, BlinkMacSystemFont, Helvetica Neue, Roboto, sans-serif !important;
+ font-size: 2em;
+ height: 30px;
+ margin: 0;
+ padding: 0;
+ margin-right: 1em;
+ text-transform: uppercase;
+ font-weight: 300;
+ color: var(--color-text-pri);
+ }
+}
+
+.sectionTitle {
+ &.root {
+ text-decoration: underline;
+ font-size: 20px;
+ font-weight: 200;
+ font-style: italic;
+ height: 10px;
+ text-transform: uppercase;
+ margin-top: 20px;
+ margin-bottom: 20px;
+ color: var(--color-text-pri);
+ }
+}
+
+.appName {
+ &.root {
+ font-weight: 400;
+ font-size: 0.8em;
+ font-style: normal;
+ color: light-dark(blue, black);
+ font-family: 'Jost', sans-serif;
+ margin: 0;
+ }
+}
+
+.appUrl {
+ &.root {
+ font-size: 0.8em;
+ font-weight: 400;
+ font-style: italic;
+ text-transform: uppercase;
+ color: var(--color-text-acc);
+ margin: 0;
+ }
+}
+
+.linkCategory {
+ &.root {
+ font-size: 1.1em;
+ font-weight: 400;
+ height: 10px;
+ color: var(--color-text-acc);
+ text-transform: uppercase;
+ margin-top: 20px;
+ margin-bottom: 20px;
+ }
+}
+
+.linkItem {
+ &.root {
+ display: block;
+ font-size: 1em;
+ line-height: 2;
+ color: var(--color-text-pri);
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+}
+
+.settingsLink {
+ &.root {
+ font-size: 1.25em;
+ display: block;
+ margin-left: 0;
+ margin-right: 0;
+ line-height: 2;
+ justify-self: center;
+ color: var(--color-text-pri);
+ border-radius: 1em;
+ &:hover {
+ background-color: var(--color-text-acc);
+ }
+ }
}
a{
diff --git a/src/styles/TextInput.module.css b/src/styles/TextInput.module.css
index 12ba5f2..e348c60 100644
--- a/src/styles/TextInput.module.css
+++ b/src/styles/TextInput.module.css
@@ -1,52 +1,50 @@
.keyword{
- background-color: transparent;
- border: 0;
- border-bottom: thin solid var(--color-border);
- color: var(--color-text-pri);
- font-family: -apple-system, Jost, BlinkMacSystemFont, Helvetica Neue, Roboto, sans-serif;
- font-style: italic;
- font-size: 0.8em;
- height: 3.5em;
- transition: all 0.4s ease;
- width: 50%;
- padding-left: 1em;
- padding-right: 1em;
- text-align: center;
+ .input {
+ border: 0;
+ border-bottom: thin solid var(--color-border);
+ background-color: transparent;
+ color: var(--color-text-pri);
+ font-style: italic;
+ font-size: 0.8em;
+ height: 3.5em;
+ transition: all 0.4s ease;
+ width: 50%;
+ padding-left: 1em;
+ padding-right: 1em;
+ text-align: center;
+ &:focus {
+ background-color: var(--color-search-background);
+ border-color: var(--color-border);
+ outline: none;
+ color: var(--color-text-acc);
+ font-style: normal;
+ font-weight: 500;
+ font-size: 1.2em;
+ letter-spacing: .2em;
+ width:100%;
+ border-top-left-radius: .25em;
+ border-top-right-radius: .25em;
+ border-bottom-left-radius: .25em;
+ border-bottom-right-radius: .25em;
+ }
+ }
+ .label{
+ color: var(--color-border);
+ display: block;
+ position: relative;
+ font-style: normal;
+ font-weight: 200;
+ font-size: 1.2em;
+ letter-spacing: .2em;
+ opacity: 1;
+ padding-left: 1em;
+ padding-right: 1em;
+ text-align: center;
+ width: 100%;
+ top: 28%;
+ }
}
-.keyword:focus{
- background-color: var(--color-search-background);
- border-color: var(--color-border);
- outline: none;
- color: var(--color-text-acc);
- font-style: normal;
- font-weight: 500;
- font-size: 1.2em;
- letter-spacing: .2em;
- width:100%;
- border-top-left-radius: .25em;
- border-top-right-radius: .25em;
- border-bottom-left-radius: .25em;
- border-bottom-right-radius: .25em;
-}
-.keyword::placeholder{
- text-align: left;
-}
-.label{
- color: var(--color-border);
- display: block;
- position: relative;
- font-style: normal;
- font-weight: 200;
- font-size: 1.2em;
- letter-spacing: .2em;
- opacity: 1;
- padding-left: 1em;
- padding-right: 1em;
- text-align: center;
- width: 100%;
- top: 28%;
-}
.keyword:placeholder-shown + .label{
visibility: hidden;
z-index: 1;
diff --git a/src/styles/index.ts b/src/styles/index.ts
index bfc0791..b0e1d1b 100644
--- a/src/styles/index.ts
+++ b/src/styles/index.ts
@@ -5,7 +5,8 @@ import navLinkClasses from './NavLink.module.css';
import popoverClasses from './Popover.module.css';
import selectClasses from './Select.module.css';
import stackClasses from './Stack.module.css';
+import tabClasses from './Tabs.module.css';
import textClasses from './Text.module.css';
import textInputClasses from './TextInput.module.css';
-export { actionIconClasses, buttonClasses, menuClasses, navLinkClasses, popoverClasses, selectClasses, stackClasses, textClasses, textInputClasses }
\ No newline at end of file
+export { actionIconClasses, buttonClasses, menuClasses, navLinkClasses, popoverClasses, selectClasses, stackClasses, tabClasses, textClasses, textInputClasses }
\ No newline at end of file