diff --git a/dev-dist/sw.js b/dev-dist/sw.js index b003956..18ba53a 100644 --- a/dev-dist/sw.js +++ b/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.jlpvaemfr1" + "revision": "0.s3ua6eoia6o" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/package-lock.json b/package-lock.json index 4235eb9..ac4ad4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1668,7 +1668,6 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -1918,7 +1917,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1935,7 +1933,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1952,7 +1949,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1969,7 +1965,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1986,7 +1981,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2003,7 +1997,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2020,7 +2013,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2037,7 +2029,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2054,7 +2045,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2071,7 +2061,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2088,7 +2077,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2105,7 +2093,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2122,7 +2109,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2139,7 +2125,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2156,7 +2141,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2173,7 +2157,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2190,7 +2173,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2207,7 +2189,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2224,7 +2205,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2241,7 +2221,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2258,7 +2237,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2275,7 +2253,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2292,7 +2269,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2309,7 +2285,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2326,7 +2301,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2430,6 +2404,23 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", @@ -2443,6 +2434,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/@eslint/js": { "version": "9.17.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", @@ -2790,18 +2788,6 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "license": "MIT" }, - "node_modules/@rollup/plugin-node-resolve/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@rollup/plugin-replace": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", @@ -2860,14 +2846,25 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "license": "MIT" }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.29.1.tgz", - "integrity": "sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", + "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2875,13 +2872,12 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.29.1.tgz", - "integrity": "sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", + "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2889,13 +2885,12 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.29.1.tgz", - "integrity": "sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", + "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2903,13 +2898,12 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz", - "integrity": "sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", + "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2917,13 +2911,12 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.29.1.tgz", - "integrity": "sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", + "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2931,13 +2924,12 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.29.1.tgz", - "integrity": "sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", + "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2945,13 +2937,12 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.29.1.tgz", - "integrity": "sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", + "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2959,13 +2950,12 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.29.1.tgz", - "integrity": "sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", + "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2973,13 +2963,12 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.29.1.tgz", - "integrity": "sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz", + "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2987,13 +2976,12 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.29.1.tgz", - "integrity": "sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz", + "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3001,13 +2989,12 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.29.1.tgz", - "integrity": "sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", + "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3015,13 +3002,12 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.29.1.tgz", - "integrity": "sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", + "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3029,13 +3015,12 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.29.1.tgz", - "integrity": "sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", + "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3043,13 +3028,12 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.29.1.tgz", - "integrity": "sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", + "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3057,13 +3041,12 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.29.1.tgz", - "integrity": "sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", + "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3071,13 +3054,12 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.29.1.tgz", - "integrity": "sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", + "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3085,13 +3067,12 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.29.1.tgz", - "integrity": "sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", + "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3099,13 +3080,12 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.29.1.tgz", - "integrity": "sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", + "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3113,13 +3093,12 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz", - "integrity": "sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", + "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3164,7 +3143,7 @@ "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", @@ -3178,7 +3157,7 @@ "version": "7.6.8", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" @@ -3188,7 +3167,7 @@ "version": "7.4.4", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", @@ -3199,7 +3178,7 @@ "version": "7.20.6", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" @@ -4410,16 +4389,15 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -4475,6 +4453,19 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5375,6 +5366,15 @@ "node": ">=10" } }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -5722,7 +5722,6 @@ "version": "0.24.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -5893,6 +5892,30 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/espree": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", @@ -7242,10 +7265,9 @@ "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { @@ -7440,6 +7462,19 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7499,7 +7534,6 @@ "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "dev": true, "funding": [ { "type": "github", @@ -7851,12 +7885,12 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -7885,7 +7919,6 @@ "version": "8.4.49", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -8121,6 +8154,19 @@ "node": ">=8.10.0" } }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -8293,41 +8339,17 @@ } }, "node_modules/rollup": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.29.1.tgz", - "integrity": "sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==", - "dev": true, + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=10.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.29.1", - "@rollup/rollup-android-arm64": "4.29.1", - "@rollup/rollup-darwin-arm64": "4.29.1", - "@rollup/rollup-darwin-x64": "4.29.1", - "@rollup/rollup-freebsd-arm64": "4.29.1", - "@rollup/rollup-freebsd-x64": "4.29.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.29.1", - "@rollup/rollup-linux-arm-musleabihf": "4.29.1", - "@rollup/rollup-linux-arm64-gnu": "4.29.1", - "@rollup/rollup-linux-arm64-musl": "4.29.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.29.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.29.1", - "@rollup/rollup-linux-riscv64-gnu": "4.29.1", - "@rollup/rollup-linux-s390x-gnu": "4.29.1", - "@rollup/rollup-linux-x64-gnu": "4.29.1", - "@rollup/rollup-linux-x64-musl": "4.29.1", - "@rollup/rollup-win32-arm64-msvc": "4.29.1", - "@rollup/rollup-win32-ia32-msvc": "4.29.1", - "@rollup/rollup-win32-x64-msvc": "4.29.1", "fsevents": "~2.3.2" } }, @@ -8660,7 +8682,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -9071,18 +9092,6 @@ "node": ">=12.0.0" } }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -9425,7 +9434,6 @@ "version": "6.0.6", "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.6.tgz", "integrity": "sha512-NSjmUuckPmDU18bHz7QZ+bTYhRR0iA72cs2QAxCqDpafJ0S6qetco0LB3WW2OxlMHS0JmAv+yZ/R3uPmMyGTjQ==", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.24.2", @@ -9523,6 +9531,44 @@ } } }, + "node_modules/vite/node_modules/rollup": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", + "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.30.1", + "@rollup/rollup-android-arm64": "4.30.1", + "@rollup/rollup-darwin-arm64": "4.30.1", + "@rollup/rollup-darwin-x64": "4.30.1", + "@rollup/rollup-freebsd-arm64": "4.30.1", + "@rollup/rollup-freebsd-x64": "4.30.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", + "@rollup/rollup-linux-arm-musleabihf": "4.30.1", + "@rollup/rollup-linux-arm64-gnu": "4.30.1", + "@rollup/rollup-linux-arm64-musl": "4.30.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", + "@rollup/rollup-linux-riscv64-gnu": "4.30.1", + "@rollup/rollup-linux-s390x-gnu": "4.30.1", + "@rollup/rollup-linux-x64-gnu": "4.30.1", + "@rollup/rollup-linux-x64-musl": "4.30.1", + "@rollup/rollup-win32-arm64-msvc": "4.30.1", + "@rollup/rollup-win32-ia32-msvc": "4.30.1", + "@rollup/rollup-win32-x64-msvc": "4.30.1", + "fsevents": "~2.3.2" + } + }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -9727,22 +9773,6 @@ "node": ">=16.0.0" } }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/workbox-build/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -9764,12 +9794,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, "node_modules/workbox-build/node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -9782,21 +9806,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/workbox-build/node_modules/rollup": { - "version": "2.79.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", - "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/workbox-build/node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -10041,12 +10050,17 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yocto-queue": { diff --git a/src/App.tsx b/src/App.tsx index fa6affb..7ca9604 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,24 +1,46 @@ -import { useContext } from 'react'; +import { useContext } from "react"; import { Route, BrowserRouter as Router, Routes } from "react-router-dom"; -import GlobalStateContext from './Contexts/GlobalStateContext'; -import DefaultLayout from './Layouts/DefaultLayout'; -import Login from './Pages/Login'; -import { RouteLink } from './Routes/Routes'; +import GlobalStateContext from "./Contexts/GlobalStateContext"; +import DefaultLayout from "./Layouts/DefaultLayout"; +import Login from "./Pages/Login"; +import { RouteLink } from "./Routes/Routes"; +import LoginOtp from "./Pages/OnBoarding/LoginOtp"; +import CreatePass from "./Pages/OnBoarding/CreatePass"; +import LoginWithPass from "./Pages/OnBoarding/LoginWithPass"; -function App() { - const context = useContext(GlobalStateContext); - if (!context) throw new Error('App must be used within a GlobalStateProvider'); - const { isAuthenticate } = context; +function App() { + const context = useContext(GlobalStateContext); + if (!context) + throw new Error("App must be used within a GlobalStateProvider"); + const { isAuthenticate } = context; - return ( - - - } /> - {RouteLink.map(({ path, Component }, index) => (} />))}) : ()} /> - } /> - - - ); -} + return ( + + + } /> + } /> + } /> + }/> + + + {RouteLink.map(({ path, Component }, index) => ( + } /> + ))} + + + ) : ( + + ) + } + /> + } /> + + + ); +} export default App; diff --git a/src/Constants/Constants.tsx b/src/Constants/Constants.tsx new file mode 100644 index 0000000..09c8792 --- /dev/null +++ b/src/Constants/Constants.tsx @@ -0,0 +1,19 @@ +export const getTitle = (location: string): string => { + const titles: { [key: string]: string } = { + '/': 'Dashboard', + '/manage-user/register-user': 'Manage User', + '/manage-user/deactivate-accounts': 'Manage User', + '/manage-post': 'Manage Post', + '/manage-sub-admin': 'Manage Sub Admin', + '/manage-jobs': 'Manage Jobs', + '/manage-contact-us': 'Manage Contact Us', + '/manage-cms/faq': 'Manage CMS', + '/manage-cms/about-us': 'Manage CMS', + '/manage-cms/privacy-policy': 'Manage CMS', + '/manage-cms/terms-and-condition': 'Manage CMS', + '/profile': 'My Profile', + }; + + return titles[location] || 'Page Not Found'; + }; + \ No newline at end of file diff --git a/src/Layouts/DefaultLayout.tsx b/src/Layouts/DefaultLayout.tsx index cd9428a..dc62e93 100644 --- a/src/Layouts/DefaultLayout.tsx +++ b/src/Layouts/DefaultLayout.tsx @@ -3,44 +3,199 @@ import React, { FC } from "react"; import { RiNotificationLine } from "react-icons/ri"; import { NavLink, useLocation, useNavigate } from "react-router-dom"; import { nav } from "../Routes/Nav"; -import logo from '../assets/logo.svg'; -import { AccordionItem, AccordionItemContent, AccordionItemTrigger, AccordionRoot } from "../components/ui/accordion"; +import logo from "../assets/logo.svg"; +import { + AccordionItem, + AccordionItemContent, + AccordionItemTrigger, + AccordionRoot, +} from "../components/ui/accordion"; import { Avatar } from "../components/ui/avatar"; +import { getTitle } from "../Constants/Constants"; const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { - const navigate = useNavigate() - const location = useLocation() - - - + const navigate = useNavigate(); + const location = useLocation(); + const headerTitle = getTitle(location?.pathname); + console.log(location); return ( - - - - + + + - - {nav?.map(({ title, path, Icon, type, children }, index) => type === 'single' ? - {title} : - - - navigate(path)} gap={0} style={{ cursor: 'pointer', borderRadius: '8px', padding: '5px', width: '100%', display: 'flex', alignItems: 'center', border: '1px solid #ffffff', backgroundColor:'#fff',color:'#000', fontSize: '14px', }}> {title} - {children?.map(({ title, path, Icon }, index) => navigate(path)} style={{ marginTop: 6, cursor: 'pointer', borderRadius: '8px', padding: '6px', width: '100%', display: 'flex', alignItems: 'center', gap: 6, border: '1px solid #ffffff', backgroundColor:'#fff',color:'#000' }} > {title})} - - )} + + {nav?.map(({ title, path, Icon, type, children, initPath }, index) => + type === "single" ? ( + + {" "} + + {title} + + + ) : ( + + + navigate(path)} + gap={0} + style={{ + cursor: "pointer", + borderRadius: "8px", + padding: "5px", + width: "100%", + display: "flex", + alignItems: "center", + border: "1px solid #ffffff", + backgroundColor: "#fff", + color: "#000", + fontSize: "14px", + fontWeight: "normal", + }} + > + {" "} + + + {title} + + + {children?.map(({ title, path, Icon }, index) => ( + navigate(path)} + style={{ + marginTop: 6, + cursor: "pointer", + borderRadius: "8px", + padding: "6px", + width: "100%", + display: "flex", + alignItems: "center", + gap: 6, + border: "1px solid #ffffff", + backgroundColor: "#fff", + color: "#000", + }} + > + {" "} + + {title} + + + ))} + + + ) + )} - - - - navigate('/profile')} > - - - Ritesh Pandey - ritesh.pandey@wdimails.com - + + + + {headerTitle} + + + + navigate("/profile")}> + + + + Ritesh Pandey + + ritesh.pandey@wdimails.com + + {children} diff --git a/src/Pages/Dashboard/Dashboard.tsx b/src/Pages/Dashboard/Dashboard.tsx index d063737..a322836 100644 --- a/src/Pages/Dashboard/Dashboard.tsx +++ b/src/Pages/Dashboard/Dashboard.tsx @@ -1,7 +1,10 @@ +import MainFrame from "../../components/MainFrame" const Dashboard = () => { return ( -
Dashboard
+ + + ) } diff --git a/src/Pages/Login.tsx b/src/Pages/Login.tsx index ea2c5dd..80ee32d 100644 --- a/src/Pages/Login.tsx +++ b/src/Pages/Login.tsx @@ -1,96 +1,136 @@ -import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react" -import { useContext, useState } from "react" -import { useForm } from "react-hook-form" -import GlobalStateContext from "../Contexts/GlobalStateContext" -import logo from '../assets/logo.svg' -import { Button } from "../components/ui/button" -import { Field } from "../components/ui/field" -import { Toaster, toaster } from "../components/ui/toaster" +import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"; +import { useContext, useState } from "react"; +import { useForm } from "react-hook-form"; +import GlobalStateContext from "../Contexts/GlobalStateContext"; +import logo from "../assets/logo.svg"; +import { Button } from "../components/ui/button"; +import { Field } from "../components/ui/field"; +import { Toaster, toaster } from "../components/ui/toaster"; +import { useNavigate } from "react-router-dom"; interface FormValues { - mobileNumber: number + mobileNumber: string; } const Login = () => { - - const [isLoading, setIsLoading] = useState(false) + const [isLoading, setIsLoading] = useState(false); const context = useContext(GlobalStateContext); + const navigate = useNavigate(); + if (!context) { - throw new Error('App must be used within a GlobalStateProvider'); + throw new Error("App must be used within a GlobalStateProvider"); } + const { setIsAuthenticate } = context; const { register, handleSubmit, formState: { errors }, - } = useForm() - + } = useForm(); const onSubmit = handleSubmit((data) => { - setIsLoading(true) - if (data?.mobileNumber === 1234567890) { - setTimeout(() => { - setIsAuthenticate(true); - setIsLoading(false) - }, 3000); // 3-second delay + setIsLoading(true); + if (data.mobileNumber === "1234567890") { + setTimeout(() => { + setIsAuthenticate(true); + setIsLoading(false); + navigate("/login-otp"); + }, 3000); } else { toaster.create({ title: `Invalid Credentials`, type: "error", - }) - setIsLoading(false) + }); + setIsLoading(false); } }); - return ( - - - - - - - + + + - - - - - - -
+ +
+
+ + + LOGIN + - - - -
- - LOGIN - - - - - {/* Forget password */} + + + - - Forgot password + + + + Forgot password? + - -
- ) -} + ); +}; -export default Login \ No newline at end of file +export default Login; diff --git a/src/Pages/ManageCMS/AboutUs/AboutUs.tsx b/src/Pages/ManageCMS/AboutUs/AboutUs.tsx new file mode 100644 index 0000000..c16d6d9 --- /dev/null +++ b/src/Pages/ManageCMS/AboutUs/AboutUs.tsx @@ -0,0 +1,11 @@ +import MainFrame from '../../../components/MainFrame' + +const AboutUs = () => { + return ( + + + + ) +} + +export default AboutUs \ No newline at end of file diff --git a/src/Pages/ManageCMS/FAQ/FreqAskQuestion.tsx b/src/Pages/ManageCMS/FAQ/FreqAskQuestion.tsx new file mode 100644 index 0000000..f562825 --- /dev/null +++ b/src/Pages/ManageCMS/FAQ/FreqAskQuestion.tsx @@ -0,0 +1,12 @@ +import { Text } from '@chakra-ui/react' +import MainFrame from '../../../components/MainFrame' + +const FreqAskQuestion = () => { + return ( + + hello + + ) +} + +export default FreqAskQuestion \ No newline at end of file diff --git a/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx b/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx new file mode 100644 index 0000000..8a43a36 --- /dev/null +++ b/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx @@ -0,0 +1,11 @@ +import MainFrame from '../../../components/MainFrame' + +const PrivacyPolicy = () => { + return ( + + + + ) +} + +export default PrivacyPolicy \ No newline at end of file diff --git a/src/Pages/ManageCMS/TermsAndCondition/TermsAndCondition.tsx b/src/Pages/ManageCMS/TermsAndCondition/TermsAndCondition.tsx new file mode 100644 index 0000000..fac9972 --- /dev/null +++ b/src/Pages/ManageCMS/TermsAndCondition/TermsAndCondition.tsx @@ -0,0 +1,11 @@ +import MainFrame from '../../../components/MainFrame' + +const TermsAndCondition = () => { + return ( + + + + ) +} + +export default TermsAndCondition \ No newline at end of file diff --git a/src/Pages/ManageCommunity/ManageCommunity.tsx b/src/Pages/ManageCommunity/ManageCommunity.tsx deleted file mode 100644 index 9588a01..0000000 --- a/src/Pages/ManageCommunity/ManageCommunity.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import MainFrame from "../../components/MainFrame" - -const ManageCommunity = () => { - return ( - - - - ) -} -export default ManageCommunity \ No newline at end of file diff --git a/src/Pages/ManageContactUs/ManageContactUs.tsx b/src/Pages/ManageContactUs/ManageContactUs.tsx new file mode 100644 index 0000000..f713710 --- /dev/null +++ b/src/Pages/ManageContactUs/ManageContactUs.tsx @@ -0,0 +1,11 @@ +import MainFrame from '../../components/MainFrame' + +const ManageContactUs = () => { + return ( + + + + ) +} + +export default ManageContactUs \ No newline at end of file diff --git a/src/Pages/ManageGroups/ManageGroups.tsx b/src/Pages/ManageGroups/ManageGroups.tsx deleted file mode 100644 index ae5dedc..0000000 --- a/src/Pages/ManageGroups/ManageGroups.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import MainFrame from "../../components/MainFrame" - -const ManageGroups = () => { - return ( - - - - ) -} - -export default ManageGroups \ No newline at end of file diff --git a/src/Pages/Reporting/Reporting.tsx b/src/Pages/ManageJobs/ManageJobs.tsx similarity index 53% rename from src/Pages/Reporting/Reporting.tsx rename to src/Pages/ManageJobs/ManageJobs.tsx index 7f0e7c3..2c13107 100644 --- a/src/Pages/Reporting/Reporting.tsx +++ b/src/Pages/ManageJobs/ManageJobs.tsx @@ -1,11 +1,11 @@ import MainFrame from "../../components/MainFrame" -const Reporting = () => { +const ManageJobs = () => { return ( - - - + + ) } -export default Reporting \ No newline at end of file + +export default ManageJobs \ No newline at end of file diff --git a/src/Pages/ManageCommunity/ManagePost.tsx b/src/Pages/ManagePost/ManagePost.tsx similarity index 70% rename from src/Pages/ManageCommunity/ManagePost.tsx rename to src/Pages/ManagePost/ManagePost.tsx index 17f55ca..2dc46be 100644 --- a/src/Pages/ManageCommunity/ManagePost.tsx +++ b/src/Pages/ManagePost/ManagePost.tsx @@ -2,8 +2,8 @@ import MainFrame from "../../components/MainFrame" const ManagePost = () => { return ( - - + + ) } diff --git a/src/Pages/ManageSubAdmin/ManageSubAdmin.tsx b/src/Pages/ManageSubAdmin/ManageSubAdmin.tsx new file mode 100644 index 0000000..6ffd6d5 --- /dev/null +++ b/src/Pages/ManageSubAdmin/ManageSubAdmin.tsx @@ -0,0 +1,11 @@ +import MainFrame from '../../components/MainFrame' + +const ManageSubAdmin = () => { + return ( + + + + ) +} + +export default ManageSubAdmin \ No newline at end of file diff --git a/src/Pages/ManageUser/DeactivatedAccounts/DeactivatedAccounts.tsx b/src/Pages/ManageUser/DeactivatedAccounts/DeactivatedAccounts.tsx new file mode 100644 index 0000000..3cc0cd9 --- /dev/null +++ b/src/Pages/ManageUser/DeactivatedAccounts/DeactivatedAccounts.tsx @@ -0,0 +1,91 @@ +import { + Box, + HStack, + Input, + Text +} from "@chakra-ui/react"; +import { LuSearch } from "react-icons/lu"; +import DataTable from "../../../components/DataTable"; +import MainFrame from "../../../components/MainFrame"; +import { InputGroup } from "../../../components/ui/input-group"; +import { + PaginationItems, + PaginationNextTrigger, + PaginationPrevTrigger, + PaginationRoot, +} from "../../../components/ui/pagination"; +import { Switch } from "../../../components/ui/switch"; + +const tableHeadRow = [ + "Sr. No", + "First Name", + "Last Name", + "Company name", + "Activate/Deactivate", +]; + +const usersData = [ + ...Array.from({ length: 10 }, (_, i) => ({ + "Sr. No": i + 1, + "First Name": "Ritesh", + "Last Name": "Joshi", + "Company name": "WDI", + "Activate/Deactivate": ( + + Yes + + No + + ), + })), +]; + +const DeactivatedAccounts = () => { + return ( + + + + Registered Users + + + + } + w="100%" + color="#000" + > + + + + + + + + + + + + + + + + ); +}; + +export default DeactivatedAccounts; diff --git a/src/Pages/ManageUser/RegisterUsers/Component/DeleteConfirmationDialog.tsx b/src/Pages/ManageUser/RegisterUsers/Component/DeleteConfirmationDialog.tsx new file mode 100644 index 0000000..88af6e8 --- /dev/null +++ b/src/Pages/ManageUser/RegisterUsers/Component/DeleteConfirmationDialog.tsx @@ -0,0 +1,82 @@ +import React from "react"; + +import { + DialogActionTrigger, + DialogCloseTrigger, + DialogContent, + DialogFooter, + DialogHeader, + DialogRoot, + DialogTitle, + DialogTrigger, +} from "../../../../components/ui/dialog"; +import { RiDeleteBin5Line } from "react-icons/ri"; +import { DialogBody, Image, Text } from "@chakra-ui/react"; +import { Button } from "../../../../components/ui/button"; +import DelteIcon from "../../../../assets/icons/delete.png"; + +interface DeleteConfirmationDialogProps { + onConfirm: () => void; +} + +const DeleteConfirmationDialog: React.FC = ({ + onConfirm, +}) => { + return ( + + + + + + + {/* Are you sure? */} + + + + + + Delete User + +

+ {" "} + Are you sure you want to delete this user +

+
+ + + + + + + +
+
+ ); +}; + +export default DeleteConfirmationDialog; diff --git a/src/Pages/ManageUser/RegisterUsers/Component/EditRegisterUser.tsx b/src/Pages/ManageUser/RegisterUsers/Component/EditRegisterUser.tsx new file mode 100644 index 0000000..e24a0e9 --- /dev/null +++ b/src/Pages/ManageUser/RegisterUsers/Component/EditRegisterUser.tsx @@ -0,0 +1,77 @@ +import React, { useRef } from "react"; +import { Input, Stack } from "@chakra-ui/react"; +import { Button } from "../../../../components/ui/button"; +import { + DialogActionTrigger, + DialogBody, + DialogContent, + DialogFooter, + DialogHeader, + DialogRoot, + DialogTitle, + DialogTrigger, +} from "../../../../components/ui/dialog"; +import { Field } from "../../../../components/ui/field"; +import { FaRegEye } from "react-icons/fa"; + +interface EditRegisterUser { + onConfirm: () => void; +} + +const EditRegisterUser: React.FC = ({ onConfirm }) => { + const ref = useRef(null); // Initialize the ref properly + + return ( +
+ ref.current}> + + + + + + Edit user Accounts + + + + + + + + + + + + + + + + + + + + + + + +
+ ); +}; + +export default EditRegisterUser; diff --git a/src/Pages/ManageUser/RegisterUsers/RegisterUsers.tsx b/src/Pages/ManageUser/RegisterUsers/RegisterUsers.tsx new file mode 100644 index 0000000..ed37e1e --- /dev/null +++ b/src/Pages/ManageUser/RegisterUsers/RegisterUsers.tsx @@ -0,0 +1,113 @@ +import { Box, HStack, Input, Text } from "@chakra-ui/react"; +import { CiEdit } from "react-icons/ci"; +import { FaRegEye } from "react-icons/fa"; +import { LuSearch } from "react-icons/lu"; +import DataTable from "../../../components/DataTable"; +import MainFrame from "../../../components/MainFrame"; +import { InputGroup } from "../../../components/ui/input-group"; +import { + PaginationItems, + PaginationNextTrigger, + PaginationRoot, +} from "../../../components/ui/pagination"; +import { Switch } from "../../../components/ui/switch"; +import { Button } from "../../../components/ui/button"; +import DeleteConfirmationDialog from "./Component/DeleteConfirmationDialog"; +import EditRegisterUser from "./Component/EditRegisterUser"; + +// Table setup +const tableHeadRow = [ + "Sr. No", + "First Name", + "Mobile number", + "Gender", + "DOB", + "Type of User", + "Language", + "Activate/Deactivate", + "Action", +]; + +const usersData: any[] = [ + ...Array.from({ length: 10 }, (_, i) => ({ + "Sr. No": i + 1, + "First Name": "Ritesh", + "Mobile number": "9876543210", + Gender: "Male", + DOB: "15-01-1990", + "Type of User": "Admin", + Language: "English", + "Activate/Deactivate": ( + + Yes + + No + + ), + Action: ( + + {/* */} + { + console.log("User deleted:", i + 1); + }} + /> + + { + console.log("User deleted:", i + 1); + }} + /> + + ), + })), +]; + +const RegisterUsers = () => { + return ( + + + + Register User + + + + } + w={"100%"} + color={"#000"} + > + + + + + + + + + + + + + + + ); +}; + +export default RegisterUsers; diff --git a/src/Pages/ManageUsers/ManageUsers.tsx b/src/Pages/ManageUsers/ManageUsers.tsx deleted file mode 100644 index e6080cd..0000000 --- a/src/Pages/ManageUsers/ManageUsers.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import MainFrame from "../../components/MainFrame" - -const ManageUsers = () => { - return ( - - - - ) -} - -export default ManageUsers \ No newline at end of file diff --git a/src/Pages/OnBoarding/CreatePass.tsx b/src/Pages/OnBoarding/CreatePass.tsx new file mode 100644 index 0000000..0fd60ac --- /dev/null +++ b/src/Pages/OnBoarding/CreatePass.tsx @@ -0,0 +1,149 @@ +import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"; +import { useContext, useState } from "react"; +import { useForm } from "react-hook-form"; +import GlobalStateContext from "../../Contexts/GlobalStateContext"; +import logo from "../../assets/logo.svg"; +import { Button } from "../../components/ui/button"; +import { Field } from "../../components/ui/field"; +import { Toaster, toaster } from "../../components/ui/toaster"; + +interface FormValues { + password: string; + confirmPassword: string; +} + +const CreatePass = () => { + const [isLoading, setIsLoading] = useState(false); + const context = useContext(GlobalStateContext); + if (!context) { + throw new Error("App must be used within a GlobalStateProvider"); + } + const { setIsAuthenticate } = context; + const { + register, + handleSubmit, + formState: { errors }, + } = useForm(); + + const onSubmit = handleSubmit((data) => { + setIsLoading(true); + if (data?.password === "password123") { + setTimeout(() => { + setIsAuthenticate(true); + setIsLoading(false); + }, 3000); + } else { + toaster.create({ + title: `Invalid Credentials`, + type: "error", + }); + setIsLoading(false); + } + }); + + return ( + + + + + + +
+ +
+ +
+ + + create a password + + + + + + + + + value === getValues("password") || "Passwords do not match", + })} + placeholder="Confirm your password" + /> + + + + Forgot password + + +
+ +
+
+ ); +}; + +export default CreatePass; diff --git a/src/Pages/OnBoarding/LoginOtp.tsx b/src/Pages/OnBoarding/LoginOtp.tsx new file mode 100644 index 0000000..9ddf6ce --- /dev/null +++ b/src/Pages/OnBoarding/LoginOtp.tsx @@ -0,0 +1,145 @@ +import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"; +import { useContext, useState } from "react"; +import { useForm } from "react-hook-form"; +import GlobalStateContext from "../../Contexts/GlobalStateContext"; +import logo from "../../assets/logo.svg"; +import uiEdit from "../../assets/icons/edit.png"; +import { Button } from "../../components/ui/button"; +import { Field } from "../../components/ui/field"; +import { Toaster, toaster } from "../../components/ui/toaster"; +import { PinInput } from "../../components/ui/pin-input"; +import { useNavigate } from "react-router-dom"; + +interface FormValues { + mobileNumber: number; +} + +const LoginOtp = () => { + const [isLoading, setIsLoading] = useState(false); + const context = useContext(GlobalStateContext); + const navigate = useNavigate(); + if (!context) { + throw new Error("App must be used within a GlobalStateProvider"); + } + const { setIsAuthenticate } = context; + const { + register, + handleSubmit, + formState: { errors }, + } = useForm(); + + const onSubmit = handleSubmit((data) => { + setIsLoading(true); + if (data?.mobileNumber === 1234567890) { + setTimeout(() => { + setIsAuthenticate(true); + setIsLoading(false); + }, 3000); // 3-second delay + } else { + toaster.create({ + title: `Invalid Credentials`, + type: "error", + }); + setIsLoading(false); + } + }); + + return ( + + + + + + +
+ +
+ +
+ + + Enter otp + + + OTP has been send to your E-mail Address + + + + + 9619565889 + + + + + + + Resend OTP + + + + Forgot password + + +
+ +
+
+ ); +}; + +export default LoginOtp; diff --git a/src/Pages/OnBoarding/LoginWithPass.tsx b/src/Pages/OnBoarding/LoginWithPass.tsx new file mode 100644 index 0000000..765cceb --- /dev/null +++ b/src/Pages/OnBoarding/LoginWithPass.tsx @@ -0,0 +1,160 @@ +import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"; +import { useContext } from "react"; +import { useForm } from "react-hook-form"; +import GlobalStateContext from "../../Contexts/GlobalStateContext"; +import logo from "../../assets/logo.svg"; +import { Button } from "../../components/ui/button"; +import { Toaster, toaster } from "../../components/ui/toaster"; +import { NavLink, useNavigate } from "react-router-dom"; +import { Field } from "../../components/ui/field"; + +const LoginWithPass = () => { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm(); + const context = useContext(GlobalStateContext); + const navigate = useNavigate(); + + if (!context) { + throw new Error("App must be used within a GlobalStateProvider"); + } + + const { setIsAuthenticate } = context; + + const onSubmit = (data: { mobileNumber: string; password: string }) => { + const { mobileNumber, password } = data; + + if (mobileNumber === "1231239870" && password === "admin@123") { + navigate("/"); + setIsAuthenticate(true); + } else { + toaster.create({ + title: "Invalid Credentials", + type: "error", + }); + } + }; + + return ( + + + + + + +
+ +
+ +
+ + + LogIn + + + + + + {errors.mobileNumber && ( + + {errors.mobileNumber.message} + + )} + + + + + {errors.password && ( + + {errors.password.message} + + )} + + + Forget password + + + + + + + +
+ +
+
+ ); +}; + +export default LoginWithPass; diff --git a/src/Pages/Profile/Profile.tsx b/src/Pages/Profile/Profile.tsx index ff8f49e..0ef11fb 100644 --- a/src/Pages/Profile/Profile.tsx +++ b/src/Pages/Profile/Profile.tsx @@ -1,11 +1,110 @@ -import MainFrame from "../../components/MainFrame" - +import { Circle, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"; +import MainFrame from "../../components/MainFrame"; +import mypfp from "../../assets/profile-Avtars/mypfp.png"; +import { FaCamera } from "react-icons/fa"; +import { Field } from "../../components/ui/field"; +import { Button } from "../../components/ui/button"; +import { Editable } from "@chakra-ui/react"; const Profile = () => { return ( - + + + + + + + + + + + Jackson David + + + Employee ID: #1245679 + + + + + + + + First Name + + + + + + + + + Last Name + + + + + + + {/* + + + + + */} + + {/* + + */} + + + Phone Number + + + + + + + + + + Update Password + + + + - ) -} + ); +}; -export default Profile \ No newline at end of file +export default Profile; diff --git a/src/Pages/SubAdmin/SubAdmin.tsx b/src/Pages/SubAdmin/SubAdmin.tsx deleted file mode 100644 index 4ed0414..0000000 --- a/src/Pages/SubAdmin/SubAdmin.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import MainFrame from "../../components/MainFrame" - -const SubAdmin = () => { - return ( - - - - - ) -} -export default SubAdmin \ No newline at end of file diff --git a/src/Pages/Support/Support.tsx b/src/Pages/Support/Support.tsx deleted file mode 100644 index 47bd3d4..0000000 --- a/src/Pages/Support/Support.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import MainFrame from "../../components/MainFrame" - -const Support = () => { - return ( - - - - - ) -} -export default Support \ No newline at end of file diff --git a/src/Routes/Nav.ts b/src/Routes/Nav.ts index f225b1a..1e4c231 100644 --- a/src/Routes/Nav.ts +++ b/src/Routes/Nav.ts @@ -1,77 +1,137 @@ -import { LiaUsersSolid } from "react-icons/lia"; -import { LuBellDot } from "react-icons/lu"; -import { MdOutlineSupportAgent, MdPostAdd } from "react-icons/md"; +import { CgWorkAlt } from "react-icons/cg"; import { GoDotFill } from "react-icons/go"; - -import { TbFileSettings, TbLayoutDashboard, TbReport, TbUsers, TbUsersGroup } from "react-icons/tb"; +import { PiHeadphonesBold } from "react-icons/pi"; import { RiUserSettingsLine } from "react-icons/ri"; +import { TbEdit, TbLayoutDashboard } from "react-icons/tb"; +import { + TiDocumentText, + TiUserAddOutline, + TiUserOutline, +} from "react-icons/ti"; export const nav = [ - - { - title: "Dashboard", - path: "/", - Icon: TbLayoutDashboard, - type:'single' - }, - { - title: "Manage Users", - path: "/manage-user", - Icon: TbUsers, - type:'single' - }, - { - title: "Manage Groups", - path: "/manage-groups", - Icon: TbUsersGroup, - type:'single' - }, - { - title: "Community", - path: "/manage-community", - Icon: LiaUsersSolid, - type:'multiple', - children: [ - { - title: "Manage Community", - path: "/manage-community", - Icon: GoDotFill, - }, - { - title: "Manage Post", - path: "/manage-post", - Icon: GoDotFill, - }, - ], - }, - { - title: "Support", - path: "/support", - Icon: MdOutlineSupportAgent, - type:'single' - }, - { - title: "Sub-Admin", - path: "/sub-admin", - Icon: RiUserSettingsLine, - type:'single' - }, - { - title: "Reporting", - path: "/reporting", - Icon: TbReport, - type:'single' - }, - { - title: "CMS", - path: "/cms", - Icon: TbFileSettings, - type:'single' - }, - { - title: "Manage Notifications", - path: "/manage-notification", - Icon: LuBellDot, - type:'single' - } - ]; \ No newline at end of file + { + title: "Dashboard", + path: "/", + Icon: TbLayoutDashboard, + type: "single", + }, + { + title: "Manage Users", + path: "/manage-user/register-user", + initPath: "/manage-user", + Icon: TiUserOutline, + type: "multiple", + children: [ + { + title: "Register Users", + path: "/manage-user/register-user", + Icon: GoDotFill, + }, + { + title: "Deactivated Accounts", + path: "/manage-user/deactivate-accounts", + Icon: GoDotFill, + }, + ], + }, + { + title: "Manage Post", + path: "/manage-post", + Icon: TbEdit, + type: "single", + }, + { + title: "Manage Sub-Admin", + path: "/manage-sub-admin", + Icon: TiUserAddOutline, + type: "single", + }, + { + title: "Manage Jobs", + path: "/manage-jobs", + Icon: CgWorkAlt, + type: "single", + }, + { + title: "Manage Contact Us", + path: "/manage-contact-us", + Icon: PiHeadphonesBold, + type: "single", + }, + + { + title: "Manage CMS", + initPath: "/manage-cms", + path: "/manage-cms/faq", + Icon: TiDocumentText, + type: "multiple", + children: [ + { + title: "FAQ", + path: "/manage-cms/faq", + Icon: GoDotFill, + }, + { + title: "About Us", + path: "/manage-cms/about-us", + Icon: GoDotFill, + }, + { + title: "Privacy Policy", + path: "/manage-cms/privacy-policy", + Icon: GoDotFill, + }, + { + title: "Terms And Conditions", + path: "/manage-cms/terms-and-condition", + Icon: GoDotFill, + }, + ], + }, + { + title: "My Profile", + path: "/profile", + Icon: RiUserSettingsLine, + type: "single", + }, + { + title: "Master Module", + initPath: "/master-module", + path: "/master-module/agency-master", + Icon: TiDocumentText, + type: "multiple", + children: [ + { + title: "Agency Master", + path: "/master-module/agency-master", + Icon: GoDotFill, + }, + { + title: "Template Master", + path: "/master-module/template-master", + Icon: GoDotFill, + }, + { + title: "Job Type", + path: "/master-module/job-type", + Icon: GoDotFill, + }, + { + title: "Workspace model", + path: "/master-module/workspace-model", + Icon: GoDotFill, + }, + { + title: "Country", + path: "/master-module/country", + Icon: GoDotFill, + }, + { + title: "Job Status", + path: "/master-module/job-status", + Icon: GoDotFill, + }, + ], + }, +]; diff --git a/src/Routes/Routes.ts b/src/Routes/Routes.ts index b58d3ec..df63538 100644 --- a/src/Routes/Routes.ts +++ b/src/Routes/Routes.ts @@ -1,24 +1,31 @@ - -import CMS from "../Pages/CMS/CMS"; import Dashboard from "../Pages/Dashboard/Dashboard"; -import ManageCommunity from "../Pages/ManageCommunity/ManageCommunity"; -import ManagePost from "../Pages/ManageCommunity/ManagePost"; -import ManageGroups from "../Pages/ManageGroups/ManageGroups"; -import ManageUsers from "../Pages/ManageUsers/ManageUsers"; +import AboutUs from "../Pages/ManageCMS/AboutUs/AboutUs"; +import FreqAskQuestion from "../Pages/ManageCMS/FAQ/FreqAskQuestion"; +import PrivacyPolicy from "../Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy"; +import ManageContactUs from "../Pages/ManageContactUs/ManageContactUs"; +import ManageJobs from "../Pages/ManageJobs/ManageJobs"; +import ManagePost from "../Pages/ManagePost/ManagePost"; +import ManageSubAdmin from "../Pages/ManageSubAdmin/ManageSubAdmin"; +import DeactivatedAccounts from "../Pages/ManageUser/DeactivatedAccounts/DeactivatedAccounts"; +import RegisterUsers from "../Pages/ManageUser/RegisterUsers/RegisterUsers"; import Profile from "../Pages/Profile/Profile"; -import Reporting from "../Pages/Reporting/Reporting"; -import SubAdmin from "../Pages/SubAdmin/SubAdmin"; -import Support from "../Pages/Support/Support"; export const RouteLink = [ - { path: "/", Component: Dashboard }, - { path: "/manage-user", Component: ManageUsers }, - { path: "/manage-groups", Component: ManageGroups }, - { path: "/manage-community", Component: ManageCommunity}, - { path: "/manage-post", Component: ManagePost}, - { path: "/support", Component: Support}, - { path: "/sub-admin", Component: SubAdmin}, - { path: "/reporting", Component: Reporting}, - { path: "/cms", Component: CMS}, - { path: "/manage-notification", Component: CMS}, - { path: "/profile", Component: Profile}, -] \ No newline at end of file + { path: "/", Component: Dashboard }, + { path: "/manage-user/register-user", Component: RegisterUsers }, + { path: "/manage-user/deactivate-accounts", Component: DeactivatedAccounts }, + { path: "/manage-post", Component: ManagePost }, + { path: "/manage-sub-admin", Component: ManageSubAdmin }, + { path: "/manage-jobs", Component: ManageJobs }, + { path: "/manage-contact-us", Component: ManageContactUs }, + { path: "/manage-cms/faq", Component: FreqAskQuestion }, + + { path: "/manage-cms/about-us", Component: AboutUs }, + + { path: "/manage-cms/privacy-policy", Component: PrivacyPolicy }, + + { path: "/manage-cms/terms-and-condition", Component: PrivacyPolicy }, + + { path: "/profile", Component: Profile }, + + { path: "/my-profile", Component: Profile }, +]; diff --git a/src/assets/icons/delete.png b/src/assets/icons/delete.png new file mode 100644 index 0000000..383f0f0 Binary files /dev/null and b/src/assets/icons/delete.png differ diff --git a/src/assets/icons/edit.png b/src/assets/icons/edit.png new file mode 100644 index 0000000..2aeaad0 Binary files /dev/null and b/src/assets/icons/edit.png differ diff --git a/src/assets/profile-Avtars/mypfp.png b/src/assets/profile-Avtars/mypfp.png new file mode 100644 index 0000000..8b8ba46 Binary files /dev/null and b/src/assets/profile-Avtars/mypfp.png differ diff --git a/src/components/DataTable.tsx b/src/components/DataTable.tsx new file mode 100644 index 0000000..34349e8 --- /dev/null +++ b/src/components/DataTable.tsx @@ -0,0 +1,35 @@ +import { Stack, Table } from "@chakra-ui/react" + + +interface TableProps { + tableHeadRow: string[]; + data: Record[]; +} + + + +const DataTable: React.FC = ({ tableHeadRow, data }) => { + return ( + + + + + {tableHeadRow.map((item, index)=>{item})} + + + + + {data.map((item:any, index) => ( + + {tableHeadRow.map((heading)=>{item[heading]} )} + + ))} + + + + + ) +} + +export default DataTable \ No newline at end of file diff --git a/src/components/MainFrame.tsx b/src/components/MainFrame.tsx index 32c5f64..8d9f19c 100644 --- a/src/components/MainFrame.tsx +++ b/src/components/MainFrame.tsx @@ -1,4 +1,4 @@ -import { Box, Text, VStack } from "@chakra-ui/react" +import { Box, VStack } from "@chakra-ui/react" import { motion } from "framer-motion" import React, { FC } from "react" import { OPACITY_ON_LOAD } from "../Layouts/animations" @@ -11,12 +11,12 @@ interface MainFrameProps { title?: string } -const MainFrame: FC = ({ children, title }) => { +const MainFrame: FC = ({ children }) => { return ( - + > {} + +const { withContext } = createRecipeContext({ key: "button" }) + +// Replace "a" with your framework's link component +export const LinkButton = withContext("a") diff --git a/src/components/ui/pagination.tsx b/src/components/ui/pagination.tsx new file mode 100644 index 0000000..930b004 --- /dev/null +++ b/src/components/ui/pagination.tsx @@ -0,0 +1,228 @@ +"use client"; + +import type { ButtonProps, TextProps } from "@chakra-ui/react"; +import { + Button, + Pagination as ChakraPagination, + IconButton, + Text, + createContext, + usePaginationContext, +} from "@chakra-ui/react"; +import * as React from "react"; +import { HiChevronLeft, HiChevronRight } from "react-icons/hi2"; +import { LinkButton } from "./link-button"; + +interface ButtonVariantMap { + current: ButtonProps["variant"]; + default: ButtonProps["variant"]; + ellipsis: ButtonProps["variant"]; +} + +type PaginationVariant = "outline" | "solid" | "subtle"; + +interface ButtonVariantContext { + size: ButtonProps["size"]; + variantMap: ButtonVariantMap; + getHref?: (page: number) => string; +} + +const [RootPropsProvider, useRootProps] = createContext({ + name: "RootPropsProvider", +}); + +export interface PaginationRootProps + extends Omit { + size?: ButtonProps["size"]; + variant?: PaginationVariant; + getHref?: (page: number) => string; +} + +const variantMap: Record = { + outline: { default: "ghost", ellipsis: "plain", current: "solid" }, + solid: { default: "outline", ellipsis: "outline", current: "solid" }, + subtle: { default: "ghost", ellipsis: "plain", current: "subtle" }, +}; + +export const PaginationRoot = React.forwardRef< + HTMLDivElement, + PaginationRootProps +>(function PaginationRoot(props, ref) { + const { size = "sm", variant = "outline", getHref, ...rest } = props; + return ( + + + + ); +}); + +export const PaginationEllipsis = React.forwardRef< + HTMLDivElement, + ChakraPagination.EllipsisProps +>(function PaginationEllipsis(props, ref) { + const { size, variantMap } = useRootProps(); + return ( + + + + ); +}); + +export const PaginationItem = React.forwardRef< + HTMLButtonElement, + ChakraPagination.ItemProps +>(function PaginationItem(props, ref) { + const { page } = usePaginationContext(); + const { size, variantMap, getHref } = useRootProps(); + + const current = page === props.value; + const variant = current ? variantMap.current : variantMap.default; + + if (getHref) { + return ( + + {props.value} + + ); + } + + return ( + + + + ); +}); + +export const PaginationPrevTrigger = React.forwardRef< + HTMLButtonElement, + ChakraPagination.PrevTriggerProps +>(function PaginationPrevTrigger(props, ref) { + const { size, variantMap, getHref } = useRootProps(); + const { previousPage } = usePaginationContext(); + + if (getHref) { + return ( + + + + ); + } + + return ( + + + + + + ); +}); + +export const PaginationNextTrigger = React.forwardRef< + HTMLButtonElement, + ChakraPagination.NextTriggerProps +>(function PaginationNextTrigger(props, ref) { + const { size, variantMap, getHref } = useRootProps(); + const { nextPage } = usePaginationContext(); + + if (getHref) { + return ( + + Next + + ); + } + + return ( + + + + ); +}); + +export const PaginationItems = (props: React.HTMLAttributes) => { + return ( + + {({ pages }) => + pages.map((page, index) => ( + + )) + } + + ); +}; + +interface PageTextProps extends TextProps { + format?: "short" | "compact" | "long"; +} + +export const PaginationPageText = React.forwardRef< + HTMLParagraphElement, + PageTextProps +>(function PaginationPageText(props, ref) { + const { format = "compact", ...rest } = props; + const { page, totalPages, pageRange, count } = usePaginationContext(); + const content = React.useMemo(() => { + if (format === "short") return `${page} / ${totalPages}`; + if (format === "compact") return `${page} of ${totalPages}`; + return `${pageRange.start + 1} - ${Math.min(pageRange.end, count)} of ${count}`; + }, [format, page, totalPages, pageRange, count]); + + return ( + + {content} + + ); +}); diff --git a/src/components/ui/pin-input.tsx b/src/components/ui/pin-input.tsx new file mode 100644 index 0000000..93e013c --- /dev/null +++ b/src/components/ui/pin-input.tsx @@ -0,0 +1,27 @@ +import { PinInput as ChakraPinInput, Group } from "@chakra-ui/react" +import * as React from "react" + +export interface PinInputProps extends ChakraPinInput.RootProps { + rootRef?: React.Ref + count?: number + inputProps?: React.InputHTMLAttributes + attached?: boolean +} + +export const PinInput = React.forwardRef( + function PinInput(props, ref) { + const { count = 4, inputProps, rootRef, attached, ...rest } = props + return ( + + + + + {Array.from({ length: count }).map((_, index) => ( + + ))} + + + + ) + }, +) diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx new file mode 100644 index 0000000..a677ca2 --- /dev/null +++ b/src/components/ui/switch.tsx @@ -0,0 +1,39 @@ +import { Switch as ChakraSwitch } from "@chakra-ui/react" +import * as React from "react" + +export interface SwitchProps extends ChakraSwitch.RootProps { + inputProps?: React.InputHTMLAttributes + rootRef?: React.Ref + trackLabel?: { on: React.ReactNode; off: React.ReactNode } + thumbLabel?: { on: React.ReactNode; off: React.ReactNode } +} + +export const Switch = React.forwardRef( + function Switch(props, ref) { + const { inputProps, children, rootRef, trackLabel, thumbLabel, ...rest } = + props + + return ( + + + + + {thumbLabel && ( + + {thumbLabel?.on} + + )} + + {trackLabel && ( + + {trackLabel.on} + + )} + + {children != null && ( + {children} + )} + + ) + }, +) diff --git a/src/index.css b/src/index.css index 1ac4b6c..6b587a8 100644 --- a/src/index.css +++ b/src/index.css @@ -1,4 +1,4 @@ -*{ +body{ margin: 0; padding: 0; box-sizing: border-box; @@ -21,7 +21,12 @@ /* background-color: #e2e8f01c !important; */ } - +.active>.css-1ic543h { + -webkit-transition: rotate 0.2s; + transition: rotate 0.2s; + transform-origin: center; + color: #fff; +} .linkChild:hover{ color: #02A0A0 !important; @@ -49,70 +54,26 @@ } -/* Sphere.css */ - -/* ✅ Red Spheres */ -.red-sphere-1, -.red-sphere-2, -.red-sphere-3{ - position: absolute; - border-radius: 50%; - background-color: #D90B2E46; - box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); - filter: blur(100px); +/* Style the scrollbar */ +::-webkit-scrollbar { + width: 12px; /* Width of the vertical scrollbar */ + height: 12px; /* Height of the horizontal scrollbar */ } -/* ✅ Blue Spheres */ -.blue-sphere-1, -.blue-sphere-2, -.blue-sphere-3{ - position: absolute; - border-radius: 50%; - background-color: #009DAB46; - box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); - filter: blur(100px); +/* Style the scrollbar track (the background area) */ +::-webkit-scrollbar-track { + background-color: #f1f1f1; /* Light gray track */ + border-radius: 10px; } -/* 🔧 Positioning for Spheres */ -.red-sphere-1 { - width: 250px; - height: 250px; - top: 10%; - left: 5%; +/* Style the scrollbar thumb (the draggable part) */ +::-webkit-scrollbar-thumb { + background-color: #f3f3f3; /* Gray color for the thumb */ + border-radius: 10px; + border: 3px solid #f1f1f1; /* Border around the thumb */ } -.blue-sphere-1 { - width: 320px; - height: 320px; - top: 30%; - right: 0%; +/* Style the scrollbar thumb on hover */ +::-webkit-scrollbar-thumb:hover { + background-color: #555; /* Darker gray when hovered */ } - -.red-sphere-2 { - width: 180px; - height: 180px; - bottom: 15%; - left: 20%; -} - -.blue-sphere-2 { - width: 140px; - height: 140px; - bottom: 5%; - right: 25%; -} - -.red-sphere-3 { - width: 480px; - height: 480px; - bottom: 55%; - left: 40%; -} - -.blue-sphere-3{ - width: 300px; - height: 300px; - bottom: 10%; - right: 40%; -} -