diff --git a/cubeseed_login/package-lock.json b/cubeseed_login/package-lock.json index 027ca21..0f83418 100644 --- a/cubeseed_login/package-lock.json +++ b/cubeseed_login/package-lock.json @@ -11,6 +11,7 @@ "@material-tailwind/html": "^2.0.0", "@radix-ui/react-dialog": "^1.0.4", "base-64": "^1.0.0", + "formidable": "^3.5.1", "next": "13.3.0", "react": "18.2.0", "react-dom": "18.2.0", @@ -19,6 +20,8 @@ "sass": "^1.62.1" }, "devDependencies": { + "@material/web": "^1.0.0", + "@mui/material": "^5.14.11", "@storybook/addon-essentials": "^7.5.1", "@storybook/addon-interactions": "^7.5.1", "@storybook/addon-links": "^7.5.1", @@ -34,6 +37,9 @@ "@types/react": "18.0.37", "@types/react-dom": "18.0.11", "autoprefixer": "^10.4.14", + "postcss": "^8.4.25", + "react-icons": "^4.11.0", + "tailwindcss": "^3.3.2", "chromatic": "^7.4.0", "eslint": "8.48.0", "eslint-config-next": "13.4.19", @@ -41,12 +47,10 @@ "eslint-plugin-storybook": "^0.6.15", "eslint-plugin-tailwindcss": "^3.13.0", "husky": "^8.0.0", - "postcss": "^8.4.25", "prettier": "^2.8.8", "prettier-plugin-tailwindcss": "^0.1.13", "pretty-quick": "^3.1.3", "storybook": "^7.5.1", - "tailwindcss": "^3.3.2", "typescript": "5.0.4" } }, @@ -560,6 +564,13 @@ "node": ">=6.9.0" } }, +<<<<<<< HEAD + "node_modules/@babel/runtime": { + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "dependencies": { +======= "node_modules/@babel/parser": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", @@ -2190,6 +2201,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "regenerator-runtime": "^0.14.0" }, "engines": { @@ -2835,6 +2847,8 @@ "dependencies": { "@floating-ui/core": "^1.4.2", "@floating-ui/utils": "^0.1.3" +<<<<<<< HEAD +======= } }, "node_modules/@floating-ui/react-dom": { @@ -3249,8 +3263,27 @@ }, "engines": { "node": ">=8" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", + "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -3315,12 +3348,30 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, +<<<<<<< HEAD + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz", + "integrity": "sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==", + "dev": true + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, +======= "node_modules/@juggle/resize-observer": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", "dev": true }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "node_modules/@material-tailwind/html": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@material-tailwind/html/-/html-2.0.0.tgz", @@ -3330,6 +3381,258 @@ "material-ripple-effects": "^2.0.1" } }, +<<<<<<< HEAD + "node_modules/@material/web": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@material/web/-/web-1.0.0.tgz", + "integrity": "sha512-mNn2qzHvzJLty93NTtnkrSup+Wnte5yAtcZIx0N+WbIZPVlixA2v6wXkqHN1/SJVl0EV2tNT1qz4k0jfTQ+0lw==", + "dev": true, + "dependencies": { + "lit": "^2.7.4 || ^3.0.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.17.tgz", + "integrity": "sha512-xNbk7iOXrglNdIxFBN0k3ySsPIFLWCnFxqsAYl7CIcDkD9low4kJ7IUuy6ctwx/HAy2fenrT3KXHr1sGjAMgpQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.15", + "@floating-ui/react-dom": "^2.0.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.11", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", + "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", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.11.tgz", + "integrity": "sha512-uY8FLQURhXe3f3O4dS5OSGML9KDm9+IE226cBu78jarVIzdQGPlXwGIlSI9VJR8MvZDA6C0+6XfWDhWCHruC5Q==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, + "node_modules/@mui/material": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.11.tgz", + "integrity": "sha512-DnSdJzcR7lwG12JA5L2t8JF+RDzMygu5rCNW+logWb/KW2/TRzwLyVWO+CorHTBjBRd38DBxnwOCDiYkDd+N3A==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.15", + "@mui/base": "5.0.0-beta.17", + "@mui/core-downloads-tracker": "^5.14.11", + "@mui/system": "^5.14.11", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.11", + "@types/react-transition-group": "^4.4.6", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "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==", + "dev": true + }, + "node_modules/@mui/private-theming": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.11.tgz", + "integrity": "sha512-MSnNNzTu9pfKLCKs1ZAKwOTgE4bz+fQA0fNr8Jm7NDmuWmw0CaN9Vq2/MHsatE7+S0A25IAKby46Uv1u53rKVQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.15", + "@mui/utils": "^5.14.11", + "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.14.11", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.11.tgz", + "integrity": "sha512-jdUlqRgTYQ8RMtPX4MbRZqar6W2OiIb6J5KEFbIu4FqvPrk44Each4ppg/LAqp1qNlBYq5i+7Q10MYLMpDxX9A==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.15", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "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.14.11", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.11.tgz", + "integrity": "sha512-yl8xV+y0k7j6dzBsHabKwoShmjqLa8kTxrhUI3JpqLG358VRVMJRW/ES0HhvfcCi4IVXde+Tc2P3K1akGL8zoA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.15", + "@mui/private-theming": "^5.14.11", + "@mui/styled-engine": "^5.14.11", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.11", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "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.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "dev": true, + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.11.tgz", + "integrity": "sha512-fmkIiCPKyDssYrJ5qk+dime1nlO3dmWfCtaPY/uVBqCRMBZ11JhddB9m8sjI2mgqQQwRJG5bq3biaosNdU/s4Q==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.22.15", + "@types/prop-types": "^15.7.5", + "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" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "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==", + "dev": true + }, +======= "node_modules/@mdx-js/react": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz", @@ -3358,6 +3661,7 @@ "tar-fs": "^2.1.1" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "node_modules/@next/env": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.3.0.tgz", @@ -3562,6 +3866,16 @@ "node": ">= 8" } }, +<<<<<<< HEAD + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" +======= "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -3664,6 +3978,7 @@ "dev": true, "dependencies": { "@babel/runtime": "^7.13.10" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "node_modules/@radix-ui/primitive": { @@ -6771,6 +7086,14 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, +<<<<<<< HEAD + "node_modules/@types/trusted-types": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.4.tgz", + "integrity": "sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==", + "dev": true + }, +======= "node_modules/@types/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", @@ -7476,6 +7799,7 @@ "node": ">=8" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -7547,6 +7871,12 @@ "node": ">=10" } }, +<<<<<<< HEAD + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" +======= "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -7779,6 +8109,7 @@ "dependencies": { "has-symbols": "^1.0.3" } +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 }, "node_modules/asynckit": { "version": "0.4.0", @@ -7819,6 +8150,17 @@ "postcss": "^8.1.0" } }, +<<<<<<< HEAD + "node_modules/axios": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" +======= "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -8061,6 +8403,7 @@ }, "engines": { "node": ">=8" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "node_modules/babel-plugin-macros": { @@ -8861,11 +9204,27 @@ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, +<<<<<<< HEAD + "node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", +======= "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -8943,6 +9302,18 @@ "node": ">= 0.8" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -9410,6 +9781,8 @@ "node": ">=0.10.0" } }, +<<<<<<< HEAD +======= "node_modules/default-browser-id": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", @@ -9491,6 +9864,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -9500,6 +9874,8 @@ "node": ">=0.4.0" } }, +<<<<<<< HEAD +======= "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -9547,11 +9923,21 @@ "node": ">=8" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, +<<<<<<< HEAD + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" +======= "node_modules/detect-package-manager": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", @@ -9620,6 +10006,7 @@ "bin": { "detect": "bin/detect-port.js", "detect-port": "bin/detect-port.js" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "node_modules/didyoumean": { @@ -11260,6 +11647,26 @@ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, +<<<<<<< HEAD + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } +======= "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -11419,6 +11826,7 @@ }, "engines": { "node": ">=8" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "node_modules/form-data": { @@ -11435,6 +11843,19 @@ "node": ">= 6" } }, +<<<<<<< HEAD + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" +======= "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -11442,6 +11863,7 @@ "dev": true, "engines": { "node": ">= 0.6" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "node_modules/fraction.js": { @@ -11906,6 +12328,14 @@ "node": ">=4" } }, +<<<<<<< HEAD + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" +======= "node_modules/has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", @@ -12013,6 +12443,7 @@ "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "node_modules/hoist-non-react-statics": { @@ -13605,6 +14036,37 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, +<<<<<<< HEAD + "node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2" +======= "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -13722,6 +14184,7 @@ }, "engines": { "node": ">=8" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "node_modules/loose-envify": { @@ -13933,6 +14396,8 @@ "node": ">=8.6" } }, +<<<<<<< HEAD +======= "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -13964,6 +14429,7 @@ "node": ">=4" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -13985,6 +14451,8 @@ "node": ">= 0.6" } }, +<<<<<<< HEAD +======= "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -14015,6 +14483,7 @@ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -14595,7 +15064,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -15513,6 +15981,8 @@ "react-is": "^16.13.1" } }, +<<<<<<< HEAD +======= "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -15526,12 +15996,15 @@ "node": ">= 0.10" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, +<<<<<<< HEAD +======= "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -15701,6 +16174,7 @@ "inherits": "~2.0.3" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -15861,6 +16335,15 @@ "react": "^18.2.0" } }, +<<<<<<< HEAD + "node_modules/react-icons": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz", + "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==", + "dev": true, + "peerDependencies": { + "react": "*" +======= "node_modules/react-element-to-jsx-string": { "version": "15.0.0", "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", @@ -15889,6 +16372,7 @@ "dev": true, "peerDependencies": { "react": "^16.8.4 || ^17.0.0 || ^18.0.0" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "node_modules/react-is": { @@ -16241,6 +16725,8 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" +<<<<<<< HEAD +======= }, "node_modules/regenerator-transform": { "version": "0.15.2", @@ -16392,6 +16878,7 @@ "engines": { "node": ">=0.10.5" } +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 }, "node_modules/resolve": { "version": "1.22.2", @@ -18909,8 +19396,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -19408,6 +19894,14 @@ "js-tokens": "^4.0.0" } }, +<<<<<<< HEAD + "@babel/runtime": { + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "requires": { + "regenerator-runtime": "^0.14.0" +======= "@babel/parser": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", @@ -20542,6 +21036,7 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true } +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "@babel/types": { @@ -20899,6 +21394,8 @@ "requires": { "@floating-ui/core": "^1.4.2", "@floating-ui/utils": "^0.1.3" +<<<<<<< HEAD +======= } }, "@floating-ui/react-dom": { @@ -21202,8 +21699,23 @@ "has-flag": "^4.0.0" } } +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, + "@floating-ui/react-dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", + "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==", + "dev": true, + "requires": { + "@floating-ui/dom": "^1.5.1" + } + }, + "@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, "@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -21261,12 +21773,30 @@ } } }, +<<<<<<< HEAD + "@lit-labs/ssr-dom-shim": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz", + "integrity": "sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==", + "dev": true + }, + "@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, +======= "@juggle/resize-observer": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", "dev": true }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "@material-tailwind/html": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@material-tailwind/html/-/html-2.0.0.tgz", @@ -21276,6 +21806,131 @@ "material-ripple-effects": "^2.0.1" } }, +<<<<<<< HEAD + "@material/web": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@material/web/-/web-1.0.0.tgz", + "integrity": "sha512-mNn2qzHvzJLty93NTtnkrSup+Wnte5yAtcZIx0N+WbIZPVlixA2v6wXkqHN1/SJVl0EV2tNT1qz4k0jfTQ+0lw==", + "dev": true, + "requires": { + "lit": "^2.7.4 || ^3.0.0", + "tslib": "^2.4.0" + } + }, + "@mui/base": { + "version": "5.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.17.tgz", + "integrity": "sha512-xNbk7iOXrglNdIxFBN0k3ySsPIFLWCnFxqsAYl7CIcDkD9low4kJ7IUuy6ctwx/HAy2fenrT3KXHr1sGjAMgpQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.22.15", + "@floating-ui/react-dom": "^2.0.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.11", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1" + } + }, + "@mui/core-downloads-tracker": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.11.tgz", + "integrity": "sha512-uY8FLQURhXe3f3O4dS5OSGML9KDm9+IE226cBu78jarVIzdQGPlXwGIlSI9VJR8MvZDA6C0+6XfWDhWCHruC5Q==", + "dev": true + }, + "@mui/material": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.11.tgz", + "integrity": "sha512-DnSdJzcR7lwG12JA5L2t8JF+RDzMygu5rCNW+logWb/KW2/TRzwLyVWO+CorHTBjBRd38DBxnwOCDiYkDd+N3A==", + "dev": true, + "requires": { + "@babel/runtime": "^7.22.15", + "@mui/base": "5.0.0-beta.17", + "@mui/core-downloads-tracker": "^5.14.11", + "@mui/system": "^5.14.11", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.11", + "@types/react-transition-group": "^4.4.6", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "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==", + "dev": true + } + } + }, + "@mui/private-theming": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.11.tgz", + "integrity": "sha512-MSnNNzTu9pfKLCKs1ZAKwOTgE4bz+fQA0fNr8Jm7NDmuWmw0CaN9Vq2/MHsatE7+S0A25IAKby46Uv1u53rKVQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.22.15", + "@mui/utils": "^5.14.11", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.11.tgz", + "integrity": "sha512-jdUlqRgTYQ8RMtPX4MbRZqar6W2OiIb6J5KEFbIu4FqvPrk44Each4ppg/LAqp1qNlBYq5i+7Q10MYLMpDxX9A==", + "dev": true, + "requires": { + "@babel/runtime": "^7.22.15", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.11.tgz", + "integrity": "sha512-yl8xV+y0k7j6dzBsHabKwoShmjqLa8kTxrhUI3JpqLG358VRVMJRW/ES0HhvfcCi4IVXde+Tc2P3K1akGL8zoA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.22.15", + "@mui/private-theming": "^5.14.11", + "@mui/styled-engine": "^5.14.11", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.11", + "clsx": "^2.0.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "dev": true, + "requires": {} + }, + "@mui/utils": { + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.11.tgz", + "integrity": "sha512-fmkIiCPKyDssYrJ5qk+dime1nlO3dmWfCtaPY/uVBqCRMBZ11JhddB9m8sjI2mgqQQwRJG5bq3biaosNdU/s4Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.22.15", + "@types/prop-types": "^15.7.5", + "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==", + "dev": true + } +======= "@mdx-js/react": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz", @@ -21295,6 +21950,7 @@ "gunzip-maybe": "^1.4.2", "pump": "^3.0.0", "tar-fs": "^2.1.1" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "@next/env": { @@ -21407,6 +22063,13 @@ "fastq": "^1.6.0" } }, +<<<<<<< HEAD + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "dev": true +======= "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -21464,6 +22127,7 @@ "requires": { "@babel/runtime": "^7.13.10" } +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 }, "@radix-ui/primitive": { "version": "1.0.1", @@ -23582,6 +24246,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, +<<<<<<< HEAD + "@types/trusted-types": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.4.tgz", + "integrity": "sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==", +======= "@types/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", @@ -24119,6 +24789,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "dev": true }, "ansi-styles": { @@ -24185,6 +24856,12 @@ "tslib": "^2.0.0" } }, +<<<<<<< HEAD + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" +======= "aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -24374,6 +25051,7 @@ "requires": { "has-symbols": "^1.0.3" } +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 }, "asynckit": { "version": "0.4.0", @@ -24395,6 +25073,17 @@ "postcss-value-parser": "^4.2.0" } }, +<<<<<<< HEAD + "axios": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" +======= "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -24559,6 +25248,7 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "babel-plugin-macros": { @@ -25152,11 +25842,24 @@ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, +<<<<<<< HEAD + "clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", +======= "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -25221,6 +25924,15 @@ "delayed-stream": "~1.0.0" } }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -25610,6 +26322,8 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" }, +<<<<<<< HEAD +======= "default-browser-id": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", @@ -25667,12 +26381,15 @@ "slash": "^3.0.0" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, +<<<<<<< HEAD +======= "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -25707,11 +26424,21 @@ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, +<<<<<<< HEAD + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" +======= "detect-package-manager": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", @@ -25760,6 +26487,7 @@ "requires": { "address": "^1.0.1", "debug": "4" +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "didyoumean": { @@ -27087,6 +27815,14 @@ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, +<<<<<<< HEAD + "follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true + }, +======= "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -27206,6 +27942,7 @@ } } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -27217,11 +27954,23 @@ "mime-types": "^2.1.12" } }, +<<<<<<< HEAD + "formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "requires": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + } +======= "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 }, "fraction.js": { "version": "4.2.0", @@ -27561,6 +28310,12 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, +<<<<<<< HEAD + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" +======= "has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", @@ -27641,6 +28396,7 @@ "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 }, "hoist-non-react-statics": { "version": "3.3.2", @@ -28773,6 +29529,37 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, +<<<<<<< HEAD + "lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "requires": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.2" +======= "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -28856,6 +29643,7 @@ "has-flag": "^4.0.0" } } +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 } }, "loose-envify": { @@ -29023,6 +29811,8 @@ "picomatch": "^2.3.1" } }, +<<<<<<< HEAD +======= "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -29047,6 +29837,7 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -29062,6 +29853,8 @@ "mime-db": "1.52.0" } }, +<<<<<<< HEAD +======= "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -29086,6 +29879,7 @@ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -29503,7 +30297,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -30143,6 +30936,8 @@ "react-is": "^16.13.1" } }, +<<<<<<< HEAD +======= "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -30153,12 +30948,15 @@ "ipaddr.js": "1.9.1" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, +<<<<<<< HEAD +======= "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -30304,6 +31102,7 @@ "inherits": "~2.0.3" } }, +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -30419,6 +31218,12 @@ "scheduler": "^0.23.0" } }, +<<<<<<< HEAD + "react-icons": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz", + "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==", +======= "react-element-to-jsx-string": { "version": "15.0.0", "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", @@ -30442,6 +31247,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 "dev": true, "requires": {} }, @@ -30693,6 +31499,8 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" +<<<<<<< HEAD +======= }, "regenerator-transform": { "version": "0.15.2", @@ -30811,6 +31619,7 @@ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true +>>>>>>> de1648cf8645c53bca7afce7c8287aac20357fc6 }, "resolve": { "version": "1.22.2", @@ -32670,8 +33479,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "4.0.2", diff --git a/cubeseed_login/package.json b/cubeseed_login/package.json index 7e69d54..b91b287 100644 --- a/cubeseed_login/package.json +++ b/cubeseed_login/package.json @@ -16,6 +16,7 @@ "@material-tailwind/html": "^2.0.0", "@radix-ui/react-dialog": "^1.0.4", "base-64": "^1.0.0", + "formidable": "^3.5.1", "next": "13.3.0", "react": "18.2.0", "react-dom": "18.2.0", @@ -35,6 +36,8 @@ "@storybook/react": "^7.5.1", "@storybook/testing-library": "^0.2.2", "@storybook/theming": "^7.5.1", + "@material/web": "^1.0.0", + "@mui/material": "^5.14.11", "@types/node": "20.1.4", "@types/react": "18.0.37", "@types/react-dom": "18.0.11", @@ -51,6 +54,7 @@ "prettier-plugin-tailwindcss": "^0.1.13", "pretty-quick": "^3.1.3", "storybook": "^7.5.1", + "react-icons": "^4.11.0", "tailwindcss": "^3.3.2", "typescript": "5.0.4" }, diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/CategoryInputField.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/CategoryInputField.tsx new file mode 100644 index 0000000..8b70205 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/CategoryInputField.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import Link from "next/link"; +import styles from "@/styles/marketplaceprofile.module.css" +import SearchBar from './SearchBar'; +import { BsCart3, BsPersonCircle } from "react-icons/bs"; +import { FiMessageSquare } from "react-icons/fi"; + +const CategoryInputField: React.FC = () => { + return ( +
+ +
+
    +
  • +
  • +
  • +
+
+
+ ); +}; + +export default CategoryInputField; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/DemoSideBar.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/DemoSideBar.tsx new file mode 100644 index 0000000..a12c895 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/DemoSideBar.tsx @@ -0,0 +1,27 @@ +import React, { useState } from 'react'; +import { BsArrowLeftShort } from 'react-icons/bs'; +import styles from '@/styles/marketplaceprofile.module.css'; + +interface DemoSideBarProps { + setSidebarOpen: React.Dispatch>; +} + +const DemoSideBar: React.FC = ({ setSidebarOpen }) => { + const [open, setOpen] = useState(true); + + const handleSidebarToggle = () => { + setOpen(!open); + setSidebarOpen(!open); + }; + + return ( +
+ +
+ ); +}; + +export default DemoSideBar; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyAccountForm.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyAccountForm.tsx new file mode 100644 index 0000000..b098517 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyAccountForm.tsx @@ -0,0 +1,151 @@ +import React from "react"; +import Link from "next/link"; +import { TextField } from "@mui/material"; +import styles from "@/styles/marketplaceprofile.module.css"; +import ProfileImg from "./ProfileImg"; +import useProfile from "./hooks/useProfile"; + +interface PersonalDetailFormProps { + uploading: boolean; + selectedImage: string | null; + handleFileChange: (e: React.ChangeEvent) => void; +} + +const PersonalDetailForm: React.FC = ({ + uploading, + selectedImage, + handleFileChange, +}) => { + const { errors, formData, handleUserInputs, handleSubmit } = useProfile(); + + const inputStyles: React.CSSProperties = { + height: "40px", + fontSize: "12px", + borderColor: "#002629", + color: "#99A19F", + paddingTop: "18px", + paddingBottom: "18px", + opacity: "0.5", + }; + + const labelStyles: React.CSSProperties = { + color: "#002629", + fontWeight: "400", + fontSize: "1rem", + }; + + return ( +
+
+ +
+ +
+
+

Personal Detail

+
+ + {errors.name &&
{errors.name}
} + + + {errors.phone_number && ( +
{errors.phone_number}
+ )} + + + {errors.email &&
{errors.email}
} + + + {errors.location && ( +
{errors.location}
+ )} +
+
+
+

Password

+ + {errors.old_password && ( +
{errors.old_password}
+ )} + + + {errors.new_password && ( +
{errors.new_password}
+ )} +
+
+ + +
+ +
+
+
+ ); +}; + +export default PersonalDetailForm; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyAccountFormEdit.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyAccountFormEdit.tsx new file mode 100644 index 0000000..55a8bc1 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyAccountFormEdit.tsx @@ -0,0 +1,54 @@ +import React from 'react'; +import Link from "next/link"; +import styles from "@/styles/marketplaceprofile.module.css"; +import ProfileImg from './ProfileImg'; + +const MyAccountFormEdit: React.FC = () => { + return ( + <> +
+
+ +
+
+
+

Personal Detail

+

Edit

+
+
+

Name

+

Phone Number

+

Email

+

Location

+
+
+
+

Password

+

Change Password

+
+
+

Password

+
+
+
+

Preferred Products

+

Edit

+
+
+

Animal feed, Cocoa Products, Coffee and tea, Frui...

+
+
+
+
+ + +
+ + ); +}; + +export default MyAccountFormEdit; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyAccountTitle.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyAccountTitle.tsx new file mode 100644 index 0000000..d133158 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyAccountTitle.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import styles from '@/styles/marketplaceprofile.module.css'; + +interface MyAccountTitleProps { + title: string; +} + +const MyAccountTitle: React.FC = ({ title }) => { + return ( +
+

{title}

+
+
+ ); +}; + +export default MyAccountTitle; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyBusinessForm.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyBusinessForm.tsx new file mode 100644 index 0000000..2d059ae --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyBusinessForm.tsx @@ -0,0 +1,178 @@ +import React from "react"; +import { TextField, MenuItem } from "@mui/material"; +import Link from "next/link"; +import styles from "@/styles/marketplaceprofile.module.css"; +import ProfileImg from "./ProfileImg"; +import useBusiness from "./hooks/useBusiness"; + +interface BusinessDetailFormProps { + sidebarOpen: boolean; + uploading: boolean; + selectedImage: string | null; + handleFileChange: (e: React.ChangeEvent) => void; +} + +const BusinessDetailForm: React.FC = ({ + uploading, + selectedImage, + handleFileChange, + sidebarOpen }) => { + + const { bizData, handleBizInputs, handleBusinessSubmit, errors } = useBusiness(); + + const inputStyles = { + height: "40px", + fontSize: "12px", + borderColor: "#27797E", + color: "#99A19F", + paddingTop: "18px", + paddingBottom: "18px", + opacity: "0.5px", + }; + + const labelStyles = { + color: "#002629", + fontWeight: "500", + fontSize: "1rem", + }; + + return ( +
+
+ +
+ +
+
+

Business Detail

+
+ + {errors.company_name &&
{errors.company_name}
} + + + {errors.company_email &&
{errors.company_email}
} + + + {errors.company_phone &&
{errors.company_phone}
} + + + {category.map((option) => ( + + {option.label} + + ))} + + {errors.category &&
{errors.category}
} +
+
+
+

Business Address

+ + {errors.business_address &&
{errors.business_address}
} +
+
+
+

Custom Fields

+ + {errors.custom_fields &&
{errors.custom_fields}
} +
+
+ + +
+
+
+
+ ); +}; + +export default BusinessDetailForm; + +const category = [ + { + value: "Select", + label: "Select the category", + }, + { + value: "catering", + label: "Catering Companies", + }, + { + value: "Food", + label: "Foodservices Distributors", + }, + { + value: "institution", + label: "Institution Buyers (e.g Schools, Hospital)", + }, + { + value: "grocery", + label: "Grocery Store Chain", + }, +]; \ No newline at end of file diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyBusinessFormEdit.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyBusinessFormEdit.tsx new file mode 100644 index 0000000..caa5ac9 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyBusinessFormEdit.tsx @@ -0,0 +1,56 @@ +import React from 'react'; +import Link from 'next/link'; +import styles from '@/styles/marketplaceprofile.module.css'; +import ProfileImg from './ProfileImg'; + +const MyBusinessFormEdit: React.FC = () => { + + return ( + <> +
+
+ +
+
+
+

Business Details

+

Edit

+
+
+

Company Name

+

Company Email

+

Company Phone

+

Category

+
+
+
+

Business Address

+

Edit

+
+
+

Business Address

+
+
+
+

Custom Fields

+

Edit

+
+
+

Business Website Link...

+
+
+
+
+ {/* */} + + +
+ + ); +}; + +export default MyBusinessFormEdit; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyDocumentForm.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyDocumentForm.tsx new file mode 100644 index 0000000..ac6e625 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyDocumentForm.tsx @@ -0,0 +1,162 @@ +import React from 'react'; +import { TextField } from '@mui/material'; +import { styled } from '@mui/material/styles'; +import styles from '@/styles/marketplaceprofile.module.css'; +import ProfileImg from './ProfileImg'; +import useDocument from './hooks/useDocument'; + +const DocumentUploadForm: React.FC = () => { + const { + docInfo, + errors, + uploading, + selectedImage, + handleDocumentUpload, + handleFileChange, + photoErrors, + handleDocumentSubmit, + } = useDocument(); + + const inputStyles: React.CSSProperties = { + height: '40px', + fontSize: '12px', + borderColor: '#002629', + color: '#99A19F', + paddingTop: '18px', + paddingBottom: '18px', + opacity: '0.5px', + }; + + const labelStyles: React.CSSProperties = { + color: '#002629', + fontWeight: '400', + fontSize: '1rem', + }; + + const VisuallyHiddenInput = styled('input')({ + clip: 'rect(0 0 0 0)', + clipPath: 'inset(50%)', + height: 1, + overflow: 'hidden', + position: 'absolute', + bottom: 0, + left: 0, + whiteSpace: 'nowrap', + width: 1, + }); + + return ( +
+
+ +
+
+
+

Basic Information

+
+ + {errors.business_tax_id &&
{errors.business_tax_id}
} + + {errors.EIN &&
{errors.EIN}
} + + + {errors.SSN &&
{errors.SSN}
} +
+
+
+

+ Official Documents +

+
+

+ Upload a document on official letterhead that shows your + organization's status +

+

+ + This will help sellers decide if they would like to work with + you! We recommend completing 100% of the profile sections. + +

+
+
+

+ Document 1: Official documents that + contain your EIN, or sole proprietor, or individual status. +

+

+ Document 2: Official letterhead document + with employment confirmation. +

+
+
+ + {errors.uploadEIN &&
{errors.uploadEIN}
} + + + {errors.uploadSSN &&
{errors.uploadSSN}
} +
+
+ +
+
+
+
+
+ ); +}; + +export default DocumentUploadForm; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyDocumentFormEdit.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyDocumentFormEdit.tsx new file mode 100644 index 0000000..2ab0098 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/MyDocumentFormEdit.tsx @@ -0,0 +1,105 @@ +import React, { useState, useEffect } from 'react'; +import axios from 'axios'; +import Link from 'next/link'; +import ProfileImg, { ProfileImgProps } from './ProfileImg'; +import styles from '../../../styles/marketplaceprofile.module.css'; + +interface DocData { + business_tax_id: string; + EIN: string; + SSN: string; + file1: string; + file2: string; +} + +interface MyDocumentFormEditProps { + userId: string; +} + +const MyDocumentFormEdit: React.FC = ({ userId }) => { + // Verify the existence of userId before proceeding + if (!userId) { + return
Error: Missing user ID
; + + } + + const [profileImgData, setProfileImgData] = useState({ + uploading: false, + selectedImage: null, + handleFileChange: () => {}, + }); + + const [docData, setDocData] = useState(); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const fetchData = async () => { + try { + const [profileImgResponse, docResponse] = await Promise.all([ + axios.get(`https://userprofilephoto/${userId}`), + axios.get(`https://usersdoc/${userId}`), + ]); + + setProfileImgData(profileImgResponse.data); + setDocData(docResponse.data); + } catch (error) { + setError(error as Error); + } finally { + setLoading(false); + } + }; + + fetchData(); + }, [userId]); // Update data based on userId changes + + if (loading) { + return
Loading...
; + } + + if (error) { + return
Error: {error.message}
; + } + + return ( + <> +
+
+ {}} /> +
+ +
+
+

Basic Information

+ +
+ +
+

Business tax ID: {docData?.business_tax_id}

+

Employer ID number (EIN): {docData?.EIN}

+

Social Security (SSN): {docData?.SSN}

+
+
+ +
+

Official Documents

+ +
+ +
+

File [1]: {docData?.file1}

+

File [2]: {docData?.file2}

+
+
+
+ +
+ +
+ + ); +}; + +export default MyDocumentFormEdit; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/ProfileIdLinks.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/ProfileIdLinks.tsx new file mode 100644 index 0000000..7df8b88 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/ProfileIdLinks.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import Link from 'next/link'; +import styles from '@/styles/marketplaceprofile.module.css'; + + +const ProfileLinks: React.FC<{ userId?: string }> = ({ userId = '' }) => { + return ( +
+ My Account + My Business + My Document +
+ ); +}; + +export default ProfileLinks; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/ProfileImg.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/ProfileImg.tsx new file mode 100644 index 0000000..7f281f5 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/ProfileImg.tsx @@ -0,0 +1,47 @@ +import React, { ChangeEvent } from 'react'; +import Image from 'next/image'; +import styles from '@/styles/marketplaceprofile.module.css'; + +export interface ProfileImgProps { + uploading: boolean; + selectedImage: string | null; + handleFileChange: (e: ChangeEvent) => void; +} + +const ProfileImg: React.FC = ({ uploading, selectedImage, handleFileChange }) => { + const fileData = () => { + return ( +
+
+ {selectedImage ? ( + Uploaded + ) : ( +
+ × +
+ )} +
+ + + +
+ ); + }; + + return
{fileData()}
; +}; + +export default ProfileImg; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/ProfileLinks.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/ProfileLinks.tsx new file mode 100644 index 0000000..bdd0052 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/ProfileLinks.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import Link from 'next/link'; +import styles from '@/styles/marketplaceprofile.module.css'; + +const ProfileLinks: React.FC = () => { + return ( +
+ {/* My Account + My Business + My Documents + */} +
+ ); +}; + +export default ProfileLinks; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/SearchBar.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/SearchBar.tsx new file mode 100644 index 0000000..4f180ea --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/SearchBar.tsx @@ -0,0 +1,67 @@ +import React, { useState, useEffect } from 'react'; +import { PiCaretDownBold } from 'react-icons/pi'; +import { AiOutlineSearch } from 'react-icons/ai'; +import styles from '@/styles/marketplaceprofile.module.css'; + +const categories = ['Apps', 'eBooks', 'Games', 'Music', 'Videos']; + +const SearchBar: React.FC = () => { + const [dropdownListVisibility, setDropdownListVisibility] = useState(false); + const [selectedCategory, setSelectedCategory] = useState('Category'); + + useEffect(() => { + const dropdownListElement = document.getElementById('list'); + if (dropdownListVisibility) { + dropdownListElement?.classList.add(styles.listShow); + } else { + dropdownListElement?.classList.remove(styles.listShow); + } + }, [dropdownListVisibility]); + + useEffect(() => { + const searchInputElement = document.getElementById('searchInput'); + searchInputElement?.setAttribute('placeholder', `Enter Products/ services to search... ${selectedCategory}...`); + }, [selectedCategory]); + + const handleDropdownButtonClick = () => { + setDropdownListVisibility(!dropdownListVisibility); + }; + + const handleDropdownListItemClick = (e: React.MouseEvent) => { + setSelectedCategory(e.currentTarget.innerText); + }; + + return ( +
+ + +
+ + +
+
+ ); +}; + +export default SearchBar; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/TopHelpBar.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/TopHelpBar.tsx new file mode 100644 index 0000000..d0c243d --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/TopHelpBar.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import Link from 'next/link'; +import styles from '@/styles/marketplaceprofile.module.css'; + +const TopHelpBar: React.FC = () => { + return ( +
+ Help + Contact us +
+ ); +}; + +export default TopHelpBar; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useBusiness.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useBusiness.tsx new file mode 100644 index 0000000..0b83a26 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useBusiness.tsx @@ -0,0 +1,112 @@ +import { useState, ChangeEvent } from "react"; + +interface BusinessFormData { + company_name: string; + company_email: string; + company_phone: string; + category: string; + business_address: string; + custom_fields: string; +} + +interface BusinessErrors { + company_name: string; + company_email: string; + company_phone: string; + location: string; + category: string; + business_address: string; + custom_fields: string; +} + +interface BusinessHook { + bizData: BusinessFormData; + errors: BusinessErrors; + handleBizInputs: (e: ChangeEvent) => void; + handleBusinessSubmit: (e: React.FormEvent) => Promise; +} + +const useBusiness = (): BusinessHook => { + const phoneRegex = /^\+234[789]\d{9}$/; + const [bizData, setBizData] = useState({ + company_name: "", + company_email: "", + company_phone: "", + category: "", + business_address: "", + custom_fields: "" + }); + + const [errors, setErrors] = useState({ + company_name: "", + company_email: "", + company_phone: "", + location: "", + category: "", + business_address: "", + custom_fields: "" + }); + + const handleBizInputs = (e: ChangeEvent) => { + const { name, value } = e.target; + const newFormData = { ...bizData }; + const newErrors = { ...errors }; + + if (name === 'company_name') { + newFormData[name] = value; + newErrors[name] = value.length < 3 ? 'Company name must be at least 3 characters' : ''; + } else if (name === 'company_email') { + newFormData[name] = value; + newErrors[name] = !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value) ? 'Enter a valid email' : ''; + }else if (name === 'company_phone') { + const cleanedValue = value.replace(/\D/g, ''); + newFormData[name] = cleanedValue.length === 10 ? `+234${cleanedValue}` : value; + newErrors[name] = !phoneRegex.test(newFormData[name]) ? 'Do not include the first 0 digit' : ''; + } else if (name === 'category') { + newFormData[name] = value; + newErrors[name] = value === "Select" ? "Select a category" : ""; + } else if (name === 'business_address') { + newFormData[name] = value; + newErrors[name] = value.length > 128 ? 'Business Address should be 128 characters long' : ''; + } else if (name === "custom_fields") { + newFormData[name] = value; + newErrors[name] = + !/^(https?:\/\/)?[^\s/$.?#].[^\s]*$/.test(value) ? "Enter a valid website URL" : ""; + } + + setBizData(newFormData); + setErrors(newErrors); + }; + + const handleBusinessSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + try { + const response = await fetch('/api/mybusiness', { + method: 'POST', + body: JSON.stringify({ bizData }), + headers: { + 'Content-Type': 'application/json' + } + }); + + if (!response.ok) { + throw new Error('Failed to submit form data'); + } + const data = await response.json(); + alert("Successfully Submitted") + console.log('Form data submitted successfully:', data); + } catch (error) { + console.error('Error submitting form data:', error); + } + }; + + return { + bizData, + handleBizInputs, + handleBusinessSubmit, + errors, + }; +}; + +export default useBusiness; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useDocument.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useDocument.tsx new file mode 100644 index 0000000..61ecdad --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useDocument.tsx @@ -0,0 +1,191 @@ +import { useState, useEffect, ChangeEvent } from "react"; + +const imageMimeType = /image\/(png|jpg|jpeg)/i; +const allowedDocumentTypes = ["application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"]; + +interface DocumentInfo { + business_tax_id: string; + EIN: string; + SSN: string; + uploadEIN: string; + uploadSSN: string; +} + +interface DocumentErrors { + business_tax_id: string; + EIN: string; + SSN: string; + uploadEIN: string; + uploadSSN: string; +} + +interface DocumentHook { + docInfo: DocumentInfo; + errors: DocumentErrors; + uploading: boolean; + selectedImage: string; + photoErrors: { picture: string }; + handleDocumentUpload: (e: ChangeEvent) => void; + handleFileChange: (e: ChangeEvent) => void; + handleDocumentSubmit: (e: React.FormEvent) => Promise; +} + +const useDocument = (): DocumentHook => { + const [docInfo, setDocInfo] = useState({ + business_tax_id: "", + EIN: "", + SSN: "", + uploadEIN: "", + uploadSSN: "" + }); + + const [errors, setErrors] = useState({ + business_tax_id: "", + EIN: "", + SSN: "", + uploadEIN: "", + uploadSSN: "" + }); + + const [uploading, setUploading] = useState(false); + const [selectedImage, setSelectedImage] = useState(''); + const [selectedFile, setSelectedFile] = useState(null); + const [photoErrors, setPhotoErrors] = useState({ picture: '' }); + + const handleDocumentUpload = (e: ChangeEvent) => { + const { name, value, type, files } = e.target; + + if (name === "business_tax_id") { + if (!/^[0-9A-Za-z]+$/.test(value)) { + setErrors((prevErrors) => ({ + ...prevErrors, + business_tax_id: "Should contain both letters and numbers" + })); + } else { + setErrors((prevErrors) => ({ ...prevErrors, business_tax_id: "" })); + } + } + + if (name === "EIN" || name === "SSN") { + if (!/^\d+$/.test(value)) { + setErrors((prevErrors) => ({ + ...prevErrors, + [name]: "Should be purely numbers" + })); + } else { + setErrors((prevErrors) => ({ ...prevErrors, [name]: "" })); + } + } + + if (name === "uploadEIN" || name === "uploadSSN") { + const allowedFileTypes = ["application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"]; + if (files && files.length > 0) { + const file = files[0]; + if (!allowedFileTypes.includes(file.type)) { + setErrors((prevErrors) => ({ + ...prevErrors, + [name]: "Invalid file type. Please upload a PDF, DOC, or DOCX file." + })); + } else if (file.size > 2097152) { + setErrors((prevErrors) => ({ + ...prevErrors, + [name]: "File size too large. Please upload a file that is less than 2 MB." + })); + } else { + setErrors((prevErrors) => ({ ...prevErrors, [name]: "" })); + } + } + } + + setDocInfo((prev) => ({ ...prev, [name]: value })); + }; + + const handleFileChange = (e: ChangeEvent) => { + e.preventDefault(); + const file = e.target.files && e.target.files[0]; + + if (file && file.type.match(imageMimeType)) { + if (file.size <= 2 * 1024 * 1024) { + setSelectedImage(URL.createObjectURL(file)); + setSelectedFile(file); + setPhotoErrors({ picture: '' }); + } else { + setPhotoErrors({ picture: 'Photo size must be smaller than 2MB.' }); + } + } else if (file && allowedDocumentTypes.includes(file.type)) { + const name = e.target.name; + if (file.size > 2097152) { + setErrors((prevErrors) => ({ + ...prevErrors, + [name]: "File size too large. Please upload a file that is less than 2 MB." + })); + } else { + setErrors((prevErrors) => ({ ...prevErrors, [name]: "" })); + } + } else { + setPhotoErrors({ picture: 'Please select a valid image.' }); + } + }; + + const handleDocumentSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + if (Object.values(errors).some((error) => error !== "")) { + console.error("Document form has validation errors. Please fix them before submitting."); + return; + } + if (Object.values(photoErrors).some((error) => error !== "")) { + console.error("Photo form has validation errors. Please fix them before submitting."); + return; + } + try { + const documentResponse = await fetch("https://ec2-16-171-43-115.eu-north-1.compute.amazonaws.com:8000/businessprofile", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(docInfo), + }); + + if (!documentResponse.ok) { + console.error("Failed to update user profile details"); + console.log(docInfo); + return; + } + + const photoFormData = new FormData(); + photoFormData.append('myImage', selectedFile as Blob); + const photoResponse = await fetch('https://ec2-16-171-43-115.eu-north-1.compute.amazonaws.com:8000/userprofilephoto', { + method: 'POST', + body: photoFormData, + }); + + if (!photoResponse.ok) { + console.error("Failed to update profile picture"); + console.log(photoFormData); + return; + } + + console.log("Form submitted successfully!"); + } catch (error) { + console.error("An error occurred:", error); + } + }; + + useEffect(() => { + console.log('Selected Photo:', selectedImage); + }, [selectedImage]); + + return { + docInfo, + errors, + uploading, + selectedImage, + handleFileChange, + photoErrors, + handleDocumentUpload, + handleDocumentSubmit + }; +}; + +export default useDocument; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useProfile.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useProfile.tsx new file mode 100644 index 0000000..75b3f65 --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useProfile.tsx @@ -0,0 +1,100 @@ +import { useState, ChangeEvent, FormEvent } from "react"; + +interface FormData { + name: string; + phone_number: string; + email: string; + location: string; + old_password: string; + new_password: string; +} + +interface Errors { + name: string; + phone_number: string; + email: string; + location: string; + old_password: string; + new_password: string; +} + +const useProfile = () => { + const phoneRegex = /^\+234[789]\d{9}$/; + + const [formData, setFormData] = useState({ + name: "", + phone_number: "", + email: "", + location: "", + old_password: "", + new_password: "", + }); + + const [errors, setErrors] = useState({ + name: "", + phone_number: "", + email: "", + location: "", + old_password: "", + new_password: "", + }); + + const handleUserInputs = (e: ChangeEvent) => { + const { name, value } = e.target; + const newFormData = { ...formData }; + const newErrors = { ...errors }; + + if (name === 'name') { + newFormData[name] = value; + newErrors[name] = value.length < 3 ? 'Name must be at least 3 characters' : ''; + } else if (name === 'phone_number') { + const cleanedValue = value.replace(/\D/g, ''); + newFormData[name] = cleanedValue.length === 10 ? `+234${cleanedValue}` : value; + newErrors[name] = !phoneRegex.test(newFormData[name]) ? 'Do not include the first 0 digit' : ''; + } else if (name === 'email') { + newFormData[name] = value; + newErrors[name] = !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value) ? 'Enter a valid email' : ''; + } else if (name === 'location') { + newFormData[name] = value; + newErrors[name] = !/^[a-zA-Z]+$/.test(value) ? 'Enter a valid Country' : ''; + } else if (name === 'old_password' || name === 'new_password') { + newFormData[name] = value; + newErrors[name] = value.length < 8 ? 'Password must be at least 8 characters' : ''; + } + + setFormData(newFormData); + setErrors(newErrors); + }; + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault(); + + try { + const response = await fetch('/api/myaccount', { + method: 'POST', + body: JSON.stringify({ formData }), + headers: { + 'Content-Type': 'application/json' + } + }); + + if (!response.ok) { + throw new Error('Failed to submit form data'); + } + const data = await response.json(); + alert("Successfully submitted") + console.log('Form data submitted successfully:', data); + } catch (error) { + console.error('Error submitting form data:', error); + } + }; + + return { + formData, + handleUserInputs, + handleSubmit, + errors, + }; +}; + +export default useProfile; diff --git a/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useProfilePhoto.tsx b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useProfilePhoto.tsx new file mode 100644 index 0000000..214d1fa --- /dev/null +++ b/cubeseed_login/src/component/dashboard/MarketPlaceProfile/hooks/useProfilePhoto.tsx @@ -0,0 +1,78 @@ +import React, { useState } from 'react'; + +const imageMimeType = new RegExp('image\/(png|jpg|jpeg)', 'i'); + +interface ProfilePhotoState { + selectedImage: string; + handleFileChange: (e: React.ChangeEvent) => void; + submitImage: (e: React.FormEvent) => Promise; // Use Promise to handle asynchronous operations + errors: { picture: string }; + uploading: boolean; +} + +const useProfilePhoto = () => { + const [uploading, setUploading] = useState(false); + const [selectedImage, setSelectedImage] = useState(''); + const [selectedFile, setSelectedFile] = useState(null); + const [errors, setErrors] = useState({ picture: '' }); + + const handleFileChange = (e: React.ChangeEvent) => { + e.preventDefault(); + + const file = e.target.files![0]; + + if (file.type.match(imageMimeType)) { + if (file.size <= 2 * 1024 * 1024) { + setSelectedImage(URL.createObjectURL(file)); + setSelectedFile(file); + } else { + setErrors({ picture: 'Photo size must be smaller than 2MB.' }); + } + } else { + setErrors({ picture: 'Please select a valid image.' }); + } + }; + + const submitImage = async (e: React.FormEvent) => { + e.preventDefault(); + + setUploading(true); + + if (!selectedFile) { + setErrors({ picture: 'Please select an image.' }); + return; + } + + try { + const formData = new FormData(); + formData.append('myImage', selectedFile); + + const response = await fetch('/api/marketplaceprofilephoto', { + method: 'POST', + body: formData, + }); + + if (!response.ok) { + throw new Error('Failed to submit form data'); + } + + const data = await response.json(); + console.log('Photo submitted successfully:', data); + } catch (error) { + console.error('Error submitting photo:', error); + alert('An error occurred while submitting the photo. Please try again later.'); // Inform the user of the error + } + + setUploading(false); + }; + + return { + selectedImage, + handleFileChange, + submitImage, + errors, + uploading, + }; +}; + +export default useProfilePhoto; diff --git a/cubeseed_login/src/pages/api/hello.js b/cubeseed_login/src/pages/api/hello.js new file mode 100644 index 0000000..17ce8f2 --- /dev/null +++ b/cubeseed_login/src/pages/api/hello.js @@ -0,0 +1,3 @@ +export default function handler(req, res) { + res.status(200).json({ message: 'Hello from Next.js!' }) +} \ No newline at end of file diff --git a/cubeseed_login/src/pages/api/marketplaceprofilephoto.js b/cubeseed_login/src/pages/api/marketplaceprofilephoto.js new file mode 100644 index 0000000..89df2e6 --- /dev/null +++ b/cubeseed_login/src/pages/api/marketplaceprofilephoto.js @@ -0,0 +1,20 @@ +import { NextApiRequest, NextApiResponse } from 'next'; + +const storedImages = []; + +export default async function handler(req, res) { + if (req.method === 'POST') { + try { + const { localPath } = JSON.parse(req.body); + storedImages.push({ path: localPath }); + res.status(200).json({ message: 'Image processed and stored successfully' }); + } catch (error) { + console.error('Error processing image:', error); + res.status(500).json({ error: 'Image processing failed' }); + } + } else if (req.method === 'GET') { + res.status(200).json({ storedImages }); + } else { + res.status(405).json({ error: 'Method not allowed' }); + } +} diff --git a/cubeseed_login/src/pages/api/myaccount.js b/cubeseed_login/src/pages/api/myaccount.js new file mode 100644 index 0000000..f8b4f58 --- /dev/null +++ b/cubeseed_login/src/pages/api/myaccount.js @@ -0,0 +1,22 @@ +import { addFormData, getFormDatas } from './myaccountapiroute'; + +export default function handler(req, res) { + if (req.method === 'POST') { + const formData = req.body.formData; + const newData = { + id: Date.now(), + name: formData.name, + phone_number: formData.phone_number, + email: formData.email, + location: formData.location, + old_password: formData.old_password, + new_password: formData.new_password, + }; + addFormData(newData); + console.log('Received form data:', newData); + res.status(201).json(newData); + } else if (req.method === 'GET') { + const allFormDatas = getFormDatas(); + res.status(200).json(allFormDatas); + } +} diff --git a/cubeseed_login/src/pages/api/myaccountapiroute.js b/cubeseed_login/src/pages/api/myaccountapiroute.js new file mode 100644 index 0000000..bfeb0c3 --- /dev/null +++ b/cubeseed_login/src/pages/api/myaccountapiroute.js @@ -0,0 +1,11 @@ +let formDatas = []; + +const addFormData = (data) => { + formDatas.push(data); +}; + +const getFormDatas = () => { + return formDatas; +}; + +export { addFormData, getFormDatas }; diff --git a/cubeseed_login/src/pages/api/mybusiness.js b/cubeseed_login/src/pages/api/mybusiness.js new file mode 100644 index 0000000..3830be6 --- /dev/null +++ b/cubeseed_login/src/pages/api/mybusiness.js @@ -0,0 +1,23 @@ + +import { addBusinessData, getBusinessDatas } from './mybusinessapiroute'; + +export default function handler(req, res) { + if (req.method === 'POST') { + const bizData = req.body.bizData; + const newData = { + id: Date.now(), + company_name: bizData.company_name, + company_email: bizData.company_email, + company_phone: bizData.company_phone, + category: bizData.category, + business_address: bizData.business_address, + custom_fields: bizData.custom_fields, + }; + addBusinessData(newData); + console.log('Received form data:', newData); + res.status(201).json(newData); + } else if (req.method === 'GET') { + const allFormDatas = getBusinessDatas(); + res.status(200).json(allFormDatas); + } +} diff --git a/cubeseed_login/src/pages/api/mybusinessapiroute.js b/cubeseed_login/src/pages/api/mybusinessapiroute.js new file mode 100644 index 0000000..3a0ba3a --- /dev/null +++ b/cubeseed_login/src/pages/api/mybusinessapiroute.js @@ -0,0 +1,11 @@ +let bizDatas = []; + +const addBusinessData = (data) => { + bizDatas.push(data); +}; + +const getBusinessDatas = () => { + return bizDatas; +}; + +export { addBusinessData, getBusinessDatas }; diff --git a/cubeseed_login/src/pages/api/uploadImg.js b/cubeseed_login/src/pages/api/uploadImg.js new file mode 100644 index 0000000..7adcd90 --- /dev/null +++ b/cubeseed_login/src/pages/api/uploadImg.js @@ -0,0 +1,64 @@ +import { NextApiRequest, NextApiResponse } from 'next'; +import formidable from 'formidable'; +import path from 'path'; +import fs from 'fs/promises'; + +const copyFile = (sourcePath, destinationPath) => { + return fs.copyFile(sourcePath, destinationPath); +}; + +const saveLocally = async (file) => { + const uploadDir = path.join(process.cwd(), '/public/marketPlaceUsersImg'); + const filename = Date.now().toString() + '_' + file.name; + const destinationPath = path.join(uploadDir, filename); + await copyFile(file.path, destinationPath); + return destinationPath; +}; + +const readFile = (req, saveLocally) => { + const options = {}; + if (saveLocally) { + options.uploadDir = path.join(process.cwd(), '/tmp'); // Temporary directory for processing + options.keepExtensions = true; // Keep file extensions + options.hash = 'md5'; // Hash the file name + } + const form = new formidable.IncomingForm(options); + return new Promise((resolve, reject) => { + form.parse(req, async (err, fields, files) => { + if (err) { + reject(err); + } else { + const { picture } = files; + const localPath = await saveLocally(picture); + resolve({ fields, files, localPath }); + } + }); + }); +}; + +export default async function handler(req, res) { + if (req.method === 'POST') { + try { + await fs.mkdir(path.join(process.cwd(), '/public/marketPlaceUsersImg'), { recursive: true }); + const { fields, files, localPath } = await readFile(req, true); + const response = await fetch('/api/marketplaceprofilephoto', { + method: 'POST', + body: JSON.stringify({ localPath }), + headers: { + 'Content-Type': 'application/json', + }, + }); + + if (!response.ok) { + throw new Error('Failed to send image to the other API'); + } + + res.status(200).json({ message: 'Image uploaded and processed successfully' }); + } catch (error) { + console.error('Error processing image:', error); + res.status(500).json({ error: 'Image processing failed' }); + } + } else { + res.status(405).json({ error: 'Method not allowed' }); + } +} diff --git a/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/layout.tsx b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/layout.tsx new file mode 100644 index 0000000..bdc0fe2 --- /dev/null +++ b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/layout.tsx @@ -0,0 +1,49 @@ +import React, { useState, ReactNode } from "react"; +import "@/styles/global.css"; +import DemoSideBar from "../../../../component/dashboard/MarketPlaceProfile/DemoSideBar"; +import TopHelpBar from '../../../../component/dashboard/MarketPlaceProfile/TopHelpBar'; +import CategoryInputField from '../../../../component/dashboard/MarketPlaceProfile/CategoryInputField'; +import ProfileIdLinks from '../../../../component/dashboard/MarketPlaceProfile/ProfileIdLinks'; +import styles from "@/styles/marketplaceprofile.module.css"; + +interface IdDashboardLayoutProps { + title: string; + children: ReactNode; +} + +const IdDashboardLayout: React.FC = ({ title, children }) => { + const [sidebarOpen, setSidebarOpen] = useState(true); + type User = { + id: string; + }; + + // Fetch userId from login information + function fetchUserIdFromLogin(): User['id'] | null { + const userId = localStorage.getItem('userId'); + return userId ? userId : null; + } + // Get the userId from local storage + const userId: User['id'] | null = fetchUserIdFromLogin(); + + return ( +
+ +
+ + + {userId && } +
+
+

{title}

+
+
+ +
+ {children} +
+
+
+ ); +}; + +export default IdDashboardLayout; diff --git a/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/myaccount.tsx b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/myaccount.tsx new file mode 100644 index 0000000..1bcab15 --- /dev/null +++ b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/myaccount.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import IdDashboardLayout from './layout'; +import MyAccountFormEdit from '../../../../component/dashboard/MarketPlaceProfile/MyAccountFormEdit'; + +interface MyAccountProps { + title: string; + // userId: string; + // sidebarOpen: boolean; +} + +const MyAccount: React.FC = ({ title }) => { + return ( + + + + ); +}; + +export default MyAccount; diff --git a/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/mybusiness.tsx b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/mybusiness.tsx new file mode 100644 index 0000000..fdb4ebf --- /dev/null +++ b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/mybusiness.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import IdDashboardLayout from './layout'; +import MyBusinessFormEdit from '../../../../component/dashboard/MarketPlaceProfile/MyBusinessFormEdit'; + +interface MyBusinessProps { + title: string; + // userId: string + // sidebarOpen: boolean; +} + +const MyBusiness: React.FC = ({ title}) => { + return ( + + + + ) +} + +export default MyBusiness; \ No newline at end of file diff --git a/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/mydocument.tsx b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/mydocument.tsx new file mode 100644 index 0000000..ca27910 --- /dev/null +++ b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/[id]/mydocument.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import IdDashboardLayout from './layout'; +import MyDocumentFormEdit from '../../../../component/dashboard/MarketPlaceProfile/MyDocumentFormEdit'; + +interface MyDocumentProps { + title: string; + userId: string + // sidebarOpen: boolean; +} + +const MyDocument: React.FC = ({ title,userId }) => { + return ( + + + + ) +} + +export default MyDocument; \ No newline at end of file diff --git a/cubeseed_login/src/pages/dashboard/marketplace_dashboard/layout.tsx b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/layout.tsx new file mode 100644 index 0000000..bd24cab --- /dev/null +++ b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/layout.tsx @@ -0,0 +1,38 @@ +import React, { useState, ReactNode } from "react"; +import "@/styles/global.css"; +import DemoSideBar from "../../../component/dashboard/MarketPlaceProfile/DemoSideBar"; +import TopHelpBar from '../../../component/dashboard/MarketPlaceProfile/TopHelpBar'; +import CategoryInputField from '../../../component/dashboard/MarketPlaceProfile/CategoryInputField'; +import ProfileLinks from '../../../component/dashboard/MarketPlaceProfile/ProfileIdLinks'; +import styles from "@/styles/marketplaceprofile.module.css"; + +interface IdDashboardLayoutProps { + title: string; + children: ReactNode; +} + +const IdDashboardLayout: React.FC = ({ title, children }) => { + const [sidebarOpen, setSidebarOpen] = useState(true); + + return ( +
+ +
+ + + +
+
+

{title}

+
+
+ +
+ {children} +
+
+
+ ); +}; + +export default IdDashboardLayout; diff --git a/cubeseed_login/src/pages/dashboard/marketplace_dashboard/myaccountform.tsx b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/myaccountform.tsx new file mode 100644 index 0000000..b3178df --- /dev/null +++ b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/myaccountform.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import DashboardLayout from './layout'; +import PersonalDetailForm from '../../../component/dashboard/MarketPlaceProfile/MyAccountForm'; + +interface MyAccountFormProps { + title: string; + sidebarOpen: boolean; + uploading: boolean; + selectedImage: string | null; + handleFileChange: (e: React.ChangeEvent) => void; +} + +const MyAccountForm: React.FC = ({ title, uploading, selectedImage, handleFileChange }) => { + return ( + + + + ); +}; + +export default MyAccountForm; diff --git a/cubeseed_login/src/pages/dashboard/marketplace_dashboard/mybusinessform.tsx b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/mybusinessform.tsx new file mode 100644 index 0000000..2c5e877 --- /dev/null +++ b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/mybusinessform.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import DashboardLayout from './layout'; +import BusinessDetailForm from '../../../component/dashboard/MarketPlaceProfile/MyBusinessForm'; + +interface MyBusinessFormProps { + title: string; + sidebarOpen: boolean; +} + +const MyBusinessForm: React.FC = ({ title, sidebarOpen }) => { + return ( + + + + ); +}; + +export default MyBusinessForm; diff --git a/cubeseed_login/src/pages/dashboard/marketplace_dashboard/mydocumentform.tsx b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/mydocumentform.tsx new file mode 100644 index 0000000..5fbe2ec --- /dev/null +++ b/cubeseed_login/src/pages/dashboard/marketplace_dashboard/mydocumentform.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import DashboardLayout from "./layout"; +import DocumentUploadForm from '../../../component/dashboard/MarketPlaceProfile/MyDocumentForm' + +interface MyDocumentFormProps { + title: string; +} + + +const MyDocumentForm: React.FC = ({ title }) => { + return ( + + + + ) +} +export default MyDocumentForm; + + diff --git a/cubeseed_login/src/styles/globals.css b/cubeseed_login/src/styles/globals.css index 0b8eeec..6a45cdb 100644 --- a/cubeseed_login/src/styles/globals.css +++ b/cubeseed_login/src/styles/globals.css @@ -1,3 +1,25 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --clr-primary: #002629; + --clr-primary-10: #03656B; + --clr-primary-20: #27797E; + --clr-primary-40: #51A1A6; + --clr-primary-70: #BEE8E5; + --clr-primary-90: #F1FCFD; + --clr-secondary: #ffb84c; + --clr-accent: #886634; + --clr-neutral-30: #46524E; + --clr-neautral-60:#99A19F; + --clr-neutral-70: #B4BABE; + --clr-neutral-90: #EBF3F1; + } +} + + @import url("https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap"); body { font-family: "Ubuntu"; @@ -10,8 +32,11 @@ li { a { text-decoration: none; + cursor: pointer; +} +a:hover{ + cursor: pointer; } - /* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) @@ -101,4 +126,11 @@ label { left: 2em; background-color: white; padding: 0 5px; -}/*# sourceMappingURL=globals.css.map */ \ No newline at end of file +}/*# sourceMappingURL=globals.css.map */ + +/*=================================== +Label for marketplace profile +====================================*/ +/* label{ + background: none; +} */ \ No newline at end of file diff --git a/cubeseed_login/src/styles/globals.scss b/cubeseed_login/src/styles/globals.scss index 3aa6c6a..8034f13 100644 --- a/cubeseed_login/src/styles/globals.scss +++ b/cubeseed_login/src/styles/globals.scss @@ -1,3 +1,24 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --clr-primary: #002629; + --clr-primary-10: #03656B; + --clr-primary-20: #27797E; + --clr-primary-40: #51A1A6; + --clr-primary-70: #BEE8E5; + --clr-primary-90: #F1FCFD; + --clr-secondary: #ffb84c; + --clr-accent: #886634; + --clr-neutral-30: #46524E; + --clr-neutral-70: #B4BABE; + --clr-neutral-90: #EBF3F1; + } +} + + @import url('https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap'); body{ diff --git a/cubeseed_login/src/styles/marketplaceprofile.module.css b/cubeseed_login/src/styles/marketplaceprofile.module.css new file mode 100644 index 0000000..fbf5103 --- /dev/null +++ b/cubeseed_login/src/styles/marketplaceprofile.module.css @@ -0,0 +1,388 @@ + + +/*================== +this color and style is only applicable to marketplace profile +==============================================================*/ + +.profileWrapper{ + display: flex; + max-width: 100%; + background-color: white; +} + +.sidebar{ + /* width: 25%; */ + height: 150vh; + padding: 4rem; + background-color: var(--clr-primary-90); + position:relative; + + + +} +.homeExpanded { + width: 75%; + padding: 2rem; + padding-left: 2rem; + padding-right: 4rem; +} + +.homeCollapsed { + width: 90%; + padding: 2rem; + padding-left: 8rem; + padding-right: 6rem; +} +.hrExpanded{ + width: 100%; +} +.hrCollapsed{ +width: 80%; +} + + +.helpBar{ + display: flex; + justify-content: flex-end; + align-items: flex-end; + text-align: end; + gap: 1.5rem; + padding-bottom: 4rem; +} +.helpBar p{ + color: var(--clr-primary); + font-size: 18px; + font-weight: bold; +} +.categoryInput{ + display: flex; + justify-content: space-between; + padding-bottom: 3.5rem; +} +.categoryIcons{ + display: flex; + justify-content: space-between; + justify-content: flex-start; + align-items: flex-start; + gap: 2rem; + padding-top: 1rem; + padding-left: 2rem; + color: var(--clr-primary-10); + font-size: 1.5rem; +} +.accountLinks{ + display: flex; + text-align: start; + justify-content: flex-start; + align-items: flex-start; + gap: 1.5rem; +} +.accountLinks a:hover, +.accountLinks a:active{ + border-bottom: 2px solid black; +} + + +.accountTile{ + display: flex; + gap: 1rem; + padding-top: 2rem; +} +.accountLinks a{ + font-size: 16px; + padding-bottom: 5px; +} +.accountTile p, +.accountLinks a{ + color:#000000; +} +.accountTile hr { + background: #B9B5B5; + /* width:80%; */ + padding-left: 5rem; + margin-top: 10px; +} +.accountTileHr{ + width: 80%; +} +.accountTileHr2{ + width:63%; +} + +.mainContent{ + display: flex; + flex-direction: row; + gap: 2.5rem; + padding-top: 2rem; +} +.profileImg { + width: 20%; + display: flex; + flex-direction: column; + align-items: center; +} + +.imageContainer { + position: relative; + width: 100px; + height: 100px; + border-radius: 50%; + background-color: #C8A2A2; + display: flex; + align-items: center; + justify-content: center; +} + +.uploadButton{ + position: relative; + cursor:pointer; + text-align: start; + top: 2rem; + left: -5px; + color: var(--clr-primary-10); + border-bottom: 2px solid var(--clr-primary-10); + padding-top: 5px; + +} + + +.demoImage { + font-size: 48px; +} + +.timesIcon { + cursor: pointer; +} + +#fileInput { + display: none; +} + + + + +.profileImg img{ + border-radius: 50%; + margin: auto; +} +.uploadBtn{ + margin-top: 6rem; + cursor: pointer; + +} +.profileContent{ + width: 80%; + color: var(--clr-primary); +} + +.inputForm{ + display:flex; + flex-direction: column; + padding-top:4%; + width: 50%; + gap: 2rem; + +} +/* .css-1u3bzj6-MuiFormControl-root-MuiTextField-root{ + width:50%; +} */ +.docs{ + width: 100%; +} +.docs p{ + line-height: 1.5rem; +} +.profileContent p, +.formEditTitle, +.accountTile p, +.accountLinks{ + color: var(--clr-primary); +font-size: 14px; +font-style: normal; +font-weight: 600; +line-height: 20px; +} +.profileContent hr{ + width: 100%; + margin-top: 2rem; +} +.formContent p{ + color: var(--clr-primary-10); + font-weight: 400; + font-size: 14px; +} + + +.error{ + font-size:14px; + color: red; +} + + +.formEditTitle{ + display: flex; + flex-direction: row; + justify-content: space-between; + padding-top: 2rem; +} + +.formEditTitle:first-child{ + padding-top: 0; +} +.formEditTitle p:last-child{ + border-bottom: 2px solid black; + padding-top: 5px; +} + + +/*============================ +Search Bar +==============================*/ + +.searchBar{ + display:flex; + align-items: center; + border-radius: 50px; + width: 700px; + background-color: var(--clr-neutral-90); + box-shadow: rgba(0, 0, 0, 0.15) 0px 5px 15px 0px; + +} +.dropDown{ + position: relative; + width: 280px; + /* border-radius: 50px; */ + border-top-left-radius: 50px; + border-bottom-left-radius: 50px; + border: 1px solid var(--clr-primary-70); + background-color: var(--clr-primary-70); + cursor: pointer; + box-shadow: rgba(0, 0, 0, 0.15) 0px 5px 15px 0px; + +} + +.dropDownText{ + display: flex; + align-items: center; + justify-content: space-between; + font-size: 1rem; + font-weight: 500; + color: var(--clr-primary); + padding: 1rem 1.5rem; +} + +.dropDownList{ + position: absolute; + top: 4rem; + left:0; + width:100%; + max-height: 0; + overflow:hidden; + border-radius:15px; + background-color: var(--clr-primary-90); + text-align: start; + transition: max-height .5s; + +}.listShow{ + max-height: 300px; +} +.dropDownItems{ + font-size: 16px; + font-weight: 500; + padding: 1rem 0 1rem 1.5rem; + cursor: pointer; + transition: margin-left .2s ease; + +} +.dropDownItems:hover{ + margin-left: 0.5rem; + color: var(--clr-secondary); + +} +.searchBox{ + display:flex; + align-items: center; + padding-right: 1rem; + width: 100%; + color: var(--clr-primary); + +} +.input { + border: 0; + border-radius: none; + position: none; + width: 100%; + margin: 0; + line-height: 0; + outline: none; +} +.searchBox input{ + padding: 1rem; + width:100%; + font-size: 16px; + font-weight:500; + color: var(--clr-primary-10); + border: 0; + outline: 0; + background-color: var(--clr-neutral-90); + /* background-color: blue; */ +} +.searchIcon{ + font-size: 1.3rem; + cursor: pointer; + color: var(--clr-primary-10); +} + +.searchBox input::placeholder{ + font-size: 1rem; + font-weight: 500; + color: var(--clr-neutral-70); + +} + + +/*==================== +btn +====================*/ + +.btn, +.btnBusiness{ + display: flex; + flex-direction: row; + justify-content: space-between; + padding: 2rem; + padding-top: 6rem; +} +/* .btnBusiness{ + justify-content: flex-end; + align-items: flex-end; +} */ +.btnFilled, +.btnOutlined{ + border-radius:50px; + background-color: var(--clr-secondary); + color: var(--clr-primary); + padding: 15px; + font-size: 16px; + font-weight: 600; +} +.btnFilled{ + width: 20%; +} +.btnOutlined{ + background-color: white; + border: 1px solid var(--clr-primary); +} + +.docUpload{ + display: flex; + flex-direction: row; + gap: 4rem; + padding-top: 2rem; + padding-bottom: 4rem; + width:100% + +} + + + \ No newline at end of file diff --git a/cubeseed_login/tsconfig.json b/cubeseed_login/tsconfig.json index bc71357..9440f22 100644 --- a/cubeseed_login/tsconfig.json +++ b/cubeseed_login/tsconfig.json @@ -26,6 +26,6 @@ } ] }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "src/pages/dashboard/marketplace_profile/layout.tsx"], "exclude": ["node_modules"] }