diff --git a/package-lock.json b/package-lock.json
index 8dd4151..621cc6b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,12 +14,18 @@
"axios": "^1.7.2",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
+ "dompurify": "^3.1.7",
+ "framer-motion": "^11.11.9",
+ "lottie-react": "^2.4.0",
"lucide-react": "^0.400.0",
"next": "^14.2.5",
"radix-ui": "^1.0.1",
"react": "^18.3.1",
+ "react-chartjs-2": "^5.2.0",
+ "react-circular-progressbar": "^2.1.0",
"react-dom": "^18.3.1",
"react-hook-form": "^7.52.1",
+ "react-icons": "^5.3.0",
"react-router-dom": "^6.25.0",
"react-spinners": "^0.14.1",
"react-toastify": "^10.0.5",
@@ -29,6 +35,8 @@
"zod": "^3.23.8"
},
"devDependencies": {
+ "@types/dompurify": "^3.0.5",
+ "@types/js-cookie": "^3.0.6",
"@types/node": "^20.14.9",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
@@ -43,7 +51,7 @@
"postcss": "^8.4.39",
"tailwindcss": "^3.4.4",
"typescript": "^5.2.2",
- "vite": "^5.3.1"
+ "vite": "^5.4.9"
}
},
"node_modules/@alloc/quick-lru": {
@@ -1075,6 +1083,13 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@kurkle/color": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz",
+ "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==",
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/@next/env": {
"version": "14.2.5",
"resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.5.tgz",
@@ -2548,208 +2563,224 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
- "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz",
+ "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
- "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz",
+ "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
- "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz",
+ "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
- "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz",
+ "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
- "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz",
+ "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
- "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz",
+ "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
- "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz",
+ "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
- "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz",
+ "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
- "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz",
+ "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==",
"cpu": [
"ppc64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
- "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz",
+ "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==",
"cpu": [
"riscv64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
- "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz",
+ "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==",
"cpu": [
"s390x"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
- "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz",
+ "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
- "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz",
+ "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
- "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz",
+ "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
- "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz",
+ "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==",
"cpu": [
"ia32"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
- "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz",
+ "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
@@ -2810,11 +2841,29 @@
"@babel/types": "^7.20.7"
}
},
+ "node_modules/@types/dompurify": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz",
+ "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/trusted-types": "*"
+ }
+ },
"node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/js-cookie": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz",
+ "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/lodash": {
"version": "4.17.7",
@@ -2863,6 +2912,13 @@
"@types/react": "*"
}
},
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "7.15.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz",
@@ -3358,6 +3414,19 @@
"node": ">=4"
}
},
+ "node_modules/chart.js": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.5.tgz",
+ "integrity": "sha512-CVVjg1RYTJV9OCC8WeJPMx8gsV8K6WIyIEQUE3ui4AR9Hfgls9URri6Ja3hyMVBbTF8Q2KFa19PE815gWcWhng==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@kurkle/color": "^0.3.0"
+ },
+ "engines": {
+ "pnpm": ">=8"
+ }
+ },
"node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -3570,6 +3639,12 @@
"node": ">=6.0.0"
}
},
+ "node_modules/dompurify": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz",
+ "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==",
+ "license": "(MPL-2.0 OR Apache-2.0)"
+ },
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -4095,6 +4170,31 @@
"url": "https://github.com/sponsors/rawify"
}
},
+ "node_modules/framer-motion": {
+ "version": "11.11.9",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.9.tgz",
+ "integrity": "sha512-XpdZseuCrZehdHGuW22zZt3SF5g6AHJHJi7JwQIigOznW4Jg1n0oGPMJQheMaKLC+0rp5gxUKMRYI6ytd3q4RQ==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -4543,6 +4643,25 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/lottie-react": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-2.4.0.tgz",
+ "integrity": "sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w==",
+ "license": "MIT",
+ "dependencies": {
+ "lottie-web": "^5.10.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/lottie-web": {
+ "version": "5.12.2",
+ "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz",
+ "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==",
+ "license": "MIT"
+ },
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -4912,9 +5031,10 @@
}
},
"node_modules/picocolors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -4944,9 +5064,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
- "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
+ "version": "8.4.47",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
+ "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
"funding": [
{
"type": "opencollective",
@@ -4961,10 +5081,11 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
- "picocolors": "^1.0.1",
- "source-map-js": "^1.2.0"
+ "picocolors": "^1.1.0",
+ "source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -5179,6 +5300,25 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-chartjs-2": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz",
+ "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "chart.js": "^4.1.1",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-circular-progressbar": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.1.0.tgz",
+ "integrity": "sha512-xp4THTrod4aLpGy68FX/k1Q3nzrfHUjUe5v6FsdwXBl3YVMwgeXYQKDrku7n/D6qsJA9CuunarAboC2xCiKs1g==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/react-dom": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
@@ -5206,6 +5346,15 @@
"react": "^16.8.0 || ^17 || ^18 || ^19"
}
},
+ "node_modules/react-icons": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz",
+ "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-refresh": {
"version": "0.14.2",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
@@ -5410,12 +5559,13 @@
}
},
"node_modules/rollup": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
- "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz",
+ "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/estree": "1.0.5"
+ "@types/estree": "1.0.6"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -5425,22 +5575,22 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.18.0",
- "@rollup/rollup-android-arm64": "4.18.0",
- "@rollup/rollup-darwin-arm64": "4.18.0",
- "@rollup/rollup-darwin-x64": "4.18.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
- "@rollup/rollup-linux-arm64-gnu": "4.18.0",
- "@rollup/rollup-linux-arm64-musl": "4.18.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
- "@rollup/rollup-linux-s390x-gnu": "4.18.0",
- "@rollup/rollup-linux-x64-gnu": "4.18.0",
- "@rollup/rollup-linux-x64-musl": "4.18.0",
- "@rollup/rollup-win32-arm64-msvc": "4.18.0",
- "@rollup/rollup-win32-ia32-msvc": "4.18.0",
- "@rollup/rollup-win32-x64-msvc": "4.18.0",
+ "@rollup/rollup-android-arm-eabi": "4.24.0",
+ "@rollup/rollup-android-arm64": "4.24.0",
+ "@rollup/rollup-darwin-arm64": "4.24.0",
+ "@rollup/rollup-darwin-x64": "4.24.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.24.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.24.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.24.0",
+ "@rollup/rollup-linux-arm64-musl": "4.24.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.24.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.24.0",
+ "@rollup/rollup-linux-x64-gnu": "4.24.0",
+ "@rollup/rollup-linux-x64-musl": "4.24.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.24.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.24.0",
+ "@rollup/rollup-win32-x64-msvc": "4.24.0",
"fsevents": "~2.3.2"
}
},
@@ -5535,9 +5685,10 @@
}
},
"node_modules/source-map-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
- "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -5985,14 +6136,15 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"node_modules/vite": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz",
- "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==",
+ "version": "5.4.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz",
+ "integrity": "sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"esbuild": "^0.21.3",
- "postcss": "^8.4.39",
- "rollup": "^4.13.0"
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
},
"bin": {
"vite": "bin/vite.js"
@@ -6011,6 +6163,7 @@
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
+ "sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
"terser": "^5.4.0"
@@ -6028,6 +6181,9 @@
"sass": {
"optional": true
},
+ "sass-embedded": {
+ "optional": true
+ },
"stylus": {
"optional": true
},
diff --git a/package.json b/package.json
index 66da343..492c9d7 100644
--- a/package.json
+++ b/package.json
@@ -16,12 +16,18 @@
"axios": "^1.7.2",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
+ "dompurify": "^3.1.7",
+ "framer-motion": "^11.11.9",
+ "lottie-react": "^2.4.0",
"lucide-react": "^0.400.0",
"next": "^14.2.5",
"radix-ui": "^1.0.1",
"react": "^18.3.1",
+ "react-chartjs-2": "^5.2.0",
+ "react-circular-progressbar": "^2.1.0",
"react-dom": "^18.3.1",
"react-hook-form": "^7.52.1",
+ "react-icons": "^5.3.0",
"react-router-dom": "^6.25.0",
"react-spinners": "^0.14.1",
"react-toastify": "^10.0.5",
@@ -31,6 +37,8 @@
"zod": "^3.23.8"
},
"devDependencies": {
+ "@types/dompurify": "^3.0.5",
+ "@types/js-cookie": "^3.0.6",
"@types/node": "^20.14.9",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
@@ -45,6 +53,6 @@
"postcss": "^8.4.39",
"tailwindcss": "^3.4.4",
"typescript": "^5.2.2",
- "vite": "^5.3.1"
+ "vite": "^5.4.9"
}
}
diff --git a/public/assets/todo_pending_animation.json b/public/assets/todo_pending_animation.json
new file mode 100644
index 0000000..2bca429
--- /dev/null
+++ b/public/assets/todo_pending_animation.json
@@ -0,0 +1 @@
+{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":"#eaedf1"},"fr":60,"ip":0,"op":240,"w":600,"h":600,"nm":"Scanning","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Rectangle Copy 10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[274,400.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[128,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Rectangle Copy 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[368.5,302.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[41,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 5","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Rectangle Copy 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[348.5,351.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[81,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 4","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Rectangle Copy 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249,351.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[78,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Rectangle Copy 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[270.5,302.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[121,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Rectangle 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[255,234.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[90,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Rectangle 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[299.89,304.75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[245.78,319.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":19,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.48627450980392156,0.3686274509803922,0.9803921568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Rectangle Copy 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[274,400.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[128,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Rectangle Copy 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[368.5,302.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[41,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 5","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Rectangle Copy 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[348.5,351.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[81,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 4","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Rectangle Copy 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249,351.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[78,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Rectangle Copy","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[270.5,302.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[121,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Rectangle","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[255,234.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[90,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Rectangle","sr":1,"ks":{"o":{"a":0,"k":60,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[299.89,304.75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[245.78,319.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":19,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.48627450980392156,0.3686274509803922,0.9803921568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Rectangle","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.376,"y":1},"o":{"x":0.275,"y":0},"t":0,"s":[300,485.50000000000006,0],"to":[0,-60,0],"ti":[0,0,0]},{"i":{"x":0.725,"y":1},"o":{"x":0.632,"y":0},"t":110,"s":[300,125.49999999999999,0],"to":[0,0,0],"ti":[0,-60,0]},{"t":220,"s":[300,485.50000000000006,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[300,9],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":4.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"bottom-grad","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":152,"s":[40]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":199,"s":[40]},{"t":218,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.374,"y":1},"o":{"x":0.274,"y":0},"t":1,"s":[300,463.5,0],"to":[0,-52.833,0],"ti":[0,-7.167,0]},{"i":{"x":0.726,"y":1},"o":{"x":0.621,"y":0},"t":111,"s":[300,146.5,0],"to":[0,7.167,0],"ti":[0,-60,0]},{"t":221,"s":[300,506.50000000000006,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,-100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[300,45],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.094,0.439,0.843,0.5,0.094,0.439,0.843,1,0.094,0.439,0.843,0,0,0.252,0.2,0.505,0.4,0.752,0.7,1,1],"ix":9}},"s":{"a":0,"k":[0,-22.5],"ix":5},"e":{"a":0,"k":[0,22.5],"ix":6},"t":1,"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"top-grad","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[40]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[40]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[0]},{"t":221,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.376,"y":1},"o":{"x":0.271,"y":0},"t":1,"s":[300,463.5,0],"to":[0,-60,0],"ti":[0,0,0]},{"i":{"x":0.725,"y":1},"o":{"x":0.632,"y":0},"t":111,"s":[300,103.49999999999999,0],"to":[0,0,0],"ti":[0,-60,0]},{"t":221,"s":[300,463.5,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[300,45],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.094,0.439,0.843,0.5,0.094,0.439,0.843,1,0.094,0.439,0.843,0,0,0.252,0.2,0.505,0.4,0.752,0.7,1,1],"ix":9}},"s":{"a":0,"k":[0,-22.5],"ix":5},"e":{"a":0,"k":[0,22.5],"ix":6},"t":1,"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"full","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,300,0],"ix":2},"a":{"a":0,"k":[300,300,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"i","pt":{"a":1,"k":[{"i":{"x":0.364,"y":1},"o":{"x":0.272,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[448.801,109],[153,109],[153,479.957],[448.801,479.957]],"c":true}]},{"i":{"x":0.73,"y":1},"o":{"x":0.631,"y":0},"t":110,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[448.801,109],[153,109],[153,129.957],[448.801,129.957]],"c":true}]},{"t":220,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[448.801,109],[153,109],[153,479.957],[448.801,479.957]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"w":600,"h":600,"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"trans","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,300,0],"ix":2},"a":{"a":0,"k":[300,300,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":600,"h":600,"ip":0,"op":3600,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/src/App.tsx b/src/App.tsx
index 0921ece..42b0cbb 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,22 +1,28 @@
-import './App.css';
-import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
-import Mentors from './pages/root/mentor';
+
+import { BrowserRouter, Routes, Route } from 'react-router-dom';
+import Dashboard from './pages/root/dashboard';
+import Mentors from './pages/root/mentor';
import Login from './pages/auth/Login';
-import Singup from './pages/auth/Singup';
-import ForgotPassword from './pages/auth/ForgotPassword';
+import Signup from './pages/auth/Singup';
+import ForgotPassword from './pages/auth/ForgotPassword';
import Student from './pages/student';
+import MainLayout from './pages/root/layout';
+import Mentordashboard from './pages/root/mentordashboard';
function App() {
return (
-
- } />
- } />
- } />
- } />
- } />
- } />
-
+
+
+ } />
+ }/>
+ } />
+ } />
+ } />
+ } />
+ } />
+
+
);
}
diff --git a/src/actions/planner_actions.ts b/src/actions/planner_actions.ts
new file mode 100644
index 0000000..a66ee00
--- /dev/null
+++ b/src/actions/planner_actions.ts
@@ -0,0 +1,122 @@
+"use server";
+
+import { getCookie } from "./cookie_actions";
+import { revalidateTag } from "next/cache";
+
+export const getPlanner = async () => {
+ const token = await getCookie("token");
+
+ try {
+ const res = await fetch(
+ `${process.env.NEXT_PUBLIC_STUDENT_API_BASE_URL}/api/planner/get`,
+ {
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json",
+ Cookie: `token=${token}`,
+ },
+ credentials: "include",
+ // cache: "force-cache",
+ next: {
+ tags: ["plannerData"],
+ },
+ }
+ );
+
+ const responseData = await res.json();
+
+ return responseData;
+ } catch (error: unknown) {
+ if (error instanceof Error) {
+ throw new Error(`Error fetching planner data: ${error.message}`);
+ } else {
+ throw new Error("An unknown error occurred while fetching planner data!");
+ }
+ }
+};
+
+export const createPlanner = async () => {
+ const token = await getCookie("token");
+
+ try {
+ const res = await fetch(
+ `${process.env.NEXT_PUBLIC_STUDENT_API_BASE_URL}/api/planner/create`,
+ {
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json",
+ Cookie: `token=${token}`,
+ },
+ credentials: "include",
+ }
+ );
+
+ const responseData = await res.json();
+
+ return responseData;
+ } catch (error: unknown) {
+ if (error instanceof Error) {
+ throw new Error(`Error creating planner: ${error.message}`);
+ } else {
+ throw new Error("An unknown error occurred while creating planner!");
+ }
+ }
+};
+
+export const updatePlanner = async () => {
+ const token = await getCookie("token");
+
+ try {
+ const res = await fetch(
+ `${process.env.NEXT_PUBLIC_STUDENT_API_BASE_URL}/api/planner/update`,
+ {
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json",
+ Cookie: `token=${token}`,
+ },
+ credentials: "include",
+ }
+ );
+
+ const responseData = await res.json();
+ revalidateTag("plannerData");
+
+ return responseData;
+ } catch (error: unknown) {
+ if (error instanceof Error) {
+ throw new Error(`Error creating planner: ${error.message}`);
+ } else {
+ throw new Error("An unknown error occurred while creating planner!");
+ }
+ }
+};
+
+export const allocateBackTopics = async () => {
+ const token = await getCookie("token");
+
+ try {
+ const res = await fetch(
+ `${process.env.NEXT_PUBLIC_STUDENT_API_BASE_URL}/api/planner/allocateTopics`,
+ {
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json",
+ Cookie: `token=${token}`,
+ },
+ credentials: "include",
+ }
+ );
+
+ const responseData = await res.json();
+ revalidateTag("plannerData");
+
+ return responseData;
+ } catch (error: unknown) {
+ if (error instanceof Error) {
+ throw new Error(`Error creating planner: ${error.message}`);
+ } else {
+ throw new Error("An unknown error occurred while creating planner!");
+ }
+ }
+};
diff --git a/src/apiClient/apiClient.ts b/src/apiClient/apiClient.ts
index 3abc716..ae45a5a 100644
--- a/src/apiClient/apiClient.ts
+++ b/src/apiClient/apiClient.ts
@@ -2,11 +2,14 @@ import axios from 'axios';
const apiClient = axios.create({
baseURL: import.meta.env.VITE_PUBLIC_ADMIN_API_BASE_URL,
+
withCredentials: true,
headers: {
'Content-Type': 'application/json',
},
+
});
+console.log(import.meta.env.VITE_PUBLIC_ADMIN_API_BASE_URL);
apiClient.interceptors.request.use(
(config) => {
diff --git a/src/assets/todo_pending_animation.json b/src/assets/todo_pending_animation.json
new file mode 100644
index 0000000..2bca429
--- /dev/null
+++ b/src/assets/todo_pending_animation.json
@@ -0,0 +1 @@
+{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":"#eaedf1"},"fr":60,"ip":0,"op":240,"w":600,"h":600,"nm":"Scanning","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Rectangle Copy 10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[274,400.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[128,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Rectangle Copy 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[368.5,302.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[41,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 5","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Rectangle Copy 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[348.5,351.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[81,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 4","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Rectangle Copy 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249,351.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[78,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Rectangle Copy 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[270.5,302.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[121,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Rectangle 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[255,234.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[90,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Rectangle 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[299.89,304.75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[245.78,319.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":19,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.48627450980392156,0.3686274509803922,0.9803921568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Rectangle Copy 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[274,400.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[128,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Rectangle Copy 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[368.5,302.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[41,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 5","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Rectangle Copy 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[348.5,351.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[81,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 4","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Rectangle Copy 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249,351.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[78,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy 2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Rectangle Copy","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[270.5,302.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[121,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle Copy","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Rectangle","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[255,234.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[90,25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":12.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Rectangle","sr":1,"ks":{"o":{"a":0,"k":60,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[299.89,304.75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[245.78,319.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":19,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.48627450980392156,0.3686274509803922,0.9803921568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Rectangle","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.376,"y":1},"o":{"x":0.275,"y":0},"t":0,"s":[300,485.50000000000006,0],"to":[0,-60,0],"ti":[0,0,0]},{"i":{"x":0.725,"y":1},"o":{"x":0.632,"y":0},"t":110,"s":[300,125.49999999999999,0],"to":[0,0,0],"ti":[0,-60,0]},{"t":220,"s":[300,485.50000000000006,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[300,9],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":4.5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.2,0.2,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"bottom-grad","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":152,"s":[40]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":199,"s":[40]},{"t":218,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.374,"y":1},"o":{"x":0.274,"y":0},"t":1,"s":[300,463.5,0],"to":[0,-52.833,0],"ti":[0,-7.167,0]},{"i":{"x":0.726,"y":1},"o":{"x":0.621,"y":0},"t":111,"s":[300,146.5,0],"to":[0,7.167,0],"ti":[0,-60,0]},{"t":221,"s":[300,506.50000000000006,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,-100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[300,45],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.094,0.439,0.843,0.5,0.094,0.439,0.843,1,0.094,0.439,0.843,0,0,0.252,0.2,0.505,0.4,0.752,0.7,1,1],"ix":9}},"s":{"a":0,"k":[0,-22.5],"ix":5},"e":{"a":0,"k":[0,22.5],"ix":6},"t":1,"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"top-grad","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[40]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[40]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[0]},{"t":221,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.376,"y":1},"o":{"x":0.271,"y":0},"t":1,"s":[300,463.5,0],"to":[0,-60,0],"ti":[0,0,0]},{"i":{"x":0.725,"y":1},"o":{"x":0.632,"y":0},"t":111,"s":[300,103.49999999999999,0],"to":[0,0,0],"ti":[0,-60,0]},{"t":221,"s":[300,463.5,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[300,45],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0,0.094,0.439,0.843,0.5,0.094,0.439,0.843,1,0.094,0.439,0.843,0,0,0.252,0.2,0.505,0.4,0.752,0.7,1,1],"ix":9}},"s":{"a":0,"k":[0,-22.5],"ix":5},"e":{"a":0,"k":[0,22.5],"ix":6},"t":1,"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"full","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,300,0],"ix":2},"a":{"a":0,"k":[300,300,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"i","pt":{"a":1,"k":[{"i":{"x":0.364,"y":1},"o":{"x":0.272,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[448.801,109],[153,109],[153,479.957],[448.801,479.957]],"c":true}]},{"i":{"x":0.73,"y":1},"o":{"x":0.631,"y":0},"t":110,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[448.801,109],[153,109],[153,129.957],[448.801,129.957]],"c":true}]},{"t":220,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[448.801,109],[153,109],[153,479.957],[448.801,479.957]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"w":600,"h":600,"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"trans","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[300,300,0],"ix":2},"a":{"a":0,"k":[300,300,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":600,"h":600,"ip":0,"op":3600,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/src/components/icons/AttachIcon.tsx b/src/components/icons/AttachIcon.tsx
new file mode 100644
index 0000000..8dddad2
--- /dev/null
+++ b/src/components/icons/AttachIcon.tsx
@@ -0,0 +1,23 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const AttachIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default AttachIcon;
diff --git a/src/components/icons/CallIcon.tsx b/src/components/icons/CallIcon.tsx
new file mode 100644
index 0000000..6c6db30
--- /dev/null
+++ b/src/components/icons/CallIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const CallIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default CallIcon;
diff --git a/src/components/icons/ChatIcon.tsx b/src/components/icons/ChatIcon.tsx
new file mode 100644
index 0000000..8e4ae8e
--- /dev/null
+++ b/src/components/icons/ChatIcon.tsx
@@ -0,0 +1,25 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const ChatIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default ChatIcon;
diff --git a/src/components/icons/ChatIcon3.tsx b/src/components/icons/ChatIcon3.tsx
new file mode 100644
index 0000000..9ff3006
--- /dev/null
+++ b/src/components/icons/ChatIcon3.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const ChatIcon3 = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default ChatIcon3;
diff --git a/src/components/icons/ClockIcon.tsx b/src/components/icons/ClockIcon.tsx
new file mode 100644
index 0000000..7809cd0
--- /dev/null
+++ b/src/components/icons/ClockIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const ClockIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default ClockIcon;
diff --git a/src/components/icons/ConferenceMeetingIcon.tsx b/src/components/icons/ConferenceMeetingIcon.tsx
new file mode 100644
index 0000000..670be82
--- /dev/null
+++ b/src/components/icons/ConferenceMeetingIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const ConferenceMeetingIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default ConferenceMeetingIcon;
diff --git a/src/components/icons/DashboardIcon.tsx b/src/components/icons/DashboardIcon.tsx
new file mode 100644
index 0000000..e8570ec
--- /dev/null
+++ b/src/components/icons/DashboardIcon.tsx
@@ -0,0 +1,19 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const DashboardIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default DashboardIcon;
diff --git a/src/components/icons/DateIcon.tsx b/src/components/icons/DateIcon.tsx
new file mode 100644
index 0000000..2ac1507
--- /dev/null
+++ b/src/components/icons/DateIcon.tsx
@@ -0,0 +1,24 @@
+import { cn } from '../../lib/utils';
+
+const DateIcon = ({ className }: { className?: string }) => {
+ return (
+
+ );
+};
+
+export default DateIcon;
diff --git a/src/components/icons/DownArrowIcon.tsx b/src/components/icons/DownArrowIcon.tsx
new file mode 100644
index 0000000..d000c48
--- /dev/null
+++ b/src/components/icons/DownArrowIcon.tsx
@@ -0,0 +1,16 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const DownArrowIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default DownArrowIcon;
diff --git a/src/components/icons/EfficiencyIcon.tsx b/src/components/icons/EfficiencyIcon.tsx
new file mode 100644
index 0000000..b09f43f
--- /dev/null
+++ b/src/components/icons/EfficiencyIcon.tsx
@@ -0,0 +1,33 @@
+import { cn } from "../../lib/utils";
+
+
+const EfficiencyIcon = ({ className }: { className?: string }) => {
+ return (
+
+ );
+};
+export default EfficiencyIcon
\ No newline at end of file
diff --git a/src/components/icons/ErrorBookIcon.tsx b/src/components/icons/ErrorBookIcon.tsx
new file mode 100644
index 0000000..9a654a5
--- /dev/null
+++ b/src/components/icons/ErrorBookIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const ErrorBookIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default ErrorBookIcon;
diff --git a/src/components/icons/GrowthMeterIcon.tsx b/src/components/icons/GrowthMeterIcon.tsx
new file mode 100644
index 0000000..8e3c24a
--- /dev/null
+++ b/src/components/icons/GrowthMeterIcon.tsx
@@ -0,0 +1,16 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const GrowthMeterIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default GrowthMeterIcon;
diff --git a/src/components/icons/LeftArrowIcon.tsx b/src/components/icons/LeftArrowIcon.tsx
new file mode 100644
index 0000000..4fd594d
--- /dev/null
+++ b/src/components/icons/LeftArrowIcon.tsx
@@ -0,0 +1,16 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const LeftArrowIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default LeftArrowIcon;
diff --git a/src/components/icons/LibertyIcon.tsx b/src/components/icons/LibertyIcon.tsx
new file mode 100644
index 0000000..75d26a2
--- /dev/null
+++ b/src/components/icons/LibertyIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const LibertyIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default LibertyIcon;
diff --git a/src/components/icons/MenuIcon.tsx b/src/components/icons/MenuIcon.tsx
new file mode 100644
index 0000000..6a49868
--- /dev/null
+++ b/src/components/icons/MenuIcon.tsx
@@ -0,0 +1,30 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const MenuIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default MenuIcon;
diff --git a/src/components/icons/MicIcon.tsx b/src/components/icons/MicIcon.tsx
new file mode 100644
index 0000000..69d9017
--- /dev/null
+++ b/src/components/icons/MicIcon.tsx
@@ -0,0 +1,34 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const MicIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default MicIcon;
diff --git a/src/components/icons/NotificationIcon.tsx b/src/components/icons/NotificationIcon.tsx
new file mode 100644
index 0000000..d64b56e
--- /dev/null
+++ b/src/components/icons/NotificationIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const NotificationIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default NotificationIcon;
diff --git a/src/components/icons/OneOnOneMeetingIcon.tsx b/src/components/icons/OneOnOneMeetingIcon.tsx
new file mode 100644
index 0000000..a112310
--- /dev/null
+++ b/src/components/icons/OneOnOneMeetingIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const OneOnOneMeetingIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default OneOnOneMeetingIcon;
diff --git a/src/components/icons/PlannerIcon.tsx b/src/components/icons/PlannerIcon.tsx
new file mode 100644
index 0000000..d6f2b2b
--- /dev/null
+++ b/src/components/icons/PlannerIcon.tsx
@@ -0,0 +1,25 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const PlannerIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default PlannerIcon;
diff --git a/src/components/icons/Questionicon.tsx b/src/components/icons/Questionicon.tsx
new file mode 100644
index 0000000..6e22c7c
--- /dev/null
+++ b/src/components/icons/Questionicon.tsx
@@ -0,0 +1,24 @@
+import { cn } from '../../lib/utils';
+
+const QuestionIcon = ({ className }: { className?: string }) => {
+ return (
+
+ );
+};
+
+export default QuestionIcon;
diff --git a/src/components/icons/QuizIcon.tsx b/src/components/icons/QuizIcon.tsx
new file mode 100644
index 0000000..71263a6
--- /dev/null
+++ b/src/components/icons/QuizIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const QuizIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default QuizIcon;
diff --git a/src/components/icons/RequestMeetingIcon.tsx b/src/components/icons/RequestMeetingIcon.tsx
new file mode 100644
index 0000000..bec1311
--- /dev/null
+++ b/src/components/icons/RequestMeetingIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const RequestMeetingIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default RequestMeetingIcon;
diff --git a/src/components/icons/RightArrowIcon.tsx b/src/components/icons/RightArrowIcon.tsx
new file mode 100644
index 0000000..46a7b93
--- /dev/null
+++ b/src/components/icons/RightArrowIcon.tsx
@@ -0,0 +1,28 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const RightArrowIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default RightArrowIcon;
diff --git a/src/components/icons/SendIcon.tsx b/src/components/icons/SendIcon.tsx
new file mode 100644
index 0000000..e785446
--- /dev/null
+++ b/src/components/icons/SendIcon.tsx
@@ -0,0 +1,24 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const SendIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default SendIcon;
diff --git a/src/components/icons/StudyRoomIcon.tsx b/src/components/icons/StudyRoomIcon.tsx
new file mode 100644
index 0000000..178d280
--- /dev/null
+++ b/src/components/icons/StudyRoomIcon.tsx
@@ -0,0 +1,17 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const StudyRoomIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default StudyRoomIcon;
diff --git a/src/components/icons/TimeIcon.tsx b/src/components/icons/TimeIcon.tsx
new file mode 100644
index 0000000..a1786ce
--- /dev/null
+++ b/src/components/icons/TimeIcon.tsx
@@ -0,0 +1,21 @@
+import { cn } from "../../lib/utils";
+
+const TimeIcon = ({ className }: { className?: string }) => {
+ return (
+
+ );
+};
+
+export default TimeIcon;
diff --git a/src/components/icons/TrackerIcon.tsx b/src/components/icons/TrackerIcon.tsx
new file mode 100644
index 0000000..c40106d
--- /dev/null
+++ b/src/components/icons/TrackerIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const TrackerIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default TrackerIcon;
diff --git a/src/components/icons/TrophyIcon.tsx b/src/components/icons/TrophyIcon.tsx
new file mode 100644
index 0000000..df709ea
--- /dev/null
+++ b/src/components/icons/TrophyIcon.tsx
@@ -0,0 +1,28 @@
+import { cn } from '../../lib/utils';
+
+const TrophyIcon = ({ className }: { className?: string }) => {
+ return (
+
+ );
+};
+export default TrophyIcon;
diff --git a/src/components/icons/UpArrowIcon.tsx b/src/components/icons/UpArrowIcon.tsx
new file mode 100644
index 0000000..e0a5fab
--- /dev/null
+++ b/src/components/icons/UpArrowIcon.tsx
@@ -0,0 +1,16 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const UpArrowIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default UpArrowIcon;
diff --git a/src/components/icons/VideoChatIcon.tsx b/src/components/icons/VideoChatIcon.tsx
new file mode 100644
index 0000000..ffaa2ea
--- /dev/null
+++ b/src/components/icons/VideoChatIcon.tsx
@@ -0,0 +1,16 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const VideoChatIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default VideoChatIcon;
diff --git a/src/components/icons/WorkshopIcon.tsx b/src/components/icons/WorkshopIcon.tsx
new file mode 100644
index 0000000..42ab8d7
--- /dev/null
+++ b/src/components/icons/WorkshopIcon.tsx
@@ -0,0 +1,20 @@
+import { IIconProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const WorkshopIcon = ({ className, ...props }: IIconProps) => {
+ return (
+
+ );
+};
+
+export default WorkshopIcon;
diff --git a/src/components/index.ts b/src/components/index.ts
new file mode 100644
index 0000000..95c8afb
--- /dev/null
+++ b/src/components/index.ts
@@ -0,0 +1,60 @@
+
+import Logo from "./shared/Logo";
+import Header from "./shared/Header";
+import SidebarDesktop from "./shared/SidebarDesktop";
+import Sidebar from "./shared/Sidebar";
+
+// import SemiRadialChart from "./charts/SemiRadialChart";
+// import RadialBarChart from "./charts/RadialBarChart";
+// import BarChart from "./charts/BarChart";
+// import MonthlyReportChart from "./charts/MonthlyReportChart";
+// import OverallReportChart from "./charts/OverallReportChart";
+// import DonutChart from "./charts/DonutChart";
+
+import RightArrowIcon from "./icons/RightArrowIcon";
+import LeftArrowIcon from "./icons/LeftArrowIcon";
+import NotificationIcon from "./icons/NotificationIcon";
+import ChatIcon from "./icons/ChatIcon";
+import VideoChatIcon from "./icons/VideoChatIcon";
+import RequestMeetingIcon from "./icons/RequestMeetingIcon";
+import UpArrowIcon from "./icons/UpArrowIcon";
+import DownArrowIcon from "./icons/DownArrowIcon";
+import AttachIcon from "./icons/AttachIcon";
+import CallIcon from "./icons/CallIcon";
+import ChatIcon3 from "./icons/ChatIcon3";
+import MenuIcon from "./icons/MenuIcon";
+import MicIcon from "./icons/MicIcon";
+import SendIcon from "./icons/SendIcon";
+import OneOnOneMeetingIcon from "./icons/OneOnOneMeetingIcon";
+import ConferenceMeetingIcon from "./icons/ConferenceMeetingIcon";
+import ClockIcon from "./icons/ClockIcon";
+
+export {
+ Logo,
+ Header,
+ SidebarDesktop,
+ Sidebar,
+ // SemiRadialChart,
+ // RadialBarChart,
+ // BarChart,
+ // MonthlyReportChart,
+ // OverallReportChart,
+ // DonutChart,
+ RightArrowIcon,
+ LeftArrowIcon,
+ NotificationIcon,
+ ChatIcon,
+ VideoChatIcon,
+ RequestMeetingIcon,
+ UpArrowIcon,
+ DownArrowIcon,
+ AttachIcon,
+ CallIcon,
+ ChatIcon3,
+ MenuIcon,
+ MicIcon,
+ SendIcon,
+ OneOnOneMeetingIcon,
+ ConferenceMeetingIcon,
+ ClockIcon,
+};
diff --git a/src/components/shared/Goals.tsx b/src/components/shared/Goals.tsx
new file mode 100644
index 0000000..fc44050
--- /dev/null
+++ b/src/components/shared/Goals.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+
+const Goals: React.FC = () => {
+ return (
+
+
Subscribe Goal
+
+ - LinkedIn: 53%
+ - Facebook: 53%
+ - Instagram: 53%
+ - Twitter: 65%
+
+
+
Weekly Progress: 82.3%
+
+
+ );
+};
+
+export default Goals;
diff --git a/src/components/shared/Graph.tsx b/src/components/shared/Graph.tsx
new file mode 100644
index 0000000..ebba4a5
--- /dev/null
+++ b/src/components/shared/Graph.tsx
@@ -0,0 +1,53 @@
+import { Chart, CategoryScale, LinearScale, LineElement, PointElement, LineController, Title, Tooltip, Legend } from 'chart.js';
+import { useEffect, useRef } from 'react';
+
+Chart.register(
+ CategoryScale, // Register the category scale for x-axis
+ LinearScale, // Register the linear scale for y-axis
+ LineElement,
+ PointElement,
+ LineController,
+ Title,
+ Tooltip,
+ Legend
+);
+
+const Graph: React.FC = () => {
+ const chartRef = useRef(null);
+ const chartInstanceRef = useRef(null);
+
+ useEffect(() => {
+ const ctx = chartRef.current?.getContext('2d');
+
+ if (ctx && chartInstanceRef.current === null) {
+ // Create the chart instance
+ chartInstanceRef.current = new Chart(ctx, {
+ type: 'line',
+ data: {
+ labels: ['January', 'February', 'March', 'April'],
+ datasets: [{
+ label: 'Example Dataset',
+ data: [65, 59, 80, 81],
+ fill: false,
+ borderColor: 'rgba(75,192,192,1)',
+ }],
+ },
+ options: {
+ responsive: true,
+ },
+ });
+ }
+
+ // Cleanup on component unmount
+ return () => {
+ if (chartInstanceRef.current) {
+ chartInstanceRef.current.destroy();
+ chartInstanceRef.current = null;
+ }
+ };
+ }, []);
+
+ return ;
+};
+
+export default Graph;
diff --git a/src/components/shared/Header.tsx b/src/components/shared/Header.tsx
new file mode 100644
index 0000000..f6b9611
--- /dev/null
+++ b/src/components/shared/Header.tsx
@@ -0,0 +1,25 @@
+import { FiSearch } from 'react-icons/fi';
+
+const Header = () => {
+ return (
+
+
+
+
+

+
Robert Pattinson
+
+
+ );
+};
+
+export default Header;
diff --git a/src/components/shared/Loader.tsx b/src/components/shared/Loader.tsx
new file mode 100644
index 0000000..9b42651
--- /dev/null
+++ b/src/components/shared/Loader.tsx
@@ -0,0 +1,11 @@
+import { Loader2 } from "lucide-react";
+
+const Loader = () => {
+ return (
+
+
+
+ );
+};
+
+export default Loader;
diff --git a/src/components/shared/Logo.tsx b/src/components/shared/Logo.tsx
new file mode 100644
index 0000000..cab5282
--- /dev/null
+++ b/src/components/shared/Logo.tsx
@@ -0,0 +1,34 @@
+import Image from "next/image";
+
+import { TLogoProps } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+const Logo = ({
+ fullLogoWidth,
+ fullLogoHeight,
+ fullLogoClassName,
+ smallLogoWidth,
+ smallLogoHeight,
+ smallLogoClassName,
+}: TLogoProps) => {
+ return (
+ <>
+
+
+ >
+ );
+};
+
+export default Logo;
diff --git a/src/components/shared/ProjectList.tsx b/src/components/shared/ProjectList.tsx
new file mode 100644
index 0000000..0bbcc31
--- /dev/null
+++ b/src/components/shared/ProjectList.tsx
@@ -0,0 +1,26 @@
+import React from 'react';
+
+const ProjectsList: React.FC = () => {
+ const projects = [
+ { name: 'Dating App Dev', deadline: '20 October', priority: 'HIGH' },
+ { name: 'Dashboard UX', deadline: '20 October', priority: 'MEDIUM' },
+ // Add more projects as needed
+ ];
+
+ return (
+
+ );
+};
+
+export default ProjectsList;
diff --git a/src/components/shared/Sidebar.tsx b/src/components/shared/Sidebar.tsx
new file mode 100644
index 0000000..630cac8
--- /dev/null
+++ b/src/components/shared/Sidebar.tsx
@@ -0,0 +1,18 @@
+import React from "react";
+import SidebarDesktop from "./SidebarDesktop"; // Ensure this path is correct
+import { userSidebarLinks } from "../../helpers/constants"; // Adjust path if necessary
+
+type SidebarProps = {
+ meetingsLength: number; // TypeScript prop definition
+};
+
+const Sidebar: React.FC = ({ meetingsLength }) => {
+ return (
+
+ );
+};
+
+export default Sidebar;
diff --git a/src/components/shared/SidebarDesktop.tsx b/src/components/shared/SidebarDesktop.tsx
new file mode 100644
index 0000000..dc87530
--- /dev/null
+++ b/src/components/shared/SidebarDesktop.tsx
@@ -0,0 +1,66 @@
+"use client";
+import { Logo } from "../../components";
+import { TSidebarLink } from "../../helpers/types";
+import { cn } from "../../lib/utils";
+
+type SidebarDesktopProps = {
+ sidebar: TSidebarLink[];
+ meetingsLength: number;
+};
+
+const SidebarDesktop: React.FC = ({ sidebar, meetingsLength }) => {
+ return (
+
+ );
+};
+
+export default SidebarDesktop;
diff --git a/src/components/shared/StatsCards.tsx b/src/components/shared/StatsCards.tsx
new file mode 100644
index 0000000..bc979f2
--- /dev/null
+++ b/src/components/shared/StatsCards.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+
+const StatsCards: React.FC = () => {
+ const cards = [
+ { title: 'Total Open Deal', count: '360+', percent: '+23%' },
+ { title: 'Task In Progress', count: '122', percent: '+18.3%' },
+ { title: 'Completed Task', count: '564', percent: '-18.3%' },
+ ];
+
+ return (
+
+ {cards.map((card, idx) => (
+
+
{card.title}
+
{card.count}
+
{card.percent}
+
+ ))}
+
+ );
+};
+
+export default StatsCards;
diff --git a/src/components/shared/UnpaidInvoices.tsx b/src/components/shared/UnpaidInvoices.tsx
new file mode 100644
index 0000000..b7fa9b4
--- /dev/null
+++ b/src/components/shared/UnpaidInvoices.tsx
@@ -0,0 +1,34 @@
+import React from 'react';
+
+const UnpaidInvoices: React.FC = () => {
+ const invoices = [
+ { project: 'Macbook Air M1', customer: 'Arlene McCoy', total: '$1,650.00', status: 'Confirmed' },
+ { project: 'Macbook Air M1', customer: 'Arlene McCoy', total: '$1,650.00', status: 'Rejected' },
+ // Add more rows as needed
+ ];
+
+ return (
+
+
+
+ | Project Name |
+ Customer Name |
+ Sub Total |
+ Status |
+
+
+
+ {invoices.map((invoice, idx) => (
+
+ | {invoice.project} |
+ {invoice.customer} |
+ {invoice.total} |
+ {invoice.status} |
+
+ ))}
+
+
+ );
+};
+
+export default UnpaidInvoices;
diff --git a/src/components/shared/WeeklyProgress.tsx b/src/components/shared/WeeklyProgress.tsx
new file mode 100644
index 0000000..3227c9a
--- /dev/null
+++ b/src/components/shared/WeeklyProgress.tsx
@@ -0,0 +1,30 @@
+import React from 'react';
+import { CircularProgressbar, buildStyles } from 'react-circular-progressbar';
+import 'react-circular-progressbar/dist/styles.css';
+
+const WeeklyProgress: React.FC = () => {
+ const percentage = 82.3;
+
+ return (
+
+
Weekly Progress
+
+
+
+
+
Daily Progress
+
82.3%
+
+
+ );
+};
+
+export default WeeklyProgress;
diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx
index 51e507b..9122baa 100644
--- a/src/components/ui/avatar.tsx
+++ b/src/components/ui/avatar.tsx
@@ -3,7 +3,7 @@
import * as React from "react"
import * as AvatarPrimitive from "@radix-ui/react-avatar"
-import { cn } from "@/lib/utils"
+import { cn } from "../../lib/utils"
const Avatar = React.forwardRef<
React.ElementRef,
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
index 0ba4277..4106711 100644
--- a/src/components/ui/button.tsx
+++ b/src/components/ui/button.tsx
@@ -2,7 +2,7 @@ import * as React from "react"
import { Slot } from "@radix-ui/react-slot"
import { cva, type VariantProps } from "class-variance-authority"
-import { cn } from "@/lib/utils"
+import { cn } from "../../lib/utils"
const buttonVariants = cva(
"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx
index 4498de6..6038c25 100644
--- a/src/components/ui/checkbox.tsx
+++ b/src/components/ui/checkbox.tsx
@@ -4,7 +4,7 @@ import * as React from "react";
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
import { Check } from "lucide-react";
-import { cn } from "@/lib/utils";
+import { cn } from "../../lib/utils";
const Checkbox = React.forwardRef<
React.ElementRef,
diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx
index ea53f38..3ee35c7 100644
--- a/src/components/ui/input.tsx
+++ b/src/components/ui/input.tsx
@@ -1,6 +1,6 @@
import * as React from "react";
-import { cn } from "@/lib/utils";
+import { cn } from "../../lib/utils";
export interface InputProps
extends React.InputHTMLAttributes {
diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx
index 5341821..9438023 100644
--- a/src/components/ui/label.tsx
+++ b/src/components/ui/label.tsx
@@ -4,7 +4,7 @@ import * as React from "react"
import * as LabelPrimitive from "@radix-ui/react-label"
import { cva, type VariantProps } from "class-variance-authority"
-import { cn } from "@/lib/utils"
+import { cn } from "../../lib/utils"
const labelVariants = cva(
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
diff --git a/src/components/ui/progress.tsx b/src/components/ui/progress.tsx
index c14d51f..6ecc463 100644
--- a/src/components/ui/progress.tsx
+++ b/src/components/ui/progress.tsx
@@ -3,7 +3,7 @@
import * as React from "react";
import * as ProgressPrimitive from "@radix-ui/react-progress";
-import { cn } from "@/lib/utils";
+import { cn } from "../../lib/utils";
interface ICustomProgressProps
extends React.ComponentPropsWithoutRef {
diff --git a/src/helpers/constants/efficiency.ts b/src/helpers/constants/efficiency.ts
new file mode 100644
index 0000000..3b81ee0
--- /dev/null
+++ b/src/helpers/constants/efficiency.ts
@@ -0,0 +1,73 @@
+import { EfficiencyOption } from ".";
+export const efficiencyOptions: EfficiencyOption[] = [
+ {
+ max: 30,
+ label: '0-30%',
+ progressBarColor: 'bg-red-500',
+ textColor: 'text-red-500',
+ },
+ {
+ min: 30,
+ max: 50,
+ label: '30-50%',
+ progressBarColor: 'bg-orange-500',
+ textColor: 'text-orange-500',
+ },
+ {
+ min: 50,
+ max: 70,
+ label: '50-70%',
+ progressBarColor: 'bg-yellow-500',
+ textColor: 'text-yellow-500',
+ },
+ {
+ min: 70,
+ max: 90,
+ label: '70-90%',
+ progressBarColor: 'bg-orange-300',
+ textColor: 'text-orange-300',
+ },
+ {
+ min: 90,
+ label: '90-100%',
+ progressBarColor: 'bg-green-400',
+ textColor: 'text-green-400',
+ },
+];
+
+
+function findEfficiencyOption(
+ efficiency: number
+): EfficiencyOption | undefined {
+ if (isNaN(efficiency)) {
+ throw new Error("Efficiency must be a number.");
+ }
+
+ return efficiencyOptions.find((opt) => {
+ if (opt.min !== undefined && opt.max !== undefined) {
+ return efficiency >= opt.min && efficiency < opt.max;
+ } else if (opt.min !== undefined) {
+ return efficiency >= opt.min;
+ } else if (opt.max !== undefined) {
+ return efficiency < opt.max;
+ }
+ return false;
+ });
+}
+
+export function getProgressBarColor(efficiency: number): string {
+ const option = findEfficiencyOption(efficiency);
+ if (!option) {
+ return 'bg-[#ffffff]';
+ }
+
+ return option.progressBarColor;
+}
+export function getTextColor(efficiency: number): string {
+ const option = findEfficiencyOption(efficiency);
+ if (!option) {
+ return 'text-red-500'
+ }
+
+ return option.textColor;
+}
diff --git a/src/helpers/constants/index.ts b/src/helpers/constants/index.ts
new file mode 100644
index 0000000..9013d33
--- /dev/null
+++ b/src/helpers/constants/index.ts
@@ -0,0 +1,190 @@
+import { TSidebarLink } from "../types";
+
+import DashboardIcon from "../../components/icons/DashboardIcon";
+import LibertyIcon from "../../components/icons/LibertyIcon";
+
+export const userSidebarLinks: TSidebarLink[] = [
+ {
+ label: "dashboard",
+ icon: DashboardIcon,
+ href: "/",
+ },
+ {
+ label: "student",
+ icon: LibertyIcon,
+ href: "/student",
+ },
+ {
+ label: "mentor",
+ icon: LibertyIcon,
+ href: "/mentordashboard",
+ },
+ // {
+ // label: "planner",
+ // icon: PlannerIcon,
+ // href: "/planner",
+ // },
+ // {
+ // label: "tracker",
+ // icon: TrackerIcon,
+ // href: "/tracker",
+ // },
+ // {
+ // label: "chat",
+ // icon: ChatIcon3,
+ // href: "/chat",
+ // },
+ // {
+ // label: "quizzes",
+ // icon: QuizIcon,
+ // href: "/quizzes",
+ // },
+ // {
+ // label: "errorbook",
+ // icon: ErrorBookIcon,
+ // href: "/error-book",
+ // },
+ // {
+ // label: "growth meter",
+ // icon: GrowthMeterIcon,
+ // href: "/growth-meter",
+ // },
+ // {
+ // label: "workshops",
+ // icon: WorkshopIcon,
+ // href: "/workshops",
+ // },
+ // {
+ // label: "library",
+ // icon: LibertyIcon,
+ // href: "/library",
+ // },
+ // {
+ // label: "study room",
+ // icon: StudyRoomIcon,
+ // href: "/study-room",
+ // },
+];
+
+export const moodEmojis = [
+ {
+ moodImg: "/assets/icons/sad_emoji.png",
+ mood_id: "sad-emoji",
+ mood: "sad",
+ },
+ {
+ moodImg: "/assets/icons/unhappy_emoji.png",
+ mood_id: "unhappy-emoji",
+ mood: "unhappy",
+ },
+ {
+ moodImg: "/assets/icons/neutral_emoji.png",
+ mood_id: "neutral-emoji",
+ mood: "neutral",
+ },
+ {
+ moodImg: "/assets/icons/smiling_emoji.png",
+ mood: "smiling",
+ mood_id: "smiling-emoji",
+ },
+ {
+ moodImg: "/assets/icons/laughing_emoji.png",
+ mood_id: "laughing-emoji",
+ mood: "laughing",
+ },
+];
+
+export const manageAccountTabs = [
+ {
+ id: "personal-info",
+ label: "Personal Info",
+ },
+ {
+ id: "study-progress",
+ label: "Study Progress",
+ },
+ // {
+ // id: "subject-overview",
+ // label: "Subject Overview",
+ // },
+ // {
+ // id: "your-mentor",
+ // label: "Your Mentor",
+ // },
+];
+
+export const subscriptionPlanningBenefits = [
+ {
+ label: "goal setting & tracking",
+ },
+ {
+ label: "schedule builder",
+ },
+ {
+ label: "to-do list & reminders",
+ },
+ {
+ label: "subject, chapter & topic tracking",
+ },
+];
+
+export const subscriptionExpertBenefits = [
+ {
+ label: "connect with a mentor",
+ },
+ {
+ label: "live & on-demand workshops",
+ },
+];
+export const subscriptionLearningBenefits = [
+ {
+ label: "growth meter",
+ },
+ {
+ label: "points & levels",
+ },
+ {
+ label: "know your mistakes",
+ },
+];
+export interface EfficiencyOption {
+ min?: number;
+ max?: number;
+ label: string;
+ progressBarColor: string;
+ textColor: string;
+}
+export const SUBJECT_COLORS = {
+ Maths: "bg-[#107FFC30]",
+ Chemistry: "bg-[#72EFDD4A]",
+ Physics: "bg-[#A36AF53D]",
+};
+
+export const chatPageTabs = [
+ // {
+ // title: "chat",
+ // id: "chat",
+ // desktopView: true,
+ // },
+ {
+ title: "meetings",
+ id: "meetings",
+ desktopView: true,
+ },
+ {
+ title: "request meeting",
+ id: "requestMeeting",
+ desktopView: false,
+ },
+];
+
+export const meetingTabs = [
+ {
+ id: "upcoming",
+ label: "upcoming",
+ },
+ {
+ id: "done",
+ label: "done",
+ },
+];
diff --git a/src/helpers/types/index.ts b/src/helpers/types/index.ts
index 620caf5..fd7965c 100644
--- a/src/helpers/types/index.ts
+++ b/src/helpers/types/index.ts
@@ -1,5 +1,5 @@
import React, { SVGProps } from "react";
-
+import { SUBJECT_COLORS } from "../constants";
export type TContainerProps = {
children: React.ReactNode;
className?: string;
@@ -349,3 +349,13 @@ export type PlannerDataProps = {
export type DataProps = {
data: PlannerDataProps;
};
+
+export type Subject = keyof typeof SUBJECT_COLORS;
+
+export type TMeetingsProps = {
+ rescheduled: {
+ isRescheduled: boolean;
+ date: Date;
+ time: string;
+ };
+}
\ No newline at end of file
diff --git a/src/helpers/utils/index.ts b/src/helpers/utils/index.ts
new file mode 100644
index 0000000..6c91001
--- /dev/null
+++ b/src/helpers/utils/index.ts
@@ -0,0 +1,181 @@
+import DOMPurify from "dompurify";
+import { SUBJECT_COLORS } from "../constants";
+import { Subject } from "../types";
+
+const daysOfWeek = [
+ "Sunday",
+ "Monday",
+ "Tuesday",
+ "Wednesday",
+ "Thursday",
+ "Friday",
+ "Saturday",
+];
+const monthsOfYear = [
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec",
+];
+
+export function getTodaysDay() {
+ const today = new Date();
+ const dayOfWeek = daysOfWeek[today.getDay()];
+
+ return `${dayOfWeek}`;
+}
+
+export function getMonthDate(date: Date): string {
+ const dayOfMonth: string = String(date.getDate()).padStart(2, "0");
+ const month: string = monthsOfYear[date.getMonth()];
+
+ return `${month} ${dayOfMonth}`;
+}
+
+export function getMonthDateForProd(date: Date): string {
+ // Get the time in milliseconds since the epoch (UTC)
+ const utcTime = date.getTime();
+
+ // Define the IST offset in milliseconds (5 hours and 30 minutes)
+ const istOffset = 5.5 * 60 * 60 * 1000;
+
+ // Calculate the IST time in milliseconds
+ const istTime = utcTime + istOffset;
+
+ // Create a new Date object for IST time
+ const istDate = new Date(istTime);
+
+ // Extract the day of the month and the month name in IST
+ const dayOfMonth: string = String(istDate.getUTCDate()).padStart(2, "0");
+ const month: string = monthsOfYear[istDate.getUTCMonth()];
+
+ return `${month} ${dayOfMonth}`;
+}
+
+export function getTodaysFormattedDate() {
+ const today = new Date();
+ const dayOfMonth = String(today.getDate()).padStart(2, "0");
+ const month = monthsOfYear[today.getMonth()];
+ const year = today.getFullYear();
+
+ return `${dayOfMonth} ${month} ${year}`;
+}
+
+export function getFormattedDate(date: Date): string {
+ const dayOfMonth: string = String(date.getDate()).padStart(2, "0");
+ const month: string = monthsOfYear[date.getMonth()];
+ const year: number = date.getFullYear();
+
+ return `${dayOfMonth} ${month} ${year}`;
+}
+
+export function getFormattedDateForProd(date: Date): string {
+ const istOffset = 5 * 60 * 60 * 1000 + 30 * 60 * 1000; // IST is UTC +5:30
+ const istDate = new Date(date.getTime() + istOffset);
+
+ const dayOfMonth: string = String(istDate.getDate()).padStart(2, "0");
+ const month: string = monthsOfYear[istDate.getMonth()];
+ const year: number = istDate.getFullYear();
+
+ return `${dayOfMonth} ${month} ${year}`;
+}
+
+export function convertDateString(inputDate: Date): string {
+ const utcDate = new Date(inputDate);
+
+ // Convert to IST by adding 5 hours and 30 minutes
+ const istDate = new Date(utcDate.getTime() + 5.5 * 60 * 60 * 1000);
+
+ // Format the date
+ const day = istDate.getDate().toString().padStart(2, "0");
+ const month = (istDate.getMonth() + 1).toString().padStart(2, "0"); // Months are 0-indexed
+ const year = istDate.getFullYear();
+
+ // Format the date as DD-MM-YYYY
+ return `${day}-${month}-${year}`;
+}
+
+export function formatDate(dateString: Date): string {
+ const date = new Date(dateString);
+ const day = date.getDate();
+ const month = date.toLocaleString("default", { month: "short" });
+ return `${day} ${month}`;
+}
+
+export function calculateDaysLeft(meetingDate: Date): number {
+ // Get the current date
+ const currentDate = new Date();
+
+ // Calculate the difference in milliseconds
+ const differenceInMs = meetingDate.getTime() - currentDate.getTime();
+
+ // Convert milliseconds to days
+ const daysLeft = Math.ceil(differenceInMs / (1000 * 60 * 60 * 24));
+
+ return daysLeft;
+}
+
+export function capitalizeFirstLetter(
+ sentence: string | undefined
+): string | undefined {
+ if (!sentence) {
+ return sentence;
+ }
+
+ return sentence.charAt(0).toUpperCase() + sentence.slice(1);
+}
+
+export const formatTime = (seconds: number) => {
+ const days = Math.floor(seconds / (24 * 60 * 60))
+ .toString()
+ .padStart(2, "0");
+ const hours = Math.floor((seconds % (24 * 60 * 60)) / (60 * 60))
+ .toString()
+ .padStart(2, "0");
+ const minutes = Math.floor((seconds % (60 * 60)) / 60)
+ .toString()
+ .padStart(2, "0");
+ const secs = (seconds % 60).toString().padStart(2, "0");
+
+ return `${days}d : ${hours}h : ${minutes}m : ${secs}s`;
+};
+
+export const sanitizedHtml = (htmlString: string) => {
+ DOMPurify.sanitize(htmlString);
+ return htmlString;
+};
+
+export const getColorBySubject = (subject: Subject): string => {
+ return SUBJECT_COLORS[subject] || "bg-[#B0BEC5]";
+};
+
+export function isMoodButtonDisabled(lastMoodDate: String) {
+ if (!lastMoodDate) return false;
+
+ const today = new Date();
+ const formattedToday = today.toISOString().split("T")[0];
+
+ return lastMoodDate === formattedToday;
+}
+
+export const loadRazorpayScript = () => {
+ return new Promise((resolve) => {
+ const script = document.createElement("script");
+ script.src = "https://checkout.razorpay.com/v1/checkout.js";
+ script.onload = () => {
+ resolve(true);
+ };
+ script.onerror = () => {
+ resolve(false);
+ };
+ document.body.appendChild(script);
+ });
+};
diff --git a/src/pages/auth/Login.tsx b/src/pages/auth/Login.tsx
index 22b1f5e..b6bdefe 100644
--- a/src/pages/auth/Login.tsx
+++ b/src/pages/auth/Login.tsx
@@ -23,8 +23,6 @@ const Login = () => {
const handleSubmit = async (e: any) => {
e.preventDefault();
setIsLoggingIn(true);
- setIsLoading(true)
- setLoginSuccess(true)
try {
const response = await apiClient.post(`/api/auth/admin/login`, {
@@ -33,17 +31,23 @@ const Login = () => {
});
if (response.status === 200) {
- navigate('/mentors');
-
+ const { token } = response.data;
+ if (token) {
+ localStorage.setItem("token", token);
+ console.log('Token saved:', token);
+ navigate('/');
+ } else {
+ throw new Error('Token not provided in the response');
+ }
}
- } catch (error: any) {
- setError(error);
-
+ } catch (error: any) {
+ setError(error.response?.data?.message || error.message);
} finally {
setIsLoggingIn(false);
setIsLoading(false)
}
};
+
return (
<>
{isLoading ? (
diff --git a/src/pages/root/dashboard/index.tsx b/src/pages/root/dashboard/index.tsx
new file mode 100644
index 0000000..82ccb30
--- /dev/null
+++ b/src/pages/root/dashboard/index.tsx
@@ -0,0 +1,35 @@
+import React, { Suspense } from 'react';
+import { Header } from '../../../components';
+import Loader from '../Loader';
+
+const Dashboard: React.FC = () => {
+ return (
+
+
+
+
+
+
+
+ }>
+ {/* {} */}
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Dashboard;
diff --git a/src/pages/root/layout.tsx b/src/pages/root/layout.tsx
new file mode 100644
index 0000000..a2e3c2c
--- /dev/null
+++ b/src/pages/root/layout.tsx
@@ -0,0 +1,27 @@
+import React from "react";
+import Sidebar from "../root/sidebar/index";
+// import MobileMenu from "../../components/shared/MobileMenu";
+
+const MainLayout: React.FC<{ children: React.ReactNode }> = ({ children }) => {
+ const meetingsLength = 0;
+
+ return (
+ <>
+ <>
+
+ {/* */}
+ >
+ >
+ );
+};
+
+export default MainLayout;
diff --git a/src/pages/root/mentordashboard/index.tsx b/src/pages/root/mentordashboard/index.tsx
new file mode 100644
index 0000000..369691d
--- /dev/null
+++ b/src/pages/root/mentordashboard/index.tsx
@@ -0,0 +1,45 @@
+import React from 'react';
+import { Header } from '../../../components';
+import StatsCards from '../../../components/shared/StatsCards';
+import Graph from '../../../components/shared/Graph';
+import UnpaidInvoices from '../../../components/shared/UnpaidInvoices';
+import Goals from '../../../components/shared/Goals';
+import ProjectsList from '../../../components/shared/ProjectList';
+import WeeklyProgress from '../../../components/shared/WeeklyProgress';
+
+const Mentordashboard: React.FC = () => {
+ return (
+
+
+
+
+
Hii,
+
Welcome back
+
+
+
+
+ );
+};
+
+export default Mentordashboard;
diff --git a/src/pages/root/sidebar/index.tsx b/src/pages/root/sidebar/index.tsx
new file mode 100644
index 0000000..d27933e
--- /dev/null
+++ b/src/pages/root/sidebar/index.tsx
@@ -0,0 +1,18 @@
+import React from "react";
+import SidebarDesktop from "../../../components/shared/SidebarDesktop"; // Ensure this path is correct
+import { userSidebarLinks } from "../../../helpers/constants"; // Adjust path if necessary
+
+type SidebarProps = {
+ meetingsLength: number; // TypeScript prop definition
+};
+
+const Sidebar: React.FC = ({ meetingsLength }) => {
+ return (
+
+ );
+};
+
+export default Sidebar;
diff --git a/vite.config.ts b/vite.config.ts
index d36c010..a36e829 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -9,4 +9,7 @@ export default defineConfig({
"@": path.resolve(__dirname, "./src"),
},
},
+ define: {
+ 'process.env': {},
+ },
})
\ No newline at end of file