From 7896eb5b7c983819fd28178e51bd2bdeb580688d Mon Sep 17 00:00:00 2001
From: UTSAV MANDHANI <85448958+Utsav2929@users.noreply.github.com>
Date: Wed, 6 Sep 2023 21:10:12 +0530
Subject: [PATCH 1/9] form video call added
---
package-lock.json | 925 +++++++++++++++---
package.json | 8 +
src/App.js | 51 +-
src/Context.js | 104 ++
.../AddHealth/AddHealthInfoForm.scss | 22 +-
src/components/AddHealth/AddHealthinfoForm.js | 2 +
src/components/Appointment/BookAppointment.js | 5 +-
.../Appointment/BookAppointment.scss | 17 +-
src/components/CameraApp.jsx | 50 +
.../HealthCareContent/HealthcareContent.js | 25 +
.../HealthCareContent/HealthcareDetails.js | 33 +-
.../HealthCareContent/HealthcareDetails.scss | 12 +-
src/components/Notifications.jsx | 23 +
src/components/Registration/Doctor.js | 322 ------
src/components/Registration/DoctorForm.js | 360 +++++++
src/components/Registration/DoctorForm.scss | 49 +-
src/components/Registration/GenerateOtp.scss | 18 +-
src/components/Registration/Hospital.js | 9 +-
src/components/Registration/Hospital.scss | 84 +-
src/components/Registration/LoginForm.scss | 2 +-
src/components/Registration/Patient.scss | 19 +-
src/components/Registration/Registration.scss | 4 +-
.../Registration/RegistrationForm.js | 2 +-
src/components/Sidebar.jsx | 80 ++
src/components/VideoPlayer.jsx | 53 +
src/index.js | 24 +-
26 files changed, 1747 insertions(+), 556 deletions(-)
create mode 100644 src/Context.js
create mode 100644 src/components/CameraApp.jsx
create mode 100644 src/components/Notifications.jsx
delete mode 100644 src/components/Registration/Doctor.js
create mode 100644 src/components/Registration/DoctorForm.js
create mode 100644 src/components/Sidebar.jsx
create mode 100644 src/components/VideoPlayer.jsx
diff --git a/package-lock.json b/package-lock.json
index 7bf067a..fe70ecb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,20 +8,28 @@
"name": "qrgenerator",
"version": "0.1.0",
"dependencies": {
+ "@material-ui/core": "^4.12.4",
+ "@material-ui/icons": "^4.11.3",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
+ "add": "^2.0.6",
"node-sass": "^9.0.0",
+ "peerjs": "^1.5.0",
"qrcode": "^1.5.3",
"react": "^18.2.0",
"react-calendar": "^4.6.0",
+ "react-copy-to-clipboard": "^5.1.0",
"react-dom": "^18.2.0",
"react-file-base64": "^1.0.3",
"react-icons": "^4.10.1",
"react-qr-reader": "^3.0.0-beta-1",
+ "react-redux": "^8.1.2",
"react-router": "^6.15.0",
"react-router-dom": "^6.15.0",
"react-scripts": "5.0.1",
+ "simple-peer": "^9.11.1",
+ "socket.io-client": "^4.6.1",
"web-vitals": "^2.1.4"
}
},
@@ -2003,6 +2011,78 @@
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
},
+ "node_modules/@cbor-extract/cbor-extract-darwin-arm64": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.1.1.tgz",
+ "integrity": "sha512-blVBy5MXz6m36Vx0DfLd7PChOQKEs8lK2bD1WJn/vVgG4FXZiZmZb2GECHFvVPA5T7OnODd9xZiL3nMCv6QUhA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@cbor-extract/cbor-extract-darwin-x64": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.1.1.tgz",
+ "integrity": "sha512-h6KFOzqk8jXTvkOftyRIWGrd7sKQzQv2jVdTL9nKSf3D2drCvQB/LHUxAOpPXo3pv2clDtKs3xnHalpEh3rDsw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@cbor-extract/cbor-extract-linux-arm": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.1.1.tgz",
+ "integrity": "sha512-ds0uikdcIGUjPyraV4oJqyVE5gl/qYBpa/Wnh6l6xLE2lj/hwnjT2XcZCChdXwW/YFZ1LUHs6waoYN8PmK0nKQ==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@cbor-extract/cbor-extract-linux-arm64": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.1.1.tgz",
+ "integrity": "sha512-SxAaRcYf8S0QHaMc7gvRSiTSr7nUYMqbUdErBEu+HYA4Q6UNydx1VwFE68hGcp1qvxcy9yT5U7gA+a5XikfwSQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@cbor-extract/cbor-extract-linux-x64": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.1.1.tgz",
+ "integrity": "sha512-GVK+8fNIE9lJQHAlhOROYiI0Yd4bAZ4u++C2ZjlkS3YmO6hi+FUxe6Dqm+OKWTcMpL/l71N6CQAmaRcb4zyJuA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@cbor-extract/cbor-extract-win32-x64": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.1.1.tgz",
+ "integrity": "sha512-2Niq1C41dCRIDeD8LddiH+mxGlO7HJ612Ll3D/E73ZWBmycued+8ghTr/Ho3CMOWPUEr08XtyBMVXAjqF+TcKw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
"node_modules/@csstools/normalize.css": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz",
@@ -2273,6 +2353,11 @@
"postcss-selector-parser": "^6.0.10"
}
},
+ "node_modules/@emotion/hash": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
+ },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
@@ -3140,6 +3225,198 @@
"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
"integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A=="
},
+ "node_modules/@material-ui/core": {
+ "version": "4.12.4",
+ "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz",
+ "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==",
+ "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.",
+ "dependencies": {
+ "@babel/runtime": "^7.4.4",
+ "@material-ui/styles": "^4.11.5",
+ "@material-ui/system": "^4.12.2",
+ "@material-ui/types": "5.1.0",
+ "@material-ui/utils": "^4.11.3",
+ "@types/react-transition-group": "^4.2.0",
+ "clsx": "^1.0.4",
+ "hoist-non-react-statics": "^3.3.2",
+ "popper.js": "1.16.1-lts",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.8.0 || ^17.0.0",
+ "react-transition-group": "^4.4.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/material-ui"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.6 || ^17.0.0",
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@material-ui/core/node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@material-ui/icons": {
+ "version": "4.11.3",
+ "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz",
+ "integrity": "sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==",
+ "dependencies": {
+ "@babel/runtime": "^7.4.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ },
+ "peerDependencies": {
+ "@material-ui/core": "^4.0.0",
+ "@types/react": "^16.8.6 || ^17.0.0",
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@material-ui/styles": {
+ "version": "4.11.5",
+ "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz",
+ "integrity": "sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==",
+ "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.",
+ "dependencies": {
+ "@babel/runtime": "^7.4.4",
+ "@emotion/hash": "^0.8.0",
+ "@material-ui/types": "5.1.0",
+ "@material-ui/utils": "^4.11.3",
+ "clsx": "^1.0.4",
+ "csstype": "^2.5.2",
+ "hoist-non-react-statics": "^3.3.2",
+ "jss": "^10.5.1",
+ "jss-plugin-camel-case": "^10.5.1",
+ "jss-plugin-default-unit": "^10.5.1",
+ "jss-plugin-global": "^10.5.1",
+ "jss-plugin-nested": "^10.5.1",
+ "jss-plugin-props-sort": "^10.5.1",
+ "jss-plugin-rule-value-function": "^10.5.1",
+ "jss-plugin-vendor-prefixer": "^10.5.1",
+ "prop-types": "^15.7.2"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/material-ui"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.6 || ^17.0.0",
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@material-ui/styles/node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@material-ui/styles/node_modules/csstype": {
+ "version": "2.6.21",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
+ "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
+ },
+ "node_modules/@material-ui/system": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz",
+ "integrity": "sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==",
+ "dependencies": {
+ "@babel/runtime": "^7.4.4",
+ "@material-ui/utils": "^4.11.3",
+ "csstype": "^2.5.2",
+ "prop-types": "^15.7.2"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/material-ui"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.6 || ^17.0.0",
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@material-ui/system/node_modules/csstype": {
+ "version": "2.6.21",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
+ "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
+ },
+ "node_modules/@material-ui/types": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz",
+ "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==",
+ "peerDependencies": {
+ "@types/react": "*"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@material-ui/utils": {
+ "version": "4.11.3",
+ "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz",
+ "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==",
+ "dependencies": {
+ "@babel/runtime": "^7.4.4",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.8.0 || ^17.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@msgpack/msgpack": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.8.0.tgz",
+ "integrity": "sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
@@ -3393,6 +3670,11 @@
"@sinonjs/commons": "^1.7.0"
}
},
+ "node_modules/@socket.io/component-emitter": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
+ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
+ },
"node_modules/@surma/rollup-plugin-off-main-thread": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz",
@@ -3611,104 +3893,6 @@
"url": "https://github.com/sponsors/gregberge"
}
},
- "node_modules/@testing-library/dom": {
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.1.tgz",
- "integrity": "sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/runtime": "^7.12.5",
- "@types/aria-query": "^5.0.1",
- "aria-query": "5.1.3",
- "chalk": "^4.1.0",
- "dom-accessibility-api": "^0.5.9",
- "lz-string": "^1.5.0",
- "pretty-format": "^27.0.2"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@testing-library/dom/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "peer": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@testing-library/dom/node_modules/aria-query": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
- "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
- "peer": true,
- "dependencies": {
- "deep-equal": "^2.0.5"
- }
- },
- "node_modules/@testing-library/dom/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "peer": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@testing-library/dom/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "peer": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@testing-library/dom/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "peer": true
- },
- "node_modules/@testing-library/dom/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@testing-library/dom/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@testing-library/jest-dom": {
"version": "5.17.0",
"resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz",
@@ -4058,6 +4242,15 @@
"@types/node": "*"
}
},
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+ "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
"node_modules/@types/html-minifier-terser": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
@@ -4425,6 +4618,14 @@
"@types/react": "*"
}
},
+ "node_modules/@types/react-transition-group": {
+ "version": "4.4.6",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz",
+ "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
"node_modules/@types/resolve": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
@@ -4501,6 +4702,11 @@
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz",
"integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g=="
},
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
"node_modules/@types/ws": {
"version": "8.5.5",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz",
@@ -4997,6 +5203,11 @@
"node": ">=0.4.0"
}
},
+ "node_modules/add": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz",
+ "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q=="
+ },
"node_modules/address": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz",
@@ -5753,6 +5964,25 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@@ -5928,6 +6158,29 @@
"node-int64": "^0.4.0"
}
},
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -6146,6 +6399,35 @@
"node": ">=4"
}
},
+ "node_modules/cbor-extract": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.1.1.tgz",
+ "integrity": "sha512-1UX977+L+zOJHsp0mWFG13GLwO6ucKgSmSW6JTl8B9GUvACvHeIVpFqhU92299Z6PfD09aTXDell5p+lp1rUFA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "node-gyp-build-optional-packages": "5.0.3"
+ },
+ "bin": {
+ "download-cbor-prebuilds": "bin/download-prebuilds.js"
+ },
+ "optionalDependencies": {
+ "@cbor-extract/cbor-extract-darwin-arm64": "2.1.1",
+ "@cbor-extract/cbor-extract-darwin-x64": "2.1.1",
+ "@cbor-extract/cbor-extract-linux-arm": "2.1.1",
+ "@cbor-extract/cbor-extract-linux-arm64": "2.1.1",
+ "@cbor-extract/cbor-extract-linux-x64": "2.1.1",
+ "@cbor-extract/cbor-extract-win32-x64": "2.1.1"
+ }
+ },
+ "node_modules/cbor-x": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/cbor-x/-/cbor-x-1.5.4.tgz",
+ "integrity": "sha512-PVKILDn+Rf6MRhhcyzGXi5eizn1i0i3F8Fe6UMMxXBnWkalq9+C5+VTmlIjAYM4iF2IYF2N+zToqAfYOp+3rfw==",
+ "optionalDependencies": {
+ "cbor-extract": "^2.1.1"
+ }
+ },
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -6490,6 +6772,14 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
+ "node_modules/copy-to-clipboard": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
+ "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
+ "dependencies": {
+ "toggle-selection": "^1.0.6"
+ }
+ },
"node_modules/core-js": {
"version": "3.32.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.1.tgz",
@@ -6790,6 +7080,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/css-vendor": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz",
+ "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.8.3",
+ "is-in-browser": "^1.0.2"
+ }
+ },
"node_modules/css-what": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
@@ -7271,6 +7570,15 @@
"utila": "~0.4"
}
},
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
"node_modules/dom-serializer": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
@@ -7437,6 +7745,46 @@
"iconv-lite": "^0.6.2"
}
},
+ "node_modules/engine.io-client": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz",
+ "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.3.1",
+ "engine.io-parser": "~5.2.1",
+ "ws": "~8.11.0",
+ "xmlhttprequest-ssl": "~2.0.0"
+ }
+ },
+ "node_modules/engine.io-client/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/engine.io-parser": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz",
+ "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/enhanced-resolve": {
"version": "5.15.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
@@ -9053,6 +9401,11 @@
"node": ">=6.9.0"
}
},
+ "node_modules/get-browser-rtc": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz",
+ "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ=="
+ },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -9428,6 +9781,19 @@
"he": "bin/he"
}
},
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/hoist-non-react-statics/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
"node_modules/hoopy": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -9704,6 +10070,11 @@
"ms": "^2.0.0"
}
},
+ "node_modules/hyphenate-style-name": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
+ "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
+ },
"node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
@@ -9742,6 +10113,25 @@
"node": ">=4"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -9759,13 +10149,6 @@
"url": "https://opencollective.com/immer"
}
},
- "node_modules/immutable": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz",
- "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==",
- "optional": true,
- "peer": true
- },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -10067,6 +10450,11 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-in-browser": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
+ "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g=="
+ },
"node_modules/is-lambda": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
@@ -12535,6 +12923,88 @@
"node": ">=0.10.0"
}
},
+ "node_modules/jss": {
+ "version": "10.10.0",
+ "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz",
+ "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "csstype": "^3.0.2",
+ "is-in-browser": "^1.1.3",
+ "tiny-warning": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/jss"
+ }
+ },
+ "node_modules/jss-plugin-camel-case": {
+ "version": "10.10.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz",
+ "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "hyphenate-style-name": "^1.0.3",
+ "jss": "10.10.0"
+ }
+ },
+ "node_modules/jss-plugin-default-unit": {
+ "version": "10.10.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz",
+ "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.10.0"
+ }
+ },
+ "node_modules/jss-plugin-global": {
+ "version": "10.10.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz",
+ "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.10.0"
+ }
+ },
+ "node_modules/jss-plugin-nested": {
+ "version": "10.10.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz",
+ "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.10.0",
+ "tiny-warning": "^1.0.2"
+ }
+ },
+ "node_modules/jss-plugin-props-sort": {
+ "version": "10.10.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz",
+ "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.10.0"
+ }
+ },
+ "node_modules/jss-plugin-rule-value-function": {
+ "version": "10.10.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz",
+ "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "jss": "10.10.0",
+ "tiny-warning": "^1.0.2"
+ }
+ },
+ "node_modules/jss-plugin-vendor-prefixer": {
+ "version": "10.10.0",
+ "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz",
+ "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "css-vendor": "^2.0.8",
+ "jss": "10.10.0"
+ }
+ },
"node_modules/jsx-ast-utils": {
"version": "3.3.5",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
@@ -13321,6 +13791,17 @@
"node": ">= 10.12.0"
}
},
+ "node_modules/node-gyp-build-optional-packages": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz",
+ "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==",
+ "optional": true,
+ "bin": {
+ "node-gyp-build-optional-packages": "bin.js",
+ "node-gyp-build-optional-packages-optional": "optional.js",
+ "node-gyp-build-optional-packages-test": "build-test.js"
+ }
+ },
"node_modules/node-gyp/node_modules/@npmcli/fs": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
@@ -14069,6 +14550,37 @@
"node": ">=8"
}
},
+ "node_modules/peerjs": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/peerjs/-/peerjs-1.5.0.tgz",
+ "integrity": "sha512-NLZ73jRNE4aLq2pmVTiSkWmwf6cvt9cH72qJHnzaLH+I2CtoWVvY42U9/O0/tYE6UYwRYJ1ktKRs2DdZ1Jrgcg==",
+ "dependencies": {
+ "@msgpack/msgpack": "^2.8.0",
+ "cbor-x": "^1.5.3",
+ "eventemitter3": "^4.0.7",
+ "peerjs-js-binarypack": "^2.0.0",
+ "webrtc-adapter": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/peer"
+ }
+ },
+ "node_modules/peerjs-js-binarypack": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/peerjs-js-binarypack/-/peerjs-js-binarypack-2.0.0.tgz",
+ "integrity": "sha512-wu+L0Qeg4IH2DXm3B6xKP5ODeCIovwEEO/Fu3MVqApPQeVLzSdZpFzQzPobh+sdhUWMQGEO7YxHeiwpPngLjqQ==",
+ "engines": {
+ "node": ">= 14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/peer"
+ }
+ },
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -14240,6 +14752,11 @@
"node": ">=10.13.0"
}
},
+ "node_modules/popper.js": {
+ "version": "1.16.1-lts",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz",
+ "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA=="
+ },
"node_modules/postcss": {
"version": "8.4.28",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz",
@@ -15902,6 +16419,18 @@
}
}
},
+ "node_modules/react-copy-to-clipboard": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz",
+ "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==",
+ "dependencies": {
+ "copy-to-clipboard": "^3.3.1",
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "react": "^15.3.0 || 16 || 17 || 18"
+ }
+ },
"node_modules/react-dev-utils": {
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz",
@@ -16089,6 +16618,49 @@
"react-dom": "^16.8.0 || ^17.0.0"
}
},
+ "node_modules/react-redux": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.2.tgz",
+ "integrity": "sha512-xJKYI189VwfsFc4CJvHqHlDrzyFTY/3vZACbE+rr/zQ34Xx1wQfB4OTOSeOSNrF6BDVe8OOdxIrAnMGXA3ggfw==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.1",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "@types/use-sync-external-store": "^0.0.3",
+ "hoist-non-react-statics": "^3.3.2",
+ "react-is": "^18.0.0",
+ "use-sync-external-store": "^1.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8 || ^17.0 || ^18.0",
+ "@types/react-dom": "^16.8 || ^17.0 || ^18.0",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0",
+ "react-native": ">=0.59",
+ "redux": "^4 || ^5.0.0-beta.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ },
+ "redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-redux/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
+ },
"node_modules/react-refresh": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz",
@@ -16199,6 +16771,21 @@
}
}
},
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -16802,24 +17389,6 @@
"resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz",
"integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA=="
},
- "node_modules/sass": {
- "version": "1.66.1",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz",
- "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "chokidar": ">=3.0.0 <4.0.0",
- "immutable": "^4.0.0",
- "source-map-js": ">=0.6.2 <2.0.0"
- },
- "bin": {
- "sass": "sass.js"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
"node_modules/sass-graph": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz",
@@ -16962,6 +17531,11 @@
"source-map": "^0.7.3"
}
},
+ "node_modules/sdp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz",
+ "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw=="
+ },
"node_modules/select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@@ -17201,6 +17775,39 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
},
+ "node_modules/simple-peer": {
+ "version": "9.11.1",
+ "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz",
+ "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "debug": "^4.3.2",
+ "err-code": "^3.0.1",
+ "get-browser-rtc": "^1.1.0",
+ "queue-microtask": "^1.2.3",
+ "randombytes": "^2.1.0",
+ "readable-stream": "^3.6.0"
+ }
+ },
+ "node_modules/simple-peer/node_modules/err-code": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz",
+ "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA=="
+ },
"node_modules/sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@@ -17223,6 +17830,32 @@
"npm": ">= 3.0.0"
}
},
+ "node_modules/socket.io-client": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz",
+ "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.3.2",
+ "engine.io-client": "~6.5.2",
+ "socket.io-parser": "~4.2.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/socket.io-parser": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+ "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.3.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/sockjs": {
"version": "0.3.24",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
@@ -18144,6 +18777,11 @@
"node": ">=8.0"
}
},
+ "node_modules/toggle-selection": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
+ "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ=="
+ },
"node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -18381,19 +19019,6 @@
"is-typedarray": "^1.0.0"
}
},
- "node_modules/typescript": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
"node_modules/ua-parser-js": {
"version": "0.7.35",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz",
@@ -18571,6 +19196,14 @@
"requires-port": "^1.0.0"
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -19009,6 +19642,18 @@
"node": ">=4.0"
}
},
+ "node_modules/webrtc-adapter": {
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-8.2.3.tgz",
+ "integrity": "sha512-gnmRz++suzmvxtp3ehQts6s2JtAGPuDPjA1F3a9ckNpG1kYdYuHWYpazoAnL9FS5/B21tKlhkorbdCXat0+4xQ==",
+ "dependencies": {
+ "sdp": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=6.0.0",
+ "npm": ">=3.10.0"
+ }
+ },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -19558,6 +20203,14 @@
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
},
+ "node_modules/xmlhttprequest-ssl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
+ "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
diff --git a/package.json b/package.json
index 29de9b6..a613e02 100644
--- a/package.json
+++ b/package.json
@@ -3,20 +3,28 @@
"version": "0.1.0",
"private": true,
"dependencies": {
+ "@material-ui/core": "^4.12.4",
+ "@material-ui/icons": "^4.11.3",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
+ "add": "^2.0.6",
"node-sass": "^9.0.0",
+ "peerjs": "^1.5.0",
"qrcode": "^1.5.3",
"react": "^18.2.0",
"react-calendar": "^4.6.0",
+ "react-copy-to-clipboard": "^5.1.0",
"react-dom": "^18.2.0",
"react-file-base64": "^1.0.3",
"react-icons": "^4.10.1",
"react-qr-reader": "^3.0.0-beta-1",
+ "react-redux": "^8.1.2",
"react-router": "^6.15.0",
"react-router-dom": "^6.15.0",
"react-scripts": "5.0.1",
+ "simple-peer": "^9.11.1",
+ "socket.io-client": "^4.6.1",
"web-vitals": "^2.1.4"
},
"scripts": {
diff --git a/src/App.js b/src/App.js
index 453af2c..c114c0f 100644
--- a/src/App.js
+++ b/src/App.js
@@ -9,24 +9,65 @@ import Hospital from "./components/Registration/Hospital";
import LoginForm from "./components/Registration/LoginForm";
import Patient from "./components/Registration/Patient";
import RegistrationForm from "./components/Registration/RegistrationForm";
+import DoctorForm from './components/Registration/DoctorForm';
+import { Typography, AppBar } from '@material-ui/core';
+import { makeStyles } from '@material-ui/core/styles';
+import VideoPlayer from './components/VideoPlayer';
+import Sidebar from './components/Sidebar';
+import Notifications from './components/Notifications';
+const useStyles = makeStyles((theme) => ({
+ appBar: {
+ borderRadius: 15,
+ margin: '30px 100px',
+ display: 'flex',
+ flexDirection: 'row',
+ justifyContent: 'center',
+ alignItems: 'center',
+ width: '600px',
+ border: '2px solid black',
+ [theme.breakpoints.down('xs')]: {
+ width: '90%',
+ },
+ },
+ image: {
+ marginLeft: '15px',
+ },
+ wrapper: {
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ width: '100%',
+ },
+}));
const App = () => {
+
return (
{/*
*/}
+ {/*
*/}
+ {/*
*/}
{/*
*/}
-
- {/*
*/}
+ {/*
*/}
+ {/*
*/}
+
{/*
*/}
- {/*
*/}
- {/*
*/}
+
+
{/*
*/}
{/*
*/}
-
+
+ Video Chat
+
+
+
+
+
+
);
}
diff --git a/src/Context.js b/src/Context.js
new file mode 100644
index 0000000..9431040
--- /dev/null
+++ b/src/Context.js
@@ -0,0 +1,104 @@
+import React, { createContext, useState, useRef, useEffect } from 'react';
+import { io } from 'socket.io-client';
+import Peer from 'simple-peer';
+
+const SocketContext = createContext();
+
+const socket = io('http://localhost:5000');
+// const socket = io('https://warm-wildwood-81/069.herokuapp.com');
+
+const ContextProvider = ({ children }) => {
+ const [callAccepted, setCallAccepted] = useState(false);
+ const [callEnded, setCallEnded] = useState(false);
+ const [stream, setStream] = useState();
+ const [name, setName] = useState('');
+ const [call, setCall] = useState({});
+ const [me, setMe] = useState('');
+
+ const myVideo = useRef();
+ const userVideo = useRef();
+ const connectionRef = useRef();
+
+ useEffect(() => {
+ navigator.mediaDevices.getUserMedia({ video: true, audio: true })
+ .then((currentStream) => {
+ setStream(currentStream);
+
+ myVideo.current.srcObject = currentStream;
+ });
+
+ socket.on('me', (id) => setMe(id));
+
+ socket.on('callUser', ({ from, name: callerName, signal }) => {
+ setCall({ isReceivingCall: true, from, name: callerName, signal });
+ });
+ }, []);
+
+ const answerCall = () => {
+ setCallAccepted(true);
+
+ const peer = new Peer({ initiator: false, trickle: false, stream });
+
+ peer.on('signal', (data) => {
+ socket.emit('answerCall', { signal: data, to: call.from });
+ });
+
+ peer.on('stream', (currentStream) => {
+ userVideo.current.srcObject = currentStream;
+ });
+
+ peer.signal(call.signal);
+
+ connectionRef.current = peer;
+ };
+
+ const callUser = (id) => {
+ const peer = new Peer({ initiator: true, trickle: false, stream });
+
+ peer.on('signal', (data) => {
+ socket.emit('callUser', { userToCall: id, signalData: data, from: me, name });
+ });
+
+ peer.on('stream', (currentStream) => {
+ userVideo.current.srcObject = currentStream;
+ });
+
+ socket.on('callAccepted', (signal) => {
+ setCallAccepted(true);
+
+ peer.signal(signal);
+ });
+
+ connectionRef.current = peer;
+ };
+
+ const leaveCall = () => {
+ setCallEnded(true);
+
+ connectionRef.current.destroy();
+
+ window.location.reload();
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+export { ContextProvider, SocketContext };
diff --git a/src/components/AddHealth/AddHealthInfoForm.scss b/src/components/AddHealth/AddHealthInfoForm.scss
index 7cd5db1..1e8aac1 100644
--- a/src/components/AddHealth/AddHealthInfoForm.scss
+++ b/src/components/AddHealth/AddHealthInfoForm.scss
@@ -1,6 +1,22 @@
+.addhealth-main-container{
+ background-image: url('../../assets/bg-form.jpg');
+ height: 100vh;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+ display: flex;
+align-items: center;
+ justify-content: center;
+
+
.add-health-info-form {
- max-width: 400px;
- margin: 0 auto;
+ min-width: 600px;
+ margin: 0 auto;
+ padding: 20px;
+ color: #269ea2;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
label {
display: block;
@@ -61,4 +77,4 @@
cursor: pointer;
}
}
-
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/src/components/AddHealth/AddHealthinfoForm.js b/src/components/AddHealth/AddHealthinfoForm.js
index 7387923..29dbe5f 100644
--- a/src/components/AddHealth/AddHealthinfoForm.js
+++ b/src/components/AddHealth/AddHealthinfoForm.js
@@ -33,6 +33,7 @@ const AddHealthinfoForm = () => {
};
return (
+
+
);
};
diff --git a/src/components/Appointment/BookAppointment.js b/src/components/Appointment/BookAppointment.js
index c4c76ff..8896003 100644
--- a/src/components/Appointment/BookAppointment.js
+++ b/src/components/Appointment/BookAppointment.js
@@ -52,12 +52,15 @@ const BookAppointment = () => {
{selectedDate && (
+
-
Available Seats: {availableSeats[selectedDate.getDay()]}
+
+
+
Available Seats: {availableSeats[selectedDate.getDay()]}
)}
+
+
+
+ Make a call
+ setIdToCall(e.target.value)} fullWidth />
+ {callAccepted && !callEnded ? (
+ } fullWidth onClick={leaveCall} className={classes.margin}>
+ Hang Up
+
+ ) : (
+ } fullWidth onClick={() => callUser(idToCall)} className={classes.margin}>
+ Call
+
+ )}
+
+
+
+ {children}
+
+
+ );
+};
+
+export default Sidebar;
diff --git a/src/components/VideoPlayer.jsx b/src/components/VideoPlayer.jsx
new file mode 100644
index 0000000..b585bce
--- /dev/null
+++ b/src/components/VideoPlayer.jsx
@@ -0,0 +1,53 @@
+import React, { useContext } from 'react';
+import { Grid, Paper, Typography, makeStyles } from '@material-ui/core';
+import { SocketContext } from '../Context';
+import CameraApp from './CameraApp';
+
+const useStyles = makeStyles((theme) => ({
+ video: {
+ width: '550px',
+ [theme.breakpoints.down('xs')]: {
+ width: '300px',
+ },
+ },
+ gridContainer: {
+ justifyContent: 'center',
+ [theme.breakpoints.down('xs')]: {
+ flexDirection: 'column',
+ },
+ },
+ paper: {
+ padding: '10px',
+ border: '2px solid black',
+ margin: '10px',
+ },
+}));
+
+const VideoPlayer = () => {
+ const { name, callAccepted, userVideo, callEnded, stream, call } = useContext(SocketContext);
+ const classes = useStyles();
+ console.log(stream);
+
+ return (
+
+ {stream && (
+
+
+ {name || 'Your Name'}
+
+
+
+ )}
+ {callAccepted && !callEnded && (
+
+
+ {call.name || 'Caller Name'}
+
+
+
+ )}
+
+ );
+};
+
+export default VideoPlayer;
diff --git a/src/index.js b/src/index.js
index d563c0f..a93506e 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,17 +1,19 @@
import React from 'react';
-import ReactDOM from 'react-dom/client';
-import './index.css';
+import ReactDOM from 'react-dom';
+
import App from './App';
-import reportWebVitals from './reportWebVitals';
+import { ContextProvider } from './Context';
+
+import './index.css';
+
+const rootElement = document.createElement('div');
+rootElement.id = 'root';
+document.body.appendChild(rootElement);
+
+const root = ReactDOM.createRoot(rootElement);
-const root = ReactDOM.createRoot(document.getElementById('root'));
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();
From 6b17ff4c00cbc5f88b0c4813916aeab13a8b2dd9 Mon Sep 17 00:00:00 2001
From: UTSAV MANDHANI <85448958+Utsav2929@users.noreply.github.com>
Date: Fri, 8 Sep 2023 11:29:29 +0530
Subject: [PATCH 2/9] video conference
---
src/App.js | 11 +--
src/Context.js | 104 --------------------------
src/components/Notifications.jsx | 6 +-
src/components/Sidebar.jsx | 14 ++--
src/components/VideoPlayer.jsx | 123 ++++++++++++++++++++++++++-----
src/index.js | 20 ++---
6 files changed, 124 insertions(+), 154 deletions(-)
delete mode 100644 src/Context.js
diff --git a/src/App.js b/src/App.js
index c114c0f..4473715 100644
--- a/src/App.js
+++ b/src/App.js
@@ -59,14 +59,9 @@ const App = () => {
{/* */}
{/* */}
-
-
- Video Chat
-
-
-
-
-
+
+ {/* */}
+
);
diff --git a/src/Context.js b/src/Context.js
deleted file mode 100644
index 9431040..0000000
--- a/src/Context.js
+++ /dev/null
@@ -1,104 +0,0 @@
-import React, { createContext, useState, useRef, useEffect } from 'react';
-import { io } from 'socket.io-client';
-import Peer from 'simple-peer';
-
-const SocketContext = createContext();
-
-const socket = io('http://localhost:5000');
-// const socket = io('https://warm-wildwood-81/069.herokuapp.com');
-
-const ContextProvider = ({ children }) => {
- const [callAccepted, setCallAccepted] = useState(false);
- const [callEnded, setCallEnded] = useState(false);
- const [stream, setStream] = useState();
- const [name, setName] = useState('');
- const [call, setCall] = useState({});
- const [me, setMe] = useState('');
-
- const myVideo = useRef();
- const userVideo = useRef();
- const connectionRef = useRef();
-
- useEffect(() => {
- navigator.mediaDevices.getUserMedia({ video: true, audio: true })
- .then((currentStream) => {
- setStream(currentStream);
-
- myVideo.current.srcObject = currentStream;
- });
-
- socket.on('me', (id) => setMe(id));
-
- socket.on('callUser', ({ from, name: callerName, signal }) => {
- setCall({ isReceivingCall: true, from, name: callerName, signal });
- });
- }, []);
-
- const answerCall = () => {
- setCallAccepted(true);
-
- const peer = new Peer({ initiator: false, trickle: false, stream });
-
- peer.on('signal', (data) => {
- socket.emit('answerCall', { signal: data, to: call.from });
- });
-
- peer.on('stream', (currentStream) => {
- userVideo.current.srcObject = currentStream;
- });
-
- peer.signal(call.signal);
-
- connectionRef.current = peer;
- };
-
- const callUser = (id) => {
- const peer = new Peer({ initiator: true, trickle: false, stream });
-
- peer.on('signal', (data) => {
- socket.emit('callUser', { userToCall: id, signalData: data, from: me, name });
- });
-
- peer.on('stream', (currentStream) => {
- userVideo.current.srcObject = currentStream;
- });
-
- socket.on('callAccepted', (signal) => {
- setCallAccepted(true);
-
- peer.signal(signal);
- });
-
- connectionRef.current = peer;
- };
-
- const leaveCall = () => {
- setCallEnded(true);
-
- connectionRef.current.destroy();
-
- window.location.reload();
- };
-
- return (
-
- {children}
-
- );
-};
-
-export { ContextProvider, SocketContext };
diff --git a/src/components/Notifications.jsx b/src/components/Notifications.jsx
index c5659c1..1d2cc77 100644
--- a/src/components/Notifications.jsx
+++ b/src/components/Notifications.jsx
@@ -1,10 +1,8 @@
-import React, { useContext } from 'react';
+import React from 'react';
import { Button } from '@material-ui/core';
-import { SocketContext } from '../Context';
-const Notifications = () => {
- const { answerCall, call, callAccepted } = useContext(SocketContext);
+const Notifications = ({ call, callAccepted ,answerCall}) => {
return (
<>
diff --git a/src/components/Sidebar.jsx b/src/components/Sidebar.jsx
index 01cd01a..ce47e31 100644
--- a/src/components/Sidebar.jsx
+++ b/src/components/Sidebar.jsx
@@ -1,10 +1,9 @@
-import React, { useState, useContext } from 'react';
+import React, { useState} from 'react';
import { Button, TextField, Grid, Typography, Container, Paper } from '@material-ui/core';
import { CopyToClipboard } from 'react-copy-to-clipboard';
import { Assignment, Phone, PhoneDisabled } from '@material-ui/icons';
import { makeStyles } from '@material-ui/core/styles';
-import { SocketContext } from '../Context';
const useStyles = makeStyles((theme) => ({
root: {
@@ -37,8 +36,13 @@ const useStyles = makeStyles((theme) => ({
},
}));
-const Sidebar = ({ children }) => {
- const { me, callAccepted, name, setName, callEnded, leaveCall, callUser } = useContext(SocketContext);
+const Sidebar = ({ name ,
+ setName,
+ me,
+ callAccepted,
+ leaveCall,
+ callUser,callEnded}) => {
+ // const { me, callAccepted, name, setName, callEnded, leaveCall, callUser } = useContext(SocketContext);
const [idToCall, setIdToCall] = useState('');
const classes = useStyles();
@@ -71,7 +75,7 @@ const Sidebar = ({ children }) => {
- {children}
+
);
diff --git a/src/components/VideoPlayer.jsx b/src/components/VideoPlayer.jsx
index b585bce..88776c2 100644
--- a/src/components/VideoPlayer.jsx
+++ b/src/components/VideoPlayer.jsx
@@ -1,8 +1,12 @@
-import React, { useContext } from 'react';
+import React, { useState, useRef, useEffect } from 'react';
import { Grid, Paper, Typography, makeStyles } from '@material-ui/core';
-import { SocketContext } from '../Context';
+import { io } from 'socket.io-client';
+import Peer from 'simple-peer';
import CameraApp from './CameraApp';
+import Sidebar from './Sidebar';
+import Notifications from './Notifications';
+const socket = io('http://localhost:5000');
const useStyles = makeStyles((theme) => ({
video: {
width: '550px',
@@ -24,28 +28,107 @@ const useStyles = makeStyles((theme) => ({
}));
const VideoPlayer = () => {
- const { name, callAccepted, userVideo, callEnded, stream, call } = useContext(SocketContext);
+ const [callAccepted, setCallAccepted] = useState(false);
+ const [callEnded, setCallEnded] = useState(false);
+ const [stream, setStream] = useState();
+ const [name, setName] = useState('');
+ const [call, setCall] = useState({});
+ const [me, setMe] = useState('');
+
+ const myVideo = useRef();
+ const userVideo = useRef();
+ const connectionRef = useRef();
+
+ // useEffect(() => {
+ // navigator.mediaDevices.getUserMedia({ video: true, audio: true })
+ // .then((currentStream) => {
+ // setStream(currentStream);
+
+ // myVideo.current.srcObject = currentStream;
+ // });
+
+ // socket.on('me', (id) => setMe(id));
+
+ // socket.on('callUser', ({ from, name: callerName, signal }) => {
+ // setCall({ isReceivingCall: true, from, name: callerName, signal });
+ // });
+ // }, []);
+
+ const answerCall = () => {
+ setCallAccepted(true);
+
+ const peer = new Peer({ initiator: false, trickle: false, stream });
+
+ peer.on('signal', (data) => {
+ socket.emit('answerCall', { signal: data, to: call.from });
+ });
+
+ peer.on('stream', (currentStream) => {
+ userVideo.current.srcObject = currentStream;
+ });
+
+ peer.signal(call.signal);
+
+ connectionRef.current = peer;
+ };
+
+ const callUser = (id) => {
+ const peer = new Peer({ initiator: true, trickle: false, stream });
+
+ peer.on('signal', (data) => {
+ socket.emit('callUser', { userToCall: id, signalData: data, from: me, name });
+ });
+
+ peer.on('stream', (currentStream) => {
+ userVideo.current.srcObject = currentStream;
+ });
+
+ socket.on('callAccepted', (signal) => {
+ setCallAccepted(true);
+
+ peer.signal(signal);
+ });
+
+ connectionRef.current = peer;
+ };
+
+ const leaveCall = () => {
+ setCallEnded(true);
+
+ connectionRef.current.destroy();
+
+ window.location.reload();
+ };
+
const classes = useStyles();
- console.log(stream);
return (
- {stream && (
-
-
- {name || 'Your Name'}
-
-
-
- )}
- {callAccepted && !callEnded && (
-
-
- {call.name || 'Caller Name'}
-
-
-
- )}
+
+
+ {name || 'Your Name'}
+ {/* */}
+
+
+
+
+
+ {call.name || 'Caller Name'}
+
+
+
+
+
+
+
);
};
diff --git a/src/index.js b/src/index.js
index a93506e..f3dac9e 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,19 +1,13 @@
import React from 'react';
-import ReactDOM from 'react-dom';
-
-import App from './App';
-import { ContextProvider } from './Context';
-
+import ReactDOM from 'react-dom/client';
import './index.css';
-const rootElement = document.createElement('div');
-rootElement.id = 'root';
-document.body.appendChild(rootElement);
-
-const root = ReactDOM.createRoot(rootElement);
+import App from './App';
+const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
-
-
- ,
+
+
+
);
+
From a5017f7df7236f0c18b4911d50de4a8de5dd05e0 Mon Sep 17 00:00:00 2001
From: UTSAV MANDHANI <85448958+Utsav2929@users.noreply.github.com>
Date: Fri, 8 Sep 2023 22:32:44 +0530
Subject: [PATCH 3/9] health
---
package-lock.json | 427 +++++++-----------
package.json | 11 +-
src/App.js | 97 ++--
src/Pages/Appointment.js | 8 +
src/Pages/Home.js | 26 ++
src/Pages/Legal.js | 8 +
src/Pages/NotFound.js | 17 +
src/Scripts/reviews.js | 52 +++
src/Styles/About.css | 94 ++++
src/Styles/AppointmentForm.css | 89 ++++
src/Styles/BookAppointment.css | 100 ++++
src/Styles/Doctors.css | 95 ++++
src/Styles/Footer.css | 171 +++++++
src/Styles/Hero.css | 150 ++++++
src/Styles/Info.css | 94 ++++
src/Styles/LegalDocs.css | 69 +++
src/Styles/Navbar.css | 126 ++++++
src/Styles/Reviews.css | 126 ++++++
src/actions/auth.js | 33 ++
src/actions/health.js | 13 +
src/actions/index.js | 0
src/actions/mail.js | 14 +
src/api/index.js | 33 ++
src/assets/background_home.webp | Bin 0 -> 13900 bytes
src/assets/background_home2.jpg | Bin 0 -> 47487 bytes
src/assets/background_home3.jpg | Bin 0 -> 46089 bytes
src/assets/background_home4.jpeg | Bin 0 -> 114107 bytes
src/assets/{bg-form.jpg => bg_form.jpg} | Bin
src/assets/doctor_book_appointment.png | Bin 0 -> 180012 bytes
src/assets/doctor_group.png | Bin 0 -> 257399 bytes
src/assets/doctor_picture.png | Bin 0 -> 632505 bytes
src/assets/profile_1.png | Bin 0 -> 632505 bytes
src/assets/profile_2.png | Bin 0 -> 857453 bytes
src/assets/profile_3.png | Bin 0 -> 208123 bytes
src/assets/profile_4.png | Bin 0 -> 128354 bytes
src/components/About.js | 45 ++
.../AddHealth/AddHealthInfoForm.scss | 2 +-
src/components/AddHealth/AddHealthinfoForm.js | 16 +-
src/components/Appointment/BookAppointment.js | 31 +-
src/components/AppointmentForm.js | 170 +++++++
src/components/BookAppointment.js | 60 +++
src/components/DoctorCard.js | 23 +
src/components/Doctors.js | 59 +++
src/components/Facilities/Card.js | 15 +
src/components/Facilities/Card.module.scss | 31 ++
src/components/Facilities/Facilities.js | 22 +
.../Facilities/Facilities.module.scss | 12 +
src/components/Footer.js | 148 ++++++
src/components/Hero.js | 88 ++++
src/components/Home/Home.js | 20 +
src/components/Home/Home.module.scss | 35 ++
src/components/Info.js | 56 +++
src/components/InformationCard.js | 16 +
src/components/LegalDocs.js | 71 +++
src/components/Navbar.js | 128 ++++++
src/components/Registration/DoctorForm.js | 24 +-
src/components/Registration/DoctorForm.scss | 2 +-
src/components/Registration/GenerateOtp.js | 14 +-
src/components/Registration/Hospital.js | 33 +-
src/components/Registration/Hospital.scss | 2 +-
src/components/Registration/LoginForm.js | 13 +-
src/components/Registration/LoginForm.scss | 2 +-
src/components/Registration/Patient.js | 11 +-
src/components/Registration/Patient.scss | 2 +-
src/components/Registration/Registration.scss | 2 +-
.../Registration/RegistrationForm.js | 47 +-
src/components/Reviews.js | 76 ++++
src/components/SolutionStep.js | 19 +
src/components/SubscribeNewsletter.js | 58 +++
.../registrationform/RegistrationForm.js | 9 +-
.../RegistrationForm.module.scss | 20 +-
src/index.css | 4 +-
72 files changed, 2838 insertions(+), 401 deletions(-)
create mode 100644 src/Pages/Appointment.js
create mode 100644 src/Pages/Home.js
create mode 100644 src/Pages/Legal.js
create mode 100644 src/Pages/NotFound.js
create mode 100644 src/Scripts/reviews.js
create mode 100644 src/Styles/About.css
create mode 100644 src/Styles/AppointmentForm.css
create mode 100644 src/Styles/BookAppointment.css
create mode 100644 src/Styles/Doctors.css
create mode 100644 src/Styles/Footer.css
create mode 100644 src/Styles/Hero.css
create mode 100644 src/Styles/Info.css
create mode 100644 src/Styles/LegalDocs.css
create mode 100644 src/Styles/Navbar.css
create mode 100644 src/Styles/Reviews.css
create mode 100644 src/actions/auth.js
create mode 100644 src/actions/health.js
delete mode 100644 src/actions/index.js
create mode 100644 src/actions/mail.js
create mode 100644 src/assets/background_home.webp
create mode 100644 src/assets/background_home2.jpg
create mode 100644 src/assets/background_home3.jpg
create mode 100644 src/assets/background_home4.jpeg
rename src/assets/{bg-form.jpg => bg_form.jpg} (100%)
create mode 100644 src/assets/doctor_book_appointment.png
create mode 100644 src/assets/doctor_group.png
create mode 100644 src/assets/doctor_picture.png
create mode 100644 src/assets/profile_1.png
create mode 100644 src/assets/profile_2.png
create mode 100644 src/assets/profile_3.png
create mode 100644 src/assets/profile_4.png
create mode 100644 src/components/About.js
create mode 100644 src/components/AppointmentForm.js
create mode 100644 src/components/BookAppointment.js
create mode 100644 src/components/DoctorCard.js
create mode 100644 src/components/Doctors.js
create mode 100644 src/components/Facilities/Card.js
create mode 100644 src/components/Facilities/Card.module.scss
create mode 100644 src/components/Facilities/Facilities.js
create mode 100644 src/components/Facilities/Facilities.module.scss
create mode 100644 src/components/Footer.js
create mode 100644 src/components/Hero.js
create mode 100644 src/components/Home/Home.js
create mode 100644 src/components/Home/Home.module.scss
create mode 100644 src/components/Info.js
create mode 100644 src/components/InformationCard.js
create mode 100644 src/components/LegalDocs.js
create mode 100644 src/components/Navbar.js
create mode 100644 src/components/Reviews.js
create mode 100644 src/components/SolutionStep.js
create mode 100644 src/components/SubscribeNewsletter.js
diff --git a/package-lock.json b/package-lock.json
index fe70ecb..d69699e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,12 +8,16 @@
"name": "qrgenerator",
"version": "0.1.0",
"dependencies": {
+ "@fortawesome/fontawesome-svg-core": "^6.4.0",
+ "@fortawesome/free-solid-svg-icons": "^6.4.0",
+ "@fortawesome/react-fontawesome": "^0.2.0",
"@material-ui/core": "^4.12.4",
"@material-ui/icons": "^4.11.3",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
- "add": "^2.0.6",
+ "axios": "^1.5.0",
+ "fontawesome": "^5.6.3",
"node-sass": "^9.0.0",
"peerjs": "^1.5.0",
"qrcode": "^1.5.3",
@@ -28,8 +32,9 @@
"react-router": "^6.15.0",
"react-router-dom": "^6.15.0",
"react-scripts": "5.0.1",
- "simple-peer": "^9.11.1",
- "socket.io-client": "^4.6.1",
+ "react-toastify": "^9.1.3",
+ "sass": "^1.66.1",
+ "sass-loader": "^13.3.2",
"web-vitals": "^2.1.4"
}
},
@@ -2011,66 +2016,6 @@
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
},
- "node_modules/@cbor-extract/cbor-extract-darwin-arm64": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.1.1.tgz",
- "integrity": "sha512-blVBy5MXz6m36Vx0DfLd7PChOQKEs8lK2bD1WJn/vVgG4FXZiZmZb2GECHFvVPA5T7OnODd9xZiL3nMCv6QUhA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@cbor-extract/cbor-extract-darwin-x64": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.1.1.tgz",
- "integrity": "sha512-h6KFOzqk8jXTvkOftyRIWGrd7sKQzQv2jVdTL9nKSf3D2drCvQB/LHUxAOpPXo3pv2clDtKs3xnHalpEh3rDsw==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@cbor-extract/cbor-extract-linux-arm": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.1.1.tgz",
- "integrity": "sha512-ds0uikdcIGUjPyraV4oJqyVE5gl/qYBpa/Wnh6l6xLE2lj/hwnjT2XcZCChdXwW/YFZ1LUHs6waoYN8PmK0nKQ==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@cbor-extract/cbor-extract-linux-arm64": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.1.1.tgz",
- "integrity": "sha512-SxAaRcYf8S0QHaMc7gvRSiTSr7nUYMqbUdErBEu+HYA4Q6UNydx1VwFE68hGcp1qvxcy9yT5U7gA+a5XikfwSQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@cbor-extract/cbor-extract-linux-x64": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.1.1.tgz",
- "integrity": "sha512-GVK+8fNIE9lJQHAlhOROYiI0Yd4bAZ4u++C2ZjlkS3YmO6hi+FUxe6Dqm+OKWTcMpL/l71N6CQAmaRcb4zyJuA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ]
- },
"node_modules/@cbor-extract/cbor-extract-win32-x64": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.1.1.tgz",
@@ -2451,6 +2396,51 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
+ "node_modules/@fortawesome/fontawesome-common-types": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz",
+ "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==",
+ "hasInstallScript": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/fontawesome-svg-core": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz",
+ "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.4.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/free-solid-svg-icons": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz",
+ "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.4.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/react-fontawesome": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz",
+ "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==",
+ "dependencies": {
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "@fortawesome/fontawesome-svg-core": "~1 || ~6",
+ "react": ">=16.3"
+ }
+ },
"node_modules/@gar/promisify": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
@@ -3670,11 +3660,6 @@
"@sinonjs/commons": "^1.7.0"
}
},
- "node_modules/@socket.io/component-emitter": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
- "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
- },
"node_modules/@surma/rollup-plugin-off-main-thread": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz",
@@ -5203,11 +5188,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/add": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz",
- "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q=="
- },
"node_modules/address": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz",
@@ -5671,6 +5651,29 @@
"node": ">=4"
}
},
+ "node_modules/axios": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
+ "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axios/node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/axobject-query": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
@@ -5964,25 +5967,6 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@@ -6158,29 +6142,6 @@
"node-int64": "^0.4.0"
}
},
- "node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -7745,46 +7706,6 @@
"iconv-lite": "^0.6.2"
}
},
- "node_modules/engine.io-client": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz",
- "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==",
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1",
- "engine.io-parser": "~5.2.1",
- "ws": "~8.11.0",
- "xmlhttprequest-ssl": "~2.0.0"
- }
- },
- "node_modules/engine.io-client/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/engine.io-parser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz",
- "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
"node_modules/enhanced-resolve": {
"version": "5.15.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
@@ -9082,6 +9003,11 @@
}
}
},
+ "node_modules/fontawesome": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/fontawesome/-/fontawesome-5.6.3.tgz",
+ "integrity": "sha512-FCc+CawwsJWWprVEg9X14yI7zI+l9YVAyhzgu70qwGeDn0tLLDH/dVfqgij72g4BBGgLGfK2qnvFGAmYUkhaWg=="
+ },
"node_modules/for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
@@ -9322,9 +9248,9 @@
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"hasInstallScript": true,
"optional": true,
"os": [
@@ -9401,11 +9327,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/get-browser-rtc": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz",
- "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ=="
- },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -10113,25 +10034,6 @@
"node": ">=4"
}
},
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -10149,6 +10051,11 @@
"url": "https://opencollective.com/immer"
}
},
+ "node_modules/immutable": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz",
+ "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA=="
+ },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -16073,6 +15980,11 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"node_modules/psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
@@ -16771,6 +16683,63 @@
}
}
},
+ "node_modules/react-scripts/node_modules/sass-loader": {
+ "version": "12.6.0",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz",
+ "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==",
+ "dependencies": {
+ "klona": "^2.0.4",
+ "neo-async": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "fibers": ">= 3.1.0",
+ "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
+ "sass": "^1.3.0",
+ "sass-embedded": "*",
+ "webpack": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "fibers": {
+ "optional": true
+ },
+ "node-sass": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-toastify": {
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz",
+ "integrity": "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==",
+ "dependencies": {
+ "clsx": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
+ "node_modules/react-toastify/node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/react-transition-group": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
@@ -17389,6 +17358,22 @@
"resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz",
"integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA=="
},
+ "node_modules/sass": {
+ "version": "1.66.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz",
+ "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==",
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/sass-graph": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz",
@@ -17445,15 +17430,14 @@
}
},
"node_modules/sass-loader": {
- "version": "12.6.0",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz",
- "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==",
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz",
+ "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==",
"dependencies": {
- "klona": "^2.0.4",
"neo-async": "^2.6.2"
},
"engines": {
- "node": ">= 12.13.0"
+ "node": ">= 14.15.0"
},
"funding": {
"type": "opencollective",
@@ -17461,7 +17445,7 @@
},
"peerDependencies": {
"fibers": ">= 3.1.0",
- "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
+ "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
"sass": "^1.3.0",
"sass-embedded": "*",
"webpack": "^5.0.0"
@@ -17775,39 +17759,6 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
},
- "node_modules/simple-peer": {
- "version": "9.11.1",
- "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz",
- "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "buffer": "^6.0.3",
- "debug": "^4.3.2",
- "err-code": "^3.0.1",
- "get-browser-rtc": "^1.1.0",
- "queue-microtask": "^1.2.3",
- "randombytes": "^2.1.0",
- "readable-stream": "^3.6.0"
- }
- },
- "node_modules/simple-peer/node_modules/err-code": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz",
- "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA=="
- },
"node_modules/sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@@ -17830,32 +17781,6 @@
"npm": ">= 3.0.0"
}
},
- "node_modules/socket.io-client": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz",
- "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==",
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.2",
- "engine.io-client": "~6.5.2",
- "socket.io-parser": "~4.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/socket.io-parser": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
- "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
"node_modules/sockjs": {
"version": "0.3.24",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
@@ -20203,14 +20128,6 @@
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
},
- "node_modules/xmlhttprequest-ssl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
- "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
diff --git a/package.json b/package.json
index a613e02..cc82f5e 100644
--- a/package.json
+++ b/package.json
@@ -3,12 +3,16 @@
"version": "0.1.0",
"private": true,
"dependencies": {
+ "@fortawesome/fontawesome-svg-core": "^6.4.0",
+ "@fortawesome/free-solid-svg-icons": "^6.4.0",
+ "@fortawesome/react-fontawesome": "^0.2.0",
"@material-ui/core": "^4.12.4",
"@material-ui/icons": "^4.11.3",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
- "add": "^2.0.6",
+ "axios": "^1.5.0",
+ "fontawesome": "^5.6.3",
"node-sass": "^9.0.0",
"peerjs": "^1.5.0",
"qrcode": "^1.5.3",
@@ -23,8 +27,9 @@
"react-router": "^6.15.0",
"react-router-dom": "^6.15.0",
"react-scripts": "5.0.1",
- "simple-peer": "^9.11.1",
- "socket.io-client": "^4.6.1",
+ "react-toastify": "^9.1.3",
+ "sass": "^1.66.1",
+ "sass-loader": "^13.3.2",
"web-vitals": "^2.1.4"
},
"scripts": {
diff --git a/src/App.js b/src/App.js
index 4473715..d2c4704 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,69 +1,54 @@
-import React, { useState } from 'react';
+import React from 'react';
import AddHealthinfoForm from "./components/AddHealth/AddHealthinfoForm";
-import BookAppointment from "./components/Appointment/BookAppointment";
-import Healthcare from "./components/HealthCareContent/HealthCare";
-import HealthcareContent from "./components/HealthCareContent/HealthcareContent";
-import GenerateOtp from "./components/Registration/GenerateOtp";
-import Hospital from "./components/Registration/Hospital";
-import LoginForm from "./components/Registration/LoginForm";
import Patient from "./components/Registration/Patient";
import RegistrationForm from "./components/Registration/RegistrationForm";
-import DoctorForm from './components/Registration/DoctorForm';
-import { Typography, AppBar } from '@material-ui/core';
-import { makeStyles } from '@material-ui/core/styles';
+import Facilities from "./components/Facilities/Facilities";
+import { BrowserRouter, Routes, Route } from "react-router-dom";
+import "./App.scss";
+import Home from "./Pages/Home";
+import Legal from "./Pages/Legal";
+import NotFound from "./Pages/NotFound";
+import Appointment from "./Pages/Appointment";
+import LoginForm from './components/Registration/LoginForm';
+import BookAppointment from './components/Appointment/BookAppointment';
+import HealthcareContent from './components/HealthCareContent/HealthcareContent';
-import VideoPlayer from './components/VideoPlayer';
-import Sidebar from './components/Sidebar';
-import Notifications from './components/Notifications';
+function App() {
+ return (
+
+
+
+ {/* */}
+ {/* */}
+ {/*
-const useStyles = makeStyles((theme) => ({
- appBar: {
- borderRadius: 15,
- margin: '30px 100px',
- display: 'flex',
- flexDirection: 'row',
- justifyContent: 'center',
- alignItems: 'center',
- width: '600px',
- border: '2px solid black',
+
+
+ >
+ } />
- [theme.breakpoints.down('xs')]: {
- width: '90%',
- },
- },
- image: {
- marginLeft: '15px',
- },
- wrapper: {
- display: 'flex',
- flexDirection: 'column',
- alignItems: 'center',
- width: '100%',
- },
-}));
-const App = () => {
-
- return (
-
- {/*
*/}
- {/*
*/}
- {/*
*/}
- {/*
*/}
- {/*
*/}
- {/*
*/}
+
+
+
} />
+
+ } />
+
+ } />
+ } />
+ } />
+ } />
+
- {/* */}
-
- {/* */}
- {/* */}
-
- {/* */}
-
-
-
+
);
}
diff --git a/src/Pages/Appointment.js b/src/Pages/Appointment.js
new file mode 100644
index 0000000..d9207c7
--- /dev/null
+++ b/src/Pages/Appointment.js
@@ -0,0 +1,8 @@
+import React from "react";
+import AppointmentForm from "../components/AppointmentForm";
+
+function Appointment() {
+ return ;
+}
+
+export default Appointment;
diff --git a/src/Pages/Home.js b/src/Pages/Home.js
new file mode 100644
index 0000000..3c5a508
--- /dev/null
+++ b/src/Pages/Home.js
@@ -0,0 +1,26 @@
+import React from "react";
+import Navbar from "../components/Navbar";
+import Hero from "../components/Hero";
+import Info from "../components/Info";
+import About from "../components/About";
+import BookAppointment from "../components/BookAppointment";
+import Reviews from "../components/Reviews";
+import Doctors from "../components/Doctors";
+import Footer from "../components/Footer";
+
+function Home() {
+ return (
+
+ );
+}
+
+export default Home;
diff --git a/src/Pages/Legal.js b/src/Pages/Legal.js
new file mode 100644
index 0000000..b03e4c1
--- /dev/null
+++ b/src/Pages/Legal.js
@@ -0,0 +1,8 @@
+import React from "react";
+import LegalDocs from "../components/LegalDocs";
+
+function Legal() {
+ return ;
+}
+
+export default Legal;
diff --git a/src/Pages/NotFound.js b/src/Pages/NotFound.js
new file mode 100644
index 0000000..d9ac289
--- /dev/null
+++ b/src/Pages/NotFound.js
@@ -0,0 +1,17 @@
+import React from "react";
+import { useLocation } from "react-router-dom";
+
+function NotFound() {
+ const deployedURL = window.location.href;
+ const location = useLocation();
+
+ return (
+
+
Page Not Found
+
The requested URL {deployedURL} was not found on this server.
+
The requested URL {location.pathname} was not found on this server.
+
+ );
+}
+
+export default NotFound;
diff --git a/src/Scripts/reviews.js b/src/Scripts/reviews.js
new file mode 100644
index 0000000..c4c1b0b
--- /dev/null
+++ b/src/Scripts/reviews.js
@@ -0,0 +1,52 @@
+export const customerReviews = [
+ {
+ "name": "Esther Howard",
+ "location": "Texas, USA",
+ "message": "Health Plus transformed my healthcare experience! The online consultations were so convenient, and the doctors were knowledgeable and caring."
+ },
+ {
+ "name": "John Doe",
+ "location": "California, USA",
+ "message": "I found the perfect specialist for my condition through Health Plus. The personalized treatment plan made all the difference. Thank you for prioritizing my health!"
+ },
+ {
+ "name": "Alice Smith",
+ "location": "New York, USA",
+ "message": "Booking appointments was a breeze, and the service exceeded my expectations. The doctors truly listen and provide effective solutions. 5 stars!"
+ },
+ {
+ "name": "Bob Johnson",
+ "location": "Florida, USA",
+ "message": "Health Plus is a game-changer! The emergency care saved me during a critical situation. Grateful for their quick and efficient support."
+ },
+ {
+ "name": "Jane Brown",
+ "location": "Washington, USA",
+ "message": "I used to dread dental visits, but Health Plus made it a pleasant experience. The dentist was gentle and professional. I'll definitely be back!"
+ },
+ {
+ "name": "Robert Wilson",
+ "location": "Texas, USA",
+ "message": "Finally, a healthcare platform that puts patients first! The heart disease service provided comprehensive care and regular follow-ups. Thank you, Health Plus!"
+ },
+ {
+ "name": "Mary Lee",
+ "location": "California, USA",
+ "message": "I've been using Health Plus for a variety of health concerns, and each time, I received exceptional care. It's my go-to for all medical needs!"
+ },
+ {
+ "name": "David Miller",
+ "location": "Texas, USA",
+ "message": "I highly recommend Health Plus for online consultations. It's convenient, secure, and the doctors are top-notch. Great job, team!"
+ },
+ {
+ "name": "Sarah Johnson",
+ "location": "Florida, USA",
+ "message": "The convenience of accessing medical notes online was fantastic. Health Plus made managing my health records hassle-free! Best Healthcare services."
+ },
+ {
+ "name": "Michael Brown",
+ "location": "New York, USA",
+ "message": "As a busy professional, Health Plus has been a lifesaver. Quick prescriptions and refills without compromising on quality care. Thank you!"
+ }
+];
diff --git a/src/Styles/About.css b/src/Styles/About.css
new file mode 100644
index 0000000..7ae014a
--- /dev/null
+++ b/src/Styles/About.css
@@ -0,0 +1,94 @@
+.about-section {
+ padding: 32px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 24px;
+ background: linear-gradient(to right, #ECF2FF, #FBFCFF);
+}
+/* Image */
+.about-image-content {
+ width: 50%;
+ max-width: 100%;
+ text-align: center;
+}
+.about-image1 {
+ width: 80%;
+ height: auto;
+}
+/* Text */
+.about-text-content {
+ width: 50%;
+}
+.about-title {
+ font-family: 'Poppins', sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+}
+.about-title > span {
+ position: relative;
+}
+.about-title span::before {
+ content: '';
+ position: absolute;
+ width: 75%;
+ height: 4px;
+ background-color: #9D2553;
+ border-radius: 8px;
+ left: 0;
+ bottom: -12px;
+}
+.about-description {
+ margin: 32px 0;
+ color: #4d4b4b;
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ letter-spacing: .7px;
+ line-height: 1.7rem;
+}
+.about-text-title {
+ margin: 0 0 24px 0;
+ color: #4d4b4b;
+ font-family: 'Poppins', sans-serif;
+ font-size: 24px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+/* Steps */
+.about-text-step {
+ margin: 16px 0;
+}
+.about-text-sTitle {
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+.about-text-description {
+ margin: 8px 24px;
+ color: #4d4b4b;
+ font-family: 'Rubik', sans-serif;
+ letter-spacing: .7px;
+ line-height: 1.6rem;
+}
+.fa-icon {
+ color: #9D2553;
+}
+/* Responsive */
+@media screen and (max-width: 1000px) {
+ .about-section {
+ display: block;
+ }
+ .about-image-content {
+ width: 100%;
+ max-width: 100%;
+ margin: 0 0 32px 0;
+ }
+ .about-image1 {
+ width: 100%;
+ height: 100%;
+ }
+ .about-text-content {
+ width: 100%;
+ }
+}
diff --git a/src/Styles/AppointmentForm.css b/src/Styles/AppointmentForm.css
new file mode 100644
index 0000000..e692852
--- /dev/null
+++ b/src/Styles/AppointmentForm.css
@@ -0,0 +1,89 @@
+.form-container {
+ padding: 32px;
+ display: flex;
+ flex-direction: column;
+ gap: 40px;
+ background: linear-gradient(to right, #ECF2FF, #FBFCFF);
+}
+.form-title {
+ font-family: 'Poppins', sans-serif;
+ font-size: 32px;
+ font-weight: bold;
+}
+.form-title > span {
+ position: relative;
+}
+.form-title span::before {
+ content: '';
+ position: absolute;
+ width: 75%;
+ height: 4px;
+ background-color: #9D2553;
+ border-radius: 8px;
+ left: 0;
+ bottom: -12px;
+}
+/* Form */
+.form-content label {
+ margin: 0 0 16px 0;
+ display: block;
+ font-family: 'Rubik', sans-serif;
+ font-size: 24px;
+ letter-spacing: .7px;
+}
+.form-content label::before {
+ content: "*";
+ color: red;
+ padding: 0 4px 0 0;
+}
+.form-content label :is(input, select) {
+ width: 100%;
+ margin: 8px 0;
+ padding: 0 12px;
+ display: block;
+ height: 40px;
+ color: black;
+ border: 1px solid transparent;
+ border-radius: 6px;
+ background-color: #c9def4;
+ outline: transparent;
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ letter-spacing: .7px;
+}
+/* Success Message */
+.success-message {
+ margin: 20px 0 0 0;
+ color: green;
+ font-family: 'Rubik', sans-serif;
+ font-size: 22px;
+ letter-spacing: .7px;
+ line-height: 1.7rem;
+}
+/* Error Message */
+.error-message {
+ color: red;
+ font-family: 'Rubik', sans-serif;
+ font-size: 16px;
+ letter-spacing: .7px;
+ line-height: 1.7rem;
+}
+/* Responsive */
+@media screen and (max-width: 600px) {
+ .form-container {
+ padding: 24px;
+ }
+ .form-title {
+ font-size: 24px;
+ }
+ .form-content label {
+ font-size: 18px;
+ }
+ .form-content label :is(input, select) {
+ font-size: 16px;
+ }
+ .success-message {
+ margin: 12px 0 0 0;
+ font-size: 18px;
+ }
+}
diff --git a/src/Styles/BookAppointment.css b/src/Styles/BookAppointment.css
new file mode 100644
index 0000000..40b8148
--- /dev/null
+++ b/src/Styles/BookAppointment.css
@@ -0,0 +1,100 @@
+.ba-section {
+ padding: 32px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 24px;
+ background-color: white;
+}
+/* Image */
+.ba-image-content {
+ width: 50%;
+ max-width: 100%;
+ text-align: center;
+}
+.ba-image1 {
+ width: 80%;
+ height: auto;
+}
+/* Text */
+.ba-text-content {
+ width: 50%;
+}
+.ba-title {
+ font-family: 'Poppins', sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+.ba-title > span {
+ position: relative;
+}
+.ba-title span::before {
+ content: '';
+ position: absolute;
+ width: 75%;
+ height: 4px;
+ background-color: #9D2553;
+ border-radius: 8px;
+ left: 0;
+ bottom: -12px;
+}
+.ba-description {
+ margin: 32px 0;
+ color: #4d4b4b;
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ letter-spacing: .8px;
+ line-height: 1.8rem;
+}
+/* Checks */
+.ba-checks {
+ margin: 28px 0;
+ font-family: 'Rubik', sans-serif;
+ font-size: 22px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+.ba-check-first {
+ margin-top: 40px;
+}
+.ba-check-last {
+ margin-bottom: 40px;
+}
+/* Book Appointment Button */
+.ba-appointment-btn {
+ padding: 18px 24px;
+ color: white;
+ border: 1px solid transparent;
+ border-radius: 50px;
+ outline: transparent;
+ background-color: #1A8EFD;
+ font-size: 20px;
+ font-family: 'Rubik', sans-serif;
+ letter-spacing: .8px;
+ cursor: pointer;
+ transition: all .4s ease;
+}
+.ba-appointment-btn:hover {
+ color: #1A8EFD;
+ background-color: transparent;
+ border: 1px solid #1A8EFD;
+}
+/* Responsive */
+@media screen and (max-width: 1000px) {
+ .ba-section {
+ display: block;
+ }
+ .ba-image-content {
+ width: 100%;
+ max-width: 100%;
+ margin: 0 0 32px 0;
+ }
+ .ba-text-content {
+ width: 100%;
+ }
+ .ba-image1 {
+ width: 80%;
+ height: 80%;
+ }
+}
diff --git a/src/Styles/Doctors.css b/src/Styles/Doctors.css
new file mode 100644
index 0000000..94ca78a
--- /dev/null
+++ b/src/Styles/Doctors.css
@@ -0,0 +1,95 @@
+.doctor-section {
+ padding: 32px;
+ margin: 0 0 32px 0;
+ text-align: center;
+ background-color: white;
+}
+.dt-title-content {
+ margin: 0 0 64px 0;
+}
+.dt-title {
+ font-family: 'Poppins', sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+.dt-title > span {
+ position: relative;
+}
+.dt-title span::before {
+ content: '';
+ position: absolute;
+ width: 64%;
+ height: 4px;
+ background-color: #9D2553;
+ border-radius: 8px;
+ left: 0;
+ bottom: -12px;
+}
+.dt-description {
+ margin: 64px auto 0;
+ text-align: center;
+ color: rgb(77, 75, 75);
+ font-family: 'Rubik', sans-serif;
+ font-size: 20px;
+ letter-spacing: .8px;
+ line-height: 1.8rem;
+}
+/* Doctor Cards */
+.dt-cards-content {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ align-items: center;
+ gap: 32px;
+}
+.dt-card {
+ width: 332px;
+ height: 400px;
+ gap: 32px;
+ text-align: left;
+ font-family: 'Rubik', sans-serif;
+}
+.dt-card-img {
+ width: 100%;
+ height: 275px;
+ padding: 16px 32px 0;
+ background-position: center;
+ background-color: #DDE5F8;
+ border-radius: 20px;
+}
+.dt-card-name {
+ margin: 12px 0 0 0;
+ font-size: 22px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+.dt-card-title {
+ margin: 6px 0 8px;
+ color: #494949;
+ font-family: 'Poppins', sans-serif;
+ font-size: 18px;
+ letter-spacing: .7px;
+}
+.dt-card-stars {
+ font-size: 18px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+.dt-card-reviews {
+ color: #5a5a5a;
+ font-size: 18px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+/* Responsive */
+@media screen and (max-width: 700px) {
+ .dt-title {
+ font-size: 32px;
+ }
+ .dt-description {
+ margin: 48px 0 0;
+ font-size: 18px;
+ }
+}
diff --git a/src/Styles/Footer.css b/src/Styles/Footer.css
new file mode 100644
index 0000000..9a41580
--- /dev/null
+++ b/src/Styles/Footer.css
@@ -0,0 +1,171 @@
+.footer-section {
+ background-color: #1B2433;
+}
+.footer-container {
+ padding: 40px;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ align-items: flex-start;
+ gap: 12px;
+ color: white;
+ border-bottom: 2px solid #293241;
+ border-radius: 2px;
+}
+/* Title */
+.ft-title {
+ color: #1A8EFD;
+ text-decoration: none;
+ font-family: 'Poppins', sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+ letter-spacing: .8px;
+}
+.ft-sign {
+ color: #1ECAB0;
+ font-family: Cambria, sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+}
+.ft-description {
+ width: 420px;
+ margin: 16px 0 40px;
+ color: #D0D3DA;
+ font-family: 'Rubik', sans-serif;
+ font-size: 20px;
+ letter-spacing: .8px;
+ line-height: 1.7rem;
+}
+.ft-input-title {
+ color: white;
+ font-family: 'Rubik', sans-serif;
+ font-size: 22px;
+ font-weight: bold;
+ letter-spacing: .8px;
+}
+.ft-input {
+ width: 300px;
+ margin: 20px 8px 0 0;
+ padding: 16px 22px;
+ color: white;
+ background-color: #293241;
+ border: 1px solid transparent;
+ border-radius: 50px;
+ outline: transparent;
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ letter-spacing: .8px;
+}
+.ft-btn {
+ padding: 14px 18px;
+ color: white;
+ border: 2px solid transparent;
+ border-radius: 50px;
+ outline: transparent;
+ background-color: #1A8EFD;
+ font-size: 18px;
+ font-family: 'Rubik', sans-serif;
+ letter-spacing: .8px;
+ cursor: pointer;
+ transition: all .4s ease;
+}
+.ft-btn:hover {
+ color: #1A8EFD;
+ background-color: white;
+ border: 2px solid #1A8EFD;
+}
+/* Lists */
+.ft-list-title {
+ margin: 16px 0;
+ font-family: 'Rubik', sans-serif;
+ font-size: 24px;
+ font-weight: bold;
+ letter-spacing: .8px;
+}
+.ft-list-items {
+ list-style-type: none;
+}
+.ft-list-items li a {
+ text-decoration: none;
+ color: #a5a7ac;
+ padding: 0 0 2px 0;
+ border-bottom: 2px dotted transparent;
+ transition: border .2s ease;
+}
+.ft-list-items li {
+ margin: 24px 0;
+ font-family: 'Rubik', sans-serif;
+ font-size: 16px;
+ font-weight: bold;
+ letter-spacing: .8px;
+}
+.ft-list-items li a:hover {
+ border-bottom: 2px dotted #a5a7ac;
+}
+/* CopyRight */
+.ft-copyright {
+ padding: 24px 40px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ color: #cbcdd3;
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ font-weight: bold;
+ letter-spacing: .8px;
+}
+.ft-social-links {
+ list-style-type: none;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 12px;
+}
+.ft-social-links li a {
+ width: 40px;
+ height: 40px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border: 2px solid #cbcdd3;
+ border-radius: 50%;
+ cursor: pointer;
+}
+.ft-social-links li a svg {
+ width: 24px;
+ height: 24px;
+ padding: 1px;
+}
+.ft-social-links li a svg path {
+ fill: #cbcdd3;
+}
+.ft-social-links li a:hover, .ft-social-links li a:hover svg path {
+ fill: #1A8EFD;
+ border: 2px solid #1A8EFD;
+}
+/* Responsive */
+@media screen and (max-width: 700px) {
+ .footer-container {
+ padding: 24px;
+ }
+ .ft-description {
+ width: 100%;
+ margin: 16px 0 24px;
+ }
+ .ft-input {
+ width: 100%;
+ margin: 16px 0;
+ }
+ .ft-btn {
+ width: 100%;
+ margin: 0 0 16px;
+ }
+ .ft-copyright {
+ padding: 18px;
+ display: block;
+ text-align: center;
+ }
+ .ft-social-links {
+ margin: 16px 0 0;
+ }
+}
diff --git a/src/Styles/Hero.css b/src/Styles/Hero.css
new file mode 100644
index 0000000..c8d2687
--- /dev/null
+++ b/src/Styles/Hero.css
@@ -0,0 +1,150 @@
+.hero-section {
+ padding: 32px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 24px;
+ background: linear-gradient(to right, #ECF2FF, #FBFCFF);
+}
+/* Text section */
+.text-section {
+ width: 60%;
+ padding: 0 32px;
+}
+.text-headline {
+ margin-bottom: 12px;
+ color: rgb(77, 75, 75);
+ font-family: 'Rubik', sans-serif;
+ font-size: 22px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+.text-title {
+ width: 500px;
+ color: black;
+ font-family: 'Poppins', sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+}
+.text-descritpion {
+ width: 475px;
+ margin: 32px 0;
+ color: rgb(77, 75, 75);
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ letter-spacing: .7px;
+ line-height: 1.6rem;
+}
+.text-appointment-btn {
+ padding: 14px 20px;
+ color: white;
+ border: 1px solid transparent;
+ border-radius: 28px;
+ outline: transparent;
+ background-color: #1A8EFD;
+ font-size: 18px;
+ font-family: 'Rubik', sans-serif;
+ letter-spacing: .8px;
+ cursor: pointer;
+ transition: all .4s ease;
+}
+.text-appointment-btn:hover {
+ color: #1A8EFD;
+ background-color: transparent;
+ border: 1px solid #1A8EFD;
+}
+.text-stats {
+ margin-top: 40px;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 48px;
+}
+.text-stats-container {
+ text-align: center;
+}
+.text-stats-container > p {
+ color: rgb(77, 75, 75);
+ font-family: 'Poppins', sans-serif;
+ font-size: 22px;
+ letter-spacing: .7px;
+}
+.text-stats-container p:first-child {
+ margin-bottom: 8px;
+ color: #1A8EFD;
+ font-family: 'Rubik', sans-serif;
+ font-size: 32px;
+ font-weight: bold;
+}
+/* Image section */
+.hero-image-section {
+ width: 40%;
+ max-width: 100%;
+ text-align: center;
+}
+.hero-image1 {
+ width: 100%;
+ height: auto;
+}
+/* Scroll Btn */
+.scroll-up {
+ width: 45px;
+ height: 45px;
+ display: none;
+ align-items: center;
+ text-align: center;
+ justify-content: center;
+ color: white;
+ border: 3px solid white;
+ border-radius: 50%;
+ background-color: #1A8EFD;
+ position: fixed;
+ bottom: 50px;
+ right: 50px;
+ font-size: 24px;
+ z-index: 20;
+ cursor: pointer;
+}
+.show-scroll {
+ display: flex;
+}
+/* Responsive */
+@media screen and (max-width: 900px) {
+ .hero-image-section {
+ display: none;
+ }
+ .text-section {
+ width: 100%;
+ padding: 0;
+ }
+ .text-title, .text-descritpion {
+ width: 100%;
+ }
+}
+@media screen and (max-width: 600px) {
+ .text-headline {
+ font-size: 20px;
+ }
+ .text-title {
+ font-size: 28px;
+ }
+ .text-descritpion {
+ font-size: 16px;
+ }
+ .text-appointment-btn {
+ font-size: 16px;
+ }
+ .text-stats {
+ gap: 18px;
+ }
+ .text-stats-container > p {
+ font-size: 16px;
+ }
+ .text-stats-container p:first-child {
+ font-size: 22px;
+ }
+ .scroll-up {
+ bottom: 32px;
+ right: 32px;
+ }
+}
diff --git a/src/Styles/Info.css b/src/Styles/Info.css
new file mode 100644
index 0000000..f3e8609
--- /dev/null
+++ b/src/Styles/Info.css
@@ -0,0 +1,94 @@
+.info-section {
+ padding: 0 32px;
+ text-align: center;
+ background-color: white;
+}
+.info-title-content {
+ margin: 64px 0 128px 0;
+}
+.info-title {
+ font-family: 'Poppins', sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+}
+.info-title > span {
+ position: relative;
+}
+.info-title span::before {
+ content: '';
+ position: absolute;
+ width: 75%;
+ height: 4px;
+ background-color: #9D2553;
+ border-radius: 8px;
+ left: 0;
+ bottom: -12px;
+}
+.info-description {
+ margin: 64px;
+ text-align: center;
+ color: rgb(77, 75, 75);
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ letter-spacing: .8px;
+ line-height: 1.8rem;
+}
+/* Cards */
+.info-cards-content {
+ margin: 64px 0;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 32px;
+}
+.info-cards {
+ height: auto;
+ border: 2px solid #d7d3d3;
+ border-radius: 12px;
+ background-color: white;
+ position: relative;
+}
+.info-card-title {
+ margin: 32px 0 40px 0;
+ color: black;
+ font-family: 'Poppins', sans-serif;
+ font-size: 28px;
+ font-weight: bold;
+ letter-spacing: .8px;
+}
+.info-card-description {
+ margin: 24px;
+ color: rgb(77, 75, 75);
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ letter-spacing: .8px;
+ line-height: 1.5rem;
+}
+.info-card-icon {
+ position: absolute;
+ top: -24px;
+ left: 44%;
+ padding: 10px;
+ background-color: #DCE6FF;
+ border-radius: 30px;
+}
+.info-fa-icon {
+ color: #2C96FF;
+ font-size: 24px;
+}
+/* Responsive */
+@media screen and (max-width: 1000px) {
+ .info-description {
+ margin: 64px 32px;
+ }
+ .info-cards-content {
+ grid-template-columns: repeat(2, 1fr);
+ }
+}
+@media screen and (max-width: 700px) {
+ .info-description {
+ margin: 64px 8px;
+ }
+ .info-cards-content {
+ grid-template-columns: repeat(1, 1fr);
+ }
+}
diff --git a/src/Styles/LegalDocs.css b/src/Styles/LegalDocs.css
new file mode 100644
index 0000000..8234c00
--- /dev/null
+++ b/src/Styles/LegalDocs.css
@@ -0,0 +1,69 @@
+.legal-text-content{
+ padding: 12px 32px;
+ background: linear-gradient(to right, #ECF2FF, #FBFCFF);
+}
+/* Title */
+.legal-siteTitle a {
+ text-decoration: none;
+ color: #1A8EFD;
+ font-size: 48px;
+ letter-spacing: .8px;
+}
+.legal-siteTitle {
+ padding: 0 0 8px 0;
+ border-radius: 2px;
+ background-color: white;
+ text-align: center;
+ font-family: 'Poppins', sans-serif;
+}
+.legal-siteSign{
+ color: #54de54;
+ font-family: Cambria, sans-serif;
+ font-size: 56px;
+ font-weight: bold;
+}
+/* Info */
+.legal-title {
+ margin: 16px 0;
+ padding: 0 0 2px 0;
+ border-bottom: 2px solid grey;
+ font-family: 'Poppins', sans-serif;
+ font-size: 32px;
+ font-weight: bold;
+ letter-spacing: .8px;
+}
+.legal-description {
+ margin: 0 0 16px 0;
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ letter-spacing: .8px;
+ line-height: 1.8rem;
+}
+/* Footer */
+.legal-footer {
+ padding: 24px 40px;
+ display: block;
+ color: black;
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ font-weight: bold;
+ letter-spacing: .8px;
+ line-height: 1.6rem;
+}
+/* Responsive */
+@media screen and (max-width: 600px) {
+ .legal-section {
+ padding: 24px;
+ }
+ .legal-title {
+ font-size: 24px;
+ }
+ .legeal-description {
+ font-size: 16px;
+ }
+ .legal-footer {
+ padding: 12px 20px;
+ text-align: center;
+ font-size: 16px;
+ }
+}
diff --git a/src/Styles/Navbar.css b/src/Styles/Navbar.css
new file mode 100644
index 0000000..aacd93f
--- /dev/null
+++ b/src/Styles/Navbar.css
@@ -0,0 +1,126 @@
+.navbar-section {
+ padding: 0 32px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 80px;
+ background-color: white;
+}
+.navbar-title a {
+ color: #1A8EFD;
+ letter-spacing: .6px;
+ text-decoration: none;
+}
+.navbar-title {
+ font-family: 'Poppins', sans-serif;
+}
+.navbar-sign {
+ color: #54de54;
+ font-family: Cambria, sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+}
+.navbar-items {
+ list-style-type: none;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 32px;
+ font-family: 'Rubik', sans-serif;
+}
+.navbar-items > li {
+ list-style-type: none;
+}
+.navbar-links {
+ text-decoration: none;
+ color: black;
+ font-size: 18px;
+ letter-spacing: .8px;
+}
+.navbar-links:hover {
+ color: #0cc2ea;
+}
+.navbar-btn {
+ padding: 14px 20px;
+ color: white;
+ border: 1px solid transparent;
+ border-radius: 28px;
+ outline: transparent;
+ background-color: #1A8EFD;
+ font-size: 18px;
+ font-family: 'Rubik', sans-serif;
+ letter-spacing: .8px;
+ cursor: pointer;
+ transition: all .4s ease;
+}
+.navbar-btn:hover {
+ color: #1A8EFD;
+ background-color: white;
+ border: 1px solid #1A8EFD;
+}
+/* Hamburger Icon */
+.mobile-nav {
+ display: none;
+}
+.hamb-icon {
+ width: 26px;
+ height: 26px;
+ cursor: pointer;
+}
+.hamb-icon:hover {
+ color: #0cc2ea;
+}
+/* Mobile Navbar */
+.mobile-navbar {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100vh;
+ position: fixed;
+ top: 0;
+ left: -100%;
+ background-color: white;
+ z-index: 20;
+ justify-content: center;
+ align-items: center;
+ transition: left .5s ease-in-out;
+}
+.mobile-navbar-close {
+ position: absolute;
+ top: 28px;
+ right: 28px;
+}
+.mobile-navbar-close .hamb-icon:hover {
+ color: rgb(255, 22, 22);
+}
+.open-nav {
+ left: 0;
+}
+.mobile-navbar-links {
+ list-style-type: none;
+ display: flex;
+ flex-direction: column;
+ font-size: 24px;
+ gap: 24px;
+ text-align: center;
+}
+.mobile-navbar-links li a {
+ text-decoration: none;
+ color: black;
+ font-family: 'Poppins', sans-serif;
+ font-weight: bold;
+ letter-spacing: .8px;
+ transition: color .3s ease-in-out;
+}
+.mobile-navbar-links li a:hover {
+ color: #0cc2ea;
+}
+/* Responsive */
+@media screen and (max-width: 900px) {
+ .navbar-btn, .navbar-items {
+ display: none;
+ }
+ .mobile-nav {
+ display: block;
+ }
+}
diff --git a/src/Styles/Reviews.css b/src/Styles/Reviews.css
new file mode 100644
index 0000000..43babfd
--- /dev/null
+++ b/src/Styles/Reviews.css
@@ -0,0 +1,126 @@
+.review-section {
+ padding: 32px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 24px;
+ background: linear-gradient(to right, #ECF2FF, #FBFCFF);
+}
+/* Text */
+.rw-text-content {
+ width: 100%;
+}
+.rw-text-title {
+ margin: 16px 0;
+ color: #6F7074;
+ font-family: 'Rubik', sans-serif;
+ font-size: 32px;
+ font-weight: bold;
+ letter-spacing: .7px;
+}
+.rw-text-num {
+ color: #178BFF;
+}
+.rw-text-desc {
+ margin: 16px 0;
+ color: black;
+ font-family: 'Rubik', sans-serif;
+ font-size: 36px;
+ font-weight: bold;
+ letter-spacing: .7px;
+ line-height: 2.6rem;
+}
+.rw-text-format {
+ margin: 64px 0;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ position: relative;
+}
+.rw-text-quote1 {
+ position: absolute;
+ top: -18px;
+ left: -24px;
+ color: #178BFF;
+ font-family: 'Poppins', sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+ letter-spacing: 2px;
+}
+.rw-text-quote2 {
+ position: absolute;
+ right: -18px;
+ bottom: -24px;
+ color: #178BFF;
+ font-family: 'Poppins', sans-serif;
+ font-size: 40px;
+ font-weight: bold;
+ letter-spacing: 2px;
+}
+.rw-review {
+ display: block;
+ margin: 0 0 0 8px;
+ color: black;
+ font-family: 'Rubik', sans-serif;
+ font-size: 24px;
+ letter-spacing: .7px;
+ line-height: 2.2rem;
+}
+.rw-authors {
+ margin: 0 0 0 8px;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ align-items: center;
+}
+.rw-reviewer-name {
+ font-family: 'Poppins', sans-serif;
+ font-size: 24px;
+ font-weight: bold;
+ letter-spacing: .8px;
+}
+.rw-reviewer-place {
+ margin: 6px 0 0 0;
+ color: #6F7074;
+ font-family: 'Rubik', sans-serif;
+ font-size: 18px;
+ font-weight: bold;
+ letter-spacing: .8px;
+}
+/* Buttons */
+.rw-next-btn {
+ margin: 0 24px 0 0;
+ color: black;
+ border: 1px solid transparent;
+ background-color: transparent;
+ outline: transparent;
+ font-size: 48px;
+ cursor: pointer;
+}
+.rw-next-btn:hover {
+ color: #178BFF;
+}
+/* Responsive */
+@media screen and (max-width: 700px) {
+ .review-section {
+ letter-spacing: .8px;
+ }
+ .rw-text-title {
+ font-size: 22px;
+ }
+ .rw-text-desc {
+ font-size: 28px;
+ }
+ .rw-review {
+ font-size: 22px;
+ letter-spacing: .7px;
+ line-height: 1.8rem;
+ }
+ .rw-reviewer-name {
+ font-size: 20px;
+ }
+ .rw-next-btn {
+ margin: 0 16px 0 0;
+ font-size: 40px;
+ }
+}
diff --git a/src/actions/auth.js b/src/actions/auth.js
new file mode 100644
index 0000000..a65afb9
--- /dev/null
+++ b/src/actions/auth.js
@@ -0,0 +1,33 @@
+import * as api from '../api/index.js';
+
+export const signin = async(formData)=>{
+
+try {
+
+ console.log(formData)
+ // const {data}=await api.signIn(formData);
+ // console.log(data.result);
+
+
+
+} catch (error) {
+ console.log(error);
+}
+
+}
+
+
+
+export const signup =async(formData)=>{
+
+ try {
+ console.log(formData)
+ const {data}=await api.signUp(formData);
+ return data;
+
+
+ } catch (error) {
+ console.log(error);
+ }
+
+ }
\ No newline at end of file
diff --git a/src/actions/health.js b/src/actions/health.js
new file mode 100644
index 0000000..d94a0e1
--- /dev/null
+++ b/src/actions/health.js
@@ -0,0 +1,13 @@
+import * as api from '../api/index.js';
+
+export const addhealth=async(formData)=>{
+
+
+ try {
+ const {data}=await api.addHealth(formData);
+ return data;
+
+ } catch (error) {
+
+ }
+}
\ No newline at end of file
diff --git a/src/actions/index.js b/src/actions/index.js
deleted file mode 100644
index e69de29..0000000
diff --git a/src/actions/mail.js b/src/actions/mail.js
new file mode 100644
index 0000000..64f971e
--- /dev/null
+++ b/src/actions/mail.js
@@ -0,0 +1,14 @@
+import * as api from '../api/index.js';
+
+
+
+export const sendotp=async(formData)=>{
+ console.log(formData)
+ try {
+ const {data}=await api.sendOtp(formData);
+
+
+ } catch (error) {
+
+ }
+}
\ No newline at end of file
diff --git a/src/api/index.js b/src/api/index.js
index e69de29..9421fe9 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -0,0 +1,33 @@
+import axios from 'axios';
+const API = axios.create({baseURL:'http://localhost:5000/'});
+API.interceptors.request.use((req) => {
+ if (localStorage.getItem('profile')) {
+ req.headers.Authorization = `Bearer ${JSON.parse(localStorage.getItem('profile')).token}`;
+ }
+
+ return req;
+ });
+
+
+ export const signIn=(formData)=> API.post('/user/signin',formData);
+
+ export const signUp=(formData)=> API.post('/user/signup',formData);
+
+
+
+
+
+
+
+
+
+ export const addHealth=(formData)=> API.post('/add/health',formData);
+
+
+
+
+
+
+ export const sendOtp=(formData)=> API.post('/send/mail',formData);
+
+
\ No newline at end of file
diff --git a/src/assets/background_home.webp b/src/assets/background_home.webp
new file mode 100644
index 0000000000000000000000000000000000000000..3cd0552bbca87487c89a85f3d7227f580b95bf52
GIT binary patch
literal 13900
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
aqG|yM%ufEpGkYE*U}GMU2L%JRga7~%OYhSF
literal 0
HcmV?d00001
diff --git a/src/assets/background_home2.jpg b/src/assets/background_home2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c0480d5d94afdffd350d3366ff8f2127430c9b78
GIT binary patch
literal 47487
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 |2HHV_x56-351Mj1h7xA|5
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
literal 0
HcmV?d00001
diff --git a/src/assets/background_home3.jpg b/src/assets/background_home3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8b1497eb0622541a37e968c153de62d3d761e6ea
GIT binary patch
literal 46089
zcmeFZbx>T-x;8pkNN{&&aCe6g+}$C_V1o|s!QEXmguy)w4hfpz?iwIC0fG}qfREok
z`|PvNz31Ngc71jKxwX4$X7%dz^wV!Y>+LoDcCVVJrKe2*jV85Ag<@rVHAXDcvW>^(gp
zqFh`q9-Nleu2wdjAXjHDUrPuV4<|PlKwQcfVhM7z@uab`u>-qEF#YW8W}*RGOE4J-
zsBx=7WNhrgivI34I{xaqAb&@Yh&7XxB$~LdsIN1`*~Zh7#@E@Y5Crg6VJMqR;ui
zin*9*{s!@MlweYFwzRVm75z<~}8p8Xg`_VPU3c5_fA`QEgfIzf(M)NihB0Rv#Z9
zP9Hu_S9d!u9uW}{E^b~fUS5u81c!&8i>IY8hl>aOGXomU-#BD#JV5SXh$q<9h2}3#
zODk6|PYEU_G@8FtdxCBMi~GOn@Yj{U3GvKELnHpzsi?M%hpUsSnY3u6lEY9_RMg5;zrl$7)Zkw|+*FVft
zQxlbS1$jB!xOghbN@^V{?@QK*ka@dFn@pAAB3-fYV2@BhB2;1=4@>&ZC
zS@GLE>;H`Y@74d(|33+B7
z^VtY-h;Z`=aM;=k@Y&k%iiil=SpO&cKN0;GyM{aXc@SAT{gdVY_f`bCg#`t;`FObh
zlj?t{^*<{8A8zqHVxGqi*FQ$!Uyl3#efoDJ|B}Z4mh0bg{Ywh`OW=Qd*T3cZmlXJy
z!2kBHf6MhRDey0W|9|9N{}nsgxI70;KF^WS(<(p)fP#dKjEscx{Dp#o@&Xm(CF*m+
zMn`{zfs2iYhl`Dii%Bj88yDh>J@?OF~9TNli_SPfQ1-qXJS;QB(azg791w^#v-{
z%a>SG1h@oL|8jcj0pPwwut%goLcj$e;vyj7B0PNoP(Fu+NPoqs|A;P;QIKAsBECcb
zyn4Q@h66xALPA1#fr$D73FQSc>N5@z2^j_V1s*LADn6aGmZe)L0X^@V)S`x$gxXf_
zy+FQcA_f_cGk#DQyl;z`Q3ocV7oJw!ICK6?NB&pse`@P*jU%G~UZ6f-6nQoa5dj$i
z5g8E;2?2oc92p}ZBH_#SZx`CHiC#4vn5=Rn$
zDw2ex=00_xZ*YhCKq!{x!1yILijp}Cq#ryDD-CxL9!5ftm#YvIg+*kv(w?c(O;WA6NmmaO(q694m9~fy?uRYQl(GR6gt<2(vK=`46$Hb-&v=E`*dR4v
z8M8zTmL5eLJ^>i0V3=T_f{_(8Hy=8NGU6v{?1MwAk<1_#vgAp_%B$XgP;Qpq!Ylu}
znAS-Qr*2qG1BQQ43_QUoY97^jp9th!BLKS}@I62)9ubTENq>PU#58oD00?HEk$!=3
zl**4@Gg)evq0cJnm?$1l7;g>9m!{&?eqa&;z=mpT$Xs|!xygv;+5lQ*EU?a?b_F&3
zSjc3Wa7|ol!TJw|x`OM~j9+IFZ4Aqlln6dRdJROo5eluB*H?8
zHK&AwW+RzP-xWzgRGOQA7FZBsV$UAo#a7)2mF(w^=cc}|8BiCW8gY0zFxT#I(sxKM
zF6v)D9(|@~7USeOBb@@yYo#J_JCi=bO3G68v72?5VfI*Z$5HP4YOEh0#KGbS=#_5k
ze#uX;q$rbe^D$4c>!SchAySoT!WSNdFrh$g-q9QdtrtSaP1qrQ(P{c
zcQH3zT_Cm7L@-M~HvQ`i;QO&8j)8O}3XHmEr^o6e2;EFG8=(8Sf4aBsv6o{p+3Krt&S;rfzy}-T(;OE&Z=YKbs3Do1!p5Kw
zoiULlBTe3U#pYX5bmQ;XYywaDJVlx?&Z3`S`ycaPph~w!21_fW5_a)Lots4~evhc{
z1JFLSfAfl%!@aGKDoa!LiycP(3p;Iqzbd*u4kAEE-_g*3JsB?XCIM4l3gXifj#O;VpMuRmLP?I@
zv~6pwfS$Ubz{bp4uyv$7bMSFBgodCUs}|edSXkMq8CkT{qEE#p=Zg)p