diff --git a/package-lock.json b/package-lock.json index ccb8b324c..28bf96b06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mulearnfrontend", - "version": "0.0.4", + "version": "0.0.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mulearnfrontend", - "version": "0.0.4", + "version": "0.0.5", "dependencies": { "@chakra-ui/react": "^2.6.1", "@emotion/react": "^11.10.6", @@ -15,16 +15,19 @@ "axios": "^1.3.4", "file-saver": "^2.0.5", "formik": "^2.2.9", - "framer-motion": "^10.15.0", + "framer-motion": "^10.18.0", + "html2canvas": "^1.4.1", + "jspdf": "^2.5.1", "lottie-react": "^2.4.0", "moment": "^2.29.4", "razorpay": "^2.9.3", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-fast-marquee": "^1.6.4", "react-google-charts": "^4.0.0", "react-helmet": "^6.1.0", "react-hot-toast": "^2.4.1", - "react-icons": "^4.10.1", + "react-icons": "^4.12.0", "react-qr-code": "^2.0.11", "react-router-dom": "^6.9.0", "react-select": "^5.7.7", @@ -4410,6 +4413,12 @@ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "optional": true + }, "node_modules/@types/react": { "version": "18.0.27", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", @@ -5027,6 +5036,17 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.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", @@ -5178,6 +5198,14 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -5252,6 +5280,17 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -5302,6 +5341,25 @@ } ] }, + "node_modules/canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -5432,6 +5490,17 @@ "toggle-selection": "^1.0.6" } }, + "node_modules/core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "hasInstallScript": true, + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-js-compat": { "version": "3.33.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", @@ -5487,6 +5556,14 @@ "tiny-invariant": "^1.0.6" } }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -5761,6 +5838,12 @@ "csstype": "^3.0.2" } }, + "node_modules/dompurify": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.5.tgz", + "integrity": "sha512-FgbqnEPiv5Vdtwt6Mxl7XSylttCC03cqP5ldNT2z+Kj0nLxPHJH4+1Cyf5Jasxhw93Rl4Oo11qRoUV72fmya2Q==", + "optional": true + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -6628,6 +6711,11 @@ "reusify": "^1.0.4" } }, + "node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -6791,9 +6879,9 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/framer-motion": { - "version": "10.15.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.15.0.tgz", - "integrity": "sha512-HDjWrYWgbO5orKuhnXETLFzk7UUvwWur2HFs2elAZ8lVpI49ClHql31DNTVvVBcOrSHfAOS4eBDBedIvOx634w==", + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz", + "integrity": "sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==", "dependencies": { "tslib": "^2.4.0" }, @@ -7184,6 +7272,18 @@ "react-is": "^16.7.0" } }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -7768,6 +7868,23 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.4.8" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "html2canvas": "^1.0.0-rc.5" + } + }, "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", @@ -8489,6 +8606,15 @@ } ] }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, "node_modules/razorpay": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/razorpay/-/razorpay-2.9.3.tgz", @@ -8540,6 +8666,15 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==" }, + "node_modules/react-fast-marquee": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/react-fast-marquee/-/react-fast-marquee-1.6.4.tgz", + "integrity": "sha512-LAgvhRmHdqaUQ8R5jCUwzEGFUIjnCCt3T3W8X7j7wF6DWe0SATlpP0JX1V0pp2qX3DYUezmn1Iz5AtRFdL2EWQ==", + "peerDependencies": { + "react": ">= 16.8.0 || 18.0.0", + "react-dom": ">= 16.8.0 || 18.0.0" + } + }, "node_modules/react-focus-lock": { "version": "2.9.4", "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.4.tgz", @@ -8601,9 +8736,9 @@ } }, "node_modules/react-icons": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", - "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz", + "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==", "peerDependencies": { "react": "*" } @@ -9132,6 +9267,15 @@ "node": ">=0.10.0" } }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -9431,6 +9575,15 @@ "node": ">=0.10.0" } }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, "node_modules/stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", @@ -9584,6 +9737,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -9981,6 +10151,14 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -13543,6 +13721,12 @@ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, + "@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "optional": true + }, "@types/react": { "version": "18.0.27", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", @@ -13986,6 +14170,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -14111,6 +14300,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -14159,6 +14353,11 @@ "update-browserslist-db": "^1.0.13" } }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, "cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -14186,6 +14385,22 @@ "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", "dev": true }, + "canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "optional": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + } + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -14293,6 +14508,12 @@ "toggle-selection": "^1.0.6" } }, + "core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "optional": true + }, "core-js-compat": { "version": "3.33.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", @@ -14338,6 +14559,14 @@ "tiny-invariant": "^1.0.6" } }, + "css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "requires": { + "utrie": "^1.0.2" + } + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -14535,6 +14764,12 @@ "csstype": "^3.0.2" } }, + "dompurify": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.5.tgz", + "integrity": "sha512-FgbqnEPiv5Vdtwt6Mxl7XSylttCC03cqP5ldNT2z+Kj0nLxPHJH4+1Cyf5Jasxhw93Rl4Oo11qRoUV72fmya2Q==", + "optional": true + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -15204,6 +15439,11 @@ "reusify": "^1.0.4" } }, + "fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -15322,9 +15562,9 @@ } }, "framer-motion": { - "version": "10.15.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.15.0.tgz", - "integrity": "sha512-HDjWrYWgbO5orKuhnXETLFzk7UUvwWur2HFs2elAZ8lVpI49ClHql31DNTVvVBcOrSHfAOS4eBDBedIvOx634w==", + "version": "10.18.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz", + "integrity": "sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==", "requires": { "@emotion/is-prop-valid": "^0.8.2", "tslib": "^2.4.0" @@ -15602,6 +15842,15 @@ "react-is": "^16.7.0" } }, + "html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -16021,6 +16270,21 @@ "universalify": "^2.0.0" } }, + "jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "requires": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "fflate": "^0.4.8", + "html2canvas": "^1.0.0-rc.5" + } + }, "jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", @@ -16538,6 +16802,15 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "requires": { + "performance-now": "^2.1.0" + } + }, "razorpay": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/razorpay/-/razorpay-2.9.3.tgz", @@ -16580,6 +16853,12 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==" }, + "react-fast-marquee": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/react-fast-marquee/-/react-fast-marquee-1.6.4.tgz", + "integrity": "sha512-LAgvhRmHdqaUQ8R5jCUwzEGFUIjnCCt3T3W8X7j7wF6DWe0SATlpP0JX1V0pp2qX3DYUezmn1Iz5AtRFdL2EWQ==", + "requires": {} + }, "react-focus-lock": { "version": "2.9.4", "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.4.tgz", @@ -16619,9 +16898,9 @@ } }, "react-icons": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", - "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz", + "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==", "requires": {} }, "react-is": { @@ -16992,6 +17271,12 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "optional": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -17184,6 +17469,12 @@ "tweetnacl": "~0.14.0" } }, + "stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "optional": true + }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", @@ -17295,6 +17586,20 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true + }, + "text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "requires": { + "utrie": "^1.0.2" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -17572,6 +17877,14 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "requires": { + "base64-arraybuffer": "^1.0.2" + } + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", diff --git a/package.json b/package.json index e489e6ff3..227d05c07 100644 --- a/package.json +++ b/package.json @@ -18,16 +18,19 @@ "axios": "^1.3.4", "file-saver": "^2.0.5", "formik": "^2.2.9", - "framer-motion": "^10.15.0", + "framer-motion": "^10.18.0", + "html2canvas": "^1.4.1", + "jspdf": "^2.5.1", "lottie-react": "^2.4.0", "moment": "^2.29.4", "razorpay": "^2.9.3", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-fast-marquee": "^1.6.4", "react-google-charts": "^4.0.0", "react-helmet": "^6.1.0", "react-hot-toast": "^2.4.1", - "react-icons": "^4.10.1", + "react-icons": "^4.12.0", "react-qr-code": "^2.0.11", "react-router-dom": "^6.9.0", "react-select": "^5.7.7", diff --git a/src/App.tsx b/src/App.tsx index 2b58bc896..a5c709691 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -46,6 +46,7 @@ import Analytics from "./modules/Dashboard/modules/UrlShortener/Pages/Analytics" import Donation from "./modules/Public/Donation/Donation"; import Refund from "./modules/Public/Donation/pages/Refund"; import DonationSuccess from "./modules/Public/Donation/pages/DonationSuccess"; +import OpenGrad from "./modules/Dashboard/modules/OpenGrad"; const Profile = lazy( () => import("./modules/Dashboard/modules/Profile/pages/Profile") @@ -241,6 +242,10 @@ const ConnectedDevices = lazy( ); const Wadhwani = lazy(() => import("./modules/Dashboard/modules/Wadhwani")); +const Trivial = lazy( + () => import("./modules/Public/TrivialIdeas/modules/trivial") +); + function App() { const AuthChecker = SecureAuthRoutes(); const router = createBrowserRouter([ @@ -277,6 +282,10 @@ function App() { path: "donation/refund", element: }, + { + path: "trivial-ideas", + element: + }, { path: "/", element: , @@ -319,6 +328,10 @@ function App() { path: "wadhwani", element: }, + { + path: "opengrad", + element: + }, { path: "refer", element: diff --git "a/src/assets/\302\265Learn.png" "b/src/assets/\302\265Learn.png" new file mode 100644 index 000000000..40881aa27 Binary files /dev/null and "b/src/assets/\302\265Learn.png" differ diff --git a/src/modules/Dashboard/layouts/DashboardRootLayout.tsx b/src/modules/Dashboard/layouts/DashboardRootLayout.tsx index 3afb69cd7..a9f296452 100644 --- a/src/modules/Dashboard/layouts/DashboardRootLayout.tsx +++ b/src/modules/Dashboard/layouts/DashboardRootLayout.tsx @@ -14,7 +14,8 @@ import { fetchLocalStorage } from "@/MuLearnServices/common_functions"; const DashboardRootLayout = (props: { component?: any }) => { const [connected, setConnected] = useState(false); - const Management: ManagementTypes[] = Object.values(managementTypes).slice(2); + const Management: ManagementTypes[] = + Object.values(managementTypes).slice(2); useEffect(() => { const userInfo = fetchLocalStorage("userInfo"); if (userInfo) { @@ -64,6 +65,12 @@ const DashboardRootLayout = (props: { component?: any }) => { hasView: true, icon: }, + { + url: "/dashboard/opengrad", + title: "OpenGrad", + hasView: true, + icon: + }, { url: "/dashboard/refer", title: "Referrals", @@ -105,13 +112,13 @@ const DashboardRootLayout = (props: { component?: any }) => { title: "Manage Organization", hasView: true, - roles: [roles.ADMIN, roles.FELLOW, roles.ASSOCIATE], + roles: [roles.ADMIN, roles.FELLOW], children: [ { url: "/dashboard/affiliation", title: "Affiliation", hasView: true, - roles: [roles.ADMIN, roles.FELLOW, roles.ASSOCIATE] + roles: [roles.ADMIN, roles.FELLOW] }, { url: "/dashboard/organization-transfer", @@ -233,7 +240,7 @@ const DashboardRootLayout = (props: { component?: any }) => { url: "/dashboard/channels", title: "Channels", hasView: true, - roles: [roles.ADMIN, roles.FELLOW, roles.ASSOCIATE] + roles: [roles.ADMIN, roles.FELLOW] }, { diff --git a/src/modules/Dashboard/modules/ManageUsers/UserForm.tsx b/src/modules/Dashboard/modules/ManageUsers/UserForm.tsx index cf3fa4f2c..a472ee4e3 100644 --- a/src/modules/Dashboard/modules/ManageUsers/UserForm.tsx +++ b/src/modules/Dashboard/modules/ManageUsers/UserForm.tsx @@ -142,7 +142,15 @@ const UserForm = forwardRef( const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; - setData(prevData => ({ ...prevData, [name]: value })); + if (name === "mobile" && value && !/^\+?\d{0,12}$/.test(value.trim())) { + setErrors(prevErrors => ({ + ...prevErrors, + mobile: "Invalid format" + })); + } else { + setErrors(prevErrors => ({ ...prevErrors, mobile: undefined })); + setData(prevData => ({ ...prevData, [name]: value.trim() || " " })); + } }; const handleYearChange = (e: React.ChangeEvent) => { @@ -373,7 +381,7 @@ const UserForm = forwardRef(
{ + const isLoading = false; // Set to true if you want to show the loader + + const hardcodedCourses = [ + { + courseId: "1", + url: "home/test", + courseName: "MBA Bundle", + // description: + // "This is a description of course 1. It provides an overview of the course content.", + // CourseDuration: "10", + imageUrl: + "https://imgproxy.learnyst.com/learnyst-user-assets/school-assets/schools/157986/courses/189940/17128570399041564c161_efc4_475b_9151_8549c1ac8969_lyst1712857039920.jpg", + lessons: " " + }, + { + courseId: "1", + url: "CAT-Malayalam", + courseName: "CAT (Malayalam)", + // description: + // "This is a description of course 1. It provides an overview of the course content.", + // CourseDuration: "10", + imageUrl: + "https://imgproxy.learnyst.com/learnyst-user-assets/school-assets/schools/157986/courses/195295/1718119061947Screenshot_2024_06_11_at_81501_PMpng_lyst1718119061974.png", + lessons: "17 lessons" + }, + { + courseId: "3", + url: "CUET-UG-Malayalam", + courseName: "CUET UG (Malayalam)", + // description: + // "This is a description of course 1. It provides an overview of the course content.", + // CourseDuration: "10", + imageUrl: + "https://imgproxy.learnyst.com/learnyst-user-assets/school-assets/schools/157986/courses/189121/1712066546664ddd958be_3b42_4082_84de_893bf0061a32_lyst1786.jpg", + lessons: "60 lessons" + }, + { + courseId: "4", + url: "CUET-UG-Mock-Tests-test", + courseName: "CUET UG Questions & Mocks", + // description: + // "This is a description of course 1. It provides an overview of the course content.", + // CourseDuration: "10", + imageUrl: + "https://imgproxy.learnyst.com/learnyst-user-assets/school-assets/schools/157986/courses/186487/1711619074132fc94d707_d408_4c2d_aeaa_446cd850b7f4_lyst9700.jpg", + lessons: " " + } + // { + // courseId: "", + // url: "root", + // courseName: "", + // // description: + // // "This is a description of course 1. It provides an overview of the course content.", + // // CourseDuration: "10", + // imageUrl: "", + // lessons: + // }, + ]; + + const handleCourseSelection = (id: string) => { + // Replace with actual course link if necessary + const courseLink = `https://opengrad-foundation.learnyst.com/learn/${id}`; + window.open(courseLink, "_blank"); + }; + + const CourseCard: React.FC = ({ + title, + // desc, + // duration, + url, + imageUrl, + lessons + }) => { + return ( +
+ {title} +
+

{title}

+ {/*

{desc}

+

{duration}hrs

*/} +

{lessons}

+
+ +
+ ); + }; + if (isLoading) { + return ; + } + return ( +
+

OpenGrad Courses

+
+
+
+
+ {hardcodedCourses.map(course => ( + + ))} +
+
+
+
+
+ ); +}; + +export default OpenGrad; diff --git a/src/modules/Dashboard/modules/Profile/components/Certificate/Certificate.module.css b/src/modules/Dashboard/modules/Profile/components/Certificate/Certificate.module.css new file mode 100644 index 000000000..28d9cbcb6 --- /dev/null +++ b/src/modules/Dashboard/modules/Profile/components/Certificate/Certificate.module.css @@ -0,0 +1,29 @@ +.certificate_container { + display: flex; + align-items: center; /* Centers horizontally */ + justify-content: center; /* Centers vertically */ + margin-top: 20px; +} + +.certificate { + padding: 20px; + border: 2px solid #000; + border-radius: 10px; + width: 80%; + text-align: center; + background-color: #20151d; +} + +.certificate h1 { + font-size: 24px; + font-weight: bold; +} + +.certificate p { + font-size: 18px; + margin-bottom: 10px; +} + +.certificate strong { + font-weight: bold; +} diff --git a/src/modules/Dashboard/modules/Profile/components/Certificate/Certificate.tsx b/src/modules/Dashboard/modules/Profile/components/Certificate/Certificate.tsx new file mode 100644 index 000000000..f051b8abe --- /dev/null +++ b/src/modules/Dashboard/modules/Profile/components/Certificate/Certificate.tsx @@ -0,0 +1,121 @@ +import React, { useRef, useEffect } from "react"; +import html2canvas from "html2canvas"; +import MulearnBrand from "../../assets/svg/MulearnBrand"; + +type CertificateProps = { + name: string; + muid: string; + level: number; + karma: number; + interestGroups: string[]; +}; + +const Certificate: React.FC = ({ + name, + muid, + level, + karma, + interestGroups +}) => { + const pdfElement = useRef(null); + + useEffect(() => { + handleDownloadPDF(); + }, []); + + const handleDownloadPDF = () => { + html2canvas(pdfElement.current!).then(canvas => { + const imgData = canvas.toDataURL("image/png"); + // Create a link element + const link = document.createElement("a"); + // Set the download attribute with a filename + link.download = "Certificate.png"; + // Set the href attribute to the image data URL + link.href = imgData; + // Append the link to the document body (this is necessary for Firefox) + document.body.appendChild(link); + // Trigger the download + link.click(); + // Remove the link from the document + document.body.removeChild(link); + }); + }; +// MODIFY THIS RETURN TO STYLE THE CERTIFICATE + return ( + <> +
+
+
+ +
+

+ Certificate of Achievement +

+
+ This is to certify that {name + " "} + has successfully achieved Level: {level + " "} + with a total of {karma} Karma points +
+ and is actively participating in the following interest + groups: + {" " + interestGroups.join(", ") + " "} +
+ muID: {muid} +
+
+ Signature: __________________________ +
+ muLearn Team +
+ Dated: {new Date().toLocaleDateString()} +
+
+
+ + ); +}; + +export default Certificate; diff --git a/src/modules/Dashboard/modules/Profile/components/ShareProfilePopUp/pages/ShareProfilePopUp.module.css b/src/modules/Dashboard/modules/Profile/components/ShareProfilePopUp/pages/ShareProfilePopUp.module.css index e404c71b3..b8982e9a6 100644 --- a/src/modules/Dashboard/modules/Profile/components/ShareProfilePopUp/pages/ShareProfilePopUp.module.css +++ b/src/modules/Dashboard/modules/Profile/components/ShareProfilePopUp/pages/ShareProfilePopUp.module.css @@ -16,7 +16,7 @@ .share_pop_up { margin: 15dvh auto auto; height: auto; - width: 400px; + width: 450px; background: white; border-radius: 10px; box-shadow: 1px 1px 20px 1px #8c8c8c47; @@ -39,10 +39,12 @@ } & button { + width: 100%; padding: 16px; - background: #f3f3f4; + background: red; border-radius: 10px; + color: white } .profile_state { @@ -64,6 +66,7 @@ gap: 10px; width: 100%; + .embed_copy_btn { background: #456ff6; color: #fff; @@ -188,4 +191,4 @@ .share_pop_up_container .share_pop_up { width: 90vw; } -} +} \ No newline at end of file diff --git a/src/modules/Dashboard/modules/Profile/components/ShareProfilePopUp/pages/ShareProfilePopUp.tsx b/src/modules/Dashboard/modules/Profile/components/ShareProfilePopUp/pages/ShareProfilePopUp.tsx index 38979b04f..67a921f78 100644 --- a/src/modules/Dashboard/modules/Profile/components/ShareProfilePopUp/pages/ShareProfilePopUp.tsx +++ b/src/modules/Dashboard/modules/Profile/components/ShareProfilePopUp/pages/ShareProfilePopUp.tsx @@ -1,9 +1,13 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, useRef } from "react"; +import ReactDOM from "react-dom"; import styles from "./ShareProfilePopUp.module.css"; import { Switch } from "@chakra-ui/react"; import { MuButton } from "@/MuLearnComponents/MuButtons/MuButton"; import { saveAs } from "file-saver"; import { fetchQRCode } from "../services/api"; +import Certificate from "../../Certificate/Certificate"; + +import html2canvas from "html2canvas"; type Props = { popUP: boolean; @@ -14,32 +18,63 @@ type Props = { putIsPublic: (isPublic: boolean) => void; }; -const ShareProfilePopUp = (props: Props) => { +const ShareProfilePopUp: React.FC = props => { const [copy, setCopy] = useState(false); const [blob, setBlob] = useState(); const [embedSize, setEmbedSize] = useState("100px"); + const certificateRef = useRef(null); + useEffect(() => { fetchQRCode(setBlob); }, []); + useEffect(() => { window.history.pushState(null, "", window.location.href); window.addEventListener("popstate", () => { props.setPopUP(false); }); }, [props.popUP]); + const downloadQR = () => { saveAs(blob, `${props.userProfile.muid}.png`); }; + + const downloadPNG = () => { + if (certificateRef.current) { + html2canvas(certificateRef.current).then((canvas) => { + const imgData = canvas.toDataURL('image/png'); + const link = document.createElement('a'); + link.href = imgData; + link.download = 'certificate.png'; + link.click(); + }); + } + }; + + const openCertificateInNewTab = () => { + const newTab = window.open('', '_blank'); + if (newTab) { + const certificateComponent = ( + + ); + newTab.document.body.innerHTML = '
'; + ReactDOM.render(certificateComponent, newTab.document.getElementById('certificate-root')); + } + }; + return ( <>
{ @@ -70,19 +105,16 @@ const ShareProfilePopUp = (props: Props) => { {props.profileStatus && (
- + QR Code
- {/* Todo: Reusable copy link component */}

{ import.meta.env .VITE_FRONTEND_URL as string } - /profile/ - {props.userProfile.muid} + /profile/{props.userProfile.muid}

- { navigator.clipboard.writeText( @@ -100,11 +132,9 @@ const ShareProfilePopUp = (props: Props) => { }} className="fi fi-sr-link" > - {/* Todo: Create as left Side Tooltip Component for below component */}

{!copy ? "Copy" : "Copied!"}

- {/* Todo: Create as left Side Tooltip Component for above component*/}
@@ -141,25 +171,38 @@ const ShareProfilePopUp = (props: Props) => { { - downloadQR(); - }} + onClick={downloadQR} />
)} - +
+ + +
@@ -167,4 +210,4 @@ const ShareProfilePopUp = (props: Props) => { ); }; -export default ShareProfilePopUp; +export default ShareProfilePopUp; \ No newline at end of file diff --git a/src/modules/Dashboard/modules/Tasks/TaskApis.ts b/src/modules/Dashboard/modules/Tasks/TaskApis.ts index ee8ba8268..02d5339e6 100644 --- a/src/modules/Dashboard/modules/Tasks/TaskApis.ts +++ b/src/modules/Dashboard/modules/Tasks/TaskApis.ts @@ -112,7 +112,7 @@ export const editTask = async ( bonus_karma?: string ) => { try { - const formattedBonusTime = bonus_time + const formattedBonusTime = (bonus_time && bonus_time != "") ? new Date(bonus_time).toISOString() // Convert bonus_time to ISO format : null; diff --git a/src/modules/Dashboard/modules/Wadhwani/index.module.css b/src/modules/Dashboard/modules/Wadhwani/index.module.css index 456268457..023487c11 100644 --- a/src/modules/Dashboard/modules/Wadhwani/index.module.css +++ b/src/modules/Dashboard/modules/Wadhwani/index.module.css @@ -100,4 +100,5 @@ color: white; padding: 0.5rem 1rem; border-radius: 5px; + cursor: pointer; } \ No newline at end of file diff --git a/src/modules/Dashboard/modules/Wadhwani/index.tsx b/src/modules/Dashboard/modules/Wadhwani/index.tsx index 59c9b1755..05a1e80bf 100644 --- a/src/modules/Dashboard/modules/Wadhwani/index.tsx +++ b/src/modules/Dashboard/modules/Wadhwani/index.tsx @@ -90,10 +90,17 @@ function getRootIdByTitle(titleToSearch: string): string { console.log(course?.courseName + titleToSearch) return course ? course.courseRootId : "null"; } - - function stringSlice(inputString: string): string { - return inputString.substring(3, 200); +function stringSlice(inputString: string): string { + const secondPeriodIndex = inputString.indexOf( + ".", + inputString.indexOf(".") + 1 + ); + if (secondPeriodIndex !== -1) { + return inputString.substring(0, secondPeriodIndex + 1).trim(); } + return inputString.substring(0, 200); +} + const CourseCard: React.FC = ({ title, desc, duration, rootId }) => { return (
@@ -108,7 +115,9 @@ function getRootIdByTitle(titleToSearch: string): string {
); }; - + if (isLoading) { + return ; + } return (

Wadhwani Foundation Courses

diff --git a/src/modules/Public/Donation/Donation.module.css b/src/modules/Public/Donation/Donation.module.css index 808db5897..58cc26b5a 100644 --- a/src/modules/Public/Donation/Donation.module.css +++ b/src/modules/Public/Donation/Donation.module.css @@ -1,93 +1,92 @@ .LClandingPage { - position: relative; - overflow-x: hidden; + display: flex; + justify-content: space-around; + margin: 10rem 0; + margin-bottom: 8rem; } -.joinCircle { - background: var(--blue); - border-radius: var(--borderRadius); - padding: 0.5rem 1rem; - font-size: 0.8rem; - margin-top: 1rem; - width: 6rem; - color: #fff; +.DonationHero { + width: 80vw; + min-height: 60vh; + display: flex; } - -.backgroundImage { - top: 0; - position: absolute; - - z-index: -2; +.HeroLeft { + width: 50%; + background-color: white; + display: flex; + flex-direction: column; + gap: 1rem; + padding: 5px; } - -.backgroundImage img { - width: 100vw; - height: 110vh; +.HeroLeft h1 { + font-size: 4.4rem; + font-weight: bold; + line-height: 5rem; } - -.LClandingPageHero { - /* background-image: url(https://i.ibb.co/cCvB4r6/Learning-BG.png); - background-repeat: no-repeat; - background-size: cover; - background-position: center; */ - position: relative; - height: 100vh; - width: 100%; +.HeroLeft h1:nth-child(2) { + background: linear-gradient(30deg, #6660f4, #af2ee6); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.HeroLeft p { + font-size: 1.4rem; + font-weight: 500; + margin-top: 0.5rem; +} +.OrgContainer { + display: flex; + gap: 2.5rem; + flex-wrap: wrap; +} +.OrgContainer img { + max-width: 120px; + max-height: 60px; +} +.HeroLeft .Stats { + display: flex; + gap: 2.8rem; +} +.HeroLeft .Stats div { display: flex; - align-items: center; - justify-content: center; flex-direction: column; - text-align: center; - gap: 1rem; - padding-top: 5rem; } - -@media screen and (min-width: 800px) { - .LClandingPageHero { - height: 75vh; - } +.HeroLeft .Stats div h3 { + font-size: 2.5rem; + font-weight: 600; } - -.LClandingPageHero span { +.HeroLeft .Stats div h4 { + font-weight: 500; + font-size: 1.4rem; + text-align: center; +} +.HeroImgContainer { + width: 50%; display: flex; - align-items: center; + align-items: start; justify-content: center; - gap: 1rem; - font-size: 3.5rem; - color: #000; + padding-top: 2rem; } - -.LClandingPageHero span img { - position: relative; - top: 0.75rem; - height: 3rem; +.HeroImgContainer img { + border-radius: 24px; + max-width: 600px; + height: 50vh; + object-fit: cover; + overflow: hidden; + box-shadow: 10px 10px 40px 5px #eff2f6, -10px -10px 40px 5px #eff2f6; } - -.LClandingPageHero .dash { - position: absolute; - top: -50%; - width: 120%; - height: 100%; - border: 5px solid #accaf6; - border-style: dashed; - border-radius: 45%; -} - -.LClandingPageHero .heroTitle b:nth-child(2) { - font-size: 4rem; - color: var(--blue); - position: relative; - top: -1rem; - background-image: linear-gradient(to right, #ddecff, #eaf3ff); - border-radius: 10%; - height: -1rem; - padding: 0rem 0.5rem; +.MarqueeContainer { + background-color: var(--blue); + height: 65px; + width: 100vw; + display: flex; + align-items: center; + font-size: 2rem; + font-weight: 600; + color: white; } -.LClandingPageHero p { - width: 75%; - font-weight: 600; - font-size: 1.1rem; +.MarqueeContainer span { + color: black; } .DonationSection { @@ -96,54 +95,148 @@ display: flex; justify-content: center; margin-bottom: 6rem; + margin-top: 3rem; } .DonationFormElement { background: #fff; - box-shadow: -1.6px 6.4px 32px 3.2px rgba(0, 0, 0, 0.15); + box-shadow: 10px 10px 40px 5px #eff2f6, -10px 10px 40px 5px #eff2f6; width: 80%; - top: -25%; - padding: 1.5rem 3rem; + padding: 1.5rem 4rem; display: flex; + border-radius: 20px; gap: 2rem; } .DetailsContainer { - width: 100%; + width: 50%; display: flex; flex-direction: column; padding: 1rem 0; - gap: 0.2rem; + gap: 1rem; +} + +.DetailsContainer label { + position: relative; + top: 10px; + color: black; + font-size: 0.9rem; + font-weight: 700; +} + +.CheckOrgContainer { + display: flex; + align-items: center; +} + +.Checkbox { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + width: 20px; + height: 20px; + border: 2px solid #ccc; + border-radius: 4px; + outline: none; + cursor: pointer; + position: relative; + vertical-align: middle; + margin-right: 2px; + transition: 0.2s; +} + +.Checkbox:checked { + background-color: rgba(69, 110, 246, 0.16); + border-color: var(--blue); + transition: 0.2s; +} + +.Checkbox:checked::after { + content: ""; + position: absolute; + left: 5px; + top: 1px; + width: 5px; + height: 10px; + border: solid var(--blue); + border-width: 0 2px 2px 0; + transform: rotate(45deg); + transition: 0.2s; +} + +.OrgChecklabel{ + font-size: 1rem; + color: black; + font-weight: 500; + top: 0; + margin-left: 5px; } -.DetailsContainer h1, .DonationInputStyles { margin-bottom: 0.7rem; + height: 48px; + border-radius: 0.4rem; + max-width: 500px; + border: 1px solid #d5d4dc; + padding: 0.4rem 1rem; + transition: .2s; + transition: outline .05s; } -.DetailsContainer label { - margin: 0.2rem 0.5rem; +.DonationInputStyles:hover{ + border-color: #93b8fe; + background-color: #f5f8ff; } -.DetailsContainer h1 { - font-weight: 600; - font-size: 1.7rem; +.DonationInputStyles:focus{ + outline: 3px solid var(--blue); +} + +.DonationRightSide{ + width: 50%; + display: flex; + align-items: center; +} + +.AmountContainer { + display: flex; + flex-direction: column; + max-width: 468px; +} + +.AmountContainer h1 { + font-size: 14px; + font-weight: 700; +} + +.AmountContainer h4 { + text-align: center; + font-weight: 700; + font-size: 14px; + padding: 0.5rem 0; } .DonateButtonContainer { display: flex; - justify-content: center; + justify-content:center; + align-items: center; gap: 1rem; + padding: 0.8rem 0; + flex-wrap: wrap; } .DonateButtonContainer button { background-color: #fff; - width: 100%; - color: var(--blue); - border: 2px solid var(--blue); + color: black; + font-weight: 600; + border: 3px solid var(--blue); border-radius: 0.5rem; - padding: 0.9rem 1.4rem; - margin-bottom: 1rem; + width: 6.5rem; + height: 50px; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.2rem; } .DonateButtonContainer button:hover { @@ -155,61 +248,85 @@ background-color: var(--blue); color: #fff; } - -.DonationInputStyles { - border-radius: 0.4rem; - border: 1.12px solid rgba(45, 191, 252, 0.25); - box-shadow: 0px 1.6px 6.4px 0px rgba(0, 0, 0, 0.1); - padding: 0.4rem 1rem; - width: 100%; +.AmountField { + font-size: 1.5rem; + max-width:100%; + transition: .05s; } -.AmountField { - font-size: 1.8rem; - font-weight: 500; - padding: 0.5rem 1rem; +.AmountField:focus{ + outline: 3px solid var(--blue); } .CurrencyContainer { - position: relative; + padding: 0.5rem 0; + display: flex; + flex-direction: column; } .CurrencyContainer p { - position: absolute; - cursor: default; - font-weight: 200; - color: rgba(0, 0, 0, 0.5); - right: 1rem; - top: 20%; + font-weight: 700; + color: black; + font-size: 14px; + padding-bottom: .3rem; } -.TermsContainer { +.TermsContainer{ display: flex; - align-items: center; } -.TermsContainer input { - width: 1rem; +.TermsContainer .Checkbox{ + scale: .75; + top: -1px; + display: inline; + padding-right: 15px; + margin-right: 5px; } -.TermsContainer label { - cursor: default; - font-size: 0.7rem; - color: rgba(0, 0, 0, 0.8); +.TermsContainer label{ + font-size: 14px; + color:#8B849B; + font-weight: 400; + line-height: 18px; + text-align: start; +} + +.TermsContainer label a{ + text-decoration: underline; } .SubmitButton { margin-top: 1rem; font-size: 1.4rem; - width: 60%; - align-self: center; + width: 100%; + display: flex; + justify-content: center; } .SubmitButton button { - padding: 0.7rem 1rem; + padding: 8px 25px; + background-color: var(--blue); + color: white; + border-radius: 10px; + font-size: 1rem; } /* Refund Page */ +.RefundPage { + position: relative; + overflow-x: hidden; +} + +.backgroundImage { + top: 0; + position: absolute; + z-index: -2; +} + +.backgroundImage img { + width: 100vw; + height: 110vh; +} .refundSection { display: flex; @@ -266,11 +383,60 @@ gap: 1rem; } + .DonationFormElement { + padding: 1.5rem 2rem; + } + .SubmitButton { width: 100%; align-items: center; } } +@media only screen and (max-width: 820px) { + .LClandingPage { + margin-top: 6rem; + margin-bottom: 3rem; + } + + .HeroImgContainer { + display: none; + } + + .HeroLeft { + width: 100%; + } + + .HeroLeft h1 { + text-align: center; + } + + .HeroLeft p { + text-align: center; + } + + .OrgContainer { + flex-wrap: wrap; + justify-content: center; + } + + .HeroLeft .Stats { + justify-content: center; + } + + .DetailsContainer{ + width: 100%; + + } + + .DonationInputStyles{ + max-width: 600px; + } + + .DonationRightSide{ + width: 100%; + justify-content: center; + } +} @media (width<=550px) { .LClandingPageHero .dash { @@ -296,17 +462,11 @@ top: -10%; width: 96%; } - + .DonationRightSide{ + justify-content: center; + } .DonateButtonContainer { - /* flex-direction: column; */ align-items: center; - gap: 0.3rem; - } - .DonateButtonContainer button { - width: 100%; - padding: 0.4rem 0.8rem; - margin-bottom: 0.6rem; - font-size: 0.8rem; } .CurrencyContainer p, diff --git a/src/modules/Public/Donation/Donation.tsx b/src/modules/Public/Donation/Donation.tsx index 2f95855a8..58c8864a4 100644 --- a/src/modules/Public/Donation/Donation.tsx +++ b/src/modules/Public/Donation/Donation.tsx @@ -5,6 +5,12 @@ import Footer from "./components/Footer"; import Navbar from "./components/Navbar"; import { submitForm } from "./services/api"; import styles from "./Donation.module.css"; +import Marquee from "react-fast-marquee"; + +import icfoss from "./assets/icfoss.png"; +import kdu from "./assets/kdu.png"; +import kdisc from "./assets/kdisc.png"; +import heroImg from "./assets/heroImg.jpg"; const Donation = () => { const [amount, setAmount] = useState(); @@ -12,7 +18,7 @@ const Donation = () => { const [email, setEmail] = useState(""); const [mobile, setMobile] = useState(); const [pan, setPan] = useState(""); - const [selectedAmount, setSelectedAmount] = useState(10000); + const [selectedAmount, setSelectedAmount] = useState(0); const [isOrganisation, setIsOrganisation] = useState(false); const [company, setCompany] = useState(""); @@ -36,6 +42,8 @@ const Donation = () => { mobile: mobile, pan: pan }); + //save data to local storage + localStorage.setItem("donationData", JSON.stringify({ amount, name, company, email, mobile, pan }));// saving the data because the server does not return all the required data } else { submitForm({ amount: amount, @@ -44,6 +52,8 @@ const Donation = () => { mobile: mobile, pan: pan }); + //save data to local storage + localStorage.setItem("donationData", JSON.stringify({ amount, name, email, mobile, pan })); } }; @@ -83,35 +93,56 @@ const Donation = () => { }; return ( -
- +
+
+ -
- {/*
- textured background -
*/} - {/*
*/} -
- - Donate to{" "} - - - {/* Let's grow together */} +
+
+

Help us sustain

+

Our Mission

+

+ Foster innovation culture, introduce new + technologies, and develop skilled entrepreneurs. +

+
+ + + +
+
+
+

30k+

+

Students

+
+
+

300+

+

Events

+
+
+
+
+ +
-

- An informal mechanism for bringing together learners who are - interested in the same topic from across different fields - and disciplines. A fantastic way to spend a small amount of - time learning about new things with a group of people with - same interests! -

+
+ +
+ + Make Learning Accessible           +             +       Transform Education Today     +            +             Build Brighter + Futures               +             +   Make Learning Accessible         +             +         +
-
{ @@ -120,37 +151,38 @@ const Donation = () => { }} >
-

Details

- +
+ + setIsOrganisation(!isOrganisation) + } + className={styles.Checkbox} + /> +

+ I’m paying for an organization. +

+
+ setName(e.target.value)} required /> -
- - setIsOrganisation(!isOrganisation) - } - > - -
+ {isOrganisation && ( <> - + setCompany(e.target.value)} @@ -158,33 +190,33 @@ const Donation = () => { /> )} - + setEmail(e.target.value)} required /> - + setMobile(Number(e.target.value))} required /> - + { required />
- -
-

Donate

-
-
-
+
+
); }; diff --git a/src/modules/Public/Donation/assets/footer/facebook.webp b/src/modules/Public/Donation/assets/footer/facebook.webp new file mode 100644 index 000000000..40dd03239 Binary files /dev/null and b/src/modules/Public/Donation/assets/footer/facebook.webp differ diff --git a/src/modules/Public/Donation/assets/footer/instagram.webp b/src/modules/Public/Donation/assets/footer/instagram.webp new file mode 100644 index 000000000..71a91f188 Binary files /dev/null and b/src/modules/Public/Donation/assets/footer/instagram.webp differ diff --git a/src/modules/Public/Donation/assets/footer/linkedin.webp b/src/modules/Public/Donation/assets/footer/linkedin.webp new file mode 100644 index 000000000..6a10b8ab0 Binary files /dev/null and b/src/modules/Public/Donation/assets/footer/linkedin.webp differ diff --git a/src/modules/Public/Donation/assets/footer/twitter.webp b/src/modules/Public/Donation/assets/footer/twitter.webp new file mode 100644 index 000000000..7e278fbf5 Binary files /dev/null and b/src/modules/Public/Donation/assets/footer/twitter.webp differ diff --git a/src/modules/Public/Donation/assets/footer/whatsapp.svg b/src/modules/Public/Donation/assets/footer/whatsapp.svg new file mode 100644 index 000000000..b009a8b56 --- /dev/null +++ b/src/modules/Public/Donation/assets/footer/whatsapp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/modules/Public/Donation/assets/footer/youtube.webp b/src/modules/Public/Donation/assets/footer/youtube.webp new file mode 100644 index 000000000..1157be47d Binary files /dev/null and b/src/modules/Public/Donation/assets/footer/youtube.webp differ diff --git "a/src/modules/Public/Donation/assets/footer/\302\265Learn-white.webp" "b/src/modules/Public/Donation/assets/footer/\302\265Learn-white.webp" new file mode 100644 index 000000000..b9b321571 Binary files /dev/null and "b/src/modules/Public/Donation/assets/footer/\302\265Learn-white.webp" differ diff --git a/src/modules/Public/Donation/assets/heroImg.jpg b/src/modules/Public/Donation/assets/heroImg.jpg new file mode 100644 index 000000000..c6023d925 Binary files /dev/null and b/src/modules/Public/Donation/assets/heroImg.jpg differ diff --git a/src/modules/Public/Donation/assets/icfoss.png b/src/modules/Public/Donation/assets/icfoss.png new file mode 100644 index 000000000..db5a20913 Binary files /dev/null and b/src/modules/Public/Donation/assets/icfoss.png differ diff --git a/src/modules/Public/Donation/assets/kdisc.png b/src/modules/Public/Donation/assets/kdisc.png new file mode 100644 index 000000000..90d9e0080 Binary files /dev/null and b/src/modules/Public/Donation/assets/kdisc.png differ diff --git a/src/modules/Public/Donation/assets/kdu.png b/src/modules/Public/Donation/assets/kdu.png new file mode 100644 index 000000000..eca916ae3 Binary files /dev/null and b/src/modules/Public/Donation/assets/kdu.png differ diff --git a/src/modules/Public/Donation/assets/receipt/.svg b/src/modules/Public/Donation/assets/receipt/.svg new file mode 100644 index 000000000..b0f318b28 --- /dev/null +++ b/src/modules/Public/Donation/assets/receipt/.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Public/Donation/assets/receipt/group-75.svg b/src/modules/Public/Donation/assets/receipt/group-75.svg new file mode 100644 index 000000000..22ebbce09 --- /dev/null +++ b/src/modules/Public/Donation/assets/receipt/group-75.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Public/Donation/assets/receipt/learn.svg b/src/modules/Public/Donation/assets/receipt/learn.svg new file mode 100644 index 000000000..ab954c959 --- /dev/null +++ b/src/modules/Public/Donation/assets/receipt/learn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Public/Donation/assets/receipt/logo.png b/src/modules/Public/Donation/assets/receipt/logo.png new file mode 100644 index 000000000..2a9bcf6dd Binary files /dev/null and b/src/modules/Public/Donation/assets/receipt/logo.png differ diff --git a/src/modules/Public/Donation/assets/receipt/logo.svg b/src/modules/Public/Donation/assets/receipt/logo.svg new file mode 100644 index 000000000..db38ae0d5 --- /dev/null +++ b/src/modules/Public/Donation/assets/receipt/logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Public/Donation/assets/receipt/vector.svg b/src/modules/Public/Donation/assets/receipt/vector.svg new file mode 100644 index 000000000..6c68578a2 --- /dev/null +++ b/src/modules/Public/Donation/assets/receipt/vector.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/modules/Public/Donation/assets/receipt/watermark.svg b/src/modules/Public/Donation/assets/receipt/watermark.svg new file mode 100644 index 000000000..03fdf5c41 --- /dev/null +++ b/src/modules/Public/Donation/assets/receipt/watermark.svg @@ -0,0 +1,3 @@ + + + diff --git "a/src/modules/Public/Donation/assets/\302\265.png" "b/src/modules/Public/Donation/assets/\302\265.png" new file mode 100644 index 000000000..4f185d605 Binary files /dev/null and "b/src/modules/Public/Donation/assets/\302\265.png" differ diff --git "a/src/modules/Public/Donation/assets/\302\265.webp" "b/src/modules/Public/Donation/assets/\302\265.webp" deleted file mode 100644 index e1f19d2d7..000000000 Binary files "a/src/modules/Public/Donation/assets/\302\265.webp" and /dev/null differ diff --git a/src/modules/Public/Donation/components/Footer.module.css b/src/modules/Public/Donation/components/Footer.module.css index cdc22543f..88ed88294 100644 --- a/src/modules/Public/Donation/components/Footer.module.css +++ b/src/modules/Public/Donation/components/Footer.module.css @@ -1,125 +1,235 @@ -.footer { - padding: 5rem; - background: #e0eeff; - color: #000; -} -.footer > hr { - border: 1px solid #000; - opacity: 0.2; - margin: 5rem 0; -} -.container { - display: flex; - gap: 7rem; -} - -.centerContainer { - justify-content: center; -} - -.footerSection { - display: flex; - flex-direction: column; - gap: 1rem; -} - -.footerLogo { +.mainfooter_container { + margin-top: 2rem; + background-color: #E0EEFF; + color: black; + position: relative; + /* z-index: -1; */ + } + + .footer_container { + padding: 2rem; + } + + @media only screen and (min-width: 1000px) { + .footer_container { + max-width: 1300px; + margin: auto; + } + } + + .mulearn { + width: 6rem; + filter: invert(); + } + + .links { + margin-top: 1rem; display: flex; - flex-direction: column; - width: 25%; - padding: 0 2rem; - gap: 2rem; + flex-direction: row; + } + @media (max-width: 767px) { + .links_mobile { + display: flex; + } + } + + .link { + margin-top: 0; + margin-right: 1rem; + font-weight: 400; + font-size: 0.9rem; + } + + .link:hover { + color:var(--blue); + } + + .line { + margin-top: 2rem; + background-color: rgb(97, 97, 97); + width: 100%; + height: 2px; + } + + a { + font-weight: 500; + } + + .address, + .mail { + margin-top: 1rem; font-size: 0.8rem; -} - -.footerLogo img { - width: 60%; -} - -.footerLogo p { - text-align: left; -} - -.title { + font-weight: 400; + width: 75%; + } + + .mail { + color:var(--blue); + margin-bottom: 0.5rem; + } + + .social { + height: 2rem; + width: 2rem; + margin-top: 2rem; + margin-right: 1rem; + transition: 0.5s ease; + filter: invert(); + } + + .social:hover { + transform: scale(1.3); + } + + @media only screen and (min-width: 1000px) { + .first_section { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: flex-end; + } + + .address_container { + font-size: 0.9rem; + width: 35%; + } + + .address, + .mail { + margin-top: 2rem; + font-size: 0.9rem; + font-weight: 400; + width: 75%; + } + } + + .mail { font-weight: 600; -} -.links { + } + + .mailus { + display: block; + padding-top: 1rem; + color: rgb(176, 176, 245); + } + + .title { + font-size: 2rem; + font-weight: 700; + color: #5e72e4; + } + + .fheadingtext { + font-size: 1.1rem; + color: white; + margin-top: 4vh; + } + + .fparagraph { + font-size: 0.8rem; + font-weight: 300; + color: white; + } + + .newsletterinvite { display: flex; - flex-direction: column; - gap: 1rem; + flex-direction: row; + } + + .invite_container { + position: relative; + background-color: white; + padding: 0.5rem 1rem; + margin-top: 2vh; + border-radius: 5px; + } + + .invite_container input { font-size: 0.8rem; -} -.links > a:hover { - color: #2e85fe; -} -.socialMedia { + border: none; + padding: 0.5rem; + width: 12.5rem; + } + + .invite_container button { + border: none; + font-size: 0.8rem; + color: white; + background-color: #f6832a; + padding: 0.5rem 1.75rem; + border-radius: 3px; + } + + .invite_container button:hover { + background-color: #fd7915; + } + + input:focus, + select:focus, + textarea:focus, + button:focus { + outline: none; + } + + .newsletter { + width: 20rem; + } + + .newslettertext { + color: white; display: flex; - gap: 2rem; - font-size: x-large; -} -.legal { + flex-direction: row; + } + + .fs_rightside { display: flex; - gap: 1.5rem; - font-size: 0.8rem; -} -.copyRight { - font-size: 0.9rem; -} -@media screen and (max-width: 1000px) { - .container { - flex-direction: column; - align-items: center; - gap: 4rem; - } - - .footerLogo { - width: 100%; - max-width: 30rem; - align-items: center; - margin: 3rem; - } - - .footerLogo p { - text-align: center; - } - - .footerSection { - display: none; - } - .footer > hr { - display: none; - } - .socialMedia { - justify-content: center; - } - .legal { - justify-content: center; - flex-direction: column; - align-items: center; + } + + @media only screen and (min-width: 1000px) { + .right_side { + width: 30%; } - .copyRight { - text-align: center; + .left_links { + display: flex; } -} -@media screen and (max-width: 800px) { - .container { - gap: 2rem; + + .larger_screen { + display: flex; + flex-direction: row; + align-items: center; + margin-top: 0.5rem; } - - .footerLogo { - width: 19rem; + .newsletter { + width: 20rem; + text-align: right; } - - .footerLogo p { - display: none; + + .bottom_section { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; } -} -@media screen and (max-width: 380px) { - .socialMedia { - font-size: large; + } + + .bottomcopyright { + position: absolute; + bottom: 0; + color: black; + background-color: #E0EEFF; + width: 100%; + text-align: center; + padding: 5px 0px 5px 0px; + font-size: 0.6rem; + } + @media (max-width: 767px) { + .mobile_line_break { + display: block; } - - .footerLogo { - width: 15rem; + } + + @media (min-width: 768px) { + .mobile-line-break { + display: inline; } -} + } \ No newline at end of file diff --git a/src/modules/Public/Donation/components/Footer.tsx b/src/modules/Public/Donation/components/Footer.tsx index 3a7fd981a..ab5cc7426 100644 --- a/src/modules/Public/Donation/components/Footer.tsx +++ b/src/modules/Public/Donation/components/Footer.tsx @@ -1,124 +1,173 @@ +import React from "react"; import styles from "./Footer.module.css"; -import { footerData } from "../services/footerData"; import { Link } from "react-router-dom"; -import { - RiWhatsappFill, - RiTwitterFill, - RiInstagramFill, - RiLinkedinBoxFill, - RiYoutubeFill, - RiFacebookBoxFill -} from "react-icons/ri"; -export default function Footer() { - return ( -
-
-
- - mulearn - -
- {footerData.map((data, index) => { - return ( -
-

{data.name}

-
- {data.links.map(link => { - return ( - - {link.name} - - ); - })} -
-
- ); - })} +import waIcon from "../assets/footer/whatsapp.svg" +import twitterIcon from "../assets/footer/twitter.webp" +import instaIcon from "../assets/footer/instagram.webp" +import linkedInIcon from "../assets/footer/linkedin.webp" +import ytIcon from "../assets/footer/youtube.webp" +import fbIcon from "../assets/footer/facebook.webp" +import MulearnWhite from "../assets/footer/µLearn-white.webp" + + +function scrollTop() { + window.scrollTo({ + top: 0, + behavior: "smooth", + }); +} + +const Footer = () => { + return ( +
+
+
+
+ + + +
+ +

Terms and Condition

+ + +

Privacy Policy

+
-
-
+ + + +
+ +
+
+
+

+ Technopark Trivandrum, Kazhakkoottam, Trivandrum - 695581, + Kerala, India +

+ +

+ info@mulearn.org +

+
+
+ + {/*
+
+
+

Join Our Mailing List

+

+ Join Our Mailing List Be the first to know about upcoming + coding workshops, new coding tools, and other Mulearn related + news. +

+ +
+ +
+
-
- ); -} +
*/} +
+ +
+
+

µLearn Foundation | Copyright © 2023 All rights reserved.

+
+ + ); +}; + +export default Footer; \ No newline at end of file diff --git a/src/modules/Public/Donation/components/Navbar.module.css b/src/modules/Public/Donation/components/Navbar.module.css index 9f546d4a9..aee17792b 100644 --- a/src/modules/Public/Donation/components/Navbar.module.css +++ b/src/modules/Public/Donation/components/Navbar.module.css @@ -1,18 +1,24 @@ .LClandingPageNav { - position: absolute; + position: fixed; top: 0; width: 100%; - z-index: 1; + z-index: 2; display: flex; - justify-content: space-between; - padding: 3rem 5rem; + justify-content: space-around; + padding: 1rem 0rem; + gap: 10vw; + backdrop-filter:blur(30px); +} +.LClandingPageNav img{ + width: 32px; + height: 40px; } - .LClandingPageNav .navLinks, .LClandingPageNav .navLinks div { display: flex; align-items: center; - gap: 2rem; + gap: 3rem; + font-size: 1.1rem; } .LClandingPageNav .navLinks div { @@ -23,17 +29,19 @@ .LClandingPageNav .navLinks button { background: var(--blue); border-radius: var(--borderRadius); - padding: 0.5rem 1rem; - font-size: 0.8rem; + padding: .5rem 2rem; + font-size: 1.1rem; color: #fff; } -@media (width <=820px) { +@media (width <=800px) { .LClandingPageNav { - padding: 3rem 2rem; + justify-content: space-between; + padding: 2rem 2rem; } - .LClandingPageNav .navLinks { + .LClandingPageNav .navLinks div{ display: none; } + } diff --git a/src/modules/Public/Donation/components/Navbar.tsx b/src/modules/Public/Donation/components/Navbar.tsx index cdcbd4ad6..3ebdeb226 100644 --- a/src/modules/Public/Donation/components/Navbar.tsx +++ b/src/modules/Public/Donation/components/Navbar.tsx @@ -1,13 +1,13 @@ import styles from "./Navbar.module.css"; import { Link, useNavigate} from "react-router-dom"; - +import logo from "../assets/µ.png" export default function Navbar(){ const navigate = useNavigate(); return(