From eead26fc51ac4eb0723b9d7ac58ca30df16ccf27 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Wed, 23 Aug 2023 20:58:01 +0530 Subject: [PATCH 01/88] Feat:Add the Question component --- frontend/Dummy_Data.js | 43 + frontend/package-lock.json | 5184 ++++++++++++++++++++++++++ frontend/package.json | 2 + frontend/public/ProximaNovaFont.otf | Bin 0 -> 62892 bytes frontend/public/favicon.ico | Bin 25931 -> 0 bytes frontend/public/next.svg | 1 - frontend/public/vercel.svg | 1 - frontend/src/assets/copy.png | Bin 0 -> 6040 bytes frontend/src/components/questions.js | 99 + frontend/src/pages/index.js | 131 +- frontend/src/styles/globals.css | 40 +- 11 files changed, 5368 insertions(+), 133 deletions(-) create mode 100644 frontend/Dummy_Data.js create mode 100644 frontend/package-lock.json create mode 100644 frontend/public/ProximaNovaFont.otf delete mode 100644 frontend/public/favicon.ico delete mode 100644 frontend/public/next.svg delete mode 100644 frontend/public/vercel.svg create mode 100644 frontend/src/assets/copy.png create mode 100644 frontend/src/components/questions.js diff --git a/frontend/Dummy_Data.js b/frontend/Dummy_Data.js new file mode 100644 index 0000000..eb1bbe5 --- /dev/null +++ b/frontend/Dummy_Data.js @@ -0,0 +1,43 @@ +const questionData = { + objective: "hello World", + points: "10 points", + task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. + +There are two types of synchronization and they can complement each other: + +* 1.Step 1. +* 2.Step 2. +* 3.Step 3. + +- This will allow you to fetch your workspace on any other device. + > To start syncing your workspace, just sign in with Google in the menu. +`, + inputFormat: `The first line contains a single integer, q, denoting the number of queries. +Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. + +**Constraints** +-------------- +It is guaranteed that a valid answer always exists for each query of type 1.`, + outputFormat: `Print three lines of output. The first line prints the character, ch. + +The second line prints the string, s. + +The third line prints the sentence, sen.`, + sampleInput: [ + `10 4 +4.0 2.0`, + `10 4 +4.0 2.0`, + ], + sampleOutput: [ + `14 6 +6.0 2.0`, + `14 6 +6.0 2.0`, + ], + explanation: ` +When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. +When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, + }; + +export default questionData; \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..5ccd002 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,5184 @@ +{ + "name": "cookoff24-portal", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "cookoff24-portal", + "version": "0.1.0", + "dependencies": { + "autoprefixer": "10.4.15", + "eslint": "8.47.0", + "eslint-config-next": "13.4.19", + "next": "13.4.19", + "postcss": "8.4.28", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-markdown": "^8.0.7", + "remark-gfm": "^3.0.1", + "tailwindcss": "3.3.3" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/runtime": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", + "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.7.0.tgz", + "integrity": "sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", + "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", + "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz", + "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==", + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", + "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", + "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", + "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", + "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", + "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", + "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", + "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", + "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", + "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", + "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==" + }, + "node_modules/@swc/helpers": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", + "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.5.tgz", + "integrity": "sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.2.20", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz", + "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "peer": true + }, + "node_modules/@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.1.tgz", + "integrity": "sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==", + "dependencies": { + "@typescript-eslint/scope-manager": "6.4.1", + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/typescript-estree": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.1.tgz", + "integrity": "sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==", + "dependencies": { + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.1.tgz", + "integrity": "sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.1.tgz", + "integrity": "sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==", + "dependencies": { + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.1.tgz", + "integrity": "sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==", + "dependencies": { + "@typescript-eslint/types": "6.4.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001522", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.498", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.498.tgz", + "integrity": "sha512-4LODxAzKGVy7CJyhhN5mebwe7U2L29P+0G+HUriHnabm0d7LSff8Yn7t+Wq+2/9ze2Fu1dhX7mww090xfv7qXQ==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz", + "integrity": "sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==", + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.3", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "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/eslint": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "^8.47.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "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", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "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", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz", + "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==", + "dependencies": { + "@next/eslint-plugin-next": "13.4.19", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", + "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dependencies": { + "is-core-module": "^2.9.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/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "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==" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fraction.js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz", + "integrity": "sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hast-util-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", + "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "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", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/iterator.prototype": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", + "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", + "dependencies": { + "define-properties": "^1.1.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "has-tostringtag": "^1.0.0", + "reflect.getprototypeof": "^1.0.3" + } + }, + "node_modules/jiti": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz", + "integrity": "sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "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", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", + "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", + "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", + "dependencies": { + "@types/mdast": "^3.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", + "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", + "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", + "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", + "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", + "dependencies": { + "@types/mdast": "^3.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", + "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "dependencies": { + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", + "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-definitions": "^5.0.0", + "micromark-util-sanitize-uri": "^1.1.0", + "trim-lines": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", + "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", + "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", + "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", + "dependencies": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", + "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", + "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", + "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", + "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/next": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz", + "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==", + "dependencies": { + "@next/env": "13.4.19", + "@swc/helpers": "0.5.1", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0", + "zod": "3.21.4" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=16.8.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "13.4.19", + "@next/swc-darwin-x64": "13.4.19", + "@next/swc-linux-arm64-gnu": "13.4.19", + "@next/swc-linux-arm64-musl": "13.4.19", + "@next/swc-linux-x64-gnu": "13.4.19", + "@next/swc-linux-x64-musl": "13.4.19", + "@next/swc-win32-arm64-msvc": "13.4.19", + "@next/swc-win32-ia32-msvc": "13.4.19", + "@next/swc-win32-x64-msvc": "13.4.19" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "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==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-markdown": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz", + "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/prop-types": "^15.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "prop-types": "^15.0.0", + "property-information": "^6.0.0", + "react-is": "^18.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/react-markdown/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", + "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", + "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.2.tgz", + "integrity": "sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/tailwindcss": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", + "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz", + "integrity": "sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==", + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", + "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", + "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json index e0396a3..10afa13 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,6 +16,8 @@ "postcss": "8.4.28", "react": "18.2.0", "react-dom": "18.2.0", + "react-markdown": "^8.0.7", + "remark-gfm": "^3.0.1", "tailwindcss": "3.3.3" } } diff --git a/frontend/public/ProximaNovaFont.otf b/frontend/public/ProximaNovaFont.otf new file mode 100644 index 0000000000000000000000000000000000000000..27c8d8f7bf9e823f3d2b89ed8efaf401baf4b942 GIT binary patch literal 62892 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 LY^j81XJ`Kg;PZ?! literal 0 HcmV?d00001 diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico deleted file mode 100644 index 718d6fea4835ec2d246af9800eddb7ffb276240c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/frontend/public/next.svg b/frontend/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/frontend/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/public/vercel.svg b/frontend/public/vercel.svg deleted file mode 100644 index d2f8422..0000000 --- a/frontend/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/assets/copy.png b/frontend/src/assets/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..7cfd08fada7bb1f706ac0751565badfe85d03800 GIT binary patch literal 6040 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 Us{hRLSdXzV!y`UDw}hSfU;nPi@&Et; literal 0 HcmV?d00001 diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js new file mode 100644 index 0000000..fd32f2d --- /dev/null +++ b/frontend/src/components/questions.js @@ -0,0 +1,99 @@ +import React from "react"; +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; +import Image from "next/image"; +import copy from "./../assets/copy.png"; + +function Question(props) { + const { + objective, + points, + task, + inputFormat, + outputformat, + sampleInput1, + sampleOutput1, + sampleInput2, + sampleOutput2, + explanation, + } = props; + + return ( +
+
+
+

{objective}

+
+
+ {points} +
+
Problem
+
+ {task} +
+
+

Input format

+ + {inputFormat} + +
+
+

Output format

+ + {outputformat} + +
+
+

Sample Input 1

+
+ + {sampleInput1} + + +
+

Sample Output 1

+
+ + {sampleOutput1} + +
+

Sample Input 2

+
+ + {sampleInput2} + + +
+

Sample Output 2

+
+ + {sampleOutput2} + +
+
+
+

Explanation

+ + {explanation} + +
+
+
+ ); +} + +export default Question; diff --git a/frontend/src/pages/index.js b/frontend/src/pages/index.js index 2ab84cf..8dcc9d5 100644 --- a/frontend/src/pages/index.js +++ b/frontend/src/pages/index.js @@ -1,118 +1,23 @@ -import Image from 'next/image' -import { Inter } from 'next/font/google' - -const inter = Inter({ subsets: ['latin'] }) +import Question from "@/components/questions"; +import questionData from "../../Dummy_Data"; export default function Home() { return ( -
-
-

- Get started by editing  - src/pages/index.js -

- -
- -
- Next.js Logo +
+ -
- - -
- ) + + + ); } diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css index fd81e88..8ca46d6 100644 --- a/frontend/src/styles/globals.css +++ b/frontend/src/styles/globals.css @@ -2,26 +2,30 @@ @tailwind components; @tailwind utilities; -:root { - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; + +@font-face { + font-family: 'proxima nova'; + src: url("./../../public/ProximaNovaFont.otf") +} + +body, h1 { + font-family: 'proxima nova'; +} + +::-webkit-scrollbar { + width: 0.4rem; + background: #000000; } -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - } +/* Track */ +::-webkit-scrollbar-track { + background: #000000; + border-radius: 0.6rem; + z-index: -99; } -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); +/* Handle */ +::-webkit-scrollbar-thumb { + background: #474746; + border-radius: 1rem; } From 025fee7a8e21a5fa476ca8d58c397c3109130352 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Wed, 23 Aug 2023 21:11:12 +0530 Subject: [PATCH 02/88] feat: Add the question component --- frontend/src/components/questions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index fd32f2d..79fdd1d 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -86,7 +86,7 @@ function Question(props) {
-

Explanation

+

Explanation

{explanation} From 6ce46b9f7d553255b57d79c64c3f9d07bbd163c8 Mon Sep 17 00:00:00 2001 From: Gaurav Choudhary Date: Thu, 24 Aug 2023 18:07:36 +0530 Subject: [PATCH 03/88] Navbar for the portal page --- frontend/package-lock.json | 39 ++++++++++++++++++ frontend/package.json | 1 + .../public/itc_avant_garde_gothic_demi.ttf | Bin 0 -> 83200 bytes frontend/src/assets/Logo.svg | 4 ++ frontend/src/assets/circle.svg | 3 ++ frontend/src/assets/cook-head.svg | 18 ++++++++ frontend/src/assets/cookoff.svg | 27 ++++++++++++ frontend/src/assets/hover-cookoff.svg | 19 +++++++++ frontend/src/assets/loader-logo.svg | 19 +++++++++ frontend/src/assets/menu-icon.svg | 9 ++++ frontend/src/assets/profile-icon.svg | 3 ++ frontend/src/components/Navbar.js | 30 ++++++++++++++ frontend/src/pages/index.js | 2 + frontend/src/styles/globals.css | 22 +++++++++- 14 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 frontend/public/itc_avant_garde_gothic_demi.ttf create mode 100644 frontend/src/assets/Logo.svg create mode 100644 frontend/src/assets/circle.svg create mode 100644 frontend/src/assets/cook-head.svg create mode 100644 frontend/src/assets/cookoff.svg create mode 100644 frontend/src/assets/hover-cookoff.svg create mode 100644 frontend/src/assets/loader-logo.svg create mode 100644 frontend/src/assets/menu-icon.svg create mode 100644 frontend/src/assets/profile-icon.svg create mode 100644 frontend/src/components/Navbar.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5ccd002..66b7cc6 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,6 +11,7 @@ "autoprefixer": "10.4.15", "eslint": "8.47.0", "eslint-config-next": "13.4.19", + "framer-motion": "^10.16.1", "next": "13.4.19", "postcss": "8.4.28", "react": "18.2.0", @@ -50,6 +51,21 @@ "node": ">=6.9.0" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "optional": true + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1861,6 +1877,29 @@ "url": "https://www.patreon.com/infusion" } }, + "node_modules/framer-motion": { + "version": "10.16.1", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.16.1.tgz", + "integrity": "sha512-K6TXr5mZtitC/dxQCBdg7xzdN0d5IAIrlaqCPKtIQVdzVPGC0qBuJKXggHX1vjnP5gPOFwB1KbCCTWcnFc3kWg==", + "dependencies": { + "tslib": "^2.4.0" + }, + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 10afa13..1c7a721 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,6 +12,7 @@ "autoprefixer": "10.4.15", "eslint": "8.47.0", "eslint-config-next": "13.4.19", + "framer-motion": "^10.16.1", "next": "13.4.19", "postcss": "8.4.28", "react": "18.2.0", diff --git a/frontend/public/itc_avant_garde_gothic_demi.ttf b/frontend/public/itc_avant_garde_gothic_demi.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3129a4a03a0a514d534b70bc4bdd7d17ad384277 GIT binary patch literal 83200 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 bzyTw2(7}ymhj2WC<54!YHs)t48qNO&5*!^) literal 0 HcmV?d00001 diff --git a/frontend/src/assets/Logo.svg b/frontend/src/assets/Logo.svg new file mode 100644 index 0000000..b381571 --- /dev/null +++ b/frontend/src/assets/Logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/assets/circle.svg b/frontend/src/assets/circle.svg new file mode 100644 index 0000000..ae630ea --- /dev/null +++ b/frontend/src/assets/circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/cook-head.svg b/frontend/src/assets/cook-head.svg new file mode 100644 index 0000000..4667d36 --- /dev/null +++ b/frontend/src/assets/cook-head.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/cookoff.svg b/frontend/src/assets/cookoff.svg new file mode 100644 index 0000000..bd0a078 --- /dev/null +++ b/frontend/src/assets/cookoff.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/hover-cookoff.svg b/frontend/src/assets/hover-cookoff.svg new file mode 100644 index 0000000..8a7e240 --- /dev/null +++ b/frontend/src/assets/hover-cookoff.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/loader-logo.svg b/frontend/src/assets/loader-logo.svg new file mode 100644 index 0000000..243e49c --- /dev/null +++ b/frontend/src/assets/loader-logo.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/menu-icon.svg b/frontend/src/assets/menu-icon.svg new file mode 100644 index 0000000..68eb111 --- /dev/null +++ b/frontend/src/assets/menu-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/frontend/src/assets/profile-icon.svg b/frontend/src/assets/profile-icon.svg new file mode 100644 index 0000000..1b76c3d --- /dev/null +++ b/frontend/src/assets/profile-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js new file mode 100644 index 0000000..a4505f6 --- /dev/null +++ b/frontend/src/components/Navbar.js @@ -0,0 +1,30 @@ +import Image from "next/image"; +import cookoff from "../assets/cook-head.svg"; +import menu from "../assets/menu-icon.svg"; +import profile from "../assets/profile-icon.svg"; +const Navbar = () => { + return ( + <> +

+
+ +
+
+ +
+
+ + + +
+
+ + ); +}; +export default Navbar; diff --git a/frontend/src/pages/index.js b/frontend/src/pages/index.js index 8dcc9d5..5cdbedc 100644 --- a/frontend/src/pages/index.js +++ b/frontend/src/pages/index.js @@ -1,10 +1,12 @@ import Question from "@/components/questions"; import questionData from "../../Dummy_Data"; +import Navbar from "@/components/Navbar"; export default function Home() { return ( <>
+ Date: Thu, 24 Aug 2023 22:04:51 +0530 Subject: [PATCH 04/88] starter and landing page for the portal --- frontend/src/pages/home.js | 83 +++++++++++++++++++++++++ frontend/src/pages/home.module.css | 29 +++++++++ frontend/src/styles/globals.css | 1 + frontend/src/utils/useMousePosition.jsx | 19 ++++++ 4 files changed, 132 insertions(+) create mode 100644 frontend/src/pages/home.js create mode 100644 frontend/src/pages/home.module.css create mode 100644 frontend/src/utils/useMousePosition.jsx diff --git a/frontend/src/pages/home.js b/frontend/src/pages/home.js new file mode 100644 index 0000000..bae2d51 --- /dev/null +++ b/frontend/src/pages/home.js @@ -0,0 +1,83 @@ +import useMousePosition from "../utils/useMousePosition"; +import styles from "./home.module.css"; +import { motion } from "framer-motion"; +import { useState } from "react"; +import hovercook from "../assets/hover-cookoff.svg"; +import cookoff from "../assets/cookoff.svg"; +import logo from "../assets/logo.svg"; +import Image from "next/image"; + +function App() { + const [isHovered, setIsHovered] = useState(false); + const [isClicked, setisClicked] = useState(false); + const { x, y } = useMousePosition(); + const size = isHovered ? 400 : 40; + + const handleClick = () => { + setTimeout(() => { + setisClicked(true); + }, 300); + }; + + const variants = { + is: { opacity: 0, y: "-100%" }, + isNot: { opacity: 1, y: 0 }, + }; + + return ( +
+ {isClicked ? ( + + + { + setIsHovered(true); + }} + onMouseLeave={() => { + setIsHovered(false); + }} + /> + +
+ +
+
+ ) : ( + +
+ +
+ + Start + +
+ )} + ; +
+ ); +} + +export default App; diff --git a/frontend/src/pages/home.module.css b/frontend/src/pages/home.module.css new file mode 100644 index 0000000..60f1e09 --- /dev/null +++ b/frontend/src/pages/home.module.css @@ -0,0 +1,29 @@ +.master { + overflow: hidden +} + +.main .body { + height: 96vh; + display: flex; + align-items: center; + justify-content: center; + cursor: default; + padding-bottom: 130px; + +} + + +.mask { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + position: absolute; + mask-image: url(../assets/circle.svg); + background: #EB5939; + mask-repeat: no-repeat; + color: black; + + +} \ No newline at end of file diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css index e640f07..6e61509 100644 --- a/frontend/src/styles/globals.css +++ b/frontend/src/styles/globals.css @@ -36,6 +36,7 @@ h1 { src: url('./../../public/itc_avant_garde_gothic_demi.ttf'); } +button, p, h1, h2, diff --git a/frontend/src/utils/useMousePosition.jsx b/frontend/src/utils/useMousePosition.jsx new file mode 100644 index 0000000..431509c --- /dev/null +++ b/frontend/src/utils/useMousePosition.jsx @@ -0,0 +1,19 @@ +import { useEffect, useState } from "react"; +const useMousePosition = () => { + const [mousePosition, setMousePosition] = useState({ x: null, y: null }); + useEffect(() => { + const handleMouseMove = (e) => { + setMousePosition({ + x: e.clientX, + y: e.clientY, + }); + }; + window.addEventListener("mousemove", handleMouseMove); + return () => { + window.removeEventListener("mousemove", handleMouseMove); + }; + }, []); + + return mousePosition; +}; +export default useMousePosition; From 14b9eb91b8b81c63b462a2669e3906192406117b Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Thu, 24 Aug 2023 22:18:10 +0530 Subject: [PATCH 05/88] Feat:Add the sidebar --- frontend/Dummy_Data.js | 84 +++++++++++++++++++++++++++- frontend/src/components/portal.js | 44 +++++++++++++++ frontend/src/components/questions.js | 2 +- frontend/src/pages/index.js | 17 +----- frontend/src/styles/globals.css | 6 +- 5 files changed, 135 insertions(+), 18 deletions(-) create mode 100644 frontend/src/components/portal.js diff --git a/frontend/Dummy_Data.js b/frontend/Dummy_Data.js index eb1bbe5..9aeb5c5 100644 --- a/frontend/Dummy_Data.js +++ b/frontend/Dummy_Data.js @@ -1,4 +1,4 @@ -const questionData = { +const questionData = [{ objective: "hello World", points: "10 points", task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. @@ -38,6 +38,86 @@ The third line prints the sentence, sen.`, explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }; + },{ + objective: "hello World #2", + points: "15 points", + task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. + +There are two types of synchronization and they can complement each other: + +* 1.Step 1. +* 2.Step 2. +* 3.Step 3. + +- This will allow you to fetch your workspace on any other device. + > To start syncing your workspace, just sign in with Google in the menu. +`, + inputFormat: `The first line contains a single integer, q, denoting the number of queries. +Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. + +**Constraints** +-------------- +It is guaranteed that a valid answer always exists for each query of type 1.`, + outputFormat: `Print three lines of output. The first line prints the character, ch. + +The second line prints the string, s. + +The third line prints the sentence, sen.`, + sampleInput: [ + `10 18 +4.0 2.0`, + `10 90 +4.0 2.0`, + ], + sampleOutput: [ + `14 1 +6.0 2.0`, + `14 11 +6.0 2.0`, + ], + explanation: ` +When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. +When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, + },{ + objective: "hello World #3", + points: "20 points", + task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. + +There are two types of synchronization and they can complement each other: + +* 1.Step 1. +* 2.Step 2. +* 3.Step 3. + +- This will allow you to fetch your workspace on any other device. + > To start syncing your workspace, just sign in with Google in the menu. +`, + inputFormat: `The first line contains a single integer, q, denoting the number of queries. +Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. + +**Constraints** +-------------- +It is guaranteed that a valid answer always exists for each query of type 1.`, + outputFormat: `Print three lines of output. The first line prints the character, ch. + +The second line prints the string, s. + +The third line prints the sentence, sen.`, + sampleInput: [ + `10 182 +4.0 2.0`, + `10 9 +4.0 2.0`, + ], + sampleOutput: [ + `14 0 +6.0 2.0`, + `14 110 +6.0 2.0`, + ], + explanation: ` +When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. +When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, + }]; export default questionData; \ No newline at end of file diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js new file mode 100644 index 0000000..fb658da --- /dev/null +++ b/frontend/src/components/portal.js @@ -0,0 +1,44 @@ +import Question from "@/components/questions"; +import { useState } from "react"; +import questionData from "../../Dummy_Data"; + +export default function Portal() { + const length = questionData.length; + const [clickedButton, setClickedButton] = useState(0); + function handleClick(index) { + setClickedButton(index); + } + return ( +
+
+ {questionData.map((question, index) => ( + + ))} +
+ + +
+ ); +} + diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index 79fdd1d..2f07b25 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -19,7 +19,7 @@ function Question(props) { } = props; return ( -
+

{objective}

diff --git a/frontend/src/pages/index.js b/frontend/src/pages/index.js index 8dcc9d5..eec7c79 100644 --- a/frontend/src/pages/index.js +++ b/frontend/src/pages/index.js @@ -1,22 +1,11 @@ -import Question from "@/components/questions"; -import questionData from "../../Dummy_Data"; +import Portal from "@/components/portal"; export default function Home() { + return ( <>
- +
); diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css index 8ca46d6..16eacb9 100644 --- a/frontend/src/styles/globals.css +++ b/frontend/src/styles/globals.css @@ -8,7 +8,11 @@ src: url("./../../public/ProximaNovaFont.otf") } -body, h1 { +body{ + font-family: 'proxima nova'; +} + +h1 { font-family: 'proxima nova'; } From 6de0c156e3abfa8df549b0fb98dc2c6b13264774 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Thu, 24 Aug 2023 23:19:41 +0530 Subject: [PATCH 06/88] Text editor code completed --- frontend/package-lock.json | 36 +++++++ frontend/package.json | 1 + frontend/src/components/questions.js | 2 +- frontend/src/components/textEditor.js | 135 ++++++++++++++++++++++++++ frontend/src/pages/index.js | 34 ++++--- 5 files changed, 193 insertions(+), 15 deletions(-) create mode 100644 frontend/src/components/textEditor.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 66b7cc6..26e72bc 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "cookoff24-portal", "version": "0.1.0", "dependencies": { + "@monaco-editor/react": "^4.5.2", "autoprefixer": "10.4.15", "eslint": "8.47.0", "eslint-config-next": "13.4.19", @@ -191,6 +192,30 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@monaco-editor/loader": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.3.tgz", + "integrity": "sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==", + "dependencies": { + "state-local": "^1.0.6" + }, + "peerDependencies": { + "monaco-editor": ">= 0.21.0 < 1" + } + }, + "node_modules/@monaco-editor/react": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.5.2.tgz", + "integrity": "sha512-emcWu6vg1OpXPiYll4aPOaXe8bwYB4UaaNTwtArFLgMoNGBzRZb2Xn0Bra2HMIFM7QLgs7fCGunHO5LkfT2LBA==", + "dependencies": { + "@monaco-editor/loader": "^1.3.3" + }, + "peerDependencies": { + "monaco-editor": ">= 0.25.0 < 1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@next/env": { "version": "13.4.19", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", @@ -3544,6 +3569,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/monaco-editor": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.41.0.tgz", + "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==", + "peer": true + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -4469,6 +4500,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/state-local": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", + "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==" + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 1c7a721..e2aa95e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "@monaco-editor/react": "^4.5.2", "autoprefixer": "10.4.15", "eslint": "8.47.0", "eslint-config-next": "13.4.19", diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index 79fdd1d..4eb1173 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -19,7 +19,7 @@ function Question(props) { } = props; return ( -
+

{objective}

diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js new file mode 100644 index 0000000..e91353b --- /dev/null +++ b/frontend/src/components/textEditor.js @@ -0,0 +1,135 @@ +import React, { useState } from "react"; +import { Editor } from "@monaco-editor/react"; + +const TextEditor = () => { + const files = { + "script.py": { + name: "Python", + language: "python", + value: "n = int(input())\ninteger_list = map(int, input().split())", + }, + "script.java": { + name: "Java", + language: "java", + value: + "public class Solution {\n\tpublic static void main(String[] args) {\n\n\t}\n}", + }, + "script.c": { + name: "C", + language: "c", + value: "#include \nint main(){\n\n}", + }, + "script.c++": { + name: "C++", + language: "c++", + value: "", + }, + }; + + const [fileName, setFileName] = useState("script.py"); + const file = files[fileName]; + const [showMore, setShowMore] = useState(false); + const [selectedOption, setSelectedOption] = useState("Javascript"); + const options = ["script.java", "script.c", "script.c++", "script.py"]; + + const handleOptionClick = (option) => { + setSelectedOption(option); + }; + return ( +
+
+
+
+ + +
+
+ + + +
+ + setShowMore(!showMore)} + /> + {showMore && ( +
+ {options.map((option, index) => ( +
handleOptionClick(option)} + > + +
+ ))} +
+ )} +
+
+
+
+
+ +
+
+ + +
+
+ ); +}; + +export default TextEditor; diff --git a/frontend/src/pages/index.js b/frontend/src/pages/index.js index 5cdbedc..2241036 100644 --- a/frontend/src/pages/index.js +++ b/frontend/src/pages/index.js @@ -1,24 +1,30 @@ import Question from "@/components/questions"; import questionData from "../../Dummy_Data"; import Navbar from "@/components/Navbar"; +import TextEditor from "../components/textEditor"; export default function Home() { return ( <> -
- - + +
+
+ +
+
+ +
); From 4676a9003f39744e02542ce2de01c3794a53ff8d Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Fri, 25 Aug 2023 01:22:52 +0530 Subject: [PATCH 07/88] fix: Fix width of the editor --- frontend/src/components/textEditor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 1bcf87f..6665fad 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -112,8 +112,8 @@ const TextEditor = () => {
Date: Fri, 25 Aug 2023 21:48:02 +0530 Subject: [PATCH 08/88] Changesin ide: on clicking run code progress is saved and remains same even if traversed between questions --- frontend/src/components/portal.js | 2 +- frontend/src/components/textEditor.js | 37 ++++++++++++++++++++++++--- frontend/src/pages/index.js | 3 +-- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index 84edea5..1bb5086 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -39,7 +39,7 @@ export default function Portal() { sampleOutput2={questionData[clickedButton].sampleOutput[1]} explanation={questionData[clickedButton].explanation} /> - +
); } diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 6665fad..e8eb390 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -1,7 +1,7 @@ -import React, { useState } from "react"; +import React, { useState, useRef, useEffect } from "react"; import { Editor } from "@monaco-editor/react"; -const TextEditor = () => { +const TextEditor = ({ questionId }) => { const files = { "script.py": { name: "Python", @@ -27,14 +27,41 @@ const TextEditor = () => { }; const [fileName, setFileName] = useState("script.py"); + const editorRef = useRef(null); const file = files[fileName]; const [showMore, setShowMore] = useState(false); const [selectedOption, setSelectedOption] = useState("Javascript"); const options = ["script.java", "script.c", "script.c++", "script.py"]; + useEffect(() => { + const existingCodeData = JSON.parse(localStorage.getItem("codeData")) || {}; + const savedCode = existingCodeData[questionId] || ""; + + if (editorRef.current) { + editorRef.current.setValue(savedCode); + } + }, [questionId]); + const handleOptionClick = (option) => { setSelectedOption(option); }; + + const handleEditorDidMount = (Editor, monaco) => { + editorRef.current = Editor; + }; + const getEditorValue = () => { + const codeValue = editorRef.current.getValue(); + + const existingCodeData = JSON.parse(localStorage.getItem("codeData")) || {}; + const updatedCodeData = { + ...existingCodeData, + [questionId]: codeValue, + }; + localStorage.setItem("codeData", JSON.stringify(updatedCodeData)); + + // alert(`Code for question ${questionId} stored in local storage.`); + }; + return (
@@ -115,13 +142,17 @@ const TextEditor = () => { height="90%" width="95%" theme="vs-dark" + onMount={handleEditorDidMount} path={file.name} defaultLanguage={file.language} defaultValue={file.value} />
- +

))}
@@ -155,7 +155,10 @@ const TextEditor = ({ questionId }) => { > run code -
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..837cf39 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "cookoff24-portal", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..837cf39 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "cookoff24-portal", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ba971ef --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + + } +} From 9ceb47fa97af6742ddf3a37261fc59737fc0f96e Mon Sep 17 00:00:00 2001 From: Gaurav Choudhary Date: Sat, 26 Aug 2023 10:56:31 +0530 Subject: [PATCH 10/88] Created the test component, added the login form in home page and improved the overall look --- frontend/Dummy_Data.js | 85 +++++++++++++++- frontend/public/Cascadia.ttf | Bin 0 -> 71776 bytes frontend/src/assets/correct.svg | 3 + frontend/src/assets/greenhiddenEye.svg | 12 +++ frontend/src/assets/greenopenEye.svg | 8 ++ frontend/src/assets/lock.svg | 3 + frontend/src/assets/redhiddenEye.svg | 12 +++ frontend/src/assets/redopenEye.svg | 8 ++ frontend/src/assets/wrong.svg | 3 + frontend/src/components/EditorWindow.js | 20 ++++ frontend/src/components/Navbar.js | 6 +- frontend/src/components/TestCase.js | 123 ++++++++++++++++++++++++ frontend/src/components/portal.js | 11 ++- frontend/src/components/questions.js | 18 +++- frontend/src/components/textEditor.js | 13 ++- frontend/src/pages/home.js | 119 +++++++++++++++++------ frontend/src/pages/home.module.css | 15 ++- frontend/src/pages/index.js | 3 +- frontend/src/styles/globals.css | 20 +++- 19 files changed, 416 insertions(+), 66 deletions(-) create mode 100644 frontend/public/Cascadia.ttf create mode 100644 frontend/src/assets/correct.svg create mode 100644 frontend/src/assets/greenhiddenEye.svg create mode 100644 frontend/src/assets/greenopenEye.svg create mode 100644 frontend/src/assets/lock.svg create mode 100644 frontend/src/assets/redhiddenEye.svg create mode 100644 frontend/src/assets/redopenEye.svg create mode 100644 frontend/src/assets/wrong.svg create mode 100644 frontend/src/components/EditorWindow.js create mode 100644 frontend/src/components/TestCase.js diff --git a/frontend/Dummy_Data.js b/frontend/Dummy_Data.js index 9aeb5c5..d92aa60 100644 --- a/frontend/Dummy_Data.js +++ b/frontend/Dummy_Data.js @@ -1,4 +1,5 @@ -const questionData = [{ +const questionData = [ + { objective: "hello World", points: "10 points", task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. @@ -38,7 +39,8 @@ The third line prints the sentence, sen.`, explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - },{ + }, + { objective: "hello World #2", points: "15 points", task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. @@ -78,7 +80,8 @@ The third line prints the sentence, sen.`, explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - },{ + }, + { objective: "hello World #3", points: "20 points", task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. @@ -118,6 +121,78 @@ The third line prints the sentence, sen.`, explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }]; + }, +]; -export default questionData; \ No newline at end of file +export default questionData; + +const testcasesdata = [ + { + question_id: 1, + + testcases: [ + { + input: [3, 2, 4], + output: [6], + hidden: false, + status: "pass", + }, + { + input: [1, 3, 4], + output: [7], + hidden: false, + status: "pass", + }, + { + input: [3, 3], + output: [6], + hidden: true, + status: "fail", + }, + ], + }, + { + question_id: 2, + + testcases: [ + { + input: "radar", + output: true, + hidden: false, + status: "pass", + }, + { + input: "apple", + output: false, + hidden: true, + status: "pass", + }, + { + input: "nice", + output: false, + hidden: true, + status: "pass", + }, + ], + }, + { + question_id: 3, + + testcases: [ + { + input: 4, + output: ["1", "2", "Fizz", "Buzz"], + hidden: false, + status: "pass", + }, + { + input: 15, + output: ["1", "2", "Fizz", "13", "14", "FizzBuzz"], + hidden: true, + status: "fail", + }, + ], + }, +]; + +export { testcasesdata }; diff --git a/frontend/public/Cascadia.ttf b/frontend/public/Cascadia.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7f2481256bc2986f0852172428e6f6c9486b0192 GIT binary patch literal 71776 zcmb@v34B!Ly+8as=bYImnSHX7naN~>1hR*K2qT0=mJr!Y05u_D$thqM0Rd4XBG8By zk&9?8qEbrTIw)0)NYPSm%0+7}wbUEExn4@SmQpTNw#=No-{(0q$t0lnem?J?$(cFp zv;6k$IS@(+vEoZ2q-y5v6Ysu!=06GfWjZ0gjT2|i9((I^Z%-!Vvps~|c69p8!jhKX zJ@XGj=oUOx-?*%y<=(#-7ZW0$#PP?Ct5(>c277Fb+#yOI; zWZB9!Kl|c?3LKxqc4q0ljSWXG{`*cslDgROvW7J+(u3CZ*k6MCy~`VxE!=p0wVjZS z=&$I@mV578*>i}L5_0e&yWSF9*wQoY+I@sLorDPQ5P(6qD(~Cv{}6t0k7d-i#H7b< zgq;4}e=cOdf8N)1;Zm34l{&OtIMfk=oy9-)T)X1MJVTeddd^85>`cFZl%M$@vXbaY zJ<;MxD=8$;q1R6=tB8nWQ3}y*L__qNQi(zHS@l;qNlFCFNHA#(f*^?k@YKKcnYT^8 zjRc4{)2{U@UizG_op#0Uk+L*fvF{}sDMVVaH-zj#|9kkSo@^!iqerb|2bqeqQ%M_H zPikFG74J_nLuPxf~#vUpT%5X z!PD!=B(jmL#@#E)YI=-rS2uE;EGKKoEYd_;aK=bZ0AwfWN^$~c*k?cKq#3lGrqZv% zORgNcawxon{i<6y5FQ&@itp2rJ=eaua{g*wWKC>8d>Wsw$d<^Ss~zm_h&G}PcQvSVz^#eGtajfOv+cEPda*|Zwdnu`;-;kwY zW5gY)iUcD&zMXWf<=QSBEejjN0dmjpD<`DJnPEd@LN~6{j&?d z$yYE!{B~X0b_pBqm>RuzFMjvp7*B?i!+}Uucs@qHCtT3oNo#>!kO?*sn-kxR2A$w* z@DK24#Tg@LZUks$E@rciJVgFPu6R?tgEH+sJ-Ek9ipWTE8<|HM$OHUZvNt_?4UEw9 z0k-$B9qajN*KJ+5e7OZZfY$*Nf;I{89RH7k7Uq%L$u9B|`6-!Cs>yWR@hlk!oR1}w zK}+Mw3*;wcHKEI=mC>)oPXRx2ZLQ?j4wly@hHO4N~p$R;NXVJuznf@tv%&ql~Z>#4|;moXlN9y%T)*`Fp6I?SZb zA6k&__xWoVqNxLVV)o6dABR12Y>#>;q6hCGD_MZ8@lO9C8r_>)8}imKs+)wniI5%Q ze=`q}a{n52zdqz`^m;?uZ2y9q+BRQ^*89_<$1`dHG1`#U=JWf!b#;e&K1gSG`+aCj zAY%{s>6SYV1n8ETb8Fv)K=y8#Rr{tug>m&`>kee$TJ5`DAf2BT*jaXx-Qr~jWC{gl z-W2rw{Vl7BGr&rIl zs(0r_@7Cjrm0f8k0{DtwtmFRxB_J|j)CBYaL%=K~2*3q9^(M}=<6Z+LZ<%QVO*?=# zF$0`FL|YFS0%`B^mef=2v=w);`~jgl-`_{pchmxb;}6j4{Cbe~6da1#)ySF|KH1Dgcs~TFssLNaH zUzp~vJK%J-wTwqI{sRr#ocjE>+7Kf$Mp}OBND!)+eS4#SLOr_!jDo-0ajJ2Sw?4F> zJ|DYY>x4F3_BJ-KyNUaNAZ8z+QZ^k;Mgvk>bI9mlI5uSRkL|rOhKy0KXxSB=e{6`l zRXC6LkM|}ww>A0~faU@U_**3aD;+ ze$70vC7Zstt*y#?ARy&5G&Zo~Djzt#EqcjcRmIpe_QZH^TPV=bSdTl#*YTT&7GMZ% zeoPRRw4uhS{MvdRL$^P+8xPxsC zO(799=JPhysYF6*xTN^bo6v+GB*Aa;0;jz3HtQ{nQrHo$^CKMKuPwB=|KXC}!wI+y zVvw?jsk9Q3au}`E`a*JAXlWgz7xk8gQ0oG3o7d_e>1SV@&L-mO#QKmXdt#`yu>tdd z6awwx#AKZC)-C|`qQMFEZ83_&V^U6UPod?&eO!|eqI4Fz7P1)>LajC4`Z{lYJIP6U1H$d> zs16OOHyXgP{CPCNMzbvcz+JlRzB4$P9lAGPy;;v&#mHvVhH6-+>`%x4u(KjRBqUYh zB0~_J0eu3g07Nn1X|itzcmp84H1@PNBtUs_p`kv1J9{)OdM5f9&Tv7?^dvNiIs}tC zUbRy#Yd>V>e}?RkJ{yP*Nf?8AS;wXmYm@I|(CRZ75{9cz0Q=~QX*Tx9CsH3hkg@@G zw8xbpn*hUnpaERp;7>c$bF>B;xE@FK{<=EWJ^ny;>hc0l6kC*imh2Fb8M+uGqISw}tI`)8=y_q2bOd938 zg=wKBb@@$dV_Nm+b}u9ApSfQF(w#7#oPKZ&w00@m_R3JEyu-SfXG5UTfAvLA!L@_;~fkoJ(lertjmg1)V> zz6r_>su@rwm1(1xaRhh((f9*yS2NKxt5%aHG0p-w}_*9$z|JE5ufnzgd-~(aOC`Zo*_T62HDuO1n4j^0w zbsCe|R5SoIc)G2vu>m&KU5SiC%{exlw_{EtFtriUxdAroG4C4IJH~(s^TS!SZ2Be; z0Vf_4E?5D_4^+}N;i452{{R9lI_`Jj8UTRNyH(HuzG#ordGs=84AvNX?*9Bb>`h=> zJ?@&owkRi=qFiboAoZiot2j0Ezv%C6j4675Z;R~c05!w>mC`imF~@5KxJGi+T;qtfFiA!=E$}-lV4RSekT6kg~>^{IZ5guo%^2%JqXmdwdoUXenmg<{sjI2 zV}4*cq4$@y5@iSDxR7ZavtNL~kb%jeVZiT$zhUGCs^I2CoI2#E7%Rpr$z%q502+?~ z;`ef4#%_$kZ4qZ_wYh<3XVpH4P8g(q17KJ~6u+7rAKTIx=s3-Vz!~@E*QqAggN!yd zaF*JT@AWpr&KgHyZ9!3D-wSDgyY)F-$hE=XX>NdOh8$vYr!E<`)C^`1!{+x}y>t{A zr8+`>mEvYX2T0kqqtZsy!IL=D^WW)AUI8=$lsvXsZCC8du?d^eBZ$b3Nx^0Vf7izp|Z;Z<5Joe51`0Nf;5Wm{LloRc=ZGPKac!a*t zAl7ko95_r&XHuJwWEUF=0YCI?7}eu>WTfBIIRCIY$FrvLRnPsEJ)YGS<2|c}_jp!T^my(o@9_l7pZ2UM?(wt~f8@Ehw8yi& ztjDvg>{ZXwk{-_wN?JYgupUqIu#Y@T3VS?@i+VhZhW2-Ue6R?k7u&yR?qF8R?j3)k7uH{ z$1}luw`Y7t&{LJs;~AGx7&zq_J1FS6ZBUOVFeu;|liunXo!;ZQHGQ$?mXZ0M%8D}2 z@QSBB<;6oiWu>orN{d@PCB=h1MTJ36;jmjh1^J6TdD%lfxjBnHIoTh1vXj$N=4Yk3 zJbq1T%KXff9*-}@>G68*_IS#Y-Sab&b3B7IN$&aS?jBECc}mK>D^GZ#9{kdo=%|`FCxacDi=2_7A#5U5)NhT}XFTpR2!1 z|FZs^A;+-V@S5SjjDoS)c$e`h<6Fk}Ot+dIG3_;dZq7H?nx8lSH9?oKB;l=uKPLP& zF)MLKVr$|bEE-FlWtrs>OPl3s%Q4G0)*052^&{)o)=M_YmS9V<<=95rs%`UZ_u3w} z9kiXX6MLcke*25||8RI5o1I0@+0J9mOU@pb)z#p7*LB>bxJ~YK_w(+*CrwHEY0`nD zBS{}88#6pv z@%++r)^o`#dNaJm-sinXy?^itzRA8NzNdU|`~IG3%xum4Vdi=N4EXiG%eptKE$i>u zj%-hMUH0beceB6D(d0ak6UsH_CgtYkj>x?;_rctQxqr(Wnb(^4PTp68vj!IrZW_FQ z@Lz}I4v~jEFyt3Q{wsf2eoOv?`Ca+v^CJb>1+xpDEO=pP>d-wyUmtp8=*3~#!|oe) zv`{Lv6;3PMQTRpSg`#_kT8fj4Cl+rj{$0u4B`=gFmM$%`myId6muHt}BNEgKU#|%C zEg~!73YbN$ELwwtP8RGz&L>61)aJ9XO)3i42%V9unyuGYYPNP~Nd?`f2wE6|7FyAQ zj+n@xK%!9+^hDO{b&{aN-k8!c_7R2oHv0&)Uxy6vd_ zD4nb9V@(UmLPw+$hv~QF9dZyS*KUW$T}E-_KDl& z)N1`co3DiJ>0H!ST2fJ7mgBecZ(I<6_?LwrY>9NyeW%Zd_9}0-Z`{6X>*ejwKCWD( z8Ny!=zWmU^yER)6zxK%UHZwh=JiO?xd5zr{*Dh;$Kq*8_u)gQK)TG%%l1N&>VlbGJ z>~fMJs4>YJQ5}kHL}5{}+g4`JDlL&*{xW~2R_n6bOG}0)Y5nz2QP;7jsOH!w54_WK z>EcsQ4143KQ|LTPC%*c~@1K9@e}1m~xANbkLRAc^Z1x*4dp+h4yyy~ToeN`RHpcK1Ys-(;)RsDUGwDYnr_@#$Z0iBrbcXBHG&$9rY8DL^*&qf* zw=5cB;~G)OTFVBay&TS7n;#hNg|p39?vv`rom>^!_!M>jn(jOn46b{9Ue}j1=P6&( zt~_^+3UTF)>ZuQ2r|gXfo&-a0N*tOB^62`S~SLc$5RW>oNY!`x(S(c&z;S@(1-Dl?Hl$Sc)jN~~G zidJ^+`tiR9JD%OT ztvu2inZjVodSJAsA+~@)1Qax~pi%{J2)Zh@NmIkKI*x#px=V0>YjnOA;tSZt1buUY zR!&F|EM`1vWDoK|6-FWGxA`GU@NM%sN*z+s(bQchccmVsmAkCF7*eEdk%Pk2?iLJe zx3GYXX9wC(=a@+fm?Wb}ffq(_Pl zLFN@iPDRc|`Mw_GGZPoXxKl4Xoko*GHVHvK{rr5D4vAY8c6{!tc*BT=zkl=a!{5C6 zc?W%I_Zx5Q{`_;z)|S(|cK_!pWs+uV`0HJ5J6?+HXJc2&xE!;RWXJ%A$t|12pw2E^ zFa?RqQX*$I&?z{Ll$PqiYUR;cXk1x*QeKpUq2|p)8>z)wwC>4$?#V zDq$m^-^$VYc6Em6xef4Njrm!4&$dLXC|j)>ZL+Ktf)txfRSo73=*QsB1}qf2r!YR z%)+b((56Qo?fBbY zXr~wo*KB)o+mr0~@2oI`6o8(Y#$n?y2n3X%Ap&POrn?>B27G)4pV6syI`uQ9ML7XZ zFiMxN*R!XccpCB#c=ZKri6%)D6B4LMp{PZ)#Mu@$Kp_V#_zIQ)wo))HKH`^0wkn60 zo0ltxw;oyJ-2Uk{#%%RsMfikfPd5?ghxej~v49g88Cok9R)&sBl4xShbBze*wK1F- z1V5$tE2UIwQKr$i&MLoCes`9>rA#|Zi)k?gL22YR!4>(N@GIe?NSEM6%g9Ab5ErO0 zNrDALw4$JwAZ|DyOVkmA4Eg*^g%3DRbo_mq%@G> zNywBf2?;uvQ+DZs8M-`K)R}^*XjY&`6|hVu=I7f+*h-mR$#!XS{ahV@T1!ikz%jYG z!;>V*Ws@o@%FA<@vIOOpN}H6|j4snJpV{~JxBt1W_UV67oS#uGC5pUxd`aV!hc?Wg z`^qcEuh*=9;pzPcQ${S6_2z?m4E>lr8=We*B(N1|v$UdA6NOIwM<7g_r#6FJFI8`9ztaWf0$jp7S`Y0CBS=)g`Bzf;vcI z9s0yS8%RRB8QZD`84Z8ay86sZa}NCEbNTMJUBCSK&Xt5WECMzIbh=RxbQY&cOFXQFjq1qJ@7jSyf8SBGDsWrCTGg& z$-1D&nkSpBrl3|QYc0IT7}y!qVGijux!H`|RaWQ&|8OB5{3|ZJubeQ_SuZ?ok4Hn2 zEs6*!D?IYZr3ZAz!&cqipDyad$kFinK7;@ws>Ro-+G$3IUbZ@P!2|+JO=Z#;^}7HH z26!8O83R<5iZzE$HO;+#>Xg&a_Lx+8vOQ8QyxFu|`6TihBl#aR1K-Sws@8l14ohMB zIyp&B)&{K(r|d9ta;GZ3!DYa948>6k!2$TIW~Lxl<>kfxR?`XL8FYuTUnr1H_MXK~ z_g8PcAsi2(*H;v;xRv*s0sGKCC|w2uTyEKAiSP8LeKG{-a)$!}4DrGzv0l-BYs=q$ z^@_3M#ix`ep=ChV+uuLG&SE}nx9omdtOzkmV>4d~uCp_H&_-3OJW(6ek)T~01uY|U z=KuLbt)Cli%!01Ebz{6MnNr`0tl3`~CLq{Cm~I53gdI^N}lWym93b z_4~+sufP5t+d!TBVZ&m&Tpni!-099#+2+&*K^qB)!9kG9#;E2QpnI4Q%;jXlr`4-~ zoIY{buNoWQ-?VP0(Rm89Onm&|x$Bt{qGqY`(eQ!SFFkno+{iY~Ma(t41cLau@<|T@ zY#2)|#zOkWGEg^A*wfm0A;n}Ah7fhyRHHJfw4Z1qr<~s*k*-^XmhTWmsx{e)k)%Lg zCQFjZn4**2DY~G;E<3bAQ=&yqWQYc>aeCw4Bh$%IgO>UF<#2$?;ZHHy^!5*L`*i%Y z$2L+LD!Qc&bgRocYER_boniS~(XA3CBXp#iyTQwDml=$ceu5NKPPGpJg(8 zJ=S!6N*-LkJX6q_BD;YfZVQy;b8Ah?i5b^0QHBYsW?~A0YsaLd41ou9=+;-qC!gH3 zXM6GRZx*c^wc;N~w{LPkvts|wveCzaTdS7;^<8J8^{98u_+dqfqf@Jzr>}ad3JT=b z@dX9eqV%c3S@-=23X76a7+;pAi6lXq+4KokIl&|w60||VDGMrr0xHacQuQQfcKG>F zU)+cuE@eIO!CUmOzp28!Wf}He0;O&MY*GBYAVsPNl1$*qXr7MrWEqoFws$cTsUkKG< z?%mX2X7z|%bK70ipc@S*IKVm1cCY!0X4+};R|pE7g<@MTZtU)0W1WDfWjt+RQ2?5d zAek(psMo@BXHem|f_wta4z$}}>R6*(+GgISTx#kVW#7=X!7gQWcZhd~Uy>@rOT=BM zg~eK$$Jjt7I-g?9+ek!QqOSoPqJ5E9{Q$zf@@v=@@%#{^@)d^QU4LUK=FnA>ho zOf(v`+Ce^FcJ|=GL!DNu*{s(~sTmoW&^kkg43mZlLx)nqkxZ@8h^l=A%>D2B09)!O z4rk2Yir=EXm+FD_eTy%3ELXnVZQh}T`PY8)ekHuayj%VHa(PFM^SREw&Nr|f>OAD! z+xZ5z=bQ}h!u5!D;Ku2|8}1SZY>4l!1Pn%L_JC$Bu&9B1IqT%8a`Q zjH3txES#0}3}UtEG*P((VV&sZ#>U|Bd3oap-xy<|8*o~+cW?{v`wH;OB0@%Ze+dSy zY>{6kNjtW0X7ckTHRC{~7lsNS$9C+3Dn}pdg*73z%XPk*XJ%L(YT~Z;U=V5#$R2y?6bwcY3u4zE+}8Ow|Bio zH-DlmyzBl~>i+nrKP&gWoq@jA0df=2*AVz2?jeJnqHz#D=FC(%Qxnvg83?)g58xH5 z9(OESZLa^HiWwS2bo z5-)e2{uURaDUIeqEt^)2hSY)F4<*_{o1ggR2G(yn5vdga_2kd!pHI*WA>~6lS`@p(Z;HFa zJbt&4&wVRAg290#*C2CiPN!I%MQ0&%k(RT;fotaVa%e7jiKC1vXdktG6kzzAD{)RPYj+|_WK<# zbgiPh={~3O0YZfKj5jwFZ1~~B4?j+m#f@h_edhFv)^A@gqR-I%t|JM`UzCf>*G0TP ze&T`0wry0-1MbY)RAV@Z2x$bJBqP<{vHT*t)f2$&VgWf@_y8Tf1iY@-=kv6Hh$y2sYv5J3o5l zP(#C^M}Bn3W65}V{fd`n&wgpe1220l9g7ytU%X<);_!|KR;<~yY0ZiURJ>g0QYDHP zlg}cj_;;VI)UM zJ44jtk1OZa05_UF3?)jlQVW#OG-_SGjw34K-L{cB8Ey!r$9m2S=cyBt&iqS@PPRB0 zgZ2+iFzOJB;`}6MyifD;6N~DztYCo_#m_&vB z?Mae7j`(=Ujo#rvS=w(1@goqe@kim#_#^bpMt7d~>|k+BhfQ|$#$nh%Z}3V*zoTDY z!8J!~`u7pJ5NQ>9XQkPRnREZlBs4orvcnOiR#nb%E$6rQBR#F3Ui`#(bYvVrH9Ny4 zN>=}IljGoHH)JX7W#*wd!Dx0Z52bz1+B(r$zKHVjWI8qVbSj-HTy9drTj>bpU$;`J>EsS7D?5=C5wNC8mDy>ao#BB& z22Emu>=6=E?HO*_Ml%xeF{L=IL7j=EhT*Gn^+4YLDi!Nc?EBsGAid6@lJUV7m6u@L`Na(gg8vS4YpYeSq%@} z3_D~J5qehk^w48uCusRAoPpZ_`+!noPnLLAy97BI(6-ACueModlyzW1&c<1S&5DdK z@+6sBxGZ*eX=##Q_)_`k#TRMm=_03o&sVEgf3-*NEb8o}dublcqA&dUl>^G_7cMFL z55fSUYia&8Xy2 zIkV>pRJ`ZTIraFNH#-NXYPyyjZ<{;xiLyZY?yTGLw-wZ$=ybl~d~|JQZSsVvb&W!% zu<*|8`AOp^ZrFth!tl zKLMlaSPaL-a>hw)E)W)ab+958>gU{fPv2k<{F>70W%)(&R7z`qwyFyw+PY!l_@w#S zcP_+88?l}xY0~7ikK%miiQ0l~`L|{5P7jnlF?4R*ad~C+iD#8L^p(hyLQu2!dR0i5&MBf&92I*~5M{VA@IBa*$JvwIJN1=| zqashz-O2*(tgB~2n!_Oiif$5?NK?g3@HEzmGEV5Jk)~pgbBrhxo{lIgE=AW(;<<1# z^H7@Tr_xk`Wq)R&(n-dd{i0b!Y96&0b#3g~I*JSo&UcDtp4;|gHQ?vG)ww;HtRI>o znuYCnBF33qJY%R312p64!E;Eyw6go!(K5@Eu=}VWt74qpC;Ej6=MEm__kj;naopOz-qsOOmQZCi2EvQM-sNL{ z8yr=0_#4T}U6f4N^hCUJDDFAtx0>~mL`*u?0NFssuy7sw^fkg7x^jp&G>0_=|ABct ztT{AD=#@jHMLeoWhGzB!oUjrNiOr%Q>&0diucJKRQ6|JjjDR>{xOLI;EZ9;kWS*0g zT`nFCPoSme^1oeb+);i}`43T87ddxv!)&qOaDg;y!$q_oUZR{6&Dt(bXGWHKdX&k= z$1v70tVM)$cp$c_qvLv(rc>K>RWG)-v*&up$r0%OwJ>_~JcCD^s2<2bp zH1fcIEK0rlr7m;$Ka?)9Jv;&BA@~;BBCF|<+DswZdE{#bBk_>>OXnkB7oF`cV8K8z zTR3@Iv6%{BD`Eg=HS0hcKmeOBK!*NY%%!K|uE=VkExaOpkN6YuX(>-DJooftiZ@5 zSDc^GKDoNGqOzjl&JyrfKshHI2Gxn=7B+&4TjWGb{t(%dDtq!PM8++Q0)bZsRFw<~ z6h;zP9e$Turq!oGGP9s*1}Yv@Qn8RA{idTM-0>jz~({xv;KJr3}6X_*MIWM%m@ zdcDsKEM@wVO|Z~h>B-h$qD@ZJs^;o(Amlh>1Xey4Lq{Jj;_X(9qddCBU`+vFX1|KN z;_X-EZs^`ulsQ6>e%TAn?o@gpLn#&)-T=qQVWyxXXJXJ&Em{>$;nPA9G*vD1gM&B& zCWocj>X5Cv<|qr_=s+=z6RC>xBxsj3wfmq@6z@7*Y=_2G31R`BIPnV0kq;#BdaJYK|Hb=pAGGn%M0&gOar}(p_w~@M;?+Fz z8Af;znlA}-Q5Z;1^5n`Ek4FdnNi_u3YYgRc+f$`&Typ3T@V=|H@squge!ic^#D0EuJf3RXmE-N-Nq9sGqdGr2e+Q?# z%z!Hwg=D$S3|(Md1V0$}vU%sTSp#bWN$k7k*q^IUO7-1)*ru4{rrLkxMQpVD;>XXZ z2_yWFV~FuZc_7nnbGg+qT9ahARYoQsqjc(;QAgl%$S%$u7%Bh9B;}1mrm({p!wf`A z{~=!$%fct6ySrbCbbaTLA^ePXYV1^2pHNm;^cyg0Ft-}cM2S7Ph6P}d!DSmu+3kurej>JolfORkb!3Ck z`IGQw@lSs{@i*Z|;sVf(GK_xOPDi%WQ%V8%RHD76v3OYWmQ;`lb=eb)%?9+XO+*2* zV252-9w|w5Dsjo;&ee_Y93`#r2Jv zKd-pwfF+CbG5evERDvHwEp;N)m!I5RnlG0+g1$^tXEYDWkOysK zQ9m2g7L0xI50StBHSk9&hO_Bo8_4OA2!um|TxG_AcLcAW^z?Lx5gC*a8T6A$-6+ih)lE7MNL-o9&TEdrd&e=mdihISMU1O^E-hfs zL2F)s*6e$3_ijAb9Y)m54w~ybKN-)9;U%!XK1FdBN-J!oRZZ%e(YF>F(Cm0s;qpMAu1!Sw#Y_|47L(R|ix&(3F0h3`;tX>cEyjeiim;1j2TgjLcE#s#5$A{()-MPYL8@P&vb$o0(}(PfoTwpEZH$)*of3HmA z5jvshW)l~Rx{s*VJ!H`mOi$p^tJ|^ahVfn%vV{lP704oi%YF5VKqk0VSezF>gp4ZX z)>M6WXHii>K~A2WG<>)}WzZnMPtNh@_`O31 zTZ8G|Xn6jnkb#!q;!Mrl_2w+fdb1f2VBZ;kq zR==H(x0Es1tq6?F%gXY4(`iLTNl9U0N`7vx-|z9Hq{+hY;iaVo1#U^NH=C_iw^L4W zr??&IEUjU(SR5R7%vnc*FpjWP_noQO*k1fEv|qgc_#OF={=OtiF>dfD&)k#%*;&<5 zzh278P*|67CPUbDgMWE5id3ml+12N3vNJ@B$Q*$_+={r(7`$0+BHp4loxB*BQCU{T zNGmTdOPD@=%9N_AapOjf%7{YC=}b<}NSA4K_2kJDCypIEW{mF^22Xg@fUwUG?U~_A z%ZkAgIw7qWo*brJ;N2XC-v!(6fpd(rW550LP2BQ`!kq16?SksV`(nR0z+YJsLqOkN zKN6<9Vz}tr+xzXK94q3m3_Jz-##IbI5T|}8j=m39H^*7*EYbf{AH^NR*-UaL-j;U{ zX(Wru?*sCrs;WR>)Tl}ok95(Z1q<%EXYSlP@0>AX`t-q*CrlVScJ%0xBN<-|8#Z`| zEG%B!*f@Xwym_-`&73)PYL3QWNJy~RT&@&|6`wCBTOOP+ zmw4>)yKc%q1Mi9*58$g9o(KMZKi*?>a3lV|n+^(k>EI@N{VC#9FGbvBZ|}uFsN^7L zCV>}_So6jFSCZ3ZerZea=pxZpB@ksE0LQk5*8q$;5`i%!Bq6-fCn0Hbdzv3 zqE`wTV1z#kSFx0p<%MsW8V)JD+2mdeg<$_eyVfAn!YYJ(WLzK%MRdkN8sG;W zIQG8j`Tc(=bE)J}xj9FWmw(?N!t=MXUFQ?RZ}ke{6%D8O=WOKx*YX{jMy6b(8# zsl42bk((1`gV|u#IxNVn4H~2snzala`Al8ieDutY)Fge+@I_yFW{!Y`8U3=?OjL?T z6EC~JYf>4y59;>+pkH$P+eSXmjO{m{sItqspWgb1zRdS|<-jk5BDw_jP&#}LiTfOr zSwX7m!@$nQ1pwl(55*_L z$y=qB-6gCTK&Mvz8K$`D`wrXA`{nB%(7SO|(U;ft!ZZF4kZp zSQ!n#u+R(h>%m3{wXlE-`Y)}Qs>5T2!{G&yU95UR`iF80A}5_Jin8qb>pHy(NAc@^ zaGcD1x+^;{XOugD(l1o-0jN&vqincTe`zsOF4{&w|d4gwXue^!(N*p3y)P)z4QGwii z@6cgJ)1Y);UShV{keqDDbf(Epgm#>oV4-A?C4fR=ReY=(n}4yo8)mU)X^_Tb3o?^z z(eyq`q2yLd455AV#_x$|G&X?yV($0k)3?cJ?N zcicH~%0H%UNKGqNI%rY#hqEO5$84<5e6_<$)0Dqh-+1blsR_!6q-pPOr5EU?#0Aw@ ztr?lsF#X|M%*tw(Qzu8Hsd(Qq%W5QOrDm2zH0ca#4iS_Cuu+6CdDaz!l%^_6k19*) zj-#T#U71Z^ZKpq1?quymbM+!I9b_2R!l9IpJBE^Jj^R9Zk}<6$`m9m|D)Ek&t076NA?je&AuJn!H6a4kUDP~6fm%8oUvX!5=j@%#ODMUt|@3nJOQnn7O=VnxE{@> zlxDqEHtCy9yo!ZQ&d%5Pu%v8xc`1rhVkuizTh{c*qs0xk-`-H%bYj`Pr3Mn}jPhLhmh$GpTjWAVFx?}k?@2=*KdqUq z@!`R;{QT69xqtcbO-QA;+?cKOp-FTg+4Q?^f3mvz$-D1xUdJ_WCiN0ldQ$E!NR)=vqTwEQM8CYT0Yw>p#2%@2lXYr7WMzSKt=CX13ou z^RcI&`r)*D-R8CTuYG;)Z+`poZ0G!t@>k`*He7w<**m9Ad2Qwt%^t`thS(7D2seTEX)a~*9KXO9Y%}3TtUTW1jvWC-KE_PAY`{APJFReYaaOdNJTmJa#SKt3^a@G8%Nt39d_~?@Jk%J4B z|8dM)P`RXP<(9cWUH13~L*_j{?Z_uTdnPbp#p3Z>W-A?SN0dK*pnSdeE?VyPudN<2 zrx27(zv-IRa<?ahGFnT45TNUFEnJp>RvR!}-tZn%BmJrcZzG=X41OW9;OjJY1Om>h+?jU+q6Et*^#6{kQj&i}&0|m(t0%t_zKS z@c<)^JEoKdZ$okT>k;9u75vge`)_~ofbt=`RCeDOc1ihdyYkQH>S;sZ-468|loN3? zYmeJCkbxRhVyg<46A;(Vr8aTb^$8sv(6ixI-PQ0|&{CudPaVZmtf~by3t4{DjXQK@ zBB6}-P|d<@GrU{KhGi9TRfKF&`*4VDW_zgcgl)}OC$4});?;+dst)PnSXJR>rAIAU zdHW{CEtI07MLDOtdQ~sI7++f0SCCP+Ftc%9Ulk%2Fro|*vj|2jFJM`)S+I&vyv7B} zkk10Ex=O*|8q9)5>m4G&4rx||2o;eN9lG?ZXV}In7Lad&1t}~AL^8=fZqx1S-a|m2 z-%je~OlF~5n7p)@6A~r85i9GAGOKLc3}aHmx-3Ph2mbMee++nRxd$tCea-2 zM)e9g4RK^dZro8gyz86G*q7R*Pf6QTl% zHoPK4B2=}B7;nWnFx+m3YYJ(@3)59ch8yWv7jhFbUW}UV4jbbi@i)xb>AtUI@9uZs zYrFVn>K}etvvcQf-f3&AnKN<9?%f;2Au;dgtg<8-X8NliB=?%~pJl<6f2G3)Q~uM) zALwJ21=C=@EB~gf%6{SDTj03_$Pw`FnbqLlF3cA z%2T!Ed#!m!x+2W^qmew-s25Jh?D}5YUbXKLXFY;Cfs@Rd2&AVaB{>|H6qn0l!>ge5 ziRNZOtLD%w(Joc-tcqxK!YWL8-+tKHY@t-_m-}NdflJHTSYp58E{rKBGD|)>GBRt9 zIyAb&39m!_j`|*uDDXhkZ|;Xs%0{bx^UTE&@fgPJC(njiURor()r>V}qgFlm$xp7# z!WI1Xu*zcOHc%ge+y*>JmS<(z?*4a($Zgl)PQ+(=t6aXrx@Rsnv+h+NlKGKQ^B#4% z1F5!w53+$+K}f?wGr8t z2(MSF*W)cZMiU%ReKYdiiM)UVA|Hk=w-p@BCFhl?!^?Alh4Nf2D?jbH{Iwx`_KR=3 z4XGzJ$-L;aGb6dZ)!y3f^rE-kI@|v@y>&mQnR@n%>#s`k&3fyryR{+TeM=yV#k^7y zj81EkR+nsX=nayK*km`U$BYdUUub}Jr4VVUux3k`{byx6AijPxg>z#NR7Q?ebX;rK z6`cLz>c43xpX3F&pYZP;k)?EM@60wAy5Y z!`hsPdMCZkED5|gI)R{!StQM3taykQlJapmGyr|J2Do6up+1c(+t;M5x!S3{K#!ns zcB!xfg~9FLcy;)nK$Owf+|sDe+ryp8cDu5zQ((oj5o>3s!XqEC8VkgMcuj?bP@!lf zK)!=vA5wsqI6zs_n-*7GfA1%nudW?MaYgqKP1#Sb7itSpTp|7S#^MT<3e;NRtbhwv z1!8+z{P#?12*@Cy4xFQbxu(qgrieF{^AFZiPYXXP0JRcW_SSX0=zCfD&$VJEuR&A7tY9l|{9iE^{1X$t+VTS~WBziSVAR|nu5KA_}F3=ma zts1;o4@LFx?MX9ZJnsKOSHLh=Ne}O*WZtw5TO=SY0?ETTV4HCCwEgs1W%mhXw-TnS zKULb|VBli!OtQI%Y<1c7oV@FeI+-Sz1<7J;wj+()$I<8~+F6XN0TCbLYxLa9*;jw3 zq|q(<1y?U1khX??rK^nNIpspSby$ z3X&FVD4_&i#Cr!c2~1gH1ni@t1^DKeaMA4OFY3FaQ3>(6*dA@8C3afUsZ^g(sypNM z(R(jv>4=SaK{|_7)*^K-nDJUVqghUnG>Hj3By$sH+FbnYyl@ z3Ab?K+rg=zm-zY-VjO4dVw|lrqh?5NmIbi3XitBtkC~1J-`I>&Z=n!xWN3N6RwWAwF*vTgL1o*G;Cxp*n-e3k%MU~ zUZ)96#we#R6lu-~iwcCnH7wp@HauO3R12L{jfC2OCTXn(&!R15!24R>qKpG63ITs1>v*&Wj zg-Ri})6y)$H4r3Ya{|F@Rh*LSyveAr?qa}*Ko-eDYxvQt|J`paI*0g3Y<0xIVPLTY zlZ@DOWx$_Do4t9m*AawutFbj(5;a;z zzvkv-(1%O&sK6pcVv&7HCIsIm# zeMSG=l|{;jaa9qtL;N_h_3*$s9ai3muYJJ$W`Wi}=d}Jp_cxdy>c3be+?BmI@W2aK zsyGjz0*u`keyiuQ@N}Q|AnCLkiP`cj&>CmUbL$;amNfaJcz<-%HuDEuMuQ%)TR;v0T-A3{gEyS7c(W{q1MiPZ`B@zuS4L^N zx-%s=i|L4KPVgR1+m%%!R@_Vf>{8Cr+TQlLubG%&wn$u|z}@7&rcRV@=4wtk2c#-z9@#G!6jy5tSn`81CaR6vN5znLdWk*C%I&2k}Zf4>I|~c#Fp`G4w{8xS%bunz~4H_X^JU*Mq9|`Me`lp zQ(|I=f#~~F9(bn&G9Kc`aF?!657~%I$yM;96oI);bkv6QUvpQfRCwS7 z-F8|zZ&xH5>hqZXVtHfxsHtXUB=f51KVsffWFcIq1O@-+mV+Jec6Lt$6rod|{?LPmDH!_eW99ro|^8cTaQivt8--{C#p z2$KQ+<5BKE7M1+;Ck!AG1BgcYE*G*}nVDRDIO;+U5jIBQ68Rtc>pr-gi@dMGqShbt zBsu@7{+*ww{3nuUnMcGqQ1vlyq@HJ^9N0x9;b_z{8X8Dp?+G><4Xx^01pz?^QQOQG zeyXMs3p>F+=Wq05)7P*Me#2cLr6T>yIku^GJq z2~PI1K5CLA*xU&)3F=vmIt$w$hiYKaP^xn!F=>{>^&Qi8*Pj03tRZ~)>kg*xP8w3h zYUbA@XIvBt)(Jx{dY#C;2$#B|{uJIUhH7)42s=+QxZzEiT*)a;Gu5ZLo2_ZEhL~X; z?Uh+SOeLu%U(5>Y>$*G_^MoCc?Nhz1ZzXjMCh6oigc{AQSeZ@!xwOyYO3qNt`%bUZ z>4mw!V~2eQ?4oUCK57CA;BEZB9a|E&7S*v`JE)FLJL}}t&{=)**)OhqrYVSgwk~q& zVg?GQdZEP!)(Q}+I#R`t3svrew9t(jBgCaypb3&oYPN%0pf{bCdSrE z*xj>+>xlr_3!nRJ%%U|yMVJr-vw%Jmv9cyXgSR8;5pOc^{B^H2%S<{DlPbGhv1K;l z064Ko_@ojEvMS*)OOPGzRF2t|W1aMH-#)WtW44nH+8Jv{MHtUQGQu<#N?@)f;f=v4 zMb{cwINjFO&NWI){RmS<0BnB>e7Hm z1osG57zcKV8Vy9_(3_J}WQ4-;YJmFWUR-gWQUMVilja8Q>K#dhG*-ZAbEP$0aN&mYWNrUDgxEY-3zO*613&5l#s%bi%oKIex;c1^U5Bd zoQ|Acy6nl2J-t~``2O6eA?j<`bcsSN|ESfm*8}x~D7;71eBOAs{Zy7&k?yV#5DD@4UF-g2TxNSm8nmfhe z$rzMwu_RjPKs;b2tSf$%RAZqC&Z706aKIDBcr*<+CWL&SbENhfDna_rfS1 zUUB=w#ZdBujOlg7{tyNljp~w`^MZ*k!Z-PjIZ3N8dX4wvlzW+%ltl zO5?3#m(7{IY;5_ovNE?Y%i&5Ni{|Qr4(!81fJCwZ{>FF66_!^Yq$@HeB zm{}YPD}E&>uVUez6P!B)`q={R%|R1_&v+dNoD62jL?ak@+XhRqGwK&7v$u1+(Y=}} zW2CiEnL}IY)f03_Co@9sV%myXTxi`vMh3EtHXVvk^s;>mR0e9F%o?i&uRe)JOH92L zGu&oK8i60?-o#hU#CoQsN2G^%^-M`*%ZZn}$8h^7MY!dJ#;zpC0?FI1x8Z*#u*SwS zLArqXCeuS$m$?Wltg&J|MUqo24kO;*BNIz=29Yz=cnyk$d3Y#}C|I_h)#pcfqr4o; zaKc;T)>NP9TWu}n2zU3cs_t89jS8sPs+CIA=++>Qo24IzA_o1W8o79o?9Z2Tr%dw~ zYbqx>f{CMHXjQu9N}h;^K4pm(kS$A6v;1^#ese%}I*yPB40-ryA@+JImaDe2*6!ocXb?Cc5lB@hFbYYr|#=bYbz&NvOAHQGbW$KyYeGd<9uF3!@srIhmK6j-KwHvOOrMF7%?Qht9>Yvc3@Be(F97hWu$9k{Jw z!{$w_x_emhk_5J6*2-ue~pUtE%eyKIdFOW)P4Wydd*D7ci1P#p zD5yY)vni08nwcq@ni-inWo2e&&YGGzh31r*np0+0XbJ*|tnITW>17e$5^MYikK zvtzu8YT%$kVc@fSiN}4z9i`uC{G87U{5xP>r|EZ~{`uc@CXd_du1OgqqWBz{)IYwJ zwttV_{!xxm`cp!5X6x4d6WR}G)3zx6U+HfO<1TJqUb;y%pvKbGl}`pd)_baHlF)Ml z>=cC1H#WGF$PBxB_@2?2zN@q?qy1$Iz1y-7^7)g=?9L+WA$qmAYBc%rlO=XnE{I7O zww+Yx@I{U|=g-yB<3Fz8rbyF2F5oVeRAai+$V&*tFU)ttz3jt`5y~Y%^?PXtP*TT!i%f`XJ$i|`2-v+(uUl`vkw8(|sgGB2<1V4Pc z&30&b7GG)b>8SBNM`}NR+%dK&g{!?Zu(;r?rfqvoK)xKlZR$KXZ9JwY85W= zQY{~}j@{|RDNlUmo1u)l%O?%*d>TIR&puP7^Sxh8;derbm+3Yr<#s6g|HL$FY6`y{ zD!;$9V#3oU{H`cYdg|S~BfmLH`H%Z=`Wa0)5t!MzwGiVx6=$N687N!>I_LUuI@gDv zbA9+Z*N2~TefT-oho5sD__>+j;EdZhnJlgkKeuGM@pCK3YtDyc9a=cP@0J}To?X+yZKu8hu4}8iu1`n~jH6NLS(>1{;lqEItC7+MX;linTrf z{DG)N{+7%54Wn}%8f*5i+O{5@`mh+IP7Q02SCYR|tCW##s0F-DhV*I;9K{EyCA=-v zPvrYNW)MDaYaS@$S<6dMi~Q!N* zgfjGZI8ZwQJy0IErQqXnf_j{f_oltUEt3b!Qj2-K%|X4U`sj~MCBl$D^B6Q1t)TvH z*xt?zH5I*=i!$;@@)^>b^eJQgK{n-MpDa(h)<>zPHW<$8j$nvNqzq?Kr{TO74v%j* zD}{o>=ZSD=Lw%SFn^8+>jF7j5!+KpXi*yvy(Ni5^N#6Sztdt_#7^XXKBiEJug4)F+ z9nBInTDb3!FBGs+vJ#J96kTX89F96v&ijSxP{igjl;&pg4bre2+~jGBx6!Dfc9hD# ztUqtn`%*6^tsGuTvh*d@$5U!GMKB)c6-?4;G;5QhVSQxbWn{xbw2RjxbUthFIFrjp zDwn9l4T{2iB{3R$@!HD#rSOpdG%e*?@!3_epfa2MeQRl^%*9-s&mx~(qw$i`c2M9%p!X%F(8qHdK+>stUwiZJo z`O+BXDdYhZIVb|qC@7ZsxrFYh)zGpH*H9dz;kYF~8--dFvB>+lUes3wvgb#zmjC-Q z|MfnrU$yX(SGD7O-7Cth0bmj9y4lG&1*2VSwyuT=xbAO;HORFG7Ywk%r znlzjPC^ly?f8*;oifH5m+(P65`l}GqRo_4P%7LuKtrLp>6!plfNM^n;f$3C$T4ZJJ zArx83ONw!=OkgB2Q@n*MjD38WYN_qO^)MqT0Oev@YU#(wF8UYF9%!4ed-e z;4>}x4|xf#>bajZT;KB8S|*R3NI7cI8s(ox=f5*fl(mau_e|)dtarI~^^qwZZ6NCg zfP>beG`4u3lV!+`e627Hts_4j4=d6cc?o%3{o20i4A^kaQ(}pt6^)uQd`LH%`+0=r z>(dU*M{L2KOY+$qw#8%ET^orx#t;L^H3jiZzSJVJcMfUQOT{N zcm{EDTPiboBiD;YDP8}Ufsgu!N+@d3 z82Kk}=cp4{6r{DRVqJ=~BY{DyYaaJ$4Z`Ci{U=|d9wFc4(VwqZ4cp^iwKI>7^->I5 znpUVv{84xdp~=5Hdbr<2H}ISK@oH%OMt#z7hUYzDXyrr}=24RNC#a8wR&ag&5pJ=*_S=Mke?OyFYm88k2Sg(^;+?_|t(! zecVy#$7FN_8lm=pJi_h{DqUBROyZ*&9YE=gJe_w2Em@YAj#|_P;_r@>C2N`mdcD+! zS`jjrN1Am^z;-qIzUG(zHEN29BBFq^rQ*(1LPA?T!B# z;G?TTt_RtVv`q(ZIxsTX|IR2U4R}v*TXg_e24oXQXXus1v>-{;I^ra)vQXY07NPni zwHu>y&B!Ly%cM&^3eAoro9jXL?<3=p4^aEl@F8UGAx-t5*|rCGNGf3`<3G1OSuKs_ z>aD|joO-T3=gVWD9ak?%iZng_qlqTF*pCoo+c*=O- z=)4aVeaL6Ymz0rEZxtG4$|&T1r1WENR#!o#dJXMMJx-%V z;Zy4UU4-B^Qe+c$ecQ=9$d+6~>SbgRoBweWm5+)6OV^^Q5>!}A?+xTi$Tj{`qb>?E*jFEmwBl|ND2#`7;H0kl?RR zanC-U{X%N^C*tV_Gr=71l(j*D$UcnEi=I?);LKhHnkuhc6SJV1sWTr~iOr;%Dz9E3 z^^inSYooC;G0UErD(0(<@akeg^MZ+au!(3SR>ex9QOz(-jwVEp;=aigkkHx6A_ZC&!_?Sy_u_qX@{;j8NhKl=Q3 zO_c>SH2PIjr8-lil0-?ekEDnDHy#<~w{`od2hUiP+4(S!RCT=#t_*t*6GFDCYJpx)%;BD;ZN# zP_FJ!QdU}0mQ!Ac8UY$VDp%RJ)GyD=SNAF$UJO)qMu+xlJY%lWcsf~W<25mwXl-m{ zOjOJOC#whzvXOFDQ~rNMKUsg(GxXO~iQf8#LWioVM7$NMN;H?ML{ZqeA^d|*Sq?9C z4XaplW|_yd@*D4mZ*zL*$mFRzPhR|a^Y;aQ2hAszzWeKx?|WVm$1Fd6`oz?U(?6KB zHzHTv=X&7xx89mxA#}LacB22rpFC}?o#uahcHk>F-~Tx`v|ZP=WqrTtWFDR6YIJu_ zZt?nGzNsttto_-9MGkR3yQ2zgHl0uZZAIAX#D!DFe;?u3qr}3f<=x#jcax6nK5*j1 z#IH(P7xx*trr7P(kRBf{={ea()J*L2W9koyE9_LCbq!Iq_$=0X`<|+hR$a{8UJfh! zV|~8O8z*}E{q|#8S#9*h;L}%neJ(6=y_Z&Trm)AQH`ng07GEE)zBt{!pTo3PAJ=4c z>pV3iZ1s7sMUo1G0Ph#RuMOT+o0(~3@wd%Xu4~<)pV)pJhS77^77Jz@bF<}qryfjejGNeWOR7x$U>rq zmzI^}jU84#CLCIID9MBO!f}U^tr)$zQU6s5>n%PzsF@F4b zLn6?szr!xq;8%Bhd)SNOUq+Hf(056UUAUwu91EQN(xLt*+KihUwW@~zvT9(YFqeLEIcsr*2uRn{&=e} zbaqH#?EeQCgeW7_1f{D7W|Ta zXs-E`&$kDUelfa3@{G@q=Z}5s_r#Znckub@&j;1R?xY{SHR1iMDKFUf9-Vvp;Hf>i zXCv2^y%qe$%U1KZLN zl}Rb0UOyi3%yTR=(^$AxH8Pf_a@PNmNP=iZ-l(zZ`_p89k+cGzhLt!&qt5)tFAeneC^Ma<)%0D7akAkJ$?6!rdPv) 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/correct.svg b/frontend/src/assets/correct.svg new file mode 100644 index 0000000..f362d4b --- /dev/null +++ b/frontend/src/assets/correct.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/greenhiddenEye.svg b/frontend/src/assets/greenhiddenEye.svg new file mode 100644 index 0000000..e4b3702 --- /dev/null +++ b/frontend/src/assets/greenhiddenEye.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/src/assets/greenopenEye.svg b/frontend/src/assets/greenopenEye.svg new file mode 100644 index 0000000..72b4863 --- /dev/null +++ b/frontend/src/assets/greenopenEye.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/frontend/src/assets/lock.svg b/frontend/src/assets/lock.svg new file mode 100644 index 0000000..6693d21 --- /dev/null +++ b/frontend/src/assets/lock.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/redhiddenEye.svg b/frontend/src/assets/redhiddenEye.svg new file mode 100644 index 0000000..05f2aee --- /dev/null +++ b/frontend/src/assets/redhiddenEye.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/src/assets/redopenEye.svg b/frontend/src/assets/redopenEye.svg new file mode 100644 index 0000000..e3c42c0 --- /dev/null +++ b/frontend/src/assets/redopenEye.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/frontend/src/assets/wrong.svg b/frontend/src/assets/wrong.svg new file mode 100644 index 0000000..f917ecb --- /dev/null +++ b/frontend/src/assets/wrong.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js new file mode 100644 index 0000000..a357f8b --- /dev/null +++ b/frontend/src/components/EditorWindow.js @@ -0,0 +1,20 @@ +import TextEditor from "./textEditor"; +import TestCase from "./TestCase"; +import { useState } from "react"; +function EditorWindow(props) { + const [runTestCases, setRunTestCases] = useState(false); + + return ( +
+ + +
+ ); +} +export default EditorWindow; diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index 10d37a2..d762039 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -8,11 +8,11 @@ const Navbar = () => {
- Cook-Off 8.0 + Cook-Off 8.0
diff --git a/frontend/src/components/TestCase.js b/frontend/src/components/TestCase.js new file mode 100644 index 0000000..ee4e072 --- /dev/null +++ b/frontend/src/components/TestCase.js @@ -0,0 +1,123 @@ +import Image from "next/image"; +import correct from "../assets/correct.svg"; +import wrong from "../assets/wrong.svg"; +import redopenEye from "../assets/redopenEye.svg"; +import redhiddenEye from "../assets/redhiddenEye.svg"; +import greenopenEye from "../assets/greenopenEye.svg"; +import greenhiddenEye from "../assets/greenhiddenEye.svg"; +import lock from "../assets/lock.svg"; +import { testcasesdata } from "../../Dummy_Data"; + +const TestCase = ({ clickedButton, runTestCases }) => { + const totalTestCases = testcasesdata[clickedButton].testcases.length; + + const failedTestCases = testcasesdata[clickedButton].testcases.filter( + (testcase) => testcase.status === "fail" + ).length; + + const totalVisibleCases = testcasesdata[clickedButton].testcases.filter( + (testcase) => testcase.hidden === false + ).length; + + const totalHiddenCases = testcasesdata[clickedButton].testcases.filter( + (testcase) => testcase.hidden === true + ).length; + + return ( + <> + {runTestCases && ( +
+
+ {failedTestCases / totalTestCases === 0 ? ( +
+ All Test Cases Passed ! +
+ ) : ( +
+
+ {failedTestCases}/{totalTestCases} Testcases Have Failed !! +
+
Try Again!!!
+
+ )} + +
+ +
+
+
+
+
+ {testcasesdata[clickedButton].testcases.map( + (testcase, index) => ( +
+ {testcase.hidden ? ( + testcase.status === "fail" ? ( + + ) : ( + + ) + ) : testcase.status === "fail" ? ( + + ) : ( + + )} +
+ ) + )} +
+
+
+
+
+ Compile Message +
+
+ hello world +
+
+
+
+ +
+
+ Hidden Test Case +
+
+
+
+
+ )} + + ); +}; +export default TestCase; diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index 1bb5086..b5e2032 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -1,7 +1,7 @@ import Question from "@/components/questions"; import { useState } from "react"; import questionData from "../../Dummy_Data"; -import TextEditor from "./textEditor"; +import EditorWindow from "./EditorWindow"; export default function Portal() { const length = questionData.length; @@ -10,13 +10,14 @@ export default function Portal() { setClickedButton(index); } return ( -
-
+
+
{questionData.map((question, index) => (
); } diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index 6ec37c8..8dca4fb 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -19,15 +19,23 @@ function Question(props) { } = props; return ( -
-
-
+
+
+

{objective}

-
+
{points}
-
Problem
+
+ Problem +
{task}
diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 9335490..e45dc41 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -1,7 +1,7 @@ import React, { useState, useRef, useEffect } from "react"; import { Editor } from "@monaco-editor/react"; -const TextEditor = ({ questionId }) => { +const TextEditor = ({ questionId, setRunTestCases }) => { const files = { "script.py": { name: "Python", @@ -61,9 +61,12 @@ const TextEditor = ({ questionId }) => { // alert(`Code for question ${questionId} stored in local storage.`); }; - + const handleClick = () => { + getEditorValue(); + setRunTestCases(true); + }; return ( -
+
@@ -151,13 +154,13 @@ const TextEditor = ({ questionId }) => {
diff --git a/frontend/src/pages/home.js b/frontend/src/pages/home.js index d90168e..634ea4e 100644 --- a/frontend/src/pages/home.js +++ b/frontend/src/pages/home.js @@ -19,55 +19,112 @@ function App() { }, 300); }; - const variants = { - is: { opacity: 0, y: "-100%" }, - isNot: { opacity: 1, y: 0 }, + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + + const handleUsernameChange = (event) => { + setUsername(event.target.value); + }; + + const handlePasswordChange = (event) => { + setPassword(event.target.value); + }; + + const handleSubmit = (event) => { + event.preventDefault(); + console.log("Username:", username); + console.log("Password:", password); }; return (
{isClicked ? ( - - + - hoverCook { - setIsHovered(true); - }} - onMouseLeave={() => { - setIsHovered(false); + + transition={{ type: "tween", ease: "backOut", duration: 0.4 }} + > + hoverCook { + setIsHovered(true); + }} + onMouseLeave={() => { + setIsHovered(false); + }} + /> + +
+ cookoff +
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+
-
- cookoff -
-
+ ) : (
- logo + logo
); } diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index 6ec37c8..8d57a00 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -19,7 +19,7 @@ function Question(props) { } = props; return ( -
+

{objective}

diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 6665fad..5ce6dbb 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -1,7 +1,9 @@ import React, { useState } from "react"; import { Editor } from "@monaco-editor/react"; +import CompilationError from "./compError"; -const TextEditor = () => { +function TextEditor(props){ + const {error, message, exitStatus} = props; const files = { "script.py": { name: "Python", @@ -36,7 +38,7 @@ const TextEditor = () => { setSelectedOption(option); }; return ( -
+
@@ -128,6 +130,14 @@ const TextEditor = () => { Submit code
+
+ {error && ( + + )} +
); }; diff --git a/frontend/src/pages/home.module.css b/frontend/src/pages/home.module.css index 60f1e09..3eebe8f 100644 --- a/frontend/src/pages/home.module.css +++ b/frontend/src/pages/home.module.css @@ -20,8 +20,10 @@ align-items: center; justify-content: center; position: absolute; + -webkit-mask-image: url(../assets/circle.svg); mask-image: url(../assets/circle.svg); background: #EB5939; + -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; color: black; From dfe536d8266c442d5668140c042101b7e8058077 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Sat, 26 Aug 2023 14:51:25 +0530 Subject: [PATCH 12/88] Changed input box properties --- frontend/src/components/textEditor.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index e45dc41..34454da 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -67,20 +67,20 @@ const TextEditor = ({ questionId, setRunTestCases }) => { }; return (
-
-
+
+
-
+
@@ -112,7 +112,7 @@ const TextEditor = ({ questionId, setRunTestCases }) => { /> {showMore && (
diff --git a/frontend/src/pages/home.js b/frontend/src/pages/home.js index 5337950..e246e63 100644 --- a/frontend/src/pages/home.js +++ b/frontend/src/pages/home.js @@ -19,99 +19,39 @@ function App() { }, 300); }; - const [username, setUsername] = useState(""); - const [password, setPassword] = useState(""); - - const handleUsernameChange = (event) => { - setUsername(event.target.value); - }; - - const handlePasswordChange = (event) => { - setPassword(event.target.value); - }; - - const handleSubmit = (event) => { - event.preventDefault(); - console.log("Username:", username); - console.log("Password:", password); - }; - return (
{isClicked ? ( - <> - - - hoverCook { - setIsHovered(true); - }} - onMouseLeave={() => { - setIsHovered(false); - }} - /> - -
- cookoff -
-
+ -
-
-
- -
-
- -
-
- -
-
-
+ hoverCook { + setIsHovered(true); + }} + onMouseLeave={() => { + setIsHovered(false); + }} + />
- +
+ cookoff +
+
) : ( { + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + + const handleUsernameChange = (event) => { + setUsername(event.target.value); + }; + + const handlePasswordChange = (event) => { + setPassword(event.target.value); + }; + + const handleSubmit = (event) => { + event.preventDefault(); + console.log("Username:", username); + console.log("Password:", password); + }; + + return ( +
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+ ); +}; +export default login; From e10d1bf8ae5de2f53cd8bdcc9bd2493500d1e15b Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Sun, 27 Aug 2023 02:53:44 +0530 Subject: [PATCH 16/88] Fix: Debug the testcases component --- frontend/Dummy_Data.js | 2 +- frontend/src/components/TestCase.js | 121 ++++++++++++++----------- frontend/src/components/submissions.js | 81 +++++++++++++++++ 3 files changed, 150 insertions(+), 54 deletions(-) create mode 100644 frontend/src/components/submissions.js diff --git a/frontend/Dummy_Data.js b/frontend/Dummy_Data.js index a7be338..14f9c3f 100644 --- a/frontend/Dummy_Data.js +++ b/frontend/Dummy_Data.js @@ -139,7 +139,7 @@ Solution.cpp:18:1: error: no return statement in function returning non-void ^ cc1plus: some warnings being treated as errors`, -exitStatus: "1"},{error: false},{error: true, +exitStatus: "1"},{error: false},{error: false, compileMessage: `Solution.cpp: In function 'int simpleArraySum (std::vector { const [testCaseIndex, setTestCaseIndex] = useState(0); - const [testCaseClicked, SetTestCaseClicked] = useState(0); + const [testCaseClicked, setTestCaseClicked] = useState(0); const totalTestCases = testcasesdata[clickedButton].testcases.length; @@ -27,9 +28,15 @@ const TestCase = ({ clickedButton }) => { (testcase) => testcase.hidden === true ).length; + useEffect(() => { + // Reset testCaseClicked with a minimal delay + setTestCaseClicked(0); + setTestCaseIndex(0); + // Clean up the timer if component unmounts + }, [clickedButton]); + return ( <> -
{failedTestCases / totalTestCases === 0 ? ( @@ -62,7 +69,7 @@ const TestCase = ({ clickedButton }) => { className="flex items-center px-[30px] py-4 text-[20px] font-bold w-full hover:bg-[#161616]" onClick={() => { setTestCaseIndex(index); - SetTestCaseClicked(index); + setTestCaseClicked(index); }} style={{ background: testCaseClicked === index && "#161616", @@ -83,7 +90,7 @@ const TestCase = ({ clickedButton }) => { className="flex items-center px-[30px] py-4 text-[20px] font-bold w-full hover:bg-[#161616]" onClick={() => { setTestCaseIndex(index); - SetTestCaseClicked(index); + setTestCaseClicked(index); }} style={{ background: testCaseClicked === index && "#161616", @@ -105,7 +112,7 @@ const TestCase = ({ clickedButton }) => { className="flex items-center px-[30px] py-4 text-[20px] font-bold w-full hover:bg-[#161616]" onClick={() => { setTestCaseIndex(index); - SetTestCaseClicked(index); + setTestCaseClicked(index); }} style={{ background: testCaseClicked === index && "#161616", @@ -126,7 +133,7 @@ const TestCase = ({ clickedButton }) => { className="flex items-center px-[30px] py-4 text-[20px] font-bold w-full hover:bg-[#161616]" onClick={() => { setTestCaseIndex(index); - SetTestCaseClicked(index); + setTestCaseClicked(index); }} style={{ background: testCaseClicked === index && "#161616", @@ -147,64 +154,72 @@ const TestCase = ({ clickedButton }) => { ))}
-
-
-
- Compile Message -
-
- { - testcasesdata[clickedButton].testcases[testCaseIndex] - .compileMessage - } -
-
- {testcasesdata[clickedButton].testcases[testCaseIndex].hidden && ( -
-
- locked + {testcasesdata[clickedButton].testcases[testCaseIndex] + ?.compileMessage === undefined ? ( +
Loadinng...
+ ) : ( +
+
+
+ Compile Message
-
- Hidden Test Case +
+ { + testcasesdata[clickedButton].testcases[testCaseIndex] + .compileMessage + }
- )} - {!testcasesdata[clickedButton].testcases[testCaseIndex].hidden && ( -
-
-
- Input + {testcasesdata[clickedButton].testcases[testCaseIndex].hidden && ( +
+
+ locked
-
- { - testcasesdata[clickedButton].testcases[testCaseIndex] - .input - } +
+ Hidden Test Case
-
-
- Output + )} + {!testcasesdata[clickedButton].testcases[testCaseIndex] + .hidden && ( +
+
+
+ Input +
+
+ { + testcasesdata[clickedButton].testcases[testCaseIndex] + .input + } +
-
- { - testcasesdata[clickedButton].testcases[testCaseIndex] - .output - } +
+
+ Output +
+
+ { + testcasesdata[clickedButton].testcases[testCaseIndex] + .output + } +
-
- )} -
+ )} +
+ )}
- ); }; diff --git a/frontend/src/components/submissions.js b/frontend/src/components/submissions.js new file mode 100644 index 0000000..0665ee4 --- /dev/null +++ b/frontend/src/components/submissions.js @@ -0,0 +1,81 @@ +import { testcasesdata } from "../../Dummy_Data"; +import { useState, useEffect } from "react"; + +function SubmitCode(props) { + const { clickedButton } = props; + const [testCaseClicked, setTestCaseClicked] = useState(0); + + useEffect(() => { + // Reset testCaseClicked with a minimal delay + setTestCaseClicked(0); + // Clean up the timer if component unmounts + }, [clickedButton]); + return ( + <> +
+
+
+

+ Accepted ! +

+

Runtime: 0ms

+
+
+ {testcasesdata[clickedButton].testcases.map((item, index) => ( + + ))} +
+ {testcasesdata[clickedButton].testcases[testCaseClicked] + ?.compileMessage === undefined ? ( +
Loading...
+ ) : ( +
+
+

Input

+
+ { + testcasesdata[clickedButton].testcases[testCaseClicked] + .input + } +
+
+
+

Output

+
+ { + testcasesdata[clickedButton].testcases[testCaseClicked] + .output + } +
+
+
+

+ Expected Output +

+
+ { + testcasesdata[clickedButton].testcases[testCaseClicked] + .expectedOutput + } +
+
+
+ )} +
+
+ + ); +} + +export default SubmitCode; From 1601d6079ef610e6e9fd93784f606aa80a28dbd6 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Sun, 27 Aug 2023 04:00:54 +0530 Subject: [PATCH 17/88] Fix:Change design of few components, feat:Add functionality to the testCases and Submissions component --- frontend/Dummy_Data.js | 24 +++++++++----- frontend/src/components/EditorWindow.js | 8 +++++ frontend/src/components/Navbar.js | 2 +- frontend/src/components/TestCase.js | 2 +- frontend/src/components/portal.js | 4 +-- frontend/src/components/questions.js | 2 +- frontend/src/components/submissions.js | 13 +++++++- frontend/src/components/textEditor.js | 43 +++++++++++++++++++++---- 8 files changed, 78 insertions(+), 20 deletions(-) diff --git a/frontend/Dummy_Data.js b/frontend/Dummy_Data.js index 14f9c3f..c647b0e 100644 --- a/frontend/Dummy_Data.js +++ b/frontend/Dummy_Data.js @@ -168,21 +168,24 @@ const testcasesdata = [ output: [6], hidden: false, status: "pass", - compileMessage: "hello world" + compileMessage: "hello world", + expectedOutput: [6], }, { input: [1, 3, 4], output: [7], hidden: false, status: "pass", - compileMessage: "hello world 2" + compileMessage: "hello world 2", + expectedOutput: [7], }, { input: [3, 3], output: [6], hidden: true, status: "fail", - compileMessage: "hello world 3" + compileMessage: "hello world 3", + expectedOutput: [7], }, ], }, @@ -195,21 +198,24 @@ const testcasesdata = [ output: "true", hidden: false, status: "pass", - compileMessage: "hello world" + compileMessage: "hello world", + expectedOutput: "true", }, { input: "apple", output: "false", hidden: true, status: "pass", - compileMessage: "hello world 2" + compileMessage: "hello world 2", + expectedOutput: "false", }, { input: "nice", output: "false", hidden: true, status: "pass", - compileMessage: "hello world 3" + compileMessage: "hello world 3", + expectedOutput: "false", }, ], }, @@ -222,14 +228,16 @@ const testcasesdata = [ output: ["1", "2", "Fizz", "Buzz"], hidden: false, status: "pass", - compileMessage: "hello world" + compileMessage: "hello world", + expectedOutput: ["1", "2", "Fizz", "Buzz"], }, { input: 15, output: ["1", "2", "Fizz", "13", "14", "FizzBuzz"], hidden: true, status: "fail", - compileMessage: "hello world" + compileMessage: "hello world", + expectedOutput: ["1", "2", "Fizz", "13", "14"], }, ], }, diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 80818ea..6843009 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -2,15 +2,20 @@ import TextEditor from "./textEditor"; import TestCase from "./TestCase"; import { useState } from "react"; import CompilationError from "./compError"; +import SubmitCode from "./submissions"; function EditorWindow(props) { const [runTestCases, setRunTestCases] = useState(false); const [questionRun, setQuestionRun] = useState(new Set()); + const [questionSubmit, setQuestionSubmit] = useState(new Set()); return (
{!props.error && questionRun.has(props.questionId) && ( @@ -25,6 +30,9 @@ function EditorWindow(props) { />
)} + {!props.error && questionSubmit.has(props.questionId) && ( + + )}
); } diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index dda35c0..26aa25e 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -5,7 +5,7 @@ import profile from "../assets/profile-icon.svg"; const Navbar = () => { return ( <> -
+
From deebc6de1b453b169292d9ffeabf9b08b48cc847 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Sun, 27 Aug 2023 15:36:58 +0530 Subject: [PATCH 18/88] Made Test completion page --- frontend/src/assets/TickIcon.svg | 3 +++ frontend/src/components/textEditor.js | 14 +++++------ frontend/src/pages/Testcomplete.js | 36 +++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 frontend/src/assets/TickIcon.svg create mode 100644 frontend/src/pages/Testcomplete.js diff --git a/frontend/src/assets/TickIcon.svg b/frontend/src/assets/TickIcon.svg new file mode 100644 index 0000000..569fbac --- /dev/null +++ b/frontend/src/assets/TickIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index ecfd01a..70b33ab 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -104,9 +104,9 @@ const TextEditor = ({ if (questionSubmit.has(questionId)) { setQuestionRun((prev) => new Set(prev.add(questionId))); setQuestionSubmit((prev) => { - const newSet = new Set(prev); // Create a new Set to avoid mutating the previous Set - newSet.delete(questionId); // Remove the specified questionId from the new Set - return newSet; // Return the updated Set + const newSet = new Set(prev); + newSet.delete(questionId); + return newSet; }); } else { setQuestionRun((prev) => new Set(prev.add(questionId))); @@ -118,9 +118,9 @@ const TextEditor = ({ if (questionRun.has(questionId)) { setQuestionSubmit((prev) => new Set(prev.add(questionId))); setQuestionRun((prev) => { - const newSet = new Set(prev); // Create a new Set to avoid mutating the previous Set - newSet.delete(questionId); // Remove the specified questionId from the new Set - return newSet; // Return the updated Set + const newSet = new Set(prev); + newSet.delete(questionId); + return newSet; }); } else { setQuestionSubmit((prev) => new Set(prev.add(questionId))); @@ -214,7 +214,7 @@ const TextEditor = ({ path={file.name} defaultLanguage={file.language} defaultValue={file.value} - value={codeValue} // Use the codeValue from state + value={codeValue} onChange={handleEditorChange} />
diff --git a/frontend/src/pages/Testcomplete.js b/frontend/src/pages/Testcomplete.js new file mode 100644 index 0000000..4090350 --- /dev/null +++ b/frontend/src/pages/Testcomplete.js @@ -0,0 +1,36 @@ +import Navbar from "@/components/Navbar"; +import Image from "next/image"; +import tickIcon from "../assets/TickIcon.svg"; + +const TestComplete = () => { + return ( + <> + +
+
+ +
+
+
+
+

You have completed the test. Stay tuned for the Results!

+
+
+
+
+ +
+
+ + ); +}; + +export default TestComplete; From cdbbe5065630b485cd238659e53bcd86ddd52e98 Mon Sep 17 00:00:00 2001 From: Aaditya Mahanta Date: Mon, 28 Aug 2023 00:24:23 +0530 Subject: [PATCH 19/88] fix: build fixes --- frontend/pnpm-lock.yaml | 771 ++++++++++++++++++++++++++++++++ frontend/src/pages/login.js | 4 +- node_modules/.package-lock.json | 6 - package.json | 5 - 4 files changed, 773 insertions(+), 13 deletions(-) delete mode 100644 node_modules/.package-lock.json delete mode 100644 package.json diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 31a303e..88f60b1 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@monaco-editor/react': + specifier: ^4.5.2 + version: 4.5.2(monaco-editor@0.41.0)(react-dom@18.2.0)(react@18.2.0) autoprefixer: specifier: 10.4.15 version: 10.4.15(postcss@8.4.28) @@ -14,6 +17,9 @@ dependencies: eslint-config-next: specifier: 13.4.19 version: 13.4.19(eslint@8.47.0)(typescript@5.1.6) + framer-motion: + specifier: ^10.16.1 + version: 10.16.1(react-dom@18.2.0)(react@18.2.0) next: specifier: 13.4.19 version: 13.4.19(react-dom@18.2.0)(react@18.2.0) @@ -26,6 +32,15 @@ dependencies: react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) + react-markdown: + specifier: ^8.0.7 + version: 8.0.7(@types/react@18.2.21)(react@18.2.0) + react-resizable: + specifier: ^3.0.5 + version: 3.0.5(react-dom@18.2.0)(react@18.2.0) + remark-gfm: + specifier: ^3.0.1 + version: 3.0.1 tailwindcss: specifier: 3.3.3 version: 3.3.3 @@ -49,6 +64,19 @@ packages: regenerator-runtime: 0.14.0 dev: false + /@emotion/is-prop-valid@0.8.8: + resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + requiresBuild: true + dependencies: + '@emotion/memoize': 0.7.4 + dev: false + optional: true + + /@emotion/memoize@0.7.4: + resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + dev: false + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.47.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -136,6 +164,28 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: false + /@monaco-editor/loader@1.3.3(monaco-editor@0.41.0): + resolution: {integrity: sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==} + peerDependencies: + monaco-editor: '>= 0.21.0 < 1' + dependencies: + monaco-editor: 0.41.0 + state-local: 1.0.7 + dev: false + + /@monaco-editor/react@4.5.2(monaco-editor@0.41.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-emcWu6vg1OpXPiYll4aPOaXe8bwYB4UaaNTwtArFLgMoNGBzRZb2Xn0Bra2HMIFM7QLgs7fCGunHO5LkfT2LBA==} + peerDependencies: + monaco-editor: '>= 0.25.0 < 1' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@monaco-editor/loader': 1.3.3(monaco-editor@0.41.0) + monaco-editor: 0.41.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@next/env@13.4.19: resolution: {integrity: sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==} dev: false @@ -258,10 +308,52 @@ packages: tslib: 2.6.2 dev: false + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + dependencies: + '@types/ms': 0.7.31 + dev: false + + /@types/hast@2.3.5: + resolution: {integrity: sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==} + dependencies: + '@types/unist': 2.0.7 + dev: false + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: false + /@types/mdast@3.0.12: + resolution: {integrity: sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==} + dependencies: + '@types/unist': 2.0.7 + dev: false + + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: false + + /@types/prop-types@15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: false + + /@types/react@18.2.21: + resolution: {integrity: sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.2 + dev: false + + /@types/scheduler@0.16.3: + resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + dev: false + + /@types/unist@2.0.7: + resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} + dev: false + /@typescript-eslint/parser@6.4.0(eslint@8.47.0)(typescript@5.1.6): resolution: {integrity: sha512-I1Ah1irl033uxjxO9Xql7+biL3YD7w9IU8zF+xlzD/YxY6a4b7DYA08PXUUCbm2sEljwJF6ERFy2kTGAGcNilg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -504,6 +596,10 @@ packages: dequal: 2.0.3 dev: false + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: false @@ -566,6 +662,10 @@ packages: resolution: {integrity: sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==} dev: false + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: false + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -574,6 +674,10 @@ packages: supports-color: 7.2.0 dev: false + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: false + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -593,6 +697,11 @@ packages: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -604,6 +713,10 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: false + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: false + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -628,6 +741,10 @@ packages: hasBin: true dev: false + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: false + /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: false @@ -655,6 +772,12 @@ packages: ms: 2.1.2 dev: false + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: false @@ -676,6 +799,11 @@ packages: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: false + /diff@5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -815,6 +943,11 @@ packages: engines: {node: '>=10'} dev: false + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: false + /eslint-config-next@13.4.19(eslint@8.47.0)(typescript@5.1.6): resolution: {integrity: sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==} peerDependencies: @@ -1089,6 +1222,10 @@ packages: engines: {node: '>=0.10.0'} dev: false + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: false @@ -1162,6 +1299,24 @@ packages: resolution: {integrity: sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==} dev: false + /framer-motion@10.16.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-K6TXr5mZtitC/dxQCBdg7xzdN0d5IAIrlaqCPKtIQVdzVPGC0qBuJKXggHX1vjnP5gPOFwB1KbCCTWcnFc3kWg==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + optionalDependencies: + '@emotion/is-prop-valid': 0.8.8 + dev: false + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: false @@ -1345,6 +1500,10 @@ packages: function-bind: 1.1.1 dev: false + /hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + dev: false + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} @@ -1374,6 +1533,10 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: false + /inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: false + /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} @@ -1419,6 +1582,11 @@ packages: has-tostringtag: 1.0.0 dev: false + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: false + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -1488,6 +1656,11 @@ packages: engines: {node: '>=8'} dev: false + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: false + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -1603,6 +1776,11 @@ packages: object.values: 1.1.6 dev: false + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false + /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: false @@ -1641,6 +1819,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: false + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: false + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -1655,11 +1837,393 @@ packages: yallist: 4.0.0 dev: false + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: false + + /mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + dependencies: + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + unist-util-visit: 4.1.2 + dev: false + + /mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + dependencies: + '@types/mdast': 3.0.12 + escape-string-regexp: 5.0.0 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: false + + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + dependencies: + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + dependencies: + '@types/mdast': 3.0.12 + ccount: 2.0.1 + mdast-util-find-and-replace: 2.2.2 + micromark-util-character: 1.2.0 + dev: false + + /mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-to-markdown: 1.5.0 + micromark-util-normalize-identifier: 1.1.0 + dev: false + + /mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-to-markdown: 1.5.0 + dev: false + + /mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + dependencies: + '@types/mdast': 3.0.12 + markdown-table: 3.0.3 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-to-markdown: 1.5.0 + dev: false + + /mdast-util-gfm@2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-gfm-autolink-literal: 1.0.3 + mdast-util-gfm-footnote: 1.0.2 + mdast-util-gfm-strikethrough: 1.0.3 + mdast-util-gfm-table: 1.0.7 + mdast-util-gfm-task-list-item: 1.0.2 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + dependencies: + '@types/mdast': 3.0.12 + unist-util-is: 5.2.1 + dev: false + + /mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + dependencies: + '@types/hast': 2.3.5 + '@types/mdast': 3.0.12 + mdast-util-definitions: 5.1.2 + micromark-util-sanitize-uri: 1.2.0 + trim-lines: 3.0.1 + unist-util-generated: 2.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + dev: false + + /mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + dependencies: + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + dev: false + + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.12 + dev: false + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: false + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + dependencies: + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + dependencies: + micromark-extension-gfm-autolink-literal: 1.0.5 + micromark-extension-gfm-footnote: 1.1.2 + micromark-extension-gfm-strikethrough: 1.0.7 + micromark-extension-gfm-table: 1.0.7 + micromark-extension-gfm-tagfilter: 1.0.2 + micromark-extension-gfm-task-list-item: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + dev: false + + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + dev: false + + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: false + + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: false + + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + dependencies: + '@types/debug': 4.1.8 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -1678,6 +2242,15 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: false + /monaco-editor@0.41.0: + resolution: {integrity: sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==} + dev: false + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: false @@ -2004,6 +2577,10 @@ packages: react-is: 16.13.1 dev: false + /property-information@6.2.0: + resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} + dev: false + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} @@ -2023,10 +2600,65 @@ packages: scheduler: 0.23.0 dev: false + /react-draggable@4.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==} + peerDependencies: + react: '>= 16.3.0' + react-dom: '>= 16.3.0' + dependencies: + clsx: 1.2.1 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: false + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: false + + /react-markdown@8.0.7(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + dependencies: + '@types/hast': 2.3.5 + '@types/prop-types': 15.7.5 + '@types/react': 18.2.21 + '@types/unist': 2.0.7 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 2.0.1 + prop-types: 15.8.1 + property-information: 6.2.0 + react: 18.2.0 + react-is: 18.2.0 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.2 + unified: 10.1.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: false + + /react-resizable@3.0.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w==} + peerDependencies: + react: '>= 16.3' + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + react-draggable: 4.4.5(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - react-dom + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -2072,6 +2704,36 @@ packages: functions-have-names: 1.2.3 dev: false + /remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-gfm: 2.0.2 + micromark-extension-gfm: 2.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + dependencies: + '@types/hast': 2.3.5 + '@types/mdast': 3.0.12 + mdast-util-to-hast: 12.3.0 + unified: 10.1.2 + dev: false + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2117,6 +2779,13 @@ packages: queue-microtask: 1.2.3 dev: false + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + /safe-array-concat@1.0.0: resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} engines: {node: '>=0.4'} @@ -2184,6 +2853,14 @@ packages: engines: {node: '>=0.10.0'} dev: false + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: false + + /state-local@1.0.7: + resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + dev: false + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -2244,6 +2921,12 @@ packages: engines: {node: '>=8'} dev: false + /style-to-object@0.4.2: + resolution: {integrity: sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==} + dependencies: + inline-style-parser: 0.1.1 + dev: false + /styled-jsx@5.1.1(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -2347,6 +3030,14 @@ packages: is-number: 7.0.0 dev: false + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: false + + /trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: false + /ts-api-utils@1.0.2(typescript@5.1.6): resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} engines: {node: '>=16.13.0'} @@ -2438,6 +3129,55 @@ packages: which-boxed-primitive: 1.0.2 dev: false + /unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.7 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 5.3.7 + dev: false + + /unist-util-generated@2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + dev: false + + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.7 + dev: false + + /unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + dependencies: + '@types/unist': 2.0.7 + dev: false + + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + dependencies: + '@types/unist': 2.0.7 + dev: false + + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.7 + unist-util-is: 5.2.1 + dev: false + + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.7 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: false + /update-browserslist-db@1.0.11(browserslist@4.21.10): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true @@ -2459,6 +3199,33 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: false + + /vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + dependencies: + '@types/unist': 2.0.7 + unist-util-stringify-position: 3.0.3 + dev: false + + /vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + dependencies: + '@types/unist': 2.0.7 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + dev: false + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} @@ -2544,3 +3311,7 @@ packages: /zod@3.21.4: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: false diff --git a/frontend/src/pages/login.js b/frontend/src/pages/login.js index 8258370..afb75e1 100644 --- a/frontend/src/pages/login.js +++ b/frontend/src/pages/login.js @@ -1,7 +1,7 @@ import { easeInOut, motion } from "framer-motion"; import { useState } from "react"; -const login = () => { +const Login = () => { const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); @@ -65,4 +65,4 @@ const login = () => {
); }; -export default login; +export default Login; diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json deleted file mode 100644 index 837cf39..0000000 --- a/node_modules/.package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "cookoff24-portal", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/package.json b/package.json deleted file mode 100644 index ba971ef..0000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - - } -} From 7a965fcb7a1efbd756aa4bf72f8cc652abd31f7b Mon Sep 17 00:00:00 2001 From: Aaditya Mahanta Date: Mon, 28 Aug 2023 00:32:03 +0530 Subject: [PATCH 20/88] fix: build fixes --- frontend/src/pages/home.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/home.js b/frontend/src/pages/home.js index bc42fc8..10ea539 100644 --- a/frontend/src/pages/home.js +++ b/frontend/src/pages/home.js @@ -4,7 +4,7 @@ import { motion } from "framer-motion"; import { useEffect, useState } from "react"; import hovercook from "../assets/hover-cookoff.svg"; import cookoff from "../assets/cookoff.svg"; -import logo from "../assets/logo.svg"; +import logo from "../assets/Logo.svg"; import Image from "next/image"; import { redirect } from "next/navigation"; From de823096b0ac8712d048c56568623a08f5db5478 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Mon, 28 Aug 2023 02:54:56 +0530 Subject: [PATCH 21/88] Feat:Add functionality to the login page, fix:A lot of stuff --- frontend/package-lock.json | 97 +++++++++++++++++ frontend/package.json | 2 + frontend/src/components/EditorWindow.js | 21 ++++ frontend/src/components/TestCase.js | 64 ++++++++++- frontend/src/components/submissions.js | 8 +- frontend/src/components/textEditor.js | 85 +++++++++------ .../src/pages/{ => [user]}/Testcomplete.js | 11 +- frontend/src/pages/[user]/index.js | 28 +++++ frontend/src/pages/[user]/testPortal.js | 14 +++ frontend/src/pages/home.js | 86 --------------- frontend/src/pages/home.module.css | 50 +++++---- frontend/src/pages/index.js | 102 ++++++++++++++++-- frontend/src/pages/login.js | 59 ++++++---- 13 files changed, 443 insertions(+), 184 deletions(-) rename frontend/src/pages/{ => [user]}/Testcomplete.js (78%) create mode 100644 frontend/src/pages/[user]/index.js create mode 100644 frontend/src/pages/[user]/testPortal.js delete mode 100644 frontend/src/pages/home.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4d64f34..434e925 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -12,12 +12,14 @@ "autoprefixer": "10.4.15", "eslint": "8.47.0", "eslint-config-next": "13.4.19", + "formik": "^2.4.3", "framer-motion": "^10.16.1", "next": "13.4.19", "postcss": "8.4.28", "react": "18.2.0", "react-dom": "18.2.0", "react-markdown": "^8.0.7", + "react-modal": "^3.16.1", "react-resizable": "^3.0.5", "remark-gfm": "^3.0.1", "tailwindcss": "3.3.3" @@ -1176,6 +1178,14 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -1783,6 +1793,11 @@ "node": ">=0.10.0" } }, + "node_modules/exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1899,6 +1914,29 @@ "is-callable": "^1.1.3" } }, + "node_modules/formik": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.3.tgz", + "integrity": "sha512-2Dy79Szw3zlXmZiokUdKsn+n1ow4G8hRrC/n92cOWHNTWXCRpQXlyvz6HcjW7aSQZrldytvDOavYjhfmDnUq8Q==", + "funding": [ + { + "type": "individual", + "url": "https://opencollective.com/formik" + } + ], + "dependencies": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/fraction.js": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz", @@ -2208,6 +2246,14 @@ "url": "https://opencollective.com/unified" } }, + "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.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -2745,6 +2791,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4182,11 +4238,21 @@ "react-dom": ">= 16.3.0" } }, + "node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, "node_modules/react-markdown": { "version": "8.0.7", "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz", @@ -4222,6 +4288,24 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "node_modules/react-modal": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz", + "integrity": "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==", + "dependencies": { + "exenv": "^1.2.0", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.0", + "warning": "^4.0.3" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", + "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18" + } + }, "node_modules/react-resizable": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/react-resizable/-/react-resizable-3.0.5.tgz", @@ -4797,6 +4881,11 @@ "node": ">=0.8" } }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5145,6 +5234,14 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 517084f..c1dc5f7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,12 +13,14 @@ "autoprefixer": "10.4.15", "eslint": "8.47.0", "eslint-config-next": "13.4.19", + "formik": "^2.4.3", "framer-motion": "^10.16.1", "next": "13.4.19", "postcss": "8.4.28", "react": "18.2.0", "react-dom": "18.2.0", "react-markdown": "^8.0.7", + "react-modal": "^3.16.1", "react-resizable": "^3.0.5", "remark-gfm": "^3.0.1", "tailwindcss": "3.3.3" diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 6843009..feb0546 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -3,10 +3,21 @@ import TestCase from "./TestCase"; import { useState } from "react"; import CompilationError from "./compError"; import SubmitCode from "./submissions"; +import questionData from "../../Dummy_Data"; +import { useRouter } from "next/router"; + function EditorWindow(props) { + const router = useRouter(); const [runTestCases, setRunTestCases] = useState(false); const [questionRun, setQuestionRun] = useState(new Set()); const [questionSubmit, setQuestionSubmit] = useState(new Set()); + + function submitQuestions() { + const user = router.query.user; + const fullPath = `/${user}/Testcomplete`; + router.push(fullPath); + } + return (
)} + {questionSubmit.size === questionData.length && ( +
+ +
+ )}
); } diff --git a/frontend/src/components/TestCase.js b/frontend/src/components/TestCase.js index 361d783..3e0b9ce 100644 --- a/frontend/src/components/TestCase.js +++ b/frontend/src/components/TestCase.js @@ -7,12 +7,15 @@ import greenopenEye from "../assets/greenopenEye.svg"; import greenhiddenEye from "../assets/greenhiddenEye.svg"; import lock from "../assets/lock.svg"; import { testcasesdata } from "../../Dummy_Data"; -import { useState } from "react"; -import { useEffect } from "react"; +import { useState, useEffect, useRef } from "react"; const TestCase = ({ clickedButton }) => { + const containerRef = useRef(null); + const customTestCaseRef = useRef(null); + const [customInput, setCustomInput] = useState(""); const [testCaseIndex, setTestCaseIndex] = useState(0); const [testCaseClicked, setTestCaseClicked] = useState(0); + const [customTestCase, setCustomTestCase] = useState(null); const totalTestCases = testcasesdata[clickedButton].testcases.length; @@ -32,12 +35,21 @@ const TestCase = ({ clickedButton }) => { // Reset testCaseClicked with a minimal delay setTestCaseClicked(0); setTestCaseIndex(0); + setCustomTestCase(null); + containerRef.current.scrollIntoView(); // Clean up the timer if component unmounts }, [clickedButton]); + function handleSubmit(event){ + event.preventDefault(); + console.log(customInput, clickedButton); + setCustomInput(""); + console.log(customInput); + } + return ( <> -
+
{failedTestCases / totalTestCases === 0 ? (
@@ -52,11 +64,11 @@ const TestCase = ({ clickedButton }) => {
)} -
+ {/*
-
+
*/}
@@ -70,6 +82,7 @@ const TestCase = ({ clickedButton }) => { onClick={() => { setTestCaseIndex(index); setTestCaseClicked(index); + setCustomTestCase(null); }} style={{ background: testCaseClicked === index && "#161616", @@ -91,6 +104,7 @@ const TestCase = ({ clickedButton }) => { onClick={() => { setTestCaseIndex(index); setTestCaseClicked(index); + setCustomTestCase(null); }} style={{ background: testCaseClicked === index && "#161616", @@ -113,6 +127,7 @@ const TestCase = ({ clickedButton }) => { onClick={() => { setTestCaseIndex(index); setTestCaseClicked(index); + setCustomTestCase(null); }} style={{ background: testCaseClicked === index && "#161616", @@ -134,6 +149,7 @@ const TestCase = ({ clickedButton }) => { onClick={() => { setTestCaseIndex(index); setTestCaseClicked(index); + setCustomTestCase(null); }} style={{ background: testCaseClicked === index && "#161616", @@ -152,11 +168,49 @@ const TestCase = ({ clickedButton }) => { )}
))} +
{testcasesdata[clickedButton].testcases[testCaseIndex] ?.compileMessage === undefined ? (
Loadinng...
+ ) : testCaseClicked === null && customTestCase === clickedButton ? ( +
+
+
+
+ Enter Custom Test Case +
+ + +
+
+
) : (
diff --git a/frontend/src/components/submissions.js b/frontend/src/components/submissions.js index e570518..15df531 100644 --- a/frontend/src/components/submissions.js +++ b/frontend/src/components/submissions.js @@ -1,20 +1,20 @@ import { testcasesdata } from "../../Dummy_Data"; -import { useState, useEffect } from "react"; +import { useState, useEffect, useRef } from "react"; import Image from "next/image"; import lock from "../assets/lock.svg"; function SubmitCode(props) { const { clickedButton } = props; + const containerRef = useRef(null); const [testCaseClicked, setTestCaseClicked] = useState(0); useEffect(() => { - // Reset testCaseClicked with a minimal delay setTestCaseClicked(0); - // Clean up the timer if component unmounts + containerRef.current.scrollIntoView(); }, [clickedButton]); return ( <> -
+

diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index afa8131..9d72a5d 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -58,7 +58,7 @@ const TextEditor = ({ "script.rs", ]; - const [isChecked, setIsChecked] = useState(false); + // const [isChecked, setIsChecked] = useState(false); const handleCheckboxChange = () => { setIsChecked(!isChecked); @@ -110,9 +110,9 @@ const TextEditor = ({ if (questionSubmit.has(questionId)) { setQuestionRun((prev) => new Set(prev.add(questionId))); setQuestionSubmit((prev) => { - const newSet = new Set(prev); - newSet.delete(questionId); - return newSet; + const newSet = new Set(prev); // Create a new Set to avoid mutating the previous Set + newSet.delete(questionId); // Remove the specified questionId from the new Set + return newSet; // Return the updated Set }); } else { setQuestionRun((prev) => new Set(prev.add(questionId))); @@ -124,9 +124,9 @@ const TextEditor = ({ if (questionRun.has(questionId)) { setQuestionSubmit((prev) => new Set(prev.add(questionId))); setQuestionRun((prev) => { - const newSet = new Set(prev); - newSet.delete(questionId); - return newSet; + const newSet = new Set(prev); // Create a new Set to avoid mutating the previous Set + newSet.delete(questionId); // Remove the specified questionId from the new Set + return newSet; // Return the updated Set }); } else { setQuestionSubmit((prev) => new Set(prev.add(questionId))); @@ -134,7 +134,7 @@ const TextEditor = ({ }; return ( -
+
@@ -211,33 +211,48 @@ const TextEditor = ({
-
- -
-
- - + + +
+
+
+ + +
+
+ {/* {isChecked && ( +
+ +
+ )} */}
); diff --git a/frontend/src/pages/Testcomplete.js b/frontend/src/pages/[user]/Testcomplete.js similarity index 78% rename from frontend/src/pages/Testcomplete.js rename to frontend/src/pages/[user]/Testcomplete.js index 4090350..9c73eaf 100644 --- a/frontend/src/pages/Testcomplete.js +++ b/frontend/src/pages/[user]/Testcomplete.js @@ -1,8 +1,16 @@ import Navbar from "@/components/Navbar"; import Image from "next/image"; -import tickIcon from "../assets/TickIcon.svg"; +import tickIcon from "../../assets/TickIcon.svg"; +import { useRouter } from "next/router"; const TestComplete = () => { + const router = useRouter(); + + function returnToDashboard() { + const user = router.query.user; + const fullPath = `/${user}`; + router.push(fullPath); + } return ( <> @@ -24,6 +32,7 @@ const TestComplete = () => { diff --git a/frontend/src/pages/[user]/index.js b/frontend/src/pages/[user]/index.js new file mode 100644 index 0000000..120c4e6 --- /dev/null +++ b/frontend/src/pages/[user]/index.js @@ -0,0 +1,28 @@ +import Navbar from "@/components/Navbar"; +import { useRouter } from "next/router"; + +function Dashboard() { + const router = useRouter(); + function startTest() { + const user = router.query.user; + const fullPath = `/${user}/testPortal`; + router.push(fullPath); + } + return ( + <> +
+ +
+ +
+
+ + ); +} + +export default Dashboard; diff --git a/frontend/src/pages/[user]/testPortal.js b/frontend/src/pages/[user]/testPortal.js new file mode 100644 index 0000000..8a9ccd2 --- /dev/null +++ b/frontend/src/pages/[user]/testPortal.js @@ -0,0 +1,14 @@ +import Navbar from "@/components/Navbar"; + +import Portal from "@/components/portal"; + +export default function TestPortal() { + return ( + <> +
+ + +
+ + ); +} \ No newline at end of file diff --git a/frontend/src/pages/home.js b/frontend/src/pages/home.js deleted file mode 100644 index 10ea539..0000000 --- a/frontend/src/pages/home.js +++ /dev/null @@ -1,86 +0,0 @@ -import useMousePosition from "../utils/useMousePosition"; -import styles from "./home.module.css"; -import { motion } from "framer-motion"; -import { useEffect, useState } from "react"; -import hovercook from "../assets/hover-cookoff.svg"; -import cookoff from "../assets/cookoff.svg"; -import logo from "../assets/Logo.svg"; -import Image from "next/image"; -import { redirect } from "next/navigation"; - -function App() { - const [isHovered, setIsHovered] = useState(false); - const [isClicked, setisClicked] = useState(false); - const { x, y } = useMousePosition(); - const size = isHovered ? 400 : 40; - - const handleClick = () => { - setTimeout(() => { - setisClicked(true); - }, 300); - }; - - setTimeout(() => { - redirect("/login"); - }, 3000); - - return ( -
- {isClicked ? ( - - - hoverCook { - setIsHovered(true); - }} - onMouseLeave={() => { - setIsHovered(false); - }} - /> - -
- cookoff -
-
- ) : ( - -
- logo -
- - Start - -
- )} - ; -
- ); -} - -export default App; diff --git a/frontend/src/pages/home.module.css b/frontend/src/pages/home.module.css index 53eaffa..53f21fd 100644 --- a/frontend/src/pages/home.module.css +++ b/frontend/src/pages/home.module.css @@ -1,27 +1,33 @@ .main .body { - height: 96vh; - display: flex; - align-items: center; - justify-content: center; - cursor: default; - padding-bottom: 130px; - + height: 96vh; + display: flex; + align-items: center; + justify-content: center; + cursor: default; + padding-bottom: 130px; } - .mask { - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - position: absolute; - -webkit-mask-image: url(../assets/circle.svg); - mask-image: url(../assets/circle.svg); - background: #EB5939; - -webkit-mask-repeat: no-repeat; - mask-repeat: no-repeat; - color: black; - + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + position: absolute; + -webkit-mask-image: url(../assets/circle.svg); + mask-image: url(../assets/circle.svg); + background: #eb5939; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + color: black; +} -} \ No newline at end of file +.scroll-up-animation { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: white; /* Change this to match your background color */ + z-index: 9999; /* Make sure it's above other elements */ +} diff --git a/frontend/src/pages/index.js b/frontend/src/pages/index.js index 4e1b6b4..06e07ab 100644 --- a/frontend/src/pages/index.js +++ b/frontend/src/pages/index.js @@ -1,14 +1,98 @@ -import Navbar from "@/components/Navbar"; +import useMousePosition from "../utils/useMousePosition"; +import styles from "./home.module.css"; +import { motion } from "framer-motion"; +import { useEffect, useState } from "react"; +import hovercook from "../assets/hover-cookoff.svg"; +import cookoff from "../assets/cookoff.svg"; +import logo from "../assets/logo.svg"; +import Image from "next/image"; +import { useRouter } from "next/router"; -import Portal from "@/components/portal"; +function App() { + const router = useRouter(); + const [redirectTimer, setRedirectTimer] = useState(null); + const [isHovered, setIsHovered] = useState(false); + const [isClicked, setisClicked] = useState(false); + const { x, y } = useMousePosition(); + const size = isHovered ? 400 : 40; + + const handleClick = () => { + setTimeout(() => { + setisClicked(true); + }, 300); + }; + + useEffect(() => { + const timer = setTimeout(() => { + if (isClicked) { + router.push("/login"); + } + }, 6000); + + setRedirectTimer(timer); + + return () => { + clearTimeout(timer); + }; + }, [isClicked]); -export default function Home() { return ( - <> -
- - -
- +
+ {isClicked ? ( + + + hoverCook { + setIsHovered(true); + }} + onMouseLeave={() => { + setIsHovered(false); + }} + /> + +
+ cookoff +
+
+ ) : ( + +
+ logo +
+ + Start + +
+ )} + ; +
); } + +export default App; diff --git a/frontend/src/pages/login.js b/frontend/src/pages/login.js index afb75e1..c77f178 100644 --- a/frontend/src/pages/login.js +++ b/frontend/src/pages/login.js @@ -1,23 +1,38 @@ import { easeInOut, motion } from "framer-motion"; -import { useState } from "react"; +import { useFormik } from "formik"; +import { useRouter } from "next/router"; -const Login = () => { - const [username, setUsername] = useState(""); - const [password, setPassword] = useState(""); +const validate = (values) => { + const errors = {}; + if (!values.username) { + errors.username = "Username Required"; + } else if (values.username.length > 15) { + errors.username = "Must be 15 characters or less"; + } - const handleUsernameChange = (event) => { - setUsername(event.target.value); - }; + if (!values.password) { + errors.password = "Password Required"; + } else if (!/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{5,}$/i.test(values.password)) { + errors.password = "Invalid Password"; + } - const handlePasswordChange = (event) => { - setPassword(event.target.value); - }; + return errors; +}; - const handleSubmit = (event) => { - event.preventDefault(); - console.log("Username:", username); - console.log("Password:", password); - }; +function Login() { + const router = useRouter(); + const formik = useFormik({ + initialValues: { + username: "", + password: "", + }, + validate, + onSubmit: (values) => { + const fullPath = `/${values.username}`; + // alert(JSON.stringify(values, null, 2)); + router.push(fullPath); + }, + }); return (
@@ -28,17 +43,17 @@ const Login = () => { className="flex justify-center items-center h-screen" >
-
+
+ {formik.errors.username ?
{formik.errors.username}
: null}
{ id="password" type="password" placeholder="Password" - value={password} - onChange={handlePasswordChange} - required + onChange={formik.handleChange} + value={formik.values.password} /> + {formik.errors.password ?
{formik.errors.password}
: null}
diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index 72e4cfa..2d695c8 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -29,16 +29,16 @@ export default function Portal() {
+ {questionData.map((question, index) => ( +
+
+
+
+

+ ROUND {index + 1} +

+ SeeRound +
+
+ +
+
+
+
+
+

{question.qdata.length}

+

Solved

+
+
+ Score:  + {question.qdata.reduce( + (sum, question) => sum + parseFloat(question.points), + 0 + )} + / + {question.qdata.reduce( + (sum, question) => sum + parseFloat(question.points), + 0 + )} +
+
+
+ {question.qdata.map((question2, index2) => ( +
+
+ {index2 + 1}. {question2.objective} +
+
+ {question2.points} +
+
+ ))} +
+
+
+
+ ))} +
+ +
+
+ + ); +} + +export default RoundWise; diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 9d72a5d..0044366 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -223,6 +223,9 @@ const TextEditor = ({ defaultValue={file.value} value={codeValue} // Use the codeValue from state onChange={handleEditorChange} + options={{ + scrollBeyondLastLine: false, + }} />
diff --git a/frontend/src/pages/[user]/index.js b/frontend/src/pages/[user]/index.js index 120c4e6..bf649ff 100644 --- a/frontend/src/pages/[user]/index.js +++ b/frontend/src/pages/[user]/index.js @@ -1,28 +1,16 @@ import Navbar from "@/components/Navbar"; -import { useRouter } from "next/router"; +import RoundWise from "@/components/roundWise"; function Dashboard() { - const router = useRouter(); - function startTest() { - const user = router.query.user; - const fullPath = `/${user}/testPortal`; - router.push(fullPath); - } - return ( - <> -
- -
- -
-
- - ); + return ( + <> +
+ + +
+ + ); + } export default Dashboard; diff --git a/frontend/src/pages/index.js b/frontend/src/pages/index.js index 06e07ab..de11364 100644 --- a/frontend/src/pages/index.js +++ b/frontend/src/pages/index.js @@ -7,6 +7,7 @@ import cookoff from "../assets/cookoff.svg"; import logo from "../assets/logo.svg"; import Image from "next/image"; import { useRouter } from "next/router"; +import { useWindowSize } from "@uidotdev/usehooks"; function App() { const router = useRouter(); @@ -36,63 +37,72 @@ function App() { }; }, [isClicked]); - return ( -
- {isClicked ? ( - - + Please view on a laptop/pc +
+ ); + } else { + return ( +
+ {isClicked ? ( + - hoverCook { - setIsHovered(true); - }} - onMouseLeave={() => { - setIsHovered(false); + - -
- cookoff -
-
- ) : ( - -
- logo -
- + hoverCook { + setIsHovered(true); + }} + onMouseLeave={() => { + setIsHovered(false); + }} + /> +
+
+ cookoff +
+ + ) : ( + - Start - - - )} - ; -
- ); +
+ logo +
+ + Start + + + )} + ; +
+ ); + } } export default App; diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css index d1bf985..de08d72 100644 --- a/frontend/src/styles/globals.css +++ b/frontend/src/styles/globals.css @@ -56,4 +56,8 @@ body { #cascadia { font-family: 'Cascadia'; +} + +#font_proxima { + font-family: 'proxima nova'; } \ No newline at end of file From 17555565a5421a83c1032aa94b475e2c609e2ae8 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Mon, 28 Aug 2023 19:46:46 +0530 Subject: [PATCH 26/88] Fix: Make few design changes --- frontend/src/components/portal.js | 2 +- frontend/src/components/questions.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index 2d695c8..406eb25 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -20,7 +20,7 @@ export default function Portal() { className={`bg-[#0D0D0D] text-[#b7ab98] text-2xl 2xl:w-8 lg:w-6 hover:bg-[#161616] `} style={{ background: clickedButton === index && "#161616", - height: `${(1 / length) * 97}%`, + height: `${(1 / length) * 98}%`, }} > {index + 1} diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index 507213d..ba42ff8 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -19,7 +19,7 @@ function Question(props) { } = props; return ( -
+
Date: Mon, 28 Aug 2023 19:54:01 +0530 Subject: [PATCH 27/88] Language name in selector problem fixed --- frontend/src/assets/CurrentProfile.svg | 4 +++ frontend/src/components/CurrentProfile.js | 40 +++++++++++++++++++++++ frontend/src/components/textEditor.js | 18 +++++----- frontend/src/pages/dashboard.js | 11 +++++++ 4 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 frontend/src/assets/CurrentProfile.svg create mode 100644 frontend/src/components/CurrentProfile.js create mode 100644 frontend/src/pages/dashboard.js diff --git a/frontend/src/assets/CurrentProfile.svg b/frontend/src/assets/CurrentProfile.svg new file mode 100644 index 0000000..2d52763 --- /dev/null +++ b/frontend/src/assets/CurrentProfile.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/components/CurrentProfile.js b/frontend/src/components/CurrentProfile.js new file mode 100644 index 0000000..59ccfc9 --- /dev/null +++ b/frontend/src/components/CurrentProfile.js @@ -0,0 +1,40 @@ +import Image from "next/image"; +import Profile from "../assets/CurrentProfile.svg"; + +const CurrentProfile = () => { + return ( +
+
+
+

Current Profile

+
+
+ profileimg +
+
+ +
+
+
+ +
+
+ +
+
+
+
+ ); +}; + +export default CurrentProfile; diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 9d72a5d..70bf825 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -48,7 +48,7 @@ const TextEditor = ({ const file = files[fileName]; const [codeValue, setCodeValue] = useState(file.value); const [showMore, setShowMore] = useState(false); - const [selectedOption, setSelectedOption] = useState("script.py"); + const [selectedOption, setSelectedOption] = useState("py"); const options = [ "script.java", "script.c", @@ -110,9 +110,9 @@ const TextEditor = ({ if (questionSubmit.has(questionId)) { setQuestionRun((prev) => new Set(prev.add(questionId))); setQuestionSubmit((prev) => { - const newSet = new Set(prev); // Create a new Set to avoid mutating the previous Set - newSet.delete(questionId); // Remove the specified questionId from the new Set - return newSet; // Return the updated Set + const newSet = new Set(prev); + newSet.delete(questionId); + return newSet; }); } else { setQuestionRun((prev) => new Set(prev.add(questionId))); @@ -124,9 +124,9 @@ const TextEditor = ({ if (questionRun.has(questionId)) { setQuestionSubmit((prev) => new Set(prev.add(questionId))); setQuestionRun((prev) => { - const newSet = new Set(prev); // Create a new Set to avoid mutating the previous Set - newSet.delete(questionId); // Remove the specified questionId from the new Set - return newSet; // Return the updated Set + const newSet = new Set(prev); + newSet.delete(questionId); + return newSet; }); } else { setQuestionSubmit((prev) => new Set(prev.add(questionId))); @@ -201,7 +201,7 @@ const TextEditor = ({ : "group-hover:bg-[#1b1b1b]" }`} > - {option} + {option.substring(option.lastIndexOf(".") + 1)}

))} @@ -221,7 +221,7 @@ const TextEditor = ({ path={file.name} defaultLanguage={file.language} defaultValue={file.value} - value={codeValue} // Use the codeValue from state + value={codeValue} onChange={handleEditorChange} />
diff --git a/frontend/src/pages/dashboard.js b/frontend/src/pages/dashboard.js new file mode 100644 index 0000000..1ace7d6 --- /dev/null +++ b/frontend/src/pages/dashboard.js @@ -0,0 +1,11 @@ +import CurrentProfile from "../components/CurrentProfile"; + +const Dashboard = () => { + return ( + <> + + + ); +}; + +export default Dashboard; From 0c0135fb742a0ae61bbe5ee8442efba3a0d16a2e Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Mon, 28 Aug 2023 22:55:39 +0530 Subject: [PATCH 28/88] langyage selector problrm fixed --- frontend/package-lock.json | 9 +++++ frontend/package.json | 1 + frontend/src/components/CurrentProfile.js | 46 ++++++++++++++++++----- frontend/src/components/textEditor.js | 4 +- frontend/src/pages/dashboard.js | 11 ------ 5 files changed, 49 insertions(+), 22 deletions(-) delete mode 100644 frontend/src/pages/dashboard.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 434e925..9938f78 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -18,6 +18,7 @@ "postcss": "8.4.28", "react": "18.2.0", "react-dom": "18.2.0", + "react-icons": "^4.10.1", "react-markdown": "^8.0.7", "react-modal": "^3.16.1", "react-resizable": "^3.0.5", @@ -4243,6 +4244,14 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" }, + "node_modules/react-icons": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", + "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index c1dc5f7..bd3170e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,6 +19,7 @@ "postcss": "8.4.28", "react": "18.2.0", "react-dom": "18.2.0", + "react-icons": "^4.10.1", "react-markdown": "^8.0.7", "react-modal": "^3.16.1", "react-resizable": "^3.0.5", diff --git a/frontend/src/components/CurrentProfile.js b/frontend/src/components/CurrentProfile.js index 59ccfc9..fde214f 100644 --- a/frontend/src/components/CurrentProfile.js +++ b/frontend/src/components/CurrentProfile.js @@ -1,35 +1,61 @@ import Image from "next/image"; +import { BiSolidHide } from "react-icons/bi"; +import { RxUpload } from "react-icons/rx"; import Profile from "../assets/CurrentProfile.svg"; const CurrentProfile = () => { return (
-
-
+
+

Current Profile

- profileimg + profileimg
-
- +
+
-
-
+ + +
-
+
+
+ +
+
+ +
+ +
+
+
diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 70bf825..23199fe 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -145,7 +145,9 @@ const TextEditor = ({
{ - return ( - <> - - - ); -}; - -export default Dashboard; From 2b8fcc8013be9af86893826af7cf894735d036ab Mon Sep 17 00:00:00 2001 From: Aaditya Mahanta Date: Wed, 30 Aug 2023 18:38:38 +0530 Subject: [PATCH 29/88] fix: build fixes --- frontend/pnpm-lock.yaml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index fa67f7c..47919aa 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@monaco-editor/react': specifier: ^4.5.2 version: 4.5.2(monaco-editor@0.41.0)(react-dom@18.2.0)(react@18.2.0) + '@uidotdev/usehooks': + specifier: ^2.1.1 + version: 2.1.1(react-dom@18.2.0)(react@18.2.0) autoprefixer: specifier: 10.4.15 version: 10.4.15(postcss@8.4.28) @@ -35,6 +38,9 @@ dependencies: react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) + react-icons: + specifier: ^4.10.1 + version: 4.10.1(react@18.2.0) react-markdown: specifier: ^8.0.7 version: 8.0.7(@types/react@18.2.21)(react@18.2.0) @@ -423,6 +429,17 @@ packages: eslint-visitor-keys: 3.4.3 dev: false + /@uidotdev/usehooks@2.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sVJ1jXU62Edh22dREEa3mHcHnH2MUgokuzLw9guNS30ADCkdhYASNZxg2V8iB83iwY5H+jSeSxjqGaFvsRrNBQ==} + engines: {node: '>=16'} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2660,6 +2677,14 @@ packages: resolution: {integrity: sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==} dev: false + /react-icons@4.10.1(react@18.2.0): + resolution: {integrity: sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: false From b90424471ef5d541381dc1ad6443d983a3d7d276 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Mon, 28 Aug 2023 23:23:12 +0530 Subject: [PATCH 30/88] fix:design changes --- frontend/src/components/portal.js | 2 +- frontend/src/components/questions.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index 406eb25..8d68458 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -20,7 +20,7 @@ export default function Portal() { className={`bg-[#0D0D0D] text-[#b7ab98] text-2xl 2xl:w-8 lg:w-6 hover:bg-[#161616] `} style={{ background: clickedButton === index && "#161616", - height: `${(1 / length) * 98}%`, + height: `${(1 / length) * 100}%`, }} > {index + 1} diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index ba42ff8..4a3aa6a 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -19,7 +19,7 @@ function Question(props) { } = props; return ( -
+
Date: Wed, 30 Aug 2023 21:30:54 +0530 Subject: [PATCH 31/88] feat: Complete the dashboard and add the countdown timer component, fix: few design changes here and there --- frontend/Dummy_Data.js | 252 ++++++++++++---------- frontend/package-lock.json | 9 + frontend/package.json | 1 + frontend/src/components/CurrentProfile.js | 32 ++- frontend/src/components/EditorWindow.js | 2 + frontend/src/components/Navbar.js | 34 ++- frontend/src/components/TestCase.js | 106 ++++++--- frontend/src/components/countdownTimer.js | 56 +++++ frontend/src/components/portal.js | 2 +- frontend/src/components/questions.js | 2 +- frontend/src/components/roundWise.js | 123 ++++++----- frontend/src/components/textEditor.js | 5 +- frontend/src/pages/[user]/index.js | 19 +- frontend/src/pages/[user]/testPortal.js | 20 +- frontend/src/pages/_app.js | 4 +- 15 files changed, 429 insertions(+), 238 deletions(-) create mode 100644 frontend/src/components/countdownTimer.js diff --git a/frontend/Dummy_Data.js b/frontend/Dummy_Data.js index 288d7d7..e52057f 100644 --- a/frontend/Dummy_Data.js +++ b/frontend/Dummy_Data.js @@ -1,9 +1,12 @@ const questionData = [ - {round: 1, - qdata:[{ - objective: "hello World", - points: "10 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. + { + round: 1, + active: false, + qdata: [ + { + objective: "hello World", + points: "10 points", + task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. There are two types of synchronization and they can complement each other: @@ -14,37 +17,37 @@ There are two types of synchronization and they can complement each other: - This will allow you to fetch your workspace on any other device. > To start syncing your workspace, just sign in with Google in the menu. `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. + inputFormat: `The first line contains a single integer, q, denoting the number of queries. Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. **Constraints** -------------- It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. + outputFormat: `Print three lines of output. The first line prints the character, ch. The second line prints the string, s. The third line prints the sentence, sen.`, - sampleInput: [ - `10 4 + sampleInput: [ + `10 4 4.0 2.0`, - `10 4 + `10 4 4.0 2.0`, - ], - sampleOutput: [ - `14 6 + ], + sampleOutput: [ + `14 6 6.0 2.0`, - `14 6 + `14 6 6.0 2.0`, - ], - explanation: ` + ], + explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #2", - points: "15 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. + }, + { + objective: "hello World #2", + points: "15 points", + task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. There are two types of synchronization and they can complement each other: @@ -55,37 +58,37 @@ There are two types of synchronization and they can complement each other: - This will allow you to fetch your workspace on any other device. > To start syncing your workspace, just sign in with Google in the menu. `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. + inputFormat: `The first line contains a single integer, q, denoting the number of queries. Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. **Constraints** -------------- It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. + outputFormat: `Print three lines of output. The first line prints the character, ch. The second line prints the string, s. The third line prints the sentence, sen.`, - sampleInput: [ - `10 18 + sampleInput: [ + `10 18 4.0 2.0`, - `10 90 + `10 90 4.0 2.0`, - ], - sampleOutput: [ - `14 1 + ], + sampleOutput: [ + `14 1 6.0 2.0`, - `14 11 + `14 11 6.0 2.0`, - ], - explanation: ` + ], + explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #3", - points: "20 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. + }, + { + objective: "hello World #3", + points: "20 points", + task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. There are two types of synchronization and they can complement each other: @@ -96,79 +99,74 @@ There are two types of synchronization and they can complement each other: - This will allow you to fetch your workspace on any other device. > To start syncing your workspace, just sign in with Google in the menu. `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. + inputFormat: `The first line contains a single integer, q, denoting the number of queries. Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. **Constraints** -------------- It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. + outputFormat: `Print three lines of output. The first line prints the character, ch. The second line prints the string, s. The third line prints the sentence, sen.`, - sampleInput: [ - `10 182 + sampleInput: [ + `10 182 4.0 2.0`, - `10 9 + `10 9 4.0 2.0`, - ], - sampleOutput: [ - `14 0 + ], + sampleOutput: [ + `14 0 6.0 2.0`, - `14 110 + `14 110 6.0 2.0`, - ], - explanation: ` + ], + explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }]}, - {round: 2, - qdata:[{ - objective: "hello World round 2", - points: "10 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. - - There are two types of synchronization and they can complement each other: - - * 1.Step 1. - * 2.Step 2. - * 3.Step 3. - - - This will allow you to fetch your workspace on any other device. - > To start syncing your workspace, just sign in with Google in the menu. - `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. + }, + ], + }, + { + round: 2, + active: true, + qdata: [ + { + objective: "hello World round 2", + points: "10 points", + task: ``, + inputFormat: `The first line contains a single integer, q, denoting the number of queries. Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. **Constraints** -------------- It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. + outputFormat: `Print three lines of output. The first line prints the character, ch. The second line prints the string, s. The third line prints the sentence, sen.`, - sampleInput: [ - `10 4 + sampleInput: [ + `10 4 4.0 2.0`, - `10 4 + `10 4 4.0 2.0`, - ], - sampleOutput: [ - `14 6 + ], + sampleOutput: [ + `14 6 6.0 2.0`, - `14 6 + `14 6 6.0 2.0`, - ], - explanation: ` + ], + explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #2 round 2", - points: "15 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. + }, + { + objective: "hello World #2 round 2", + points: "15 points", + task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. There are two types of synchronization and they can complement each other: @@ -179,37 +177,37 @@ When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract - This will allow you to fetch your workspace on any other device. > To start syncing your workspace, just sign in with Google in the menu. `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. + inputFormat: `The first line contains a single integer, q, denoting the number of queries. Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. **Constraints** -------------- It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. + outputFormat: `Print three lines of output. The first line prints the character, ch. The second line prints the string, s. The third line prints the sentence, sen.`, - sampleInput: [ - `10 18 + sampleInput: [ + `10 18 4.0 2.0`, - `10 90 + `10 90 4.0 2.0`, - ], - sampleOutput: [ - `14 1 + ], + sampleOutput: [ + `14 1 6.0 2.0`, - `14 11 + `14 11 6.0 2.0`, - ], - explanation: ` + ], + explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #3 round 2", - points: "20 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. + }, + { + objective: "hello World #3 round 2", + points: "20 points", + task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. There are two types of synchronization and they can complement each other: @@ -220,35 +218,40 @@ When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract - This will allow you to fetch your workspace on any other device. > To start syncing your workspace, just sign in with Google in the menu. `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. + inputFormat: `The first line contains a single integer, q, denoting the number of queries. Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. **Constraints** -------------- It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. + outputFormat: `Print three lines of output. The first line prints the character, ch. The second line prints the string, s. The third line prints the sentence, sen.`, - sampleInput: [ - `10 182 + sampleInput: [ + `10 182 4.0 2.0`, - `10 9 + `10 9 4.0 2.0`, - ], - sampleOutput: [ - `14 0 + ], + sampleOutput: [ + `14 0 6.0 2.0`, - `14 110 + `14 110 6.0 2.0`, - ], - explanation: ` + ], + explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }]}, - {round: 3, - qdata:[{ + }, + ], + }, + { + round: 3, + active: false, + qdata: [ + { objective: "hello World round 3", points: "10 points", task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. @@ -370,12 +373,15 @@ When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract explanation: ` When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }]}, - + }, + ], + }, ]; - export const compilationError = [{error: false, -compileMessage: `Solution.cpp: In function 'int simpleArraySum +export const compilationError = [ + { + error: false, + compileMessage: `Solution.cpp: In function 'int simpleArraySum (std::vector=14" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index f2202d9..baffc17 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,6 +16,7 @@ "eslint-config-next": "13.4.19", "formik": "^2.4.3", "framer-motion": "^10.16.1", + "js-cookie": "^3.0.5", "next": "13.4.19", "postcss": "8.4.28", "react": "18.2.0", diff --git a/frontend/src/components/CurrentProfile.js b/frontend/src/components/CurrentProfile.js index fde214f..8830a3d 100644 --- a/frontend/src/components/CurrentProfile.js +++ b/frontend/src/components/CurrentProfile.js @@ -2,11 +2,21 @@ import Image from "next/image"; import { BiSolidHide } from "react-icons/bi"; import { RxUpload } from "react-icons/rx"; import Profile from "../assets/CurrentProfile.svg"; +import { useRouter } from "next/router"; +import questionData from "../../Dummy_Data"; const CurrentProfile = () => { + let round = 0; + for (let i = 0; i < questionData.length; i++) { + if (questionData[i].active) { + round = i; // Return the index where active is true + } + } + const router = useRouter(); + const user = router.query.user; return ( -
-
+
+

Current Profile

@@ -23,13 +33,14 @@ const CurrentProfile = () => {
-
+ {/*
{
-
+
*/}
-
+ {/*
-
+
*/}
diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 79120a0..157b2bc 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -5,6 +5,7 @@ import CompilationError from "./compError"; import SubmitCode from "./submissions"; import questionData from "../../Dummy_Data"; import { useRouter } from "next/router"; +import Cookies from 'js-cookie'; function EditorWindow(props) { const router = useRouter(); @@ -13,6 +14,7 @@ function EditorWindow(props) { const [questionSubmit, setQuestionSubmit] = useState(new Set()); function submitQuestions() { + Cookies.remove('timerTime'); const user = router.query.user; const fullPath = `/${user}/Testcomplete`; router.push(fullPath); diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index 1da44d6..6c0f29b 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -2,22 +2,38 @@ import Image from "next/image"; import cookoff from "../assets/cook-head.svg"; import menu from "../assets/menu-icon.svg"; import profile from "../assets/profile-icon.svg"; +import Link from "next/link"; +import { useState, useEffect } from "react"; +import CountdownTimer from "./countdownTimer"; +import { useRouter } from "next/router"; const Navbar = () => { + const router = useRouter(); + const [isTestPortal, setIsTestPortal] = useState(false); + useEffect(() => { + setIsTestPortal(router.pathname.includes("testPortal")); + }, [router.pathname]); return ( <> -
-
- -
+
+ {isTestPortal ? ( + + ) : ( +
+

00:00:00

+
+ )}
Cook-Off 8.0
- + + + + {customTestCaseCorrect === true && ( +
+
+
+ Output +
+
+ {customTestCaseData[clickedButton].output} +
+
+
+
+ Expected Output +
+
+ {customTestCaseData[clickedButton].expectedOutput} +
+
+
+ )} + {customTestCaseCorrect === false && ( +
+
+
+ Output +
+
+ {customTestCaseData[clickedButton].output} +
+
+
+
+ Expected Output +
+
+ {customTestCaseData[clickedButton].expectedOutput} +
+
- - - + )}
) : ( diff --git a/frontend/src/components/countdownTimer.js b/frontend/src/components/countdownTimer.js new file mode 100644 index 0000000..34a3aa9 --- /dev/null +++ b/frontend/src/components/countdownTimer.js @@ -0,0 +1,56 @@ +import React, { useEffect, useState } from "react"; +import Cookies from 'js-cookie'; + +function CountdownTimer() { + const initialTime = 2 * 60 * 60; // 2 hours in seconds + const [timeRemaining, setTimeRemaining] = useState(initialTime); + useEffect(() => { + const storedTime = Cookies.get('timerTime'); + if (storedTime !== undefined) { + setTimeRemaining(parseInt(storedTime, 10)); + } else { + setTimeRemaining(initialTime); + } + }, []); + useEffect(() => { + const interval = setInterval(() => { + if (timeRemaining > 0) { + setTimeRemaining((prevTime) => prevTime - 1); + } else { + setTimeRemaining(initialTime); + } + }, 1000); + + const handleBeforeUnload = () => { + Cookies.set('timerTime', timeRemaining.toString()); + }; + + window.addEventListener('beforeunload', handleBeforeUnload); + + return () => { + clearInterval(interval); + window.removeEventListener('beforeunload', handleBeforeUnload); + }; + }, [timeRemaining]); + + const formatTime = (timeInSeconds) => { + const hours = Math.floor(timeInSeconds / 3600); + const minutes = Math.floor((timeInSeconds % 3600) / 60); + const seconds = timeInSeconds % 60; + + return `${hours.toString().padStart(2, "0")} : ${minutes + .toString() + .padStart(2, "0")} : ${seconds.toString().padStart(2, "0")}`; + }; + + return ( +
+

{formatTime(timeRemaining)}

+
+ ); +} + +export default CountdownTimer; diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index 8d68458..2ddc2a0 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -10,7 +10,7 @@ export default function Portal() { setClickedButton(index); } return ( -
+
{questionData.map((question, index) => ( -
-
-
-
-
-

{question.qdata.length}

-

Solved

+
+ {questionData.map( + (question, index) => + question.active && ( +
+
+
+
+

+ ROUND {index + 1} +

+ SeeRound
-
- Score:  - {question.qdata.reduce( - (sum, question) => sum + parseFloat(question.points), - 0 - )} - / - {question.qdata.reduce( - (sum, question) => sum + parseFloat(question.points), - 0 - )} +
+
-
- {question.qdata.map((question2, index2) => ( +
+
-
- {index2 + 1}. {question2.objective} -
-
- {question2.points} -
+

0/{question.qdata.length}

+

Solved

- ))} +
+ Score:  + 0 + / + {question.qdata.reduce( + (sum, question) => sum + parseFloat(question.points), + 0 + )} +
+
+
+ {question.qdata.map((question2, index2) => ( +
+
+ {index2 + 1}. {question2.objective} +
+
+ {question2.points} +
+
+ ))} +
-
- ))} -
- -
+ ) + )} +
+
- +
); } diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index ce6a6c3..6e2cff2 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -49,6 +49,7 @@ const TextEditor = ({ const [codeValue, setCodeValue] = useState(file.value); const [showMore, setShowMore] = useState(false); const [selectedOption, setSelectedOption] = useState("py"); + const options = [ "script.java", "script.c", @@ -226,8 +227,8 @@ const TextEditor = ({ value={codeValue} onChange={handleEditorChange} options={{ - scrollBeyondLastLine: false, - }} + scrollBeyondLastLine: false, + }} />
diff --git a/frontend/src/pages/[user]/index.js b/frontend/src/pages/[user]/index.js index bf649ff..52ef5be 100644 --- a/frontend/src/pages/[user]/index.js +++ b/frontend/src/pages/[user]/index.js @@ -1,16 +1,19 @@ import Navbar from "@/components/Navbar"; import RoundWise from "@/components/roundWise"; +import CurrentProfile from "@/components/CurrentProfile"; function Dashboard() { - return ( - <> -
- + return ( + <> +
+ +
+ -
- - ); - +
+

+ + ); } export default Dashboard; diff --git a/frontend/src/pages/[user]/testPortal.js b/frontend/src/pages/[user]/testPortal.js index 8a9ccd2..e7d72e2 100644 --- a/frontend/src/pages/[user]/testPortal.js +++ b/frontend/src/pages/[user]/testPortal.js @@ -1,8 +1,24 @@ import Navbar from "@/components/Navbar"; - import Portal from "@/components/portal"; +import React, { useEffect,useState } from "react"; +import { useRouter } from "next/router"; export default function TestPortal() { + const router = useRouter(); + useEffect(() => { + const handleBackButton = (e) => { + e.preventDefault(); + alert("Back button is disabled on this page."); + window.history.pushState(null, null, window.location.pathname); + }; + + window.history.pushState(null, null, window.location.pathname); + window.addEventListener("popstate", handleBackButton); + + return () => { + window.removeEventListener("popstate", handleBackButton); + }; + }, []); return ( <>
@@ -11,4 +27,4 @@ export default function TestPortal() {
); -} \ No newline at end of file +} diff --git a/frontend/src/pages/_app.js b/frontend/src/pages/_app.js index 2300201..b97e52f 100644 --- a/frontend/src/pages/_app.js +++ b/frontend/src/pages/_app.js @@ -1,5 +1,5 @@ -import '@/styles/globals.css' +import "@/styles/globals.css"; export default function App({ Component, pageProps }) { - return + return ; } From c06191b08156a7b3d627a216ccf74d8c13466f03 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Thu, 31 Aug 2023 02:40:43 +0530 Subject: [PATCH 32/88] Feat: After timer ends user is redirected to testComplete page --- frontend/package-lock.json | 38 ++++++++++++++++++++++- frontend/package.json | 3 +- frontend/src/components/EditorWindow.js | 19 +++++++++--- frontend/src/components/countdownTimer.js | 24 ++++++++------ frontend/src/components/textEditor.js | 12 ++++--- frontend/src/store/timeProvider.js | 9 ++++++ 6 files changed, 84 insertions(+), 21 deletions(-) create mode 100644 frontend/src/store/timeProvider.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2c3ed15..7a76e66 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -25,7 +25,8 @@ "react-modal": "^3.16.1", "react-resizable": "^3.0.5", "remark-gfm": "^3.0.1", - "tailwindcss": "3.3.3" + "tailwindcss": "3.3.3", + "zustand": "^4.4.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -5215,6 +5216,14 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5408,6 +5417,33 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/zustand": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.1.tgz", + "integrity": "sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==", + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", diff --git a/frontend/package.json b/frontend/package.json index baffc17..16f5e6c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -26,6 +26,7 @@ "react-modal": "^3.16.1", "react-resizable": "^3.0.5", "remark-gfm": "^3.0.1", - "tailwindcss": "3.3.3" + "tailwindcss": "3.3.3", + "zustand": "^4.4.1" } } diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 157b2bc..63031fd 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -1,22 +1,31 @@ import TextEditor from "./textEditor"; import TestCase from "./TestCase"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import CompilationError from "./compError"; import SubmitCode from "./submissions"; import questionData from "../../Dummy_Data"; import { useRouter } from "next/router"; -import Cookies from 'js-cookie'; +import Cookies from "js-cookie"; +import useTimerStore from "@/store/timeProvider"; function EditorWindow(props) { const router = useRouter(); + const initialTime = useTimerStore((state) => state.Time); + const user = router.query.user; + const fullPath = `/${user}/Testcomplete`; const [runTestCases, setRunTestCases] = useState(false); const [questionRun, setQuestionRun] = useState(new Set()); const [questionSubmit, setQuestionSubmit] = useState(new Set()); + useEffect(() => { + if (initialTime === 0) { + Cookies.remove("timerTime"); + router.push(fullPath); + } + }, [initialTime]); + function submitQuestions() { - Cookies.remove('timerTime'); - const user = router.query.user; - const fullPath = `/${user}/Testcomplete`; + Cookies.remove("timerTime"); router.push(fullPath); } diff --git a/frontend/src/components/countdownTimer.js b/frontend/src/components/countdownTimer.js index 34a3aa9..2f633e5 100644 --- a/frontend/src/components/countdownTimer.js +++ b/frontend/src/components/countdownTimer.js @@ -1,28 +1,32 @@ import React, { useEffect, useState } from "react"; import Cookies from 'js-cookie'; +import useTimerStore from "@/store/timeProvider"; function CountdownTimer() { - const initialTime = 2 * 60 * 60; // 2 hours in seconds - const [timeRemaining, setTimeRemaining] = useState(initialTime); + // const initialTime = 2 * 60 * 60; + const initialTime = useTimerStore((state) => state.Time); + // const [timeRemaining, setTimeRemaining] = useState(initialTime); useEffect(() => { const storedTime = Cookies.get('timerTime'); if (storedTime !== undefined) { - setTimeRemaining(parseInt(storedTime, 10)); + useTimerStore.setState({ Time: parseInt(storedTime, 10) }); + // setTimeRemaining(parseInt(storedTime, 10)); } else { - setTimeRemaining(initialTime); + useTimerStore.setState({Time: 2*60*60}); } }, []); useEffect(() => { const interval = setInterval(() => { - if (timeRemaining > 0) { - setTimeRemaining((prevTime) => prevTime - 1); + if (initialTime > 0) { + // setTimeRemaining((prevTime) => prevTime - 1); + useTimerStore.setState({ Time: useTimerStore.getState().Time - 1 }); } else { - setTimeRemaining(initialTime); + useTimerStore.setState({Time: 2*60*60}); } }, 1000); const handleBeforeUnload = () => { - Cookies.set('timerTime', timeRemaining.toString()); + Cookies.set('timerTime', initialTime.toString()); }; window.addEventListener('beforeunload', handleBeforeUnload); @@ -31,7 +35,7 @@ function CountdownTimer() { clearInterval(interval); window.removeEventListener('beforeunload', handleBeforeUnload); }; - }, [timeRemaining]); + }, [initialTime]); const formatTime = (timeInSeconds) => { const hours = Math.floor(timeInSeconds / 3600); @@ -48,7 +52,7 @@ function CountdownTimer() { className="w-[100px] mx-9 bg-[#4d4d4d] rounded-xl text-center py-1 text-[#C1BBB3] font-semibold text-lg" id="font_proxima" > -

{formatTime(timeRemaining)}

+

{formatTime(initialTime)}

); } diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 6e2cff2..fe63f1d 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -1,5 +1,6 @@ import React, { useState, useRef, useEffect } from "react"; import { Editor } from "@monaco-editor/react"; +import useTimerStore from "@/store/timeProvider"; const TextEditor = ({ questionId, @@ -43,6 +44,7 @@ const TextEditor = ({ }, }; + // const initialTime = useTimerStore((state) => state.Time); const [fileName, setFileName] = useState("script.py"); const editorRef = useRef(null); const file = files[fileName]; @@ -61,10 +63,6 @@ const TextEditor = ({ // const [isChecked, setIsChecked] = useState(false); - const handleCheckboxChange = () => { - setIsChecked(!isChecked); - }; - const handleEditorChange = (value, event) => { setCodeValue(value); @@ -77,6 +75,11 @@ const TextEditor = ({ localStorage.setItem("codeData", JSON.stringify(updatedCodeData)); }; + // useEffect(() => { + // if (initialTime === 1) { + // } + // }, [initialTime]); + useEffect(() => { const existingCodeData = JSON.parse(localStorage.getItem("codeData")) || {}; const savedCode = existingCodeData[questionId] || ""; @@ -102,6 +105,7 @@ const TextEditor = ({ [questionId]: codeValue, }; localStorage.setItem("codeData", JSON.stringify(updatedCodeData)); + console.log(codeValue); // alert(`Code for question ${questionId} stored in local storage.`); }; diff --git a/frontend/src/store/timeProvider.js b/frontend/src/store/timeProvider.js new file mode 100644 index 0000000..faa108e --- /dev/null +++ b/frontend/src/store/timeProvider.js @@ -0,0 +1,9 @@ +import { create } from "zustand"; + +const useTimerStore = create((set) => ({ + Time: 2*60*60, +// countdeduct: () => set((state) => ({ initalTime: state.initalTime - 1 })), +// countParse: () => set((state) => ({ initalTime: parseInt(state.initalTime) })), +})); + +export default useTimerStore; From b489a0f5e6ab07cb25fde3834b99ccceb05a49ed Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Fri, 1 Sep 2023 00:29:45 +0530 Subject: [PATCH 33/88] fixed languages dropdown: it closes when language is selected --- frontend/src/components/textEditor.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index fe63f1d..a0b8162 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -91,6 +91,7 @@ const TextEditor = ({ const handleOptionClick = (option) => { setSelectedOption(option); + setShowMore(false); }; const handleEditorDidMount = (Editor, monaco) => { From 831b1ed47bf6f3ae7e1084a38d43a2ba274e4f47 Mon Sep 17 00:00:00 2001 From: Aaditya Mahanta Date: Fri, 1 Sep 2023 01:59:27 +0530 Subject: [PATCH 34/88] fix: build fix --- frontend/pnpm-lock.yaml | 39 +++++++++++++++++++++++++++++++++++++++ package-lock.json | 6 ------ 2 files changed, 39 insertions(+), 6 deletions(-) delete mode 100644 package-lock.json diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 47919aa..71b7ec7 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -26,6 +26,9 @@ dependencies: framer-motion: specifier: ^10.16.1 version: 10.16.1(react-dom@18.2.0)(react@18.2.0) + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 next: specifier: 13.4.19 version: 13.4.19(react-dom@18.2.0)(react@18.2.0) @@ -56,6 +59,9 @@ dependencies: tailwindcss: specifier: 3.3.3 version: 3.3.3 + zustand: + specifier: ^4.4.1 + version: 4.4.1(@types/react@18.2.21)(react@18.2.0) packages: @@ -1793,6 +1799,11 @@ packages: hasBin: true dev: false + /js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + dev: false + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: false @@ -3291,6 +3302,14 @@ packages: punycode: 2.3.0 dev: false + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false @@ -3414,6 +3433,26 @@ packages: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false + /zustand@4.4.1(@types/react@18.2.21)(react@18.2.0): + resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + dependencies: + '@types/react': 18.2.21 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 837cf39..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "cookoff24-portal", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} From 2f5a8dc0f96029d65ceee51314d38ae7aa1f61c3 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Sat, 2 Sep 2023 18:10:55 +0530 Subject: [PATCH 35/88] feature added:user can use multiple languages for multiple questions --- frontend/src/components/textEditor.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index a0b8162..914f170 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -45,6 +45,7 @@ const TextEditor = ({ }; // const initialTime = useTimerStore((state) => state.Time); + const [selectedLanguages, setSelectedLanguages] = useState({}); const [fileName, setFileName] = useState("script.py"); const editorRef = useRef(null); const file = files[fileName]; @@ -89,9 +90,22 @@ const TextEditor = ({ } }, [questionId]); + useEffect(() => { + // Retrieve the selected language from state for the current question + const selectedLanguage = selectedLanguages[questionId]; + if (selectedLanguage) { + setFileName(selectedLanguage); + } + }, [questionId, selectedLanguages]); + const handleOptionClick = (option) => { setSelectedOption(option); setShowMore(false); + + setSelectedLanguages((prevSelectedLanguages) => ({ + ...prevSelectedLanguages, + [questionId]: option, + })); }; const handleEditorDidMount = (Editor, monaco) => { @@ -151,9 +165,7 @@ const TextEditor = ({
Date: Sat, 2 Sep 2023 18:27:43 +0530 Subject: [PATCH 36/88] fixed language selector problrm --- frontend/src/components/textEditor.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 914f170..526d784 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -51,7 +51,7 @@ const TextEditor = ({ const file = files[fileName]; const [codeValue, setCodeValue] = useState(file.value); const [showMore, setShowMore] = useState(false); - const [selectedOption, setSelectedOption] = useState("py"); + const [selectedOption, setSelectedOption] = useState({}); const options = [ "script.java", @@ -67,7 +67,6 @@ const TextEditor = ({ const handleEditorChange = (value, event) => { setCodeValue(value); - // Save code value to local storage const existingCodeData = JSON.parse(localStorage.getItem("codeData")) || {}; const updatedCodeData = { ...existingCodeData, @@ -91,7 +90,6 @@ const TextEditor = ({ }, [questionId]); useEffect(() => { - // Retrieve the selected language from state for the current question const selectedLanguage = selectedLanguages[questionId]; if (selectedLanguage) { setFileName(selectedLanguage); @@ -165,7 +163,7 @@ const TextEditor = ({
Date: Sat, 2 Sep 2023 18:59:55 +0530 Subject: [PATCH 37/88] Feat:Integrated auth --- frontend/package-lock.json | 91 +++++++++++++++++++ frontend/package.json | 1 + frontend/src/components/EditorWindow.js | 2 +- frontend/src/components/Navbar.js | 47 ++++++++-- frontend/src/pages/[user]/index.js | 19 ---- frontend/src/pages/_app.js | 8 +- frontend/src/pages/login.js | 69 ++++++++++---- .../pages/{[user] => user}/Testcomplete.js | 2 +- frontend/src/pages/user/index.js | 48 ++++++++++ .../src/pages/{[user] => user}/testPortal.js | 0 frontend/src/store/tokenProvider.js | 8 ++ frontend/src/utils/tokenRefresher.js | 34 +++++++ 12 files changed, 283 insertions(+), 46 deletions(-) delete mode 100644 frontend/src/pages/[user]/index.js rename frontend/src/pages/{[user] => user}/Testcomplete.js (97%) create mode 100644 frontend/src/pages/user/index.js rename frontend/src/pages/{[user] => user}/testPortal.js (100%) create mode 100644 frontend/src/store/tokenProvider.js create mode 100644 frontend/src/utils/tokenRefresher.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7a76e66..6c9806c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,6 +11,7 @@ "@monaco-editor/react": "^4.5.2", "@uidotdev/usehooks": "^2.1.1", "autoprefixer": "10.4.15", + "axios": "^1.5.0", "eslint": "8.47.0", "eslint-config-next": "13.4.19", "formik": "^2.4.3", @@ -811,6 +812,11 @@ "has-symbols": "^1.0.3" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/autoprefixer": { "version": "10.4.15", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", @@ -866,6 +872,16 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", @@ -1104,6 +1120,17 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", @@ -1217,6 +1244,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -1922,6 +1957,25 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -1930,6 +1984,19 @@ "is-callable": "^1.1.3" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/formik": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.3.tgz", @@ -3639,6 +3706,25 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4199,6 +4285,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 16f5e6c..8bc9df7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,6 +12,7 @@ "@monaco-editor/react": "^4.5.2", "@uidotdev/usehooks": "^2.1.1", "autoprefixer": "10.4.15", + "axios": "^1.5.0", "eslint": "8.47.0", "eslint-config-next": "13.4.19", "formik": "^2.4.3", diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 63031fd..3bd02f2 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -12,7 +12,7 @@ function EditorWindow(props) { const router = useRouter(); const initialTime = useTimerStore((state) => state.Time); const user = router.query.user; - const fullPath = `/${user}/Testcomplete`; + const fullPath = `/user/Testcomplete`; const [runTestCases, setRunTestCases] = useState(false); const [questionRun, setQuestionRun] = useState(new Set()); const [questionSubmit, setQuestionSubmit] = useState(new Set()); diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index 6c0f29b..cc29fa6 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -1,17 +1,49 @@ import Image from "next/image"; import cookoff from "../assets/cook-head.svg"; -import menu from "../assets/menu-icon.svg"; import profile from "../assets/profile-icon.svg"; -import Link from "next/link"; import { useState, useEffect } from "react"; import CountdownTimer from "./countdownTimer"; import { useRouter } from "next/router"; +import useTokenStore from "@/store/tokenProvider"; +import axios from "axios"; + const Navbar = () => { const router = useRouter(); + const [isTestPortal, setIsTestPortal] = useState(false); useEffect(() => { setIsTestPortal(router.pathname.includes("testPortal")); }, [router.pathname]); + + function handleLogout() { + const access_token = localStorage.getItem("access_token"); + console.log(access_token); + try { + axios + .post( + "https://api-cookoff-prod.codechefvit.com/auth/logout", + {}, + { + headers: { + Authorization: `Bearer ${access_token}`, + }, + } + ) + .then((response) => { + console.log(response); + useTokenStore.setState({ access_token: "" }); + localStorage.removeItem("access_token"); + localStorage.removeItem("refresh_token"); + }) + .then(() => { + router.push("/login"); + }); + } catch { + (error) => { + console.log("Logout failed: " + error); + }; + } + } return ( <>
@@ -29,11 +61,12 @@ const Navbar = () => { Cook-Off 8.0
- - - +
); -}; +} export default Login; diff --git a/frontend/src/pages/[user]/Testcomplete.js b/frontend/src/pages/user/Testcomplete.js similarity index 97% rename from frontend/src/pages/[user]/Testcomplete.js rename to frontend/src/pages/user/Testcomplete.js index 9c73eaf..e9c956d 100644 --- a/frontend/src/pages/[user]/Testcomplete.js +++ b/frontend/src/pages/user/Testcomplete.js @@ -8,7 +8,7 @@ const TestComplete = () => { function returnToDashboard() { const user = router.query.user; - const fullPath = `/${user}`; + const fullPath = `/user`; router.push(fullPath); } return ( diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js new file mode 100644 index 0000000..f49e102 --- /dev/null +++ b/frontend/src/pages/user/index.js @@ -0,0 +1,48 @@ +import Navbar from "@/components/Navbar"; +import RoundWise from "@/components/roundWise"; +import CurrentProfile from "@/components/CurrentProfile"; +import { useEffect } from "react"; +import useTokenStore from "@/store/tokenProvider"; +import { useRouter } from "next/router"; +import axios from "axios"; + +function Dashboard() { + const router = useRouter(); + useEffect(() => { + const access_token = localStorage.getItem("access_token"); + try { + console.log(access_token); + axios + .get("https://api-cookoff-prod.codechefvit.com/auth/dashboard", { + headers: { + Authorization: `Bearer ${access_token}`, + }, + }) + .catch((error) => { + if (error.response && error.response.status === 401) { + router.push("/login"); + } else { + console.log(error); + } + }); + } catch { + (error) => { + console.log(error); + }; + } + }); + + return ( + <> +
+ +
+ + +
+
+ + ); +} + +export default Dashboard; diff --git a/frontend/src/pages/[user]/testPortal.js b/frontend/src/pages/user/testPortal.js similarity index 100% rename from frontend/src/pages/[user]/testPortal.js rename to frontend/src/pages/user/testPortal.js diff --git a/frontend/src/store/tokenProvider.js b/frontend/src/store/tokenProvider.js new file mode 100644 index 0000000..65e6ee3 --- /dev/null +++ b/frontend/src/store/tokenProvider.js @@ -0,0 +1,8 @@ +import { create } from "zustand"; + +const useTokenStore = create((set) => ({ + access_token: "", + refresh_token: "", +})); + +export default useTokenStore; diff --git a/frontend/src/utils/tokenRefresher.js b/frontend/src/utils/tokenRefresher.js new file mode 100644 index 0000000..2b26ee4 --- /dev/null +++ b/frontend/src/utils/tokenRefresher.js @@ -0,0 +1,34 @@ +import { useEffect } from "react"; +import useTokenStore from "@/store/tokenProvider"; +import axios from "axios"; + +function TokenRefresher() { + const access_token = useTokenStore((state) => state.access_token); + useEffect(() => { + const refresh_token = localStorage.getItem("refresh_token"); + const refreshTokenInterval = setInterval(() => { + axios + .post("https://api-cookoff-prod.codechefvit.com/auth/refresh", { + refreshToken: refresh_token, + }) + .then((response) => { + useTokenStore.setState({ + access_token: response.data.accessToken, + }); + localStorage.setItem("access_token", response.data.accessToken); + console.log("Access token refreshed." + access_token); + }) + .catch((error) => { + console.error("Token refresh failed:", error); + }); + }, 600000); + + return () => { + clearInterval(refreshTokenInterval); + }; + }, [access_token]); + + return null; +} + +export default TokenRefresher; From 4358b2606bd6195f5e2c76c7b87a6c7c521440d4 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Sat, 2 Sep 2023 19:02:15 +0530 Subject: [PATCH 38/88] fix:bug in dashboard --- frontend/src/components/roundWise.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index bbedb8a..4b8a799 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -7,7 +7,7 @@ function RoundWise() { const router = useRouter(); function startTest() { const user = router.query.user; - const fullPath = `/${user}/testPortal`; + const fullPath = `/user/testPortal`; router.push(fullPath); } return ( From c80545f7bf162ba9288c763fdc3a6a816a710661 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Wed, 6 Sep 2023 02:30:12 +0530 Subject: [PATCH 39/88] Feat:Integrate questions api --- frontend/src/components/CurrentProfile.js | 25 +++------ frontend/src/components/Navbar.js | 4 +- frontend/src/components/portal.js | 68 ++++++++++++++++++----- frontend/src/components/questions.js | 50 ++++++++++++----- frontend/src/components/roundWise.js | 22 +++----- frontend/src/components/textEditor.js | 2 +- frontend/src/pages/login.js | 44 +++++++++++---- frontend/src/pages/user/index.js | 48 ++++++++++++++-- frontend/src/pages/user/testPortal.js | 1 + frontend/src/utils/tokenRefresher.js | 6 +- 10 files changed, 190 insertions(+), 80 deletions(-) diff --git a/frontend/src/components/CurrentProfile.js b/frontend/src/components/CurrentProfile.js index 8830a3d..c359f3c 100644 --- a/frontend/src/components/CurrentProfile.js +++ b/frontend/src/components/CurrentProfile.js @@ -1,34 +1,25 @@ import Image from "next/image"; -import { BiSolidHide } from "react-icons/bi"; import { RxUpload } from "react-icons/rx"; import Profile from "../assets/CurrentProfile.svg"; -import { useRouter } from "next/router"; -import questionData from "../../Dummy_Data"; -const CurrentProfile = () => { - let round = 0; - for (let i = 0; i < questionData.length; i++) { - if (questionData[i].active) { - round = i; // Return the index where active is true - } - } - const router = useRouter(); - const user = router.query.user; + +function CurrentProfile(props){ + const {name, round} = props; return (
-
+

Current Profile

profileimg
-
+ {/*
-
+
*/}
@@ -36,7 +27,7 @@ const CurrentProfile = () => { className="w-[20vw] py-[11px] px-[33px] text-[#D9D9D999] bg-[#1F1F1F] rounded-[25px] text-[22px] font-semibold text-center" id="username" type="text" - value={user} + value={name} readOnly />
@@ -57,7 +48,7 @@ const CurrentProfile = () => { className="w-[20vw] py-[11px] px-[33px] text-[#D9D9D999] bg-[#1F1F1F] rounded-[25px] text-[22px] font-semibold text-center" id="round" type="text" - value={"Round " + (round + 1)} + value={"Round " + round} readOnly />
diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index cc29fa6..096b2e9 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -17,11 +17,10 @@ const Navbar = () => { function handleLogout() { const access_token = localStorage.getItem("access_token"); - console.log(access_token); try { axios .post( - "https://api-cookoff-prod.codechefvit.com/auth/logout", + "http://localhost:8080/auth/logout", {}, { headers: { @@ -30,7 +29,6 @@ const Navbar = () => { } ) .then((response) => { - console.log(response); useTokenStore.setState({ access_token: "" }); localStorage.removeItem("access_token"); localStorage.removeItem("refresh_token"); diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index 2ddc2a0..d1b5af2 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -1,14 +1,51 @@ import Question from "@/components/questions"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import questionData, { compilationError } from "../../Dummy_Data"; import EditorWindow from "./EditorWindow"; +import axios from "axios"; -export default function Portal() { +export default function Portal(props) { + const {round} = props; const length = questionData.length; const [clickedButton, setClickedButton] = useState(0); + const [qArr, setQArr] = useState([]); function handleClick(index) { setClickedButton(index); } + useEffect(() => { + const access_token = localStorage.getItem("access_token"); + const round = localStorage.getItem("round"); + try { + axios + .post("http://localhost:8080/ques/getRound", { round: round },{ + headers: { + Authorization: `Bearer ${access_token}`, + }, + }) + .then((response) => { + const responseData = response.data; + if (responseData && responseData.length > 0) { + setQArr(responseData); + } else { + console.log("No data received from the API."); + } + }) + .catch((error) => { + if (error.response && error.response.status === 400) { + console.log("400"); + } + }); + } catch { + (error) => { + console.log(error); + }; + } + },[]); + + useEffect(() => { + console.log("qArr:", qArr); + }, [qArr]); + return (
@@ -28,18 +65,21 @@ export default function Portal() { ))}
- + {qArr.length > 0 && ()} + - {points} + {points+ " points"}
Problem @@ -41,16 +43,23 @@ function Question(props) {

Input format

- - {inputFormat} - -
-
-

Output format

- - {outputformat} - + {inputFormat.map((format, index) => ( + + {format} + + ))}
+ {outputFormat.length > 0 && ( +
+

Output format

+ {outputFormat.map((format, index) => ( + + {format} + + ))} +
+ )} +

Sample Input 1

@@ -72,6 +81,12 @@ function Question(props) { {sampleOutput1}
+
+

Explanation

+ + {explanation1} + +

Sample Input 2

@@ -96,9 +111,18 @@ function Question(props) {

Explanation

- {explanation} + {explanation2}
+
+

Constraints

+ + {constraints.map((format, index) => ( + + {format} + + ))} +
); diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index 4b8a799..0a7c7cb 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -3,13 +3,14 @@ import eye from "./../assets/normaleye.svg"; import Image from "next/image"; import { useRouter } from "next/router"; -function RoundWise() { +function RoundWise(props) { + const { round, score,qArr } = props; const router = useRouter(); function startTest() { - const user = router.query.user; const fullPath = `/user/testPortal`; router.push(fullPath); } + return (
{questionData.map( @@ -20,7 +21,7 @@ function RoundWise() {

- ROUND {index + 1} + ROUND {round}

SeeRound
@@ -43,27 +44,22 @@ function RoundWise() { className="bg-[#4d4d4d] mt-2 rounded-md text-center text-[#C1BBB3] px-1" id="font_proxima" > - Score:  - 0 - / - {question.qdata.reduce( - (sum, question) => sum + parseFloat(question.points), - 0 - )} + TotalScore:  + {score}
- {question.qdata.map((question2, index2) => ( + {qArr.map((question2, index2) => (
- {index2 + 1}. {question2.objective} + {index2 + 1}. {question2.name}
- {question2.points} + {question2.points + " points"}
))} diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 526d784..a97b1f9 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -152,7 +152,7 @@ const TextEditor = ({ }; return ( -
+
diff --git a/frontend/src/pages/login.js b/frontend/src/pages/login.js index 5f8de02..219e88a 100644 --- a/frontend/src/pages/login.js +++ b/frontend/src/pages/login.js @@ -1,14 +1,14 @@ import { easeInOut, motion } from "framer-motion"; import { useFormik } from "formik"; import { useRouter } from "next/router"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import useTokenStore from "@/store/tokenProvider"; import axios from "axios"; const validate = (values) => { const errors = {}; if (!values.email) { - errors.email = "email Required"; + errors.email = "Email Required"; // } else if (values.email.length > 15) { // errors.email = "Must be 15 characters or less"; // } @@ -24,6 +24,7 @@ const validate = (values) => { }; function Login() { + const [error, setError] = useState(false); const router = useRouter(); const access_token = useTokenStore((state) => state.access_token); useEffect(() => { @@ -41,18 +42,34 @@ function Login() { console.log(values); try { axios - .post("https://api-cookoff-prod.codechefvit.com/auth/login", values) + .post("http://localhost:8080/auth/login", values) .then((response) => { - useTokenStore.setState({ - access_token: response.data.accessToken, - }); - localStorage.setItem("access_token", response.data.accessToken); - localStorage.setItem("refresh_token", response.data.refreshToken); + // useTokenStore.setState({ + // access_token: response.data.accessToken, + // }); + // localStorage.setItem("access_token", response.data.accessToken); + // localStorage.setItem("refresh_token", response.data.refreshToken); + if (response.status === 200) { + // Login was successful + + useTokenStore.setState({ + access_token: response.data.accessToken, + }); + localStorage.setItem("access_token", response.data.accessToken); + localStorage.setItem("refresh_token", response.data.refreshToken); + router.push("/user"); + } }) - .then(() => { - console.log("login successful"); - router.push("/user"); + .catch((error) => { + if (error.response && error.response.status === 400) { + setError(true); + console.log("Invalid credentials"); + } }); + // .then(() => { + // console.log("login successful"); + // router.push("/user"); + // }); } catch { (error) => { console.log("Login failed: " + error); @@ -70,6 +87,11 @@ function Login() { className="flex justify-center items-center h-screen" >
+ {error && ( +
+ Invalid credentials +
+ )}
{ const access_token = localStorage.getItem("access_token"); try { - console.log(access_token); axios - .get("https://api-cookoff-prod.codechefvit.com/auth/dashboard", { + .get("http://localhost:8080/auth/dashboard", { headers: { Authorization: `Bearer ${access_token}`, }, }) + .then((response) => { + setName(response.data.name); + setRound(response.data.roundQualified + 1); + setScore(response.data.score); + localStorage.setItem("round", response.data.roundQualified + 1); + }) .catch((error) => { if (error.response && error.response.status === 401) { router.push("/login"); @@ -32,13 +40,41 @@ function Dashboard() { } }); + useEffect(() => { + const access_token = localStorage.getItem("access_token"); + try { + axios + .post( + "http://localhost:8080/ques/getRound", + { round: round }, + { + headers: { + Authorization: `Bearer ${access_token}`, + }, + } + ) + .then((response) => { + const responseData = response.data; + if (responseData && responseData.length > 0) { + setQArr(responseData); + } else { + console.log("No data received from the API."); + } + }); + } catch { + (error) => { + console.log(error); + }; + } + }, []); + return ( <>
- - + +
diff --git a/frontend/src/pages/user/testPortal.js b/frontend/src/pages/user/testPortal.js index e7d72e2..0e29155 100644 --- a/frontend/src/pages/user/testPortal.js +++ b/frontend/src/pages/user/testPortal.js @@ -5,6 +5,7 @@ import { useRouter } from "next/router"; export default function TestPortal() { const router = useRouter(); + const round = router.query.round; useEffect(() => { const handleBackButton = (e) => { e.preventDefault(); diff --git a/frontend/src/utils/tokenRefresher.js b/frontend/src/utils/tokenRefresher.js index 2b26ee4..73ffd58 100644 --- a/frontend/src/utils/tokenRefresher.js +++ b/frontend/src/utils/tokenRefresher.js @@ -8,7 +8,7 @@ function TokenRefresher() { const refresh_token = localStorage.getItem("refresh_token"); const refreshTokenInterval = setInterval(() => { axios - .post("https://api-cookoff-prod.codechefvit.com/auth/refresh", { + .post("http://localhost:8080/auth/refresh", { refreshToken: refresh_token, }) .then((response) => { @@ -16,7 +16,9 @@ function TokenRefresher() { access_token: response.data.accessToken, }); localStorage.setItem("access_token", response.data.accessToken); - console.log("Access token refreshed." + access_token); + }) + .then(() => { + console.log("Token refreshed"); }) .catch((error) => { console.error("Token refresh failed:", error); From 2ae935d81c73f608bd2bf7f9d89d1de6c21329c6 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Wed, 6 Sep 2023 02:40:59 +0530 Subject: [PATCH 40/88] fix:Automatic login if access token is still valid --- frontend/src/pages/login.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/pages/login.js b/frontend/src/pages/login.js index 219e88a..2d99e61 100644 --- a/frontend/src/pages/login.js +++ b/frontend/src/pages/login.js @@ -28,6 +28,7 @@ function Login() { const router = useRouter(); const access_token = useTokenStore((state) => state.access_token); useEffect(() => { + const access_token = localStorage.getItem("access_token"); if (access_token) { router.push("/user"); } From 3a25e7e3d5069dbce83d7fe0240cab2368dbf774 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Fri, 8 Sep 2023 03:03:13 +0530 Subject: [PATCH 41/88] Feat:Integrate run test cases option by directly calling judge0 --- frontend/src/components/EditorWindow.js | 103 +++++++++- frontend/src/components/TestCase.js | 262 ++++++++++-------------- frontend/src/components/compError.js | 15 +- frontend/src/components/portal.js | 70 ++++--- frontend/src/components/textEditor.js | 73 ++++++- frontend/src/pages/login.js | 8 +- frontend/src/pages/user/index.js | 1 + 7 files changed, 329 insertions(+), 203 deletions(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 3bd02f2..9cd0c0a 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -7,15 +7,25 @@ import questionData from "../../Dummy_Data"; import { useRouter } from "next/router"; import Cookies from "js-cookie"; import useTimerStore from "@/store/timeProvider"; +import axios from "axios"; function EditorWindow(props) { + const { sampleOutput1, sampleOutput2, sampleInput1, sampleInput2, qArr } = + props; const router = useRouter(); const initialTime = useTimerStore((state) => state.Time); const user = router.query.user; const fullPath = `/user/Testcomplete`; const [runTestCases, setRunTestCases] = useState(false); - const [questionRun, setQuestionRun] = useState(new Set()); + const [questionRun, setQuestionRun] = useState(null); const [questionSubmit, setQuestionSubmit] = useState(new Set()); + const [questionRunArray, setQuestionQuestionRunArray] = useState(new Set()); + const [runTokens, setRunTokens] = useState([]); + const [runData, setRunData] = useState([]); + const [error, setError] = useState(false); + const [loading, setLoading] = useState(false); + const [code, setCode] = useState(null); + const [program, setProgram] = useState(null); useEffect(() => { if (initialTime === 0) { @@ -24,6 +34,58 @@ function EditorWindow(props) { } }, [initialTime]); + useEffect(() => { + function fetchSubmissionStatus(string) { + try { + axios + .get( + "http://139.59.4.43:2358/submissions/batch?tokens=" + + string.toString() + + "&base64_encoded=false&fields=status_id,stdout,expected_output,stdin,stderr,compile_output,source_code" + ) + .then((response) => { + console.log(response.data); + if ( + response.data.submissions[0].status_id === 1 || + response.data.submissions[1].status_id === 1 || + response.data.submissions[0].status_id === 2 || + response.data.submissions[1].status_id === 2 + ) { + setLoading(true); + setTimeout(() => { + fetchSubmissionStatus(str); + }, 3000); + } else if ( + (response.data.submissions[0].status_id === 3 || + response.data.submissions[0].status_id === 4) && + (response.data.submissions[1].status_id === 3 || + response.data.submissions[1].status_id === 4) + ) { + setError(false); + setLoading(false); + setRunData(response.data.submissions); + } else { + setLoading(false); + setError(true); + setRunData(response.data.submissions); + } + }); + } catch { + (error) => { + console.log(error); + }; + } + } + let str = []; + runTokens.forEach((element) => { + str.push(element.token); + }); + console.log(str.toString()); + if (runTokens.length > 0) { + fetchSubmissionStatus(str); + } + }, [runTokens]); + function submitQuestions() { Cookies.remove("timerTime"); router.push(fullPath); @@ -36,26 +98,45 @@ function EditorWindow(props) { setRunTestCases={setRunTestCases} setQuestionRun={setQuestionRun} setQuestionSubmit={setQuestionSubmit} + setRunTokens={setRunTokens} + setQuestionQuestionRunArray={setQuestionQuestionRunArray} + questionRunArray={questionRunArray} questionRun={questionRun} questionSubmit={questionSubmit} + expectedOutput1={sampleOutput1} + expectedOutput2={sampleOutput2} + input1={sampleInput1} + input2={sampleInput2} + setCode={setCode} + setProgram={setProgram} /> - {!props.error && questionRun.has(props.questionId) && ( - + {!loading && + !error && + runData.length > 0 && + questionRun === props.questionId && ( + + )} + + {loading && ( +
+

Cooking...

+
)} - {props.error && questionRun.has(props.questionId) && ( + {error && !loading && questionRun === props.questionId && (
- +
)} - {!props.error && questionSubmit.has(props.questionId) && ( + {questionSubmit.has(props.questionId) && ( )} - {questionSubmit.size === questionData[0].qdata.length && ( + {questionSubmit.size === qArr.length && (
*/}
-
+
- {testcasesdata[clickedButton].testcases.map((testcase, index) => ( + {runData.map((testcase, index) => (
- {testcase.hidden ? ( - testcase.status === "fail" ? ( - - ) : ( - - ) - ) : testcase.status === "fail" ? ( + {testcase.status_id === 4 ? ( - {customTestCaseCorrect === true && ( -
-
-
- Output -
-
- {customTestCaseData[clickedButton].output} -
-
-
-
- Expected Output -
-
- {customTestCaseData[clickedButton].expectedOutput} -
-
-
- )} - {customTestCaseCorrect === false && ( -
-
-
- Output -
-
- {customTestCaseData[clickedButton].output} -
-
-
-
- Expected Output -
-
- {customTestCaseData[clickedButton].expectedOutput} + { customOutput && + (loading ? ( +
loading...
+ ) : ( +
+
+
+ Output +
+
+ {customOutput} +
-
- )} + ))}
) : (
- Compile Message + Input
- { - testcasesdata[clickedButton].testcases[testCaseIndex] - .compileMessage - } + + {runData[testCaseIndex].stdin} +
- {testcasesdata[clickedButton].testcases[testCaseIndex].hidden && ( -
-
- locked -
-
- Hidden Test Case -
-
- )} - {!testcasesdata[clickedButton].testcases[testCaseIndex] - .hidden && ( + {
- Input + Expected Output
- { - testcasesdata[clickedButton].testcases[testCaseIndex] - .input - } + + {runData[testCaseIndex].expected_output} +
@@ -318,16 +283,15 @@ const TestCase = ({ clickedButton }) => {
- { - testcasesdata[clickedButton].testcases[testCaseIndex] - .output - } + + {runData[testCaseIndex].stdout} +
- )} + }
)}
diff --git a/frontend/src/components/compError.js b/frontend/src/components/compError.js index f886873..ff63980 100644 --- a/frontend/src/components/compError.js +++ b/frontend/src/components/compError.js @@ -1,12 +1,17 @@ import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; +import { useRef, useEffect } from "react"; function CompilationError(props) { - const { message, exitStatus, runTestCases } = props; + const { runTestCases, runData } = props; + const containerRef = useRef(null); + useEffect(() => { + containerRef.current.scrollIntoView(); + }, [runData]); return ( <> {runTestCases && ( -
+

Compilation Error :( @@ -19,15 +24,15 @@ function CompilationError(props) {

Compile Message

-
+
- {message} + {runData[0].compile_output || runData[0].stderr}

Exit Status

-
{exitStatus}
+
{runData[0].status_id}
 
diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index d1b5af2..ff05b6d 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -5,7 +5,7 @@ import EditorWindow from "./EditorWindow"; import axios from "axios"; export default function Portal(props) { - const {round} = props; + const { round } = props; const length = questionData.length; const [clickedButton, setClickedButton] = useState(0); const [qArr, setQArr] = useState([]); @@ -17,11 +17,15 @@ export default function Portal(props) { const round = localStorage.getItem("round"); try { axios - .post("http://localhost:8080/ques/getRound", { round: round },{ - headers: { - Authorization: `Bearer ${access_token}`, - }, - }) + .post( + "http://localhost:8080/ques/getRound", + { round: round }, + { + headers: { + Authorization: `Bearer ${access_token}`, + }, + } + ) .then((response) => { const responseData = response.data; if (responseData && responseData.length > 0) { @@ -40,7 +44,7 @@ export default function Portal(props) { console.log(error); }; } - },[]); + }, []); useEffect(() => { console.log("qArr:", qArr); @@ -65,28 +69,36 @@ export default function Portal(props) { ))}
- {qArr.length > 0 && ()} - - + {qArr.length > 0 && ( + + )} + {qArr.length > 0 && ( + + )}
); } diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index a97b1f9..dd5143b 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -1,6 +1,7 @@ import React, { useState, useRef, useEffect } from "react"; import { Editor } from "@monaco-editor/react"; import useTimerStore from "@/store/timeProvider"; +import axios from "axios"; const TextEditor = ({ questionId, @@ -9,43 +10,60 @@ const TextEditor = ({ setQuestionSubmit, questionRun, questionSubmit, + expectedOutput1, + expectedOutput2, + input1, + input2, + setRunTokens, + questionRunArray, + setQuestionQuestionRunArray, + setCode, + setProgram, }) => { const files = { "script.py": { name: "Python", language: "python", value: "n = int(input())\ninteger_list = map(int, input().split())", + code: 71, }, "script.java": { name: "Java", language: "java", value: - "public class Solution {\n\tpublic static void main(String[] args) {\n\n\t}\n}", + "public class Main {\n\tpublic static void main(String[] args) {\n\n\t}\n}", + code: 62, }, "script.c": { name: "C", language: "c", - value: "#include \nint main(){\n\n}", + value: "#include \nint main(){\n\treturn 0;\n}", + code: 50, }, "script.cpp": { name: "Cpp", language: "cpp", - value: "#include\nclass Solution {\n\n}", + value: + "#include\nusing namespace std;\n\nint main() {\n\treturn 0;\n}", + code: 54, }, "script.js": { name: "JS", language: "javascript", value: "function processData(input){\n\n}", + code: 63, }, "script.rs": { name: "Rust", language: "rust", value: "impl Solution{\n\n}", + code: 73, }, }; // const initialTime = useTimerStore((state) => state.Time); const [selectedLanguages, setSelectedLanguages] = useState({}); + const [langCode, setLangCode] = useState(null); const [fileName, setFileName] = useState("script.py"); const editorRef = useRef(null); const file = files[fileName]; @@ -72,6 +90,7 @@ const TextEditor = ({ ...existingCodeData, [questionId]: value, }; + setProgram(updatedCodeData[questionId]); localStorage.setItem("codeData", JSON.stringify(updatedCodeData)); }; @@ -118,30 +137,68 @@ const TextEditor = ({ [questionId]: codeValue, }; localStorage.setItem("codeData", JSON.stringify(updatedCodeData)); - console.log(codeValue); // alert(`Code for question ${questionId} stored in local storage.`); }; const handleClickRun = () => { getEditorValue(); + const existingCodeData = JSON.parse(localStorage.getItem("codeData")); + const codeValue = existingCodeData[questionId]; + const langCode = file.code; + setCode(langCode); + try { + axios + .post( + "http://139.59.4.43:2358/submissions/batch?base64_encoded=false", + { + submissions: [ + { + language_id: langCode, + source_code: codeValue, + stdin: input1, + expected_output: expectedOutput1, + }, + { + language_id: langCode, + source_code: codeValue, + stdin: input2, + expected_output: expectedOutput2, + }, + ], + } + ) + .then((response) => { + console.log(response.data); + if (response.status === 201) { + setRunTokens(response.data); + } + }); + } catch { + (error) => { + console.log(error); + }; + } setRunTestCases(true); if (questionSubmit.has(questionId)) { - setQuestionRun((prev) => new Set(prev.add(questionId))); + setQuestionRun(questionId); + setQuestionQuestionRunArray((prev) => new Set(prev.add(questionId))); setQuestionSubmit((prev) => { const newSet = new Set(prev); newSet.delete(questionId); return newSet; }); } else { - setQuestionRun((prev) => new Set(prev.add(questionId))); + setQuestionRun(questionId); + setQuestionQuestionRunArray((prev) => new Set(prev.add(questionId))); } }; const handleClickSubmit = () => { getEditorValue(); - if (questionRun.has(questionId)) { + if (questionRunArray.has(questionId)) { setQuestionSubmit((prev) => new Set(prev.add(questionId))); - setQuestionRun((prev) => { + setQuestionRun(null); + setQuestionQuestionRunArray((prev) => { const newSet = new Set(prev); newSet.delete(questionId); return newSet; diff --git a/frontend/src/pages/login.js b/frontend/src/pages/login.js index 2d99e61..a37e73e 100644 --- a/frontend/src/pages/login.js +++ b/frontend/src/pages/login.js @@ -32,7 +32,7 @@ function Login() { if (access_token) { router.push("/user"); } - }, [access_token, router]); + }, []); const formik = useFormik({ initialValues: { email: "", @@ -61,6 +61,12 @@ function Login() { router.push("/user"); } }) + .catch((error) => { + if (error.response && error.response.status === 400) { + setError(true); + console.log("Invalid credentials"); + } + }) .catch((error) => { if (error.response && error.response.status === 400) { setError(true); diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js index 0d0d243..89270f2 100644 --- a/frontend/src/pages/user/index.js +++ b/frontend/src/pages/user/index.js @@ -28,6 +28,7 @@ function Dashboard() { }) .catch((error) => { if (error.response && error.response.status === 401) { + localStorage.removeItem("access_token"); router.push("/login"); } else { console.log(error); From 696695a224636ed6e97a4647de257349cd24e2f6 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Thu, 14 Sep 2023 21:30:10 +0530 Subject: [PATCH 42/88] Feat:Integrate Submissions api, Fix:Refresh token on every http request --- frontend/src/components/EditorWindow.js | 85 +++++++++++-- frontend/src/components/Navbar.js | 5 +- frontend/src/components/TestCase.js | 20 +++- frontend/src/components/countdownTimer.js | 45 +++---- frontend/src/components/portal.js | 9 +- frontend/src/components/roundWise.js | 4 +- frontend/src/components/submissions.js | 139 +++++++++++++--------- frontend/src/components/textEditor.js | 70 ++++++++--- frontend/src/pages/_app.js | 2 - frontend/src/pages/login.js | 24 ++-- frontend/src/pages/user/Testcomplete.js | 3 +- frontend/src/pages/user/index.js | 49 ++++---- frontend/src/utils/RefreshToken.js | 22 ++++ 13 files changed, 332 insertions(+), 145 deletions(-) create mode 100644 frontend/src/utils/RefreshToken.js diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 9cd0c0a..0cf2124 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -3,10 +3,10 @@ import TestCase from "./TestCase"; import { useEffect, useState } from "react"; import CompilationError from "./compError"; import SubmitCode from "./submissions"; -import questionData from "../../Dummy_Data"; import { useRouter } from "next/router"; import Cookies from "js-cookie"; import useTimerStore from "@/store/timeProvider"; +import RefreshToken from "@/utils/RefreshToken"; import axios from "axios"; function EditorWindow(props) { @@ -24,18 +24,57 @@ function EditorWindow(props) { const [runData, setRunData] = useState([]); const [error, setError] = useState(false); const [loading, setLoading] = useState(false); + const [subLoading, setSubLoading] = useState(false); const [code, setCode] = useState(null); const [program, setProgram] = useState(null); + const [submissionArray, setSubmissionArray] = useState(null); + + useEffect(() => { + console.log("submissionArray:", submissionArray); + if (submissionArray !== null) { + console.log("yes"); + setSubLoading(false); + } + }, [submissionArray]); useEffect(() => { if (initialTime === 0) { - Cookies.remove("timerTime"); + document.cookie.split(";").forEach((c) => { + document.cookie = c + .replace(/^ +/, "") + .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); + }); + useTimerStore.setState({ Time: 2 * 60 * 60 }); router.push(fullPath); } }, [initialTime]); + useEffect(() => { + const storedData = Cookies.get(String(props.questionId + 1)); + const storedData2 = Cookies.get(String(props.questionId + 10)); + if (storedData) { + setRunData(JSON.parse(storedData)); + if ( + (JSON.parse(storedData)[0].status_id === 3 || + JSON.parse(storedData)[0].status_id === 4) && + (JSON.parse(storedData)[1].status_id === 3 || + JSON.parse(storedData)[1].status_id === 4) + ) { + setError(false); + setLoading(false); + } else { + setLoading(false); + setError(true); + } + } + if (storedData2) { + setSubmissionArray(JSON.parse(storedData2)); + } + }, [props.questionId]); + useEffect(() => { function fetchSubmissionStatus(string) { + console.log(props.questionId); try { axios .get( @@ -64,10 +103,18 @@ function EditorWindow(props) { setError(false); setLoading(false); setRunData(response.data.submissions); + Cookies.set( + String(props.questionId + 1), + JSON.stringify(response.data.submissions) + ); } else { setLoading(false); setError(true); setRunData(response.data.submissions); + Cookies.set( + String(props.questionId + 1), + JSON.stringify(response.data.submissions) + ); } }); } catch { @@ -87,13 +134,22 @@ function EditorWindow(props) { }, [runTokens]); function submitQuestions() { - Cookies.remove("timerTime"); + document.cookie.split(";").forEach((c) => { + document.cookie = c + .replace(/^ +/, "") + .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); + }); + useTimerStore.setState({ Time: 2 * 60 * 60 }); + RefreshToken(); router.push(fullPath); } return (
0 && - questionRun === props.questionId && ( + questionRunArray.has(props.questionId) && (!subLoading) && ( )} - {error && !loading && questionRun === props.questionId && ( + {subLoading && ( +
+

Cooking...

+
+ )} + + {error && !loading && questionRunArray.has(props.questionId) && (
)} - {questionSubmit.has(props.questionId) && ( - - )} - {questionSubmit.size === qArr.length && ( + {questionSubmit.has(props.questionId) && + !subLoading && + submissionArray !== null && ( + + )} + {questionSubmit.size === qArr.length && !subLoading && (
- {testcasesdata[clickedButton].testcases[testCaseIndex] - ?.compileMessage === undefined ? ( + {(testcasesdata[clickedButton].testcases[testCaseIndex] + ?.compileMessage === undefined) ? (
Loadinng...
) : testCaseClicked === null && customTestCase === clickedButton ? (
diff --git a/frontend/src/components/countdownTimer.js b/frontend/src/components/countdownTimer.js index 2f633e5..47a7054 100644 --- a/frontend/src/components/countdownTimer.js +++ b/frontend/src/components/countdownTimer.js @@ -3,37 +3,42 @@ import Cookies from 'js-cookie'; import useTimerStore from "@/store/timeProvider"; function CountdownTimer() { - // const initialTime = 2 * 60 * 60; const initialTime = useTimerStore((state) => state.Time); - // const [timeRemaining, setTimeRemaining] = useState(initialTime); + const updateTimer = (newTime) => { + useTimerStore.setState({ Time: newTime }); + Cookies.set('timerTime', newTime.toString()); + }; + useEffect(() => { - const storedTime = Cookies.get('timerTime'); - if (storedTime !== undefined) { - useTimerStore.setState({ Time: parseInt(storedTime, 10) }); - // setTimeRemaining(parseInt(storedTime, 10)); - } else { - useTimerStore.setState({Time: 2*60*60}); - } - }, []); + const handleVisibilityChange = () => { + if (document.visibilityState === 'hidden') { + Cookies.set('timerTime', initialTime.toString()); + } else { + const storedTime = Cookies.get('timerTime'); + if (storedTime !== undefined) { + updateTimer(parseInt(storedTime, 10)); + } + } + }; + + document.addEventListener('visibilitychange', handleVisibilityChange); + + return () => { + document.removeEventListener('visibilitychange', handleVisibilityChange); + }; + }, [initialTime]); + useEffect(() => { const interval = setInterval(() => { if (initialTime > 0) { - // setTimeRemaining((prevTime) => prevTime - 1); - useTimerStore.setState({ Time: useTimerStore.getState().Time - 1 }); + updateTimer(useTimerStore.getState().Time - 1); } else { - useTimerStore.setState({Time: 2*60*60}); + updateTimer(2 * 60 * 60); } }, 1000); - const handleBeforeUnload = () => { - Cookies.set('timerTime', initialTime.toString()); - }; - - window.addEventListener('beforeunload', handleBeforeUnload); - return () => { clearInterval(interval); - window.removeEventListener('beforeunload', handleBeforeUnload); }; }, [initialTime]); diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index ff05b6d..956d38e 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -3,15 +3,22 @@ import { useState, useEffect } from "react"; import questionData, { compilationError } from "../../Dummy_Data"; import EditorWindow from "./EditorWindow"; import axios from "axios"; +import RefreshToken from "@/utils/RefreshToken"; export default function Portal(props) { - const { round } = props; const length = questionData.length; const [clickedButton, setClickedButton] = useState(0); const [qArr, setQArr] = useState([]); function handleClick(index) { setClickedButton(index); } + useEffect(() => { + async function fetchData() { + await RefreshToken(); + } + + fetchData(); + }, []); useEffect(() => { const access_token = localStorage.getItem("access_token"); const round = localStorage.getItem("round"); diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index 0a7c7cb..110992f 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -2,11 +2,13 @@ import questionData from "../../Dummy_Data"; import eye from "./../assets/normaleye.svg"; import Image from "next/image"; import { useRouter } from "next/router"; +import RefreshToken from "@/utils/RefreshToken"; function RoundWise(props) { const { round, score,qArr } = props; const router = useRouter(); - function startTest() { + async function startTest() { + await RefreshToken(); const fullPath = `/user/testPortal`; router.push(fullPath); } diff --git a/frontend/src/components/submissions.js b/frontend/src/components/submissions.js index 15df531..8e7f121 100644 --- a/frontend/src/components/submissions.js +++ b/frontend/src/components/submissions.js @@ -1,10 +1,9 @@ -import { testcasesdata } from "../../Dummy_Data"; import { useState, useEffect, useRef } from "react"; import Image from "next/image"; import lock from "../assets/lock.svg"; function SubmitCode(props) { - const { clickedButton } = props; + const { clickedButton, submissionArray } = props; const containerRef = useRef(null); const [testCaseClicked, setTestCaseClicked] = useState(0); @@ -15,74 +14,98 @@ function SubmitCode(props) { return ( <>
-
+

Accepted !

-

Runtime: 0ms

-
- {testcasesdata[clickedButton].testcases.map((item, index) => ( - - ))} -
- {testcasesdata[clickedButton].testcases[testCaseClicked] - ?.compileMessage === undefined ? ( -
Loading...
- ) : testcasesdata[clickedButton].testcases[testCaseClicked].hidden ? ( -
-
- locked -
-
- Hidden Test Case -
+ +
+
+
Task #
+
Result
- ) : ( -
-
-

Input

-
- { - testcasesdata[clickedButton].testcases[testCaseClicked] - .input - } + {submissionArray.error[0] && ( +
+
+
0
+
+
Not Accepted
+
+ Compilation/RunTime Error +
+
+
+
+
1
+
Ignored
+
+
+
2
+
Ignored
-
-

Output

-
- { - testcasesdata[clickedButton].testcases[testCaseClicked] - .output - } + )} + {submissionArray.error[1] && ( +
+
+
0
+
Correct
+
+
+
1
+
+
Not Accepted
+
+ Time Limit Exceeded +
+
+
+
+
2
+
Ignored
-
-

- Expected Output -

-
- { - testcasesdata[clickedButton].testcases[testCaseClicked] - .expectedOutput - } + )} + {submissionArray.error[2] && ( +
+
+
0
+
Correct
+
+
+
1
+
Correct
+
+
+
2
+
+
Not Accepted
+
Wrong Output
+
-
- )} + )} + {!submissionArray.error[0] && + !submissionArray.error[1] && + !submissionArray.error[2] && ( +
+
+
0
+
Correct
+
+
+
1
+
Correct
+
+
+
2
+
Correct
+
+
+ )} +
diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index dd5143b..af7efb4 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -1,7 +1,9 @@ import React, { useState, useRef, useEffect } from "react"; import { Editor } from "@monaco-editor/react"; -import useTimerStore from "@/store/timeProvider"; +import useTokenStore from "@/store/tokenProvider"; import axios from "axios"; +import Cookies from "js-cookie"; +import RefreshToken from "@/utils/RefreshToken"; const TextEditor = ({ questionId, @@ -19,6 +21,9 @@ const TextEditor = ({ setQuestionQuestionRunArray, setCode, setProgram, + qArr, + setSubmissionArray, + setSubLoading, }) => { const files = { "script.py": { @@ -141,6 +146,7 @@ const TextEditor = ({ // alert(`Code for question ${questionId} stored in local storage.`); }; const handleClickRun = () => { + RefreshToken(); getEditorValue(); const existingCodeData = JSON.parse(localStorage.getItem("codeData")); const codeValue = existingCodeData[questionId]; @@ -172,6 +178,11 @@ const TextEditor = ({ if (response.status === 201) { setRunTokens(response.data); } + }) + .catch((error) => { + if (error.response.status === 401) { + RefreshToken(); + } }); } catch { (error) => { @@ -193,20 +204,51 @@ const TextEditor = ({ } }; - const handleClickSubmit = () => { - getEditorValue(); - if (questionRunArray.has(questionId)) { - setQuestionSubmit((prev) => new Set(prev.add(questionId))); - setQuestionRun(null); - setQuestionQuestionRunArray((prev) => { - const newSet = new Set(prev); - newSet.delete(questionId); - return newSet; - }); - } else { - setQuestionSubmit((prev) => new Set(prev.add(questionId))); + async function handleClickSubmit() { + try { + setSubLoading(true); + await RefreshToken(); + getEditorValue(); + const access_token = localStorage.getItem("access_token"); + const existingCodeData = JSON.parse(localStorage.getItem("codeData")); + const codeValue = existingCodeData[questionId]; + const langCode = file.code; + const q_ID = qArr[questionId]._id; + const response = await axios.post( + "http://localhost:8080/submit/eval/", + { + question_id: q_ID, + language_id: langCode, + code: codeValue, + }, + { + headers: { + Authorization: `Bearer ${access_token}`, + }, + } + ); + console.log(response.data); + if (response.status === 201) { + setSubmissionArray(response.data); + Cookies.set(String(questionId + 10), JSON.stringify(response.data)); + } + if (questionRunArray.has(questionId)) { + setQuestionSubmit((prev) => new Set(prev.add(questionId))); + setQuestionRun(null); + setQuestionQuestionRunArray((prev) => { + const newSet = new Set(prev); + newSet.delete(questionId); + return newSet; + }); + } else { + setQuestionSubmit((prev) => new Set(prev.add(questionId))); + } + } catch (error) { + if (error.response && error.response.status === 401) { + RefreshToken(); + } } - }; + } return (
diff --git a/frontend/src/pages/_app.js b/frontend/src/pages/_app.js index 13517a9..0eb8912 100644 --- a/frontend/src/pages/_app.js +++ b/frontend/src/pages/_app.js @@ -1,10 +1,8 @@ import "@/styles/globals.css"; -import TokenRefresher from "@/utils/tokenRefresher"; export default function App({ Component, pageProps }) { return ( <> - ); diff --git a/frontend/src/pages/login.js b/frontend/src/pages/login.js index a37e73e..1d6f57e 100644 --- a/frontend/src/pages/login.js +++ b/frontend/src/pages/login.js @@ -26,13 +26,6 @@ const validate = (values) => { function Login() { const [error, setError] = useState(false); const router = useRouter(); - const access_token = useTokenStore((state) => state.access_token); - useEffect(() => { - const access_token = localStorage.getItem("access_token"); - if (access_token) { - router.push("/user"); - } - }, []); const formik = useFormik({ initialValues: { email: "", @@ -52,13 +45,26 @@ function Login() { // localStorage.setItem("refresh_token", response.data.refreshToken); if (response.status === 200) { // Login was successful - + console.log(response.data.accessToken); useTokenStore.setState({ access_token: response.data.accessToken, }); localStorage.setItem("access_token", response.data.accessToken); localStorage.setItem("refresh_token", response.data.refreshToken); - router.push("/user"); + } + }) + .then(() => { + router.push("/user"); + }) + .catch((error) => { + if (error.response && error.response.status === 401) { + localStorage.removeItem("access_token"); + useTokenStore.setState({ + access_token: "", + }); + router.push("/login"); + } else { + console.log(error); } }) .catch((error) => { diff --git a/frontend/src/pages/user/Testcomplete.js b/frontend/src/pages/user/Testcomplete.js index e9c956d..ec9cb5b 100644 --- a/frontend/src/pages/user/Testcomplete.js +++ b/frontend/src/pages/user/Testcomplete.js @@ -2,10 +2,11 @@ import Navbar from "@/components/Navbar"; import Image from "next/image"; import tickIcon from "../../assets/TickIcon.svg"; import { useRouter } from "next/router"; +import RefreshToken from "@/utils/RefreshToken"; const TestComplete = () => { const router = useRouter(); - + function returnToDashboard() { const user = router.query.user; const fullPath = `/user`; diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js index 89270f2..405371c 100644 --- a/frontend/src/pages/user/index.js +++ b/frontend/src/pages/user/index.js @@ -3,7 +3,9 @@ import RoundWise from "@/components/roundWise"; import CurrentProfile from "@/components/CurrentProfile"; import { useEffect, useState } from "react"; import { useRouter } from "next/router"; +import useTokenStore from "@/store/tokenProvider"; import axios from "axios"; +import RefreshToken from "@/utils/RefreshToken"; function Dashboard() { const router = useRouter(); @@ -12,34 +14,35 @@ function Dashboard() { const [round, setRound] = useState(1); const [score, setScore] = useState(0); useEffect(() => { - const access_token = localStorage.getItem("access_token"); - try { - axios - .get("http://localhost:8080/auth/dashboard", { + async function fetchData() { + await RefreshToken(); + // Continue with the rest of your logic here + const access_token = localStorage.getItem("access_token"); + try { + const response = await axios.get("http://localhost:8080/auth/dashboard", { headers: { Authorization: `Bearer ${access_token}`, }, - }) - .then((response) => { - setName(response.data.name); - setRound(response.data.roundQualified + 1); - setScore(response.data.score); - localStorage.setItem("round", response.data.roundQualified + 1); - }) - .catch((error) => { - if (error.response && error.response.status === 401) { - localStorage.removeItem("access_token"); - router.push("/login"); - } else { - console.log(error); - } }); - } catch { - (error) => { - console.log(error); - }; + setName(response.data.name); + setRound(response.data.roundQualified + 1); + setScore(response.data.score); + localStorage.setItem("round", response.data.roundQualified + 1); + } catch (error) { + if (error.response && error.response.status === 401) { + localStorage.removeItem("access_token"); + useTokenStore.setState({ + access_token: "", + }); + router.push("/login"); + } else { + console.log(error); + } + } } - }); + + fetchData(); + }, []); useEffect(() => { const access_token = localStorage.getItem("access_token"); diff --git a/frontend/src/utils/RefreshToken.js b/frontend/src/utils/RefreshToken.js new file mode 100644 index 0000000..f2ddc55 --- /dev/null +++ b/frontend/src/utils/RefreshToken.js @@ -0,0 +1,22 @@ +import useTokenStore from "@/store/tokenProvider"; +import axios from "axios"; + +export default function RefreshToken() { + const refresh_token = localStorage.getItem("refresh_token"); + + return axios + .post("http://localhost:8080/auth/refresh", { + refreshToken: refresh_token, + }) + .then((response) => { + useTokenStore.setState({ + access_token: response.data.accessToken, + }); + localStorage.setItem("access_token", response.data.accessToken); + console.log("Token refreshed"); + }) + .catch((error) => { + console.error("Token refresh failed:", error); + }); + } + From 094cd5fff1051c0427bff58ec62d4bc913c7b4f9 Mon Sep 17 00:00:00 2001 From: Aaditya Mahanta Date: Thu, 14 Sep 2023 22:44:33 +0530 Subject: [PATCH 43/88] fix: build fix --- frontend/package-lock.json | 5548 ------------------------------------ frontend/pnpm-lock.yaml | 64 + 2 files changed, 64 insertions(+), 5548 deletions(-) delete mode 100644 frontend/package-lock.json diff --git a/frontend/package-lock.json b/frontend/package-lock.json deleted file mode 100644 index 6c9806c..0000000 --- a/frontend/package-lock.json +++ /dev/null @@ -1,5548 +0,0 @@ -{ - "name": "cookoff24-portal", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "cookoff24-portal", - "version": "0.1.0", - "dependencies": { - "@monaco-editor/react": "^4.5.2", - "@uidotdev/usehooks": "^2.1.1", - "autoprefixer": "10.4.15", - "axios": "^1.5.0", - "eslint": "8.47.0", - "eslint-config-next": "13.4.19", - "formik": "^2.4.3", - "framer-motion": "^10.16.1", - "js-cookie": "^3.0.5", - "next": "13.4.19", - "postcss": "8.4.28", - "react": "18.2.0", - "react-dom": "18.2.0", - "react-icons": "^4.10.1", - "react-markdown": "^8.0.7", - "react-modal": "^3.16.1", - "react-resizable": "^3.0.5", - "remark-gfm": "^3.0.1", - "tailwindcss": "3.3.3", - "zustand": "^4.4.1" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@babel/runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", - "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "optional": true, - "dependencies": { - "@emotion/memoize": "0.7.4" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "optional": true - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.7.0.tgz", - "integrity": "sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", - "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@monaco-editor/loader": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.3.tgz", - "integrity": "sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==", - "dependencies": { - "state-local": "^1.0.6" - }, - "peerDependencies": { - "monaco-editor": ">= 0.21.0 < 1" - } - }, - "node_modules/@monaco-editor/react": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.5.2.tgz", - "integrity": "sha512-emcWu6vg1OpXPiYll4aPOaXe8bwYB4UaaNTwtArFLgMoNGBzRZb2Xn0Bra2HMIFM7QLgs7fCGunHO5LkfT2LBA==", - "dependencies": { - "@monaco-editor/loader": "^1.3.3" - }, - "peerDependencies": { - "monaco-editor": ">= 0.25.0 < 1", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@next/env": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", - "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz", - "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==", - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", - "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", - "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", - "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", - "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", - "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", - "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", - "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", - "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", - "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", - "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==" - }, - "node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.5.tgz", - "integrity": "sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "18.2.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz", - "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==", - "peer": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "peer": true - }, - "node_modules/@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.1.tgz", - "integrity": "sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==", - "dependencies": { - "@typescript-eslint/scope-manager": "6.4.1", - "@typescript-eslint/types": "6.4.1", - "@typescript-eslint/typescript-estree": "6.4.1", - "@typescript-eslint/visitor-keys": "6.4.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.1.tgz", - "integrity": "sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==", - "dependencies": { - "@typescript-eslint/types": "6.4.1", - "@typescript-eslint/visitor-keys": "6.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.1.tgz", - "integrity": "sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.1.tgz", - "integrity": "sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==", - "dependencies": { - "@typescript-eslint/types": "6.4.1", - "@typescript-eslint/visitor-keys": "6.4.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.1.tgz", - "integrity": "sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==", - "dependencies": { - "@typescript-eslint/types": "6.4.1", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@uidotdev/usehooks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.1.1.tgz", - "integrity": "sha512-sVJ1jXU62Edh22dREEa3mHcHnH2MUgokuzLw9guNS30ADCkdhYASNZxg2V8iB83iwY5H+jSeSxjqGaFvsRrNBQ==", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "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/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", - "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001522", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", - "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "peer": true - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.498", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.498.tgz", - "integrity": "sha512-4LODxAzKGVy7CJyhhN5mebwe7U2L29P+0G+HUriHnabm0d7LSff8Yn7t+Wq+2/9ze2Fu1dhX7mww090xfv7qXQ==" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz", - "integrity": "sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==", - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.21.3", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "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/eslint": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "^8.47.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "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", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "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", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz", - "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==", - "dependencies": { - "@next/eslint-plugin-next": "13.4.19", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", - "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dependencies": { - "is-core-module": "^2.9.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/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "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==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "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==", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "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==" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "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==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.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==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formik": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.3.tgz", - "integrity": "sha512-2Dy79Szw3zlXmZiokUdKsn+n1ow4G8hRrC/n92cOWHNTWXCRpQXlyvz6HcjW7aSQZrldytvDOavYjhfmDnUq8Q==", - "funding": [ - { - "type": "individual", - "url": "https://opencollective.com/formik" - } - ], - "dependencies": { - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/fraction.js": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz", - "integrity": "sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/framer-motion": { - "version": "10.16.1", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.16.1.tgz", - "integrity": "sha512-K6TXr5mZtitC/dxQCBdg7xzdN0d5IAIrlaqCPKtIQVdzVPGC0qBuJKXggHX1vjnP5gPOFwB1KbCCTWcnFc3kWg==", - "dependencies": { - "tslib": "^2.4.0" - }, - "optionalDependencies": { - "@emotion/is-prop-valid": "^0.8.2" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hast-util-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", - "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "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.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "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", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/iterator.prototype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", - "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", - "dependencies": { - "define-properties": "^1.1.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "has-tostringtag": "^1.0.0", - "reflect.getprototypeof": "^1.0.3" - } - }, - "node_modules/jiti": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz", - "integrity": "sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "engines": { - "node": ">=14" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, - "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", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-definitions": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", - "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", - "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", - "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", - "dependencies": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-footnote": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", - "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", - "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-util-normalize-identifier": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", - "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", - "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", - "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", - "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-definitions": "^5.0.0", - "micromark-util-sanitize-uri": "^1.1.0", - "trim-lines": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", - "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", - "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-footnote": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", - "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", - "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", - "dependencies": { - "micromark-core-commonmark": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", - "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", - "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", - "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", - "dependencies": { - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", - "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/monaco-editor": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.41.0.tgz", - "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==", - "peer": true - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz", - "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==", - "dependencies": { - "@next/env": "13.4.19", - "@swc/helpers": "0.5.1", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0", - "zod": "3.21.4" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=16.8.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "13.4.19", - "@next/swc-darwin-x64": "13.4.19", - "@next/swc-linux-arm64-gnu": "13.4.19", - "@next/swc-linux-arm64-musl": "13.4.19", - "@next/swc-linux-x64-gnu": "13.4.19", - "@next/swc-linux-x64-musl": "13.4.19", - "@next/swc-win32-arm64-msvc": "13.4.19", - "@next/swc-win32-ia32-msvc": "13.4.19", - "@next/swc-win32-x64-msvc": "13.4.19" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", - "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.21.2", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "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==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", - "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-draggable": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz", - "integrity": "sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==", - "dependencies": { - "clsx": "^1.1.1", - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "react": ">= 16.3.0", - "react-dom": ">= 16.3.0" - } - }, - "node_modules/react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" - }, - "node_modules/react-icons": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", - "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==", - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-markdown": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz", - "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/react-markdown/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/react-modal": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz", - "integrity": "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==", - "dependencies": { - "exenv": "^1.2.0", - "prop-types": "^15.7.2", - "react-lifecycles-compat": "^3.0.0", - "warning": "^4.0.3" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", - "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18" - } - }, - "node_modules/react-resizable": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/react-resizable/-/react-resizable-3.0.5.tgz", - "integrity": "sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w==", - "dependencies": { - "prop-types": "15.x", - "react-draggable": "^4.0.3" - }, - "peerDependencies": { - "react": ">= 16.3" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", - "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/remark-gfm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", - "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^2.0.0", - "micromark-extension-gfm": "^2.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", - "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", - "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "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==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/state-local": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", - "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==" - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.2.tgz", - "integrity": "sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-api-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz", - "integrity": "sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==", - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", - "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zustand": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.1.tgz", - "integrity": "sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==", - "dependencies": { - "use-sync-external-store": "1.2.0" - }, - "engines": { - "node": ">=12.7.0" - }, - "peerDependencies": { - "@types/react": ">=16.8", - "immer": ">=9.0", - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "immer": { - "optional": true - }, - "react": { - "optional": true - } - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 71b7ec7..9a07ccc 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -14,6 +14,9 @@ dependencies: autoprefixer: specifier: 10.4.15 version: 10.4.15(postcss@8.4.28) + axios: + specifier: ^1.5.0 + version: 1.5.0 eslint: specifier: 8.47.0 version: 8.47.0 @@ -593,6 +596,10 @@ packages: has-symbols: 1.0.3 dev: false + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + /autoprefixer@10.4.15(postcss@8.4.28): resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} engines: {node: ^10 || ^12 || >=14} @@ -619,6 +626,16 @@ packages: engines: {node: '>=4'} dev: false + /axios@1.5.0: + resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} + dependencies: + follow-redirects: 1.15.2 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: @@ -742,6 +759,13 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: false + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + /comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false @@ -824,6 +848,11 @@ packages: object-keys: 1.1.1 dev: false + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -1327,12 +1356,31 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: false + /follow-redirects@1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: false + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + /formik@2.4.3(react@18.2.0): resolution: {integrity: sha512-2Dy79Szw3zlXmZiokUdKsn+n1ow4G8hRrC/n92cOWHNTWXCRpQXlyvz6HcjW7aSQZrldytvDOavYjhfmDnUq8Q==} peerDependencies: @@ -2304,6 +2352,18 @@ packages: picomatch: 2.3.1 dev: false + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -2653,6 +2713,10 @@ packages: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} dev: false + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} From a1ec8e796b4bc3e571ce3c38f86e333e0341ff11 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Sun, 17 Sep 2023 00:00:13 +0530 Subject: [PATCH 44/88] Fix:Submission response for compilation error, sample testcases handled in a better way --- frontend/Dummy_Data.js | 514 ---------------------- frontend/src/components/EditorWindow.js | 63 ++- frontend/src/components/Navbar.js | 2 +- frontend/src/components/TestCase.js | 20 +- frontend/src/components/countdownTimer.js | 18 +- frontend/src/components/portal.js | 38 +- frontend/src/components/questions.js | 120 +++-- frontend/src/components/roundWise.js | 105 +++-- frontend/src/components/submissions.js | 158 +++---- frontend/src/components/textEditor.js | 81 ++-- frontend/src/pages/login.js | 88 ++-- frontend/src/pages/user/Testcomplete.js | 5 +- frontend/src/pages/user/index.js | 52 +-- frontend/src/pages/user/testPortal.js | 4 +- frontend/src/utils/RefreshToken.js | 33 +- frontend/src/utils/tokenRefresher.js | 36 -- 16 files changed, 351 insertions(+), 986 deletions(-) delete mode 100644 frontend/Dummy_Data.js delete mode 100644 frontend/src/utils/tokenRefresher.js diff --git a/frontend/Dummy_Data.js b/frontend/Dummy_Data.js deleted file mode 100644 index e52057f..0000000 --- a/frontend/Dummy_Data.js +++ /dev/null @@ -1,514 +0,0 @@ -const questionData = [ - { - round: 1, - active: false, - qdata: [ - { - objective: "hello World", - points: "10 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. - -There are two types of synchronization and they can complement each other: - -* 1.Step 1. -* 2.Step 2. -* 3.Step 3. - -- This will allow you to fetch your workspace on any other device. - > To start syncing your workspace, just sign in with Google in the menu. -`, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. -Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. - -**Constraints** --------------- -It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. - -The second line prints the string, s. - -The third line prints the sentence, sen.`, - sampleInput: [ - `10 4 -4.0 2.0`, - `10 4 -4.0 2.0`, - ], - sampleOutput: [ - `14 6 -6.0 2.0`, - `14 6 -6.0 2.0`, - ], - explanation: ` -When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. -When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #2", - points: "15 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. - -There are two types of synchronization and they can complement each other: - -* 1.Step 1. -* 2.Step 2. -* 3.Step 3. - -- This will allow you to fetch your workspace on any other device. - > To start syncing your workspace, just sign in with Google in the menu. -`, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. -Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. - -**Constraints** --------------- -It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. - -The second line prints the string, s. - -The third line prints the sentence, sen.`, - sampleInput: [ - `10 18 -4.0 2.0`, - `10 90 -4.0 2.0`, - ], - sampleOutput: [ - `14 1 -6.0 2.0`, - `14 11 -6.0 2.0`, - ], - explanation: ` -When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. -When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #3", - points: "20 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. - -There are two types of synchronization and they can complement each other: - -* 1.Step 1. -* 2.Step 2. -* 3.Step 3. - -- This will allow you to fetch your workspace on any other device. - > To start syncing your workspace, just sign in with Google in the menu. -`, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. -Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. - -**Constraints** --------------- -It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. - -The second line prints the string, s. - -The third line prints the sentence, sen.`, - sampleInput: [ - `10 182 -4.0 2.0`, - `10 9 -4.0 2.0`, - ], - sampleOutput: [ - `14 0 -6.0 2.0`, - `14 110 -6.0 2.0`, - ], - explanation: ` -When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. -When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - ], - }, - { - round: 2, - active: true, - qdata: [ - { - objective: "hello World round 2", - points: "10 points", - task: ``, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. - Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. - - **Constraints** - -------------- - It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. - - The second line prints the string, s. - - The third line prints the sentence, sen.`, - sampleInput: [ - `10 4 - 4.0 2.0`, - `10 4 - 4.0 2.0`, - ], - sampleOutput: [ - `14 6 - 6.0 2.0`, - `14 6 - 6.0 2.0`, - ], - explanation: ` - When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. - When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #2 round 2", - points: "15 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. - - There are two types of synchronization and they can complement each other: - - * 1.Step 1. - * 2.Step 2. - * 3.Step 3. - - - This will allow you to fetch your workspace on any other device. - > To start syncing your workspace, just sign in with Google in the menu. - `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. - Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. - - **Constraints** - -------------- - It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. - - The second line prints the string, s. - - The third line prints the sentence, sen.`, - sampleInput: [ - `10 18 - 4.0 2.0`, - `10 90 - 4.0 2.0`, - ], - sampleOutput: [ - `14 1 - 6.0 2.0`, - `14 11 - 6.0 2.0`, - ], - explanation: ` - When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. - When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #3 round 2", - points: "20 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. - - There are two types of synchronization and they can complement each other: - - * 1.Step 1. - * 2.Step 2. - * 3.Step 3. - - - This will allow you to fetch your workspace on any other device. - > To start syncing your workspace, just sign in with Google in the menu. - `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. - Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. - - **Constraints** - -------------- - It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. - - The second line prints the string, s. - - The third line prints the sentence, sen.`, - sampleInput: [ - `10 182 - 4.0 2.0`, - `10 9 - 4.0 2.0`, - ], - sampleOutput: [ - `14 0 - 6.0 2.0`, - `14 110 - 6.0 2.0`, - ], - explanation: ` - When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. - When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - ], - }, - { - round: 3, - active: false, - qdata: [ - { - objective: "hello World round 3", - points: "10 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. - - There are two types of synchronization and they can complement each other: - - * 1.Step 1. - * 2.Step 2. - * 3.Step 3. - - - This will allow you to fetch your workspace on any other device. - > To start syncing your workspace, just sign in with Google in the menu. - `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. - Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. - - **Constraints** - -------------- - It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. - - The second line prints the string, s. - - The third line prints the sentence, sen.`, - sampleInput: [ - `10 4 - 4.0 2.0`, - `10 4 - 4.0 2.0`, - ], - sampleOutput: [ - `14 6 - 6.0 2.0`, - `14 6 - 6.0 2.0`, - ], - explanation: ` - When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. - When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #2 round 3", - points: "15 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. - - There are two types of synchronization and they can complement each other: - - * 1.Step 1. - * 2.Step 2. - * 3.Step 3. - - - This will allow you to fetch your workspace on any other device. - > To start syncing your workspace, just sign in with Google in the menu. - `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. - Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. - - **Constraints** - -------------- - It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. - - The second line prints the string, s. - - The third line prints the sentence, sen.`, - sampleInput: [ - `10 18 - 4.0 2.0`, - `10 90 - 4.0 2.0`, - ], - sampleOutput: [ - `14 1 - 6.0 2.0`, - `14 11 - 6.0 2.0`, - ], - explanation: ` - When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. - When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - { - objective: "hello World #3 round 3", - points: "20 points", - task: `Synchronization is one of the biggest features of StackEdit. It enables you to synchronize any file in your workspace with other files stored in your **Google Drive**, your **Dropbox** and your **GitHub** accounts. This allows you to keep writing on other devices, collaborate with people you share the file with, integrate easily into your workflow... The synchronization mechanism takes place every minute in the background, downloading, merging, and uploading file modifications. - - There are two types of synchronization and they can complement each other: - - * 1.Step 1. - * 2.Step 2. - * 3.Step 3. - - - This will allow you to fetch your workspace on any other device. - > To start syncing your workspace, just sign in with Google in the menu. - `, - inputFormat: `The first line contains a single integer, q, denoting the number of queries. - Each line of the subsequent lines contains a single query in the form described in the problem statement above. All three queries start with an integer denoting the query q, but only query 1 is followed by an additional space-separated value, x, denoting the value to be enqueued. - - **Constraints** - -------------- - It is guaranteed that a valid answer always exists for each query of type 1.`, - outputFormat: `Print three lines of output. The first line prints the character, ch. - - The second line prints the string, s. - - The third line prints the sentence, sen.`, - sampleInput: [ - `10 182 - 4.0 2.0`, - `10 9 - 4.0 2.0`, - ], - sampleOutput: [ - `14 0 - 6.0 2.0`, - `14 110 - 6.0 2.0`, - ], - explanation: ` - When we sum the integers 10 and 4 , we get the integer 14. When we subtract the second number 4 from the first number 10, we get as their difference. - When we sum the floating-point numbers 4.0 and 2.0, we get 6.0. When we subtract the second number 2.0 from the first number 4.0, we get 2.0 as their difference.`, - }, - ], - }, -]; - -export const compilationError = [ - { - error: false, - compileMessage: `Solution.cpp: In function 'int simpleArraySum -(std::vector)': - -Solution.cpp:18:1: error: no return statement in function returning non-void -[-Werror=return-type] - -} - -^ - -cc1plus: some warnings being treated as errors`, - exitStatus: "1", - }, - { error: false }, - { - error: false, - compileMessage: `Solution.cpp: In function 'int simpleArraySum -(std::vector)': - -Solution.cpp:18:1: error: no return statement in function returning non-void -[-Werror=return-type] - -} - -^ - -cc1plus: some warnings being treated as errors`, - exitStatus: "1", - }, -]; - -export default questionData; - -const testcasesdata = [ - { - question_id: 1, - - testcases: [ - { - input: [3, 2, 4], - output: [6], - hidden: false, - status: "pass", - compileMessage: "hello world", - expectedOutput: [6], - }, - { - input: [1, 3, 4], - output: [7], - hidden: false, - status: "pass", - compileMessage: "hello world 2", - expectedOutput: [7], - }, - { - input: [3, 3], - output: [6], - hidden: true, - status: "fail", - compileMessage: "hello world 3", - expectedOutput: [7], - }, - ], - }, - { - question_id: 2, - - testcases: [ - { - input: "radar", - output: "true", - hidden: false, - status: "pass", - compileMessage: "hello world", - expectedOutput: "true", - }, - { - input: "apple", - output: "false", - hidden: true, - status: "pass", - compileMessage: "hello world 2", - expectedOutput: "false", - }, - { - input: "nice", - output: "false", - hidden: true, - status: "pass", - compileMessage: "hello world 3", - expectedOutput: "false", - }, - ], - }, - { - question_id: 3, - - testcases: [ - { - input: 4, - output: ["1", "2", "Fizz", "Buzz"], - hidden: false, - status: "pass", - compileMessage: "hello world", - expectedOutput: ["1", "2", "Fizz", "Buzz"], - }, - { - input: 15, - output: ["1", "2", "Fizz", "13", "14", "FizzBuzz"], - hidden: true, - status: "fail", - compileMessage: "hello world", - expectedOutput: ["1", "2", "Fizz", "13", "14"], - }, - ], - }, -]; - -export { testcasesdata }; - -export const customTestCaseData = [ - { output: "hello world", expectedOutput: "hello world" }, - { output: "hello world", expectedOutput: "hello world2" }, - { output: "hello world3", expectedOutput: "hello world3" }, -]; \ No newline at end of file diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 0cf2124..f7cdbe9 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -10,8 +10,7 @@ import RefreshToken from "@/utils/RefreshToken"; import axios from "axios"; function EditorWindow(props) { - const { sampleOutput1, sampleOutput2, sampleInput1, sampleInput2, qArr } = - props; + const { sampleOutputs, sampleInputs, qArr } = props; const router = useRouter(); const initialTime = useTimerStore((state) => state.Time); const user = router.query.user; @@ -45,6 +44,7 @@ function EditorWindow(props) { .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); useTimerStore.setState({ Time: 2 * 60 * 60 }); + RefreshToken(); router.push(fullPath); } }, [initialTime]); @@ -52,21 +52,18 @@ function EditorWindow(props) { useEffect(() => { const storedData = Cookies.get(String(props.questionId + 1)); const storedData2 = Cookies.get(String(props.questionId + 10)); + if (storedData) { - setRunData(JSON.parse(storedData)); - if ( - (JSON.parse(storedData)[0].status_id === 3 || - JSON.parse(storedData)[0].status_id === 4) && - (JSON.parse(storedData)[1].status_id === 3 || - JSON.parse(storedData)[1].status_id === 4) - ) { - setError(false); - setLoading(false); - } else { - setLoading(false); - setError(true); - } + const runData = JSON.parse(storedData); + const allRunDataValid = runData.every( + (submission) => submission.status_id === 3 || submission.status_id === 4 + ); + + setLoading(false); + setError(!allRunDataValid); + setRunData(runData); } + if (storedData2) { setSubmissionArray(JSON.parse(storedData2)); } @@ -83,37 +80,38 @@ function EditorWindow(props) { "&base64_encoded=false&fields=status_id,stdout,expected_output,stdin,stderr,compile_output,source_code" ) .then((response) => { - console.log(response.data); + const submissions = response.data.submissions; + if ( - response.data.submissions[0].status_id === 1 || - response.data.submissions[1].status_id === 1 || - response.data.submissions[0].status_id === 2 || - response.data.submissions[1].status_id === 2 + submissions.some( + (submission) => + submission.status_id === 1 || submission.status_id === 2 + ) ) { setLoading(true); setTimeout(() => { fetchSubmissionStatus(str); }, 3000); } else if ( - (response.data.submissions[0].status_id === 3 || - response.data.submissions[0].status_id === 4) && - (response.data.submissions[1].status_id === 3 || - response.data.submissions[1].status_id === 4) + submissions.every( + (submission) => + submission.status_id === 3 || submission.status_id === 4 + ) ) { setError(false); setLoading(false); - setRunData(response.data.submissions); + setRunData(submissions); Cookies.set( String(props.questionId + 1), - JSON.stringify(response.data.submissions) + JSON.stringify(submissions) ); } else { setLoading(false); setError(true); - setRunData(response.data.submissions); + setRunData(submissions); Cookies.set( String(props.questionId + 1), - JSON.stringify(response.data.submissions) + JSON.stringify(submissions) ); } }); @@ -159,17 +157,16 @@ function EditorWindow(props) { questionRunArray={questionRunArray} questionRun={questionRun} questionSubmit={questionSubmit} - expectedOutput1={sampleOutput1} - expectedOutput2={sampleOutput2} - input1={sampleInput1} - input2={sampleInput2} + expectedOutputs={sampleOutputs} + inputs={sampleInputs} setCode={setCode} setProgram={setProgram} /> {!loading && !error && runData.length > 0 && - questionRunArray.has(props.questionId) && (!subLoading) && ( + questionRunArray.has(props.questionId) && + !subLoading && ( { try { axios .post( - "http://localhost:8080/auth/logout", + "https://api-cookoff-prod.codechefvit.com/auth/logout", {}, { headers: { diff --git a/frontend/src/components/TestCase.js b/frontend/src/components/TestCase.js index 42cab44..297b683 100644 --- a/frontend/src/components/TestCase.js +++ b/frontend/src/components/TestCase.js @@ -2,13 +2,8 @@ import Image from "next/image"; import correct from "../assets/correct.svg"; import wrong from "../assets/wrong.svg"; import redopenEye from "../assets/redopenEye.svg"; -import redhiddenEye from "../assets/redhiddenEye.svg"; import greenopenEye from "../assets/greenopenEye.svg"; -import greenhiddenEye from "../assets/greenhiddenEye.svg"; -import lock from "../assets/lock.svg"; -import { testcasesdata } from "../../Dummy_Data"; import { useState, useEffect, useRef } from "react"; -import { customTestCaseData } from "../../Dummy_Data"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; import axios from "axios"; @@ -31,14 +26,6 @@ const TestCase = ({ clickedButton, runData, code, program }) => { (testcase) => testcase.status_id === 4 ).length; - // const totalVisibleCases = testcasesdata[clickedButton].testcases.filter( - // (testcase) => testcase.hidden === false - // ).length; - - // const totalHiddenCases = runData.filter( - // (testcase) => testcase.hidden === true - // ).length; - useEffect(() => { setTestCaseClicked(0); setTestCaseIndex(0); @@ -162,7 +149,7 @@ const TestCase = ({ clickedButton, runData, code, program }) => { > wrong
- Test Case {index} + Test Case {index+1}
{ > wrong
- Test Case {index} + Test Case {index+1}
{
- {(testcasesdata[clickedButton].testcases[testCaseIndex] - ?.compileMessage === undefined) ? ( + {(runData[testCaseIndex].stdin === undefined) ? (
Loadinng...
) : testCaseClicked === null && customTestCase === clickedButton ? (
diff --git a/frontend/src/components/countdownTimer.js b/frontend/src/components/countdownTimer.js index 47a7054..77f2bb3 100644 --- a/frontend/src/components/countdownTimer.js +++ b/frontend/src/components/countdownTimer.js @@ -3,19 +3,23 @@ import Cookies from 'js-cookie'; import useTimerStore from "@/store/timeProvider"; function CountdownTimer() { - const initialTime = useTimerStore((state) => state.Time); + const [initialTime, setInitialTime] = useState(() => { + const storedTime = localStorage.getItem('timerTime'); + return storedTime ? parseInt(storedTime, 10) : useTimerStore.getState().Time; + }); + const updateTimer = (newTime) => { - useTimerStore.setState({ Time: newTime }); - Cookies.set('timerTime', newTime.toString()); + setInitialTime(newTime); + localStorage.setItem('timerTime', newTime.toString()); }; useEffect(() => { const handleVisibilityChange = () => { if (document.visibilityState === 'hidden') { - Cookies.set('timerTime', initialTime.toString()); + localStorage.setItem('timerTime', initialTime.toString()); } else { - const storedTime = Cookies.get('timerTime'); - if (storedTime !== undefined) { + const storedTime = localStorage.getItem('timerTime'); + if (storedTime !== null) { updateTimer(parseInt(storedTime, 10)); } } @@ -31,7 +35,7 @@ function CountdownTimer() { useEffect(() => { const interval = setInterval(() => { if (initialTime > 0) { - updateTimer(useTimerStore.getState().Time - 1); + updateTimer(initialTime - 1); } else { updateTimer(2 * 60 * 60); } diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index 956d38e..af9f02b 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -1,31 +1,29 @@ import Question from "@/components/questions"; import { useState, useEffect } from "react"; -import questionData, { compilationError } from "../../Dummy_Data"; import EditorWindow from "./EditorWindow"; import axios from "axios"; import RefreshToken from "@/utils/RefreshToken"; export default function Portal(props) { - const length = questionData.length; const [clickedButton, setClickedButton] = useState(0); const [qArr, setQArr] = useState([]); function handleClick(index) { setClickedButton(index); } - useEffect(() => { - async function fetchData() { - await RefreshToken(); - } + // useEffect(() => { + // async function fetchData() { + // await RefreshToken(); + // } - fetchData(); - }, []); + // fetchData(); + // }, []); useEffect(() => { const access_token = localStorage.getItem("access_token"); const round = localStorage.getItem("round"); try { axios .post( - "http://localhost:8080/ques/getRound", + "https://api-cookoff-prod.codechefvit.com/ques/getRound", { round: round }, { headers: { @@ -60,7 +58,7 @@ export default function Portal(props) { return (
- {questionData.map((question, index) => ( + {qArr.map((question, index) => (
diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index d7e6b38..dfe6661 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -11,15 +11,18 @@ function Question(props) { task, inputFormat, outputFormat, - sampleInput1, - sampleOutput1, - explanation1, - sampleInput2, - sampleOutput2, - explanation2, + sampleInputs, + sampleOutputs, + explanations, constraints, } = props; + const inputElements = []; + + for (let i = 0; i < sampleInputs.length; i++) { + inputElements.push(i); + } + return (
@@ -33,7 +36,7 @@ function Question(props) { className="bg-[#EDEDED] w-fit text-black rounded px-2 my-2 font-semibold" id="points" > - {points+ " points"} + {points + " points"}
Problem @@ -59,61 +62,56 @@ function Question(props) { ))}
)} - -
-

Sample Input 1

-
- - {sampleInput1} - - + {inputElements.map((input, index) => ( +
+ {sampleInputs[input] !== null && + sampleInputs[input] !== undefined && + sampleInputs[input] !== "" && ( +
+

+ Sample Input {index + 1} +

+
+ + {sampleInputs[input]} + + +
+
+ )} + {sampleOutputs[input] !== null && + sampleOutputs[input] !== undefined && + sampleOutputs[input] !== "" && ( +
+

+ Sample Output {index + 1} +

+
+ + {sampleOutputs[input]} + +
+
+ )} + {explanations[input] !== null && + explanations[input] !== undefined && + explanations[input] !== "" && ( +
+

Explanation

+ + {explanations[input]} + +
+ )}
-

Sample Output 1

-
- - {sampleOutput1} - -
-
-

Explanation

- - {explanation1} - -
-

Sample Input 2

-
- - {sampleInput2} - - -
-

Sample Output 2

-
- - {sampleOutput2} - -
-
-
-

Explanation

- - {explanation2} - -
+ ))}

Constraints

diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index 110992f..4edfc14 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -1,76 +1,71 @@ -import questionData from "../../Dummy_Data"; import eye from "./../assets/normaleye.svg"; import Image from "next/image"; import { useRouter } from "next/router"; import RefreshToken from "@/utils/RefreshToken"; function RoundWise(props) { - const { round, score,qArr } = props; + const { round, score, qArr } = props; const router = useRouter(); async function startTest() { await RefreshToken(); const fullPath = `/user/testPortal`; router.push(fullPath); } - + return (
- {questionData.map( - (question, index) => - question.active && ( -
-
-
-
-

- ROUND {round} -

- SeeRound -
-
- -
-
-
-
-
-

0/{question.qdata.length}

-

Solved

-
-
- TotalScore:  - {score} -
+
+
+
+
+

+ ROUND {round} +

+ SeeRound +
+
+ +
+
+
+
+
+

0/{qArr.length}

+

Solved

+
+
+ TotalScore:  + {score} +
+
+
+ {qArr.map((question2, index2) => ( +
+
+ {index2 + 1}. {question2.name}
-
- {qArr.map((question2, index2) => ( -
-
- {index2 + 1}. {question2.name} -
-
- {question2.points + " points"} -
-
- ))} +
+ {question2.points + " points"}
-
+ ))}
- ) - )} +
+
+
+
- {(runData[testCaseIndex].stdin === undefined) ? ( + {runData[testCaseIndex].stdin === undefined ? (
Loadinng...
) : testCaseClicked === null && customTestCase === clickedButton ? (
@@ -221,9 +210,11 @@ const TestCase = ({ clickedButton, runData, code, program }) => { > Run - { customOutput && + {customOutput && (loading ? ( -
loading...
+
+ loading... +
) : (
From 1ef52a6b4babb83509933a40d82affed9556bfc0 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Sun, 17 Sep 2023 22:30:05 +0530 Subject: [PATCH 47/88] Fix:Handle no constraints in the question --- frontend/src/components/questions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index dfe6661..fc32447 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -115,7 +115,7 @@ function Question(props) {

Constraints

- {constraints.map((format, index) => ( + {(constraints !== null) && constraints.map((format, index) => ( {format} From b57d542f0eead44f855bf62bd9f392fd506be583 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Mon, 18 Sep 2023 04:27:58 +0530 Subject: [PATCH 48/88] Fix: Some of the bugs mentioned in the group have been fixed --- frontend/src/components/EditorWindow.js | 20 +------- frontend/src/components/Navbar.js | 58 ++++++++++++++--------- frontend/src/components/countdownTimer.js | 9 ++++ frontend/src/components/portal.js | 2 + frontend/src/components/roundWise.js | 33 ++++--------- frontend/src/components/textEditor.js | 7 ++- frontend/src/pages/index.js | 12 +++++ frontend/src/pages/login.js | 30 ++++++++---- frontend/src/pages/user/index.js | 11 ++--- 9 files changed, 102 insertions(+), 80 deletions(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index ececdd7..e491a6b 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -14,8 +14,6 @@ function EditorWindow(props) { const router = useRouter(); const [invalidInput, setInvalidInput] = useState(false); const [invalidsubmit, submitInvalidInput] = useState(false); - const initialTime = useTimerStore((state) => state.Time); - const user = router.query.user; const fullPath = `/user/Testcomplete`; const [runTestCases, setRunTestCases] = useState(false); const [questionRun, setQuestionRun] = useState(null); @@ -37,20 +35,6 @@ function EditorWindow(props) { } }, [submissionArray]); - useEffect(() => { - if (initialTime === 0) { - document.cookie.split(";").forEach((c) => { - document.cookie = c - .replace(/^ +/, "") - .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); - }); - useTimerStore.setState({ Time: 2 * 60 * 60 }); - RefreshToken(); - localStorage.removeItem("timerTime"); - router.push(fullPath); - } - }, [initialTime]); - useEffect(() => { setInvalidInput(false); submitInvalidInput(false); @@ -138,7 +122,7 @@ function EditorWindow(props) { .replace(/^ +/, "") .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); - useTimerStore.setState({ Time: 2 * 60 * 60 }); + useTimerStore.setState({ Time: 2 * 60 *60}); localStorage.removeItem("timerTime"); RefreshToken(); router.push(fullPath); @@ -194,7 +178,7 @@ function EditorWindow(props) { {subLoading && (
-

Cooking...

+

Serving...

)} diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index 9b9deb7..3dbe5cc 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -45,32 +45,46 @@ const Navbar = () => { } return ( <> -
+
{isTestPortal ? ( - +
+ +
+ Cook-Off 8.0 +
+
+ + + +
+
) : ( -
-

00:00:00

+
+
+
+ Cook-Off 8.0 +
+
+ + + +
)} -
- Cook-Off 8.0 -
-
- - - -
); diff --git a/frontend/src/components/countdownTimer.js b/frontend/src/components/countdownTimer.js index 77f2bb3..3088bcd 100644 --- a/frontend/src/components/countdownTimer.js +++ b/frontend/src/components/countdownTimer.js @@ -1,6 +1,8 @@ import React, { useEffect, useState } from "react"; import Cookies from 'js-cookie'; import useTimerStore from "@/store/timeProvider"; +import router from "next/router"; +import RefreshToken from "@/utils/RefreshToken"; function CountdownTimer() { const [initialTime, setInitialTime] = useState(() => { @@ -38,6 +40,13 @@ function CountdownTimer() { updateTimer(initialTime - 1); } else { updateTimer(2 * 60 * 60); + document.cookie.split(";").forEach((c) => { + document.cookie = c + .replace(/^ +/, "") + .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); + }); + RefreshToken(); + router.push("/user/Testcomplete"); } }, 1000); diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index af9f02b..245d6f4 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -42,6 +42,8 @@ export default function Portal(props) { .catch((error) => { if (error.response && error.response.status === 400) { console.log("400"); + } else if (error.response && error.response.status === 404) { + console.log("No questions"); } }); } catch { diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index 4edfc14..8ec83db 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -21,32 +21,10 @@ function RoundWise(props) {

ROUND {round}

- SeeRound -
-
-
-
-
-

0/{qArr.length}

-

Solved

-
-
- TotalScore:  - {score} -
-
-
+
{qArr.map((question2, index2) => (
))}
+
+
+ TotalScore:  + {score} +
+
diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 3a5dc86..1753040 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -195,13 +195,14 @@ const TextEditor = ({ }; async function handleClickSubmit() { + const codeValue = existingCodeData[questionId]; try { setSubLoading(true); await RefreshToken(); getEditorValue(); const access_token = localStorage.getItem("access_token"); const existingCodeData = JSON.parse(localStorage.getItem("codeData")); - const codeValue = existingCodeData[questionId]; + const langCode = file.code; const q_ID = qArr[questionId]._id; console.log(q_ID); @@ -244,7 +245,9 @@ const TextEditor = ({ } else if (error.response.status === 400) { console.log("Invalid input"); setSubLoading(false); - submitInvalidInput(true); + if (codeValue === "" || codeValue === undefined || codeValue === null) { + submitInvalidInput(true); + } } } } diff --git a/frontend/src/pages/index.js b/frontend/src/pages/index.js index de11364..e524297 100644 --- a/frontend/src/pages/index.js +++ b/frontend/src/pages/index.js @@ -8,6 +8,7 @@ import logo from "../assets/logo.svg"; import Image from "next/image"; import { useRouter } from "next/router"; import { useWindowSize } from "@uidotdev/usehooks"; +import RefreshToken from "@/utils/RefreshToken"; function App() { const router = useRouter(); @@ -23,6 +24,17 @@ function App() { }, 300); }; + useEffect(() => { + const refresh_token = localStorage.getItem("refresh_token"); + async function fetchData() { + if (refresh_token){ + await RefreshToken(); + router.push("/user"); + } + } + fetchData(); + }, []); + useEffect(() => { const timer = setTimeout(() => { if (isClicked) { diff --git a/frontend/src/pages/login.js b/frontend/src/pages/login.js index e2e3b02..999ab81 100644 --- a/frontend/src/pages/login.js +++ b/frontend/src/pages/login.js @@ -2,7 +2,10 @@ import { easeInOut, motion } from "framer-motion"; import { useFormik } from "formik"; import { useRouter } from "next/router"; import { useState } from "react"; +import Image from "next/image"; +import cookoff from "../assets/cook-head.svg"; import useTokenStore from "@/store/tokenProvider"; +import RefreshToken from "@/utils/RefreshToken"; import axios from "axios"; const validate = (values) => { @@ -13,9 +16,9 @@ const validate = (values) => { // errors.email = "Must be 15 characters or less"; // } } - if (!values.password) { - errors.password = "Password Required"; - } + // if (!values.password) { + // errors.password = "Password Required"; + // } // } else if (!/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{5,}$/i.test(values.password)) { // errors.password = "Invalid Password"; // } @@ -47,15 +50,17 @@ function Login() { }); localStorage.setItem("access_token", response.data.accessToken); localStorage.setItem("refresh_token", response.data.refreshToken); + + await RefreshToken(); + setError(false); + router.push("/user"); - } else if (response.status === 400) { - setError(true); - console.log("Invalid credentials"); } } catch (error) { if (error.response) { const statusCode = error.response.status; if (statusCode === 401) { + setError(true); localStorage.removeItem("access_token"); useTokenStore.setState({ access_token: "", @@ -63,6 +68,10 @@ function Login() { router.push("/login"); } else if (statusCode === 403) { console.log("Access forbidden:", error); + } else if (statusCode === 400) { + console.log("Invalid credentials"); + setError(true); + } else { console.log("An error occurred:", error); } @@ -81,13 +90,16 @@ function Login() { transition={{ ease: easeInOut, duration: 0.5 }} className="flex justify-center items-center h-screen" > -
+
+
+ Cook-Off 8.0 +
{error && ( -
+
Invalid credentials
)} - +
{ - async function Refresher(){ - await RefreshToken(); - } async function fetchDataDash() { const access_token = localStorage.getItem("access_token"); console.log(access_token); @@ -26,6 +23,7 @@ function Dashboard() { Authorization: `Bearer ${access_token}`, }, }); + // console.log(response.data); setName(response.data.name); setRound(response.data.roundQualified + 1); setScore(response.data.score); @@ -47,7 +45,7 @@ function Dashboard() { try{ const response = await axios.post( "https://api-cookoff-prod.codechefvit.com/ques/getRound", - { round: round }, + { round: round}, { headers: { Authorization: `Bearer ${access_token}`, @@ -61,11 +59,12 @@ function Dashboard() { console.log("No data received from the API."); } } catch(error){ - + if (error.response && error.response.status === 404) { + console.log("No questions"); + } } } async function action(){ - await Refresher(); await fetchDataDash(); await fetchDataRound(); } From 400b958235d64a3a75e2a25197cb8d19d1532a39 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Mon, 18 Sep 2023 09:41:43 +0530 Subject: [PATCH 49/88] fix:Minor changes --- frontend/src/components/EditorWindow.js | 11 +++++++++-- frontend/src/components/roundWise.js | 2 +- frontend/src/components/textEditor.js | 4 ++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index e491a6b..5c5bd83 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -12,6 +12,10 @@ import axios from "axios"; function EditorWindow(props) { const { sampleOutputs, sampleInputs, qArr } = props; const router = useRouter(); + const [initialTime, setInitialTime] = useState(() => { + const storedTime = localStorage.getItem('timerTime'); + return storedTime ? parseInt(storedTime, 10) : useTimerStore.getState().Time; + }); const [invalidInput, setInvalidInput] = useState(false); const [invalidsubmit, submitInvalidInput] = useState(false); const fullPath = `/user/Testcomplete`; @@ -28,6 +32,10 @@ function EditorWindow(props) { const [program, setProgram] = useState(null); const [submissionArray, setSubmissionArray] = useState(null); + const updateTimer = (newTime) => { + setInitialTime(newTime); + localStorage.setItem('timerTime', newTime.toString()); + }; useEffect(() => { if (submissionArray !== null) { console.log("yes"); @@ -122,8 +130,7 @@ function EditorWindow(props) { .replace(/^ +/, "") .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); - useTimerStore.setState({ Time: 2 * 60 *60}); - localStorage.removeItem("timerTime"); + updateTimer(2 * 60 * 60); RefreshToken(); router.push(fullPath); } diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index 8ec83db..798420b 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -45,7 +45,7 @@ function RoundWise(props) { className="bg-[#4d4d4d] mt-2 rounded-md text-center text-[#C1BBB3] px-2 py-2" id="font_proxima" > - TotalScore:  + Round Score:  {score}
diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 1753040..104742b 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -195,14 +195,14 @@ const TextEditor = ({ }; async function handleClickSubmit() { - const codeValue = existingCodeData[questionId]; + try { setSubLoading(true); await RefreshToken(); getEditorValue(); const access_token = localStorage.getItem("access_token"); const existingCodeData = JSON.parse(localStorage.getItem("codeData")); - + const codeValue = existingCodeData[questionId]; const langCode = file.code; const q_ID = qArr[questionId]._id; console.log(q_ID); From 694c8807e54859b10a434f7f012e009c09b02138 Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Mon, 18 Sep 2023 10:01:14 +0530 Subject: [PATCH 50/88] fix: Minor Changes --- frontend/src/components/Navbar.js | 9 +++++++-- frontend/src/components/TestCase.js | 8 +++++++- frontend/src/components/countdownTimer.js | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index 3dbe5cc..cc6a305 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -43,6 +43,11 @@ const Navbar = () => { console.log("Logout failed: " + error); } } + + async function handleEndTest() { + alert("Are you sure you want to end the test?"); + } + return ( <>
@@ -55,9 +60,9 @@ const Navbar = () => {
From e58ba1571ec44d505bfc9870fe2f27b7c614a96b Mon Sep 17 00:00:00 2001 From: NishantGupta786 Date: Mon, 18 Sep 2023 23:59:29 +0530 Subject: [PATCH 52/88] Fix:Minor fixes --- frontend/src/components/EditorWindow.js | 9 +++++---- frontend/src/components/submissions.js | 15 +++++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 5c5bd83..a15cb87 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -32,10 +32,7 @@ function EditorWindow(props) { const [program, setProgram] = useState(null); const [submissionArray, setSubmissionArray] = useState(null); - const updateTimer = (newTime) => { - setInitialTime(newTime); - localStorage.setItem('timerTime', newTime.toString()); - }; + useEffect(() => { if (submissionArray !== null) { console.log("yes"); @@ -125,6 +122,10 @@ function EditorWindow(props) { }, [runTokens]); function submitQuestions() { + const updateTimer = (newTime) => { + setInitialTime(newTime); + localStorage.setItem('timerTime', newTime.toString()); + }; document.cookie.split(";").forEach((c) => { document.cookie = c .replace(/^ +/, "") diff --git a/frontend/src/components/submissions.js b/frontend/src/components/submissions.js index e78f090..6ccf04f 100644 --- a/frontend/src/components/submissions.js +++ b/frontend/src/components/submissions.js @@ -6,6 +6,11 @@ function SubmitCode(props) { const { clickedButton, submissionArray } = props; const containerRef = useRef(null); const [testCaseClicked, setTestCaseClicked] = useState(0); + const subData = [ + "Run/Compilation error", + "Time Limit Exceeded", + "Wrong Output", + ]; useEffect(() => { setTestCaseClicked(0); @@ -14,7 +19,10 @@ function SubmitCode(props) { return ( <> {submissionArray.error[0] ? ( -
+

Compilation Error :( @@ -37,8 +45,7 @@ function SubmitCode(props) {

Exit Status

- {/* {runData[0].status_id} */} - 6 + {/* {runData[0].status_id} */}6
 
@@ -66,7 +73,7 @@ function SubmitCode(props) {
{index}
Not Accepted
-
{value}
+
{subData[index]}

); From afe0b5ecdde54c7ddc433419367ce504fa4c8c8a Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Tue, 19 Sep 2023 16:59:15 +0530 Subject: [PATCH 53/88] added page FinalTaskCheck to show no of attempted que --- frontend/src/components/Navbar.js | 2 ++ frontend/src/pages/user/FinalTaskCheck.js | 37 +++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 frontend/src/pages/user/FinalTaskCheck.js diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index cc6a305..65347e3 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -46,6 +46,7 @@ const Navbar = () => { async function handleEndTest() { alert("Are you sure you want to end the test?"); + await router.push("/user/FinalTaskCheck"); } return ( @@ -59,6 +60,7 @@ const Navbar = () => {
+
+
+ ); +}; + +export default CompleteTest; From e55a09af821b44237eedf90ef2786a7db10d19eb Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Tue, 19 Sep 2023 18:11:30 +0530 Subject: [PATCH 54/88] fixed current profile component --- frontend/src/components/CurrentProfile.js | 50 +++++------------------ 1 file changed, 11 insertions(+), 39 deletions(-) diff --git a/frontend/src/components/CurrentProfile.js b/frontend/src/components/CurrentProfile.js index c359f3c..d03caa5 100644 --- a/frontend/src/components/CurrentProfile.js +++ b/frontend/src/components/CurrentProfile.js @@ -2,9 +2,8 @@ import Image from "next/image"; import { RxUpload } from "react-icons/rx"; import Profile from "../assets/CurrentProfile.svg"; - -function CurrentProfile(props){ - const {name, round} = props; +function CurrentProfile(props) { + const { name, round } = props; return (
@@ -21,49 +20,22 @@ function CurrentProfile(props){
*/} - +
- -
- {/*
- -
- +
+ {name}
-
*/} +
- +
+ Round {round} +
- {/*
- -
*/} - +
); -}; +} export default CurrentProfile; From 25601e66b4a47bbc43d0ed345d7433548459feed Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Tue, 19 Sep 2023 18:51:56 +0530 Subject: [PATCH 55/88] made FinalTestCheck page functional, added alerts feature in ide --- frontend/src/components/textEditor.js | 21 ++++++++++++++------- frontend/src/pages/user/FinalTaskCheck.js | 7 ++++++- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 21ab455..c52df7f 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -137,15 +137,22 @@ const TextEditor = ({ }, [questionId, selectedLanguages]); const handleOptionClick = (option) => { - setSelectedOption(option); - setShowMore(false); + if ( + isCodeEmpty(codeValue) || + window.confirm( + "Progress will be lost for this question. Are you sure you want to continue?" + ) + ) { + setSelectedOption(option); + setShowMore(false); - setSelectedLanguages((prevSelectedLanguages) => ({ - ...prevSelectedLanguages, - [questionId]: option, - })); + setSelectedLanguages((prevSelectedLanguages) => ({ + ...prevSelectedLanguages, + [questionId]: option, + })); - setCodeValue(files[option].value); + setCodeValue(files[option].value); + } }; const handleEditorDidMount = (Editor, monaco) => { diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 6622e78..505a858 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -5,11 +5,16 @@ const CompleteTest = () => { localStorage.removeItem("codeData"); }; + const codeData = JSON.parse(localStorage.getItem("codeData")) || {}; + const codeDataLength = Object.keys(codeData).length; + + console.log("Length of codeData:", codeDataLength); + return (
- No of questions submitted:   8 + No of questions submitted:   {codeDataLength}
{Array(8) From e9a3b58915c80ee59296d1e8ff63d7ae18e84e41 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Wed, 20 Sep 2023 00:04:08 +0530 Subject: [PATCH 56/88] added feature to calc no of tasks completed --- frontend/src/pages/user/FinalTaskCheck.js | 49 ++++++++++++++++++----- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 505a858..d8d83c6 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -1,4 +1,5 @@ -import React from "react"; +import React, { useEffect } from "react"; +import Cookies from "js-cookie"; const CompleteTest = () => { const handleButtonClick = () => { @@ -10,6 +11,21 @@ const CompleteTest = () => { console.log("Length of codeData:", codeDataLength); + const computeArrayValue = (array) => { + let sum = 0; + + for (let i = 2; i < array.length; i++) { + if (!array[i]) { + sum += 1; + } + } + if ((array[0] === array[1]) === true) { + sum += 1; + } + + return sum; + }; + return (
@@ -17,16 +33,29 @@ const CompleteTest = () => { No of questions submitted:   {codeDataLength}
- {Array(8) + {Array(codeDataLength) .fill() - .map((_, index) => ( -
- No of Tasks completed for Q{index + 1}:   8 -
- ))} + .map((_, index) => { + const taskCompletionCookieName = `${index + 10}`; + const taskCompletionJSON = Cookies.get(taskCompletionCookieName); + const taskCompletion = taskCompletionJSON + ? JSON.parse(taskCompletionJSON) + : { error: [] }; + + const errorArray = taskCompletion.error || []; + + const taskCompletionValue = computeArrayValue(errorArray); + + return ( +
+ No of Tasks completed for Q{index + 1}:  {" "} + {taskCompletionValue} +
+ ); + })}
+
+ +
+ +
+ ); +}; + +export default register; From 903984594476a213b491f14d2d2645c588db32ce Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Wed, 20 Sep 2023 00:47:18 +0530 Subject: [PATCH 58/88] fix: local storage problem --- frontend/src/pages/user/FinalTaskCheck.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index d8d83c6..1883815 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -1,15 +1,18 @@ -import React, { useEffect } from "react"; +import React from "react"; import Cookies from "js-cookie"; const CompleteTest = () => { - const handleButtonClick = () => { - localStorage.removeItem("codeData"); - }; + let codeData = {}; - const codeData = JSON.parse(localStorage.getItem("codeData")) || {}; - const codeDataLength = Object.keys(codeData).length; + if (typeof window !== "undefined") { + try { + codeData = JSON.parse(localStorage.getItem("codeData")) || {}; + } catch (error) { + console.error("Error parsing codeData:", error); + } + } - console.log("Length of codeData:", codeDataLength); + const codeDataLength = Object.keys(codeData).length; const computeArrayValue = (array) => { let sum = 0; @@ -19,13 +22,17 @@ const CompleteTest = () => { sum += 1; } } - if ((array[0] === array[1]) === true) { + + if (!array[0] && !array[1]) { sum += 1; } return sum; }; + const handleButtonClick = () => { + localStorage.removeItem("codeData"); + }; return (
From ab5f239a718cd919b3a2f7fa8fb7357697164f26 Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Wed, 20 Sep 2023 01:42:35 +0530 Subject: [PATCH 59/88] Fix:Bug Fixes --- frontend/src/components/EditorWindow.js | 28 +++++------ frontend/src/components/Navbar.js | 10 ++-- frontend/src/components/countdownTimer.js | 7 +-- frontend/src/pages/user/FinalTaskCheck.js | 60 +++++++++++++++++++---- frontend/src/pages/user/index.js | 11 +++-- 5 files changed, 78 insertions(+), 38 deletions(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index a15cb87..2d2157a 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -121,19 +121,19 @@ function EditorWindow(props) { } }, [runTokens]); - function submitQuestions() { - const updateTimer = (newTime) => { - setInitialTime(newTime); - localStorage.setItem('timerTime', newTime.toString()); - }; - document.cookie.split(";").forEach((c) => { - document.cookie = c - .replace(/^ +/, "") - .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); - }); - updateTimer(2 * 60 * 60); - RefreshToken(); - router.push(fullPath); + async function submitQuestions() { + const userConfirmed = window.confirm("Please submit all questions. If not submitted the code will not be saved. Are you sure you want to end the test"); + + if (userConfirmed) { + await RefreshToken(); + const updateTimer = (newTime) => { + setInitialTime(newTime); + localStorage.setItem('timerTime', newTime.toString()); + }; + updateTimer(2 * 60 * 60); + router.push("/user/FinalTaskCheck"); + await router.push("/user/FinalTaskCheck"); + } } return ( @@ -178,7 +178,7 @@ function EditorWindow(props) {
)} - {loading && ( + {loading && !subLoading &&(

Cooking...

diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index 65347e3..9c437a5 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -10,7 +10,6 @@ import RefreshToken from "@/utils/RefreshToken"; const Navbar = () => { const router = useRouter(); - const [isTestPortal, setIsTestPortal] = useState(false); useEffect(() => { setIsTestPortal(router.pathname.includes("testPortal")); @@ -45,9 +44,14 @@ const Navbar = () => { } async function handleEndTest() { - alert("Are you sure you want to end the test?"); - await router.push("/user/FinalTaskCheck"); + const userConfirmed = window.confirm("Please submit all questions. If not submitted the code will not be saved. Are you sure you want to end the test"); + + if (userConfirmed) { + await RefreshToken(); + await router.push("/user/FinalTaskCheck"); + } } + return ( <> diff --git a/frontend/src/components/countdownTimer.js b/frontend/src/components/countdownTimer.js index daa72e6..b2131f5 100644 --- a/frontend/src/components/countdownTimer.js +++ b/frontend/src/components/countdownTimer.js @@ -40,13 +40,8 @@ function CountdownTimer() { updateTimer(initialTime - 1); } else { updateTimer(2 * 60 * 60); - document.cookie.split(";").forEach((c) => { - document.cookie = c - .replace(/^ +/, "") - .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); - }); RefreshToken(); - router.push("/user/Testcomplete"); + router.push("/user/FinalTaskCheck"); } }, 1000); diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 1883815..1bf8004 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -1,7 +1,46 @@ -import React from "react"; +import React, { useEffect,useState } from "react"; +import Navbar from "@/components/Navbar"; +import { useRouter } from "next/router"; +import RefreshToken from "@/utils/RefreshToken"; import Cookies from "js-cookie"; +import useTimerStore from "@/store/timeProvider"; const CompleteTest = () => { + const router = useRouter(); + const [initialTime, setInitialTime] = useState(() => { + const storedTime = localStorage.getItem('timerTime'); + return storedTime ? parseInt(storedTime, 10) : useTimerStore.getState().Time; + }); + useEffect(() => { + const handleBackButton = (e) => { + e.preventDefault(); + alert("Cannot go back to the test."); + window.history.pushState(null, null, window.location.pathname); + }; + + window.history.pushState(null, null, window.location.pathname); + window.addEventListener("popstate", handleBackButton); + + return () => { + window.removeEventListener("popstate", handleBackButton); + }; + }, []); + async function handleButtonClick(){ + document.cookie.split(";").forEach((c) => { + document.cookie = c + .replace(/^ +/, "") + .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); + }); + const updateTimer = (newTime) => { + setInitialTime(newTime); + localStorage.setItem('timerTime', newTime.toString()); + }; + updateTimer(1 * 60); + await RefreshToken(); + localStorage.removeItem("codeData"); + + router.push("/user"); + }; let codeData = {}; if (typeof window !== "undefined") { @@ -16,13 +55,14 @@ const CompleteTest = () => { const computeArrayValue = (array) => { let sum = 0; - + if (array.length === 0 || array === null || array === undefined) { + return 0; + } for (let i = 2; i < array.length; i++) { if (!array[i]) { sum += 1; } } - if (!array[0] && !array[1]) { sum += 1; } @@ -30,11 +70,10 @@ const CompleteTest = () => { return sum; }; - const handleButtonClick = () => { - localStorage.removeItem("codeData"); - }; return ( -
+ <> + +
No of questions submitted:   {codeDataLength} @@ -48,7 +87,7 @@ const CompleteTest = () => { const taskCompletion = taskCompletionJSON ? JSON.parse(taskCompletionJSON) : { error: [] }; - + const errorArray = taskCompletion.error || []; const taskCompletionValue = computeArrayValue(errorArray); @@ -59,7 +98,7 @@ const CompleteTest = () => { className="w-[15vw] py-[11px] bg-[#1F1F1F] rounded-[10px] text-[17px] font-semibold text-center ring-2 ring-[#D9D9D9] ring-offset-4 hover:ring-offset-[5px] ring-offset-[#0D0D0D] m-2" > No of Tasks completed for Q{index + 1}:  {" "} - {taskCompletionValue} + {taskCompletionValue}/3{console.log(taskCompletionValue)}
); })} @@ -68,10 +107,11 @@ const CompleteTest = () => { className="text-[#f3ededd8] text-[20px] hover:text-[21px] ease-in-out duration-100 font-semibold ring-2 ring-[#1F1F1F] py-1 px-5 rounded-full ring-offset-8 hover:ring-offset-[8px] bg-[#16a34a] ring-offset-[#16a34a] mt-10 mr-4" onClick={handleButtonClick} > - Complete Test + Continue to Dashboard
+ ); }; diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js index 23552f1..9e761d8 100644 --- a/frontend/src/pages/user/index.js +++ b/frontend/src/pages/user/index.js @@ -19,10 +19,10 @@ function Dashboard() { console.log(access_token); try { const response = await axios.get("https://api-cookoff-prod.codechefvit.com/auth/dashboard", { - headers: { - Authorization: `Bearer ${access_token}`, - }, - }); + headers: { + Authorization: `Bearer ${access_token}`, + }, + }); // console.log(response.data); setName(response.data.name); setRound(response.data.roundQualified + 1); @@ -31,6 +31,7 @@ function Dashboard() { } catch (error) { if (error.response && error.response.status === 401) { localStorage.removeItem("access_token"); + localStorage.removeItem("refresh_token"); useTokenStore.setState({ access_token: "", }); @@ -67,7 +68,7 @@ function Dashboard() { async function action(){ await fetchDataDash(); await fetchDataRound(); - } + } action(); }, []); From ec5a5dd98f7781ab30bdf6e17410b4e876013d4d Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Wed, 20 Sep 2023 01:44:51 +0530 Subject: [PATCH 60/88] fix: Bug fixes --- frontend/src/pages/user/FinalTaskCheck.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 1bf8004..9f754a0 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -35,7 +35,7 @@ const CompleteTest = () => { setInitialTime(newTime); localStorage.setItem('timerTime', newTime.toString()); }; - updateTimer(1 * 60); + updateTimer(2 * 60 * 60); await RefreshToken(); localStorage.removeItem("codeData"); From 22edc6e9eb09d20e2d8639fcd830d76662f351d4 Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Wed, 20 Sep 2023 01:46:47 +0530 Subject: [PATCH 61/88] Fix: Minor fixes --- frontend/src/components/EditorWindow.js | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 2d2157a..6363846 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -132,7 +132,6 @@ function EditorWindow(props) { }; updateTimer(2 * 60 * 60); router.push("/user/FinalTaskCheck"); - await router.push("/user/FinalTaskCheck"); } } From fdc5b103cee859585327aad3e20995bade83f6ff Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Wed, 20 Sep 2023 02:05:12 +0530 Subject: [PATCH 62/88] Fix: Added the URLs --- frontend/src/components/EditorWindow.js | 2 +- frontend/src/components/textEditor.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 6363846..1ed4d94 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -67,7 +67,7 @@ function EditorWindow(props) { console.log(props.questionId); try { const response = await axios.get( - "http://139.59.4.43:2358/submissions/batch?tokens=" + + "https://judge0.codechefvit.com/submissions/batch?tokens=" + string.toString() + "&base64_encoded=false&fields=status_id,stdout,expected_output,stdin,stderr,compile_output,source_code" ); diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index c52df7f..60d39d1 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -180,7 +180,7 @@ const TextEditor = ({ setCode(langCode); try { const response = await axios.post( - "http://139.59.4.43:2358/submissions/batch?base64_encoded=false", + "https://judge0.codechefvit.com/submissions/batch?base64_encoded=false", { submissions: inputs.map((input, index) => ({ language_id: langCode, From bc23c3f9e3cceb8392b3167904882e55a48f4e2e Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Wed, 20 Sep 2023 14:25:32 +0530 Subject: [PATCH 63/88] FinalTaskCheck page completed --- frontend/src/components/EditorWindow.js | 19 +++-- frontend/src/pages/user/FinalTaskCheck.js | 91 ++++++++++++----------- 2 files changed, 61 insertions(+), 49 deletions(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 1ed4d94..ecd8269 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -11,10 +11,14 @@ import axios from "axios"; function EditorWindow(props) { const { sampleOutputs, sampleInputs, qArr } = props; + const a = qArr.length; + localStorage.setItem("QueArrlength", a); const router = useRouter(); const [initialTime, setInitialTime] = useState(() => { - const storedTime = localStorage.getItem('timerTime'); - return storedTime ? parseInt(storedTime, 10) : useTimerStore.getState().Time; + const storedTime = localStorage.getItem("timerTime"); + return storedTime + ? parseInt(storedTime, 10) + : useTimerStore.getState().Time; }); const [invalidInput, setInvalidInput] = useState(false); const [invalidsubmit, submitInvalidInput] = useState(false); @@ -32,7 +36,6 @@ function EditorWindow(props) { const [program, setProgram] = useState(null); const [submissionArray, setSubmissionArray] = useState(null); - useEffect(() => { if (submissionArray !== null) { console.log("yes"); @@ -122,13 +125,15 @@ function EditorWindow(props) { }, [runTokens]); async function submitQuestions() { - const userConfirmed = window.confirm("Please submit all questions. If not submitted the code will not be saved. Are you sure you want to end the test"); - + const userConfirmed = window.confirm( + "Please submit all questions. If not submitted the code will not be saved. Are you sure you want to end the test" + ); + if (userConfirmed) { await RefreshToken(); const updateTimer = (newTime) => { setInitialTime(newTime); - localStorage.setItem('timerTime', newTime.toString()); + localStorage.setItem("timerTime", newTime.toString()); }; updateTimer(2 * 60 * 60); router.push("/user/FinalTaskCheck"); @@ -177,7 +182,7 @@ function EditorWindow(props) {
)} - {loading && !subLoading &&( + {loading && !subLoading && (

Cooking...

diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 9f754a0..97bf718 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -1,4 +1,4 @@ -import React, { useEffect,useState } from "react"; +import React, { useEffect, useState } from "react"; import Navbar from "@/components/Navbar"; import { useRouter } from "next/router"; import RefreshToken from "@/utils/RefreshToken"; @@ -8,8 +8,10 @@ import useTimerStore from "@/store/timeProvider"; const CompleteTest = () => { const router = useRouter(); const [initialTime, setInitialTime] = useState(() => { - const storedTime = localStorage.getItem('timerTime'); - return storedTime ? parseInt(storedTime, 10) : useTimerStore.getState().Time; + const storedTime = localStorage.getItem("timerTime"); + return storedTime + ? parseInt(storedTime, 10) + : useTimerStore.getState().Time; }); useEffect(() => { const handleBackButton = (e) => { @@ -25,7 +27,7 @@ const CompleteTest = () => { window.removeEventListener("popstate", handleBackButton); }; }, []); - async function handleButtonClick(){ + async function handleButtonClick() { document.cookie.split(";").forEach((c) => { document.cookie = c .replace(/^ +/, "") @@ -33,14 +35,14 @@ const CompleteTest = () => { }); const updateTimer = (newTime) => { setInitialTime(newTime); - localStorage.setItem('timerTime', newTime.toString()); + localStorage.setItem("timerTime", newTime.toString()); }; updateTimer(2 * 60 * 60); await RefreshToken(); localStorage.removeItem("codeData"); - + router.push("/user"); - }; + } let codeData = {}; if (typeof window !== "undefined") { @@ -70,47 +72,52 @@ const CompleteTest = () => { return sum; }; + const length = Number(localStorage.getItem("QueArrlength")); + console.log(length); + return ( <> - -
-
-
- No of questions submitted:   {codeDataLength} -
-
- {Array(codeDataLength) - .fill() - .map((_, index) => { - const taskCompletionCookieName = `${index + 10}`; - const taskCompletionJSON = Cookies.get(taskCompletionCookieName); - const taskCompletion = taskCompletionJSON - ? JSON.parse(taskCompletionJSON) - : { error: [] }; - - const errorArray = taskCompletion.error || []; + +
+
+
+ No of questions submitted:   {codeDataLength} +
+
+ {Array(5) + .fill() + .map((_, index) => { + const taskCompletionCookieName = `${index + 10}`; + const taskCompletionJSON = Cookies.get( + taskCompletionCookieName + ); + const taskCompletion = taskCompletionJSON + ? JSON.parse(taskCompletionJSON) + : { error: [] }; + + const errorArray = taskCompletion.error || []; - const taskCompletionValue = computeArrayValue(errorArray); + const taskCompletionValue = computeArrayValue(errorArray); - return ( -
- No of Tasks completed for Q{index + 1}:  {" "} - {taskCompletionValue}/3{console.log(taskCompletionValue)} -
- ); - })} + return ( +
+ No of Tasks completed for Q{index + 1}:  {" "} + {taskCompletionValue}/3 +
+ ); + })} +
+
-
-
); }; From 939c147e29dbd38abd80317a716368ebcaa082d0 Mon Sep 17 00:00:00 2001 From: Shivd131 Date: Wed, 20 Sep 2023 18:18:51 +0530 Subject: [PATCH 64/88] feat: register page --- frontend/src/pages/register.js | 83 ++++++++++++++-------------------- package-lock.json | 6 +++ 2 files changed, 41 insertions(+), 48 deletions(-) create mode 100644 package-lock.json diff --git a/frontend/src/pages/register.js b/frontend/src/pages/register.js index 8d67c2a..571acae 100644 --- a/frontend/src/pages/register.js +++ b/frontend/src/pages/register.js @@ -4,38 +4,39 @@ import { useRouter } from "next/router"; import { useState } from "react"; import Image from "next/image"; import cookoff from "../assets/cook-head.svg"; -import useTokenStore from "@/store/tokenProvider"; -import RefreshToken from "@/utils/RefreshToken"; import axios from "axios"; const validate = (values) => { - const errors = {}; - - if (!values.name) { - errors.name = "Name is required"; - } else if (values.name.length < 3) { - errors.name = "Name must be at least 3 characters long"; - } - - if (!values.registerNo) { - errors.registerNo = "Register Number is required"; - } else if (!/^\d{2}[A-Za-z]{3}\d{4}$/.test(values.registerNo)) { - errors.registerNo = - "Enter valid Register number"; - } - - return errors; - }; - - + const errors = {}; + + if (!values.name) { + errors.name = "Name is required"; + } else if (values.name.length < 3) { + errors.name = "Name must be at least 3 characters long"; + } + + if (!values.regNo) { + errors.regNo = "Register Number is required"; + } else if (!/^\d{2}[A-Za-z]{3}\d{4}$/.test(values.regNo)) { + errors.regNo = "Enter a valid Register number"; + } + + if (!values.email) { + errors.email = "Email Required"; + } + + return errors; +}; + const register = () => { const [error, setError] = useState(false); const router = useRouter(); const formik = useFormik({ initialValues: { name: "", - registerNo: "", + regNo: "", email: "", + password: "1234" }, validate, onSubmit: async (values) => { @@ -43,36 +44,21 @@ const register = () => { try { const response = await axios.post( - "https://api-cookoff-prod.codechefvit.com/auth/login", + `https://api-cookoff-prod.codechefvit.com/auth/signup`, values ); + console.log("API response:", response); if (response.status >= 200 && response.status < 300) { - useTokenStore.setState({ - access_token: response.data.accessToken, - }); - localStorage.setItem("access_token", response.data.accessToken); - localStorage.setItem("refresh_token", response.data.refreshToken); - - await RefreshToken(); setError(false); - router.push("/login"); } } catch (error) { if (error.response) { + console.error("API error:", error); const statusCode = error.response.status; - if (statusCode === 401) { - setError(true); - localStorage.removeItem("access_token"); - useTokenStore.setState({ - access_token: "", - }); - router.push("/login"); - } else if (statusCode === 403) { - console.log("Access forbidden:", error); - } else if (statusCode === 400) { - console.log("Invalid credentials"); + console.log(`status code: ${statusCode}`); + if (statusCode === 400) { setError(true); } else { console.log("An error occurred:", error); @@ -83,6 +69,7 @@ const register = () => { } }, }); + return (
{
{error && (
- Invalid credentials + Registration failed. Please check your information
)}
{
- {formik.errors.registerNo ? ( + {formik.errors.regNo ? (
- {formik.errors.registerNo} + {formik.errors.regNo}
) : null}
diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..837cf39 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "cookoff24-portal", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} From 9de62899ee5581463bc60c060b7229c575c34e2a Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Wed, 20 Sep 2023 20:54:25 +0530 Subject: [PATCH 65/88] Fix: Bug fixes --- frontend/next.config.js | 2 +- frontend/pnpm-lock.yaml | 11 +++++---- frontend/src/components/EditorWindow.js | 20 +++++++++++++--- frontend/src/components/Navbar.js | 22 ++++++++++++++--- frontend/src/pages/register.js | 4 ++-- frontend/src/pages/user/FinalTaskCheck.js | 29 ++++------------------- frontend/src/pages/user/index.js | 1 + 7 files changed, 51 insertions(+), 38 deletions(-) diff --git a/frontend/next.config.js b/frontend/next.config.js index a843cbe..ca2117b 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -1,6 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - reactStrictMode: true, + reactStrictMode: false, } module.exports = nextConfig diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 9a07ccc..e101f86 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -27,8 +27,8 @@ dependencies: specifier: ^2.4.3 version: 2.4.3(react@18.2.0) framer-motion: - specifier: ^10.16.1 - version: 10.16.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^10.16.4 + version: 10.16.4(react-dom@18.2.0)(react@18.2.0) js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -95,6 +95,7 @@ packages: /@emotion/memoize@0.7.4: resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + requiresBuild: true dev: false optional: true @@ -1400,8 +1401,8 @@ packages: resolution: {integrity: sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==} dev: false - /framer-motion@10.16.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-K6TXr5mZtitC/dxQCBdg7xzdN0d5IAIrlaqCPKtIQVdzVPGC0qBuJKXggHX1vjnP5gPOFwB1KbCCTWcnFc3kWg==} + /framer-motion@10.16.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-p9V9nGomS3m6/CALXqv6nFGMuFOxbWsmaOrdmhyQimMIlLl3LC7h7l86wge/Js/8cRu5ktutS/zlzgR7eBOtFA==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index ecd8269..680c654 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -1,6 +1,6 @@ import TextEditor from "./textEditor"; import TestCase from "./TestCase"; -import { useEffect, useState } from "react"; +import { useEffect, useState, useRef } from "react"; import CompilationError from "./compError"; import SubmitCode from "./submissions"; import { useRouter } from "next/router"; @@ -10,6 +10,8 @@ import RefreshToken from "@/utils/RefreshToken"; import axios from "axios"; function EditorWindow(props) { + const container1Ref = useRef(null); + const container2Ref = useRef(null); const { sampleOutputs, sampleInputs, qArr } = props; const a = qArr.length; localStorage.setItem("QueArrlength", a); @@ -36,6 +38,18 @@ function EditorWindow(props) { const [program, setProgram] = useState(null); const [submissionArray, setSubmissionArray] = useState(null); + useEffect(() => { + if (container1Ref.current !== null) { + container1Ref.current.scrollIntoView(); + } + + }, [loading]); + useEffect(() => { + if (container2Ref.current !== null) { + container2Ref.current.scrollIntoView(); + } + }, [subLoading]); + useEffect(() => { if (submissionArray !== null) { console.log("yes"); @@ -183,13 +197,13 @@ function EditorWindow(props) { )} {loading && !subLoading && ( -
+

Cooking...

)} {subLoading && ( -
+

Serving...

)} diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index 9c437a5..2f52637 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -14,6 +14,9 @@ const Navbar = () => { useEffect(() => { setIsTestPortal(router.pathname.includes("testPortal")); }, [router.pathname]); + const updateTimer = (newTime) => { + localStorage.setItem("timerTime", newTime.toString()); + }; async function handleLogout() { await RefreshToken(); @@ -39,15 +42,28 @@ const Navbar = () => { }); await router.push("/login"); } catch (error) { - console.log("Logout failed: " + error); + if (error.response && error.response.status === 403) { + localStorage.removeItem("access_token"); + localStorage.removeItem("refresh_token"); + document.cookie.split(";").forEach((c) => { + document.cookie = c + .replace(/^ +/, "") + .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); + }); + router.push("/login"); + } } } async function handleEndTest() { - const userConfirmed = window.confirm("Please submit all questions. If not submitted the code will not be saved. Are you sure you want to end the test"); - + const userConfirmed = window.confirm( + "Please submit all questions. If not submitted the code will not be saved. Are you sure you want to end the test" + ); + if (userConfirmed) { await RefreshToken(); + updateTimer(2 * 60 * 60); + localStorage.removeItem("codeData"); await router.push("/user/FinalTaskCheck"); } } diff --git a/frontend/src/pages/register.js b/frontend/src/pages/register.js index 571acae..875351c 100644 --- a/frontend/src/pages/register.js +++ b/frontend/src/pages/register.js @@ -28,7 +28,7 @@ const validate = (values) => { return errors; }; -const register = () => { +function Register () { const [error, setError] = useState(false); const router = useRouter(); const formik = useFormik({ @@ -155,4 +155,4 @@ const register = () => { ); }; -export default register; +export default Register; diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 97bf718..e660ba7 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -3,16 +3,10 @@ import Navbar from "@/components/Navbar"; import { useRouter } from "next/router"; import RefreshToken from "@/utils/RefreshToken"; import Cookies from "js-cookie"; -import useTimerStore from "@/store/timeProvider"; const CompleteTest = () => { const router = useRouter(); - const [initialTime, setInitialTime] = useState(() => { - const storedTime = localStorage.getItem("timerTime"); - return storedTime - ? parseInt(storedTime, 10) - : useTimerStore.getState().Time; - }); + useEffect(() => { const handleBackButton = (e) => { e.preventDefault(); @@ -33,25 +27,15 @@ const CompleteTest = () => { .replace(/^ +/, "") .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); - const updateTimer = (newTime) => { - setInitialTime(newTime); - localStorage.setItem("timerTime", newTime.toString()); - }; - updateTimer(2 * 60 * 60); await RefreshToken(); - localStorage.removeItem("codeData"); - router.push("/user"); } let codeData = {}; - if (typeof window !== "undefined") { - try { - codeData = JSON.parse(localStorage.getItem("codeData")) || {}; - } catch (error) { - console.error("Error parsing codeData:", error); - } - } + useEffect(() => { + const length = Number(localStorage.getItem("QueArrlength")); + console.log(length); + }, []); const codeDataLength = Object.keys(codeData).length; @@ -72,9 +56,6 @@ const CompleteTest = () => { return sum; }; - const length = Number(localStorage.getItem("QueArrlength")); - console.log(length); - return ( <> diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js index 9e761d8..db69054 100644 --- a/frontend/src/pages/user/index.js +++ b/frontend/src/pages/user/index.js @@ -66,6 +66,7 @@ function Dashboard() { } } async function action(){ + await RefreshToken(); await fetchDataDash(); await fetchDataRound(); } From 1ef15a2a5de614eb705cd72e80f3e0f9d647050f Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Thu, 21 Sep 2023 08:16:13 +0530 Subject: [PATCH 66/88] Feat: Dissabke right click --- frontend/src/pages/user/testPortal.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frontend/src/pages/user/testPortal.js b/frontend/src/pages/user/testPortal.js index 2146aeb..236abfa 100644 --- a/frontend/src/pages/user/testPortal.js +++ b/frontend/src/pages/user/testPortal.js @@ -11,11 +11,18 @@ export default function TestPortal() { window.history.pushState(null, null, window.location.pathname); }; + const handleContextMenu = (e) => { + e.preventDefault(); + alert("Right-click context menu is disabled on this page."); + }; + window.history.pushState(null, null, window.location.pathname); window.addEventListener("popstate", handleBackButton); + window.addEventListener("contextmenu", handleContextMenu); return () => { window.removeEventListener("popstate", handleBackButton); + window.removeEventListener("contextmenu", handleContextMenu); }; }, []); return ( From 8cd5ce87e0dc858f943d4c2dc67655f13fe8b88a Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Fri, 22 Sep 2023 00:26:27 +0530 Subject: [PATCH 67/88] fixed --- frontend/src/components/textEditor.js | 4 +++- frontend/src/pages/user/FinalTaskCheck.js | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 60d39d1..194bbd2 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -289,7 +289,9 @@ const TextEditor = ({
{ return sum; }; + const length = Number(localStorage.getItem("QueArrlength")); + console.log(length); + return ( <> @@ -65,7 +68,7 @@ const CompleteTest = () => { No of questions submitted:   {codeDataLength}
- {Array(5) + {Array(length) .fill() .map((_, index) => { const taskCompletionCookieName = `${index + 10}`; From 0a2749ed10e2c2f7c4a6672b4842978c5cf10bcc Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Fri, 22 Sep 2023 00:48:11 +0530 Subject: [PATCH 68/88] local host not found err fixed --- frontend/src/components/TestCase.js | 19 +++++++++++-------- frontend/src/pages/user/FinalTaskCheck.js | 9 ++++----- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/frontend/src/components/TestCase.js b/frontend/src/components/TestCase.js index fd2dea1..c7e23e3 100644 --- a/frontend/src/components/TestCase.js +++ b/frontend/src/components/TestCase.js @@ -38,13 +38,13 @@ const TestCase = ({ clickedButton, runData, code, program }) => { try { console.log(runToken); const response = await axios.get( - "http://139.59.4.43:2358/submissions/" + + "https://judge0.codechefvit.com/submissions/" + runToken + "?base64_encoded=false&fields=stdout,stderr,status_id,language_id" ); - + console.log(response.data); - + if (response.data.status_id === 1 || response.data.status_id === 2) { setLoading(true); setTimeout(async () => { @@ -58,7 +58,7 @@ const TestCase = ({ clickedButton, runData, code, program }) => { console.log(error); } } - + if (runToken) { fetchSubmit(); } @@ -67,16 +67,19 @@ const TestCase = ({ clickedButton, runData, code, program }) => { async function handleSubmit(event) { event.preventDefault(); console.log(customInput); - if (customInput === "" || customInput === null || customInput === undefined) { + if ( + customInput === "" || + customInput === null || + customInput === undefined + ) { setInvalidInput(true); alert("Please do not leave the custom input field empty"); return; } - - + try { const response = await axios.post( - "http://139.59.4.43:2358/submissions/?base64_encoded=false", + "https://judge0.codechefvit.com/submissions/?base64_encoded=false", { language_id: code, source_code: program, diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 80bb3af..dc0d2ee 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -6,6 +6,7 @@ import Cookies from "js-cookie"; const CompleteTest = () => { const router = useRouter(); + const [length, setLength] = useState(0); useEffect(() => { const handleBackButton = (e) => { @@ -33,8 +34,9 @@ const CompleteTest = () => { let codeData = {}; useEffect(() => { - const length = Number(localStorage.getItem("QueArrlength")); - console.log(length); + const lengthFromLocalStorage = Number(localStorage.getItem("QueArrlength")); + setLength(lengthFromLocalStorage); + console.log(lengthFromLocalStorage); }, []); const codeDataLength = Object.keys(codeData).length; @@ -56,9 +58,6 @@ const CompleteTest = () => { return sum; }; - const length = Number(localStorage.getItem("QueArrlength")); - console.log(length); - return ( <> From 80a9e92878a57a01349edf46e20e8d7f7e6ab1cd Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Fri, 22 Sep 2023 01:13:40 +0530 Subject: [PATCH 69/88] Language name in dropdown fixed --- frontend/src/components/textEditor.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 194bbd2..55295d2 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -45,7 +45,7 @@ const TextEditor = ({ code: 50, }, "script.cpp": { - name: "Cpp", + name: "C++", language: "cpp", value: "#include\nusing namespace std;\n\nint main() {\n\treturn 0;\n}", @@ -277,6 +277,10 @@ const TextEditor = ({ } } + function capitalizeFirstLetter(str) { + return str.charAt(0).toUpperCase() + str.slice(1); + } + return (
@@ -290,7 +294,9 @@ const TextEditor = ({
- {option.substring(option.lastIndexOf(".") + 1)} + {files[option].name}

))} From 6ace57cf03b67cb83dc1e68dc9399142b2ddc600 Mon Sep 17 00:00:00 2001 From: Aaditya Mahanta Date: Fri, 22 Sep 2023 01:16:34 +0530 Subject: [PATCH 70/88] fix: reg page --- frontend/pnpm-lock.yaml | 2 +- frontend/src/pages/register.js | 21 ++++++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index e101f86..907aaae 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '6.1' settings: autoInstallPeers: true diff --git a/frontend/src/pages/register.js b/frontend/src/pages/register.js index 875351c..d25ed4b 100644 --- a/frontend/src/pages/register.js +++ b/frontend/src/pages/register.js @@ -29,14 +29,13 @@ const validate = (values) => { }; function Register () { - const [error, setError] = useState(false); + const [error, setError] = useState(""); const router = useRouter(); const formik = useFormik({ initialValues: { name: "", regNo: "", - email: "", - password: "1234" + email: "" }, validate, onSubmit: async (values) => { @@ -44,7 +43,7 @@ function Register () { try { const response = await axios.post( - `https://api-cookoff-prod.codechefvit.com/auth/signup`, + `https://api-cookoff-prod.codechefvit.com/auth/create`, values ); console.log("API response:", response); @@ -59,7 +58,7 @@ function Register () { const statusCode = error.response.status; console.log(`status code: ${statusCode}`); if (statusCode === 400) { - setError(true); + setError(error.response.data.error); } else { console.log("An error occurred:", error); } @@ -88,19 +87,19 @@ function Register () {
{error && (
- Registration failed. Please check your information + {error}
)} -
+
@@ -115,7 +114,7 @@ function Register () { className="w-full py-[18px] px-[33px] text-[#D9D9D999] bg-[#1F1F1F] rounded-[25px] text-[22px] font-semibold" id="regNo" type="text" - placeholder="regNo" + placeholder="Registration Number" onChange={formik.handleChange} value={formik.values.regNo} /> @@ -130,7 +129,7 @@ function Register () { className="w-full py-[18px] px-[33px] text-[#D9D9D999] bg-[#1F1F1F] rounded-[25px] text-[22px] font-semibold" id="email" type="email" - placeholder="email" + placeholder="Email" onChange={formik.handleChange} value={formik.values.email} /> @@ -145,7 +144,7 @@ function Register () { className="uppercase text-[#D9D9D9] font-semibold py-[16px] px-[26px] text-[22px] border-[3px] border-[#D9D9D9] rounded-full hover:bg-[#D9D9D9] hover:text-black mt-5" type="submit" > - Register to code! + Register to cook!
From 8813874882a416e75d54c553efe92a97e2fb87fe Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Fri, 22 Sep 2023 01:22:36 +0530 Subject: [PATCH 71/88] Fix: Bug fixes --- frontend/package.json | 1 + frontend/pnpm-lock.yaml | 8 ++++++ frontend/src/components/EditorWindow.js | 15 ++++++++++ frontend/src/components/questions.js | 16 +++++++---- frontend/src/components/roundWise.js | 3 +- frontend/src/components/textEditor.js | 9 ++++++ frontend/src/pages/user/FinalTaskCheck.js | 34 +++++++++++++++++----- frontend/src/pages/user/index.js | 35 +++++++++++++++++------ 8 files changed, 99 insertions(+), 22 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index ab61adf..acdba76 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,6 +13,7 @@ "@uidotdev/usehooks": "^2.1.1", "autoprefixer": "10.4.15", "axios": "^1.5.0", + "dotenv": "^16.3.1", "eslint": "8.47.0", "eslint-config-next": "13.4.19", "formik": "^2.4.3", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 907aaae..01886c8 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -17,6 +17,9 @@ dependencies: axios: specifier: ^1.5.0 version: 1.5.0 + dotenv: + specifier: ^16.3.1 + version: 16.3.1 eslint: specifier: 8.47.0 version: 8.47.0 @@ -893,6 +896,11 @@ packages: esutils: 2.0.3 dev: false + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + dev: false + /electron-to-chromium@1.4.496: resolution: {integrity: sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==} dev: false diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 680c654..8b542c2 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -12,6 +12,7 @@ import axios from "axios"; function EditorWindow(props) { const container1Ref = useRef(null); const container2Ref = useRef(null); + const container3Ref = useRef(null); const { sampleOutputs, sampleInputs, qArr } = props; const a = qArr.length; localStorage.setItem("QueArrlength", a); @@ -25,6 +26,7 @@ function EditorWindow(props) { const [invalidInput, setInvalidInput] = useState(false); const [invalidsubmit, submitInvalidInput] = useState(false); const fullPath = `/user/Testcomplete`; + const [testcaseInvalid, setTestcaseInvalid] = useState(false); const [runTestCases, setRunTestCases] = useState(false); const [questionRun, setQuestionRun] = useState(null); const [questionSubmit, setQuestionSubmit] = useState(new Set()); @@ -50,6 +52,12 @@ function EditorWindow(props) { } }, [subLoading]); + useEffect(() => { + if (container2Ref.current !== null) { + container2Ref.current.scrollIntoView(); + } + }, [testcaseInvalid]); + useEffect(() => { if (submissionArray !== null) { console.log("yes"); @@ -164,6 +172,7 @@ function EditorWindow(props) { submitInvalidInput={submitInvalidInput} questionId={props.questionId} setRunTestCases={setRunTestCases} + setTestcaseInvalid={setTestcaseInvalid} setQuestionRun={setQuestionRun} setQuestionSubmit={setQuestionSubmit} setRunTokens={setRunTokens} @@ -208,6 +217,12 @@ function EditorWindow(props) {
)} + {testcaseInvalid && ( +
+

Something went wrong

+
+ )} + {error && !loading && questionRunArray.has(props.questionId) && (
diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index fc32447..c53ad9b 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -114,12 +114,16 @@ function Question(props) { ))}

Constraints

- - {(constraints !== null) && constraints.map((format, index) => ( - - {format} - - ))} +
    + {constraints !== null && + constraints.map((format, index) => ( +
  • + + {format} + +
  • + ))} +
diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index 798420b..e96d377 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -4,7 +4,7 @@ import { useRouter } from "next/router"; import RefreshToken from "@/utils/RefreshToken"; function RoundWise(props) { - const { round, score, qArr } = props; + const { round, score, qArr, roundActive } = props; const router = useRouter(); async function startTest() { await RefreshToken(); @@ -57,6 +57,7 @@ function RoundWise(props) { diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 55295d2..983cee7 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -11,6 +11,7 @@ const TextEditor = ({ setQuestionSubmit, setInvalidInput, questionRun, + setTestcaseInvalid, submitInvalidInput, questionSubmit, expectedOutputs, @@ -172,6 +173,7 @@ const TextEditor = ({ }; const handleClickRun = async () => { await RefreshToken(); + setTestcaseInvalid(false); console.log(localStorage.getItem("access_token")); getEditorValue(); const existingCodeData = JSON.parse(localStorage.getItem("codeData")); @@ -250,6 +252,7 @@ const TextEditor = ({ if (response.status === 201) { await setInvalidInput(false); setSubmissionArray(response.data); + setTestcaseInvalid(false); Cookies.set(String(questionId + 10), JSON.stringify(response.data)); } if (questionRunArray.has(questionId)) { @@ -270,6 +273,12 @@ const TextEditor = ({ } else if (error.response.status === 400) { console.log("Invalid input"); setSubLoading(false); + setQuestionQuestionRunArray((prev) => { + const newSet = new Set(prev); + newSet.delete(questionId); + return newSet; + }); + setTestcaseInvalid(true); if (codeValue === "" || codeValue === undefined || codeValue === null) { submitInvalidInput(true); } diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index dc0d2ee..6b26707 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -3,6 +3,7 @@ import Navbar from "@/components/Navbar"; import { useRouter } from "next/router"; import RefreshToken from "@/utils/RefreshToken"; import Cookies from "js-cookie"; +import axios from "axios"; const CompleteTest = () => { const router = useRouter(); @@ -23,13 +24,32 @@ const CompleteTest = () => { }; }, []); async function handleButtonClick() { - document.cookie.split(";").forEach((c) => { - document.cookie = c - .replace(/^ +/, "") - .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); - }); - await RefreshToken(); - router.push("/user"); + + + + try { + await RefreshToken(); + const access_token = localStorage.getItem("access_token"); + console.log(access_token); + const response = await axios.get( + "https://api-cookoff-prod.codechefvit.com/submit/endtest", + { + headers: { + Authorization: `Bearer ${access_token}`, + }, + } + ); + if (response.status >= 200 && response.status < 300) { + document.cookie.split(";").forEach((c) => { + document.cookie = c + .replace(/^ +/, "") + .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); + }); + router.push("/user"); + } + } catch (error) { + console.log(error); + } } let codeData = {}; diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js index db69054..858e175 100644 --- a/frontend/src/pages/user/index.js +++ b/frontend/src/pages/user/index.js @@ -13,20 +13,26 @@ function Dashboard() { const [qArr, setQArr] = useState([]); const [round, setRound] = useState(1); const [score, setScore] = useState(0); + const [roundActive, setRoundActive] = useState(true); useEffect(() => { async function fetchDataDash() { const access_token = localStorage.getItem("access_token"); console.log(access_token); try { - const response = await axios.get("https://api-cookoff-prod.codechefvit.com/auth/dashboard", { + const response = await axios.get( + "https://api-cookoff-prod.codechefvit.com/auth/dashboard", + { headers: { Authorization: `Bearer ${access_token}`, }, - }); + } + ); // console.log(response.data); setName(response.data.name); setRound(response.data.roundQualified + 1); setScore(response.data.score); + console.log(response.data.isRoundActive); + setRoundActive(response.data.isRoundActive); localStorage.setItem("round", response.data.roundQualified + 1); } catch (error) { if (error.response && error.response.status === 401) { @@ -41,12 +47,12 @@ function Dashboard() { } } } - async function fetchDataRound(){ + async function fetchDataRound() { const access_token = localStorage.getItem("access_token"); - try{ + try { const response = await axios.post( "https://api-cookoff-prod.codechefvit.com/ques/getRound", - { round: round}, + { round: round }, { headers: { Authorization: `Bearer ${access_token}`, @@ -59,13 +65,21 @@ function Dashboard() { } else { console.log("No data received from the API."); } - } catch(error){ + } catch (error) { if (error.response && error.response.status === 404) { console.log("No questions"); + } else if (error.response && error.response.status === 403) { + console.log("No questions"); + localStorage.removeItem("access_token"); + localStorage.removeItem("refresh_token"); + useTokenStore.setState({ + access_token: "", + }); + router.push("/login"); } } } - async function action(){ + async function action() { await RefreshToken(); await fetchDataDash(); await fetchDataRound(); @@ -79,7 +93,12 @@ function Dashboard() {
- +
From be76278153e54952a579510a826009368b7809c6 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Fri, 22 Sep 2023 01:29:16 +0530 Subject: [PATCH 72/88] added go lang --- frontend/src/components/textEditor.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 55295d2..2ae85c0 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -63,6 +63,13 @@ const TextEditor = ({ value: "impl Solution{\n\n}", code: 73, }, + "script.go": { + name: "Go", + language: "go", + value: + 'package main\nimport "fmt"\nfunc main() {\n\tfmt.Println("Hello World")\n}', + code: 60, + }, }; // const initialTime = useTimerStore((state) => state.Time); @@ -83,6 +90,7 @@ const TextEditor = ({ "script.py", "script.js", "script.rs", + "script.go", ]; // const [isChecked, setIsChecked] = useState(false); From fb08b4c5fec625611a5e2e5ad8c91746e55918e9 Mon Sep 17 00:00:00 2001 From: Aaditya Mahanta Date: Fri, 22 Sep 2023 01:48:03 +0530 Subject: [PATCH 73/88] fix: build fix --- frontend/package.json | 1 - frontend/pnpm-lock.yaml | 8 -------- frontend/src/components/questions.js | 2 +- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index acdba76..ab61adf 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,7 +13,6 @@ "@uidotdev/usehooks": "^2.1.1", "autoprefixer": "10.4.15", "axios": "^1.5.0", - "dotenv": "^16.3.1", "eslint": "8.47.0", "eslint-config-next": "13.4.19", "formik": "^2.4.3", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 01886c8..907aaae 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -17,9 +17,6 @@ dependencies: axios: specifier: ^1.5.0 version: 1.5.0 - dotenv: - specifier: ^16.3.1 - version: 16.3.1 eslint: specifier: 8.47.0 version: 8.47.0 @@ -896,11 +893,6 @@ packages: esutils: 2.0.3 dev: false - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: false - /electron-to-chromium@1.4.496: resolution: {integrity: sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==} dev: false diff --git a/frontend/src/components/questions.js b/frontend/src/components/questions.js index c53ad9b..3898e10 100644 --- a/frontend/src/components/questions.js +++ b/frontend/src/components/questions.js @@ -117,7 +117,7 @@ function Question(props) {
    {constraints !== null && constraints.map((format, index) => ( -
  • +
  • {format} From 33487fc8145955669a7f82b011061062cdc65a73 Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Fri, 22 Sep 2023 04:20:31 +0530 Subject: [PATCH 74/88] Fix: Compilation error message --- frontend/package.json | 5 + frontend/pnpm-lock.yaml | 132 +++++++++--------------- frontend/src/components/EditorWindow.js | 8 +- frontend/src/components/TestCase.js | 14 +-- frontend/src/components/compError.js | 3 +- frontend/src/components/roundWise.js | 15 +-- frontend/tailwind.config.js | 4 +- 7 files changed, 79 insertions(+), 102 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index ab61adf..27e76d8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,6 +13,8 @@ "@uidotdev/usehooks": "^2.1.1", "autoprefixer": "10.4.15", "axios": "^1.5.0", + "buffer": "^6.0.3", + "dotenv": "^16.3.1", "eslint": "8.47.0", "eslint-config-next": "13.4.19", "formik": "^2.4.3", @@ -29,5 +31,8 @@ "remark-gfm": "^3.0.1", "tailwindcss": "3.3.3", "zustand": "^4.4.1" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.10" } } diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 907aaae..618f33a 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -17,6 +17,9 @@ dependencies: axios: specifier: ^1.5.0 version: 1.5.0 + buffer: + specifier: ^6.0.3 + version: 6.0.3 eslint: specifier: 8.47.0 version: 8.47.0 @@ -66,6 +69,11 @@ dependencies: specifier: ^4.4.1 version: 4.4.1(@types/react@18.2.21)(react@18.2.0) +devDependencies: + '@tailwindcss/typography': + specifier: ^0.5.10 + version: 0.5.10(tailwindcss@3.3.3) + packages: /@aashutoshrathi/word-wrap@1.2.6: @@ -76,7 +84,6 @@ packages: /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - dev: false /@babel/runtime@7.22.10: resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==} @@ -163,28 +170,23 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.19 - dev: false /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: false /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: false /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: false /@jridgewell/trace-mapping@0.3.19: resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: false /@monaco-editor/loader@1.3.3(monaco-editor@0.41.0): resolution: {integrity: sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==} @@ -305,12 +307,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: false /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: false /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -318,7 +318,6 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: false /@rushstack/eslint-patch@1.3.3: resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==} @@ -330,6 +329,18 @@ packages: tslib: 2.6.2 dev: false + /@tailwindcss/typography@0.5.10(tailwindcss@3.3.3): + resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.3.3 + dev: true + /@types/debug@4.1.8: resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} dependencies: @@ -487,7 +498,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -495,11 +505,9 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: false /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: false /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -649,26 +657,26 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: false /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: false /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: false /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: false /browserslist@4.21.10: resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} @@ -681,6 +689,13 @@ packages: update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: false + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -703,7 +718,6 @@ packages: /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - dev: false /caniuse-lite@1.0.30001522: resolution: {integrity: sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==} @@ -738,7 +752,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 - dev: false /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -774,11 +787,9 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: false /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: false /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -793,7 +804,6 @@ packages: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - dev: false /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} @@ -861,7 +871,6 @@ packages: /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: false /diff@5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} @@ -877,7 +886,6 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: false /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} @@ -1307,7 +1315,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: false /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -1321,7 +1328,6 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 - dev: false /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -1335,7 +1341,6 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: false /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -1421,19 +1426,16 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: false /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: false optional: true /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: false /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} @@ -1477,14 +1479,12 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: false /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: false /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -1499,7 +1499,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: false /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} @@ -1600,7 +1599,6 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: false /hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} @@ -1612,6 +1610,10 @@ packages: react-is: 16.13.1 dev: false + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} @@ -1635,11 +1637,9 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: false /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false /inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -1680,7 +1680,6 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - dev: false /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -1704,7 +1703,6 @@ packages: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 - dev: false /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -1716,7 +1714,6 @@ packages: /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: false /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} @@ -1736,7 +1733,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: false /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} @@ -1757,7 +1753,6 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: false /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} @@ -1846,7 +1841,6 @@ packages: /jiti@1.19.3: resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==} hasBin: true - dev: false /js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} @@ -1915,11 +1909,9 @@ packages: /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - dev: false /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -1932,9 +1924,16 @@ packages: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: false + /lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + dev: true + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: false /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -2096,7 +2095,6 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: false /micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} @@ -2351,7 +2349,6 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: false /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -2369,7 +2366,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: false /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -2398,13 +2394,11 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: false /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: false /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -2457,7 +2451,6 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: false /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} @@ -2467,12 +2460,10 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: false /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: false /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -2540,7 +2531,6 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: false /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -2583,7 +2573,6 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: false /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -2592,7 +2581,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: false /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -2601,22 +2589,18 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: false /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: false /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: false /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: false /postcss-import@15.1.0(postcss@8.4.28): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} @@ -2628,7 +2612,6 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.4 - dev: false /postcss-js@4.0.1(postcss@8.4.28): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -2638,7 +2621,6 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.28 - dev: false /postcss-load-config@4.0.1(postcss@8.4.28): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} @@ -2655,7 +2637,6 @@ packages: lilconfig: 2.1.0 postcss: 8.4.28 yaml: 2.3.1 - dev: false /postcss-nested@6.0.1(postcss@8.4.28): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -2665,7 +2646,14 @@ packages: dependencies: postcss: 8.4.28 postcss-selector-parser: 6.0.13 - dev: false + + /postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} @@ -2673,11 +2661,9 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: false /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: false /postcss@8.4.14: resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} @@ -2695,7 +2681,6 @@ packages: nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: false /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -2725,7 +2710,6 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: false /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} @@ -2838,14 +2822,12 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 - dev: false /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: false /reflect.getprototypeof@1.0.3: resolution: {integrity: sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==} @@ -2918,7 +2900,6 @@ packages: is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: false /resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} @@ -2932,7 +2913,6 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: false /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -2945,7 +2925,6 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: false /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -3019,7 +2998,6 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: false /space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -3124,7 +3102,6 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: false /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -3136,7 +3113,6 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: false /tailwindcss@3.3.3: resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} @@ -3167,7 +3143,6 @@ packages: sucrase: 3.34.0 transitivePeerDependencies: - ts-node - dev: false /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -3183,13 +3158,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: false /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: false /tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} @@ -3200,7 +3173,6 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: false /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -3221,7 +3193,6 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: false /tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} @@ -3377,7 +3348,6 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} @@ -3478,7 +3448,6 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: false /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -3487,7 +3456,6 @@ packages: /yaml@2.3.1: resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} - dev: false /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index 8b542c2..d18892f 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -94,7 +94,7 @@ function EditorWindow(props) { const response = await axios.get( "https://judge0.codechefvit.com/submissions/batch?tokens=" + string.toString() + - "&base64_encoded=false&fields=status_id,stdout,expected_output,stdin,stderr,compile_output,source_code" + "&base64_encoded=true&fields=status_id,stdout,expected_output,stdin,stderr,compile_output,source_code" ); const submissions = response.data.submissions; @@ -132,7 +132,9 @@ function EditorWindow(props) { ); } } catch (error) { - console.log(error); + if (error.response && error.response.status === 400) { + setLoading(false); + } } } @@ -223,7 +225,7 @@ function EditorWindow(props) {
)} - {error && !loading && questionRunArray.has(props.questionId) && ( + {error && !loading && questionRunArray.has(props.questionId) && !subLoading &&(
diff --git a/frontend/src/components/TestCase.js b/frontend/src/components/TestCase.js index c7e23e3..e682a14 100644 --- a/frontend/src/components/TestCase.js +++ b/frontend/src/components/TestCase.js @@ -40,7 +40,7 @@ const TestCase = ({ clickedButton, runData, code, program }) => { const response = await axios.get( "https://judge0.codechefvit.com/submissions/" + runToken + - "?base64_encoded=false&fields=stdout,stderr,status_id,language_id" + "?base64_encoded=true&fields=stdout,stderr,status_id,language_id" ); console.log(response.data); @@ -52,7 +52,7 @@ const TestCase = ({ clickedButton, runData, code, program }) => { }, 3000); } else { setLoading(false); - setCustomOutput(response.data.stdout); + setCustomOutput(response.data.stdout || response.data.stderr); } } catch (error) { console.log(error); @@ -227,14 +227,14 @@ const TestCase = ({ clickedButton, runData, code, program }) => { ) : (
-
+
Output
- {customOutput} + {atob(customOutput)}
@@ -252,7 +252,7 @@ const TestCase = ({ clickedButton, runData, code, program }) => { className="bg-[#0d0d0d] text-white py-5 px-7 whitespace-pre" > - {runData[testCaseIndex].stdin} + {atob(runData[testCaseIndex].stdin)}
@@ -267,7 +267,7 @@ const TestCase = ({ clickedButton, runData, code, program }) => { className="bg-[#0d0d0d] text-white py-5 px-7 whitespace-pre" > - {runData[testCaseIndex].expected_output} + {atob(runData[testCaseIndex].expected_output)}
@@ -280,7 +280,7 @@ const TestCase = ({ clickedButton, runData, code, program }) => { className="bg-[#0d0d0d] text-white py-5 px-7 whitespace-pre" > - {runData[testCaseIndex].stdout} + {atob(runData[testCaseIndex].stdout)}
diff --git a/frontend/src/components/compError.js b/frontend/src/components/compError.js index ff63980..34d23a6 100644 --- a/frontend/src/components/compError.js +++ b/frontend/src/components/compError.js @@ -1,5 +1,6 @@ import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; +import { Buffer } from 'buffer'; import { useRef, useEffect } from "react"; function CompilationError(props) { @@ -26,7 +27,7 @@ function CompilationError(props) {

Compile Message

- {runData[0].compile_output || runData[0].stderr} + {Buffer.from(runData[0].compile_output, 'base64').toString('utf-8') || Buffer.from(runData[0].stderr, 'base64').toString('utf-8')}
diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index e96d377..ed022ba 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -54,13 +54,14 @@ function RoundWise(props) {
- + {roundActive && ( + + )}
); diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index d53b2ea..582300d 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -14,5 +14,5 @@ module.exports = { }, }, }, - plugins: [], -} + plugins: [require("@tailwindcss/typography")], +}; From 4cc55f4f32b24ca352710fa463a31bc309ede0c1 Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Fri, 22 Sep 2023 04:22:22 +0530 Subject: [PATCH 75/88] fix: minor bug --- frontend/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index 27e76d8..51139cd 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,7 +14,6 @@ "autoprefixer": "10.4.15", "axios": "^1.5.0", "buffer": "^6.0.3", - "dotenv": "^16.3.1", "eslint": "8.47.0", "eslint-config-next": "13.4.19", "formik": "^2.4.3", From 335765d3454d7d8c27303456800d9f23a694b9da Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Fri, 22 Sep 2023 06:12:05 +0530 Subject: [PATCH 76/88] Feat: Add head and change favicon --- frontend/public/android-chrome-192x192.png | Bin 0 -> 16431 bytes frontend/public/android-chrome-512x512.png | Bin 0 -> 54144 bytes frontend/public/apple-touch-icon.png | Bin 0 -> 15204 bytes frontend/public/favicon-16x16.png | Bin 0 -> 1132 bytes frontend/public/favicon-32x32.png | Bin 0 -> 2137 bytes frontend/public/favicon.ico | Bin 0 -> 15086 bytes frontend/public/mstile-150x150.png | Bin 0 -> 11115 bytes frontend/public/site.webmanifest | 19 +++++++++++ frontend/src/pages/index.js | 28 ++++++++++++++++- frontend/src/pages/login.js | 25 +++++++++++++++ frontend/src/pages/register.js | 35 +++++++++++++++++---- frontend/src/pages/user/FinalTaskCheck.js | 33 ++++++++++++++++--- frontend/src/pages/user/index.js | 25 +++++++++++++++ frontend/src/pages/user/testPortal.js | 25 +++++++++++++++ 14 files changed, 179 insertions(+), 11 deletions(-) create mode 100644 frontend/public/android-chrome-192x192.png create mode 100644 frontend/public/android-chrome-512x512.png create mode 100644 frontend/public/apple-touch-icon.png create mode 100644 frontend/public/favicon-16x16.png create mode 100644 frontend/public/favicon-32x32.png create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/mstile-150x150.png create mode 100644 frontend/public/site.webmanifest diff --git a/frontend/public/android-chrome-192x192.png b/frontend/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..3b13903ddd8d892dab5c42b8d05cade8830b4034 GIT binary patch literal 16431 zcmb_@Ra6{Z)Meu?!GpU82=4CCxVyUtcPE74?(XjH7Tkk7gy610{`zK~=3!oD&7!HI zt5?ytuAH;a-up%>DM+Cp;v<4UAQTyCaTVa)_unr(EO1oWu!93m(3T=#5fG?87U|U( z26#_uDy;$rfxM|fpukWN=moeG_!k6nV*!Cqj6fjXG!O{aDXT-7ANT;)L{3T^^zq+M zUUz9Ca0Sj)1}p)0gn$DgVBNxTZUBJHqQSa2U8M;ycvTBz*Nujt6NXxL5|JXdMzcy)KSm|NS+rT88+GOYf#p^HzD`60tb zX~`XwsCwi8ir)Au8I!!<`ERtkf+?>u5E7qO&13m7>qP1PBuw|w=aTs&FBp-&?Emf1 zwn^�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 literal 0 HcmV?d00001 diff --git a/frontend/public/favicon-16x16.png b/frontend/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1e4d0b95fdd28fbb5fb7ee276e488315923ef4 GIT binary patch literal 1132 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 MX^JtaL%1gV3r2M1asU7T literal 0 HcmV?d00001 diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..63ef0e32cb8227fb214227b7fe10521b93456ca8 GIT binary patch literal 15086 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 { const refresh_token = localStorage.getItem("refresh_token"); async function fetchData() { - if (refresh_token){ + if (refresh_token) { await RefreshToken(); router.push("/user"); } @@ -59,6 +61,30 @@ function App() { } else { return (
+ + CookOff 8.0 + + + + + + + + {isClicked ? ( { const errors = {}; @@ -84,6 +85,30 @@ function Login() { return (
+ + CookOff | Login + + + + + + + + { const errors = {}; @@ -28,14 +29,14 @@ const validate = (values) => { return errors; }; -function Register () { +function Register() { const [error, setError] = useState(""); const router = useRouter(); const formik = useFormik({ initialValues: { name: "", regNo: "", - email: "" + email: "", }, validate, onSubmit: async (values) => { @@ -71,6 +72,30 @@ function Register () { return (
+ + CookOff | Register + + + + + + + +
{error && ( -
- {error} -
+
{error}
)}
); -}; +} export default Register; diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 6b26707..8daf830 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -4,6 +4,7 @@ import { useRouter } from "next/router"; import RefreshToken from "@/utils/RefreshToken"; import Cookies from "js-cookie"; import axios from "axios"; +import Head from "next/head"; const CompleteTest = () => { const router = useRouter(); @@ -24,9 +25,6 @@ const CompleteTest = () => { }; }, []); async function handleButtonClick() { - - - try { await RefreshToken(); const access_token = localStorage.getItem("access_token"); @@ -43,7 +41,10 @@ const CompleteTest = () => { document.cookie.split(";").forEach((c) => { document.cookie = c .replace(/^ +/, "") - .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); + .replace( + /=.*/, + "=;expires=" + new Date().toUTCString() + ";path=/" + ); }); router.push("/user"); } @@ -80,6 +81,30 @@ const CompleteTest = () => { return ( <> + + submissions + + + + + + + +
diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js index 858e175..5839136 100644 --- a/frontend/src/pages/user/index.js +++ b/frontend/src/pages/user/index.js @@ -6,6 +6,7 @@ import { useRouter } from "next/router"; import useTokenStore from "@/store/tokenProvider"; import axios from "axios"; import RefreshToken from "@/utils/RefreshToken"; +import Head from "next/head"; function Dashboard() { const router = useRouter(); @@ -89,6 +90,30 @@ function Dashboard() { return ( <> + + Dashboard + + + + + + + +
diff --git a/frontend/src/pages/user/testPortal.js b/frontend/src/pages/user/testPortal.js index 236abfa..cf3af7d 100644 --- a/frontend/src/pages/user/testPortal.js +++ b/frontend/src/pages/user/testPortal.js @@ -2,6 +2,7 @@ import Navbar from "@/components/Navbar"; import Portal from "@/components/portal"; import React, { useEffect } from "react"; import { useRouter } from "next/router"; +import Head from "next/head"; export default function TestPortal() { useEffect(() => { @@ -27,6 +28,30 @@ export default function TestPortal() { }, []); return ( <> + + Portal + + + + + + + +
From f075086d9c8f39bb90cc1febce490b40292a25b1 Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Fri, 22 Sep 2023 08:15:48 +0530 Subject: [PATCH 77/88] Cleanup --- frontend/src/components/EditorWindow.js | 4 +-- frontend/src/components/TestCase.js | 8 +---- frontend/src/components/portal.js | 4 --- frontend/src/components/roundWise.js | 2 +- frontend/src/components/textEditor.js | 9 ----- frontend/src/pages/index.js | 1 - frontend/src/pages/login.js | 40 ++++++++++++++++------- frontend/src/pages/register.js | 10 +----- frontend/src/pages/user/FinalTaskCheck.js | 11 +++++-- frontend/src/pages/user/index.js | 8 +---- frontend/src/utils/RefreshToken.js | 21 ++++++++---- 11 files changed, 55 insertions(+), 63 deletions(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index d18892f..eb5a17f 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -60,7 +60,6 @@ function EditorWindow(props) { useEffect(() => { if (submissionArray !== null) { - console.log("yes"); setSubLoading(false); } }, [submissionArray]); @@ -68,6 +67,7 @@ function EditorWindow(props) { useEffect(() => { setInvalidInput(false); submitInvalidInput(false); + setTestcaseInvalid(false); const storedData = Cookies.get(String(props.questionId + 1)); const storedData2 = Cookies.get(String(props.questionId + 10)); @@ -89,7 +89,6 @@ function EditorWindow(props) { useEffect(() => { async function fetchSubmissionStatus(string) { - console.log(props.questionId); try { const response = await axios.get( "https://judge0.codechefvit.com/submissions/batch?tokens=" + @@ -142,7 +141,6 @@ function EditorWindow(props) { runTokens.forEach((element) => { str.push(element.token); }); - console.log(str.toString()); if (runTokens.length > 0) { fetchSubmissionStatus(str); } diff --git a/frontend/src/components/TestCase.js b/frontend/src/components/TestCase.js index e682a14..e25e478 100644 --- a/frontend/src/components/TestCase.js +++ b/frontend/src/components/TestCase.js @@ -36,15 +36,12 @@ const TestCase = ({ clickedButton, runData, code, program }) => { useEffect(() => { async function fetchSubmit() { try { - console.log(runToken); const response = await axios.get( "https://judge0.codechefvit.com/submissions/" + runToken + "?base64_encoded=true&fields=stdout,stderr,status_id,language_id" ); - console.log(response.data); - if (response.data.status_id === 1 || response.data.status_id === 2) { setLoading(true); setTimeout(async () => { @@ -66,7 +63,6 @@ const TestCase = ({ clickedButton, runData, code, program }) => { async function handleSubmit(event) { event.preventDefault(); - console.log(customInput); if ( customInput === "" || customInput === null || @@ -87,7 +83,6 @@ const TestCase = ({ clickedButton, runData, code, program }) => { } ); - console.log(response.data); if (response.status === 201) { setRunToken(response.data.token); @@ -95,9 +90,8 @@ const TestCase = ({ clickedButton, runData, code, program }) => { } } catch (error) { if (error.response && error.response.status === 422) { - console.log("Invalid Input"); + setLoading(false) setInvalidInput(true); - console.log(invalidInput); } } diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index 245d6f4..eb6aef8 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -53,10 +53,6 @@ export default function Portal(props) { } }, []); - useEffect(() => { - console.log("qArr:", qArr); - }, [qArr]); - return (
diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index ed022ba..86c1954 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -34,7 +34,7 @@ function RoundWise(props) {
{index2 + 1}. {question2.name}
-
+
{question2.points + " points"}
diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 983cee7..7654e71 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -174,7 +174,6 @@ const TextEditor = ({ const handleClickRun = async () => { await RefreshToken(); setTestcaseInvalid(false); - console.log(localStorage.getItem("access_token")); getEditorValue(); const existingCodeData = JSON.parse(localStorage.getItem("codeData")); const codeValue = existingCodeData[questionId]; @@ -193,7 +192,6 @@ const TextEditor = ({ } ); - console.log(response.data); if (response.status === 201) { await setInvalidInput(false); setRunTokens(response.data); @@ -215,10 +213,8 @@ const TextEditor = ({ if (error.response.status === 401) { await RefreshToken(); } else if (error.response.status === 422) { - console.log("Invalid input"); setInvalidInput(true); } - console.log(error); } }; @@ -232,9 +228,6 @@ const TextEditor = ({ const codeValue = existingCodeData[questionId]; const langCode = file.code; const q_ID = qArr[questionId]._id; - console.log(q_ID); - console.log(codeValue); - console.log(langCode); const response = await axios.post( "https://api-cookoff-prod.codechefvit.com/submit/eval/", { @@ -248,7 +241,6 @@ const TextEditor = ({ }, } ); - console.log(response.data); if (response.status === 201) { await setInvalidInput(false); setSubmissionArray(response.data); @@ -271,7 +263,6 @@ const TextEditor = ({ await RefreshToken(); handleClickSubmit(); } else if (error.response.status === 400) { - console.log("Invalid input"); setSubLoading(false); setQuestionQuestionRunArray((prev) => { const newSet = new Set(prev); diff --git a/frontend/src/pages/index.js b/frontend/src/pages/index.js index cd7349e..84992a8 100644 --- a/frontend/src/pages/index.js +++ b/frontend/src/pages/index.js @@ -10,7 +10,6 @@ import { useRouter } from "next/router"; import { useWindowSize } from "@uidotdev/usehooks"; import RefreshToken from "@/utils/RefreshToken"; import Head from "next/head"; -import axios from "axios"; function App() { const router = useRouter(); diff --git a/frontend/src/pages/login.js b/frontend/src/pages/login.js index 33781c5..e3b05d9 100644 --- a/frontend/src/pages/login.js +++ b/frontend/src/pages/login.js @@ -37,8 +37,6 @@ function Login() { }, validate, onSubmit: async (values) => { - console.log(values); - try { const response = await axios.post( "https://api-cookoff-prod.codechefvit.com/auth/login", @@ -68,16 +66,27 @@ function Login() { }); router.push("/login"); } else if (statusCode === 403) { - console.log("Access forbidden:", error); + setError(true); + localStorage.removeItem("access_token"); + useTokenStore.setState({ + access_token: "", + }); + router.push("/login"); } else if (statusCode === 400) { - console.log("Invalid credentials"); setError(true); - + localStorage.removeItem("access_token"); + useTokenStore.setState({ + access_token: "", + }); + router.push("/login"); } else { - console.log("An error occurred:", error); + setError(true); + localStorage.removeItem("access_token"); + useTokenStore.setState({ + access_token: "", + }); + router.push("/login"); } - } else { - console.log("An unexpected error occurred:", error); } } }, @@ -86,8 +95,8 @@ function Login() { return (
- CookOff | Login - CookOff | Login +
-
+
Cook-Off 8.0
{error && ( @@ -124,7 +137,10 @@ function Login() { Invalid credentials
)} - +
{ - console.log(values); try { const response = await axios.post( `https://api-cookoff-prod.codechefvit.com/auth/create`, values ); - console.log("API response:", response); if (response.status >= 200 && response.status < 300) { setError(false); @@ -55,16 +53,10 @@ function Register() { } } catch (error) { if (error.response) { - console.error("API error:", error); const statusCode = error.response.status; - console.log(`status code: ${statusCode}`); - if (statusCode === 400) { + if (statusCode >= 400) { setError(error.response.data.error); - } else { - console.log("An error occurred:", error); } - } else { - console.log("An unexpected error occurred:", error); } } }, diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 8daf830..70612a9 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -5,6 +5,7 @@ import RefreshToken from "@/utils/RefreshToken"; import Cookies from "js-cookie"; import axios from "axios"; import Head from "next/head"; +import useTokenStore from "@/store/tokenProvider"; const CompleteTest = () => { const router = useRouter(); @@ -28,7 +29,6 @@ const CompleteTest = () => { try { await RefreshToken(); const access_token = localStorage.getItem("access_token"); - console.log(access_token); const response = await axios.get( "https://api-cookoff-prod.codechefvit.com/submit/endtest", { @@ -49,7 +49,13 @@ const CompleteTest = () => { router.push("/user"); } } catch (error) { - console.log(error); + if (error.response && error.response.status === 400) { + localStorage.removeItem("access_token"); + useTokenStore.setState({ + access_token: "", + }); + router.push("/login"); + } } } let codeData = {}; @@ -57,7 +63,6 @@ const CompleteTest = () => { useEffect(() => { const lengthFromLocalStorage = Number(localStorage.getItem("QueArrlength")); setLength(lengthFromLocalStorage); - console.log(lengthFromLocalStorage); }, []); const codeDataLength = Object.keys(codeData).length; diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js index 5839136..16760ba 100644 --- a/frontend/src/pages/user/index.js +++ b/frontend/src/pages/user/index.js @@ -18,7 +18,6 @@ function Dashboard() { useEffect(() => { async function fetchDataDash() { const access_token = localStorage.getItem("access_token"); - console.log(access_token); try { const response = await axios.get( "https://api-cookoff-prod.codechefvit.com/auth/dashboard", @@ -28,11 +27,9 @@ function Dashboard() { }, } ); - // console.log(response.data); setName(response.data.name); setRound(response.data.roundQualified + 1); setScore(response.data.score); - console.log(response.data.isRoundActive); setRoundActive(response.data.isRoundActive); localStorage.setItem("round", response.data.roundQualified + 1); } catch (error) { @@ -43,9 +40,7 @@ function Dashboard() { access_token: "", }); router.push("/login"); - } else { - console.log(error); - } + } } } async function fetchDataRound() { @@ -70,7 +65,6 @@ function Dashboard() { if (error.response && error.response.status === 404) { console.log("No questions"); } else if (error.response && error.response.status === 403) { - console.log("No questions"); localStorage.removeItem("access_token"); localStorage.removeItem("refresh_token"); useTokenStore.setState({ diff --git a/frontend/src/utils/RefreshToken.js b/frontend/src/utils/RefreshToken.js index 8a78304..22761e0 100644 --- a/frontend/src/utils/RefreshToken.js +++ b/frontend/src/utils/RefreshToken.js @@ -4,18 +4,25 @@ import axios from "axios"; export default async function RefreshToken() { try { const refresh_token = localStorage.getItem("refresh_token"); - const response = await axios.post("https://api-cookoff-prod.codechefvit.com/auth/refresh", { - refreshToken: refresh_token, - }); + const response = await axios.post( + "https://api-cookoff-prod.codechefvit.com/auth/refresh", + { + refreshToken: refresh_token, + } + ); useTokenStore.setState({ access_token: response.data.accessToken, }); localStorage.setItem("access_token", response.data.accessToken); - - console.log("Token refreshed"); } catch (error) { - console.error("Token refresh failed:", error); - + if (error.response.status === 404 || error.response.status === 400) { + localStorage.removeItem("access_token"); + localStorage.removeItem("refresh_token"); + useTokenStore.setState({ + access_token: "", + }); + router.push("/login"); + } } } From 9f75b7c3bd1a8fa190d69a682bcf015a72a33fd0 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Fri, 22 Sep 2023 10:20:18 +0530 Subject: [PATCH 78/88] language selection err fixed --- frontend/src/components/textEditor.js | 7 ++++++- frontend/src/pages/user/FinalTaskCheck.js | 8 ++++---- frontend/src/pages/user/testPortal.js | 10 +++++----- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index e93b902..6b53f88 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -159,8 +159,13 @@ const TextEditor = ({ ...prevSelectedLanguages, [questionId]: option, })); - setCodeValue(files[option].value); + } else { + setSelectedLanguages((prevSelectedLanguages) => ({ + ...prevSelectedLanguages, + })); + setCodeValue(codeValue); + setShowMore(false); } }; diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 6b26707..c66cfd6 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -24,9 +24,6 @@ const CompleteTest = () => { }; }, []); async function handleButtonClick() { - - - try { await RefreshToken(); const access_token = localStorage.getItem("access_token"); @@ -43,7 +40,10 @@ const CompleteTest = () => { document.cookie.split(";").forEach((c) => { document.cookie = c .replace(/^ +/, "") - .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); + .replace( + /=.*/, + "=;expires=" + new Date().toUTCString() + ";path=/" + ); }); router.push("/user"); } diff --git a/frontend/src/pages/user/testPortal.js b/frontend/src/pages/user/testPortal.js index 236abfa..ddb2c92 100644 --- a/frontend/src/pages/user/testPortal.js +++ b/frontend/src/pages/user/testPortal.js @@ -11,14 +11,14 @@ export default function TestPortal() { window.history.pushState(null, null, window.location.pathname); }; - const handleContextMenu = (e) => { - e.preventDefault(); - alert("Right-click context menu is disabled on this page."); - }; + // const handleContextMenu = (e) => { + // e.preventDefault(); + // alert("Right-click context menu is disabled on this page."); + // }; window.history.pushState(null, null, window.location.pathname); window.addEventListener("popstate", handleBackButton); - window.addEventListener("contextmenu", handleContextMenu); + // window.addEventListener("contextmenu", handleContextMenu); return () => { window.removeEventListener("popstate", handleBackButton); From 12f30dd5e49996b31cd63ccc6cae64d5d851a753 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Fri, 22 Sep 2023 13:12:37 +0530 Subject: [PATCH 79/88] Rust default code snippet updated --- frontend/package-lock.json | 105 ++++++++++++++++++++++++++ frontend/src/components/textEditor.js | 2 +- frontend/src/pages/user/testPortal.js | 10 +-- 3 files changed, 111 insertions(+), 6 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1dfbab8..192264a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -12,6 +12,7 @@ "@uidotdev/usehooks": "^2.1.1", "autoprefixer": "10.4.15", "axios": "^1.5.0", + "buffer": "^6.0.3", "eslint": "8.47.0", "eslint-config-next": "13.4.19", "formik": "^2.4.3", @@ -28,6 +29,9 @@ "remark-gfm": "^3.0.1", "tailwindcss": "3.3.3", "zustand": "^4.4.1" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.10" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -417,6 +421,34 @@ "tslib": "^2.4.0" } }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", + "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", + "dev": true, + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -912,6 +944,25 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -971,6 +1022,29 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -2360,6 +2434,25 @@ "react-is": "^16.7.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -2928,6 +3021,18 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 72388ac..856ab95 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -61,7 +61,7 @@ const TextEditor = ({ "script.rs": { name: "Rust", language: "rust", - value: "impl Solution{\n\n}", + value: 'fn main(){\n\tprintln!("Hello world");\n}', code: 73, }, "script.go": { diff --git a/frontend/src/pages/user/testPortal.js b/frontend/src/pages/user/testPortal.js index d0bfd30..cf3af7d 100644 --- a/frontend/src/pages/user/testPortal.js +++ b/frontend/src/pages/user/testPortal.js @@ -12,14 +12,14 @@ export default function TestPortal() { window.history.pushState(null, null, window.location.pathname); }; - // const handleContextMenu = (e) => { - // e.preventDefault(); - // alert("Right-click context menu is disabled on this page."); - // }; + const handleContextMenu = (e) => { + e.preventDefault(); + alert("Right-click context menu is disabled on this page."); + }; window.history.pushState(null, null, window.location.pathname); window.addEventListener("popstate", handleBackButton); - // window.addEventListener("contextmenu", handleContextMenu); + window.addEventListener("contextmenu", handleContextMenu); return () => { window.removeEventListener("popstate", handleBackButton); From b433e3355871c2d746ed3abca8b670b3c07648da Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Fri, 22 Sep 2023 15:46:24 +0530 Subject: [PATCH 80/88] Fix: Render list on markdown, change ques route in dashboard --- frontend/src/components/EditorWindow.js | 4 +++- frontend/src/components/textEditor.js | 2 ++ frontend/src/pages/user/index.js | 2 +- frontend/src/styles/globals.css | 4 ++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/EditorWindow.js b/frontend/src/components/EditorWindow.js index eb5a17f..5c40a8b 100644 --- a/frontend/src/components/EditorWindow.js +++ b/frontend/src/components/EditorWindow.js @@ -27,6 +27,7 @@ function EditorWindow(props) { const [invalidsubmit, submitInvalidInput] = useState(false); const fullPath = `/user/Testcomplete`; const [testcaseInvalid, setTestcaseInvalid] = useState(false); + const [errorMessage, setErrorMessage] = useState(null); const [runTestCases, setRunTestCases] = useState(false); const [questionRun, setQuestionRun] = useState(null); const [questionSubmit, setQuestionSubmit] = useState(new Set()); @@ -170,6 +171,7 @@ function EditorWindow(props) { setSubmissionArray={setSubmissionArray} setInvalidInput={setInvalidInput} submitInvalidInput={submitInvalidInput} + setErrorMessage={setErrorMessage} questionId={props.questionId} setRunTestCases={setRunTestCases} setTestcaseInvalid={setTestcaseInvalid} @@ -219,7 +221,7 @@ function EditorWindow(props) { {testcaseInvalid && (
-

Something went wrong

+

Something went wrong/{errorMessage}

)} diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index 856ab95..c400ac2 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -11,6 +11,7 @@ const TextEditor = ({ setQuestionSubmit, setInvalidInput, questionRun, + setErrorMessage, setTestcaseInvalid, submitInvalidInput, questionSubmit, @@ -277,6 +278,7 @@ const TextEditor = ({ handleClickSubmit(); } else if (error.response.status === 400) { setSubLoading(false); + setErrorMessage(error.response.data.Error || error.response.data.message); setQuestionQuestionRunArray((prev) => { const newSet = new Set(prev); newSet.delete(questionId); diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js index 16760ba..7a4a334 100644 --- a/frontend/src/pages/user/index.js +++ b/frontend/src/pages/user/index.js @@ -47,7 +47,7 @@ function Dashboard() { const access_token = localStorage.getItem("access_token"); try { const response = await axios.post( - "https://api-cookoff-prod.codechefvit.com/ques/getRound", + "https://api-cookoff-prod.codechefvit.com/ques/get/dashboard", { round: round }, { headers: { diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css index de08d72..c28cfaa 100644 --- a/frontend/src/styles/globals.css +++ b/frontend/src/styles/globals.css @@ -60,4 +60,8 @@ body { #font_proxima { font-family: 'proxima nova'; +} + +ul{ + list-style: disc; } \ No newline at end of file From 6e2409dc2295c4af6e5546d97289ba6a2c564b52 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Sat, 23 Sep 2023 16:52:07 +0530 Subject: [PATCH 81/88] FinalTaskCheck page fix --- frontend/src/components/Navbar.js | 8 +++++--- frontend/src/pages/user/FinalTaskCheck.js | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index 2f52637..9d6710b 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -48,7 +48,10 @@ const Navbar = () => { document.cookie.split(";").forEach((c) => { document.cookie = c .replace(/^ +/, "") - .replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); + .replace( + /=.*/, + "=;expires=" + new Date().toUTCString() + ";path=/" + ); }); router.push("/login"); } @@ -63,11 +66,10 @@ const Navbar = () => { if (userConfirmed) { await RefreshToken(); updateTimer(2 * 60 * 60); - localStorage.removeItem("codeData"); + await router.push("/user/FinalTaskCheck"); } } - return ( <> diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 70612a9..2c1bf8e 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -27,6 +27,7 @@ const CompleteTest = () => { }, []); async function handleButtonClick() { try { + localStorage.removeItem("codeData"); await RefreshToken(); const access_token = localStorage.getItem("access_token"); const response = await axios.get( @@ -58,15 +59,15 @@ const CompleteTest = () => { } } } - let codeData = {}; + let jsonData = localStorage.getItem("codeData"); + const jsonObject = JSON.parse(jsonData); + const codeDataLength = Object.keys(jsonObject).length; useEffect(() => { const lengthFromLocalStorage = Number(localStorage.getItem("QueArrlength")); setLength(lengthFromLocalStorage); }, []); - const codeDataLength = Object.keys(codeData).length; - const computeArrayValue = (array) => { let sum = 0; if (array.length === 0 || array === null || array === undefined) { From 0efad630ac34be9447eb360ab3d548d8db23eb56 Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh Date: Sat, 23 Sep 2023 17:22:27 +0530 Subject: [PATCH 82/88] max 1000 lines for code limit feature added --- frontend/src/components/textEditor.js | 14 +++++++++++++- frontend/src/pages/user/FinalTaskCheck.js | 8 +++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/textEditor.js b/frontend/src/components/textEditor.js index c400ac2..d66c6b9 100644 --- a/frontend/src/components/textEditor.js +++ b/frontend/src/components/textEditor.js @@ -75,6 +75,7 @@ const TextEditor = ({ }; // const initialTime = useTimerStore((state) => state.Time); + const maxLines = 1000; const [selectedLanguages, setSelectedLanguages] = useState({}); const [langCode, setLangCode] = useState(null); @@ -84,6 +85,7 @@ const TextEditor = ({ const [codeValue, setCodeValue] = useState(file.value); const [showMore, setShowMore] = useState(false); const [selectedOption, setSelectedOption] = useState({}); + const [isInputDisabled, setIsInputDisabled] = useState(false); const options = [ "script.java", @@ -99,6 +101,13 @@ const TextEditor = ({ const handleEditorChange = (value, event) => { setCodeValue(value); + const currentLines = value.split("\n").length; + if (currentLines > maxLines) { + setIsInputDisabled(true); + return; + } + setIsInputDisabled(false); + setCodeValue(value); const existingCodeData = JSON.parse(localStorage.getItem("codeData")) || {}; const updatedCodeData = { @@ -278,7 +287,9 @@ const TextEditor = ({ handleClickSubmit(); } else if (error.response.status === 400) { setSubLoading(false); - setErrorMessage(error.response.data.Error || error.response.data.message); + setErrorMessage( + error.response.data.Error || error.response.data.message + ); setQuestionQuestionRunArray((prev) => { const newSet = new Set(prev); newSet.delete(questionId); @@ -392,6 +403,7 @@ const TextEditor = ({ onChange={handleEditorChange} options={{ scrollBeyondLastLine: false, + readOnly: isInputDisabled, }} />
diff --git a/frontend/src/pages/user/FinalTaskCheck.js b/frontend/src/pages/user/FinalTaskCheck.js index 2c1bf8e..fa90b57 100644 --- a/frontend/src/pages/user/FinalTaskCheck.js +++ b/frontend/src/pages/user/FinalTaskCheck.js @@ -59,13 +59,15 @@ const CompleteTest = () => { } } } - let jsonData = localStorage.getItem("codeData"); - const jsonObject = JSON.parse(jsonData); - const codeDataLength = Object.keys(jsonObject).length; + const [codeDataLength, setCodeDataLenth] = useState(0); useEffect(() => { const lengthFromLocalStorage = Number(localStorage.getItem("QueArrlength")); setLength(lengthFromLocalStorage); + let jsonData = localStorage.getItem("codeData"); + const jsonObject = JSON.parse(jsonData); + const codeDataLength = Object.keys(jsonObject).length; + setCodeDataLenth(codeDataLength); }, []); const computeArrayValue = (array) => { From 74b263b976005abfa5004ee8fa2a05b3f3335abd Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Sat, 23 Sep 2023 17:48:22 +0530 Subject: [PATCH 83/88] fix: Timer, UI fixes --- frontend/src/components/CurrentProfile.js | 2 +- frontend/src/components/Navbar.js | 6 +-- frontend/src/components/portal.js | 66 ++++++++++++----------- frontend/src/components/roundWise.js | 6 +-- frontend/src/styles/globals.css | 7 +++ 5 files changed, 49 insertions(+), 38 deletions(-) diff --git a/frontend/src/components/CurrentProfile.js b/frontend/src/components/CurrentProfile.js index d03caa5..47e2770 100644 --- a/frontend/src/components/CurrentProfile.js +++ b/frontend/src/components/CurrentProfile.js @@ -6,7 +6,7 @@ function CurrentProfile(props) { const { name, round } = props; return (
-
+

Current Profile

diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index 9d6710b..136a143 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -14,9 +14,6 @@ const Navbar = () => { useEffect(() => { setIsTestPortal(router.pathname.includes("testPortal")); }, [router.pathname]); - const updateTimer = (newTime) => { - localStorage.setItem("timerTime", newTime.toString()); - }; async function handleLogout() { await RefreshToken(); @@ -65,6 +62,9 @@ const Navbar = () => { if (userConfirmed) { await RefreshToken(); + const updateTimer = (newTime) => { + localStorage.setItem("timerTime", newTime.toString()); + }; updateTimer(2 * 60 * 60); await router.push("/user/FinalTaskCheck"); diff --git a/frontend/src/components/portal.js b/frontend/src/components/portal.js index eb6aef8..9191773 100644 --- a/frontend/src/components/portal.js +++ b/frontend/src/components/portal.js @@ -18,39 +18,43 @@ export default function Portal(props) { // fetchData(); // }, []); useEffect(() => { - const access_token = localStorage.getItem("access_token"); const round = localStorage.getItem("round"); - try { - axios - .post( - "https://api-cookoff-prod.codechefvit.com/ques/getRound", - { round: round }, - { - headers: { - Authorization: `Bearer ${access_token}`, - }, - } - ) - .then((response) => { - const responseData = response.data; - if (responseData && responseData.length > 0) { - setQArr(responseData); - } else { - console.log("No data received from the API."); - } - }) - .catch((error) => { - if (error.response && error.response.status === 400) { - console.log("400"); - } else if (error.response && error.response.status === 404) { - console.log("No questions"); - } - }); - } catch { - (error) => { - console.log(error); - }; + async function fetchData() { + try { + await RefreshToken(); + const access_token = localStorage.getItem("access_token"); + axios + .post( + "https://api-cookoff-prod.codechefvit.com/ques/getRound", + { round: round }, + { + headers: { + Authorization: `Bearer ${access_token}`, + }, + } + ) + .then((response) => { + const responseData = response.data; + if (responseData && responseData.length > 0) { + setQArr(responseData); + } else { + console.log("No data received from the API."); + } + }) + .catch((error) => { + if (error.response && error.response.status === 400) { + console.log("400"); + } else if (error.response && error.response.status === 404) { + console.log("No questions"); + } + }); + } catch { + (error) => { + console.log(error); + }; + } } + fetchData(); }, []); return ( diff --git a/frontend/src/components/roundWise.js b/frontend/src/components/roundWise.js index 86c1954..364a3ce 100644 --- a/frontend/src/components/roundWise.js +++ b/frontend/src/components/roundWise.js @@ -13,7 +13,7 @@ function RoundWise(props) { } return ( -
+
@@ -46,7 +46,7 @@ function RoundWise(props) { id="font_proxima" > Round Score:  - {score} + {Math.floor(score * (1/3) * 10)}
@@ -56,7 +56,7 @@ function RoundWise(props) {
{roundActive && (
- {roundActive && ( - + {isLoading ? ( +
Starting Test...
+ ) : ( + roundActive && ( + + ) )}
From e5e73e7ba17ec8b21095912a4150fbee49f9b970 Mon Sep 17 00:00:00 2001 From: NishantGupt786 Date: Sun, 24 Sep 2023 01:16:03 +0530 Subject: [PATCH 86/88] Fix: Submissions, getDashboard done better --- frontend/src/components/Navbar.js | 1 + frontend/src/components/submissions.js | 21 +++++++++++++++------ frontend/src/pages/user/index.js | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index dc5f861..0b83eba 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -32,6 +32,7 @@ const Navbar = () => { useTokenStore.setState({ access_token: "" }); localStorage.removeItem("access_token"); localStorage.removeItem("refresh_token"); + localStorage.removeItem("timerTime"); document.cookie.split(";").forEach((c) => { document.cookie = c .replace(/^ +/, "") diff --git a/frontend/src/components/submissions.js b/frontend/src/components/submissions.js index 6ccf04f..e3c6dc5 100644 --- a/frontend/src/components/submissions.js +++ b/frontend/src/components/submissions.js @@ -54,8 +54,8 @@ function SubmitCode(props) {
-

- Accepted ! +

+ Submitted

@@ -68,12 +68,16 @@ function SubmitCode(props) { return (
{index}
Not Accepted
-
{subData[index]}
+ {!submissionArray.error[index] && ( +
+ {subData[index]} +
+ )}
); @@ -83,8 +87,13 @@ function SubmitCode(props) { key={index} className="flex text-xl text-[#1ba94c] font-semibold justify-around my-8" > -
{index}
-
Correct
+
{index}
+
+
Correct
+
+ {subData[index]} +
+
); } diff --git a/frontend/src/pages/user/index.js b/frontend/src/pages/user/index.js index 7a4a334..a1d04c8 100644 --- a/frontend/src/pages/user/index.js +++ b/frontend/src/pages/user/index.js @@ -48,7 +48,7 @@ function Dashboard() { try { const response = await axios.post( "https://api-cookoff-prod.codechefvit.com/ques/get/dashboard", - { round: round }, + { round_no: round }, { headers: { Authorization: `Bearer ${access_token}`, From a0df9cf192904f2a1db25904556a385ce32671bc Mon Sep 17 00:00:00 2001 From: Aaditya Mahanta Date: Sun, 24 Sep 2023 01:19:07 +0530 Subject: [PATCH 87/88] login loader and ban handlingg --- frontend/src/pages/login.js | 21 +++++++++++++-------- frontend/src/pages/skissue.js | 24 ++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 frontend/src/pages/skissue.js diff --git a/frontend/src/pages/login.js b/frontend/src/pages/login.js index e3b05d9..25a4c46 100644 --- a/frontend/src/pages/login.js +++ b/frontend/src/pages/login.js @@ -28,7 +28,8 @@ const validate = (values) => { }; function Login() { - const [error, setError] = useState(false); + const [error, setError] = useState(""); + const [isLoading, setIsLoading] = useState(false) const router = useRouter(); const formik = useFormik({ initialValues: { @@ -37,6 +38,7 @@ function Login() { }, validate, onSubmit: async (values) => { + setIsLoading(true) try { const response = await axios.post( "https://api-cookoff-prod.codechefvit.com/auth/login", @@ -59,28 +61,29 @@ function Login() { if (error.response) { const statusCode = error.response.status; if (statusCode === 401) { - setError(true); + setError("Invalid credentials"); localStorage.removeItem("access_token"); useTokenStore.setState({ access_token: "", }); router.push("/login"); } else if (statusCode === 403) { - setError(true); + // setError("User is banned"); localStorage.removeItem("access_token"); useTokenStore.setState({ access_token: "", }); - router.push("/login"); + alert("Skill Issue detected. Please contact organisers") + router.push("/skissue"); } else if (statusCode === 400) { - setError(true); + setError("User not found"); localStorage.removeItem("access_token"); useTokenStore.setState({ access_token: "", }); router.push("/login"); } else { - setError(true); + setError("Something went wrong. Please try again."); localStorage.removeItem("access_token"); useTokenStore.setState({ access_token: "", @@ -89,6 +92,7 @@ function Login() { } } } + setIsLoading(false) }, }); @@ -134,7 +138,7 @@ function Login() {
{error && (
- Invalid credentials + {error}
)} - Let's Get Cooking + {isLoading?"Lighting a fire...":"Let's Get Cooking"}
diff --git a/frontend/src/pages/skissue.js b/frontend/src/pages/skissue.js new file mode 100644 index 0000000..15550fe --- /dev/null +++ b/frontend/src/pages/skissue.js @@ -0,0 +1,24 @@ +import Head from "next/head"; +import React from "react"; + +function Skissue() { + return ( + <> + +
+