From d435575c2dc875b9199feaf5f2d6e38499f6b5d9 Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Sat, 8 Oct 2022 13:09:41 +0800 Subject: [PATCH 01/25] Commit 1 - App Icon, Base Page --- package-lock.json | 916 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 5 + src/App.css | 12 +- src/App.js | 17 +- src/appicon.png | Bin 0 -> 7848 bytes src/logo.png | Bin 29578 -> 0 bytes 6 files changed, 919 insertions(+), 31 deletions(-) create mode 100644 src/appicon.png delete mode 100755 src/logo.png diff --git a/package-lock.json b/package-lock.json index c205fc57..bdf40bf1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,11 @@ "name": "project1-bootcamp", "version": "0.1.0", "dependencies": { + "@emotion/react": "^11.10.4", + "@emotion/styled": "^11.10.4", + "@font/nunito": "^1.0.3", + "@mui/material": "^5.10.8", + "bootstrap": "^5.2.2", "react": "^18.1.0", "react-dom": "^18.1.0", "react-scripts": "5.0.1" @@ -353,9 +358,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", "engines": { "node": ">=6.9.0" } @@ -890,11 +895,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1764,9 +1769,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", + "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -1997,6 +2002,170 @@ "postcss": "^8.3" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.10.2", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz", + "integrity": "sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.0", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.0.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.10.3", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz", + "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==", + "dependencies": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.0.13" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "dependencies": { + "@emotion/memoize": "^0.8.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "node_modules/@emotion/react": { + "version": "11.10.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz", + "integrity": "sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.0", + "@emotion/cache": "^11.10.0", + "@emotion/serialize": "^1.1.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", + "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", + "dependencies": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz", + "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" + }, + "node_modules/@emotion/styled": { + "version": "11.10.4", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.4.tgz", + "integrity": "sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.0", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, "node_modules/@eslint/eslintrc": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", @@ -2057,6 +2226,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@font/nunito": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@font/nunito/-/nunito-1.0.3.tgz", + "integrity": "sha512-RMctdzfEvYwRkh4jHPqYGkrlSSaeuldoN7aS7dMcmCthcAgFM/SLNHzQ/1uvWpPFAVpCQ4qtdco0b4DBn0HbAA==" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -2785,6 +2959,237 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==" }, + "node_modules/@mui/base": { + "version": "5.0.0-alpha.100", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.100.tgz", + "integrity": "sha512-bSoJEKCENtmJrJDECHUe9PiqztIUACuSskyqw9ypqE7Dz3WxL3e8puFsWBkUsz+WOCjXh4B4Xljn88Ucxxv5HA==", + "dependencies": { + "@babel/runtime": "^7.19.0", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.0", + "@mui/utils": "^5.10.6", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/base/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/@mui/core-downloads-tracker": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.8.tgz", + "integrity": "sha512-V5D7OInO4P9PdT/JACg7fwjbOORm3GklaMVgdGomjyxiyetgRND5CC9r35e1LK/DqHdoyDuhbFzdfrqWtpmEIw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, + "node_modules/@mui/material": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.8.tgz", + "integrity": "sha512-sF/Ka0IJjGXV52zoT4xAWEqXVRjNYbIjATo9L4Q5oQC5iJpGrKJFY16uNtWWB0+vp/nayAuPGZHrxtV+t3ecdQ==", + "dependencies": { + "@babel/runtime": "^7.19.0", + "@mui/base": "5.0.0-alpha.100", + "@mui/core-downloads-tracker": "^5.10.8", + "@mui/system": "^5.10.8", + "@mui/types": "^7.2.0", + "@mui/utils": "^5.10.6", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/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/@mui/private-theming": { + "version": "5.10.6", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.6.tgz", + "integrity": "sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==", + "dependencies": { + "@babel/runtime": "^7.19.0", + "@mui/utils": "^5.10.6", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.8.tgz", + "integrity": "sha512-w+y8WI18EJV6zM/q41ug19cE70JTeO6sWFsQ7tgePQFpy6ToCVPh0YLrtqxUZXSoMStW5FMw0t9fHTFAqPbngw==", + "dependencies": { + "@babel/runtime": "^7.19.0", + "@emotion/cache": "^11.10.3", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.8.tgz", + "integrity": "sha512-hRQ354zcrYP/KHqK8FheICSvE9raQaUgQaV+A3oD4JETaFUCVI9Ytt+RcQYgTqx02xlCXIjl8LK1rPjTneySqw==", + "dependencies": { + "@babel/runtime": "^7.19.0", + "@mui/private-theming": "^5.10.6", + "@mui/styled-engine": "^5.10.8", + "@mui/types": "^7.2.0", + "@mui/utils": "^5.10.6", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz", + "integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==", + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.10.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.6.tgz", + "integrity": "sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==", + "dependencies": { + "@babel/runtime": "^7.19.0", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@mui/utils/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/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2866,6 +3271,15 @@ } } }, + "node_modules/@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -3387,6 +3801,11 @@ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==" }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, "node_modules/@types/q": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", @@ -3402,6 +3821,32 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "node_modules/@types/react": { + "version": "18.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", + "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-is": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", + "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -3415,6 +3860,11 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -4635,6 +5085,24 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "node_modules/bootstrap": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.2.tgz", + "integrity": "sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.6" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4920,6 +5388,14 @@ "wrap-ansi": "^7.0.0" } }, + "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/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -5586,6 +6062,11 @@ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -5829,6 +6310,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", @@ -7138,6 +7628,11 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -7705,6 +8200,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", @@ -13184,6 +13692,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/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -14246,6 +14769,11 @@ "postcss": "^8.2.15" } }, + "node_modules/stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -16124,9 +16652,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" }, "@babel/helper-remap-async-to-generator": { "version": "7.16.8", @@ -16475,11 +17003,11 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -17044,9 +17572,9 @@ } }, "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", + "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -17187,6 +17715,133 @@ "integrity": "sha512-T5ZyNSw9G0x0UDFiXV40a7VjKw2b+l4G+S0sctKqxhx8cg9QtMUAGwJBVU9mHPDPoZEmwm0tEoukjl4zb9MU7Q==", "requires": {} }, + "@emotion/babel-plugin": { + "version": "11.10.2", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz", + "integrity": "sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.0", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.0.13" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "@emotion/cache": { + "version": "11.10.3", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz", + "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==", + "requires": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.0.13" + } + }, + "@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "requires": { + "@emotion/memoize": "^0.8.0" + } + }, + "@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "@emotion/react": { + "version": "11.10.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz", + "integrity": "sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.0", + "@emotion/cache": "^11.10.0", + "@emotion/serialize": "^1.1.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", + "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", + "requires": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz", + "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" + }, + "@emotion/styled": { + "version": "11.10.4", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.4.tgz", + "integrity": "sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.0", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + } + }, + "@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, "@eslint/eslintrc": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", @@ -17231,6 +17886,11 @@ } } }, + "@font/nunito": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@font/nunito/-/nunito-1.0.3.tgz", + "integrity": "sha512-RMctdzfEvYwRkh4jHPqYGkrlSSaeuldoN7aS7dMcmCthcAgFM/SLNHzQ/1uvWpPFAVpCQ4qtdco0b4DBn0HbAA==" + }, "@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -17771,6 +18431,120 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==" }, + "@mui/base": { + "version": "5.0.0-alpha.100", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.100.tgz", + "integrity": "sha512-bSoJEKCENtmJrJDECHUe9PiqztIUACuSskyqw9ypqE7Dz3WxL3e8puFsWBkUsz+WOCjXh4B4Xljn88Ucxxv5HA==", + "requires": { + "@babel/runtime": "^7.19.0", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.0", + "@mui/utils": "^5.10.6", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@mui/core-downloads-tracker": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.8.tgz", + "integrity": "sha512-V5D7OInO4P9PdT/JACg7fwjbOORm3GklaMVgdGomjyxiyetgRND5CC9r35e1LK/DqHdoyDuhbFzdfrqWtpmEIw==" + }, + "@mui/material": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.8.tgz", + "integrity": "sha512-sF/Ka0IJjGXV52zoT4xAWEqXVRjNYbIjATo9L4Q5oQC5iJpGrKJFY16uNtWWB0+vp/nayAuPGZHrxtV+t3ecdQ==", + "requires": { + "@babel/runtime": "^7.19.0", + "@mui/base": "5.0.0-alpha.100", + "@mui/core-downloads-tracker": "^5.10.8", + "@mui/system": "^5.10.8", + "@mui/types": "^7.2.0", + "@mui/utils": "^5.10.6", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@mui/private-theming": { + "version": "5.10.6", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.6.tgz", + "integrity": "sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==", + "requires": { + "@babel/runtime": "^7.19.0", + "@mui/utils": "^5.10.6", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.8.tgz", + "integrity": "sha512-w+y8WI18EJV6zM/q41ug19cE70JTeO6sWFsQ7tgePQFpy6ToCVPh0YLrtqxUZXSoMStW5FMw0t9fHTFAqPbngw==", + "requires": { + "@babel/runtime": "^7.19.0", + "@emotion/cache": "^11.10.3", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.10.8", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.8.tgz", + "integrity": "sha512-hRQ354zcrYP/KHqK8FheICSvE9raQaUgQaV+A3oD4JETaFUCVI9Ytt+RcQYgTqx02xlCXIjl8LK1rPjTneySqw==", + "requires": { + "@babel/runtime": "^7.19.0", + "@mui/private-theming": "^5.10.6", + "@mui/styled-engine": "^5.10.8", + "@mui/types": "^7.2.0", + "@mui/utils": "^5.10.6", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz", + "integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==", + "requires": {} + }, + "@mui/utils": { + "version": "5.10.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.6.tgz", + "integrity": "sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==", + "requires": { + "@babel/runtime": "^7.19.0", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -17810,6 +18584,11 @@ "source-map": "^0.7.3" } }, + "@popperjs/core": { + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" + }, "@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -18201,6 +18980,11 @@ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==" }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, "@types/q": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", @@ -18216,6 +19000,32 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "@types/react": { + "version": "18.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", + "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-is": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", + "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "requires": { + "@types/react": "*" + } + }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -18229,6 +19039,11 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, "@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -19142,6 +19957,12 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "bootstrap": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.2.tgz", + "integrity": "sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ==", + "requires": {} + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -19343,6 +20164,11 @@ "wrap-ansi": "^7.0.0" } }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -19809,6 +20635,11 @@ } } }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -19990,6 +20821,15 @@ "utila": "~0.4" } }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -20961,6 +21801,11 @@ "pkg-dir": "^4.1.0" } }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -21341,6 +22186,21 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, + "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==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "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==" + } + } + }, "hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -25174,6 +26034,17 @@ "workbox-webpack-plugin": "^6.4.1" } }, + "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==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -25955,6 +26826,11 @@ "postcss-selector-parser": "^6.0.4" } }, + "stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", diff --git a/package.json b/package.json index a100866d..af58ae67 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,11 @@ "version": "0.1.0", "private": true, "dependencies": { + "@emotion/react": "^11.10.4", + "@emotion/styled": "^11.10.4", + "@font/nunito": "^1.0.3", + "@mui/material": "^5.10.8", + "bootstrap": "^5.2.2", "react": "^18.1.0", "react-dom": "^18.1.0", "react-scripts": "5.0.1" diff --git a/src/App.css b/src/App.css index 97b7c578..f54fedb3 100644 --- a/src/App.css +++ b/src/App.css @@ -1,5 +1,9 @@ +@import "@font/nunito"; + .App { text-align: center; + font-family: var(--fontFamily-nunito); + background-color: #fae8e0; } .App-logo { @@ -8,12 +12,16 @@ } .App-header { - background-color: #282c34; + background-color: #fae8e0; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; - font-size: calc(10px + 2vmin); color: white; } + +.App-name { + font-size: calc(20px + 10vmin); + color: #EF7C8E +} diff --git a/src/App.js b/src/App.js index 4a6f800f..55fb6eee 100644 --- a/src/App.js +++ b/src/App.js @@ -1,20 +1,19 @@ -import React from "react"; -import logo from "./logo.png"; +import React, {useState, useEffect} from "react"; +import appicon from "./appicon.png"; import "./App.css"; -class App extends React.Component { - render() { +function App (){ + return (
- logo -

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

+
+ Aime +
+ app-icon
); - } } export default App; diff --git a/src/appicon.png b/src/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..7f8d4cd380bb03b0ccd90157c96f4402615d5a61 GIT binary patch literal 7848 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 From 33cd450d6de59e7ed82f9feba2a254e86db2506c Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Mon, 10 Oct 2022 16:53:27 +0800 Subject: [PATCH 02/25] Commit 2 - Base File Structure, Router Setup --- package-lock.json | 245 ++++++++++++++++++++++++--------- package.json | 4 + src/App.js | 49 +++++-- src/components /BackButton.jsx | 10 ++ src/components /Button.jsx | 9 ++ src/components /Calendar.jsx | 7 + src/components /Clock.jsx | 9 ++ src/components /Graph.jsx | 9 ++ src/components /NavBar.jsx | 10 ++ src/components /index.jsx | 9 ++ src/{ => data}/appicon.png | Bin src/index.css | 6 + src/pages/Alert.jsx | 9 ++ src/pages/Home.jsx | 9 ++ src/pages/Log.jsx | 9 ++ src/pages/Login.jsx | 7 + src/pages/Medicine.jsx | 9 ++ src/pages/Mood.jsx | 9 ++ src/pages/Notification.jsx | 9 ++ src/pages/Profile.jsx | 9 ++ src/pages/Registration.jsx | 9 ++ src/pages/Start.jsx | 24 ++++ src/pages/index.jsx | 10 ++ tailwind.config.js | 43 ++++++ 24 files changed, 448 insertions(+), 75 deletions(-) create mode 100644 src/components /BackButton.jsx create mode 100644 src/components /Button.jsx create mode 100644 src/components /Calendar.jsx create mode 100644 src/components /Clock.jsx create mode 100644 src/components /Graph.jsx create mode 100644 src/components /NavBar.jsx create mode 100644 src/components /index.jsx rename src/{ => data}/appicon.png (100%) create mode 100644 src/pages/Alert.jsx create mode 100644 src/pages/Home.jsx create mode 100644 src/pages/Log.jsx create mode 100644 src/pages/Login.jsx create mode 100644 src/pages/Medicine.jsx create mode 100644 src/pages/Mood.jsx create mode 100644 src/pages/Notification.jsx create mode 100644 src/pages/Profile.jsx create mode 100644 src/pages/Registration.jsx create mode 100644 src/pages/Start.jsx create mode 100644 src/pages/index.jsx create mode 100644 tailwind.config.js diff --git a/package-lock.json b/package-lock.json index bdf40bf1..5f342722 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,11 @@ "bootstrap": "^5.2.2", "react": "^18.1.0", "react-dom": "^18.1.0", + "react-router-dom": "^6.4.2", "react-scripts": "5.0.1" + }, + "devDependencies": { + "tailwindcss": "^3.1.8" } }, "node_modules/@ampproject/remapping": { @@ -3280,6 +3284,14 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@remix-run/router": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.2.tgz", + "integrity": "sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ==", + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -4516,9 +4528,9 @@ } }, "node_modules/arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "1.0.10", @@ -6161,7 +6173,7 @@ "node_modules/defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" }, "node_modules/delayed-stream": { "version": "1.0.0", @@ -6231,13 +6243,13 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dependencies": { - "acorn-node": "^1.6.1", + "acorn-node": "^1.8.2", "defined": "^1.0.0", - "minimist": "^1.1.1" + "minimist": "^1.2.6" }, "bin": { "detective": "bin/detective.js" @@ -11137,9 +11149,9 @@ } }, "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "engines": { "node": ">=10" } @@ -11499,9 +11511,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11978,6 +11990,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -12134,9 +12154,9 @@ } }, "node_modules/postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", "funding": [ { "type": "opencollective", @@ -12148,7 +12168,7 @@ } ], "dependencies": { - "nanoid": "^3.3.3", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -12477,6 +12497,22 @@ "postcss": "^8.4" } }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, "node_modules/postcss-initial": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", @@ -13620,6 +13656,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.2.tgz", + "integrity": "sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw==", + "dependencies": { + "@remix-run/router": "1.0.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.2.tgz", + "integrity": "sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ==", + "dependencies": { + "@remix-run/router": "1.0.2", + "react-router": "6.4.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -13707,6 +13773,14 @@ "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", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -13896,11 +13970,11 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -14918,31 +14992,32 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "node_modules/tailwindcss": { - "version": "3.0.24", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", - "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", "dependencies": { - "arg": "^5.0.1", + "arg": "^5.0.2", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.0", + "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.11", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", + "lilconfig": "^2.0.6", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", "postcss-nested": "5.0.6", "postcss-selector-parser": "^6.0.10", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.0" + "resolve": "^1.22.1" }, "bin": { "tailwind": "lib/cli.js", @@ -18589,6 +18664,11 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, + "@remix-run/router": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.2.tgz", + "integrity": "sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ==" + }, "@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -19522,9 +19602,9 @@ } }, "arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "argparse": { "version": "1.0.10", @@ -20708,7 +20788,7 @@ "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" }, "delayed-stream": { "version": "1.0.0", @@ -20760,13 +20840,13 @@ } }, "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "requires": { - "acorn-node": "^1.6.1", + "acorn-node": "^1.8.2", "defined": "^1.0.0", - "minimist": "^1.1.1" + "minimist": "^1.2.6" } }, "didyoumean": { @@ -24317,9 +24397,9 @@ } }, "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" }, "lines-and-columns": { "version": "1.2.4", @@ -24590,9 +24670,9 @@ } }, "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "natural-compare": { "version": "1.4.0", @@ -24928,6 +25008,11 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -25045,11 +25130,11 @@ } }, "postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", "requires": { - "nanoid": "^3.3.3", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -25241,6 +25326,16 @@ "postcss-value-parser": "^4.2.0" } }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, "postcss-initial": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", @@ -25979,6 +26074,23 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" }, + "react-router": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.2.tgz", + "integrity": "sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw==", + "requires": { + "@remix-run/router": "1.0.2" + } + }, + "react-router-dom": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.2.tgz", + "integrity": "sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ==", + "requires": { + "@remix-run/router": "1.0.2", + "react-router": "6.4.2" + } + }, "react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -26045,6 +26157,14 @@ "prop-types": "^15.6.2" } }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "requires": { + "pify": "^2.3.0" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -26193,11 +26313,11 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -26950,31 +27070,32 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "tailwindcss": { - "version": "3.0.24", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", - "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", "requires": { - "arg": "^5.0.1", + "arg": "^5.0.2", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.0", + "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.2.11", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", + "lilconfig": "^2.0.6", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", "postcss-nested": "5.0.6", "postcss-selector-parser": "^6.0.10", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.0" + "resolve": "^1.22.1" }, "dependencies": { "color-name": { diff --git a/package.json b/package.json index af58ae67..a08ae646 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "bootstrap": "^5.2.2", "react": "^18.1.0", "react-dom": "^18.1.0", + "react-router-dom": "^6.4.2", "react-scripts": "5.0.1" }, "scripts": { @@ -32,5 +33,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "tailwindcss": "^3.1.8" } } diff --git a/src/App.js b/src/App.js index 55fb6eee..4ec4ddcc 100644 --- a/src/App.js +++ b/src/App.js @@ -1,19 +1,42 @@ -import React, {useState, useEffect} from "react"; -import appicon from "./appicon.png"; +import React, { useState, useEffect } from "react"; +import { BrowserRouter, Routes, Route } from "react-router-dom"; +import { + Alert, + Home, + Log, + Login, + Medicine, + Mood, + Notification, + Profile, + Registration, + Start, +} from "./pages"; import "./App.css"; -function App (){ +function App() { + const [state, setState] = useState() - return ( -
-
-
- Aime -
- app-icon -
-
- ); + return ( +
+ +
+ + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + +
+
+
+ ); } export default App; diff --git a/src/components /BackButton.jsx b/src/components /BackButton.jsx new file mode 100644 index 00000000..92f77e5d --- /dev/null +++ b/src/components /BackButton.jsx @@ -0,0 +1,10 @@ +import React from 'react' +import { Link, NavLink } from "react-router-dom"; + +const BackButton = () => { + return ( +
BackButton
+ ) +} + +export default BackButton \ No newline at end of file diff --git a/src/components /Button.jsx b/src/components /Button.jsx new file mode 100644 index 00000000..bb79ee48 --- /dev/null +++ b/src/components /Button.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Button = () => { + return ( +
Button
+ ) +} + +export default Button \ No newline at end of file diff --git a/src/components /Calendar.jsx b/src/components /Calendar.jsx new file mode 100644 index 00000000..40fb9cb7 --- /dev/null +++ b/src/components /Calendar.jsx @@ -0,0 +1,7 @@ +import React from "react"; + +const Calendar = () => { + return
Calendar
; +}; + +export default Calendar; diff --git a/src/components /Clock.jsx b/src/components /Clock.jsx new file mode 100644 index 00000000..5257ded2 --- /dev/null +++ b/src/components /Clock.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Clock = () => { + return ( +
Clock
+ ) +} + +export default Clock \ No newline at end of file diff --git a/src/components /Graph.jsx b/src/components /Graph.jsx new file mode 100644 index 00000000..e39d6b37 --- /dev/null +++ b/src/components /Graph.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Graph = () => { + return ( +
Graph
+ ) +} + +export default Graph \ No newline at end of file diff --git a/src/components /NavBar.jsx b/src/components /NavBar.jsx new file mode 100644 index 00000000..85cb8dc1 --- /dev/null +++ b/src/components /NavBar.jsx @@ -0,0 +1,10 @@ +import React from 'react' +import { Link, NavLink } from "react-router-dom"; + +const NavBar = () => { + return ( +
NavBar
+ ) +} + +export default NavBar \ No newline at end of file diff --git a/src/components /index.jsx b/src/components /index.jsx new file mode 100644 index 00000000..d84ca506 --- /dev/null +++ b/src/components /index.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const index = () => { + return ( +
index
+ ) +} + +export default index \ No newline at end of file diff --git a/src/appicon.png b/src/data/appicon.png similarity index 100% rename from src/appicon.png rename to src/data/appicon.png diff --git a/src/index.css b/src/index.css index 4a1df4db..26173770 100644 --- a/src/index.css +++ b/src/index.css @@ -1,3 +1,5 @@ +@import "@font/nunito"; + body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", @@ -11,3 +13,7 @@ code { font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; } + +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/src/pages/Alert.jsx b/src/pages/Alert.jsx new file mode 100644 index 00000000..f4c6795b --- /dev/null +++ b/src/pages/Alert.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Alert = () => { + return ( +
Alert
+ ) +} + +export default Alert \ No newline at end of file diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx new file mode 100644 index 00000000..96c55357 --- /dev/null +++ b/src/pages/Home.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Home = () => { + return ( +
Home
+ ) +} + +export default Home \ No newline at end of file diff --git a/src/pages/Log.jsx b/src/pages/Log.jsx new file mode 100644 index 00000000..8f8c725c --- /dev/null +++ b/src/pages/Log.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Log = () => { + return ( +
Log
+ ) +} + +export default Log \ No newline at end of file diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx new file mode 100644 index 00000000..2ed8e1dc --- /dev/null +++ b/src/pages/Login.jsx @@ -0,0 +1,7 @@ +import React from "react"; + +const Login = () => { + return
Login
; +}; + +export default Login; diff --git a/src/pages/Medicine.jsx b/src/pages/Medicine.jsx new file mode 100644 index 00000000..984df145 --- /dev/null +++ b/src/pages/Medicine.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Medicine = () => { + return ( +
Medicine
+ ) +} + +export default Medicine \ No newline at end of file diff --git a/src/pages/Mood.jsx b/src/pages/Mood.jsx new file mode 100644 index 00000000..cef93502 --- /dev/null +++ b/src/pages/Mood.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Mood = () => { + return ( +
Mood
+ ) +} + +export default Mood \ No newline at end of file diff --git a/src/pages/Notification.jsx b/src/pages/Notification.jsx new file mode 100644 index 00000000..06c2ca4b --- /dev/null +++ b/src/pages/Notification.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Notification = () => { + return ( +
Notification
+ ) +} + +export default Notification \ No newline at end of file diff --git a/src/pages/Profile.jsx b/src/pages/Profile.jsx new file mode 100644 index 00000000..f52d50dd --- /dev/null +++ b/src/pages/Profile.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Profile = () => { + return ( +
Profile
+ ) +} + +export default Profile \ No newline at end of file diff --git a/src/pages/Registration.jsx b/src/pages/Registration.jsx new file mode 100644 index 00000000..f443298f --- /dev/null +++ b/src/pages/Registration.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Registration = () => { + return ( +
Registration
+ ) +} + +export default Registration \ No newline at end of file diff --git a/src/pages/Start.jsx b/src/pages/Start.jsx new file mode 100644 index 00000000..cd2671bf --- /dev/null +++ b/src/pages/Start.jsx @@ -0,0 +1,24 @@ +import React, { useState, useEffect } from "react"; +import { Navigate } from "react-router-dom"; +import appicon from "../data/appicon.png"; + +const Start = () => { + const [start, setStart] = useState(false); + useEffect(() => { + setTimeout(() => { + setStart(true); + }, 3000); + }, [start]); + + return ( +
+
+
Aime
+ app-icon +
+ {start && } +
+ ); +}; + +export default Start; diff --git a/src/pages/index.jsx b/src/pages/index.jsx new file mode 100644 index 00000000..0818391b --- /dev/null +++ b/src/pages/index.jsx @@ -0,0 +1,10 @@ +export { default as Alert } from "./Alert"; +export { default as Home } from "./Home"; +export { default as Log } from "./Log"; +export { default as Login } from "./Login"; +export { default as Medicine } from "./Medicine"; +export { default as Mood } from "./Mood"; +export { default as Notification } from "./Notification"; +export { default as Profile } from "./Profile"; +export { default as Registration } from "./Registration"; +export { default as Start } from "./Start"; diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 00000000..e1ba0309 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,43 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.{js,jsx,ts,tsx}"], + theme: { + fontFamily: { + display: ["nunito"], + body: ["nunito"], + }, + extend: { + fontSize: { + 14: "14px", + }, + backgroundColor: { + "main-bg": "#FAE8E0", + "secondary-white-bg": "#FAFBFB", + "light-gray": "#F7F7F7", + "half-transparent": "rgba(0, 0, 0, 0.5)", + }, + borderWidth: { + 1: "1px", + }, + borderColor: { + color: "rgba(0, 0, 0, 0.1)", + }, + width: { + 400: "400px", + 760: "760px", + 780: "780px", + 800: "800px", + 1000: "1000px", + 1200: "1200px", + 1400: "1400px", + }, + height: { + 80: "80px", + }, + minHeight: { + 590: "590px", + }, + }, + }, + plugins: [], +}; From 34eaa452fd3aa23646f291eb8c1cac55c521d924 Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Tue, 11 Oct 2022 02:23:15 +0800 Subject: [PATCH 03/25] Commit 3 - Welcome Page, Added Button Component --- src/App.css | 10 ++++++++++ src/App.js | 7 +++++-- src/components /Button.jsx | 20 ++++++++++++++------ src/components /NavBar.jsx | 10 ++++------ src/components /index.jsx | 15 ++++++--------- src/pages/Alert.jsx | 10 ++++++++-- src/pages/Home.jsx | 10 ++++++++-- src/pages/Log.jsx | 10 ++++++++-- src/pages/Login.jsx | 16 ++++++++++++++-- src/pages/Medicine.jsx | 10 ++++++++-- src/pages/Mood.jsx | 10 ++++++++-- src/pages/Notification.jsx | 10 ++++++++-- src/pages/Profile.jsx | 10 ++++++++-- src/pages/Registration.jsx | 18 +++++++++++++----- src/pages/Start.jsx | 2 +- src/pages/Welcome.jsx | 25 +++++++++++++++++++++++++ src/pages/index.jsx | 3 ++- tailwind.config.js | 3 +++ 18 files changed, 153 insertions(+), 46 deletions(-) create mode 100644 src/pages/Welcome.jsx diff --git a/src/App.css b/src/App.css index f54fedb3..5d5dd61e 100644 --- a/src/App.css +++ b/src/App.css @@ -25,3 +25,13 @@ font-size: calc(20px + 10vmin); color: #EF7C8E } + +.base-container { + background-color: #fae8e0; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + color: white; +} diff --git a/src/App.js b/src/App.js index 4ec4ddcc..7e04a2dd 100644 --- a/src/App.js +++ b/src/App.js @@ -4,18 +4,20 @@ import { Alert, Home, Log, - Login, + Welcome, Medicine, Mood, Notification, Profile, Registration, Start, + Login, } from "./pages"; + import "./App.css"; function App() { - const [state, setState] = useState() + const [state, setState] = useState(); return (
@@ -23,6 +25,7 @@ function App() {
} /> + } /> } /> } /> } /> diff --git a/src/components /Button.jsx b/src/components /Button.jsx index bb79ee48..9d6b5b0f 100644 --- a/src/components /Button.jsx +++ b/src/components /Button.jsx @@ -1,9 +1,17 @@ -import React from 'react' +import React, { useState } from "react"; + +const Button = (props) => { + const [isClicked, setIsClicked] = useState(false); -const Button = () => { return ( -
Button
- ) -} + + ); +}; -export default Button \ No newline at end of file +export default Button; diff --git a/src/components /NavBar.jsx b/src/components /NavBar.jsx index 85cb8dc1..b7459d18 100644 --- a/src/components /NavBar.jsx +++ b/src/components /NavBar.jsx @@ -1,10 +1,8 @@ -import React from 'react' +import React from "react"; import { Link, NavLink } from "react-router-dom"; const NavBar = () => { - return ( -
NavBar
- ) -} + return
NavBar
; +}; -export default NavBar \ No newline at end of file +export default NavBar; diff --git a/src/components /index.jsx b/src/components /index.jsx index d84ca506..db78fb40 100644 --- a/src/components /index.jsx +++ b/src/components /index.jsx @@ -1,9 +1,6 @@ -import React from 'react' - -const index = () => { - return ( -
index
- ) -} - -export default index \ No newline at end of file +export { default as Button } from "./Button"; +export { default as BackButton } from "./BackButton"; +export { default as Calendar } from "./Calendar"; +export { default as Clock } from "./Clock"; +export { default as Graph } from "./Graph"; +export { default as NavBar } from "./NavBar"; diff --git a/src/pages/Alert.jsx b/src/pages/Alert.jsx index f4c6795b..293123e5 100644 --- a/src/pages/Alert.jsx +++ b/src/pages/Alert.jsx @@ -2,8 +2,14 @@ import React from 'react' const Alert = () => { return ( -
Alert
- ) +
+
+

+ Please choose the following options: +

+
+
+ ); } export default Alert \ No newline at end of file diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx index 96c55357..2ad02996 100644 --- a/src/pages/Home.jsx +++ b/src/pages/Home.jsx @@ -2,8 +2,14 @@ import React from 'react' const Home = () => { return ( -
Home
- ) +
+
+

+ Please choose the following options: +

+
+
+ ); } export default Home \ No newline at end of file diff --git a/src/pages/Log.jsx b/src/pages/Log.jsx index 8f8c725c..29319b59 100644 --- a/src/pages/Log.jsx +++ b/src/pages/Log.jsx @@ -2,8 +2,14 @@ import React from 'react' const Log = () => { return ( -
Log
- ) +
+
+

+ Please choose the following options: +

+
+
+ ); } export default Log \ No newline at end of file diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 2ed8e1dc..29d7cf7b 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -1,7 +1,19 @@ -import React from "react"; +import React, { useState, useEffect } from "react"; +import appicon from "../data/appicon.png"; +import { Button } from "../components "; +import { Link, NavLink } from "react-router-dom"; const Login = () => { - return
Login
; + return ( +
+
+ app-icon +

+ Welcome Back ! +

+
+
+ ); }; export default Login; diff --git a/src/pages/Medicine.jsx b/src/pages/Medicine.jsx index 984df145..b5562c33 100644 --- a/src/pages/Medicine.jsx +++ b/src/pages/Medicine.jsx @@ -2,8 +2,14 @@ import React from 'react' const Medicine = () => { return ( -
Medicine
- ) +
+
+

+ Please choose the following options: +

+
+
+ ); } export default Medicine \ No newline at end of file diff --git a/src/pages/Mood.jsx b/src/pages/Mood.jsx index cef93502..41338016 100644 --- a/src/pages/Mood.jsx +++ b/src/pages/Mood.jsx @@ -2,8 +2,14 @@ import React from 'react' const Mood = () => { return ( -
Mood
- ) +
+
+

+ Please choose the following options: +

+
+
+ ); } export default Mood \ No newline at end of file diff --git a/src/pages/Notification.jsx b/src/pages/Notification.jsx index 06c2ca4b..cf5b28e4 100644 --- a/src/pages/Notification.jsx +++ b/src/pages/Notification.jsx @@ -2,8 +2,14 @@ import React from 'react' const Notification = () => { return ( -
Notification
- ) +
+
+

+ Please choose the following options: +

+
+
+ ); } export default Notification \ No newline at end of file diff --git a/src/pages/Profile.jsx b/src/pages/Profile.jsx index f52d50dd..1a239381 100644 --- a/src/pages/Profile.jsx +++ b/src/pages/Profile.jsx @@ -2,8 +2,14 @@ import React from 'react' const Profile = () => { return ( -
Profile
- ) +
+
+

+ Please choose the following options: +

+
+
+ ); } export default Profile \ No newline at end of file diff --git a/src/pages/Registration.jsx b/src/pages/Registration.jsx index f443298f..4c7ca89e 100644 --- a/src/pages/Registration.jsx +++ b/src/pages/Registration.jsx @@ -1,9 +1,17 @@ -import React from 'react' +import React, { useState, useEffect } from "react"; +import { Button } from "../components "; +import { Link, NavLink } from "react-router-dom"; const Registration = () => { return ( -
Registration
- ) -} +
+
+

+ Please choose the following options: +

+
+
+ ); +}; -export default Registration \ No newline at end of file +export default Registration; diff --git a/src/pages/Start.jsx b/src/pages/Start.jsx index cd2671bf..11f7971a 100644 --- a/src/pages/Start.jsx +++ b/src/pages/Start.jsx @@ -16,7 +16,7 @@ const Start = () => {
Aime
app-icon - {start && } + {start && }
); }; diff --git a/src/pages/Welcome.jsx b/src/pages/Welcome.jsx new file mode 100644 index 00000000..519935c2 --- /dev/null +++ b/src/pages/Welcome.jsx @@ -0,0 +1,25 @@ +import React, { useState, useEffect } from "react"; +import appicon from "../data/appicon.png"; +import { Button } from "../components "; +import { Link, NavLink } from "react-router-dom"; + +const Welcome = () => { + return ( +
+
+ app-icon +

+ Please choose the following options: +

+ +
+
+ ); +}; + +export default Welcome; diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 0818391b..f17d39d8 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -1,10 +1,11 @@ export { default as Alert } from "./Alert"; export { default as Home } from "./Home"; export { default as Log } from "./Log"; -export { default as Login } from "./Login"; +export { default as Welcome } from "./Welcome"; export { default as Medicine } from "./Medicine"; export { default as Mood } from "./Mood"; export { default as Notification } from "./Notification"; export { default as Profile } from "./Profile"; export { default as Registration } from "./Registration"; export { default as Start } from "./Start"; +export { default as Login } from "./Login"; diff --git a/tailwind.config.js b/tailwind.config.js index e1ba0309..68bee4ff 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -37,6 +37,9 @@ module.exports = { minHeight: { 590: "590px", }, + colors: { + "dark-pink": "#EF7C8E", + }, }, }, plugins: [], From 37c0e544cabb69f9b208c9de170cd256529c0aae Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Tue, 11 Oct 2022 21:56:06 +0800 Subject: [PATCH 04/25] Commit 4 - Added More Pages, Alert Button, Back Button --- package-lock.json | 15 +++ package.json | 1 + src/App.css | 2 + src/App.js | 2 - src/components /AlertButton.jsx | 21 +++ src/components /BackButton.jsx | 21 ++- src/components /Form.jsx | 225 ++++++++++++++++++++++++++++++++ src/components /index.jsx | 2 + src/pages/Alert.jsx | 11 +- src/pages/Login.jsx | 33 ++++- src/pages/Profile.jsx | 18 ++- src/pages/Registration.jsx | 16 ++- tailwind.config.js | 1 + 13 files changed, 344 insertions(+), 24 deletions(-) create mode 100644 src/components /AlertButton.jsx create mode 100644 src/components /Form.jsx diff --git a/package-lock.json b/package-lock.json index 5f342722..0233aea6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "bootstrap": "^5.2.2", "react": "^18.1.0", "react-dom": "^18.1.0", + "react-icons": "^4.4.0", "react-router-dom": "^6.4.2", "react-scripts": "5.0.1" }, @@ -13643,6 +13644,14 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "node_modules/react-icons": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz", + "integrity": "sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -26064,6 +26073,12 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "react-icons": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz", + "integrity": "sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==", + "requires": {} + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", diff --git a/package.json b/package.json index a08ae646..ec216867 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "bootstrap": "^5.2.2", "react": "^18.1.0", "react-dom": "^18.1.0", + "react-icons": "^4.4.0", "react-router-dom": "^6.4.2", "react-scripts": "5.0.1" }, diff --git a/src/App.css b/src/App.css index 5d5dd61e..61e80629 100644 --- a/src/App.css +++ b/src/App.css @@ -35,3 +35,5 @@ justify-content: center; color: white; } + + diff --git a/src/App.js b/src/App.js index 7e04a2dd..e3a6bb28 100644 --- a/src/App.js +++ b/src/App.js @@ -17,8 +17,6 @@ import { import "./App.css"; function App() { - const [state, setState] = useState(); - return (
diff --git a/src/components /AlertButton.jsx b/src/components /AlertButton.jsx new file mode 100644 index 00000000..3bb77a3d --- /dev/null +++ b/src/components /AlertButton.jsx @@ -0,0 +1,21 @@ +import React, { useState } from "react"; +import { Link, NavLink } from "react-router-dom"; +import { BsExclamationDiamond } from "react-icons/bs"; + +const AlertButton = () => { + const [isClicked, setIsClicked] = useState(false); + + return ( + + + + ); +}; + +export default AlertButton; diff --git a/src/components /BackButton.jsx b/src/components /BackButton.jsx index 92f77e5d..8ef47d14 100644 --- a/src/components /BackButton.jsx +++ b/src/components /BackButton.jsx @@ -1,10 +1,21 @@ -import React from 'react' +import React, { useState } from "react"; import { Link, NavLink } from "react-router-dom"; +import { BsArrowLeftCircle } from "react-icons/bs"; const BackButton = () => { + const [isClicked, setIsClicked] = useState(false); + return ( -
BackButton
- ) -} + + + + ); +}; -export default BackButton \ No newline at end of file +export default BackButton; diff --git a/src/components /Form.jsx b/src/components /Form.jsx new file mode 100644 index 00000000..8727cd3d --- /dev/null +++ b/src/components /Form.jsx @@ -0,0 +1,225 @@ +import React, { useState } from "react"; + +const Form = () => { + const [name, setName] = useState(""); + const [age, setAge] = useState(""); + const [weight, setWeight] = useState(""); + const [bloodType, setBloodType] = useState(""); + const [medicalConditions, setMedicalConditions] = useState(""); + const [allergies, setAllergies] = useState(""); + const [phone, setPhone] = useState(""); + const [email, setEmail] = useState(""); + const [emer1Name, setEmer1Name] = useState(""); + const [emer1Phone, setEmer1Phone] = useState(""); + const [emer1Email, setEmer1Email] = useState(""); + const [emer2Name, setEmer2Name] = useState(""); + const [emer2Phone, setEmer2Phone] = useState(""); + const [emer2Email, setEmer2Email] = useState(""); + const [userName, setUserName] = useState(""); + const [password, setPassword] = useState(""); + + return ( +
+
+ + setName(e.target.value)} + /> + + setAge(e.target.value)} + /> + + setWeight(e.target.value)} + /> + + + + setMedicalConditions(e.target.value)} + /> + + setAllergies(e.target.value)} + /> + + setPhone(e.target.value)} + /> + + setEmail(e.target.value)} + /> + + setEmer1Name(e.target.value)} + /> + + setEmer1Phone(e.target.value)} + /> + + setEmer1Email(e.target.value)} + /> + + setEmer2Name(e.target.value)} + /> + + setEmer2Phone(e.target.value)} + /> + + setEmer2Email(e.target.value)} + /> + + setUserName(e.target.value)} + /> + + setPassword(e.target.value)} + /> +
+

{name}

+

{age}

+

{weight}

+

{bloodType}

+

{medicalConditions}

+

{allergies}

+

{phone}

+

{email}

+

{emer1Name}

+

{emer1Phone}

+

{emer1Email}

+

{emer2Name}

+

{emer2Phone}

+

{emer2Email}

+

{userName}

+

{password}

+
+ ); +}; + +export default Form; diff --git a/src/components /index.jsx b/src/components /index.jsx index db78fb40..5e5abeeb 100644 --- a/src/components /index.jsx +++ b/src/components /index.jsx @@ -4,3 +4,5 @@ export { default as Calendar } from "./Calendar"; export { default as Clock } from "./Clock"; export { default as Graph } from "./Graph"; export { default as NavBar } from "./NavBar"; +export { default as Form } from "./Form"; +export { default as AlertButton } from "./AlertButton"; diff --git a/src/pages/Alert.jsx b/src/pages/Alert.jsx index 293123e5..5e48516c 100644 --- a/src/pages/Alert.jsx +++ b/src/pages/Alert.jsx @@ -1,15 +1,18 @@ -import React from 'react' +import React, { useState, useEffect } from "react"; +import { BackButton, Button, AlertButton } from "../components "; +import { Link, NavLink } from "react-router-dom"; const Alert = () => { return (

- Please choose the following options: + Alert!

+
); -} +}; -export default Alert \ No newline at end of file +export default Alert; diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 29d7cf7b..e5921573 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -4,13 +4,40 @@ import { Button } from "../components "; import { Link, NavLink } from "react-router-dom"; const Login = () => { + const [authUserName, setAuthUserName] = useState(""); + const [authPassword, setAuthPassword] = useState(""); + return (
app-icon -

- Welcome Back ! -

+

Welcome Back !

+
+ + setAuthUserName(e.target.value)} + /> +
+ + setAuthPassword(e.target.value)} + /> +
+ +
); diff --git a/src/pages/Profile.jsx b/src/pages/Profile.jsx index 1a239381..321eae90 100644 --- a/src/pages/Profile.jsx +++ b/src/pages/Profile.jsx @@ -1,15 +1,23 @@ -import React from 'react' +import React, { useState, useEffect } from "react"; +import { BackButton, Button } from "../components "; +import { Form } from "../components "; +import { Link, NavLink } from "react-router-dom"; const Profile = () => { return (
-

- Please choose the following options: + +

+ Profile

+
+ +
); -} +}; -export default Profile \ No newline at end of file +export default Profile; diff --git a/src/pages/Registration.jsx b/src/pages/Registration.jsx index 4c7ca89e..a5a4878c 100644 --- a/src/pages/Registration.jsx +++ b/src/pages/Registration.jsx @@ -1,15 +1,21 @@ import React, { useState, useEffect } from "react"; import { Button } from "../components "; +import { Form } from "../components "; import { Link, NavLink } from "react-router-dom"; const Registration = () => { return (
-
-

- Please choose the following options: -

-
+

+ Welcome +

+

+ Let us know more about you! +

+ + +
); }; diff --git a/tailwind.config.js b/tailwind.config.js index 68bee4ff..b517ec20 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -9,6 +9,7 @@ module.exports = { extend: { fontSize: { 14: "14px", + xxl: "15rem", }, backgroundColor: { "main-bg": "#FAE8E0", From 1981cb78329b90b5d5eeb38d7f433a105b8d29e8 Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Thu, 13 Oct 2022 02:49:24 +0800 Subject: [PATCH 05/25] Commit 5 - Added Mood Page, Resolved Lifting State --- src/App.css | 15 +++--- src/components /BackButton.jsx | 2 +- src/components /Form.jsx | 4 +- src/components /FormMood.jsx | 85 ++++++++++++++++++++++++++++++++++ src/components /index.jsx | 1 + src/pages/Alert.jsx | 16 +++---- src/pages/Login.jsx | 2 - src/pages/Mood.jsx | 59 +++++++++++++++++++---- src/pages/Profile.jsx | 4 +- src/pages/Start.jsx | 4 +- src/pages/Welcome.jsx | 2 - 11 files changed, 157 insertions(+), 37 deletions(-) create mode 100644 src/components /FormMood.jsx diff --git a/src/App.css b/src/App.css index 61e80629..482a92fb 100644 --- a/src/App.css +++ b/src/App.css @@ -11,7 +11,12 @@ pointer-events: none; } -.App-header { +.App-name { + font-size: calc(20px + 10vmin); + color: #EF7C8E +} + +.base-container { background-color: #fae8e0; min-height: 100vh; display: flex; @@ -21,18 +26,12 @@ color: white; } -.App-name { - font-size: calc(20px + 10vmin); - color: #EF7C8E -} - -.base-container { +.base-container-secondary { background-color: #fae8e0; min-height: 100vh; display: flex; flex-direction: column; align-items: center; - justify-content: center; color: white; } diff --git a/src/components /BackButton.jsx b/src/components /BackButton.jsx index 8ef47d14..64018cc7 100644 --- a/src/components /BackButton.jsx +++ b/src/components /BackButton.jsx @@ -10,7 +10,7 @@ const BackButton = () => { diff --git a/src/components /Form.jsx b/src/components /Form.jsx index 8727cd3d..79798e7e 100644 --- a/src/components /Form.jsx +++ b/src/components /Form.jsx @@ -202,7 +202,7 @@ const Form = () => { onChange={(e) => setPassword(e.target.value)} /> -

{name}

+ {/*

{name}

{age}

{weight}

{bloodType}

@@ -217,7 +217,7 @@ const Form = () => {

{emer2Phone}

{emer2Email}

{userName}

-

{password}

+

{password}

*/}
); }; diff --git a/src/components /FormMood.jsx b/src/components /FormMood.jsx new file mode 100644 index 00000000..b4d6dc9e --- /dev/null +++ b/src/components /FormMood.jsx @@ -0,0 +1,85 @@ +import React, { useState } from "react"; +import { + BsEmojiSmile, + BsEmojiExpressionless, + BsEmojiFrown, +} from "react-icons/bs"; + +const FormMood = (props) => { + return ( +
+
+ + + + +
+ How do you feel now? +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ {/*

{props.moodDate}

+

{props.moodTime}

+

{props.mood}

*/} +
+ ); +}; + +export default FormMood; diff --git a/src/components /index.jsx b/src/components /index.jsx index 5e5abeeb..7b590c19 100644 --- a/src/components /index.jsx +++ b/src/components /index.jsx @@ -6,3 +6,4 @@ export { default as Graph } from "./Graph"; export { default as NavBar } from "./NavBar"; export { default as Form } from "./Form"; export { default as AlertButton } from "./AlertButton"; +export { default as FormMood } from "./FormMood"; diff --git a/src/pages/Alert.jsx b/src/pages/Alert.jsx index 5e48516c..b0c1c5bd 100644 --- a/src/pages/Alert.jsx +++ b/src/pages/Alert.jsx @@ -1,16 +1,16 @@ import React, { useState, useEffect } from "react"; import { BackButton, Button, AlertButton } from "../components "; -import { Link, NavLink } from "react-router-dom"; const Alert = () => { return ( -
-
-

- Alert! -

- -
+
+ +

Alert!

+ +

+ Warning: Pressing this button will send an auto WhatsApp message to your + emergency contacts! +

); }; diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index e5921573..63e48017 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -9,7 +9,6 @@ const Login = () => { return (
-
app-icon

Welcome Back !

@@ -38,7 +37,6 @@ const Login = () => {
); }; diff --git a/src/pages/Mood.jsx b/src/pages/Mood.jsx index 41338016..e8f20086 100644 --- a/src/pages/Mood.jsx +++ b/src/pages/Mood.jsx @@ -1,15 +1,56 @@ -import React from 'react' +import React, { useState, useEffect } from "react"; +import { BackButton, Button, FormMood } from "../components "; +import { Link, NavLink } from "react-router-dom"; const Mood = () => { + const [moodDate, setMoodDate] = useState(""); + const [moodTime, setMoodTime] = useState(""); + const [mood, setMood] = useState(""); + const [checked, setChecked] = useState({ + good: false, + neutral: false, + bad: false, + }); + + const changeMood = (e) => { + setChecked(() => { + return { [e.target.value]: true }; + }); + }; + + const handleMoodDateChange = (e) => { + setMoodDate(e.target.value); + }; + + const handleMoodTimeChange = (e) => { + setMoodTime(e.target.value); + }; + + const handleMoodChange = (e) => { + setMood(e.target.value); + }; + return ( -
-
-

- Please choose the following options: -

-
+
+ +

+ Mood +

+ + +
); -} +}; -export default Mood \ No newline at end of file +export default Mood; diff --git a/src/pages/Profile.jsx b/src/pages/Profile.jsx index 321eae90..a499e5bd 100644 --- a/src/pages/Profile.jsx +++ b/src/pages/Profile.jsx @@ -6,8 +6,7 @@ import { Link, NavLink } from "react-router-dom"; const Profile = () => { return (
-
- +

Profile

@@ -15,7 +14,6 @@ const Profile = () => {
); }; diff --git a/src/pages/Start.jsx b/src/pages/Start.jsx index 11f7971a..f0b8bf64 100644 --- a/src/pages/Start.jsx +++ b/src/pages/Start.jsx @@ -12,10 +12,10 @@ const Start = () => { return (
-
+
Aime
app-icon -
+
{start && }
); diff --git a/src/pages/Welcome.jsx b/src/pages/Welcome.jsx index 519935c2..67f57128 100644 --- a/src/pages/Welcome.jsx +++ b/src/pages/Welcome.jsx @@ -6,7 +6,6 @@ import { Link, NavLink } from "react-router-dom"; const Welcome = () => { return (
-
app-icon

Please choose the following options: @@ -17,7 +16,6 @@ const Welcome = () => {

); }; From a4a299f8e5fa27f5e7958a6adf926da1acc6aec1 Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Thu, 13 Oct 2022 20:29:29 +0800 Subject: [PATCH 06/25] Commit 6 - Save data as object from Mood Form, trying local storage --- package-lock.json | 52 +++++++++++++++++++++++++++++++- package.json | 4 ++- src/components /Button.jsx | 4 +-- src/components /FormMedicine.jsx | 9 ++++++ src/components /FormMood.jsx | 5 +++ src/components /index.jsx | 1 + src/pages/Home.jsx | 6 ++-- src/pages/Medicine.jsx | 31 +++++++++++++------ src/pages/Mood.jsx | 36 ++++++++++++++++++++-- 9 files changed, 128 insertions(+), 20 deletions(-) create mode 100644 src/components /FormMedicine.jsx diff --git a/package-lock.json b/package-lock.json index 0233aea6..fa657e38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,11 +13,13 @@ "@font/nunito": "^1.0.3", "@mui/material": "^5.10.8", "bootstrap": "^5.2.2", + "lowdb": "^3.0.0", "react": "^18.1.0", "react-dom": "^18.1.0", "react-icons": "^4.4.0", "react-router-dom": "^6.4.2", - "react-scripts": "5.0.1" + "react-scripts": "5.0.1", + "react-uuid": "^1.0.3" }, "devDependencies": { "tailwindcss": "^3.1.8" @@ -11238,6 +11240,20 @@ "loose-envify": "cli.js" } }, + "node_modules/lowdb": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-3.0.0.tgz", + "integrity": "sha512-9KZRulmIcU8fZuWiaM0d5e2/nPnrFyXkeXVpqT+MJS+vgbgOf1EbtvgQmba8HwUFgDl1oeZR6XqEJnkJmQdKmg==", + "dependencies": { + "steno": "^2.1.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -13782,6 +13798,11 @@ "react-dom": ">=16.6.0" } }, + "node_modules/react-uuid": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-uuid/-/react-uuid-1.0.3.tgz", + "integrity": "sha512-cw6Rr6JphvsdK4xHPGBjKD7XSH6Y6i4NJFWUO3OiDd7NLcR8xVeQ3CfeKm7h+S5tpZZVfbH3Tkrz/ydsIiV8pA==" + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -14657,6 +14678,17 @@ "node": ">= 0.8" } }, + "node_modules/steno": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/steno/-/steno-2.1.0.tgz", + "integrity": "sha512-mauOsiaqTNGFkWqIfwcm3y/fq+qKKaIWf1vf3ocOuTdco9XoHCO2AGF1gFYXuZFSWuP38Q8LBHBGJv2KnJSXyA==", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -24476,6 +24508,14 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lowdb": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-3.0.0.tgz", + "integrity": "sha512-9KZRulmIcU8fZuWiaM0d5e2/nPnrFyXkeXVpqT+MJS+vgbgOf1EbtvgQmba8HwUFgDl1oeZR6XqEJnkJmQdKmg==", + "requires": { + "steno": "^2.1.0" + } + }, "lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -26172,6 +26212,11 @@ "prop-types": "^15.6.2" } }, + "react-uuid": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-uuid/-/react-uuid-1.0.3.tgz", + "integrity": "sha512-cw6Rr6JphvsdK4xHPGBjKD7XSH6Y6i4NJFWUO3OiDd7NLcR8xVeQ3CfeKm7h+S5tpZZVfbH3Tkrz/ydsIiV8pA==" + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -26827,6 +26872,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "steno": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/steno/-/steno-2.1.0.tgz", + "integrity": "sha512-mauOsiaqTNGFkWqIfwcm3y/fq+qKKaIWf1vf3ocOuTdco9XoHCO2AGF1gFYXuZFSWuP38Q8LBHBGJv2KnJSXyA==" + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", diff --git a/package.json b/package.json index ec216867..43bfacb1 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,13 @@ "@font/nunito": "^1.0.3", "@mui/material": "^5.10.8", "bootstrap": "^5.2.2", + "lowdb": "^3.0.0", "react": "^18.1.0", "react-dom": "^18.1.0", "react-icons": "^4.4.0", "react-router-dom": "^6.4.2", - "react-scripts": "5.0.1" + "react-scripts": "5.0.1", + "react-uuid": "^1.0.3" }, "scripts": { "start": "react-scripts start", diff --git a/src/components /Button.jsx b/src/components /Button.jsx index 9d6b5b0f..41a4d610 100644 --- a/src/components /Button.jsx +++ b/src/components /Button.jsx @@ -1,12 +1,10 @@ import React, { useState } from "react"; const Button = (props) => { - const [isClicked, setIsClicked] = useState(false); - return (
); -} +}; -export default Home \ No newline at end of file +export default Home; diff --git a/src/pages/Medicine.jsx b/src/pages/Medicine.jsx index b5562c33..ee5ff436 100644 --- a/src/pages/Medicine.jsx +++ b/src/pages/Medicine.jsx @@ -1,15 +1,28 @@ -import React from 'react' +import React, { useState, useEffect } from "react"; +import { BackButton, FormMedicine } from "../components "; +import { Link, NavLink, Router, useNavigate } from "react-router-dom"; + +const handleSubmit = () => {}; const Medicine = () => { return ( -
-
-

- Please choose the following options: -

-
+
+ +

+ Mood +

+ + + +
); -} +}; -export default Medicine \ No newline at end of file +export default Medicine; diff --git a/src/pages/Mood.jsx b/src/pages/Mood.jsx index e8f20086..302ecb04 100644 --- a/src/pages/Mood.jsx +++ b/src/pages/Mood.jsx @@ -1,6 +1,6 @@ import React, { useState, useEffect } from "react"; import { BackButton, Button, FormMood } from "../components "; -import { Link, NavLink } from "react-router-dom"; +import { Link, NavLink, Router, useNavigate } from "react-router-dom"; const Mood = () => { const [moodDate, setMoodDate] = useState(""); @@ -11,6 +11,17 @@ const Mood = () => { neutral: false, bad: false, }); + const [itemData, setItemData] = useState({}); + + // const navigate = useNavigate(); + + const [data, setData] = useState([ + { + moodData: null, + moodTime: null, + mood: null, + }, + ]); const changeMood = (e) => { setChecked(() => { @@ -20,16 +31,30 @@ const Mood = () => { const handleMoodDateChange = (e) => { setMoodDate(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); }; const handleMoodTimeChange = (e) => { setMoodTime(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); }; const handleMoodChange = (e) => { setMood(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); }; + const handleSubmit = (e) => { + e.preventDefault(); + setData([...data, itemData]); + setItemData({}); + // navigate("/home"); + }; + + useEffect(() => { + localStorage.setItem("data", JSON.stringify(data)); + }, [data]); + return (
@@ -46,8 +71,13 @@ const Mood = () => { onMoodChange={handleMoodChange} onChecked={changeMood} /> - -
); From fcc43163f5cdc90fe4dcf668ed62ae0de779aa3b Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Fri, 14 Oct 2022 02:56:36 +0800 Subject: [PATCH 07/25] Commit 7 - Added Medicine Form --- src/components /AlertButton.jsx | 6 +- src/components /FormMedicine.jsx | 141 +++++++++++++++++++++++++++++-- src/pages/Medicine.jsx | 109 +++++++++++++++++++++++- 3 files changed, 243 insertions(+), 13 deletions(-) diff --git a/src/components /AlertButton.jsx b/src/components /AlertButton.jsx index 3bb77a3d..5b908bac 100644 --- a/src/components /AlertButton.jsx +++ b/src/components /AlertButton.jsx @@ -2,14 +2,12 @@ import React, { useState } from "react"; import { Link, NavLink } from "react-router-dom"; import { BsExclamationDiamond } from "react-icons/bs"; -const AlertButton = () => { - const [isClicked, setIsClicked] = useState(false); - +const AlertButton = (props) => { return ( + {/*

{logDate}

*/}
); -} +}; -export default Log \ No newline at end of file +export default Log; diff --git a/src/pages/Medicine.jsx b/src/pages/Medicine.jsx index 23c629ba..5ae15537 100644 --- a/src/pages/Medicine.jsx +++ b/src/pages/Medicine.jsx @@ -1,7 +1,6 @@ import React, { useState, useEffect } from "react"; import { BackButton, FormMedicine } from "../components "; import { Link, NavLink, Router, useNavigate } from "react-router-dom"; -import { getBottomNavigationUtilityClass } from "@mui/material"; const Medicine = () => { const [medicineName, setMedicineName] = useState(""); diff --git a/src/pages/Profile.jsx b/src/pages/Profile.jsx index a499e5bd..8833d27a 100644 --- a/src/pages/Profile.jsx +++ b/src/pages/Profile.jsx @@ -1,19 +1,23 @@ import React, { useState, useEffect } from "react"; -import { BackButton, Button } from "../components "; -import { Form } from "../components "; +import { BackButton, Form, Button } from "../components "; import { Link, NavLink } from "react-router-dom"; const Profile = () => { return (
-

- Profile -

-
- - + + +
); }; From c507a01a1808c8c7f468251db69773ec898a5c43 Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Sat, 15 Oct 2022 00:49:23 +0800 Subject: [PATCH 09/25] Commit 9 - Base Version without DB and calendar/ graph complete --- src/components /Button.jsx | 2 +- src/components /Form.jsx | 139 ++++++++++++++-------------- src/pages/Profile.jsx | 180 +++++++++++++++++++++++++++++++++++-- src/pages/Registration.jsx | 177 +++++++++++++++++++++++++++++++++++- 4 files changed, 411 insertions(+), 87 deletions(-) diff --git a/src/components /Button.jsx b/src/components /Button.jsx index 41a4d610..54eca067 100644 --- a/src/components /Button.jsx +++ b/src/components /Button.jsx @@ -5,7 +5,7 @@ const Button = (props) => { diff --git a/src/components /Form.jsx b/src/components /Form.jsx index 79798e7e..9c9b1d0b 100644 --- a/src/components /Form.jsx +++ b/src/components /Form.jsx @@ -1,23 +1,6 @@ import React, { useState } from "react"; -const Form = () => { - const [name, setName] = useState(""); - const [age, setAge] = useState(""); - const [weight, setWeight] = useState(""); - const [bloodType, setBloodType] = useState(""); - const [medicalConditions, setMedicalConditions] = useState(""); - const [allergies, setAllergies] = useState(""); - const [phone, setPhone] = useState(""); - const [email, setEmail] = useState(""); - const [emer1Name, setEmer1Name] = useState(""); - const [emer1Phone, setEmer1Phone] = useState(""); - const [emer1Email, setEmer1Email] = useState(""); - const [emer2Name, setEmer2Name] = useState(""); - const [emer2Phone, setEmer2Phone] = useState(""); - const [emer2Email, setEmer2Email] = useState(""); - const [userName, setUserName] = useState(""); - const [password, setPassword] = useState(""); - +const Form = (props) => { return (
@@ -28,8 +11,9 @@ const Form = () => { id="name" required placeholder="John Doe" - value={name} - onChange={(e) => setName(e.target.value)} + value={props.name} + onChange={props.onNameChange} + name="name" /> { id="age" required placeholder="60" - value={age} - onChange={(e) => setAge(e.target.value)} + value={props.age} + onChange={props.onAgeChange} + name="age" /> { id="weight" required placeholder="60" - value={weight} - onChange={(e) => setWeight(e.target.value)} + value={props.weight} + onChange={props.onWeightChange} + name="weight" /> { id="allergies" required placeholder="food, medication, etc." - value={allergies} - onChange={(e) => setAllergies(e.target.value)} + value={props.allergies} + onChange={props.onAllergiesChange} + name="allergies" /> { name="phone" pattern="+65[0-9]{8}" required - placeholder="+659111111" - value={phone} - onChange={(e) => setPhone(e.target.value)} + placeholder="+6591111111" + value={props.phone} + onChange={props.onPhoneChange} /> { name="email" required placeholder="John_Doe@gmail.com" - value={email} - onChange={(e) => setEmail(e.target.value)} + value={props.email} + onChange={props.onEmailChange} /> { id="contact1" required placeholder="John Doe" - value={emer1Name} - onChange={(e) => setEmer1Name(e.target.value)} + value={props.emer1Name} + onChange={props.onEmer1NameChange} + name="emer1Name" /> setEmer1Phone(e.target.value)} + placeholder="+6591111111" + value={props.emer1Phone} + onChange={props.onEmer1PhoneChange} + name="emer1Phone" /> setEmer1Email(e.target.value)} + value={props.emer1Email} + onChange={props.onEmer1EmailChange} + name="emer1Email" /> { id="contact2" required placeholder="John Doe" - value={emer2Name} - onChange={(e) => setEmer2Name(e.target.value)} + value={props.emer2Name} + onChange={props.onEmer2NameChange} + name="emer2Name" /> setEmer2Phone(e.target.value)} + placeholder="+6591111111" + value={props.emer2Phone} + onChange={props.onEmer2PhoneChange} + name="emer2Phone" /> setEmer2Email(e.target.value)} + value={props.emer2Email} + onChange={props.onEmer2EmailChange} + name="emer2Email" /> { id="username" required placeholder="abcde" - value={userName} - onChange={(e) => setUserName(e.target.value)} + value={props.userName} + onChange={props.onUserNameChange} + name="userName" /> { id="password" required placeholder="abcde" - value={password} - onChange={(e) => setPassword(e.target.value)} + value={props.password} + onChange={props.onPasswordChange} + name="password" /> - {/*

{name}

-

{age}

-

{weight}

-

{bloodType}

-

{medicalConditions}

-

{allergies}

-

{phone}

-

{email}

-

{emer1Name}

-

{emer1Phone}

-

{emer1Email}

-

{emer2Name}

-

{emer2Phone}

-

{emer2Email}

-

{userName}

-

{password}

*/} + {/*

{props.name}

+

{props.age}

+

{props.weight}

+

{props.bloodType}

+

{props.medicalConditions}

+

{props.allergies}

+

{props.phone}

+

{props.email}

+

{props.emer1Name}

+

{props.emer1Phone}

+

{props.emer1Email}

+

{props.emer2Name}

+

{props.emer2Phone}

+

{props.emer2Email}

+

{props.userName}

+

{props.password}

*/}
); }; diff --git a/src/pages/Profile.jsx b/src/pages/Profile.jsx index 8833d27a..36fb0484 100644 --- a/src/pages/Profile.jsx +++ b/src/pages/Profile.jsx @@ -3,21 +3,183 @@ import { BackButton, Form, Button } from "../components "; import { Link, NavLink } from "react-router-dom"; const Profile = () => { + const [name, setName] = useState(""); + const [age, setAge] = useState(""); + const [weight, setWeight] = useState(""); + const [bloodType, setBloodType] = useState(""); + const [medicalConditions, setMedicalConditions] = useState(""); + const [allergies, setAllergies] = useState(""); + const [phone, setPhone] = useState(""); + const [email, setEmail] = useState(""); + const [emer1Name, setEmer1Name] = useState(""); + const [emer1Phone, setEmer1Phone] = useState(""); + const [emer1Email, setEmer1Email] = useState(""); + const [emer2Name, setEmer2Name] = useState(""); + const [emer2Phone, setEmer2Phone] = useState(""); + const [emer2Email, setEmer2Email] = useState(""); + const [userName, setUserName] = useState(""); + const [password, setPassword] = useState(""); + + const [itemData, setItemData] = useState({}); + + // const navigate = useNavigate(); + + const [dataProfile, setDataProfile] = useState([ + { + name: null, + age: null, + weight: null, + bloodType: null, + medicalConditions: null, + allergies: null, + phone: null, + email: null, + emer1Name: null, + emer1Phone: null, + emer1Email: null, + emer2Name: null, + emer2Phone: null, + emer2Email: null, + userName: null, + password: null, + }, + ]); + + const handleNameChange = (e) => { + setName(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleAgeChange = (e) => { + setAge(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleWeightChange = (e) => { + setWeight(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleBloodTypeChange = (e) => { + setBloodType(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleMedConditionsChange = (e) => { + setMedicalConditions(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleAllergiesChange = (e) => { + setAllergies(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handlePhoneChange = (e) => { + setPhone(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmailChange = (e) => { + setEmail(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer1NameChange = (e) => { + setEmer1Name(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer1PhoneChange = (e) => { + setEmer1Phone(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer1EmailChange = (e) => { + setEmer1Email(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer2NameChange = (e) => { + setEmer2Name(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer2PhoneChange = (e) => { + setEmer2Phone(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer2EmailChange = (e) => { + setEmer2Email(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleUserNameChange = (e) => { + setUserName(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handlePasswordChange = (e) => { + setPassword(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + setDataProfile([...dataProfile, itemData]); + setItemData({}); + // navigate("/home"); + }; + + // console.log(dataProfile) + return (

Profile

-
- - - - -
); }; diff --git a/src/pages/Registration.jsx b/src/pages/Registration.jsx index a5a4878c..a85d8fc6 100644 --- a/src/pages/Registration.jsx +++ b/src/pages/Registration.jsx @@ -1,9 +1,139 @@ import React, { useState, useEffect } from "react"; -import { Button } from "../components "; -import { Form } from "../components "; +import { Button, Form } from "../components "; import { Link, NavLink } from "react-router-dom"; const Registration = () => { + const [name, setName] = useState(""); + const [age, setAge] = useState(""); + const [weight, setWeight] = useState(""); + const [bloodType, setBloodType] = useState(""); + const [medicalConditions, setMedicalConditions] = useState(""); + const [allergies, setAllergies] = useState(""); + const [phone, setPhone] = useState(""); + const [email, setEmail] = useState(""); + const [emer1Name, setEmer1Name] = useState(""); + const [emer1Phone, setEmer1Phone] = useState(""); + const [emer1Email, setEmer1Email] = useState(""); + const [emer2Name, setEmer2Name] = useState(""); + const [emer2Phone, setEmer2Phone] = useState(""); + const [emer2Email, setEmer2Email] = useState(""); + const [userName, setUserName] = useState(""); + const [password, setPassword] = useState(""); + + const [itemData, setItemData] = useState({}); + + // const navigate = useNavigate(); + + const [dataProfile, setDataProfile] = useState([ + { + name: null, + age: null, + weight: null, + bloodType: null, + medicalConditions: null, + allergies: null, + phone: null, + email: null, + emer1Name: null, + emer1Phone: null, + emer1Email: null, + emer2Name: null, + emer2Phone: null, + emer2Email: null, + userName: null, + password: null, + }, + ]); + + const handleNameChange = (e) => { + setName(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleAgeChange = (e) => { + setAge(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleWeightChange = (e) => { + setWeight(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleBloodTypeChange = (e) => { + setBloodType(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleMedConditionsChange = (e) => { + setMedicalConditions(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleAllergiesChange = (e) => { + setAllergies(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handlePhoneChange = (e) => { + setPhone(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmailChange = (e) => { + setEmail(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer1NameChange = (e) => { + setEmer1Name(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer1PhoneChange = (e) => { + setEmer1Phone(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer1EmailChange = (e) => { + setEmer1Email(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer2NameChange = (e) => { + setEmer2Name(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer2PhoneChange = (e) => { + setEmer2Phone(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleEmer2EmailChange = (e) => { + setEmer2Email(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleUserNameChange = (e) => { + setUserName(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handlePasswordChange = (e) => { + setPassword(e.target.value); + setItemData({ ...itemData, [e.target.name]: e.target.value }); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + setDataProfile([...dataProfile, itemData]); + setItemData({}); + // navigate("/home"); + }; + + // console.log(dataProfile) + return (

@@ -12,9 +142,48 @@ const Registration = () => {

Let us know more about you!

- + + -
); From d06a1b88cc9180d7e84077e882ead9a5732c1970 Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Sat, 15 Oct 2022 01:59:05 +0800 Subject: [PATCH 10/25] Commit 10 - WhatsApp msg function added --- src/components /AlertButton.jsx | 21 ++++++++++++--------- src/components /Form.jsx | 4 ++-- src/components /FormMood.jsx | 6 +++--- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/components /AlertButton.jsx b/src/components /AlertButton.jsx index 5b908bac..ee6b5b84 100644 --- a/src/components /AlertButton.jsx +++ b/src/components /AlertButton.jsx @@ -3,16 +3,19 @@ import { Link, NavLink } from "react-router-dom"; import { BsExclamationDiamond } from "react-icons/bs"; const AlertButton = (props) => { + const phoneNumber = 6590719168; + const handleSubmit = (e) => { + e.preventDefault(); + window.location.href = `https://wa.me/${phoneNumber}?text=Your%20patient%20needs%20immediate%20assistance!%20Please%20call%20back!`; + }; return ( - - - + ); }; diff --git a/src/components /Form.jsx b/src/components /Form.jsx index 9c9b1d0b..7c2f5566 100644 --- a/src/components /Form.jsx +++ b/src/components /Form.jsx @@ -89,7 +89,7 @@ const Form = (props) => { name="phone" pattern="+65[0-9]{8}" required - placeholder="+6591111111" + placeholder="6591111111" value={props.phone} onChange={props.onPhoneChange} /> @@ -122,7 +122,7 @@ const Form = (props) => { id="contact1num" pattern="+65[0-9]{8}" required - placeholder="+6591111111" + placeholder="6591111111" value={props.emer1Phone} onChange={props.onEmer1PhoneChange} name="emer1Phone" diff --git a/src/components /FormMood.jsx b/src/components /FormMood.jsx index 3a31684a..73accfe8 100644 --- a/src/components /FormMood.jsx +++ b/src/components /FormMood.jsx @@ -39,7 +39,7 @@ const FormMood = (props) => { className=" border-dark-pink rounded" type="radio" id="mood" - value="good" + value="5" checked={props.checked.good} onChange={props.onMoodChange} onClick={props.onChecked} @@ -53,7 +53,7 @@ const FormMood = (props) => { { Date: Sat, 15 Oct 2022 12:13:58 +0800 Subject: [PATCH 11/25] Commit 11 - Added useLocalStorage Hook component, tidied up some functions --- src/App.js | 6 ++++++ src/hooks/useLocalStorage.jsx | 40 +++++++++++++++++++++++++++++++++++ src/pages/Log.jsx | 2 +- src/pages/Medicine.jsx | 25 +++++++--------------- src/pages/Mood.jsx | 20 ++++++++---------- 5 files changed, 64 insertions(+), 29 deletions(-) create mode 100644 src/hooks/useLocalStorage.jsx diff --git a/src/App.js b/src/App.js index e3a6bb28..efbc752d 100644 --- a/src/App.js +++ b/src/App.js @@ -15,8 +15,14 @@ import { } from "./pages"; import "./App.css"; +import { useLocalStorage } from "./hooks/useLocalStorage"; function App() { + + // const [users, setUsers] = useLocalStorage("users", []); + + // setUsers([...users, "Yuji"]) + return (
diff --git a/src/hooks/useLocalStorage.jsx b/src/hooks/useLocalStorage.jsx new file mode 100644 index 00000000..11d60aba --- /dev/null +++ b/src/hooks/useLocalStorage.jsx @@ -0,0 +1,40 @@ +import React, { useState } from "react"; + +export function useLocalStorage(key, initialValue) { + // State to store our value + // Pass initial state function to useState so logic is only executed once + const [storedValue, setStoredValue] = useState(() => { + if (typeof window === "undefined") { + return initialValue; + } + try { + // Get from local storage by key + const item = window.localStorage.getItem(key); + // Parse stored json or if none return initialValue + return item ? JSON.parse(item) : initialValue; + } catch (error) { + // If error also return initialValue + console.log(error); + return initialValue; + } + }); + // Return a wrapped version of useState's setter function that ... + // ... persists the new value to localStorage. + const setValue = (value) => { + try { + // Allow value to be a function so we have same API as useState + const valueToStore = + value instanceof Function ? value(storedValue) : value; + // Save state + setStoredValue(valueToStore); + // Save to local storage + if (typeof window !== "undefined") { + window.localStorage.setItem(key, JSON.stringify(valueToStore)); + } + } catch (error) { + // A more advanced implementation would handle the error case + console.log(error); + } + }; + return [storedValue, setValue]; +} diff --git a/src/pages/Log.jsx b/src/pages/Log.jsx index ee7f1415..4d4804c8 100644 --- a/src/pages/Log.jsx +++ b/src/pages/Log.jsx @@ -33,7 +33,7 @@ const Log = () => {

Select a date to view your past records!

-
+
{ const [medicineName, setMedicineName] = useState(""); @@ -17,19 +18,9 @@ const Medicine = () => { // const navigate = useNavigate(); - const [dataMedicine, setDataMedicine] = useState([ - { - medicineName: null, - medicineQtyOne: null, - medicineDate: null, - medicineTime: null, - medicineQtyTotal: null, - medicineDose: null, - medicineInterval: null, - medicineStartDate: null, - medicineStartTime: null, - }, - ]); + const [dataMedicine, setDataMedicine] = useState({}); + + const [medicine, setMedicine] = useLocalStorage("medicine", []); const handleMedNameChange = (e) => { setMedicineName(e.target.value); @@ -78,14 +69,14 @@ const Medicine = () => { const handleSubmit = (e) => { e.preventDefault(); - setDataMedicine([...dataMedicine, itemData]); + setMedicine(setDataMedicine(itemData)); setItemData({}); // navigate("/home"); }; - useEffect(() => { - localStorage.setItem("dataMedicine", JSON.stringify(dataMedicine)); - }, [dataMedicine]); + // useEffect(() => { + // localStorage.setItem("dataMedicine", JSON.stringify(dataMedicine)); + // }, [dataMedicine]); // console.log(dataMedicine) diff --git a/src/pages/Mood.jsx b/src/pages/Mood.jsx index 302ecb04..089848f1 100644 --- a/src/pages/Mood.jsx +++ b/src/pages/Mood.jsx @@ -1,6 +1,7 @@ import React, { useState, useEffect } from "react"; import { BackButton, Button, FormMood } from "../components "; import { Link, NavLink, Router, useNavigate } from "react-router-dom"; +import { useLocalStorage } from "../hooks/useLocalStorage"; const Mood = () => { const [moodDate, setMoodDate] = useState(""); @@ -15,13 +16,8 @@ const Mood = () => { // const navigate = useNavigate(); - const [data, setData] = useState([ - { - moodData: null, - moodTime: null, - mood: null, - }, - ]); + const [data, setData] = useState({} + ); const changeMood = (e) => { setChecked(() => { @@ -46,14 +42,16 @@ const Mood = () => { const handleSubmit = (e) => { e.preventDefault(); - setData([...data, itemData]); + setData(itemData); setItemData({}); // navigate("/home"); }; - useEffect(() => { - localStorage.setItem("data", JSON.stringify(data)); - }, [data]); + // useEffect(() => { + // localStorage.setItem("data", JSON.stringify(data)); + // }, [data]); + + console.log(data) return (
From a93010b5a3804f9e8aa566e330cab54bb8d56d04 Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Sun, 16 Oct 2022 14:02:50 +0800 Subject: [PATCH 12/25] Commit 12 - Data store medicine mood --- src/pages/Medicine.jsx | 23 +++++++++++++---------- src/pages/Mood.jsx | 27 +++++++++++++++------------ 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/pages/Medicine.jsx b/src/pages/Medicine.jsx index 743fdd93..a0052998 100644 --- a/src/pages/Medicine.jsx +++ b/src/pages/Medicine.jsx @@ -20,7 +20,7 @@ const Medicine = () => { const [dataMedicine, setDataMedicine] = useState({}); - const [medicine, setMedicine] = useLocalStorage("medicine", []); + const [medicineLog, setMedicineLog] = useLocalStorage("medicineLog", []); const handleMedNameChange = (e) => { setMedicineName(e.target.value); @@ -67,9 +67,13 @@ const Medicine = () => { setItemData({ ...itemData, [e.target.name]: e.target.value }); }; + useEffect(() => { + setDataMedicine(itemData); + }, [itemData]); + const handleSubmit = (e) => { e.preventDefault(); - setMedicine(setDataMedicine(itemData)); + setMedicineLog([...medicineLog, dataMedicine]); setItemData({}); // navigate("/home"); }; @@ -106,14 +110,13 @@ const Medicine = () => { onDateStartChange={handleMedStartDateChange} onTimeStartChange={handleMedStartTimeChange} /> - - - + +
); }; diff --git a/src/pages/Mood.jsx b/src/pages/Mood.jsx index 089848f1..a3783562 100644 --- a/src/pages/Mood.jsx +++ b/src/pages/Mood.jsx @@ -16,8 +16,9 @@ const Mood = () => { // const navigate = useNavigate(); - const [data, setData] = useState({} - ); + const [data, setData] = useState({}); + + const [moodLog, setMoodLog] = useLocalStorage("moodLog", []); const changeMood = (e) => { setChecked(() => { @@ -40,9 +41,13 @@ const Mood = () => { setItemData({ ...itemData, [e.target.name]: e.target.value }); }; + useEffect(() => { + setData(itemData); + }, [itemData]); + const handleSubmit = (e) => { e.preventDefault(); - setData(itemData); + setMoodLog([...moodLog, data]); setItemData({}); // navigate("/home"); }; @@ -51,7 +56,7 @@ const Mood = () => { // localStorage.setItem("data", JSON.stringify(data)); // }, [data]); - console.log(data) + // console.log(data); return (
@@ -69,14 +74,12 @@ const Mood = () => { onMoodChange={handleMoodChange} onChecked={changeMood} /> - - - +
); }; From 1db0a8364a7a12fca4a5eb107b83ec50aa415bf3 Mon Sep 17 00:00:00 2001 From: yuj8fuj6 Date: Sun, 16 Oct 2022 16:28:47 +0800 Subject: [PATCH 13/25] Commit 13 - Resolved getting data from localStorage Issue --- src/pages/Medicine.jsx | 8 +---- src/pages/Mood.jsx | 8 +---- src/pages/Profile.jsx | 68 +++++++++++++++++++++++++------------- src/pages/Registration.jsx | 26 +++------------ 4 files changed, 51 insertions(+), 59 deletions(-) diff --git a/src/pages/Medicine.jsx b/src/pages/Medicine.jsx index a0052998..9f9a08a6 100644 --- a/src/pages/Medicine.jsx +++ b/src/pages/Medicine.jsx @@ -18,8 +18,6 @@ const Medicine = () => { // const navigate = useNavigate(); - const [dataMedicine, setDataMedicine] = useState({}); - const [medicineLog, setMedicineLog] = useLocalStorage("medicineLog", []); const handleMedNameChange = (e) => { @@ -67,13 +65,9 @@ const Medicine = () => { setItemData({ ...itemData, [e.target.name]: e.target.value }); }; - useEffect(() => { - setDataMedicine(itemData); - }, [itemData]); - const handleSubmit = (e) => { e.preventDefault(); - setMedicineLog([...medicineLog, dataMedicine]); + setMedicineLog([...medicineLog, itemData]); setItemData({}); // navigate("/home"); }; diff --git a/src/pages/Mood.jsx b/src/pages/Mood.jsx index a3783562..9c3386b8 100644 --- a/src/pages/Mood.jsx +++ b/src/pages/Mood.jsx @@ -16,8 +16,6 @@ const Mood = () => { // const navigate = useNavigate(); - const [data, setData] = useState({}); - const [moodLog, setMoodLog] = useLocalStorage("moodLog", []); const changeMood = (e) => { @@ -41,13 +39,9 @@ const Mood = () => { setItemData({ ...itemData, [e.target.name]: e.target.value }); }; - useEffect(() => { - setData(itemData); - }, [itemData]); - const handleSubmit = (e) => { e.preventDefault(); - setMoodLog([...moodLog, data]); + setMoodLog([...moodLog, itemData]); setItemData({}); // navigate("/home"); }; diff --git a/src/pages/Profile.jsx b/src/pages/Profile.jsx index 36fb0484..ba84f3d4 100644 --- a/src/pages/Profile.jsx +++ b/src/pages/Profile.jsx @@ -1,8 +1,27 @@ import React, { useState, useEffect } from "react"; import { BackButton, Form, Button } from "../components "; import { Link, NavLink } from "react-router-dom"; +import { useLocalStorage } from "../hooks/useLocalStorage"; const Profile = () => { + const [profileData, setProfileData] = useState([]); + + const dataSync = async () => { + const response = await JSON.parse(localStorage.getItem("profileLog")); + setProfileData(response); + console.log(response); + }; + + useEffect(() => { + // const profile = JSON.parse(localStorage.getItem("profileLog")); + dataSync(); + // if (profile) { + // setProfileData(profile); + // } + }, []); + + console.log(profileData); + const [name, setName] = useState(""); const [age, setAge] = useState(""); const [weight, setWeight] = useState(""); @@ -20,30 +39,34 @@ const Profile = () => { const [userName, setUserName] = useState(""); const [password, setPassword] = useState(""); + const index = profileData.length - 1; + + useEffect(() => { + if (profileData.length !== 0) { + setName(profileData[index].name); + setAge(profileData[index].age); + setWeight(profileData[index].weight); + setBloodType(profileData[index].bloodType); + setMedicalConditions(profileData[index].medicalConditions); + setAllergies(profileData[index].allergies); + setPhone(profileData[index].phone); + setEmail(profileData[index].email); + setEmer1Name(profileData[index].emer1Name); + setEmer1Phone(profileData[index].emer1Phone); + setEmer1Email(profileData[index].emer1Email); + setEmer2Name(profileData[index].emer2Name); + setEmer2Phone(profileData[index].emer2Phone); + setEmer2Email(profileData[index].emer2Email); + setUserName(profileData[index].userName); + setPassword(profileData[index].password); + } + }, [profileData, index]); + const [itemData, setItemData] = useState({}); // const navigate = useNavigate(); - const [dataProfile, setDataProfile] = useState([ - { - name: null, - age: null, - weight: null, - bloodType: null, - medicalConditions: null, - allergies: null, - phone: null, - email: null, - emer1Name: null, - emer1Phone: null, - emer1Email: null, - emer2Name: null, - emer2Phone: null, - emer2Email: null, - userName: null, - password: null, - }, - ]); + const [profileLog, setProfileLog] = useLocalStorage("profileLog", []); const handleNameChange = (e) => { setName(e.target.value); @@ -127,11 +150,10 @@ const Profile = () => { const handleSubmit = (e) => { e.preventDefault(); - setDataProfile([...dataProfile, itemData]); + setProfileLog([...profileLog, itemData]); setItemData({}); // navigate("/home"); }; - // console.log(dataProfile) return ( @@ -178,7 +200,7 @@ const Profile = () => { onClick={handleSubmit} className="text-xl p-3 m-4 w-60 bg-dark-pink drop-shadow-lg hover:drop-shadow-xl hover:bg-pink-700 rounded-xl" > - Record + Record
); diff --git a/src/pages/Registration.jsx b/src/pages/Registration.jsx index a85d8fc6..2d7d7e97 100644 --- a/src/pages/Registration.jsx +++ b/src/pages/Registration.jsx @@ -1,6 +1,7 @@ import React, { useState, useEffect } from "react"; import { Button, Form } from "../components "; import { Link, NavLink } from "react-router-dom"; +import { useLocalStorage } from "../hooks/useLocalStorage"; const Registration = () => { const [name, setName] = useState(""); @@ -24,26 +25,7 @@ const Registration = () => { // const navigate = useNavigate(); - const [dataProfile, setDataProfile] = useState([ - { - name: null, - age: null, - weight: null, - bloodType: null, - medicalConditions: null, - allergies: null, - phone: null, - email: null, - emer1Name: null, - emer1Phone: null, - emer1Email: null, - emer2Name: null, - emer2Phone: null, - emer2Email: null, - userName: null, - password: null, - }, - ]); + const [profileLog, setProfileLog] = useLocalStorage("profileLog", []); const handleNameChange = (e) => { setName(e.target.value); @@ -127,7 +109,7 @@ const Registration = () => { const handleSubmit = (e) => { e.preventDefault(); - setDataProfile([...dataProfile, itemData]); + setProfileLog([...profileLog, itemData]); setItemData({}); // navigate("/home"); }; @@ -180,7 +162,7 @@ const Registration = () => { onClick={handleSubmit} className="text-xl p-3 m-4 w-60 bg-dark-pink drop-shadow-lg hover:drop-shadow-xl hover:bg-pink-700 rounded-xl" > - Record + Record