From ed2dff4cdadae9725a9abb26af2a512c176ac15d Mon Sep 17 00:00:00 2001 From: Janis Date: Mon, 8 Dec 2025 21:31:37 +0100 Subject: [PATCH] chore: implemented login version (#4) Reviewed-on: https://git.janis-eccarius.de/KnockOutWhist/KnockOutWhist-Frontend/pulls/4 Co-authored-by: Janis Co-committed-by: Janis --- package-lock.json | 1028 ++++++++++++++++++++++++++++++++++++++- package.json | 7 +- public/logo.png | Bin 0 -> 16796 bytes src/App.vue | 3 +- src/main.ts | 21 + src/router/index.ts | 6 + src/stores/auth.ts | 60 +++ src/types/authTypes.ts | 16 + src/views/LoginView.vue | 222 +++++++++ vite.config.ts | 4 +- 10 files changed, 1354 insertions(+), 13 deletions(-) create mode 100644 public/logo.png create mode 100644 src/stores/auth.ts create mode 100644 src/types/authTypes.ts create mode 100644 src/views/LoginView.vue diff --git a/package-lock.json b/package-lock.json index 2098cc3..cec3ff6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,13 @@ "version": "0.0.0", "dependencies": { "@quasar/extras": "^1.17.0", + "@tsparticles/vue3": "~3.0.1", + "axios": "^1.13.2", + "pinia": "^3.0.4", "quasar": "^2.18.6", + "tsparticles": "~3.9.1", "vue": "^3.5.25", + "vue-axios": "^3.5.2", "vue-router": "^4.6.3" }, "devDependencies": { @@ -1942,6 +1947,613 @@ "dev": true, "license": "MIT" }, + "node_modules/@tsparticles/basic": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/basic/-/basic-3.9.1.tgz", + "integrity": "sha512-ijr2dHMx0IQHqhKW3qA8tfwrR2XYbbWYdaJMQuBo2CkwBVIhZ76U+H20Y492j/NXpd1FUnt2aC0l4CEVGVGdeQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1", + "@tsparticles/move-base": "3.9.1", + "@tsparticles/plugin-hex-color": "3.9.1", + "@tsparticles/plugin-hsl-color": "3.9.1", + "@tsparticles/plugin-rgb-color": "3.9.1", + "@tsparticles/shape-circle": "3.9.1", + "@tsparticles/updater-color": "3.9.1", + "@tsparticles/updater-opacity": "3.9.1", + "@tsparticles/updater-out-modes": "3.9.1", + "@tsparticles/updater-size": "3.9.1" + } + }, + "node_modules/@tsparticles/engine": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/engine/-/engine-3.9.1.tgz", + "integrity": "sha512-DpdgAhWMZ3Eh2gyxik8FXS6BKZ8vyea+Eu5BC4epsahqTGY9V3JGGJcXC6lRJx6cPMAx1A0FaQAojPF3v6rkmQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/@tsparticles/interaction-external-attract": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-attract/-/interaction-external-attract-3.9.1.tgz", + "integrity": "sha512-5AJGmhzM9o4AVFV24WH5vSqMBzOXEOzIdGLIr+QJf4fRh9ZK62snsusv/ozKgs2KteRYQx+L7c5V3TqcDy2upg==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-bounce": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bounce/-/interaction-external-bounce-3.9.1.tgz", + "integrity": "sha512-bv05+h70UIHOTWeTsTI1AeAmX6R3s8nnY74Ea6p6AbQjERzPYIa0XY19nq/hA7+Nrg+EissP5zgoYYeSphr85A==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-bubble": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bubble/-/interaction-external-bubble-3.9.1.tgz", + "integrity": "sha512-tbd8ox/1GPl+zr+KyHQVV1bW88GE7OM6i4zql801YIlCDrl9wgTDdDFGIy9X7/cwTvTrCePhrfvdkUamXIribQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-connect": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-connect/-/interaction-external-connect-3.9.1.tgz", + "integrity": "sha512-sq8YfUNsIORjXHzzW7/AJQtfi/qDqLnYG2qOSE1WOsog39MD30RzmiOloejOkfNeUdcGUcfsDgpUuL3UhzFUOA==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-grab": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-grab/-/interaction-external-grab-3.9.1.tgz", + "integrity": "sha512-QwXza+sMMWDaMiFxd8y2tJwUK6c+nNw554+/9+tEZeTTk2fCbB0IJ7p/TH6ZGWDL0vo2muK54Njv2fEey191ow==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-pause": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-pause/-/interaction-external-pause-3.9.1.tgz", + "integrity": "sha512-Gzv4/FeNir0U/tVM9zQCqV1k+IAgaFjDU3T30M1AeAsNGh/rCITV2wnT7TOGFkbcla27m4Yxa+Fuab8+8pzm+g==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-push": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-push/-/interaction-external-push-3.9.1.tgz", + "integrity": "sha512-GvnWF9Qy4YkZdx+WJL2iy9IcgLvzOIu3K7aLYJFsQPaxT8d9TF8WlpoMlWKnJID6H5q4JqQuMRKRyWH8aAKyQw==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-remove": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-remove/-/interaction-external-remove-3.9.1.tgz", + "integrity": "sha512-yPThm4UDWejDOWW5Qc8KnnS2EfSo5VFcJUQDWc1+Wcj17xe7vdSoiwwOORM0PmNBzdDpSKQrte/gUnoqaUMwOA==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-repulse": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-repulse/-/interaction-external-repulse-3.9.1.tgz", + "integrity": "sha512-/LBppXkrMdvLHlEKWC7IykFhzrz+9nebT2fwSSFXK4plEBxDlIwnkDxd3FbVOAbnBvx4+L8+fbrEx+RvC8diAw==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-slow": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-slow/-/interaction-external-slow-3.9.1.tgz", + "integrity": "sha512-1ZYIR/udBwA9MdSCfgADsbDXKSFS0FMWuPWz7bm79g3sUxcYkihn+/hDhc6GXvNNR46V1ocJjrj0u6pAynS1KQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-external-trail": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-trail/-/interaction-external-trail-3.9.1.tgz", + "integrity": "sha512-Au0v2oiqfKTemI/4bzjD4dUXzIngB5Q2T4nJcMCYpP24uZfwZh5xTjUMH7gyJyyaRTdMl9IJrp8ySjyYbLfeGg==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-particles-attract": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-attract/-/interaction-particles-attract-3.9.1.tgz", + "integrity": "sha512-CYYYowJuGwRLUixQcSU/48PTKM8fCUYThe0hXwQ+yRMLAn053VHzL7NNZzKqEIeEyt5oJoy9KcvubjKWbzMBLQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-particles-collisions": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-collisions/-/interaction-particles-collisions-3.9.1.tgz", + "integrity": "sha512-ggGyjW/3v1yxvYW1IF1EMT15M6w31y5zfNNUPkqd/IXRNPYvm0Z0ayhp+FKmz70M5p0UxxPIQHTvAv9Jqnuj8w==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/interaction-particles-links": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-links/-/interaction-particles-links-3.9.1.tgz", + "integrity": "sha512-MsLbMjy1vY5M5/hu/oa5OSRZAUz49H3+9EBMTIOThiX+a+vpl3sxc9AqNd9gMsPbM4WJlub8T6VBZdyvzez1Vg==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/move-base": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/move-base/-/move-base-3.9.1.tgz", + "integrity": "sha512-X4huBS27d8srpxwOxliWPUt+NtCwY+8q/cx1DvQxyqmTA8VFCGpcHNwtqiN+9JicgzOvSuaORVqUgwlsc7h4pQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/move-parallax": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/move-parallax/-/move-parallax-3.9.1.tgz", + "integrity": "sha512-whlOR0bVeyh6J/hvxf/QM3DqvNnITMiAQ0kro6saqSDItAVqg4pYxBfEsSOKq7EhjxNvfhhqR+pFMhp06zoCVA==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/plugin-absorbers": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-absorbers/-/plugin-absorbers-3.9.1.tgz", + "integrity": "sha512-q9SQllpbPPgw1+euxHPYCFawOVUazQkkwnleiIgpYSiimlCyjIdwGnFPSNe1Sypzqmr2h6oOyX2vkK5ZVNEu8A==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/plugin-easing-quad": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-easing-quad/-/plugin-easing-quad-3.9.1.tgz", + "integrity": "sha512-C2UJOca5MTDXKUTBXj30Kiqr5UyID+xrY/LxicVWWZPczQW2bBxbIbfq9ULvzGDwBTxE2rdvIB8YFKmDYO45qw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/plugin-emitters": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters/-/plugin-emitters-3.9.1.tgz", + "integrity": "sha512-h7opR8SoFWBmVHceDLJUerLENaPfkJSh2zQYvzmLj2L+V3VLS1QDgty+4QZVeZfqNROmgQw2eLFA5El1E0sqqw==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/plugin-emitters-shape-circle": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-circle/-/plugin-emitters-shape-circle-3.9.1.tgz", + "integrity": "sha512-z+9MsAPWr++sNz6N6303rRDjusW0BIPhHY51E5eXGDcRdOqrESDs6y99AJ/6Kdb/PpibCIYjFY9jVi2JJADPRA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1", + "@tsparticles/plugin-emitters": "3.9.1" + } + }, + "node_modules/@tsparticles/plugin-emitters-shape-square": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-square/-/plugin-emitters-shape-square-3.9.1.tgz", + "integrity": "sha512-dhA1c7FKs19B8lgTf25OTA3JoptNA+rjorsqCFuY1BZDI8g9E8DNqikUge14/W7nZN96+98hY+ghxSl4K2YsgA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1", + "@tsparticles/plugin-emitters": "3.9.1" + } + }, + "node_modules/@tsparticles/plugin-hex-color": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-hex-color/-/plugin-hex-color-3.9.1.tgz", + "integrity": "sha512-vZgZ12AjUicJvk7AX4K2eAmKEQX/D1VEjEPFhyjbgI7A65eX72M465vVKIgNA6QArLZ1DLs7Z787LOE6GOBWsg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/plugin-hsl-color": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-hsl-color/-/plugin-hsl-color-3.9.1.tgz", + "integrity": "sha512-jJd1iGgRwX6eeNjc1zUXiJivaqC5UE+SC2A3/NtHwwoQrkfxGWmRHOsVyLnOBRcCPgBp/FpdDe6DIDjCMO715w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/plugin-rgb-color": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-rgb-color/-/plugin-rgb-color-3.9.1.tgz", + "integrity": "sha512-SBxk7f1KBfXeTnnklbE2Hx4jBgh6I6HOtxb+Os1gTp0oaghZOkWcCD2dP4QbUu7fVNCMOcApPoMNC8RTFcy9wQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/shape-circle": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-circle/-/shape-circle-3.9.1.tgz", + "integrity": "sha512-DqZFLjbuhVn99WJ+A9ajz9YON72RtCcvubzq6qfjFmtwAK7frvQeb6iDTp6Ze9FUipluxVZWVRG4vWTxi2B+/g==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/shape-emoji": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-emoji/-/shape-emoji-3.9.1.tgz", + "integrity": "sha512-ifvY63usuT+hipgVHb8gelBHSeF6ryPnMxAAEC1RGHhhXfpSRWMtE6ybr+pSsYU52M3G9+TF84v91pSwNrb9ZQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/shape-image": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-image/-/shape-image-3.9.1.tgz", + "integrity": "sha512-fCA5eme8VF3oX8yNVUA0l2SLDKuiZObkijb0z3Ky0qj1HUEVlAuEMhhNDNB9E2iELTrWEix9z7BFMePp2CC7AA==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/shape-line": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-line/-/shape-line-3.9.1.tgz", + "integrity": "sha512-wT8NSp0N9HURyV05f371cHKcNTNqr0/cwUu6WhBzbshkYGy1KZUP9CpRIh5FCrBpTev34mEQfOXDycgfG0KiLQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/shape-polygon": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-polygon/-/shape-polygon-3.9.1.tgz", + "integrity": "sha512-dA77PgZdoLwxnliH6XQM/zF0r4jhT01pw5y7XTeTqws++hg4rTLV9255k6R6eUqKq0FPSW1/WBsBIl7q/MmrqQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/shape-square": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-square/-/shape-square-3.9.1.tgz", + "integrity": "sha512-DKGkDnRyZrAm7T2ipqNezJahSWs6xd9O5LQLe5vjrYm1qGwrFxJiQaAdlb00UNrexz1/SA7bEoIg4XKaFa7qhQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/shape-star": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-star/-/shape-star-3.9.1.tgz", + "integrity": "sha512-kdMJpi8cdeb6vGrZVSxTG0JIjCwIenggqk0EYeKAwtOGZFBgL7eHhF2F6uu1oq8cJAbXPujEoabnLsz6mW8XaA==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/shape-text": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-text/-/shape-text-3.9.1.tgz", + "integrity": "sha512-oNsLHI0lGkIXoUw3W598iwd7dtoHCDrwpwJRGnQzgfk6T5a9dCpSD5vDeQN89lr3BUbVui4lhxq+/TyC64oAqA==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/slim": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/slim/-/slim-3.9.1.tgz", + "integrity": "sha512-CL5cDmADU7sDjRli0So+hY61VMbdroqbArmR9Av+c1Fisa5ytr6QD7Jv62iwU2S6rvgicEe9OyRmSy5GIefwZw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/basic": "3.9.1", + "@tsparticles/engine": "3.9.1", + "@tsparticles/interaction-external-attract": "3.9.1", + "@tsparticles/interaction-external-bounce": "3.9.1", + "@tsparticles/interaction-external-bubble": "3.9.1", + "@tsparticles/interaction-external-connect": "3.9.1", + "@tsparticles/interaction-external-grab": "3.9.1", + "@tsparticles/interaction-external-pause": "3.9.1", + "@tsparticles/interaction-external-push": "3.9.1", + "@tsparticles/interaction-external-remove": "3.9.1", + "@tsparticles/interaction-external-repulse": "3.9.1", + "@tsparticles/interaction-external-slow": "3.9.1", + "@tsparticles/interaction-particles-attract": "3.9.1", + "@tsparticles/interaction-particles-collisions": "3.9.1", + "@tsparticles/interaction-particles-links": "3.9.1", + "@tsparticles/move-parallax": "3.9.1", + "@tsparticles/plugin-easing-quad": "3.9.1", + "@tsparticles/shape-emoji": "3.9.1", + "@tsparticles/shape-image": "3.9.1", + "@tsparticles/shape-line": "3.9.1", + "@tsparticles/shape-polygon": "3.9.1", + "@tsparticles/shape-square": "3.9.1", + "@tsparticles/shape-star": "3.9.1", + "@tsparticles/updater-life": "3.9.1", + "@tsparticles/updater-rotate": "3.9.1", + "@tsparticles/updater-stroke-color": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-color": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-color/-/updater-color-3.9.1.tgz", + "integrity": "sha512-XGWdscrgEMA8L5E7exsE0f8/2zHKIqnTrZymcyuFBw2DCB6BIV+5z6qaNStpxrhq3DbIxxhqqcybqeOo7+Alpg==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-destroy": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-destroy/-/updater-destroy-3.9.1.tgz", + "integrity": "sha512-MjMzEhZwCQIbxO6ZRM0eXsHVwmlXuUqwC43WCPZCpjhK3AJrMu3KR4xsJieFTWIbVNguAvbgoTB10FfJOUU5VA==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-life": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-life/-/updater-life-3.9.1.tgz", + "integrity": "sha512-Oi8aF2RIwMMsjssUkCB6t3PRpENHjdZf6cX92WNfAuqXtQphr3OMAkYFJFWkvyPFK22AVy3p/cFt6KE5zXxwAA==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-opacity": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-opacity/-/updater-opacity-3.9.1.tgz", + "integrity": "sha512-w778LQuRZJ+IoWzeRdrGykPYSSaTeWfBvLZ2XwYEkh/Ss961InOxZKIpcS6i5Kp/Zfw0fS1ZAuqeHwuj///Osw==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-out-modes": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-out-modes/-/updater-out-modes-3.9.1.tgz", + "integrity": "sha512-cKQEkAwbru+hhKF+GTsfbOvuBbx2DSB25CxOdhtW2wRvDBoCnngNdLw91rs+0Cex4tgEeibkebrIKFDDE6kELg==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-roll": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-roll/-/updater-roll-3.9.1.tgz", + "integrity": "sha512-zl4JeM3gUBJ0uttmIsond3lrZ3f3AkItFeS0Lhj/7jiCKfUoRyyOMrcBk8R1AhW7lI+7ko1iBs3jhO0jnxz9vg==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-rotate": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-rotate/-/updater-rotate-3.9.1.tgz", + "integrity": "sha512-9BfKaGfp28JN82MF2qs6Ae/lJr9EColMfMTHqSKljblwbpVDHte4umuwKl3VjbRt87WD9MGtla66NTUYl+WxuQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-size": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-size/-/updater-size-3.9.1.tgz", + "integrity": "sha512-3NSVs0O2ApNKZXfd+y/zNhTXSFeG1Pw4peI8e6z/q5+XLbmue9oiEwoPy/tQLaark3oNj3JU7Q903ZijPyXSzw==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-stroke-color": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-stroke-color/-/updater-stroke-color-3.9.1.tgz", + "integrity": "sha512-3x14+C2is9pZYTg9T2TiA/aM1YMq4wLdYaZDcHm3qO30DZu5oeQq0rm/6w+QOGKYY1Z3Htg9rlSUZkhTHn7eDA==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-tilt": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-tilt/-/updater-tilt-3.9.1.tgz", + "integrity": "sha512-PB2yaoyXRmSk4iIVgjtRrzOxXMK9mjeAQHIJGtT4faq46Z8cbIIEFgjTwqrUV8qOrNg/h4sm5NE/s0qsTYjp1Q==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-twinkle": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-twinkle/-/updater-twinkle-3.9.1.tgz", + "integrity": "sha512-xgTcYr6LmP44IPIBeQmEExN2Y5Nfl3ikmC08eOh5nZy/ta6ORP+JTsprrnfuv/O2DwTyoqFLkZ16hZfkdc1yOQ==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/updater-wobble": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-wobble/-/updater-wobble-3.9.1.tgz", + "integrity": "sha512-c99Ogy9q4QWO+zsDXol0UnpUwZiY2UucFb8ltuDv9AlbGUeprygoub8jhgT5pEDv+GdzWOJGSgq7rfgv9cHBrg==", + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1" + } + }, + "node_modules/@tsparticles/vue3": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tsparticles/vue3/-/vue3-3.0.1.tgz", + "integrity": "sha512-BxaSZ0wtxq33SDsrqLkLWoV88Jd5BnBoYjyVhKSNzOLOesCiG8Z5WQC1QZGTez79l/gBe0xaCDF0ng1e2iKJvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "^3.0.3", + "vue": "^3.3.13" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -2693,6 +3305,24 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", + "peer": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2714,7 +3344,6 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" @@ -2808,6 +3437,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2900,6 +3542,18 @@ "dev": true, "license": "MIT" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2918,7 +3572,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", - "dev": true, "license": "MIT", "dependencies": { "is-what": "^5.2.0" @@ -3032,6 +3685,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -3046,6 +3708,20 @@ "node": ">=0.10" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.263", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz", @@ -3075,6 +3751,51 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", @@ -3577,6 +4298,42 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -3592,6 +4349,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3602,6 +4368,43 @@ "node": ">=6.9.0" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3628,6 +4431,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -3645,11 +4460,49 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true, "license": "MIT" }, "node_modules/ignore": { @@ -3768,7 +4621,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -3961,6 +4813,15 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -3994,6 +4855,27 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -4014,7 +4896,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true, "license": "MIT" }, "node_modules/mrmime": { @@ -4345,6 +5226,66 @@ "node": ">=0.10" } }, + "node_modules/pinia": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", + "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.7" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.5.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/pinia/node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/pinia/node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/pinia/node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -4427,6 +5368,12 @@ "node": ">=6.0.0" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -4528,7 +5475,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, "license": "MIT" }, "node_modules/rollup": { @@ -4620,13 +5566,34 @@ "tslib": "^2.1.0" } }, + "node_modules/sass": { + "version": "1.93.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.3.tgz", + "integrity": "sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, "node_modules/sass-embedded": { "version": "1.93.3", "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.93.3.tgz", "integrity": "sha512-+VUy01yfDqNmIVMd/LLKl2TTtY0ovZN0rTonh+FhKr65mFwIYgU9WzgIZKS7U9/SPCQvWTsTGx9jyt+qRm/XFw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@bufbuild/protobuf": "^2.5.0", "buffer-builder": "^0.2.0", @@ -5060,7 +6027,6 @@ "version": "14.0.1", "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -5083,7 +6049,6 @@ "version": "2.2.6", "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", - "dev": true, "license": "MIT", "dependencies": { "copy-anything": "^4" @@ -5236,6 +6201,41 @@ "dev": true, "license": "0BSD" }, + "node_modules/tsparticles": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/tsparticles/-/tsparticles-3.9.1.tgz", + "integrity": "sha512-Y780IGSL4qjkZj7+fI92PV/cziHqLR/s6nnYri4K6vH3NQRmDK5D6pfskDO8T4Y96ChCWHY3uxPtOb/hKQ83Qg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.9.1", + "@tsparticles/interaction-external-trail": "3.9.1", + "@tsparticles/plugin-absorbers": "3.9.1", + "@tsparticles/plugin-emitters": "3.9.1", + "@tsparticles/plugin-emitters-shape-circle": "3.9.1", + "@tsparticles/plugin-emitters-shape-square": "3.9.1", + "@tsparticles/shape-text": "3.9.1", + "@tsparticles/slim": "3.9.1", + "@tsparticles/updater-destroy": "3.9.1", + "@tsparticles/updater-roll": "3.9.1", + "@tsparticles/updater-tilt": "3.9.1", + "@tsparticles/updater-twinkle": "3.9.1", + "@tsparticles/updater-wobble": "3.9.1" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5674,6 +6674,16 @@ } } }, + "node_modules/vue-axios": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/vue-axios/-/vue-axios-3.5.2.tgz", + "integrity": "sha512-GP+dct7UlAWkl1qoP3ppw0z6jcSua5/IrMpjB5O8bh089iIiJ+hdxPYH2NPEpajlYgkW5EVMP95ttXWdas1O0g==", + "license": "MIT", + "peerDependencies": { + "axios": "*", + "vue": "^3.0.0 || ^2.0.0" + } + }, "node_modules/vue-eslint-parser": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", diff --git a/package.json b/package.json index 60a9c6e..a2cf369 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,12 @@ "@quasar/extras": "^1.17.0", "quasar": "^2.18.6", "vue": "^3.5.25", - "vue-router": "^4.6.3" + "vue-router": "^4.6.3", + "tsparticles": "~3.9.1", + "@tsparticles/vue3": "~3.0.1", + "axios": "^1.13.2", + "vue-axios": "^3.5.2", + "pinia": "^3.0.4" }, "devDependencies": { "@quasar/vite-plugin": "^1.10.0", diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d0d02134a45e46db82ea0ed0e8a470b274465f80 GIT binary patch literal 16796 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
- -
diff --git a/src/main.ts b/src/main.ts index 5a5dbdb..73cdb29 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,9 +3,30 @@ import './assets/main.css' import { createApp } from 'vue' import App from './App.vue' import router from './router' +import Particles from "@tsparticles/vue3"; +import { loadFull } from "tsparticles"; +import { Quasar, Notify } from 'quasar' +import '@quasar/extras/material-icons/material-icons.css' +import 'quasar/dist/quasar.css' +import { createPinia } from 'pinia' +import axios from 'axios' +import VueAxios from 'vue-axios' const app = createApp(App) +const pinia = createPinia() app.use(router) +app.use(Quasar, { + plugins: { + Notify + }, +}) +app.use(pinia) +app.use(VueAxios, axios) +app.use(Particles, { + init: async engine => { + await loadFull(engine); + }, +}) app.mount('#app') diff --git a/src/router/index.ts b/src/router/index.ts index 3e49915..43078b6 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,5 +1,6 @@ import { createRouter, createWebHistory } from 'vue-router' import HomeView from '../views/HomeView.vue' +import LoginView from '../views/LoginView.vue' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -9,6 +10,11 @@ const router = createRouter({ name: 'home', component: HomeView, }, + { + path: '/login', + name: 'login', + component: LoginView, + }, { path: '/about', name: 'about', diff --git a/src/stores/auth.ts b/src/stores/auth.ts new file mode 100644 index 0000000..8d83040 --- /dev/null +++ b/src/stores/auth.ts @@ -0,0 +1,60 @@ +import {type credentials, type token, type user} from '@/types/authTypes' +import { defineStore } from 'pinia' +import {ref, computed, type Ref} from 'vue' + +export const useAuthStore = defineStore('auth', () => { + const user: Ref = ref(null) + const token = ref(localStorage.getItem('token') || null) + + const isAuthenticated = computed(() => !!token.value) + + async function login(credentials: credentials) { + const response = await fakeLoginApi(credentials) + + token.value = response.token + user.value = response.user + + localStorage.setItem('token', token.value) + } + + function setToken(newToken: string) { + token.value = newToken + localStorage.setItem('token', newToken) + } + + function logout() { + token.value = null + user.value = null + localStorage.removeItem('token') + } + + async function fetchUser() { + if (!token.value) return + + const response = await fakeFetchUserApi(token.value) + user.value = response.user + } + + return { + user, + token, + isAuthenticated, + login, + setToken, + logout, + fetchUser, + } +}) + +async function fakeLoginApi(credentials: credentials): Promise { + return { + token: 'abc123', + user: { id: 1, name: 'John Doe' } + } +} + +async function fakeFetchUserApi(token: string): Promise<{ user: user }> { + return { + user: { id: 1, name: 'John Doe' } + } +} diff --git a/src/types/authTypes.ts b/src/types/authTypes.ts new file mode 100644 index 0000000..85821e8 --- /dev/null +++ b/src/types/authTypes.ts @@ -0,0 +1,16 @@ + +type token = { + token: string + user: user +} +type user = { + id: number + name: string +} +type credentials = { + username: string + password: string +} + +export type { token, user, credentials } + diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue new file mode 100644 index 0000000..10ba0af --- /dev/null +++ b/src/views/LoginView.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/vite.config.ts b/vite.config.ts index d49d708..32caec4 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,15 +2,17 @@ import { fileURLToPath, URL } from 'node:url' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' +import { quasar, transformAssetUrls } from '@quasar/vite-plugin' import vueJsx from '@vitejs/plugin-vue-jsx' import vueDevTools from 'vite-plugin-vue-devtools' // https://vite.dev/config/ export default defineConfig({ plugins: [ - vue(), + vue({ template: { transformAssetUrls } }), vueJsx(), vueDevTools(), + quasar(), ], resolve: { alias: {