From 69b648d7736ac85c0669eb480095456c37ff2681 Mon Sep 17 00:00:00 2001 From: Angels-dev Date: Tue, 3 Sep 2024 01:24:13 +0200 Subject: [PATCH] =?UTF-8?q?Popup=20pour=20=C3=A9tat=20connexion=20sur=20av?= =?UTF-8?q?atar=20+=20Refonte=20views=20Dashboard=20+=20Ajout=20types=20de?= =?UTF-8?q?puis=20DiscordJS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 617 +++++++++++++++------- package.json | 30 +- public/question-square-128-white.png | Bin 0 -> 3751 bytes public/question-square-128.png | Bin 0 -> 2351 bytes public/question-square-256-white.png | Bin 0 -> 9102 bytes public/question-square-256.png | Bin 0 -> 5304 bytes public/question-square-48-white.png | Bin 0 -> 1156 bytes public/question-square-48.png | Bin 0 -> 1026 bytes public/question-square-512-white.png | Bin 0 -> 22932 bytes public/question-square-512.png | Bin 0 -> 8963 bytes public/question-square.svg | 6 - src/App.vue | 36 +- src/assets/logo.svg | 1 - src/components/AvatarModal.vue | 71 +++ src/main.ts | 10 +- src/router/index.ts | 25 +- src/utils/discord.ts | 279 ++-------- src/views/404View.vue | 7 +- src/views/Discord/Dashboard/BotView.vue | 52 ++ src/views/Discord/Dashboard/GuildView.vue | 27 + src/views/Discord/Dashboard/MainView.vue | 126 +++++ src/views/Discord/DashboardView.vue | 109 +--- src/views/Discord/LogoutView.vue | 8 +- src/views/DiscordView.vue | 31 +- src/views/IndexView.vue | 18 +- 25 files changed, 867 insertions(+), 586 deletions(-) create mode 100755 public/question-square-128-white.png create mode 100755 public/question-square-128.png create mode 100755 public/question-square-256-white.png create mode 100755 public/question-square-256.png create mode 100755 public/question-square-48-white.png create mode 100755 public/question-square-48.png create mode 100755 public/question-square-512-white.png create mode 100755 public/question-square-512.png delete mode 100644 public/question-square.svg delete mode 100644 src/assets/logo.svg create mode 100644 src/components/AvatarModal.vue create mode 100644 src/views/Discord/Dashboard/BotView.vue create mode 100644 src/views/Discord/Dashboard/GuildView.vue create mode 100644 src/views/Discord/Dashboard/MainView.vue diff --git a/package-lock.json b/package-lock.json index d941a4f..9bf4966 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,29 +14,32 @@ "@fortawesome/free-regular-svg-icons": "^6.6.0", "@fortawesome/free-solid-svg-icons": "^6.6.0", "@fortawesome/vue-fontawesome": "^3.0.8", - "axios": "^1.7.4", + "axios": "^1.7.6", + "discord-api-types": "^0.37.98", "dotenv": "^16.4.5", "js-confetti": "^0.12.0", "pinia": "^2.2.2", - "vue": "^3.4.29", + "vue": "^3.4.38", "vue-cookies": "^1.8.4", + "vue-final-modal": "^4.5.4", "vue-i18n": "^9.14.0", - "vue-router": "^4.3.3" + "vue-loading-overlay": "^6.0.5", + "vue-router": "^4.4.3" }, "devDependencies": { - "@rushstack/eslint-patch": "^1.8.0", + "@rushstack/eslint-patch": "^1.10.4", "@tsconfig/node20": "^20.1.4", - "@vitejs/plugin-vue": "^5.0.5", + "@vitejs/plugin-vue": "^5.1.3", "@vue/eslint-config-prettier": "^9.0.0", "@vue/eslint-config-typescript": "^13.0.0", "@vue/tsconfig": "^0.5.1", "eslint": "^8.57.0", - "eslint-plugin-vue": "^9.23.0", - "npm-run-all2": "^6.2.0", - "prettier": "^3.2.5", - "typescript": "~5.4.0", - "vite": "^5.3.1", - "vue-tsc": "^2.0.21" + "eslint-plugin-vue": "^9.27.0", + "npm-run-all2": "^6.2.2", + "prettier": "^3.3.3", + "typescript": "~5.5.4", + "vite": "^5.4.2", + "vue-tsc": "^2.1.2" } }, "node_modules/@babel/helper-string-parser": { @@ -58,12 +61,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -73,9 +76,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -801,9 +804,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", - "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", "cpu": [ "arm" ], @@ -815,9 +818,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", - "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", "cpu": [ "arm64" ], @@ -829,9 +832,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", - "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", "cpu": [ "arm64" ], @@ -843,9 +846,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", - "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", "cpu": [ "x64" ], @@ -857,9 +860,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", - "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", "cpu": [ "arm" ], @@ -871,9 +874,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", - "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", "cpu": [ "arm" ], @@ -885,9 +888,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", - "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", "cpu": [ "arm64" ], @@ -899,9 +902,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", - "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", "cpu": [ "arm64" ], @@ -913,9 +916,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", - "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", "cpu": [ "ppc64" ], @@ -927,9 +930,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", - "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", "cpu": [ "riscv64" ], @@ -941,9 +944,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", - "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", "cpu": [ "s390x" ], @@ -955,9 +958,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", - "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", "cpu": [ "x64" ], @@ -969,9 +972,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", - "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", "cpu": [ "x64" ], @@ -983,9 +986,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", - "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", "cpu": [ "arm64" ], @@ -997,9 +1000,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", - "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", "cpu": [ "ia32" ], @@ -1011,9 +1014,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", - "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", "cpu": [ "x64" ], @@ -1045,17 +1048,11 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/node": { - "version": "20.16.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz", - "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "undici-types": "~6.19.2" - } + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.18.0", @@ -1258,9 +1255,9 @@ "license": "ISC" }, "node_modules/@vitejs/plugin-vue": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.2.tgz", - "integrity": "sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.3.tgz", + "integrity": "sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==", "dev": true, "license": "MIT", "engines": { @@ -1272,68 +1269,68 @@ } }, "node_modules/@volar/language-core": { - "version": "2.4.0-alpha.18", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.18.tgz", - "integrity": "sha512-JAYeJvYQQROmVRtSBIczaPjP3DX4QW1fOqW1Ebs0d3Y3EwSNRglz03dSv0Dm61dzd0Yx3WgTW3hndDnTQqgmyg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.1.tgz", + "integrity": "sha512-9AKhC7Qn2mQYxj7Dz3bVxeOk7gGJladhWixUYKef/o0o7Bm4an+A3XvmcTHVqZ8stE6lBVH++g050tBtJ4TZPQ==", "dev": true, "license": "MIT", "dependencies": { - "@volar/source-map": "2.4.0-alpha.18" + "@volar/source-map": "2.4.1" } }, "node_modules/@volar/source-map": { - "version": "2.4.0-alpha.18", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.18.tgz", - "integrity": "sha512-MTeCV9MUwwsH0sNFiZwKtFrrVZUK6p8ioZs3xFzHc2cvDXHWlYN3bChdQtwKX+FY2HG6H3CfAu1pKijolzIQ8g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.1.tgz", + "integrity": "sha512-Xq6ep3OZg9xUqN90jEgB9ztX5SsTz1yiV8wiQbcYNjWkek+Ie3dc8l7AVt3EhDm9mSIR58oWczHkzM2H6HIsmQ==", "dev": true, "license": "MIT" }, "node_modules/@volar/typescript": { - "version": "2.4.0-alpha.18", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.0-alpha.18.tgz", - "integrity": "sha512-sXh5Y8sqGUkgxpMWUGvRXggxYHAVxg0Pa1C42lQZuPDrW6vHJPR0VCK8Sr7WJsAW530HuNQT/ZIskmXtxjybMQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.1.tgz", + "integrity": "sha512-UoRzC0PXcwajFQTu8XxKSYNsWNBtVja6Y9gC8eLv7kYm+UEKJCcZ8g7dialsOYA0HKs3Vpg57MeCsawFLC6m9Q==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.0-alpha.18", + "@volar/language-core": "2.4.1", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "node_modules/@vue/compiler-core": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.37.tgz", - "integrity": "sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz", + "integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==", "license": "MIT", "dependencies": { "@babel/parser": "^7.24.7", - "@vue/shared": "3.4.37", - "entities": "^5.0.0", + "@vue/shared": "3.4.38", + "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.37.tgz", - "integrity": "sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz", + "integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==", "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.4.37", - "@vue/shared": "3.4.37" + "@vue/compiler-core": "3.4.38", + "@vue/shared": "3.4.38" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.37.tgz", - "integrity": "sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz", + "integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==", "license": "MIT", "dependencies": { "@babel/parser": "^7.24.7", - "@vue/compiler-core": "3.4.37", - "@vue/compiler-dom": "3.4.37", - "@vue/compiler-ssr": "3.4.37", - "@vue/shared": "3.4.37", + "@vue/compiler-core": "3.4.38", + "@vue/compiler-dom": "3.4.38", + "@vue/compiler-ssr": "3.4.38", + "@vue/shared": "3.4.38", "estree-walker": "^2.0.2", "magic-string": "^0.30.10", "postcss": "^8.4.40", @@ -1341,13 +1338,13 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.37.tgz", - "integrity": "sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz", + "integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.4.37", - "@vue/shared": "3.4.37" + "@vue/compiler-dom": "3.4.38", + "@vue/shared": "3.4.38" } }, "node_modules/@vue/compiler-vue2": { @@ -1408,13 +1405,13 @@ } }, "node_modules/@vue/language-core": { - "version": "2.0.29", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.29.tgz", - "integrity": "sha512-o2qz9JPjhdoVj8D2+9bDXbaI4q2uZTHQA/dbyZT4Bj1FR9viZxDJnLcKVHfxdn6wsOzRgpqIzJEEmSSvgMvDTQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.2.tgz", + "integrity": "sha512-tt2J7C+l0J/T5PaLhJ0jvCCi0JNwu3e8azWTYxW3jmAW5B/dac0g5UxmI7l59CQgCGFotqUqI3tXjfZgoWNtog==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "~2.4.0-alpha.18", + "@volar/language-core": "~2.4.1", "@vue/compiler-dom": "^3.4.0", "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.4.0", @@ -1433,53 +1430,53 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.37.tgz", - "integrity": "sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.38.tgz", + "integrity": "sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==", "license": "MIT", "dependencies": { - "@vue/shared": "3.4.37" + "@vue/shared": "3.4.38" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.37.tgz", - "integrity": "sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.38.tgz", + "integrity": "sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.4.37", - "@vue/shared": "3.4.37" + "@vue/reactivity": "3.4.38", + "@vue/shared": "3.4.38" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.37.tgz", - "integrity": "sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.38.tgz", + "integrity": "sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.4.37", - "@vue/runtime-core": "3.4.37", - "@vue/shared": "3.4.37", + "@vue/reactivity": "3.4.38", + "@vue/runtime-core": "3.4.38", + "@vue/shared": "3.4.38", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.37.tgz", - "integrity": "sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.38.tgz", + "integrity": "sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==", "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.4.37", - "@vue/shared": "3.4.37" + "@vue/compiler-ssr": "3.4.38", + "@vue/shared": "3.4.38" }, "peerDependencies": { - "vue": "3.4.37" + "vue": "3.4.38" } }, "node_modules/@vue/shared": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.37.tgz", - "integrity": "sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz", + "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==", "license": "MIT" }, "node_modules/@vue/tsconfig": { @@ -1489,6 +1486,186 @@ "dev": true, "license": "MIT" }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.11.1.tgz", + "integrity": "sha512-Y5hCGBguN+vuVYTZmdd/IMXLOdfS60zAmDmFYc4BKBcMUPZH1n4tdyDECCPjXm0bNT3ZRUy1xzTLGaUje8Xyaw==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^4", + "drauu": "^0.3", + "focus-trap": "^7", + "fuse.js": "^6", + "idb-keyval": "^6", + "jwt-decode": "^3", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^6" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -1579,9 +1756,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.6.tgz", + "integrity": "sha512-Ekur6XDwhnJ5RgOCaxFnXyqlPALI3rVeukZMwOdfghW7/wGz784BYKiQq+QD8NPcr91KRo30KfHOchyijwWw7g==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -1787,6 +1964,12 @@ "node": ">=8" } }, + "node_modules/discord-api-types": { + "version": "0.37.98", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.98.tgz", + "integrity": "sha512-xsH4UwmnCQl4KjAf01/p9ck9s+/vDqzHbUxPOBzo8fcVUa/hQG6qInD7Cr44KAuCM+xCxGJFSAUx450pBrX0+g==", + "license": "MIT" + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1813,9 +1996,9 @@ } }, "node_modules/entities": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz", - "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -2256,6 +2439,15 @@ "dev": true, "license": "ISC" }, + "node_modules/focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "license": "MIT", + "dependencies": { + "tabbable": "^6.2.0" + } + }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -2678,6 +2870,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -3199,9 +3392,9 @@ } }, "node_modules/rollup": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", - "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", "dev": true, "license": "MIT", "dependencies": { @@ -3215,22 +3408,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.20.0", - "@rollup/rollup-android-arm64": "4.20.0", - "@rollup/rollup-darwin-arm64": "4.20.0", - "@rollup/rollup-darwin-x64": "4.20.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", - "@rollup/rollup-linux-arm-musleabihf": "4.20.0", - "@rollup/rollup-linux-arm64-gnu": "4.20.0", - "@rollup/rollup-linux-arm64-musl": "4.20.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", - "@rollup/rollup-linux-riscv64-gnu": "4.20.0", - "@rollup/rollup-linux-s390x-gnu": "4.20.0", - "@rollup/rollup-linux-x64-gnu": "4.20.0", - "@rollup/rollup-linux-x64-musl": "4.20.0", - "@rollup/rollup-win32-arm64-msvc": "4.20.0", - "@rollup/rollup-win32-ia32-msvc": "4.20.0", - "@rollup/rollup-win32-x64-msvc": "4.20.0", + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", "fsevents": "~2.3.2" } }, @@ -3379,6 +3572,12 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3422,9 +3621,9 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true, "license": "0BSD" }, @@ -3455,9 +3654,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -3468,15 +3667,6 @@ "node": ">=14.17" } }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3495,15 +3685,15 @@ "license": "MIT" }, "node_modules/vite": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz", - "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz", + "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.40", - "rollup": "^4.13.0" + "postcss": "^8.4.41", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -3562,16 +3752,16 @@ "license": "MIT" }, "node_modules/vue": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.37.tgz", - "integrity": "sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.38.tgz", + "integrity": "sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.4.37", - "@vue/compiler-sfc": "3.4.37", - "@vue/runtime-dom": "3.4.37", - "@vue/server-renderer": "3.4.37", - "@vue/shared": "3.4.37" + "@vue/compiler-dom": "3.4.38", + "@vue/compiler-sfc": "3.4.38", + "@vue/runtime-dom": "3.4.38", + "@vue/server-renderer": "3.4.38", + "@vue/shared": "3.4.38" }, "peerDependencies": { "typescript": "*" @@ -3613,6 +3803,23 @@ "eslint": ">=6.0.0" } }, + "node_modules/vue-final-modal": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/vue-final-modal/-/vue-final-modal-4.5.4.tgz", + "integrity": "sha512-wYunoN89Ago2d6p/hevyo4KSfar1HxScllS6FaHujCGyx69fsb40YPGzN17bk9K68daYAgrJ1inxv+fvhIGv5A==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "^10.5.0", + "@vueuse/integrations": "^10.5.0", + "focus-trap": "^7.5.4" + }, + "peerDependencies": { + "@vueuse/core": ">=10.0.0", + "@vueuse/integrations": ">=10.0.0", + "focus-trap": ">=7.2.0", + "vue": ">=3.2.0" + } + }, "node_modules/vue-i18n": { "version": "9.14.0", "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.0.tgz", @@ -3633,6 +3840,18 @@ "vue": "^3.0.0" } }, + "node_modules/vue-loading-overlay": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/vue-loading-overlay/-/vue-loading-overlay-6.0.5.tgz", + "integrity": "sha512-PYM6FM8INbmwlds/eCoELo3J3/YXfjbMzAQ7BfnfFq9hHeIQ69yLgJHXHSRRHZLPfyYbQMwh0BUAuBE125DK7g==", + "license": "MIT", + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, "node_modules/vue-router": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.3.tgz", @@ -3649,14 +3868,14 @@ } }, "node_modules/vue-tsc": { - "version": "2.0.29", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.29.tgz", - "integrity": "sha512-MHhsfyxO3mYShZCGYNziSbc63x7cQ5g9kvijV7dRe1TTXBRLxXyL0FnXWpUF1xII2mJ86mwYpYsUmMwkmerq7Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.2.tgz", + "integrity": "sha512-PH1BDxWT3eaPhl73elyZj6DV0nR3K4IFoUM1sGzMXXQneovVUwHQytdSyAHiED5MtEINGSHpL/Hs9ch+c/tDTw==", "dev": true, "license": "MIT", "dependencies": { - "@volar/typescript": "~2.4.0-alpha.18", - "@vue/language-core": "2.0.29", + "@volar/typescript": "~2.4.1", + "@vue/language-core": "2.1.2", "semver": "^7.5.4" }, "bin": { diff --git a/package.json b/package.json index 4d083e3..e937477 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zac-mainframe-front", - "version": "0.1.0", + "version": "0.2.0", "private": true, "type": "module", "scripts": { @@ -12,6 +12,9 @@ "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", "format": "prettier --write src/" }, + "//": [ + "Garder eslint à la version 8.57.0 pour éviter un problème de dépendance" + ], "dependencies": { "@fortawesome/fontawesome-free": "^6.6.0", "@fortawesome/fontawesome-svg-core": "^6.6.0", @@ -19,28 +22,31 @@ "@fortawesome/free-regular-svg-icons": "^6.6.0", "@fortawesome/free-solid-svg-icons": "^6.6.0", "@fortawesome/vue-fontawesome": "^3.0.8", - "axios": "^1.7.4", + "axios": "^1.7.6", + "discord-api-types": "^0.37.98", "dotenv": "^16.4.5", "js-confetti": "^0.12.0", "pinia": "^2.2.2", - "vue": "^3.4.29", + "vue": "^3.4.38", "vue-cookies": "^1.8.4", + "vue-final-modal": "^4.5.4", "vue-i18n": "^9.14.0", - "vue-router": "^4.3.3" + "vue-loading-overlay": "^6.0.5", + "vue-router": "^4.4.3" }, "devDependencies": { - "@rushstack/eslint-patch": "^1.8.0", + "@rushstack/eslint-patch": "^1.10.4", "@tsconfig/node20": "^20.1.4", - "@vitejs/plugin-vue": "^5.0.5", + "@vitejs/plugin-vue": "^5.1.3", "@vue/eslint-config-prettier": "^9.0.0", "@vue/eslint-config-typescript": "^13.0.0", "@vue/tsconfig": "^0.5.1", "eslint": "^8.57.0", - "eslint-plugin-vue": "^9.23.0", - "npm-run-all2": "^6.2.0", - "prettier": "^3.2.5", - "typescript": "~5.4.0", - "vite": "^5.3.1", - "vue-tsc": "^2.0.21" + "eslint-plugin-vue": "^9.27.0", + "npm-run-all2": "^6.2.2", + "prettier": "^3.3.3", + "typescript": "~5.5.4", + "vite": "^5.4.2", + "vue-tsc": "^2.1.2" } } diff --git a/public/question-square-128-white.png b/public/question-square-128-white.png new file mode 100755 index 0000000000000000000000000000000000000000..285688146993005697ab5812a8851dbbdb5881c2 GIT binary patch literal 3751 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 Rv7G<_002ovPDHLkV1m-C#dQDx literal 0 HcmV?d00001 diff --git a/public/question-square-128.png b/public/question-square-128.png new file mode 100755 index 0000000000000000000000000000000000000000..ce3a4d8f2f7dd7d63035d2d176976bb59910d7ee GIT binary patch literal 2351 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
%PxiGNS>{X$M-UKR(PLZay6rh4_dals0= zp?I*)xt;(wdE|ShEM|9(vA9?NcJhDg60)09K&K9{=Npcl3rcHV;#bmJ;}_nuMp&xj zCHBi5;^6YoxF&1N;jYbWOtV|0`f~ciZ&4>^KUagMCk`+tO02cN7RKdqwiJJNqZ-TR zB|R;dKUzf|l1I*Rm!5H(rmC_>lXn^%v42#8&SSu^H- zNa49d=3sEMFoqGix+~dpP#P)BO-;HwL>6M-uIADRazUkt^j)arL#)T2<){v#&BO|h zf6s`umW0YrTJ3Q>-u{|+J#FX#XhKzVr#0^0GJg1QhoRFs{vMcrQB9SWl0ph2XHQ@6 zCm%)l8x!{#B3-!a#9>YB6WiH3v^zhs_MSRSZ=i>%=2ZKi9z;#cI$Z%TrH;R*LEJ!PPccS#o#@qQodqfH*jM2qoqHO?1?we!Wkii^@V5pdRSZH!<>qfn{Wo3;* zRfyJ}z<7U>g{}>q=W}*JQbNIS0(yR>EDp@8^CZni|C7P=KyX3Gqpf89`5JZzjuGgRh#~losa@izV!6g?n4O4(V6w{y+xfNLv3N`D#0PZXm+)EWL7J=L!f^!{6nu zaDd?8K&E7UHwoSg;~@Q1rtYQ!EwwsUW#9VO-4DPyy$wE|F>)Hx->7J>g10~ngp#_b zWiP*J{geA^3)X6z=1e{LIm1qzJX0vGr{3#n#oG1 zvj6MMfSY_-{O?e)+gnYJ8^z5Q9EuqJ5G zy;YdY7CHHkZjM*6L=nRN(M^!=AYR($08BSG;)Wnhnd(2f=}EdPhl+>UQ-Qly6ocF_ zg>l9kZF{2#H{j=fl0L&^oZkxL%W> z@31wJ^KL|u1c_!tA_CG^xBXt z>PHk@(eY4JK&6+&Q8vo141~WJ@hF7Z->E<2=SWw0X5&R;xC z=Uk8{`*cR>uLC|{#_RueT}k9dns;){m~);v7%&I1!2OKKpNvlDvcn+`yg6gNT?&Nq ze{Ei?nP&V2=BUO_CJ-ox=;KIk2V#JUDqH z`AB;cuRBr+L(y*#qH?~LAyQQ9@YLTQsfpvqvN>ZP#yCmW^SnJ{iXId|yr`IK?2xS3 zRsrs|pgJy{ex(0vP_g!;^6hp*`RlW5b+FgZ(K7yPM<3J20_Uq|qbre3T)mcBY`%P3 zGj2~NQrhIP`WjWq<*w3w%*cSriQNxrS*ncpD=*u$(H_F8VWmHL5F@_VSa8tH1r65=>@oK- z!5Z*nJc@K#if}r)ca^M#e^KI{>Rp@KtSV58c#5-wheGa}n0!|sdwd~wc}_zQIa`HH zR*~V=5cR*xZ=A1#?kjoY_wvMnW1D{s;c;Mu$QzK$*KcI>Zze-LNNO>Z-B}VgOl0E{ zq|ytt1yu^n`mbvbg-G`uK&7X73Mp}9jn;9_-ogP1?*r+{lt7ExFJ0Cp|I)S&lVAJr z4s%9P(D%lOVP$B9-9|1^plZ14MrA#mU!XxHJ6tZYHD|p`LzAieZ-=(mKMu-_BrV}6 zu`+5Nb1@*eoAsbo#)+tZ`8X(s(A}{tF4_vNjIcfr^?bs9tT}npPhZZP@An%jg31(6?)L*+E#@rbt>`>lDt>u-_5KjWI$ z{1EM7H-tn&oA8=-_j+EzpFo9H$h0*-1V>T-X zI@WiuMDN%A9;MB=sD^v{kFvRECqb=DPesljDW|uxk>)Bt4 z*_fspI)0V0j(J3PL;p60zTFAvo8W0%=5O{&G`N4;*WxC5eSF3#g6MchL+K#2f{wAr zy4|JQ+=7&ueZ{wect7C^EIu1HK28z7{G!8V!yyukA8K9ZiOM{}D0+6}A$9h}&+UmN i2|QkIq3Z3PA+%=Ub@aekJp6$TIB9BS^1|5t-v0qC_K#%% literal 0 HcmV?d00001 diff --git a/public/question-square-256.png b/public/question-square-256.png new file mode 100755 index 0000000000000000000000000000000000000000..9fa1feb03f6964a6be74f69f2c8421288ad5b3f1 GIT binary patch literal 5304 zcmaKQc{J4j+xKV2V2quyHrBB-#TX0*V_!qaE<0skBBR0BDZ513LzXt_`^{c z5;DkAA+m&`+wVN*JkN8^eeV0OYdf#^^~d{luJgLCOlwPHR+u0R0034~69XFn0G+uY z017!X2RA)7&y1+IiOod-h?N2WQVIYZpQT9a01%}J0N*?SK%)cz_`=FMF5%7!U@voH z0|02sMxxIm#_OgR4H?&=BAg1S(Ei?80N^e&HPE$-`LtP1xMMfiO?tgm;iu~7?!l1f z>j?KL2kCNO%3{8Sa7~IJ3Jz9rvJdmC^h#>)4X7CJ4dMvzBn9I{Gmi(DOo+WgJid5P zeiRh?La9e#jO7J&{zq;&npsQPt+n`D$K}eu*oz-Go1Q)kb@=$?xG32ptiZ%Qf-G4W z)I#nvRB&ob>S(IIi9=N9)FA4UU?Va$X|c|a-Kn0k#ij5x^etRkp)qgfKt5h%rZUGU z2CGZAZ?~(}IX%jDtMP&9AH4_QJx`A1dluS+J!!W34XZvl&0nC5hrZNj3$5b)Wy(^!W#f}*MZ9xQnQ%23EM$G`{!wNi6$Hwz)4%m z_Yx!b85L#77?bLYg3E|+D9=!E+mX@@#eU4Iq%xZA-5p`+ShI;;5~_ICsn2fwwF8$L zq0Crn&@QU7K^pXM8@o#>aAVi!*z<*XW69N9$8_^dG%u;w{tQYjfgVsUX+oKyO6T_B zZ~wpGfe6-Iw0-mptC;w0V$<|W=n%CMIKTQ+rr)Rd6NjFS3=KMK)y-TcM@lxoxI3FC zAr)4#d8qN4*aVC_j_}XasiY*rjdoGLHD6C(CMDu}+gr>7pxpOZyy%QIUrjiXu<;bu zhijqUmi@ibLYm3t^d*CIwUqNUVp&*$A?=qph}GqYc-^NPT!MWTyvzb~r~aJ)o8PYY zOr5d;N!E2fel3*G13FbG+8LAvBmF;I@3r=td;SzhcU3i{g(~h-q`6ba>iM*`a@DF6Mbm%rSy;VhAuIh+f;9Q8!bk*j2yHTAN z-ts-{p-OmIyv2|MO2 z=sPt|WzBxP+KfLoV8Bw~Tpo-rK2sm4bS~3kc^Zj9(kBqew#@|LVx!my)-1m#7mpCI ztj@EPmVrr$=8J9oV=X~7ypgvB{|2_-7Y^$Yy{E4g%%GDBucspLjn;hqqRD0>^fvX_ z)B_Nr#whxPrP~@gVQwB(Ad%N~Ut?xpc~7r=x_Ba!JffBBw9d01GtlwXOLt*R@7?;a zH17pF13)Bdm5pORrjhID{;he?*e`eb6lco7$pivPTIB~}hM`sJM!*{-@YNhnd}J1I z-y1^xPidVOj%H9(lE~LX$AP3x2WX2}VP}y#ds{1J)M@ggS#~W*hFB`1MW81vE#HWX zB9U+M{e7`z7lsD<)>xOOA$KUB|TTu3iQESApvF6D?fPe zH?D9D68jxC>L*63v*bM7K_3JLF>j?R6_!$eYlO^66!iN%eQ-A}h=x?PHG8oUkSeGN zqxnI{+p}bSQbi;3OIgq*W32F9vA}7ACmXOdu1+S7VT08$C8VD4J|@-F!bkYK)8Ov| zC!t_zkQZf5&`(JsDA|RveQd>Rau+QEeeycjc|)93c**shYnqXVA2M|mdpoMD$N$?6 z)=e?IoI{v=p*a5|#lpaQedd4eam^I5vuQ#Vb7tE$GED021%~J>R<3DZB788}Z}dcHn&QYFR`tS$X8C$!8_T|$@sL*Gu*@xV2 zdFlXG+lky4uYV+SHjCeH^}s0<5BHv3qtJ*TQMxjum)*7`gW4` zf(+5ZM~u?KES3~oLmF)tzZzV6t*Yz3;t6iG2MQW4=w(Kr?Vtq((dgzyi% zOTND!xFlLS-4kurSbIm@vgz)+iTwPfAz%%yK!wh z;YsBiKCEjI+{y|kq65n5Hz3}>%=MpG(jZdKBM$G(c$@FcgLGOo$4ck=ki2x>mWv3} z$~;9mCfcgFdFzUq@CutM?81-pi%eTI7v>)&BP*9M<}*k+CTb;xH$v!(cE!UFA2eTX ztKM+2@etQX9?v)$NrKXxv7e7cf9;xaNS7TR>Il;+`;O8Y&|nP(m5-b~gNnVzsO+wuKrv|OLSMur(`vY)k)wlb0}{{Dp2Y4v zxow=2{-t}AkcmtpwAAbo4EZKFMK5h1Ere7sEjkjlDw$Tv7;p-2I`!A<3f~~;VyDQm zR&Rfc4L>~poutVGXO(Hyg&&@h&**24zK zVR^LO=x-ffh_;#jPK@Wi(1KHN`4?x$49oM22kV(@y?gO|7>;^OW1mR>dSdv_ya^Vr zhEZsc0D}CLN;^-cxVuI|`wtP?hKg~8u*JFwE@!W=8PkQ3i*@8>%LEn^Rb#1IoRD(|!_4)pSx= zvgpNi9y&)qr|XAO&t)onsZX*x=q5feV(&SNcjm~!eWf_L7^`d%AZiUHu8&ZQd`;VC zr-{HR=VPn*K^@ZhM>zb;uvZaxZIPYZiC&QP9E*5LFzPIo~H3+0eJ&ObCfpG=%2w$Tg^d6nSc=q#~bd(k@&frNKPhJ z_Z{mbtfNS`BinKXbjwsHO~lw=xJ4U2u6Y53yAF0|F)hJ9b`2;u;STq6Ux90zN$&aF z13b~YaQPIqEJJ|~Sl-)bPW%S^^@YTq8e-Gr<4T=9xM=b3BPWjMIC(X=b$?=odtS1nYRpC{akW*w=Z)A`|6!nH&2NTEWo4Jsk)gQjf2{fSq zUkC9!>yo78+wJ3CQ_t?I5$>W6j<#AK6azJmK}xX;mKDCK_%gIF)s!T`>#Py>Fg5B= z4(m7eqd(P!!1z&Ps_&JLT_ei8;34@WZLm)`_epAG(YD01Pdk$fY1-hjQ9>W#U`H{5 zGmG;ve+QIWtlk&+=eEP+eZoiiJ`uwL$e-6z5mPZZvXrG7zq(E8OH5`s;au@g4`hma*BY{>N)!a9c_m zi7_=d!%k2L!cn7|QS*>z;EXZL$63G`O?jSi_Qc0Tm5jIEVgqBs6=?rl`8Foh6M})2 z9nb3B)0#SsN@oMd%na=Sq2Kkz7adf<3et8-7tI~_by>wg&BGb1w>l%ROVB{51P{@6{>Bb z#gMt@A0_pUt|`#C{FE|TjyaO)*ii`o3*TjYN@0xMX~J<3KxWz3UMUY3K^9GOmXlq* zsbYD=${x!ESR3-phS30G?3?2weI1aq(#5}Y$JfEE@&8Sc{6DesK3s}=5xmm|T#&v> zMRFM2I3q}DqJ?B7XPFU#I-q;-Q^md6eQH?u7)tZPM7H1IEcc?%WfYw5Umzqu(J-sJ z4SXG2;T<}D5(-{cFLde}ix~0c!+cm5>*0v+$JxZ1EPAo9E9DqZqdJ@O4H-cUyZjFH z&4#%A@8mDSuL|90CSHF%J*0kxN0B(eu47+x8OY}&B%XHyA*+$yJ#lY)dFIT@HoT14 zI++#oj|P}m*8AU;$aPNV_kRWtgrkrtk*r= zDB@A?T=I;ZHqMiZ)f}Z1YXcXpy8PaM9mcE@ zw2ZQk#7B$yo_!Wj*VUt0rmI~;5$C=7u%JB1i*Y4Zi2HqxC76^8lRJc{G3|kz8|n?G z9)=oT06Fh`sC{Q(6*`^3e|4Snf0wyuq%yVu(l?d_!T5$E14tNkYEJ2au=F)?Scb|~ z_el1PSj50B2|jMo64t3SG7Y9EwZx81eKp>=SLCLne_?M^Ng~7nVHrSQP|xf(Cz_0D zf!IuGq#nHaQh@4=PrE{{t;B!xwhVw2)GJy4N53nQ>=GwbESu<)WCmh#$uTj}zIY8$p4L~N8w!6;wVMw&D?@P4ajRt!k~j}p^TjF%EZigE zByUT>X(Zg@&7jKI9XE$$5x)r5^ND-f2k&XMnOaGlN)c_P&szcm*ZUl|wp74+{FIjPqFI7NKUJkuXPYy6pUf;D zhI-y4#vB!>`S%hWPie`jg+g8yO=l)hUi1Xl`HBHEfdkKb93?4 zJ4FAl;@Xxi$@Oh{@v8#52H}Mi7GdvmC|;KkM(!#U-ayGv&o*PT4O^Z+=B-(Jct6?B z+Fa-gF?M(!O2<})H5I+5z<|yK59J{-8{fx_4)CQw)MLMwD}%z85#&XpVB>=nxw8eh zel(Gp6IlUwl_<1i6Oe$s-vd-0hr}^V@QSZSsz%0J7hlge@k-wZ+aveS{o($!(&jR| zRNcyCJ@OZgs*Q_%5s!_%w&-T&{I_-UePXdnP=VWd{glJImxI@2|JBjd=rMD%q)^L@ zt^{rZdd8rx$4j;|zGtg^cGrA-h4b($AJo2un*85jOG)-!r{9(3jNFVS-Vu3pEc%$` zMV^Y9_LJ1N*>MHkS)OehHiCUa#yAtgFkeUf>?8FapXw*{3{lgAUbi$}U;nmwD(YKi zcz>fsQ19(8+`zY|+}BUzf816#do@FURe8j*@0RUU{1JE0sHGggamNPwoZb-V?zTpD z{b}-F;n(RuriZT{kDhN8lh~jwIDLI~^fj8i=Bwsj_{LgU#;%Na@_EU>^Qb?YjRbQ? zDw=s1~CVbM_TrWu^9KN~;x#Rz6{ z#|^39Q|6&8?=)EbnTz3I;&ZR4Uzm!2en_8zp}KaH%!9le>Kx>juAbsxEcqdc`H&N7 zqAF-0ru|LUk1p`2pg-{`1@6|$J&Kn?7ZDl8b7Nj?NyE0^ThKGkjPVisHIxJhCg&x6L#wiZZ|JB(5-Au7Hn^-+N-AP_IbiD54dEHmTJHq$O z0BA)t2BnBaDJ$72scB#^8p`VOii#SFimPgNXIH`h4-g#cbIp(NKLd&bHn3*^ng842 k`n6!+$m^cLVgDV2QTabjSOuTnI>P{_hL#3T^*oaP3yULag8%>k literal 0 HcmV?d00001 diff --git a/public/question-square-48-white.png b/public/question-square-48-white.png new file mode 100755 index 0000000000000000000000000000000000000000..dc7ffa7217aa1d1dfce46abfe9fa17b8ae81d8b2 GIT binary patch literal 1156 zcmV-~1bh35P)Px(K1oDDRA@uxnr-NvV;sjnU(fP9#K^Nud6u_~GLJ*cHd@&viZ?4$Hno&_UbDzU zBrit9jAWvrHD1gMFD8biEDMvQh#7^S>pS=1>fSlK?{ohDbKg#WZ~p(zxz2rkzxVI? zcU>Zrh&Tqg61WhU1ndv&lCNpu|382qfX{$czzRtlJ2>QjBEo+Sd|_H}GO%+CKBpw3hN18c028zsGFl`=a8~kxS-_Fm{x+wDCa@YfuLOR!q%{qKt=uXi zCIim^M`VlFn7~)S;n|0aCC#sVVhal*;(ovu(~-?4U=!K9_{27Um86$iz*o6tL`(;s z&wOHw3H$==S^WAp;BrZCRz9tT1rc!p@M`ke-HYwFb|Y|^q_{W1jnm`vIOp+>`v_(Xo~YcvT=wvw?8SdBdt}+ObKT~m?7B_cH&=Fe-R3U^ WjkWunV0rBT000021szu=G;RO2#Gn_~r( zf9C1p7!q-K>x{Gh!j2Nh>hFdnEplMhn=yrq$JqR2@93Phg8h(VFrNTN#s+rAPBn=R1twNjuf{7k%4|z^wn@U*K!)lg|0S5C*#MH;g_w}v_- zdp}=$@zhOk-mM`U+kKzSOmyA8{g~Qz!zqQL_RCi;U}=?z{-fYv9-qpVzj%?*Qp^1Q z!T8-Hs?-SVDy6ZE6?BF?9dqP!t$4iU*qb_$O#7mm$Ck} zuxs9@wyn!VuVX^Xj`I`VC>XDP(eXnz&82RFWaAahtqSL&Z?m#RxTSX52`Br+mfkOJ zJ?!&wX9QDW6U*5NvqcLEx%e;pyu0zEMDahL*9(;c(oAO_un>D@Qm6gY0#noRr zr@85-E($$)FsUV@iS^>Fht-8FRubv0fmSo7icg4l)mr~z`6Pk*CohdzQ}p&LI$gSa zQ*@Ej>1B5=+z^>)qIdW4VVhGfIYL~C40Gme4t=mjBj?ajO{UqGTo-iP)o3)dKaY}( zwg^gHqb{lNt4Q?GwO3DMTP+-_4eeD`?q((L;gEN}Rk-AOwybWBQ;SOya|zopr E0NUS}jsO4v literal 0 HcmV?d00001 diff --git a/public/question-square-512-white.png b/public/question-square-512-white.png new file mode 100755 index 0000000000000000000000000000000000000000..72b0489141541e58a9182ef2783929e5fd6556f6 GIT binary patch literal 22932 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 Nh4%@>)ov%|{sSBumHhw! literal 0 HcmV?d00001 diff --git a/public/question-square-512.png b/public/question-square-512.png new file mode 100755 index 0000000000000000000000000000000000000000..c958c099e91fa2540279f231c29d521742f482e3 GIT binary patch literal 8963 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 - - - - - diff --git a/src/App.vue b/src/App.vue index 554d5db..ce7766f 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,15 +1,20 @@ @@ -37,8 +53,8 @@ onMounted(async () => { @@ -47,6 +63,8 @@ onMounted(async () => { + + \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 47a738b..cd109f0 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,20 +3,22 @@ import { library } from '@fortawesome/fontawesome-svg-core' import { fas } from '@fortawesome/free-solid-svg-icons' import { fab } from '@fortawesome/free-brands-svg-icons' import { createApp } from 'vue' -import { createPinia } from 'pinia' import { createI18n } from 'vue-i18n' -import cookies from 'vue-cookies' +import { createVfm } from 'vue-final-modal' +import { LoadingPlugin } from 'vue-loading-overlay' import App from './App.vue' import router from './router' import './assets/main.css' +import 'vue-final-modal/style.css' +import 'vue-loading-overlay/dist/css/index.css' library.add(fas, fab) createApp(App) - .use(createPinia()) .use(createI18n({})) + .use(createVfm()) + .use(LoadingPlugin) .use(router) - .use(cookies) .component('font-awesome-icon', FontAwesomeIcon) .mount('#app') diff --git a/src/router/index.ts b/src/router/index.ts index a37a4d3..ec53047 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -28,9 +28,28 @@ const router = createRouter({ meta: { title: 'MainFrame | Discord', discordAuth: false }, children: [ { - path: '', + path: 'dashboard', name: 'dashboard', - component: () => import('../views/Discord/DashboardView.vue') + component: () => import('../views/Discord/DashboardView.vue'), + children: [ + { + path: '', + name: 'dashboardMain', + component: () => import('../views/Discord/Dashboard/MainView.vue') + }, + { + path: 'bot/:botId(\\d+)', + name: 'dashboardBot', + component: () => import('../views/Discord/Dashboard/BotView.vue'), + props: true + }, + { + path: 'bot/:botId(\\d+)/guild/:guildId(\\d+)', + name: 'dashboardGuild', + component: () => import('../views/Discord/Dashboard/GuildView.vue'), + props: true + } + ] }, { path: 'config', @@ -49,7 +68,7 @@ const router = createRouter({ path: '/:pathMatch(.*)*', name: '404', component: () => import('../views/404View.vue'), - meta: { title: 'MainFrame | 404' }, + meta: { title: 'MainFrame | 404' } } ] }) diff --git a/src/utils/discord.ts b/src/utils/discord.ts index 1367656..639015a 100644 --- a/src/utils/discord.ts +++ b/src/utils/discord.ts @@ -2,248 +2,77 @@ import axios from 'axios' // Fonction pour rediriger vers Discord pour l'authentification export function login() { - window.location.href = import.meta.env.VITE_BACKEND_URL + '/discord/auth/redirect'; + window.location.href = import.meta.env.VITE_BACKEND_URL + '/discord/auth/redirect' } // Fonction pour se déconnecter export async function logout() { - try { - console.log('1111') - const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/auth/logout', { withCredentials: true }) - console.log('1112') - console.log(response.data) - console.log('1113') - window.location.href = '/discord/logout'; - } catch (err) { return null } + try { + const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/auth/logout', { + withCredentials: true + }) + console.log(response.data) + window.location.href = '/discord/logout' + } catch (err) { + return null + } } // Fonction pour récupérer l'état des bots export async function checkBots() { - try { - const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/bots', { withCredentials: true }) - return response.data - } catch (err) { return null } + try { + const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/bots', { + withCredentials: true + }) + return response.data + } catch (err) { + return null + } } // Fonction pour récupérer les informations de l'utilisateur export async function checkUser() { - try { - const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user', { withCredentials: true }) - return response.data - } catch (err) { return null } + try { + const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user', { + withCredentials: true + }) + return response.data + } catch (err) { + return null + } } // Fonction pour récupérer les guilds de l'utilisateur export async function checkUserGuilds() { - try { - const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user/guilds', { withCredentials: true }) - return response.data - } catch (err) { return null } + try { + const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user/guilds', { + withCredentials: true + }) + return response.data + } catch (err) { + return null + } } -// Types de données Discord -export type snowflake = string // A unique identifier for an object within Discord -export type ISO8601 = string // Date and hour timestamp "2017-07-11T17:27:07.299000+00:00" +export async function getUser(userId: String) { + try { + const response = await axios.get(import.meta.env.VITE_BACKEND_URL + '/discord/user/' + userId, { + withCredentials: true + }) + return response.data + } catch (err) { + return null + } +} -export interface User { - id: snowflake // the user's id - username: string // the user's username, not unique across the platform - discriminator: string // the user's Discord-tag - global_name?: string // the user's display name, if it is set. For bots, this is the application name - avatar?: string // the user's avatar hash - bot?: boolean // whether the user belongs to an OAuth2 application - system?: boolean // whether the user is an Official Discord System user (part of the urgent message system) - mfa_enabled?: boolean // whether the user has two factor enabled on their account - banner?: string // the user's banner hash - accent_color?: number // the user's banner color encoded as an integer representation of hexadecimal color code - locale?: string // the user's chosen language option - verified?: boolean // whether the email on this account has been verified - email?: string // the user's email - flags?: number // the flags on a user's account - premium_type?: number // the type of Nitro subscription on a user's account - public_flags?: number // the public flags on a user's account - avatar_decoration_data?: AvatarDecoration // data for the user's avatar decoration +export async function getGuild(guildId: String) { + try { + const response = await axios.get( + import.meta.env.VITE_BACKEND_URL + '/discord/guild/' + guildId, + { withCredentials: true } + ) + return response.data + } catch (err) { + return null + } } -export interface AvatarDecoration { - asset: string // the avatar decoration hash - sku_id: snowflake // id of the avatar decoration's SKU -} -export interface Guild { - id: snowflake // guild id - name: string // guild name (2-100 characters, excluding trailing and leading whitespace) - icon?: string // icon hash - icon_hash?: string // icon hash, returned when in the template object - splash?: string // splash hash - discovery_splash?: string // discovery splash hash; only present for guilds with the "DISCOVERABLE" feature - owner?: boolean // true if the user is the owner of the guild - owner_id: snowflake // id of owner - permissions?: string // total permissions for the user in the guild (excludes overwrites and implicit permissions) - region?: string // voice region id for the guild (deprecated) - afk_channel_id?: snowflake // id of afk channel - afk_timeout: number // afk timeout in seconds - widget_enabled?: boolean // true if the server widget is enabled - widget_channel_id?: snowflake // the channel id that the widget will generate an invite to, or null if set to no invite - verification_level: number // verification level required for the guild - default_message_notifications: number // default message notifications level - explicit_content_filter: number // explicit content filter level - roles: Role[] // roles in the guild - emojis: Emoji[] // custom guild emojis - features: string[] // enabled guild features - mfa_level: number // required MFA level for the guild - application_id?: snowflake // application id of the guild creator if it is bot-created - system_channel_id?: snowflake // the id of the channel where guild notices such as welcome messages and boost events are posted - system_channel_flags: number // system channel flags - rules_channel_id?: snowflake // the id of the channel where Community guilds can display rules and/or guidelines - max_presences?: number // the maximum number of presences for the guild (null is always returned, apart from the largest of guilds) - max_members?: number // the maximum number of members for the guild - vanity_url_code?: string // the vanity url code for the guild - description?: string // the description of a guild - banner?: string // banner hash - premium_tier: number // premium tier (Server Boost level) - premium_subscription_count?: number // the number of boosts this guild currently has - preferred_locale: string // the preferred locale of a Community guild; used in server discovery and notices from Discord, and sent in interactions; defaults to "en-US" - public_updates_channel_id?: snowflake // the id of the channel where admins and moderators of Community guilds receive notices from Discord - max_video_channel_users?: number // the maximum amount of users in a video channel - max_stage_video_channel_users?: number // the maximum amount of users in a stage video channel - approximate_member_count?: number // approximate number of members in this guild, returned from the GET /guilds/ and /users/@me/guilds endpoints when with_counts is true - approximate_presence_count?: number // approximate number of non-offline members in this guild, returned from the GET /guilds/ and /users/@me/guilds endpoints when with_counts is true - welcome_screen?: WelcomeScreen // the welcome screen of a Community guild, shown to new members, returned in an Invite's guild object - nsfw_level?: number // guild NSFW level - stickers?: Sticker[] // custom guild stickers - premium_progress_bar_enabled: boolean // whether the guild has the boost progress bar enabled - safety_alerts_channel_id?: snowflake // the id of the channel where admins and moderators of Community guilds receive safety alerts from Discord -} -export interface GuildMember { - user?: User // the user this guild member represents - nick?: string // this user's guild nickname - avatar?: string // the member's guild avatar hash - roles: snowflake[] // array of role object ids - joined_at: ISO8601 // when the user joined the guild - premium_since?: ISO8601 // when the user started boosting the guild - deaf: boolean // whether the user is deafened in voice channels - mute: boolean // whether the user is muted in voice channels - flags: number // guild member flags represented as a bit set, defaults to 0 - pending?: boolean // whether the user has not yet passed the guild's Membership Screening requirements - permissions?: string // total permissions of the member in the channel, including overwrites, returned when in the interaction object - communication_disabled_until?: ISO8601 // when the user's timeout will expire and the user will be able to communicate in the guild again, null or a time in the past if the user is not timed out - avatar_decoration_data?: AvatarDecoration // data for the member's guild avatar decoration -} -export interface Role { - id: snowflake // role id - name: string // role name - color: number // integer representation of hexadecimal color code - hoist: boolean // if this role is pinned in the user listing - icon?: string // role icon hash - unicode_emoji?: string // role unicode emoji - position: number // position of this role (roles with the same position are sorted by id) - permissions: string // permission bit set - managed: boolean // whether this role is managed by an integration - mentionable: boolean // whether this role is mentionable - tags?: RoleTags // the tags this role has - flags: number // role flags combined as a bitfield -} -export interface RoleTags { - bot_id?: snowflake // the id of the bot this role belongs to - integration_id?: snowflake // the id of the integration this role belongs to - premium_subscriber?: null // whether this is the guild's Booster role - subscription_listing_id?: snowflake // the id of this role's subscription sku and listing - available_for_purchase?: null // whether this role is available for purchase - guild_connections?: null // whether this role is a guild's linked role -} -export interface Emoji { - id?: snowflake // emoji id - name?: string // (can be null only in reaction emoji objects) // emoji name - roles?: snowflake[] // roles allowed to use this emoji - user?: User // user that created this emoji - require_colons?: boolean // whether this emoji must be wrapped in colons - managed?: boolean // whether this emoji is managed - animated?: boolean // whether this emoji is animated - available?: boolean // whether this emoji can be used, may be false due to loss of Server Boosts -} -export interface Sticker { - id: snowflake // id of the sticker - pack_id?: snowflake // for standard stickers, id of the pack the sticker is from - name: string // name of the sticker - description?: string // description of the sticker - tags: string // autocomplete/suggestion tags for the sticker (max 200 characters) - asset?: string // Deprecated previously the sticker asset hash, now an empty string - type: number // type of sticker - format_type: number // type of sticker format - available?: boolean // whether this guild sticker can be used, may be false due to loss of Server Boosts - guild_id?: snowflake // id of the guild that owns this sticker - user?: User // the user that uploaded the guild sticker - sort_value?: number // the standard sticker's sort order within its pack -} -export interface WelcomeScreen { - description?: string // the server description shown in the welcome screen - welcome_channels: WelcomeChannel[] // the channels shown in the welcome screen, up to 5 -} -export interface WelcomeChannel { - channel_id: snowflake // the channel's id - description: string // the description shown for the channel - emoji_id?: snowflake // the emoji id, if the emoji is custom - emoji_name?: string // the emoji name if custom, the unicode character if standard, or null if no emoji is set -} -export interface Channel { - id: snowflake // the id of this channel - type: number // the type of channel - guild_id?: snowflake // the id of the guild (may be missing for some channel objects received over gateway guild dispatches) - position?: number // sorting position of the channel (channels with the same position are sorted by id) - permission_overwrites?: [] // array of overwrite objects // explicit permission overwrites for members and roles - name?: string // the name of the channel (1-100 characters) - topic?: string // the channel topic (0-4096 characters for GUILD_FORUM and GUILD_MEDIA channels, 0-1024 characters for all others) - nsfw?: boolean // whether the channel is nsfw - last_message_id?: snowflake // the id of the last message sent in this channel (or thread for GUILD_FORUM or GUILD_MEDIA channels) (may not point to an existing or valid message or thread) - bitrate?: number // the bitrate (in bits) of the voice channel - user_limit?: number // the user limit of the voice channel - rate_limit_per_user?: number // amount of seconds a user has to wait before sending another message (0-21600); bots, as well as users with the permission manage_messages or manage_channel, are unaffected - recipients?: User[] // the recipients of the DM - icon?: string // icon hash of the group DM - owner_id?: snowflake // id of the creator of the group DM or thread - application_id?: snowflake // application id of the group DM creator if it is bot-created - managed?: boolean // for group DM channels: whether the channel is managed by an application via the gdm.join OAuth2 scope - parent_id?: snowflake // for guild channels: id of the parent category for a channel (each parent category can contain up to 50 channels), for threads: id of the text channel this thread was created - last_pin_timestamp?: ISO8601 // when the last pinned message was pinned. This may be null in events such as GUILD_CREATE when a message is not pinned. - rtc_region?: string // voice region id for the voice channel, automatic when set to null - video_quality_mode?: number // the camera video quality mode of the voice channel, 1 when not present - message_count?: number // number of messages (not including the initial message or deleted messages) in a thread. - member_count?: number // an approximate count of users in a thread, stops counting at 50 - thread_metadata?: ThreadMetadata // thread-specific fields not needed by other channels - member?: ThreadMember // thread member object for the current user, if they have joined the thread, only included on certain API endpoints - default_auto_archive_duration?: number // default duration, copied onto newly created threads, in minutes, threads will stop showing in the channel list after the specified period of inactivity, can be set to: 60, 1440, 4320, 10080 - permissions?: string // computed permissions for the invoking user in the channel, including overwrites, only included when part of the resolved data received on a slash command interaction. This does not include implicit permissions, which may need to be checked separately - flags?: number // channel flags combined as a bitfield - total_message_sent?: number // number of messages ever sent in a thread, it's similar to message_count on message creation, but will not decrement the number when a message is deleted - available_tags?: Tag[] // the set of tags that can be used in a GUILD_FORUM or a GUILD_MEDIA channel - applied_tags?: snowflake[] // the IDs of the set of tags that have been applied to a thread in a GUILD_FORUM or a GUILD_MEDIA channel - default_reaction_emoji?: DefaultReaction // the emoji to show in the add reaction button on a thread in a GUILD_FORUM or a GUILD_MEDIA channel - default_thread_rate_limit_per_user?: number // the initial rate_limit_per_user to set on newly created threads in a channel. this field is copied to the thread at creation time and does not live update. - default_sort_order?: number // the default sort order type used to order posts in GUILD_FORUM and GUILD_MEDIA channels. Defaults to null, which indicates a preferred sort order hasn't been set by a channel admin - default_forum_layout?: number // the default forum layout view used to display posts in GUILD_FORUM channels. Defaults to 0, which indicates a layout view has not been set by a channel admin -} -export interface Tag { - id: snowflake // the id of the tag - name: string // the name of the tag (0-20 characters) - moderated: boolean // whether this tag can only be added to or removed from threads by a member with the MANAGE_THREADS permission - emoji_id?: snowflake // the id of a guild's custom emoji - emoji_name?: string // the unicode character of the emoji -} -export interface ThreadMetadata { - archived: boolean // whether the thread is archived - auto_archive_duration: number // the thread will stop showing in the channel list after auto_archive_duration minutes of inactivity, can be set to: 60, 1440, 4320, 10080 - archive_timestamp: ISO8601 // timestamp when the thread's archive status was last changed, used for calculating recent activity - locked: boolean // whether the thread is locked; when a thread is locked, only users with MANAGE_THREADS can unarchive it - invitable?: boolean // whether non-moderators can add other non-moderators to a thread; only available on private threads - create_timestamp?: ISO8601 // timestamp when the thread was created; only populated for threads created after 2022-01-09 -} -export interface ThreadMember { - id?: snowflake // ID of the thread - user_id?: snowflake // ID of the user - join_timestamp: ISO8601 // Time the user last joined the thread - flags: number // Any user-thread settings, currently only used for notifications - member?: GuildMember // Additional information about the user -} -export interface DefaultReaction { - emoji_id?: snowflake // the id of a guild's custom emoji - emoji_name?: string // the unicode character of the emoji -} \ No newline at end of file diff --git a/src/views/404View.vue b/src/views/404View.vue index a8a4baf..d56e756 100644 --- a/src/views/404View.vue +++ b/src/views/404View.vue @@ -1,9 +1,12 @@ \ No newline at end of file diff --git a/src/views/Discord/LogoutView.vue b/src/views/Discord/LogoutView.vue index 8428b3d..62cb7f0 100644 --- a/src/views/Discord/LogoutView.vue +++ b/src/views/Discord/LogoutView.vue @@ -1,12 +1,12 @@ \ No newline at end of file diff --git a/src/views/IndexView.vue b/src/views/IndexView.vue index 0f1b32f..add29fd 100644 --- a/src/views/IndexView.vue +++ b/src/views/IndexView.vue @@ -1,5 +1,8 @@ \ No newline at end of file + + + \ No newline at end of file