Merge branch 'feature/kanban-board' into feature/signup

This commit is contained in:
THIS ONE IS A LITTLE BIT TRICKY KRUB 2023-11-19 19:25:05 +07:00
commit fd3e92f3fd
6 changed files with 527 additions and 128 deletions

View File

@ -9,5 +9,6 @@
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>

View File

@ -41,7 +41,9 @@
"react-bootstrap": "^2.9.1",
"react-dom": "^18.2.0",
"react-icons": "^4.11.0",
"react-router-dom": "^6.18.0"
"react-router-dom": "^6.18.0",
"react-tsparticles": "^2.12.2",
"tsparticles": "^2.12.0"
},
"devDependencies": {
"@tailwindcss/typography": "^0.5.10",

View File

@ -49,13 +49,13 @@ dependencies:
version: 6.1.9(@fullcalendar/core@6.1.9)
'@mui/icons-material':
specifier: ^5.14.16
version: 5.14.16(@mui/material@5.14.17)(@types/react@18.2.37)(react@18.2.0)
version: 5.14.18(@mui/material@5.14.18)(@types/react@18.2.37)(react@18.2.0)
'@mui/material':
specifier: ^5.14.17
version: 5.14.17(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)
version: 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)
'@mui/system':
specifier: ^5.14.17
version: 5.14.17(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0)
version: 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0)
'@react-oauth/google':
specifier: ^0.11.1
version: 0.11.1(react-dom@18.2.0)(react@18.2.0)
@ -67,7 +67,7 @@ dependencies:
version: 23.1.36
axios:
specifier: ^1.6.1
version: 1.6.1
version: 1.6.2
bootstrap:
specifier: ^5.3.2
version: 5.3.2(@popperjs/core@2.11.8)
@ -76,7 +76,7 @@ dependencies:
version: 16.3.1
framer-motion:
specifier: ^10.16.4
version: 10.16.4(react-dom@18.2.0)(react@18.2.0)
version: 10.16.5(react-dom@18.2.0)(react@18.2.0)
gapi-script:
specifier: ^1.2.0
version: 1.2.0
@ -97,10 +97,16 @@ dependencies:
version: 18.2.0(react@18.2.0)
react-icons:
specifier: ^4.11.0
version: 4.11.0(react@18.2.0)
version: 4.12.0(react@18.2.0)
react-router-dom:
specifier: ^6.18.0
version: 6.18.0(react-dom@18.2.0)(react@18.2.0)
version: 6.19.0(react-dom@18.2.0)(react@18.2.0)
react-tsparticles:
specifier: ^2.12.2
version: 2.12.2(react@18.2.0)
tsparticles:
specifier: ^2.12.0
version: 2.12.0
devDependencies:
'@tailwindcss/typography':
@ -114,7 +120,7 @@ devDependencies:
version: 18.2.15
'@vitejs/plugin-react':
specifier: ^4.1.1
version: 4.1.1(vite@4.5.0)
version: 4.2.0(vite@4.5.0)
autoprefixer:
specifier: ^10.4.16
version: 10.4.16(postcss@8.4.31)
@ -123,16 +129,16 @@ devDependencies:
version: 3.9.4
eslint:
specifier: ^8.53.0
version: 8.53.0
version: 8.54.0
eslint-plugin-react:
specifier: ^7.33.2
version: 7.33.2(eslint@8.53.0)
version: 7.33.2(eslint@8.54.0)
eslint-plugin-react-hooks:
specifier: ^4.6.0
version: 4.6.0(eslint@8.53.0)
version: 4.6.0(eslint@8.54.0)
eslint-plugin-react-refresh:
specifier: ^0.4.4
version: 0.4.4(eslint@8.53.0)
version: 0.4.4(eslint@8.54.0)
postcss:
specifier: ^8.4.31
version: 8.4.31
@ -764,13 +770,13 @@ packages:
dev: true
optional: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.53.0):
/@eslint-community/eslint-utils@4.4.0(eslint@8.54.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
eslint: 8.53.0
eslint: 8.54.0
eslint-visitor-keys: 3.4.3
dev: true
@ -787,7 +793,7 @@ packages:
debug: 4.3.4
espree: 9.6.1
globals: 13.23.0
ignore: 5.2.4
ignore: 5.3.0
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
@ -796,8 +802,8 @@ packages:
- supports-color
dev: true
/@eslint/js@8.53.0:
resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==}
/@eslint/js@8.54.0:
resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
@ -955,8 +961,8 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
/@mui/base@5.0.0-beta.23(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-9L8SQUGAWtd/Qi7Qem26+oSSgpY7f2iQTuvcz/rsGpyZjSomMMO6lwYeQSA0CpWM7+aN7eGoSY/WV6wxJiIxXw==}
/@mui/base@5.0.0-beta.24(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-bKt2pUADHGQtqWDZ8nvL2Lvg2GNJyd/ZUgZAJoYzRgmnxBL9j36MSlS3+exEdYkikcnvVafcBtD904RypFKb0w==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@types/react': ^17.0.0 || ^18.0.0
@ -968,8 +974,8 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@floating-ui/react-dom': 2.0.4(react-dom@18.2.0)(react@18.2.0)
'@mui/types': 7.2.8(@types/react@18.2.37)
'@mui/utils': 5.14.17(@types/react@18.2.37)(react@18.2.0)
'@mui/types': 7.2.9(@types/react@18.2.37)
'@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0)
'@popperjs/core': 2.11.8
'@types/react': 18.2.37
clsx: 2.0.0
@ -978,12 +984,12 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
/@mui/core-downloads-tracker@5.14.17:
resolution: {integrity: sha512-eE0uxrpJAEL2ZXkeGLKg8HQDafsiXY+6eNpP4lcv3yIjFfGbU6Hj9/P7Adt8jpU+6JIhmxvILGj2r27pX+zdrQ==}
/@mui/core-downloads-tracker@5.14.18:
resolution: {integrity: sha512-yFpF35fEVDV81nVktu0BE9qn2dD/chs7PsQhlyaV3EnTeZi9RZBuvoEfRym1/jmhJ2tcfeWXiRuHG942mQXJJQ==}
dev: false
/@mui/icons-material@5.14.16(@mui/material@5.14.17)(@types/react@18.2.37)(react@18.2.0):
resolution: {integrity: sha512-wmOgslMEGvbHZjFLru8uH5E+pif/ciXAvKNw16q6joK6EWVWU5rDYWFknDaZhCvz8ZE/K8ZnJQ+lMG6GgHzXbg==}
/@mui/icons-material@5.14.18(@mui/material@5.14.18)(@types/react@18.2.37)(react@18.2.0):
resolution: {integrity: sha512-o2z49R1G4SdBaxZjbMmkn+2OdT1bKymLvAYaB6pH59obM1CYv/0vAVm6zO31IqhwtYwXv6A7sLIwCGYTaVkcdg==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@mui/material': ^5.0.0
@ -994,13 +1000,13 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
'@mui/material': 5.14.17(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)
'@mui/material': 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)
'@types/react': 18.2.37
react: 18.2.0
dev: false
/@mui/material@5.14.17(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-+y0VeOLWfEA4Z98We/UH6KCo8+f2HLZDK45FY+sJf8kSojLy3VntadKtC/u0itqnXXb1Pr4wKB2tSIBW02zY4Q==}
/@mui/material@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-y3UiR/JqrkF5xZR0sIKj6y7xwuEiweh9peiN3Zfjy1gXWXhz5wjlaLdoxFfKIEBUFfeQALxr/Y8avlHH+B9lpQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.5.0
@ -1019,11 +1025,11 @@ packages:
'@babel/runtime': 7.23.2
'@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0)
'@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0)
'@mui/base': 5.0.0-beta.23(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)
'@mui/core-downloads-tracker': 5.14.17
'@mui/system': 5.14.17(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0)
'@mui/types': 7.2.8(@types/react@18.2.37)
'@mui/utils': 5.14.17(@types/react@18.2.37)(react@18.2.0)
'@mui/base': 5.0.0-beta.24(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)
'@mui/core-downloads-tracker': 5.14.18
'@mui/system': 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0)
'@mui/types': 7.2.9(@types/react@18.2.37)
'@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0)
'@types/react': 18.2.37
'@types/react-transition-group': 4.4.9
clsx: 2.0.0
@ -1035,8 +1041,8 @@ packages:
react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0)
dev: false
/@mui/private-theming@5.14.17(@types/react@18.2.37)(react@18.2.0):
resolution: {integrity: sha512-u4zxsCm9xmQrlhVPug+Ccrtsjv7o2+rehvrgHoh0siSguvVgVQq5O3Hh10+tp/KWQo2JR4/nCEwquSXgITS1+g==}
/@mui/private-theming@5.14.18(@types/react@18.2.37)(react@18.2.0):
resolution: {integrity: sha512-WSgjqRlzfHU+2Rou3HlR2Gqfr4rZRsvFgataYO3qQ0/m6gShJN+lhVEvwEiJ9QYyVzMDvNpXZAcqp8Y2Vl+PAw==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@types/react': ^17.0.0 || ^18.0.0
@ -1046,14 +1052,14 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
'@mui/utils': 5.14.17(@types/react@18.2.37)(react@18.2.0)
'@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0)
'@types/react': 18.2.37
prop-types: 15.8.1
react: 18.2.0
dev: false
/@mui/styled-engine@5.14.17(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0):
resolution: {integrity: sha512-AqpVjBEA7wnBvKPW168bNlqB6EN7HxTjLOY7oi275AzD/b1C7V0wqELy6NWoJb2yya5sRf7ENf4iNi3+T5cOgw==}
/@mui/styled-engine@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0):
resolution: {integrity: sha512-pW8bpmF9uCB5FV2IPk6mfbQCjPI5vGI09NOLhtGXPeph/4xIfC3JdIX0TILU0WcTs3aFQqo6s2+1SFgIB9rCXA==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.4.1
@ -1074,8 +1080,8 @@ packages:
react: 18.2.0
dev: false
/@mui/system@5.14.17(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0):
resolution: {integrity: sha512-Ccz3XlbCqka6DnbHfpL3o3TfOeWQPR+ewvNAgm8gnS9M0yVMmzzmY6z0w/C1eebb+7ZP7IoLUj9vojg/GBaTPg==}
/@mui/system@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0):
resolution: {integrity: sha512-hSQQdb3KF72X4EN2hMEiv8EYJZSflfdd1TRaGPoR7CIAG347OxCslpBUwWngYobaxgKvq6xTrlIl+diaactVww==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.5.0
@ -1093,10 +1099,10 @@ packages:
'@babel/runtime': 7.23.2
'@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0)
'@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0)
'@mui/private-theming': 5.14.17(@types/react@18.2.37)(react@18.2.0)
'@mui/styled-engine': 5.14.17(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
'@mui/types': 7.2.8(@types/react@18.2.37)
'@mui/utils': 5.14.17(@types/react@18.2.37)(react@18.2.0)
'@mui/private-theming': 5.14.18(@types/react@18.2.37)(react@18.2.0)
'@mui/styled-engine': 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
'@mui/types': 7.2.9(@types/react@18.2.37)
'@mui/utils': 5.14.18(@types/react@18.2.37)(react@18.2.0)
'@types/react': 18.2.37
clsx: 2.0.0
csstype: 3.1.2
@ -1104,8 +1110,8 @@ packages:
react: 18.2.0
dev: false
/@mui/types@7.2.8(@types/react@18.2.37):
resolution: {integrity: sha512-9u0ji+xspl96WPqvrYJF/iO+1tQ1L5GTaDOeG3vCR893yy7VcWwRNiVMmPdPNpMDqx0WV1wtEW9OMwK9acWJzQ==}
/@mui/types@7.2.9(@types/react@18.2.37):
resolution: {integrity: sha512-k1lN/PolaRZfNsRdAqXtcR71sTnv3z/VCCGPxU8HfdftDkzi335MdJ6scZxvofMAd/K/9EbzCZTFBmlNpQVdCg==}
peerDependencies:
'@types/react': ^17.0.0 || ^18.0.0
peerDependenciesMeta:
@ -1115,8 +1121,8 @@ packages:
'@types/react': 18.2.37
dev: false
/@mui/utils@5.14.17(@types/react@18.2.37)(react@18.2.0):
resolution: {integrity: sha512-yxnWgSS4J6DMFPw2Dof85yBkG02VTbEiqsikymMsnZnXDurtVGTIhlNuV24GTmFTuJMzEyTTU9UF+O7zaL8LEQ==}
/@mui/utils@5.14.18(@types/react@18.2.37)(react@18.2.0):
resolution: {integrity: sha512-HZDRsJtEZ7WMSnrHV9uwScGze4wM/Y+u6pDVo+grUjt5yXzn+wI8QX/JwTHh9YSw/WpnUL80mJJjgCnWj2VrzQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@types/react': ^17.0.0 || ^18.0.0
@ -1178,8 +1184,8 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
/@remix-run/router@1.11.0:
resolution: {integrity: sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==}
/@remix-run/router@1.12.0:
resolution: {integrity: sha512-2hXv036Bux90e1GXTWSMfNzfDDK8LA8JYEWfyHxzvwdp6GyoWEovKc9cotb3KCKmkdwsIBuFGX7ScTWyiHv7Eg==}
engines: {node: '>=14.0.0'}
dev: false
@ -1416,11 +1422,11 @@ packages:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true
/@vitejs/plugin-react@4.1.1(vite@4.5.0):
resolution: {integrity: sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==}
/@vitejs/plugin-react@4.2.0(vite@4.5.0):
resolution: {integrity: sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: ^4.2.0
vite: ^4.2.0 || ^5.0.0
dependencies:
'@babel/core': 7.23.3
'@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.3)
@ -1572,7 +1578,7 @@ packages:
postcss: ^8.1.0
dependencies:
browserslist: 4.22.1
caniuse-lite: 1.0.30001561
caniuse-lite: 1.0.30001563
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.0
@ -1585,8 +1591,8 @@ packages:
engines: {node: '>= 0.4'}
dev: true
/axios@1.6.1:
resolution: {integrity: sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==}
/axios@1.6.2:
resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==}
dependencies:
follow-redirects: 1.15.3
form-data: 4.0.0
@ -1640,8 +1646,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001561
electron-to-chromium: 1.4.581
caniuse-lite: 1.0.30001563
electron-to-chromium: 1.4.588
node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1)
dev: true
@ -1663,8 +1669,8 @@ packages:
engines: {node: '>= 6'}
dev: true
/caniuse-lite@1.0.30001561:
resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==}
/caniuse-lite@1.0.30001563:
resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==}
dev: true
/chalk@2.4.2:
@ -1887,8 +1893,8 @@ packages:
engines: {node: '>=12'}
dev: false
/electron-to-chromium@1.4.581:
resolution: {integrity: sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==}
/electron-to-chromium@1.4.588:
resolution: {integrity: sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==}
dev: true
/error-ex@1.3.2:
@ -2028,24 +2034,24 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
/eslint-plugin-react-hooks@4.6.0(eslint@8.53.0):
/eslint-plugin-react-hooks@4.6.0(eslint@8.54.0):
resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
engines: {node: '>=10'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
dependencies:
eslint: 8.53.0
eslint: 8.54.0
dev: true
/eslint-plugin-react-refresh@0.4.4(eslint@8.53.0):
/eslint-plugin-react-refresh@0.4.4(eslint@8.54.0):
resolution: {integrity: sha512-eD83+65e8YPVg6603Om2iCIwcQJf/y7++MWm4tACtEswFLYMwxwVWAfwN+e19f5Ad/FOyyNg9Dfi5lXhH3Y3rA==}
peerDependencies:
eslint: '>=7'
dependencies:
eslint: 8.53.0
eslint: 8.54.0
dev: true
/eslint-plugin-react@7.33.2(eslint@8.53.0):
/eslint-plugin-react@7.33.2(eslint@8.54.0):
resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
engines: {node: '>=4'}
peerDependencies:
@ -2056,7 +2062,7 @@ packages:
array.prototype.tosorted: 1.1.2
doctrine: 2.1.0
es-iterator-helpers: 1.0.15
eslint: 8.53.0
eslint: 8.54.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.5
minimatch: 3.1.2
@ -2083,15 +2089,15 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/eslint@8.53.0:
resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==}
/eslint@8.54.0:
resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0)
'@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0)
'@eslint-community/regexpp': 4.10.0
'@eslint/eslintrc': 2.1.3
'@eslint/js': 8.53.0
'@eslint/js': 8.54.0
'@humanwhocodes/config-array': 0.11.13
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
@ -2113,7 +2119,7 @@ packages:
glob-parent: 6.0.2
globals: 13.23.0
graphemer: 1.4.0
ignore: 5.2.4
ignore: 5.3.0
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
@ -2200,7 +2206,7 @@ packages:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
dependencies:
flat-cache: 3.1.1
flat-cache: 3.2.0
dev: true
/fill-range@7.0.1:
@ -2222,9 +2228,9 @@ packages:
path-exists: 4.0.0
dev: true
/flat-cache@3.1.1:
resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==}
engines: {node: '>=12.0.0'}
/flat-cache@3.2.0:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
engines: {node: ^10.12.0 || >=12.0.0}
dependencies:
flatted: 3.2.9
keyv: 4.5.4
@ -2264,8 +2270,8 @@ packages:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
dev: true
/framer-motion@10.16.4(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-p9V9nGomS3m6/CALXqv6nFGMuFOxbWsmaOrdmhyQimMIlLl3LC7h7l86wge/Js/8cRu5ktutS/zlzgR7eBOtFA==}
/framer-motion@10.16.5(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-GEzVjOYP2MIpV9bT/GbhcsBNoImG3/2X3O/xVNWmktkv9MdJ7P/44zELm/7Fjb+O3v39SmKFnoDQB32giThzpg==}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
@ -2450,8 +2456,8 @@ packages:
react-is: 16.13.1
dev: false
/ignore@5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
/ignore@5.3.0:
resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==}
engines: {node: '>= 4'}
dev: true
@ -3186,8 +3192,8 @@ packages:
scheduler: 0.23.0
dev: false
/react-icons@4.11.0(react@18.2.0):
resolution: {integrity: sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==}
/react-icons@4.12.0(react@18.2.0):
resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==}
peerDependencies:
react: '*'
dependencies:
@ -3236,26 +3242,26 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/react-router-dom@6.18.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==}
/react-router-dom@6.19.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-N6dWlcgL2w0U5HZUUqU2wlmOrSb3ighJmtQ438SWbhB1yuLTXQ8yyTBMK3BSvVjp7gBtKurT554nCtMOgxCZmQ==}
engines: {node: '>=14.0.0'}
peerDependencies:
react: '>=16.8'
react-dom: '>=16.8'
dependencies:
'@remix-run/router': 1.11.0
'@remix-run/router': 1.12.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-router: 6.18.0(react@18.2.0)
react-router: 6.19.0(react@18.2.0)
dev: false
/react-router@6.18.0(react@18.2.0):
resolution: {integrity: sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==}
/react-router@6.19.0(react@18.2.0):
resolution: {integrity: sha512-0W63PKCZ7+OuQd7Tm+RbkI8kCLmn4GPjDbX61tWljPxWgqTKlEpeQUwPkT1DRjYhF8KSihK0hQpmhU4uxVMcdw==}
engines: {node: '>=14.0.0'}
peerDependencies:
react: '>=16.8'
dependencies:
'@remix-run/router': 1.11.0
'@remix-run/router': 1.12.0
react: 18.2.0
dev: false
@ -3273,6 +3279,16 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
/react-tsparticles@2.12.2(react@18.2.0):
resolution: {integrity: sha512-/nrEbyL8UROXKIMXe+f+LZN2ckvkwV2Qa+GGe/H26oEIc+wq/ybSG9REDwQiSt2OaDQGu0MwmA4BKmkL6wAWcA==}
requiresBuild: true
peerDependencies:
react: '>=16'
dependencies:
react: 18.2.0
tsparticles-engine: 2.12.0
dev: false
/react@18.2.0:
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
engines: {node: '>=0.10.0'}
@ -3606,6 +3622,310 @@ packages:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
dev: false
/tsparticles-basic@2.12.0:
resolution: {integrity: sha512-pN6FBpL0UsIUXjYbiui5+IVsbIItbQGOlwyGV55g6IYJBgdTNXgFX0HRYZGE9ZZ9psEXqzqwLM37zvWnb5AG9g==}
dependencies:
tsparticles-engine: 2.12.0
tsparticles-move-base: 2.12.0
tsparticles-shape-circle: 2.12.0
tsparticles-updater-color: 2.12.0
tsparticles-updater-opacity: 2.12.0
tsparticles-updater-out-modes: 2.12.0
tsparticles-updater-size: 2.12.0
dev: false
/tsparticles-engine@2.12.0:
resolution: {integrity: sha512-ZjDIYex6jBJ4iMc9+z0uPe7SgBnmb6l+EJm83MPIsOny9lPpetMsnw/8YJ3xdxn8hV+S3myTpTN1CkOVmFv0QQ==}
requiresBuild: true
dev: false
/tsparticles-interaction-external-attract@2.12.0:
resolution: {integrity: sha512-0roC6D1QkFqMVomcMlTaBrNVjVOpyNzxIUsjMfshk2wUZDAvTNTuWQdUpmsLS4EeSTDN3rzlGNnIuuUQqyBU5w==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-bounce@2.12.0:
resolution: {integrity: sha512-MMcqKLnQMJ30hubORtdq+4QMldQ3+gJu0bBYsQr9BsThsh8/V0xHc1iokZobqHYVP5tV77mbFBD8Z7iSCf0TMQ==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-bubble@2.12.0:
resolution: {integrity: sha512-5kImCSCZlLNccXOHPIi2Yn+rQWTX3sEa/xCHwXW19uHxtILVJlnAweayc8+Zgmb7mo0DscBtWVFXHPxrVPFDUA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-connect@2.12.0:
resolution: {integrity: sha512-ymzmFPXz6AaA1LAOL5Ihuy7YSQEW8MzuSJzbd0ES13U8XjiU3HlFqlH6WGT1KvXNw6WYoqrZt0T3fKxBW3/C3A==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-grab@2.12.0:
resolution: {integrity: sha512-iQF/A947hSfDNqAjr49PRjyQaeRkYgTYpfNmAf+EfME8RsbapeP/BSyF6mTy0UAFC0hK2A2Hwgw72eT78yhXeQ==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-pause@2.12.0:
resolution: {integrity: sha512-4SUikNpsFROHnRqniL+uX2E388YTtfRWqqqZxRhY0BrijH4z04Aii3YqaGhJxfrwDKkTQlIoM2GbFT552QZWjw==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-push@2.12.0:
resolution: {integrity: sha512-kqs3V0dgDKgMoeqbdg+cKH2F+DTrvfCMrPF1MCCUpBCqBiH+TRQpJNNC86EZYHfNUeeLuIM3ttWwIkk2hllR/Q==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-remove@2.12.0:
resolution: {integrity: sha512-2eNIrv4m1WB2VfSVj46V2L/J9hNEZnMgFc+A+qmy66C8KzDN1G8aJUAf1inW8JVc0lmo5+WKhzex4X0ZSMghBg==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-repulse@2.12.0:
resolution: {integrity: sha512-rSzdnmgljeBCj5FPp4AtGxOG9TmTsK3AjQW0vlyd1aG2O5kSqFjR+FuT7rfdSk9LEJGH5SjPFE6cwbuy51uEWA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-slow@2.12.0:
resolution: {integrity: sha512-2IKdMC3om7DttqyroMtO//xNdF0NvJL/Lx7LDo08VpfTgJJozxU+JAUT8XVT7urxhaDzbxSSIROc79epESROtA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-external-trail@2.12.0:
resolution: {integrity: sha512-LKSapU5sPTaZqYx+y5VJClj0prlV7bswplSFQaIW1raXkvsk45qir2AVcpP5JUhZSFSG+SwsHr+qCgXhNeN1KA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-particles-attract@2.12.0:
resolution: {integrity: sha512-Hl8qwuwF9aLq3FOkAW+Zomu7Gb8IKs6Y3tFQUQScDmrrSCaeRt2EGklAiwgxwgntmqzL7hbMWNx06CHHcUQKdQ==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-particles-collisions@2.12.0:
resolution: {integrity: sha512-Se9nPWlyPxdsnHgR6ap4YUImAu3W5MeGKJaQMiQpm1vW8lSMOUejI1n1ioIaQth9weKGKnD9rvcNn76sFlzGBA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-interaction-particles-links@2.12.0:
resolution: {integrity: sha512-e7I8gRs4rmKfcsHONXMkJnymRWpxHmeaJIo4g2NaDRjIgeb2AcJSWKWZvrsoLnm7zvaf/cMQlbN6vQwCixYq3A==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-move-base@2.12.0:
resolution: {integrity: sha512-oSogCDougIImq+iRtIFJD0YFArlorSi8IW3HD2gO3USkH+aNn3ZqZNTqp321uB08K34HpS263DTbhLHa/D6BWw==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-move-parallax@2.12.0:
resolution: {integrity: sha512-58CYXaX8Ih5rNtYhpnH0YwU4Ks7gVZMREGUJtmjhuYN+OFr9FVdF3oDIJ9N6gY5a5AnAKz8f5j5qpucoPRcYrQ==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-particles.js@2.12.0:
resolution: {integrity: sha512-LyOuvYdhbUScmA4iDgV3LxA0HzY1DnOwQUy3NrPYO393S2YwdDjdwMod6Btq7EBUjg9FVIh+sZRizgV5elV2dg==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-plugin-absorbers@2.12.0:
resolution: {integrity: sha512-2CkPreaXHrE5VzFlxUKLeRB5t66ff+3jwLJoDFgQcp+R4HOEITo0bBZv2DagGP0QZdYN4grpnQzRBVdB4d1rWA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-plugin-easing-quad@2.12.0:
resolution: {integrity: sha512-2mNqez5pydDewMIUWaUhY5cNQ80IUOYiujwG6qx9spTq1D6EEPLbRNAEL8/ecPdn2j1Um3iWSx6lo340rPkv4Q==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-plugin-emitters@2.12.0:
resolution: {integrity: sha512-fbskYnaXWXivBh9KFReVCfqHdhbNQSK2T+fq2qcGEWpwtDdgujcaS1k2Q/xjZnWNMfVesik4IrqspcL51gNdSA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-shape-circle@2.12.0:
resolution: {integrity: sha512-L6OngbAlbadG7b783x16ns3+SZ7i0SSB66M8xGa5/k+YcY7zm8zG0uPt1Hd+xQDR2aNA3RngVM10O23/Lwk65Q==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-shape-image@2.12.0:
resolution: {integrity: sha512-iCkSdUVa40DxhkkYjYuYHr9MJGVw+QnQuN5UC+e/yBgJQY+1tQL8UH0+YU/h0GHTzh5Sm+y+g51gOFxHt1dj7Q==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-shape-line@2.12.0:
resolution: {integrity: sha512-RcpKmmpKlk+R8mM5wA2v64Lv1jvXtU4SrBDv3vbdRodKbKaWGGzymzav1Q0hYyDyUZgplEK/a5ZwrfrOwmgYGA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-shape-polygon@2.12.0:
resolution: {integrity: sha512-5YEy7HVMt1Obxd/jnlsjajchAlYMr9eRZWN+lSjcFSH6Ibra7h59YuJVnwxOxAobpijGxsNiBX0PuGQnB47pmA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-shape-square@2.12.0:
resolution: {integrity: sha512-33vfajHqmlODKaUzyPI/aVhnAOT09V7nfEPNl8DD0cfiNikEuPkbFqgJezJuE55ebtVo7BZPDA9o7GYbWxQNuw==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-shape-star@2.12.0:
resolution: {integrity: sha512-4sfG/BBqm2qBnPLASl2L5aBfCx86cmZLXeh49Un+TIR1F5Qh4XUFsahgVOG0vkZQa+rOsZPEH04xY5feWmj90g==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-shape-text@2.12.0:
resolution: {integrity: sha512-v2/FCA+hyTbDqp2ymFOe97h/NFb2eezECMrdirHWew3E3qlvj9S/xBibjbpZva2gnXcasBwxn0+LxKbgGdP0rA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-slim@2.12.0:
resolution: {integrity: sha512-27w9aGAAAPKHvP4LHzWFpyqu7wKyulayyaZ/L6Tuuejy4KP4BBEB4rY5GG91yvAPsLtr6rwWAn3yS+uxnBDpkA==}
dependencies:
tsparticles-basic: 2.12.0
tsparticles-engine: 2.12.0
tsparticles-interaction-external-attract: 2.12.0
tsparticles-interaction-external-bounce: 2.12.0
tsparticles-interaction-external-bubble: 2.12.0
tsparticles-interaction-external-connect: 2.12.0
tsparticles-interaction-external-grab: 2.12.0
tsparticles-interaction-external-pause: 2.12.0
tsparticles-interaction-external-push: 2.12.0
tsparticles-interaction-external-remove: 2.12.0
tsparticles-interaction-external-repulse: 2.12.0
tsparticles-interaction-external-slow: 2.12.0
tsparticles-interaction-particles-attract: 2.12.0
tsparticles-interaction-particles-collisions: 2.12.0
tsparticles-interaction-particles-links: 2.12.0
tsparticles-move-base: 2.12.0
tsparticles-move-parallax: 2.12.0
tsparticles-particles.js: 2.12.0
tsparticles-plugin-easing-quad: 2.12.0
tsparticles-shape-circle: 2.12.0
tsparticles-shape-image: 2.12.0
tsparticles-shape-line: 2.12.0
tsparticles-shape-polygon: 2.12.0
tsparticles-shape-square: 2.12.0
tsparticles-shape-star: 2.12.0
tsparticles-shape-text: 2.12.0
tsparticles-updater-color: 2.12.0
tsparticles-updater-life: 2.12.0
tsparticles-updater-opacity: 2.12.0
tsparticles-updater-out-modes: 2.12.0
tsparticles-updater-rotate: 2.12.0
tsparticles-updater-size: 2.12.0
tsparticles-updater-stroke-color: 2.12.0
dev: false
/tsparticles-updater-color@2.12.0:
resolution: {integrity: sha512-KcG3a8zd0f8CTiOrylXGChBrjhKcchvDJjx9sp5qpwQK61JlNojNCU35xoaSk2eEHeOvFjh0o3CXWUmYPUcBTQ==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-destroy@2.12.0:
resolution: {integrity: sha512-6NN3dJhxACvzbIGL4dADbYQSZJmdHfwjujj1uvnxdMbb2x8C/AZzGxiN33smo4jkrZ5VLEWZWCJPJ8aOKjQ2Sg==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-life@2.12.0:
resolution: {integrity: sha512-J7RWGHAZkowBHpcLpmjKsxwnZZJ94oGEL2w+wvW1/+ZLmAiFFF6UgU0rHMC5CbHJT4IPx9cbkYMEHsBkcRJ0Bw==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-opacity@2.12.0:
resolution: {integrity: sha512-YUjMsgHdaYi4HN89LLogboYcCi1o9VGo21upoqxq19yRy0hRCtx2NhH22iHF/i5WrX6jqshN0iuiiNefC53CsA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-out-modes@2.12.0:
resolution: {integrity: sha512-owBp4Gk0JNlSrmp12XVEeBroDhLZU+Uq3szbWlHGSfcR88W4c/0bt0FiH5bHUqORIkw+m8O56hCjbqwj69kpOQ==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-roll@2.12.0:
resolution: {integrity: sha512-dxoxY5jP4C9x15BxlUv5/Q8OjUPBiE09ToXRyBxea9aEJ7/iMw6odvi1HuT0H1vTIfV7o1MYawjeCbMycvODKQ==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-rotate@2.12.0:
resolution: {integrity: sha512-waOFlGFmEZOzsQg4C4VSejNVXGf4dMf3fsnQrEROASGf1FCd8B6WcZau7JtXSTFw0OUGuk8UGz36ETWN72DkCw==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-size@2.12.0:
resolution: {integrity: sha512-B0yRdEDd/qZXCGDL/ussHfx5YJ9UhTqNvmS5X2rR2hiZhBAE2fmsXLeWkdtF2QusjPeEqFDxrkGiLOsh6poqRA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-stroke-color@2.12.0:
resolution: {integrity: sha512-MPou1ZDxsuVq6SN1fbX+aI5yrs6FyP2iPCqqttpNbWyL+R6fik1rL0ab/x02B57liDXqGKYomIbBQVP3zUTW1A==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-tilt@2.12.0:
resolution: {integrity: sha512-HDEFLXazE+Zw+kkKKAiv0Fs9D9sRP61DoCR6jZ36ipea6OBgY7V1Tifz2TSR1zoQkk57ER9+EOQbkSQO+YIPGQ==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-twinkle@2.12.0:
resolution: {integrity: sha512-JhK/DO4kTx7IFwMBP2EQY9hBaVVvFnGBvX21SQWcjkymmN1hZ+NdcgUtR9jr4jUiiSNdSl7INaBuGloVjWvOgA==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles-updater-wobble@2.12.0:
resolution: {integrity: sha512-85FIRl95ipD3jfIsQdDzcUC5PRMWIrCYqBq69nIy9P8rsNzygn+JK2n+P1VQZowWsZvk0mYjqb9OVQB21Lhf6Q==}
dependencies:
tsparticles-engine: 2.12.0
dev: false
/tsparticles@2.12.0:
resolution: {integrity: sha512-aw77llkaEhcKYUHuRlggA6SB1Dpa814/nrStp9USGiDo5QwE1Ckq30QAgdXU6GRvnblUFsiO750ZuLQs5Y0tVw==}
dependencies:
tsparticles-engine: 2.12.0
tsparticles-interaction-external-trail: 2.12.0
tsparticles-plugin-absorbers: 2.12.0
tsparticles-plugin-emitters: 2.12.0
tsparticles-slim: 2.12.0
tsparticles-updater-destroy: 2.12.0
tsparticles-updater-roll: 2.12.0
tsparticles-updater-tilt: 2.12.0
tsparticles-updater-twinkle: 2.12.0
tsparticles-updater-wobble: 2.12.0
dev: false
/type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}

View File

@ -1,15 +1,15 @@
import React, { useEffect, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useGoogleLogin } from "@react-oauth/google";
import { useCallback } from "react";
import Particles from "react-tsparticles";
import { loadFull } from "tsparticles";
import refreshAccessToken from "./refreshAcesstoken";
import axiosapi from "../../api/AuthenticationApi";
import { useAuth } from "../../hooks/authentication/IsAuthenticated";
function LoginPage() {
const Navigate = useNavigate();
const { isAuthenticated, setIsAuthenticated } = useAuth();
useEffect(() => {
@ -21,15 +21,14 @@ function LoginPage() {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const handleEmailChange = event => {
const handleEmailChange = (event) => {
setEmail(event.target.value);
};
const handlePasswordChange = event => {
const handlePasswordChange = (event) => {
setPassword(event.target.value);
};
const handleSubmit = event => {
const handleSubmit = (event) => {
event.preventDefault();
// Send a POST request to the authentication API
@ -38,15 +37,16 @@ function LoginPage() {
email: email,
password: password,
})
.then(res => {
.then((res) => {
// On successful login, store tokens and set the authorization header
localStorage.setItem("access_token", res.data.access);
localStorage.setItem("refresh_token", res.data.refresh);
axiosapi.axiosInstance.defaults.headers["Authorization"] = "Bearer " + res.data.access;
axiosapi.axiosInstance.defaults.headers["Authorization"] =
"Bearer " + res.data.access;
setIsAuthenticated(true);
Navigate("/");
})
.catch(err => {
.catch((err) => {
console.log("Login failed");
console.log(err);
setIsAuthenticated(false);
@ -56,7 +56,7 @@ function LoginPage() {
const googleLoginImplicit = useGoogleLogin({
flow: "auth-code",
redirect_uri: "postmessage",
onSuccess: async response => {
onSuccess: async (response) => {
try {
const loginResponse = await axiosapi.googleLogin(response.code);
if (loginResponse && loginResponse.data) {
@ -72,17 +72,104 @@ function LoginPage() {
setIsAuthenticated(false);
}
},
onError: errorResponse => console.log(errorResponse),
onError: (errorResponse) => console.log(errorResponse),
});
{
/* Particles Loader*/
}
const particlesInit = useCallback(async (engine) => {
console.log(engine);
await loadFull(engine);
}, []);
const particlesLoaded = useCallback(async (container) => {
console.log(container);
}, []);
return (
<div data-theme="night" className="min-h-screen flex">
{/* Left Section (Login Box) */}
<div className="w-1/2 flex items-center justify-center">
<div className="w-96 bg-neutral rounded-lg p-8 shadow-md space-y-4">
<h2 className="text-2xl font-semibold text-left">Log in to your account</h2>
<div
data-theme="night"
className="h-screen flex items-center justify-center"
>
{/* Particles Container */}
<div style={{ width: "0%", height: "100vh" }}>
<Particles
id="particles"
init={particlesInit}
loaded={particlesLoaded}
className="-z-10"
options={{
fpsLimit: 240,
interactivity: {
events: {
onClick: {
enable: true,
mode: "push",
},
onHover: {
enable: true,
mode: "repulse",
},
resize: true,
},
modes: {
push: {
quantity: 4,
},
repulse: {
distance: 200,
duration: 0.4,
},
},
},
particles: {
color: {
value: "#008000",
},
links: {
color: "#00ff00",
distance: 150,
enable: true,
opacity: 0.1,
width: 1,
},
move: {
direction: "none",
enable: true,
outModes: {
default: "bounce",
},
random: false,
speed: 4,
straight: false,
},
number: {
density: {
enable: true,
area: 800,
},
value: 50,
},
opacity: {
value: 0.5,
},
shape: {
type: "circle",
},
size: {
value: { min: 4, max: 5 },
},
},
detectRetina: true,
}}
/>
</div>
{/* Login Box */}
<div className="w-1/4 flex items-center justify-center">
<div className="w-96 bg-neutral rounded-lg p-8 shadow-md space-y-4 z-10">
<h2 className="text-3xl font-bold text-center">Login</h2>
{/* Email Input */}
<div className="form-control">
<div className="form-control ">
<label className="label" htmlFor="email">
<p className="text-bold">
Email<span className="text-red-500 text-bold">*</span>
@ -112,12 +199,15 @@ function LoginPage() {
/>
</div>
{/* Login Button */}
<button className="btn btn-primary w-full" onClick={handleSubmit}>
<button className="btn btn-success w-full " onClick={handleSubmit}>
Login
</button>
<div className="divider">OR</div>
{/* Login with Google Button */}
<button className="btn btn-outline btn-secondary w-full" onClick={() => googleLoginImplicit()}>
<button
className="btn btn-outline btn-secondary w-full "
onClick={() => googleLoginImplicit()}
>
Login with Google
</button>
{/* Forgot Password Link */}
@ -128,20 +218,6 @@ function LoginPage() {
</div>
</div>
</div>
{/* Right Section (Blurred Image Background) */}
<div className="w-1/2 relative">
<div
className="w-full h-full bg-cover bg-center"
style={{
backgroundImage: 'url("https://th.bing.com/th/id/OIG.9byG0pWUCcbGL7Kly9tA?pid=ImgGn&w=1024&h=1024&rs=1")',
filter: "blur(2px) brightness(.5)",
}}></div>
<div className="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-white text-2xl font-semibold">
Text Overlay
</div>
</div>
</div>
);
}