diff --git a/package-lock.json b/package-lock.json index bfe764c..cfe3138 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,10 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "firebase": "^9.14.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.4.3", "react-scripts": "5.0.1", "web-vitals": "^2.1.4" } @@ -2195,6 +2197,581 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@firebase/analytics": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.8.4.tgz", + "integrity": "sha512-Bgr2tMexv0YrL6kjrOF1xVRts8PM6WWmROpfRQjh0xFU4QSoofBJhkVn2NXDXkHWrr5slFfqB5yOnmgAIsHiMw==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/analytics-compat": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.1.17.tgz", + "integrity": "sha512-36ByEDsH6/3YNuD6yig30s2A/+E1pt333r8SJirUE8+aHYl/DGX0PXplKvJWDGamYYjMwet3Kt4XRrB1NY8mLg==", + "dependencies": { + "@firebase/analytics": "0.8.4", + "@firebase/analytics-types": "0.7.1", + "@firebase/component": "0.5.21", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/analytics-types": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.7.1.tgz", + "integrity": "sha512-a1INLjelc1Mqrt2CbGmGdlNBj0zsvwBv0K5q5C6Fje8GSXBMc3+iQQQjzYe/4KkK6nL54UP7ZMeI/Q3VEW72FA==" + }, + "node_modules/@firebase/app": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.8.4.tgz", + "integrity": "sha512-gQntijd+sLaGWjcBQpk33giCEXNzGLB6489NMpypVgEXJwQXYQPSrtb9vUHXot1w1iy/j6xlNl4K8wwwNdRgDg==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "idb": "7.0.1", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-check": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.5.17.tgz", + "integrity": "sha512-P4bm0lbs+VgS7pns322GC0hyKuTDCqYk2X4FGBf133LZaw1NXJpzOteqPdCT0hBCaR0QSHk49gxx+bdnSdd5Fg==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/app-check-compat": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.2.17.tgz", + "integrity": "sha512-yhiAy6U4MuhbY+DCgvG5FcrXkAL+7YohRzqywycQKr31k/ftelbR5l9Zmo2WJMxdLxfubnnqeG/BYCRHlSvk7A==", + "dependencies": { + "@firebase/app-check": "0.5.17", + "@firebase/app-check-types": "0.4.1", + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/app-check-interop-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.1.tgz", + "integrity": "sha512-QpYh5GmiLA9ob8NWAZpHbNNl9TzxxZI4NLevT6MYPRDXKG9BSmBI7FATRfm5uv2QQUVSQrESKog5CCmU16v+7Q==" + }, + "node_modules/@firebase/app-check-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.4.1.tgz", + "integrity": "sha512-4X79w2X0H5i5qvaho3qkjZg5qdERnKR4gCfy/fxDmdMMP4QgNJHJ9IBk1E+c4cm5HlaZVcLq9K6z8xaRqjZhyw==" + }, + "node_modules/@firebase/app-compat": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.39.tgz", + "integrity": "sha512-F5O/N38dVGFzpe6zM//MslYT80rpX0V+MQNMvONPUlXhvDqS5T+8NMSCWOcZ++Z4Hkj8EvgTJk59AMnD8SdyFw==", + "dependencies": { + "@firebase/app": "0.8.4", + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.8.1.tgz", + "integrity": "sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw==" + }, + "node_modules/@firebase/app/node_modules/idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==" + }, + "node_modules/@firebase/auth": { + "version": "0.20.11", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.20.11.tgz", + "integrity": "sha512-cKy91l4URDG3yWfPK7tjUySh2wCLxtTilsR59jiqQJLReBrQsKP79eFDJ6jqWwbEh3+f1lmoH1nKswwbo9XdmA==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "node-fetch": "2.6.7", + "selenium-webdriver": "4.5.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/auth-compat": { + "version": "0.2.24", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.2.24.tgz", + "integrity": "sha512-IuZQScjtoOLkUHtmIUJ2F3E2OpDOyap6L/9HL/DX3nzEA1LrX7wlpeU6OF2jS9E0KLueWKIrSkIQOOsKoQj/sA==", + "dependencies": { + "@firebase/auth": "0.20.11", + "@firebase/auth-types": "0.11.1", + "@firebase/component": "0.5.21", + "@firebase/util": "1.7.3", + "node-fetch": "2.6.7", + "selenium-webdriver": "4.5.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.7.tgz", + "integrity": "sha512-yA/dTveGGPcc85JP8ZE/KZqfGQyQTBCV10THdI8HTlP1GDvNrhr//J5jAt58MlsCOaO3XmC4DqScPBbtIsR/EA==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/auth-types": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.11.1.tgz", + "integrity": "sha512-ud7T39VG9ptTrC2fOy/XlU+ubC+BVuBJPteuzsPZSa9l7gkntvWgVb3Z/3FxqqRPlkVUYiyvmsbRN3DE1He2ow==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/component": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.21.tgz", + "integrity": "sha512-12MMQ/ulfygKpEJpseYMR0HunJdlsLrwx2XcEs40M18jocy2+spyzHHEwegN3x/2/BLFBjR5247Etmz0G97Qpg==", + "dependencies": { + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.13.10.tgz", + "integrity": "sha512-KRucuzZ7ZHQsRdGEmhxId5jyM2yKsjsQWF9yv0dIhlxYg0D8rCVDZc/waoPKA5oV3/SEIoptF8F7R1Vfe7BCQA==", + "dependencies": { + "@firebase/auth-interop-types": "0.1.7", + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.2.10.tgz", + "integrity": "sha512-fK+IgUUqVKcWK/gltzDU+B1xauCOfY6vulO8lxoNTkcCGlSxuTtwsdqjGkFmgFRMYjXFWWJ6iFcJ/vXahzwCtA==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/database": "0.13.10", + "@firebase/database-types": "0.9.17", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "0.9.17", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.17.tgz", + "integrity": "sha512-YQm2tCZyxNtEnlS5qo5gd2PAYgKCy69tUKwioGhApCFThW+mIgZs7IeYeJo2M51i4LCixYUl+CvnOyAnb/c3XA==", + "dependencies": { + "@firebase/app-types": "0.8.1", + "@firebase/util": "1.7.3" + } + }, + "node_modules/@firebase/firestore": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.7.3.tgz", + "integrity": "sha512-hnA8hljwJBpejv0SPlt0yiej1wz3VRcLzoNAZujTCI1wLoADkRNsqic5uN/Ge0M0vbmHliLXtet/PDqvEbB9Ww==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "@firebase/webchannel-wrapper": "0.8.1", + "@grpc/grpc-js": "^1.3.2", + "@grpc/proto-loader": "^0.6.13", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10.10.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/firestore-compat": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.2.3.tgz", + "integrity": "sha512-FgJwGCA2K+lsGk6gbJo57qn4iocQSGfOlNi2s4QsEO/WOVIU00yYGm408fN7iAGpr9d5VKyulO4sYcic7cS51g==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/firestore": "3.7.3", + "@firebase/firestore-types": "2.5.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/firestore-types": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.1.tgz", + "integrity": "sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/functions": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.8.8.tgz", + "integrity": "sha512-weNcDQJcH3/2YFaXd5dF5pUk3IQdZY60QNuWpq7yS+uaPlCRHjT0K989Q3ZcmYwXz7mHTfhlQamXdA4Yobgt+Q==", + "dependencies": { + "@firebase/app-check-interop-types": "0.1.1", + "@firebase/auth-interop-types": "0.1.7", + "@firebase/component": "0.5.21", + "@firebase/messaging-interop-types": "0.1.1", + "@firebase/util": "1.7.3", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/functions-compat": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.2.8.tgz", + "integrity": "sha512-5w668whT+bm6oVcFqIxfFbn9N77WycpNCfZNg1l0iC+5RLSt53RTVu43pqi43vh23Vp4ad+SRBgZiQGAMen5wA==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/functions": "0.8.8", + "@firebase/functions-types": "0.5.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/functions-types": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.5.1.tgz", + "integrity": "sha512-olEJnTuULM/ws0pwhHA0Ze5oIdpFbZsdBGCaBhyL4pm1NUR4Moh0cyAsqr+VtqHCNMGquHU1GJ77qITkoonp0w==" + }, + "node_modules/@firebase/installations": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.5.16.tgz", + "integrity": "sha512-k3iyjr+yZnDOcJbP+CCZW3/zQJf9gYL2CNBJs9QbmFJoLz7cgIcnAT/XNDMudxcggF1goLfq4+MygpzHD0NzLA==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/util": "1.7.3", + "idb": "7.0.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/installations-compat": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.1.16.tgz", + "integrity": "sha512-Xp7s3iUMZ6/TN0a+g1kpHNEn7h59kSxi44/2I7bd3X6xwHnxMu0TqYB7U9WfqEhqiI9iKulL3g06wIZqaklElw==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/installations-types": "0.4.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/installations-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.4.1.tgz", + "integrity": "sha512-ac906QcmipomZjSasGDYNS1LDy4JNGzQ4VXHpFtoOrI6U2QGFkRezZpI+5bzfU062JOD+doO6irYC6Uwnv/GnA==", + "peerDependencies": { + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/installations/node_modules/idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==" + }, + "node_modules/@firebase/logger": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.4.tgz", + "integrity": "sha512-hlFglGRgZEwoyClZcGLx/Wd+zoLfGmbDkFx56mQt/jJ0XMbfPqwId1kiPl0zgdWZX+D8iH+gT6GuLPFsJWgiGw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/messaging": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.11.0.tgz", + "integrity": "sha512-V7+Xw4QlB8PgINY7Wml+Uj8A3S2nR0ooVoaqfRJ8ZN3W7A4aO/DCkjPsf6DXehwfqRLA7PGB9Boe8l9Idy7icA==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/messaging-interop-types": "0.1.1", + "@firebase/util": "1.7.3", + "idb": "7.0.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/messaging-compat": { + "version": "0.1.21", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.1.21.tgz", + "integrity": "sha512-oxQCQ8EXqpSaTybryokbEM/LAqkG0L7OJuucllCg5roqRGIHE437Abus0Bn67P8TKJaYjyKxomg8wCvfmInjlg==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/messaging": "0.11.0", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/messaging-interop-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.1.tgz", + "integrity": "sha512-7XuY87zPh01EBaeS3s6co31Il5oGbPl5MxAg6Uj3fPv7PqJQlbwQ+B5k7CKSF/Y26tRxp+u+usxIvIWCSEA8CQ==" + }, + "node_modules/@firebase/messaging/node_modules/idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==" + }, + "node_modules/@firebase/performance": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.5.17.tgz", + "integrity": "sha512-NDgzI5JYo6Itnj1FWhMkK3LtwKhtOnhC+WBkxezjzFVuCOornQjvu7ucAU1o2dHXh7MFruhHGFPsHyfkkMCljA==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/performance-compat": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.1.17.tgz", + "integrity": "sha512-Hci5MrDlRuqwVozq7LaSAufXXElz+AtmEQArix64kLRJqHhOu5K/8TpuZXM/klR6gnLyIrk+01CrAemH3zHpDw==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/performance": "0.5.17", + "@firebase/performance-types": "0.1.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/performance-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.1.1.tgz", + "integrity": "sha512-wiJRLBg8EPaYSGJqx7aqkZ3L5fULfZa9zOTs4C06K020g0zzJh9kUUO/0U3wvHz7zRQjJxTO8Jw4SDjxs3EZrA==" + }, + "node_modules/@firebase/remote-config": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.3.15.tgz", + "integrity": "sha512-ZCyqoCaftoNvc2r4zPaqNV4OgC4sRHjcQI+agzXESnhDLnTY8DpCaQ0m9j6deHuxxDOgu8QPDb8psLbjR+9CgQ==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/remote-config-compat": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.1.16.tgz", + "integrity": "sha512-BWonzeqODnGki/fZ17zOnjJFR5CWbIOU0PmYGjWBnbkWxpFDdE3zNsz8JTVd/Mkt7y2PHFMYpLsyZ473E/62FQ==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/remote-config": "0.3.15", + "@firebase/remote-config-types": "0.2.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/remote-config-types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.2.1.tgz", + "integrity": "sha512-1PGx4vKtMMd5uB6G1Nj2b8fOnJx7mIJGzkdyfhIM1oQx9k3dJ+pVu4StrNm46vHaD8ZlOQLr91YfUE43xSXwSg==" + }, + "node_modules/@firebase/storage": { + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.9.14.tgz", + "integrity": "sha512-he8VAJ4BLkQdebnna15TI1/ymkwQTeKnjA/psKMAJ2+/UswD/68bCMKOlTrMvw6Flv3zc5YZk1xdL9DHR0i6wg==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/util": "1.7.3", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/storage-compat": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.1.22.tgz", + "integrity": "sha512-uv33WnAEcxf2983Z03uhJmKc91LKSsRijFwut8xeoJamJoGAVj1Tc9Mio491aI1KZ+RMkNFghHL2FpxjuvxpPg==", + "dependencies": { + "@firebase/component": "0.5.21", + "@firebase/storage": "0.9.14", + "@firebase/storage-types": "0.6.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/storage-types": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.6.1.tgz", + "integrity": "sha512-/pkNzKiGCSjdBBZHPvWL1kkPZfM3pFJ38HPJE1xTHwLBwdrFb4JrmY+5/E4ma5ePsbejecIOD1SZhEKDB/JwUQ==", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/util": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.7.3.tgz", + "integrity": "sha512-wxNqWbqokF551WrJ9BIFouU/V5SL1oYCGx1oudcirdhadnQRFH5v1sjgGL7cUV/UsekSycygphdrF2lxBxOYKg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/webchannel-wrapper": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.8.1.tgz", + "integrity": "sha512-CJW8vxt6bJaBeco2VnlJjmCmAkrrtIdf0GGKvpAB4J5gw8Gi0rHb+qsgKp6LsyS5W6ALPLawLs7phZmw02dvLw==" + }, + "node_modules/@grpc/grpc-js": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", + "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", + "dependencies": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", + "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/grpc-js/node_modules/protobufjs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@grpc/grpc-js/node_modules/protobufjs/node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + }, + "node_modules/@grpc/proto-loader": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.11.3", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", @@ -3085,6 +3662,68 @@ } } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@remix-run/router": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.3.tgz", + "integrity": "sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q==", + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -4034,6 +4673,11 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -7971,6 +8615,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/firebase": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.14.0.tgz", + "integrity": "sha512-wePrsf7W33mhT7RVXQavragoAgXb/NDm22vuhwJXkprrQ2Y9alrEKC5LTAtLJL3P2dHdDmeylS6PLZwWPEE79A==", + "dependencies": { + "@firebase/analytics": "0.8.4", + "@firebase/analytics-compat": "0.1.17", + "@firebase/app": "0.8.4", + "@firebase/app-check": "0.5.17", + "@firebase/app-check-compat": "0.2.17", + "@firebase/app-compat": "0.1.39", + "@firebase/app-types": "0.8.1", + "@firebase/auth": "0.20.11", + "@firebase/auth-compat": "0.2.24", + "@firebase/database": "0.13.10", + "@firebase/database-compat": "0.2.10", + "@firebase/firestore": "3.7.3", + "@firebase/firestore-compat": "0.2.3", + "@firebase/functions": "0.8.8", + "@firebase/functions-compat": "0.2.8", + "@firebase/installations": "0.5.16", + "@firebase/installations-compat": "0.1.16", + "@firebase/messaging": "0.11.0", + "@firebase/messaging-compat": "0.1.21", + "@firebase/performance": "0.5.17", + "@firebase/performance-compat": "0.1.17", + "@firebase/remote-config": "0.3.15", + "@firebase/remote-config-compat": "0.1.16", + "@firebase/storage": "0.9.14", + "@firebase/storage-compat": "0.1.22", + "@firebase/util": "1.7.3" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -8826,6 +9503,11 @@ "node": ">= 4" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, "node_modules/immer": { "version": "9.0.16", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", @@ -11514,6 +12196,44 @@ "node": ">=4.0" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -11571,6 +12291,14 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lilconfig": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", @@ -11624,6 +12352,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -11649,6 +12382,11 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -11995,6 +12733,44 @@ "tslib": "^2.0.3" } }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -12331,6 +13107,11 @@ "node": ">=6" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -13851,6 +14632,31 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -14173,6 +14979,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.3.tgz", + "integrity": "sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA==", + "dependencies": { + "@remix-run/router": "1.0.3" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.3.tgz", + "integrity": "sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ==", + "dependencies": { + "@remix-run/router": "1.0.3", + "react-router": "6.4.3" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -14787,6 +15623,39 @@ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, + "node_modules/selenium-webdriver": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.5.0.tgz", + "integrity": "sha512-9mSFii+lRwcnT2KUAB1kqvx6+mMiiQHH60Y0VUtr3kxxi3oZ3CV3B8e2nuJ7T4SPb+Q6VA0swswe7rYpez07Bg==", + "dependencies": { + "jszip": "^3.10.0", + "tmp": "^0.2.1", + "ws": ">=8.7.0" + }, + "engines": { + "node": ">= 14.20.0" + } + }, + "node_modules/selenium-webdriver/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/selfsigned": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", @@ -14945,6 +15814,11 @@ "node": ">= 0.8.0" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -15669,6 +16543,17 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -18416,6 +19301,495 @@ } } }, + "@firebase/analytics": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.8.4.tgz", + "integrity": "sha512-Bgr2tMexv0YrL6kjrOF1xVRts8PM6WWmROpfRQjh0xFU4QSoofBJhkVn2NXDXkHWrr5slFfqB5yOnmgAIsHiMw==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/analytics-compat": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.1.17.tgz", + "integrity": "sha512-36ByEDsH6/3YNuD6yig30s2A/+E1pt333r8SJirUE8+aHYl/DGX0PXplKvJWDGamYYjMwet3Kt4XRrB1NY8mLg==", + "requires": { + "@firebase/analytics": "0.8.4", + "@firebase/analytics-types": "0.7.1", + "@firebase/component": "0.5.21", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/analytics-types": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.7.1.tgz", + "integrity": "sha512-a1INLjelc1Mqrt2CbGmGdlNBj0zsvwBv0K5q5C6Fje8GSXBMc3+iQQQjzYe/4KkK6nL54UP7ZMeI/Q3VEW72FA==" + }, + "@firebase/app": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.8.4.tgz", + "integrity": "sha512-gQntijd+sLaGWjcBQpk33giCEXNzGLB6489NMpypVgEXJwQXYQPSrtb9vUHXot1w1iy/j6xlNl4K8wwwNdRgDg==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "idb": "7.0.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==" + } + } + }, + "@firebase/app-check": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.5.17.tgz", + "integrity": "sha512-P4bm0lbs+VgS7pns322GC0hyKuTDCqYk2X4FGBf133LZaw1NXJpzOteqPdCT0hBCaR0QSHk49gxx+bdnSdd5Fg==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/app-check-compat": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.2.17.tgz", + "integrity": "sha512-yhiAy6U4MuhbY+DCgvG5FcrXkAL+7YohRzqywycQKr31k/ftelbR5l9Zmo2WJMxdLxfubnnqeG/BYCRHlSvk7A==", + "requires": { + "@firebase/app-check": "0.5.17", + "@firebase/app-check-types": "0.4.1", + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/app-check-interop-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.1.tgz", + "integrity": "sha512-QpYh5GmiLA9ob8NWAZpHbNNl9TzxxZI4NLevT6MYPRDXKG9BSmBI7FATRfm5uv2QQUVSQrESKog5CCmU16v+7Q==" + }, + "@firebase/app-check-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.4.1.tgz", + "integrity": "sha512-4X79w2X0H5i5qvaho3qkjZg5qdERnKR4gCfy/fxDmdMMP4QgNJHJ9IBk1E+c4cm5HlaZVcLq9K6z8xaRqjZhyw==" + }, + "@firebase/app-compat": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.39.tgz", + "integrity": "sha512-F5O/N38dVGFzpe6zM//MslYT80rpX0V+MQNMvONPUlXhvDqS5T+8NMSCWOcZ++Z4Hkj8EvgTJk59AMnD8SdyFw==", + "requires": { + "@firebase/app": "0.8.4", + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/app-types": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.8.1.tgz", + "integrity": "sha512-p75Ow3QhB82kpMzmOntv866wH9eZ3b4+QbUY+8/DA5Zzdf1c8Nsk8B7kbFpzJt4wwHMdy5LTF5YUnoTc1JiWkw==" + }, + "@firebase/auth": { + "version": "0.20.11", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.20.11.tgz", + "integrity": "sha512-cKy91l4URDG3yWfPK7tjUySh2wCLxtTilsR59jiqQJLReBrQsKP79eFDJ6jqWwbEh3+f1lmoH1nKswwbo9XdmA==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "node-fetch": "2.6.7", + "selenium-webdriver": "4.5.0", + "tslib": "^2.1.0" + } + }, + "@firebase/auth-compat": { + "version": "0.2.24", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.2.24.tgz", + "integrity": "sha512-IuZQScjtoOLkUHtmIUJ2F3E2OpDOyap6L/9HL/DX3nzEA1LrX7wlpeU6OF2jS9E0KLueWKIrSkIQOOsKoQj/sA==", + "requires": { + "@firebase/auth": "0.20.11", + "@firebase/auth-types": "0.11.1", + "@firebase/component": "0.5.21", + "@firebase/util": "1.7.3", + "node-fetch": "2.6.7", + "selenium-webdriver": "4.5.0", + "tslib": "^2.1.0" + } + }, + "@firebase/auth-interop-types": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.7.tgz", + "integrity": "sha512-yA/dTveGGPcc85JP8ZE/KZqfGQyQTBCV10THdI8HTlP1GDvNrhr//J5jAt58MlsCOaO3XmC4DqScPBbtIsR/EA==", + "requires": {} + }, + "@firebase/auth-types": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.11.1.tgz", + "integrity": "sha512-ud7T39VG9ptTrC2fOy/XlU+ubC+BVuBJPteuzsPZSa9l7gkntvWgVb3Z/3FxqqRPlkVUYiyvmsbRN3DE1He2ow==", + "requires": {} + }, + "@firebase/component": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.21.tgz", + "integrity": "sha512-12MMQ/ulfygKpEJpseYMR0HunJdlsLrwx2XcEs40M18jocy2+spyzHHEwegN3x/2/BLFBjR5247Etmz0G97Qpg==", + "requires": { + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/database": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.13.10.tgz", + "integrity": "sha512-KRucuzZ7ZHQsRdGEmhxId5jyM2yKsjsQWF9yv0dIhlxYg0D8rCVDZc/waoPKA5oV3/SEIoptF8F7R1Vfe7BCQA==", + "requires": { + "@firebase/auth-interop-types": "0.1.7", + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + } + }, + "@firebase/database-compat": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.2.10.tgz", + "integrity": "sha512-fK+IgUUqVKcWK/gltzDU+B1xauCOfY6vulO8lxoNTkcCGlSxuTtwsdqjGkFmgFRMYjXFWWJ6iFcJ/vXahzwCtA==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/database": "0.13.10", + "@firebase/database-types": "0.9.17", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/database-types": { + "version": "0.9.17", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.17.tgz", + "integrity": "sha512-YQm2tCZyxNtEnlS5qo5gd2PAYgKCy69tUKwioGhApCFThW+mIgZs7IeYeJo2M51i4LCixYUl+CvnOyAnb/c3XA==", + "requires": { + "@firebase/app-types": "0.8.1", + "@firebase/util": "1.7.3" + } + }, + "@firebase/firestore": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.7.3.tgz", + "integrity": "sha512-hnA8hljwJBpejv0SPlt0yiej1wz3VRcLzoNAZujTCI1wLoADkRNsqic5uN/Ge0M0vbmHliLXtet/PDqvEbB9Ww==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "@firebase/webchannel-wrapper": "0.8.1", + "@grpc/grpc-js": "^1.3.2", + "@grpc/proto-loader": "^0.6.13", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + } + }, + "@firebase/firestore-compat": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.2.3.tgz", + "integrity": "sha512-FgJwGCA2K+lsGk6gbJo57qn4iocQSGfOlNi2s4QsEO/WOVIU00yYGm408fN7iAGpr9d5VKyulO4sYcic7cS51g==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/firestore": "3.7.3", + "@firebase/firestore-types": "2.5.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/firestore-types": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.1.tgz", + "integrity": "sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==", + "requires": {} + }, + "@firebase/functions": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.8.8.tgz", + "integrity": "sha512-weNcDQJcH3/2YFaXd5dF5pUk3IQdZY60QNuWpq7yS+uaPlCRHjT0K989Q3ZcmYwXz7mHTfhlQamXdA4Yobgt+Q==", + "requires": { + "@firebase/app-check-interop-types": "0.1.1", + "@firebase/auth-interop-types": "0.1.7", + "@firebase/component": "0.5.21", + "@firebase/messaging-interop-types": "0.1.1", + "@firebase/util": "1.7.3", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + } + }, + "@firebase/functions-compat": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.2.8.tgz", + "integrity": "sha512-5w668whT+bm6oVcFqIxfFbn9N77WycpNCfZNg1l0iC+5RLSt53RTVu43pqi43vh23Vp4ad+SRBgZiQGAMen5wA==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/functions": "0.8.8", + "@firebase/functions-types": "0.5.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/functions-types": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.5.1.tgz", + "integrity": "sha512-olEJnTuULM/ws0pwhHA0Ze5oIdpFbZsdBGCaBhyL4pm1NUR4Moh0cyAsqr+VtqHCNMGquHU1GJ77qITkoonp0w==" + }, + "@firebase/installations": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.5.16.tgz", + "integrity": "sha512-k3iyjr+yZnDOcJbP+CCZW3/zQJf9gYL2CNBJs9QbmFJoLz7cgIcnAT/XNDMudxcggF1goLfq4+MygpzHD0NzLA==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/util": "1.7.3", + "idb": "7.0.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==" + } + } + }, + "@firebase/installations-compat": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.1.16.tgz", + "integrity": "sha512-Xp7s3iUMZ6/TN0a+g1kpHNEn7h59kSxi44/2I7bd3X6xwHnxMu0TqYB7U9WfqEhqiI9iKulL3g06wIZqaklElw==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/installations-types": "0.4.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/installations-types": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.4.1.tgz", + "integrity": "sha512-ac906QcmipomZjSasGDYNS1LDy4JNGzQ4VXHpFtoOrI6U2QGFkRezZpI+5bzfU062JOD+doO6irYC6Uwnv/GnA==", + "requires": {} + }, + "@firebase/logger": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.4.tgz", + "integrity": "sha512-hlFglGRgZEwoyClZcGLx/Wd+zoLfGmbDkFx56mQt/jJ0XMbfPqwId1kiPl0zgdWZX+D8iH+gT6GuLPFsJWgiGw==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/messaging": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.11.0.tgz", + "integrity": "sha512-V7+Xw4QlB8PgINY7Wml+Uj8A3S2nR0ooVoaqfRJ8ZN3W7A4aO/DCkjPsf6DXehwfqRLA7PGB9Boe8l9Idy7icA==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/messaging-interop-types": "0.1.1", + "@firebase/util": "1.7.3", + "idb": "7.0.1", + "tslib": "^2.1.0" + }, + "dependencies": { + "idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==" + } + } + }, + "@firebase/messaging-compat": { + "version": "0.1.21", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.1.21.tgz", + "integrity": "sha512-oxQCQ8EXqpSaTybryokbEM/LAqkG0L7OJuucllCg5roqRGIHE437Abus0Bn67P8TKJaYjyKxomg8wCvfmInjlg==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/messaging": "0.11.0", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/messaging-interop-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.1.tgz", + "integrity": "sha512-7XuY87zPh01EBaeS3s6co31Il5oGbPl5MxAg6Uj3fPv7PqJQlbwQ+B5k7CKSF/Y26tRxp+u+usxIvIWCSEA8CQ==" + }, + "@firebase/performance": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.5.17.tgz", + "integrity": "sha512-NDgzI5JYo6Itnj1FWhMkK3LtwKhtOnhC+WBkxezjzFVuCOornQjvu7ucAU1o2dHXh7MFruhHGFPsHyfkkMCljA==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/performance-compat": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.1.17.tgz", + "integrity": "sha512-Hci5MrDlRuqwVozq7LaSAufXXElz+AtmEQArix64kLRJqHhOu5K/8TpuZXM/klR6gnLyIrk+01CrAemH3zHpDw==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/performance": "0.5.17", + "@firebase/performance-types": "0.1.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/performance-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.1.1.tgz", + "integrity": "sha512-wiJRLBg8EPaYSGJqx7aqkZ3L5fULfZa9zOTs4C06K020g0zzJh9kUUO/0U3wvHz7zRQjJxTO8Jw4SDjxs3EZrA==" + }, + "@firebase/remote-config": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.3.15.tgz", + "integrity": "sha512-ZCyqoCaftoNvc2r4zPaqNV4OgC4sRHjcQI+agzXESnhDLnTY8DpCaQ0m9j6deHuxxDOgu8QPDb8psLbjR+9CgQ==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/installations": "0.5.16", + "@firebase/logger": "0.3.4", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/remote-config-compat": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.1.16.tgz", + "integrity": "sha512-BWonzeqODnGki/fZ17zOnjJFR5CWbIOU0PmYGjWBnbkWxpFDdE3zNsz8JTVd/Mkt7y2PHFMYpLsyZ473E/62FQ==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/logger": "0.3.4", + "@firebase/remote-config": "0.3.15", + "@firebase/remote-config-types": "0.2.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/remote-config-types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.2.1.tgz", + "integrity": "sha512-1PGx4vKtMMd5uB6G1Nj2b8fOnJx7mIJGzkdyfhIM1oQx9k3dJ+pVu4StrNm46vHaD8ZlOQLr91YfUE43xSXwSg==" + }, + "@firebase/storage": { + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.9.14.tgz", + "integrity": "sha512-he8VAJ4BLkQdebnna15TI1/ymkwQTeKnjA/psKMAJ2+/UswD/68bCMKOlTrMvw6Flv3zc5YZk1xdL9DHR0i6wg==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/util": "1.7.3", + "node-fetch": "2.6.7", + "tslib": "^2.1.0" + } + }, + "@firebase/storage-compat": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.1.22.tgz", + "integrity": "sha512-uv33WnAEcxf2983Z03uhJmKc91LKSsRijFwut8xeoJamJoGAVj1Tc9Mio491aI1KZ+RMkNFghHL2FpxjuvxpPg==", + "requires": { + "@firebase/component": "0.5.21", + "@firebase/storage": "0.9.14", + "@firebase/storage-types": "0.6.1", + "@firebase/util": "1.7.3", + "tslib": "^2.1.0" + } + }, + "@firebase/storage-types": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.6.1.tgz", + "integrity": "sha512-/pkNzKiGCSjdBBZHPvWL1kkPZfM3pFJ38HPJE1xTHwLBwdrFb4JrmY+5/E4ma5ePsbejecIOD1SZhEKDB/JwUQ==", + "requires": {} + }, + "@firebase/util": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.7.3.tgz", + "integrity": "sha512-wxNqWbqokF551WrJ9BIFouU/V5SL1oYCGx1oudcirdhadnQRFH5v1sjgGL7cUV/UsekSycygphdrF2lxBxOYKg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/webchannel-wrapper": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.8.1.tgz", + "integrity": "sha512-CJW8vxt6bJaBeco2VnlJjmCmAkrrtIdf0GGKvpAB4J5gw8Gi0rHb+qsgKp6LsyS5W6ALPLawLs7phZmw02dvLw==" + }, + "@grpc/grpc-js": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", + "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", + "requires": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + }, + "dependencies": { + "@grpc/proto-loader": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", + "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^16.2.0" + } + }, + "protobufjs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "dependencies": { + "long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + } + } + } + } + }, + "@grpc/proto-loader": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.11.3", + "yargs": "^16.2.0" + } + }, "@humanwhocodes/config-array": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", @@ -19060,6 +20434,65 @@ "source-map": "^0.7.3" } }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@remix-run/router": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.3.tgz", + "integrity": "sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q==" + }, "@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -19769,6 +21202,11 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -22701,6 +24139,39 @@ "path-exists": "^4.0.0" } }, + "firebase": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.14.0.tgz", + "integrity": "sha512-wePrsf7W33mhT7RVXQavragoAgXb/NDm22vuhwJXkprrQ2Y9alrEKC5LTAtLJL3P2dHdDmeylS6PLZwWPEE79A==", + "requires": { + "@firebase/analytics": "0.8.4", + "@firebase/analytics-compat": "0.1.17", + "@firebase/app": "0.8.4", + "@firebase/app-check": "0.5.17", + "@firebase/app-check-compat": "0.2.17", + "@firebase/app-compat": "0.1.39", + "@firebase/app-types": "0.8.1", + "@firebase/auth": "0.20.11", + "@firebase/auth-compat": "0.2.24", + "@firebase/database": "0.13.10", + "@firebase/database-compat": "0.2.10", + "@firebase/firestore": "3.7.3", + "@firebase/firestore-compat": "0.2.3", + "@firebase/functions": "0.8.8", + "@firebase/functions-compat": "0.2.8", + "@firebase/installations": "0.5.16", + "@firebase/installations-compat": "0.1.16", + "@firebase/messaging": "0.11.0", + "@firebase/messaging-compat": "0.1.21", + "@firebase/performance": "0.5.17", + "@firebase/performance-compat": "0.1.17", + "@firebase/remote-config": "0.3.15", + "@firebase/remote-config-compat": "0.1.16", + "@firebase/storage": "0.9.14", + "@firebase/storage-compat": "0.1.22", + "@firebase/util": "1.7.3" + } + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -23299,6 +24770,11 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, "immer": { "version": "9.0.16", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", @@ -25227,6 +26703,46 @@ "object.assign": "^4.1.3" } }, + "jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -25269,6 +26785,14 @@ "type-check": "~0.4.0" } }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, "lilconfig": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", @@ -25307,6 +26831,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -25332,6 +26861,11 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -25586,6 +27120,35 @@ "tslib": "^2.0.3" } }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -25814,6 +27377,11 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, "param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -26735,6 +28303,26 @@ } } }, + "protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -26967,6 +28555,23 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" }, + "react-router": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.3.tgz", + "integrity": "sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA==", + "requires": { + "@remix-run/router": "1.0.3" + } + }, + "react-router-dom": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.3.tgz", + "integrity": "sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ==", + "requires": { + "@remix-run/router": "1.0.3", + "react-router": "6.4.3" + } + }, "react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -27385,6 +28990,24 @@ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, + "selenium-webdriver": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.5.0.tgz", + "integrity": "sha512-9mSFii+lRwcnT2KUAB1kqvx6+mMiiQHH60Y0VUtr3kxxi3oZ3CV3B8e2nuJ7T4SPb+Q6VA0swswe7rYpez07Bg==", + "requires": { + "jszip": "^3.10.0", + "tmp": "^0.2.1", + "ws": ">=8.7.0" + }, + "dependencies": { + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + } + } + }, "selfsigned": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", @@ -27522,6 +29145,11 @@ "send": "0.18.0" } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -28068,6 +29696,14 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", diff --git a/package.json b/package.json index 963b862..d767d7d 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,10 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "firebase": "^9.14.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.4.3", "react-scripts": "5.0.1", "web-vitals": "^2.1.4" }, diff --git a/public/favicon.ico b/public/favicon.ico index a11777c..47cae7b 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/src/App.css b/src/App.css deleted file mode 100644 index 74b5e05..0000000 --- a/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/src/App.js b/src/App.js index 3784575..c0a70aa 100644 --- a/src/App.js +++ b/src/App.js @@ -1,24 +1,27 @@ -import logo from './logo.svg'; -import './App.css'; +import Navbar from './components/Navbar' +import {BrowserRouter as Router,Routes, Route} from 'react-router-dom' +import Explore from './pages/Explore' +import Profile from './pages/Profile' +import ForgotPassword from './pages/ForgotPassword' +import Offers from './pages/Offers' +import Signin from './pages/Signin' +import Signup from './pages/Signup' function App() { return ( -
-
- logo -

- Edit src/App.js and save to reload. -

- - Learn React - -
-
+ <> + + + }/> + }/> + }/> + }/> + }/> + }/> + + + + ); } diff --git a/src/App.test.js b/src/App.test.js deleted file mode 100644 index 1f03afe..0000000 --- a/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/src/assets/jpg/rentCategoryImage.jpg b/src/assets/jpg/rentCategoryImage.jpg new file mode 100644 index 0000000..3655b63 Binary files /dev/null and b/src/assets/jpg/rentCategoryImage.jpg differ diff --git a/src/assets/jpg/sellCategoryImage.jpg b/src/assets/jpg/sellCategoryImage.jpg new file mode 100644 index 0000000..8982d30 Binary files /dev/null and b/src/assets/jpg/sellCategoryImage.jpg differ diff --git a/src/assets/svg/badgeIcon.svg b/src/assets/svg/badgeIcon.svg new file mode 100644 index 0000000..dec6c4e --- /dev/null +++ b/src/assets/svg/badgeIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/bathtubIcon.svg b/src/assets/svg/bathtubIcon.svg new file mode 100644 index 0000000..9900326 --- /dev/null +++ b/src/assets/svg/bathtubIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/bedIcon.svg b/src/assets/svg/bedIcon.svg new file mode 100644 index 0000000..e41362c --- /dev/null +++ b/src/assets/svg/bedIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/checkIcon.svg b/src/assets/svg/checkIcon.svg new file mode 100644 index 0000000..2e796f1 --- /dev/null +++ b/src/assets/svg/checkIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/deleteIcon.svg b/src/assets/svg/deleteIcon.svg new file mode 100644 index 0000000..90a74fa --- /dev/null +++ b/src/assets/svg/deleteIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/editIcon.svg b/src/assets/svg/editIcon.svg new file mode 100755 index 0000000..70d6d41 --- /dev/null +++ b/src/assets/svg/editIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/exploreIcon.svg b/src/assets/svg/exploreIcon.svg new file mode 100644 index 0000000..d08bbaa --- /dev/null +++ b/src/assets/svg/exploreIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/googleIcon.svg b/src/assets/svg/googleIcon.svg new file mode 100644 index 0000000..96b72b3 --- /dev/null +++ b/src/assets/svg/googleIcon.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/svg/homeIcon.svg b/src/assets/svg/homeIcon.svg new file mode 100644 index 0000000..8584f7e --- /dev/null +++ b/src/assets/svg/homeIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/keyboardArrowRightIcon.svg b/src/assets/svg/keyboardArrowRightIcon.svg new file mode 100644 index 0000000..e336cca --- /dev/null +++ b/src/assets/svg/keyboardArrowRightIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/localOfferIcon.svg b/src/assets/svg/localOfferIcon.svg new file mode 100644 index 0000000..67e58c6 --- /dev/null +++ b/src/assets/svg/localOfferIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/lockIcon.svg b/src/assets/svg/lockIcon.svg new file mode 100644 index 0000000..88c2274 --- /dev/null +++ b/src/assets/svg/lockIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/personIcon.svg b/src/assets/svg/personIcon.svg new file mode 100644 index 0000000..ce0341d --- /dev/null +++ b/src/assets/svg/personIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/personOutlineIcon.svg b/src/assets/svg/personOutlineIcon.svg new file mode 100644 index 0000000..3476043 --- /dev/null +++ b/src/assets/svg/personOutlineIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/shareIcon.svg b/src/assets/svg/shareIcon.svg new file mode 100644 index 0000000..855763d --- /dev/null +++ b/src/assets/svg/shareIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/uploadIcon.svg b/src/assets/svg/uploadIcon.svg new file mode 100644 index 0000000..ee50f7e --- /dev/null +++ b/src/assets/svg/uploadIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/visibilityIcon.svg b/src/assets/svg/visibilityIcon.svg new file mode 100644 index 0000000..267ed2f --- /dev/null +++ b/src/assets/svg/visibilityIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx new file mode 100644 index 0000000..7abbc1f --- /dev/null +++ b/src/components/Navbar.jsx @@ -0,0 +1,72 @@ +import { useNavigate, useLocation } from "react-router-dom"; +import { ReactComponent as OfferIcon } from "../assets/svg/localOfferIcon.svg"; +import { ReactComponent as ExploreIcon } from "../assets/svg/exploreIcon.svg"; +import { ReactComponent as PersonIcon } from "../assets/svg/personOutlineIcon.svg"; + +function Navbar() { + const navigate = useNavigate(); + const location = useLocation(); + + const pathMatchRoute = (route) => { + if (route === location.pathname) { + return true; + } + }; + return ( + + ); +}; +export default Navbar diff --git a/src/firebase.config.js b/src/firebase.config.js new file mode 100644 index 0000000..6224d5d --- /dev/null +++ b/src/firebase.config.js @@ -0,0 +1,15 @@ +import { initializeApp } from "firebase/app"; +import {getFirestore} from 'firebase/firestore' +// Your web app's Firebase configuration +const firebaseConfig = { + apiKey: "AIzaSyDkQS2GoBx-IR_BR4dD_4bPUNGaPyMQugI", + authDomain: "house-marketplace-app-7e89f.firebaseapp.com", + projectId: "house-marketplace-app-7e89f", + storageBucket: "house-marketplace-app-7e89f.appspot.com", + messagingSenderId: "66680163160", + appId: "1:66680163160:web:c1874be8bb6d9e273e732d" +}; + +// Initialize Firebase +const app = initializeApp(firebaseConfig); +export const db = getFirestore() diff --git a/src/index.css b/src/index.css index ec2585e..dee2732 100644 --- a/src/index.css +++ b/src/index.css @@ -1,13 +1,821 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@200;300;400;500;600;700;800;900&display=swap'); +* { + box-sizing: border-box; } -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; +html::-webkit-scrollbar { + display: none; +} + +body { + font-family: 'Montserrat', sans-serif; + background-color: #f2f4f8; + margin: 0; + box-sizing: border-box; +} + +a { + text-decoration: none; + display: block; + color: #000000; +} + +button { + outline: none; + border: none; +} + +.input, +.passwordInput, +.emailInput, +.nameInput, +.textarea { + box-shadow: rgba(0, 0, 0, 0.11); + border: none; + background: #ffffff; + border-radius: 3rem; + height: 3rem; + width: 100%; + outline: none; + font-family: 'Montserrat', sans-serif; + padding: 0 3rem; + font-size: 1rem; +} +@media (min-width: 1100px) { + .input, + .passwordInput, + .emailInput, + .nameInput, + .textarea { + padding: 0 5rem; + } +} + +.textarea { + padding: 1rem 1.5rem; + height: 300px; + border-radius: 1rem; +} + +.primaryButton { + cursor: pointer; + background: #00cc66; + border-radius: 1rem; + padding: 0.85rem 2rem; + color: #ffffff; + font-weight: 600; + font-size: 1.25rem; + width: 80%; + margin: 0 auto; + display: flex; + align-items: center; + justify-content: center; +} + +.removeIcon { + cursor: pointer; + position: absolute; + top: -3%; + right: -2%; +} +.editIcon { + cursor: pointer; + position: absolute; + top: -3.4%; + right: 20px; +} + +.pageContainer, +.offers, +.profile, +.listingDetails, +.category, +.explore { + margin: 1rem; +} +@media (min-width: 1024px) { + .pageContainer, + .offers, + .profile, + .listingDetails, + .category, + .explore { + margin: 3rem; + } +} + +.loadingSpinnerContainer { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.5); + z-index: 5000; + display: flex; + justify-content: center; + align-items: center; +} + +.loadingSpinner { + width: 64px; + height: 64px; + border: 8px solid; + border-color: #00cc66 transparent #00cc66 transparent; + border-radius: 50%; + animation: spin 1.2s linear infinite; +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +.pageHeader { + font-size: 2rem; + font-weight: 800; +} + +.navbar { + position: fixed; + left: 0; + bottom: 0; + right: 0; + height: 85px; + background-color: #ffffff; + z-index: 1000; + display: flex; + justify-content: center; + align-items: center; +} + +.navbarNav { + width: 100%; + margin-top: 0.75rem; + overflow-y: hidden; +} + +.navbarListItems { + margin: 0; + padding: 0; + display: flex; + justify-content: space-evenly; + align-items: center; +} + +.navbarListItem { + cursor: pointer; + display: flex; + flex-direction: column; + align-items: center; +} + +.navbarListItemName, +.navbarListItemNameActive { + margin-top: 0.25rem; + font-size: 14px; + font-weight: 600; + color: #8f8f8f; +} +.navbarListItemNameActive { + color: #2c2c2c; +} + +.nameInput { + margin-bottom: 2rem; + background: url('./assets/svg/badgeIcon.svg') #ffffff 2.5% center no-repeat; +} + +.emailInput { + margin-bottom: 2rem; + background: url('./assets/svg/personIcon.svg') #ffffff 2.5% center no-repeat; +} + +.passwordInputDiv { + position: relative; +} + +.passwordInput { + margin-bottom: 2rem; + background: url('./assets/svg/lockIcon.svg') #ffffff 2.5% center no-repeat; +} + +.showPassword { + cursor: pointer; + position: absolute; + top: -4%; + right: 1%; + padding: 1rem; +} + +.forgotPasswordLink { + cursor: pointer; + color: #00cc66; + font-weight: 600; + text-align: right; +} + +.signInBar, +.signUpBar { + margin-top: 3rem; + display: flex; + justify-content: space-between; + align-items: center; + position: inherit; +} + +.signInButton, +.signUpButton, +.signInText, +.signUpText { + cursor: pointer; +} +@media (min-width: 1024px) { + .signInBar, + .signUpBar { + justify-content: start; + } +} + +.signInText, +.signUpText { + font-size: 1.5rem; + font-weight: 700; +} + +.signInButton, +.signUpButton { + display: flex; + justify-content: center; + align-items: center; + width: 3rem; + height: 3rem; + background-color: #00cc66; + border-radius: 50%; +} +@media (min-width: 1024px) { + .signInButton, + .signUpButton { + margin-left: 3rem; + } +} + +.socialLogin { + margin-top: 4rem; + display: flex; + flex-direction: column; + align-items: center; +} + +.socialIconDiv { + cursor: pointer; + display: flex; + justify-content: center; + align-items: center; + padding: 0.75rem; + margin: 1.5rem; + width: 3rem; + height: 3rem; + background-color: #ffffff; + border-radius: 50%; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); +} + +.socialIconImg { + width: 100%; +} + +.registerLink { + margin-top: 4rem; + color: #00cc66; + font-weight: 600; + text-align: center; + margin-bottom: 3rem; +} + +@media (min-width: 1217px) { + .explore { + margin-bottom: 10rem; + } +} +@media (max-height: 536) { + .explore { + margin-bottom: 10rem; + } +} + +.exploreHeading, +.exploreCategoryHeading { + font-weight: 700; +} + +.exploreCategoryHeading { + margin-top: 3rem; +} + +.swiper-container { + min-height: 225px; + height: 23vw; +} + +.swiper-pagination-bullet-active { + background-color: #ffffff !important; +} + +.swiperSlideDiv { + position: relative; + width: 100%; + height: 100%; +} + +.swiperSlideImg { + width: 100%; + object-fit: cover; +} + +.swiperSlideText { + color: #ffffff; + position: absolute; + top: 70px; + left: 0; + font-weight: 600; + max-width: 90%; + font-size: 1.25rem; + background-color: rgba(0, 0, 0, 0.8); + padding: 0.5rem; +} +@media (min-width: 1024px) { + .swiperSlideText { + font-size: 1.75rem; + } +} + +.swiperSlidePrice { + color: #000000; + position: absolute; + top: 143px; + left: 11px; + font-weight: 600; + max-width: 90%; + background-color: #ffffff; + padding: 0.25rem 0.5rem; + border-radius: 1rem; +} +@media (min-width: 1024px) { + .swiperSlidePrice { + font-size: 1.25rem; + } +} + +.exploreCategories { + display: flex; + justify-content: space-between; +} +.exploreCategories a { + width: 48%; +} + +.exploreCategoryImg { + min-height: 115px; + height: 15vw; + width: 100%; + border-radius: 1.5rem; + object-fit: cover; + margin: 0 auto; +} + +.exploreCategoryName { + font-weight: 500; + text-align: left; +} + +.category { + margin-bottom: 10rem; +} + +.categoryListings { + padding: 0; +} + +.categoryListing { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; + position: relative; +} + +.categoryListingLink { + display: contents; +} + +.categoryListingImg { + width: 30%; + height: 100px; + border-radius: 1.5rem; + object-fit: cover; +} +@media (min-width: 1024px) { + .categoryListingImg { + width: 19%; + height: 217px; + } +} + +.categoryListingDetails { + width: 65%; +} +@media (min-width: 1024px) { + .categoryListingDetails { + width: 79%; + } +} + +.categoryListingLocation { + font-weight: 600; + font-size: 0.7rem; + opacity: 0.8; + margin-bottom: 0; +} + +.categoryListingName { + font-weight: 600; + font-size: 1.25rem; + margin: 0; +} + +.categoryListingPrice { + margin-top: 0.5rem; + font-weight: 600; + font-size: 1.1rem; + color: #00cc66; + margin-bottom: 0; + display: flex; + align-items: center; +} + +.categoryListingInfoDiv { + display: flex; + justify-content: space-between; + max-width: 275px; +} + +.categoryListingInfoText { + font-weight: 500; + font-size: 0.7rem; +} + +.loadMore { + cursor: pointer; + width: 8rem; + margin: 0 auto; + text-align: center; + padding: 0.25rem 0.5rem; + background-color: #000000; + color: #ffffff; + font-weight: 600; + border-radius: 1rem; + opacity: 0.7; + margin-top: 2rem; +} + +.listingDetails { + margin-bottom: 10rem; +} + +.shareIconDiv { + cursor: pointer; + position: fixed; + top: 3%; + right: 5%; + z-index: 2; + background-color: #ffffff; + border-radius: 50%; + width: 3rem; + height: 3rem; + display: flex; + justify-content: center; + align-items: center; +} + +.listingName { + font-weight: 600; + font-size: 1.5rem; + margin-bottom: 0.5rem; +} + +.listingLocation { + margin-top: 0; + font-weight: 600; +} + +.discountPrice { + padding: 0.25rem 0.5rem; + background-color: #000000; + color: #ffffff; + border-radius: 1rem; + font-size: 0.8rem; + font-weight: 600; + display: inline; +} + +.listingType { + padding: 0.25rem 0.5rem; + background-color: #00cc66; + color: #ffffff; + border-radius: 2rem; + display: inline; + font-weight: 600; + font-size: 0.8rem; + margin-right: 1rem; +} + +.listingDetailsList { + padding: 0; + list-style-type: none; +} +.listingDetailsList li { + margin: 0.3rem 0; + font-weight: 500; + opacity: 0.8; +} + +.listingLocationTitle { + margin-top: 2rem; + font-weight: 600; + font-size: 1.25rem; +} + +.leafletContainer { + width: 100%; + height: 200px; + overflow-x: hidden; + margin-bottom: 3rem; +} +@media (min-width: 1024px) { + .leafletContainer { + height: 400px; + } +} + +.linkCopied { + position: fixed; + top: 9%; + right: 5%; + z-index: 2; + background-color: #ffffff; + border-radius: 1rem; + padding: 0.5rem 1rem; + font-weight: 600; +} + +.contactListingName { + margin-top: -1rem; + margin-bottom: 0; + font-weight: 600; +} + +.contactListingLocation { + margin-top: 0.25rem; + font-weight: 600; +} + +.contactLandlord { + margin-top: 2rem; + display: flex; + align-items: center; +} + +.landlordName { + font-weight: 600; + font-size: 1.2rem; +} + +.messageForm { + margin-top: 0.5rem; +} + +.messageDiv { + margin-top: 2rem; + display: flex; + flex-direction: column; + margin-bottom: 4rem; +} + +.messageLabel { + margin-bottom: 0.5rem; +} + +.profile { + margin-bottom: 10rem; +} + +.profileHeader { + display: flex; + justify-content: space-between; + align-items: center; +} + +.logOut { + cursor: pointer; + font-family: 'Montserrat', sans-serif; + font-size: 1rem; + font-weight: 600; + color: #ffffff; + background-color: #00cc66; + padding: 0.25rem 0.75rem; + border-radius: 1rem; +} + +.profileDetailsHeader { + display: flex; + justify-content: space-between; + max-width: 500px; +} + +.personalDetailsText { + font-weight: 600; +} + +.changePersonalDetails { + cursor: pointer; + font-weight: 600; + color: #00cc66; +} + +.profileCard { + background-color: #ffffff; + border-radius: 1rem; + padding: 1rem; + box-shadow: rgba(0, 0, 0, 0.2); + max-width: 500px; +} + +.profileDetails { + display: flex; + flex-direction: column; +} + +.profileName, +.profileEmail, +.profileAddress, +.profileAddressActive, +.profileEmailActive, +.profileNameActive { + all: unset; + margin: 0.3rem 0; + font-weight: 600; + width: 100%; +} +.profileNameActive { + background-color: rgba(44, 44, 44, 0.1); +} + +.profileEmail, +.profileAddress, +.profileAddressActive, +.profileEmailActive { + font-weight: 500; +} +.profileEmailActive { + background-color: rgba(44, 44, 44, 0.1); +} + +.profileAddressActive { + background-color: rgba(44, 44, 44, 0.1); +} + +.createListing { + background-color: #ffffff; + border-radius: 1rem; + padding: 0.25rem 1rem; + box-shadow: rgba(0, 0, 0, 0.2); + margin-top: 2rem; + font-weight: 600; + max-width: 500px; + display: flex; + justify-content: space-between; + align-items: center; +} + +.listingText { + margin-top: 3rem; + font-weight: 600; +} + +.lisitingsList { + padding: 0; +} + +.formLabel { + font-weight: 600; + margin-top: 1rem; + display: block; +} + +.formButtons { + display: flex; +} + +.formButton, +.formInput, +.formInputAddress, +.formInputName, +.formInputSmall, +.formInputFile, +.formButtonActive { + padding: 0.9rem 3rem; + background-color: #ffffff; + font-weight: 600; + border-radius: 1rem; + font-size: 1rem; + margin: 0.5rem 0.5rem 0 0; + display: flex; + justify-content: center; + align-items: center; +} +.formButtonActive { + background-color: #00cc66; + color: #ffffff; +} + +.flex { + display: flex; +} + +.formInput, +.formInputAddress, +.formInputName, +.formInputSmall, +.formInputFile { + border: none; + outline: none; + font-family: 'Montserrat', sans-serif; +} +.formInputSmall, +.formInputFile { + margin-right: 3rem; + padding: 0.9rem 0.7rem; + text-align: center; +} + +.formInputName { + padding: 0.9rem 1rem; + width: 90%; + max-width: 326px; +} + +.formInputAddress { + padding: 0.9rem 1rem; + width: 90%; + max-width: 326px; +} + +.formPriceDiv { + display: flex; + align-items: center; +} + +.formPriceText { + margin-left: -1.5rem; + font-weight: 600; +} + +.imagesInfo { + font-size: 0.9rem; + opacity: 0.75; +} + +.formInputFile { + width: 100%; +} +.formInputFile::-webkit-file-upload-button { + background-color: #00cc66; + border: none; + color: #ffffff; + font-weight: 600; + padding: 0.5rem 0.75rem; + border-radius: 1rem; + margin-right: 1rem; +} + +.createListingButton { + margin-top: 5rem; +} + +.offers { + margin-bottom: 10rem; +} + +.offerBadge { + padding: 0.25rem 0.5rem; + background-color: #000000; + color: #ffffff; + border-radius: 1rem; + margin-left: 1rem; + font-size: 0.8rem; + opacity: 0.75; } diff --git a/src/index.js b/src/index.js index d563c0f..7716fe4 100644 --- a/src/index.js +++ b/src/index.js @@ -2,7 +2,6 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; -import reportWebVitals from './reportWebVitals'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( @@ -11,7 +10,3 @@ root.render( ); -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 9dfc1c0..0000000 --- a/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/pages/Explore.jsx b/src/pages/Explore.jsx new file mode 100644 index 0000000..4f248c0 --- /dev/null +++ b/src/pages/Explore.jsx @@ -0,0 +1,10 @@ + +function Explore (){ + return ( + <> +

My app

+ + ); +} + +export default Explore diff --git a/src/pages/ForgotPassword.jsx b/src/pages/ForgotPassword.jsx new file mode 100644 index 0000000..f5d9b27 --- /dev/null +++ b/src/pages/ForgotPassword.jsx @@ -0,0 +1,9 @@ + +function ForgotPassword (){ + return ( + <> +

My app

+ + ); +} +export default ForgotPassword diff --git a/src/pages/Offers.jsx b/src/pages/Offers.jsx new file mode 100644 index 0000000..ff89acc --- /dev/null +++ b/src/pages/Offers.jsx @@ -0,0 +1,9 @@ + +function Offers (){ + return ( + <> +

My app

+ + ); +} +export default Offers diff --git a/src/pages/Profile.jsx b/src/pages/Profile.jsx new file mode 100644 index 0000000..0216ce9 --- /dev/null +++ b/src/pages/Profile.jsx @@ -0,0 +1,9 @@ + +function Profile (){ + return ( + <> +

My app

+ + ); +} +export default Profile diff --git a/src/pages/Signin.jsx b/src/pages/Signin.jsx new file mode 100644 index 0000000..5f2cb34 --- /dev/null +++ b/src/pages/Signin.jsx @@ -0,0 +1,82 @@ +import { useState } from "react"; +import { Link, useNavigate } from "react-router-dom"; +import { ReactComponent as ArrowRightIcon } from "../assets/svg/keyboardArrowRightIcon.svg"; +import visibilityIcon from "../assets/svg/visibilityIcon.svg"; +import { getAuth, signInWithEmailAndPassword } from "firebase/auth"; + +function Signin() { + const [showPassword, setShowPassword] = useState(false); + const [formData, setFormData] = useState({ email: "", password: "" }); + const { email, password } = formData; + + const navigate = useNavigate(); + const onChange = (e) => { + setFormData((prevState) => ({ + ...prevState, + [e.target.id]: e.target.value, + })); + }; + const onSubmit = async (e) => { + e.preventDefault(); + const auth = getAuth(); + try { + const userCredential = await signInWithEmailAndPassword( + auth, + email, + password + ); + if (userCredential.user) { + navigate("/"); + } + } catch (error) { + console.log(error); + } + }; + return ( + <> +
+
+

Welcome Back!

+
+
+ +
+ + setShowPassword((prevState) => !prevState)} + /> +
+ + Forgot Password + +
+

Sign In

+ +
+
+ + Sign Up Instead + +
+ + ); +} +export default Signin; diff --git a/src/pages/Signup.jsx b/src/pages/Signup.jsx new file mode 100644 index 0000000..9ba5c2f --- /dev/null +++ b/src/pages/Signup.jsx @@ -0,0 +1,108 @@ +import { useState } from "react"; +import { Link, useNavigate } from "react-router-dom"; +import { ReactComponent as ArrowRightIcon } from "../assets/svg/keyboardArrowRightIcon.svg"; +import visibilityIcon from "../assets/svg/visibilityIcon.svg"; +import { + getAuth, + createUserWithEmailAndPassword, + updateProfile, +} from "firebase/auth"; +import { db } from "../firebase.config"; +import { setDoc,doc, serverTimestamp } from "firebase/firestore"; + +function Signup() { + const [showPassword, setShowPassword] = useState(false); + const [formData, setFormData] = useState({ + name: "", + email: "", + password: "", + }); + const { name, email, password } = formData; + + const navigate = useNavigate(); + const onChange = (e) => { + setFormData((prevState) => ({ + ...prevState, + [e.target.id]: e.target.value, + })); + }; + + const onSubmit = async (e) => { + e.preventDefault(); + try { + const auth = getAuth(); + const userCredential = await createUserWithEmailAndPassword( + auth, + email, + password + ); + const user = userCredential.user; + updateProfile(auth.currentUser, { displayName: name }); + + const fromDataCopy = { ...formData }; + delete fromDataCopy.password; + fromDataCopy.timestamp = serverTimestamp(); + + await setDoc(doc(db,'users',user.uid), fromDataCopy) + + navigate("/"); + } catch (error) { + console.log(error); + } + }; + return ( + <> +
+
+

Welcome Back!

+
+
+ + +
+ + setShowPassword((prevState) => !prevState)} + /> +
+ + Forgot Password + +
+

Sign In

+ +
+
+ + Sign In Instead + +
+ + ); +} +export default Signup; diff --git a/src/reportWebVitals.js b/src/reportWebVitals.js deleted file mode 100644 index 5253d3a..0000000 --- a/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/src/setupTests.js b/src/setupTests.js deleted file mode 100644 index 8f2609b..0000000 --- a/src/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom';