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 (
+
+ );
+};
+
+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
+
+
+
+
+
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 (
+
+ );
+};
+
+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 (
+
+ );
+};
+
+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 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 (
+
+ );
+};
+
+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 (
+
+ );
+ };
+
+ 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 &&
}
+
+
+
+
+ {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 (
+
+
+
+
+
+
+
+
+
+
+ {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"]
}