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..f9e25fa 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,22 +1,30 @@ -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'; +import StudentDashboard from './pages/root/studentDashboard.tsx'; 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

+ +
+

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..5ab574b --- /dev/null +++ b/src/components/shared/Header.tsx @@ -0,0 +1,27 @@ +import { FiSearch } from 'react-icons/fi'; + +const Header = () => { + return ( +
+ {/* Search Section */} +
+
+ + +
+
+ + {/* Avatar and User Name Section */} +
+ User + 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 ( + <> + Leadlly_logo + Leadlly_logo + + ); +}; + +export default Logo; diff --git a/src/components/shared/MentorDetails.tsx b/src/components/shared/MentorDetails.tsx new file mode 100644 index 0000000..c9a356e --- /dev/null +++ b/src/components/shared/MentorDetails.tsx @@ -0,0 +1,93 @@ +import React, { useEffect, useState } from 'react'; +import apiClient from '../../apiClient/apiClient'; + + + +interface Mentor { + _id: string; + firstname: string; + lastname: string; + email: string; + phone: { + personal: number; + other: number | null; + }; + address: { + addressLine: string; + pincode: string; + country: string; + }; + about: { + dateOfBirth: string; + gender: string; + }; + academic: { + schoolOrCollegeName: string; + schoolOrCollegeAddress: string; + }; + preference: { + standard: string[]; + competitiveExam: string[]; + }; + status: string; + students: { + id: string; + firstname: string; + lastname: string; + email: string; + }[]; +} +const MentorDetails: React.FC = () => { + + const [mentors, setMentors] = useState([]); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + + const fetchMentors = async () => { + setLoading(true); + try { + const response = await apiClient.get(`/api/mentor/getmentor`); + if (response.data.success) { + setMentors(response.data.mentors); + } else { + setError(response.data.error); + } + } catch (error) { + setError(error as string); + } + setLoading(false); + }; + useEffect(() => { + fetchMentors(); + }, []); + + return ( +
+ + + + + + + + + + + {mentors.map((mentor, idx) => ( + + + + + + + ))} + +
Mentor's NameEmailStatusGender
{mentor.firstname} {mentor.lastname}{mentor.email || "N/A"}{mentor.status}{mentor.about?.gender || "N/A"}
+
+ + + ); +}; + +export default MentorDetails; diff --git a/src/components/shared/ProjectList.tsx b/src/components/shared/ProjectList.tsx new file mode 100644 index 0000000..742f1f0 --- /dev/null +++ b/src/components/shared/ProjectList.tsx @@ -0,0 +1,38 @@ +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 ( +
+

Projects List

+
    + {projects.map((project, idx) => ( +
  • +
    +

    {project.name}

    + + {project.priority} + +
    +

    Deadline: {project.deadline}

    +
  • + ))} +
+
+ ); +}; + +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..e1b83b4 --- /dev/null +++ b/src/components/shared/SidebarDesktop.tsx @@ -0,0 +1,127 @@ +"use client"; +import { useState } from "react"; +import { Logo } from "../../components"; +import { TSidebarLink } from "../../helpers/types"; +import { cn } from "../../lib/utils"; + +type SidebarProps = { + sidebar: TSidebarLink[]; + meetingsLength: number; +}; + +const Sidebar: React.FC = ({ sidebar, meetingsLength }) => { + const [isOpen, setIsOpen] = useState(false); + + const toggleSidebar = () => { + setIsOpen(!isOpen); + }; + + return ( + <> + {/* Toggle Button for Mobile and Tablet View */} + + + {/* Mobile and Tablet Sidebar */} + + + {/* Desktop Sidebar */} + + + ); +}; + +export default Sidebar; 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/StudentDetails.tsx b/src/components/shared/StudentDetails.tsx new file mode 100644 index 0000000..c41a0e0 --- /dev/null +++ b/src/components/shared/StudentDetails.tsx @@ -0,0 +1,99 @@ +import React, { useEffect, useState } from 'react'; +import apiClient from '../../apiClient/apiClient'; + + + +interface Student { + _id: string; + firstname: string; + lastname: string; + email: string; + academic: { +standard: string + }; + about: { + dateOfBirth: string; + gender: string; + }; + freeTrial: { + availed: boolean; + active: boolean; + dateOfActivation: string; // You can change this to Date if needed + dateOfDeactivation: string | null; // Can be null if the trial isn't deactivated + }; +} +const StudentDetails: React.FC = () => { + const [students, setStudents] = useState([]); + + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + const fetchStudents = async () => { + setLoading(true); + try { + const response = await apiClient.get(`/api/student/getstudents`); + if (response.data.success) { + setStudents(response.data.students); // Corrected this line to set 'students' from response + } else { + setError(response.data.error); + } + } catch (error) { + setError(error as string); + } + setLoading(false); + }; + + useEffect(() => { + fetchStudents(); + }, []); + + return ( +
+
+ + + + + + + + + + + + {students?.length > 0 ? ( + students.map((student, idx) => ( + + + + + + + + )) + ) : ( + + + + )} + +
Mentor's NameEmailStandardGenderFree Trial
+ {student.firstname} {student.lastname} + {student.email || "N/A"}{student.academic?.standard || "N/A"}{student.about?.gender || "N/A"} + {student.freeTrial.active ? "Active" : "Inactive"} +
+ {student.freeTrial.dateOfActivation + ? `Activated on: ${new Date(student.freeTrial.dateOfActivation).toLocaleDateString()}` + : "Not Activated"} +
+ No students found +
+
+
+ + + + ); +}; + +export default StudentDetails; 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..9d7f69b --- /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: "/studentdashboard", + }, + { + 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..f943d9c --- /dev/null +++ b/src/pages/root/layout.tsx @@ -0,0 +1,22 @@ +import React from "react"; +import Sidebar from "../root/sidebar/index"; + +const MainLayout: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const meetingsLength = 0; + + return ( +
+ {/* Desktop Sidebar */} +
+ +
+ + {/* Content Area */} +
+ {children} +
+
+ ); +}; + +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..628b355 --- /dev/null +++ b/src/pages/root/mentordashboard/index.tsx @@ -0,0 +1,50 @@ +import React from 'react'; +import { Header } from '../../../components'; +import StatsCards from '../../../components/shared/StatsCards'; +import Graph from '../../../components/shared/Graph'; +import MentorDetails from '../../../components/shared/MentorDetails'; +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 MENTOR Dashboard

+
+
+ +
+ +
+
+ +
+ + +
+
+ + {/* Grid Section */} +
+ + +
+
+
+ + + ); +}; + +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/src/pages/root/studentDashboard.tsx/index.tsx b/src/pages/root/studentDashboard.tsx/index.tsx new file mode 100644 index 0000000..ff2413b --- /dev/null +++ b/src/pages/root/studentDashboard.tsx/index.tsx @@ -0,0 +1,43 @@ + +import { Header } from '../../../components'; +import StatsCards from '../../../components/shared/StatsCards'; +import Graph from '../../../components/shared/Graph'; +import Goals from '../../../components/shared/Goals'; +import WeeklyProgress from '../../../components/shared/WeeklyProgress'; +import StudentDetails from '../../../components/shared/StudentDetails'; +// import ProjectsList from '../../../components/shared/ProjectList'; + +const studentDashboard = () => { + return ( +
+
+
+
+
+
+ +
+

Hii,

+

Welcome to Student Dashboard

+
+
+ +
+ +
+
+ +
+ + +
+
+
+
+ +
+
+ ) +} + +export default studentDashboard; \ No newline at end of file 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