diff --git a/.env.example b/.env.example deleted file mode 100644 index a77919f..0000000 --- a/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -FB_PROJECT_ID= -FB_CLIENT_EMAIL= -FB_PRIVATE_KEY= diff --git a/package-lock.json b/package-lock.json index eeb9517..149194e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,15 @@ "version": "0.0.1", "dependencies": { "firebase": "^9.23.0", - "firebase-admin": "^11.9.0" + "firebase-admin": "^11.10.1", + "uuid": "^9.0.0" }, "devDependencies": { "@sveltejs/adapter-auto": "^2.0.0", "@sveltejs/kit": "^1.20.4", "autoprefixer": "^10.4.14", "daisyui": "^3.1.6", + "lottie-web": "^5.12.2", "postcss": "^8.4.24", "svelte": "^4.0.0", "svelte-check": "^3.4.3", @@ -935,9 +937,9 @@ "optional": true }, "node_modules/@google-cloud/firestore/node_modules/protobufjs": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", - "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", "hasInstallScript": true, "optional": true, "dependencies": { @@ -1070,9 +1072,9 @@ } }, "node_modules/@grpc/grpc-js/node_modules/protobufjs": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", - "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -1314,24 +1316,25 @@ } }, "node_modules/@sveltejs/kit": { - "version": "1.20.5", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.20.5.tgz", - "integrity": "sha512-8rJYZ2boRlO75lwpbpB+DlSzIwmTuamXTpVlDtw4dBk86o3UaDe/+Ro4xCsV/4FtTw2U8xPHyV83edAWbQHG0w==", + "version": "1.30.3", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.30.3.tgz", + "integrity": "sha512-0DzVXfU4h+tChFvoc8C61IqErCyskD4ydSIDjpKS2lYlEzIYrtYrY7juSqACFxqcvZAnOEXvSY+zZ8br0+ZMMg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@sveltejs/vite-plugin-svelte": "^2.4.1", + "@sveltejs/vite-plugin-svelte": "^2.5.0", "@types/cookie": "^0.5.1", "cookie": "^0.5.0", "devalue": "^4.3.1", "esm-env": "^1.0.0", "kleur": "^4.1.5", "magic-string": "^0.30.0", - "mime": "^3.0.0", + "mrmime": "^1.0.1", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", "sirv": "^2.0.2", - "undici": "~5.22.0" + "tiny-glob": "^0.2.9", + "undici": "~5.26.2" }, "bin": { "svelte-kit": "svelte-kit.js" @@ -1340,36 +1343,36 @@ "node": "^16.14 || >=18" }, "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0-next.0", + "svelte": "^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0", "vite": "^4.0.0" } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.2.tgz", - "integrity": "sha512-ePfcC48ftMKhkT0OFGdOyycYKnnkT6i/buzey+vHRTR/JpQvuPzzhf1PtKqCDQfJRgoPSN2vscXs6gLigx/zGw==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.5.3.tgz", + "integrity": "sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==", "dev": true, "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^1.0.3", + "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", "debug": "^4.3.4", "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.30.0", - "svelte-hmr": "^0.15.2", + "magic-string": "^0.30.3", + "svelte-hmr": "^0.15.3", "vitefu": "^0.2.4" }, "engines": { "node": "^14.18.0 || >= 16" }, "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0", + "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0", "vite": "^4.0.0" } }, "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz", - "integrity": "sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", + "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -1839,18 +1842,6 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2491,9 +2482,9 @@ } }, "node_modules/firebase-admin": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-11.9.0.tgz", - "integrity": "sha512-My7qrInVZFmImX8aTulrp9kgY6d88Wn+ie8UIXKzZ3SJqQQhDwFT7Q3pgQXK9RfdsUtcxJJ3rCK7MWBm4GGtuw==", + "version": "11.10.1", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-11.10.1.tgz", + "integrity": "sha512-atv1E6GbuvcvWaD3eHwrjeP5dAVs+EaHEJhu9CThMzPY6In8QYDiUR6tq5SwGl4SdA/GcAU0nhwWc/FSJsAzfQ==", "dependencies": { "@fastify/busboy": "^1.2.1", "@firebase/database-compat": "^0.3.4", @@ -2645,6 +2636,18 @@ "node": ">= 6" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/google-auth-library": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.8.0.tgz", @@ -2666,9 +2669,9 @@ } }, "node_modules/google-gax": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.0.tgz", - "integrity": "sha512-2fyb61vWxUonHiArRNJQmE4tx5oY1ni8VPo08fzII409vDSCWG7apDX4qNOQ2GXXT82gLBn3d3P1Dydh7pWjyw==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", + "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", "optional": true, "dependencies": { "@grpc/grpc-js": "~1.8.0", @@ -2683,7 +2686,7 @@ "node-fetch": "^2.6.1", "object-hash": "^3.0.0", "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.2.3", + "protobufjs": "7.2.4", "protobufjs-cli": "1.1.1", "retry-request": "^5.0.0" }, @@ -2782,9 +2785,9 @@ } }, "node_modules/google-gax/node_modules/protobufjs": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", - "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", "hasInstallScript": true, "optional": true, "dependencies": { @@ -3323,6 +3326,12 @@ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, + "node_modules/lottie-web": { + "version": "5.12.2", + "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz", + "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==", + "dev": true + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3358,12 +3367,12 @@ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" }, "node_modules/magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", "dev": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" + "@jridgewell/sourcemap-codec": "^1.4.15" }, "engines": { "node": ">=12" @@ -3445,7 +3454,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "devOptional": true, + "optional": true, "bin": { "mime": "cli.js" }, @@ -3551,9 +3560,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -3753,9 +3762,9 @@ } }, "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "dev": true, "funding": [ { @@ -3772,7 +3781,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -3911,9 +3920,9 @@ "optional": true }, "node_modules/proto3-json-serializer/node_modules/protobufjs": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", - "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", "hasInstallScript": true, "optional": true, "dependencies": { @@ -3935,9 +3944,9 @@ } }, "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -4270,15 +4279,6 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "optional": true }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4455,15 +4455,15 @@ } }, "node_modules/svelte-hmr": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz", - "integrity": "sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==", + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", "dev": true, "engines": { "node": "^12.20 || ^14.13.1 || >= 16" }, "peerDependencies": { - "svelte": "^3.19.0 || ^4.0.0-next.0" + "svelte": "^3.19.0 || ^4.0.0" } }, "node_modules/svelte-preprocess": { @@ -4632,6 +4632,16 @@ "node": ">=0.8" } }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -4746,17 +4756,26 @@ "optional": true }, "node_modules/undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", + "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", "dev": true, "dependencies": { - "busboy": "^1.6.0" + "@fastify/busboy": "^2.0.0" }, "engines": { "node": ">=14.0" } }, + "node_modules/undici/node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -4850,12 +4869,12 @@ } }, "node_modules/vitefu": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", - "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", "dev": true, "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" }, "peerDependenciesMeta": { "vite": { @@ -4899,9 +4918,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "optional": true, "engines": { "node": ">=0.10.0" diff --git a/package.json b/package.json index 8946964..4415ffd 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@sveltejs/kit": "^1.20.4", "autoprefixer": "^10.4.14", "daisyui": "^3.1.6", + "lottie-web": "^5.12.2", "postcss": "^8.4.24", "svelte": "^4.0.0", "svelte-check": "^3.4.3", @@ -25,6 +26,7 @@ "type": "module", "dependencies": { "firebase": "^9.23.0", - "firebase-admin": "^11.9.0" + "firebase-admin": "^11.10.1", + "uuid": "^9.0.0" } } diff --git a/qualityControl.txt b/qualityControl.txt new file mode 100644 index 0000000..5811e02 --- /dev/null +++ b/qualityControl.txt @@ -0,0 +1,2 @@ +On the map editor, disabled the play button until the adventure has been saved and there are no current changes. +Add delete confirmation dialogue. \ No newline at end of file diff --git a/src/app.css b/src/app.css index bd6213e..5604339 100644 --- a/src/app.css +++ b/src/app.css @@ -1,3 +1,196 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; \ No newline at end of file + + +:root { + --batlas-black: #000000; + --batlas-white: #fff; + --batlas-font: 'Poppins', sans-serif; + background-color: var(--batlas-black); + font-family: 'Poppins', sans-serif; +} + +html { + min-height: 100lvh; + background-color: var(--batlas-black); + min-width: fit-content; +} + +body::-webkit-scrollbar { + color: var(--batlas-black); + background-color: var(--batlas-black); +} + +body::-webkit-scrollbar-thumb { + color: var(--batlas-black); + background: var(--batlas-black); + border: 0.2em solid var(--batlas-white); +} + +body::-webkit-scrollbar-corner { + display: none; +} + +body { + margin: 0; + min-height: 100lvh; + min-width: fit-content; + +} + +* { + box-sizing: border-box; +}; + +h1, h2, h3, h4, h5, h6 { + font-family: 'Poppins', sans-serif; + text-transform: uppercase; + font-size: 1.2em; + margin: 0em; + } + + h2 { + font-family: 'Pirata One', cursive; + margin: 0em; + font-size: 2.8em; + font-weight: 800; + color: var(--batlas-black); + -webkit-text-stroke: var(--batlas-black) 0.01em; + color: var(--batlas-white); + text-shadow: var(--batlas-black) -0.05em 0.05em; + } + + h3 { + margin: 0em; + } + + h4 { + margin: 0em; + } + + + .dungeonBorder { + border: 1em solid white; + border-image-slice: 103 107 107 111; + border-image-width: 1em; + border-image-outset: 0px 0px 0px 0px; + border-image-repeat: repeat repeat; + border-style: solid; + border-image-source: url('/img/border_full.png'); + background-color: var(--batlas-white); + } + + .brutalismBorder { + border: 0.3em solid var(--batlas-black); + border-radius: 0.8em; + box-shadow: var(--batlas-black) -0.4em 0.4em; + } + + .brutalismBorderWhite { + border: 0.3em solid var(--batlas-white); + border-radius: 0.8em; + box-shadow: var(--batlas-white) -0.4em 0.4em; + } + + + .brutalismBorderInverted { + border: 0.3em solid var(--batlas-black); + border-radius: 0.8em; + box-shadow: var(--batlas-black) -0.4em 0.4em; + background-color: var(--batlas-black) !important; + color: var(--batlas-white); + } + + .brutalismBorderInverted .savedAdventureOptions { + border: none !important; + background-color: var(--batlas-black); + color: var(--batlas-white) + } + + .brutalismBorderInverted .savedAdventureOptions a { + border: 0.1em solid var(--batlas-white); + width: 100%; + padding: 0.2em 0.4em; + border-radius: 0.6em; + background-color: var(--batlas-black); + color: var(--batlas-white); + text-align:center; + } + + .firstLetter::first-letter { + font-size: 210%; + line-height: 1em; + float: left; + margin-right: 0.12em; + font-family: 'Pirata One', cursive; + background-color: var(--batlas-black); + color: var(--batlas-white); + padding: 0.2em 0.3em; + } + + + .brutalismBorderInverted + .subsectionsContainer { + display: flex !important; + max-height: 100vh !important; + } + + .invisible { + display: none; + } + + .alert { + display: none; + background-color: var(--batlas-black); + color: var(--batlas-white); + border: 0.1em solid var(--batlas-white); + border-radius: 0.6em; + padding: 0.2em 0.8em; + text-align: center; + position: fixed; + top: 0.6em; + right: 0.6em; + z-index: 100; + } + + .alertActive { + display: block; + animation: slide-in-alert 3s ease forwards; + } + + .disabledButton { + opacity: 0.5; + pointer-events: none; + } + + .iconContainer { + display: flex; + justify-content: center; + align-items: center; + } + + .iconContainer:hover{ + cursor: pointer; + } + + @keyframes slide-in-alert { + 0% { + transform: translateY(-120%); + } + + 20% { + transform: translateY(0%); + } + 80% { + transform: translateY(0%); + } + 100% { + transform: translateY(-120%); + } + } + + @media screen and (max-width: 1500px) { + h2 { + color: var(--batlas-black); + text-shadow: var(--batlas-black) -0.02em 0.02em; + -webkit-text-stroke: var(--batlas-black) 0em; + letter-spacing: 0.025em; + } + } \ No newline at end of file diff --git a/src/app.html b/src/app.html index dd97e07..8e50876 100644 --- a/src/app.html +++ b/src/app.html @@ -3,6 +3,12 @@ + + + + + + %sveltekit.head% diff --git a/src/lib/adventureData.ts b/src/lib/adventureData.ts new file mode 100644 index 0000000..17b23d3 --- /dev/null +++ b/src/lib/adventureData.ts @@ -0,0 +1,34 @@ +import { writable } from "svelte/store"; +import { v4 as uuidv4 } from "uuid"; +import { onMount } from "svelte"; +import { db, user } from "./firebase"; +import { + collection, + query, + where, + getDocs, + doc, + getDoc, + updateDoc, + arrayRemove, +} from "firebase/firestore"; + +export const currentAdventure = writable({ + title: "", + notes: { + enemy: "", + quest: "", + npc: "", + goal: "", + scene: "", + push: "", + gimmick: "", + }, + map: [], + userId: "", + adventureId: "", + public: false, +}); + +export const playAdventureCurrent = writable(false); +export const adventureListStore = writable([]); diff --git a/src/lib/components/ActiveTileOptionsWindows.svelte b/src/lib/components/ActiveTileOptionsWindows.svelte new file mode 100644 index 0000000..d815400 --- /dev/null +++ b/src/lib/components/ActiveTileOptionsWindows.svelte @@ -0,0 +1,1801 @@ + + + +
+
+
clearActiveTile()}> + +
+
+
handleFogToggle(e, $currentAdventure, $activeTile, $activeTile.rowIndex, $activeTile.columnIndex)} class:activeConnection="{$currentAdventure.map[$activeTile.rowIndex][$activeTile.columnIndex].fogOfWar}"> + +
+
+
+
+ {#if !$page.route.id.includes("/player/")} + + {/if} + {#if windowMode === "notes" || $page.route.id.includes("/player/")} + {#if $page.route.id.includes("/player/")} + {#if $activeTile.tileTitle !== ""} +
+

{$currentAdventure.map[$activeTile.rowIndex][$activeTile.columnIndex].tileTitle}

+
+ {/if} + {:else} +
+

Title

+ +
+ {/if} + {#if !$page.route.id.includes("play") || $currentAdventure.map[$activeTile.rowIndex][$activeTile.columnIndex].tileNotes != ""} + {#if !$page.route.id.includes("play")} + + {:else} +

{$currentAdventure.map[$activeTile.rowIndex][$activeTile.columnIndex].tileNotes}

+ {/if} + {/if} + + {:else if windowMode === "tile"} +
+

Connections

+
+ North East Control toggleActiveConnection(e, "NE")}/> + South East Control toggleActiveConnection(e, "SE")}/> + North West Control toggleActiveConnection(e, "NW")}/> + North West Control toggleActiveConnection(e, "SW")}/> + Empty Square +
+
+

changeTileMode('rooms')}>Room

+

changeTileMode('connectors')}>Hall

+

changeTileMode('descenders')}>Descent

+
+
+
+
+ {#if $activeTile.rowIndex != null} + {#each controlTiles as tile} +
setChosenTile(tile, $activeTile.rowIndex, $activeTile.columnIndex)} class="tileOption"> + {tile.img} +
+ {/each} + {/if} +
+
+ {/if} +
+
diff --git a/src/lib/components/AdventureContent.svelte b/src/lib/components/AdventureContent.svelte new file mode 100644 index 0000000..4db8553 --- /dev/null +++ b/src/lib/components/AdventureContent.svelte @@ -0,0 +1,177 @@ + + + + + + +
+ + +
+
toggleActive(e)} class="iconContainer brutalismBorderWhite mapGenButton mobileHidden"> + +
+

{$currentAdventure.title}

+
+ +
+
+

The Enemy

+

{$currentAdventure.notes.enemy}

+
+
+

The Quest

+

{$currentAdventure.notes.quest}

+
+
+

NPC

+

{$currentAdventure.notes.npc}

+
+
+

The Goal

+

{$currentAdventure.notes.goal}

+
+
+

The Scene

+

{$currentAdventure.notes.scene}

+
+
+

The Push

+

{$currentAdventure.notes.push}

+
+
+

The Gimmick

+

{$currentAdventure.notes.gimmick}

+
+
+
\ No newline at end of file diff --git a/src/lib/components/AdventureTools.svelte b/src/lib/components/AdventureTools.svelte new file mode 100644 index 0000000..7584e3c --- /dev/null +++ b/src/lib/components/AdventureTools.svelte @@ -0,0 +1,133 @@ + + + + +
+
+

Notepad

+
+
+

NPC Gen

+
+
+

Pocket Filler

+
+
+ diff --git a/src/lib/components/AuthCheck.svelte b/src/lib/components/AuthCheck.svelte index fe0a207..c8402dd 100644 --- a/src/lib/components/AuthCheck.svelte +++ b/src/lib/components/AuthCheck.svelte @@ -1,12 +1,153 @@ + + - {#if $user} + {#if $user || $page.route.id.includes("/player/")} {:else} -

- You must be signed in to view this page. - Sign in -

+
+
+

403

+

What lies beyond was not meant for you

+

You have tried to access a part of the site that requires authorisation that you do not have in your current browser session.

+
+
+ +
+ Log in +
+
+
{/if} \ No newline at end of file diff --git a/src/lib/components/CreateSaveBar.svelte b/src/lib/components/CreateSaveBar.svelte new file mode 100644 index 0000000..8ab8849 --- /dev/null +++ b/src/lib/components/CreateSaveBar.svelte @@ -0,0 +1,205 @@ + + + + + + + +
+
+ + {:else} +
+

{interestPoint.title}

+
+ {/if} + {#if !$page.route.id.includes("play")} +
handlePointOfInterestDelete(interestPoint)} class="iconContainer"> + +
+ {/if} + {#if !$page.route.id.includes("play")} + + {:else} +
+

{interestPoint.info}

+
+ {/if} +
+ {/each} + {/if} + {#if !$page.route.id.includes("play")} +
handlePointOfInterestCreation()} class="iconContainer centerAlignIcon pointOfInterestAddIcon"> + +
+ {/if} +
+ diff --git a/src/lib/components/Map.svelte b/src/lib/components/Map.svelte new file mode 100644 index 0000000..cca5189 --- /dev/null +++ b/src/lib/components/Map.svelte @@ -0,0 +1,740 @@ + + + + + + +
+
+ {#each $currentAdventure.map as row, i} +
+ {#each row as cell, j} +
+ {#if cell.tileNotes != "" || cell.interestPoints.length > 0 || cell.tileTitle != ""} + + {/if} + {#if cell.chosenTile?.img !== "/tiles/dungeon/roomBlank.webp" || !$page.route.id.includes("/player/")} +
+
handleTileClick(e, cell, i, j)} class="tileSelector" class:disabledHoverSelector = {mapDisabled}>
+
+ {/if} + {#if cell.chosenTile?.img === "/tiles/dungeon/roomBlank.webp" && $page.route.id.includes("/player/")} + {cell.chosenTile?.img} + {:else} + {cell.chosenTile?.img} + {/if} +
+ {/each} +
+ {/each} +
+
+ + {#if $activeTile.rowIndex !== null} + + {/if} +
+
+
+ + diff --git a/src/lib/components/MapArray.svelte b/src/lib/components/MapArray.svelte new file mode 100644 index 0000000..f3aa5f3 --- /dev/null +++ b/src/lib/components/MapArray.svelte @@ -0,0 +1,267 @@ + + + + + {#each mapArray as row, i} +
+ {#each row as cell, j} +
+ {#if cell.tileOptions != null && !$page.route.id.includes("play")} +
+
setActiveTileOptions(cell, i, j)} class="tileSelector">
+
+ {/if} + {cell.chosenTile?.img} +
+ {/each} +
+ {/each} + diff --git a/src/lib/components/MapTemplater.svelte b/src/lib/components/MapTemplater.svelte new file mode 100644 index 0000000..c4ee82c --- /dev/null +++ b/src/lib/components/MapTemplater.svelte @@ -0,0 +1,317 @@ + + + + + + +
+ {#if !$page.route.id.includes("play")} +
+ {#if $currentAdventure.title !== ""} +

You're editing: {$currentAdventure.title}

+ {/if} + Blank Map + Log JSON +
+ {/if} +
+ {#each mapTemplateArray as row, i} +
+ {#each row as cell, j} +
+ {#if cell.tileOptions != null && !$page.route.id.includes("play")} +
+
setActiveTileOptions(cell, i, j)} class="tileSelector">
+
+ {/if} +

Tile

+

NW

+

NE

+

SW

+

SE

+
+ {/each} +
+ {/each} +
+
+
+ {#if $activeTileOptions.tileOptions} + {#each $activeTileOptions.tileOptions as tile} +
setChosenTile(tile, $activeTileOptions.rowIndex, $activeTileOptions.columnIndex)} class="tileOption"> + {tile.img} +
+ {/each} + {/if} +
+
+
+ + diff --git a/src/lib/components/NavigationBar.svelte b/src/lib/components/NavigationBar.svelte new file mode 100644 index 0000000..5333b2f --- /dev/null +++ b/src/lib/components/NavigationBar.svelte @@ -0,0 +1,261 @@ + + + + + + +{#if screenSize > 1500} + + +

Adventures

+
+ + +

Create

+
+ + +

Rules

+
+ + +

Account

+
+ + +

Log Out

+
+{:else} +
+ BATLAS +

Beta testing

+ + + +
+ {#if $page.route.id.includes("play")} + + {:else if $page.route.id.includes("create")} + + {:else if $page.route.id.includes("rules") && $screenChoice !== "rulesHome"} + + {/if} +{/if} + + diff --git a/src/lib/components/OffScreenMenu.svelte b/src/lib/components/OffScreenMenu.svelte new file mode 100644 index 0000000..707fad7 --- /dev/null +++ b/src/lib/components/OffScreenMenu.svelte @@ -0,0 +1,178 @@ + + + + + + diff --git a/src/lib/components/Planner.svelte b/src/lib/components/Planner.svelte new file mode 100644 index 0000000..5702969 --- /dev/null +++ b/src/lib/components/Planner.svelte @@ -0,0 +1,468 @@ + + + + + + + +
+
+