From b1977447a2a55f89276597258e78f660bcb912b2 Mon Sep 17 00:00:00 2001 From: Jack Hadrill Date: Sat, 19 Mar 2022 21:47:54 +0000 Subject: [PATCH] Initial working --- .gitignore | 24 + .vscode/extensions.json | 3 + README.md | 7 + index.html | 13 + package-lock.json | 1516 +++++++++++++++++++++++++++ package.json | 27 + public/favicon.ico | Bin 0 -> 4286 bytes src/App.vue | 53 + src/assets/logo-dark.png | Bin 0 -> 40552 bytes src/assets/logo-light.png | Bin 0 -> 31197 bytes src/assets/logo.png | Bin 0 -> 6849 bytes src/common/animate.js | 13 + src/components/Input.vue | 40 + src/components/Key.vue | 19 + src/components/Message.vue | 18 + src/components/sidebar/Channels.vue | 13 + src/components/sidebar/User.vue | 12 + src/components/sidebar/Users.vue | 23 + src/main.js | 23 + src/plugins/websocket.js | 164 +++ src/router/index.js | 20 + src/stores/channelStore.js | 36 + src/stores/mercuryStore.js | 14 + src/stores/messageStore.js | 25 + src/stores/userStore.js | 57 + src/views/ConversationView.vue | 43 + src/views/SettingsView.vue | 47 + vite.config.js | 7 + 28 files changed, 2217 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 README.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 src/App.vue create mode 100644 src/assets/logo-dark.png create mode 100644 src/assets/logo-light.png create mode 100644 src/assets/logo.png create mode 100644 src/common/animate.js create mode 100644 src/components/Input.vue create mode 100644 src/components/Key.vue create mode 100644 src/components/Message.vue create mode 100644 src/components/sidebar/Channels.vue create mode 100644 src/components/sidebar/User.vue create mode 100644 src/components/sidebar/Users.vue create mode 100644 src/main.js create mode 100644 src/plugins/websocket.js create mode 100644 src/router/index.js create mode 100644 src/stores/channelStore.js create mode 100644 src/stores/mercuryStore.js create mode 100644 src/stores/messageStore.js create mode 100644 src/stores/userStore.js create mode 100644 src/views/ConversationView.vue create mode 100644 src/views/SettingsView.vue create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..3dc5b08 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["johnsoncodehk.volar"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..c0793a8 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# Vue 3 + Vite + +This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9cb8606 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1516 @@ +{ + "name": "mercury", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "mercury", + "version": "0.0.0", + "dependencies": { + "animate.css": "^4.1.1", + "bennc-js": "git+https://git.jacknet.io/TerribleCodeClub/bennc-js.git", + "bootstrap": "^5.1.3", + "bootstrap-icons": "^1.8.1", + "color": "^4.2.1", + "pinia": "^2.0.12", + "reconnecting-websocket": "^4.4.0", + "romulus-js": "git+https://git.jacknet.io/TerribleCodeClub/romulus-js.git", + "uuid": "^8.3.2", + "vue": "^3.2.25", + "vue-router": "^4.0.14" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^2.2.0", + "vite": "^2.8.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", + "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz", + "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@types/color": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/color/-/color-3.0.3.tgz", + "integrity": "sha512-X//qzJ3d3Zj82J9sC/C18ZY5f43utPbAJ6PhYt/M7uG6etcF6MRpKdN880KBy43B0BMzSfeT96MzrsNjFI3GbA==", + "dependencies": { + "@types/color-convert": "*" + } + }, + "node_modules/@types/color-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz", + "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==", + "dependencies": { + "@types/color-name": "*" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.2.4.tgz", + "integrity": "sha512-ev9AOlp0ljCaDkFZF3JwC/pD2N4Hh+r5srl5JHM6BKg5+99jiiK0rE/XaRs3pVm1wzyKkjUy/StBSoXX5fFzcw==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "vite": "^2.5.10", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz", + "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.31", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz", + "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==", + "dependencies": { + "@vue/compiler-core": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz", + "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.31", + "@vue/compiler-dom": "3.2.31", + "@vue/compiler-ssr": "3.2.31", + "@vue/reactivity-transform": "3.2.31", + "@vue/shared": "3.2.31", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz", + "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==", + "dependencies": { + "@vue/compiler-dom": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.1.3.tgz", + "integrity": "sha512-79InfO2xHv+WHIrH1bHXQUiQD/wMls9qBk6WVwGCbdwP7/3zINtvqPNMtmSHXsIKjvUAHc8L0ouOj6ZQQRmcXg==" + }, + "node_modules/@vue/reactivity": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz", + "integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==", + "dependencies": { + "@vue/shared": "3.2.31" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz", + "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.31", + "@vue/shared": "3.2.31", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz", + "integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==", + "dependencies": { + "@vue/reactivity": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz", + "integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==", + "dependencies": { + "@vue/runtime-core": "3.2.31", + "@vue/shared": "3.2.31", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz", + "integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==", + "dependencies": { + "@vue/compiler-ssr": "3.2.31", + "@vue/shared": "3.2.31" + }, + "peerDependencies": { + "vue": "3.2.31" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz", + "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==" + }, + "node_modules/animate.css": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-4.1.1.tgz", + "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" + }, + "node_modules/bennc-js": { + "version": "1.0.0", + "resolved": "git+https://git.jacknet.io/TerribleCodeClub/bennc-js.git#3a163df9912fe08b986365e7a12784ef41a5691a", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "@types/color": "^3.0.3", + "color": "^4.2.0", + "romulus-js": "git+https://git.jacknet.io/TerribleCodeClub/romulus-js.git" + } + }, + "node_modules/bootstrap": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + }, + "peerDependencies": { + "@popperjs/core": "^2.10.2" + } + }, + "node_modules/bootstrap-icons": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.8.1.tgz", + "integrity": "sha512-IXUqislddPJfwq6H+2nTkHyr9epO9h6u1AG0OZCx616w+TgzeoCjfmI3qJMQqt1J586gN2IxzB4M99Ip4sTZ1w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.1.tgz", + "integrity": "sha512-MFJr0uY4RvTQUKvPq7dh9grVOTYSFeXja2mBXioCGjnjJoXrAp9jJ1NQTDR73c9nwBSAQiNKloKl5zq9WB9UPw==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "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/color-string": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/csstype": { + "version": "2.6.20", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", + "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + }, + "node_modules/esbuild": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.27.tgz", + "integrity": "sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.27", + "esbuild-android-arm64": "0.14.27", + "esbuild-darwin-64": "0.14.27", + "esbuild-darwin-arm64": "0.14.27", + "esbuild-freebsd-64": "0.14.27", + "esbuild-freebsd-arm64": "0.14.27", + "esbuild-linux-32": "0.14.27", + "esbuild-linux-64": "0.14.27", + "esbuild-linux-arm": "0.14.27", + "esbuild-linux-arm64": "0.14.27", + "esbuild-linux-mips64le": "0.14.27", + "esbuild-linux-ppc64le": "0.14.27", + "esbuild-linux-riscv64": "0.14.27", + "esbuild-linux-s390x": "0.14.27", + "esbuild-netbsd-64": "0.14.27", + "esbuild-openbsd-64": "0.14.27", + "esbuild-sunos-64": "0.14.27", + "esbuild-windows-32": "0.14.27", + "esbuild-windows-64": "0.14.27", + "esbuild-windows-arm64": "0.14.27" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.27.tgz", + "integrity": "sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.27.tgz", + "integrity": "sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.27.tgz", + "integrity": "sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.27.tgz", + "integrity": "sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.27.tgz", + "integrity": "sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.27.tgz", + "integrity": "sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.27.tgz", + "integrity": "sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.27.tgz", + "integrity": "sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.27.tgz", + "integrity": "sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.27.tgz", + "integrity": "sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.27.tgz", + "integrity": "sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.27.tgz", + "integrity": "sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.27.tgz", + "integrity": "sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.27.tgz", + "integrity": "sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.27.tgz", + "integrity": "sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.27.tgz", + "integrity": "sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.27.tgz", + "integrity": "sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.27.tgz", + "integrity": "sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.27.tgz", + "integrity": "sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.27.tgz", + "integrity": "sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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==", + "dev": true + }, + "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/pinia": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.12.tgz", + "integrity": "sha512-tUeuYGFrLU5irmGyRAIxp35q1OTcZ8sKpGT4XkPeVcG35W4R6cfXDbCGexzmVqH5lTQJJTXXbNGutIu9yS5yew==", + "dependencies": { + "@vue/devtools-api": "^6.1.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.4.tgz", + "integrity": "sha512-ztPDkFt0TSUdoq1ZI6oD730vgztBkiByhUW7L1cOTebiSBqSYfSQgnhYakYigBkyAybqCTH7h44yZuDJf2xILQ==", + "hasInstallScript": true, + "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/postcss": { + "version": "8.4.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", + "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.1", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/reconnecting-websocket": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz", + "integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==" + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "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/rollup": { + "version": "2.70.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", + "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/romulus-js": { + "version": "1.0.0", + "resolved": "git+https://git.jacknet.io/TerribleCodeClub/romulus-js.git#37d9f83c9266acb40466a0c422944438d706fb24", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "@types/uuid": "^8.3.4", + "uuid": "^8.3.2" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "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/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vite": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.6.tgz", + "integrity": "sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug==", + "dev": true, + "dependencies": { + "esbuild": "^0.14.14", + "postcss": "^8.4.6", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz", + "integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==", + "dependencies": { + "@vue/compiler-dom": "3.2.31", + "@vue/compiler-sfc": "3.2.31", + "@vue/runtime-dom": "3.2.31", + "@vue/server-renderer": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "node_modules/vue-router": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.14.tgz", + "integrity": "sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==", + "dependencies": { + "@vue/devtools-api": "^6.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + } + }, + "dependencies": { + "@babel/parser": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", + "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==" + }, + "@popperjs/core": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz", + "integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==", + "peer": true + }, + "@types/color": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/color/-/color-3.0.3.tgz", + "integrity": "sha512-X//qzJ3d3Zj82J9sC/C18ZY5f43utPbAJ6PhYt/M7uG6etcF6MRpKdN880KBy43B0BMzSfeT96MzrsNjFI3GbA==", + "requires": { + "@types/color-convert": "*" + } + }, + "@types/color-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz", + "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==", + "requires": { + "@types/color-name": "*" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, + "@vitejs/plugin-vue": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.2.4.tgz", + "integrity": "sha512-ev9AOlp0ljCaDkFZF3JwC/pD2N4Hh+r5srl5JHM6BKg5+99jiiK0rE/XaRs3pVm1wzyKkjUy/StBSoXX5fFzcw==", + "dev": true, + "requires": {} + }, + "@vue/compiler-core": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz", + "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.31", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz", + "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==", + "requires": { + "@vue/compiler-core": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz", + "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.31", + "@vue/compiler-dom": "3.2.31", + "@vue/compiler-ssr": "3.2.31", + "@vue/reactivity-transform": "3.2.31", + "@vue/shared": "3.2.31", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz", + "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==", + "requires": { + "@vue/compiler-dom": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "@vue/devtools-api": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.1.3.tgz", + "integrity": "sha512-79InfO2xHv+WHIrH1bHXQUiQD/wMls9qBk6WVwGCbdwP7/3zINtvqPNMtmSHXsIKjvUAHc8L0ouOj6ZQQRmcXg==" + }, + "@vue/reactivity": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz", + "integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==", + "requires": { + "@vue/shared": "3.2.31" + } + }, + "@vue/reactivity-transform": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz", + "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.31", + "@vue/shared": "3.2.31", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/runtime-core": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz", + "integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==", + "requires": { + "@vue/reactivity": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "@vue/runtime-dom": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz", + "integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==", + "requires": { + "@vue/runtime-core": "3.2.31", + "@vue/shared": "3.2.31", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz", + "integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==", + "requires": { + "@vue/compiler-ssr": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "@vue/shared": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz", + "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==" + }, + "animate.css": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-4.1.1.tgz", + "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" + }, + "bennc-js": { + "version": "git+https://git.jacknet.io/TerribleCodeClub/bennc-js.git#3a163df9912fe08b986365e7a12784ef41a5691a", + "from": "bennc-js@git+https://git.jacknet.io/TerribleCodeClub/bennc-js.git", + "requires": { + "@types/color": "^3.0.3", + "color": "^4.2.0", + "romulus-js": "git+https://git.jacknet.io/TerribleCodeClub/romulus-js.git" + } + }, + "bootstrap": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", + "requires": {} + }, + "bootstrap-icons": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.8.1.tgz", + "integrity": "sha512-IXUqislddPJfwq6H+2nTkHyr9epO9h6u1AG0OZCx616w+TgzeoCjfmI3qJMQqt1J586gN2IxzB4M99Ip4sTZ1w==" + }, + "color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.1.tgz", + "integrity": "sha512-MFJr0uY4RvTQUKvPq7dh9grVOTYSFeXja2mBXioCGjnjJoXrAp9jJ1NQTDR73c9nwBSAQiNKloKl5zq9WB9UPw==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "color-string": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "csstype": { + "version": "2.6.20", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", + "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + }, + "esbuild": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.27.tgz", + "integrity": "sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.27", + "esbuild-android-arm64": "0.14.27", + "esbuild-darwin-64": "0.14.27", + "esbuild-darwin-arm64": "0.14.27", + "esbuild-freebsd-64": "0.14.27", + "esbuild-freebsd-arm64": "0.14.27", + "esbuild-linux-32": "0.14.27", + "esbuild-linux-64": "0.14.27", + "esbuild-linux-arm": "0.14.27", + "esbuild-linux-arm64": "0.14.27", + "esbuild-linux-mips64le": "0.14.27", + "esbuild-linux-ppc64le": "0.14.27", + "esbuild-linux-riscv64": "0.14.27", + "esbuild-linux-s390x": "0.14.27", + "esbuild-netbsd-64": "0.14.27", + "esbuild-openbsd-64": "0.14.27", + "esbuild-sunos-64": "0.14.27", + "esbuild-windows-32": "0.14.27", + "esbuild-windows-64": "0.14.27", + "esbuild-windows-arm64": "0.14.27" + } + }, + "esbuild-android-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.27.tgz", + "integrity": "sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.27.tgz", + "integrity": "sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.27.tgz", + "integrity": "sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.27.tgz", + "integrity": "sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.27.tgz", + "integrity": "sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.27.tgz", + "integrity": "sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.27.tgz", + "integrity": "sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.27.tgz", + "integrity": "sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.27.tgz", + "integrity": "sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.27.tgz", + "integrity": "sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.27.tgz", + "integrity": "sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.27.tgz", + "integrity": "sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.27.tgz", + "integrity": "sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.27.tgz", + "integrity": "sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.27.tgz", + "integrity": "sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.27.tgz", + "integrity": "sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.27.tgz", + "integrity": "sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.27.tgz", + "integrity": "sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.27.tgz", + "integrity": "sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.27", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.27.tgz", + "integrity": "sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==", + "dev": true, + "optional": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" + }, + "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==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "pinia": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.12.tgz", + "integrity": "sha512-tUeuYGFrLU5irmGyRAIxp35q1OTcZ8sKpGT4XkPeVcG35W4R6cfXDbCGexzmVqH5lTQJJTXXbNGutIu9yS5yew==", + "requires": { + "@vue/devtools-api": "^6.1.0", + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.4.tgz", + "integrity": "sha512-ztPDkFt0TSUdoq1ZI6oD730vgztBkiByhUW7L1cOTebiSBqSYfSQgnhYakYigBkyAybqCTH7h44yZuDJf2xILQ==", + "requires": {} + } + } + }, + "postcss": { + "version": "8.4.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", + "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", + "requires": { + "nanoid": "^3.3.1", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "reconnecting-websocket": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz", + "integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==" + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rollup": { + "version": "2.70.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", + "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "romulus-js": { + "version": "git+https://git.jacknet.io/TerribleCodeClub/romulus-js.git#37d9f83c9266acb40466a0c422944438d706fb24", + "from": "romulus-js@git+https://git.jacknet.io/TerribleCodeClub/romulus-js.git", + "requires": { + "@types/uuid": "^8.3.4", + "uuid": "^8.3.2" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "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==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "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==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "vite": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.6.tgz", + "integrity": "sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug==", + "dev": true, + "requires": { + "esbuild": "^0.14.14", + "fsevents": "~2.3.2", + "postcss": "^8.4.6", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + } + }, + "vue": { + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz", + "integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==", + "requires": { + "@vue/compiler-dom": "3.2.31", + "@vue/compiler-sfc": "3.2.31", + "@vue/runtime-dom": "3.2.31", + "@vue/server-renderer": "3.2.31", + "@vue/shared": "3.2.31" + } + }, + "vue-router": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.14.tgz", + "integrity": "sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==", + "requires": { + "@vue/devtools-api": "^6.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b6ba803 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "mercury", + "private": true, + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "animate.css": "^4.1.1", + "bennc-js": "git+https://git.jacknet.io/TerribleCodeClub/bennc-js.git", + "bootstrap": "^5.1.3", + "bootstrap-icons": "^1.8.1", + "color": "^4.2.1", + "pinia": "^2.0.12", + "reconnecting-websocket": "^4.4.0", + "romulus-js": "git+https://git.jacknet.io/TerribleCodeClub/romulus-js.git", + "uuid": "^8.3.2", + "vue": "^3.2.25", + "vue-router": "^4.0.14" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^2.2.0", + "vite": "^2.8.0" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..9a7085d --- /dev/null +++ b/src/App.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/assets/logo-dark.png b/src/assets/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3951cbcd6c33a1b1b55c0ccbcffead107ec63c1d GIT binary patch literal 40552 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%0DO503)nBiNLPH9h{w-FPNzr_v} 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 z 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 new Promise((resolve, reject) => { + const animationName = `${prefix}${animation}`; + + element.classList.add(`${prefix}animated`, animationName); + + function handleAnimationEnd(event) { + event.stopPropagation() + element.classList.remove(`${prefix}animated`, animationName) + resolve('Animation ended') + } + + element.addEventListener('animationend', handleAnimationEnd, {once: true}) +}) diff --git a/src/components/Input.vue b/src/components/Input.vue new file mode 100644 index 0000000..f0fa14c --- /dev/null +++ b/src/components/Input.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/components/Key.vue b/src/components/Key.vue new file mode 100644 index 0000000..cf001b1 --- /dev/null +++ b/src/components/Key.vue @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/src/components/Message.vue b/src/components/Message.vue new file mode 100644 index 0000000..916eadd --- /dev/null +++ b/src/components/Message.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/components/sidebar/Channels.vue b/src/components/sidebar/Channels.vue new file mode 100644 index 0000000..28cf30b --- /dev/null +++ b/src/components/sidebar/Channels.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/components/sidebar/User.vue b/src/components/sidebar/User.vue new file mode 100644 index 0000000..eb5d565 --- /dev/null +++ b/src/components/sidebar/User.vue @@ -0,0 +1,12 @@ + + + diff --git a/src/components/sidebar/Users.vue b/src/components/sidebar/Users.vue new file mode 100644 index 0000000..eafbb57 --- /dev/null +++ b/src/components/sidebar/Users.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..dca4035 --- /dev/null +++ b/src/main.js @@ -0,0 +1,23 @@ +import { createApp } from 'vue' + +import "bootstrap/dist/css/bootstrap.min.css" +import 'bootstrap-icons/font/bootstrap-icons.css' +import "bootstrap" + +import 'animate.css' + + +import App from './App.vue' +import router from './router' +import { createPinia } from 'pinia' + +import websocket from './plugins/websocket' + +const app = createApp(App) +const pinia = createPinia() + +app.use(router) +app.use(pinia) +app.use(websocket) + +app.mount('#app') diff --git a/src/plugins/websocket.js b/src/plugins/websocket.js new file mode 100644 index 0000000..f367c23 --- /dev/null +++ b/src/plugins/websocket.js @@ -0,0 +1,164 @@ +import ReconnectingWebSocket from 'reconnecting-websocket' +import { MessageTypes, numberToUint16BE, packers, unpackers, unpackIncomingPacket } from 'bennc-js' +import { useMercuryStore } from '../stores/mercuryStore' +import { useUserStore } from '../stores/userStore' +import { useMessageStore } from '../stores/messageStore' +import { useChannelStore } from '../stores/channelStore' +import { decrypt } from 'romulus-js' + +const CLIENT_ID = 'Mercury' +const SUBSCRIBED_MESSAGE_TYPES = [MessageTypes.Basic, MessageTypes.UserDataRequest, MessageTypes.UserDataResponse] + +const encoder = new TextEncoder() +const decoder = new TextDecoder() + +export default { + install: (app, options) => { + // Create websocket. + const ws = new ReconnectingWebSocket('wss://chat.3t.network/bennc') + ws.binaryType = 'arraybuffer' + app.provide('websocket', ws) + + // Create store accesses. + const mercuryStore = useMercuryStore() + const channelStore = useChannelStore() + const messageStore = useMessageStore() + const userStore = useUserStore() + + + function handleBasicMessage(incomingPacket) { + // Try decryption with each encryption key. + for (let channel of channelStore.channels) { + // Attempt decryption of incoming message. + const result = decrypt(incomingPacket.data, numberToUint16BE(MessageTypes.Basic), channel.key.raw) + + // If encryption key is found... + if (result.success) { + const unpackedData = unpackers[MessageTypes.Basic](result.plaintext) + + // Add channel to user's channel list. + userStore.addChannel(incomingPacket.senderId, channel.id) + + // Add message to message store. + messageStore.addMessage(channel.id, incomingPacket.senderId, decoder.decode(unpackedData)) + + // Don't process other keys. + break + } + } + } + + function handleUserDataRequest(incomingPacket) { + // Try decryption with each encryption key. + for (let channel of channelStore.channels) { + // Attempt decryption of incoming message. + const result = decrypt(incomingPacket.data, numberToUint16BE(MessageTypes.UserDataRequest), channel.key.raw) + + // If encryption key is found... + if (result.success) { + // Unpack user data request. + const userDataRequest = unpackers[MessageTypes.UserDataRequest](result.plaintext) + + // Update user in user store. + userStore.setName(incomingPacket.senderId, userDataRequest.username) + userStore.setColor(incomingPacket.senderId, userDataRequest.colour) + userStore.addChannel(incomingPacket.senderId, channel.id) + + // Respond to user data request with a user data response. + const self = userStore.getSelf() + const userDataResponse = packers[MessageTypes.UserDataResponse]({ username: self.name, colour: self.color, clientId: CLIENT_ID }, channel.key.raw) + ws.send(userDataResponse) + + // Don't process other keys. + break + } + } + } + + function handleUserDataResponse(incomingPacket) { + // Try decryption with each encryption key. + for (let channel of channelStore.channels) { + // Attempt decryption of incoming message. + const result = decrypt(incomingPacket.data, numberToUint16BE(MessageTypes.UserDataResponse), channel.key.raw) + + // If encryption key is found... + if (result.success) { + // Unpack user data response. + const userDataResponse = unpackers[MessageTypes.UserDataResponse](result.plaintext) + + // Update user in user store. + userStore.setName(incomingPacket.senderId, userDataResponse.username) + userStore.setColor(incomingPacket.senderId, userDataResponse.colour) + userStore.addChannel(incomingPacket.senderId, channel.id) + + // Don't process other keys. + break + } + } + } + + function requestUserData() { + const self = userStore.getSelf() + channelStore.channels.forEach(channel => { + const userDataRequest = packers[MessageTypes.UserDataRequest]({ username: self.name, colour: self.color, clientId: CLIENT_ID }, channel.key.raw) + ws.send(userDataRequest) + }) + } + + // Keepalive timeout. + var timeout = setInterval(() => { + ws.send(packers[MessageTypes.Keepalive]()) + }, 30000) + + setInterval(() => { + requestUserData() + }, 30000) + + ws.addEventListener('open', () => { + // Set global connection state for UI. + mercuryStore.setConnectionState(true) + + // Subscribe to all messages. + SUBSCRIBED_MESSAGE_TYPES.forEach((messageType) => { + ws.send(packers[MessageTypes.Subscribe]({ messageType: messageType })) + }) + + // Make a user data request for each channel. + requestUserData() + }) + + ws.addEventListener('close', () => { + mercuryStore.setConnectionState(false) + }) + + ws.addEventListener('message', (event) => { + const incomingPacket = unpackIncomingPacket(new Uint8Array(event.data)) + + // Update user store. + userStore.updateUser({id: incomingPacket.senderId}) + + // Parse packet using message type. + switch (incomingPacket.messageType) { + case MessageTypes.Basic: + handleBasicMessage(incomingPacket) + break; + case MessageTypes.UserDataRequest: + handleUserDataRequest(incomingPacket) + break; + case MessageTypes.UserDataResponse: + handleUserDataResponse(incomingPacket) + break; + + default: + console.error(`Received unknown message type ${incomingPacket.messageType}`); + } + + // Restart keepalive. + clearInterval(timeout) + timeout = setInterval(() => { + console.log("Keepalive message sent!") + ws.send(packers[MessageTypes.Keepalive]()) + }, 30000) + }) + } +} diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..a9af7d2 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,20 @@ +import { createRouter, createWebHistory } from 'vue-router' + +import ConversationView from '../views/ConversationView.vue' +import SettingsView from '../views/SettingsView.vue' + +export default createRouter({ + history: createWebHistory(), + routes: [ + { + name: 'Channel', + path: '/channel/:channelId', + component: ConversationView + }, + { + name: 'Settings', + path: '/settings', + component: SettingsView + } + ] +}) \ No newline at end of file diff --git a/src/stores/channelStore.js b/src/stores/channelStore.js new file mode 100644 index 0000000..9c5a3ed --- /dev/null +++ b/src/stores/channelStore.js @@ -0,0 +1,36 @@ +import { defineStore } from 'pinia' + +class Key { + constructor(base64) { + this.base64 = base64 + this.raw = Uint8Array.from(window.atob(base64), c => c.charCodeAt(0)) + } +} + +export const useChannelStore = defineStore({ + id: 'channelStore', + state: () => ({ + channels: [ + { + id: 'a798423c-3fbf-434d-9a00-57d7642bff65', + name: 'Default', + key: new Key('') + }, + { + id: '47198ee7-8bf4-41fe-8b42-bb001bd5f140', + name: 'HackerNews', + key: new Key('HACKERNEWQAAAAAAAAAAAA==') + } + ] + }), + getters: { + getChannelById: (state) => { + return (channelId) => state.channels.find((channel) => channel.id === channelId) + } + }, + actions: { + addChannel(channel) { + this.channels.push(channel) + } + } +}) \ No newline at end of file diff --git a/src/stores/mercuryStore.js b/src/stores/mercuryStore.js new file mode 100644 index 0000000..c68d02f --- /dev/null +++ b/src/stores/mercuryStore.js @@ -0,0 +1,14 @@ +import { defineStore } from 'pinia' + +export const useMercuryStore = defineStore({ + id: 'mercuryStore', + state: () => ({ + connected: false + }), + getters: {}, + actions: { + setConnectionState(state) { + this.connected = state + } + } +}) diff --git a/src/stores/messageStore.js b/src/stores/messageStore.js new file mode 100644 index 0000000..880d388 --- /dev/null +++ b/src/stores/messageStore.js @@ -0,0 +1,25 @@ +import { v4 as uuidv4 } from 'uuid' +import { defineStore } from 'pinia' + +export const useMessageStore = defineStore({ + id: 'messageStore', + state: () => ({ + messages: [] + }), + getters: { + getMessagesByChannelId: (state) => { + return (channelId) => state.messages.filter((message) => message.channelId === channelId) + } + }, + actions: { + addMessage(channelId, senderId, content) { + this.messages.push({ + id: uuidv4(), + channelId: channelId, + userId: senderId, + content: content, + received: new Date() + }) + } + } +}) diff --git a/src/stores/userStore.js b/src/stores/userStore.js new file mode 100644 index 0000000..abd1e1f --- /dev/null +++ b/src/stores/userStore.js @@ -0,0 +1,57 @@ +import Color from 'color' +import { defineStore } from 'pinia' + +export const useUserStore = defineStore({ + id: 'userStore', + state: () => ({ + users: [ + { + id: -1, + name: 'Mercury', + color: Color('#ff4000'), + channels: [], + self: true + } + ] + }), + getters: { + getSelf: (state) => { + return (self) => state.users.find(user => user.self === true) + }, + getUserById: (state) => { + return (id) => state.users.find(user => user.id === id) + }, + getUsersByChannelId: (state) => { + return (channelId) => state.users.filter(user => { return user.channels.includes(channelId) }) + } + }, + actions: { + updateUser(newUser) { + var user = this.users.find(user => user.id == newUser.id) + if (!user) { + user = { + id: newUser.id, + name: String(newUser.id), + color: Color('#000000'), + channels: [] + } + this.users.push(user) + } + user.lastSeen = new Date() + }, + setName(id, name) { + var user = this.users.find(user => user.id == id) + user.name = name + }, + setColor(id, color) { + var user = this.users.find(user => user.id == id) + user.color = color + }, + addChannel(id, channelId) { + var user = this.users.find(user => user.id == id) + if (!user.channels.includes(channelId)) { + user.channels.push(channelId) + } + } + } +}) diff --git a/src/views/ConversationView.vue b/src/views/ConversationView.vue new file mode 100644 index 0000000..29c905b --- /dev/null +++ b/src/views/ConversationView.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/views/SettingsView.vue b/src/views/SettingsView.vue new file mode 100644 index 0000000..d83c75a --- /dev/null +++ b/src/views/SettingsView.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..315212d --- /dev/null +++ b/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()] +})